From 88a02b3f682d24127b7d08a51924213c5d1a4a2a Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 26 Aug 2023 16:33:00 -0300 Subject: [PATCH 01/17] Add instructions for compiling from source. --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 498bad6..2b9f846 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,17 @@ The remote desktop can be accessed using any VNC client. The credentials are the #### Running Programs Not all programs listed above will be listed on the desktop. Most of them require to be launched from the terminal. Please, refer to the documentation of the program that you would like to use for launch instructions. The `README.md` files can also be accessed offline inside the `/home/pi/PiSDR` directory. +## Advanced + +You can also choose to compile PiSDR on your own. However, be aware that this process can take several hours, depending on your hardware. It's important to note that standard x86 machines, such as those with Intel and AMD CPUs, will typically take much longer. This is because they have to emulate an ARM64 processor to compile everything. In contrast, machines with native ARM64 processors, like Apple Silicon and Ampere, will be significantly faster as they don't require emulation. + +This project uses docker to compile the images. + +#### macOS (Colima) +```bash +$ colima start --cpu 8 --cpu-type cortex-a72 --memory 14 --arch aarch64 +``` + ## About the project PiSDR Project was created and maintained since 2019 by [Luigi F. Cruz](https://luigi.ltd). From c7ba4293c354ea68d963bd3351bbe4b770098d45 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 26 Aug 2023 16:33:11 -0300 Subject: [PATCH 02/17] Add initial module patches. --- stage4/05-pisdr-uhd/00-run.sh | 2 +- stage4/10-pisdr-plutosdr/00-packages-nr | 3 ++- stage4/10-pisdr-plutosdr/00-run.sh | 2 +- stage4/10-pisdr-plutosdr/01-run.sh | 2 +- stage4/11-pisdr-rtlsdr/00-run.sh | 2 +- stage4/12-pisdr-hackrf/00-run.sh | 2 +- stage4/13-pisdr-gnuradio/00-run.sh | 2 +- stage4/13-pisdr-gnuradio/01-run.sh | 2 +- stage4/14-pisdr-gnuradio-mod/01-run.sh | 3 +++ stage4/18-pisdr-sdrangel/05-run.sh | 2 +- 10 files changed, 13 insertions(+), 9 deletions(-) diff --git a/stage4/05-pisdr-uhd/00-run.sh b/stage4/05-pisdr-uhd/00-run.sh index 6c19a13..b11056e 100755 --- a/stage4/05-pisdr-uhd/00-run.sh +++ b/stage4/05-pisdr-uhd/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "uhd" ]; then - git clone --single-branch --branch UHD-3.15.LTS --depth 1 https://github.com/EttusResearch/uhd.git + git clone --single-branch --branch UHD-4.4 --depth 1 https://github.com/EttusResearch/uhd.git fi cd uhd/host diff --git a/stage4/10-pisdr-plutosdr/00-packages-nr b/stage4/10-pisdr-plutosdr/00-packages-nr index ee6471b..1c75bc3 100644 --- a/stage4/10-pisdr-plutosdr/00-packages-nr +++ b/stage4/10-pisdr-plutosdr/00-packages-nr @@ -5,4 +5,5 @@ libcdk5-dev libaio-dev libusb-1.0-0-dev libserialport-dev -libavahi-client-dev \ No newline at end of file +libavahi-client-dev +libzstd-dev \ No newline at end of file diff --git a/stage4/10-pisdr-plutosdr/00-run.sh b/stage4/10-pisdr-plutosdr/00-run.sh index f99ad7d..d041924 100755 --- a/stage4/10-pisdr-plutosdr/00-run.sh +++ b/stage4/10-pisdr-plutosdr/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Radios" cd "/home/${FIRST_USER_NAME}/PiSDR/Radios" if [ ! -d "libiio" ]; then - git clone --depth 1 https://github.com/analogdevicesinc/libiio + git clone --depth 1 --branch libiio-v0 https://github.com/analogdevicesinc/libiio fi cd libiio diff --git a/stage4/10-pisdr-plutosdr/01-run.sh b/stage4/10-pisdr-plutosdr/01-run.sh index 6565e39..138a179 100755 --- a/stage4/10-pisdr-plutosdr/01-run.sh +++ b/stage4/10-pisdr-plutosdr/01-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Radios" cd "/home/${FIRST_USER_NAME}/PiSDR/Radios" if [ ! -d "libad9361-iio" ]; then - git clone --depth 1 https://github.com/analogdevicesinc/libad9361-iio + git clone --depth 1 --branch v0.3 https://github.com/analogdevicesinc/libad9361-iio fi cd libad9361-iio diff --git a/stage4/11-pisdr-rtlsdr/00-run.sh b/stage4/11-pisdr-rtlsdr/00-run.sh index 20d37e1..bc11ce5 100755 --- a/stage4/11-pisdr-rtlsdr/00-run.sh +++ b/stage4/11-pisdr-rtlsdr/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Radios" cd "/home/${FIRST_USER_NAME}/PiSDR/Radios" if [ ! -d "rtl-sdr" ]; then - git clone --depth 1 https://github.com/osmocom/rtl-sdr + git clone --depth 1 https://github.com/rtlsdrblog/rtl-sdr-blog.git fi cd rtl-sdr diff --git a/stage4/12-pisdr-hackrf/00-run.sh b/stage4/12-pisdr-hackrf/00-run.sh index ab8dda8..8be266c 100755 --- a/stage4/12-pisdr-hackrf/00-run.sh +++ b/stage4/12-pisdr-hackrf/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Radios" cd "/home/${FIRST_USER_NAME}/PiSDR/Radios" if [ ! -d "hackrf" ]; then - git clone https://github.com/mossmann/hackrf.git + git clone --depth 1 https://github.com/mossmann/hackrf.git fi cd hackrf/host diff --git a/stage4/13-pisdr-gnuradio/00-run.sh b/stage4/13-pisdr-gnuradio/00-run.sh index ca6e20e..e829dde 100755 --- a/stage4/13-pisdr-gnuradio/00-run.sh +++ b/stage4/13-pisdr-gnuradio/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "volk" ]; then - git clone --single-branch --branch v2.5.0 --depth 1 --recurse-submodules --shallow-submodules https://github.com/gnuradio/volk.git + git clone --single-branch --branch v3.0.0 --depth 1 --recurse-submodules --shallow-submodules https://github.com/gnuradio/volk.git fi cd volk diff --git a/stage4/13-pisdr-gnuradio/01-run.sh b/stage4/13-pisdr-gnuradio/01-run.sh index 7396b8f..61e337c 100755 --- a/stage4/13-pisdr-gnuradio/01-run.sh +++ b/stage4/13-pisdr-gnuradio/01-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "gnuradio" ]; then - git clone --single-branch --branch maint-3.9 --depth 1 --recurse-submodules --shallow-submodules https://github.com/gnuradio/gnuradio.git + git clone --single-branch --branch maint-3.10 --depth 1 --recurse-submodules --shallow-submodules https://github.com/gnuradio/gnuradio.git fi cd gnuradio diff --git a/stage4/14-pisdr-gnuradio-mod/01-run.sh b/stage4/14-pisdr-gnuradio-mod/01-run.sh index 0e4a775..0434523 100755 --- a/stage4/14-pisdr-gnuradio-mod/01-run.sh +++ b/stage4/14-pisdr-gnuradio-mod/01-run.sh @@ -1,5 +1,8 @@ #!/bin/bash -e +# gr-limesdr doesn't have a stable package for GR3.10 +exit + on_chroot << EOF mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" diff --git a/stage4/18-pisdr-sdrangel/05-run.sh b/stage4/18-pisdr-sdrangel/05-run.sh index 8042d7b..c967b71 100755 --- a/stage4/18-pisdr-sdrangel/05-run.sh +++ b/stage4/18-pisdr-sdrangel/05-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "sdrangel" ]; then - git clone --depth 1 --branch v6.5.5 https://github.com/f4exb/sdrangel.git + git clone --depth 1 --branch v7.15.3 https://github.com/f4exb/sdrangel.git fi cd sdrangel From 31aab91f0dff9c38293ca034045de0c854b0bea7 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 26 Aug 2023 22:50:43 -0300 Subject: [PATCH 03/17] Further patches. --- stage4/11-pisdr-rtlsdr/00-run.sh | 2 +- stage4/13-pisdr-gnuradio/00-packages-nr | 5 ++++- stage4/14-pisdr-gnuradio-mod/03-run.sh | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/stage4/11-pisdr-rtlsdr/00-run.sh b/stage4/11-pisdr-rtlsdr/00-run.sh index bc11ce5..0e4ec22 100755 --- a/stage4/11-pisdr-rtlsdr/00-run.sh +++ b/stage4/11-pisdr-rtlsdr/00-run.sh @@ -8,7 +8,7 @@ if [ ! -d "rtl-sdr" ]; then git clone --depth 1 https://github.com/rtlsdrblog/rtl-sdr-blog.git fi -cd rtl-sdr +cd rtl-sdr-blog mkdir -p build cd build cmake -GNinja -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON .. diff --git a/stage4/13-pisdr-gnuradio/00-packages-nr b/stage4/13-pisdr-gnuradio/00-packages-nr index 942501c..285204a 100644 --- a/stage4/13-pisdr-gnuradio/00-packages-nr +++ b/stage4/13-pisdr-gnuradio/00-packages-nr @@ -18,6 +18,7 @@ libqt5opengl5-dev libcodec2-dev libsndfile1-dev pybind11-dev +libspdlog-dev gir1.2-gtk-3.0 swig @@ -35,4 +36,6 @@ python3-pip python3-gi-cairo python3-matplotlib python3-pygccxml -python3-pyqtgraph \ No newline at end of file +python3-pyqtgraph +python3-packaging +python3-jsonschema \ No newline at end of file diff --git a/stage4/14-pisdr-gnuradio-mod/03-run.sh b/stage4/14-pisdr-gnuradio-mod/03-run.sh index 73401a1..2eb170c 100755 --- a/stage4/14-pisdr-gnuradio-mod/03-run.sh +++ b/stage4/14-pisdr-gnuradio-mod/03-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "gr-sdrplay3" ]; then - git clone --single-branch --branch master --depth 1 https://github.com/fventuri/gr-sdrplay3.git + git clone --single-branch --branch main --depth 1 https://github.com/fventuri/gr-sdrplay3.git fi cd gr-sdrplay3 From 3f501f9a0ccd24ec9bee20bf681831f186eeea9f Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 26 Aug 2023 23:10:51 -0300 Subject: [PATCH 04/17] Update pi-gen release. --- Dockerfile | 4 +- build-docker.sh | 120 +++++++++++++----- build.sh | 66 ++++++---- config | 2 + depends | 2 + export-image/01-user-rename/00-packages | 1 + export-image/01-user-rename/01-run.sh | 9 ++ .../01-run.sh | 0 .../{02-network => 03-network}/01-run.sh | 0 .../files/resolv.conf | 0 .../00-run.sh | 0 .../{04-finalise => 05-finalise}/01-run.sh | 32 +++-- export-image/prerun.sh | 36 ++---- scripts/common | 47 ++++--- scripts/qcow2_handling | 4 +- stage0/00-configure-apt/00-run.sh | 3 +- stage0/00-configure-apt/01-packages | 1 + stage0/02-firmware/01-packages | 1 - stage0/prerun.sh | 5 + stage1/01-sys-tweaks/00-packages | 1 + stage1/01-sys-tweaks/00-run.sh | 5 +- stage1/03-install-packages/00-packages | 1 + stage2/00-copies-and-fills/01-packages | 1 - stage2/00-copies-and-fills/02-run.sh | 6 - stage2/01-sys-tweaks/00-packages | 6 +- .../00-patches/07-resize-init.diff | 2 +- stage2/01-sys-tweaks/01-run.sh | 8 +- stage2/02-net-tweaks/00-packages | 1 + stage2/02-net-tweaks/01-run.sh | 5 +- stage3/00-install-packages/00-packages | 2 +- stage3/00-install-packages/00-packages-nr | 1 + stage4/00-install-packages/00-packages | 2 + 32 files changed, 241 insertions(+), 133 deletions(-) create mode 100644 export-image/01-user-rename/00-packages create mode 100755 export-image/01-user-rename/01-run.sh rename export-image/{01-set-sources => 02-set-sources}/01-run.sh (100%) rename export-image/{02-network => 03-network}/01-run.sh (100%) rename export-image/{02-network => 03-network}/files/resolv.conf (100%) rename export-image/{03-set-partuuid => 04-set-partuuid}/00-run.sh (100%) rename export-image/{04-finalise => 05-finalise}/01-run.sh (78%) create mode 100644 stage0/00-configure-apt/01-packages create mode 100644 stage1/01-sys-tweaks/00-packages delete mode 100644 stage2/00-copies-and-fills/01-packages delete mode 100755 stage2/00-copies-and-fills/02-run.sh diff --git a/Dockerfile b/Dockerfile index 4b34617..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 util-linux fdisk \ + binfmt-support ca-certificates qemu-utils kpartx fdisk gpg pigz\ && rm -rf /var/lib/apt/lists/* COPY . /pi-gen/ diff --git a/build-docker.sh b/build-docker.sh index 7c93873..fc0398a 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -4,10 +4,15 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" BUILD_OPTS="$*" -DOCKER="docker" - -if ! ${DOCKER} ps >/dev/null 2>&1; then - DOCKER="sudo docker" +# Allow user to override docker command +DOCKER=${DOCKER:-docker} + +# Ensure that default docker command is not set up in rootless mode +if \ + ! ${DOCKER} ps >/dev/null 2>&1 || \ + ${DOCKER} info 2>/dev/null | grep -q rootless \ +; then + DOCKER="sudo ${DOCKER}" fi if ! ${DOCKER} ps >/dev/null; then echo "error connecting to docker:" @@ -48,7 +53,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 @@ -75,42 +80,87 @@ fi # Modify original build-options to allow config file to be mounted in the docker container BUILD_OPTS="$(echo "${BUILD_OPTS:-}" | sed -E 's@\-c\s?([^ ]+)@-c /config@')" -BASE_IMAGE=debian:buster -${DOCKER} build --build-arg BASE_IMAGE=${BASE_IMAGE} -t pi-gen "${DIR}" +${DOCKER} build --build-arg BASE_IMAGE=debian:bullseye -t pi-gen "${DIR}" if [ "${CONTAINER_EXISTS}" != "" ]; then - trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${CONTAINER_NAME}_cont' SIGINT SIGTERM - time ${DOCKER} run --rm --privileged \ - --cap-add=ALL \ - -v /dev:/dev \ - -v /lib/modules:/lib/modules \ - ${PIGEN_DOCKER_OPTS} \ - --volume "${CONFIG_FILE}":/config:ro \ - -e "GIT_HASH=${GIT_HASH}" \ - --volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \ - pi-gen \ - bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static && - cd /pi-gen; ./build.sh ${BUILD_OPTS} && - rsync -av work/*/build.log deploy/" & - wait "$!" + DOCKER_CMDLINE_NAME="${CONTAINER_NAME}_cont" + DOCKER_CMDLINE_PRE=( \ + --rm \ + ) + DOCKER_CMDLINE_POST=( \ + --volumes-from="${CONTAINER_NAME}" \ + ) else - trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${CONTAINER_NAME}' SIGINT SIGTERM - time ${DOCKER} run --name "${CONTAINER_NAME}" --privileged \ - --cap-add=ALL \ - -v /dev:/dev \ - -v /lib/modules:/lib/modules \ - ${PIGEN_DOCKER_OPTS} \ - --volume "${CONFIG_FILE}":/config:ro \ - -e "GIT_HASH=${GIT_HASH}" \ - pi-gen \ - bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static && - cd /pi-gen; ./build.sh ${BUILD_OPTS} && - rsync -av work/*/build.log deploy/" & - wait "$!" + DOCKER_CMDLINE_NAME="${CONTAINER_NAME}" + DOCKER_CMDLINE_PRE=( \ + ) + DOCKER_CMDLINE_POST=( \ + ) +fi + +# Check if binfmt_misc is required +binfmt_misc_required=1 +case $(uname -m) in + aarch64) + binfmt_misc_required=0 + ;; + arm*) + binfmt_misc_required=0 + ;; +esac + +# Check if qemu-aarch64-static and /proc/sys/fs/binfmt_misc are present +if [[ "${binfmt_misc_required}" == "1" ]]; then + if ! qemu_arm=$(which qemu-aarch64-static) ; then + echo "qemu-aarch64-static not found (please install qemu-user-static)" + exit 1 + fi + if [ ! -f /proc/sys/fs/binfmt_misc/register ]; then + echo "binfmt_misc required but not mounted, trying to mount it..." + if ! mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc ; then + echo "mounting binfmt_misc failed" + exit 1 + fi + echo "binfmt_misc mounted" + fi + if ! grep -q "^interpreter ${qemu_arm}" /proc/sys/fs/binfmt_misc/qemu-aarch64* ; then + # Register qemu-aarch64 for binfmt_misc + reg="echo ':qemu-aarch64-rpi:M::"\ +"\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:"\ +"\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:"\ +"${qemu_arm}:F' > /proc/sys/fs/binfmt_misc/register" + echo "Registering qemu-aarch64 for binfmt_misc..." + sudo bash -c "${reg}" 2>/dev/null || true + fi fi +trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${DOCKER_CMDLINE_NAME}' SIGINT SIGTERM +time ${DOCKER} run \ + --name "${DOCKER_CMDLINE_NAME}" \ + --privileged \ + --cap-add=ALL \ + -v /dev:/dev \ + -v /lib/modules:/lib/modules \ + ${PIGEN_DOCKER_OPTS} \ + --volume "${CONFIG_FILE}":/config:ro \ + -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 "$!" + +# Ensure that deploy/ is always owned by calling user echo "copying results from deploy/" -${DOCKER} cp "${CONTAINER_NAME}":/pi-gen/deploy . +${DOCKER} cp "${CONTAINER_NAME}":/pi-gen/deploy - | tar -xf - + +echo "copying log from container ${CONTAINER_NAME} to depoy/" +${DOCKER} logs --timestamps "${CONTAINER_NAME}" &>deploy/build-docker.log + ls -lah deploy # cleanup diff --git a/build.sh b/build.sh index d56583e..986f81c 100755 --- a/build.sh +++ b/build.sh @@ -14,20 +14,14 @@ $(cat "${i}-debconf") SELEOF EOF - log "End ${SUB_STAGE_DIR}/${i}-debconf" + 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 -n=0 -until [ "$n" -ge 5 ] -do - apt-get --ignore-missing --fix-missing install --no-install-recommends -y $PACKAGES && break - n=$((n+1)) - sleep 15 -done +apt-get -o Acquire::Retries=3 install --no-install-recommends -y $PACKAGES EOF if [ "${USE_QCOW2}" = "1" ]; then on_chroot << EOF @@ -42,13 +36,7 @@ EOF PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < "${i}-packages")" if [ -n "$PACKAGES" ]; then on_chroot << EOF -n=0 -until [ "$n" -ge 5 ] -do - apt-get --ignore-missing --fix-missing install -y $PACKAGES && break - n=$((n+1)) - sleep 15 -done +apt-get -o Acquire::Retries=3 install -y $PACKAGES EOF if [ "${USE_QCOW2}" = "1" ]; then on_chroot << EOF @@ -145,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 @@ -167,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 @@ -207,19 +203,30 @@ 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:-"${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_DATE}-${IMG_NAME}"}" +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 FIRST_USER_NAME=${FIRST_USER_NAME:-pi} -export FIRST_USER_PASS=${FIRST_USER_PASS:-raspberry} -export RELEASE=${RELEASE:-bullseye} +export FIRST_USER_PASS +export DISABLE_FIRST_BOOT_USER_RENAME=${DISABLE_FIRST_BOOT_USER_RENAME:-0} +export RELEASE=${RELEASE:-bullseye} # Don't forget to update stage0/prerun.sh export WPA_ESSID export WPA_PASSWORD export WPA_COUNTRY @@ -276,6 +283,10 @@ fi export NO_PRERUN_QCOW2="${NO_PRERUN_QCOW2:-1}" +if [ "$SETFCAP" != "1" ]; then + export CAPSH_ARG="--drop=cap_setfcap" +fi + dependencies_check "${BASE_DIR}/depends" #check username is valid @@ -284,6 +295,17 @@ if [[ ! "$FIRST_USER_NAME" =~ ^[a-z][-a-z0-9_]*$ ]]; then exit 1 fi +if [[ "$DISABLE_FIRST_BOOT_USER_RENAME" == "1" ]] && [ -z "${FIRST_USER_PASS}" ]; then + echo "To disable user rename on first boot, FIRST_USER_PASS needs to be set" + echo "Not setting FIRST_USER_PASS makes your system vulnerable and open to cyberattacks" + exit 1 +fi + +if [[ "$DISABLE_FIRST_BOOT_USER_RENAME" == "1" ]]; then + echo "User rename on the first boot is disabled" + echo "Be advised of the security risks linked to shipping a device with default username/password set." +fi + if [[ -n "${APT_PROXY}" ]] && ! curl --silent "${APT_PROXY}" >/dev/null ; then echo "Could not reach APT_PROXY server: ${APT_PROXY}" exit 1 @@ -381,7 +403,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/config b/config index c51f746..a8079b3 100644 --- a/config +++ b/config @@ -2,3 +2,5 @@ IMG_NAME='PiSDR' ENABLE_SSH=1 TARGET_HOSTNAME='pisdr' FIRST_USER_PASS='raspberry' +DEPLOY_COMPRESSION='xz' +COMPRESSION_LEVEL=9 \ No newline at end of file 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..aa5dd94 --- /dev/null +++ b/export-image/01-user-rename/01-run.sh @@ -0,0 +1,9 @@ +#!/bin/bash -e + +if [[ "${DISABLE_FIRST_BOOT_USER_RENAME}" == "0" ]]; then + on_chroot <<- EOF + SUDO_USER="${FIRST_USER_NAME}" rename-user -f -s + EOF +else + rm -f "${ROOTFS_DIR}/etc/xdg/autostart/piwiz.desktop" +fi 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 78% rename from export-image/04-finalise/01-run.sh rename to export-image/05-finalise/01-run.sh index 3e72c0c..c104366 100755 --- a/export-image/04-finalise/01-run.sh +++ b/export-image/05-finalise/01-run.sh @@ -18,6 +18,12 @@ fi 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~" @@ -72,9 +78,8 @@ 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" -rm -f "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.img.xz" mv "$INFO_FILE" "$DEPLOY_DIR/" @@ -90,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 - xz -T16 -c "$(basename "${IMG_FILE}")" > "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.img.xz" + zip -"${COMPRESSION_LEVEL}" \ + "${DEPLOY_DIR}/${ARCHIVE_FILENAME}${IMG_SUFFIX}.zip" "$(basename "${IMG_FILE}")" popd > /dev/null - rm -f "${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" -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-image/prerun.sh b/export-image/prerun.sh index fad7f80..267bbe0 100755 --- a/export-image/prerun.sh +++ b/export-image/prerun.sh @@ -33,49 +33,29 @@ if [ "${NO_PRERUN_QCOW2}" = "0" ]; then 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) - - echo "Mounting BOOT_DEV..." - cnt=0 - until BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}"); do - if [ $cnt -lt 5 ]; then - cnt=$((cnt + 1)) - echo "Error in losetup for BOOT_DEV. Retrying..." - sleep 5 - else - echo "ERROR: losetup for BOOT_DEV failed; exiting" - exit 1 - fi - done - - echo "Mounting ROOT_DEV..." + echo "Creating loop device..." cnt=0 - until ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}"); do + until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do if [ $cnt -lt 5 ]; then cnt=$((cnt + 1)) - echo "Error in losetup for ROOT_DEV. Retrying..." + echo "Error in losetup. Retrying..." sleep 5 else - echo "ERROR: losetup for ROOT_DEV failed; exiting" + echo "ERROR: losetup failed; exiting" exit 1 fi done - echo "/boot: offset $BOOT_OFFSET, length $BOOT_LENGTH" - echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH" + BOOT_DEV="${LOOP_DEV}p1" + ROOT_DEV="${LOOP_DEV}p2" ROOT_FEATURES="^huge_file" - for FEATURE in metadata_csum 64bit; do + for FEATURE in 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 + mkdosfs -n bootfs -F 32 -s 4 -v "$BOOT_DEV" > /dev/null mkfs.ext4 -L rootfs -O "$ROOT_FEATURES" "$ROOT_DEV" > /dev/null mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4 diff --git a/scripts/common b/scripts/common index fe64e74..8c54c45 100644 --- a/scripts/common +++ b/scripts/common @@ -7,21 +7,18 @@ 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 + export http_proxy=${APT_PROXY} BOOTSTRAP_ARGS+=(--arch arm64) BOOTSTRAP_ARGS+=(--include gnupg) 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[@]}" - capsh --drop=cap_setfcap -- -c "'${BOOTSTRAP_CMD}' $BOOTSTRAP_STR" || true + capsh $CAPSH_ARG -- -c "'${BOOTSTRAP_CMD}' $BOOTSTRAP_STR" || true if [ -d "$2/debootstrap" ] && ! rmdir "$2/debootstrap"; then cp "$2/debootstrap/debootstrap.log" "${STAGE_WORK_DIR}" @@ -61,19 +58,15 @@ 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}")" + LOOP_DEVICE=$(losetup --list | grep "$1" | cut -f1 -d' ') + if [ -n "$LOOP_DEVICE" ]; then + for part in "$LOOP_DEVICE"p*; do + if DIR=$(findmnt -n -o target -S "$part"); then + unmount "$DIR" fi - sleep 1 - losetup -d "${LOOP_DEV}" - fi - done + done + losetup -d "$LOOP_DEVICE" + fi } export -f unmount_image @@ -94,7 +87,15 @@ on_chroot() { mount --bind /sys "${ROOTFS_DIR}/sys" fi - capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- -e "$@" + if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/run)"; then + mount -t tmpfs tmpfs "${ROOTFS_DIR}/run" + fi + + if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/tmp)"; then + mount -t tmpfs tmpfs "${ROOTFS_DIR}/tmp" + fi + + capsh $CAPSH_ARG "--chroot=${ROOTFS_DIR}/" -- -e "$@" } export -f on_chroot @@ -102,3 +103,11 @@ 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 + +ensure_next_loopdev() { + local loopdev + loopdev="$(losetup -f)" + loopmaj="$(echo "$loopdev" | sed -E 's/.*[^0-9]*?([0-9]+)$/\1/')" + [[ -b "$loopdev" ]] || mknod "$loopdev" b 7 "$loopmaj" +} +export -f ensure_next_loopdev diff --git a/scripts/qcow2_handling b/scripts/qcow2_handling index 6b2a56b..66708e7 100644 --- a/scripts/qcow2_handling +++ b/scripts/qcow2_handling @@ -109,8 +109,8 @@ load_qimage() { EOF sync kpartx -as $NBD_DEV - mkdosfs -n boot -F 32 -v $MAP_BOOT_DEV - mkfs.ext4 -L rootfs -O "^huge_file,^metadata_csum,^64bit" $MAP_ROOT_DEV + mkdosfs -n boot -F 32 -s 4 -v $MAP_BOOT_DEV + mkfs.ext4 -L rootfs -O "^huge_file,^64bit" $MAP_ROOT_DEV sync else if [ ! -f "${WORK_DIR}/image-${PREV_STAGE}.qcow2" ]; then diff --git a/stage0/00-configure-apt/00-run.sh b/stage0/00-configure-apt/00-run.sh index 651d154..c962c35 100755 --- a/stage0/00-configure-apt/00-run.sh +++ b/stage0/00-configure-apt/00-run.sh @@ -12,7 +12,8 @@ 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 > "${STAGE_WORK_DIR}/raspberrypi-archive-stable.gpg" +install -m 644 "${STAGE_WORK_DIR}/raspberrypi-archive-stable.gpg" "${ROOTFS_DIR}/etc/apt/trusted.gpg.d/" on_chroot << EOF dpkg --add-architecture armhf apt-get update 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/stage0/02-firmware/01-packages b/stage0/02-firmware/01-packages index 127bf36..b166aa8 100644 --- a/stage0/02-firmware/01-packages +++ b/stage0/02-firmware/01-packages @@ -1,3 +1,2 @@ raspberrypi-bootloader raspberrypi-kernel -raspi-config diff --git a/stage0/prerun.sh b/stage0/prerun.sh index e001309..e4f85f1 100755 --- a/stage0/prerun.sh +++ b/stage0/prerun.sh @@ -1,5 +1,10 @@ #!/bin/bash -e +if [ "$RELEASE" != "bullseye" ]; then + echo "WARNING: RELEASE does not match the intended option for this branch." + echo " Please check the relevant README.md section." +fi + if [ ! -d "${ROOTFS_DIR}" ] || [ "${USE_QCOW2}" = "1" ]; then bootstrap ${RELEASE} "${ROOTFS_DIR}" http://deb.debian.org/debian/ fi 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/00-run.sh b/stage1/01-sys-tweaks/00-run.sh index 9c380ec..0f761bd 100755 --- a/stage1/01-sys-tweaks/00-run.sh +++ b/stage1/01-sys-tweaks/00-run.sh @@ -8,7 +8,10 @@ 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 + +if [ -n "${FIRST_USER_PASS}" ]; then + echo "${FIRST_USER_NAME}:${FIRST_USER_PASS}" | chpasswd +fi echo "root:root" | chpasswd EOF diff --git a/stage1/03-install-packages/00-packages b/stage1/03-install-packages/00-packages index 73edcc9..a3d2fb6 100644 --- a/stage1/03-install-packages/00-packages +++ b/stage1/03-install-packages/00-packages @@ -1 +1,2 @@ libraspberrypi-bin libraspberrypi0 +systemd-timesyncd diff --git a/stage2/00-copies-and-fills/01-packages b/stage2/00-copies-and-fills/01-packages deleted file mode 100644 index 283c290..0000000 --- a/stage2/00-copies-and-fills/01-packages +++ /dev/null @@ -1 +0,0 @@ -raspi-copies-and-fills diff --git a/stage2/00-copies-and-fills/02-run.sh b/stage2/00-copies-and-fills/02-run.sh deleted file mode 100755 index 366ac24..0000000 --- a/stage2/00-copies-and-fills/02-run.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/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 - diff --git a/stage2/01-sys-tweaks/00-packages b/stage2/01-sys-tweaks/00-packages index 55f8451..6138c6d 100644 --- a/stage2/01-sys-tweaks/00-packages +++ b/stage2/01-sys-tweaks/00-packages @@ -1,5 +1,5 @@ ssh less fbset sudo psmisc strace ed ncdu crda -console-setup keyboard-configuration debconf-utils parted unzip +console-setup keyboard-configuration debconf-utils parted build-essential manpages-dev bash-completion gdb pkg-config python-is-python3 python3-rpi.gpio v4l-utils @@ -30,3 +30,7 @@ ntfs-3g pciutils rpi-eeprom raspinfo +udisks2 +unzip zip p7zip-full +file +kms++-utils diff --git a/stage2/01-sys-tweaks/00-patches/07-resize-init.diff b/stage2/01-sys-tweaks/00-patches/07-resize-init.diff index cb160ae..dfc01d4 100644 --- a/stage2/01-sys-tweaks/00-patches/07-resize-init.diff +++ b/stage2/01-sys-tweaks/00-patches/07-resize-init.diff @@ -2,4 +2,4 @@ +++ stage2/rootfs/boot/cmdline.txt @@ -1 +1 @@ -console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait -+console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh ++console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot diff --git a/stage2/01-sys-tweaks/01-run.sh b/stage2/01-sys-tweaks/01-run.sh index 4a757a1..294a0ec 100755 --- a/stage2/01-sys-tweaks/01-run.sh +++ b/stage2/01-sys-tweaks/01-run.sh @@ -24,8 +24,6 @@ s/^#?[[:blank:]]*PasswordAuthentication[[:blank:]]*yes[[:blank:]]*$/PasswordAuth fi on_chroot << EOF -gcc -march=native -Q --help=target -echo "++++++++++++++++++++++++++++++++++++" systemctl disable hwclock.sh systemctl disable nfs-common systemctl disable rpcbind @@ -54,11 +52,15 @@ on_chroot <> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf" + on_chroot <<- EOF + SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wifi_country "${WPA_COUNTRY}" + EOF fi if [ -v WPA_ESSID ] && [ -v WPA_PASSWORD ]; then diff --git a/stage3/00-install-packages/00-packages b/stage3/00-install-packages/00-packages index 322d338..c88cf4c 100644 --- a/stage3/00-install-packages/00-packages +++ b/stage3/00-install-packages/00-packages @@ -12,4 +12,4 @@ fonts-liberation2 obconf arandr libcamera-tools -libcamera-apps \ No newline at end of file +libcamera-apps diff --git a/stage3/00-install-packages/00-packages-nr b/stage3/00-install-packages/00-packages-nr index f8bff31..8c16b40 100644 --- a/stage3/00-install-packages/00-packages-nr +++ b/stage3/00-install-packages/00-packages-nr @@ -4,3 +4,4 @@ lxde lxtask menu-xdg zenity xdg-utils gvfs-backends gvfs-fuse lightdm gnome-themes-standard gnome-icon-theme +gnome-keyring diff --git a/stage4/00-install-packages/00-packages b/stage4/00-install-packages/00-packages index e76d411..7854596 100644 --- a/stage4/00-install-packages/00-packages +++ b/stage4/00-install-packages/00-packages @@ -23,3 +23,5 @@ piwiz rp-prefapps ffmpeg vlc +rpi-imager +rpi-wayland From 9f555a5e42ac2b1afe7bd6108a83042e80f716dc Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 26 Aug 2023 23:11:02 -0300 Subject: [PATCH 05/17] Patch foxtelem. --- stage4/32-pisdr-foxtelem/00-run.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stage4/32-pisdr-foxtelem/00-run.sh b/stage4/32-pisdr-foxtelem/00-run.sh index d6d090b..3ee8c8e 100755 --- a/stage4/32-pisdr-foxtelem/00-run.sh +++ b/stage4/32-pisdr-foxtelem/00-run.sh @@ -5,9 +5,9 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "FoxTelem" ]; then - wget http://amsat.us/FoxTelem/linux/FoxTelem_1.11g2_linux.tar.gz - tar -xvzf FoxTelem_1.11g2_linux.tar.gz - mv FoxTelem_1.11g2_linux FoxTelem - rm FoxTelem_1.11g2_linux.tar.gz + wget http://amsat.us/FoxTelem/linux/FoxTelem_1.12z3_linux.tar.gz + tar -xvzf FoxTelem_1.12z3_linux.tar.gz + mv FoxTelem_1.12z3_linux FoxTelem + rm FoxTelem_1.12z3_linux.tar.gz fi EOF From c6936048c8d903f007465dca10bff9df0a4a17c6 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 26 Aug 2023 23:11:16 -0300 Subject: [PATCH 06/17] Patch SDR++ to the latest version. --- stage4/33-pisdr-sdrplusplus/00-run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stage4/33-pisdr-sdrplusplus/00-run.sh b/stage4/33-pisdr-sdrplusplus/00-run.sh index 6394fe5..d528d77 100755 --- a/stage4/33-pisdr-sdrplusplus/00-run.sh +++ b/stage4/33-pisdr-sdrplusplus/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "SDRPlusPlus" ]; then - git clone --single-branch --branch 1.0.4 --depth 1 https://github.com/AlexandreRouma/SDRPlusPlus.git + git clone --single-branch --branch master --depth 1 https://github.com/AlexandreRouma/SDRPlusPlus.git fi cd SDRPlusPlus From 984ea8191f2ba9069cb4b7cb35a2783c18136209 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sun, 27 Aug 2023 16:01:48 -0300 Subject: [PATCH 07/17] Patches for sdrangel. --- stage4/18-pisdr-sdrangel/00-packages-nr | 9 +++++++++ stage4/18-pisdr-sdrangel/00-run.sh | 2 +- stage4/18-pisdr-sdrangel/03-run.sh | 2 +- stage4/18-pisdr-sdrangel/04-run.sh | 4 ++-- stage4/18-pisdr-sdrangel/05-run.sh | 2 +- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/stage4/18-pisdr-sdrangel/00-packages-nr b/stage4/18-pisdr-sdrangel/00-packages-nr index 8990ffa..63ca0c6 100644 --- a/stage4/18-pisdr-sdrangel/00-packages-nr +++ b/stage4/18-pisdr-sdrangel/00-packages-nr @@ -41,3 +41,12 @@ libavcodec-dev libavformat-dev libopus-dev graphviz +libqt5texttospeech5-dev +zlib1g-dev +libfaad-dev +libqt5gamepad5-dev +qtbase5-private-dev +qtwebengine5-dev +qml-module-qtquick-controls2 +libspeexdsp-dev +libsamplerate0-dev \ No newline at end of file diff --git a/stage4/18-pisdr-sdrangel/00-run.sh b/stage4/18-pisdr-sdrangel/00-run.sh index 723f8df..370162c 100755 --- a/stage4/18-pisdr-sdrangel/00-run.sh +++ b/stage4/18-pisdr-sdrangel/00-run.sh @@ -13,7 +13,7 @@ git reset --hard c0e92b92aca3d1d36c990b642b937c64d363c559 mkdir -p build cd build cmake -GNinja .. -ninja +ninja install ldconfig cd .. rm -fr build diff --git a/stage4/18-pisdr-sdrangel/03-run.sh b/stage4/18-pisdr-sdrangel/03-run.sh index 4524536..281dda4 100755 --- a/stage4/18-pisdr-sdrangel/03-run.sh +++ b/stage4/18-pisdr-sdrangel/03-run.sh @@ -9,7 +9,7 @@ if [ ! -d "dsdcc" ]; then fi cd dsdcc -git reset --hard "v1.9.0" +git reset --hard "v1.9.3" mkdir -p build cd build cmake -GNinja -DUSE_MBELIB=ON .. diff --git a/stage4/18-pisdr-sdrangel/04-run.sh b/stage4/18-pisdr-sdrangel/04-run.sh index 80ad793..b4174ad 100755 --- a/stage4/18-pisdr-sdrangel/04-run.sh +++ b/stage4/18-pisdr-sdrangel/04-run.sh @@ -5,11 +5,11 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "codec2" ]; then - git clone https://github.com/drowe67/codec2.git + git clone https://github.com/drowe67/codec2-dev.git codec2 fi cd codec2 -git reset --hard 76a20416d715ee06f8b36a9953506876689a3bd2 +git reset --hard "v1.0.3" mkdir -p build cd build cmake -GNinja .. diff --git a/stage4/18-pisdr-sdrangel/05-run.sh b/stage4/18-pisdr-sdrangel/05-run.sh index c967b71..ec793ce 100755 --- a/stage4/18-pisdr-sdrangel/05-run.sh +++ b/stage4/18-pisdr-sdrangel/05-run.sh @@ -11,7 +11,7 @@ fi cd sdrangel mkdir -p build cd build -cmake -GNinja .. +cmake -DSOAPYSDR_DIR=/usr/local -GNinja .. ninja install ldconfig cd .. From 9446958aa787a534e35ef7694684aba34b02503e Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sun, 27 Aug 2023 16:02:13 -0300 Subject: [PATCH 08/17] Remove early exit from gr-limesdr. --- stage4/14-pisdr-gnuradio-mod/01-run.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/stage4/14-pisdr-gnuradio-mod/01-run.sh b/stage4/14-pisdr-gnuradio-mod/01-run.sh index 0434523..0e4a775 100755 --- a/stage4/14-pisdr-gnuradio-mod/01-run.sh +++ b/stage4/14-pisdr-gnuradio-mod/01-run.sh @@ -1,8 +1,5 @@ #!/bin/bash -e -# gr-limesdr doesn't have a stable package for GR3.10 -exit - on_chroot << EOF mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" From 540962987e33e1ef98fbb75c4ffad3b8c2f9a57e Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sun, 27 Aug 2023 16:02:30 -0300 Subject: [PATCH 09/17] Disable iio-osc and urh. --- stage4/35-pisdr-urh/00-run.sh | 7 +++++-- stage4/41-pisdr-iiooscilloscope/00-run.sh | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) mode change 100755 => 100644 stage4/41-pisdr-iiooscilloscope/00-run.sh diff --git a/stage4/35-pisdr-urh/00-run.sh b/stage4/35-pisdr-urh/00-run.sh index 116c3b7..963e98c 100755 --- a/stage4/35-pisdr-urh/00-run.sh +++ b/stage4/35-pisdr-urh/00-run.sh @@ -1,14 +1,17 @@ #!/bin/bash -e +# currently not compiling with latest AirSpy drivers +exit + on_chroot << EOF mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "urh" ]; then - git clone --depth 1 https://github.com/jopohl/urh.git + git clone --depth 1 --branch v2.9.4 https://github.com/jopohl/urh.git fi cd urh -python3 -m pip install --upgrade cython +python3 -m pip install cython==3.0.0 python3 setup.py install EOF \ No newline at end of file diff --git a/stage4/41-pisdr-iiooscilloscope/00-run.sh b/stage4/41-pisdr-iiooscilloscope/00-run.sh old mode 100755 new mode 100644 index 5067473..b531e33 --- a/stage4/41-pisdr-iiooscilloscope/00-run.sh +++ b/stage4/41-pisdr-iiooscilloscope/00-run.sh @@ -1,11 +1,14 @@ #!/bin/bash -e +# currently not compiling with latest Gtk +exit + on_chroot << EOF mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "iio-oscilloscope" ]; then - git clone --depth 1 https://github.com/analogdevicesinc/iio-oscilloscope.git + git clone --depth 1 --branch v0.16-master https://github.com/analogdevicesinc/iio-oscilloscope.git fi cd iio-oscilloscope From 916e7d18e3e9f0ae63a83e9e36e0e80363fbf3f2 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sun, 27 Aug 2023 16:11:01 -0300 Subject: [PATCH 10/17] Remove CI. --- .github/workflows/release.yml | 50 ---------------------------------- .github/workflows/validate.yml | 42 ---------------------------- 2 files changed, 92 deletions(-) delete mode 100644 .github/workflows/release.yml delete mode 100644 .github/workflows/validate.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index a95896a..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,50 +0,0 @@ -on: - release: - types: [ created ] - -name: Build & Deploy Image - -jobs: - build: - name: Build & Release Image - runs-on: ARM64 - timeout-minutes: 2880 - env: - working-directory: ./ - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Clean docker - id: clean_docker - working-directory: ${{ env.working-directory }} - run: | - docker system prune -af - docker system prune --volumes -f - docker image prune -af - docker container stop $(docker container ls -aq) || true - docker container rm $(docker container ls -aq) || true - - name: Build project - id: builder - working-directory: ${{ env.working-directory }} - run: | - bash build-docker.sh - echo ::set-output name=filename::$(ls deploy/*.img.xz | xargs -n 1 basename) - - name: Fix Permissions - id: fix_perm_filename - run: | - chmod a+rw ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} - echo ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} - - name: Upload Release Asset - id: upload-release-asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.LONG_TOKEN }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} - asset_name: ${{ steps.builder.outputs.filename }} - asset_content_type: application/x-tar - - name: Delete Image - id: delete_image - run: | - rm ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml deleted file mode 100644 index 38dcdd2..0000000 --- a/.github/workflows/validate.yml +++ /dev/null @@ -1,42 +0,0 @@ -on: ['pull_request'] - -name: Build & Validate Image - -jobs: - build: - name: Build & Validate Image - runs-on: ARM64 - timeout-minutes: 2880 - env: - working-directory: ./ - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Clean docker - id: clean_docker - working-directory: ${{ env.working-directory }} - run: | - docker system prune -af - docker system prune --volumes -f - docker image prune -af - docker container stop $(docker container ls -aq) || true - docker container rm $(docker container ls -aq) || true - - name: Build project - id: builder - working-directory: ${{ env.working-directory }} - run: | - bash build-docker.sh - echo ::set-output name=filename::$(ls deploy/*.img.xz | xargs -n 1 basename) - - name: Fix Permissions - id: fix_perm_filename - run: | - chmod a+rw ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} - echo ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} - - uses: actions/upload-artifact@v1 - with: - name: ${{ steps.builder.outputs.filename }} - path: ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} - - name: Delete Image - id: delete_image - run: | - rm ${{ env.working-directory }}/deploy/${{ steps.builder.outputs.filename }} From eeaace2e61f3238594da7307a4f11f66b00955ed Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Thu, 12 Oct 2023 01:33:51 -0300 Subject: [PATCH 11/17] Apply upstream Bookworm patches. --- build-docker.sh | 22 +++---- build.sh | 4 +- export-image/02-set-sources/01-run.sh | 2 +- export-image/04-set-partuuid/00-run.sh | 3 +- export-image/05-finalise/01-run.sh | 5 +- export-image/prerun.sh | 12 ++-- stage0/00-configure-apt/files/raspi.list | 4 +- stage0/00-configure-apt/files/sources.list | 12 ++-- stage0/02-firmware/01-packages | 8 ++- stage0/02-firmware/02-run.sh | 3 + stage0/prerun.sh | 2 +- stage1/00-boot-files/00-run.sh | 17 ++++- stage1/00-boot-files/files/config.txt | 62 +++++-------------- stage1/01-sys-tweaks/files/fstab | 2 +- stage2/01-sys-tweaks/00-packages | 13 ++-- .../00-patches/07-resize-init.diff | 4 +- stage2/02-net-tweaks/00-packages | 1 - stage2/02-net-tweaks/01-run.sh | 22 +------ stage3/00-install-packages/00-packages | 2 +- stage3/00-install-packages/00-packages-nr | 3 +- stage3/01-tweaks/00-run.sh | 5 -- stage4/00-install-packages/00-packages | 6 -- stage4/00-install-packages/00-run.sh | 5 ++ stage4/00-install-packages/01-packages | 22 ------- stage4/00-install-packages/01-run.sh | 3 + 25 files changed, 94 insertions(+), 150 deletions(-) create mode 100755 stage0/02-firmware/02-run.sh delete mode 100755 stage3/01-tweaks/00-run.sh create mode 100755 stage4/00-install-packages/00-run.sh delete mode 100644 stage4/00-install-packages/01-packages create mode 100755 stage4/00-install-packages/01-run.sh diff --git a/build-docker.sh b/build-docker.sh index fc0398a..8d71b0f 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -1,6 +1,8 @@ -#!/bin/bash -eu +#!/usr/bin/env bash +# Note: Avoid usage of arrays as MacOS users have an older version of bash (v3.x) which does not supports arrays +set -eu -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)" BUILD_OPTS="$*" @@ -84,18 +86,12 @@ ${DOCKER} build --build-arg BASE_IMAGE=debian:bullseye -t pi-gen "${DIR}" if [ "${CONTAINER_EXISTS}" != "" ]; then DOCKER_CMDLINE_NAME="${CONTAINER_NAME}_cont" - DOCKER_CMDLINE_PRE=( \ - --rm \ - ) - DOCKER_CMDLINE_POST=( \ - --volumes-from="${CONTAINER_NAME}" \ - ) + DOCKER_CMDLINE_PRE="--rm" + DOCKER_CMDLINE_POST="--volumes-from=\"${CONTAINER_NAME}\"" else DOCKER_CMDLINE_NAME="${CONTAINER_NAME}" - DOCKER_CMDLINE_PRE=( \ - ) - DOCKER_CMDLINE_POST=( \ - ) + DOCKER_CMDLINE_PRE="" + DOCKER_CMDLINE_POST="" fi # Check if binfmt_misc is required @@ -136,6 +132,7 @@ fi trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${DOCKER_CMDLINE_NAME}' SIGINT SIGTERM time ${DOCKER} run \ + $DOCKER_CMDLINE_PRE \ --name "${DOCKER_CMDLINE_NAME}" \ --privileged \ --cap-add=ALL \ @@ -144,6 +141,7 @@ time ${DOCKER} run \ ${PIGEN_DOCKER_OPTS} \ --volume "${CONFIG_FILE}":/config:ro \ -e "GIT_HASH=${GIT_HASH}" \ + $DOCKER_CMDLINE_POST \ pi-gen \ bash -e -o pipefail -c " dpkg-reconfigure qemu-user-static && diff --git a/build.sh b/build.sh index 986f81c..22b605d 100755 --- a/build.sh +++ b/build.sh @@ -226,9 +226,7 @@ export TARGET_HOSTNAME=${TARGET_HOSTNAME:-raspberrypi} export FIRST_USER_NAME=${FIRST_USER_NAME:-pi} export FIRST_USER_PASS export DISABLE_FIRST_BOOT_USER_RENAME=${DISABLE_FIRST_BOOT_USER_RENAME:-0} -export RELEASE=${RELEASE:-bullseye} # Don't forget to update stage0/prerun.sh -export WPA_ESSID -export WPA_PASSWORD +export RELEASE=${RELEASE:-bookworm} # Don't forget to update stage0/prerun.sh export WPA_COUNTRY export ENABLE_SSH="${ENABLE_SSH:-0}" export PUBKEY_ONLY_SSH="${PUBKEY_ONLY_SSH:-0}" diff --git a/export-image/02-set-sources/01-run.sh b/export-image/02-set-sources/01-run.sh index 5f51209..6d50496 100755 --- a/export-image/02-set-sources/01-run.sh +++ b/export-image/02-set-sources/01-run.sh @@ -4,6 +4,6 @@ rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" find "${ROOTFS_DIR}/var/lib/apt/lists/" -type f -delete on_chroot << EOF apt-get update -apt-get -y dist-upgrade +apt-get -y dist-upgrade --auto-remove --purge apt-get clean EOF diff --git a/export-image/04-set-partuuid/00-run.sh b/export-image/04-set-partuuid/00-run.sh index 16e1b15..2694295 100755 --- a/export-image/04-set-partuuid/00-run.sh +++ b/export-image/04-set-partuuid/00-run.sh @@ -12,7 +12,6 @@ if [ "${NO_PRERUN_QCOW2}" = "0" ]; then 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" - + sed -i "s/ROOTDEV/PARTUUID=${ROOT_PARTUUID}/" "${ROOTFS_DIR}/boot/firmware/cmdline.txt" fi diff --git a/export-image/05-finalise/01-run.sh b/export-image/05-finalise/01-run.sh index c104366..eae7d6e 100755 --- a/export-image/05-finalise/01-run.sh +++ b/export-image/05-finalise/01-run.sh @@ -3,7 +3,10 @@ IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" INFO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.info" +sed -i 's/^update_initramfs=.*/update_initramfs=all/' "${ROOTFS_DIR}/etc/initramfs-tools/update-initramfs.conf" + on_chroot << EOF +update-initramfs -u if [ -x /etc/init.d/fake-hwclock ]; then /etc/init.d/fake-hwclock stop fi @@ -53,7 +56,7 @@ 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" +install -m 644 "${ROOTFS_DIR}/etc/rpi-issue" "${ROOTFS_DIR}/boot/firmware/issue.txt" cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE" diff --git a/export-image/prerun.sh b/export-image/prerun.sh index 267bbe0..a5f94e9 100755 --- a/export-image/prerun.sh +++ b/export-image/prerun.sh @@ -10,8 +10,8 @@ if [ "${NO_PRERUN_QCOW2}" = "0" ]; then 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) + BOOT_SIZE="$((512 * 1024 * 1024))" + ROOT_SIZE=$(du --apparent-size -s "${EXPORT_ROOTFS_DIR}" --exclude var/cache/apt/archives --exclude boot/firmware --block-size=1 | cut -f 1) # All partition sizes and starts will be aligned to this size ALIGN="$((4 * 1024 * 1024))" @@ -59,9 +59,9 @@ if [ "${NO_PRERUN_QCOW2}" = "0" ]; then 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 + mkdir -p "${ROOTFS_DIR}/boot/firmware" + mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot/firmware" -t vfat - rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/" - rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/" "${ROOTFS_DIR}/boot/" + rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot/firmware "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/" + rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/firmware/" "${ROOTFS_DIR}/boot/firmware/" fi diff --git a/stage0/00-configure-apt/files/raspi.list b/stage0/00-configure-apt/files/raspi.list index 41c5a70..5f889b1 100644 --- a/stage0/00-configure-apt/files/raspi.list +++ b/stage0/00-configure-apt/files/raspi.list @@ -1,3 +1,3 @@ -deb http://archive.raspberrypi.org/debian/ RELEASE main +deb http://archive.raspberrypi.com/debian/ RELEASE main # Uncomment line below then 'apt-get update' to enable 'apt-get source' -#deb-src http://archive.raspberrypi.org/debian/ RELEASE main +#deb-src http://archive.raspberrypi.com/debian/ RELEASE main diff --git a/stage0/00-configure-apt/files/sources.list b/stage0/00-configure-apt/files/sources.list index fa104b7..13697ce 100644 --- a/stage0/00-configure-apt/files/sources.list +++ b/stage0/00-configure-apt/files/sources.list @@ -1,7 +1,7 @@ -deb http://deb.debian.org/debian RELEASE main contrib non-free -deb http://security.debian.org/debian-security RELEASE-security main contrib non-free -deb http://deb.debian.org/debian RELEASE-updates main contrib non-free +deb http://deb.debian.org/debian RELEASE main contrib non-free non-free-firmware +deb http://deb.debian.org/debian-security/ RELEASE-security main contrib non-free non-free-firmware +deb http://deb.debian.org/debian RELEASE-updates main contrib non-free non-free-firmware # Uncomment deb-src lines below then 'apt-get update' to enable 'apt-get source' -#deb-src http://deb.debian.org/debian RELEASE main contrib non-free -#deb-src http://security.debian.org/debian-security RELEASE-security main contrib non-free -#deb-src http://deb.debian.org/debian RELEASE-updates main contrib non-free \ No newline at end of file +#deb-src http://deb.debian.org/debian RELEASE main contrib non-free non-free-firmware +#deb-src http://deb.debian.org/debian-security/ RELEASE-security main contrib non-free non-free-firmware +#deb-src http://deb.debian.org/debian RELEASE-updates main contrib non-free non-free-firmware diff --git a/stage0/02-firmware/01-packages b/stage0/02-firmware/01-packages index b166aa8..a1c3135 100644 --- a/stage0/02-firmware/01-packages +++ b/stage0/02-firmware/01-packages @@ -1,2 +1,6 @@ -raspberrypi-bootloader -raspberrypi-kernel +initramfs-tools +raspi-firmware +linux-image-rpi-v8 +linux-image-rpi-2712 +linux-headers-rpi-v8 +linux-headers-rpi-2712 diff --git a/stage0/02-firmware/02-run.sh b/stage0/02-firmware/02-run.sh new file mode 100755 index 0000000..0b2bca9 --- /dev/null +++ b/stage0/02-firmware/02-run.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e + +sed -i 's/^update_initramfs=.*/update_initramfs=no/' "${ROOTFS_DIR}/etc/initramfs-tools/update-initramfs.conf" diff --git a/stage0/prerun.sh b/stage0/prerun.sh index e4f85f1..da6f50a 100755 --- a/stage0/prerun.sh +++ b/stage0/prerun.sh @@ -1,6 +1,6 @@ #!/bin/bash -e -if [ "$RELEASE" != "bullseye" ]; then +if [ "$RELEASE" != "bookworm" ]; then echo "WARNING: RELEASE does not match the intended option for this branch." echo " Please check the relevant README.md section." fi diff --git a/stage1/00-boot-files/00-run.sh b/stage1/00-boot-files/00-run.sh index bc61397..ddb0f5b 100755 --- a/stage1/00-boot-files/00-run.sh +++ b/stage1/00-boot-files/00-run.sh @@ -1,4 +1,17 @@ #!/bin/bash -e -install -m 644 files/cmdline.txt "${ROOTFS_DIR}/boot/" -install -m 644 files/config.txt "${ROOTFS_DIR}/boot/" +mkdir -p "${ROOTFS_DIR}/boot/firmware" + +if ! [ -L "${ROOTFS_DIR}/boot/overlays" ]; then + ln -s firmware/overlays "${ROOTFS_DIR}/boot/overlays" +fi + +install -m 644 files/cmdline.txt "${ROOTFS_DIR}/boot/firmware/" +if ! [ -L "${ROOTFS_DIR}/boot/cmdline.txt" ]; then + ln -s firmware/cmdline.txt "${ROOTFS_DIR}/boot/cmdline.txt" +fi + +install -m 644 files/config.txt "${ROOTFS_DIR}/boot/firmware/" +if ! [ -L "${ROOTFS_DIR}/boot/config.txt" ]; then + ln -s firmware/config.txt "${ROOTFS_DIR}/boot/config.txt" +fi diff --git a/stage1/00-boot-files/files/config.txt b/stage1/00-boot-files/files/config.txt index c81eb38..a1fdaeb 100644 --- a/stage1/00-boot-files/files/config.txt +++ b/stage1/00-boot-files/files/config.txt @@ -1,73 +1,44 @@ # For more options and information see -# http://rpf.io/configtxt +# http://rptl.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 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=1920 -#framebuffer_height=1080 - -# 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 +# Additional overlays and parameters are documented +# /boot/firmware/overlays/README + # Automatically load overlays for detected cameras camera_auto_detect=1 # Automatically load overlays for detected DSI displays display_auto_detect=1 +# Automatically load initramfs files, if found +auto_initramfs=1 + # Enable DRM VC4 V3D driver dtoverlay=vc4-kms-v3d max_framebuffers=2 +# Don't have the firmware create an initial video= setting in cmdline.txt. +# Use the kernel's default instead. +disable_fw_kms_setup=1 + # Run in 64-bit mode arm_64bit=1 # Disable compensation for displays with overscan disable_overscan=1 +# Run as fast as firmware / board allows +arm_boost=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 @@ -76,8 +47,3 @@ otg_mode=1 [all] -[pi4] -# Run as fast as firmware / board allows -arm_boost=1 - -[all] diff --git a/stage1/01-sys-tweaks/files/fstab b/stage1/01-sys-tweaks/files/fstab index f16e3fb..525c3bc 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/firmware vfat defaults 0 2 ROOTDEV / ext4 defaults,noatime 0 1 diff --git a/stage2/01-sys-tweaks/00-packages b/stage2/01-sys-tweaks/00-packages index 6138c6d..0e6bfb9 100644 --- a/stage2/01-sys-tweaks/00-packages +++ b/stage2/01-sys-tweaks/00-packages @@ -1,13 +1,17 @@ -ssh less fbset sudo psmisc strace ed ncdu crda +ssh less fbset sudo psmisc strace ed ncdu console-setup keyboard-configuration debconf-utils parted build-essential manpages-dev bash-completion gdb pkg-config python-is-python3 -python3-rpi.gpio v4l-utils +v4l-utils +python3-libgpiod python3-gpiozero +pigpio python3-pigpio raspi-gpio python3-rpi.gpio +python3-spidev +python3-smbus2 avahi-daemon lua5.1 luajit -hardlink ca-certificates curl +ca-certificates curl fake-hwclock nfs-common usbutils libraspberrypi-dev libraspberrypi-doc libfreetype6-dev dosfstools @@ -24,12 +28,11 @@ htop man-db policykit-1 ssh-import-id -rng-tools ethtool ntfs-3g pciutils rpi-eeprom -raspinfo +raspi-utils udisks2 unzip zip p7zip-full file diff --git a/stage2/01-sys-tweaks/00-patches/07-resize-init.diff b/stage2/01-sys-tweaks/00-patches/07-resize-init.diff index dfc01d4..e508a9f 100644 --- a/stage2/01-sys-tweaks/00-patches/07-resize-init.diff +++ b/stage2/01-sys-tweaks/00-patches/07-resize-init.diff @@ -1,5 +1,5 @@ ---- stage2.orig/rootfs/boot/cmdline.txt -+++ stage2/rootfs/boot/cmdline.txt +--- stage2.orig/rootfs/boot/firmware/cmdline.txt ++++ stage2/rootfs/boot/firmware/cmdline.txt @@ -1 +1 @@ -console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait +console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot diff --git a/stage2/02-net-tweaks/00-packages b/stage2/02-net-tweaks/00-packages index f0125f6..d446837 100644 --- a/stage2/02-net-tweaks/00-packages +++ b/stage2/02-net-tweaks/00-packages @@ -1,5 +1,4 @@ wpasupplicant wireless-tools firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek raspberrypi-net-mods -dhcpcd5 network-manager net-tools diff --git a/stage2/02-net-tweaks/01-run.sh b/stage2/02-net-tweaks/01-run.sh index 3b06c05..4aa8148 100755 --- a/stage2/02-net-tweaks/01-run.sh +++ b/stage2/02-net-tweaks/01-run.sh @@ -3,38 +3,20 @@ 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 - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_netconf 1 -EOF - if [ -v WPA_COUNTRY ]; then on_chroot <<- EOF SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wifi_country "${WPA_COUNTRY}" EOF fi -if [ -v WPA_ESSID ] && [ -v WPA_PASSWORD ]; then -on_chroot <> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf" << EOL - -network={ - ssid="${WPA_ESSID}" - key_mgmt=NONE -} -EOL -fi - # Disable wifi on 5GHz models if WPA_COUNTRY is not set mkdir -p "${ROOTFS_DIR}/var/lib/systemd/rfkill/" if [ -n "$WPA_COUNTRY" ]; then echo 0 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-3f300000.mmcnr:wlan" echo 0 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-fe300000.mmcnr:wlan" + echo 0 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-1001100000.mmc:wlan" else echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-3f300000.mmcnr:wlan" echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-fe300000.mmcnr:wlan" + echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-1001100000.mmc:wlan" fi diff --git a/stage3/00-install-packages/00-packages b/stage3/00-install-packages/00-packages index c88cf4c..bef9f4a 100644 --- a/stage3/00-install-packages/00-packages +++ b/stage3/00-install-packages/00-packages @@ -1,5 +1,5 @@ gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-libav -qpdfview gtk2-engines alsa-utils +evince gtk2-engines alsa-utils desktop-base git policykit-1 diff --git a/stage3/00-install-packages/00-packages-nr b/stage3/00-install-packages/00-packages-nr index 8c16b40..227c861 100644 --- a/stage3/00-install-packages/00-packages-nr +++ b/stage3/00-install-packages/00-packages-nr @@ -1,7 +1,8 @@ xserver-xorg xinit mousepad +eom lxde lxtask menu-xdg zenity xdg-utils gvfs-backends gvfs-fuse -lightdm gnome-themes-standard gnome-icon-theme +lightdm gnome-themes-extra-data gnome-icon-theme gnome-keyring diff --git a/stage3/01-tweaks/00-run.sh b/stage3/01-tweaks/00-run.sh deleted file mode 100755 index 79b749e..0000000 --- a/stage3/01-tweaks/00-run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -e - -on_chroot << EOF - SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_boot_wait 1 -EOF diff --git a/stage4/00-install-packages/00-packages b/stage4/00-install-packages/00-packages index 7854596..2307752 100644 --- a/stage4/00-install-packages/00-packages +++ b/stage4/00-install-packages/00-packages @@ -2,21 +2,16 @@ python3-pygame python3-tk thonny python3-pgzero python3-serial -python3-picamera debian-reference-en dillo raspberrypi-net-mods raspberrypi-ui-mods python3-pip python3-numpy -pypy alacarte rc-gui sense-hat tree libgl1-mesa-dri libgles1 libgles2-mesa xcompmgr geany piclone -pigpio python3-pigpio raspi-gpio python3-rpi.gpio -python3-spidev python3-twython -python3-smbus python3-flask pprompt piwiz @@ -24,4 +19,3 @@ rp-prefapps ffmpeg vlc rpi-imager -rpi-wayland diff --git a/stage4/00-install-packages/00-run.sh b/stage4/00-install-packages/00-run.sh new file mode 100755 index 0000000..bd8bbc3 --- /dev/null +++ b/stage4/00-install-packages/00-run.sh @@ -0,0 +1,5 @@ +#!/bin/bash -e + +on_chroot << EOF + SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_wayland W2 +EOF diff --git a/stage4/00-install-packages/01-packages b/stage4/00-install-packages/01-packages deleted file mode 100644 index 5441d9d..0000000 --- a/stage4/00-install-packages/01-packages +++ /dev/null @@ -1,22 +0,0 @@ -python3-automationhat -python3-blinkt -python3-cap1xxx -python3-drumhat -python3-envirophat -python3-explorerhat -python3-fourletterphat -python3-microdotphat -python3-mote -python3-motephat -python3-phatbeat -python3-pianohat -python3-piglow -python3-rainbowhat -python3-scrollphat -python3-scrollphathd -python3-sn3218 -python3-skywriter -python3-touchphat -python3-buttonshim -python3-unicornhathd -python3-pantilthat diff --git a/stage4/00-install-packages/01-run.sh b/stage4/00-install-packages/01-run.sh new file mode 100755 index 0000000..44646bd --- /dev/null +++ b/stage4/00-install-packages/01-run.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e + +sed -i 's/^.*HandlePowerKey=.*$/HandlePowerKey=ignore/' "${ROOTFS_DIR}/etc/systemd/logind.conf" From 6ff587411a80d0f49cc6ee668397fddd10a8a268 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Thu, 12 Oct 2023 13:31:26 -0300 Subject: [PATCH 12/17] Patching dependencies. --- stage4/09-pisdr-limesdr/00-packages-nr | 2 +- stage4/24-pisdr-rpitx/00-packages-nr | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stage4/09-pisdr-limesdr/00-packages-nr b/stage4/09-pisdr-limesdr/00-packages-nr index e8fa6ae..85e8f07 100644 --- a/stage4/09-pisdr-limesdr/00-packages-nr +++ b/stage4/09-pisdr-limesdr/00-packages-nr @@ -2,5 +2,5 @@ swig libsqlite3-dev libi2c-dev libusb-1.0-0-dev -libwxgtk3.0-gtk3-dev +libwxgtk3.2-dev freeglut3-dev \ No newline at end of file diff --git a/stage4/24-pisdr-rpitx/00-packages-nr b/stage4/24-pisdr-rpitx/00-packages-nr index 5e3f258..a4d1ca1 100644 --- a/stage4/24-pisdr-rpitx/00-packages-nr +++ b/stage4/24-pisdr-rpitx/00-packages-nr @@ -10,7 +10,7 @@ liblqr-1-0 libmagickcore-6.q16-6 libmagickcore-6.q16-6-extra libmagickwand-6.q16-6 -libnetpbm10 +libnetpbm11 libpng-dev libwmf0.2-7 netpbm \ No newline at end of file From 901e09dadf86201e4897128731754e7b18320f64 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Fri, 13 Oct 2023 00:08:26 -0300 Subject: [PATCH 13/17] Disable Quisk. --- stage4/26-pisdr-quisk/00-run.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stage4/26-pisdr-quisk/00-run.sh b/stage4/26-pisdr-quisk/00-run.sh index 6c2485e..d37f183 100755 --- a/stage4/26-pisdr-quisk/00-run.sh +++ b/stage4/26-pisdr-quisk/00-run.sh @@ -1,5 +1,8 @@ #!/bin/bash -e +# currently not compiling with Bookworm +exit + on_chroot << EOF python3 -m pip install --upgrade quisk EOF \ No newline at end of file From 8fc83d6341acfbc90d63509b4fbadefc888382af Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Fri, 13 Oct 2023 00:08:39 -0300 Subject: [PATCH 14/17] Change RTLSDR Airband branch. --- stage4/28-pisdr-airband/00-run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stage4/28-pisdr-airband/00-run.sh b/stage4/28-pisdr-airband/00-run.sh index 318cfca..d1721f9 100755 --- a/stage4/28-pisdr-airband/00-run.sh +++ b/stage4/28-pisdr-airband/00-run.sh @@ -5,7 +5,7 @@ mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" cd "/home/${FIRST_USER_NAME}/PiSDR/Software" if [ ! -d "RTLSDR-Airband" ]; then - git clone --depth 1 https://github.com/szpajder/RTLSDR-Airband.git + git clone --branch unstable --depth 1 https://github.com/szpajder/RTLSDR-Airband.git fi cd RTLSDR-Airband From 79fa0aa064077420b5400a56cec2577ce17da439 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Fri, 13 Oct 2023 21:22:11 -0300 Subject: [PATCH 15/17] Remove unnecessary packages. --- stage4/00-install-packages/00-packages | 2 -- 1 file changed, 2 deletions(-) diff --git a/stage4/00-install-packages/00-packages b/stage4/00-install-packages/00-packages index 2307752..05e614d 100644 --- a/stage4/00-install-packages/00-packages +++ b/stage4/00-install-packages/00-packages @@ -17,5 +17,3 @@ pprompt piwiz rp-prefapps ffmpeg -vlc -rpi-imager From 78359ef5db899dd19b1330770d9545d7dd291043 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 14 Oct 2023 04:23:12 +0400 Subject: [PATCH 16/17] Remove FoxTelem package. --- README.md | 1 - stage4/32-pisdr-foxtelem/00-run.sh | 13 ------------- 2 files changed, 14 deletions(-) delete mode 100755 stage4/32-pisdr-foxtelem/00-run.sh diff --git a/README.md b/README.md index 2b9f846..2e2f0f4 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,6 @@ List of pre-installed software: - [hamlib](https://hamlib.github.io/) - [VaporTrail](https://github.com/inguardians/VaporTrail) - [Universal Radio Hacker](https://github.com/jopohl/urh) -- [FoxTelem](https://github.com/ac2cz/FoxTelem) - [Quisk](http://james.ahlstrom.name/quisk/) - [0xCoto/VIRGO](https://github.com/0xCoto/VIRGO) - [0xCoto/CygnusRFI](https://github.com/0xCoto/CygnusRFI) diff --git a/stage4/32-pisdr-foxtelem/00-run.sh b/stage4/32-pisdr-foxtelem/00-run.sh deleted file mode 100755 index 3ee8c8e..0000000 --- a/stage4/32-pisdr-foxtelem/00-run.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -e - -on_chroot << EOF -mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" -cd "/home/${FIRST_USER_NAME}/PiSDR/Software" - -if [ ! -d "FoxTelem" ]; then - wget http://amsat.us/FoxTelem/linux/FoxTelem_1.12z3_linux.tar.gz - tar -xvzf FoxTelem_1.12z3_linux.tar.gz - mv FoxTelem_1.12z3_linux FoxTelem - rm FoxTelem_1.12z3_linux.tar.gz -fi -EOF From ee7f34b35a77c0d0acc56dc6ba354497f3f00c76 Mon Sep 17 00:00:00 2001 From: "Luigi F. Cruz" Date: Sat, 14 Oct 2023 04:23:29 +0400 Subject: [PATCH 17/17] Add development preview of CyberEther. --- stage4/32-pisdr-cyberether/00-packages | 12 ++++++++++++ stage4/32-pisdr-cyberether/00-run.sh | 14 ++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 stage4/32-pisdr-cyberether/00-packages create mode 100755 stage4/32-pisdr-cyberether/00-run.sh diff --git a/stage4/32-pisdr-cyberether/00-packages b/stage4/32-pisdr-cyberether/00-packages new file mode 100644 index 0000000..a53a7de --- /dev/null +++ b/stage4/32-pisdr-cyberether/00-packages @@ -0,0 +1,12 @@ +git +build-essential +cmake +pkg-config +ninja-build +meson +mesa-vulkan-drivers +libvulkan-dev +spirv-cross +glslang-tools +libglfw3-dev +libfftw3-dev \ No newline at end of file diff --git a/stage4/32-pisdr-cyberether/00-run.sh b/stage4/32-pisdr-cyberether/00-run.sh new file mode 100755 index 0000000..fc864bb --- /dev/null +++ b/stage4/32-pisdr-cyberether/00-run.sh @@ -0,0 +1,14 @@ +#!/bin/bash -e + +on_chroot << EOF +mkdir -p "/home/${FIRST_USER_NAME}/PiSDR/Software" +cd "/home/${FIRST_USER_NAME}/PiSDR/Software" + +if [ ! -d "CyberEther" ]; then + git clone --branch development --depth 1 https://github.com/luigifcruz/CyberEther.git + cd CyberEther + meson -Dbuildtype=debugoptimized build + cd build + ninja +fi +EOF