понедельник, 7 апреля 2014 г.

Хозяйке на заметку: Установка ROSA Desktop с помощью системы развёртывания образов ОС Foreman

Это не полноценное HowTo. Скорее, заметки на полях. Сложного ничего нет, кто сталкивался с PXE/iPXE сильно нового для себя ничего не узнают. Просто имеется ряд особенностей, которые неподготовленному человеку могут испортить жизнь.
Особенность первая — Foreman не поддерживает NFS, поэтому образы можно грузить только через TFTP, FTP или HTTP.

Особенность вторая. Протоколы FTP и HTTP в стандартной поставке Foreman не работают, приходится чуть изощряться.

Особенность третья. В настоящий момент, в силу текущей специфики формирования образов и текущего инсталлятора, у ROSA пока нет образов netinstall как у того же Debian. Я надеюсь, в ближайшем будущем сможем исправить это упущение.

Для подготовки образа для дальнейшей возможности загрузки по сети, необходимо на рабчий компьютер или сервер установить пакет livecd-tools. Из установленного пакета необходимо воспользоваться командой livecd-iso-to-pxeboot. Выглядеть будет следующим образом: livecd-iso-to-pxeboot ROSA.FRESH.R2.LXDE.x86_64.iso. Где ROSA.FRESH.R2.LXDE.x86_64.iso — название образа в формате iso.

В результате работы данной команды у нас должен сгенерироваться каталог tftpboot со следующим содержимым:
jormungand tftpboot # ls -lh
итого 1,1G
-rw-r--r-- 1 root root 1,1G янв. 22 14:33 initrd0.img
-rw-r--r-- 1 root root 26K янв. 22 14:33 pxelinux.0
drwxr-xr-x 2 root root 4,0K янв. 22 14:33 pxelinux.cfg/
-r--r--r-- 1 root root 3,6M янв. 22 14:33 vmlinuz0
Внутри каталога находится файл pxelinux.cfg с нужным нам содержимым:
DEFAULT pxeboot
TIMEOUT 20
PROMPT 0
LABEL pxeboot
        KERNEL vmlinuz0
        APPEND rootflags=loop initrd=initrd0.img root=live:/ROSA.FRESH.R2.LXDE.x86_64.iso 
rootfstype=auto ro rd.live.image  rhgb splash=silent logo.nologo rd.luks=0 rd.md=0 rd.dm=0 
ONERROR LOCALBOOT 0
Далее необходимо закинуть файлы initrd0.img и vmlinuz0 на сервер с foreman, где гнездится tftp. У меня это каталог /var/lib/tftpboot/images/lxde. Можно положить и в другой каталог, но в этом случае не забудьте поправить путь в KERNEL и APPEND.

Для загрузки при помощи стандартной связки PXE/tftpboot необходимо записать в шаблон Foreman под названием PXE Default File всё, что идёт после строки LABEL и до строки ONERROR LOCALBOOT 0. В результате правок у меня получилось примерно следующее:
LABEL pxeboot
MENU LABEL ROSA Installer
KERNEL images/lxde/vmlinuz0
APPEND rootflags=loop initrd=images/lxde/initrd0.img root=live:/ROSA.FRESH.R2.LXDE.x86_64.iso 
rootfstype=auto ro rd.live.image rhgb splash=silent logo.nologo install rd.luks=0 rd.md=0 rd.dm=0
Обратите внимание на ключ install. Он отвечает за запуск инсталлятора. Если его убрать, то будет запущен режим стандартного LiveCD, а установку в этом случае необходимо будет производить из меню. И да, не забываем положить сам образ ОС в корень каталога tftpboot.

Загрузка с помощью iPXE для поддержки загрузки образов HTTP чуть посложнее и требует больше манипуляций.

Для начала необходимо установить в Foreman плагин foreman-bootdisk. Далее, необходимо создать какой-нибудь хост в Hosts. После чего, необходимо зайти в настройки хоста и нажать кнопку Boot disk. Где выпадающем меню требуется выбрать пункт Generic image. Если всё будет корректно, будет сформирована исошка, которую необхоимо положить на сервер в каталог, где TFTPD хранит все свои данные. Т.е. в /var/lib/tftpboot/.
В шаблон PXE Default File добавляются следующие строки:
LABEL isoboot
     MENU LABEL isoboot
     LINUX memdisk
     INITRD boot/bootdisk.iso
     APPEND iso raw
Если в случае нажатия на пункт generic image будет вылезать ошибка вида "Safemode doesn't allow to access 'constant' on URI", необходимо открыть Settings > Provisioning, и выставить значение булевой переменной safemode_render из true в false.

Далее необходимо скопировать содержимое шаблона Boot disk gPXE - generic host, создать новый. Назвать, например, iPXE Generic. Подправить шаблон iPXE Generic, приведя к следующему виду:
<% (0..32).each do |i| -%>
:net<%= i %>
isset ${net<%= i -%>/mac} || goto no_nic
echo net<%= i -%> is a ${net<%= i -%>/chip} with MAC ${net<%= i -%>/mac}
dhcp net<%= i %> || goto net<%= i+1 %>
kernel http://192.168.100.1/pub/os/pxeboot/vmlinuz0
initrd http://192.168.100.1/pub/os/pxeboot/initrd0.img
imgargs vmlinuz0 root=live:/ROSA.FRESH.R2.LXDE.x86_64.iso rootfstype=auto loop=/ROSA.FRESH.R2.LXDE.x86_64.iso rootflags=loop ro rd.live.image install rhgb splash=silent logo.nologo install rd.luks=0 rd.md=0 rd.dm=0 boot
Где http://192.168.100.1/ — публичный http-сервер, на котором лежат образы initrd и vmlinuz сгенерённые программой livecd-iso-to-pxeboot. Образ ROSA.FRESH.R2.LXDE.x86_64.iso кладётся в корень tftpboot, как и в примере с обычной загрузкой по PXE.

Если использовать HTTP сервер, то впоследствии можно уже организовать CDN для раздачи образов с системой. Но это уже тема для другого поста :)

4 комментария:

  1. > у ROSA пока нет образов netinstall
    Не "пока", а до сих порю
    Глянул на дату статьи..прослезился(

    ОтветитьУдалить
    Ответы
    1. К сожалению, всё так. :( Я хотел сам заняться, но уже не судьба.

      Удалить
  2. Подскажите, как для Rosa Linux сделать полностью автоматическую установку? Есть какое-то подобие preseed.cfg или kickstart?

    ОтветитьУдалить
    Ответы
    1. Смотря какую. Если речь про RELS, то kickstart там есть. Если про настольные версии, то никак. Эту функциональность хотели добавить в новый инсталлятор, но проект заморожен на неопределённый срок. Хотя после моего ухода из «РОСЫ» уже вот-вот должны были опубликовать.
      Для нынешнего инсталлятора ещё существовал грязный хак для сделанный специально под конкретного заказчика, но вряд ли он опубликован.

      Удалить