Debian Preseed - ein zweifelhaftes Vergnügen

24 Jan 2021 - Lesezeit: 6 Minuten

Vielleicht bin ich ja verwöhnt. Oder ich werde alt. Jedoch hatte ich zuletzt die Gelegenheit eine Debian Linux Installation teilweise zu automatisieren. Warum ist schnell erklärt: man möchte sich einfach zum einen gewisse Arbeitsschritte sparen (sollte eine Pflicht bei mehreren Serverinstallationen sein) und zum anderen möchte man Fehlerquellen ausschließen (Beispielsweise Namenskonventionen oder ähnliches).

Nun schreiben wir das Jahr 2021 und alle reden von Cloud und Serverless und so. Doch in kleinen Dörfern gibt es noch immer Menschen die den Kram dahinter installieren und administrieren. Zu diesen Menschen gehöre ich. Und ich mag es nicht, sich wiedehrolende Aufgaben von Hand zu erledigen.

Wenn man sich mit einem Debian Linux herumschlagen muss, dann greift man entweder zu FAI - was grundsätzlich ein interessantes Projekt zu sein scheint. Oder aber man baut sich im einfachsten Fall eine Preseed.cfg Datei, welche die Antworten für den Debian-Installer enthält.

Dabei muss man sich zu allererst klar machen: jede Frage, die nicht beantwortet wird, wird durch den Installer gestellt. Im Klartext bedeutet das: wenn ich zum Beispiel nach dem Hostnamen gefragt werden will, darf ich ihn nicht definieren - bzw. muss die Domain weg lassen und solche Scherze.

Das kann ganz schön nervig sein. Letztendlich erhält man aber eine Datei, die man entweder über einen Webserver bereitstellen kann , oder man remastert sich das ISO. Ich habe mich für letzteres entschieden und zeige hier die Schritte auf.

Zunächst einmal machen wir uns ein Verzeichnis, in welchem wir alle Daten packen werden, die wir für unser ISO remaster brauchen:

mkdir my-fantastic-new-debian-iso
cd ./my-fantastic-new-debian-iso

Dann sollten wir uns auch gleich zu Beginn die Debian ISO besorgen die wir remastern wollen.

wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.7.0-amd64-netinst.iso -O debian-10-amd64-netinst.iso

Nun schreiben wir uns eine Preseed.cfg Datei, die uns die meisten Dinge bei der Installation abnimmt. Was wir noch übrig lassen ist die Servernamen-, Domain- und Netzwerkkonfiguration

cat << EOF > preseed.cfg
# set installer language
d-i debian-installer/language string de
# set installer country
d-i debian-installer/country string DE
# set installer locale
d-i debian-installer/locale string de_DE.UTF-8
# set installer keyboard
d-i keyboard-configuration/xkb-keymap select de

# configure network on a server - yes I think it is a good idea
d-i netcfg/enable boolean true

# if not, I want to choose the networkcard to configure
#d-i netcfg/choose_interface select auto

# if DHCP is available - just ignore it
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/confirm_static boolean true

# just for lazyness
d-i netcfg/hostname string this-is-my-servername

# just use working firmware if exists
d-i hw-detect/load_firmware boolean true

# set the debian mirror for stuff
d-i mirror/country string manual
d-i mirror/http/hostname string ftp2.de.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
d-i mirror/suite string stable

# set the initial root password... use some secure things like 1234 or so....
d-i passwd/root-password password yes-it-is-me-root
d-i passwd/root-password-again password yes-it-is-me-root

# I do not want to create a user... working with root is fine (joke)
d-i passwd/make-user boolean false

# set timezone 
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Berlin

# install puppet repo, becaus I like the way it work
d-i apt-setup/local0/repository string deb http://apt.puppetlabs.com/ buster puppet6
d-i apt-setup/local0/key string https://apt.puppetlabs.com/pubkey.gpg

# select software to install 
tasksel tasksel/first multiselect standard,ssh-server
d-i pkgsel/include string puppet-agent nscd

# just after installing: enable root login so that I can do my work
d-i preseed/late_command string \
   in-target sh -c 'sed -i "s/^#PermitRootLogin.*\$/PermitRootLogin yes/g" /etc/ssh/sshd_config'; \
   cp /cdrom/partition.sh /target/root/

# update my software if it is installed
d-i pkgsel/upgrade select full-upgrade

# I don't want to publish my software usage
popularity-contest popularity-contest/participate boolean false

d-i grub-installer/only_debian boolean true
EOF

So, damit können wir schon mal arbeiten. Wenn ich nun ein Debian installieren, dann werden wir nach der manuellen Netzwerkkonfiguration gefragt und auch nach der Partitionierung. Zum Schluss wird der Root-Login noch aktiviert - das sollte man lassen, aber es zeigt, das auch im Nachgang an die Installation Anpassungen an dem System möglich sind.

Jetzt müssen wir das ganze noch in ein, sagen wir netinstall, ISO packen. Dazu führe ich nun einfach die schritte auf, die gegangen werden um sowohl das ISO herunterzuladen, als auch die Preseed.cfg in die initrd zu bekommen.

# create a folder for mounting the iso
mkdir ORIGISO
# create a folder for the content of the new iso
mkdir NEWISO
# mount the downloaded iso
sudo mount -o loop debian-10-amd64-netinst.iso ./ORIGISO
# copy the content of the original ISO to the workspace
cp -rT ./ORIGISO/ ./NEWISO/
# umount the iso
sudo umount ./ORIGISO
# now the magic beginns
chmod +w -R ./NEWISO/install.amd/
gunzip ./NEWISO/install.amd/initrd.gz
echo preseed.cfg | cpio -H newc -o -A -F ./NEWISO/install.amd/initrd
gzip ./NEWISOCONTENT/install.amd/initrd
chmod -w -R ./NEWISO/install.amd
chmod +w ./NEWISO/md5sum.txt
find -follow -type f ! -name md5sum.txt -print0 | xargs -0 md5sum > ./NEWISO/md5sum.txt
chmod -w ./NEWISO/md5sum.txt
# generate the iso
sudo genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o preseed-debian-10.iso ./NEWISO
# remove all the temporary stuff
sudo rm -fR ./ORIGISO ./NEWISO preseed.cfg

Was dann dabei raus kommt ist eine Datei preseed-debian-10.iso. Diese kann man dann zum Installieren nutzen.

Christoph
Geschrieben von Christoph am 8 Feb 2023

da scheint was nicht zu passen ..der Loop von ./debian wird nicht abgfangen

Jörg Admin
Geschrieben von Jörg am 17 Mär 2023

Ich bin mir jetzt nicht sicher, ob ich verstehe was Du meinst.. aber ich gehe jetzt einfach mal davon aus, dass mein Theme hier die Anzeige verhauen hat. Der Loop ist einfach nur für den Mount des ISO notwendig. Sorry for that!