Rescue/Launcher: различия между версиями
Klark (обсуждение | вклад) мНет описания правки |
Klark (обсуждение | вклад) мНет описания правки |
||
Строка 44: | Строка 44: | ||
=Примеры использования= | =Примеры использования= | ||
Собираем усечённую rescue на основе репозитория c8 | |||
<pre> | <pre> | ||
git clone git://git.altlinux.org/people/klark/packages/alt-c8-deploy.git | git clone git://git.altlinux.org/people/klark/packages/alt-c8-deploy.git | ||
cd alt-c8-deploy | cd alt-c8-deploy | ||
Строка 51: | Строка 51: | ||
export GLOBAL_NET_ETH=eth0 | export GLOBAL_NET_ETH=eth0 | ||
make && make distclean | make && make distclean | ||
</pre> | |||
Создаём "ответную" часть типа "Hello, world!" | |||
<pre> | |||
cd $TMPDIR | cd $TMPDIR | ||
mkdir test-deploy | mkdir test-deploy | ||
Строка 64: | Строка 66: | ||
EOF | EOF | ||
chmod +x test-deploy/autorun | chmod +x test-deploy/autorun | ||
</pre> | |||
Тестируем полученный образ в QEMU (надо выбрать второй пункт в загрузочном меню) | |||
<pre> | |||
qemu-kvm -cpu host -m 1024 -balloon virtio \ | qemu-kvm -cpu host -m 1024 -balloon virtio \ | ||
-fsdev local,security_model=passthrough,id=fsdev0,path="$ | -fsdev local,security_model=passthrough,id=fsdev0,path="$TMPDIR/test-deploy" \ | ||
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=alt-autorun \ | -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=alt-autorun \ | ||
-cdrom alt-c8-deploy-*.iso | -cdrom alt-c8-deploy-*.iso | ||
</pre> | |||
Заменяем "ответную" часть на что-то более осмысленное | |||
<pre> | |||
cat >test-deploy/autorun <<-EOF | cat >test-deploy/autorun <<-EOF | ||
#!/bin/sh -efu | #!/bin/sh -efu | ||
Строка 89: | Строка 93: | ||
chmod +x test-deploy/autorun | chmod +x test-deploy/autorun | ||
> test-deploy/hybrid.iso | > test-deploy/hybrid.iso | ||
</pre> | |||
После повторного запуска виртуалки с теми же аргументами в $TMPDIR/test-deploy/hybrid.iso появится гибридный образ. Запишем его на настоящую флэшку... | |||
<pre> | |||
su- | su- | ||
umount /dev/sdb1 | umount /dev/sdb1 | ||
Строка 102: | Строка 105: | ||
mkfs.ext2 -q -L alt-autorun /dev/sdb2 | mkfs.ext2 -q -L alt-autorun /dev/sdb2 | ||
mount -t ext2 /dev/sdb2 /mnt | mount -t ext2 /dev/sdb2 /mnt | ||
</pre> | |||
Кладём в /mnt нужные файлы (например, образы настроенных систем), и сюда же кладём <ВАШ_СКРИПТ> (под именем autorun), делаем его исполняемым, размонтируем флэшку и идём с ней на компьютер, на который будем этот образ накатывать. | |||
{{Category navigation|title=Восстановление|category=Rescue|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Восстановление|category=Rescue|sortkey={{SUBPAGENAME}}}} | ||
[[Категория:HOWTO]] | [[Категория:HOWTO]] |
Версия от 16:26, 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 (сам по себе или autorun=1) позволяет включить механизм автозапуска с заданными умолчаниями, которые можно переопределить, сложив в rescue-образ собственный файл конфигурации /etc/rescue-launcher/rescue-launcher.conf. Имеющаяся в пакете конфигурация детально описывает назначение каждого аргумента и все заданные умолчания. Все те же аргументы могут быть переопределены параметром загрузки ядра autorun=..., например:
autorun=method:http,server:example.org,directory:/pub/start autorun=method:nfs,server:192.168.15.2,directory:/srv/deploy autorun=method:disk,uuid:82d5d0e2-d51d-4508-bd82-f9aade802427 autorun=method:cdrom,label:ALT%20Education%209.3beta2 autorun=method:plan9,label:host-guest-exchange
Методы
Метод поиска нужного каталога с <ВАШИМ_СКРИПТОМ> определяется аргументом 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
Метод auto используется по умолчанию и обеспечивает поиск всеми доступными способами, но порядок и конкретные методы можно переопределить в собственном rescue-образе через файлы /etc/rescue-launcher/*.list. Можно написать собственный метод (к примеру, samba или ssh) и сложить по аналогии в /usr/libexec/rescue-launcher/methods/.
HTTP
Метод 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="$TMPDIR/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), делаем его исполняемым, размонтируем флэшку и идём с ней на компьютер, на который будем этот образ накатывать.