Быстрая установка рабочей станции линукс из шаблона

В свое время (года 3-4 назад) появилась задача по переходу бездисковых рабочих станций freebsd (да, есть и такая экзотика) на ос дебиан (stable).

Что было в наличии: небольшие удаленные филиалы без админов, шлюз на freebsd в каждом филиале, рабочие станции с никсами.

Что хотим: удаленно засетапить нужную систему с минимальными усилиями.

Шаги для автоустановки (все это в более подробном виде есть на просторах интернета):

1) установить tftp сервер

2) настроить загрузку по сети для рабочих станций в биосе

3) настроить dhcp-сервер, что-нибудь наподобие:

host tc-016 { hardware ethernet 0:51:56:a0:ea:24; fixed-address tc-016; next-server 192.168.1.1; filename "pxelinux.0"; }

4) настроить файл pxelinux.cfg/default в корневой папке tftp-сервера, который отвечает за формирование меню при загрузке по PXE:

MENU BEGIN as-debian-install
    MENU TITLE Auto-install Debian GNU/Linux Amd64

    LABEL deb-amd64
    MENU LABEL amd64 v8
        kernel Debian/amd64/linux
append initrd=Debian/amd64/initrd.gz auto url=tftp://192.168.1.1/debian.amd64.cfg auto=true auto=true priority=critical hostname=tc-016 domain=EKB DEBCONF_DEBUG=5
    MENU END

5) разместить все нужные файлы (linux, initrd.gz) для отдачи по tftp

6) настроить preseed файл debian.amd64.cfg, который отвечает за разметку, конфигурирование и установку софта

# Locales
d-i debian-installer/locale string ru_RU.UTF-8
d-i debian-installer/language string en
d-i debian-installer/country string RU
d-i debian-installer/keymap string ru
d-i debian-installer/locale select ru_RU.UTF-8
d-i debconf/language string en
d-i localechooser/languagelist select ru

.....

 

Это все хорошо, это  работает,  но  необходимо учитывать некоторые моменты, которые могут возникнуть:

  • не сильно высокая скорость интернета  - установка одной станции может затянуться на пару часов
  • узкий канал => другие пользователи буду испытывать неудобства в момент скачивания пакетов на новую станцию (приоритезации нет)
  • бывало и так - "Привет, у нас сегодня 2(3) новых сотрудника вышло, я тут компы достал, надо сегодня их подключить, сделаешь?"
  • после  установки свежей ОС  в процессе работы бывают возникают всякие баги, "косяки", которых не было в ходе предыдущих установок. С ними надо разбираться, тратить время
  • станцию приходилось все равно руками доконфигурировать (скопировать нужные файлы, отредактировать их и т.п.)
  • после n-ой установки реально надоедает отвлекаться на установку станций, хочется к этому вообще быть минимально причастным

 

Поэтому решил значительно ускорить весь процесс:

1) Готовлю машину-шаблон, которую ставлю через preseed-файл

2) Кофигурирую ее, донастраиваю под текущие реалии компании (можно руками, можно, например, через ансибл).

3) Создаю дамп машины-шаблона 

dump -0 -f root.dump -L "Root" /

 4) На филиальном шлюзе разворачиваю образ Clonezilla Livecd. По примерной настройке можно почитать здесь http://clonezilla.org/livepxe.php

 pxelinux.cfg/default примерно такой:

  LABEL CloneZilla
    MENU LABEL Clonzilla LiveCD
        KERNEL livecd/clonezilla/live/vmlinuz
append initrd=livecd/clonezilla/live/initrd.img boot=live live-config noswap netboot=nfs nfsroot=192.168.1.1:/PXE/livecd/clonezilla ocs_daemonon="ssh" ocs_live_keymap="NONE"
    MENU END

 

  После запуска станции можно будет к ней подключаться по ssh.

5)  Предварительно созданный ранее дамп ОС копируем на филиальный шлюз, файл помещаем в папку, которую потом увидит clonezilla (например в папку home относительно распакованной структуры директорий clonezilla):

ls -l /PXE/livecd/clonezillax64/
total 26
-rw-r--r--  1 root        wheel         190 Jun 27  2016 Clonezilla-Live-Version
drwxr-xr-x  4 root        wheel           4 Oct 10  2016 EFI
-rw-r--r--  1 root        wheel       18092 Aug 12  2012 GPL
drwxr-xr-x  3 root        wheel           3 Oct 10  2016 boot
drwxr-xr-x  4 root      wheel      4 Oct 10  2016 home
drwxr-xr-x  2 root        wheel          13 Oct 10  2016 live
drwxr-xr-x  2 root        wheel          15 Oct 10  2016 syslinux
drwxr-xr-x  6 root        wheel           7 Oct 10  2016 utils

 

Подключились по ssh к рабочей станции (user/live).Теперь предстоят шаги по разворачиванию дампа:

1. Разбиваем диск как необходимо (cfdisk, parted, fdisk на выбор)

2. Создаем ФС

mkfs.ext4 /dev/sda1

3. Ставим пакет dump

apt-get update && apt-get install dump

4. Монтируем раздел

mount /dev/sda1 /mnt && cd /mnt

5. Разворачиваем дамп

restore -rf /lib/live/mount/medium/home/root.dump

 6. Маленькая правка конфигов

etc/fstab
etc/hosts
etc/hostname
etc/cups/client.conf

7. Пересобираем initrd

cd /mnt && mount -o bind /dev dev/ && mount -t sysfs sys sys/ && mount -t proc proc proc/ && chroot ./

update-initramfs -v -u -k `uname -r` -t

 Если же Вы в LiveCD и uname -r вернет далеко не ядро текущей системы, то смотрите в /etc/grub.conf или /boot/grub/menu.lst версию используемого ядра и вписывайте ее как аргумент команды вручную

8. установка grub

grub-install  /dev/sda && grub-mkconfig -o /boot/grub/grub.cfg

 9. отмонтируем sys, dev, proc и сам диск

cd / && umount /mnt/sys /mnt/proc /mnt/dev /dev/sda1

 10. Перегружаем

reboot

  В данном случае установка занимает минут 20, но по сути все эти шаги можно просто поместить в скрипт:

 LABEL CloneZillax64
    MENU LABEL Clonezilla LiveCD x64 Automatic Install OS
        KERNEL livecd/clonezillax64/live/vmlinuz
append initrd=livecd/clonezillax64/live/initrd.img boot=live live-config noswap netboot=nfs nfsroot=192.168.1.1:/atom/PXE/livecd/clonezillax64 ocs_daemonon="ssh" keyboard-layouts=NONE locales=en_US.UTF-8   ocs_prerun="sudo bash /lib/live/mount/medium/home/setup_OS.sh --force"
    MENU END

 

где ocs_prerun="sudo bash /lib/live/mount/medium/home/dump/setup_OS.sh --force"  - запуск скрипта после запуска livecd.

Все, теперь пользователь выбирает пункт в меню, ждем 20 минут и получает полностью рабочую станцию без привлечения системного администратора и без ущерба для других во время установки.

 

 

 

 

 

 

 

Please publish modules in offcanvas position.