Skip to main content

Debian

Итак, продолжим, теперь будем ставить Debian. Надо распаковать архив с netboot загрузчиком и подправить конфиг загрузчика. Nginx тут по сути не нужен, ибо вся система умещается в initrd и грузится по PXE:

01:51:38 konflicker@pxe-installer:/srv/tftp
$ ls -1 iso/
debian-installer
ldlinux.c32
netboot.tar.gz
pxelinux.0
pxelinux.cfg
version.info

Загрузка ОС

В папку /iso (относительно ранее настроенного /srv/tftp) загружаем образ netboot по ссылке: https://mirror.yandex.ru/debian/dists/bullseye/main/installer-amd64/current/images/netboot/netboot.tar.gz и распаковываем в эту же папку.

Настраиваем загрузчик

Указываем путь до preseed файла, настроим вторую сетевуху по DHCP:

label 3
    kernel iso/debian-installer/amd64/linux
    append auto=true vga=788 initrd=iso/debian-installer/amd64/initrd.gz --- quiet url=http://10.0.1.1/preseed.cfg net.ifnames=0 biosdevname=0 interface=eth1 priority=critical 

Готовим preseed

Файл поместим в /preseed.cfg.

Тут уже не все так чисто. Не получится подготовить файл без костылей. Hostname не задается через preseed файл из коробки, но если устраивает стандартный "debian", то можно оставить его.

Настроить отдельно 2 сетевухи тоже не выйдет, надо получать на второй IP по DHCP, а первую конфигурировать через простые команды. Ставиться система будет с зеркал яндекса, но при желании можно скачать себе репозиторий дебиана и указать его в mirror/http/hostname.

Соответственно в late_command мы опишем все эти команды по настройке хостнейма и сети (тут пригодился бы pastebin, но у меня его нет).

$ cat preseed.cfg 
#_preseed_V1
d-i debian-installer/locale string en_US
d-i localechooser/supported-locales multiselect en_US.UTF-8, ru_RU.UTF-8
d-i keyboard-configuration/xkb-keymap select us
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
d-i clock-setup/ntp boolean true

### Network
d-i netcfg/choose_interface select eth1
d-i preseed/early_command string ip a add 192.168.100.209/24 dev eth0 ; ip l set up dev eth0 ; echo 'nameserver 8.8.8.8' > /etc/resolv.conf ; ip r del default ; ip r add default via 192.168.100.1 dev eth0
d-i netcfg/hostname string server

# If non-free firmware is needed for the network or other hardware, you can
# configure the installer to always try to load it, without prompting. Or
# change to false to disable asking.
#d-i hw-detect/load_firmware boolean true

### Mirror settings
d-i mirror/country string manual
d-i mirror/http/hostname string mirror.yandex.ru
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

### User settings
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password ....
d-i passwd/make-user boolean false

### Partitioning

d-i partman-auto/disk string /dev/sda /dev/sdb
d-i partman-auto/method string raid
d-i partman-auto-raid/recipe string 1 2 0 ext4 / /dev/sda1#/dev/sdb1 .

d-i partman-auto/expert_recipe string multiraid :: 20000 20000 -1 raid $lvmignore{ } bootable{ } $primary{ } method{ raid } . 20000 20000 -1 ext4 $defaultignore{ } lvmok{ } method{ format } format{ } use_filesystem{ }.

d-i partman-swapfile/percentage string 0
d-i partman-auto-lvm/guided_size string max
d-i partman-basicmethods/method_only boolean false
d-i partman-basicfilesystems/no_swap boolean false
d-i mdadm/boot_degraded boolean true
d-i partman-md/confirm boolean true
d-i partman-md/confirm_nooverwrite boolean true
d-i partman-md/device_remove_md boolean true
d-i partman/confirm_write_new_label boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman/confirm boolean true
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-auto-lvm/new_vg_name string vg
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish

### Packages
tasksel tasksel/first string standard
d-i pkgsel/upgrade select safe-upgrade
d-i pkgsel/include string openssh-server initramfs-tools curl wget

### Post-config installed system
d-i preseed/late_command string in-target bash -c \
'echo "auto eth0" >> /etc/network/interfaces; \
echo "iface eth0 inet static" >> /etc/network/interfaces ; \
echo "  address 192.168.100.99" >> /etc/network/interfaces ; \
echo "  netmask 255.255.255.0" >> /etc/network/interfaces ; \
echo "  gateway 192.168.100.1" >> /etc/network/interfaces ; \
mkdir -p /root/.ssh ; \
echo ssh-rsa "AAAAB..." > /root/.ssh/authorized_keys ; \
sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config ; \
echo "server" > /etc/hostname ; \
sed -i "s/debian/server/" /etc/hosts ; \
sed -i '/eth1/d' /etc/network/interfaces ; \
echo "nameserver 8.8.8.8" > /etc/resolv.conf';

### Etc 
d-i save-logs/menu select
d-i save-logs/directory string /target/var/log
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev  string default
d-i finish-install/reboot_in_progress note

Будет создан один юзер root с авторизацией по паролю через SSH и будет добавлен SSH ключ. При желании для секурности можно создать не привилегированного юзера и запретить авторизацию под рутом.

Загружаемся

Вы восхитительны!

debian

SRC:

Основная статья: https://www.howtoforge.com/tutorial/install-debian-9-stretch-via-pxe-network-boot-server/

  • https://forums.debian.net/viewtopic.php?t=54242
  • https://www.debian.org/releases/stable/example-preseed.txt
  • https://debian-handbook.info/browse/stable/sect.automated-installation.html
  • https://wiki.debian.org/DebianInstaller/Preseed#Autoloading_the_preseeding_file_from_a_webserver_via_DHCP
  • https://wiki.debian.org/AutomatedInstallation
  • https://gist.github.com/annttu/a5b9a57bf03bfc1361ea806fa1bdd116