Added Postinstall Scripts

This commit is contained in:
Jan 2025-04-07 16:49:23 +02:00
parent 49bb74859f
commit fd27618915
5 changed files with 169 additions and 5 deletions

View file

@ -1,7 +1,12 @@
cd source-files
cd "$(dirname "$0")"
cp preseed/preseed.cfg source/preseed.cfg
cp preseed/gtk.cfg source/isolinux/gtk.cfg
cd source
xorriso -as mkisofs \
-o ../debian-angestoepselt.iso \
-o ../images/debian-angestoepselt.iso \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot \

10
preseed/gtk.cfg Normal file
View file

@ -0,0 +1,10 @@
default installgui
label installgui
menu label ^Graphical install
menu default
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/gtk/initrd.gz --- quiet
label auto-wipe
menu label ^Isopropanol (angestoepselt)
kernel /install.amd/vmlinuz
append auto=true priority=critical vga=788 file=/cdrom/preseed.cfg initrd=/install.amd/initrd.gz --- quiet

116
preseed/preseed.cfg Executable file
View file

@ -0,0 +1,116 @@
### Allgemeines
# Verhindert weniger wichtige Nachfragen
# https://www.debian.org/releases/sarge/s390/ch05s02.html.en
# https://preseed.debian.net/debian-preseed/bullseye/amd64-main-full.txt
d-i debconf/priority string critical
# Deaktiviert die Meldung am Ende, dass die Installation abgeschlossen wurde und man neu starten kann
d-i finish-install/reboot_in_progress note
# Gibt an, ob Infos zum Nutzungsverhalten (installierte/verwendete Software) an Debian gesendet werden
popularity-contest popularity-contest/participate boolean false
# Proprietaere Firmware laden (falls es zu Hardwareproblemen kommt)
#d-i hw-detect/load_firmware boolean true
### Lokalisierung
d-i debian-installer/locale string de_DE
# Keymap setzen reicht nicht, layout/variantcode hilft ebenfalls nicht: https://groups.google.com/g/linux.debian.bugs.dist/c/XYcrRjLwpQM
d-i keyboard-configuration/variant select Deutschland
d-i keyboard-configuration/xkb-keymap select de
d-i clock-setup/utc boolean true
d-i tzdata/Areas select Europe
tzdata/Zones/Europe select Berlin
d-i time/zone string Europe/Berlin
### Partitionierung
# Grub wird automatisch auf den MBR installiert, wenn kein anderes OS vorhanden ist (sicher)
d-i grub-installer/only_debian boolean true
# MBR installation ebenfalls wenn andere OS vorhanden sind (koennte dazu fuehren, dass diese nicht mehr booten)
#d-i grub-installer/with_other_os boolean true
# Verhindert, dass grub alternativ fragt, wo er installiert werden soll
d-i grub-installer/bootdev string /dev/sda
# Fuer die vollautomatische Partitionierung (falls unten aktiv) - Beispiel Lenovo Tiny mit NVMe-SSD
# VirtualBox -> /dev/sda, KVM -> /dev/vda
#d-i partman-auto/disk string /dev/nvme0n1
# Fuer lvm 'lvmcfg/vgdelete_confirm', 'partman-lvm/confirm' und 'partman-lvm/confirm_nooverwrite' setzen
# Siehe https://www.debian.org/releases/stable/s390x/apbs04.de.html Abschnitt B.4.7.1.
d-i partman-auto/method string regular
# Alle Daten auf einer Partition (mit 'home' wird das Home-Verzeichnis auf eine eigene Partition gelegt)
d-i partman-auto/choose_recipe select atomic
# Komplett automatisiert ohne Bestaetigung fuer alle Partitionierungsmethoden (Mit Vorsicht verwenden!)
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman-md/confirm boolean true
d-i partman-md/deleteverify boolean true
d-i lvmcfg/vgdelete_confirm boolean true
d-i partman-lvm/vgdelete_confirm boolean true
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
### Software
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
# Aktiviert Spiegelserver abseits der Sicherheitsupdates per Netzwerk statt Image
d-i apt-setup/use_mirror boolean true
d-i apt-setup/disable-cdrom-entries boolean true
# Aktiviert offizielle, aber unfreie Repositorys: https://wiki.debian.org/SourcesList
#d-i apt-setup/non-free boolean true
#d-i apt-setup/contrib boolean true
# Vorinstallierte Software
# Programmgruppe kann festlegen, ob z.B. Headless oder eine bestimmte Desktopumgebung (xfce-desktop, kde-desktop usw) vorinstalliert werden soll (siehe B.4.10)
tasksel tasksel/first multiselect standard, gnome-desktop
d-i pkgsel/install-language-support boolean true
d-i pkgsel/update-policy select Install security updates automatically
# Alle Pakete automatisch aktualisieren
d-i pkgsel/upgrade select full-upgrade
d-i pkgsel/include string git vim htop curl jq
# Stdout Weiterleitungen funktionieren in in-target nicht ohne --pass-stdout
# Siehe https://askubuntu.com/a/1248987/650986 und https://serverfault.com/questions/390122/how-do-i-pipe-commands-together-in-a-debian-preseed-file
### Benutzerkonten
d-i passwd/username string computerspende
d-i passwd/user-fullname string computerspende
d-i passwd/user-uid string 1000
d-i passwd/user-password password csw
d-i passwd/user-password-again password csw
# root
d-i passwd/root-password password csw
d-i passwd/root-password-again password csw
# Fuer Testsysteme kann die Policy strikter PWs abgeschaltet werden
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
d-i user-setup/enable sudo boolean true
### Netzwerk
d-i netcfg/enable boolean true
d-i netcfg/choose_interface select auto
d-i netcfg/hostname string computerspende
d-i preseed/late_command string \
in-target --pass-stdout bash -c "echo 'computerspende ALL=NOPASSWD:ALL' > /etc/sudoers.d/computerspende"; \
in-target bash -c 'echo "#!/bin/bash" > /home/computerspende/echo_message.sh'; \
in-target bash -c 'echo "echo \"Hello, this is a message from late_command!\"" >> /home/computerspende/echo_message.sh'; \
in-target bash -c 'echo "read p" >> /home/computerspende/echo_message.sh '; \
in-target chmod +x /home/computerspende/post_hardware.sh; \
in-target bash -c 'mkdir -p /home/computerspende/.config/autostart'; \
in-target bash -c 'echo "[Desktop Entry]" > /home/computerspende/.config/autostart/post_hardware.desktop'; \
in-target bash -c 'echo "Type=Application" >> /home/computerspende/.config/autostart/post_hardware.desktop'; \
in-target bash -c 'echo "Terminal=true" >> /home/computerspende/.config/autostart/post_hardware.desktop'; \
in-target bash -c 'echo "Exec=gnome-terminal -- /home/computerspende/post_hardware.sh" >> /home/username/.config/autostart/post_hardware.desktop'; \
in-target bash -c 'echo "Name=Post Hardware Setup" >> /home/computerspende/.config/autostart/post_hardware.desktop'; \
in-target bash -c 'chown computerspende:computerspende /home/computerspende/post_hardware.sh'; \
in-target bash -c 'chown -R computerspende:computerspende /home/computerspende/.config'

View file

@ -0,0 +1,34 @@
def convert_to_in_target(bash_script_path, target_username):
try:
with open(bash_script_path, 'r') as file:
lines = file.readlines()
in_target_commands = []
# Construct the script creation command
script_creation_cmd = f"in-target bash -c 'echo \"#!/bin/bash\" > /home/{target_username}/post_hardware.sh'"
in_target_commands.append(script_creation_cmd)
# Convert each script line into an in-target command
for line in lines:
# Strip the line to remove leading/trailing whitespace
stripped_line = line.strip()
if stripped_line: # Ignore empty lines
escaped_line = stripped_line.replace('"', '\\"').replace('$', '\\$')
cmd = f"in-target bash -c 'echo \"{escaped_line}\" >> /home/{target_username}/post_hardware.sh'"
in_target_commands.append(cmd)
# Add command to make the script executable
in_target_commands.append(f"in-target chmod +x /home/{target_username}/post_hardware.sh")
# Output the generated in-target commands
for command in in_target_commands:
print(command)
except FileNotFoundError:
print("The specified bash script file does not exist.")
# Usage
bash_script_path = 'post_hardware.sh' # Replace with the path to your bash script
target_username = 'computerspende' # Replace with the target user's username
convert_to_in_target(bash_script_path, target_username)

View file

@ -3,7 +3,7 @@
# Change to the script's directory
cd "$(dirname "$0")"
ISO_URL="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.9.0-amd64-netinst.iso"
ISO_URL="https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-12.9.0-amd64-DVD-1.iso"
IMAGE_DIR="images"
ISO_NAME="$IMAGE_DIR/debian-server.iso"
SOURCE_DIR="source"
@ -18,4 +18,3 @@ wget -O "$ISO_NAME" "$ISO_URL"
xorriso -osirrox on -indev "$ISO_NAME" -extract / "$SOURCE_DIR/"
echo "Debian server ISO file downloaded to $IMAGE_DIR and extracted to $SOURCE_DIR"