From 4ab6c46a27530bc624bf1235bc5ffb71b6d70c47 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Tue, 20 Dec 2022 15:31:51 +0100 Subject: [PATCH] Add automated image builds for VM, bare metal (amd64) and RPi (arm64-rpi) (#3486) * add amd64 image build with lean and fatpack option * use the pi user for setup * add notes to ci readme * add gnome desktop to fatpack image, reduce to 30GB * documentation updates * install gnome with --force-yes * install gnome desktop non-interactively * change links to rootzoll dev * pass user and branch to build_sdcard.sh from PR * add user and branch to Makefile * Add arm64 rpi image build (#74) ci: * add arm64-rpi image build * rename to raspiblitz-amd64-debian-11.5-lean/fatpack * use rm -f to not exit with error * place amd64 images under ci/amd64/builds/ * make /dev/shm world writable for fatpack * fix vlc remove and --var syntax * remove sudo-s * leave update and upgrade to the build_sdcard.sh * increase image size to 16GB, rename build dir build_sdcard.sh: * detect raspios_arm64 with raspi.list * switch ssmtp to msmtp related: https://github.com/rootzoll/raspiblitz/pull/2232 Co-authored-by: rootzoll * i2pd: unified install from repo, /usr/sbin to PATH related: #2413, fixes amd64 build * update CHANGES.md * fix amd64 path in Makefile * use only qemu image, run on ubuntu-22.04 * use file_checksum for the arm64-rpi base image * Fix the local arm64-rpi image generation (#75) * add selfrun script * ubuntu: add universe repo and qemu-user-static * test on ubuntu live (jammy) * build from branches: [ "dev", "v1.8", "v1.9" ] * correct Makefile paths for the local run * make the local run non-interactive * improve readme and Makefile * increase disk image sizes to 32GB * set image sizes to 30 GB for amd64 and arm64-rpi * add network-manager for amd64 * add to readme * skip Code&Compile for VM builds * add to readme * amd64 base image update to debian 11.6.0 * remove debian version from filenames * skip Code&Compile for amd64 builds * Merge branch 'dev' into add-amd64-image-build * amd64: increase cpu and RAM, compile mempool last * trigger workflows only on scripts used or called * Update ci/arm64-rpi/packer.build.arm64-rpi.sh Co-authored-by: Daniel Bast <2790401+dbast@users.noreply.github.com> * arm64 remove setup-qemu-action, leave npm last * set only manual trigger for fatpack, edit triggers Co-authored-by: rootzoll Co-authored-by: Daniel Bast <2790401+dbast@users.noreply.github.com> --- .github/workflows/amd64-fatpack-image.yml | 89 ++++++++ .github/workflows/amd64-lean-image.yml | 67 ++++++ .github/workflows/arm64-rpi-fatpack-image.yml | 89 ++++++++ .github/workflows/arm64-rpi-lean-image.yml | 67 ++++++ .gitignore | 4 + CHANGES.md | 6 +- Makefile | 83 +++++++ alternative.platforms/README.md | 60 +----- build_sdcard.sh | 30 +-- ci/README.md | 202 ++++++++++++++++++ ci/amd64/_common/sshd.sh | 20 ++ ci/amd64/debian/amd64-debian.json | 81 +++++++ ci/amd64/debian/http/debian-9/preseed.cfg | 47 ++++ ci/amd64/debian/scripts/cleanup.sh | 55 +++++ ci/amd64/debian/scripts/networking.sh | 9 + ci/amd64/debian/scripts/raspiblitz.sh | 19 ++ ci/amd64/debian/scripts/sudoers.sh | 9 + ci/amd64/debian/scripts/systemd.sh | 4 + ci/amd64/debian/scripts/update.sh | 19 ++ ci/amd64/packer.build.amd64-debian.sh | 37 ++++ ci/arm64-rpi/arm64-rpi.pkr.hcl | 66 ++++++ ci/arm64-rpi/packer.build.arm64-rpi.local.sh | 79 +++++++ ci/arm64-rpi/packer.build.arm64-rpi.sh | 26 +++ ci/arm64-rpi/raspiblitz.sh | 15 ++ home.admin/_cache.sh | 4 +- .../raspiblitz-amd64-v1.7.2-2022-04-03.magnet | 1 - ...raspiblitz-amd64-v1.7.2-2022-04-03.torrent | Bin 105344 -> 0 bytes home.admin/config.scripts/blitz.i2pd.sh | 34 +-- 28 files changed, 1128 insertions(+), 94 deletions(-) create mode 100644 .github/workflows/amd64-fatpack-image.yml create mode 100644 .github/workflows/amd64-lean-image.yml create mode 100644 .github/workflows/arm64-rpi-fatpack-image.yml create mode 100644 .github/workflows/arm64-rpi-lean-image.yml create mode 100644 Makefile create mode 100644 ci/README.md create mode 100644 ci/amd64/_common/sshd.sh create mode 100644 ci/amd64/debian/amd64-debian.json create mode 100644 ci/amd64/debian/http/debian-9/preseed.cfg create mode 100644 ci/amd64/debian/scripts/cleanup.sh create mode 100644 ci/amd64/debian/scripts/networking.sh create mode 100644 ci/amd64/debian/scripts/raspiblitz.sh create mode 100644 ci/amd64/debian/scripts/sudoers.sh create mode 100644 ci/amd64/debian/scripts/systemd.sh create mode 100644 ci/amd64/debian/scripts/update.sh create mode 100644 ci/amd64/packer.build.amd64-debian.sh create mode 100644 ci/arm64-rpi/arm64-rpi.pkr.hcl create mode 100644 ci/arm64-rpi/packer.build.arm64-rpi.local.sh create mode 100644 ci/arm64-rpi/packer.build.arm64-rpi.sh create mode 100644 ci/arm64-rpi/raspiblitz.sh delete mode 100644 home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.magnet delete mode 100644 home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.torrent diff --git a/.github/workflows/amd64-fatpack-image.yml b/.github/workflows/amd64-fatpack-image.yml new file mode 100644 index 000000000..11e2b30c1 --- /dev/null +++ b/.github/workflows/amd64-fatpack-image.yml @@ -0,0 +1,89 @@ +name: amd64-fatpack-image-build + +on: + workflow_dispatch: + #push: + # branches: [ "dev", "v1.8", "v1.9" ] + # paths: + # - 'build_sdcard.sh' + # - 'home.admin/bitcoin.install.sh' + # - 'home.admin/lnd.install.sh' + # - 'home.admin/cl.install.sh' + # - 'home.admin/cl-plugin.cln-grpc.sh' + # - 'home.admin/tor.install.sh' + # - 'home.admin/blitz.i2pd.sh' + # - 'home.admin/blitz.web.sh' + # - 'home.admin/bonus.nodejs.sh' + # - 'home.admin/bonus.rtl.sh' + # - 'home.admin/bonus.btcpayserver.sh' + # - 'home.admin/bonus.thunderhub.sh' + # - 'home.admin/bonus.jam.sh install' + # - 'home.admin/bonus.mempool.sh' + # - 'home.admin/blitz.web.api.sh' + # - 'home.admin/blitz.web.ui.sh' + # - 'home.admin/blitz.display.sh' + # - 'ci/amd64/**' + #pull_request: + # branches: [ "dev", "v1.8", "v1.9" ] + # paths: + # - 'build_sdcard.sh' + # - 'home.admin/bitcoin.install.sh' + # - 'home.admin/lnd.install.sh' + # - 'home.admin/cl.install.sh' + # - 'home.admin/cl-plugin.cln-grpc.sh' + # - 'home.admin/tor.install.sh' + # - 'home.admin/blitz.i2pd.sh' + # - 'home.admin/blitz.web.sh' + # - 'home.admin/bonus.nodejs.sh' + # - 'home.admin/bonus.rtl.sh' + # - 'home.admin/bonus.btcpayserver.sh' + # - 'home.admin/bonus.thunderhub.sh' + # - 'home.admin/bonus.jam.sh install' + # - 'home.admin/bonus.mempool.sh' + # - 'home.admin/blitz.web.api.sh' + # - 'home.admin/blitz.web.ui.sh' + # - 'home.admin/blitz.display.sh' + # - 'ci/amd64/**' + +jobs: + amd64-image-build: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Set values + run: | + echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV + echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV + + - name: Hello RaspiBlitz + run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}} at " + + - name: Run the build script + run: | + cd ci/amd64 + bash packer.build.amd64-debian.sh fatpack $GITHUB_ACTOR $GITHUB_HEAD_REF + + - name: Compute checksum of the raw image + run: | + cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/ + sha256sum raspiblitz-amd64-debian-fatpack.qcow2 > raspiblitz-amd64-debian-fatpack.qcow2.sha256 + + - name: Compress image + run: | + cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/ + gzip -v9 raspiblitz-amd64-debian-fatpack.qcow2 + + - name: Compute checksum of the compressed image + run: | + cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/ + sha256sum raspiblitz-amd64-debian-fatpack.qcow2.gz > raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256 + + - name: Upload the image and checksums + uses: actions/upload-artifact@v3 + with: + name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}} + path: | + ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.sha256 + ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz + ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256 diff --git a/.github/workflows/amd64-lean-image.yml b/.github/workflows/amd64-lean-image.yml new file mode 100644 index 000000000..5dbc708de --- /dev/null +++ b/.github/workflows/amd64-lean-image.yml @@ -0,0 +1,67 @@ +name: amd64-lean-image-build + +on: + workflow_dispatch: + push: + branches: [ "dev", "v1.8", "v1.9" ] + paths: + - 'build_sdcard.sh' + - 'home.admin/bitcoin.install.sh' + - 'home.admin/tor.install.sh' + - 'home.admin/blitz.i2pd.sh' + - 'home.admin/blitz.web.sh' + - 'home.admin/blitz.display.sh' + - 'ci/amd64/**' + pull_request: + branches: [ "dev", "v1.8", "v1.9" ] + paths: + - 'build_sdcard.sh' + - 'home.admin/bitcoin.install.sh' + - 'home.admin/tor.install.sh' + - 'home.admin/blitz.i2pd.sh' + - 'home.admin/blitz.web.sh' + - 'home.admin/blitz.display.sh' + - 'ci/amd64/**' + +jobs: + amd64-image-build: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Set values + run: | + echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV + echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV + + - name: Hello RaspiBlitz + run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}" + + - name: Run the build script + run: | + cd ci/amd64 + bash packer.build.amd64-debian.sh lean $GITHUB_ACTOR $GITHUB_HEAD_REF + + - name: Compute checksum of the raw image + run: | + cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu + sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256 + + - name: Compress image + run: | + cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu + gzip -v9 raspiblitz-amd64-debian-lean.qcow2 + + - name: Compute checksum of the compressed image + run: | + cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu + sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256 + + - name: Upload the image and checksums + uses: actions/upload-artifact@v3 + with: + name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}} + path: | + ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.sha256 + ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz + ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz.sha256 diff --git a/.github/workflows/arm64-rpi-fatpack-image.yml b/.github/workflows/arm64-rpi-fatpack-image.yml new file mode 100644 index 000000000..a524a3dea --- /dev/null +++ b/.github/workflows/arm64-rpi-fatpack-image.yml @@ -0,0 +1,89 @@ +name: arm64-rpi-fatpack-image-build + +on: + workflow_dispatch: + #push: + # branches: [ "dev", "v1.8", "v1.9" ] + # paths: + # - 'build_sdcard.sh' + # - 'home.admin/bitcoin.install.sh' + # - 'home.admin/lnd.install.sh' + # - 'home.admin/cl.install.sh' + # - 'home.admin/cl-plugin.cln-grpc.sh' + # - 'home.admin/tor.install.sh' + # - 'home.admin/blitz.i2pd.sh' + # - 'home.admin/blitz.web.sh' + # - 'home.admin/bonus.nodejs.sh' + # - 'home.admin/bonus.rtl.sh' + # - 'home.admin/bonus.btcpayserver.sh' + # - 'home.admin/bonus.thunderhub.sh' + # - 'home.admin/bonus.jam.sh install' + # - 'home.admin/bonus.mempool.sh' + # - 'home.admin/blitz.web.api.sh' + # - 'home.admin/blitz.web.ui.sh' + # - 'home.admin/blitz.display.sh' + # - 'ci/arm64-rpi/**' + #pull_request: + # branches: [ "dev", "v1.8", "v1.9" ] + # paths: + # - 'build_sdcard.sh' + # - 'home.admin/bitcoin.install.sh' + # - 'home.admin/lnd.install.sh' + # - 'home.admin/cl.install.sh' + # - 'home.admin/cl-plugin.cln-grpc.sh' + # - 'home.admin/tor.install.sh' + # - 'home.admin/blitz.i2pd.sh' + # - 'home.admin/blitz.web.sh' + # - 'home.admin/bonus.nodejs.sh' + # - 'home.admin/bonus.rtl.sh' + # - 'home.admin/bonus.btcpayserver.sh' + # - 'home.admin/bonus.thunderhub.sh' + # - 'home.admin/bonus.jam.sh install' + # - 'home.admin/bonus.mempool.sh' + # - 'home.admin/blitz.web.api.sh' + # - 'home.admin/blitz.web.ui.sh' + # - 'home.admin/blitz.display.sh' + # - 'ci/arm64-rpi/**' + +jobs: + arm64-rpi-image-build: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Set values + run: | + echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV + echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV + + - name: Hello Raspiblitz + run: echo "Building the raspiblitz-arm64-rpi-fatpack-image-${{ env.BUILD_DATE }}-${{ env.BUILD_VERSION }}" + + - name: Run the build script + run: | + cd ci/arm64-rpi + bash packer.build.arm64-rpi.sh fatpack $GITHUB_ACTOR $GITHUB_HEAD_REF + + - name: Compute checksum of the raw image + run: | + cd ci/arm64-rpi + sha256sum raspiblitz-arm64-rpi-fatpack.img > raspiblitz-arm64-rpi-fatpack.img.sha256 + + - name: Compress image + run: | + cd ci/arm64-rpi + gzip -v9 raspiblitz-arm64-rpi-fatpack.img + + - name: Compute checksum of the compressed image + run: | + cd ci/arm64-rpi + sha256sum raspiblitz-arm64-rpi-fatpack.img.gz > raspiblitz-arm64-rpi-fatpack.img.gz.sha256 + + - name: Upload the image and checksums + uses: actions/upload-artifact@v3 + with: + name: raspiblitz-arm64-fatpack-rpi-image-${{ env.BUILD_DATE }}-${{ env.BUILD_VERSION }} + path: | + ${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-fatpack.img.sha256 + ${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-fatpack.img.gz + ${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-fatpack.img.gz.sha256 diff --git a/.github/workflows/arm64-rpi-lean-image.yml b/.github/workflows/arm64-rpi-lean-image.yml new file mode 100644 index 000000000..ef1f0d5f4 --- /dev/null +++ b/.github/workflows/arm64-rpi-lean-image.yml @@ -0,0 +1,67 @@ +name: arm64-rpi-lean-image-build + +on: + workflow_dispatch: + push: + branches: [ "dev", "v1.8", "v1.9" ] + paths: + - 'build_sdcard.sh' + - 'home.admin/bitcoin.install.sh' + - 'home.admin/tor.install.sh' + - 'home.admin/blitz.i2pd.sh' + - 'home.admin/blitz.web.sh' + - 'home.admin/blitz.display.sh' + - 'ci/arm64-rpi/**' + pull_request: + branches: [ "dev", "v1.8", "v1.9" ] + paths: + - 'build_sdcard.sh' + - 'home.admin/bitcoin.install.sh' + - 'home.admin/tor.install.sh' + - 'home.admin/blitz.i2pd.sh' + - 'home.admin/blitz.web.sh' + - 'home.admin/blitz.display.sh' + - 'ci/arm64-rpi/**' + +jobs: + arm64-rpi-image-build: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Set values + run: | + echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV + echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV + + - name: Hello Raspiblitz + run: echo "Building the raspiblitz-arm64-rpi-lean-image-${{ env.BUILD_DATE }}-${{ env.BUILD_VERSION }}" + + - name: Run the build script + run: | + cd ci/arm64-rpi + bash packer.build.arm64-rpi.sh lean $GITHUB_ACTOR $GITHUB_HEAD_REF + + - name: Compute checksum of the raw image + run: | + cd ci/arm64-rpi + sha256sum raspiblitz-arm64-rpi-lean.img > raspiblitz-arm64-rpi-lean.img.sha256 + + - name: Compress image + run: | + cd ci/arm64-rpi + gzip -v9 raspiblitz-arm64-rpi-lean.img + + - name: Compute checksum of the compressed image + run: | + cd ci/arm64-rpi + sha256sum raspiblitz-arm64-rpi-lean.img.gz > raspiblitz-arm64-rpi-lean.img.gz.sha256 + + - name: Upload the image and checksums + uses: actions/upload-artifact@v3 + with: + name: raspiblitz-arm64-rpi-image-${{ env.BUILD_DATE }}-${{ env.BUILD_VERSION }} + path: | + ${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-lean.img.sha256 + ${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-lean.img.gz + ${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-lean.img.gz.sha256 diff --git a/.gitignore b/.gitignore index c9e4a7a5e..bd8d9ea68 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ __pycache__ lightning_pb2.pyc lightning_pb2_grpc.pyc /.vagrant/ +ci/amd64/builds +ci/arm64-rpi/raspiblitz-arm64-rpi* +ci/arm64-rpi/.packer* +ci/arm64-rpi/packer-builder-arm diff --git a/CHANGES.md b/CHANGES.md index 090b8d4df..73ed899d4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,8 @@ ## What's new in Version 1.9.0 of RaspiBlitz? -- New: CL Watchtower (The Eye of Satoshi) [details](https://github.com/talaia-labs/rust-teos/tree/master/watchtower-plugin) +- New: Automated disk image build for amd64 (VM, laptop, desktop, server) and arm64-rpi (Raspberry Pi) [details](https://github.com/rootzoll/raspiblitz/tree/dev/ci/README.md) +- New: CLN Watchtower (The Eye of Satoshi) [details](https://github.com/talaia-labs/rust-teos/tree/master/watchtower-plugin) - New: LNDg v1.4.0 [details](https://github.com/cryptosharks131/lndg) - New: Support of X708 UPS HAT [details](https://github.com/rootzoll/raspiblitz/pull/3087) - New: BOS Telegram Bot Support (see OPTIONS on LND Balance of Satoshis menu entry) @@ -21,10 +22,9 @@ - Update: Channel Tools (chantools) v0.10.5 [details](https://github.com/guggero/chantools/releases/tag/v0.10.5) - Update: JoinMarket v0.9.8 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.8) - Update: JoininBox v0.7.4 [details](https://github.com/openoms/joininbox/releases/tag/v0.7.3) -- Update: Electrum Server in Rust (electrs) v0.9.9 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#099-jul-12-2022) - Update: Balance of Satoshis 13.6.0 (BOS) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#1360) - Update: Circuitbreaker v0.3.2 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) -- Fixed: SCB/Emergency-Backup to USB drive (now also with cln emergency file) +- Fixed: SCB/Emergency-Backup to USB drive (now also with CLN emergency.recover file) - Info: Run RaspiBlitz on Proxmox [details](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/Proxmox) - Info: IP2Tor unavailable & deactivated in SSH menus [details](https://github.com/rootzoll/raspiblitz/issues/3417#issuecomment-1310303480) - Info: 32GB sdcard is now enforced (after being recommended since v1.5) diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..e50f48d11 --- /dev/null +++ b/Makefile @@ -0,0 +1,83 @@ +SHELL = /bin/bash +GITHUB_ACTOR = $(shell git remote -v | grep origin | head -1 | cut -d/ -f4) +GITHUB_HEAD_REF = $(shell git rev-parse --abbrev-ref HEAD) + +amd64-lean-image: + # Run the build script + cd ci/amd64 && \ + bash packer.build.amd64-debian.sh lean $(GITHUB_ACTOR) $(GITHUB_HEAD_REF) 0 + + # Compute the checksum of the qemu image + cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \ + sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256 + + # Compress the image + cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \ + gzip -v9 raspiblitz-amd64-debian-lean.qcow2 + + # Compute the checksum of the compressed image + cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \ + sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256 + + # List the generated files + ls -lah ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.* + +amd64-fatpack-image: + # Run the build script + cd ci/amd64 && \ + bash packer.build.amd64-debian.sh fatpack $(GITHUB_ACTOR) $(GITHUB_HEAD_REF) + + # Compute the checksum of the qemu image + cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu && \ + sha256sum raspiblitz-amd64-debian-fatpack.qcow2 > raspiblitz-amd64-debian-fatpack.qcow2.sha256 + + # Compress the image + cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu && \ + gzip -v9 raspiblitz-amd64-debian-fatpack.qcow2 + + # Compute the checksum of the compressed image + cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu && \ + sha256sum raspiblitz-amd64-debian-fatpack.qcow2.gz > raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256 + + # List the generated files + ls -lah ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-fatpack.qcow2.* + +arm64-rpi-lean-image: + # Run the build script + cd ci/arm64-rpi && \ + bash packer.build.arm64-rpi.local.sh lean $(GITHUB_ACTOR) $(GITHUB_HEAD_REF) + + # Compute the checksum of the raw image + cd ci/arm64-rpi/packer-builder-arm && \ + sha256sum raspiblitz-arm64-rpi-lean.img > raspiblitz-arm64-rpi-lean.img.sha256 + + # Compress the image + cd ci/arm64-rpi/packer-builder-arm && \ + gzip -v9 raspiblitz-arm64-rpi-lean.img + + # Compute the checksum of the compressed image + cd ci/arm64-rpi/packer-builder-arm && \ + sha256sum raspiblitz-arm64-rpi-lean.img.gz > raspiblitz-arm64-rpi-lean.img.gz.sha256 + + # List the generated files + ls -lah ci/arm64-rpi/packer-builder-arm/raspiblitz-arm64-rpi-lean.img.* + +arm64-rpi-fatpack-image: + # Run the build script + cd ci/arm64-rpi && \ + bash packer.build.arm64-rpi.local.sh fatpack $(GITHUB_ACTOR) $(GITHUB_HEAD_REF) + + # Compute the checksum of the raw image + cd ci/arm64-rpi/packer-builder-arm && \ + sha256sum raspiblitz-arm64-rpi-fatpack.img > raspiblitz-arm64-rpi-fatpack.img.sha256 + + # Compress the image + cd ci/arm64-rpi/packer-builder-arm && \ + gzip -v9 raspiblitz-arm64-rpi-fatpack.img + + # Compute the checksum of the compressed image + cd ci/arm64-rpi/packer-builder-arm && \ + sha256sum raspiblitz-arm64-rpi-fatpack.img.gz > raspiblitz-arm64-rpi-fatpack.img.gz.sha256 + + # List the generated files + ls -lah ci/arm64-rpi/packer-builder-arm/raspiblitz-arm64-rpi-fatpack.img.* diff --git a/alternative.platforms/README.md b/alternative.platforms/README.md index ba5de52c5..6ada47bfb 100644 --- a/alternative.platforms/README.md +++ b/alternative.platforms/README.md @@ -4,11 +4,7 @@ - [Recommended specs](#recommended-specs) - [amd64 image](#amd64-image) - [Requirements](#requirements) - - [Download](#download) - - [Verify](#verify) - - [Write the image to the OS disk](#write-the-image-to-the-os-disk) - - [Extend the partition](#extend-the-partition) - - [Start the Raspiblitz setup](#start-the-raspiblitz-setup) + - [Automated builds](#automated-builds) - [Virtual Machine](#virtual-machine) - [Create the base image](#create-the-base-image) - [Building the Raspiblitz scripts](#building-the-raspiblitz-scripts) @@ -17,7 +13,7 @@ - [Armbian](#armbian) - [Ubuntu](#ubuntu) - [Python upgrade](#python-upgrade) -- [Create an image release for amd64](#create-an-image-release-for-amd64) +- [Manual image release for amd64](#manual-image-release-for-amd64) - [Requirements:](#requirements-1) - [Create an NTFS formatted USB Stick / USB disk](#create-an-ntfs-formatted-usb-stick--usb-disk) - [Boot Ubuntu Live from USB](#boot-ubuntu-live-from-usb) @@ -30,10 +26,9 @@ - [Start Tails](#start-tails) - [Import the signing keys](#import-the-signing-keys) - [Prepare the disk](#prepare-the-disk) -- [Verify the downloaded image](#verify-the-downloaded-image) - - [Linux instructions](#linux-instructions) -- [Create a torrent](#create-a-torrent) -- [Switch off sleep, suspend and hibernation](#switch-off-sleep-suspend-and-hibernation) + - [Verify the downloaded image](#verify-the-downloaded-image) + - [Linux instructions](#linux-instructions) + - [Create a torrent](#create-a-torrent) ## Minimum requirements * ARMv8 or x86 processor (64 bit) @@ -51,7 +46,6 @@ Specifications of the tested hardware: [hw_comparison.md](hw_comparison.md) All testers are welcome. Open an issue for your specific board to collaborate and share your experience. ## amd64 image - ### Requirements * amd64 Laptop, Desktop or Server connected to the internet via a LAN cable @@ -61,35 +55,8 @@ All testers are welcome. Open an issue for your specific board to collaborate an * if the laptop has an optical drive an [Optical Drive Bay Caddy / adapter](https://www.amazon.co.uk/dp/B07SHSCVC7/) can be used to change it to a second SSD instead. * `Data disk`: a new, minimum 1TB SSD is recommended - stores data independent of the operating system * usually placed internally - - -### Download - * raspiblitz-amd64-v1.7.2-2022-04-03 - * manually created with the [process described below](#Create-an-image-release-for-amd64) from the [`dev` branch](https://github.com/rootzoll/raspiblitz/tree/dev) at [43c7384](https://github.com/rootzoll/raspiblitz/tree/43c7384cb70523c57990e0c409d51cfd7b818a10) - * Torrent [file](/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.torrent) and [magnet link](/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.magnet) - * Direct downloads: - * https://mega.nz/folder/AlsC0A4L#mTPOke2OLJIGU4iMyAqwBw - * https://keybase.pub/oms/images/raspiblitz-amd64-v1.7.2-2022-04-03 - ``` - # download from keybase using the command line - mkdir raspiblitz-amd64-v1.7.2-2022-04-03 - cd raspiblitz-amd64-v1.7.2-2022-04-03 - wget -c https://oms.keybase.pub/images/raspiblitz-amd64-v1.7.2-2022-04-03/raspiblitz-amd64-v1.7.2-2022-04-03.img.gz - wget -c https://oms.keybase.pub/images/raspiblitz-amd64-v1.7.2-2022-04-03/raspiblitz-amd64-v1.7.2-2022-04-03.img.gz.sha256 - wget -c https://oms.keybase.pub/images/raspiblitz-amd64-v1.7.2-2022-04-03/raspiblitz-amd64-v1.7.2-2022-04-03.img.gz.sha256.asc - ``` - -### [Verify](#Verify-the-downloaded-image) -### Write the image to the OS disk -* On a separate computer: write the image to the USB connected OSdisk or SDcard with [Balena Etcher](https://www.balena.io/etcher/) -* On the same computer: boot an Ubuntu Live from USB with which the image can be downloaded, verified and flashed on an internal or USB connected OS disk -### Extend the partition -* start Disks or any partition manager and extend the partition to the full size of the disk on the OS disk (just flashed) - -### Start the Raspiblitz setup -* Assemble and start the computer. -* Log in with admin and open a terminal on the local desktop or log in with ssh (username `admin` password: `raspiblitz`) -* Continue the setup as described in the [main readme](https://github.com/rootzoll/raspiblitz#setup-process-detailed-documentation) +### Automated builds +* find the download links or build locally with the instructions in: [/ci/README.md](/ci/README.md) ## Virtual Machine @@ -233,7 +200,7 @@ Continue with building the SDcard: https://github.com/rootzoll/raspiblitz#build- python3 --version ``` -## Create an image release for amd64 +## Manual image release for amd64 Work notes partially based on: https://github.com/rootzoll/raspiblitz/blob/v1.7/FAQ.md#what-is-the-process-of-creating-a-new-sd-card-image-release @@ -386,8 +353,8 @@ Work notes partially based on: https://github.com/rootzoll/raspiblitz/blob/v1.7/ * Upload the new image to server - put the .sig file and .sha256 next to it * Copy the sha256sum to GitHub README and update the download link -## Verify the downloaded image -### Linux instructions +### Verify the downloaded image +#### Linux instructions * Open a terminal in the directory with the downloaded files ``` raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz @@ -416,7 +383,7 @@ Work notes partially based on: https://github.com/rootzoll/raspiblitz/blob/v1.7/ # raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz: OK ``` -## Create a torrent +### Create a torrent * Create Torrent file from image (for example with Transmission / qbBittorrent) and place in the `home.admin/assets` folder & link on README * Tracker list recommended to be used with the torrent: ``` @@ -449,8 +416,3 @@ Work notes partially based on: https://github.com/rootzoll/raspiblitz/blob/v1.7/ # Compare the sha256 hash to the hash of the image file (Look for the output 'OK'): shasum -c *.sha256 ``` -## Switch off sleep, suspend and hibernation -* Run in the terminal: - ``` - sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target - ``` diff --git a/build_sdcard.sh b/build_sdcard.sh index ccecb9f66..c704af40d 100644 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -223,7 +223,7 @@ esac # AUTO-DETECTION: OPERATINGSYSTEM # --------------------------------------- if [ $(cat /etc/os-release 2>/dev/null | grep -c 'Debian') -gt 0 ]; then - if [ $(uname -n | grep -c 'raspberrypi') -gt 0 ] && [ "${cpu}" = aarch64 ]; then + if [ -f /etc/apt/sources.list.d/raspi.list ] && [ "${cpu}" = aarch64 ]; then # default image for RaspberryPi baseimage="raspios_arm64" elif [ $(uname -n | grep -c 'rpi') -gt 0 ] && [ "${cpu}" = aarch64 ]; then @@ -279,7 +279,7 @@ if [ "${baseimage}" = "raspios_arm64" ]||[ "${baseimage}" = "debian_rpi64" ]||[ fi echo "*** Remove unnecessary packages ***" -sudo apt remove --purge -y libreoffice* oracle-java* chromium-browser nuscratch scratch sonic-pi plymouth python2 vlc cups +sudo apt remove --purge -y libreoffice* oracle-java* chromium-browser nuscratch scratch sonic-pi plymouth python2 vlc* cups sudo apt clean -y sudo apt autoremove -y @@ -313,7 +313,9 @@ general_utils="policykit-1 htop git curl bash-completion vim jq dphys-swapfile b python_dependencies="python3-venv python3-dev python3-wheel python3-jinja2 python3-pip python3-mako" server_utils="rsync net-tools xxd netcat openssh-client openssh-sftp-server sshpass psmisc ufw sqlite3" [ "${baseimage}" = "armbian" ] && armbian_dependencies="armbian-config" # add armbian-config -apt_install ${general_utils} ${python_dependencies} ${server_utils} ${armbian_dependencies} +[ "${architecture}" = "amd64" ] && amd64_dependencies="network-manager" # add amd64 dependency + +apt_install ${general_utils} ${python_dependencies} ${server_utils} ${armbian_dependencies} ${amd64_dependencies} sudo apt clean -y sudo apt autoremove -y @@ -775,7 +777,7 @@ if ${fatpack}; then sudo /home/admin/config.scripts/bonus.nodejs.sh on || exit 1 echo "* Optional Packages (may be needed for extended features)" - apt_install qrencode secure-delete fbi ssmtp unclutter xterm python3-pyqt5 xfonts-terminus apache2-utils nginx python3-jinja2 socat libatlas-base-dev hexyl autossh + apt_install qrencode secure-delete fbi msmtp unclutter xterm python3-pyqt5 xfonts-terminus apache2-utils nginx python3-jinja2 socat libatlas-base-dev hexyl autossh echo "* Adding LND ..." /home/admin/config.scripts/lnd.install.sh install || exit 1 @@ -792,20 +794,20 @@ if ${fatpack}; then # Fallback Nodes List from Bitcoin Core sudo -u admin curl https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/seeds/nodes_main.txt -o /home/admin/fallback.bitcoin.nodes - echo "* Adding Code&Compile for WEBUI-APP: RTL" - /home/admin/config.scripts/bonus.rtl.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: BTCPAYSERVER" - /home/admin/config.scripts/bonus.btcpayserver.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: MEMPOOL" - /home/admin/config.scripts/bonus.mempool.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: THUNDERHUB" - /home/admin/config.scripts/bonus.thunderhub.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: BTC RPC EXPLORER" - /home/admin/config.scripts/bonus.btc-rpc-explorer.sh install || exit 1 echo "* Adding Code&Compile for WEBUI-APP: LNBITS" /home/admin/config.scripts/bonus.lnbits.sh install || exit 1 echo "* Adding Code&Compile for WEBUI-APP: JAM" /home/admin/config.scripts/bonus.jam.sh install || exit 1 + echo "* Adding Code&Compile for WEBUI-APP: BTCPAYSERVER" + /home/admin/config.scripts/bonus.btcpayserver.sh install || exit 1 + echo "* Adding Code&Compile for WEBUI-APP: RTL" + /home/admin/config.scripts/bonus.rtl.sh install || exit 1 + echo "* Adding Code&Compile for WEBUI-APP: THUNDERHUB" + /home/admin/config.scripts/bonus.thunderhub.sh install || exit 1 + echo "* Adding Code&Compile for WEBUI-APP: BTC RPC EXPLORER" + /home/admin/config.scripts/bonus.btc-rpc-explorer.sh install || exit 1 + echo "* Adding Code&Compile for WEBUI-APP: MEMPOOL" + /home/admin/config.scripts/bonus.mempool.sh install || exit 1 echo "* Adding Raspiblitz API ..." sudo /home/admin/config.scripts/blitz.web.api.sh on "${defaultAPIuser}" "${defaultAPIrepo}" "blitz-${branch}" || exit 1 diff --git a/ci/README.md b/ci/README.md new file mode 100644 index 000000000..d8d69eee4 --- /dev/null +++ b/ci/README.md @@ -0,0 +1,202 @@ + +# Automated builds +* The images are built using the dev branch. +* The lean image has no Gnome desktop or WebUI installed. +* Issue: https://github.com/rootzoll/raspiblitz/issues/3053 +* The templates are made using: https://github.com/chef/bento + +- [Local build](#local-build) + - [Generate an arm64-rpi image](#generate-an-arm64-rpi-image) + - [Generate an amd64 image](#generate-an-amd64-image) +- [Images generated in github actions](#images-generated-in-github-actions) +- [Write the image to a disk connected with USB](#write-the-image-to-a-disk-connected-with-usb) + - [Convert the qcow2 volume to a raw disk image](#convert-the-qcow2-volume-to-a-raw-disk-image) + - [Write to a disk connected with USB with Balena Etcher or `dd`](#write-to-a-disk-connected-with-usb-with-balena-etcher-or-dd) + - [Extend the partition on the new disk (optional)](#extend-the-partition-on-the-new-disk-optional) +- [The first boot](#the-first-boot) + - [fatpack image](#fatpack-image) + - [lean image](#lean-image) + - [Add Gnome desktop (optional)](#add-gnome-desktop-optional) +- [Add wifi](#add-wifi) +- [Add wifi driver (optional)](#add-wifi-driver-optional) +- [Workflow notes](#workflow-notes) + - [Packer .json settings:](#packer-json-settings) + - [VNC](#vnc) + - [Flashing](#flashing) + +## Local build +with the [Makefile](https://github.com/rootzoll/raspiblitz/blob/dev/Makefile) +* needs ~20 GB free space +* tested on: + * Ubuntu Live (jammy) + * Debian Bullseye Desktop +* Preparation: + ``` + # change to a mountpoint with sufficient space (check with 'df -h') + cd /var/log + # switch to root + sudo su + # install git and make + apt update && apt install -y git make + # download the repo (or your fork) + git clone https://github.com/rootzoll/raspiblitz + cd raspiblitz + # checkout the desired branch + git checkout dev + ``` + +### Generate an arm64-rpi image +* The workflow locally and in github actions generates a .img raw format image for the Raspberry Pi. + ``` + make arm-rpi-lean-image + ``` +* find the image and sh256 hashes in the `ci/arm64-rpi/packer-builder-arm` directory +* the .img.gz file can be written to an SDcard directly with Balena Etcher + +### Generate an amd64 image +The workflow locally and in github actions generates a .qcow2 format amd64 image. +* Tested with + * libvirt / virsh / virt-manager (https://virt-manager.org/) + * written to disk and booted with legacy boot (non-UEFI) + ``` + make amd64-lean-image + ``` +* find the compressed .qcow2 image and sh256 hashes in the `ci/amd64/builds` directory + +## Images generated in github actions +* Find the images in the green runs in github actions at: +https://github.com/rootzoll/raspiblitz/actions + + ``` + # unzip to the same directory + unzip raspiblitz-amd64-image-YEAR-MM-DD-COMMITHASH.zip + ``` +## Write the image to a disk connected with USB +identify the connected disk with `lsblk` eg `/dev/sdd` + +### Convert the qcow2 volume to a raw disk image +* the raw image is 33.5 GB + ``` + # unzip + gzip -dkv raspiblitz-amd64-debian-11.5-lean.qcow2.gz + # convert + qemu-img convert raspiblitz-amd64-debian-11.5-lean.qcow2 raspiblitz-amd64-debian-11.5-lean.img + ``` +### Write to a disk connected with USB with Balena Etcher or `dd` +* [Balena Etcher](https://www.balena.io/etcher/) to write the .img to disk +* dd to write the .img to disk + ``` + # identify partitions + lsblk + # write to disk + sudo dd if=./raspiblitz-amd64-debian-11.5-lean.img of=/dev/sde bs=4M status=progress + ``` + +* qemu-image dd to write the .qcow2 directly to disk + ``` + sudo apt install -y qemu-utils + sudo qemu-img dd if=./raspiblitz-amd64-debian-11.5-lean.qcow2 of=/dev/sde bs=4M + ``` +### Extend the partition on the new disk (optional) +* Use Disks to resize the Extended Partition to the full size of the disk +* To extend the LVM: + ``` + # identify the USB connected disk + lsblk + df -h + # extend the lvm to the full free space and resize the filesystem + sudo lvextend -r -l +100%FREE /dev/mapper/raspiblitz--amd74--debian--11--vg-root + + # alternatively download the script + git clone https://git.scs.carleton.ca/git/extend-lvm.git + # run with the disk as the parameter (sde for example) + sudo bash extend-lvm/extend-lvm.sh /dev/sde + ``` + +## The first boot +### fatpack image +* log in on screen: + * username: `admin` + * password: `raspiblitz` + +* start a terminal for guidance + +* alternatively open a browser and go to: + * http://localhost +* can also open the WebUI on another computer + * Find the the RaspiBlitz_IP in your router dashboard, in the terminal prompt or with `hostname -I` + * open: http://RaspiBlitz_IP + +### lean image +* press any key to get to a login prompt after the splash screen + * username: `admin` + * password: `raspiblitz` + +#### Add Gnome desktop (optional) +* Connect to the internet (easiest to plug in a LAN cable - use a USB - LAN adapter if have no port) + ``` + apt install gnome + systemctl start gdm + ``` + +## Add wifi +* if the wifi driver is included in the FOSS Debian distro +* in the command line run the network manager interface to connect: + ``` + sudo nmtui + ``` +## Add wifi driver (optional) +* as in https://wiki.debian.org/iwlwifi +* add the component `non-free` after `deb http://deb.debian.org/debian bullseye main` in `/etc/apt/sources.list` +* install the wifi driver for the mentioned cards: + ``` + sudo apt update && sudo apt install firmware-iwlwifi + ``` + +## Workflow notes + +The github workflow files are the equivalent of the Makefile commands run locally. +The local repo owner (`GITHUB_ACTOR`) and branch (`GITHUB_HEAD_REF`) is picked up. +The build_sdcard.sh is downloaded from the source branch and built with the options pack=[lean|fatpack] to set fatpack=[0|1]. + +The github workflow is running the job in an ubuntu-22.04 image. + +The amd64 image is built with running a qemu VM +* installs the base OS (Debian 11.5) +* connects with ssh and runs the scripts including the build_sdcard.sh + +The arm64-rpi image genenaration runs in Docker in github actions and without Docker locally. +* the base image (RasberryOS) is started in the qemu VM +* packer runs the build_sdcard.sh directly in the VM + +After the image is built (and there is no exit with errors) the next steps are: +* compute checksum of the qemu/raw image +* compress the image with gzip +* compute checksum of the compressed image +* (in github actions: upload the artifacts in one .zip file) + +### Packer .json settings: +* `disk_size` - the size op the raw image. The .qcow2 file is compressed. +* `template` - image filename +* `output_directory` - directory under builds where the image will be placed +* the `pi` user is given passwordless sudo access and used for the image setup +* use `file_checksum` instead of `file_checksum_url`. The image must be downloaded and verified with PGP manually to fill the field: + ``` + # image + wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz + # signature + wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz.sig + # hash + wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz.sha256 + + curl https://www.raspberrypi.org/raspberrypi_downloads.gpg.key | gpg --import + + sha256sum -c 2022-09-22-raspios-bullseye-arm64.img.xz.sha256 && \ + gpg --verify 2022-09-22-raspios-bullseye-arm64.img.xz.sig + + cat 2022-09-22-raspios-bullseye-arm64.img.xz.sha256 + ``` +### VNC +* can follow the setup locally in VNC with the port stated in the first part of the logs eg: `Found available VNC port: 5952 on IP: 127.0.0.1` +### Flashing +* using `qemu-img dd bs=4M if=raspiblitz-amd64-debian-11.5-lean.qcow2 of=/dev/sdd` changed the UUID so it won't boot without editing GRUB diff --git a/ci/amd64/_common/sshd.sh b/ci/amd64/_common/sshd.sh new file mode 100644 index 000000000..1bb16f56e --- /dev/null +++ b/ci/amd64/_common/sshd.sh @@ -0,0 +1,20 @@ +#!/bin/sh -eux + +SSHD_CONFIG="/etc/ssh/sshd_config" + +# ensure that there is a trailing newline before attempting to concatenate +sed -i -e '$a\' "$SSHD_CONFIG" + +USEDNS="UseDNS no" +if grep -q -E "^[[:space:]]*UseDNS" "$SSHD_CONFIG"; then + sed -i "s/^\s*UseDNS.*/${USEDNS}/" "$SSHD_CONFIG" +else + echo "$USEDNS" >>"$SSHD_CONFIG" +fi + +GSSAPI="GSSAPIAuthentication no" +if grep -q -E "^[[:space:]]*GSSAPIAuthentication" "$SSHD_CONFIG"; then + sed -i "s/^\s*GSSAPIAuthentication.*/${GSSAPI}/" "$SSHD_CONFIG" +else + echo "$GSSAPI" >>"$SSHD_CONFIG" +fi diff --git a/ci/amd64/debian/amd64-debian.json b/ci/amd64/debian/amd64-debian.json new file mode 100644 index 000000000..f358d9b28 --- /dev/null +++ b/ci/amd64/debian/amd64-debian.json @@ -0,0 +1,81 @@ +{ + "variables": { + "box_basename": "debian", + "build_directory": "../builds", + "build_timestamp": "{{isotime \"20060102150405\"}}", + "pack": "{{user `pack`}}", + "cpus": "4", + "disk_size": "30000", + "git_revision": "__unknown_git_revision__", + "guest_additions_url": "", + "headless": "false", + "http_directory": "{{template_dir}}/http", + "http_proxy": "{{env `http_proxy`}}", + "https_proxy": "{{env `https_proxy`}}", + "iso_checksum": "e482910626b30f9a7de9b0cc142c3d4a079fbfa96110083be1d0b473671ce08d", + "iso_name": "debian-11.6.0-amd64-netinst.iso", + "memory": "4096", + "mirror": "http://cdimage.debian.org/cdimage/release", + "mirror_directory": "current/amd64/iso-cd", + "name": "debian", + "no_proxy": "{{env `no_proxy`}}", + "preseed_path": "debian-9/preseed.cfg", + "qemu_display": "none", + "qemu_bios": "bios-256k.bin", + "template": "raspiblitz-amd64-debian-{{user `pack`}}", + "boot_command": "install preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `preseed_path`}} debian-installer=en_US.UTF-8 auto locale=en_US.UTF-8 kbd-chooser/method=us keyboard-configuration/xkb-keymap=us netcfg/get_hostname={{ .Name }} netcfg/get_domain=vagrantup.com fb=false debconf/frontend=noninteractive console-setup/ask_detect=false console-keymaps-at/keymap=us grub-installer/bootdev=default ", + "version": "TIMESTAMP" +}, + "builders": [ + { + "boot_command": "{{user `boot_command`}}", + "boot_wait": "5s", + "cpus": "{{ user `cpus` }}", + "disk_size": "{{user `disk_size`}}", + "headless": "{{ user `headless` }}", + "http_directory": "{{user `http_directory`}}", + "iso_checksum": "{{user `iso_checksum`}}", + "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}", + "memory": "{{ user `memory` }}", + "output_directory": "{{ user `build_directory` }}/{{user `template`}}-qemu", + "shutdown_command": "echo 'raspiblitz' | sudo /sbin/shutdown -hP now", + "ssh_password": "raspiblitz", + "ssh_port": 22, + "ssh_timeout": "10000s", + "ssh_username": "pi", + "type": "qemu", + "format": "qcow2", + "vm_name": "{{ user `template` }}.qcow2", + "qemuargs": [ + [ "-m", "{{ user `memory` }}" ], + [ "-bios", "{{ user `qemu_bios` }}" ], + [ "-display", "{{ user `qemu_display` }}" ] + ] + } + ], + "provisioners": [ + { + "type": "shell", + "environment_vars": [ + "HOME_DIR=/home/pi", + "http_proxy={{user `http_proxy`}}", + "https_proxy={{user `https_proxy`}}", + "no_proxy={{user `no_proxy`}}", + "github_user={{user `github_user`}}", + "branch={{user `branch`}}", + "pack={{user `pack`}}" + ], + "execute_command": "echo 'raspiblitz' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'", + "expect_disconnect": true, + "scripts": [ + "{{template_dir}}/scripts/update.sh", + "{{template_dir}}/../_common/sshd.sh", + "{{template_dir}}/scripts/networking.sh", + "{{template_dir}}/scripts/sudoers.sh", + "{{template_dir}}/scripts/systemd.sh", + "{{template_dir}}/scripts/raspiblitz.sh", + "{{template_dir}}/scripts/cleanup.sh" + ] + } + ] +} diff --git a/ci/amd64/debian/http/debian-9/preseed.cfg b/ci/amd64/debian/http/debian-9/preseed.cfg new file mode 100644 index 000000000..7ab0c3414 --- /dev/null +++ b/ci/amd64/debian/http/debian-9/preseed.cfg @@ -0,0 +1,47 @@ +choose-mirror-bin mirror/http/proxy string +d-i apt-setup/use_mirror boolean true +d-i base-installer/kernel/override-image string linux-server +d-i clock-setup/utc boolean true +d-i clock-setup/utc-auto boolean true +d-i finish-install/reboot_in_progress note +d-i grub-installer/only_debian boolean true +d-i grub-installer/with_other_os boolean true +d-i keymap select us +d-i mirror/country string manual +d-i mirror/http/directory string /debian +d-i mirror/http/hostname string httpredir.debian.org +d-i mirror/http/proxy string +d-i partman-auto-lvm/guided_size string max +d-i partman-auto/choose_recipe select atomic +d-i partman-auto/method string lvm +d-i partman-lvm/confirm boolean true +d-i partman-lvm/confirm_nooverwrite boolean true +d-i partman-lvm/device_remove_lvm boolean true +d-i partman/choose_partition select finish +d-i partman/confirm boolean true +d-i partman/confirm_nooverwrite boolean true +d-i partman/confirm_write_new_label boolean true +d-i passwd/root-login boolean false +d-i passwd/root-password-again password raspiblitz +d-i passwd/root-password password raspiblitz +d-i passwd/user-fullname string pi +d-i passwd/user-uid string 1000 +d-i passwd/user-password password raspiblitz +d-i passwd/user-password-again password raspiblitz +d-i passwd/username string pi +d-i pkgsel/include string sudo bzip2 acpid cryptsetup zlib1g-dev wget curl dkms fuse make nfs-common net-tools cifs-utils rsync +d-i pkgsel/install-language-support boolean false +d-i pkgsel/update-policy select none +d-i pkgsel/upgrade select full-upgrade +# Prevent packaged version of VirtualBox Guest Additions being installed: +d-i preseed/early_command string sed -i \ + '/in-target/idiscover(){/sbin/discover|grep -v VirtualBox;}' \ + /usr/lib/pre-pkgsel.d/20install-hwpackages +d-i time/zone string UTC +d-i user-setup/allow-password-weak boolean true +d-i user-setup/encrypt-home boolean false +d-i preseed/late_command string sed -i '/^deb cdrom:/s/^/#/' /target/etc/apt/sources.list +apt-cdrom-setup apt-setup/cdrom/set-first boolean false +apt-mirror-setup apt-setup/use_mirror boolean true +popularity-contest popularity-contest/participate boolean false +tasksel tasksel/first multiselect standard, ssh-server diff --git a/ci/amd64/debian/scripts/cleanup.sh b/ci/amd64/debian/scripts/cleanup.sh new file mode 100644 index 000000000..c9b09d0be --- /dev/null +++ b/ci/amd64/debian/scripts/cleanup.sh @@ -0,0 +1,55 @@ +#!/bin/sh -eux + +echo "remove linux-headers" +dpkg --list \ + | awk '{ print $2 }' \ + | grep 'linux-headers' \ + | xargs apt-get -y purge; + +echo "remove specific Linux kernels, such as linux-image-4.9.0-13-amd64 but keeps the current kernel and does not touch the virtual packages" +dpkg --list \ + | awk '{ print $2 }' \ + | grep 'linux-image-[234].*' \ + | grep -v `uname -r` \ + | xargs apt-get -y purge; + +echo "remove linux-source package" +dpkg --list \ + | awk '{ print $2 }' \ + | grep linux-source \ + | xargs apt-get -y purge; + +echo "remove obsolete networking packages" +apt-get -y purge ppp pppconfig pppoeconf; + +echo "remove popularity-contest package" +apt-get -y purge popularity-contest; + +echo "remove installation-report package" +apt-get -y purge installation-report; + +echo "autoremoving packages and cleaning apt data" +apt-get -y autoremove; +apt-get -y clean; + +echo "remove /var/cache" +find /var/cache -type f -exec rm -rf {} \; + +echo "truncate any logs that have built up during the install" +find /var/log -type f -exec truncate --size=0 {} \; + +echo "blank netplan machine-id (DUID) so machines get unique ID generated on boot" +truncate -s 0 /etc/machine-id + +echo "remove the contents of /tmp and /var/tmp" +rm -rf /tmp/* /var/tmp/* + +echo "force a new random seed to be generated" +rm -f /var/lib/systemd/random-seed + +echo "delete the SSH keys (will be recreated on the first boot)" +rm -f /etc/ssh/ssh_host_* + +echo "clear the history so our install isn't there" +rm -f /root/.wget-hsts +export HISTSIZE=0 diff --git a/ci/amd64/debian/scripts/networking.sh b/ci/amd64/debian/scripts/networking.sh new file mode 100644 index 000000000..a574c6900 --- /dev/null +++ b/ci/amd64/debian/scripts/networking.sh @@ -0,0 +1,9 @@ +#!/bin/sh -eux + +# Disable Predictable Network Interface names and use eth0 +sed -i 's/en[[:alnum:]]*/eth0/g' /etc/network/interfaces; +sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 \1"/g' /etc/default/grub; +update-grub; + +# Adding a 2 sec delay to the interface up, to make the dhclient happy +echo "pre-up sleep 2" >> /etc/network/interfaces diff --git a/ci/amd64/debian/scripts/raspiblitz.sh b/ci/amd64/debian/scripts/raspiblitz.sh new file mode 100644 index 000000000..4d6cc31e6 --- /dev/null +++ b/ci/amd64/debian/scripts/raspiblitz.sh @@ -0,0 +1,19 @@ +#!/bin/sh -eux + +echo 'Download the build_sdcard.sh script ...' +wget https://raw.githubusercontent.com/${github_user}/raspiblitz/${branch}/build_sdcard.sh + +if [ ${pack} = "fatpack" ]; then + fatpack="1" +else + fatpack="0" +fi + +if [ "${fatpack}" = "1" ]; then + echo 'Add Gnome desktop' + export DEBIAN_FRONTEND=none + sudo apt install gnome -y +fi + +echo 'Build RaspiBlitz ...' +bash build_sdcard.sh -f ${fatpack} -u ${github_user} -b ${branch} -d headless -t false -w off -i false diff --git a/ci/amd64/debian/scripts/sudoers.sh b/ci/amd64/debian/scripts/sudoers.sh new file mode 100644 index 000000000..4bf421817 --- /dev/null +++ b/ci/amd64/debian/scripts/sudoers.sh @@ -0,0 +1,9 @@ +#!/bin/sh -eux + +# Only add the secure path line if it is not already present +grep -q 'secure_path' /etc/sudoers \ + || sed -i -e '/Defaults\s\+env_reset/a Defaults\tsecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"' /etc/sudoers; + +# Set up password-less sudo for the pi user +echo 'pi ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/99_pi; +chmod 440 /etc/sudoers.d/99_pi; diff --git a/ci/amd64/debian/scripts/systemd.sh b/ci/amd64/debian/scripts/systemd.sh new file mode 100644 index 000000000..2d1b5a71e --- /dev/null +++ b/ci/amd64/debian/scripts/systemd.sh @@ -0,0 +1,4 @@ +#!/bin/sh -eux + +# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=751636 +apt-get install libpam-systemd diff --git a/ci/amd64/debian/scripts/update.sh b/ci/amd64/debian/scripts/update.sh new file mode 100644 index 000000000..c657200a7 --- /dev/null +++ b/ci/amd64/debian/scripts/update.sh @@ -0,0 +1,19 @@ +#!/bin/sh -eux + +arch="$(uname -r | sed 's/^.*[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\(-[0-9]\{1,2\}\)-//')" +debian_version="$(lsb_release -r | awk '{print $2}')" +major_version="$(echo $debian_version | awk -F. '{print $1}')" + +# Disable systemd apt timers/services +systemctl stop apt-daily.timer +systemctl stop apt-daily-upgrade.timer +systemctl disable apt-daily.timer +systemctl disable apt-daily-upgrade.timer +systemctl mask apt-daily.service +systemctl mask apt-daily-upgrade.service +systemctl daemon-reload + +## leave update and upgrade to the build_sdcard.sh +#apt-get update +#apt-get -y upgrade linux-image-$arch +#apt-get -y install linux-headers-$(uname -r) diff --git a/ci/amd64/packer.build.amd64-debian.sh b/ci/amd64/packer.build.amd64-debian.sh new file mode 100644 index 000000000..37d2868c1 --- /dev/null +++ b/ci/amd64/packer.build.amd64-debian.sh @@ -0,0 +1,37 @@ +#!/bin/bash -e + +# Install packer +curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - +sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" +sudo apt-get update +echo -e "\nInstalling packer..." +sudo apt-get install -y packer + +# Install qemu +echo -e "\nInstalling qemu..." +sudo apt-get install -y qemu-system + +if [ $# -gt 0 ]; then + pack=$1 +else + pack=lean +fi + +if [ $# -gt 1 ]; then + github_user=$2 +else + github_user=rootzoll +fi + +if [ $# -gt 2 ]; then + branch=$3 +else + branch=dev +fi + +# Build the image +echo -e "\nBuilding image..." +cd debian +PACKER_LOG=1 packer build \ + --var pack=${pack} --var github_user=${github_user} --var branch=${branch} \ + -only=qemu amd64-debian.json diff --git a/ci/arm64-rpi/arm64-rpi.pkr.hcl b/ci/arm64-rpi/arm64-rpi.pkr.hcl new file mode 100644 index 000000000..d183cbda8 --- /dev/null +++ b/ci/arm64-rpi/arm64-rpi.pkr.hcl @@ -0,0 +1,66 @@ +variable "pack" {} +variable "github_user" {} +variable "branch" {} + +source "arm" "raspiblitz-arm64-rpi" { + file_checksum_type = "sha256" + file_checksum = "c42856ffca096480180b5aff66e1dad2f727fdc33359b24e0d2d49cc7676b576" + file_target_extension = "xz" + file_unarchive_cmd = ["xz", "--decompress", "$ARCHIVE_PATH"] + file_urls = ["https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz"] + image_build_method = "resize" + image_chroot_env = ["PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"] + image_partitions { + filesystem = "vfat" + mountpoint = "/boot" + name = "boot" + size = "256M" + start_sector = "8192" + type = "c" + } + image_partitions { + filesystem = "ext4" + mountpoint = "/" + name = "root" + size = "0" + start_sector = "532480" + type = "83" + } + image_path = "raspiblitz-arm64-rpi-${var.pack}.img" + image_size = "30G" + image_type = "dos" + qemu_binary_destination_path = "/usr/bin/qemu-arm-static" + qemu_binary_source_path = "/usr/bin/qemu-arm-static" +} + +build { + sources = ["source.arm.raspiblitz-arm64-rpi"] + + provisioner "shell" { + inline = [ + "echo 'nameserver 1.1.1.1' > /etc/resolv.conf", + "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf", + "echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections", + "apt-get install -y sudo wget", + "apt-get -y autoremove", + "apt-get -y clean", + ] + } + + provisioner "shell" { + environment_vars = [ + "github_user=${var.github_user}", + "branch=${var.branch}", + "pack=${var.pack}" + ] + script = "./raspiblitz.sh" + } + + provisioner "shell" { + inline = [ + "echo '# delete the SSH keys (will be recreated on the first boot)'", + "rm -f /etc/ssh/ssh_host_*", + "echo 'OK'", + ] + } +} diff --git a/ci/arm64-rpi/packer.build.arm64-rpi.local.sh b/ci/arm64-rpi/packer.build.arm64-rpi.local.sh new file mode 100644 index 000000000..f64659773 --- /dev/null +++ b/ci/arm64-rpi/packer.build.arm64-rpi.local.sh @@ -0,0 +1,79 @@ +#!/bin/bash -e + +echo "\n# Install dependencies with apt" +if [ "$(uname -n)" = "ubuntu" ]; then + sudo add-apt-repository -y universe +fi + +# Install dependencies +# needed on Ubuntu Live ('lsb_release -cs': jammy) +sudo apt install -y qemu-user-static || exit 1 + +# from https://github.com/mkaczanowski/packer-builder-arm/blob/master/docker/Dockerfile +sudo apt install -y \ + wget \ + curl \ + ca-certificates \ + dosfstools \ + fdisk \ + gdisk \ + kpartx \ + libarchive-tools \ + parted \ + psmisc \ + qemu-utils \ + sudo \ + xz-utils || exit 1 + +echo -e "\n# Install Packer..." +if ! packer version 2>/dev/null; then + curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - + sudo apt-add-repository -y "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" + sudo apt-get update -y && sudo apt-get install packer -y || exit 1 +else + echo "# Packer is installed" +fi + +echo -e "\n# Install Go" +export PATH=$PATH:/usr/local/go/bin +if ! go version 2>/dev/null | grep "1.18.9"; then + wget --progress=bar:force https://go.dev/dl/go1.18.9.linux-amd64.tar.gz + echo "015692d2a48e3496f1da3328cf33337c727c595011883f6fc74f9b5a9c86ffa8 go1.18.9.linux-amd64.tar.gz" | sha256sum -c - || exit 1 + sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.9.linux-amd64.tar.gz + sudo rm -rf go1.18.9.linux-amd64.tar.gz +else + echo "# Go 1.18.9 is installed" +fi + +echo -e "\n# Download the packer-builder-arm plugin" +git clone https://github.com/mkaczanowski/packer-builder-arm +cd packer-builder-arm +# pin to commit hash https://github.com/mkaczanowski/packer-builder-arm/commits/master +git reset --hard 6636c687ece53f7d1f5f2b35aa41f0e6132949c4 +echo -e "\n# Build the packer-builder-arm plugin" +go mod download +go build || exit 1 + +if [ $# -gt 0 ]; then + pack=$1 +else + pack=lean +fi + +if [ $# -gt 1 ]; then + github_user=$2 +else + github_user=rootzoll +fi + +if [ $# -gt 2 ]; then + branch=$3 +else + branch=dev +fi + +cp ../arm64-rpi.pkr.hcl ./ +cp ../raspiblitz.sh ./ + +echo -e "\n# Build the image" +packer build -var github_user=${github_user} -var branch=${branch} -var pack=${pack} arm64-rpi.pkr.hcl diff --git a/ci/arm64-rpi/packer.build.arm64-rpi.sh b/ci/arm64-rpi/packer.build.arm64-rpi.sh new file mode 100644 index 000000000..8e8436660 --- /dev/null +++ b/ci/arm64-rpi/packer.build.arm64-rpi.sh @@ -0,0 +1,26 @@ +#!/bin/bash -e + +if [ $# -gt 0 ]; then + pack=$1 +else + pack=lean +fi + +if [ $# -gt 1 ]; then + github_user=$2 +else + github_user=rootzoll +fi + +if [ $# -gt 2 ]; then + branch=$3 +else + branch=dev +fi + +# Build the image in docker +echo -e "\nBuild Packer image..." +# from https://hub.docker.com/r/mkaczanowski/packer-builder-arm/tags +docker run --rm --privileged -v /dev:/dev -v ${PWD}:/build \ + mkaczanowski/packer-builder-arm:1.0.5@sha256:a6371a3230b94c308e9a8cd55da1ae0d23bd670b7e558b39683c24f489d03e53 \ + build -var github_user=${github_user} -var branch=${branch} -var pack=${pack} arm64-rpi.pkr.hcl diff --git a/ci/arm64-rpi/raspiblitz.sh b/ci/arm64-rpi/raspiblitz.sh new file mode 100644 index 000000000..8ecee21f0 --- /dev/null +++ b/ci/arm64-rpi/raspiblitz.sh @@ -0,0 +1,15 @@ +#!/bin/sh -eux + +echo 'Download the build_sdcard.sh script ...' +wget https://raw.githubusercontent.com/${github_user}/raspiblitz/${branch}/build_sdcard.sh + +if [ "${pack}" = "fatpack" ]; then + fatpack="1" + # make /dev/shm world writable for qemu + sudo chmod 777 /dev/shm +else + fatpack="0" +fi + +echo 'Build RaspiBlitz ...' +bash build_sdcard.sh -f ${fatpack} -u ${github_user} -b ${branch} -d headless -t false -w off -i false diff --git a/home.admin/_cache.sh b/home.admin/_cache.sh index 96c8fb0d6..3c2ebb6b3 100755 --- a/home.admin/_cache.sh +++ b/home.admin/_cache.sh @@ -113,13 +113,13 @@ elif [ "$1" = "keyvalue" ] && [ "$2" = "on" ]; then sudo sed -i "/^save .*/d" /etc/redis/redis.conf # restart with new config - sudo systemctl restart redis-server + if ! ischroot; then sudo systemctl restart redis-server; fi # clean old databases if exist sudo rm /var/lib/redis/dump.rdb 2>/dev/null # restart again this time there is no old data dump to load - sudo systemctl restart redis-server + if ! ischroot; then sudo systemctl restart redis-server; fi # uninstall elif [ "$1" = "keyvalue" ] && [ "$2" = "off" ]; then diff --git a/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.magnet b/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.magnet deleted file mode 100644 index c5b2ad5b6..000000000 --- a/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.magnet +++ /dev/null @@ -1 +0,0 @@ -magnet:?xt=urn:btih:7885922bd94ccbed5572628931e8b2a5d5b7212a&dn=raspiblitz-amd64-v1.7.2-2022-04-03&tr=http%3a%2f%2ftracker.skyts.net%3a6969%2fannounce&tr=http%3a%2f%2ftracker.yoshi210.com%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.leechers-paradise.org%3a6969&tr=http%3a%2f%2ftracker2.itzmx.com%3a6961%2fannounce&tr=udp%3a%2f%2f9.rarbg.me%3a2780%2fannounce&tr=http%3a%2f%2fpow7.com%3a80%2fannounce&tr=udp%3a%2f%2fexodus.desync.com%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.coppersurfer.tk%3a6969%2fannounce&tr=http%3a%2f%2fopen.acgtracker.com%3a1096%2fannounce \ No newline at end of file diff --git a/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.torrent b/home.admin/assets/raspiblitz-amd64-v1.7.2-2022-04-03.torrent deleted file mode 100644 index 678f2cf8d52bf635d348cf02aacc61c6bd558799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105344 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