From 35c35a7023348111bb8eab593de466f5cc71cc13 Mon Sep 17 00:00:00 2001
From: Chuy Garcia <75956027+chuygarcia92@users.noreply.github.com>
Date: Wed, 28 Aug 2024 15:05:51 +0200
Subject: [PATCH 01/44] Verification for RPGF5 (#633)
adding a temporary JSON to verify the repository in Optimism's RPGF5
---
funding.json | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 funding.json
diff --git a/funding.json b/funding.json
new file mode 100644
index 0000000..f01a264
--- /dev/null
+++ b/funding.json
@@ -0,0 +1,5 @@
+{
+ "opRetro": {
+ "projectId": "0xf839a585342327848d4541a6fcc315404e879537a60a1370f2cd45a94283a1ba"
+ }
+}
From 198cf8725d183c5b462d4a205c209c1d9b4e7f22 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Wed, 28 Aug 2024 15:06:58 +0200
Subject: [PATCH 02/44] Use docker compose binary in test ci (#634)
Use docker compose binary in test ci
---
.github/workflows/test.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9d9a232..369d1b0 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -40,8 +40,8 @@ jobs:
uses: actions/checkout@v4
- name: create iso
run: |
- docker-compose build
- docker-compose up
+ docker compose build
+ docker compose up
ls images/
- name: verify image
run: |
From f2b4ddb548e6fb8aa5eac37558986819bce0252e Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Thu, 26 Sep 2024 17:00:33 +0200
Subject: [PATCH 03/44] Use new docker compose (#639)
* use docker compose instead of docker-compose
* update debian image
---
.github/workflows/artifacts.yml | 8 ++--
.github/workflows/release.yml | 8 ++--
Dockerfile | 1 -
iso/scripts/generate_dappnode_iso_debian.sh | 4 +-
scripts/dappnode_install_pre.sh | 47 ++++++++++-----------
5 files changed, 32 insertions(+), 36 deletions(-)
diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml
index 015f220..0aa3946 100644
--- a/.github/workflows/artifacts.yml
+++ b/.github/workflows/artifacts.yml
@@ -72,8 +72,8 @@ jobs:
- name: Build attended
run: |
sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker-compose build
- docker-compose up
+ docker compose build
+ docker compose up
# Verify ISO attended created
- name: Check iso attended
@@ -89,8 +89,8 @@ jobs:
- name: Build unattended
run: |
sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
- docker-compose build
- docker-compose up
+ docker compose build
+ docker compose up
# Verify ISO unattended was created
- name: Check iso unattended
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 48b32d8..6d289db 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -72,8 +72,8 @@ jobs:
- name: Build attended
run: |
sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker-compose build
- docker-compose up
+ docker compose build
+ docker compose up
# Verify ISO attended created
- name: Check iso attended
@@ -89,8 +89,8 @@ jobs:
- name: Build unattended
run: |
sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
- docker-compose build
- docker-compose up
+ docker compose build
+ docker compose up
# Verify ISO unattended was created
- name: Check iso unattended
diff --git a/Dockerfile b/Dockerfile
index a7784e2..e5ef57e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,6 @@ FROM docker:dind
# hadolint ignore=DL3018
RUN apk update && \
apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils \
- docker-compose && \
rm -rf /var/cache/apk/*
#RUN apk add -U --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing aufs-util
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index 3f02fb7..329995d 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -2,10 +2,10 @@
set -e
# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso
-ISO_NAME=debian-12.5.0-amd64-netinst.iso
+ISO_NAME=debian-12.7.0-amd64-netinst.iso
ISO_PATH="/images/${ISO_NAME}"
ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
-SHASUM="013f5b44670d81280b5b1bc02455842b250df2f0c6763398feb69af1a805a14f ${ISO_PATH}"
+SHASUM="8fde79cfc6b20a696200fc5c15219cf6d721e8feb367e9e0e33a79d1cb68fa83 ${ISO_PATH}"
echo "Downloading debian ISO image: ${ISO_NAME}..."
if [ ! -f ${ISO_PATH} ]; then
diff --git a/scripts/dappnode_install_pre.sh b/scripts/dappnode_install_pre.sh
index 2966bb1..9259405 100755
--- a/scripts/dappnode_install_pre.sh
+++ b/scripts/dappnode_install_pre.sh
@@ -6,7 +6,6 @@ DAPPNODE_DIR="/usr/src/dappnode"
LOGS_DIR="$DAPPNODE_DIR/logs"
lsb_dist="$(. /etc/os-release && echo "$ID")"
-
#!ISOBUILD Do not modify, variables above imported for ISO build
detect_installation_type() {
@@ -20,7 +19,6 @@ detect_installation_type() {
fi
}
-
add_docker_repo() {
apt-get update -y
apt-get remove -y docker docker-engine docker.io containerd runc | tee -a $LOG_FILE
@@ -28,16 +26,16 @@ add_docker_repo() {
mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings
curl -fsSL "https://download.docker.com/linux/${lsb_dist}/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$lsb_dist $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$lsb_dist $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list >/dev/null
}
# DOCKER INSTALLATION
install_docker() {
apt-get update -y
- apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin | tee -a $LOG_FILE
+ apt-get install -y docker-ce docker-ce-cli containerd.io | tee -a $LOG_FILE
# Ensure xz is installed
- [ -f "/usr/bin/xz" ] || ( apt-get install -y xz-utils)
+ [ -f "/usr/bin/xz" ] || (apt-get install -y xz-utils)
USER=$(grep 1000 "/etc/passwd" | cut -f 1 -d:)
[ -z "$USER" ] || usermod -aG docker "$USER"
@@ -56,31 +54,31 @@ install_docker() {
# DOCKER-COMPOSE FOR LEGACY SCRIPTS, SHOULD BE REMOVED EVENTUALLY
alias_docker_compose() {
- cat > /usr/local/bin/docker-compose</usr/local/bin/docker-compose </dev/null 2>&1 ; then
+ if modprobe wireguard >/dev/null 2>&1; then
echo -e "\e[32m \n\n Verified wiregurd-dkms installation \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
else
echo -e "\e[31m \n\n WARNING: wireguard kernel module is not installed, Wireguard DAppNode package might not work! \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
fi
}
-# LSOF INSTALLATION: used to scan host port 80 in use, https package installation will deppend on it
+# LSOF INSTALLATION: used to scan host port 80 in use, https package installation will deppend on it
install_lsof() {
apt-get update -y
apt-get install lsof -y | tee -a $LOG_FILE
- if lsof -v >/dev/null 2>&1 ; then
+ if lsof -v >/dev/null 2>&1; then
echo -e "\e[32m \n\n Verified lsof installation \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
else
echo -e "\e[31m \n\n WARNING: lsof not installed, HTTPS DAppNode package might not be installed! \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
@@ -88,10 +86,10 @@ install_lsof() {
}
# IPTABLES INSTALLATION: mandatory for docker, on bullseye is not installed by default
-install_iptables () {
+install_iptables() {
apt-get update -y
apt-get install iptables -y | tee -a $LOG_FILE
- if iptables -v >/dev/null 2>&1 ; then
+ if iptables -v >/dev/null 2>&1; then
echo -e "\e[32m \n\n Verified iptables installation \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
else
echo -e "\e[31m \n\n WARNING: iptables not installed, Docker may not work! \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
@@ -99,7 +97,7 @@ install_iptables () {
}
# HOST UPDATE
-host_update () {
+host_update() {
apt-get update 2>&1 | tee -a $LOG_FILE
apt-get -y upgrade 2>&1 | tee -a $LOG_FILE
}
@@ -122,8 +120,7 @@ if [ "$1" == "UPDATE" ]; then
host_update 2>&1 | tee -a $LOG_FILE
fi
-
-if find /etc/apt/ -name "*.list" -print0 | xargs --null cat | grep -q "https://download.docker.com/linux/$lsb_dist" ; then
+if find /etc/apt/ -name "*.list" -print0 | xargs --null cat | grep -q "https://download.docker.com/linux/$lsb_dist"; then
echo -e "\e[32m \n\n docker repo is already added \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
else
add_docker_repo | tee -a $LOG_FILE
@@ -136,15 +133,8 @@ else
install_docker 2>&1 | tee -a $LOG_FILE
fi
-# Only install docker-compose if needed
-if docker-compose -v >/dev/null 2>&1; then
- echo -e "\e[32m \n\n docker-compose is already aliased \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
-else
- alias_docker_compose 2>&1 | tee -a $LOG_FILE
-fi
-
# Only install wireguard-dkms if needed
-if modprobe wireguard >/dev/null 2>&1 ; then
+if modprobe wireguard >/dev/null 2>&1; then
echo -e "\e[32m \n\n wireguard-dkms is already installed \n\n \e[0m" 2>&1 | tee -a $LOG_FILE
else
install_wireguard_dkms 2>&1 | tee -a $LOG_FILE
@@ -158,7 +148,10 @@ else
fi
#Check connectivity
-{ [ -f /etc/network/interfaces ] && grep "iface en.* inet dhcp" /etc/network/interfaces &>/dev/null; } || { echo "Interfaces not found"; exit 1; }
+{ [ -f /etc/network/interfaces ] && grep "iface en.* inet dhcp" /etc/network/interfaces &>/dev/null; } || {
+ echo "Interfaces not found"
+ exit 1
+}
## Add missing interfaces
if [ -f /usr/src/dappnode/hotplug ]; then
@@ -166,7 +159,11 @@ if [ -f /usr/src/dappnode/hotplug ]; then
for IFACE in $(grep "en.*" /usr/src/dappnode/hotplug); do
# shellcheck disable=SC2143
if [[ $(grep -L "$IFACE" /etc/network/interfaces) ]]; then
- { echo "# $IFACE"; echo "allow-hotplug $IFACE"; echo "iface $IFACE inet dhcp"; } >> /etc/network/interfaces
+ {
+ echo "# $IFACE"
+ echo "allow-hotplug $IFACE"
+ echo "iface $IFACE inet dhcp"
+ } >>/etc/network/interfaces
fi
done
fi
From d01ecfc2c51d4bbb7337097f8bd622b7d615ff60 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Tue, 10 Dec 2024 08:53:59 +0100
Subject: [PATCH 04/44] Bump debian image to 12.8.0 (#644)
* Bump debian image to 12.8.0
* Update shasum
---
iso/scripts/generate_dappnode_iso_debian.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index 329995d..c0652c6 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -2,10 +2,10 @@
set -e
# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso
-ISO_NAME=debian-12.7.0-amd64-netinst.iso
+ISO_NAME=debian-12.8.0-amd64-netinst.iso
ISO_PATH="/images/${ISO_NAME}"
ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
-SHASUM="8fde79cfc6b20a696200fc5c15219cf6d721e8feb367e9e0e33a79d1cb68fa83 ${ISO_PATH}"
+SHASUM="04396d12b0f377958a070c38a923c227832fa3b3e18ddc013936ecf492e9fbb3 ${ISO_PATH}"
echo "Downloading debian ISO image: ${ISO_NAME}..."
if [ ! -f ${ISO_PATH} ]; then
From d382f3bfa2498d6c9bd6b5a87d819f0e38405188 Mon Sep 17 00:00:00 2001
From: mtzsky
Date: Mon, 3 Feb 2025 08:54:07 +0100
Subject: [PATCH 05/44] Fix invalid link to Installation guideline in README.md
(#638)
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 12c5e32..89817f1 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@
-
+
@@ -38,7 +38,7 @@ DAppNode is empowering people by creating a simple, transparent system for hosti
DAppNode lowers the barrier of entry for non tech-savvy participants. It allows you to deploy, update, and manage P2P clients and nodes without leaving your browser. No terminal or command line interface.
-
+
@@ -119,7 +119,7 @@ Champions are community members that are in charge of maintaining packages: keep
Get your DAppNode and start contributing to decentralization by running your own nodes.
-[Install DAppNode on your host machine](https://docs.dappnode.io/user/quick-start/Core/installation) or buy your DAppNode with all the stuff configured and prepared to be used in [DAppNode shop](https://dappnode.com/en-us/collections/frontpage)
+[Install DAppNode on your host machine](https://docs.dappnode.io/docs/user/install/overview) or buy your DAppNode with all the stuff configured and prepared to be used in [DAppNode shop](https://dappnode.com/en-us/collections/frontpage)
### Install DAppNode with ISO
From 761c0588e799daa50fd12c276e8f3c4442f47db5 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Wed, 12 Feb 2025 09:27:53 +0100
Subject: [PATCH 06/44] Bump bookworm to 12.9.0 (#649)
---
iso/scripts/generate_dappnode_iso_debian.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index c0652c6..f18b086 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -1,11 +1,11 @@
#!/bin/bash
set -e
-# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso
-ISO_NAME=debian-12.8.0-amd64-netinst.iso
+# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.9.0-amd64-netinst.iso
+ISO_NAME=debian-12.9.0-amd64-netinst.iso
ISO_PATH="/images/${ISO_NAME}"
ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
-SHASUM="04396d12b0f377958a070c38a923c227832fa3b3e18ddc013936ecf492e9fbb3 ${ISO_PATH}"
+SHASUM="1257373c706d8c07e6917942736a865dfff557d21d76ea3040bb1039eb72a054 ${ISO_PATH}"
echo "Downloading debian ISO image: ${ISO_NAME}..."
if [ ! -f ${ISO_PATH} ]; then
From 4193a4d292094e8197620a3474082cc1b3a6b228 Mon Sep 17 00:00:00 2001
From: 3alpha
Date: Wed, 12 Feb 2025 09:29:35 +0100
Subject: [PATCH 07/44] Remove check connectivity test for prerequisite script
(#648)
Co-authored-by: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
---
scripts/dappnode_install_pre.sh | 6 ------
1 file changed, 6 deletions(-)
diff --git a/scripts/dappnode_install_pre.sh b/scripts/dappnode_install_pre.sh
index 9259405..e09ae68 100755
--- a/scripts/dappnode_install_pre.sh
+++ b/scripts/dappnode_install_pre.sh
@@ -147,12 +147,6 @@ else
install_lsof 2>&1 | tee -a $LOG_FILE
fi
-#Check connectivity
-{ [ -f /etc/network/interfaces ] && grep "iface en.* inet dhcp" /etc/network/interfaces &>/dev/null; } || {
- echo "Interfaces not found"
- exit 1
-}
-
## Add missing interfaces
if [ -f /usr/src/dappnode/hotplug ]; then
# shellcheck disable=SC2013
From dd0c25907e4e9d056b509d6692eac960432bfb3f Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Tue, 8 Apr 2025 10:42:26 +0200
Subject: [PATCH 08/44] bump bookworm 12.10.0 (#654)
---
iso/scripts/generate_dappnode_iso_debian.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index f18b086..c1c9b13 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -1,11 +1,11 @@
#!/bin/bash
set -e
-# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.9.0-amd64-netinst.iso
-ISO_NAME=debian-12.9.0-amd64-netinst.iso
+# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.10.0-amd64-netinst.iso
+ISO_NAME=debian-12.10.0-amd64-netinst.iso
ISO_PATH="/images/${ISO_NAME}"
ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
-SHASUM="1257373c706d8c07e6917942736a865dfff557d21d76ea3040bb1039eb72a054 ${ISO_PATH}"
+SHASUM="ee8d8579128977d7dc39d48f43aec5ab06b7f09e1f40a9d98f2a9d149221704a ${ISO_PATH}"
echo "Downloading debian ISO image: ${ISO_NAME}..."
if [ ! -f ${ISO_PATH} ]; then
From 1b2dfa37cb3a005539d59f4e0cc6586ba2554b2b Mon Sep 17 00:00:00 2001
From: dappnodedev <144998261+dappnodedev@users.noreply.github.com>
Date: Wed, 2 Jul 2025 11:28:30 +0200
Subject: [PATCH 09/44] Add Ubuntu ISO (#626)
* First approach
* Created bootable Ubuntu ISO
* Add grub config for Ubuntu
* Add autoinstall files
* Improve Ubuntu ISO generation
* Update Ubuntu ISO
* Fix grub theme
* Copy grub theme files to ISO
* Fix pkg installation
* Fix splash image path
* Remove unnecessary lines in grub conf
* Updated unattended autoinstall
* Fix prerequisites for Ubuntu
* Update docker install based on docs
* Remove unnecessary packages
* Update autoinstall attended
* Install buildx
* Handle dappnode install for Ubuntu
* Fix motd generator script
* Keep debian grub theme
* Set default values
* Remove motd script creation
* Use common functions for Debian ISO generation
* Fix common generation
* Add netplan copy to autoinstall
* Remove unneeded late commands
* Fix common vars
* Fix artifact generation
* Add ubuntu artifacts to workflows
* Add Ubuntu to release action
* Update test workflow
* Run pre requisites in target for attended
* Upload all Ubuntu ISOs
* Upload all ubuntu ISOs in artifcats
* Use all storage
* Add autoinstall validation file
* Run autoinstall validation on any PR or push
* Fix permission error on yaml validation
* Install yq using pip
* Update autoinstall format to
* Fix yq command
* Make ssh interactive in attended
* Fix path for common ISO generation script
* Removed ISOBUILD from prerequisites
* update profile versions
* update ubuntu iso
* update debian image to 12.11.0
* add release body
* add ubuntu test
---------
Co-authored-by: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Co-authored-by: pablomendezroyo
---
.dappnode_profile | 4 +-
.github/workflows/artifacts.yml | 75 +++++--
.github/workflows/release.yml | 202 ++++++++++++++----
.github/workflows/test.yml | 26 ++-
.github/workflows/validate_autoinstall.yml | 42 ++++
.yamllint | 6 +
docker-compose.yml | 1 +
iso/boot/splash.png | Bin 4101 -> 12614 bytes
iso/boot/ubuntu/grub.cfg | 21 ++
iso/boot/ubuntu/themes/dappnode/splash.png | Bin 0 -> 12557 bytes
iso/boot/ubuntu/themes/dappnode/theme.txt | 41 ++++
iso/preseeds/ubuntu/autoinstall.yaml | 29 +++
.../ubuntu/autoinstall_unattended.yaml | 44 ++++
iso/scripts/common_iso_generation.sh | 75 +++++++
iso/scripts/generate_ISO.sh | 6 +-
iso/scripts/generate_dappnode_iso_debian.sh | 173 ++++++++-------
iso/scripts/generate_dappnode_iso_ubuntu.sh | 74 +++++++
scripts/dappnode_install.sh | 80 ++++++-
scripts/dappnode_install_pre.sh | 68 ++++--
19 files changed, 789 insertions(+), 178 deletions(-)
create mode 100644 .github/workflows/validate_autoinstall.yml
create mode 100644 .yamllint
create mode 100644 iso/boot/ubuntu/grub.cfg
create mode 100644 iso/boot/ubuntu/themes/dappnode/splash.png
create mode 100644 iso/boot/ubuntu/themes/dappnode/theme.txt
create mode 100644 iso/preseeds/ubuntu/autoinstall.yaml
create mode 100644 iso/preseeds/ubuntu/autoinstall_unattended.yaml
create mode 100644 iso/scripts/common_iso_generation.sh
create mode 100755 iso/scripts/generate_dappnode_iso_ubuntu.sh
diff --git a/.dappnode_profile b/.dappnode_profile
index 7c6e7f3..9951723 100755
--- a/.dappnode_profile
+++ b/.dappnode_profile
@@ -10,10 +10,10 @@
export BIND_VERSION="${BIND_VERSION:-0.2.11}"
export IPFS_VERSION="${IPFS_VERSION:-0.2.23}"
export VPN_VERSION="${VPN_VERSION:-0.2.10}"
-export DAPPMANAGER_VERSION="${DAPPMANAGER_VERSION:-0.2.88}"
+export DAPPMANAGER_VERSION="${DAPPMANAGER_VERSION:-0.2.99}"
export WIFI_VERSION="${WIFI_VERSION:-0.2.9}"
export WIREGUARD_VERSION="${WIREGUARD_VERSION:-0.1.3}"
-export HTTPS_VERSION="${HTTPS:-0.2.1}"
+export HTTPS_VERSION="${HTTPS:-0.2.2}"
export DAPPNODE_DIR="/usr/src/dappnode"
export DAPPNODE_CORE_DIR="${DAPPNODE_DIR}/DNCORE"
diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml
index 0aa3946..b82ddac 100644
--- a/.github/workflows/artifacts.yml
+++ b/.github/workflows/artifacts.yml
@@ -68,39 +68,80 @@ jobs:
sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${HTTPS_VERSION}"/" .dappnode_profile
cat .dappnode_profile
- # ISO ATTENDED
- - name: Build attended
+ # Debian ISO ATTENDED
+ - name: Build Debian attended
run: |
+ sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
docker compose build
docker compose up
- # Verify ISO attended created
- - name: Check iso attended
+ - name: Check Debian ISO attended
run: |
- ls -lrt images/DAppNode-debian-bookworm-amd64.iso
+ ls -lrt images/Dappnode-debian-*.iso
- # Set new name for the release asset
- - name: Set DAppNode attended ISO name
+ - name: Set Debian Dappnode attended ISO name
run: |
- cp ./images/DAppNode-debian-bookworm-amd64.iso DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso
+ file=$(ls images/Dappnode-debian-*.iso)
+ attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ mv "$file" "$attended_filename"
- # ISO UNATTENDED
- - name: Build unattended
+ # Debian ISO UNATTENDED
+ - name: Build Debian unattended
run: |
+ sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
docker compose build
docker compose up
- # Verify ISO unattended was created
- - name: Check iso unattended
+ - name: Check Debian ISO unattended
run: |
- ls -lrt images/DAppNode-debian-bookworm-amd64.iso
+ ls -lrt images/Dappnode-debian-*.iso
# Set new name for the release asset
- - name: Set DAppNode unttended ISO name
+ - name: Set Dappnode unttended ISO name
+ run: |
+ file=$(ls images/Dappnode-debian-*.iso)
+
+ core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+
+ mv "$file" "$unattended_filename"
+
+ # Ubuntu ISO ATTENDED
+ - name: Build Ubuntu attended
+ run: |
+ sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
+ sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
+ docker-compose up --build
+
+ - name: Check Ubuntu ISO attended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode attended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ mv "$file" "$attended_filename"
+
+ # Ubuntu ISO UNATTENDED
+ - name: Build Ubuntu unattended
+ run: |
+ sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
+ sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
+ docker-compose up --build
+
+ - name: Check Ubuntu ISO unattended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode unattended ISO name
run: |
- cp ./images/DAppNode-debian-bookworm-amd64.iso DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ mv "$file" "$unattended_filename"
- name: Create dappnode_profile.sh
run: |
@@ -112,8 +153,8 @@ jobs:
with:
name: test-artifact
path: |
- ./DAppNode-*-amd64.iso
- ./DAppNode-*-amd64-unattended.iso
+ ./Dappnode-debian-*.iso
+ ./Dappnode-ubuntu-*.iso
./scripts/dappnode_install.sh
./scripts/dappnode_install_pre.sh
./scripts/dappnode_uninstall.sh
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 6d289db..7aacdf6 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -39,14 +39,13 @@ env:
jobs:
pre-release:
- name: create pre release
+ name: Create pre-release artifacts
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- # Regex for versions introduced
- name: Check versions regex
run: |
[[ $BIND_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $IPFS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $DAPPMANAGER_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
@@ -56,7 +55,6 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- # Edit the profile with the new versions introduced
- name: Set new versions
run: |
sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${BIND_VERSION}"/" .dappnode_profile
@@ -68,82 +66,119 @@ jobs:
sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${HTTPS_VERSION}"/" .dappnode_profile
cat .dappnode_profile
- # ISO ATTENDED
- - name: Build attended
+ - name: Build Debian attended
run: |
+ sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
docker compose build
docker compose up
- # Verify ISO attended created
- - name: Check iso attended
+ - name: Check Debian ISO attended
run: |
- ls -lrt images/DAppNode-debian-bookworm-amd64.iso
+ ls -lrt images/Dappnode-debian-*.iso
- # Set new name for the release asset
- - name: Set DAppNode attended ISO name
+ - name: Set Debian Dappnode attended ISO name
run: |
- cp ./images/DAppNode-debian-bookworm-amd64.iso DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso
+ file=$(ls images/Dappnode-debian-*.iso)
+ attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ mv "$file" "$attended_filename"
- # ISO UNATTENDED
- - name: Build unattended
+ - name: Build Debian unattended
run: |
sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
docker compose build
docker compose up
- # Verify ISO unattended was created
- - name: Check iso unattended
+ - name: Check Debian ISO unattended
run: |
- ls -lrt images/DAppNode-debian-bookworm-amd64.iso
+ ls -lrt images/Dappnode-debian-*.iso
- # Set new name for the release asset
- - name: Set DAppNode unttended ISO name
+ - name: Set Dappnode unattended ISO name
run: |
- cp ./images/DAppNode-debian-bookworm-amd64.iso DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso
+ file=$(ls images/Dappnode-debian-*.iso)
+ core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ mv "$file" "$unattended_filename"
+
+ - name: Build Ubuntu attended
+ run: |
+ sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
+ sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
+ docker-compose up --build
+
+ - name: Check Ubuntu ISO attended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode attended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ mv "$file" "$attended_filename"
+
+ - name: Build Ubuntu unattended
+ run: |
+ sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
+ sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
+ docker-compose up --build
+
+ - name: Check Ubuntu ISO unattended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode unattended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ mv "$file" "$unattended_filename"
- # Create profile.sh script (not able to set dot (.) before the name in the gh release asset)
- name: Create dappnode_profile.sh
run: |
cp .dappnode_profile dappnode_profile.sh
# SHASUMs
- - name: Get SHA-256 attended
- id: shasum-attended
+ - name: Get SHA-256 Debian attended
+ id: shasum-debian-attended
run: |
- SHASUM_ATTENDED=$(shasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso)
- echo "::set-output name=SHASUM_ATTENDED::$SHASUM_ATTENDED"
+ file=$(find . -type f -name 'Dappnode-debian-*.iso' ! -name '*unattended*')
+ SHASUM_DEBIAN_ATTENDED=$(shasum -a 256 $file)
+ echo "::set-output name=SHASUM_DEBIAN_ATTENDED::$SHASUM_DEBIAN_ATTENDED"
- - name: Get SHA-256 unattended
- id: shasum-unattended
+ - name: Get SHA-256 Debian unattended
+ id: shasum-debian-unattended
run: |
- SHASUM_UNATTENDED=$(shasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso)
- echo "::set-output name=SHASUM_UNATTENDED::$SHASUM_UNATTENDED"
+ file=$(find . -type f -name 'Dappnode-debian-*unattended.iso')
+ SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
+ echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
- # Release body
- - name: Write release content
+ - name: Get SHA-256 Debian attended
+ id: shasum-ubuntu-attended
run: |
- echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${BIND_VERSION}|\n|ipfs.dnp.dappnode.eth|${IPFS_VERSION}|\n|vpn.dnp.dappnode.eth |${VPN_VERSION}|\n|dappmanager.dnp.dappnode.eth|${DAPPMANAGER_VERSION}|\n|wifi.dnp.dappnode.eth|${WIFI_VERSION}|\n|https.dnp.dappnode.eth|${HTTPS_VERSION}|\n|wireguard.dnp.dappnode.eth|${WIREGUARD_VERSION}|\n# Changes\nChanges implemented in release ${CORE_VERSION}\n# Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso\n${SHASUM_ATTENDED}\n\`\`\`\n# Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnode.s0\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso\n${SHASUM_UNATTENDED}\n\`\`\`\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
- cat CHANGELOG.md
- env:
- SHASUM_ATTENDED: ${{ steps.shasum-attended.outputs.SHASUM_ATTENDED }}
- SHASUM_UNATTENDED: ${{ steps.shasum-unattended.outputs.SHASUM_UNATTENDED }}
+ file=$(find . -type f -name 'Dappnode-ubuntu-*.iso' ! -name '*unattended*')
+ SHASUM_UBUNTU_ATTENDED=$(shasum -a 256 $file)s
+ echo "::set-output name=SHASUM_UBUNTU_ATTENDED::$SHASUM_UBUNTU_ATTENDED"
+
+ - name: Get SHA-256 Debian unattended
+ id: shasum-ubuntu-unattended
+ run: |
+ file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
+ SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
+ echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
- # PRE-RELEASE ASSETS
- - name: Pre release
- uses: softprops/action-gh-release@v1
+ # ARTIFACTS ASSETS
+ - name: Artifact
+ uses: actions/upload-artifact@v3
with:
- tag_name: ${{ github.event.inputs.core }}
- prerelease: true
- files: |
- ./DAppNode-*-amd64.iso
- ./DAppNode-*-amd64-unattended.iso
+ name: test-artifact
+ path: |
+ ./Dappnode-debian-*.iso
+ ./Dappnode-ubuntu-*.iso
./scripts/dappnode_install.sh
./scripts/dappnode_install_pre.sh
./scripts/dappnode_uninstall.sh
./scripts/dappnode_access_credentials.sh
dappnode_profile.sh
- body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -153,6 +188,85 @@ jobs:
run: |
git diff --no-index --word-diff-regex=[^[:space:]] --no-patch .dappnode_profile && echo '::set-output name=HAS_CHANGED::true' || echo '::set-output name=HAS_CHANGED::false'
+ # … your existing "Artifact" upload-artifact@v3 step here …
+
+ # Generate CHANGELOG.md just like before,
+ - name: Write release content
+ run: |
+ cat > CHANGELOG.md < attended.yaml
+ yq '.autoinstall' iso/preseeds/ubuntu/autoinstall_unattended.yaml > unattended.yaml
+
+ - name: Validate attended autoinstall.yaml
+ run: |
+ check-jsonschema --schemafile schema.json attended.yaml
+
+ - name: Validate unattended autoinstall.yaml
+ run: |
+ check-jsonschema --schemafile schema.json unattended.yaml
diff --git a/.yamllint b/.yamllint
new file mode 100644
index 0000000..c9b624e
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,6 @@
+# .yamllint
+extends: default
+
+rules:
+ line-length:
+ max: 150
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 7eddc98..ed9ebe0 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -8,6 +8,7 @@ services:
- BUILD=false # In case you want to re-generate a all the images, not recommended
- CLEAN=true # it remove the images directory
- UNATTENDED=false # UNATTENDED version
+ - BASE_OS=debian # Base OS version (debian or ubuntu)
volumes:
- ./images:/images
- "/var/run/docker.sock:/var/run/docker.sock"
diff --git a/iso/boot/splash.png b/iso/boot/splash.png
index 835dc493b3b82cf1c97fcf904f3f9d5ead4f2f71..a6f4196e77e581d4910a2dc2de08b7293301def2 100644
GIT binary patch
literal 12614
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
literal 4101
zcmeH}=QrG27sr2N5G^txVss+}(MAaOCc446x~LI7YKS^UH<5^742eW9(R+^?Jh~89
zjouQXm(d5KJd?lRdG)-@Uh90szC_-96pxom}j=z5U$nxb1wM>;b@cdfUjXYWXhRxdW3a
z8Imeu87Wg#^-5SidYjl1SERWg_dW4pw_3N7cOALY#U4@nKR>gc3L5G?Z?3@>A5Zu0
zS)I1*wEXg)v(!8^k)Is(_v1aprsJ7i=Yl*Ym$$*CF|u;gaX8}3Esw({UyrX2D~uh1
zJpSzBbI1GVIv4bk0ReTXt3Cc=OLn`fSB9YOThJs15z$mUQI_!z&Cb@E&`wx1E^Jq`
zq+Vjw_?UcUNVa#&3BWhpxiU~I}{H&cnR$<%S%@O=2LK7Ha+H;u=z-u3ps`qLh%zKpHn(p+w@%lYyxqg+||m12XHl<<((
ztf*37O6|#FQZ+AK>1ll6@abOwBGC+@X$_Axvlc9U#y6sm$$rVD_N((F8Qm>)B}P4c
zyBFNorZ5eA(eclPspsrJFhgLovAjMERL{ol)xZ|$81{LE4H3x&iQaqNrBY6%PLEK1
zA8U#n9~+LAy>J=pOfF199cZWNb@LvL*O=kwIO6NL#I9IuVQ6~Ayl$%&HM28gX&PX1@pal^PRy43jH*1IeH?G?%5B0pkc|Yi8@y`Bq%pAk{~OL_3;iIj7L$hbN693LrJme{T74
zlu2bd`4mQ0vOcXb=6!H)Ubr$Y?(7|M;R}I}W0gmaoZ-Nv5!TJhXgV~r!UM-o*(lfR
zjf`Y6&D(ts~qn>$~O(W{E|y!mz$Z?tTz?!8;kLm
z`oSTQ_O#SOUb{wHRg*NYC8vA0tRk9FKFZ`YzG_jW{>A7r{>
z4JE#l4+U;+2q>7a;DXt@Tv)XrGDN|Wj@S+l^1AU>1~j-l3dU(60)5bj>PojsS$>-k
z>U(!!LPBaiWIUgX{*#_`&J9XdXT7qx#^gb26@zQu1##6Z&K!=>@YHHo#VlQuH=I4a
zky`XkFij;DMDOeVHII;KLSfQn?ysxmwS;U-+$90${%~VmXCi&+Ghe+)6sftrc2ZW>
zRaaK#*45WhRo7G@b+Oc-ce2P11@BWY@m?V~xm?Hlt^ANd_*})?
ziHLkDk+cIjj}L~tVJE4+{hw$VtPNZ29v@5u(3P`YB{l_}ah)D2
zV*(2qXw#ofU8bdDro{B~uyPI2?Z&AQ7E>aS?H;qdk7*MZ2dUC=O+1b
zU1x-iLnN5|&<)Hy!J#z|7DZz+`OWY1s?iJ`Cj8S%WC?leh+z{r=vqU=uiB=31EH4$$+Y+=AfXU;L8glfj}hogkNHh+*<->Y~?m;>f50p
z2nIx+qu2n0c^cXDYToE+M2BVYo^O#U%tqY?o{F5kh=~u-G-@~lxB)QtQ>I{}*I)p5
zR73$3M~NNXQZyz6P>AeMV8rb)AcWnXZ!fgu22hc}Vugw7{&5OHg&bs>T|JZtXPH`;
zMhg{QMiyVg&&n1*B0AlX#t6Z|bges3NX!(T@9fIKu}CqKl%5@sipL#LzlCUhI<8Jo3h3YS5Mf9rU1^4S`x^o8bgf<-L@qd
z_dltZWGoc;mvq!Y?BwGIvt5)BVN?G85lj;240ewWF_j
z4o`RE0+g3!bL6>3WJ@{1Hio1KRo4S#a3F`Gx)C$XWj+9jCzlEWtgsFk5LMy4i+bYl
zU=Q&H_%|A*SnmB6J99FOh{h)n!YDqb?d;PP$@xK)KQh?P28{98ZQfZHC1JQ+Oo>}w
zG4<~~Qn$L_T%N98a$p__**Ei@jC(9r%FAt>K2bxh<8LAyF@`2&*SXK;nBDx90Zqi;&;qfn(GEp
zOhS!m#Lv#Zz8K4vbDqAzrYR4u0i>tGErKgEy9pH7lW>!Mq;Qf@wUUH%8UufH+
v0Rkt%nEdzjPy8Y9hrk~Ke+c|90?y|E!xU2WC-o=q-=*p*+K4hGtI+=fc7lZ?
diff --git a/iso/boot/ubuntu/grub.cfg b/iso/boot/ubuntu/grub.cfg
new file mode 100644
index 0000000..88c8305
--- /dev/null
+++ b/iso/boot/ubuntu/grub.cfg
@@ -0,0 +1,21 @@
+if loadfont unicode ; then
+ set gfxmode=800x600
+ insmod efi_gop
+ insmod efi_uga
+ insmod video_bochs
+ insmod video_cirrus
+ insmod gfxterm
+ insmod png
+ terminal_output gfxterm
+fi
+
+set timeout=6
+
+set theme=/boot/grub/themes/dappnode/theme.txt
+
+menuentry "Install Dappnode (over Ubuntu Server)" {
+ set background_color=black
+ set gfxpayload=keep # Maintain the graphical resolution through the booting
+ linux /casper/vmlinuz autoinstall vga=788 FRONTEND_BACKGROUND=dark --- # Added autoinstall to make it unattended
+ initrd /casper/initrd
+}
\ No newline at end of file
diff --git a/iso/boot/ubuntu/themes/dappnode/splash.png b/iso/boot/ubuntu/themes/dappnode/splash.png
new file mode 100644
index 0000000000000000000000000000000000000000..236fa0346a2345bb7f717229b3df289bbd4f944b
GIT binary patch
literal 12557
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.txt
+}
diff --git a/iso/scripts/generate_ISO.sh b/iso/scripts/generate_ISO.sh
index 024e539..bf24177 100755
--- a/iso/scripts/generate_ISO.sh
+++ b/iso/scripts/generate_ISO.sh
@@ -22,4 +22,8 @@ fi
mkdir -p /usr/src/app/dappnode
touch /usr/src/app/dappnode/iso_install.log
-/usr/src/app/iso/scripts/generate_dappnode_iso_debian.sh
+if [ "$BASE_OS" = "ubuntu" ]; then
+ /usr/src/app/iso/scripts/generate_dappnode_iso_ubuntu.sh
+else
+ /usr/src/app/iso/scripts/generate_dappnode_iso_debian.sh
+fi
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index c1c9b13..e5f42cc 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -1,85 +1,98 @@
#!/bin/bash
set -e
-# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.10.0-amd64-netinst.iso
-ISO_NAME=debian-12.10.0-amd64-netinst.iso
-ISO_PATH="/images/${ISO_NAME}"
-ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
-SHASUM="ee8d8579128977d7dc39d48f43aec5ab06b7f09e1f40a9d98f2a9d149221704a ${ISO_PATH}"
-
-echo "Downloading debian ISO image: ${ISO_NAME}..."
-if [ ! -f ${ISO_PATH} ]; then
- wget ${ISO_URL}/${ISO_NAME} \
- -O ${ISO_PATH}
-fi
-echo "Done!"
-
-echo "Verifying download..."
-[[ "$(shasum -a 256 ${ISO_PATH})" != "$SHASUM" ]] && {
- echo "ERROR: wrong shasum"
- exit 1
+SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}")
+
+source ${SCRIPTS_DIR}/common_iso_generation.sh
+
+# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.11.0-amd64-netinst.iso
+BASE_ISO_NAME="debian-12.11.0-amd64-netinst.iso"
+BASE_ISO_PATH="/images/${BASE_ISO_NAME}"
+BASE_ISO_URL="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/${BASE_ISO_NAME}"
+BASE_ISO_SHASUM="30ca12a15cae6a1033e03ad59eb7f66a6d5a258dcf27acd115c2bd42d22640e8 ${BASE_ISO_PATH}"
+
+DAPPNODE_ISO_NAME="${DAPPNODE_ISO_PREFIX}${BASE_ISO_NAME}"
+DAPPNODE_ISO_PATH="/images/${DAPPNODE_ISO_NAME}"
+
+customize_debian_preseed() {
+ local iso_build_path=$1
+ local workdir=$2
+
+ echo "[INFO] Customizing preseed..."
+
+ local tmp_initrd="/tmp/makeinitrd"
+ local install_dir="${iso_build_path}/install.amd"
+ local preseeds_dir="${workdir}/iso/preseeds"
+
+ rm -rf "${tmp_initrd}"
+ mkdir -p "${tmp_initrd}"
+
+ local preseed_name="preseed.cfg"
+ [[ $UNATTENDED == *"true"* ]] && preseed_name="preseed_unattended.cfg"
+
+ local preseed_file="${preseeds_dir}/${preseed_name}"
+
+ if [ ! -f "${preseed_file}" ]; then
+ echo "[ERROR] Preseed file not found: ${preseed_file}"
+ exit 1
+ fi
+
+ # Extract the initrd into a temporary directory
+ gunzip -c "${install_dir}/initrd.gz" | cpio -idum -D "${tmp_initrd}" || {
+ echo "[ERROR] Could not decompress and extract initrd"
+ exit 1
+ }
+
+ # Add the preseed file to the initrd
+ cp "${preseed_file}" "${tmp_initrd}/preseed.cfg" || {
+ echo "[ERROR] Could not copy preseed file"
+ exit 1
+ }
+
+ # Recreate (and recompress) the initrd
+ (cd "${tmp_initrd}" && find . -print0 | cpio -0 -ov -H newc | gzip >"${install_dir}/initrd.gz") || {
+ echo "[ERROR] Could not create new initrd"
+ exit 1
+ }
+
+ echo "[INFO] Preseed customization complete."
+}
+
+configure_boot_menu() {
+ local iso_build_path=$1
+ local workdir=$2
+
+ local boot_dir="${workdir}/iso/boot"
+
+ echo "[INFO] Configuring the boot menu for Dappnode..."
+ cp ${boot_dir}/grub.cfg ${iso_build_path}/boot/grub/grub.cfg
+ cp ${boot_dir}/theme_1 ${iso_build_path}/boot/grub/theme/1
+ cp ${boot_dir}/isolinux.cfg ${iso_build_path}/isolinux/isolinux.cfg
+ cp ${boot_dir}/menu.cfg ${iso_build_path}/isolinux/menu.cfg
+ cp ${boot_dir}/txt.cfg ${iso_build_path}/isolinux/txt.cfg
+ cp ${boot_dir}/splash.png ${iso_build_path}/isolinux/splash.png
+}
+
+generate_debian_iso() {
+ local mbr_path=$1
+ local iso_output_path=$2
+ local iso_build_path=$3
+
+ echo "[INFO] Generating new ISO..."
+
+ xorriso -as mkisofs -isohybrid-mbr ${mbr_path} \
+ -c /isolinux/boot.cat -b /isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 \
+ -boot-info-table -eltorito-alt-boot -e /boot/grub/efi.img -no-emul-boot \
+ -isohybrid-gpt-basdat -o "${iso_output_path}" ${iso_build_path}
}
-echo "Clean old files..."
-rm -rf dappnode-isoº
-rm -rf DappNode-debian-*
-
-echo "Extracting the iso..."
-xorriso -osirrox on -indev /images/${ISO_NAME} \
- -extract / dappnode-iso
-
-echo "Obtaining the isohdpfx.bin for hybrid ISO..."
-dd if=/images/${ISO_NAME} bs=432 count=1 \
- of=dappnode-iso/isolinux/isohdpfx.bin
-
-cd /usr/src/app/dappnode-iso # /usr/src/app/dappnode-iso
-
-echo "Downloading third-party packages..."
-sed '1,/^\#\!ISOBUILD/!d' /usr/src/app/scripts/dappnode_install_pre.sh >/tmp/vars.sh
-# shellcheck disable=SC1091
-source /tmp/vars.sh
-
-echo "Creating necessary directories and copying files..."
-mkdir -p /usr/src/app/dappnode-iso/dappnode
-cp -r /usr/src/app/scripts /usr/src/app/dappnode-iso/dappnode
-cp -r /usr/src/app/dappnode/* /usr/src/app/dappnode-iso/dappnode
-
-echo "Customizing preseed..."
-mkdir -p /tmp/makeinitrd
-cd install.amd
-cp initrd.gz /tmp/makeinitrd/
-if [[ $UNATTENDED == *"true"* ]]; then
- cp /usr/src/app/iso/preseeds/preseed_unattended.cfg /tmp/makeinitrd/preseed.cfg
-else
- cp /usr/src/app/iso/preseeds/preseed.cfg /tmp/makeinitrd/preseed.cfg
-fi
-cd /tmp/makeinitrd
-gunzip initrd.gz
-cpio -id -H newc /tmp/list
-echo "preseed.cfg" >>/tmp/list
-rm initrd
-cpio -o -H newc initrd
-gzip initrd
-cd -
-mv /tmp/makeinitrd/initrd.gz ./initrd.gz
-cd ..
-
-echo "Configuring the boot menu for DappNode..."
-cp /usr/src/app/iso/boot/grub.cfg boot/grub/grub.cfg
-cp /usr/src/app/iso/boot/theme_1 boot/grub/theme/1
-cp /usr/src/app/iso/boot/isolinux.cfg isolinux/isolinux.cfg
-cp /usr/src/app/iso/boot/menu.cfg isolinux/menu.cfg
-cp /usr/src/app/iso/boot/txt.cfg isolinux/txt.cfg
-cp /usr/src/app/iso/boot/splash.png isolinux/splash.png
-
-echo "Fix md5 sum..."
-# shellcheck disable=SC2046
-md5sum $(find ! -name "md5sum.txt" ! -path "./isolinux/*" -type f) >md5sum.txt
-
-echo "Generating new iso..."
-xorriso -as mkisofs -isohybrid-mbr isolinux/isohdpfx.bin \
- -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 \
- -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot \
- -isohybrid-gpt-basdat -o /images/DAppNode-debian-bookworm-amd64.iso .
+download_iso "${BASE_ISO_PATH}" "${BASE_ISO_NAME}" "${BASE_ISO_URL}"
+verify_download "${BASE_ISO_PATH}" "${BASE_ISO_SHASUM}"
+clean_old_files "${ISO_BUILD_PATH}" "${DAPPNODE_ISO_PREFIX}"
+extract_iso "${BASE_ISO_PATH}" "${ISO_BUILD_PATH}"
+prepare_boot_process "${BASE_ISO_PATH}" "${ISO_BUILD_PATH}/isolinux/isohdpfx.bin"
+add_dappnode_files_to_iso_build "${ISO_BUILD_PATH}" "${WORKDIR}"
+customize_debian_preseed "${ISO_BUILD_PATH}" "${WORKDIR}"
+configure_boot_menu "${ISO_BUILD_PATH}" "${WORKDIR}"
+handle_checksums # TODO: Check if it fits both ubuntu and debian
+generate_debian_iso "${ISO_BUILD_PATH}/isolinux/isohdpfx.bin" "${DAPPNODE_ISO_PATH}" "${ISO_BUILD_PATH}"
diff --git a/iso/scripts/generate_dappnode_iso_ubuntu.sh b/iso/scripts/generate_dappnode_iso_ubuntu.sh
new file mode 100755
index 0000000..6b64968
--- /dev/null
+++ b/iso/scripts/generate_dappnode_iso_ubuntu.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+set -e
+
+SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}")
+
+source ${SCRIPTS_DIR}/common_iso_generation.sh
+
+BASE_ISO_NAME=ubuntu-24.04.2-live-server-amd64.iso
+BASE_ISO_PATH="/images/${BASE_ISO_NAME}"
+BASE_ISO_URL="https://releases.ubuntu.com/24.04/${BASE_ISO_NAME}"
+BASE_ISO_SHASUM="d6dab0c3a657988501b4bd76f1297c053df710e06e0c3aece60dead24f270b4d ${BASE_ISO_PATH}"
+
+DAPPNODE_ISO_NAME="${DAPPNODE_ISO_PREFIX}${BASE_ISO_NAME}"
+DAPPNODE_ISO_PATH="/images/${DAPPNODE_ISO_NAME}"
+
+get_efi_partition() {
+ local base_iso_path=$1
+ local dest_efi_path=$2
+ local block_size=512
+
+ local efi_start=$(fdisk -l ${base_iso_path} | grep 'Appended2' | awk '{print $2}')
+ local efi_end=$(fdisk -l ${base_iso_path} | grep 'Appended2' | awk '{print $3}')
+ local efi_size=$(expr ${efi_end} - ${efi_start} + 1)
+
+ echo "[INFO] Obtaining the EFI partition image from ${efi_start} with size ${efi_size}..."
+ dd if=${base_iso_path} bs=${block_size} skip="$efi_start" count="$efi_size" of=${dest_efi_path}
+}
+
+add_ubuntu_autoinstall() {
+ local preseeds_dir=$1
+ local iso_build_path=$2
+
+ echo "[INFO] Adding preseed..."
+ if [[ $UNATTENDED == *"true"* ]]; then
+ cp ${preseeds_dir}/autoinstall_unattended.yaml ${iso_build_path}/autoinstall.yaml
+ else
+ cp ${preseeds_dir}/autoinstall.yaml ${iso_build_path}/autoinstall.yaml
+ fi
+}
+
+configure_boot_menu() {
+ echo "[INFO] Configuring the boot menu for Dappnode..."
+ cp -r /usr/src/app/iso/boot/ubuntu/* ${ISO_BUILD_PATH}/boot/grub/
+}
+
+generate_ubuntu_iso() {
+ local mbr_path=$1
+ local efi_path=$2
+ local iso_output_path=$3
+ local iso_build_path=$4
+
+ echo "[INFO] Creating the new Ubuntu ISO..."
+ mkisofs \
+ -rational-rock -joliet -joliet-long -full-iso9660-filenames \
+ -iso-level 3 -partition_offset 16 --grub2-mbr ${mbr_path} \
+ --mbr-force-bootable -append_partition 2 0xEF ${efi_path} \
+ -appended_part_as_gpt \
+ -eltorito-catalog /boot.catalog \
+ -eltorito-boot /boot/grub/i386-pc/eltorito.img -no-emul-boot -boot-load-size 4 \
+ -boot-info-table --grub2-boot-info -eltorito-alt-boot --efi-boot '--interval:appended_partition_2:all::' -no-emul-boot \
+ -o ${iso_output_path} ${iso_build_path}
+}
+
+download_iso "${BASE_ISO_PATH}" "${BASE_ISO_NAME}" "${BASE_ISO_URL}"
+verify_download "${BASE_ISO_PATH}" "${BASE_ISO_SHASUM}"
+clean_old_files "${ISO_BUILD_PATH}" "${DAPPNODE_ISO_PREFIX}"
+extract_iso "${BASE_ISO_PATH}" "${ISO_BUILD_PATH}"
+prepare_boot_process "${BASE_ISO_PATH}" "${ISO_BUILD_PATH}/mbr"
+get_efi_partition "${BASE_ISO_PATH}" "${ISO_BUILD_PATH}/efi"
+add_dappnode_files_to_iso_build "${ISO_BUILD_PATH}" "${WORKDIR}"
+add_ubuntu_autoinstall "/usr/src/app/iso/preseeds/ubuntu" "${ISO_BUILD_PATH}"
+configure_boot_menu
+handle_checksums
+generate_ubuntu_iso "${ISO_BUILD_PATH}/mbr" "${ISO_BUILD_PATH}/efi" "${DAPPNODE_ISO_PATH}" "${ISO_BUILD_PATH}"
diff --git a/scripts/dappnode_install.sh b/scripts/dappnode_install.sh
index 331a252..b25c7bf 100755
--- a/scripts/dappnode_install.sh
+++ b/scripts/dappnode_install.sh
@@ -11,6 +11,7 @@ LOGS_DIR="$DAPPNODE_DIR/logs"
CONTENT_HASH_FILE="${DAPPNODE_CORE_DIR}/packages-content-hash.csv"
LOGFILE="${LOGS_DIR}/dappnode_install.log"
MOTD_FILE="/etc/motd"
+UPDATE_MOTD_DIR="/etc/update-motd.d"
DAPPNODE_PROFILE="${DAPPNODE_CORE_DIR}/.dappnode_profile"
# Get URLs
PROFILE_BRANCH=${PROFILE_BRANCH:-"master"}
@@ -186,16 +187,48 @@ dappnode_core_load() {
}
customMotd() {
- if [ -f ${MOTD_FILE} ]; then
- cat <${MOTD_FILE}
- ___ _ _ _ _
-| \ /_\ _ __ _ __| \| |___ __| |___
-| |) / _ \| '_ \ '_ \ . / _ \/ _ / -_)
-|___/_/ \_\ .__/ .__/_|\_\___/\__,_\___|
- |_| |_|
-EOF
- echo -e "$WELCOME_MESSAGE" >>"$MOTD_FILE"
+
+ generateMotdText
+
+ if [ -d "${UPDATE_MOTD_DIR}" ]; then
+ # Ubuntu configuration
+ modifyMotdGeneration
+ fi
+}
+
+# Debian distros use /etc/motd plain text file
+generateMotdText() {
+ # Check and create the MOTD file if it does not exist
+ if [ ! -f "${MOTD_FILE}" ]; then
+ touch "${MOTD_FILE}"
fi
+
+ # Write the ASCII art and welcome message as plain text
+ cat <<'EOF' >"${MOTD_FILE}"
+ ___ _
+ | \ __ _ _ __ _ __ _ _ ___ __| |___
+ | |) / _` | '_ \ '_ \ ' \/ _ \/ _` / -_)
+ |___/\__,_| .__/ .__/_||_\___/\__,_\___|
+ |_| |_|
+EOF
+ echo -e "$WELCOME_MESSAGE" >>"${MOTD_FILE}"
+}
+
+# Ubuntu distros use /etc/update-motd.d/ to generate the motd
+modifyMotdGeneration() {
+ disabled_motd_dir="${UPDATE_MOTD_DIR}/disabled"
+
+ mkdir -p "${disabled_motd_dir}"
+
+ # Move all the files in /etc/update-motd.d/ to /etc/update-motd.d/disabled/
+ # Except for the files listed in "files_to_keep"
+ files_to_keep="00-header 50-landscape-sysinfo 98-reboot-required"
+ for file in ${UPDATE_MOTD_DIR}/*; do
+ base_file=$(basename "${file}")
+ if [ -f "${file}" ] && ! echo "${files_to_keep}" | grep -qw "${base_file}"; then
+ mv "${file}" "${disabled_motd_dir}/"
+ fi
+ done
}
addSwap() {
@@ -290,6 +323,30 @@ installExtraDpkg() {
fi
}
+# The main user needs to be added to the docker group to be able to run docker commands without sudo
+# Explained in: https://docs.docker.com/engine/install/linux-postinstall/
+addUserToDockerGroup() {
+ # UID is provided to the first regular user created in the system
+ USER=$(grep 1000 "/etc/passwd" | cut -f 1 -d:)
+
+ # If USER is not found, warn the user and return
+ if [ -z "$USER" ]; then
+ echo -e "\e[33mWARN: Default user not found. Could not add it to the docker group.\e[0m" 2>&1 | tee -a $LOGFILE
+ return
+ fi
+
+ if groups "$USER" | grep &>/dev/null '\bdocker\b'; then
+ echo -e "\e[32mUser $USER is already in the docker group\e[0m" 2>&1 | tee -a $LOGFILE
+ return
+ fi
+
+ # This step is already done in the dappnode_install_pre.sh script,
+ # but it's not working in the Ubuntu ISO because the late-commands in the autoinstall.yaml
+ # file are executed before the user is created.
+ usermod -aG docker "$USER"
+ echo -e "\e[32mUser $USER added to the docker group\e[0m" 2>&1 | tee -a $LOGFILE
+}
+
##############################################
#### SCRIPT START ####
##############################################
@@ -315,9 +372,12 @@ if [ "$ARCH" == "amd64" ]; then
installSgx
echo -e "\e[32mInstalling extra packages...\e[0m" 2>&1 | tee -a $LOGFILE
- installExtraDpkg
+ installExtraDpkg # TODO: Why is this being called twice?
fi
+echo -e "\e[32mAdding user to docker group...\e[0m" 2>&1 | tee -a $LOGFILE
+addUserToDockerGroup
+
echo -e "\e[32mCreating dncore_network if needed...\e[0m" 2>&1 | tee -a $LOGFILE
docker network create --driver bridge --subnet 172.33.0.0/16 dncore_network 2>&1 | tee -a $LOGFILE
diff --git a/scripts/dappnode_install_pre.sh b/scripts/dappnode_install_pre.sh
index e09ae68..d6cf473 100755
--- a/scripts/dappnode_install_pre.sh
+++ b/scripts/dappnode_install_pre.sh
@@ -6,8 +6,6 @@ DAPPNODE_DIR="/usr/src/dappnode"
LOGS_DIR="$DAPPNODE_DIR/logs"
lsb_dist="$(. /etc/os-release && echo "$ID")"
-#!ISOBUILD Do not modify, variables above imported for ISO build
-
detect_installation_type() {
if [ -f "${DAPPNODE_DIR}/iso_install.log" ]; then
LOG_FILE="${LOGS_DIR}/iso_install.log"
@@ -22,21 +20,30 @@ detect_installation_type() {
add_docker_repo() {
apt-get update -y
apt-get remove -y docker docker-engine docker.io containerd runc | tee -a $LOG_FILE
- apt-get install -y ca-certificates curl gnupg lsb-release | tee -a $LOG_FILE
- mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings
- curl -fsSL "https://download.docker.com/linux/${lsb_dist}/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
+
+ # Add Docker GPG key
+ apt-get install -y ca-certificates curl lsb-release | tee -a $LOG_FILE
+ install -m 0755 -d /etc/apt/keyrings
+ curl -fsSL "https://download.docker.com/linux/${lsb_dist}/gpg" -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.gpg
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$lsb_dist $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list >/dev/null
+
+ # Add the repository to APT sources
+ echo \
+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$lsb_dist $(lsb_release -cs) stable" |
+ tee /etc/apt/sources.list.d/docker.list >/dev/null
+
+ apt-get update -y
}
# DOCKER INSTALLATION
install_docker() {
apt-get update -y
- apt-get install -y docker-ce docker-ce-cli containerd.io | tee -a $LOG_FILE
+ apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | tee -a $LOG_FILE
# Ensure xz is installed
[ -f "/usr/bin/xz" ] || (apt-get install -y xz-utils)
+ # Not working in Ubuntu ISO because the user is not created before executing late-commands
USER=$(grep 1000 "/etc/passwd" | cut -f 1 -d:)
[ -z "$USER" ] || usermod -aG docker "$USER"
@@ -102,6 +109,34 @@ host_update() {
apt-get -y upgrade 2>&1 | tee -a $LOG_FILE
}
+check_ubuntu_connectivity() {
+ { netplan get | grep "dhcp4: true" &>/dev/null; } || {
+ echo "Interfaces not found"
+ exit 1
+ }
+}
+
+check_debian_connectivity() {
+ { [ -f /etc/network/interfaces ] && grep "iface en.* inet dhcp" /etc/network/interfaces &>/dev/null; } || {
+ echo "Interfaces not found"
+ exit 1
+ }
+}
+
+add_debian_missing_interfaces() {
+ # shellcheck disable=SC2013
+ for IFACE in $(grep "en.*" /usr/src/dappnode/hotplug); do
+ # shellcheck disable=SC2143
+ if [[ $(grep -L "$IFACE" /etc/network/interfaces) ]]; then
+ {
+ echo "# $IFACE"
+ echo "allow-hotplug $IFACE"
+ echo "iface $IFACE inet dhcp"
+ } >>/etc/network/interfaces
+ fi
+ done
+}
+
##############################################
#### SCRIPT START ####
##############################################
@@ -147,17 +182,10 @@ else
install_lsof 2>&1 | tee -a $LOG_FILE
fi
-## Add missing interfaces
-if [ -f /usr/src/dappnode/hotplug ]; then
- # shellcheck disable=SC2013
- for IFACE in $(grep "en.*" /usr/src/dappnode/hotplug); do
- # shellcheck disable=SC2143
- if [[ $(grep -L "$IFACE" /etc/network/interfaces) ]]; then
- {
- echo "# $IFACE"
- echo "allow-hotplug $IFACE"
- echo "iface $IFACE inet dhcp"
- } >>/etc/network/interfaces
- fi
- done
+## Add or Update Network Configuration Based on OS
+if [ "$lsb_dist" = "ubuntu" ]; then
+ check_ubuntu_connectivity
+else
+ check_debian_connectivity
+ add_debian_missing_interfaces
fi
From c87370e241568175446123e72273634742624b5a Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 11:38:18 +0200
Subject: [PATCH 10/44] fix release yaml
---
.github/workflows/release.yml | 70 ++---------------------------------
1 file changed, 4 insertions(+), 66 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7aacdf6..744b48d 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -165,8 +165,10 @@ jobs:
file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
-
- # ARTIFACTS ASSETS
+ - name: Write release content
+ run: |
+ echo "# Versions | Package | Version | |---------------------------------|-----------------------| | bind.dnp.dappnode.eth | ${BIND_VERSION} | | ipfs.dnp.dappnode.eth | ${IPFS_VERSION} | | vpn.dnp.dappnode.eth | ${VPN_VERSION} | | dappmanager.dnp.dappnode.eth | ${DAPPMANAGER_VERSION}| | wifi.dnp.dappnode.eth | ${WIFI_VERSION} | | https.dnp.dappnode.eth | ${HTTPS_VERSION} | | wireguard.dnp.dappnode.eth | ${WIREGUARD_VERSION} | # Changes Changes implemented in release ${CORE_VERSION} # Debian Attended Install and customize Dappnode using the Debian attended ISO: **Dappnode-${CORE_VERSION}-debian-bookworm-amd64.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }} \`\`\` # Debian Unattended Install Debian unattended ISO: **Dappnode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso** Reboot right after installation. :warning: **Warning**: This will install Dappnode automatically, wiping all partitions. ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }} \`\`\` # Ubuntu Attended Install using the Ubuntu attended ISO: **Dappnode-${CORE_VERSION}-ubuntu-bookworm-amd64.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-ubuntu-attended.outputs.SHASUM_UBUNTU_ATTENDED }} \`\`\` # Ubuntu Unattended Install using the Ubuntu unattended ISO: **Dappnode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }} \`\`\` # Dappnode for Raspberry Pi 4 (64-bit) [Installation guide →](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide) **Default login:** - __user__: dappnode - __password__: dappnodepi" > CHANGELOG.md
+ cat CHANGELOG.md
- name: Artifact
uses: actions/upload-artifact@v3
with:
@@ -182,75 +184,11 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- name: Check git diff
id: git_diff
run: |
git diff --no-index --word-diff-regex=[^[:space:]] --no-patch .dappnode_profile && echo '::set-output name=HAS_CHANGED::true' || echo '::set-output name=HAS_CHANGED::false'
- # … your existing "Artifact" upload-artifact@v3 step here …
-
- # Generate CHANGELOG.md just like before,
- - name: Write release content
- run: |
- cat > CHANGELOG.md <
Date: Wed, 2 Jul 2025 11:54:40 +0200
Subject: [PATCH 11/44] remove artifacts
---
.github/workflows/release.yml | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 744b48d..884dfbe 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -169,21 +169,6 @@ jobs:
run: |
echo "# Versions | Package | Version | |---------------------------------|-----------------------| | bind.dnp.dappnode.eth | ${BIND_VERSION} | | ipfs.dnp.dappnode.eth | ${IPFS_VERSION} | | vpn.dnp.dappnode.eth | ${VPN_VERSION} | | dappmanager.dnp.dappnode.eth | ${DAPPMANAGER_VERSION}| | wifi.dnp.dappnode.eth | ${WIFI_VERSION} | | https.dnp.dappnode.eth | ${HTTPS_VERSION} | | wireguard.dnp.dappnode.eth | ${WIREGUARD_VERSION} | # Changes Changes implemented in release ${CORE_VERSION} # Debian Attended Install and customize Dappnode using the Debian attended ISO: **Dappnode-${CORE_VERSION}-debian-bookworm-amd64.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }} \`\`\` # Debian Unattended Install Debian unattended ISO: **Dappnode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso** Reboot right after installation. :warning: **Warning**: This will install Dappnode automatically, wiping all partitions. ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }} \`\`\` # Ubuntu Attended Install using the Ubuntu attended ISO: **Dappnode-${CORE_VERSION}-ubuntu-bookworm-amd64.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-ubuntu-attended.outputs.SHASUM_UBUNTU_ATTENDED }} \`\`\` # Ubuntu Unattended Install using the Ubuntu unattended ISO: **Dappnode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }} \`\`\` # Dappnode for Raspberry Pi 4 (64-bit) [Installation guide →](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide) **Default login:** - __user__: dappnode - __password__: dappnodepi" > CHANGELOG.md
cat CHANGELOG.md
- - name: Artifact
- uses: actions/upload-artifact@v3
- with:
- name: test-artifact
- path: |
- ./Dappnode-debian-*.iso
- ./Dappnode-ubuntu-*.iso
- ./scripts/dappnode_install.sh
- ./scripts/dappnode_install_pre.sh
- ./scripts/dappnode_uninstall.sh
- ./scripts/dappnode_access_credentials.sh
- dappnode_profile.sh
-
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check git diff
id: git_diff
run: |
@@ -204,7 +189,6 @@ jobs:
body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- name: Create Pull Request
if: steps.git_diff.outputs.HAS_CHANGED == 'true'
uses: peter-evans/create-pull-request@v5
From 9062c5eb8241721ecce0570b63aa1998396ef6e2 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:01:08 +0200
Subject: [PATCH 12/44] fix files permissions
---
.github/workflows/release.yml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 884dfbe..d3d337c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -80,6 +80,7 @@ jobs:
- name: Set Debian Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
+ chmod 777 "$file"
attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
mv "$file" "$attended_filename"
@@ -96,6 +97,7 @@ jobs:
- name: Set Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
+ chmod 777 "$file"
core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
mv "$file" "$unattended_filename"
@@ -113,6 +115,7 @@ jobs:
- name: Set Ubuntu Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
+ chmod 777 "$file"
attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
mv "$file" "$attended_filename"
@@ -129,6 +132,7 @@ jobs:
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
+ chmod 777 "$file"
core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
mv "$file" "$unattended_filename"
From 30cf69f3e9b3c185617635e161a7175a3fb3ec14 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:23:53 +0200
Subject: [PATCH 13/44] ensure non-root user
---
Dockerfile | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index e5ef57e..f5571ac 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,15 +1,12 @@
FROM docker:dind
-# hadolint ignore=DL3018
RUN apk update && \
- apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils \
- rm -rf /var/cache/apk/*
+ apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils && \
+ addgroup -S docker && \
+ adduser -S docker-user -G docker
-#RUN apk add -U --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing aufs-util
-
-# RUN addgroup -g 2999 docker
-
-# Create app directory
WORKDIR /usr/src/app
COPY . .
-CMD ["/usr/src/app/iso/scripts/generate_ISO.sh"]
+USER docker-user # Ensure the container runs as a non-root user
+
+CMD ["/usr/src/app/iso/scripts/generate_ISO.sh"]
From df6fae255e69e65f6a04e20c795f4d1fbf731cf9 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:27:25 +0200
Subject: [PATCH 14/44] do not create docker group
---
Dockerfile | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index f5571ac..c2d24f4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,11 @@
FROM docker:dind
+
+# Install required packages
RUN apk update && \
apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils && \
- addgroup -S docker && \
- adduser -S docker-user -G docker
+ # Add user to the existing docker group
+ adduser -S docker-user && \
+ addgroup docker-user docker
WORKDIR /usr/src/app
COPY . .
From 1f3487ef223d7112b047823f98f68dc571ee0901 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:27:44 +0200
Subject: [PATCH 15/44] remove chmods
---
.github/workflows/release.yml | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d3d337c..8da2fee 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -80,7 +80,6 @@ jobs:
- name: Set Debian Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
- chmod 777 "$file"
attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
mv "$file" "$attended_filename"
@@ -96,8 +95,7 @@ jobs:
- name: Set Dappnode unattended ISO name
run: |
- file=$(ls images/Dappnode-debian-*.iso)
- chmod 777 "$file"
+ file=$(ls images/Dappnode-debian-*.iso)
core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
mv "$file" "$unattended_filename"
@@ -115,7 +113,6 @@ jobs:
- name: Set Ubuntu Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
- chmod 777 "$file"
attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
mv "$file" "$attended_filename"
@@ -132,7 +129,6 @@ jobs:
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
- chmod 777 "$file"
core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
mv "$file" "$unattended_filename"
From e038f85acb492b34d2ff979b9739fa059b0b831d Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:31:34 +0200
Subject: [PATCH 16/44] add docker-user to groupd
---
Dockerfile | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index c2d24f4..de5a5de 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,13 +3,14 @@ FROM docker:dind
# Install required packages
RUN apk update && \
apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils && \
- # Add user to the existing docker group
- adduser -S docker-user && \
+ # Create user 'docker-user' and add it to the 'docker' group
+ adduser -S -D -H docker-user && \
addgroup docker-user docker
WORKDIR /usr/src/app
COPY . .
-USER docker-user # Ensure the container runs as a non-root user
+# Switch to 'docker-user' to run as a non-root user
+USER docker-user
CMD ["/usr/src/app/iso/scripts/generate_ISO.sh"]
From 93a76d981295c048acd2134ed96053fb9a8b27e9 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:52:19 +0200
Subject: [PATCH 17/44] remove user
---
Dockerfile | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index de5a5de..a09836e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,15 +2,9 @@ FROM docker:dind
# Install required packages
RUN apk update && \
- apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils && \
- # Create user 'docker-user' and add it to the 'docker' group
- adduser -S -D -H docker-user && \
- addgroup docker-user docker
+ apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils
WORKDIR /usr/src/app
COPY . .
-# Switch to 'docker-user' to run as a non-root user
-USER docker-user
-
CMD ["/usr/src/app/iso/scripts/generate_ISO.sh"]
From 1b32f446217d6607dc5b97038999da892db96229 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:52:55 +0200
Subject: [PATCH 18/44] use cp command instead
---
.github/workflows/release.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8da2fee..36283ca 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -81,7 +81,7 @@ jobs:
run: |
file=$(ls images/Dappnode-debian-*.iso)
attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- mv "$file" "$attended_filename"
+ cp "$file" "$attended_filename"
- name: Build Debian unattended
run: |
@@ -98,7 +98,7 @@ jobs:
file=$(ls images/Dappnode-debian-*.iso)
core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
- mv "$file" "$unattended_filename"
+ cp "$file" "$unattended_filename"
- name: Build Ubuntu attended
run: |
@@ -114,7 +114,7 @@ jobs:
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- mv "$file" "$attended_filename"
+ cp "$file" "$attended_filename"
- name: Build Ubuntu unattended
run: |
@@ -131,7 +131,7 @@ jobs:
file=$(ls images/Dappnode-ubuntu-*.iso)
core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
- mv "$file" "$unattended_filename"
+ cp "$file" "$unattended_filename"
- name: Create dappnode_profile.sh
run: |
From cf149b3568b6fb3c01461cf4873a06bfd4c95223 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 12:56:51 +0200
Subject: [PATCH 19/44] use docker compose
---
.github/workflows/artifacts.yml | 4 ++--
.github/workflows/release.yml | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml
index b82ddac..2f0b689 100644
--- a/.github/workflows/artifacts.yml
+++ b/.github/workflows/artifacts.yml
@@ -113,7 +113,7 @@ jobs:
run: |
sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker-compose up --build
+ docker compose up --build
- name: Check Ubuntu ISO attended
run: |
@@ -130,7 +130,7 @@ jobs:
run: |
sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
- docker-compose up --build
+ docker compose up --build
- name: Check Ubuntu ISO unattended
run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 36283ca..37ed0e8 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -104,7 +104,7 @@ jobs:
run: |
sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker-compose up --build
+ docker compose up --build
- name: Check Ubuntu ISO attended
run: |
@@ -120,7 +120,7 @@ jobs:
run: |
sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
- docker-compose up --build
+ docker compose up --build
- name: Check Ubuntu ISO unattended
run: |
From bf756ea83e16662eaa8c2d7674875006a33680bb Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 13:10:15 +0200
Subject: [PATCH 20/44] comment debian attended
---
.github/workflows/release.yml | 44 +++++++++++++++++------------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 37ed0e8..48a3ef3 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -100,21 +100,21 @@ jobs:
unattended_filename="${core_filename/%.iso/-unattended.iso}"
cp "$file" "$unattended_filename"
- - name: Build Ubuntu attended
- run: |
- sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker compose up --build
-
- - name: Check Ubuntu ISO attended
- run: |
- ls -lrt images/Dappnode-ubuntu-*.iso
-
- - name: Set Ubuntu Dappnode attended ISO name
- run: |
- file=$(ls images/Dappnode-ubuntu-*.iso)
- attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- cp "$file" "$attended_filename"
+ # - name: Build Ubuntu attended
+ # run: |
+ # sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
+ # sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
+ # docker compose up --build
+
+ # - name: Check Ubuntu ISO attended
+ # run: |
+ # ls -lrt images/Dappnode-ubuntu-*.iso
+
+ # - name: Set Ubuntu Dappnode attended ISO name
+ # run: |
+ # file=$(ls images/Dappnode-ubuntu-*.iso)
+ # attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ # cp "$file" "$attended_filename"
- name: Build Ubuntu unattended
run: |
@@ -152,12 +152,12 @@ jobs:
SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
- - name: Get SHA-256 Debian attended
- id: shasum-ubuntu-attended
- run: |
- file=$(find . -type f -name 'Dappnode-ubuntu-*.iso' ! -name '*unattended*')
- SHASUM_UBUNTU_ATTENDED=$(shasum -a 256 $file)s
- echo "::set-output name=SHASUM_UBUNTU_ATTENDED::$SHASUM_UBUNTU_ATTENDED"
+ # - name: Get SHA-256 Debian attended
+ # id: shasum-ubuntu-attended
+ # run: |
+ # file=$(find . -type f -name 'Dappnode-ubuntu-*.iso' ! -name '*unattended*')
+ # SHASUM_UBUNTU_ATTENDED=$(shasum -a 256 $file)s
+ # echo "::set-output name=SHASUM_UBUNTU_ATTENDED::$SHASUM_UBUNTU_ATTENDED"
- name: Get SHA-256 Debian unattended
id: shasum-ubuntu-unattended
@@ -179,11 +179,11 @@ jobs:
with:
tag_name: ${{ github.event.inputs.core }}
prerelease: true
+ # ./Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
files: |
./Dappnode-${CORE_VERSION}-debian-*.iso
./Dappnode-${CORE_VERSION}-debian-*-unattended.iso
./Dappnode-${CORE_VERSION}-ubuntu-*.iso
- ./Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
./scripts/dappnode_install*.sh
dappnode_profile.sh
body_path: CHANGELOG.md
From 196542c93a30978246de039532175bb80e658968 Mon Sep 17 00:00:00 2001
From: pablomendezroyo
Date: Wed, 2 Jul 2025 13:36:17 +0200
Subject: [PATCH 21/44] set os and unnattended as envs
---
.github/workflows/artifacts.yml | 22 ++++++++++------------
.github/workflows/release.yml | 18 +++++++++---------
.github/workflows/test.yml | 12 ++++++------
docker-compose.yml | 4 ++--
4 files changed, 27 insertions(+), 29 deletions(-)
diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml
index 2f0b689..e48a1e8 100644
--- a/.github/workflows/artifacts.yml
+++ b/.github/workflows/artifacts.yml
@@ -71,10 +71,9 @@ jobs:
# Debian ISO ATTENDED
- name: Build Debian attended
run: |
- sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker compose build
- docker compose up
+ export BASE_OS=debian
+ export UNATTENDED=false
+ docker compose up --build
- name: Check Debian ISO attended
run: |
@@ -89,10 +88,9 @@ jobs:
# Debian ISO UNATTENDED
- name: Build Debian unattended
run: |
- sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
- docker compose build
- docker compose up
+ export BASE_OS=debian
+ export UNATTENDED=true
+ docker compose up --build
- name: Check Debian ISO unattended
run: |
@@ -111,8 +109,8 @@ jobs:
# Ubuntu ISO ATTENDED
- name: Build Ubuntu attended
run: |
- sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
+ export BASE_OS=ubuntu
+ export UNATTENDED=false
docker compose up --build
- name: Check Ubuntu ISO attended
@@ -128,8 +126,8 @@ jobs:
# Ubuntu ISO UNATTENDED
- name: Build Ubuntu unattended
run: |
- sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
docker compose up --build
- name: Check Ubuntu ISO unattended
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 48a3ef3..6f5588c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -68,10 +68,9 @@ jobs:
- name: Build Debian attended
run: |
- sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
- docker compose build
- docker compose up
+ export BASE_OS=debian
+ export UNATTENDED=false
+ docker compose up --build
- name: Check Debian ISO attended
run: |
@@ -85,7 +84,8 @@ jobs:
- name: Build Debian unattended
run: |
- sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
+ export BASE_OS=debian
+ export UNATTENDED=true
docker compose build
docker compose up
@@ -102,8 +102,8 @@ jobs:
# - name: Build Ubuntu attended
# run: |
- # sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
- # sed -i -e "/UNATTENDED/s/true/false/" docker-compose.yml
+ # export BASE_OS=ubuntu
+ # export UNATTENDED=false
# docker compose up --build
# - name: Check Ubuntu ISO attended
@@ -118,8 +118,8 @@ jobs:
- name: Build Ubuntu unattended
run: |
- sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
- sed -i -e "/UNATTENDED/s/false/true/" docker-compose.yml
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
docker compose up --build
- name: Check Ubuntu ISO unattended
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index fe3793e..d7c85e1 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -42,9 +42,9 @@ jobs:
# Create Debian ISO
- name: create Debian ISO
run: |
- sed -i -e "/BASE_OS/s/ubuntu/debian/" docker-compose.yml
- docker compose build
- docker compose up
+ export BASE_OS=debian
+ export UNATTENDED=true
+ docker compose up --build
ls images/
# Verify Debian ISO creation
@@ -55,9 +55,9 @@ jobs:
# Create Ubuntu ISO
- name: create Ubuntu ISO
run: |
- sed -i -e "/BASE_OS/s/debian/ubuntu/" docker-compose.yml
- docker compose build
- docker compose up
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
+ docker compose up --build
ls images/
# Verify Ubuntu ISO creation
diff --git a/docker-compose.yml b/docker-compose.yml
index ed9ebe0..b358db4 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,8 +7,8 @@ services:
environment:
- BUILD=false # In case you want to re-generate a all the images, not recommended
- CLEAN=true # it remove the images directory
- - UNATTENDED=false # UNATTENDED version
- - BASE_OS=debian # Base OS version (debian or ubuntu)
+ - UNATTENDED=${UNATTENDED} # UNATTENDED version
+ - BASE_OS=${BASE_OS} # Base OS version (debian or ubuntu)
volumes:
- ./images:/images
- "/var/run/docker.sock:/var/run/docker.sock"
From 682dae7e329a8f32bc188ff1c7319d0abe5f6818 Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 14:11:32 +0200
Subject: [PATCH 22/44] fix body release
---
.github/workflows/release.yml | 34 +++++++++++++++-------------------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 6f5588c..536ef38 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -79,8 +79,9 @@ jobs:
- name: Set Debian Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
- attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- cp "$file" "$attended_filename"
+ filename=$(basename "$file")
+ attended_filename="${filename/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ cp "$file" "images/$attended_filename"
- name: Build Debian unattended
run: |
@@ -96,7 +97,8 @@ jobs:
- name: Set Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
- core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ filename=$(basename "$file")
+ core_filename="${filename/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
cp "$file" "$unattended_filename"
@@ -129,9 +131,10 @@ jobs:
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
- core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ filename=$(basename "$file")
+ core_filename="${filename/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
- cp "$file" "$unattended_filename"
+ cp "$file" "images/$unattended_filename"
- name: Create dappnode_profile.sh
run: |
@@ -165,14 +168,16 @@ jobs:
file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
+
- name: Write release content
run: |
- echo "# Versions | Package | Version | |---------------------------------|-----------------------| | bind.dnp.dappnode.eth | ${BIND_VERSION} | | ipfs.dnp.dappnode.eth | ${IPFS_VERSION} | | vpn.dnp.dappnode.eth | ${VPN_VERSION} | | dappmanager.dnp.dappnode.eth | ${DAPPMANAGER_VERSION}| | wifi.dnp.dappnode.eth | ${WIFI_VERSION} | | https.dnp.dappnode.eth | ${HTTPS_VERSION} | | wireguard.dnp.dappnode.eth | ${WIREGUARD_VERSION} | # Changes Changes implemented in release ${CORE_VERSION} # Debian Attended Install and customize Dappnode using the Debian attended ISO: **Dappnode-${CORE_VERSION}-debian-bookworm-amd64.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }} \`\`\` # Debian Unattended Install Debian unattended ISO: **Dappnode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso** Reboot right after installation. :warning: **Warning**: This will install Dappnode automatically, wiping all partitions. ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }} \`\`\` # Ubuntu Attended Install using the Ubuntu attended ISO: **Dappnode-${CORE_VERSION}-ubuntu-bookworm-amd64.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-ubuntu-attended.outputs.SHASUM_UBUNTU_ATTENDED }} \`\`\` # Ubuntu Unattended Install using the Ubuntu unattended ISO: **Dappnode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso** ## ISO SHA-256 Checksum \`\`\` ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }} \`\`\` # Dappnode for Raspberry Pi 4 (64-bit) [Installation guide →](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide) **Default login:** - __user__: dappnode - __password__: dappnodepi" > CHANGELOG.md
+ echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${BIND_VERSION}|\n|ipfs.dnp.dappnode.eth|${IPFS_VERSION}|\n|vpn.dnp.dappnode.eth |${VPN_VERSION}|\n|dappmanager.dnp.dappnode.eth|${DAPPMANAGER_VERSION}|\n|wifi.dnp.dappnode.eth|${WIFI_VERSION}|\n|https.dnp.dappnode.eth|${HTTPS_VERSION}|\n|wireguard.dnp.dappnode.eth|${WIREGUARD_VERSION}|\n# Changes\nChanges implemented in release ${CORE_VERSION}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso\n${SHASUM_DEBIAN_ATTENDED}\n\`\`\`\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso\n${SHASUM_DEBIAN_UNATTENDED}\n\`\`\`\n# Ubuntu Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso\n${SHASUM_UBUNTU_UNATTENDED}\n\`\`\`\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
cat CHANGELOG.md
- - name: Check git diff
- id: git_diff
- run: |
- git diff --no-index --word-diff-regex=[^[:space:]] --no-patch .dappnode_profile && echo '::set-output name=HAS_CHANGED::true' || echo '::set-output name=HAS_CHANGED::false'
+ env:
+ SHASUM_DEBIAN_ATTENDED: ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }}
+ SHASUM_DEBIAN_UNATTENDED: ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }}
+ # SHASUM_UBUNTU_ATTENDED: ${{ steps.shasum-ubuntu-attended.outputs.SHASUM_UBUNTU_ATTENDED }}
+ SHASUM_UBUNTU_UNATTENDED: ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }}
- name: Create pre-release
uses: softprops/action-gh-release@v2
@@ -189,12 +194,3 @@ jobs:
body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Create Pull Request
- if: steps.git_diff.outputs.HAS_CHANGED == 'true'
- uses: peter-evans/create-pull-request@v5
- with:
- add-paths: ".dappnode_profile"
- commit-message: "update core packages versions"
- branch: "update-profile"
- title: "update core packages versions"
- delete-branch: true
From bd53b6b827bace375815de9e447e8b1cb4132371 Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 14:20:48 +0200
Subject: [PATCH 23/44] fix naming set
---
.github/workflows/release.yml | 51 +++++++++--------------------------
1 file changed, 13 insertions(+), 38 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 536ef38..ad42a0e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -79,9 +79,9 @@ jobs:
- name: Set Debian Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
- filename=$(basename "$file")
- attended_filename="${filename/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- cp "$file" "images/$attended_filename"
+ filename=$(basename "$file") # Extract only the file name (without path)
+ attended_filename="images/Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
+ cp "$file" "$attended_filename"
- name: Build Debian unattended
run: |
@@ -94,29 +94,13 @@ jobs:
run: |
ls -lrt images/Dappnode-debian-*.iso
- - name: Set Dappnode unattended ISO name
+ - name: Set Debian Dappnode unattended ISO name
run: |
- file=$(ls images/Dappnode-debian-*.iso)
- filename=$(basename "$file")
- core_filename="${filename/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- unattended_filename="${core_filename/%.iso/-unattended.iso}"
- cp "$file" "$unattended_filename"
-
- # - name: Build Ubuntu attended
- # run: |
- # export BASE_OS=ubuntu
- # export UNATTENDED=false
- # docker compose up --build
-
- # - name: Check Ubuntu ISO attended
- # run: |
- # ls -lrt images/Dappnode-ubuntu-*.iso
-
- # - name: Set Ubuntu Dappnode attended ISO name
- # run: |
- # file=$(ls images/Dappnode-ubuntu-*.iso)
- # attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- # cp "$file" "$attended_filename"
+ file=$(ls images/Dappnode-debian-*.iso)
+ filename=$(basename "$file") # Extract only the file name (without path)
+ core_filename="Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
+ unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
+ cp "$file" "images/$unattended_filename"
- name: Build Ubuntu unattended
run: |
@@ -131,9 +115,9 @@ jobs:
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
- filename=$(basename "$file")
- core_filename="${filename/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
- unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ filename=$(basename "$file") # Extract only the file name (without path)
+ core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
+ unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
cp "$file" "images/$unattended_filename"
- name: Create dappnode_profile.sh
@@ -155,13 +139,6 @@ jobs:
SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
- # - name: Get SHA-256 Debian attended
- # id: shasum-ubuntu-attended
- # run: |
- # file=$(find . -type f -name 'Dappnode-ubuntu-*.iso' ! -name '*unattended*')
- # SHASUM_UBUNTU_ATTENDED=$(shasum -a 256 $file)s
- # echo "::set-output name=SHASUM_UBUNTU_ATTENDED::$SHASUM_UBUNTU_ATTENDED"
-
- name: Get SHA-256 Debian unattended
id: shasum-ubuntu-unattended
run: |
@@ -176,7 +153,6 @@ jobs:
env:
SHASUM_DEBIAN_ATTENDED: ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }}
SHASUM_DEBIAN_UNATTENDED: ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }}
- # SHASUM_UBUNTU_ATTENDED: ${{ steps.shasum-ubuntu-attended.outputs.SHASUM_UBUNTU_ATTENDED }}
SHASUM_UBUNTU_UNATTENDED: ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }}
- name: Create pre-release
@@ -184,11 +160,10 @@ jobs:
with:
tag_name: ${{ github.event.inputs.core }}
prerelease: true
- # ./Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
files: |
./Dappnode-${CORE_VERSION}-debian-*.iso
./Dappnode-${CORE_VERSION}-debian-*-unattended.iso
- ./Dappnode-${CORE_VERSION}-ubuntu-*.iso
+ ./Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
./scripts/dappnode_install*.sh
dappnode_profile.sh
body_path: CHANGELOG.md
From ef3ef7b8b95eb3e3794952da91381ee8909b6868 Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 14:47:02 +0200
Subject: [PATCH 24/44] use sudo
---
.github/workflows/release.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ad42a0e..033ef27 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -81,7 +81,7 @@ jobs:
file=$(ls images/Dappnode-debian-*.iso)
filename=$(basename "$file") # Extract only the file name (without path)
attended_filename="images/Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
- cp "$file" "$attended_filename"
+ sudo cp "$file" "$attended_filename"
- name: Build Debian unattended
run: |
@@ -100,7 +100,7 @@ jobs:
filename=$(basename "$file") # Extract only the file name (without path)
core_filename="Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
- cp "$file" "images/$unattended_filename"
+ sudo cp "$file" "images/$unattended_filename"
- name: Build Ubuntu unattended
run: |
@@ -118,7 +118,7 @@ jobs:
filename=$(basename "$file") # Extract only the file name (without path)
core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
- cp "$file" "images/$unattended_filename"
+ sudo cp "$file" "images/$unattended_filename"
- name: Create dappnode_profile.sh
run: |
From bcad9e7d45957cb8931e78e2847fa3bd39f301b9 Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 14:54:37 +0200
Subject: [PATCH 25/44] add images subpath
---
.github/workflows/release.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 033ef27..6951045 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -161,10 +161,10 @@ jobs:
tag_name: ${{ github.event.inputs.core }}
prerelease: true
files: |
- ./Dappnode-${CORE_VERSION}-debian-*.iso
- ./Dappnode-${CORE_VERSION}-debian-*-unattended.iso
- ./Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
- ./scripts/dappnode_install*.sh
+ ./images/Dappnode-${CORE_VERSION}-debian-*.iso
+ ./images/Dappnode-${CORE_VERSION}-debian-*-unattended.iso
+ ./images/Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
+ ./images/scripts/dappnode_install*.sh
dappnode_profile.sh
body_path: CHANGELOG.md
env:
From e6f160d4de911506e1a24ff718e5c3b68f0d750d Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 15:02:13 +0200
Subject: [PATCH 26/44] add print images dir
---
.github/workflows/release.yml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 6951045..52a7537 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -155,6 +155,12 @@ jobs:
SHASUM_DEBIAN_UNATTENDED: ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }}
SHASUM_UBUNTU_UNATTENDED: ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }}
+ # print images directory
+ - name: Print images directory
+ run: |
+ echo "Images directory content:"
+ ls -lrt images/
+
- name: Create pre-release
uses: softprops/action-gh-release@v2
with:
From 70f9649671ba08390bdfbd87f9b199a718f2dc1b Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 15:03:46 +0200
Subject: [PATCH 27/44] add uninstall script
---
.github/workflows/release.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 52a7537..6ce2525 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -170,7 +170,8 @@ jobs:
./images/Dappnode-${CORE_VERSION}-debian-*.iso
./images/Dappnode-${CORE_VERSION}-debian-*-unattended.iso
./images/Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
- ./images/scripts/dappnode_install*.sh
+ ./scripts/dappnode_install*.sh
+ ./scripts/dappnode_uninstall*.sh
dappnode_profile.sh
body_path: CHANGELOG.md
env:
From c146bc369fad6815f4de2d8d442dd9a0c6fb218e Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 16:06:51 +0200
Subject: [PATCH 28/44] fix naming regex
---
.github/workflows/release.yml | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 6ce2525..2757a56 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -80,8 +80,9 @@ jobs:
run: |
file=$(ls images/Dappnode-debian-*.iso)
filename=$(basename "$file") # Extract only the file name (without path)
- attended_filename="images/Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
- sudo cp "$file" "$attended_filename"
+ core_filename="Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
+ attended_filename="${core_filename/%.iso/-attended.iso}" # Replace .iso with -attended.iso
+ sudo cp "$file" "images/$attended_filename"
- name: Build Debian unattended
run: |
@@ -167,9 +168,9 @@ jobs:
tag_name: ${{ github.event.inputs.core }}
prerelease: true
files: |
- ./images/Dappnode-${CORE_VERSION}-debian-*.iso
- ./images/Dappnode-${CORE_VERSION}-debian-*-unattended.iso
- ./images/Dappnode-${CORE_VERSION}-ubuntu-*-unattended.iso
+ ./images/Dappnode-*-debian-*-attended.iso
+ ./images/Dappnode-*-debian-*-unattended.iso
+ ./images/Dappnode-*-ubuntu-*-unattended.iso
./scripts/dappnode_install*.sh
./scripts/dappnode_uninstall*.sh
dappnode_profile.sh
From a94948591dc7eda8333b4e22831ad40d3ed6cfec Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 16:23:24 +0200
Subject: [PATCH 29/44] compress unattended
---
.github/workflows/release.yml | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 2757a56..07166dd 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -111,7 +111,12 @@ jobs:
- name: Check Ubuntu ISO unattended
run: |
- ls -lrt images/Dappnode-ubuntu-*.iso
+ ls -lrt images/Dappnode-ubuntu-*-unattended.iso.xz
+
+ - name: Compress Ubuntu Dappnode unattended ISO
+ run: |
+ file=$(ls images/Dappnode-*-ubuntu-*-unattended.iso)
+ xz -T0 -z -v "$file"
- name: Set Ubuntu Dappnode unattended ISO name
run: |
@@ -120,6 +125,8 @@ jobs:
core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
sudo cp "$file" "images/$unattended_filename"
+ # Compress the new file as well
+ xz -T0 -z -v "images/$unattended_filename"
- name: Create dappnode_profile.sh
run: |
@@ -140,10 +147,10 @@ jobs:
SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
- - name: Get SHA-256 Debian unattended
+ - name: Get SHA-256 Ubuntu unattended
id: shasum-ubuntu-unattended
run: |
- file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
+ file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso.xz')
SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
@@ -170,7 +177,7 @@ jobs:
files: |
./images/Dappnode-*-debian-*-attended.iso
./images/Dappnode-*-debian-*-unattended.iso
- ./images/Dappnode-*-ubuntu-*-unattended.iso
+ ./images/Dappnode-*-ubuntu-*-unattended.iso.xz
./scripts/dappnode_install*.sh
./scripts/dappnode_uninstall*.sh
dappnode_profile.sh
From a732f1a8bf3b6bce700e805ce6c70ae288151955 Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Wed, 2 Jul 2025 17:49:52 +0200
Subject: [PATCH 30/44] fix check
---
.github/workflows/release.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 07166dd..6c94119 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -111,7 +111,7 @@ jobs:
- name: Check Ubuntu ISO unattended
run: |
- ls -lrt images/Dappnode-ubuntu-*-unattended.iso.xz
+ ls -lrt images/Dappnode-ubuntu-*.iso
- name: Compress Ubuntu Dappnode unattended ISO
run: |
From a98ee64d7871c92390090de4d4f6e8ebaeca92cc Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Thu, 3 Jul 2025 09:01:39 +0200
Subject: [PATCH 31/44] compress ubuntu
---
.github/workflows/release.yml | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 6c94119..b8de9df 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -113,11 +113,6 @@ jobs:
run: |
ls -lrt images/Dappnode-ubuntu-*.iso
- - name: Compress Ubuntu Dappnode unattended ISO
- run: |
- file=$(ls images/Dappnode-*-ubuntu-*-unattended.iso)
- xz -T0 -z -v "$file"
-
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
@@ -125,8 +120,11 @@ jobs:
core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
sudo cp "$file" "images/$unattended_filename"
- # Compress the new file as well
- xz -T0 -z -v "images/$unattended_filename"
+
+ - name: Compress Ubuntu Dappnode unattended ISO
+ run: |
+ file=$(ls images/Dappnode-*-ubuntu-*-unattended.iso)
+ xz -T0 -z -v "$file"
- name: Create dappnode_profile.sh
run: |
From acc3d94f83f9f30279f874becd0ba4bd15d429e9 Mon Sep 17 00:00:00 2001
From: Pablo Mendez
Date: Thu, 3 Jul 2025 09:06:25 +0200
Subject: [PATCH 32/44] add sudo to xz command
---
.github/workflows/release.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index b8de9df..3346205 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -124,7 +124,7 @@ jobs:
- name: Compress Ubuntu Dappnode unattended ISO
run: |
file=$(ls images/Dappnode-*-ubuntu-*-unattended.iso)
- xz -T0 -z -v "$file"
+ sudo xz -T0 -z -v "$file"
- name: Create dappnode_profile.sh
run: |
From 8359e95af9381bab1ec3c28872b96214fa0a06fb Mon Sep 17 00:00:00 2001
From: Marc Font <36164126+Marketen@users.noreply.github.com>
Date: Tue, 22 Jul 2025 10:41:03 +0200
Subject: [PATCH 33/44] add docker compose down for core pkg (#662)
* add docker compose down for core pkg
* fix order
---
.dappnode_profile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.dappnode_profile b/.dappnode_profile
index 9951723..baefcef 100755
--- a/.dappnode_profile
+++ b/.dappnode_profile
@@ -30,6 +30,8 @@ alias dappnode_status='docker compose $DNCORE_YMLS ps'
alias dappnode_stop='docker compose $DNCORE_YMLS stop && docker stop $(docker container ls -a -q -f name=DAppNode*)'
# Start docker core containers
alias dappnode_start='docker compose $DNCORE_YMLS up -d && docker start $(docker container ls -a -q -f name=DAppNode*)'
+# Remove docker core containers. This does not remove named volumes
+alias dappnode_down='docker compose $DNCORE_YMLS down'
# Return open-vpn credentials from a specific user. e.g: dappnode_get dappnode_admin
alias dappnode_openvpn_get='docker exec -i DAppNodeCore-vpn.dnp.dappnode.eth vpncli get'
# Return open-vpn admin credentials
From 700b5c33bd40632850d93372979790d83b3640bc Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Mon, 18 Aug 2025 17:13:54 +0200
Subject: [PATCH 34/44] Comment ubuntu release in gha (#665)
* Comment ubuntu release in gha
* update url
* comment ubuntu
---
.github/workflows/release.yml | 56 +++++++++------------
.github/workflows/test.yml | 18 +++----
iso/scripts/generate_dappnode_iso_debian.sh | 2 +-
3 files changed, 35 insertions(+), 41 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3346205..7a6364a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -103,28 +103,23 @@ jobs:
unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
sudo cp "$file" "images/$unattended_filename"
- - name: Build Ubuntu unattended
- run: |
- export BASE_OS=ubuntu
- export UNATTENDED=true
- docker compose up --build
-
- - name: Check Ubuntu ISO unattended
- run: |
- ls -lrt images/Dappnode-ubuntu-*.iso
-
- - name: Set Ubuntu Dappnode unattended ISO name
- run: |
- file=$(ls images/Dappnode-ubuntu-*.iso)
- filename=$(basename "$file") # Extract only the file name (without path)
- core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
- unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
- sudo cp "$file" "images/$unattended_filename"
-
- - name: Compress Ubuntu Dappnode unattended ISO
- run: |
- file=$(ls images/Dappnode-*-ubuntu-*-unattended.iso)
- sudo xz -T0 -z -v "$file"
+ # - name: Build Ubuntu unattended
+ # run: |
+ # export BASE_OS=ubuntu
+ # export UNATTENDED=true
+ # docker compose up --build
+
+ # - name: Check Ubuntu ISO unattended
+ # run: |
+ # ls -lrt images/Dappnode-ubuntu-*.iso
+
+ # - name: Set Ubuntu Dappnode unattended ISO name
+ # run: |
+ # file=$(ls images/Dappnode-ubuntu-*.iso)
+ # filename=$(basename "$file") # Extract only the file name (without path)
+ # core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
+ # unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
+ # sudo cp "$file" "images/$unattended_filename"
- name: Create dappnode_profile.sh
run: |
@@ -145,21 +140,21 @@ jobs:
SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
- - name: Get SHA-256 Ubuntu unattended
- id: shasum-ubuntu-unattended
- run: |
- file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso.xz')
- SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
- echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
+ # - name: Get SHA-256 Ubuntu unattended
+ # id: shasum-ubuntu-unattended
+ # run: |
+ # file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
+ # SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
+ # echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
- name: Write release content
run: |
- echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${BIND_VERSION}|\n|ipfs.dnp.dappnode.eth|${IPFS_VERSION}|\n|vpn.dnp.dappnode.eth |${VPN_VERSION}|\n|dappmanager.dnp.dappnode.eth|${DAPPMANAGER_VERSION}|\n|wifi.dnp.dappnode.eth|${WIFI_VERSION}|\n|https.dnp.dappnode.eth|${HTTPS_VERSION}|\n|wireguard.dnp.dappnode.eth|${WIREGUARD_VERSION}|\n# Changes\nChanges implemented in release ${CORE_VERSION}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso\n${SHASUM_DEBIAN_ATTENDED}\n\`\`\`\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso\n${SHASUM_DEBIAN_UNATTENDED}\n\`\`\`\n# Ubuntu Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-ubuntu-bookworm-amd64-unattended.iso\n${SHASUM_UBUNTU_UNATTENDED}\n\`\`\`\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
+ echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${BIND_VERSION}|\n|ipfs.dnp.dappnode.eth|${IPFS_VERSION}|\n|vpn.dnp.dappnode.eth |${VPN_VERSION}|\n|dappmanager.dnp.dappnode.eth|${DAPPMANAGER_VERSION}|\n|wifi.dnp.dappnode.eth|${WIFI_VERSION}|\n|https.dnp.dappnode.eth|${HTTPS_VERSION}|\n|wireguard.dnp.dappnode.eth|${WIREGUARD_VERSION}|\n# Changes\nChanges implemented in release ${CORE_VERSION}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso\n${SHASUM_DEBIAN_ATTENDED}\n\`\`\`\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso\n${SHASUM_DEBIAN_UNATTENDED}\n\`\`\`\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\n\`\`\`\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
cat CHANGELOG.md
env:
SHASUM_DEBIAN_ATTENDED: ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }}
SHASUM_DEBIAN_UNATTENDED: ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }}
- SHASUM_UBUNTU_UNATTENDED: ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }}
+ # SHASUM_UBUNTU_UNATTENDED: ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }}
# print images directory
- name: Print images directory
@@ -175,7 +170,6 @@ jobs:
files: |
./images/Dappnode-*-debian-*-attended.iso
./images/Dappnode-*-debian-*-unattended.iso
- ./images/Dappnode-*-ubuntu-*-unattended.iso.xz
./scripts/dappnode_install*.sh
./scripts/dappnode_uninstall*.sh
dappnode_profile.sh
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index d7c85e1..730b5b8 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -53,14 +53,14 @@ jobs:
ls -lrt images/Dappnode-debian-*.iso
# Create Ubuntu ISO
- - name: create Ubuntu ISO
- run: |
- export BASE_OS=ubuntu
- export UNATTENDED=true
- docker compose up --build
- ls images/
+ # - name: create Ubuntu ISO
+ # run: |
+ # export BASE_OS=ubuntu
+ # export UNATTENDED=true
+ # docker compose up --build
+ # ls images/
# Verify Ubuntu ISO creation
- - name: verify Ubuntu ISO
- run: |
- ls -lrt images/Dappnode-ubuntu-*.iso
+ # - name: verify Ubuntu ISO
+ # run: |
+ # ls -lrt images/Dappnode-ubuntu-*.iso
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index e5f42cc..97d0d52 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -8,7 +8,7 @@ source ${SCRIPTS_DIR}/common_iso_generation.sh
# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.11.0-amd64-netinst.iso
BASE_ISO_NAME="debian-12.11.0-amd64-netinst.iso"
BASE_ISO_PATH="/images/${BASE_ISO_NAME}"
-BASE_ISO_URL="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/${BASE_ISO_NAME}"
+BASE_ISO_URL="https://cdimage.debian.org/mirror/cdimage/archive/12.11.0/amd64/iso-cd/${BASE_ISO_NAME}"
BASE_ISO_SHASUM="30ca12a15cae6a1033e03ad59eb7f66a6d5a258dcf27acd115c2bd42d22640e8 ${BASE_ISO_PATH}"
DAPPNODE_ISO_NAME="${DAPPNODE_ISO_PREFIX}${BASE_ISO_NAME}"
From 3be6e789c755edec7eaaffea79d9618213af8846 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Thu, 4 Sep 2025 09:27:29 +0200
Subject: [PATCH 35/44] use archive url (#668)
---
iso/scripts/generate_dappnode_iso_debian.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/iso/scripts/generate_dappnode_iso_debian.sh b/iso/scripts/generate_dappnode_iso_debian.sh
index 97d0d52..201e008 100755
--- a/iso/scripts/generate_dappnode_iso_debian.sh
+++ b/iso/scripts/generate_dappnode_iso_debian.sh
@@ -5,7 +5,7 @@ SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}")
source ${SCRIPTS_DIR}/common_iso_generation.sh
-# Source = https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.11.0-amd64-netinst.iso
+# Source = https://cdimage.debian.org/mirror/cdimage/archive/12.11.0/amd64/iso-cd/debian-12.11.0-amd64-netinst.iso
BASE_ISO_NAME="debian-12.11.0-amd64-netinst.iso"
BASE_ISO_PATH="/images/${BASE_ISO_NAME}"
BASE_ISO_URL="https://cdimage.debian.org/mirror/cdimage/archive/12.11.0/amd64/iso-cd/${BASE_ISO_NAME}"
From 9362e51e3b20a780c5be529425825473f4f7dabc Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Thu, 4 Sep 2025 10:52:13 +0200
Subject: [PATCH 36/44] Add ubuntu ISO to CI (#669)
* Add ubuntu ISO to CI
* fix file path usage
* feat: add ubuntu test
* bump ubuntu to 0.3
---
.github/workflows/release.yml | 59 ++++++++++++---------
.github/workflows/test.yml | 18 +++----
iso/scripts/generate_dappnode_iso_ubuntu.sh | 4 +-
3 files changed, 46 insertions(+), 35 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7a6364a..d6a3b89 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -103,23 +103,23 @@ jobs:
unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
sudo cp "$file" "images/$unattended_filename"
- # - name: Build Ubuntu unattended
- # run: |
- # export BASE_OS=ubuntu
- # export UNATTENDED=true
- # docker compose up --build
-
- # - name: Check Ubuntu ISO unattended
- # run: |
- # ls -lrt images/Dappnode-ubuntu-*.iso
-
- # - name: Set Ubuntu Dappnode unattended ISO name
- # run: |
- # file=$(ls images/Dappnode-ubuntu-*.iso)
- # filename=$(basename "$file") # Extract only the file name (without path)
- # core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
- # unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
- # sudo cp "$file" "images/$unattended_filename"
+ - name: Build Ubuntu unattended
+ run: |
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
+ docker compose up --build
+
+ - name: Check Ubuntu ISO unattended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode unattended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ filename=$(basename "$file") # Extract only the file name (without path)
+ core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
+ unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
+ sudo cp "$file" "images/$unattended_filename"
- name: Create dappnode_profile.sh
run: |
@@ -140,12 +140,13 @@ jobs:
SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
- # - name: Get SHA-256 Ubuntu unattended
- # id: shasum-ubuntu-unattended
- # run: |
- # file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
- # SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
- # echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
+ - name: Get SHA-256 Ubuntu unattended
+ id: shasum-ubuntu-unattended
+ run: |
+ file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
+ SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
+ echo "$SHASUM_UBUNTU_UNATTENDED" > SHASUM_UBUNTU_UNATTENDED.txt
+ echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
- name: Write release content
run: |
@@ -154,7 +155,6 @@ jobs:
env:
SHASUM_DEBIAN_ATTENDED: ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }}
SHASUM_DEBIAN_UNATTENDED: ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }}
- # SHASUM_UBUNTU_UNATTENDED: ${{ steps.shasum-ubuntu-unattended.outputs.SHASUM_UBUNTU_UNATTENDED }}
# print images directory
- name: Print images directory
@@ -176,3 +176,14 @@ jobs:
body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Upload Ubuntu unattended to SSH server (and shasum)
+ uses: appleboy/scp-action@v0.1.7
+ with:
+ host: ${{ secrets.ISO_SSH_HOST }}
+ username: ${{ secrets.ISO_SSH_USER }}
+ key: ${{ secrets.ISO_SSH_PRIVATE_KEY }}
+ port: ${{ secrets.SSH_PORT }}
+ source: SHASUM_UBUNTU_UNATTENDED.txt,./images/Dappnode-*-ubuntu-*-unattended.iso
+ target: ${{ secrets.ISO_SSH_PATH }}
+ overwrite: true
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 730b5b8..d7c85e1 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -53,14 +53,14 @@ jobs:
ls -lrt images/Dappnode-debian-*.iso
# Create Ubuntu ISO
- # - name: create Ubuntu ISO
- # run: |
- # export BASE_OS=ubuntu
- # export UNATTENDED=true
- # docker compose up --build
- # ls images/
+ - name: create Ubuntu ISO
+ run: |
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
+ docker compose up --build
+ ls images/
# Verify Ubuntu ISO creation
- # - name: verify Ubuntu ISO
- # run: |
- # ls -lrt images/Dappnode-ubuntu-*.iso
+ - name: verify Ubuntu ISO
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
diff --git a/iso/scripts/generate_dappnode_iso_ubuntu.sh b/iso/scripts/generate_dappnode_iso_ubuntu.sh
index 6b64968..c1c1a27 100755
--- a/iso/scripts/generate_dappnode_iso_ubuntu.sh
+++ b/iso/scripts/generate_dappnode_iso_ubuntu.sh
@@ -5,10 +5,10 @@ SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}")
source ${SCRIPTS_DIR}/common_iso_generation.sh
-BASE_ISO_NAME=ubuntu-24.04.2-live-server-amd64.iso
+BASE_ISO_NAME=ubuntu-24.04.3-live-server-amd64.iso
BASE_ISO_PATH="/images/${BASE_ISO_NAME}"
BASE_ISO_URL="https://releases.ubuntu.com/24.04/${BASE_ISO_NAME}"
-BASE_ISO_SHASUM="d6dab0c3a657988501b4bd76f1297c053df710e06e0c3aece60dead24f270b4d ${BASE_ISO_PATH}"
+BASE_ISO_SHASUM="c3514bf0056180d09376462a7a1b4f213c1d6e8ea67fae5c25099c6fd3d8274b ${BASE_ISO_PATH}"
DAPPNODE_ISO_NAME="${DAPPNODE_ISO_PREFIX}${BASE_ISO_NAME}"
DAPPNODE_ISO_PATH="/images/${DAPPNODE_ISO_NAME}"
From a0a2a4616075c75e3c6f7f13ed28be66edad997f Mon Sep 17 00:00:00 2001
From: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 11:25:36 +0200
Subject: [PATCH 37/44] Ensure .dappnode_profile is sourced in all shell
environments (#670)
* Initial plan
* Fix DAppNode profile sourcing in all shell environments
Co-authored-by: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
---
scripts/dappnode_install.sh | 21 +++++++++++++++------
scripts/dappnode_uninstall.sh | 14 ++++++++++----
2 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/scripts/dappnode_install.sh b/scripts/dappnode_install.sh
index b25c7bf..f285289 100755
--- a/scripts/dappnode_install.sh
+++ b/scripts/dappnode_install.sh
@@ -266,12 +266,21 @@ dappnode_start() {
# Show credentials to the user on login
USER=$(grep 1000 /etc/passwd | cut -f 1 -d:)
- [ -n "$USER" ] && PROFILE=/home/$USER/.profile || PROFILE=/root/.profile
-
- if ! grep -q "${DAPPNODE_PROFILE}" "$PROFILE"; then
- echo "######## DAPPNODE PROFILE ########" >>$PROFILE
- echo -e "source ${DAPPNODE_PROFILE}\n" >>$PROFILE
- fi
+ [ -n "$USER" ] && USER_HOME=/home/$USER || USER_HOME=/root
+
+ # Add profile sourcing to both .profile and .bashrc for maximum compatibility
+ for config_file in .profile .bashrc; do
+ CONFIG_PATH="$USER_HOME/$config_file"
+
+ # Create config file if it doesn't exist
+ [ ! -f "$CONFIG_PATH" ] && touch "$CONFIG_PATH"
+
+ # Add profile sourcing if not already present
+ if ! grep -q "${DAPPNODE_PROFILE}" "$CONFIG_PATH"; then
+ echo "######## DAPPNODE PROFILE ########" >>"$CONFIG_PATH"
+ echo -e "source ${DAPPNODE_PROFILE}\n" >>"$CONFIG_PATH"
+ fi
+ done
# Remove return from profile
sed -i '/return/d' $DAPPNODE_PROFILE | tee -a $LOGFILE
diff --git a/scripts/dappnode_uninstall.sh b/scripts/dappnode_uninstall.sh
index 9f9c68b..66bc9f3 100755
--- a/scripts/dappnode_uninstall.sh
+++ b/scripts/dappnode_uninstall.sh
@@ -45,11 +45,17 @@ uninstall() {
echo -e "\e[32mRemoving DAppNode directory\e[0m"
rm -rf /usr/src/dappnode
- # Remove profile file
+ # Remove profile file references from shell config files
USER=$(grep 1000 /etc/passwd | cut -f 1 -d:)
- [ -n "$USER" ] && PROFILE=/home/$USER/.profile || PROFILE=/root/.profile
- sed -i '/######## DAPPNODE PROFILE ########/g' $PROFILE
- sed -i '/.*dappnode_profile/g' $PROFILE
+ [ -n "$USER" ] && USER_HOME=/home/$USER || USER_HOME=/root
+
+ for config_file in .profile .bashrc; do
+ CONFIG_PATH="$USER_HOME/$config_file"
+ if [ -f "$CONFIG_PATH" ]; then
+ sed -i '/######## DAPPNODE PROFILE ########/d' "$CONFIG_PATH"
+ sed -i '/.*dappnode_profile/d' "$CONFIG_PATH"
+ fi
+ done
echo -e "\e[32mDAppNode uninstalled!\e[0m"
}
From 88d91c2e8619a729ade1d3eda4817a5af2dba421 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Tue, 30 Sep 2025 10:05:48 +0200
Subject: [PATCH 38/44] fix: ubuntu command execution (#673)
---
iso/preseeds/ubuntu/autoinstall.yaml | 3 ++-
iso/preseeds/ubuntu/autoinstall_unattended.yaml | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/iso/preseeds/ubuntu/autoinstall.yaml b/iso/preseeds/ubuntu/autoinstall.yaml
index 1957f01..4fb3ead 100644
--- a/iso/preseeds/ubuntu/autoinstall.yaml
+++ b/iso/preseeds/ubuntu/autoinstall.yaml
@@ -19,7 +19,8 @@ autoinstall:
- iptables
late-commands:
- - "curtin in-target --target=/target -- apt update && apt install -y chrony build-essential iw iwd avahi-utils"
+ - "curtin in-target --target=/target -- apt-get update"
+ - "curtin in-target --target=/target -- apt-get install -y chrony build-essential iw iwd avahi-utils"
- "mkdir -p /target/usr/src/dappnode"
- "cp -ar /cdrom/dappnode/* /target/usr/src/dappnode/"
- "cp -a /cdrom/dappnode/scripts/rc.local /target/etc/rc.local"
diff --git a/iso/preseeds/ubuntu/autoinstall_unattended.yaml b/iso/preseeds/ubuntu/autoinstall_unattended.yaml
index bb43891..0e4fd24 100644
--- a/iso/preseeds/ubuntu/autoinstall_unattended.yaml
+++ b/iso/preseeds/ubuntu/autoinstall_unattended.yaml
@@ -33,7 +33,8 @@ autoinstall:
timezone: UTC
late-commands:
- - "curtin in-target --target=/target -- apt update && apt install -y chrony build-essential iw iwd avahi-utils"
+ - "curtin in-target --target=/target -- apt-get update"
+ - "curtin in-target --target=/target -- apt-get install -y chrony build-essential iw iwd avahi-utils"
- "mkdir -p /target/usr/src/dappnode"
- "cp -ar /cdrom/dappnode/* /target/usr/src/dappnode/"
- "cp -a /cdrom/dappnode/scripts/rc.local /target/etc/rc.local"
From e214226719117d07facab3d6ef3bb7bc62c7afc1 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Wed, 12 Nov 2025 11:27:39 +0100
Subject: [PATCH 39/44] Add missing `access_credential.sh` script (#677)
---
.github/workflows/release.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d6a3b89..022b286 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -172,6 +172,7 @@ jobs:
./images/Dappnode-*-debian-*-unattended.iso
./scripts/dappnode_install*.sh
./scripts/dappnode_uninstall*.sh
+ ./scripts/dappnode_access_credentials*.sh
dappnode_profile.sh
body_path: CHANGELOG.md
env:
From 056f53d24485a05ce3ac668938c404db9678d6fe Mon Sep 17 00:00:00 2001
From: 3alpha
Date: Wed, 12 Nov 2025 09:30:11 -0300
Subject: [PATCH 40/44] parallelize workflows
---
.github/workflows/release.yml | 188 ++++++++++++++++++++++------------
1 file changed, 122 insertions(+), 66 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 022b286..0527360 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -38,23 +38,26 @@ env:
CORE_VERSION: ${{ github.event.inputs.core }}
jobs:
- pre-release:
- name: Create pre-release artifacts
+ set-versions:
+ name: Set versions and check regex
runs-on: ubuntu-latest
- defaults:
- run:
- shell: bash
-
+ outputs:
+ bind: ${{ env.BIND_VERSION }}
+ ipfs: ${{ env.IPFS_VERSION }}
+ dappmanager: ${{ env.DAPPMANAGER_VERSION }}
+ wifi: ${{ env.WIFI_VERSION }}
+ wireguard: ${{ env.WIREGUARD_VERSION }}
+ https: ${{ env.HTTPS_VERSION }}
+ vpn: ${{ env.VPN_VERSION }}
+ core: ${{ env.CORE_VERSION }}
steps:
- name: Check versions regex
run: |
[[ $BIND_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $IPFS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $DAPPMANAGER_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
[[ $WIFI_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $WIREGUARD_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $HTTPS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
[[ $VPN_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $CORE_VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "versions introduced in wrong format"; exit 1; }
-
- name: Checkout
uses: actions/checkout@v4
-
- name: Set new versions
run: |
sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${BIND_VERSION}"/" .dappnode_profile
@@ -65,107 +68,161 @@ jobs:
sed -i -e "/WIREGUARD_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${WIREGUARD_VERSION}"/" .dappnode_profile
sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${HTTPS_VERSION}"/" .dappnode_profile
cat .dappnode_profile
+ - name: Create dappnode_profile.sh
+ run: cp .dappnode_profile dappnode_profile.sh
+ - name: Upload dappnode_profile.sh
+ uses: actions/upload-artifact@v4
+ with:
+ name: dappnode_profile
+ path: dappnode_profile.sh
+ build-debian-attended:
+ name: Build Debian attended ISO
+ runs-on: ubuntu-latest
+ needs: set-versions
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download dappnode_profile
+ uses: actions/download-artifact@v4
+ with:
+ name: dappnode_profile
- name: Build Debian attended
run: |
export BASE_OS=debian
export UNATTENDED=false
docker compose up --build
-
- - name: Check Debian ISO attended
- run: |
- ls -lrt images/Dappnode-debian-*.iso
-
- name: Set Debian Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
- filename=$(basename "$file") # Extract only the file name (without path)
- core_filename="Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
- attended_filename="${core_filename/%.iso/-attended.iso}" # Replace .iso with -attended.iso
+ filename=$(basename "$file")
+ core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-debian-${filename#Dappnode-debian-}"
+ attended_filename="${core_filename/%.iso/-attended.iso}"
sudo cp "$file" "images/$attended_filename"
+ - name: Upload Debian attended ISO
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-attended-iso
+ path: images/*-attended.iso
+ - name: Get SHA-256 Debian attended
+ run: |
+ file=$(find images/ -type f -name '*-attended.iso')
+ shasum -a 256 $file > SHASUM_DEBIAN_ATTENDED.txt
+ - name: Upload Debian attended SHA256
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-attended-sha
+ path: SHASUM_DEBIAN_ATTENDED.txt
+ build-debian-unattended:
+ name: Build Debian unattended ISO
+ runs-on: ubuntu-latest
+ needs: set-versions
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download dappnode_profile
+ uses: actions/download-artifact@v4
+ with:
+ name: dappnode_profile
- name: Build Debian unattended
run: |
export BASE_OS=debian
export UNATTENDED=true
docker compose build
docker compose up
-
- - name: Check Debian ISO unattended
- run: |
- ls -lrt images/Dappnode-debian-*.iso
-
- name: Set Debian Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
- filename=$(basename "$file") # Extract only the file name (without path)
- core_filename="Dappnode-${CORE_VERSION}-debian-${filename#Dappnode-debian-}" # Modify the filename using CORE_VERSION
- unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
+ filename=$(basename "$file")
+ core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-debian-${filename#Dappnode-debian-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
sudo cp "$file" "images/$unattended_filename"
+ - name: Upload Debian unattended ISO
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-unattended-iso
+ path: images/*-unattended.iso
+ - name: Get SHA-256 Debian unattended
+ run: |
+ file=$(find images/ -type f -name '*-unattended.iso')
+ shasum -a 256 $file > SHASUM_DEBIAN_UNATTENDED.txt
+ - name: Upload Debian unattended SHA256
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-unattended-sha
+ path: SHASUM_DEBIAN_UNATTENDED.txt
+ build-ubuntu-unattended:
+ name: Build Ubuntu unattended ISO
+ runs-on: ubuntu-latest
+ needs: set-versions
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download dappnode_profile
+ uses: actions/download-artifact@v4
+ with:
+ name: dappnode_profile
- name: Build Ubuntu unattended
run: |
export BASE_OS=ubuntu
export UNATTENDED=true
docker compose up --build
-
- - name: Check Ubuntu ISO unattended
- run: |
- ls -lrt images/Dappnode-ubuntu-*.iso
-
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
- filename=$(basename "$file") # Extract only the file name (without path)
- core_filename="Dappnode-${CORE_VERSION}-ubuntu-${filename#Dappnode-ubuntu-}" # Modify the filename using CORE_VERSION
- unattended_filename="${core_filename/%.iso/-unattended.iso}" # Replace .iso with -unattended.iso
+ filename=$(basename "$file")
+ core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-ubuntu-${filename#Dappnode-ubuntu-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
sudo cp "$file" "images/$unattended_filename"
-
- - name: Create dappnode_profile.sh
- run: |
- cp .dappnode_profile dappnode_profile.sh
-
- # SHASUMs
- - name: Get SHA-256 Debian attended
- id: shasum-debian-attended
- run: |
- file=$(find . -type f -name 'Dappnode-debian-*.iso' ! -name '*unattended*')
- SHASUM_DEBIAN_ATTENDED=$(shasum -a 256 $file)
- echo "::set-output name=SHASUM_DEBIAN_ATTENDED::$SHASUM_DEBIAN_ATTENDED"
-
- - name: Get SHA-256 Debian unattended
- id: shasum-debian-unattended
- run: |
- file=$(find . -type f -name 'Dappnode-debian-*unattended.iso')
- SHASUM_DEBIAN_UNATTENDED=$(shasum -a 256 $file)
- echo "::set-output name=SHASUM_DEBIAN_UNATTENDED::$SHASUM_DEBIAN_UNATTENDED"
-
- name: Get SHA-256 Ubuntu unattended
- id: shasum-ubuntu-unattended
run: |
- file=$(find . -type f -name 'Dappnode-ubuntu-*unattended.iso')
- SHASUM_UBUNTU_UNATTENDED=$(shasum -a 256 $file)
- echo "$SHASUM_UBUNTU_UNATTENDED" > SHASUM_UBUNTU_UNATTENDED.txt
- echo "::set-output name=SHASUM_UBUNTU_UNATTENDED::$SHASUM_UBUNTU_UNATTENDED"
+ file=$(find images/ -type f -name '*-ubuntu-*-unattended.iso')
+ shasum -a 256 $file > SHASUM_UBUNTU_UNATTENDED.txt
+ - name: Upload Ubuntu unattended ISO and SHA256 to SSH
+ uses: appleboy/scp-action@v0.1.7
+ with:
+ host: ${{ secrets.ISO_SSH_HOST }}
+ username: ${{ secrets.ISO_SSH_USER }}
+ key: ${{ secrets.ISO_SSH_PRIVATE_KEY }}
+ port: ${{ secrets.SSH_PORT }}
+ source: SHASUM_UBUNTU_UNATTENDED.txt,images/*-ubuntu-*-unattended.iso
+ target: ${{ secrets.ISO_SSH_PATH }}
+ overwrite: true
+ release:
+ name: Combine, release, and upload
+ runs-on: ubuntu-latest
+ needs:
+ - build-debian-attended
+ - build-debian-unattended
+ - build-ubuntu-unattended
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download all artifacts
+ uses: actions/download-artifact@v4
+ with:
+ path: ./artifacts
+ - name: Move ISOs and SHAs
+ run: |
+ mkdir -p images
+ mv artifacts/debian-attended-iso/* images/
+ mv artifacts/debian-unattended-iso/* images/
+ mv artifacts/debian-attended-sha/* .
+ mv artifacts/debian-unattended-sha/* .
+ mv artifacts/dappnode_profile/* .
- name: Write release content
run: |
- echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${BIND_VERSION}|\n|ipfs.dnp.dappnode.eth|${IPFS_VERSION}|\n|vpn.dnp.dappnode.eth |${VPN_VERSION}|\n|dappmanager.dnp.dappnode.eth|${DAPPMANAGER_VERSION}|\n|wifi.dnp.dappnode.eth|${WIFI_VERSION}|\n|https.dnp.dappnode.eth|${HTTPS_VERSION}|\n|wireguard.dnp.dappnode.eth|${WIREGUARD_VERSION}|\n# Changes\nChanges implemented in release ${CORE_VERSION}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64.iso\n${SHASUM_DEBIAN_ATTENDED}\n\`\`\`\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\nshasum -a 256 DAppNode-${CORE_VERSION}-debian-bookworm-amd64-unattended.iso\n${SHASUM_DEBIAN_UNATTENDED}\n\`\`\`\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n\`\`\`\n\`\`\`\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
+ SHASUM_DEBIAN_ATTENDED=$(cat SHASUM_DEBIAN_ATTENDED.txt)
+ SHASUM_DEBIAN_UNATTENDED=$(cat SHASUM_DEBIAN_UNATTENDED.txt)
+ echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${{ needs.set-versions.outputs.bind }}|\n|ipfs.dnp.dappnode.eth|${{ needs.set-versions.outputs.ipfs }}|\n|vpn.dnp.dappnode.eth |${{ needs.set-versions.outputs.vpn }}|\n|dappmanager.dnp.dappnode.eth|${{ needs.set-versions.outputs.dappmanager }}|\n|wifi.dnp.dappnode.eth|${{ needs.set-versions.outputs.wifi }}|\n|https.dnp.dappnode.eth|${{ needs.set-versions.outputs.https }}|\n|wireguard.dnp.dappnode.eth|${{ needs.set-versions.outputs.wireguard }}|\n# Changes\nChanges implemented in release ${{ needs.set-versions.outputs.core }}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso\n$SHASUM_DEBIAN_ATTENDED\n```\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso\n$SHASUM_DEBIAN_UNATTENDED\n```\n# Ubuntu Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-ubuntu-bookworm-amd64-unattended.iso**\n\n## ISO SHA-256 Checksum\nUploaded directly to SSH server.\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
cat CHANGELOG.md
- env:
- SHASUM_DEBIAN_ATTENDED: ${{ steps.shasum-debian-attended.outputs.SHASUM_DEBIAN_ATTENDED }}
- SHASUM_DEBIAN_UNATTENDED: ${{ steps.shasum-debian-unattended.outputs.SHASUM_DEBIAN_UNATTENDED }}
-
- # print images directory
- name: Print images directory
run: |
echo "Images directory content:"
ls -lrt images/
-
- name: Create pre-release
uses: softprops/action-gh-release@v2
with:
- tag_name: ${{ github.event.inputs.core }}
+ tag_name: ${{ needs.set-versions.outputs.core }}
prerelease: true
files: |
./images/Dappnode-*-debian-*-attended.iso
@@ -177,7 +234,6 @@ jobs:
body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- name: Upload Ubuntu unattended to SSH server (and shasum)
uses: appleboy/scp-action@v0.1.7
with:
From 77bdf5a0baaec866b3a4ff73e654c042178fe98f Mon Sep 17 00:00:00 2001
From: 3alpha
Date: Wed, 12 Nov 2025 10:13:29 -0300
Subject: [PATCH 41/44] fix wf issues
---
.github/workflows/release.yml | 77 +++++++++++++++++------------------
1 file changed, 38 insertions(+), 39 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 0527360..3fa5317 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -27,46 +27,37 @@ on:
description: "Version of the OpenVPN Package. Only numbers"
required: true
-env:
- BIND_VERSION: ${{ github.event.inputs.bind }}
- IPFS_VERSION: ${{ github.event.inputs.ipfs }}
- DAPPMANAGER_VERSION: ${{ github.event.inputs.dappmanager }}
- WIFI_VERSION: ${{ github.event.inputs.wifi }}
- WIREGUARD_VERSION: ${{ github.event.inputs.wireguard }}
- HTTPS_VERSION: ${{ github.event.inputs.https }}
- VPN_VERSION: ${{ github.event.inputs.vpn }}
- CORE_VERSION: ${{ github.event.inputs.core }}
jobs:
set-versions:
name: Set versions and check regex
runs-on: ubuntu-latest
outputs:
- bind: ${{ env.BIND_VERSION }}
- ipfs: ${{ env.IPFS_VERSION }}
- dappmanager: ${{ env.DAPPMANAGER_VERSION }}
- wifi: ${{ env.WIFI_VERSION }}
- wireguard: ${{ env.WIREGUARD_VERSION }}
- https: ${{ env.HTTPS_VERSION }}
- vpn: ${{ env.VPN_VERSION }}
- core: ${{ env.CORE_VERSION }}
+ bind: ${{ steps.set_outputs.outputs.bind }}
+ ipfs: ${{ steps.set_outputs.outputs.ipfs }}
+ dappmanager: ${{ steps.set_outputs.outputs.dappmanager }}
+ wifi: ${{ steps.set_outputs.outputs.wifi }}
+ wireguard: ${{ steps.set_outputs.outputs.wireguard }}
+ https: ${{ steps.set_outputs.outputs.https }}
+ vpn: ${{ steps.set_outputs.outputs.vpn }}
+ core: ${{ steps.set_outputs.outputs.core }}
steps:
- name: Check versions regex
run: |
- [[ $BIND_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $IPFS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $DAPPMANAGER_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
- [[ $WIFI_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $WIREGUARD_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $HTTPS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
- [[ $VPN_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $CORE_VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "versions introduced in wrong format"; exit 1; }
+ [[ "${{ github.event.inputs.bind }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.ipfs }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.dappmanager }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
+ [[ "${{ github.event.inputs.wifi }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.wireguard }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.https }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
+ [[ "${{ github.event.inputs.vpn }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.core }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "versions introduced in wrong format"; exit 1; }
- name: Checkout
uses: actions/checkout@v4
- name: Set new versions
run: |
- sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${BIND_VERSION}"/" .dappnode_profile
- sed -i -e "/IPFS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${IPFS_VERSION}"/" .dappnode_profile
- sed -i -e "/VPN_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${VPN_VERSION}"/" .dappnode_profile
- sed -i -e "/DAPPMANAGER_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${DAPPMANAGER_VERSION}"/" .dappnode_profile
- sed -i -e "/WIFI_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${WIFI_VERSION}"/" .dappnode_profile
- sed -i -e "/WIREGUARD_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${WIREGUARD_VERSION}"/" .dappnode_profile
- sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${HTTPS_VERSION}"/" .dappnode_profile
+ sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.bind }}"/" .dappnode_profile
+ sed -i -e "/IPFS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.ipfs }}"/" .dappnode_profile
+ sed -i -e "/VPN_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.vpn }}"/" .dappnode_profile
+ sed -i -e "/DAPPMANAGER_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.dappmanager }}"/" .dappnode_profile
+ sed -i -e "/WIFI_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.wifi }}"/" .dappnode_profile
+ sed -i -e "/WIREGUARD_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.wireguard }}"/" .dappnode_profile
+ sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.https }}"/" .dappnode_profile
cat .dappnode_profile
- name: Create dappnode_profile.sh
run: cp .dappnode_profile dappnode_profile.sh
@@ -75,6 +66,17 @@ jobs:
with:
name: dappnode_profile
path: dappnode_profile.sh
+ - name: Set outputs
+ id: set_outputs
+ run: |
+ echo "core=${{ github.event.inputs.core }}" >> $GITHUB_OUTPUT
+ echo "bind=${{ github.event.inputs.bind }}" >> $GITHUB_OUTPUT
+ echo "ipfs=${{ github.event.inputs.ipfs }}" >> $GITHUB_OUTPUT
+ echo "dappmanager=${{ github.event.inputs.dappmanager }}" >> $GITHUB_OUTPUT
+ echo "wifi=${{ github.event.inputs.wifi }}" >> $GITHUB_OUTPUT
+ echo "wireguard=${{ github.event.inputs.wireguard }}" >> $GITHUB_OUTPUT
+ echo "https=${{ github.event.inputs.https }}" >> $GITHUB_OUTPUT
+ echo "vpn=${{ github.event.inputs.vpn }}" >> $GITHUB_OUTPUT
build-debian-attended:
name: Build Debian attended ISO
@@ -187,6 +189,11 @@ jobs:
source: SHASUM_UBUNTU_UNATTENDED.txt,images/*-ubuntu-*-unattended.iso
target: ${{ secrets.ISO_SSH_PATH }}
overwrite: true
+ - name: Upload Ubuntu unattended SHA256 as artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: ubuntu-unattended-sha
+ path: SHASUM_UBUNTU_UNATTENDED.txt
release:
name: Combine, release, and upload
@@ -208,12 +215,14 @@ jobs:
mv artifacts/debian-unattended-iso/* images/
mv artifacts/debian-attended-sha/* .
mv artifacts/debian-unattended-sha/* .
+ mv artifacts/ubuntu-unattended-sha/* .
mv artifacts/dappnode_profile/* .
- name: Write release content
run: |
SHASUM_DEBIAN_ATTENDED=$(cat SHASUM_DEBIAN_ATTENDED.txt)
SHASUM_DEBIAN_UNATTENDED=$(cat SHASUM_DEBIAN_UNATTENDED.txt)
- echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${{ needs.set-versions.outputs.bind }}|\n|ipfs.dnp.dappnode.eth|${{ needs.set-versions.outputs.ipfs }}|\n|vpn.dnp.dappnode.eth |${{ needs.set-versions.outputs.vpn }}|\n|dappmanager.dnp.dappnode.eth|${{ needs.set-versions.outputs.dappmanager }}|\n|wifi.dnp.dappnode.eth|${{ needs.set-versions.outputs.wifi }}|\n|https.dnp.dappnode.eth|${{ needs.set-versions.outputs.https }}|\n|wireguard.dnp.dappnode.eth|${{ needs.set-versions.outputs.wireguard }}|\n# Changes\nChanges implemented in release ${{ needs.set-versions.outputs.core }}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso\n$SHASUM_DEBIAN_ATTENDED\n```\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso\n$SHASUM_DEBIAN_UNATTENDED\n```\n# Ubuntu Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-ubuntu-bookworm-amd64-unattended.iso**\n\n## ISO SHA-256 Checksum\nUploaded directly to SSH server.\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
+ SHASUM_UBUNTU_UNATTENDED=$(cat SHASUM_UBUNTU_UNATTENDED.txt)
+ echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${{ needs.set-versions.outputs.bind }}|\n|ipfs.dnp.dappnode.eth|${{ needs.set-versions.outputs.ipfs }}|\n|vpn.dnp.dappnode.eth |${{ needs.set-versions.outputs.vpn }}|\n|dappmanager.dnp.dappnode.eth|${{ needs.set-versions.outputs.dappmanager }}|\n|wifi.dnp.dappnode.eth|${{ needs.set-versions.outputs.wifi }}|\n|https.dnp.dappnode.eth|${{ needs.set-versions.outputs.https }}|\n|wireguard.dnp.dappnode.eth|${{ needs.set-versions.outputs.wireguard }}|\n# Changes\nChanges implemented in release ${{ needs.set-versions.outputs.core }}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso\n$SHASUM_DEBIAN_ATTENDED\n```\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso\n$SHASUM_DEBIAN_UNATTENDED\n```\n# Ubuntu Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-ubuntu-bookworm-amd64-unattended.iso**\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-ubuntu-bookworm-amd64-unattended.iso\n$SHASUM_UBUNTU_UNATTENDED\n```\nUploaded at https://ubuntu.iso.dappnode.io\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
cat CHANGELOG.md
- name: Print images directory
run: |
@@ -233,14 +242,4 @@ jobs:
dappnode_profile.sh
body_path: CHANGELOG.md
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload Ubuntu unattended to SSH server (and shasum)
- uses: appleboy/scp-action@v0.1.7
- with:
- host: ${{ secrets.ISO_SSH_HOST }}
- username: ${{ secrets.ISO_SSH_USER }}
- key: ${{ secrets.ISO_SSH_PRIVATE_KEY }}
- port: ${{ secrets.SSH_PORT }}
- source: SHASUM_UBUNTU_UNATTENDED.txt,./images/Dappnode-*-ubuntu-*-unattended.iso
- target: ${{ secrets.ISO_SSH_PATH }}
- overwrite: true
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
From 775f396f0641b10627ed84799c5ff9bfab12e50d Mon Sep 17 00:00:00 2001
From: 3alpha
Date: Wed, 12 Nov 2025 10:44:34 -0300
Subject: [PATCH 42/44] fix wf
---
.github/workflows/release.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3fa5317..5762c75 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -199,6 +199,7 @@ jobs:
name: Combine, release, and upload
runs-on: ubuntu-latest
needs:
+ - set-versions
- build-debian-attended
- build-debian-unattended
- build-ubuntu-unattended
From 09dc55ae4c9af427c481862fc08ccb719956ec15 Mon Sep 17 00:00:00 2001
From: pablomendezroyo <41727368+pablomendezroyo@users.noreply.github.com>
Date: Fri, 14 Nov 2025 09:26:33 +0100
Subject: [PATCH 43/44] set correct name to dappnode_profile (#680)
---
.github/workflows/release.yml | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5762c75..94223b5 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -27,7 +27,6 @@ on:
description: "Version of the OpenVPN Package. Only numbers"
required: true
-
jobs:
set-versions:
name: Set versions and check regex
@@ -88,6 +87,8 @@ jobs:
uses: actions/download-artifact@v4
with:
name: dappnode_profile
+ - name: Rename dappnode_profile.sh to .dappnode_profile
+ run: mv dappnode_profile.sh .dappnode_profile
- name: Build Debian attended
run: |
export BASE_OS=debian
@@ -125,6 +126,8 @@ jobs:
uses: actions/download-artifact@v4
with:
name: dappnode_profile
+ - name: Rename dappnode_profile.sh to .dappnode_profile
+ run: mv dappnode_profile.sh .dappnode_profile
- name: Build Debian unattended
run: |
export BASE_OS=debian
@@ -163,6 +166,8 @@ jobs:
uses: actions/download-artifact@v4
with:
name: dappnode_profile
+ - name: Rename dappnode_profile.sh to .dappnode_profile
+ run: mv dappnode_profile.sh .dappnode_profile
- name: Build Ubuntu unattended
run: |
export BASE_OS=ubuntu
@@ -243,4 +248,4 @@ jobs:
dappnode_profile.sh
body_path: CHANGELOG.md
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
From c6fb055f763854f57e7d441bb55712fc0ffd383b Mon Sep 17 00:00:00 2001
From: Marketen
Date: Thu, 18 Dec 2025 19:00:16 +0100
Subject: [PATCH 44/44] check if 80 and 443 ports are used & https running
---
scripts/dappnode_install.sh | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/scripts/dappnode_install.sh b/scripts/dappnode_install.sh
index f285289..fc58ff1 100755
--- a/scripts/dappnode_install.sh
+++ b/scripts/dappnode_install.sh
@@ -57,9 +57,27 @@ is_iso_install() {
fi
}
-# Check is port 80 in used (necessary for HTTPS)
+# Check if port 80 is in use (necessary for HTTPS)
+# Returns IS_PORT_USED=true only if port 80 or 443 is used by something OTHER than our HTTPS container
is_port_used() {
- lsof -i -P -n | grep ":80 (LISTEN)" &>/dev/null && IS_PORT_USED=true || IS_PORT_USED=false
+ # Check if port 80 or 443 is in use at all
+ local port80_used port443_used
+ lsof -i -P -n | grep ":80 (LISTEN)" &>/dev/null && port80_used=true || port80_used=false
+ lsof -i -P -n | grep ":443 (LISTEN)" &>/dev/null && port443_used=true || port443_used=false
+
+ if [ "$port80_used" = false ] && [ "$port443_used" = false ]; then
+ IS_PORT_USED=false
+ return
+ fi
+
+ # If either port is in use, check if it's our HTTPS container
+ if docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^DAppNodeCore-https.dnp.dappnode.eth$"; then
+ # Port 80 or 443 is used by our HTTPS container, so we consider it "not used" for package determination
+ IS_PORT_USED=false
+ else
+ # Port 80 or 443 is used by something else
+ IS_PORT_USED=true
+ fi
}
# Determine packages to be installed