From 104e7bd4ccb34babc0e65a8c26f0ee5629d7e41e Mon Sep 17 00:00:00 2001 From: oxmc7769 Date: Thu, 5 Mar 2026 02:16:50 -0800 Subject: [PATCH] Test --- README.md | 2 +- build.sh | 15 -- depends | 3 + export-iso/03-set-partuuid/00-run.sh | 24 +-- export-iso/04-finalise/01-run.sh | 191 ++++++++----------- export-iso/prerun.sh | 135 +------------ stage1/01-sys-tweaks/00-run.sh | 12 +- stage1/02-net-tweaks/01-run-arm-only.sh | 2 +- stage2/01-sys-tweaks/01-run.sh | 14 -- stage2/02-net-tweaks/01-run-arm-only.sh | 2 +- stage3/00-install-packages/01-packages-amd64 | 6 +- stage3/02-setup-system/00-run.sh | 7 - stage3/02-setup-system/01-run-arm-only.sh | 2 +- 13 files changed, 112 insertions(+), 303 deletions(-) diff --git a/README.md b/README.md index 60cc605..13f6180 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ To install the required dependencies for building ChillcraftOS, run the followin ```bash apt install coreutils quilt parted qemu-user-static debootstrap zerofree zip \ dosfstools e2fsprogs libarchive-tools libcap2-bin grep rsync xz-utils file git curl bc \ -gpg pigz xxd arch-test bmap-tools kmod +gpg pigz xxd arch-test bmap-tools kmod squashfs-tools xorriso mtools ``` The `depends` file in the repository lists all the necessary tools, formatted as `[:]`. diff --git a/build.sh b/build.sh index 1153310..a74080f 100755 --- a/build.sh +++ b/build.sh @@ -245,8 +245,6 @@ export COMPRESSION_LEVEL=${COMPRESSION_LEVEL:-6} export LOG_FILE="${WORK_DIR}/build.log" export TARGET_HOSTNAME=${TARGET_HOSTNAME:-chillcraftos} -export FIRST_USER_NAME=${FIRST_USER_NAME:-system} -export FIRST_USER_ISSYSTEM=${FIRST_USER_ISSYSTEM:-true} export WPA_COUNTRY export ENABLE_SSH="${ENABLE_SSH:-0}" export PUBKEY_ONLY_SSH="${PUBKEY_ONLY_SSH:-0}" @@ -260,8 +258,6 @@ export TIMEZONE_DEFAULT="${TIMEZONE_DEFAULT:-Americas/Los_Angeles}" export GIT_HASH=${GIT_HASH:-"$(git rev-parse HEAD)"} -export PUBKEY_SSH_FIRST_USER - export CLEAN export APT_PROXY export TEMP_REPO @@ -321,12 +317,6 @@ if ! arch-test -n "$ARCH"; then fi fi -#check username is valid -if [[ ! "$FIRST_USER_NAME" =~ ^[a-z][-a-z0-9_]*$ ]]; then - echo "Invalid FIRST_USER_NAME: $FIRST_USER_NAME" - exit 1 -fi - if [[ -n "${APT_PROXY}" ]] && ! curl --silent "${APT_PROXY}" >/dev/null; then echo "Could not reach APT_PROXY server: ${APT_PROXY}" exit 1 @@ -337,11 +327,6 @@ if [[ -n "${WPA_PASSWORD}" && ${#WPA_PASSWORD} -lt 8 || ${#WPA_PASSWORD} -gt 63 exit 1 fi -if [[ "${PUBKEY_ONLY_SSH}" = "1" && -z "${PUBKEY_SSH_FIRST_USER}" ]]; then - echo "Must set 'PUBKEY_SSH_FIRST_USER' to a valid SSH public key if using PUBKEY_ONLY_SSH" - exit 1 -fi - log "Begin ${BASE_DIR}" STAGE_LIST=${STAGE_LIST:-${BASE_DIR}/stage*} diff --git a/depends b/depends index 752ba79..16f8b22 100644 --- a/depends +++ b/depends @@ -21,3 +21,6 @@ bc gpg pigz arch-test +squashfs-tools +xorriso +mtools \ No newline at end of file diff --git a/export-iso/03-set-partuuid/00-run.sh b/export-iso/03-set-partuuid/00-run.sh index c4d0304..23f2982 100755 --- a/export-iso/03-set-partuuid/00-run.sh +++ b/export-iso/03-set-partuuid/00-run.sh @@ -1,15 +1,17 @@ #!/bin/bash -e -IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" +ROOT_DEV="$(awk "\$2 == \"${ROOTFS_DIR}\" {print \$1}" /etc/mtab)" +BOOT_DEV="$(awk "\$2 == \"${ROOTFS_DIR}/boot\" {print \$1}" /etc/mtab)" +EFI_DEV="$(awk "\$2 == \"${ROOTFS_DIR}/boot/efi\" {print \$1}" /etc/mtab)" -IMGID="$(dd if="${IMG_FILE}" skip=440 bs=1 count=4 2>/dev/null | xxd -e | cut -f 2 -d' ')" +ROOT_UUID="$(blkid -s UUID -o value "${ROOT_DEV}")" +BOOT_UUID="$(blkid -s UUID -o value "${BOOT_DEV}")" +EFI_UUID="$(blkid -s UUID -o value "${EFI_DEV}")" -BOOT_PARTUUID="${IMGID}-01" -ROOT_PARTUUID="${IMGID}-02" -#HOME_PARTUUID="${IMGID}-03" - -sed -i "s/BOOTDEV/PARTUUID=${BOOT_PARTUUID}/" "${ROOTFS_DIR}/etc/fstab" -sed -i "s/ROOTDEV/PARTUUID=${ROOT_PARTUUID}/" "${ROOTFS_DIR}/etc/fstab" -#sed -i "s/HOMEDEV/PARTUUID=${HOME_PARTUUID}/" "${ROOTFS_DIR}/etc/fstab" - -sed -i "s/ROOTDEV/PARTUUID=${ROOT_PARTUUID}/" "${ROOTFS_DIR}/boot/firmware/cmdline.txt" +# Write amd64-appropriate fstab (boot at /boot, EFI at /boot/efi) +cat > "${ROOTFS_DIR}/etc/fstab" << EOF +proc /proc proc defaults 0 0 +UUID=${BOOT_UUID} /boot vfat defaults 0 2 +UUID=${EFI_UUID} /boot/efi vfat defaults 0 2 +UUID=${ROOT_UUID} / ext4 defaults,noatime 0 1 +EOF diff --git a/export-iso/04-finalise/01-run.sh b/export-iso/04-finalise/01-run.sh index da6ab55..87daaf9 100755 --- a/export-iso/04-finalise/01-run.sh +++ b/export-iso/04-finalise/01-run.sh @@ -1,18 +1,16 @@ #!/bin/bash -e -IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" -INFO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.info" -SBOM_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.sbom" -BMAP_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.bmap" +ISO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.iso" +ISO_TEMP_DIR="${STAGE_WORK_DIR}/iso_temp" +# Step 1: Generate initramfs. +# Because live-boot-initramfs-tools is installed, the generated initrd will +# include live-boot hooks that can find and mount the squashfs from the ISO. on_chroot << EOF update-initramfs -k all -c if [ -x /etc/init.d/fake-hwclock ]; then /etc/init.d/fake-hwclock stop fi -if hash hardlink 2>/dev/null; then - hardlink -t /usr/share/doc -fi EOF if [ -f "${ROOTFS_DIR}/etc/initramfs-tools/update-initramfs.conf" ]; then @@ -20,122 +18,91 @@ if [ -f "${ROOTFS_DIR}/etc/initramfs-tools/update-initramfs.conf" ]; then sed -i 's/^MODULES=.*/MODULES=dep/' "${ROOTFS_DIR}/etc/initramfs-tools/initramfs.conf" fi -#if [ -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config" ]; then -# chmod 700 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config" -#fi +# Step 2: Build a standalone GRUB EFI binary inside the chroot. +# grub-mkstandalone embeds all required modules so no separate EFI partition is needed. +on_chroot << EOF +mkdir -p /tmp/grub-standalone +grub-mkstandalone \ + --format=x86_64-efi \ + --output=/tmp/grub-standalone/bootx64.efi \ + --modules="part_gpt part_msdos fat iso9660 ext2 normal search \ + search_fs_uuid search_fs_file search_label all_video \ + gfxterm gfxterm_background" \ + --locales="" \ + --fonts="" +EOF -rm -f "${ROOTFS_DIR}/usr/bin/qemu-arm-static" +# Step 3: Assemble ISO directory structure +mkdir -p "${ISO_TEMP_DIR}/boot/grub" +mkdir -p "${ISO_TEMP_DIR}/live" +mkdir -p "${ISO_TEMP_DIR}/EFI/boot" -if [ "${USE_QEMU}" != "1" ]; then - if [ -e "${ROOTFS_DIR}/etc/ld.so.preload.disabled" ]; then - mv "${ROOTFS_DIR}/etc/ld.so.preload.disabled" "${ROOTFS_DIR}/etc/ld.so.preload" - fi -fi +# Copy kernel and initrd (resolving symlinks) +cp -L "${ROOTFS_DIR}/boot/vmlinuz" "${ISO_TEMP_DIR}/boot/vmlinuz" +cp -L "${ROOTFS_DIR}/boot/initrd.img" "${ISO_TEMP_DIR}/boot/initrd.img" -rm -f "${ROOTFS_DIR}/etc/network/interfaces.dpkg-old" +# Copy GRUB EFI binary from chroot +cp "${ROOTFS_DIR}/tmp/grub-standalone/bootx64.efi" "${ISO_TEMP_DIR}/EFI/boot/bootx64.efi" -rm -f "${ROOTFS_DIR}/etc/apt/sources.list~" -rm -f "${ROOTFS_DIR}/etc/apt/trusted.gpg~" +# Step 4: Write the live-boot grub.cfg +cat > "${ISO_TEMP_DIR}/boot/grub/grub.cfg" << 'GRUBEOF' +set default=0 +set timeout=5 -rm -f "${ROOTFS_DIR}/etc/passwd-" -rm -f "${ROOTFS_DIR}/etc/group-" -rm -f "${ROOTFS_DIR}/etc/shadow-" -rm -f "${ROOTFS_DIR}/etc/gshadow-" -rm -f "${ROOTFS_DIR}/etc/subuid-" -rm -f "${ROOTFS_DIR}/etc/subgid-" +insmod part_gpt +insmod part_msdos +insmod fat +insmod iso9660 +insmod ext2 +insmod all_video +insmod gfxterm -rm -f "${ROOTFS_DIR}"/var/cache/debconf/*-old -rm -f "${ROOTFS_DIR}"/var/lib/dpkg/*-old +menuentry "ChillcraftOS Live" { + linux /boot/vmlinuz boot=live components quiet splash + initrd /boot/initrd.img +} -rm -f "${ROOTFS_DIR}"/usr/share/icons/*/icon-theme.cache +menuentry "ChillcraftOS Live (safe mode)" { + linux /boot/vmlinuz boot=live components nomodeset + initrd /boot/initrd.img +} +GRUBEOF -rm -f "${ROOTFS_DIR}/var/lib/dbus/machine-id" +# Step 5: Create squashfs of the rootfs. +# live-boot will find this at /live/filesystem.squashfs on the boot medium. +mksquashfs "${ROOTFS_DIR}" "${ISO_TEMP_DIR}/live/filesystem.squashfs" \ + -comp xz \ + -noappend \ + -e boot/efi \ + -e proc \ + -e sys \ + -e dev \ + -e tmp \ + -e run -true > "${ROOTFS_DIR}/etc/machine-id" +# Step 6: Create small EFI FAT image for El Torito EFI boot entry +EFI_IMG="${ISO_TEMP_DIR}/efi.img" +dd if=/dev/zero of="${EFI_IMG}" bs=1M count=10 +mkfs.vfat "${EFI_IMG}" +mmd -i "${EFI_IMG}" ::/EFI ::/EFI/boot +mcopy -i "${EFI_IMG}" "${ISO_TEMP_DIR}/EFI/boot/bootx64.efi" ::/EFI/boot/bootx64.efi -ln -nsf /proc/mounts "${ROOTFS_DIR}/etc/mtab" +# Step 7: Build the ISO (UEFI El Torito) +xorriso -as mkisofs \ + -r -J -joliet-long \ + -eltorito-alt-boot \ + -e efi.img \ + -no-emul-boot \ + -isohybrid-gpt-basdat \ + -o "${ISO_FILE}" \ + "${ISO_TEMP_DIR}" -find "${ROOTFS_DIR}/var/log/" -type f -exec cp /dev/null {} \; +rm -rf "${ISO_TEMP_DIR}" +rm -f "${ROOTFS_DIR}/tmp/grub-standalone/bootx64.efi" -rm -f "${ROOTFS_DIR}/root/.vnc/private.key" -rm -f "${ROOTFS_DIR}/etc/vnc/updateid" - -update_issue "$(basename "${EXPORT_DIR}")" -install -m 644 "${ROOTFS_DIR}/etc/rpi-issue" "${ROOTFS_DIR}/boot/firmware/issue.txt" -if ! [ -L "${ROOTFS_DIR}/boot/issue.txt" ]; then - ln -s firmware/issue.txt "${ROOTFS_DIR}/boot/issue.txt" -fi - -cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE" - -{ - if [ -f "$ROOTFS_DIR/usr/share/doc/raspberrypi-kernel/changelog.Debian.gz" ]; then - firmware=$(zgrep "firmware as of" \ - "$ROOTFS_DIR/usr/share/doc/raspberrypi-kernel/changelog.Debian.gz" | \ - head -n1 | sed -n 's|.* \([^ ]*\)$|\1|p') - printf "\nFirmware: https://github.com/raspberrypi/firmware/tree/%s\n" "$firmware" - - kernel="$(curl -s -L "https://github.com/raspberrypi/firmware/raw/$firmware/extra/git_hash")" - printf "Kernel: https://github.com/raspberrypi/linux/tree/%s\n" "$kernel" - - uname="$(curl -s -L "https://github.com/raspberrypi/firmware/raw/$firmware/extra/uname_string7")" - printf "Uname string: %s\n" "$uname" - fi - - printf "\nPackages:\n" - dpkg -l --root "$ROOTFS_DIR" -} >> "$INFO_FILE" - -if hash syft 2>/dev/null; then - syft scan dir:"${ROOTFS_DIR}" \ - --base-path="${ROOTFS_DIR}" \ - --source-name="${IMG_NAME}${IMG_SUFFIX}" \ - --source-version="${IMG_DATE}" \ - -o spdx-json="${SBOM_FILE}" -fi - -ROOT_DEV="$(awk "\$2 == \"${ROOTFS_DIR}\" {print \$1}" /etc/mtab)" - -unmount "${ROOTFS_DIR}" -zerofree "${ROOT_DEV}" - -unmount_image "${IMG_FILE}" - -if hash bmaptool 2>/dev/null; then - bmaptool create \ - -o "${BMAP_FILE}" \ - "${IMG_FILE}" -fi +echo "Live ISO created at ${ISO_FILE}" +# Step 8: Deploy mkdir -p "${DEPLOY_DIR}" - -rm -f "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.*" -rm -f "${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" - -case "${DEPLOY_COMPRESSION}" in -zip) - pushd "${STAGE_WORK_DIR}" > /dev/null - zip -"${COMPRESSION_LEVEL}" \ - "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.zip" "$(basename "${IMG_FILE}")" - popd > /dev/null - ;; -gz) - pigz --force -"${COMPRESSION_LEVEL}" "$IMG_FILE" --stdout > \ - "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.img.gz" - ;; -xz) - xz --compress --force --threads 0 --memlimit-compress=50% -"${COMPRESSION_LEVEL}" \ - --stdout "$IMG_FILE" > "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.img.xz" - ;; -none | *) - cp "$IMG_FILE" "$DEPLOY_DIR/" -;; -esac - -if [ -f "${SBOM_FILE}" ]; then - xz -c "${SBOM_FILE}" > "$DEPLOY_DIR/image_$(basename "${SBOM_FILE}").xz" -fi -if [ -f "${BMAP_FILE}" ]; then - xz -c "${BMAP_FILE}" > "$DEPLOY_DIR/image_$(basename "${BMAP_FILE}").xz" -fi -cp "$INFO_FILE" "$DEPLOY_DIR/" +rm -f "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.iso" +cp "${ISO_FILE}" "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.iso" diff --git a/export-iso/prerun.sh b/export-iso/prerun.sh index 06725dc..2b21e3d 100755 --- a/export-iso/prerun.sh +++ b/export-iso/prerun.sh @@ -1,134 +1,9 @@ #!/bin/bash -e -IMG_NAME="${IMG_FILENAME}${IMG_SUFFIX}" -IMG_FILE="${STAGE_WORK_DIR}/${IMG_NAME}.img" -MOUNT_DIR="${ROOTFS_DIR}" -BOOT_SIZE=$((512 * 1024 * 1024)) -EFI_SIZE=$((128 * 1024 * 1024)) # 128MB EFI partition -RECOVERY_SIZE=$((256 * 1024 * 1024)) -ALIGN=$((4 * 1024 * 1024)) +# For live ISO we don't need a disk image — just a plain working directory. +# Substages (apt cleanup, network config) run on_chroot against this directory. -unmount_image "${IMG_FILE}" -rm -f "${IMG_FILE}" -rm -rf "${MOUNT_DIR}" -mkdir -p "${MOUNT_DIR}" +rm -rf "${ROOTFS_DIR}" +mkdir -p "${ROOTFS_DIR}" -# Calculate rootfs size -ROOT_SIZE=$(du -x --apparent-size -s "${EXPORT_ROOTFS_DIR}" --exclude var/cache/apt/archives --exclude boot/firmware --block-size=1 | cut -f 1) -ROOT_MARGIN="$(echo "($ROOT_SIZE * 0.2 + 200 * 1024 * 1024) / 1" | bc)" -BOOT_PART_START=$((ALIGN)) -BOOT_PART_SIZE=$(((BOOT_SIZE + ALIGN - 1) / ALIGN * ALIGN)) -EFI_PART_START=$((BOOT_PART_START + BOOT_PART_SIZE)) -EFI_PART_SIZE=$(((EFI_SIZE + ALIGN - 1) / ALIGN * ALIGN)) -ROOT_PART_START=$((EFI_PART_START + EFI_PART_SIZE)) -ROOT_PART_SIZE=$(((ROOT_SIZE + ROOT_MARGIN + ALIGN - 1) / ALIGN * ALIGN)) -RECOVERY_PART_START=$((ROOT_PART_START + ROOT_PART_SIZE)) -RECOVERY_PART_SIZE=$(((RECOVERY_SIZE + ALIGN - 1) / ALIGN * ALIGN)) -IMG_SIZE=$((BOOT_PART_START + BOOT_PART_SIZE + EFI_PART_SIZE + ROOT_PART_SIZE + RECOVERY_PART_SIZE)) - -# Create raw image -truncate -s "${IMG_SIZE}" "${IMG_FILE}" -parted --script "${IMG_FILE}" mklabel gpt -parted --script "${IMG_FILE}" unit B mkpart primary fat32 "${BOOT_PART_START}" "$((BOOT_PART_START + BOOT_PART_SIZE - 1))" -parted --script "${IMG_FILE}" set 1 boot on -parted --script "${IMG_FILE}" unit B mkpart primary fat32 "${EFI_PART_START}" "$((EFI_PART_START + EFI_PART_SIZE - 1))" -parted --script "${IMG_FILE}" set 2 esp on -parted --script "${IMG_FILE}" unit B mkpart primary ext4 "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))" -parted --script "${IMG_FILE}" unit B mkpart primary ext4 "${RECOVERY_PART_START}" "$((RECOVERY_PART_START + RECOVERY_PART_SIZE - 1))" - -# Create loop device -cnt=0 -until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do - ((cnt++)) - if [ $cnt -ge 5 ]; then echo "ERROR: losetup failed"; exit 1; fi - echo "Retrying losetup..."; sleep 5 -done -ensure_loopdev_partitions "$LOOP_DEV" - -BOOT_DEV="${LOOP_DEV}p1" -EFI_DEV="${LOOP_DEV}p2" -ROOT_DEV="${LOOP_DEV}p3" -RECOVERY_DEV="${LOOP_DEV}p4" - -# Format partitions -FAT_SIZE=$([ "$BOOT_SIZE" -lt 134742016 ] && echo 16 || echo 32) -mkdosfs -n bootfs -F "$FAT_SIZE" -s 4 "$BOOT_DEV" -mkfs.fat -F 32 -n EFI "$EFI_DEV" -mkfs.ext4 -L rootfs -O "^64bit,^huge_file" "$ROOT_DEV" -mkfs.ext4 -L recovery "$RECOVERY_DEV" - - -# Mount and copy rootfs -mount "$ROOT_DEV" "$MOUNT_DIR" -t ext4 -mkdir -p "${MOUNT_DIR}/boot" -mount "$BOOT_DEV" "${MOUNT_DIR}/boot" -t vfat -mkdir -p "${MOUNT_DIR}/boot/efi" -mount "$EFI_DEV" "${MOUNT_DIR}/boot/efi" -t vfat -rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot/firmware --exclude /boot/overlays "${EXPORT_ROOTFS_DIR}/" "${MOUNT_DIR}/" - -# Recovery partition -mkdir -p "${MOUNT_DIR}/recovery" -mount "$RECOVERY_DEV" "${MOUNT_DIR}/recovery" -t ext4 -# Optionally copy recovery tools -# cp recovery-tools/recovery.sh "${MOUNT_DIR}/recovery/" - -# Install GRUB (BIOS) -mkdir -p "${MOUNT_DIR}/boot/grub" -cat > "${MOUNT_DIR}/boot/grub/grub.cfg" </dev/null 2>&1; then - #adduser --disabled-password --gecos "" ${FIRST_USER_NAME} - if [ "${FIRST_USER_ISSYSTEM}" = "true" ]; then - useradd -r -M -d / ${FIRST_USER_NAME} - else - adduser --disabled-password --gecos "" ${FIRST_USER_NAME} - fi -fi +# Create a system user +useradd -r -M -d / system +# Set root password to "root" echo "root:root" | chpasswd EOF \ No newline at end of file diff --git a/stage1/02-net-tweaks/01-run-arm-only.sh b/stage1/02-net-tweaks/01-run-arm-only.sh index 2c56245..79ca598 100755 --- a/stage1/02-net-tweaks/01-run-arm-only.sh +++ b/stage1/02-net-tweaks/01-run-arm-only.sh @@ -1,5 +1,5 @@ #!/bin/bash -e on_chroot << EOF - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_net_names 1 + raspi-config nonint do_net_names 1 EOF diff --git a/stage2/01-sys-tweaks/01-run.sh b/stage2/01-sys-tweaks/01-run.sh index 6c97321..4493ed6 100755 --- a/stage2/01-sys-tweaks/01-run.sh +++ b/stage2/01-sys-tweaks/01-run.sh @@ -1,12 +1,5 @@ #!/bin/bash -e -if [ -n "${PUBKEY_SSH_FIRST_USER}" ]; then - install -v -m 0700 -o 1000 -g 1000 -d "${ROOTFS_DIR}"/home/"${FIRST_USER_NAME}"/.ssh - echo "${PUBKEY_SSH_FIRST_USER}" >"${ROOTFS_DIR}"/home/"${FIRST_USER_NAME}"/.ssh/authorized_keys - chown 1000:1000 "${ROOTFS_DIR}"/home/"${FIRST_USER_NAME}"/.ssh/authorized_keys - chmod 0600 "${ROOTFS_DIR}"/home/"${FIRST_USER_NAME}"/.ssh/authorized_keys -fi - if [ "${PUBKEY_ONLY_SSH}" = "1" ]; then sed -i -Ee 's/^#?[[:blank:]]*PubkeyAuthentication[[:blank:]]*no[[:blank:]]*$/PubkeyAuthentication yes/ s/^#?[[:blank:]]*PasswordAuthentication[[:blank:]]*yes[[:blank:]]*$/PasswordAuthentication no/' "${ROOTFS_DIR}"/etc/ssh/sshd_config @@ -32,15 +25,8 @@ on_chroot <<- EOF for GRP in input spi i2c gpio; do groupadd -f -r "\$GRP" done - for GRP in adm dialout cdrom audio users sudo video games plugdev input gpio spi i2c netdev render; do - adduser $FIRST_USER_NAME \$GRP - done EOF -if [ -f "${ROOTFS_DIR}/etc/sudoers.d/010_pi-nopasswd" ]; then - sed -i "s/^pi /$FIRST_USER_NAME /" "${ROOTFS_DIR}/etc/sudoers.d/010_pi-nopasswd" -fi - on_chroot << EOF setupcon --force --save-only -v EOF diff --git a/stage2/02-net-tweaks/01-run-arm-only.sh b/stage2/02-net-tweaks/01-run-arm-only.sh index 1f91095..eab53a7 100755 --- a/stage2/02-net-tweaks/01-run-arm-only.sh +++ b/stage2/02-net-tweaks/01-run-arm-only.sh @@ -13,7 +13,7 @@ done if [ -v WPA_COUNTRY ]; then on_chroot <<- EOF - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wifi_country "${WPA_COUNTRY}" + raspi-config nonint do_wifi_country "${WPA_COUNTRY}" EOF elif [ -d "${ROOTFS_DIR}/var/lib/NetworkManager" ]; then # NetworkManager unblocks all WLAN devices by default. Prevent that: diff --git a/stage3/00-install-packages/01-packages-amd64 b/stage3/00-install-packages/01-packages-amd64 index e7b065e..3902268 100644 --- a/stage3/00-install-packages/01-packages-amd64 +++ b/stage3/00-install-packages/01-packages-amd64 @@ -1 +1,5 @@ -firefox-esr \ No newline at end of file +firefox-esr +grub-efi-amd64 +grub-efi-amd64-bin +live-boot +live-boot-initramfs-tools diff --git a/stage3/02-setup-system/00-run.sh b/stage3/02-setup-system/00-run.sh index 321adc4..b890818 100755 --- a/stage3/02-setup-system/00-run.sh +++ b/stage3/02-setup-system/00-run.sh @@ -39,10 +39,3 @@ install -m 644 files/gnome-default-settings "${ROOTFS_DIR}/etc/dconf/db/local.d/ on_chroot << EOF dconf update EOF - -# Remove setup user (only if it's not a system account) -on_chroot << EOF -if [ "${FIRST_USER_ISSYSTEM}" = "false" ]; then - deluser --remove-home --remove-all-files ${FIRST_USER_NAME} -fi -EOF \ No newline at end of file diff --git a/stage3/02-setup-system/01-run-arm-only.sh b/stage3/02-setup-system/01-run-arm-only.sh index 52e1e66..dc14f7f 100755 --- a/stage3/02-setup-system/01-run-arm-only.sh +++ b/stage3/02-setup-system/01-run-arm-only.sh @@ -1,7 +1,7 @@ #!/bin/bash -e on_chroot << EOF - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wayland W2 + raspi-config nonint do_wayland W2 EOF # Pi-Apps (this is a bash script that installs pi-apps when the user runs it, then gets overwritten by the actual pi-apps)