воскресенье, 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