diff --git a/Dockerfile b/Dockerfile index 837e430..2a5d8fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG BASE_IMAGE=debian:buster +ARG BASE_IMAGE=debian:bullseye FROM ${BASE_IMAGE} ENV DEBIAN_FRONTEND noninteractive @@ -8,7 +8,7 @@ RUN apt-get -y update && \ git vim parted \ quilt coreutils qemu-user-static debootstrap zerofree zip dosfstools \ libarchive-tools libcap2-bin rsync grep udev xz-utils curl xxd file kmod bc\ - binfmt-support ca-certificates qemu-utils kpartx \ + binfmt-support ca-certificates qemu-utils kpartx fdisk gpg pigz\ && rm -rf /var/lib/apt/lists/* COPY . /pi-gen/ diff --git a/README.md b/README.md index da4c7a1..c515490 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,30 @@ To install the required dependencies for `pi-gen` you should run: ```bash apt-get install coreutils quilt parted qemu-user-static debootstrap zerofree zip \ dosfstools libarchive-tools libcap2-bin grep rsync xz-utils file git curl bc \ -qemu-utils kpartx +qemu-utils kpartx gpg pigz ``` The file `depends` contains a list of tools needed. The format of this package is `[:]`. +## Getting started with building your images + +Getting started is as simple as cloning this repository on your build machine. You +can do so with: + +```bash +git clone --depth 1 https://github.com/RPI-Distro/pi-gen.git +``` + +Using `--depth 1` with `git clone` will create a shallow clone, only containing +the latest revision of the repository. Do not do this on your development machine. + +Also, be careful to clone the repository to a base path **NOT** containing spaces. +This configuration is not supported by debootstrap and will lead to `pi-gen` not +running. + +After cloning the repository, you can move to the next step and start configuring +your build. ## Config @@ -37,7 +55,7 @@ The following environment variables are supported: but you should use something else for a customized version. Export files in stages may add suffixes to `IMG_NAME`. -* `USE_QCOW2`(Default: `1` ) +* `USE_QCOW2` **EXPERIMENTAL** (Default: `0` ) Instead of using traditional way of building the rootfs of every stage in single subdirectories and copying over the previous one to the next one, @@ -60,9 +78,9 @@ The following environment variables are supported: that the network block device is not disconnected correctly after the Docker process has ended abnormally. In that case see [Disconnect an image if something went wrong](#Disconnect-an-image-if-something-went-wrong) -* `RELEASE` (Default: buster) +* `RELEASE` (Default: bullseye) - The release version to build images against. Valid values are jessie, stretch + The release version to build images against. Valid values are jessie, stretch, buster, bullseye, and testing. * `APT_PROXY` (Default: unset) @@ -98,9 +116,28 @@ The following environment variables are supported: Output directory for target system images and NOOBS bundles. - * `DEPLOY_ZIP` (Default: `1`) + * `DEPLOY_COMPRESSION` (Default: `zip`) - Setting to `0` will deploy the actual image (`.img`) instead of a zipped image (`.zip`). + Set to: + * `none` to deploy the actual image (`.img`). + * `zip` to deploy a zipped image (`.zip`). + * `gz` to deploy a gzipped image (`.img.gz`). + * `xz` to deploy a xzipped image (`.img.xz`). + + + * `DEPLOY_ZIP` (Deprecated) + + This option has been deprecated in favor of `DEPLOY_COMPRESSION`. + + If `DEPLOY_ZIP=0` is still present in your config file, the behavior is the + same as with `DEPLOY_COMPRESSION=none`. + + * `COMPRESSION_LEVEL` (Default: `6`) + + Compression level to be used when using `zip`, `gz` or `xz` for + `DEPLOY_COMPRESSION`. From 0 to 9 (refer to the tool man page for more + information on this. Usually 0 is no compression but very fast, up to 9 with + the best compression but very slow ). * `USE_QEMU` (Default: `"0"`) @@ -320,7 +357,7 @@ maintenance and allows for more easy customization. - **Stage 5** - The Raspbian Full image. More development tools, an email client, learning tools like Scratch, specialized packages - like sonic-pi, office productivity, etc. + like sonic-pi, office productivity, etc. ### Stage specification @@ -372,8 +409,8 @@ Example: ```bash root@build-machine:~/$ lsblk | grep nbd -nbd1 43:32 0 10G 0 disk -├─nbd1p1 43:33 0 10G 0 part +nbd1 43:32 0 10G 0 disk +├─nbd1p1 43:33 0 10G 0 part └─nbd1p1 253:0 0 10G 0 part root@build-machine:~/$ ps xa | grep qemu-nbd @@ -397,7 +434,7 @@ It can happen, that your build stops in case of an error. Normally `./build.sh` A typical message indicating that there are some orphaned device mapper entries is this: ``` -Failed to set NBD socket +Failed to set NBD socket Disconnect client, due to: Unexpected end-of-file before all bytes were read ``` @@ -420,15 +457,30 @@ If that happens go through the following steps: or sudo ./imagetool.sh --cleanup ``` - + Note: The `imagetool.sh` command will cleanup any /dev/nbdX that is not connected to a running `qemu-nbd` daemon. Be careful if you use network block devices for other tasks utilizing NBDs on your build machine as well. -Now you should be able to start a new build without running into troubles again. Most of the time, especially when using Docker build, you will only need no. 3 to get everything up and running again. +Now you should be able to start a new build without running into troubles again. Most of the time, especially when using Docker build, you will only need no. 3 to get everything up and running again. # Troubleshooting ## `64 Bit Systems` -Please note there is currently an issue when compiling with a 64 Bit OS. See https://github.com/RPi-Distro/pi-gen/issues/271 +Please note there is currently an issue when compiling with a 64 Bit OS. See +https://github.com/RPi-Distro/pi-gen/issues/271 + +A 64 bit image can be generated from the `arm64` branch in this repository. Just +replace the command from [this section](#getting-started-with-building-your-images) +by the one below, and follow the rest of the documentation: +```bash +git clone --depth 1 --branch arm64 https://github.com/RPI-Distro/pi-gen.git +``` + +If you want to generate a 64 bits image from a Raspberry Pi running a 32 bits +version, you need to add `arm_64bit=1` to your `config.txt` file and reboot your +machine. This will restart your machine with a 64 bits kernel. This will only +work from a Raspberry Pi with a 64-bit capable processor (i.e. Raspberry Pi Zero +2, Raspberry Pi 3 or Raspberry Pi 4). + ## `binfmt_misc` @@ -437,11 +489,16 @@ possible to make use of `pi-gen` on an x86_64 system, even though it will be run ARM binaries. This requires support from the [`binfmt_misc`](https://en.wikipedia.org/wiki/Binfmt_misc) kernel module. -You may see the following error: +You may see one of the following errors: ``` update-binfmts: warning: Couldn't load the binfmt_misc module. ``` +``` +W: Failure trying to run: chroot "/pi-gen/work/test/stage0/rootfs" /bin/true +and/or +chroot: failed to run command '/bin/true': Exec format error +``` To resolve this, ensure that the following files are available (install them if necessary): @@ -451,3 +508,5 @@ To resolve this, ensure that the following files are available (install them if ``` You may also need to load the module by hand - run `modprobe binfmt_misc`. + +If you are using WSL to build you may have to enable the service `sudo update-binfmts --enable` diff --git a/build-docker.sh b/build-docker.sh index 01fd517..a7f18f1 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -48,7 +48,7 @@ fi CONTAINER_NAME=${CONTAINER_NAME:-pigen_work} CONTINUE=${CONTINUE:-0} PRESERVE_CONTAINER=${PRESERVE_CONTAINER:-0} -PIGEN_DOCKER_OPTS=${PIGEN_DOCKER_OPTS:-""} +PIGEN_DOCKER_OPTS=${PIGEN_DOCKER_OPTS:-""} if [ -z "${IMG_NAME}" ]; then echo "IMG_NAME not set in 'config'" 1>&2 @@ -78,10 +78,10 @@ BUILD_OPTS="$(echo "${BUILD_OPTS:-}" | sed -E 's@\-c\s?([^ ]+)@-c /config@')" # Check the arch of the machine we're running on. If it's 64-bit, use a 32-bit base image instead case "$(uname -m)" in x86_64|aarch64) - BASE_IMAGE=i386/debian:buster + BASE_IMAGE=i386/debian:bullseye ;; *) - BASE_IMAGE=debian:buster + BASE_IMAGE=debian:bullseye ;; esac ${DOCKER} build --build-arg BASE_IMAGE=${BASE_IMAGE} -t pi-gen "${DIR}" @@ -98,6 +98,8 @@ if [ "${CONTAINER_EXISTS}" != "" ]; then --volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \ pi-gen \ bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static && + # binfmt_misc is sometimes not mounted with debian bullseye image + (mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc || true) && cd /pi-gen; ./build.sh ${BUILD_OPTS} && rsync -av work/*/build.log deploy/" & wait "$!" @@ -112,6 +114,8 @@ else -e "GIT_HASH=${GIT_HASH}" \ pi-gen \ bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static && + # binfmt_misc is sometimes not mounted with debian bullseye image + (mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc || true) && cd /pi-gen; ./build.sh ${BUILD_OPTS} && rsync -av work/*/build.log deploy/" & wait "$!" diff --git a/build.sh b/build.sh index 5b91d3b..184bbe7 100755 --- a/build.sh +++ b/build.sh @@ -99,7 +99,7 @@ run_stage(){ STAGE_WORK_DIR="${WORK_DIR}/${STAGE}" ROOTFS_DIR="${STAGE_WORK_DIR}"/rootfs - if [ "${USE_QCOW2}" = "1" ]; then + if [ "${USE_QCOW2}" = "1" ]; then if [ ! -f SKIP ]; then load_qimage fi @@ -109,7 +109,7 @@ run_stage(){ unmount "${WORK_DIR}/${STAGE}" fi fi - + if [ ! -f SKIP_IMAGES ]; then if [ -f "${STAGE_DIR}/EXPORT_IMAGE" ]; then EXPORT_DIRS="${EXPORT_DIRS} ${STAGE_DIR}" @@ -133,7 +133,7 @@ run_stage(){ done fi - if [ "${USE_QCOW2}" = "1" ]; then + if [ "${USE_QCOW2}" = "1" ]; then unload_qimage else # make sure we are not umounting during export-image stage @@ -155,6 +155,14 @@ if [ "$(id -u)" != "0" ]; then fi BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +if [[ $BASE_DIR = *" "* ]]; then + echo "There is a space in the base path of pi-gen" + echo "This is not a valid setup supported by debootstrap." + echo "Please remove the spaces, or move pi-gen directory to a base path without spaces" 1>&2 + exit 1 +fi + export BASE_DIR if [ -f config ]; then @@ -195,17 +203,27 @@ 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 ARCHIVE_FILENAME="${ARCHIVE_FILENAME:-"image_${IMG_DATE}-${IMG_NAME}"}" export SCRIPT_DIR="${BASE_DIR}/scripts" export WORK_DIR="${WORK_DIR:-"${BASE_DIR}/work/${IMG_NAME}"}" export DEPLOY_DIR=${DEPLOY_DIR:-"${BASE_DIR}/deploy"} -export DEPLOY_ZIP="${DEPLOY_ZIP:-1}" + +# DEPLOY_ZIP was deprecated in favor of DEPLOY_COMPRESSION +# This preserve the old behavior with DEPLOY_ZIP=0 where no archive was created +if [ -z "${DEPLOY_COMPRESSION}" ] && [ "${DEPLOY_ZIP:-1}" = "0" ]; then + echo "DEPLOY_ZIP has been deprecated in favor of DEPLOY_COMPRESSION" + echo "Similar behavior to DEPLOY_ZIP=0 can be obtained with DEPLOY_COMPRESSION=none" + echo "Please update your config file" + DEPLOY_COMPRESSION=none +fi +export DEPLOY_COMPRESSION=${DEPLOY_COMPRESSION:-zip} +export COMPRESSION_LEVEL=${COMPRESSION_LEVEL:-6} export LOG_FILE="${WORK_DIR}/build.log" export TARGET_HOSTNAME=${TARGET_HOSTNAME:-raspberrypi} -export RELEASE=${RELEASE:-buster} +export RELEASE=${RELEASE:-bullseye} export WPA_ESSID export WPA_PASSWORD export WPA_COUNTRY @@ -251,7 +269,7 @@ source "${SCRIPT_DIR}/common" source "${SCRIPT_DIR}/dependencies_check" export NO_PRERUN_QCOW2="${NO_PRERUN_QCOW2:-1}" -export USE_QCOW2="${USE_QCOW2:-1}" +export USE_QCOW2="${USE_QCOW2:-0}" export BASE_QCOW2_SIZE=${BASE_QCOW2_SIZE:-12G} source "${SCRIPT_DIR}/qcow2_handling" if [ "${USE_QCOW2}" = "1" ]; then @@ -361,7 +379,7 @@ for EXPORT_DIR in ${EXPORT_DIRS}; do else run_stage - fi + fi if [ "${USE_QEMU}" != "1" ]; then if [ -e "${EXPORT_DIR}/EXPORT_NOOBS" ]; then # shellcheck source=/dev/null diff --git a/depends b/depends index eeb2490..db88171 100644 --- a/depends +++ b/depends @@ -19,3 +19,5 @@ lsmod:kmod bc qemu-nbd:qemu-utils kpartx +gpg +pigz diff --git a/export-image/01-user-rename/00-packages b/export-image/01-user-rename/00-packages new file mode 100644 index 0000000..e8b69fc --- /dev/null +++ b/export-image/01-user-rename/00-packages @@ -0,0 +1 @@ +userconf-pi diff --git a/export-image/01-user-rename/01-run.sh b/export-image/01-user-rename/01-run.sh new file mode 100755 index 0000000..8a5617b --- /dev/null +++ b/export-image/01-user-rename/01-run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -e + +on_chroot << EOF + SUDO_USER="${FIRST_USER_NAME}" rename-user -f -s +EOF diff --git a/export-image/01-set-sources/01-run.sh b/export-image/02-set-sources/01-run.sh similarity index 100% rename from export-image/01-set-sources/01-run.sh rename to export-image/02-set-sources/01-run.sh diff --git a/export-image/02-network/01-run.sh b/export-image/03-network/01-run.sh similarity index 100% rename from export-image/02-network/01-run.sh rename to export-image/03-network/01-run.sh diff --git a/export-image/02-network/files/resolv.conf b/export-image/03-network/files/resolv.conf similarity index 100% rename from export-image/02-network/files/resolv.conf rename to export-image/03-network/files/resolv.conf diff --git a/export-image/03-set-partuuid/00-run.sh b/export-image/04-set-partuuid/00-run.sh similarity index 100% rename from export-image/03-set-partuuid/00-run.sh rename to export-image/04-set-partuuid/00-run.sh diff --git a/export-image/04-finalise/01-run.sh b/export-image/05-finalise/01-run.sh similarity index 83% rename from export-image/04-finalise/01-run.sh rename to export-image/05-finalise/01-run.sh index d7ace58..c104366 100755 --- a/export-image/04-finalise/01-run.sh +++ b/export-image/05-finalise/01-run.sh @@ -78,7 +78,7 @@ cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE" mkdir -p "${DEPLOY_DIR}" -rm -f "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip" +rm -f "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.*" rm -f "${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" mv "$INFO_FILE" "$DEPLOY_DIR/" @@ -95,11 +95,22 @@ else make_bootable_image "${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.qcow2" "$IMG_FILE" fi -if [ "${DEPLOY_ZIP}" == "1" ]; then +case "${DEPLOY_COMPRESSION}" in +zip) pushd "${STAGE_WORK_DIR}" > /dev/null - zip "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip" \ - "$(basename "${IMG_FILE}")" + zip -"${COMPRESSION_LEVEL}" \ + "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.zip" "$(basename "${IMG_FILE}")" popd > /dev/null -else - mv "$IMG_FILE" "$DEPLOY_DIR/" -fi + ;; +gz) + pigz --force -"${COMPRESSION_LEVEL}" "$IMG_FILE" --stdout > \ + "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.img.gz" + ;; +xz) + xz --compress --force --threads 0 --memlimit-compress=50% -"${COMPRESSION_LEVEL}" \ + --stdout "$IMG_FILE" > "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.img.xz" + ;; +none | *) + cp "$IMG_FILE" "$DEPLOY_DIR/" +;; +esac diff --git a/export-noobs/00-release/files/release_notes.txt b/export-noobs/00-release/files/release_notes.txt index 6e9db37..331d8d9 100644 --- a/export-noobs/00-release/files/release_notes.txt +++ b/export-noobs/00-release/files/release_notes.txt @@ -1,4 +1,119 @@ UNRELEASED: + * +2022-04-04: + * Default "pi” user has been removed; the first-boot wizard enforces the creation of a new user account + * rename-user script added to allow existing users to be renamed by temporarily rebooting to cut-down first-boot wizard + * Overscan now managed by xrandr under KMS, can be set independently for both monitors, and takes effect on the fly rather than requiring reboot + * GTK3 switch control now used in place of paired radio buttons throughout + * piwiz - first-boot wizard now runs in a separate session as a different user with different graphics + * piwiz - first-boot wizard now has automatic pairing for discoverable Bluetooth mice and keyboards + * lxinput - keyboard delay and repeat settings now persist across reboots under mutter + * raspi-config / rc_gui - removed pixel doubling option when KMS driver in use + * raspi-config - removed composition manager option when legacy driver in use + * arandr - restored support for interlaced displays + * mutter - implemented more intuitive window and application cycling behaviour + * pi-greeter - rebuilt for GTK3 + * Bug fix - graphical corruption in system tray icons + * Bug fix - desktop items vanishing when dragged + * Bug fix - terminal windows not focussed correctly when launched + * Bug fix - crash after multiple update checks in updater plugin + * Bug fix - Raspberry Pi keyboard auto-detect by wizard was broken in previous release + * Bug fix - spurious "connected” dialog box shown when reconnecting to Bluetooth LE devices on boot + * Support for experimental Wayland backend added - can be enabled as an advanced option in raspi-config + * Various small bug fixes and graphical tweaks + * Chromium upgraded to version 98.0.4758.106 + * FFmpeg HW acceleration improved + * OpenJDK 17 now defaults to 'client' JVM for ARMv6 compatibility + * Raspberry Pi firmware 69277bc713133a54a1d20554d79544da1ae2b6ca + * Linux kernel 5.15.30 +2022-01-28: + * Policykit CVE-2021-4034 fix + * rc_gui - add combo box to allow resolution to be set for VNC connections + * rc_gui - camera interface switch removed + * lxpanel - remove appearance settings from preferences dialog; instead add menu option to open general Appearance Settings application + * lxpanel - add ellipses to menu items which open dialogs + * lxinput - read current mouse acceleration directly from xinput + * lxinput - use device IDs rather than names to cope with devices changing when powered-down + * lxinput - remove redundant changes to openbox config file + * plymouth - set KillMode to mixed to suppress warning message + * raspi-config - add option to switch composite video + * raspi-config - add option to switch to legacy camera mode + * raspi-config - add option to set resolution for headless connections + * raspberrypi-ui-mods - disable mutter when VNC server is running and fall back to openbox + * pipanel - add command-line option to open on arbitrary tab + * lxplug-network - suppress ’scan received’ logging message + * raspberrypi-ui-mods - set hover colour for taskbar items based on taskbar colour, not system highlight colour + * Legacy camera applications and libraries reinstalled (32-bit only) + * Bug fix - lxinput - lxsession config file not being written on first attempt + * Bug fix - lxinput - set timer for file write to prevent slider slowing down + * Bug fix - lxinput - write values to gsettings as well as xinput and xsettings to take effect within mutter + * Bug fix - lxinput - fix failure to parse and write non-English numeric formats + * Bug fix - arandr - various fixes to parsing of non-standard EDID blocks to enable model and serial to be correctly extracted + * Bug fix - arandr - refresh rate calculated to 3 decimal places for monitors which require it + * Bug fix - arandr - enable setting of left and right orientation + * Bug fix - arandr - add compatibility with new touchscreen driver + * Bug fix - arandr - apply settings correctly to DSI and composite displays + * Bug fix - lxplug-magnifier - fix crash when opening preferences without required magnifier package installed + * Bug fix - piwiz - launch screen reader install prompt as a new process to prevent audio lockups crashing wizard + * Bug fix - lxpanel - not loading some plugins (cpufreq, minimise all windows) due to icon loading code not compatible with GTK+3 + * Bug fix - gtk+3 - disabled new GDK touch events to enable double-clicks to be detected on touchscreen + * Bug fix - xrdp - included backports from bookworm version of xrdp and xorgxrdp to restore window frames with mutter over xrdp connections + * Update various translations + * udisks2 added to lite image + * mkvtoolnix added to lite image + * 7z and zip support added to lite image + * gnome-keyring added to desktop images + * Raspberry Pi firmware c6d56567ff6ef17fd85159770f22abcf2c5953ed + * Linux kernel 5.10.92 +2021-10-30: + * Based on Debian version 11 (bullseye) + * Desktop components (lxpanel and all plugins, libfm, pcmanfm) now built against GTK+3 + * Applications (piwiz, pipanel, rc_gui, lxinput) now built against GTK+3 + * PiXflat GTK+3 theme updated with numerous changes to support the above + * GTK+3 : toolbar icon size setting added + * GTK+3 : ability to request client-side decoration on windows added + * GTK+3 : setting for indent for frame labels in custom style added + * mutter window manager used instead of openbox on devices with 2GB or more of RAM + * mutter : title bar icon behaviour and appearance modified to match openbox + * mutter : additional keyboard shortcuts added + * mutter : various performance enhancements + * mutter compatibility added to screen magnifier + * Numerous changes to Appearance Settings application to support GTK+3 and mutter + * Updater plugin added to lxpanel to detect and install software updates + * File manager view options simplified to either list or icons, with separate menu option for thumbnails + * New file manager toolbar icons + * KMS used as default display driver + * Modifications to HDMI audio output selection to support the above + * xcompmgr enabled when openbox is running under KMS + * New default camera subsystem based on libcamera + * New camera demo applications (libcamera-still and libcamera-vid) have replaced raspistill and raspivid + * Legacy camera subsystem removed from 64-bit RPi OS (still available on 32-bit) + * Chromium upgraded to version 92.0.4515.98 + * VLC media player upgraded to version 3.0.16 + * Spurious drive removal warning after use of SD card copier removed + * Bookshelf application now includes Custom PC magazine + * Various translation updates - Italian, Korean, Polish, German, Armenian + * Startup wizard now installs Japanese fonts if needed + * Progress and information dialog boxes for lxpanel plugins now common to lxpanel, rather than in individual plugins + * Icon handling code for lxpanel plugins now common to lxpanel + * Package with 4K version of Raspberry Pi wallpaper added to Recommended Software + * Python Games and Minecraft removed from Recommended Software - neither is compatible with bullseye + * Bluetooth pairing and connection dialogs updated for compatibility with more devices + * Bluetooth devices always disconnected before removal to speed up removal process + * Bluetooth pairing dialog now only shows devices which offer services which are usable by Pi + * Separate Bluetooth unpair dialog removed - unpair now an option for each individual device + * Bug fix - mutter : header bar colours not updating when theme is changed + * Bug fix - GTK+3 : tooltips being displayed incorrectly at bottom of screen + * Bug fix - lxpanel : crash when using keyboard shortcut to enable magnifier when magnifier not installed + * Bug fix - lxpanel : lockup in Bluetooth plugin when connecting to certain devices + * Bug fix - lxpanel : discoverable mode icon could get out of sync with underlying Bluetooth system state + * Bug fix - piwiz : missing cities in timezone list + * Bug fix - piwiz : country-specific language packages not being installed + * Bug fix - bookshelf : now waits for longer between packets before timing out + * Bug fix - accented characters now displayed correctly in localisation dialogs + * Raspberry Pi firmware e2bab29767e51c683a312df20014e3277275b8a6 + * Linux kernel 5.10.63 +2021-05-07: * Chromium upgraded to version 88.0.4324.187 * NuScratch upgraded to version 20210507 * Node-RED upgraded to version 1.3.4 diff --git a/export-noobs/prerun.sh b/export-noobs/prerun.sh index d97508a..97dd094 100755 --- a/export-noobs/prerun.sh +++ b/export-noobs/prerun.sh @@ -3,11 +3,7 @@ NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_NAME}${IMG_SUFFIX}" mkdir -p "${STAGE_WORK_DIR}" -if [ "${DEPLOY_ZIP}" == "1" ]; then - IMG_FILE="${WORK_DIR}/export-image/${IMG_FILENAME}${IMG_SUFFIX}.img" -else - IMG_FILE="${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" -fi +IMG_FILE="${WORK_DIR}/export-image/${IMG_FILENAME}${IMG_SUFFIX}.img" unmount_image "${IMG_FILE}" diff --git a/imagetool.sh b/imagetool.sh index e8467e1..002b50b 100755 --- a/imagetool.sh +++ b/imagetool.sh @@ -25,7 +25,7 @@ Usage: -p, --mount-point mount point for image This tool will use /dev/nbd1 as default for mounting an image. If you want to use another device, execute like this: - NBD_DEV=/dev/nbd2 ./$progname --mount --image --mount-point + NBD_DEV=/dev/nbd2 ./$progname --mount --image-name --mount-point HEREDOC } diff --git a/scripts/common b/scripts/common index 300d30b..e476f0f 100644 --- a/scripts/common +++ b/scripts/common @@ -9,13 +9,11 @@ bootstrap(){ 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+=(--exclude=info) + BOOTSTRAP_ARGS+=(--include=ca-certificates) BOOTSTRAP_ARGS+=("$@") printf -v BOOTSTRAP_STR '%q ' "${BOOTSTRAP_ARGS[@]}" diff --git a/stage0/00-configure-apt/00-run.sh b/stage0/00-configure-apt/00-run.sh index d10a49f..4d0ac92 100755 --- a/stage0/00-configure-apt/00-run.sh +++ b/stage0/00-configure-apt/00-run.sh @@ -12,7 +12,7 @@ else rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" fi -on_chroot apt-key add - < files/raspberrypi.gpg.key +cat files/raspberrypi.gpg.key | gpg --dearmor > "${ROOTFS_DIR}/etc/apt/trusted.gpg.d/raspberrypi-archive-stable.gpg" on_chroot << EOF apt-get update apt-get dist-upgrade -y diff --git a/stage0/00-configure-apt/01-packages b/stage0/00-configure-apt/01-packages new file mode 100644 index 0000000..f5e3789 --- /dev/null +++ b/stage0/00-configure-apt/01-packages @@ -0,0 +1 @@ +raspberrypi-archive-keyring diff --git a/stage1/00-boot-files/files/config.txt b/stage1/00-boot-files/files/config.txt index 548f4ac..6e072cb 100644 --- a/stage1/00-boot-files/files/config.txt +++ b/stage1/00-boot-files/files/config.txt @@ -5,10 +5,6 @@ # 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 @@ -56,10 +52,29 @@ # 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 +# Automatically load overlays for detected cameras +camera_auto_detect=1 + +# Automatically load overlays for detected DSI displays +display_auto_detect=1 + +# Enable DRM VC4 V3D driver +dtoverlay=vc4-kms-v3d max_framebuffers=2 +# Disable compensation for displays with overscan +disable_overscan=1 + +[cm4] +# Enable host mode on the 2711 built-in XHCI USB controller. +# This line should be removed if the legacy DWC2 controller is required +# (e.g. for USB device mode) or if USB support is not required. +otg_mode=1 + +[all] + +[pi4] +# Run as fast as firmware / board allows +arm_boost=1 + [all] -#dtoverlay=vc4-fkms-v3d diff --git a/stage1/01-sys-tweaks/00-packages b/stage1/01-sys-tweaks/00-packages new file mode 100644 index 0000000..9e91ea1 --- /dev/null +++ b/stage1/01-sys-tweaks/00-packages @@ -0,0 +1 @@ +raspi-config diff --git a/stage1/01-sys-tweaks/files/fstab b/stage1/01-sys-tweaks/files/fstab index f16e3fb..2159c1c 100644 --- a/stage1/01-sys-tweaks/files/fstab +++ b/stage1/01-sys-tweaks/files/fstab @@ -1,3 +1,3 @@ proc /proc proc defaults 0 0 -BOOTDEV /boot vfat defaults 0 2 +BOOTDEV /boot vfat defaults,flush 0 2 ROOTDEV / ext4 defaults,noatime 0 1 diff --git a/stage1/02-net-tweaks/00-run.sh b/stage1/02-net-tweaks/00-run.sh index 4943cab..95dfbdc 100755 --- a/stage1/02-net-tweaks/00-run.sh +++ b/stage1/02-net-tweaks/00-run.sh @@ -3,4 +3,6 @@ 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" +on_chroot << EOF + SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_net_names 1 +EOF diff --git a/stage1/03-install-packages/00-packages b/stage1/03-install-packages/00-packages index e8c148c..a3d2fb6 100644 --- a/stage1/03-install-packages/00-packages +++ b/stage1/03-install-packages/00-packages @@ -1 +1,2 @@ -libraspberrypi-bin libraspberrypi0 raspi-config +libraspberrypi-bin libraspberrypi0 +systemd-timesyncd diff --git a/stage2/01-sys-tweaks/00-packages b/stage2/01-sys-tweaks/00-packages index a1f4b59..7656f03 100644 --- a/stage2/01-sys-tweaks/00-packages +++ b/stage2/01-sys-tweaks/00-packages @@ -1,8 +1,8 @@ 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 -python-gpiozero +console-setup keyboard-configuration debconf-utils parted +build-essential manpages-dev bash-completion gdb pkg-config +python-is-python3 +python3-rpi.gpio v4l-utils python3-gpiozero avahi-daemon lua5.1 @@ -26,8 +26,9 @@ policykit-1 ssh-import-id rng-tools ethtool -vl805fw ntfs-3g pciutils rpi-eeprom raspinfo +udisks2 +unzip zip p7zip-full diff --git a/stage2/01-sys-tweaks/00-packages-nr b/stage2/01-sys-tweaks/00-packages-nr index 5acef54..6bdb600 100644 --- a/stage2/01-sys-tweaks/00-packages-nr +++ b/stage2/01-sys-tweaks/00-packages-nr @@ -1 +1,3 @@ cifs-utils +libcamera-apps-lite +mkvtoolnix diff --git a/stage2/02-net-tweaks/01-run.sh b/stage2/02-net-tweaks/01-run.sh index d82381b..837e861 100755 --- a/stage2/02-net-tweaks/01-run.sh +++ b/stage2/02-net-tweaks/01-run.sh @@ -1,11 +1,12 @@ #!/bin/bash -e -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/" +on_chroot << EOF + SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_boot_wait 0 +EOF + if [ -v WPA_COUNTRY ]; then echo "country=${WPA_COUNTRY}" >> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf" fi diff --git a/stage2/02-net-tweaks/files/wait.conf b/stage2/02-net-tweaks/files/wait.conf deleted file mode 100644 index 595cc2d..0000000 --- a/stage2/02-net-tweaks/files/wait.conf +++ /dev/null @@ -1,3 +0,0 @@ -[Service] -ExecStart= -ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w