Scheduled Maintenance: We are aware of an issue with Google, AOL, and Yahoo services as email providers which are blocking new registrations. We are trying to fix the issue and we have several internal and external support tickets in process to resolve the issue. Please see: viewtopic.php?t=158230

 

 

 

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

Ask for help with issues regarding the Installations of the Debian O/S.
Post Reply
Message
Author
S_Paul
Posts: 2
Joined: 2019-10-15 08:47

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

#1 Post by S_Paul »

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)

#2 Post by S_Paul »

#!/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

Post Reply