воскресенье, 23 сентября 2018 г.

Сборка RAID-массива на контроллере LSI MegaSAS в Linux

В прошлом я уже писал ряд заметок про RAID-контроллеры семейства LSI MegaSAS - Intel RS2WC040 и Intel RSBL040, которые используются у меня на работе:
Иногда приходится менять диски, подключенные к аппаратным RAID-контроллерам. Замену диска при помощи mfiutil во FreeBSD я уже описывал, а аналогичная задача в Linux решается при помощи утилиты megacli, которая доступна в стороннем репозитории. Процедура замены дисков у меня до автоматизма не доведена, т.к. менять их приходится не часто. Поэтому я завёл для себя страницу в wiki, в которой делал заметки, чтобы не пришлось вспоминать команды и последовательность действий в следующий раз. Несколько раз я исправлял ошибки в заметке и даже дополнил её описанием решения проблемы с добавлением диска, который ранее уже состоял в другом RAID-массиве. Наконец, заметка дозрела до состояния, пригодного к публикации.

Установка утилиты

Установить утилиту megacli в Debian можно из неофициального репозитория HwRAID. Например, чтобы подключить репозиторий в Debian Stretch, нужно добавить в файл /etc/apt/sources.list такую строчку:
deb http://hwraid.le-vert.net/debian stretch main
Установим в систему GPG-ключ для проверки подлинности репозитория при помощи команды:
# wget -O - https://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | apt-key add -
Теперь можно обновить список пакетов, доступных для установки из репозиториев:
# apt-get update
И установить утилиту mecacli для управления RAID-контроллером:
# apt-get install megacli

Просмотр информации о RAID-контроллере

Чтобы просмотреть модель, серийный номер, настройки RAID-контроллера:
# megacli -AdpAllInfo -aAll

Диагностика

Смотрим список и состояние RAID-массивов в поле Sate:
# megacli -LdInfo -Lall -aALL
Если там Degraded, значит массив развалился. Смотрим, есть ли строчки Firmware state с состоянием Failed:
# megacli -PdList -a0
Если есть, можно посмотреть состояние диск по SMART. Для этого в выводе команды смотрим идентификаторы дисков в поле Device Id. Дальше указывая эти идентификаторы можно увидеть состояние SMART каждого из дисков и определить его серийный номер:
# smartctl -a -d megaraid,4 /dev/sda
# smartctl -a -d megaraid,5 /dev/sda
# smartctl -a -d megaraid,7 /dev/sda
# smartctl -a -d megaraid,6 /dev/sda

Диск исправен - запуск перестроения массива

Если диск исправен, можно попробовать перестроить массив. Для этого находим значения полей Enclosure Device ID и Slot Number у неисправного диска и выполняем для него команду запуска перестроения массива. В примере ниже используются значения 252 и 3:
# megacli -PdRbld -Start -PhysDrv[252:3] -a0
Наблюдать за состоянием перестроения массива можно при помощи команды:
# megacli -PdRbld -ShowProg -PhysDrv [252:3] -a0

Диск неисправен - замена диска

Если диск неисправен, его нужно заменить. Помечаем его как отключенный:
# megacli -PdOffline -PhysDrv [252:3] -a0
Затем - как отсутствующий в массиве:
# megacli -PdMarkMissing -PhysDrv [252:3] -a0
И теперь - как подготовленный к удалению из системы:
# megacli -PdPrpRmv -PhysDrv [252:3] -a0
Неисправный диск можно подсветить светодиодом:
# megacli -PdLocate -start -PhysDrv [252:3] -a0
Если индикация не заработала, можно попробовать починить её при помощи следующей команды:
# megacli -AdpSetProp \{UseDiskActivityforLocate -1\} -aALL
Заменяем диск (в случае SAS это можно сделать на горячую, если по светодиодным индикаторам видно, какой из дисков неактивен).

Когда новый диск вставлен, убираем подсветку светодиодом:
# megacli -PdLocate -stop -PhysDrv [252:3] -a0
После замены диска смотрим, каких дисков не хватает в RAID-массиве:
# megacli -PdGetMissing -a0
                                     
    Adapter 0 - Missing Physical drives

    No.   Array   Row   Size Expected
    0     1       1     428199 MB

Exit Code: 0x00
Вставляем новый диск в пустующее место в массиве:
# megacli -PdReplaceMissing -PhysDrv [252:3] -array1 -row1 -a0
Если диск не вставляется и выводится ошибка следующего вида:
Adapter: 0: Failed to replace Missing PD at Array 1, Row 1.

FW error description: 
 The specified device is in a state that doesn't support the requested command.  

Exit Code: 0x32
То можно проверить текущее состояние прошивки диска:
# megacli -PdInfo -PhysDrv [252:3] -a0
Если в строке Firmware state отображается состояние JBOD, то исправить это состояние можно следующим образом:
# megacli -PdMakeGood -PhysDrv[252:3] -Force -a0
Если же в строке Firmware state отображается состояние Unconfigured(good), Spun Up, но в строке Foreign State отображается состояние Foreign, то надо просканировать наличие дисков, переставленных из других RAID-контроллеров и снять у таких дисков отметку о других контроллерах:
# megacli -CfgForeign -Scan -aALL
# megacli -CfgForeign -Сlear -aALL
Включаем новый диск в работу массива:
# megacli -PdRbld -Start -PhysDrv [252:3] -a0
Посмотреть продвижение процесса перестроения можно так:
# megacli -PdRbld -ShowProg -PhysDrv [252:3] -a0

Подробнее:

воскресенье, 16 сентября 2018 г.

Multiarch в Debian Stretch

На свежеустановленной системе Debian Stretch столкнулся с проблемой при запуске 32-битного двоичного исполняемого файла в 64-битной системе:
# ./cfgfmt.linux -tptag.dat -sip ata0025459496ab.txt ata0025459496ab
-su: ./cfgfmt.linux: Нет такого файла или каталога
# file cfgfmt.linux 
cfgfmt.linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.0.0, stripped
И тут я вспомнил о том, что нужно включить multiarch - мультиархитектурность, которая позволяет запускать исполняемые файлы совместимых архитектур в операционной системе, которая обычно расчитана на поддержку только какой-либо одной конкретной архитектуры. Например, моя операционная система расчитана на архитектуру amd64, однако с поддержкой мультиархитектурности имеется возможность запуска приложений для совместимой с ней архитектуры i386.

Для добавления дополнительной совместимой архитектуры i386 в операционную систему архитектуры amd64 понадобится выполнить следующую команду:
# dpkg --add-architecture i386
Текущую архитектуру можно посмотреть такой командой:
# dpgk --print-architecture
Список совместимых архитектур, поддержка которых включена в системе, можно посмотреть при помощи такой команды:
# dpkg --print-foreign-architectures
Для получения возможности устанавливать пакеты архитектуры i386 из репозиториев понадобится настроить менеджер пакетов APT. Для этого зададим основную архитектуру и список всех используемых архитектур, создав файл /etc/apt/apt.conf.d/arch со следующим содержимым:
APT::Architecture "amd64";
APT::Architectures "amd64,i386";
Обновим список доступных к установке пакетов из репозиториев:
# apt-get update
Для запуска двоичных файлов, скомпилированных для архитектуры i386, нужно как минимум установить стандартную библиотеку поддержки языка Си:
# apt-get install libc6-i386
Пробуем выполнить первоначальную команду ещё раз:
# ./cfgfmt.linux -tptag.dat -sip ata0025459496ab.txt ata0025459496ab
На этот раз ошибок нет.

воскресенье, 9 сентября 2018 г.

Flash-плеер в Debian Stretch

Чуть больше года назад я уже писал заметку Flash-плагин для Chromium и Iceweasel/Firefox в Debian, в которой чинил флеш-плеер в Debian Jessie. Я пропустил тот момент, когда из репозитория Debian исчезли пакеты со скриптами для установки и обновления флеш-плеера. В моей системе, обновлённой до Stretch, всё ещё присутствовали эти пакеты и поэтому я продолжал считать, что они всё ещё есть в репозиториях. Однако, в свежеустановленной системе Debian Stretch эти пакеты установить из репозиториев не удалось. И если решить проблему с установкой флеш-плеера для Firefox удалось довольно быстро, то над аналогичным решением для Chromium пришлось поломать голову. Результатом своих изысков и спешу поделиться.

Flash-плагин NPAPI в Iceweasel


В Debian Stretch браузер Iceweasel более ничем не отличается от браузера Firefox, т.к. Debian и Mozilla договорились об использовании бренда Firefox вместо Iceweasel. Если в вашей системе всё ещё установлен Iceweasel, можете установить вместо него Firefox, а Iceweasel удалить.

Flash-плагин NPAPI в Firefox


Если браузер ещё не установлен в системе, сделать это можно такой командой:
# apt-get install firefox-esr firefox-esr-l10n-ru
Скачиваем с официального сайта Adobe файл flash_player_npapi_linux.x86_64.tar.gz Для этого заходим на официальную страницу Adobe, переходим по ссылке внизу Adobe Flash Player, переходим по ссылке Нужен проигрыватель Flash Player для другого компьютера?, в выпадающем списке «Шаг 1» вместо «Выберите операционную систему» выбираем «Linux (64-бит)», в выпадающем списке «Шаг 2» вместо «Выберите версию» выбираем «FP 30.0 for Linux 64-bit (tar.gz) - NPAPI» и жмём на кнопку «Загрузить».

Далее по пользователем root перейдём в каталог /usr/lib и создадим каталог для разделяемой библиотеки Flash-плеера:
# cd /usr/lib
# mkdir flashplugin-nonfree
# cd flashplugin-nonfree
Извлечём разделяемую библиотеку из скачанного архива:
# tar xzvf /home/stupin/Downloads/flash_player_npapi_linux.x86_64.tar.gz libflashplayer.so
Поменяем владельца библиотеки и права доступа к ней:
# chown root:root libflashplayer.so 
# chmod u=rw,go=r libflashplayer.so
Добавим разделяемую библиотеку в список альтернативных версий флеш-плагина для браузеров семейства Mozilla:
# update-alternatives --quiet --install /usr/lib/mozilla/plugins/flash-mozilla.so flash-mozilla.so /usr/lib/flashplugin-nonfree/libflashplayer.so 50
И выберем эту альтернативу в качестве текущей используемой:
# update-alternatives --set flash-mozilla.so /usr/lib/flashplugin-nonfree/libflashplayer.so

Flash-плагин PPAPI в Chromium

Если браузер ещё не установлен в системе, сделать это можно такой командой:
# apt-get install chromium chromium-l10n
Скачиваем с официального сайта Adobe файл flash_player_npapi_linux.x86_64.tar.gz Для этого заходим на официальную страницу Adobe, переходим по ссылке внизу Adobe Flash Player, переходим по ссылке Нужен проигрыватель Flash Player для другого компьютера?, в выпадающем списке «Шаг 1» вместо «Выберите операционную систему» выбираем «Linux (64-бит)», в выпадающем списке «Шаг 2» вместо «Выберите версию» выбираем «FP 30.0 for Linux 64-bit (tar.gz) - PPAPI» и жмём на кнопку «Загрузить».

Далее по пользователем root перейдём в каталог /usr/lib и создадим каталог для разделяемой библиотеки Flash-плеера:
# cd /usr/lib
# mkdir pepperflashplugin-nonfree
# cd pepperflashplugin-nonfree
Извлечём разделяемую библиотеку из скачанного архива:
# tar xzvf /home/stupin/Downloads/flash_player_ppapi_linux.x86_64.tar.gz libpepflashplayer.so
Поменяем владельца библиотеки и права доступа к ней:
# chown root:root libpepflashplayer.so 
# chmod u=rw,go=r libpepflashplayer.so
Извлечём файл manifest.json, чтобы посмотреть версию скачанного плагина:
# tar xzvf /home/stupin/Downloads/flash_player_ppapi_linux.x86_64.tar.gz manifest.json
Смотрим версию скачанного плагина и удаляем этот файл - он нам больше не понадобится:
# grep version manifest.json 
  "version": "30.0.0.154",
Открываем файл /etc/chromium.d/default-flags и вписываем вниз файла опции, которые указывают путь к плагину и его версию:
export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so --ppapi-flash-version=30.0.0.154"
Версию указывать необходимо, т.к. в противном случае определяется версия 11.x и некоторые флеш-приложения отказываются работать, требуя обновить флеш-плеер.

Теперь нужно завершить браузер, завершить текущий сеанс (выйти из графической оболочки). Это тоже необходимо сделать, т.к. в противном случае изменения из отредактированного файла не будут применены к текущему сеансу и настроенные в этом файле переменные окружения в текущем сеансе сохранят свои прежние значения.

После повторного входа можно запустить браузер и перейти по ссылке chrome://version/ или chrome://flash/ и убедиться, что в строчке Flash или Flash plugin соответственно фигурируют установленные версия плагина и путь к нему.

Использованные материалы

воскресенье, 2 сентября 2018 г.

Настройка кэширующего DNS-сервера BIND в связке с openresolv

Обнаружил, что заметка Настройка кэширующего DNS-сервера BIND в связке с resolvconf в новых релизах Debian больше не работает. Вспомнил об аналоге resolvconf под названием openresolv, который я когда-то нашёл, но воспользоваться которым пока не доводилось. Решил попробовать и openresolv заработал как надо. Спешу поделиться рецептом.

Первым делом установим openresolv:
# apt-get install openresolv
Приведём его файл конфигурации /etc/resolvconf.conf к следующему виду:
resolv_conf=/etc/resolv.conf
name_servers=127.0.0.1
named_options=/var/run/named/named.options
Обновим файлы с DNS-серверами при помощи следующей команды:
# resolvconf -u
В файле /var/run/named/named.options можно увидеть фрагмент конфигруации BIND, которую можно подключить к основной конфигурации. В моём случае он выглядит следующим образом:
# Generated by resolvconf
forward first;
forwarders {
 109.195.144.4;
 5.3.3.3;
 81.30.199.5;
 81.30.199.94;
};
Чтобы включить этот фрагмент в конфигурацию BIND, впишем в файл /etc/bind9/named.conf.options одну строчку:
include "/var/run/named/named.options";
Ещё раз обновим файлы с DNS-серверами при помощи команды:
# resolvconf -u
В процессе обновления BIND будет автоматически перезапущен, так что в его файл конфигурации будет вписан актуальный список вышестоящих рекурсивных DNS-серверов.

Список интерфейсов, с которых взяты DNS-серверы, можно узнать при помощи следующей команды:
# resolvconf -i
В моём случае она вывела такой список:
ppp0 vlan3
Список DNS-серверов, полученных через эти интерфейсы, можно узнать при помощи такой команды:
# resolvconf -l
В моём случае вывод был таким:
# resolv.conf from ppp0
# Generated by ppp.ip-up for ppp0
nameserver 109.195.144.4
nameserver 5.3.3.3

# resolv.conf from vlan3
# resolv.conf for vlan3
domain ipoe3.ufanet.ru
nameserver 81.30.199.5
nameserver 81.30.199.94