penguins-eggs 25.10.19 → 25.10.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.oclif.manifest.json +17 -3
  2. package/README.md +769 -2
  3. package/README.pdf +1705 -1747
  4. package/addons/eggs/theme/livecd/{grub.theme.cfg → full.grub.theme.cfg} +1 -1
  5. package/addons/eggs/theme/livecd/{isolinux.theme.cfg → full.isolinux.theme.cfg} +1 -1
  6. package/addons/eggs/theme/livecd/generic-splash.png +0 -0
  7. package/addons/eggs/theme/livecd/generic.grub.main.cfg +29 -0
  8. package/addons/eggs/theme/livecd/generic.grub.theme.cfg +67 -0
  9. package/addons/eggs/theme/livecd/generic.isolinux.main.cfg +34 -0
  10. package/addons/eggs/theme/livecd/generic.isolinux.theme.cfg +34 -0
  11. package/addons/eggs/theme/livecd/simple.grub.main.cfg +29 -0
  12. package/addons/eggs/theme/livecd/simple.grub.theme.cfg +67 -0
  13. package/addons/eggs/theme/livecd/{isolinux.main.simple.cfg → simple.isolinux.main.cfg} +1 -2
  14. package/addons/eggs/theme/livecd/simple.isolinux.theme.cfg +47 -0
  15. package/dist/classes/diversions.d.ts +1 -1
  16. package/dist/classes/diversions.js +4 -25
  17. package/dist/classes/ovary.d/bind-live-fs.js +1 -1
  18. package/dist/classes/ovary.d/initrd.js +3 -2
  19. package/dist/classes/ovary.d/luks-get-password.js +1 -0
  20. package/dist/classes/ovary.d/luks-home.js +41 -29
  21. package/dist/classes/ovary.d/luks-root-initrd.d.ts +17 -0
  22. package/dist/classes/ovary.d/luks-root-initrd.js +213 -0
  23. package/dist/classes/ovary.d/luks-root.js +60 -35
  24. package/dist/classes/ovary.d/make-dot-disk.js +10 -1
  25. package/dist/classes/ovary.d/make-efi.js +59 -43
  26. package/dist/classes/ovary.d/make-squashfs.d.ts +1 -1
  27. package/dist/classes/ovary.d/make-squashfs.js +2 -5
  28. package/dist/classes/ovary.d/merged.js +1 -1
  29. package/dist/classes/ovary.d/produce.d.ts +2 -2
  30. package/dist/classes/ovary.d/produce.js +45 -44
  31. package/dist/classes/ovary.d/syslinux.js +47 -34
  32. package/dist/classes/ovary.d/xorriso-command.js +1 -2
  33. package/dist/classes/ovary.d.ts +3 -4
  34. package/dist/classes/ovary.js +6 -6
  35. package/dist/classes/utils.d.ts +2 -0
  36. package/dist/classes/utils.js +13 -3
  37. package/dist/commands/love.d.ts +1 -0
  38. package/dist/commands/love.js +9 -2
  39. package/dist/commands/produce.d.ts +2 -1
  40. package/dist/commands/produce.js +18 -4
  41. package/dist/krill/classes/sequence.d.ts +1 -1
  42. package/dist/krill/classes/sequence.js +3 -3
  43. package/package.json +4 -4
  44. package/scripts/_eggs +3 -1
  45. package/scripts/boot-encrypted-root.sh +177 -0
  46. package/scripts/eggs.bash +2 -2
  47. package/scripts/mount-encrypted-home.sh +92 -56
  48. package/dist/classes/ovary.d/luks-root-bootstrap-builder.d.ts +0 -11
  49. package/dist/classes/ovary.d/luks-root-bootstrap-builder.js +0 -45
  50. package/scripts/luks-root-bootstrap-create.sh +0 -235
  51. package/scripts/luks-root-unlock.sh +0 -172
  52. /package/addons/eggs/theme/livecd/{grub.main.cfg → full.grub.main.cfg} +0 -0
  53. /package/addons/eggs/theme/livecd/{isolinux.main.full.cfg → full.isolinux.main.cfg} +0 -0
@@ -1,235 +0,0 @@
1
- #!/bin/bash
2
- # luks-root-bootstrap-create.sh
3
- # Crea un filesystem.squashfs Debian completo per bootstrap
4
- set -e
5
-
6
- OUTPUT_SQUASHFS="$1"
7
- UNLOCK_SCRIPT="$2"
8
-
9
- # Usa /root per avere sicuramente spazio
10
- WORK_DIR="/root/bootstrap-filesystem-$$"
11
-
12
- if [ -z "$OUTPUT_SQUASHFS" ] || [ -z "$UNLOCK_SCRIPT" ]; then
13
- echo "Usage: $0 <output.squashfs> <unlock-script.sh>"
14
- exit 1
15
- fi
16
-
17
- if [ ! -f "$UNLOCK_SCRIPT" ]; then
18
- echo "Error: Unlock script not found: $UNLOCK_SCRIPT"
19
- exit 1
20
- fi
21
-
22
- BUILD_SUCCESS=0
23
-
24
-
25
- echo "=========================================="
26
- echo " Creating Bootstrap Filesystem"
27
- echo "=========================================="
28
- echo ""
29
- echo "Output: $OUTPUT_SQUASHFS"
30
- echo "Work dir: $WORK_DIR"
31
- echo ""
32
-
33
- # Cleanup function
34
- cleanup() {
35
- if [ -d "$WORK_DIR" ]; then
36
- echo "Cleaning up work directory..."
37
- umount "$WORK_DIR/proc" 2>/dev/null || true
38
- umount "$WORK_DIR/sys" 2>/dev/null || true
39
- umount "$WORK_DIR/dev/pts" 2>/dev/null || true
40
- umount "$WORK_DIR/dev" 2>/dev/null || true
41
-
42
- if [ $BUILD_SUCCESS -eq 1 ]; then
43
- rm -rf "$WORK_DIR"
44
- echo "Work directory cleaned"
45
- else
46
- echo "Work directory preserved for debugging: $WORK_DIR"
47
- fi
48
- fi
49
- }
50
- trap cleanup EXIT
51
-
52
- # Crea directory di lavoro
53
- mkdir -p "$WORK_DIR"
54
-
55
- # 1. Debootstrap - CON kmod e bash-completion
56
- echo "Step 1/6: Running debootstrap (this takes 5-10 minutes)..."
57
- debootstrap \
58
- --variant=minbase \
59
- --include=systemd,systemd-sysv,cryptsetup,kmod,bash-completion,nano,less,vim-tiny \
60
- trixie \
61
- "$WORK_DIR" \
62
- http://deb.debian.org/debian
63
-
64
- echo "✓ Debootstrap completed"
65
-
66
- # 1.5. Copia moduli kernel
67
- echo ""
68
- echo "Step 1.5/6: Copying kernel modules..."
69
-
70
- KERNEL_VERSION=$(uname -r)
71
-
72
- if [ -d "/lib/modules/$KERNEL_VERSION" ]; then
73
- echo "Copying kernel modules for $KERNEL_VERSION..."
74
-
75
- # Assicurati che la directory esista
76
- mkdir -p "$WORK_DIR/lib/modules"
77
-
78
- # Copia TUTTO il kernel
79
- cp -a "/lib/modules/$KERNEL_VERSION" "$WORK_DIR/lib/modules/"
80
-
81
- # Verifica che sia stato copiato
82
- if [ -d "$WORK_DIR/lib/modules/$KERNEL_VERSION" ]; then
83
- echo "✓ Kernel modules copied for $KERNEL_VERSION"
84
- echo " Module directory size: $(du -sh "$WORK_DIR/lib/modules/$KERNEL_VERSION" | cut -f1)"
85
- else
86
- echo "ERROR: Failed to copy kernel modules!"
87
- exit 1
88
- fi
89
- else
90
- echo "ERROR: Kernel modules not found at /lib/modules/$KERNEL_VERSION"
91
- exit 1
92
- fi
93
-
94
- # 2. Configura sistema base
95
- echo ""
96
- echo "Step 2/6: Configuring base system..."
97
-
98
- echo "bootstrap" > "$WORK_DIR/etc/hostname"
99
-
100
- cat > "$WORK_DIR/etc/hosts" <<EOF
101
- 127.0.0.1 localhost
102
- 127.0.1.1 bootstrap
103
-
104
- ::1 localhost ip6-localhost ip6-loopback
105
- ff02::1 ip6-allnodes
106
- ff02::2 ip6-allrouters
107
- EOF
108
-
109
- cat > "$WORK_DIR/etc/fstab" <<EOF
110
- # Bootstrap filesystem - no persistent mounts
111
- EOF
112
-
113
- echo "root:evolution" | chroot "$WORK_DIR" chpasswd
114
-
115
- # Abilita bash-completion per root
116
- cat >> "$WORK_DIR/root/.bashrc" <<'EOF'
117
-
118
- # Enable bash completion
119
- if [ -f /usr/share/bash-completion/bash_completion ]; then
120
- . /usr/share/bash-completion/bash_completion
121
- elif [ -f /etc/bash_completion ]; then
122
- . /etc/bash_completion
123
- fi
124
-
125
- # Useful aliases
126
- alias ll='ls -lah'
127
- alias l='ls -lh'
128
- EOF
129
-
130
- cat > "$WORK_DIR/etc/motd" <<EOF
131
-
132
- ╔════════════════════════════════════════╗
133
- ║ Bootstrap System - Debug Shell ║
134
- ╚════════════════════════════════════════╝
135
-
136
- This is the bootstrap environment for unlocking
137
- the encrypted root filesystem.
138
-
139
- Root credentials:
140
- Username: root
141
- Password: evolution
142
-
143
- Manual unlock command:
144
- unlock-encrypted-root
145
-
146
- EOF
147
-
148
- echo "✓ Base system configured (root password: evolution)"
149
-
150
- # 3. Copia script di unlock
151
- echo ""
152
- echo "Step 3/6: Installing unlock script..."
153
- mkdir -p "$WORK_DIR/usr/local/bin"
154
- cp "$UNLOCK_SCRIPT" "$WORK_DIR/usr/local/bin/unlock-encrypted-root"
155
- chmod 755 "$WORK_DIR/usr/local/bin/unlock-encrypted-root"
156
- echo "✓ Unlock script installed at /usr/local/bin/unlock-encrypted-root"
157
-
158
- # 4. Fix console getty per stabilità
159
- echo ""
160
- echo "Step 4/6: Configuring stable console..."
161
-
162
- mkdir -p "$WORK_DIR/etc/systemd/system/getty@tty1.service.d"
163
- cat > "$WORK_DIR/etc/systemd/system/getty@tty1.service.d/noclear.conf" <<EOF
164
- [Service]
165
- # Mantieni la console pulita e stabile
166
- TTYVTDisallocate=no
167
- EOF
168
-
169
- echo "✓ Console configuration applied"
170
-
171
- # 5. Cleanup per ridurre dimensioni (ma NON i moduli kernel!)
172
- echo ""
173
- echo "Step 5/6: Cleaning up to reduce size..."
174
- rm -rf "$WORK_DIR/var/cache/apt/archives/"*
175
- rm -rf "$WORK_DIR/var/lib/apt/lists/"*
176
- rm -rf "$WORK_DIR/tmp/"*
177
- rm -rf "$WORK_DIR/var/tmp/"*
178
- rm -rf "$WORK_DIR/usr/share/doc/"*
179
- rm -rf "$WORK_DIR/usr/share/man/"*
180
- rm -rf "$WORK_DIR/usr/share/info/"*
181
-
182
- # NON cancellare tutte le locale, lascia en_US per bash-completion
183
- rm -rf "$WORK_DIR/usr/share/locale/"[!e]*
184
- rm -rf "$WORK_DIR/usr/share/locale/en_"[!U]*
185
-
186
- echo "✓ Cleanup completed"
187
-
188
- # 6. Crea squashfs
189
- echo ""
190
- echo "Step 6/6: Creating squashfs (this takes 2-3 minutes)..."
191
-
192
- if [ ! -d "$WORK_DIR" ]; then
193
- echo "ERROR: Work directory disappeared!"
194
- exit 1
195
- fi
196
-
197
- if [ -f "$OUTPUT_SQUASHFS" ]; then
198
- rm -f "$OUTPUT_SQUASHFS"
199
- fi
200
-
201
- mksquashfs "$WORK_DIR" "$OUTPUT_SQUASHFS" \
202
- -comp zstd \
203
- -b 1M \
204
- -noappend
205
-
206
- if [ ! -f "$OUTPUT_SQUASHFS" ]; then
207
- echo "ERROR: Failed to create squashfs file"
208
- exit 1
209
- fi
210
-
211
- SIZE_MB=$(du -m "$OUTPUT_SQUASHFS" | cut -f1)
212
-
213
- echo ""
214
- echo "=========================================="
215
- echo "✓ Bootstrap filesystem created!"
216
- echo "=========================================="
217
- echo ""
218
- echo " File: $OUTPUT_SQUASHFS"
219
- echo " Size: ${SIZE_MB} MB"
220
- echo ""
221
- echo "Features:"
222
- echo " - Minimal Debian system with systemd"
223
- echo " - Kernel modules included (dm_mod, dm_crypt)"
224
- echo " - kmod (modprobe, lsmod, etc.)"
225
- echo " - bash-completion enabled"
226
- echo " - Stable console"
227
- echo " - Manual unlock at /usr/local/bin/unlock-encrypted-root"
228
- echo ""
229
- echo "Usage:"
230
- echo " 1. Boot the system"
231
- echo " 2. Login as root (password: evolution)"
232
- echo " 3. Run: unlock-encrypted-root"
233
- echo ""
234
-
235
- BUILD_SUCCESS=1
@@ -1,172 +0,0 @@
1
- #!/bin/bash
2
- # luks-root-unlock.sh
3
- # Versione Chroot: Monta l'ISO (ro), l'ext4 (ro), lo squashfs (ro)
4
- # e crea un overlay scrivibile in RAM.
5
-
6
- set -e
7
-
8
- echo ""
9
- echo "=========================================="
10
- echo " Encrypted Root Unlock (CHROOT MODE)"
11
- echo "=========================================="
12
- echo ""
13
-
14
- # Crea mountpoint
15
- mkdir -p /mnt/live-media
16
- mkdir -p /mnt/root-img
17
- mkdir -p /mnt/real-root
18
- mkdir -p /newroot
19
-
20
- # Trova live media
21
- echo "Searching for live media..."
22
- FOUND=0
23
- for dev in /dev/sr* /dev/sd* /dev/vd* /dev/nvme*n*;
24
- do
25
- [ -b "$dev" ] || continue
26
- echo " Trying $dev..."
27
- if mount -o ro "$dev" /mnt/live-media 2>/dev/null;
28
- then
29
- if [ -f /mnt/live-media/live/root.img ];
30
- then
31
- echo " ✓ Found live media on $dev"
32
- FOUND=1
33
- break
34
- fi
35
- umount /mnt/live-media 2>/dev/null
36
- fi
37
- done
38
-
39
- if [ $FOUND -eq 0 ]; then
40
- echo ""
41
- echo "✗ ERROR: Could not find live media"
42
- lsblk
43
- echo "Dropping to emergency shell..."
44
- exec /bin/bash
45
- fi
46
-
47
- # Usa il root.img originale dall'ISO (read-only)
48
- ROOT_IMG="/mnt/live-media/live/root.img"
49
-
50
- # Verifica LUKS
51
- if ! cryptsetup isLuks "$ROOT_IMG"; then
52
- echo "✗ ERROR: root.img is not a LUKS volume"
53
- file "$ROOT_IMG"
54
- exec /bin/bash
55
- fi
56
-
57
- # Unlock
58
- echo ""
59
- echo "Found encrypted root.img"
60
- MAX_ATTEMPTS=3
61
- for attempt in $(seq 1 $MAX_ATTEMPTS);
62
- do
63
- echo "Enter passphrase to unlock (attempt $attempt of $MAX_ATTEMPTS):"
64
- if cryptsetup open "$ROOT_IMG" live-root;
65
- then
66
- echo ""
67
- echo "✓ Unlocked successfully!"
68
- break
69
- fi
70
- if [ $attempt -eq $MAX_ATTEMPTS ];
71
- then
72
- echo ""
73
- echo "✗ Failed after $MAX_ATTEMPTS attempts"
74
- echo "Dropping to shell..."
75
- exec /bin/bash
76
- fi
77
- echo "✗ Wrong passphrase, try again..."
78
- echo ""
79
- done
80
-
81
- # Mount decrypted volume (RO)
82
- # Il messaggio "skipping orphan cleanup" apparirà, ma è innocuo.
83
- echo ""
84
- echo "Mounting decrypted volume (ro)..."
85
- if ! mount -t ext4 -o ro /dev/mapper/live-root /mnt/root-img; then
86
- echo "✗ ERROR: Failed to mount decrypted volume (ro)"
87
- cryptsetup close live-root
88
- exec /bin/bash
89
- fi
90
-
91
- # Mount real filesystem
92
- echo "Mounting real filesystem (ro)..."
93
- if ! mount -t squashfs -o ro,loop /mnt/root-img/filesystem.squashfs /mnt/real-root; then
94
- echo "✗ ERROR: Failed to mount real filesystem"
95
- umount /mnt/root-img
96
- cryptsetup close live-root
97
- exec /bin/bash
98
- fi
99
-
100
- # Create overlay in RAM
101
- echo "Creating writable overlay..."
102
- mkdir -p /run/overlay-upper
103
- mkdir -p /run/overlay-work
104
- if ! mount -t overlay overlay \
105
- -o lowerdir=/mnt/real-root,upperdir=/run/overlay-upper,workdir=/run/overlay-work \
106
- /newroot;
107
- then
108
- echo "✗ ERROR: Failed to mount overlay"
109
- umount /mnt/real-root
110
- umount /mnt/root-img
111
- cryptsetup close live-root
112
- exec /bin/bash
113
- fi
114
- echo "✓ Overlay mounted successfully on /newroot"
115
-
116
- # =================================================================
117
- # BLOCCO CHROOT
118
- # =================================================================
119
- echo ""
120
- echo "Preparing for chroot..."
121
-
122
- # Crea i punti di montaggio per i filesystem speciali
123
- mkdir -p /newroot/dev
124
- mkdir -p /newroot/proc
125
- mkdir -p /newroot/sys
126
- mkdir -p /newroot/run
127
-
128
- # Bind-mount dei filesystem speciali (FONDAMENTALE)
129
- echo "Binding kernel filesystems..."
130
- mount --bind /dev /newroot/dev
131
- mount --bind /dev/pts /newroot/dev/pts
132
- mount --bind /proc /newroot/proc
133
- mount --bind /sys /newroot/sys
134
- mount --bind /run /newroot/run
135
-
136
- echo "✓ Bind mounts completed."
137
- echo ""
138
- echo "=========================================================="
139
- echo " ENTERING CHROOT"
140
- echo " Sei ora DENTRO il sistema sbloccato."
141
- echo " Esegui 'exit' per uscire e tornare alla shell live."
142
- echo "----------------------------------------------------------"
143
- echo " Per avviare i servizi (XFCE), prova a eseguire:"
144
- echo " # systemctl start lightdm.service"
145
- echo " (o gdm.service, sddm.service, etc.)"
146
- echo "=========================================================="
147
- echo ""
148
- sleep 2
149
-
150
- # Entra nel chroot con una shell di root completa
151
- chroot /newroot /bin/su - root
152
-
153
- # --- ESECUZIONE SOSPESA FINO A 'exit' ---
154
-
155
- # DOPO L'USCITA DALLO CHROOT
156
- echo ""
157
- echo "=========================================================="
158
- echo " EXITED CHROOT"
159
- echo " Pulizia dei mount..."
160
- echo "=========================================================="
161
-
162
- # Esegui la pulizia finale
163
- umount -R /newroot/dev 2>/dev/null || true
164
- umount -R /newroot/proc 2>/dev/null || true
165
- umount -R /newroot/sys 2>/dev/null || true
166
- umount -R /newroot/run 2>/dev/null || true
167
- umount /newroot 2>/dev/null || true
168
- umount /mnt/real-root 2>/dev/null || true
169
- umount /mnt/root-img 2>/dev/null || true
170
- cryptsetup close live-root 2>/dev/null || true
171
-
172
- echo "✓ Cleanup completo. Ritorno alla shell live."