This commit is contained in:
2026-03-05 02:16:50 -08:00
parent 07b8db1a74
commit 104e7bd4cc
13 changed files with 112 additions and 303 deletions
+1 -1
View File
@@ -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 `<tool>[:<debian-package>]`.
-15
View File
@@ -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*}
+3
View File
@@ -21,3 +21,6 @@ bc
gpg
pigz
arch-test
squashfs-tools
xorriso
mtools
+13 -11
View File
@@ -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
+79 -112
View File
@@ -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"
+5 -130
View File
@@ -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" <<EOF
set default=0
set timeout=5
menuentry "Linux" {
linux /boot/vmlinuz root=/dev/sda3
initrd /boot/initrd.img
}
EOF
grub-install \
--target=i386-pc \
--boot-directory="${MOUNT_DIR}/boot" \
--modules="part_msdos ext2 fat normal biosdisk" \
--force \
--no-floppy \
--boot-directory="${MOUNT_DIR}/boot" \
"$LOOP_DEV"
# Install GRUB (UEFI)
mkdir -p "${MOUNT_DIR}/boot/efi/EFI/boot"
grub-install \
--target=x86_64-efi \
--efi-directory="${MOUNT_DIR}/boot/efi" \
--boot-directory="${MOUNT_DIR}/boot" \
--removable \
--no-nvram \
--modules="part_gpt part_msdos ext2 fat normal efi_gop efi_uga biosdisk" \
--bootloader-id=GRUB \
--recheck
# Unmount all
umount -l "${MOUNT_DIR}/boot/efi"
umount -l "${MOUNT_DIR}/boot"
umount -l "${MOUNT_DIR}/recovery"
umount -l "${MOUNT_DIR}"
losetup -d "$LOOP_DEV"
# Create hybrid ISO using xorriso (make sure it's installed)
ISO_FILE="${STAGE_WORK_DIR}/${IMG_NAME}.iso"
EFI_IMG="${STAGE_WORK_DIR}/efi.img"
dd if=/dev/zero of="${EFI_IMG}" bs=1M count=128
mkfs.vfat "${EFI_IMG}"
mmd -i "${EFI_IMG}" ::/EFI ::/EFI/boot
mcopy -i "${EFI_IMG}" "${MOUNT_DIR}/boot/efi/EFI/boot/bootx64.efi" ::/EFI/boot/bootx64.efi
xorriso -as mkisofs \
-r -J -joliet -l \
-b boot/grub/i386-pc/eltorito.img \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot \
-e efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
-o "${ISO_FILE}" \
"${MOUNT_DIR}" \
--efi-boot-part --efi-boot-image --protective-msdos-label
echo "Bootable ISO with BIOS and UEFI support created at ${ISO_FILE}"
rsync -aHAXx --exclude /var/cache/apt/archives "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
+3 -9
View File
@@ -1,18 +1,12 @@
#!/bin/bash -e
install -v -m 644 files/fstab "${ROOTFS_DIR}/etc/fstab"
# SteamOS like readonly root
install -m 755 files/system-readonly "${ROOTFS_DIR}/sbin/"
on_chroot << EOF
if ! id -u ${FIRST_USER_NAME} >/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
+1 -1
View File
@@ -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
-14
View File
@@ -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
+1 -1
View File
@@ -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:
+5 -1
View File
@@ -1 +1,5 @@
firefox-esr
firefox-esr
grub-efi-amd64
grub-efi-amd64-bin
live-boot
live-boot-initramfs-tools
-7
View File
@@ -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
+1 -1
View File
@@ -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)