First Stable OS
This commit is contained in:
18
build.sh
18
build.sh
@@ -108,8 +108,10 @@ run_stage(){
|
|||||||
log "End ${STAGE_DIR}/prerun.sh"
|
log "End ${STAGE_DIR}/prerun.sh"
|
||||||
fi
|
fi
|
||||||
for SUB_STAGE_DIR in "${STAGE_DIR}"/*; do
|
for SUB_STAGE_DIR in "${STAGE_DIR}"/*; do
|
||||||
if [ -d "${SUB_STAGE_DIR}" ] && [ ! -f "${SUB_STAGE_DIR}/SKIP" ]; then
|
if [ -d "${SUB_STAGE_DIR}" ]; then
|
||||||
run_sub_stage
|
if [ ! -f "${SUB_STAGE_DIR}/SKIP" ] && [ ! -f "${SUB_STAGE_DIR}/SKIP_${ARCH}" ]; then
|
||||||
|
run_sub_stage
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
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 PI_GEN_RELEASE=${PI_GEN_RELEASE:-Raspberry Pi reference}
|
||||||
|
|
||||||
export ARCH=arm64
|
export ARCH=arm64
|
||||||
export RELEASE=${RELEASE:-bookworm} # Don't forget to update stage0/prerun.sh
|
export RELEASE=${RELEASE:-bookworm}
|
||||||
export IMG_NAME="${IMG_NAME:-raspios-$RELEASE-$ARCH}"
|
export IMG_NAME="${IMG_NAME:-chillcraftos-$RELEASE-$ARCH}"
|
||||||
|
|
||||||
export USE_QEMU="${USE_QEMU:-0}"
|
export USE_QEMU="${USE_QEMU:-0}"
|
||||||
export IMG_DATE="${IMG_DATE:-"$(date +%Y-%m-%d)"}"
|
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 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 FIRST_USER_PASS
|
||||||
export DISABLE_FIRST_BOOT_USER_RENAME=${DISABLE_FIRST_BOOT_USER_RENAME:-0}
|
export DISABLE_FIRST_BOOT_USER_RENAME=${DISABLE_FIRST_BOOT_USER_RENAME:-0}
|
||||||
export WPA_COUNTRY
|
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 LOCALE_DEFAULT="${LOCALE_DEFAULT:-en_GB.UTF-8}"
|
||||||
|
|
||||||
export KEYBOARD_KEYMAP="${KEYBOARD_KEYMAP:-gb}"
|
export KEYBOARD_KEYMAP="${KEYBOARD_KEYMAP:-us}"
|
||||||
export KEYBOARD_LAYOUT="${KEYBOARD_LAYOUT:-English (UK)}"
|
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)"}
|
export GIT_HASH=${GIT_HASH:-"$(git rev-parse HEAD)"}
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
|
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
|
||||||
find "${ROOTFS_DIR}/var/lib/apt/lists/" -type f -delete
|
find "${ROOTFS_DIR}/var/lib/apt/lists/" -type f -delete
|
||||||
on_chroot << EOF
|
on_chroot << EOF
|
||||||
|
apt-file update
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get -y dist-upgrade --auto-remove --purge
|
apt-get -y dist-upgrade --auto-remove --purge
|
||||||
apt-get clean
|
apt-get clean
|
||||||
|
73
export-image/mk-img.sh
Executable file
73
export-image/mk-img.sh
Executable file
@@ -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/"
|
92
export-image/mk-iso.sh
Executable file
92
export-image/mk-iso.sh
Executable file
@@ -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" <<EOF
|
||||||
|
set default=0
|
||||||
|
set timeout=5
|
||||||
|
|
||||||
|
menuentry "Linux" {
|
||||||
|
linux /boot/vmlinuz root=/dev/sda2
|
||||||
|
initrd /boot/initrd.img
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
grub-mkrescue -o "${ISO_FILE}" "${ROOTFS_DIR}"
|
||||||
|
|
||||||
|
echo "Bootable ISO created at ${ISO_FILE}"
|
@@ -1,73 +1,10 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
|
# Check if the architecture is arm64 or armhf
|
||||||
|
if [[ "$ARCH" == "arm64" || "$ARCH" == "armhf" ]]; then
|
||||||
unmount_image "${IMG_FILE}"
|
# If the architecture is arm64 or armhf, run mk-img.sh
|
||||||
|
./mk-img.sh
|
||||||
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
|
else
|
||||||
FAT_SIZE=32
|
# Otherwise, run mk-iso.sh
|
||||||
|
./mk-iso.sh
|
||||||
fi
|
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/"
|
|
||||||
|
0
export-noobs/00-release/files/partition_setup.sh
Normal file → Executable file
0
export-noobs/00-release/files/partition_setup.sh
Normal file → Executable file
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
install -m 644 files/sources.list "${ROOTFS_DIR}/etc/apt/"
|
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/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"
|
||||||
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/raspi.list"
|
||||||
|
#sed -i "s/RELEASE/${RELEASE}/g" "${ROOTFS_DIR}/etc/apt/sources.list.d/oxmc.list"
|
||||||
|
|
||||||
if [ -n "$APT_PROXY" ]; then
|
if [ -n "$APT_PROXY" ]; then
|
||||||
install -m 644 files/51cache "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
|
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"
|
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/"
|
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
|
on_chroot <<- \EOF
|
||||||
ARCH="$(dpkg --print-architecture)"
|
ARCH="$(dpkg --print-architecture)"
|
||||||
if [ "$ARCH" = "armhf" ]; then
|
if [ "$ARCH" = "armhf" ]; then
|
||||||
|
53
stage0/00-configure-apt/files/oxmc.gpg.key
Normal file
53
stage0/00-configure-apt/files/oxmc.gpg.key
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
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
|
||||||
|
JwmNXcU=
|
||||||
|
=JjzN
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
3
stage0/00-configure-apt/files/oxmc.list
Normal file
3
stage0/00-configure-apt/files/oxmc.list
Normal file
@@ -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
|
@@ -1,10 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/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
|
if [ ! -d "${ROOTFS_DIR}" ]; then
|
||||||
bootstrap ${RELEASE} "${ROOTFS_DIR}" http://deb.debian.org/debian/
|
bootstrap ${RELEASE} "${ROOTFS_DIR}" http://deb.debian.org/debian/
|
||||||
fi
|
fi
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
install -v -m 644 files/fstab "${ROOTFS_DIR}/etc/fstab"
|
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
|
on_chroot << EOF
|
||||||
if ! id -u ${FIRST_USER_NAME} >/dev/null 2>&1; then
|
if ! id -u ${FIRST_USER_NAME} >/dev/null 2>&1; then
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
proc /proc proc defaults 0 0
|
proc /proc proc defaults 0 0
|
||||||
BOOTDEV /boot/firmware vfat defaults 0 2
|
BOOTDEV /boot/firmware vfat defaults 0 2
|
||||||
ROOTDEV / ext4 defaults,noatime 0 1
|
ROOTDEV / ext4 defaults,noatime 0 1
|
||||||
|
# For /home (always writable):
|
||||||
|
LABEL=home /home ext4 defaults 0 2
|
30
stage1/01-sys-tweaks/files/system-readonly
Normal file
30
stage1/01-sys-tweaks/files/system-readonly
Normal file
@@ -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
|
@@ -3,9 +3,6 @@ console-setup keyboard-configuration debconf-utils parted
|
|||||||
build-essential manpages-dev bash-completion gdb pkg-config
|
build-essential manpages-dev bash-completion gdb pkg-config
|
||||||
python-is-python3
|
python-is-python3
|
||||||
v4l-utils
|
v4l-utils
|
||||||
gpiod python3-libgpiod
|
|
||||||
python3-gpiozero
|
|
||||||
pigpio python3-pigpio raspi-gpio python3-rpi-lgpio
|
|
||||||
python3-spidev
|
python3-spidev
|
||||||
python3-smbus2
|
python3-smbus2
|
||||||
avahi-daemon
|
avahi-daemon
|
||||||
@@ -18,6 +15,7 @@ dphys-swapfile
|
|||||||
raspberrypi-sys-mods
|
raspberrypi-sys-mods
|
||||||
pi-bluetooth
|
pi-bluetooth
|
||||||
apt-listchanges
|
apt-listchanges
|
||||||
|
apt-file
|
||||||
usb-modeswitch
|
usb-modeswitch
|
||||||
libpam-chksshpwd
|
libpam-chksshpwd
|
||||||
rpi-update
|
rpi-update
|
||||||
|
@@ -1,3 +1,2 @@
|
|||||||
cifs-utils
|
cifs-utils
|
||||||
rpicam-apps-lite
|
|
||||||
mkvtoolnix
|
mkvtoolnix
|
||||||
|
@@ -1,2 +0,0 @@
|
|||||||
# Do you accept the Wolfram - Raspberry Pi® Bundle License Agreement?
|
|
||||||
wolfram-engine shared/accepted-wolfram-eula boolean true
|
|
@@ -1,4 +0,0 @@
|
|||||||
IMG_SUFFIX="-lite"
|
|
||||||
if [ "${USE_QEMU}" = "1" ]; then
|
|
||||||
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
|
|
||||||
fi
|
|
@@ -2,19 +2,14 @@ gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-
|
|||||||
evince gtk2-engines alsa-utils
|
evince gtk2-engines alsa-utils
|
||||||
desktop-base
|
desktop-base
|
||||||
git
|
git
|
||||||
policykit-1
|
|
||||||
gvfs
|
gvfs
|
||||||
rfkill
|
rfkill
|
||||||
chromium rpi-chromium-mods libwidevinecdm0
|
firefox rpi-firefox-mods libwidevinecdm0
|
||||||
firefox rpi-firefox-mods
|
|
||||||
gldriver-test
|
gldriver-test
|
||||||
fonts-droid-fallback
|
fonts-droid-fallback
|
||||||
fonts-liberation2
|
fonts-liberation2
|
||||||
obconf
|
obconf
|
||||||
raindrop
|
raindrop
|
||||||
libcamera-tools
|
|
||||||
rpicam-apps
|
|
||||||
python3-picamera2
|
|
||||||
python3-pyqt5
|
python3-pyqt5
|
||||||
python3-opengl
|
python3-opengl
|
||||||
vulkan-tools mesa-vulkan-drivers
|
vulkan-tools mesa-vulkan-drivers
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
xserver-xorg xinit
|
xserver-xorg xinit
|
||||||
mousepad
|
mousepad
|
||||||
eom
|
eom
|
||||||
lxde lxtask menu-xdg
|
menu-xdg
|
||||||
zenity xdg-utils
|
yad zenity xdg-utils
|
||||||
gvfs-backends gvfs-fuse
|
gvfs-backends gvfs-fuse
|
||||||
lightdm gnome-themes-extra-data gnome-icon-theme
|
gdm3 gnome-themes-extra-data gnome-icon-theme
|
||||||
gnome-keyring
|
gnome-keyring
|
||||||
|
16
stage3/01-install-desktop/00-packages
Normal file
16
stage3/01-install-desktop/00-packages
Normal file
@@ -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
|
2
stage3/01-install-desktop/00-packages-nr
Normal file
2
stage3/01-install-desktop/00-packages-nr
Normal file
@@ -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
|
4
stage3/01-install-desktop/02-packages
Normal file
4
stage3/01-install-desktop/02-packages
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
hunspell-en-us
|
||||||
|
hyphen-en-us
|
||||||
|
wamerican
|
||||||
|
wbritish
|
1
stage3/02-extras/00-packages
Normal file
1
stage3/02-extras/00-packages
Normal file
@@ -0,0 +1 @@
|
|||||||
|
command-not-found
|
4
stage3/02-extras/00-run.sh
Executable file
4
stage3/02-extras/00-run.sh
Executable file
@@ -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"
|
1
stage3/02-extras/files/polkit-admin.conf
Normal file
1
stage3/02-extras/files/polkit-admin.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
AdminIdentities=unix-group:sudo;unix-group:admin
|
17
stage3/05-setup/00-run.sh
Executable file
17
stage3/05-setup/00-run.sh
Executable file
@@ -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
|
5
stage3/05-setup/files/vendor.conf
Normal file
5
stage3/05-setup/files/vendor.conf
Normal file
@@ -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;
|
0
stage3/EXPORT_IMAGE
Normal file
0
stage3/EXPORT_IMAGE
Normal file
@@ -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
|
|
@@ -1,2 +0,0 @@
|
|||||||
pi-package
|
|
||||||
realvnc-vnc-server
|
|
@@ -1,4 +0,0 @@
|
|||||||
hunspell-en-gb
|
|
||||||
hyphen-en-gb
|
|
||||||
wamerican
|
|
||||||
wbritish
|
|
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
on_chroot << EOF
|
|
||||||
SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_boot_behaviour B4
|
|
||||||
EOF
|
|
@@ -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"
|
|
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/sh -e
|
|
||||||
|
|
||||||
BOOKSHELF_URL="https://magpi.raspberrypi.com/bookshelf.xml"
|
|
||||||
GUIDE_URL="$(curl -s "$BOOKSHELF_URL" | awk -F '[<>]' "/<TITLE>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/"
|
|
1
stage4/03-bookshelf/files/.gitignore
vendored
1
stage4/03-bookshelf/files/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
*.pdf
|
|
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
on_chroot << EOF
|
|
||||||
SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wayland W3
|
|
||||||
EOF
|
|
@@ -1,4 +0,0 @@
|
|||||||
IMG_SUFFIX=""
|
|
||||||
if [ "${USE_QEMU}" = "1" ]; then
|
|
||||||
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
|
|
||||||
fi
|
|
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
if [ ! -d "${ROOTFS_DIR}" ]; then
|
|
||||||
copy_previous
|
|
||||||
fi
|
|
@@ -1,7 +0,0 @@
|
|||||||
mu-editor
|
|
||||||
scratch nuscratch scratch3
|
|
||||||
wolfram-engine
|
|
||||||
claws-mail
|
|
||||||
realvnc-vnc-viewer
|
|
||||||
code-the-classics code-the-classics-2
|
|
||||||
kicad
|
|
@@ -1,3 +0,0 @@
|
|||||||
libreoffice-pi openjdk-11-jre-
|
|
||||||
libreoffice-help-en-gb
|
|
||||||
libreoffice-l10n-en-gb
|
|
@@ -1,4 +0,0 @@
|
|||||||
IMG_SUFFIX="-full"
|
|
||||||
if [ "${USE_QEMU}" = "1" ]; then
|
|
||||||
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
|
|
||||||
fi
|
|
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
if [ ! -d "${ROOTFS_DIR}" ]; then
|
|
||||||
copy_previous
|
|
||||||
fi
|
|
Reference in New Issue
Block a user