Ставим Debian Stretch + жизнь без systemd

Используем пакеты, расширяющие возможности оборудования
Аватара пользователя
Zyxmon
Администратор
Сообщения: 1333
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 27 июл 2017, 21:46

Я опишу как с помощью Entware пакета debootstrap поставить недавно вышедший дистрибутив Debian Stretch. Установка может пройти нормально, а может упасть (в логе debootstrap.log последние строки содержат)

Код: Выделить всё

Failed to generate randomized : Invalid argument
dpkg: error processing package systemd (--install);

Установка падает при выполнении postinst скрипта пакета systemd. В этом случае придется немножко поплясать с бубном. Процесс установки не зависит от архитектуры и демонстрируется НАСе QNAP на armv7.

Можно, конечно, запустить debootstarp скрипт на ББ, и потом перенести все на embedded систему, но "нормальные герои всегда идут в обход". Итак, установим пакет debootstrap, в файле `/opt/bin/install-debian` пропишем `DISTRO=stretch`, зададим как и в случае Jessie если нужно другие параметры. Нам нужно разбить установку на 2 этапа, чтобы "пошаманить" немного в середине установки. Для этого нужно задать ключ `--foreign`. Можно сделать это задав `VARIANT=--foreign` или прямо при вызове скрипта debootstrap из install-debian.
Запустим установку `install-debian` - на самом деле выполниться только первый этап.
После окончания этапа выполним `/opt/etc/init.d/S99debian start` и "зайдем внутрь chroot среды" командой `start-debian`. Посмотрим, где у нас скачанные пакеты systemd*

Код: Выделить всё

I have no name!@QNAP231:/# cat /debootstrap/debpaths | grep systemd
libsystemd0 /var/cache/apt/archives/libsystemd0_232-25+deb9u1_armhf.deb
systemd /var/cache/apt/archives/systemd_232-25+deb9u1_armhf.deb
systemd-sysv /var/cache/apt/archives/systemd-sysv_232-25+deb9u1_armhf.deb

Установим systemd и systemd-sysv с флагом --force-all

Код: Выделить всё

I have no name!@QNAP231:/# dpkg -i --force-all /var/cache/apt/archives/systemd_232-25+deb9u1_armhf.deb
Selecting previously unselected package systemd.
dpkg: regarding .../systemd_232-25+deb9u1_armhf.deb containing systemd, pre-dependency problem:
 systemd pre-depends on libc6 (>= 2.8)
  libc6 is not installed.
....

После этого в директории `/var/lib/dpkg/info` удалим руками postinst (лучше все) скрипты systemd (rm systemd.post*; rm systemd-sysv.post*). Теперь у нас не будет падать second-stage!
Запустим второй этап

Код: Выделить всё

I have no name!@QNAP231:/# /debootstrap/debootstrap --second-stage
I: Keyring file not available at /usr/share/keyrings/debian-archive-keyring.gpg; switching to https mirror https://deb.debian.org/debian
I: Installing core packages...
....

После окончания установки выйдем из chroot среды. Дальше инструкция повторяет старую (после выполнение `install-debian`) - [Entware-3x] Устанавливаем Debian (chroot среду) по выбору и используем совместно с Entware

PS Желающие могут автоматизировать (полу)установку systemd (определение полного пути к deb и удаление post*)! :P

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1333
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 27 июл 2017, 21:47

Жизнь без systemd или запуск служб Debian автоматически

Не стоит начинать Holly Wars на тему systemd - это хорошо или плохо. Таких обсуждение много в интернете. Просто констатируем, что в среде chroot systemd не работает (и даже мешает установке Stretch). Поэтому способ запуска служб Debian, предложенный ранее будет работать не для всех служб. Нужно механизм запуска демонов изменить. Вариантов замены несколько.

0. Можно ничего не делать, если нужные Вам службы debian запускаются (не требуют systemd).
1. Можно заменить systemd на sysvinit. Инструкций в интернете море. На chroot варианте не проверялось, но проблем не видно. Запуск служб остается старым.
2. Можно использовать supervisor (фактически стандарт для запуска служб в контейнерах docker). Преимущество этого подхода - для большинства служб конфигурации расписаны (для docker). Недостаток - supervisor написан на python и "жирноват" для embedded устройств.
3. Можно использовать альтернативные способы запуска служб debian. Потребуется ручное допиливание.
Проиллюстрирую на примере runit.
3.1 Устнаовка

Код: Выделить всё

apt-get install runit

3.2 настройка служб. Создаем на каждую службу папку в /etc/services. В каждой папке исполняемый файл run. Примеры на офсайте или в интернете. Вот как это выглядит для openssh-server и apache для stretch

Код: Выделить всё

root@QNAP231:/# cat /etc/service/ssh/run
#!/bin/bash
exec /usr/sbin/sshd -D


root@QNAP231:/# cat /etc/service/apache2/run
#!/bin/sh
TZ=MSK-3
export TZ
. /etc/apache2/envvars
exec /usr/sbin/apache2 -DNO_DETACH


3.3 Изменения в /opt/etc/init.d/S99debian
Запуск runit вставляем в /opt/etc/init.d/S99debian вместо `if [ -e "$CHROOT_SERVICES_LIST" ]; then....` (много строк в секции start) нужна одна строка

Код: Выделить всё

/etc/runit/2&

Остановка всех служб - вместо `if [ -e "$CHROOT_SERVICES_LIST" ]; then....` в секции stop

Код: Выделить всё

sv -w30 force-stop /etc/service/*

(тут 30 - пауза в секундах). Управление отдельными службами через sv

Код: Выделить всё

root@QNAP231:/# sv status apache2
down: apache2: 993s, normally up
root@QNAP231:/# sv start apache2
ok: run: apache2: (pid 21539) 0s
root@QNAP231:/# sv status apache2
run: apache2: (pid 21539) 4s
root@QNAP231:/# sv stop apache2
ok: down: apache2: 0s, normally up
root@QNAP231:/# sv status apache2
down: apache2: 3s, normally up


4. Другие варианты возможно будут описаны позже....

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1333
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 29 июл 2017, 09:44

Использование daemontools (вместо runit).

Набор инструментов daemontools очень похож на runit. Поэтому кратко
1. Установка

Код: Выделить всё

apt-get install daemontools

2. Для служб нужно создать /etc/service/<имя службы>/run файлы. Подойдут файлы для runit
3. Запуск (всех служб)

Код: Выделить всё

/usr/bin/svscanboot &

4. Проверка статуса

Код: Выделить всё

# svstat /etc/service/*
/etc/service/apache2: up (pid 27653) 42 seconds
/etc/service/ssh: up (pid 27654) 42 seconds

5. Остановка службы

Код: Выделить всё

# svc -d /etc/service/ssh/


# svstat /etc/service/*
/etc/service/apache2: up (pid 27653) 106 seconds
/etc/service/ssh: down 3 seconds, normally up

6. Запускаем заново

Код: Выделить всё

# svc -u /etc/service/ssh/


# svstat /etc/service/*
/etc/service/apache2: up (pid 27653) 182 seconds
/etc/service/ssh: up (pid 27865) 2 seconds

7. Остановка всех служб

Код: Выделить всё

# svc -d /etc/service/*

описаний по daemontools в сети меньше, чем runit. Кроме оффсайта можно почитать еще http://www.troubleshooters.com/linux/dj ... _intro.htm


Вернуться в «Entware/Qnapware/Optware/Zyxware - обсуждаем репозитории пакетов»

Кто сейчас на конференции

Всего 6 посетителей :: 0 зарегистрированных, 0 скрытых и 6 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей