В свое время (года 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 минут и получает полностью рабочую станцию без привлечения системного администратора и без ущерба для других во время установки.