Browse Source

Umbrel box

master
nolim1t 5 years ago
parent
commit
ce5001572a
No known key found for this signature in database GPG Key ID: F6287B82CC84BCBD
  1. 6
      .gitignore
  2. 262
      build.sh
  3. 6
      config
  4. 19
      depends
  5. 9
      export-image/00-allow-rerun/00-run.sh
  6. 7
      export-image/01-set-sources/01-run.sh
  7. 3
      export-image/02-network/01-run.sh
  8. 1
      export-image/02-network/files/resolv.conf
  9. 13
      export-image/03-set-partuuid/00-run.sh
  10. 101
      export-image/04-finalise/01-run.sh
  11. 61
      export-image/prerun.sh
  12. 42
      export-noobs/00-release/00-run.sh
  13. BIN
      export-noobs/00-release/files/OS.png
  14. BIN
      export-noobs/00-release/files/marketing/slides_vga/A.png
  15. BIN
      export-noobs/00-release/files/marketing/slides_vga/B.png
  16. BIN
      export-noobs/00-release/files/marketing/slides_vga/C.png
  17. BIN
      export-noobs/00-release/files/marketing/slides_vga/D.png
  18. BIN
      export-noobs/00-release/files/marketing/slides_vga/E.png
  19. BIN
      export-noobs/00-release/files/marketing/slides_vga/F.png
  20. BIN
      export-noobs/00-release/files/marketing/slides_vga/G.png
  21. 20
      export-noobs/00-release/files/os.json
  22. 46
      export-noobs/00-release/files/partition_setup.sh
  23. 22
      export-noobs/00-release/files/partitions.json
  24. 456
      export-noobs/00-release/files/release_notes.txt
  25. 36
      export-noobs/prerun.sh
  26. 100
      scripts/common
  27. 38
      scripts/dependencies_check
  28. 11
      scripts/remove-comments.sed
  29. 17
      stage0/00-configure-apt/00-run.sh
  30. 1
      stage0/00-configure-apt/files/51cache
  31. 30
      stage0/00-configure-apt/files/raspberrypi.gpg.key
  32. 3
      stage0/00-configure-apt/files/raspi.list
  33. 3
      stage0/00-configure-apt/files/sources.list
  34. 6
      stage0/01-locale/00-debconf
  35. 1
      stage0/01-locale/00-packages
  36. 2
      stage0/02-firmware/01-packages
  37. BIN
      stage0/files/raspberrypi.gpg
  38. 5
      stage0/prerun.sh
  39. 4
      stage1/00-boot-files/00-run.sh
  40. 1
      stage1/00-boot-files/files/cmdline.txt
  41. 65
      stage1/00-boot-files/files/config.txt
  42. 33
      stage1/01-sys-tweaks/00-patches/01-bashrc.diff
  43. 1
      stage1/01-sys-tweaks/00-patches/series
  44. 15
      stage1/01-sys-tweaks/00-run.sh
  45. 3
      stage1/01-sys-tweaks/files/fstab
  46. 2
      stage1/01-sys-tweaks/files/noclear.conf
  47. 1
      stage1/02-net-tweaks/00-packages
  48. 6
      stage1/02-net-tweaks/00-run.sh
  49. 1
      stage1/03-install-packages/00-packages
  50. 5
      stage1/prerun.sh
  51. 1
      stage2/00-copies-and-fills/01-packages
  52. 6
      stage2/00-copies-and-fills/02-run.sh
  53. 26
      stage2/01-sys-tweaks/00-debconf
  54. 31
      stage2/01-sys-tweaks/00-packages
  55. 1
      stage2/01-sys-tweaks/00-packages-nr
  56. 22
      stage2/01-sys-tweaks/00-patches/01-useradd.diff
  57. 13
      stage2/01-sys-tweaks/00-patches/02-swap.diff
  58. 12
      stage2/01-sys-tweaks/00-patches/04-inputrc.diff
  59. 26
      stage2/01-sys-tweaks/00-patches/05-path.diff
  60. 5
      stage2/01-sys-tweaks/00-patches/07-resize-init.diff
  61. 5
      stage2/01-sys-tweaks/00-patches/series
  62. 58
      stage2/01-sys-tweaks/01-run.sh
  63. 5
      stage2/01-sys-tweaks/files/50raspi
  64. 3
      stage2/01-sys-tweaks/files/90-qemu.rules
  65. 16
      stage2/01-sys-tweaks/files/console-setup
  66. 20
      stage2/01-sys-tweaks/files/rc.local
  67. 25
      stage2/01-sys-tweaks/files/resize2fs_once
  68. 2
      stage2/01-sys-tweaks/files/ttyoutput.conf
  69. 8
      stage2/02-net-tweaks/00-packages
  70. 33
      stage2/02-net-tweaks/01-run.sh
  71. 3
      stage2/02-net-tweaks/files/wait.conf
  72. 2
      stage2/02-net-tweaks/files/wpa_supplicant.conf
  73. 2
      stage2/03-accept-mathematica-eula/00-debconf
  74. 8
      stage2/03-set-timezone/02-run.sh
  75. 1
      stage2/04-docker-compose/00-packages
  76. 10
      stage2/04-docker-compose/01-run.sh
  77. 4
      stage2/05-prepare-home-dir/01-run.sh
  78. 5
      stage2/06-fix-docker-perms/01-run.sh
  79. 8
      stage2/07-pip-install-deps/01-run.sh
  80. 4
      stage2/EXPORT_IMAGE
  81. 7
      stage2/prerun.sh
  82. 2
      stage3/00-install-packages/00-debconf
  83. 15
      stage3/00-install-packages/00-packages
  84. 6
      stage3/00-install-packages/00-packages-nr
  85. 8
      stage3/00-install-packages/01-run.sh
  86. 3
      stage3/01-tweaks/00-run.sh
  87. 0
      stage3/SKIP
  88. 5
      stage3/prerun.sh
  89. 2
      stage4/00-install-packages/00-debconf
  90. 25
      stage4/00-install-packages/00-packages
  91. 2
      stage4/00-install-packages/00-packages-nr
  92. 22
      stage4/00-install-packages/01-packages
  93. 4
      stage4/00-install-packages/02-packages
  94. 5
      stage4/01-console-autologin/00-run.sh
  95. 7
      stage4/02-extras/00-run.sh
  96. 15
      stage4/03-magpi/00-run.sh
  97. 1
      stage4/03-magpi/files/.gitignore
  98. 5
      stage4/04-enable-xcompmgr/00-run.sh
  99. 4
      stage4/EXPORT_IMAGE
  100. 2
      stage4/EXPORT_NOOBS

6
.gitignore

@ -0,0 +1,6 @@
deploy/*
work/*
postrun.sh
.pc
*-pc
apt-cacher-ng/

262
build.sh

@ -0,0 +1,262 @@
#!/bin/bash -e
# shellcheck disable=SC2119
run_sub_stage()
{
log "Begin ${SUB_STAGE_DIR}"
pushd "${SUB_STAGE_DIR}" > /dev/null
for i in {00..99}; do
if [ -f "${i}-debconf" ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-debconf"
on_chroot << EOF
debconf-set-selections <<SELEOF
$(cat "${i}-debconf")
SELEOF
EOF
log "End ${SUB_STAGE_DIR}/${i}-debconf"
fi
if [ -f "${i}-packages-nr" ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-packages-nr"
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < "${i}-packages-nr")"
if [ -n "$PACKAGES" ]; then
on_chroot << EOF
apt-get install --no-install-recommends -y $PACKAGES
EOF
fi
log "End ${SUB_STAGE_DIR}/${i}-packages-nr"
fi
if [ -f "${i}-packages" ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-packages"
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < "${i}-packages")"
if [ -n "$PACKAGES" ]; then
on_chroot << EOF
apt-get install -y $PACKAGES
EOF
fi
log "End ${SUB_STAGE_DIR}/${i}-packages"
fi
if [ -d "${i}-patches" ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-patches"
pushd "${STAGE_WORK_DIR}" > /dev/null
if [ "${CLEAN}" = "1" ]; then
rm -rf .pc
rm -rf ./*-pc
fi
QUILT_PATCHES="${SUB_STAGE_DIR}/${i}-patches"
SUB_STAGE_QUILT_PATCH_DIR="$(basename "$SUB_STAGE_DIR")-pc"
mkdir -p "$SUB_STAGE_QUILT_PATCH_DIR"
ln -snf "$SUB_STAGE_QUILT_PATCH_DIR" .pc
quilt upgrade
if [ -e "${SUB_STAGE_DIR}/${i}-patches/EDIT" ]; then
echo "Dropping into bash to edit patches..."
bash
fi
RC=0
quilt push -a || RC=$?
case "$RC" in
0|2)
;;
*)
false
;;
esac
popd > /dev/null
log "End ${SUB_STAGE_DIR}/${i}-patches"
fi
if [ -x ${i}-run.sh ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-run.sh"
./${i}-run.sh
log "End ${SUB_STAGE_DIR}/${i}-run.sh"
fi
if [ -f ${i}-run-chroot.sh ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-run-chroot.sh"
on_chroot < ${i}-run-chroot.sh
log "End ${SUB_STAGE_DIR}/${i}-run-chroot.sh"
fi
done
popd > /dev/null
log "End ${SUB_STAGE_DIR}"
}
run_stage(){
log "Begin ${STAGE_DIR}"
STAGE="$(basename "${STAGE_DIR}")"
pushd "${STAGE_DIR}" > /dev/null
unmount "${WORK_DIR}/${STAGE}"
STAGE_WORK_DIR="${WORK_DIR}/${STAGE}"
ROOTFS_DIR="${STAGE_WORK_DIR}"/rootfs
if [ ! -f SKIP_IMAGES ]; then
if [ -f "${STAGE_DIR}/EXPORT_IMAGE" ]; then
EXPORT_DIRS="${EXPORT_DIRS} ${STAGE_DIR}"
fi
fi
if [ ! -f SKIP ]; then
if [ "${CLEAN}" = "1" ]; then
if [ -d "${ROOTFS_DIR}" ]; then
rm -rf "${ROOTFS_DIR}"
fi
fi
if [ -x prerun.sh ]; then
log "Begin ${STAGE_DIR}/prerun.sh"
./prerun.sh
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
fi
done
fi
unmount "${WORK_DIR}/${STAGE}"
PREV_STAGE="${STAGE}"
PREV_STAGE_DIR="${STAGE_DIR}"
PREV_ROOTFS_DIR="${ROOTFS_DIR}"
popd > /dev/null
log "End ${STAGE_DIR}"
}
if [ "$(id -u)" != "0" ]; then
echo "Please run as root" 1>&2
exit 1
fi
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export BASE_DIR
if [ -f config ]; then
# shellcheck disable=SC1091
source config
fi
while getopts "c:" flag
do
case "$flag" in
c)
EXTRA_CONFIG="$OPTARG"
# shellcheck disable=SC1090
source "$EXTRA_CONFIG"
;;
*)
;;
esac
done
export PI_GEN=${PI_GEN:-pi-gen}
export PI_GEN_REPO=${PI_GEN_REPO:-https://github.com/RPi-Distro/pi-gen}
if [ -z "${IMG_NAME}" ]; then
echo "IMG_NAME not set" 1>&2
exit 1
fi
export USE_QEMU="${USE_QEMU:-0}"
export IMG_DATE="${IMG_DATE:-"$(date +%Y-%m-%d)"}"
export IMG_FILENAME="${IMG_FILENAME:-"${IMG_DATE}-${IMG_NAME}"}"
export ZIP_FILENAME="${ZIP_FILENAME:-"image_${IMG_DATE}-${IMG_NAME}"}"
export SCRIPT_DIR="${BASE_DIR}/scripts"
export WORK_DIR="${WORK_DIR:-"${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"}"
export DEPLOY_DIR=${DEPLOY_DIR:-"${BASE_DIR}/deploy"}
export DEPLOY_ZIP="${DEPLOY_ZIP:-1}"
export LOG_FILE="${WORK_DIR}/build.log"
export TARGET_HOSTNAME=${TARGET_HOSTNAME:-raspberrypi}
export FIRST_USER_NAME=${FIRST_USER_NAME:-pi}
export FIRST_USER_PASS=${FIRST_USER_PASS:-raspberry}
export WPA_ESSID
export WPA_PASSWORD
export WPA_COUNTRY
export ENABLE_SSH="${ENABLE_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 TIMEZONE_DEFAULT="${TIMEZONE_DEFAULT:-Europe/London}"
export GIT_HASH=${GIT_HASH:-"$(git rev-parse HEAD)"}
export CLEAN
export IMG_NAME
export APT_PROXY
export STAGE
export STAGE_DIR
export STAGE_WORK_DIR
export PREV_STAGE
export PREV_STAGE_DIR
export ROOTFS_DIR
export PREV_ROOTFS_DIR
export IMG_SUFFIX
export NOOBS_NAME
export NOOBS_DESCRIPTION
export EXPORT_DIR
export EXPORT_ROOTFS_DIR
export QUILT_PATCHES
export QUILT_NO_DIFF_INDEX=1
export QUILT_NO_DIFF_TIMESTAMPS=1
export QUILT_REFRESH_ARGS="-p ab"
# shellcheck source=scripts/common
source "${SCRIPT_DIR}/common"
# shellcheck source=scripts/dependencies_check
source "${SCRIPT_DIR}/dependencies_check"
dependencies_check "${BASE_DIR}/depends"
#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
fi
if [[ -n "${WPA_PASSWORD}" && ${#WPA_PASSWORD} -lt 8 || ${#WPA_PASSWORD} -gt 63 ]] ; then
echo "WPA_PASSWORD" must be between 8 and 63 characters
exit 1
fi
mkdir -p "${WORK_DIR}"
log "Begin ${BASE_DIR}"
STAGE_LIST=${STAGE_LIST:-${BASE_DIR}/stage*}
for STAGE_DIR in $STAGE_LIST; do
STAGE_DIR=$(realpath "${STAGE_DIR}")
run_stage
done
CLEAN=1
for EXPORT_DIR in ${EXPORT_DIRS}; do
STAGE_DIR=${BASE_DIR}/export-image
# shellcheck source=/dev/null
source "${EXPORT_DIR}/EXPORT_IMAGE"
EXPORT_ROOTFS_DIR=${WORK_DIR}/$(basename "${EXPORT_DIR}")/rootfs
run_stage
if [ "${USE_QEMU}" != "1" ]; then
if [ -e "${EXPORT_DIR}/EXPORT_NOOBS" ]; then
# shellcheck source=/dev/null
source "${EXPORT_DIR}/EXPORT_NOOBS"
STAGE_DIR="${BASE_DIR}/export-noobs"
run_stage
fi
fi
done
if [ -x ${BASE_DIR}/postrun.sh ]; then
log "Begin postrun.sh"
cd "${BASE_DIR}"
./postrun.sh
log "End postrun.sh"
fi
log "End ${BASE_DIR}"

6
config

@ -0,0 +1,6 @@
IMG_NAME=umbral
TARGET_HOSTNAME=umbral
TIMEZONE_DEFAULT="Etc/UTC"
FIRST_USER_NAME=umbral
FIRST_USER_PASS=umbralbox
ENABLE_SSH=1

19
depends

@ -0,0 +1,19 @@
quilt
parted
realpath:coreutils
qemu-arm-static:qemu-user-static
debootstrap
zerofree
zip
mkdosfs:dosfstools
capsh:libcap2-bin
bsdtar
grep
rsync
xz:xz-utils
curl
xxd
file
git
lsmod:kmod
bc

9
export-image/00-allow-rerun/00-run.sh

@ -0,0 +1,9 @@
#!/bin/bash -e
if [ ! -x "${ROOTFS_DIR}/usr/bin/qemu-arm-static" ]; then
cp /usr/bin/qemu-arm-static "${ROOTFS_DIR}/usr/bin/"
fi
if [ -e "${ROOTFS_DIR}/etc/ld.so.preload" ]; then
mv "${ROOTFS_DIR}/etc/ld.so.preload" "${ROOTFS_DIR}/etc/ld.so.preload.disabled"
fi

7
export-image/01-set-sources/01-run.sh

@ -0,0 +1,7 @@
#!/bin/bash -e
on_chroot << EOF
apt-get update
apt-get -y dist-upgrade
apt-get clean
EOF

3
export-image/02-network/01-run.sh

@ -0,0 +1,3 @@
#!/bin/bash -e
install -m 644 files/resolv.conf "${ROOTFS_DIR}/etc/"

1
export-image/02-network/files/resolv.conf

@ -0,0 +1 @@
nameserver 8.8.8.8

13
export-image/03-set-partuuid/00-run.sh

@ -0,0 +1,13 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
IMGID="$(dd if="${IMG_FILE}" skip=440 bs=1 count=4 2>/dev/null | xxd -e | cut -f 2 -d' ')"
BOOT_PARTUUID="${IMGID}-01"
ROOT_PARTUUID="${IMGID}-02"
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/ROOTDEV/PARTUUID=${ROOT_PARTUUID}/" "${ROOTFS_DIR}/boot/cmdline.txt"

101
export-image/04-finalise/01-run.sh

@ -0,0 +1,101 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
INFO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.info"
on_chroot << EOF
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 [ -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config" ]; then
chmod 700 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config"
fi
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
rm -f "${ROOTFS_DIR}/usr/bin/qemu-arm-static"
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
rm -f "${ROOTFS_DIR}/etc/network/interfaces.dpkg-old"
rm -f "${ROOTFS_DIR}/etc/apt/sources.list~"
rm -f "${ROOTFS_DIR}/etc/apt/trusted.gpg~"
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-"
rm -f "${ROOTFS_DIR}"/var/cache/debconf/*-old
rm -f "${ROOTFS_DIR}"/var/lib/dpkg/*-old
rm -f "${ROOTFS_DIR}"/usr/share/icons/*/icon-theme.cache
rm -f "${ROOTFS_DIR}/var/lib/dbus/machine-id"
true > "${ROOTFS_DIR}/etc/machine-id"
ln -nsf /proc/mounts "${ROOTFS_DIR}/etc/mtab"
find "${ROOTFS_DIR}/var/log/" -type f -exec cp /dev/null {} \;
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/issue.txt"
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"
ROOT_DEV="$(mount | grep "${ROOTFS_DIR} " | cut -f1 -d' ')"
unmount "${ROOTFS_DIR}"
zerofree "${ROOT_DEV}"
unmount_image "${IMG_FILE}"
mkdir -p "${DEPLOY_DIR}"
rm -f "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip"
rm -f "${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
if [ "${DEPLOY_ZIP}" == "1" ]; then
pushd "${STAGE_WORK_DIR}" > /dev/null
zip "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip" \
"$(basename "${IMG_FILE}")"
popd > /dev/null
else
cp "$IMG_FILE" "$DEPLOY_DIR"
fi
cp "$INFO_FILE" "$DEPLOY_DIR"

61
export-image/prerun.sh

@ -0,0 +1,61 @@
#!/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="$((256 * 1024 * 1024))"
ROOT_SIZE=$(du --apparent-size -s "${EXPORT_ROOTFS_DIR}" --exclude var/cache/apt/archives --exclude boot --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))"
PARTED_OUT=$(parted -sm "${IMG_FILE}" unit b print)
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 2 | tr -d B)
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 4 | tr -d B)
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 2 | tr -d B)
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 4 | tr -d B)
BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}")
ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}")
echo "/boot: offset $BOOT_OFFSET, length $BOOT_LENGTH"
echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH"
ROOT_FEATURES="^huge_file"
for FEATURE in metadata_csum 64bit; do
if grep -q "$FEATURE" /etc/mke2fs.conf; then
ROOT_FEATURES="^$FEATURE,$ROOT_FEATURES"
fi
done
mkdosfs -n boot -F 32 -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"
mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot" -t vfat
rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/" "${ROOTFS_DIR}/boot/"

42
export-noobs/00-release/00-run.sh

@ -0,0 +1,42 @@
#!/bin/bash -e
NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
install -v -m 744 files/partition_setup.sh "${NOOBS_DIR}/"
install -v files/partitions.json "${NOOBS_DIR}/"
install -v files/os.json "${NOOBS_DIR}/"
install -v files/OS.png "${NOOBS_DIR}/"
install -v files/release_notes.txt "${NOOBS_DIR}/"
tar -v -c -C files/marketing -f "${NOOBS_DIR}/marketing.tar" .
BOOT_SHASUM="$(sha256sum "${NOOBS_DIR}/boot.tar.xz" | cut -f1 -d' ')"
ROOT_SHASUM="$(sha256sum "${NOOBS_DIR}/root.tar.xz" | cut -f1 -d' ')"
BOOT_SIZE="$(xz --robot -l "${NOOBS_DIR}/boot.tar.xz" | grep totals | cut -f 5)"
ROOT_SIZE="$(xz --robot -l "${NOOBS_DIR}/root.tar.xz" | grep totals | cut -f 5)"
BOOT_SIZE="$(( BOOT_SIZE / 1024 / 1024 + 1))"
ROOT_SIZE="$(( ROOT_SIZE / 1024 / 1024 + 1))"
BOOT_NOM="256"
ROOT_NOM="$(( ROOT_SIZE + 400 ))"
mv "${NOOBS_DIR}/OS.png" "${NOOBS_DIR}/${NOOBS_NAME// /_}.png"
sed "${NOOBS_DIR}/partitions.json" -i -e "s|BOOT_SHASUM|${BOOT_SHASUM}|"
sed "${NOOBS_DIR}/partitions.json" -i -e "s|ROOT_SHASUM|${ROOT_SHASUM}|"
sed "${NOOBS_DIR}/partitions.json" -i -e "s|BOOT_SIZE|${BOOT_SIZE}|"
sed "${NOOBS_DIR}/partitions.json" -i -e "s|ROOT_SIZE|${ROOT_SIZE}|"
sed "${NOOBS_DIR}/partitions.json" -i -e "s|BOOT_NOM|${BOOT_NOM}|"
sed "${NOOBS_DIR}/partitions.json" -i -e "s|ROOT_NOM|${ROOT_NOM}|"
sed "${NOOBS_DIR}/os.json" -i -e "s|UNRELEASED|${IMG_DATE}|"
sed "${NOOBS_DIR}/os.json" -i -e "s|NOOBS_NAME|${NOOBS_NAME}|"
sed "${NOOBS_DIR}/os.json" -i -e "s|NOOBS_DESCRIPTION|${NOOBS_DESCRIPTION}|"
sed "${NOOBS_DIR}/release_notes.txt" -i -e "s|UNRELEASED|${IMG_DATE}|"
cp -a "${NOOBS_DIR}" "${DEPLOY_DIR}/"

BIN
export-noobs/00-release/files/OS.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/A.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/B.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/C.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/D.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/E.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/F.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
export-noobs/00-release/files/marketing/slides_vga/G.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

20
export-noobs/00-release/files/os.json

@ -0,0 +1,20 @@
{
"description": "NOOBS_DESCRIPTION",
"feature_level": 35120124,
"kernel": "4.19",
"name": "NOOBS_NAME",
"password": "raspberry",
"release_date": "UNRELEASED",
"supported_hex_revisions": "2,3,4,5,6,7,8,9,d,e,f,10,11,12,14,19,1040,1041,0092,0093,2082",
"supported_models": [
"Pi Model",
"Pi 2",
"Pi Zero",
"Pi 3",
"Pi Compute Module 3",
"Pi 4"
],
"url": "http://www.raspbian.org/",
"username": "pi",
"version": "buster"
}

46
export-noobs/00-release/files/partition_setup.sh

@ -0,0 +1,46 @@
#!/bin/sh
#supports_backup in PINN
set -ex
# shellcheck disable=SC2154
if [ -z "$part1" ] || [ -z "$part2" ]; then
printf "Error: missing environment variable part1 or part2\n" 1>&2
exit 1
fi
mkdir -p /tmp/1 /tmp/2
mount "$part1" /tmp/1
mount "$part2" /tmp/2
sed /tmp/1/cmdline.txt -i -e "s|root=[^ ]*|root=${part2}|"
sed /tmp/2/etc/fstab -i -e "s|^[^#].* / |${part2} / |"
sed /tmp/2/etc/fstab -i -e "s|^[^#].* /boot |${part1} /boot |"
# shellcheck disable=SC2154
if [ -z "$restore" ]; then
if [ -f /mnt/ssh ]; then
cp /mnt/ssh /tmp/1/
fi
if [ -f /mnt/ssh.txt ]; then
cp /mnt/ssh.txt /tmp/1/
fi
if [ -f /settings/wpa_supplicant.conf ]; then
cp /settings/wpa_supplicant.conf /tmp/1/
fi
if ! grep -q resize /proc/cmdline; then
if ! grep -q splash /tmp/1/cmdline.txt; then
sed -i "s| quiet||g" /tmp/1/cmdline.txt
fi
sed -i 's| init=/usr/lib/raspi-config/init_resize.sh||' /tmp/1/cmdline.txt
else
sed -i '1 s|.*|& sdhci.debug_quirks2=4|' /tmp/1/cmdline.txt
fi
fi
umount /tmp/1
umount /tmp/2

22
export-noobs/00-release/files/partitions.json

@ -0,0 +1,22 @@
{
"partitions": [
{
"filesystem_type": "FAT",
"label": "boot",
"mkfs_options": "-F 32",
"partition_size_nominal": BOOT_NOM,
"uncompressed_tarball_size": BOOT_SIZE,
"want_maximised": false,
"sha256sum": "BOOT_SHASUM"
},
{
"filesystem_type": "ext4",
"label": "root",
"mkfs_options": "-O ^huge_file",
"partition_size_nominal": ROOT_NOM,
"uncompressed_tarball_size": ROOT_SIZE,
"want_maximised": true,
"sha256sum": "ROOT_SHASUM"
}
]
}

456
export-noobs/00-release/files/release_notes.txt

@ -0,0 +1,456 @@
UNRELEASED:
*
2019-09-26:
* rpi-eeprom included
- This will automatically update the SPI EEPROM on the Raspberry Pi 4 to the latest stable version.
See https://rpf.io/eeprom for more information.
* New icon theme for file manager icons
* Appearance Settings - option for identical desktop on both monitors
* Appearance Settings - option to show different desktop icons on both monitors
* Taskbar automatically moved to monitor 0 if monitor 1 not found at boot
* Switching of audio output between two HDMI devices added to volume plugin
* Switching of audio input devices added to volume plugin
* .asoundrc (ALSA config file) now uses 'plug' values to support more devices
* Audio Settings tool modified to integrate more closely with volume plugin to reduce duplicated code
* Screen Configuration tool now shows separate menus for resolution and refresh rate
* Primary and active monitor settings removed from Screen Configuration tool
* Overscan support added for FKMS driver
* New keyboard shortcuts added - Ctrl-Alt-End brings up shutdown menu; Ctrl-Alt-M moves taskbar between monitors
* Latest changes to Bluez ALSA interface integrated to improve connection to Bluetooth audio devices
* Mousepad used as simple text editor instead of leafpad
* Version 3.2 of Thonny added
* Version 74 of Chromium added
* Version 3.0.8 of VLC added
* Version 32.0.0.255 of Flash player added
* Version 6.5.0 of RealVNC Server added
* Version 6.19.715 of RealVNC Viewer added (full image only)
* Version 12.0.1 of Mathematica added (full image only)
* Version 0.20.8 of NodeRED added (full image only)
* Version 3.1.0 of Sonic Pi added (full image only)
* Scratch 3 added (full image only)
* Bug fix - URL handling in Terminal
* Bug fix - octal values in SSIDs in network plugin
* Bug fix - remaining value in progress bar when transferring files
* Bug fix - integration of xarchiver tool with file manager
* Bug fix - start menu opening on incorrect monitor
* Bug fix - minimised applications wrongly displayed on taskbar on second monitor
* Bug fix - Bluetooth icon disappearing on x86 platforms when Bluetooth turned off
* Bug fix - Screen Configuration tool not shown on x86 platforms and settings not being saved
* Various translation updates
* Various minor bug fixes
* Epiphany/Web removed
* ntfs-3g included
* pciutils added
* Linux kernel 4.19.75
* Raspberry Pi firmware 01508e81ec1e918448227ca864616d56c430b46d
2019-07-10:
* Clearer options for switching of Pi 4 video output in Raspberry Pi Configuration
* Option added to Appearance Settings to move taskbar to second monitor
* Option added to Recommended Software to restrict package installs by architecture
* New version of Adobe Flash player (32.0.0.223)
* Selection of screen refresh rates added to Screen Configuration
* Fix for missing text insertion cursor in LibreOffice on Pi 4
* Fix for Wi-fi interruption when Wi-fi icon on taskbar is clicked
* FIx for incorrect desktop background behind desktop login prompt
* Fix for segmentation faults when launching obconf and lxapperarance
* Fix for unclosed file pointer in Screen Configuration
* Fix for Bluetooth plugin freeze when large numbers of devices detected
* Fix for opening URLs not working in lxterminal
* Fix for start menu opening on incorrect monitor when launched from keyboard
* Fix for taskbar item not having [] removed when un-minimising on second monitor
* Fix for Chromium video playback and WebGL performance on Pi 4
* Remove 4kp60 option from Raspberry Pi Configuration
* Rename hdmi_enable_4k to hdmi_enable_4kp60 in /boot/config.txt and raspi-config
* Linux kernel 4.19.57
* Raspberry Pi firmware 356f5c2880a3c7e8774025aa6fc934a617553e7b
2019-06-20:
* Based on Debian Buster
* Support for Raspberry Pi 4 hardware
* FKMS OpenGL desktop graphics driver and xcompmgr compositing window manager used when running on Raspberry Pi 4
* Screen Configuration application added for use with FKMS driver
* Raspberry Pi 4 video output options added to Raspberry Pi Configuration
* Uses new PiXflat UI theme for GTK and Openbox
* CPU activity gauge plugin no longer shown on taskbar by default
* CPU temperature gauge plugin added (not shown by default)
* USB ejecter and Bluetooth taskbar icons hidden when not appropriate
* Version 74.0.3729.157 of Chromium web browser included
* Version 32.0.0.207 of Flash player included
* IDLE Python IDE removed
* Wolfram Mathematica removed temporarily due to incompatibility with Buster
* Display of package sizes removed from Recommended Software
* Appearance Settings modified to support independent settings for two monitors
* Oracle Java 7 and 8 replaced with OpenJDK 11
* Miscellaneous small bug fixes
* On-board 5GHz WiFi blocked by rfkill by default
The block is removed when taking one of the following actions:
- Selecting a locale in the first run wizard
- Setting the WiFi country in the Raspberry Pi Configuration tool or the Network Settings applet
- Setting the WiFi country in raspi-config
- Providing a wpa_supplicant.conf file through the boot partition
- Running 'rfkill unblock wifi'
* Boot partition size set to 256M
* Linux kernel 4.19.50
* Raspberry Pi firmware 88ca9081f5e51cdedd16d5dbc85ed12a25123201
2019-04-08:
* Chromium browser updated to version 72
* VLC media player updated to version 3.0.6
* RealVNC Server updated to version 6.4.0
* Flash player updated to version 32.0.0.156
* Performance improvements to SDL library
* Performance improvements to pixman library
* Option to set display underscan added to startup wizard
* Mounted external drives now displayed on desktop by default
* Network plugin modified for improved compatibility with wpa_passphrase
* SD Card Copier tweaks to reduce copy failures
* Various minor bug fixes and appearance tweaks
* Added ethtool
* Added rng-tools
* Add PINN restore support
* Linux kernel 4.14.98
* Raspberry Pi firmware f8939644f7bd3065068787f1f92b3f3c79cf3de9
2018-11-13:
* Two versions of image created - "base" image has no optional software packages included; "full" image has all optional packages
- Removed from "base" image - LibreOffice, Thonny, Scratch, Scratch 2, Sonic Pi, Minecraft, Python Games, SmartSim, SenseHAT Emulator
- Added to "full" image - Mathematica, BlueJ, Greenfoot, Node-RED, Claws Mail, VNC Viewer
* Python Games and SmartSim added to Recommended Software
* VLC media player with VideoCore hardware acceleration included in image
* Version 3.0.5 of Thonny included
* Modifications to LXDE components to enable local configuration to override global configuration correctly
* Modifications to Appearance Settings to support above configuration changes
* Modifications to various initial config defaults and relevant package to support above configuration changes
* Selecting default option in Appearance Settings now deletes relevant local configuration files
* PiX theme modified so that all changes made in Appearance Settings are in override files rather than in theme files
* Design of scrollbar buttons changed
* Image Viewer moved into Graphics category on main menu
* Recommended Software now installs LibreOffice language support files if needed, and suggests reboot if needed
* Latest version of Pepper Flash plugin included
* Chromium h264ify plugin permissions set correctly by default
* Corrections to various MIME types so that files open in sensible default applications
* Set default timezone to 'Europe/London'
* Linux kernel 4.14.79
* Raspberry Pi firmware 12e0bf86e08d6067372bc0a45d7e8a10d3113210
2018-10-09:
* Raspberry Pi 3A+ support
* In startup wizard, assign keyboard to country as per Debian installer recommendations
* In startup wizard, add option to use US keyboard in preference to country-specific option
* In startup wizard, show IP address on first page
* In startup wizard, check for existing wifi network connection and show it if there is one
* In startup wizard, install language support packages for LibreOffice and other applications
* In startup wizard, improve operation with keyboard only and no mouse
* Password change in Raspberry Pi Configuration and startup wizard now works properly if passwords contain shell characters
* Battery indicator plugin modified to cope with Pi-top hardware monitor crashing
* Networking plugin hides wifi password characters by default
* In Scratch 2 GPIO plugin, set pin from dropdown list rather than free text
* In Scratch 2 SenseHAT plugin, swap x and y axis values for LED array
* Include latest Adobe Flash player (31.0.0.108)
* Include latest RealVNC Server (6.3.1)
* Include libav-tools
* Include ssh-import-id
* Removed Mathematica
* Merge in latest third-party code for Bluetooth ALSA interface
* Add ability to prevent software update changing configuration files, by creating ~/.config/.lock file
* Various other small bug fixes, tweaks and changes to text
* Make dhcpcd work with 3G devices
* Add hw acceleration to ffmpeg
* Improved WiFi-BT coexistence parameters
* Run fake-hwclock before systemd-fsck-root
* Raspberry Pi PoE HAT support
* Linux kernel 4.14.71
* Raspberry Pi firmware 5b49caa17e91d0e64024380119ad739bb201c674
2018-06-27:
* New first-boot configuration wizard added
* Recommended Software installer added
* Bluej, Greenfoot, NodeRED, Claws Mail, VNC Viewer removed from image - can now be installed from Recommended Applications
* Qpdfview PDF viewer installed instead of Xpdf
* Version 65.0 of Chromium browser included, with latest Flash player
* Volume up / down keys now change by 5% increments and affect currently-selected output device rather than internal device only
* Network plugin now remembers previously-entered WiFi network passwords when prompting for reconnection
* Serial port and serial console can now be switched separately in Raspberry Pi Configuration
* Lxkeymap keyboard language setting application removed - replaced with dialog within Raspberry Pi Configuration
* Wifi country and keyboard language setting dialogs in Raspberry Pi Configuration now callable from other applications
* New version of Piboto font included to render with correct weight under some rogue applications
* Reconnection to Bluetooth audio devices on reboot improved
* Disable click-to-rename behaviour in file manager if single-click selection enabled
* Appearance Settings dialog makes config changes to some Qt files to match selected theme
* MIME file type associations improved
* Multiple desktop management options removed from mouse middle-click menu
* Menu shortcuts to Raspberry Pi website amended
* Python 2 IDLE menu link removed
* Sample Magpi PDF installed in /home/pi/MagPi
* Various minor tweaks, bug fixes and appearance changes
* Bluetooth updates
- Firmware with Bluetooth 4.2 features
- SCO profile suppot added via bthelper.service
* Linux kernel 4.14.50+
* Raspberry Pi firmware 748fb17992426bb29d99224b93cb962fefbdc833
2018-04-18:
* Fixed race between wifi-country.service and raspberrypi-net-mods.service
* Linux kernel 4.14.34+
* Raspberry Pi firmware 5db8e4e1c63178e200d6fbea23ed4a9bf4656658
2018-03-13:
* Raspberry Pi 3 B+ support
* WiFi is disabled until wireless regulatory domain is set (Pi 3 B+ only)
- The domain can be done through 'Raspberry Pi Configuration' (rc_gui),
'raspi-config' or by setting 'country=' to an appropriate ISO 3166
alpha2 country code in /etc/wpa_supplicant/wpa_supplicant.conf.
* Default wireless regulatory domain is now unset
* Added support to desktop for different screen sizes and resolutions,
including multiple preset options in Appearance Settings and pixel doubling
option in Raspberry Pi Configuration
* Version 2.1.16 of Thonny included
* Version 29.0.0.113 of Adobe PepperFlash player included
* Version 1.2.post1 of Pygame Zero included
* Bluetooth plugin now supports connection to Bluetooth LE HID devices
* Network plugin now indicates 5G-compatible APs
* Latest changes to Bluez ALSA service merged
- service now started on CLI boot as well as GUI boot
* Latest changes to dhcpcd networking plugin merged
* Improved support for running on pi-top devices
* Small design changes to PiX theme and icons
* Bug fix - hide spurious window resize handles
* Bug fix - Scratch 2 remote GPIO state block now works correctly
* Updated WiFi Firmware
- brcmfmac43455-sdio 7.45.154
- brcmfmac43430-sdio 7.45.98.38
* New packages:
- policykit-1
- obconf
- python-buttonshim python3-buttonshim
- python-unicornhathd python3-unicornhathd
- python-pantilthat python3-pantilthat
* Linux kernel 4.9.80+
* Raspberry Pi firmware 3347884c7df574bbabeff6dca63caf686e629699
2017-11-29:
* Added battery monitor plugin for taskbar - works on x86 images or first-generation Pi-Top
* Added cutdown mode to PCManFM file manager to reduce complexity
* Added ability to rename files in PCManFM by clicking name when selected
* Bug fix in Bluetooth ALSA module to reduce truncation of audio at end of playback
* Various small tweaks, bug fixes and theme modifications
* New kernel and firmware
2017-09-07:
* Disable predictable network interface names for Ethernet devices
* Bug fix for keyboard settings dialog in Raspberry Pi Configuration
* Bug fix for crash on some videos and animations in Chromium
* Bug fix for taskbar crash when running RealVNC server
* Bug fix for reloading projects with extensions in Scratch 2
* Bug fix for MAC address problem in Bluetooth
* Simple mode and new icons in Thonny
* New Japanese translations in Raspberry Pi Configuration
* Install fonts-droid-fallback for international fonts
2017-08-16:
* Based on Raspbian Stretch (Debian version 9)
* Version 60 of Chromium browser included
* Version 3.0.1 of Sonic Pi included
* Version 6.1.1 of RealVNC included
* Version 0.17.4 of NodeRED included
* Bluetooth audio routed via ALSA rather than Pulseaudio
* SenseHAT extension added to Scratch 2
* Various desktop applications modified to prompt for sudo password if needed
* lxinput control options for mouse speed simplified
* lxpanel plugins moved into separate packages
* Wireless firmware for Pi 3 and Pi 0W modified to address Broadpwn exploit
* Latest kernel and firmware
* Various small tweaks, bug fixes and theme modifications
2017-07-05:
* New kernel and firmware
* Filesystem created without the metadata_csum feature
2017-06-21:
* Scratch 2 application included
* Thonny Python IDE included
* New icons with thinner outlines
* Volume control more linear in behaviour
* Updated Flash player
* Updated RealVNC server and viewer
* Various tweaks and bugfixes
* New kernel and firmware
2017-04-10:
* Wolfram Mathematica updated to version 11.0.1
* Adobe Flash Player updated to version 25.0.0.127
* Use PARTUUID to support USB boot
2017-03-02:
* Updated kernel and firmware (final Pi Zero W support)
* Wolfram Mathematica updated to version 11
* NOOBS installs now checks for presence of 'ssh' file on the NOOBS partition.
2017-02-16:
* Chromium browser updated to version 56
* Adobe Flash Player updated to version 24.0.0.221
* RealVNC Server and Viewer updated to version 6.0.2 (RealVNC Connect)
* Sonic Pi updated to version 2.11
* Node-RED updated to version 0.15.3
* Scratch updated to version 120117
* Detection of SSH enabled with default password moved into PAM
* Updated desktop GL driver to support use of fake KMS option
* Raspberry Pi Configuration and raspi-config allow setting of fixed HDMI resolution
* raspi-config allows enabling of serial hardware independent of serial terminal
* Updates to kernel and firmware
* Various minor bug fixes and usability and appearance tweaks
2017-01-11:
* Re-release of the 2016-11-25 image with a FAT32-formatted boot partition
2016-11-25:
* SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
* Prompt for password change at boot when SSH enabled with default password unchanged
* Adobe Flash Player included
* Updates to hardware video acceleration in Chromium browser
* Greeter now uses background image from last set in Appearance Settings rather than pi user
* Updated version of Scratch
* Rastrack option removed from raspi-config and Raspberry Pi Configuration
* Ability to disable graphical boot splash screen added to raspi-config and Raspberry Pi Configuration
* Appearance Settings dialog made tabbed to work better on small screens
* Raspberry Pi Configuration now requires current password to change password
* Various small bug fixes
* Updated firmware and kernel
2016-09-23:
* New PIXEL desktop environment - new icon set, window design, desktop images, splash screen and greeter
* Chromium web browser included
* Infinality font rendering patches included
* RealVNC server and viewer included
* SenseHAT emulator included
* Rfkill entries added to Wifi and Bluetooth panel plugins
* Updates to various standard applications, including Scratch and NodeRED
* Various bug fixes, tweaks and translation updates
* Updated firmware and kernel (https://github.com/raspberrypi/firmware/commit/ad8608c08b122b2c228dba0ff5070d6e9519faf5)
2016-05-27:
* Fixed crash of lxpanel when D-bus not accessible
* Fixed permissions for D-bus Bluetooth access
* Removed sudo from shutdown options
* Appearance of tooltips updated in theme
* Fixed ejecter plugin grabbing focus
* raspi-config command line and GUI apps tidied; unnecessary reboots removed
* More error detection in piclone; copying of volume names and IDs added
* Updated translation files
2016-05-10:
* New version of Scratch, which no longer requires sudo
* New version of BlueJ
* New version of NodeRED
* New version of pypy
* pigpio included
* geany editor included
* SD Card Copier added (can be used to duplicate or back up the Pi)
* Bluetooth plugin added to taskbar
* Volume control on taskbar now compatible with Bluetooth devices
* New shutdown helper application
* Mouse double-click speed setting added to mouse and keyboard preference application
* Option to enable / disable 1-wire interface and remote access to pigpio added to Raspberry Pi config application
* File system automatically expanded on first boot
* Empty Wastebasket option added to right-click menu
* Ctrl-Alt-T can be used to open a terminal window
* Various small bug fixes and appearance tweaks
* Updated firmware and kernel (https://github.com/raspberrypi/firmware/commit/cc6d7bf8b4c03a2a660ff9fdf4083fc165620866)
2016-03-18:
* updated firmware and kernel (https://github.com/raspberrypi/firmware/commit/951799bbcd795ddf27769d14acf4813fdcbe53dc)
* use serial0 in cmdline.txt
* wpa_supplicant.conf country default to GB (allows use of channels 12 and 13)
2016-02-26:
* Support added for Pi 3, including Wifi and Bluetooth
* Option to set wifi country code added to raspi-config
2016-02-09:
* dtb that uses mmc sdcard driver (fixes problems experienced with certain SD cards)
2016-02-03:
* new version of Sonic Pi (2.9)
* new version of Scratch (15/1/16)
* new version of Node-Red (2.5)
* new version of Wolfram (10.3)
* optional experimental GL desktop driver (can be enabled using advanced options in command-line raspi-config)
* new version of Java (1.8.0_65)
* new version of WiringPi
* raspi-gpio included
* ping no longer requires sudo (except NOOBS installs)
* support for more USB audio devices in lxpanel
* bug fix for creation of new menus in Alacarte
* various changes to raspi-config and GUI to tidy up board support and fix bugs, and updated translations
* small tweaks to theme to support GL driver
2015-11-21:
* Included IBM Node-RED IoT application
* Included graphical package manager
* Included accelerated pixman library
* Updated Epiphany browser to improve video compatibility
* Updated Scratch with performance improvements and bug fixes
* Updated Raspberry Pi configuration to allow boot to pause while
network is established
* Various minor bug fixes
2015-09-25:
* Based on Debian Jessie
* Upgraded applications - Epiphany browser, Scratch and Sonic Pi
* Included applications - LibreOffice, Claws Mail, Greenfoot, BlueJ
* Included utilities - Alacarte menu editor, Lxkeymap, scrot, tree, pip
* New GUI-based Raspberry Pi Configuration application
* GPIO control now possible without need for sudo
* Web link to Magpi magazine included
* New taskbar plugin to eject mounted USB drives
* Default boot is now to GUI not desktop
* Look and feel now based on GTK+3 default theme
* Print screen key launches scrot to produce screenshot
* Common keyboards autodetected by GUI and drivers loaded accordingly
* Numerous small tweaks and bugfixes
2015-05-05:
* Updated UI changes
* Updated firmware
* Install raspberrypi-net-mods
* Install avahi-daemon
* Add user pi to new i2c and spi groups
* Modified udev rules for i2c and spi devices
2015-02-16:
* Newer firmware with various fixes
* New Sonic Pi release
* Pi2 compatible RPi.GPIO
* Updated Wolfram Mathematica
2015-01-31:
* Support for Pi2
* Newer firmware
* New Sonic Pi release
* Updated Scratch
* New Wolfram Mathematica release
* Updated Epiphany
2014-12-24:
* Fix regression with omission of python-pygame
2014-12-22:
* New firmware with variosu fixes and improvements
* New UI configuration for lxde
* Various package updates
* python3-pygame preinstalled
* 'nuscratch', scratch running on the Cog StackVM
* Misc other changes
2014-09-09:
* New firmware with various fixes and improvements
* Minecraft Pi pre-installed
* Sonic Pi upgraded to 2.0
* Include Epiphany browser work from Collabora
* Switch to Java 8 from Java 7
* Updated Mathematica
* Misc minor configuration changes
2014-06-20:
* New firmware with various fixes, and kernel bugfix
2014-06-02:
* Many, many firmware updates with major USB improvements
* pyserial installed by default
* picamera installed by default
2014-01-07:
* Firmware updated
* Some space saved on the root filesystem
2013-12-20:
* Firmware updated, includes V4L2 fixes
* Update omxplayer
2013-12-18:
* Firmware updated and now using kernel 3.10. Many, many improvements
* fbturbo XOrg driver is now included and enabled by default. Thanks to
ssvb https://github.com/ssvb/xf86-video-fbturbo
* Update Scratch image with further bug fixes
* Include Wolfram Mathematica
* Update to PyPy 2.2
* Update omxplayer
* Include v4l-utils for use with experimental V4L2 Raspberry Pi camera driver
* Update squeak-vm to fix issues with loading JPEGs
2013-09-25:
* Update Scratch image for further performance improvements
* Include Oracle JDK
* At least a 4GiB SD card is now required (see above)
* Include PyPy 2.1
* Include base piface packages
* Update raspi-config to include bugfix for inheriting language settings
from NOOBS
2013-09-10:
* Updated to current top of tree firmware
* Update squeak-vm, including fastblit optimised for the Raspbery Pi
* Include Sonic Pi and a fixed jackd2 package
* Support boot to Scratch
* Inherit keyboard and language settings from NOOBS

36
export-noobs/prerun.sh

@ -0,0 +1,36 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
unmount_image "${IMG_FILE}"
mkdir -p "${STAGE_WORK_DIR}"
cp "${WORK_DIR}/export-image/${IMG_FILENAME}${IMG_SUFFIX}.img" "${STAGE_WORK_DIR}/"
rm -rf "${NOOBS_DIR}"
PARTED_OUT=$(parted -sm "${IMG_FILE}" unit b print)
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 2 | tr -d B)
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 4 | tr -d B)
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 2 | tr -d B)
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 4 | tr -d B)
BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}")
ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}")
echo "/boot: offset $BOOT_OFFSET, length $BOOT_LENGTH"
echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH"
mkdir -p "${STAGE_WORK_DIR}/rootfs"
mkdir -p "${NOOBS_DIR}"
mount "$ROOT_DEV" "${STAGE_WORK_DIR}/rootfs"
mount "$BOOT_DEV" "${STAGE_WORK_DIR}/rootfs/boot"
ln -sv "/lib/systemd/system/apply_noobs_os_config.service" "$ROOTFS_DIR/etc/systemd/system/multi-user.target.wants/apply_noobs_os_config.service"
bsdtar --numeric-owner --format gnutar -C "${STAGE_WORK_DIR}/rootfs/boot" -cpf - . | xz -T0 > "${NOOBS_DIR}/boot.tar.xz"
umount "${STAGE_WORK_DIR}/rootfs/boot"
bsdtar --numeric-owner --format gnutar -C "${STAGE_WORK_DIR}/rootfs" --one-file-system -cpf - . | xz -T0 > "${NOOBS_DIR}/root.tar.xz"
unmount_image "${IMG_FILE}"

100
scripts/common

@ -0,0 +1,100 @@
log (){
date +"[%T] $*" | tee -a "${LOG_FILE}"
}
export -f log
bootstrap(){
local BOOTSTRAP_CMD=debootstrap
local BOOTSTRAP_ARGS=()
export http_proxy=${APT_PROXY}
if [ "$(dpkg --print-architecture)" != "armhf" ] && [ "$(dpkg --print-architecture)" != "aarch64" ]; then
BOOTSTRAP_CMD=qemu-debootstrap
fi
BOOTSTRAP_ARGS+=(--arch armhf)
BOOTSTRAP_ARGS+=(--components "main,contrib,non-free")
BOOTSTRAP_ARGS+=(--keyring "${STAGE_DIR}/files/raspberrypi.gpg")
BOOTSTRAP_ARGS+=("$@")
printf -v BOOTSTRAP_STR '%q ' "${BOOTSTRAP_ARGS[@]}"
setarch linux32 capsh --drop=cap_setfcap -- -c "'${BOOTSTRAP_CMD}' $BOOTSTRAP_STR" || true
if [ -d "$2/debootstrap" ]; then
rmdir "$2/debootstrap"
fi
}
export -f bootstrap
copy_previous(){
if [ ! -d "${PREV_ROOTFS_DIR}" ]; then
echo "Previous stage rootfs not found"
false
fi
mkdir -p "${ROOTFS_DIR}"
rsync -aHAXx --exclude var/cache/apt/archives "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
}
export -f copy_previous
unmount(){
if [ -z "$1" ]; then
DIR=$PWD
else
DIR=$1
fi
while mount | grep -q "$DIR"; do
local LOCS
LOCS=$(mount | grep "$DIR" | cut -f 3 -d ' ' | sort -r)
for loc in $LOCS; do
umount "$loc"
done
done
}
export -f unmount
unmount_image(){
sync
sleep 1
local LOOP_DEVICES
LOOP_DEVICES=$(losetup --list | grep "$(basename "${1}")" | cut -f1 -d' ')
for LOOP_DEV in ${LOOP_DEVICES}; do
if [ -n "${LOOP_DEV}" ]; then
local MOUNTED_DIR
MOUNTED_DIR=$(mount | grep "$(basename "${LOOP_DEV}")" | head -n 1 | cut -f 3 -d ' ')
if [ -n "${MOUNTED_DIR}" ] && [ "${MOUNTED_DIR}" != "/" ]; then
unmount "$(dirname "${MOUNTED_DIR}")"
fi
sleep 1
losetup -d "${LOOP_DEV}"
fi
done
}
export -f unmount_image
on_chroot() {
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/proc)"; then
mount -t proc proc "${ROOTFS_DIR}/proc"
fi
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev)"; then
mount --bind /dev "${ROOTFS_DIR}/dev"
fi
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev/pts)"; then
mount --bind /dev/pts "${ROOTFS_DIR}/dev/pts"
fi
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/sys)"; then
mount --bind /sys "${ROOTFS_DIR}/sys"
fi
setarch linux32 capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- -e "$@"
}
export -f on_chroot
update_issue() {
echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue"
}
export -f update_issue

38
scripts/dependencies_check

@ -0,0 +1,38 @@
# dependencies_check
# $@ Dependency files to check
#
# Each dependency is in the form of a tool to test for, optionally followed by
# a : and the name of a package if the package on a Debian-ish system is not
# named for the tool (i.e., qemu-user-static).
dependencies_check()
{
local depfile deps missing
for depfile in "$@"; do
if [[ -e "$depfile" ]]; then
deps="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < "${BASE_DIR}/depends")"
fi
for dep in $deps; do
if ! hash "${dep%:*}" 2>/dev/null; then
missing="${missing:+$missing }${dep#*:}"
fi
done
done
if [[ "$missing" ]]; then
echo "Required dependencies not installed"
echo
echo "This can be resolved on Debian/Raspbian systems by installing:"
echo "$missing"
false
fi
if ! grep -q "/proc/sys/fs/binfmt_misc" /proc/mounts; then
echo "Module binfmt_misc not loaded in host"
echo "Please run:"
echo " sudo modprobe binfmt_misc"
exit 1
fi
}

11
scripts/remove-comments.sed

@ -0,0 +1,11 @@
# Deletes comments and collapses whitespace in ##-packages files
# Append (N)ext line to buffer
# if (!)not ($)buffer is EOF, (b)ranch to (:)label loop
:loop
N
$ !b loop
# Buffer is "line1\nline2\n...lineN", del comments and collapse whitespace
s/#[^\n]*//g
s/[[:space:]]\{1,\}/ /g

17
stage0/00-configure-apt/00-run.sh

@ -0,0 +1,17 @@
#!/bin/bash -e
install -m 644 files/sources.list "${ROOTFS_DIR}/etc/apt/"
install -m 644 files/raspi.list "${ROOTFS_DIR}/etc/apt/sources.list.d/"
if [ -n "$APT_PROXY" ]; then
install -m 644 files/51cache "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
sed "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" -i -e "s|APT_PROXY|${APT_PROXY}|"
else
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
fi
on_chroot apt-key add - < files/raspberrypi.gpg.key
on_chroot << EOF
apt-get update
apt-get dist-upgrade -y
EOF

1
stage0/00-configure-apt/files/51cache

@ -0,0 +1 @@
Acquire::http { Proxy "APT_PROXY"; };

30
stage0/00-configure-apt/files/raspberrypi.gpg.key

@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)
mQENBE/d7o8BCACrwqQacGJfn3tnMzGui6mv2lLxYbsOuy/+U4rqMmGEuo3h9m92
30E2EtypsoWczkBretzLUCFv+VUOxaA6sV9+puTqYGhhQZFuKUWcG7orf7QbZRuu
TxsEUepW5lg7MExmAu1JJzqM0kMQX8fVyWVDkjchZ/is4q3BPOUCJbUJOsE+kK/6
8kW6nWdhwSAjfDh06bA5wvoXNjYoDdnSZyVdcYCPEJXEg5jfF/+nmiFKMZBraHwn
eQsepr7rBXxNcEvDlSOPal11fg90KXpy7Umre1UcAZYJdQeWcHu7X5uoJx/MG5J8
ic6CwYmDaShIFa92f8qmFcna05+lppk76fsnABEBAAG0IFJhc3BiZXJyeSBQaSBB
cmNoaXZlIFNpZ25pbmcgS2V5iQE4BBMBAgAiBQJP3e6PAhsDBgsJCAcDAgYVCAIJ
CgsEFgIDAQIeAQIXgAAKCRCCsSmSf6MwPk6vB/9pePB3IukU9WC9Bammh3mpQTvL
OifbkzHkmAYxzjfK6D2I8pT0xMxy949+ThzJ7uL60p6T/32ED9DR3LHIMXZvKtuc
mQnSiNDX03E2p7lIP/htoxW2hDP2n8cdlNdt0M9IjaWBppsbO7IrDppG2B1aRLni
uD7v8bHRL2mKTtIDLX42Enl8aLAkJYgNWpZyPkDyOqamjijarIWjGEPCkaURF7g4
d44HvYhpbLMOrz1m6N5Bzoa5+nq3lmifeiWKxioFXU+Hy5bhtAM6ljVb59hbD2ra
X4+3LXC9oox2flmQnyqwoyfZqVgSQa0B41qEQo8t1bz6Q1Ti7fbMLThmbRHiuQEN
BE/d7o8BCADNlVtBZU63fm79SjHh5AEKFs0C3kwa0mOhp9oas/haDggmhiXdzeD3
49JWz9ZTx+vlTq0s+I+nIR1a+q+GL+hxYt4HhxoA6vlDMegVfvZKzqTX9Nr2VqQa
S4Kz3W5ULv81tw3WowK6i0L7pqDmvDqgm73mMbbxfHD0SyTt8+fk7qX6Ag2pZ4a9
ZdJGxvASkh0McGpbYJhk1WYD+eh4fqH3IaeJi6xtNoRdc5YXuzILnp+KaJyPE5CR
qUY5JibOD3qR7zDjP0ueP93jLqmoKltCdN5+yYEExtSwz5lXniiYOJp8LWFCgv5h
m8aYXkcJS1xVV9Ltno23YvX5edw9QY4hABEBAAGJAR8EGAECAAkFAk/d7o8CGwwA
CgkQgrEpkn+jMD5Figf/dIC1qtDMTbu5IsI5uZPX63xydaExQNYf98cq5H2fWF6O
yVR7ERzA2w33hI0yZQrqO6pU9SRnHRxCFvGv6y+mXXXMRcmjZG7GiD6tQWeN/3wb
EbAn5cg6CJ/Lk/BI4iRRfBX07LbYULCohlGkwBOkRo10T+Ld4vCCnBftCh5x2OtZ
TOWRULxP36y2PLGVNF+q9pho98qx+RIxvpofQM/842ZycjPJvzgVQsW4LT91KYAE
4TVf6JjwUM6HZDoiNcX6d7zOhNfQihXTsniZZ6rky287htsWVDNkqOi5T3oTxWUo
m++/7s3K3L0zWopdhMVcgg6Nt9gcjzqN1c0gy55L/g==
=mNSj
-----END PGP PUBLIC KEY BLOCK-----

3
stage0/00-configure-apt/files/raspi.list

@ -0,0 +1,3 @@
deb http://archive.raspberrypi.org/debian/ buster main
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ buster main

3
stage0/00-configure-apt/files/sources.list

@ -0,0 +1,3 @@
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

6
stage0/01-locale/00-debconf

File diff suppressed because one or more lines are too long

1
stage0/01-locale/00-packages

@ -0,0 +1 @@
locales

2
stage0/02-firmware/01-packages

@ -0,0 +1,2 @@
raspberrypi-bootloader
raspberrypi-kernel

BIN
stage0/files/raspberrypi.gpg

Binary file not shown.

5
stage0/prerun.sh

@ -0,0 +1,5 @@
#!/bin/bash -e
if [ ! -d "${ROOTFS_DIR}" ]; then
bootstrap buster "${ROOTFS_DIR}" http://raspbian.raspberrypi.org/raspbian/
fi

4
stage1/00-boot-files/00-run.sh

@ -0,0 +1,4 @@
#!/bin/bash -e
install -m 644 files/cmdline.txt "${ROOTFS_DIR}/boot/"
install -m 644 files/config.txt "${ROOTFS_DIR}/boot/"

1
stage1/00-boot-files/files/cmdline.txt

@ -0,0 +1 @@
console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

65
stage1/00-boot-files/files/config.txt

@ -0,0 +1,65 @@
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18
# Additional overlays and parameters are documented /boot/overlays/README
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
dtoverlay=vc4-fkms-v3d
max_framebuffers=2
[all]
#dtoverlay=vc4-fkms-v3d

33
stage1/01-sys-tweaks/00-patches/01-bashrc.diff

@ -0,0 +1,33 @@
--- a/rootfs/etc/skel/.bashrc
+++ b/rootfs/etc/skel/.bashrc
@@ -43,7 +43,7 @@
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
-#force_color_prompt=yes
+force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
@@ -57,7 +57,7 @@
fi
if [ "$color_prompt" = yes ]; then
- PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+ PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
@@ -79,9 +79,9 @@
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
- #alias grep='grep --color=auto'
- #alias fgrep='fgrep --color=auto'
- #alias egrep='egrep --color=auto'
+ alias grep='grep --color=auto'
+ alias fgrep='fgrep --color=auto'
+ alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors

1
stage1/01-sys-tweaks/00-patches/series

@ -0,0 +1 @@
01-bashrc.diff

15
stage1/01-sys-tweaks/00-run.sh

@ -0,0 +1,15 @@
#!/bin/bash -e
install -d "${ROOTFS_DIR}/etc/systemd/system/getty@tty1.service.d"
install -m 644 files/noclear.conf "${ROOTFS_DIR}/etc/systemd/system/getty@tty1.service.d/noclear.conf"
install -v -m 644 files/fstab "${ROOTFS_DIR}/etc/fstab"
on_chroot << EOF
if ! id -u ${FIRST_USER_NAME} >/dev/null 2>&1; then
adduser --disabled-password --gecos "" ${FIRST_USER_NAME}
fi
echo "${FIRST_USER_NAME}:${FIRST_USER_PASS}" | chpasswd
echo "root:root" | chpasswd
EOF

3
stage1/01-sys-tweaks/files/fstab

@ -0,0 +1,3 @@
proc /proc proc defaults 0 0
BOOTDEV /boot vfat defaults 0 2
ROOTDEV / ext4 defaults,noatime 0 1

2
stage1/01-sys-tweaks/files/noclear.conf

@ -0,0 +1,2 @@
[Service]
TTYVTDisallocate=no

1
stage1/02-net-tweaks/00-packages

@ -0,0 +1 @@
netbase

6
stage1/02-net-tweaks/00-run.sh

@ -0,0 +1,6 @@
#!/bin/bash -e
echo "${TARGET_HOSTNAME}" > "${ROOTFS_DIR}/etc/hostname"
echo "127.0.1.1 ${TARGET_HOSTNAME}" >> "${ROOTFS_DIR}/etc/hosts"
ln -sf /dev/null "${ROOTFS_DIR}/etc/systemd/network/99-default.link"

1
stage1/03-install-packages/00-packages

@ -0,0 +1 @@
libraspberrypi-bin libraspberrypi0 raspi-config

5
stage1/prerun.sh

@ -0,0 +1,5 @@
#!/bin/bash -e
if [ ! -d "${ROOTFS_DIR}" ]; then
copy_previous
fi

1
stage2/00-copies-and-fills/01-packages

@ -0,0 +1 @@
raspi-copies-and-fills

6
stage2/00-copies-and-fills/02-run.sh

@ -0,0 +1,6 @@
#!/bin/bash -e
if [ -f "${ROOTFS_DIR}/etc/ld.so.preload" ]; then
mv "${ROOTFS_DIR}/etc/ld.so.preload" "${ROOTFS_DIR}/etc/ld.so.preload.disabled"
fi

26
stage2/01-sys-tweaks/00-debconf

File diff suppressed because one or more lines are too long

31
stage2/01-sys-tweaks/00-packages

@ -0,0 +1,31 @@
ssh less fbset sudo psmisc strace ed ncdu crda
console-setup keyboard-configuration debconf-utils parted unzip
build-essential manpages-dev python bash-completion gdb pkg-config
python-rpi.gpio v4l-utils
avahi-daemon
lua5.1
luajit
hardlink ca-certificates curl
fake-hwclock nfs-common usbutils
libraspberrypi-dev libraspberrypi-doc libfreetype6-dev
dosfstools
dphys-swapfile
raspberrypi-sys-mods
pi-bluetooth
apt-listchanges
usb-modeswitch
libpam-chksshpwd
rpi-update
libmtp-runtime
rsync
htop
man-db
policykit-1
ssh-import-id
rng-tools
ethtool
vl805fw
ntfs-3g
pciutils
rpi-eeprom
vim

1
stage2/01-sys-tweaks/00-packages-nr

@ -0,0 +1 @@
cifs-utils

22
stage2/01-sys-tweaks/00-patches/01-useradd.diff

@ -0,0 +1,22 @@
Index: jessie-stage2/rootfs/etc/default/useradd
===================================================================
--- jessie-stage2.orig/rootfs/etc/default/useradd
+++ jessie-stage2/rootfs/etc/default/useradd
@@ -5,7 +5,7 @@
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
-SHELL=/bin/sh
+SHELL=/bin/bash
#
# The default group for users
# 100=users on Debian systems
@@ -29,7 +29,7 @@ SHELL=/bin/sh
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
-# SKEL=/etc/skel
+SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account

13
stage2/01-sys-tweaks/00-patches/02-swap.diff

@ -0,0 +1,13 @@
Index: jessie-stage2/rootfs/etc/dphys-swapfile
===================================================================
--- jessie-stage2.orig/rootfs/etc/dphys-swapfile
+++ jessie-stage2/rootfs/etc/dphys-swapfile
@@ -13,7 +13,7 @@
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
-#CONF_SWAPSIZE=
+CONF_SWAPSIZE=100
# set size to computed value, this times RAM size, dynamically adapts,
# guarantees that there is enough swap without wasting disk space on excess

12
stage2/01-sys-tweaks/00-patches/04-inputrc.diff

@ -0,0 +1,12 @@
Index: jessie-stage2/rootfs/etc/inputrc
===================================================================
--- jessie-stage2.orig/rootfs/etc/inputrc
+++ jessie-stage2/rootfs/etc/inputrc
@@ -65,3 +65,7 @@ $endif
# "\e[F": end-of-line
$endif
+
+# mappings for up and down arrows search history
+# "\e[B": history-search-forward
+# "\e[A": history-search-backward

26
stage2/01-sys-tweaks/00-patches/05-path.diff

@ -0,0 +1,26 @@
Index: jessie-stage2/rootfs/etc/login.defs
===================================================================
--- jessie-stage2.orig/rootfs/etc/login.defs
+++ jessie-stage2/rootfs/etc/login.defs
@@ -100,7 +100,7 @@ HUSHLOGIN_FILE .hushlogin
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
+ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
#
# Terminal permissions
Index: jessie-stage2/rootfs/etc/profile
===================================================================
--- jessie-stage2.orig/rootfs/etc/profile
+++ jessie-stage2/rootfs/etc/profile
@@ -4,7 +4,7 @@
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
- PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
+ PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
fi
export PATH

5
stage2/01-sys-tweaks/00-patches/07-resize-init.diff

@ -0,0 +1,5 @@
--- stage2.orig/rootfs/boot/cmdline.txt
+++ stage2/rootfs/boot/cmdline.txt
@@ -1 +1 @@
-console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
+console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

5
stage2/01-sys-tweaks/00-patches/series

@ -0,0 +1,5 @@
01-useradd.diff
02-swap.diff
04-inputrc.diff
05-path.diff
07-resize-init.diff

58
stage2/01-sys-tweaks/01-run.sh

@ -0,0 +1,58 @@
#!/bin/bash -e
apt-get update
install -m 755 files/resize2fs_once "${ROOTFS_DIR}/etc/init.d/"
install -d "${ROOTFS_DIR}/etc/systemd/system/rc-local.service.d"
install -m 644 files/ttyoutput.conf "${ROOTFS_DIR}/etc/systemd/system/rc-local.service.d/"
install -m 644 files/50raspi "${ROOTFS_DIR}/etc/apt/apt.conf.d/"
install -m 644 files/console-setup "${ROOTFS_DIR}/etc/default/"
install -m 755 files/rc.local "${ROOTFS_DIR}/etc/"
on_chroot << EOF
systemctl disable hwclock.sh
systemctl disable nfs-common
systemctl disable rpcbind
if [ "${ENABLE_SSH}" == "1" ]; then
systemctl enable ssh
else
systemctl disable ssh
fi
systemctl enable regenerate_ssh_host_keys
EOF
if [ "${USE_QEMU}" = "1" ]; then
echo "enter QEMU mode"
install -m 644 files/90-qemu.rules "${ROOTFS_DIR}/etc/udev/rules.d/"
on_chroot << EOF
systemctl disable resize2fs_once
EOF
echo "leaving QEMU mode"
else
on_chroot << EOF
systemctl enable resize2fs_once
EOF
fi
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; do
adduser $FIRST_USER_NAME \$GRP
done
EOF
on_chroot << EOF
setupcon --force --save-only -v
EOF
on_chroot << EOF
usermod --pass='*' root
EOF
rm -f "${ROOTFS_DIR}/etc/ssh/"ssh_host_*_key*

5
stage2/01-sys-tweaks/files/50raspi

@ -0,0 +1,5 @@
# never use pdiffs. Current implementation is very slow on low-powered devices
Acquire::PDiffs "0";
# download up to 5 pdiffs:
#Acquire::PDiffs::FileLimit "5";

3
stage2/01-sys-tweaks/files/90-qemu.rules

@ -0,0 +1,3 @@
KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"

16
stage2/01-sys-tweaks/files/console-setup

@ -0,0 +1,16 @@
# CONFIGURATION FILE FOR SETUPCON
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="guess"
FONTFACE=""
FONTSIZE=""
VIDEOMODE=
# The following is an example how to use a braille font
# FONT='lat9w-08.psf.gz brl-8x8.psf'

20
stage2/01-sys-tweaks/files/rc.local

@ -0,0 +1,20 @@
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
exit 0

25
stage2/01-sys-tweaks/files/resize2fs_once

@ -0,0 +1,25 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: resize2fs_once
# Required-Start:
# Required-Stop:
# Default-Start: 3
# Default-Stop:
# Short-Description: Resize the root filesystem to fill partition
# Description:
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting resize2fs_once"
ROOT_DEV=$(findmnt / -o source -n) &&
resize2fs $ROOT_DEV &&
update-rc.d resize2fs_once remove &&
rm /etc/init.d/resize2fs_once &&
log_end_msg $?
;;
*)
echo "Usage: $0 start" >&2
exit 3
;;
esac

2
stage2/01-sys-tweaks/files/ttyoutput.conf

@ -0,0 +1,2 @@
[Service]
StandardOutput=tty

8
stage2/02-net-tweaks/00-packages

@ -0,0 +1,8 @@
wpasupplicant wireless-tools firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek
raspberrypi-net-mods
dhcpcd5
net-tools
tor
libzbar-dev
libzbar0
python3-pip

33
stage2/02-net-tweaks/01-run.sh

@ -0,0 +1,33 @@
#!/bin/bash -e
apt-get update
install -v -d "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d"
install -v -m 644 files/wait.conf "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/"
install -v -d "${ROOTFS_DIR}/etc/wpa_supplicant"
install -v -m 600 files/wpa_supplicant.conf "${ROOTFS_DIR}/etc/wpa_supplicant/"
if [ -v WPA_COUNTRY ]; then
echo "country=${WPA_COUNTRY}" >> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf"
fi
if [ -v WPA_ESSID ] && [ -v WPA_PASSWORD ]; then
on_chroot <<EOF
set -o pipefail
wpa_passphrase "${WPA_ESSID}" "${WPA_PASSWORD}" | tee -a "/etc/wpa_supplicant/wpa_supplicant.conf"
EOF
elif [ -v WPA_ESSID ]; then
cat >> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf" << EOL
network={
ssid="${WPA_ESSID}"
key_mgmt=NONE
}
EOL
fi
# Disable wifi on 5GHz models
mkdir -p "${ROOTFS_DIR}/var/lib/systemd/rfkill/"
echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-3f300000.mmc:wlan"
echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-fe300000.mmc:wlan"

3
stage2/02-net-tweaks/files/wait.conf

@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w

2
stage2/02-net-tweaks/files/wpa_supplicant.conf

@ -0,0 +1,2 @@
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

2
stage2/03-accept-mathematica-eula/00-debconf

@ -0,0 +1,2 @@
# Do you accept the Wolfram - Raspberry Pi® Bundle License Agreement?
wolfram-engine shared/accepted-wolfram-eula boolean true

8
stage2/03-set-timezone/02-run.sh

@ -0,0 +1,8 @@
#!/bin/bash -e
echo "${TIMEZONE_DEFAULT}" > "${ROOTFS_DIR}/etc/timezone"
rm "${ROOTFS_DIR}/etc/localtime"
on_chroot << EOF
dpkg-reconfigure -f noninteractive tzdata
EOF

1
stage2/04-docker-compose/00-packages

@ -0,0 +1 @@
docker.io

10
stage2/04-docker-compose/01-run.sh

@ -0,0 +1,10 @@
# Install docker via pip3 (within chroot)
on_chroot << EOF
pip3 install docker-compose
EOF
# Maybe generate a compose file to use
echo "Docker stuff installed" >> $ROOTFS_DIR/home/$FIRST_USER_NAME/docker-compose.txt

4
stage2/05-prepare-home-dir/01-run.sh

@ -0,0 +1,4 @@
# Test out image
echo "Hello World" >> $ROOTFS_DIR/home/$FIRST_USER_NAME/hello.txt

5
stage2/06-fix-docker-perms/01-run.sh

@ -0,0 +1,5 @@
echo "Adding lncm to DOCKER group"
on_chroot << EOF
usermod -a -G docker $FIRST_USER_NAME
EOF

8
stage2/07-pip-install-deps/01-run.sh

@ -0,0 +1,8 @@
echo "Install Python dependencies"
## Add in any python dependencies within the chroot
on_chroot << EOF
pip3 install noma
EOF

4
stage2/EXPORT_IMAGE

@ -0,0 +1,4 @@
IMG_SUFFIX="-lite"
if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi

7
stage2/prerun.sh

@ -0,0 +1,7 @@
#!/bin/bash -e
apt-get update
if [ ! -d "${ROOTFS_DIR}" ]; then
copy_previous
fi

2
stage3/00-install-packages/00-debconf

@ -0,0 +1,2 @@
# Adobe Flash Player. Copyright 1996-2015. Adobe Systems Incorporated. All Rights Reserved.
rpi-chromium-mods rpi-chromium-mods/adobe note

15
stage3/00-install-packages/00-packages

@ -0,0 +1,15 @@
gstreamer1.0-x gstreamer1.0-omx gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-libav
qpdfview gtk2-engines alsa-utils
desktop-base
git
omxplayer
raspberrypi-artwork
policykit-1
gvfs
rfkill
chromium-browser rpi-chromium-mods
gldriver-test
fonts-droid-fallback
fonts-liberation2
obconf
arandr

6
stage3/00-install-packages/00-packages-nr

@ -0,0 +1,6 @@
xserver-xorg-video-fbdev xserver-xorg xinit xserver-xorg-video-fbturbo
mousepad
lxde lxtask menu-xdg
zenity xdg-utils
gvfs-backends gvfs-fuse
lightdm gnome-themes-standard-data gnome-icon-theme

8
stage3/00-install-packages/01-run.sh

@ -0,0 +1,8 @@
#!/bin/bash -e
on_chroot << EOF
update-alternatives --install /usr/bin/x-www-browser \
x-www-browser /usr/bin/chromium-browser 86
update-alternatives --install /usr/bin/gnome-www-browser \
gnome-www-browser /usr/bin/chromium-browser 86
EOF

3
stage3/01-tweaks/00-run.sh

@ -0,0 +1,3 @@
#!/bin/bash -e
rm -f "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/wait.conf"

0
stage3/SKIP

5
stage3/prerun.sh

@ -0,0 +1,5 @@
#!/bin/bash -e
if [ ! -d "${ROOTFS_DIR}" ]; then
copy_previous
fi

2
stage4/00-install-packages/00-debconf

@ -0,0 +1,2 @@
# Enable realtime process priority?
jackd2 jackd/tweak_rt_limits boolean true

25
stage4/00-install-packages/00-packages

@ -0,0 +1,25 @@
python python3-pygame python-pygame python-tk
python3 python3-tk thonny
python3-pgzero
python-serial python3-serial
python-picamera python3-picamera
debian-reference-en dillo
raspberrypi-net-mods raspberrypi-ui-mods
python-pip python3-pip
python3-numpy
pypy
alacarte rc-gui sense-hat
tree
libgl1-mesa-dri libgles1 libgles2-mesa xcompmgr
geany
piclone
wiringpi pigpio python-pigpio python3-pigpio raspi-gpio python-gpiozero python3-gpiozero python3-rpi.gpio
python-spidev python3-spidev
python-twython python3-twython
python-smbus python3-smbus
python-flask python3-flask
pprompt
piwiz
rp-prefapps
ffmpeg
vlc

2
stage4/00-install-packages/00-packages-nr

@ -0,0 +1,2 @@
pi-package
realvnc-vnc-server

22
stage4/00-install-packages/01-packages

@ -0,0 +1,22 @@
python-automationhat python3-automationhat
python-blinkt python3-blinkt
python-cap1xxx python3-cap1xxx
python-drumhat python3-drumhat
python-envirophat python3-envirophat
python-explorerhat python3-explorerhat
python-fourletterphat python3-fourletterphat
python-microdotphat python3-microdotphat
python-mote python3-mote
python-motephat python3-motephat
python-phatbeat python3-phatbeat
python-pianohat python3-pianohat
python-piglow python3-piglow
python-rainbowhat python3-rainbowhat
python-scrollphat python3-scrollphat
python-scrollphathd python3-scrollphathd
python-sn3218 python3-sn3218
python-skywriter python3-skywriter
python-touchphat python3-touchphat
python-buttonshim python3-buttonshim
python-unicornhathd python3-unicornhathd
python-pantilthat python3-pantilthat

4
stage4/00-install-packages/02-packages

@ -0,0 +1,4 @@
hunspell-en-gb
hyphen-en-gb
wamerican
wbritish

5
stage4/01-console-autologin/00-run.sh

@ -0,0 +1,5 @@
#!/bin/bash -e
on_chroot << EOF
SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_boot_behaviour B4
EOF

7
stage4/02-extras/00-run.sh

@ -0,0 +1,7 @@
#!/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"

15
stage4/03-magpi/00-run.sh

@ -0,0 +1,15 @@
#!/bin/sh -e
magpi_regex="MagPi[[:digit:]]*.pdf"
magpi_loc="https://www.raspberrypi.org/magpi-issues"
magpi_latest="$(curl "$magpi_loc/?C=M;O=D" -s | grep "$magpi_regex" -m 1 -o | head -n 1)"
if [ ! -f "files/$magpi_latest" ]; then
find files/ -regextype grep -regex "files/$magpi_regex" -delete
wget "$magpi_loc/$magpi_latest" -O "files/$magpi_latest"
fi
file "files/$magpi_latest" | grep -q "PDF document"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/MagPi"
install -v -o 1000 -g 1000 -m 644 "files/$magpi_latest" "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/MagPi/"

1
stage4/03-magpi/files/.gitignore

@ -0,0 +1 @@
*.pdf

5
stage4/04-enable-xcompmgr/00-run.sh

@ -0,0 +1,5 @@
#!/bin/bash -e
on_chroot << EOF
raspi-config nonint do_xcompmgr 0
EOF

4
stage4/EXPORT_IMAGE

@ -0,0 +1,4 @@
IMG_SUFFIX=""
if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi

2
stage4/EXPORT_NOOBS

@ -0,0 +1,2 @@
NOOBS_NAME="Raspbian"
NOOBS_DESCRIPTION="A port of Debian with the Raspberry Pi Desktop"

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save