Rescue/Launcher: различия между версиями

Материал из ALT Linux Wiki
(Страница описания создана)
 
мНет описания правки
Строка 1: Строка 1:
=Автоматический запуск программы в ALT Rescue=
=Автоматический запуск программы в ALT Rescue=


Тем, кто ещё застал времена '''MS-DOS''', это может напомнить '''C:\autoexec.bat'''. Ну да, что-то очень похожее, но "на стероидах"! :) В отличие от '''rc.local''', процесс запускается интерактивно, а не в фоновом режиме, причём на конкретном терминале сразу после запуска всех служб. По завершению этого процесса пользователь попадает в обычную командную строку.
Заставшим MS-DOS это напомнит '''C:\autoexec.bat'''. Ну да, что-то очень похожее, только "на стероидах"! :) В отличие от '''rc.local''', процесс запускается интерактивно, а не в фоновом режиме, причём на конкретном терминале сразу после запуска всех служб. По завершении этого процесса пользователь попадает в обычную командную строку.


=Назначение=
=Назначение=


* Автоматизация запуска вашей программы на первом терминале при загрузке с rescue, в том числе, требующей интерактивного взаимодействия с пользователем.
* Автоматизация запуска вашей программы на первом терминале при загрузке с rescue, в том числе, программы, требующей интерактивного взаимодействия с пользователем.
* Автоматизация сборки систем на голом железе и в виртуальном окружении.
* Автоматизация сборки систем на голом железе и в виртуальном окружении.
* Автоматизация массового развёртывания из готовых образов.
* Автоматизация массового развёртывания из готовых образов.
Строка 11: Строка 11:
=Краткое описание=
=Краткое описание=


Пакет '''rescue-launcher''' разработан с таким расчётом, чтобы можно было автоматически смонтировать <ОТКУДА-ТО> некую директорию, содержащую <ВАШ_СКРИПТ> (или иной исполняемый файл), и запустить его. Параметр '''autorun''' управляет тем, где и что ищется, каким образом и куда монтируется. Скрипт, входящий в пакет '''rescue-launcher''', запускается на первом терминале ('''/dev/tty1'''), блокируя возможный повторный запуск. В случае возникновения ошибок, выполнение прерывается и вы оказываетесь в штатной командной строке '''ALT Rescue'''. Если что-то пошло не так, смотрите журнал '''/var/log/rescue-launcher.log'''.
Пакет '''rescue-launcher''' разработан с таким расчётом, чтобы можно было автоматически смонтировать <ОТКУДА-ТО> некую директорию, содержащую <ВАШ_СКРИПТ> (или иной исполняемый файл), и запустить его. Параметр загрузки ядра '''autorun''' управляет тем, где и что ищется, каким образом и куда монтируется. Скрипт, входящий в пакет '''rescue-launcher''', запускается на первом терминале ('''/dev/tty1'''), блокируя возможный повторный запуск. В случае возникновения ошибок, выполнение прерывается и вы оказываетесь в штатной командной строке '''ALT Rescue'''. Если что-то пошло не так, смотрите журнал '''/var/log/rescue-launcher.log'''.


В образе носителя [[Rescue]] должен находиться пакет '''rescue-launcher'''. Чтобы работал автозапуск, также важен [http://git.altlinux.org/gears/s/startup-rescue.git?p=startup-rescue.git;a=commitdiff;h=19369c22878f50ffea5f9864bd79f94ec5e77762 этот патч] (входит в '''startup-rescue''' >= 0.31-alt1). Последним важным условием является наличие опции '''autorun'''[=...] в параметрах загрузки ядра. Предполагается, что первые два условия будут реализованы в '''m-p''' профилях '''ALT Rescue''' и на всех бранчах в самое ближайшее время. Если собирается собственный образ rescue, вместо пакета '''rescue-launcher''' ваш исполняемый скрипт можно сложить непосредственно в '''/sbin/rescue-launcher''' корневой системы.
В образе носителя [[Rescue]] должен быть пакет '''rescue-launcher'''. Чтобы работал автозапуск, также важен [http://git.altlinux.org/gears/s/startup-rescue.git?p=startup-rescue.git;a=commitdiff;h=19369c22878f50ffea5f9864bd79f94ec5e77762 этот патч] (входит в '''startup-rescue''' >= 0.31-alt1). Последним важным условием является наличие опции '''autorun'''[=...] в параметрах загрузки ядра. Предполагается, что первые два условия будут реализованы в '''m-p''' профилях '''ALT Rescue''' и во всех бранчах в самое ближайшее время. Если собирается собственный образ rescue, вместо пакета '''rescue-launcher''' ваш исполняемый скрипт можно сложить непосредственно в '''/sbin/rescue-launcher''' корневой системы.


=Параметр autorun=
=Параметр autorun=
Строка 21: Строка 21:
=Методы=
=Методы=


Метод поиска нужного каталога со скриптом определяется аргументом '''method'''. Например, если указать '''autorun=method:disk,label:deploy''' в '''/proc/cmdline''', rescue-launcher попытается смонтировать любой подключенный диск с меткой тома "deploy" и будет искать запускаемый скрипт на нём. Первая версия rescue-launcher поддерживает следующие методы: '''auto''', '''cdrom''', '''disk''', '''nfs''', '''http''', '''plan9''', '''vbox'''. Методы '''nfs''' и '''http''' требуют предварительного поднятия сетевого интерфейса. На данный момент используется довольно примитивный механизм получения настроек по протоколу DHCP. Методы '''cdrom''' и '''disk''' относятся к классу "локально подключаемых дисков", тогда как методы '''plan9''' и '''vbox''' относятся к классу "виртуальных ФС" для обмена данными между хостовой и гостевой системами. Метод '''auto''' используется по умолчанию и обеспечивает поиск всеми доступными способами, но порядок и конкретные методы можно переопределить в собственном rescue-образе через файлы '''/etc/rescue-launcher/*.list'''. Можно написать собственный метод (к примеру, '''samba''') и сложить по аналогии в '''/usr/libexec/rescue-launcher/methods/samba'''. Метод '''http''' немного отличается от остальных: скрипт скачивается с указанного в параметрах '''server''' и '''directory''' адреса во временный файл, а перед его запуском экспортируется переменная среды '''AUTORUN_HTTPBASE''', содержащая "подсказку" вашему скрипту, где можно скачать остальные файлы, если это необходимо.
Метод поиска нужного каталога с <ВАШИМ_СКРИПТОМ> определяется аргументом '''method'''. Например, если указать '''autorun=method:disk,label:deploy''' в '''/proc/cmdline''', rescue-launcher попытается смонтировать любой подключенный диск с меткой тома "deploy" и будет искать запускаемый скрипт на нём. Первая версия rescue-launcher поддерживает следующие методы: '''auto''', '''cdrom''', '''disk''', '''nfs''', '''http''', '''plan9''', '''vbox'''. Методы '''nfs''' и '''http''' требуют предварительного поднятия сетевого интерфейса. На данный момент используется довольно примитивный механизм получения настроек по протоколу DHCP. Методы '''cdrom''' и '''disk''' относятся к классу "локально подключаемых дисков", тогда как методы '''plan9''' и '''vbox''' относятся к классу "виртуальных ФС" для обмена данными между хостовой и гостевой системами.
 
Метод '''auto''' используется по умолчанию и обеспечивает поиск всеми доступными способами, но порядок и конкретные методы можно переопределить в собственном rescue-образе через файлы '''/etc/rescue-launcher/*.list'''. Можно написать собственный метод (к примеру, '''samba''' или '''ssh''') и сложить по аналогии в '''/usr/libexec/rescue-launcher/methods/'''. Метод '''http''' немного отличается от остальных: скрипт скачивается с адреса, указанного в параметрах '''server''' и '''directory''', во временный файл, а перед его запуском экспортируется переменная среды '''AUTORUN_HTTPBASE''', содержащая "подсказку" <ВАШЕМУ_СКРИПТУ>, где можно скачать остальные файлы, если это необходимо.


=Примеры использования=
=Примеры использования=
Строка 54: Строка 56:
     -cdrom alt-c8-deploy-*.iso
     -cdrom alt-c8-deploy-*.iso


# Заменяем "ответную часть" на что-то более осмысленное
# Заменяем "ответную" часть на что-то более осмысленное
cat >test-deploy/autorun <<-EOF
cat >test-deploy/autorun <<-EOF
#!/bin/sh -efu
#!/bin/sh -efu
Строка 79: Строка 81:
dd if=/tmp/.private/<USERNAME>/test-deploy/hybrid.iso \
dd if=/tmp/.private/<USERNAME>/test-deploy/hybrid.iso \
     of=/dev/sdb bs=2M oflag=direct status=progress; sync
     of=/dev/sdb bs=2M oflag=direct status=progress; sync
fdsik /dev/sdb # здесь добавляем второй раздел типа Linux
fdisk /dev/sdb # здесь добавляем второй раздел типа Linux
wipefs -a /dev/sdb2
wipefs -a /dev/sdb2
mkfs.ext2 -q -L alt-autorun /dev/sdb2
mkfs.ext2 -q -L alt-autorun /dev/sdb2

Версия от 00:39, 14 декабря 2018

Автоматический запуск программы в ALT Rescue

Заставшим MS-DOS это напомнит C:\autoexec.bat. Ну да, что-то очень похожее, только "на стероидах"! :) В отличие от rc.local, процесс запускается интерактивно, а не в фоновом режиме, причём на конкретном терминале сразу после запуска всех служб. По завершении этого процесса пользователь попадает в обычную командную строку.

Назначение

  • Автоматизация запуска вашей программы на первом терминале при загрузке с rescue, в том числе, программы, требующей интерактивного взаимодействия с пользователем.
  • Автоматизация сборки систем на голом железе и в виртуальном окружении.
  • Автоматизация массового развёртывания из готовых образов.

Краткое описание

Пакет rescue-launcher разработан с таким расчётом, чтобы можно было автоматически смонтировать <ОТКУДА-ТО> некую директорию, содержащую <ВАШ_СКРИПТ> (или иной исполняемый файл), и запустить его. Параметр загрузки ядра autorun управляет тем, где и что ищется, каким образом и куда монтируется. Скрипт, входящий в пакет rescue-launcher, запускается на первом терминале (/dev/tty1), блокируя возможный повторный запуск. В случае возникновения ошибок, выполнение прерывается и вы оказываетесь в штатной командной строке ALT Rescue. Если что-то пошло не так, смотрите журнал /var/log/rescue-launcher.log.

В образе носителя Rescue должен быть пакет rescue-launcher. Чтобы работал автозапуск, также важен этот патч (входит в startup-rescue >= 0.31-alt1). Последним важным условием является наличие опции autorun[=...] в параметрах загрузки ядра. Предполагается, что первые два условия будут реализованы в m-p профилях ALT Rescue и во всех бранчах в самое ближайшее время. Если собирается собственный образ rescue, вместо пакета rescue-launcher ваш исполняемый скрипт можно сложить непосредственно в /sbin/rescue-launcher корневой системы.

Параметр autorun

Параметр загрузки ядра autorun сам по себе (в /proc/cmdline) или autorun=1 позволяет включить механизм автозапуска с заданными умолчаниями. Умолчания можно переопределить, сложив в rescue-образ собственный файл конфигурации /etc/rescue-launcher/rescue-launcher.conf. Имеющаяся в пакете конфигурация детально описывает назначение каждого аргумента и все заданные умолчания. Все те же аргументы могут быть перезаписаны указанием других значений в параметре загрузки ядра autorun=... -- см. примеры в конфигурационном файле.

Методы

Метод поиска нужного каталога с <ВАШИМ_СКРИПТОМ> определяется аргументом method. Например, если указать autorun=method:disk,label:deploy в /proc/cmdline, rescue-launcher попытается смонтировать любой подключенный диск с меткой тома "deploy" и будет искать запускаемый скрипт на нём. Первая версия rescue-launcher поддерживает следующие методы: auto, cdrom, disk, nfs, http, plan9, vbox. Методы nfs и http требуют предварительного поднятия сетевого интерфейса. На данный момент используется довольно примитивный механизм получения настроек по протоколу DHCP. Методы cdrom и disk относятся к классу "локально подключаемых дисков", тогда как методы plan9 и vbox относятся к классу "виртуальных ФС" для обмена данными между хостовой и гостевой системами.

Метод auto используется по умолчанию и обеспечивает поиск всеми доступными способами, но порядок и конкретные методы можно переопределить в собственном rescue-образе через файлы /etc/rescue-launcher/*.list. Можно написать собственный метод (к примеру, samba или ssh) и сложить по аналогии в /usr/libexec/rescue-launcher/methods/. Метод http немного отличается от остальных: скрипт скачивается с адреса, указанного в параметрах server и directory, во временный файл, а перед его запуском экспортируется переменная среды AUTORUN_HTTPBASE, содержащая "подсказку" <ВАШЕМУ_СКРИПТУ>, где можно скачать остальные файлы, если это необходимо.

Примеры использования

# Собираем усечённую rescue на основе репозитория c8
git clone git://git.altlinux.org/people/klark/packages/alt-c8-deploy.git
cd alt-c8-deploy
$EDITOR sources.list
export GLOBAL_NET_ETH=eth0
make && make distclean

# Создаём "ответную" часть типа "Hello, world!"
cd $TMPDIR
mkdir test-deploy
cat >test-deploy/autorun <<-EOF
#!/bin/sh -efu

export LANG="ru_RU.utf8"
export LC_ALL="ru_RU.utf8"
echo "Да здравствует автоматизация!"
sleep 30
EOF
chmod +x test-deploy/autorun

# Тестируем полученный образ в QEMU (надо
# выбрать второй пункт в загрузочном меню)
#
qemu-kvm -cpu host -m 1024 -balloon virtio \
    -fsdev local,security_model=passthrough,id=fsdev0,path="$(pwd)/test-deploy" \
    -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=alt-autorun \
    -cdrom alt-c8-deploy-*.iso

# Заменяем "ответную" часть на что-то более осмысленное
cat >test-deploy/autorun <<-EOF
#!/bin/sh -efu

export LANG="ru_RU.utf8"
export LC_ALL="ru_RU.utf8"

# Полезная нагрузка
mount -o remount,rw "$(pwd)"
dd if=/dev/sr0 bs=2M of=hybrid.iso status=progress
isohybrid hybrid.iso
sync
poweroff
EOF
chmod +x test-deploy/autorun
> test-deploy/hybrid.iso

# После повторного запуска виртуалки с теми же аргументами
# в $TMPDIR/test-deploy/hybrid.iso появится гибридный образ.
# Запишем его на настоящую флэшку...
#
su-
umount /dev/sdb1
dd if=/tmp/.private/<USERNAME>/test-deploy/hybrid.iso \
    of=/dev/sdb bs=2M oflag=direct status=progress; sync
fdisk /dev/sdb # здесь добавляем второй раздел типа Linux
wipefs -a /dev/sdb2
mkfs.ext2 -q -L alt-autorun /dev/sdb2
mount -t ext2 /dev/sdb2 /mnt

# Кладём в /mnt нужные файлы (например, образы настроенных систем),
# и сюда же кладём <ВАШ_СКРИПТ> (под именем autorun), делаем его
# исполняемым, размонтируем флэшку и идём с ней на компьютер, на
# который будем этот образ накатывать.