home · contact · privacy
Run start_root_t490s.sh on first login.
authorPlom Heller <plom@plomlompom.com>
Wed, 9 Sep 2026 05:27:59 +0000 (07:27 +0200)
committerPlom Heller <plom@plomlompom.com>
Wed, 9 Sep 2026 05:27:59 +0000 (07:27 +0200)
setup_scripts/_lib.sh
setup_scripts/install_debian.sh
setup_scripts/install_server.sh
setup_scripts/setup_git_mirror.sh
setup_scripts/start_root_t490s.sh

index fc4e7687f3c40527f48d77baed6557eb5a46e9d2..b1695a4274ac8e157c1e62891a4a87fe6ef2e990 100644 (file)
@@ -5,6 +5,7 @@ cd "$(dirname "${SCRIPT_NAME}")"
 # constants unlikely to change
 DIRNAME_DEV=dev
 DIRNAME_SSH=.ssh
+FNAME_FIRST_BOOT_PENDING=.first-boot-pending
 FNAME_INITRD=initrd.img
 FNAME_PROFILE=.profile
 FNAME_VMLINUZ=vmlinuz
@@ -28,13 +29,15 @@ USERNAME=plom
 
 # constants derived from changeables
 PATH_BOOT_DEVICE="${PATH_DEV}/${NAME_BOOT_DEVICE}"
+PATH_FIRST_BOOT_PENDING="/root/${FNAME_FIRST_BOOT_PENDING}"
 PATH_MY_SSH="${HOME}/${DIRNAME_SSH}"
 PATH_PARTITION_EFI="${PATH_BOOT_DEVICE}p${IDX_PARTITION_EFI}"
 PATH_PARTITION_LUKSVG="${PATH_BOOT_DEVICE}p${IDX_PARTITION_LUKSVG}"
 PATH_PARTITION_RESCUE="${PATH_BOOT_DEVICE}p${IDX_PARTITION_RESCUE}"
 PATH_PROFILE="${HOME}/${FNAME_PROFILE}"
 PATH_REPO=$(cd .. && pwd)
-NAME_REPO_DIR=$(basename "${PATH_REPO}")
+PATH_SCRIPTS="${PATH_REPO}/setup_scripts"
+DIRNAME_REPO=$(basename "${PATH_REPO}")
 PATH_TEMPLATES="${PATH_REPO}/templates"
 
 # path constructors
index 32796d91c0f845a46f33dcbe4ce6d0349c421b8d..c653a59a308f5777a53170cdd5a830c0741f634a 100755 (executable)
@@ -20,13 +20,16 @@ NAME_ROOT="${NAME_BOOT}"
 
 # constants derived from changeables
 PATH_EFI_NAME_BOOT="${PATH_EFI}/${NAME_BOOT}"
+PATH_FIRST_BOOT_SCRIPT="/${NAME_DATA}/${PATH_SCRIPTS}//start_root_t490s.sh"
 PATH_MNT_APT_SOURCES="${PATH_MNT_ROOT}/etc/apt/sources.list"
 PATH_MNT_CRYPTTAB="${PATH_MNT_ROOT}${PATH_CRYPTTAB}"
+PATH_MNT_FIRST_BOOT_PENDING="${PATH_MNT_ROOT}${PATH_FIRST_BOOT_PENDING}"
 PATH_MNT_FSTAB="${PATH_MNT_ROOT}${PATH_FSTAB}"
 PATH_MNT_HOSTNAME="${PATH_MNT_ROOT}${PATH_HOSTNAME}"
 PATH_MNT_HOSTS="${PATH_MNT_ROOT}${PATH_HOSTS}"
 PATH_MNT_NM_CONN="${PATH_MNT_ROOT}${PATH_NM_CONNECTIONS}/${FNAME_NM_CONN}"
 PATH_MNT_NM_CONNECTIONS="${PATH_MNT_ROOT}${PATH_NM_CONNECTIONS}"
+PATH_MNT_PROFILE="${PATH_MNT_ROOT}/root/${FNAME_PROFILE}"
 PATH_VG=$(path_vg "${NAME_LUKSVG}")
 # shellcheck disable=SC2034
 # (used only inside templates/fstab, rendered via render_template)
@@ -80,6 +83,12 @@ msg 'Setting up hostname …'
 printf '%s\n' "${NAME_BOOT}" >| "${PATH_MNT_HOSTNAME}"
 printf '127.0.1.1\t%s\n' "${NAME_BOOT}" >> "${PATH_MNT_HOSTS}"
 
+msg 'Installing first-boot hook into root %s …' "${FNAME_PROFILE}"
+touch "${PATH_MNT_FIRST_BOOT_PENDING}"
+printf '[ -e "%s" ] && sh "%s"\n' \
+    "${PATH_FIRST_BOOT_PENDING}" "${PATH_FIRST_BOOT_SCRIPT}" \
+    >> "${PATH_MNT_PROFILE}"
+
 msg 'For firmware-iwlwifi, enabling non-free-firmware in target sources.list …'
 sed -i 's/ main$/ main non-free-firmware/' "${PATH_MNT_APT_SOURCES}"
 
index ae42373369bd69ceba90b2bc96cd0b705bddfb28..387744f25d41e1aa277e6d7965c4d12882b14cfe 100755 (executable)
@@ -7,7 +7,7 @@ OPTS_SSH_NEW_HOST="-o StrictHostKeyChecking=accept-new"
 
 # constants derived from changeables
 PATH_REPO_PARENT=$(dirname "${PATH_REPO}")
-PATH_SETUP_SCRIPT="./${NAME_REPO_DIR}/setup_scripts/start_root_server.sh"
+PATH_SETUP_SCRIPT="./${PATH_SCRIPTS}/start_root_server.sh"
 
 # inputs to confirm
 usage $# "server"
@@ -21,7 +21,7 @@ check_tools scp ssh ssh-keygen tar
 PATH_TEMP=$(mktemp --directory)
 PATH_REPO_TAR="${PATH_TEMP}/${FNAME_REPO_TAR}"
 msg 'Creating tar of repo in temporary directory %s …' "${PATH_TEMP}"
-tar cf "${PATH_REPO_TAR}" -C "${PATH_REPO_PARENT}" "${NAME_REPO_DIR}"
+tar cf "${PATH_REPO_TAR}" -C "${PATH_REPO_PARENT}" "${DIRNAME_REPO}"
 
 msg 'Uploading repo tar to server …'
 if [ -e "${PATH_MY_KNOWN_HOSTS}" ]; then
index c4e529d2c38ad25d627f8d3df942d15d30724a5b..e531f1ac0ec0057c4287f761dd433fd4d4159eba 100755 (executable)
@@ -6,7 +6,7 @@ PATH_GIT_BASE=/srv/git
 
 # constants derived from changeables
 PATH_GIT_DAEMON_UNIT=/etc/systemd/system/git-daemon.service
-PATH_GIT_MIRROR="${PATH_GIT_BASE}/${NAME_REPO_DIR}.git"
+PATH_GIT_MIRROR="${PATH_GIT_BASE}/${DIRNAME_REPO}.git"
 PATH_TEMPLATE_GIT_DAEMON="${PATH_TEMPLATES}/git-daemon.service"
 
 [ -e "${PATH_GIT_MIRROR}" ]\
@@ -29,7 +29,7 @@ render_template "${PATH_TEMPLATE_GIT_DAEMON}" >| "${PATH_GIT_DAEMON_UNIT}"
 systemctl daemon-reload
 systemctl enable --now git-daemon
 
-msg 'Anonymous clone URL: git://<this-server>/%s.git' "${NAME_REPO_DIR}"
+msg 'Anonymous clone URL: git://<this-server>/%s.git' "${DIRNAME_REPO}"
 msg 'Push updates later with: git push ssh://%s@<this-server>%s' \
     "${USERNAME}" "${PATH_GIT_MIRROR}"
 msg 'Firewall note: git daemon listens on port 9418/tcp.'
index 9b1a42947a4b4027415c0aef3b973d4aabe90ad9..8a9369729919a5541acf9b0ba44bc76559a78c39 100755 (executable)
@@ -19,7 +19,7 @@ TLP_THRESH_STOP=80
 PATH_TO_COPY="${PATH_REPO}/to_copy"
 # shellcheck disable=SC2034
 # (used only inside templates/update-efi-hook, rendered via render_template)
-PATH_UPDATE_EFI_SCRIPT="${PATH_REPO}/setup_scripts/update_efi.sh"
+PATH_UPDATE_EFI_SCRIPT="${PATH_SCRIPTS}/update_efi.sh"
 
 # before any apt-get call gets a chance to pull in a kernel update of its own …
 msg 'Installing initramfs hook to refresh EFI boot files on kernel updates …'
@@ -51,3 +51,6 @@ cp "${PATH_TO_COPY}/${FNAME_UDEV_RULES_BACKLIGHT}" "${PATH_UDEV_RULES}/"
 udevadm control --reload-rules
 udevadm trigger --action=add --subsystem-match=backlight
 usermod -a -G video "${USERNAME}"
+
+msg 'Clearing first-boot pending marker …'
+rm -f "${PATH_FIRST_BOOT_PENDING}"