From c66784a6a032e8162867abaa268d673c7f7ed7ff Mon Sep 17 00:00:00 2001 From: oxmc7769 Date: Fri, 21 Mar 2025 10:25:29 -0700 Subject: [PATCH] First Stable OS --- build.sh | 18 ++-- export-image/02-set-sources/01-run.sh | 1 + export-image/mk-img.sh | 73 +++++++++++++++ export-image/mk-iso.sh | 92 +++++++++++++++++++ export-image/prerun.sh | 77 ++-------------- .../00-release/files/partition_setup.sh | 0 stage0/00-configure-apt/00-run.sh | 4 + stage0/00-configure-apt/files/oxmc.gpg.key | 53 +++++++++++ stage0/00-configure-apt/files/oxmc.list | 3 + stage0/prerun.sh | 5 - stage1/01-sys-tweaks/00-run.sh | 2 + stage1/01-sys-tweaks/files/fstab | 2 + stage1/01-sys-tweaks/files/system-readonly | 30 ++++++ stage2/01-sys-tweaks/00-packages | 4 +- stage2/01-sys-tweaks/00-packages-nr | 1 - stage2/03-accept-mathematica-eula/00-debconf | 2 - stage2/EXPORT_IMAGE | 4 - stage3/00-install-packages/00-packages | 7 +- stage3/00-install-packages/00-packages-nr | 6 +- .../01-install-desktop}/00-debconf | 0 stage3/01-install-desktop/00-packages | 16 ++++ stage3/01-install-desktop/00-packages-nr | 2 + stage3/01-install-desktop/02-packages | 4 + stage3/02-extras/00-packages | 1 + stage3/02-extras/00-run.sh | 4 + stage3/02-extras/files/polkit-admin.conf | 1 + .../04-enable-xcompmgr/00-run.sh | 0 .../05-print-support/00-packages | 0 {stage4 => stage3}/05-print-support/01-run.sh | 0 stage3/05-setup/00-run.sh | 17 ++++ stage3/05-setup/files/vendor.conf | 5 + stage3/EXPORT_IMAGE | 0 stage4/00-install-packages/00-packages | 27 ------ stage4/00-install-packages/00-packages-nr | 2 - stage4/00-install-packages/02-packages | 4 - stage4/01-console-autologin/00-run.sh | 5 - stage4/02-extras/00-run.sh | 7 -- stage4/03-bookshelf/00-run.sh | 15 --- stage4/03-bookshelf/files/.gitignore | 1 - stage4/06-enable-wayland/00-run.sh | 5 - stage4/EXPORT_IMAGE | 4 - stage4/prerun.sh | 5 - stage5/00-install-extras/00-packages | 7 -- stage5/00-install-libreoffice/00-packages | 3 - stage5/EXPORT_IMAGE | 4 - stage5/prerun.sh | 5 - 46 files changed, 332 insertions(+), 196 deletions(-) create mode 100755 export-image/mk-img.sh create mode 100755 export-image/mk-iso.sh mode change 100644 => 100755 export-noobs/00-release/files/partition_setup.sh create mode 100644 stage0/00-configure-apt/files/oxmc.gpg.key create mode 100644 stage0/00-configure-apt/files/oxmc.list create mode 100644 stage1/01-sys-tweaks/files/system-readonly delete mode 100644 stage2/03-accept-mathematica-eula/00-debconf delete mode 100644 stage2/EXPORT_IMAGE rename {stage4/00-install-packages => stage3/01-install-desktop}/00-debconf (100%) create mode 100644 stage3/01-install-desktop/00-packages create mode 100644 stage3/01-install-desktop/00-packages-nr create mode 100644 stage3/01-install-desktop/02-packages create mode 100644 stage3/02-extras/00-packages create mode 100755 stage3/02-extras/00-run.sh create mode 100644 stage3/02-extras/files/polkit-admin.conf rename {stage4 => stage3}/04-enable-xcompmgr/00-run.sh (100%) rename {stage4 => stage3}/05-print-support/00-packages (100%) rename {stage4 => stage3}/05-print-support/01-run.sh (100%) create mode 100755 stage3/05-setup/00-run.sh create mode 100644 stage3/05-setup/files/vendor.conf create mode 100644 stage3/EXPORT_IMAGE delete mode 100644 stage4/00-install-packages/00-packages delete mode 100644 stage4/00-install-packages/00-packages-nr delete mode 100644 stage4/00-install-packages/02-packages delete mode 100755 stage4/01-console-autologin/00-run.sh delete mode 100755 stage4/02-extras/00-run.sh delete mode 100755 stage4/03-bookshelf/00-run.sh delete mode 100644 stage4/03-bookshelf/files/.gitignore delete mode 100755 stage4/06-enable-wayland/00-run.sh delete mode 100644 stage4/EXPORT_IMAGE delete mode 100755 stage4/prerun.sh delete mode 100644 stage5/00-install-extras/00-packages delete mode 100644 stage5/00-install-libreoffice/00-packages delete mode 100644 stage5/EXPORT_IMAGE delete mode 100755 stage5/prerun.sh diff --git a/build.sh b/build.sh index 4d55b52..0ed242b 100755 --- a/build.sh +++ b/build.sh @@ -108,8 +108,10 @@ run_stage(){ log "End ${STAGE_DIR}/prerun.sh" fi for SUB_STAGE_DIR in "${STAGE_DIR}"/*; do - if [ -d "${SUB_STAGE_DIR}" ] && [ ! -f "${SUB_STAGE_DIR}/SKIP" ]; then - run_sub_stage + if [ -d "${SUB_STAGE_DIR}" ]; then + if [ ! -f "${SUB_STAGE_DIR}/SKIP" ] && [ ! -f "${SUB_STAGE_DIR}/SKIP_${ARCH}" ]; then + run_sub_stage + fi fi done fi @@ -176,8 +178,8 @@ export PI_GEN_REPO=${PI_GEN_REPO:-https://github.com/RPi-Distro/pi-gen} export PI_GEN_RELEASE=${PI_GEN_RELEASE:-Raspberry Pi reference} export ARCH=arm64 -export RELEASE=${RELEASE:-bookworm} # Don't forget to update stage0/prerun.sh -export IMG_NAME="${IMG_NAME:-raspios-$RELEASE-$ARCH}" +export RELEASE=${RELEASE:-bookworm} +export IMG_NAME="${IMG_NAME:-chillcraftos-$RELEASE-$ARCH}" export USE_QEMU="${USE_QEMU:-0}" export IMG_DATE="${IMG_DATE:-"$(date +%Y-%m-%d)"}" @@ -202,7 +204,7 @@ export LOG_FILE="${WORK_DIR}/build.log" export TARGET_HOSTNAME=${TARGET_HOSTNAME:-raspberrypi} -export FIRST_USER_NAME=${FIRST_USER_NAME:-pi} +export FIRST_USER_NAME=${FIRST_USER_NAME:-setup} export FIRST_USER_PASS export DISABLE_FIRST_BOOT_USER_RENAME=${DISABLE_FIRST_BOOT_USER_RENAME:-0} export WPA_COUNTRY @@ -211,10 +213,10 @@ export PUBKEY_ONLY_SSH="${PUBKEY_ONLY_SSH:-0}" export LOCALE_DEFAULT="${LOCALE_DEFAULT:-en_GB.UTF-8}" -export KEYBOARD_KEYMAP="${KEYBOARD_KEYMAP:-gb}" -export KEYBOARD_LAYOUT="${KEYBOARD_LAYOUT:-English (UK)}" +export KEYBOARD_KEYMAP="${KEYBOARD_KEYMAP:-us}" +export KEYBOARD_LAYOUT="${KEYBOARD_LAYOUT:-English (US)}" -export TIMEZONE_DEFAULT="${TIMEZONE_DEFAULT:-Europe/London}" +export TIMEZONE_DEFAULT="${TIMEZONE_DEFAULT:-Americas/Los_Angeles}" export GIT_HASH=${GIT_HASH:-"$(git rev-parse HEAD)"} diff --git a/export-image/02-set-sources/01-run.sh b/export-image/02-set-sources/01-run.sh index 6d50496..3cfb9d5 100755 --- a/export-image/02-set-sources/01-run.sh +++ b/export-image/02-set-sources/01-run.sh @@ -3,6 +3,7 @@ rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" find "${ROOTFS_DIR}/var/lib/apt/lists/" -type f -delete on_chroot << EOF +apt-file update apt-get update apt-get -y dist-upgrade --auto-remove --purge apt-get clean diff --git a/export-image/mk-img.sh b/export-image/mk-img.sh new file mode 100755 index 0000000..6a5309a --- /dev/null +++ b/export-image/mk-img.sh @@ -0,0 +1,73 @@ +#!/bin/bash -e + +IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" + +unmount_image "${IMG_FILE}" + +rm -f "${IMG_FILE}" + +rm -rf "${ROOTFS_DIR}" +mkdir -p "${ROOTFS_DIR}" + +BOOT_SIZE="$((512 * 1024 * 1024))" +ROOT_SIZE=$(du -x --apparent-size -s "${EXPORT_ROOTFS_DIR}" --exclude var/cache/apt/archives --exclude boot/firmware --block-size=1 | cut -f 1) + +# All partition sizes and starts will be aligned to this size +ALIGN="$((4 * 1024 * 1024))" +# Add this much space to the calculated file size. This allows for +# some overhead (since actual space usage is usually rounded up to the +# filesystem block size) and gives some free space on the resulting +# image. +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)) +ROOT_PART_START=$((BOOT_PART_START + BOOT_PART_SIZE)) +ROOT_PART_SIZE=$(((ROOT_SIZE + ROOT_MARGIN + ALIGN - 1) / ALIGN * ALIGN)) +IMG_SIZE=$((BOOT_PART_START + BOOT_PART_SIZE + ROOT_PART_SIZE)) + +truncate -s "${IMG_SIZE}" "${IMG_FILE}" + +parted --script "${IMG_FILE}" mklabel msdos +parted --script "${IMG_FILE}" unit B mkpart primary fat32 "${BOOT_PART_START}" "$((BOOT_PART_START + BOOT_PART_SIZE - 1))" +parted --script "${IMG_FILE}" unit B mkpart primary ext4 "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))" + +echo "Creating loop device..." +cnt=0 +until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do + if [ $cnt -lt 5 ]; then + cnt=$((cnt + 1)) + echo "Error in losetup. Retrying..." + sleep 5 + else + echo "ERROR: losetup failed; exiting" + exit 1 + fi +done + +ensure_loopdev_partitions "$LOOP_DEV" +BOOT_DEV="${LOOP_DEV}p1" +ROOT_DEV="${LOOP_DEV}p2" + +ROOT_FEATURES="^huge_file" +for FEATURE in 64bit; do +if grep -q "$FEATURE" /etc/mke2fs.conf; then + ROOT_FEATURES="^$FEATURE,$ROOT_FEATURES" +fi +done + +if [ "$BOOT_SIZE" -lt 134742016 ]; then + FAT_SIZE=16 +else + FAT_SIZE=32 +fi + +mkdosfs -n bootfs -F "$FAT_SIZE" -s 4 -v "$BOOT_DEV" > /dev/null +mkfs.ext4 -L rootfs -O "$ROOT_FEATURES" "$ROOT_DEV" > /dev/null + +mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4 +mkdir -p "${ROOTFS_DIR}/boot/firmware" +mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot/firmware" -t vfat + +rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot/firmware "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/" +rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/firmware/" "${ROOTFS_DIR}/boot/firmware/" diff --git a/export-image/mk-iso.sh b/export-image/mk-iso.sh new file mode 100755 index 0000000..c057626 --- /dev/null +++ b/export-image/mk-iso.sh @@ -0,0 +1,92 @@ +#!/bin/bash -e + +ISO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.iso" + +unmount_image "${ISO_FILE}" + +rm -f "${ISO_FILE}" + +rm -rf "${ROOTFS_DIR}" +mkdir -p "${ROOTFS_DIR}" + +BOOT_SIZE="$((512 * 1024 * 1024))" +ROOT_SIZE=$(du -x --apparent-size -s "${EXPORT_ROOTFS_DIR}" --exclude var/cache/apt/archives --exclude boot/firmware --block-size=1 | cut -f 1) + +# All partition sizes and starts will be aligned to this size +ALIGN="$((4 * 1024 * 1024))" +# Add this much space to the calculated file size. This allows for +# some overhead (since actual space usage is usually rounded up to the +# filesystem block size) and gives some free space on the resulting +# image. +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)) +ROOT_PART_START=$((BOOT_PART_START + BOOT_PART_SIZE)) +ROOT_PART_SIZE=$(((ROOT_SIZE + ROOT_MARGIN + ALIGN - 1) / ALIGN * ALIGN)) +IMG_SIZE=$((BOOT_PART_START + BOOT_PART_SIZE + ROOT_PART_SIZE)) + +truncate -s "${IMG_SIZE}" "${ISO_FILE}" + +parted --script "${ISO_FILE}" mklabel msdos +parted --script "${ISO_FILE}" unit B mkpart primary fat32 "${BOOT_PART_START}" "$((BOOT_PART_START + BOOT_PART_SIZE - 1))" +parted --script "${ISO_FILE}" unit B mkpart primary ext4 "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))" + +echo "Creating loop device..." +cnt=0 +until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$ISO_FILE")"; do + if [ $cnt -lt 5 ]; then + cnt=$((cnt + 1)) + echo "Error in losetup. Retrying..." + sleep 5 + else + echo "ERROR: losetup failed; exiting" + exit 1 + fi +done + +ensure_loopdev_partitions "$LOOP_DEV" +BOOT_DEV="${LOOP_DEV}p1" +ROOT_DEV="${LOOP_DEV}p2" + +ROOT_FEATURES="^huge_file" +for FEATURE in 64bit; do + if grep -q "$FEATURE" /etc/mke2fs.conf; then + ROOT_FEATURES="^$FEATURE,$ROOT_FEATURES" + fi +done + +if [ "$BOOT_SIZE" -lt 134742016 ]; then + FAT_SIZE=16 +else + FAT_SIZE=32 +fi + +mkdosfs -n bootfs -F "$FAT_SIZE" -s 4 -v "$BOOT_DEV" > /dev/null +mkfs.ext4 -L rootfs -O "$ROOT_FEATURES" "$ROOT_DEV" > /dev/null + +mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4 +mkdir -p "${ROOTFS_DIR}/boot/firmware" +mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot/firmware" -t vfat + +rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot/firmware "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/" +rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/firmware/" "${ROOTFS_DIR}/boot/firmware/" + +# Create bootable ISO with GRUB +echo "Creating bootable ISO..." +mkdir -p "${ROOTFS_DIR}/boot/grub" + +# Install GRUB bootloader +cat > "${ROOTFS_DIR}/boot/grub/grub.cfg" < /dev/null -mkfs.ext4 -L rootfs -O "$ROOT_FEATURES" "$ROOT_DEV" > /dev/null - -mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4 -mkdir -p "${ROOTFS_DIR}/boot/firmware" -mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot/firmware" -t vfat - -rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot/firmware "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/" -rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/firmware/" "${ROOTFS_DIR}/boot/firmware/" + # Otherwise, run mk-iso.sh + ./mk-iso.sh +fi \ No newline at end of file diff --git a/export-noobs/00-release/files/partition_setup.sh b/export-noobs/00-release/files/partition_setup.sh old mode 100644 new mode 100755 diff --git a/stage0/00-configure-apt/00-run.sh b/stage0/00-configure-apt/00-run.sh index 926c4c6..2b8fe5a 100755 --- a/stage0/00-configure-apt/00-run.sh +++ b/stage0/00-configure-apt/00-run.sh @@ -2,8 +2,10 @@ install -m 644 files/sources.list "${ROOTFS_DIR}/etc/apt/" install -m 644 files/raspi.list "${ROOTFS_DIR}/etc/apt/sources.list.d/" +#install -m 644 files/oxmc.list "${ROOTFS_DIR}/etc/apt/sources.list.d/" sed -i "s/RELEASE/${RELEASE}/g" "${ROOTFS_DIR}/etc/apt/sources.list" sed -i "s/RELEASE/${RELEASE}/g" "${ROOTFS_DIR}/etc/apt/sources.list.d/raspi.list" +#sed -i "s/RELEASE/${RELEASE}/g" "${ROOTFS_DIR}/etc/apt/sources.list.d/oxmc.list" if [ -n "$APT_PROXY" ]; then install -m 644 files/51cache "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" @@ -14,6 +16,8 @@ fi cat files/raspberrypi.gpg.key | gpg --dearmor > "${STAGE_WORK_DIR}/raspberrypi-archive-stable.gpg" install -m 644 "${STAGE_WORK_DIR}/raspberrypi-archive-stable.gpg" "${ROOTFS_DIR}/etc/apt/trusted.gpg.d/" +#cat files/oxmc.gpg.key | gpg --dearmor > "${STAGE_WORK_DIR}/oxmc.gpg" +#install -m 644 "${STAGE_WORK_DIR}/oxmc.gpg" "${ROOTFS_DIR}/etc/apt/trusted.gpg.d/" on_chroot <<- \EOF ARCH="$(dpkg --print-architecture)" if [ "$ARCH" = "armhf" ]; then diff --git a/stage0/00-configure-apt/files/oxmc.gpg.key b/stage0/00-configure-apt/files/oxmc.gpg.key new file mode 100644 index 0000000..60d9323 --- /dev/null +++ b/stage0/00-configure-apt/files/oxmc.gpg.key @@ -0,0 +1,53 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGXai08BEADkeuWlOUYhG2KJ0SyGmvGqXw5+mSHfHqpI4zwbTuq0mZM0TSVV +bydmV27OFNDJ/FjTQXlG2hywSNMXq3FqVta8Sp0Rq6N4RjnDWYOThb+lkMFifL1D +BdIwitvgT15HeJnSz01hlo+du2fqmMGrTP0RZweBNVNOfBnRtlTRPbrPt9GQl2RW +TpHdqej5cmQLRq725Hpb2YckUgqjYKowv2e0g/p4Dk9YbYW3aqFqi+aDphn6IQaQ +c0/5BRKYI06k07oy3aqEqwDvcRIuaKtnOXsIRcmsnAI80Mi6TGxSm4jFE3g4DTLZ +L+uXY7lzAXQoNBOvLLYvlPXXZOY3eKIrZOr607yDNbDVG1NubriWw1IsmRMwcHKQ +VEvCAMYvwklktUSUGU+e59FDMLqPvcStydFsd2py6HLp3xYEKswlvwTqZoBAhceG +gi2M4iuHQB94ejqODeAyY8uv5BOM3IxcCCIxmU76okH0GYoxR30H9KRbnKHr0AAO +c++gFJBHXtmOz35yj3jgL6kuSvtc207BM57gp5yV7zhXachnadAisTzT8YMhaGO8 +vUhsdwCLpX7F+Mu3+Vqo/A9wzLW67AjvKCiwtRqQIs+Uz0GgYtgNcW4EgAwaC+tt +jxCaHnMRLIgIYH3gAq5FV0wAPxnFl77wvVn7LpPBaIvLVOsdWiZqyjXyOwARAQAB +tFlTZXRoIE9saXZhcmV6IChEZWJpYW4gYXB0IHJlcG8ga2V5IGZvciBhcHQub3ht +Yy1zZXJ2ZXJzLm9ubGluZSkgPG94bWM3NzY5Lm1haWxAZ21haWwuY29tPokCTgQT +AQoAOBYhBP3vdd+3GaHCFU+724HK2CVsPTuvBQJl2otPAhsDBQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAAAoJEIHK2CVsPTuv2BwP/j39iHCBPp1w8Xno9wCLkIkUHjND +DZxFQRcS80hp2ypCpY5zOO6rWyFxv5lYWvfoWIz3VRtT8Fjw9kLHBpIDREuj9+Dl +Q7o/YIknd6DoMq0jTVYl0dk/8hEt6yvucK2w7Xvz+uKoWgpbm86dxLyVa+vRnFiz +DLtdg6KSSTKAmvgYcQqqDR1KwNbbcHbwj/z97sFZFFrC+6SzYRzNC3cxPnDwj/h4 +IxdqnzZCRZXEMbsZJs+U5NsYn0Aq1GRr3PN+KHxIAfjGQ+l6PAZrcZi2GxpGzvj7 +LBTn8sRqz7qn+ybtorKL4ptakbdyKCHNAUEuqS7SH9kvAoLv/6ErVyjCnsKsNlA8 +Y32vUSvxOXjgU7ltR38OK2FZU+8FfMDDmzh7rJ8o0txhIpXOsbeYqk7PgXsKWtOa +jLMY+719QO/pbdbtQPu4WwywHkwm3mCEa8YDB+IeZTGVp0aeFCIKkZV2KQhxzFDK +Y7jyw5A7uCm1yw9tw+lb7HFnnrUe7iykChQW/ZQcNthc71euibsiwkbD1++1B9s0 +Z5WhgbAUcH+YyT8wHbw/PXan4zdjBuyQegiceMGp1tMaZdklLrbVdJclfMLvlaXC +3K3FhTTMnc/sZgMuEFfhE7byzpnoz9eQwyEvZC96dPGjdQXuZNAKgZm0CVcdrN3c +TiKU8nshndITHQxzuQINBGXai08BEADG6lvqvGQ9/g8bofssBzWFo/8AGUg0V0EE +mknOYFx83g48aovyB+5rdJY2+Ronh39ZSyJdKG3hXt5NvrJfSwc8Lvf94dA8erxP +jBE34duBX+DDJq5FUlE/QrCnDR5sD3zeqBesjmQwjadQ65jnRcX0y3H1CXh503ut +2J63x86ummKrUPWKbFDrYMmHP6Wq8DtlJ8D8najOtgeCfHm+ghtdvojX/YFA2QMp +KbJx4XNgqaQ5tnNAPL5OWjB44TgQ+JtSINXXjVPAb6kJ+yq4hP3fEAVS6PvKDbVO +Y7VwcxHuEMV/x1INYrkEhKFDn3t57MYUuwPXq34z2PG95HCudB07Qkp5UmO4XPXJ +vPooaYpqO4YJkkRYO4ZK0NK4IrQ8R6wLdDHgDM1nCM5zNT0153Wm+OaW0D9XfmTC +jQktvr1e6TLfOlXBzlqmEJSGfXX3Fn+UzO6+isXu1jBk2zNWFqVAFdL7r56qzykr +6xYVU1oy5vFPhIbIW4YjUfvxwHdsXL3IH3knACk/4aZca6hMZtSRGgSzr6x7LGUH +VPstjQcfZyr5DXOE7OJqQ6Zluej8jQweoN0lm4y/MNCZUYnmEzpKqHuM4r4Yi0jW +vRoFaxDTIHYqpTIJIAh4VydO2rSq5PBlKikhbrJ5Fpq7WWT2HDU537SFBWPD5SBQ +/EtGsHczqwARAQABiQI2BBgBCgAgFiEE/e9137cZocIVT7vbgcrYJWw9O68FAmXa +i08CGwwACgkQgcrYJWw9O6+5mg/9F8DRD1UGJKu/6kq1cTnORGw1S1+ambAXwd+I +YxxZHA5z6yYncY9d62OGZ/Epybgx4Cq+9xYv4DnEbDCQItxmsU/YbGq7w1SFpP5Y ++oIFcrqUDy519dbgpwWNPWfn2Uge/cDzS64BTcqS1WS9MY3nh+gjwpsLGxn7FoCQ +BFy7N85T7iyhhckwLWJWQT4YlJGkWWQiMsUd/aRwLbUtA3tuaSV6y0xrE81P0TZF +sTEmojidFfFsSlgroMHDbRNgINBhdc8Xso9YMK4EZimjn8p6AsDyykWTl/D36l9M +h4Xb4vueeFfTt/yKAf3eoqORcgZUyuc/Y7MPBFTJfX12msFMpZloTzwuXZSjhPQR +G+RueDgdSP4E+a91PJ+AdajVBV5zGoQIiwuDiXf3T/jZ0FuDhnz+/sj56EwuE3d2 ++oWEZnE96iu2P2nyitSP0ugthPKBEPhWJ8d8Ibt2t+BRKj160LNZWOkQn0j6GVzY +xJ6QoM9mBjJrkAX6YUy/5zYFFyl+UN27KntwGgRqOAv6fMGjuuh1s7sV9Pfaab+I +jsEiEzavQrj+iG4orb/FqId+/sVNVCMT4cRWxJuvS+dP3dREWmwrcTcSWGFg426Y +lg3iNHRD9EMtl+EzDE+fbpcWLOsFPAJs4zPmcugO47No5zMdEjAh/p3qPh4VJgcX +JwmNXcU= +=JjzN +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/stage0/00-configure-apt/files/oxmc.list b/stage0/00-configure-apt/files/oxmc.list new file mode 100644 index 0000000..f505c6b --- /dev/null +++ b/stage0/00-configure-apt/files/oxmc.list @@ -0,0 +1,3 @@ +deb http://apt.oxmc.me/ RELEASE main +# Uncomment line below then 'apt-get update' to enable 'apt-get source' +#deb-src http://apt.oxmc.me/ RELEASE main \ No newline at end of file diff --git a/stage0/prerun.sh b/stage0/prerun.sh index 4920b9b..283ffd5 100755 --- a/stage0/prerun.sh +++ b/stage0/prerun.sh @@ -1,10 +1,5 @@ #!/bin/bash -e -if [ "$RELEASE" != "bookworm" ]; then - echo "WARNING: RELEASE does not match the intended option for this branch." - echo " Please check the relevant README.md section." -fi - if [ ! -d "${ROOTFS_DIR}" ]; then bootstrap ${RELEASE} "${ROOTFS_DIR}" http://deb.debian.org/debian/ fi diff --git a/stage1/01-sys-tweaks/00-run.sh b/stage1/01-sys-tweaks/00-run.sh index e024701..dca0573 100755 --- a/stage1/01-sys-tweaks/00-run.sh +++ b/stage1/01-sys-tweaks/00-run.sh @@ -1,6 +1,8 @@ #!/bin/bash -e install -v -m 644 files/fstab "${ROOTFS_DIR}/etc/fstab" +# SteamOS like readonly root +install -m 644 files/system-readonly "${ROOTFS_DIR}/sbin/" on_chroot << EOF if ! id -u ${FIRST_USER_NAME} >/dev/null 2>&1; then diff --git a/stage1/01-sys-tweaks/files/fstab b/stage1/01-sys-tweaks/files/fstab index 525c3bc..14aa0d2 100644 --- a/stage1/01-sys-tweaks/files/fstab +++ b/stage1/01-sys-tweaks/files/fstab @@ -1,3 +1,5 @@ proc /proc proc defaults 0 0 BOOTDEV /boot/firmware vfat defaults 0 2 ROOTDEV / ext4 defaults,noatime 0 1 +# For /home (always writable): +LABEL=home /home ext4 defaults 0 2 \ No newline at end of file diff --git a/stage1/01-sys-tweaks/files/system-readonly b/stage1/01-sys-tweaks/files/system-readonly new file mode 100644 index 0000000..3ea6c22 --- /dev/null +++ b/stage1/01-sys-tweaks/files/system-readonly @@ -0,0 +1,30 @@ +#!/bin/bash + +FSTAB_FILE="/etc/fstab" + +if [ "$1" == "enable" ]; then + echo "Enabling read-only mode..." + + # Modify fstab to set root filesystem as read-only + sudo sed -i 's|\(ROOTDEV.* / .* ext4 \)defaults,noatime|\1ro,noatime|' "$FSTAB_FILE" + + # Remount root as read-only + sudo mount -o remount,ro / + + echo "System is now read-only. Reboot for changes to persist." + +elif [ "$1" == "disable" ]; then + echo "Disabling read-only mode..." + + # Modify fstab to set root filesystem as writable + sudo sed -i 's|\(ROOTDEV.* / .* ext4 \)ro,noatime|\1defaults,noatime|' "$FSTAB_FILE" + + # Remount root as writable + sudo mount -o remount,rw / + + echo "System is now writable. Reboot for changes to persist." + +else + echo "Usage: system-readonly enable|disable" + exit 1 +fi diff --git a/stage2/01-sys-tweaks/00-packages b/stage2/01-sys-tweaks/00-packages index f06f7d0..cdac68c 100644 --- a/stage2/01-sys-tweaks/00-packages +++ b/stage2/01-sys-tweaks/00-packages @@ -3,9 +3,6 @@ console-setup keyboard-configuration debconf-utils parted build-essential manpages-dev bash-completion gdb pkg-config python-is-python3 v4l-utils -gpiod python3-libgpiod -python3-gpiozero -pigpio python3-pigpio raspi-gpio python3-rpi-lgpio python3-spidev python3-smbus2 avahi-daemon @@ -18,6 +15,7 @@ dphys-swapfile raspberrypi-sys-mods pi-bluetooth apt-listchanges +apt-file usb-modeswitch libpam-chksshpwd rpi-update diff --git a/stage2/01-sys-tweaks/00-packages-nr b/stage2/01-sys-tweaks/00-packages-nr index 15c0f66..c208dee 100644 --- a/stage2/01-sys-tweaks/00-packages-nr +++ b/stage2/01-sys-tweaks/00-packages-nr @@ -1,3 +1,2 @@ cifs-utils -rpicam-apps-lite mkvtoolnix diff --git a/stage2/03-accept-mathematica-eula/00-debconf b/stage2/03-accept-mathematica-eula/00-debconf deleted file mode 100644 index d9743fe..0000000 --- a/stage2/03-accept-mathematica-eula/00-debconf +++ /dev/null @@ -1,2 +0,0 @@ -# Do you accept the Wolfram - Raspberry PiĀ® Bundle License Agreement? -wolfram-engine shared/accepted-wolfram-eula boolean true diff --git a/stage2/EXPORT_IMAGE b/stage2/EXPORT_IMAGE deleted file mode 100644 index aa8f936..0000000 --- a/stage2/EXPORT_IMAGE +++ /dev/null @@ -1,4 +0,0 @@ -IMG_SUFFIX="-lite" -if [ "${USE_QEMU}" = "1" ]; then - export IMG_SUFFIX="${IMG_SUFFIX}-qemu" -fi diff --git a/stage3/00-install-packages/00-packages b/stage3/00-install-packages/00-packages index f7cbe74..fa876ca 100644 --- a/stage3/00-install-packages/00-packages +++ b/stage3/00-install-packages/00-packages @@ -2,19 +2,14 @@ gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0- evince gtk2-engines alsa-utils desktop-base git -policykit-1 gvfs rfkill -chromium rpi-chromium-mods libwidevinecdm0 -firefox rpi-firefox-mods +firefox rpi-firefox-mods libwidevinecdm0 gldriver-test fonts-droid-fallback fonts-liberation2 obconf raindrop -libcamera-tools -rpicam-apps -python3-picamera2 python3-pyqt5 python3-opengl vulkan-tools mesa-vulkan-drivers diff --git a/stage3/00-install-packages/00-packages-nr b/stage3/00-install-packages/00-packages-nr index 227c861..ef17362 100644 --- a/stage3/00-install-packages/00-packages-nr +++ b/stage3/00-install-packages/00-packages-nr @@ -1,8 +1,8 @@ xserver-xorg xinit mousepad eom -lxde lxtask menu-xdg -zenity xdg-utils +menu-xdg +yad zenity xdg-utils gvfs-backends gvfs-fuse -lightdm gnome-themes-extra-data gnome-icon-theme +gdm3 gnome-themes-extra-data gnome-icon-theme gnome-keyring diff --git a/stage4/00-install-packages/00-debconf b/stage3/01-install-desktop/00-debconf similarity index 100% rename from stage4/00-install-packages/00-debconf rename to stage3/01-install-desktop/00-debconf diff --git a/stage3/01-install-desktop/00-packages b/stage3/01-install-desktop/00-packages new file mode 100644 index 0000000..f71a8cf --- /dev/null +++ b/stage3/01-install-desktop/00-packages @@ -0,0 +1,16 @@ +python3-pygame +python3-tk +python3-pgzero +python3-serial +python3-pip +python3-numpy +rc-gui +tree +libgl1-mesa-dri libgles1 libgles2-mesa xcompmgr +geany +piclone +python3-twython +pprompt +ffmpeg +vlc +rpi-imager diff --git a/stage3/01-install-desktop/00-packages-nr b/stage3/01-install-desktop/00-packages-nr new file mode 100644 index 0000000..2a8d122 --- /dev/null +++ b/stage3/01-install-desktop/00-packages-nr @@ -0,0 +1,2 @@ +pi-package +gnome-core gnome-tweaks gnome-shell-extension-no-annoyance gnome-shell-extension-manager gnome-shell-extension-gsconnect gnome-shell-extension-dash-to-panel gnome-shell-extension-bluetooth-quick-connect gnome-shell-extension-appindicator gnome-initial-setup \ No newline at end of file diff --git a/stage3/01-install-desktop/02-packages b/stage3/01-install-desktop/02-packages new file mode 100644 index 0000000..3396cae --- /dev/null +++ b/stage3/01-install-desktop/02-packages @@ -0,0 +1,4 @@ +hunspell-en-us +hyphen-en-us +wamerican +wbritish diff --git a/stage3/02-extras/00-packages b/stage3/02-extras/00-packages new file mode 100644 index 0000000..8fcfb8b --- /dev/null +++ b/stage3/02-extras/00-packages @@ -0,0 +1 @@ +command-not-found \ No newline at end of file diff --git a/stage3/02-extras/00-run.sh b/stage3/02-extras/00-run.sh new file mode 100755 index 0000000..46975d0 --- /dev/null +++ b/stage3/02-extras/00-run.sh @@ -0,0 +1,4 @@ +#!/bin/bash -e + +#polkit fixes +install -m 644 files/polkit-admin.conf "${ROOTFS_DIR}/etc/polkit-1/localauthority.conf.d/51-admin.conf" \ No newline at end of file diff --git a/stage3/02-extras/files/polkit-admin.conf b/stage3/02-extras/files/polkit-admin.conf new file mode 100644 index 0000000..42c41d1 --- /dev/null +++ b/stage3/02-extras/files/polkit-admin.conf @@ -0,0 +1 @@ +AdminIdentities=unix-group:sudo;unix-group:admin \ No newline at end of file diff --git a/stage4/04-enable-xcompmgr/00-run.sh b/stage3/04-enable-xcompmgr/00-run.sh similarity index 100% rename from stage4/04-enable-xcompmgr/00-run.sh rename to stage3/04-enable-xcompmgr/00-run.sh diff --git a/stage4/05-print-support/00-packages b/stage3/05-print-support/00-packages similarity index 100% rename from stage4/05-print-support/00-packages rename to stage3/05-print-support/00-packages diff --git a/stage4/05-print-support/01-run.sh b/stage3/05-print-support/01-run.sh similarity index 100% rename from stage4/05-print-support/01-run.sh rename to stage3/05-print-support/01-run.sh diff --git a/stage3/05-setup/00-run.sh b/stage3/05-setup/00-run.sh new file mode 100755 index 0000000..a3b067f --- /dev/null +++ b/stage3/05-setup/00-run.sh @@ -0,0 +1,17 @@ +#!/bin/bash -e + +# Include custom vendor file for gnome-inital-setup +mkdir -p "${ROOTFS_DIR}/usr/share/gnome-initial-setup/" +install -m 644 files/vendor.conf "${ROOTFS_DIR}/usr/share/gnome-initial-setup/" + +# Configure default GDM3 Session to Xorg +on_chroot << EOF +sed -i 's/#WaylandEnable=false/WaylandEnable=false/' /etc/gdm3/daemon.conf +mkdir -p /var/lib/gdm +touch /var/lib/gdm/run-initial-setup +EOF + +# Remove setup user (chill) [This allows for the user to be created in the first boot from the gnome-initial-setup] +on_chroot << EOF +deluser --remove-home --remove-all-files ${FIRST_USER_NAME} +EOF \ No newline at end of file diff --git a/stage3/05-setup/files/vendor.conf b/stage3/05-setup/files/vendor.conf new file mode 100644 index 0000000..49560ac --- /dev/null +++ b/stage3/05-setup/files/vendor.conf @@ -0,0 +1,5 @@ +[pages] +# Pages to show when a user already exists +existing_user_only=language;keyboard;timezone;goa; +# Only show the privacy page in the 'first boot' situation +new_user_only=welcome;language;keyboard;network;account;privacy; \ No newline at end of file diff --git a/stage3/EXPORT_IMAGE b/stage3/EXPORT_IMAGE new file mode 100644 index 0000000..e69de29 diff --git a/stage4/00-install-packages/00-packages b/stage4/00-install-packages/00-packages deleted file mode 100644 index 511941c..0000000 --- a/stage4/00-install-packages/00-packages +++ /dev/null @@ -1,27 +0,0 @@ -python3-pygame -python3-tk thonny -python3-pgzero -python3-serial -debian-reference-en dillo -raspberrypi-net-mods raspberrypi-ui-mods -python3-pip -python3-numpy -alacarte rc-gui sense-hat -tree -libgl1-mesa-dri libgles1 libgles2-mesa xcompmgr -geany -piclone -python3-twython -python3-flask -pprompt -piwiz -rp-prefapps -ffmpeg -vlc -rpi-connect -rpi-imager -labwc -squeekboard - -# ninja-build and openocd needed for vscode pico extension -meson openocd diff --git a/stage4/00-install-packages/00-packages-nr b/stage4/00-install-packages/00-packages-nr deleted file mode 100644 index b904b80..0000000 --- a/stage4/00-install-packages/00-packages-nr +++ /dev/null @@ -1,2 +0,0 @@ -pi-package -realvnc-vnc-server diff --git a/stage4/00-install-packages/02-packages b/stage4/00-install-packages/02-packages deleted file mode 100644 index fc43d17..0000000 --- a/stage4/00-install-packages/02-packages +++ /dev/null @@ -1,4 +0,0 @@ -hunspell-en-gb -hyphen-en-gb -wamerican -wbritish diff --git a/stage4/01-console-autologin/00-run.sh b/stage4/01-console-autologin/00-run.sh deleted file mode 100755 index 665dcdb..0000000 --- a/stage4/01-console-autologin/00-run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -e - -on_chroot << EOF - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_boot_behaviour B4 -EOF diff --git a/stage4/02-extras/00-run.sh b/stage4/02-extras/00-run.sh deleted file mode 100755 index 6a24f82..0000000 --- a/stage4/02-extras/00-run.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -e - -#Alacarte fixes -install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local" -install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share" -install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share/applications" -install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share/desktop-directories" diff --git a/stage4/03-bookshelf/00-run.sh b/stage4/03-bookshelf/00-run.sh deleted file mode 100755 index d62e70e..0000000 --- a/stage4/03-bookshelf/00-run.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -e - -BOOKSHELF_URL="https://magpi.raspberrypi.com/bookshelf.xml" -GUIDE_URL="$(curl -s "$BOOKSHELF_URL" | awk -F '[<>]' "/Raspberry Pi Beginner's Guide .*<\/TITLE>/ {f=1; next} f==1 && /PDF/ {print \$3; exit}")" -OUTPUT="$(basename "$GUIDE_URL" | cut -f1 -d'?')" - -if [ ! -f "files/$OUTPUT" ]; then - rm files/*.pdf -f - curl -s "$GUIDE_URL" -o "files/$OUTPUT" -fi - -file "files/$OUTPUT" | grep -q "PDF document" - -install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/Bookshelf" -install -v -o 1000 -g 1000 -m 644 "files/$OUTPUT" "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/Bookshelf/" diff --git a/stage4/03-bookshelf/files/.gitignore b/stage4/03-bookshelf/files/.gitignore deleted file mode 100644 index a136337..0000000 --- a/stage4/03-bookshelf/files/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.pdf diff --git a/stage4/06-enable-wayland/00-run.sh b/stage4/06-enable-wayland/00-run.sh deleted file mode 100755 index d1f240d..0000000 --- a/stage4/06-enable-wayland/00-run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -e - -on_chroot << EOF - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wayland W3 -EOF diff --git a/stage4/EXPORT_IMAGE b/stage4/EXPORT_IMAGE deleted file mode 100644 index 79ec11a..0000000 --- a/stage4/EXPORT_IMAGE +++ /dev/null @@ -1,4 +0,0 @@ -IMG_SUFFIX="" -if [ "${USE_QEMU}" = "1" ]; then - export IMG_SUFFIX="${IMG_SUFFIX}-qemu" -fi diff --git a/stage4/prerun.sh b/stage4/prerun.sh deleted file mode 100755 index 9acd13c..0000000 --- a/stage4/prerun.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -e - -if [ ! -d "${ROOTFS_DIR}" ]; then - copy_previous -fi diff --git a/stage5/00-install-extras/00-packages b/stage5/00-install-extras/00-packages deleted file mode 100644 index c871e09..0000000 --- a/stage5/00-install-extras/00-packages +++ /dev/null @@ -1,7 +0,0 @@ -mu-editor -scratch nuscratch scratch3 -wolfram-engine -claws-mail -realvnc-vnc-viewer -code-the-classics code-the-classics-2 -kicad diff --git a/stage5/00-install-libreoffice/00-packages b/stage5/00-install-libreoffice/00-packages deleted file mode 100644 index dc1b8d7..0000000 --- a/stage5/00-install-libreoffice/00-packages +++ /dev/null @@ -1,3 +0,0 @@ -libreoffice-pi openjdk-11-jre- -libreoffice-help-en-gb -libreoffice-l10n-en-gb diff --git a/stage5/EXPORT_IMAGE b/stage5/EXPORT_IMAGE deleted file mode 100644 index a81a844..0000000 --- a/stage5/EXPORT_IMAGE +++ /dev/null @@ -1,4 +0,0 @@ -IMG_SUFFIX="-full" -if [ "${USE_QEMU}" = "1" ]; then - export IMG_SUFFIX="${IMG_SUFFIX}-qemu" -fi diff --git a/stage5/prerun.sh b/stage5/prerun.sh deleted file mode 100755 index 9acd13c..0000000 --- a/stage5/prerun.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -e - -if [ ! -d "${ROOTFS_DIR}" ]; then - copy_previous -fi