Debian 10 preseed and half-autoinstall(install over ssh)

Help with issues regarding installation of Debian

Debian 10 preseed and half-autoinstall(install over ssh)

Postby S_Paul » 2019-10-15 10:00

Hello everybody.
I made script what repack installation iso and add network installation over ssh. You can use it in Qemu-KVM, or IPMI, or bare metall and after 1-2 minutes after run it have access over ssh.
It well working at Debian 8.x, but in Debian 10 i cannot disable "Graphic install" in preseed file.
Can enybody give me advice to solve it?
Script in attach. Inside comments on russian, but i think it's not a problem:)
Can't attach file and add it in next post.
Last edited by S_Paul on 2019-10-16 02:43, edited 2 times in total.
S_Paul
 
Posts: 2
Joined: 2019-10-15 08:47

Re: Debian 10 preseed and half-autoinstall(install over ssh)

Postby S_Paul » 2019-10-15 10:01

#!/bin/bash

# FOR amd64 arch!
# 06.12.2018

echo "Привет.
Это конфигуратор процесса установки и перепаковщик установочных iso-образов debian.
Позволяет заранее сконфиругировать установщик и запустить установку по ssh.
Некоторые опции УЖЕ выбраны в соответствии с МОИМИ надобностями. Можешь подправить скрипт..."

INISO=$1
CURDIR=`pwd`
dmy=`date +%d.%m.%Y`
MYPRES=tmp_preseed.cfg

ARGS="1"
if [ $# -lt $ARGS ]
then
echo "Дай мне исходный ISO!"
exit 0
fi

#проверки на xorriso genisoimage rsync isolinux существование ISO-образа

if [[ `dpkg -s isolinux | grep "install ok"` ]] && \
[[ `dpkg -s xorriso | grep "install ok"` ]] && \
[[ `dpkg -s genisoimage | grep "install ok"` ]] && \
[[ `dpkg -s rsync | grep "install ok"` ]]
then
echo "all packages installed, ok"
else
whiptail --title "Чего-то не хватает..." --msgbox "не установлено что-то из: xorriso genisoimage rsync isolinux" 7 80
exit 0
fi

if [[ -e $INISO ]]
then
echo "ISO ok"
else
whiptail --title "Где ISO?" --msgbox "Не нашёл ISO-образ. Давай ещё раз попробуем?" 7 50
exit 0
fi

### диалог с вопросами ###
HOSTNAME=$(whiptail --title "введите hostname будущей машины" --inputbox "" 6 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

IP=$(whiptail --title "введите IP" --inputbox "" 6 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

GATE=$(whiptail --title "введите gateway" --inputbox "" 6 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

NETMASK=$(whiptail --title "введите netmask" --inputbox "" 6 60 "255.255.255.0" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

NAMESERVERS=$(whiptail --title "введите DNS" --inputbox "" 6 60 "$GATE" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

ROOTPASS=$(whiptail --title "введите пароль для пользователя root" --inputbox "" 6 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

USERNAME=$(whiptail --title "введите имя нового пользователя" --inputbox "" 6 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

USERPASS=$(whiptail --title "введите пароль для нового пользователя" --inputbox "" 6 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Прерывание конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

#Выходной preseed.cfg: $MYPRES

IS_OK=$(whiptail --title "Проверка конфигурации" --yesno "Если всё как надо - жмите OK/Да
--------------------------------------------------------
Hostname: $HOSTNAME
IP адрес: $IP
Маска подсети: $NETMASK
Шлюз: $GATE
DNS сервер: $NAMESERVERS
Пароль для root/installer: $ROOTPASS
Имя нового пользователя: $USERNAME
Пароль нового пользователя: $USERPASS
--------------------------------------------------------" \
20 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 1 ]
then
whiptail --title "Отказ от конфигурации" --msgbox "Теперь придётся перезапускать конфигуратор" 7 50
exit 0
fi

# создаём preseed.cfg
echo "# $dmy $hm
d-i debconf/language string ru_RU:ru
d-i debian-installer/country string KZ
d-i debian-installer/exit/poweroff boolean false
d-i debian-installer/framebuffer boolean true
d-i debian-installer/language string ru_RU:ru
d-i debian-installer/locale select ru_RU.UTF-8
d-i debian-installer/locale string ru_RU.UTF8
d-i console-keymaps-at/keymap select ru

d-i keyboard-configuration/variant select American English
d-i keyboard-configuration/xkb-keymap select ru
d-i keyboard-configuration/toggle select Alt+Shift
d-i keyboard-configuration/optionscode string grp:alt_shift_toggle,grp_led:scroll

d-i localechooser/supported-locales multiselect en_US.UTF8, ru_RU.UTF8
d-i localechooser/continentlist select Asia
d-i localechooser/countrylist/Asia select KZ
d-i localechooser/help/locale note
d-i localechooser/languagelist select en
d-i localechooser/languagelist select ru
d-i localechooser/shortlist/ru select
d-i localechooser/preferred-locale select ru_RU.UTF-8
d-i localechooser/shortlist/ru select

d-i hw-detect/load_firmware boolean false
#d-i hw-detect/load_media boolean false
#ethdetect ethdetect/prompt_missing_firmware boolean true
#ethdetect ethdetect/cannot_find error
#ethdetect ethdetect/module_select select no ethernet card

choose-mirror-bin mirror/country string RU
choose-mirror-bin mirror/http/countries select RU
choose-mirror-bin mirror/http/mirror select ftp.ru.debian.org
choose-mirror-bin mirror/http/hostname string ftp.ru.debian.org

#
d-i netcfg/get_domain string
d-i netcfg/get_hostname string debian-kvm
d-i netcfg/disable_dhcp boolean true
d-i netcfg/choose_interface select
d-i netcfg/choose_interface select eth0
d-i netcfg/confirm_static boolean true
d-i netcfg/get_hostname string $HOSTNAME
d-i netcfg/get_ipaddress string $IP
d-i netcfg/get_gateway string $GATE
d-i netcfg/get_nameservers string $NAMESERVERS
d-i netcfg/get_netmask string $NETMASK
d-i netcfg/no_default_route boolean
d-i preseed/early_command string anna-install network-console
d-i anna/choose_modules string network-console
d-i network-console/password password $ROOTPASS
d-i network-console/password-again password $ROOTPASS
# accs
d-i passwd/root-password password $ROOTPASS
d-i passwd/root-password-again password $ROOTPASS
user-setup-udeb passwd/make-user boolean true
user-setup-udeb passwd/root-login boolean true
user-setup-udeb passwd/shadow boolean true
user-setup-udeb passwd/user-default-groups string audio cdrom dip floppy video plugdev netdev scanner bluetooth debian-tor lpadmin
user-setup-udeb passwd/user-fullname string $USERNAME
user-setup-udeb passwd/username-bad error
user-setup-udeb passwd/username-reserved error
user-setup-udeb passwd/username string $USERNAME
d-i passwd/user-password password $USERPASS
d-i passwd/user-password-again password $USERPASS
#user-setup-udeb passwd/user-uid string
#user-setup-udeb user-setup/password-empty error
#user-setup-udeb user-setup/password-mismatch error
# timezone
tzsetup-udeb time/zone select Asia/Almaty
tzsetup-udeb tzsetup/country/KZ select Asia/Almaty
tzsetup-udeb tzsetup/country/RU select Europe/Moscow
# additioanl packages
#tasksel tasksel/first multiselect none
#tasksel tasksel/first multiselect SSH server, standard system utilities
tasksel tasksel/first multiselect manual
d-i pkgsel/include string openssh-server screen mc htop aptitude bzip2 configure-debian dialog localepurge unzip
d-i pkgsel/upgrade select full-upgrade
d-i popularity-contest/participate boolean true

### Finishing up the first stage install
d-i finish-install/reboot_in_progress note
d-i preseed/late_command string cp -R /cdrom/postinst.sh /target/root/; chmod +x /target/root/postinst.sh; in-target /bin/bash /root/postinst.sh;
">$MYPRES

##########################
# тут перепаковываем iso #
##########################
rm -rf CDROM 2>/dev/null ; rm -rf irmod/ 2>/dev/null
mkdir TMPMNT
mkdir irmod
mkdir CDROM
ISONAME=$(basename $INISO)
OUTISO=`echo $ISONAME | sed "s/.iso/-$HOSTNAME-$IP.iso/"`
OUTCONF=`echo $OUTISO | sed "s/.iso/.conf/"`
mount -o loop $INISO TMPMNT
rsync -a -H --exclude=TRANS.TBL TMPMNT/ CDROM
umount TMPMNT
rmdir TMPMNT

# repack initrd
(cd irmod ; gzip -d < ../CDROM/install.amd/initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames)
# add custom preseed
cp -f $MYPRES irmod/preseed.cfg
(cd irmod ; find . | cpio -H newc --create --verbose | gzip -9 > ../CDROM/install.amd/initrd.gz)
rm -rf irmod/
rm $MYPRES

# Fix md5 sum
(cd CDROM ; md5sum `find -follow -type f` > md5sum.txt)

# isolinux conf whith enable autostart install
echo "# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
path
include menu.cfg
default vesamenu.c32
prompt 0
timeout 50" > CDROM/isolinux/isolinux.cfg

# postinst.sh скрипт
echo "
#!/bin/bash

# более удобный gnu screen
echo -e '\nmy conf' >> /etc/screenrc
echo 'startup_message off' >> /etc/screenrc
echo 'caption always \"%?%F%{-b wk}|%:%?%c|%d.%m.%Y|%{-b wr}|%H%?%F|%{+u wb}%?%L=%-Lw%45>%{+b bw}|%n%f*%t|%{-}%+Lw%-0<\"' >> /etc/screenrc

# заполняем sources.list
cat << EOF > /etc/apt/sources.list
deb http://ftp.ru.debian.org/debian/ stretch main
deb http://security.debian.org/ stretch/updates main
deb http://ftp.ru.debian.org/debian/ stretch-updates main
EOF" > CDROM/postinst.sh

# Собираем образ
# получившийся образ только для CD и загрузки в виртуальных машинах
#genisoimage -o $OUTISO -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ./CDROM
# теперь будет работать и загрузка с USB-флешек
xorriso -as mkisofs -o $OUTISO -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table ./CDROM
rm -rf CDROM
isohybrid -o $OUTISO

# сохраняем конфигурацию
echo "--------------------------------------------------------
Hostname: $HOSTNAME
IP адрес: $IP
Маска подсети: $NETMASK
Шлюз: $GATE
DNS сервер: $NAMESERVERS
Пароль для root/installer: $ROOTPASS
Имя нового пользователя: $USERNAME
Пароль нового пользователя: $USERPASS
--------------------------------------------------------" >$OUTCONF

# TA-DA!
#whiptail --title "Дополнителная информация" --msgbox "Через минуту-две после запуска установки, установщик будет доступен по ssh,\nпо указанному в процессе конфигурации IP. Логин \"installer\", пароль как у root'а. \nКонфигурация получившегося iso-образа лежит рядом с новым iso - \n$OUTCONF" 10 100
whiptail --title "Дополнителная информация" --msgbox "Через минуту-две после запуска установки, установщик будет доступен по ssh,
по указанному в процессе конфигурации IP. Логин \"installer\", пароль как у root'а.
Конфигурация получившегося iso-образа записана рядом с новым - \n$OUTCONF" 10 100
S_Paul
 
Posts: 2
Joined: 2019-10-15 08:47


Return to Installation

Who is online

Users browsing this forum: No registered users and 1 guest

fashionable