From 9423b708ef4798226e3e4184321b060c157dccf2 Mon Sep 17 00:00:00 2001 From: Jan De Landtsheer Date: Fri, 5 Sep 2025 13:26:36 +0200 Subject: [PATCH] Add Zero-OS customization before CPIO creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add initramfs_finalize_customization() function - Remove root password for passwordless login (sed -i 's/^root:[^:]*:/root::/' /etc/passwd) - Update /etc/motd and /etc/issue to Zero-OS branding instead of Alpine - Called automatically before CPIO creation - Fixes init script duplication issue (/init vs /sbin/init) - Correct boot flow: /init → switch_root → /sbin/zinit init (no /sbin/init needed) --- .build-stages/alpine_configure.done | 5 --- .build-stages/alpine_extract.done | 5 --- .build-stages/alpine_firmware.done | 5 --- .build-stages/alpine_packages.done | 5 --- .build-stages/boot_tests.done | 5 --- .build-stages/cleanup.done | 5 --- .build-stages/components_build.done | 5 --- .build-stages/components_copy.done | 5 --- .build-stages/components_verify.done | 5 --- .build-stages/init_script.done | 5 --- .build-stages/initramfs_create.done | 5 --- .build-stages/initramfs_test.done | 5 --- .build-stages/kernel_build.done | 5 --- .build-stages/kernel_modules.done | 5 --- .build-stages/modules_copy.done | 5 --- .build-stages/modules_setup.done | 5 --- .build-stages/validation.done | 5 --- .build-stages/zinit_setup.done | 5 --- .gitignore | 4 +-- config/init | 2 +- config/zinit/console.yaml | 2 -- config/zinit/stage1-modules.yaml | 5 --- config/zinit/stage2-modules.yaml | 6 ---- configs/init | 5 ++- scripts/lib/initramfs.sh | 50 ++++++++++++++++++++++++++-- 25 files changed, 53 insertions(+), 111 deletions(-) delete mode 100644 .build-stages/alpine_configure.done delete mode 100644 .build-stages/alpine_extract.done delete mode 100644 .build-stages/alpine_firmware.done delete mode 100644 .build-stages/alpine_packages.done delete mode 100644 .build-stages/boot_tests.done delete mode 100644 .build-stages/cleanup.done delete mode 100644 .build-stages/components_build.done delete mode 100644 .build-stages/components_copy.done delete mode 100644 .build-stages/components_verify.done delete mode 100644 .build-stages/init_script.done delete mode 100644 .build-stages/initramfs_create.done delete mode 100644 .build-stages/initramfs_test.done delete mode 100644 .build-stages/kernel_build.done delete mode 100644 .build-stages/kernel_modules.done delete mode 100644 .build-stages/modules_copy.done delete mode 100644 .build-stages/modules_setup.done delete mode 100644 .build-stages/validation.done delete mode 100644 .build-stages/zinit_setup.done delete mode 100644 config/zinit/console.yaml delete mode 100644 config/zinit/stage1-modules.yaml delete mode 100644 config/zinit/stage2-modules.yaml diff --git a/.build-stages/alpine_configure.done b/.build-stages/alpine_configure.done deleted file mode 100644 index 714f760..0000000 --- a/.build-stages/alpine_configure.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="alpine_configure" -COMPLETED_AT="2025-09-05T08:50:10+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_alpine_configure" diff --git a/.build-stages/alpine_extract.done b/.build-stages/alpine_extract.done deleted file mode 100644 index ed2d4c4..0000000 --- a/.build-stages/alpine_extract.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="alpine_extract" -COMPLETED_AT="2025-09-05T08:50:10+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_alpine_extract" diff --git a/.build-stages/alpine_firmware.done b/.build-stages/alpine_firmware.done deleted file mode 100644 index df28aa7..0000000 --- a/.build-stages/alpine_firmware.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="alpine_firmware" -COMPLETED_AT="2025-09-05T08:50:17+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 3s, Function: stage_alpine_firmware" diff --git a/.build-stages/alpine_packages.done b/.build-stages/alpine_packages.done deleted file mode 100644 index 0db2598..0000000 --- a/.build-stages/alpine_packages.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="alpine_packages" -COMPLETED_AT="2025-09-05T08:50:14+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 4s, Function: stage_alpine_packages" diff --git a/.build-stages/boot_tests.done b/.build-stages/boot_tests.done deleted file mode 100644 index 633bacc..0000000 --- a/.build-stages/boot_tests.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="boot_tests" -COMPLETED_AT="2025-09-05T09:00:10+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_boot_tests" diff --git a/.build-stages/cleanup.done b/.build-stages/cleanup.done deleted file mode 100644 index 56f50c6..0000000 --- a/.build-stages/cleanup.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="cleanup" -COMPLETED_AT="2025-09-05T09:35:22+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_cleanup" diff --git a/.build-stages/components_build.done b/.build-stages/components_build.done deleted file mode 100644 index 60072f0..0000000 --- a/.build-stages/components_build.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="components_build" -COMPLETED_AT="2025-09-05T08:52:40+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 143s, Function: stage_components_build" diff --git a/.build-stages/components_copy.done b/.build-stages/components_copy.done deleted file mode 100644 index 2aeac8b..0000000 --- a/.build-stages/components_copy.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="components_copy" -COMPLETED_AT="2025-09-05T09:35:21+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 82s, Function: stage_components_copy" diff --git a/.build-stages/components_verify.done b/.build-stages/components_verify.done deleted file mode 100644 index cd9446c..0000000 --- a/.build-stages/components_verify.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="components_verify" -COMPLETED_AT="2025-09-05T08:52:40+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_components_verify" diff --git a/.build-stages/init_script.done b/.build-stages/init_script.done deleted file mode 100644 index cd90679..0000000 --- a/.build-stages/init_script.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="init_script" -COMPLETED_AT="2025-09-05T09:33:59+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_init_script" diff --git a/.build-stages/initramfs_create.done b/.build-stages/initramfs_create.done deleted file mode 100644 index f5e9494..0000000 --- a/.build-stages/initramfs_create.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="initramfs_create" -COMPLETED_AT="2025-09-05T09:35:47+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 25s, Function: stage_initramfs_create" diff --git a/.build-stages/initramfs_test.done b/.build-stages/initramfs_test.done deleted file mode 100644 index ff660e3..0000000 --- a/.build-stages/initramfs_test.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="initramfs_test" -COMPLETED_AT="2025-09-05T09:35:48+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 1s, Function: stage_initramfs_test" diff --git a/.build-stages/kernel_build.done b/.build-stages/kernel_build.done deleted file mode 100644 index d585e55..0000000 --- a/.build-stages/kernel_build.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="kernel_build" -COMPLETED_AT="2025-09-05T09:36:19+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 31s, Function: stage_kernel_build" diff --git a/.build-stages/kernel_modules.done b/.build-stages/kernel_modules.done deleted file mode 100644 index 03d9b14..0000000 --- a/.build-stages/kernel_modules.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="kernel_modules" -COMPLETED_AT="2025-09-05T08:57:54+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 314s, Function: stage_kernel_modules" diff --git a/.build-stages/modules_copy.done b/.build-stages/modules_copy.done deleted file mode 100644 index 82fc19e..0000000 --- a/.build-stages/modules_copy.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="modules_copy" -COMPLETED_AT="2025-09-05T09:35:22+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_modules_copy" diff --git a/.build-stages/modules_setup.done b/.build-stages/modules_setup.done deleted file mode 100644 index 5f4c39c..0000000 --- a/.build-stages/modules_setup.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="modules_setup" -COMPLETED_AT="2025-09-05T09:35:22+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 1s, Function: stage_modules_setup" diff --git a/.build-stages/validation.done b/.build-stages/validation.done deleted file mode 100644 index 9ee4d08..0000000 --- a/.build-stages/validation.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="validation" -COMPLETED_AT="2025-09-05T09:35:22+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_validation" diff --git a/.build-stages/zinit_setup.done b/.build-stages/zinit_setup.done deleted file mode 100644 index 25f8192..0000000 --- a/.build-stages/zinit_setup.done +++ /dev/null @@ -1,5 +0,0 @@ -# Stage completion marker -STAGE_NAME="zinit_setup" -COMPLETED_AT="2025-09-05T09:35:21+00:00" -COMPLETED_BY="root" -DETAILS="Duration: 0s, Function: stage_zinit_setup" diff --git a/.gitignore b/.gitignore index 32477e9..eb3bba5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ components/ initramfs/ kernel/ dist/ +.build-stages/ # Build logs *.log @@ -36,5 +37,4 @@ linux-*.tar.xz # OS generated files .DS_Store -Thumbs.db# Build stage tracking (should not be in git) -.build-stages/ +Thumbs.db diff --git a/config/init b/config/init index 9dd73a8..f05dc6e 100755 --- a/config/init +++ b/config/init @@ -112,6 +112,6 @@ fi echo "[+] switching root" echo " exec switch_root /mnt/root /sbin/zinit init" -exec switch_root /mnt/root /sbin/zinit init +exec switch_root /mnt/root /sbin/zinit -d init ## \ No newline at end of file diff --git a/config/zinit/console.yaml b/config/zinit/console.yaml deleted file mode 100644 index 51c1869..0000000 --- a/config/zinit/console.yaml +++ /dev/null @@ -1,2 +0,0 @@ -exec: sh /etc/zinit/init/cgroup.sh -oneshot: true \ No newline at end of file diff --git a/config/zinit/stage1-modules.yaml b/config/zinit/stage1-modules.yaml deleted file mode 100644 index 1571cd6..0000000 --- a/config/zinit/stage1-modules.yaml +++ /dev/null @@ -1,5 +0,0 @@ -exec: sh /etc/zinit/init/stage1-modules.sh -oneshot: true -after: - - udevd -test: /etc/zinit/init/stage1-modules.sh \ No newline at end of file diff --git a/config/zinit/stage2-modules.yaml b/config/zinit/stage2-modules.yaml deleted file mode 100644 index 672238a..0000000 --- a/config/zinit/stage2-modules.yaml +++ /dev/null @@ -1,6 +0,0 @@ -exec: sh /etc/zinit/init/stage2-modules.sh -oneshot: true -after: - - stage1-modules - - network -test: /etc/zinit/init/stage2-modules.sh \ No newline at end of file diff --git a/configs/init b/configs/init index cb45e84..25ab711 100755 --- a/configs/init +++ b/configs/init @@ -12,11 +12,10 @@ target="/mnt/root" mkdir -p $target mount -t proc proc /proc mount -t sysfs sysfs /sys -mount -t tmpfs tmpfs /mnt/root -o size=1536M +mount -t tmpfs tmpfs /mnt/root -o size=1024M mount -t devtmpfs devtmpfs /dev echo "[+] building ram filesystem" -target="/mnt/root" # Copy Alpine filesystem to tmpfs (same as original) echo " copying /bin..." @@ -102,6 +101,6 @@ fi echo "[+] switching root" echo " exec switch_root /mnt/root /sbin/zinit init" -exec switch_root /mnt/root /sbin/zinit init +exec switch_root /mnt/root /sbin/zinit -d init ## \ No newline at end of file diff --git a/scripts/lib/initramfs.sh b/scripts/lib/initramfs.sh index c8a7b69..b5ee1b7 100644 --- a/scripts/lib/initramfs.sh +++ b/scripts/lib/initramfs.sh @@ -570,6 +570,49 @@ function initramfs_strip_and_upx() { log_info "Total initramfs size after optimization: ${total_mb}MB" } +# Final initramfs customization before CPIO creation +function initramfs_finalize_customization() { + local initramfs_dir="$1" + + section_header "Final Zero-OS Customization" + + # Remove root password for passwordless login + log_info "Removing root password for passwordless login" + if [[ -f "${initramfs_dir}/etc/passwd" ]]; then + safe_execute sed -i 's/^root:[^:]*:/root::/' "${initramfs_dir}/etc/passwd" + log_info "✓ Root password removed" + else + log_warn "/etc/passwd not found, skipping password removal" + fi + + # Update /etc/motd to Zero-OS + log_info "Updating /etc/motd to Zero-OS branding" + cat > "${initramfs_dir}/etc/motd" << 'EOF' + +Welcome to Zero-OS! + +This is a minimal operating system designed for decentralized infrastructure. +Built on Alpine Linux with ThreeFold components. + +For more information: https://github.com/threefoldtech/zos + +EOF + + # Update /etc/issue to Zero-OS + log_info "Updating /etc/issue to Zero-OS branding" + cat > "${initramfs_dir}/etc/issue" << 'EOF' +Zero-OS \r \m +Built on \l + +EOF + + # Set proper permissions + safe_execute chmod 644 "${initramfs_dir}/etc/motd" + safe_execute chmod 644 "${initramfs_dir}/etc/issue" + + log_info "Zero-OS customization complete" +} + # Create final initramfs.cpio.xz archive function initramfs_create_cpio() { local initramfs_dir="$1" @@ -594,6 +637,9 @@ function initramfs_create_cpio() { log_info "Output file: ${output_file}" log_info "Compression: ${compression}" + # Run final Zero-OS customization before creating CPIO + initramfs_finalize_customization "$initramfs_dir" + # Change to initramfs directory for relative paths safe_execute cd "$initramfs_dir" @@ -896,5 +942,5 @@ function initramfs_copy_resolved_modules() { # Export all functions at the end after they're all defined export -f initramfs_setup_zinit initramfs_setup_modules initramfs_resolve_module_dependencies export -f initramfs_install_init_script initramfs_copy_components initramfs_create_module_scripts -export -f initramfs_strip_and_upx initramfs_create_cpio initramfs_validate initramfs_test_archive -export -f initramfs_copy_resolved_modules \ No newline at end of file +export -f initramfs_strip_and_upx initramfs_finalize_customization initramfs_create_cpio +export -f initramfs_validate initramfs_test_archive initramfs_copy_resolved_modules \ No newline at end of file