penguins-eggs 25.10.6 → 25.10.19
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.
- package/.oclif.manifest.json +51 -145
- package/README.md +3 -829
- package/addons/eggs/theme/livecd/isolinux.main.simple.cfg +3 -3
- package/conf/distros/trixie/calamares/modules/shellprocess@boot_deploy.yml +3 -4
- package/conf/love.yaml +1 -1
- package/dist/classes/distro.js +9 -2
- package/dist/classes/diversions.d.ts +1 -1
- package/dist/classes/diversions.js +27 -8
- package/dist/classes/incubation/incubator.d/archlinux.js +1 -0
- package/dist/classes/incubation/incubator.d/trixie.js +7 -10
- package/dist/classes/ovary.d/edit-live-fs.d.ts +1 -1
- package/dist/classes/ovary.d/edit-live-fs.js +1 -7
- package/dist/classes/ovary.d/fertilization.js +1 -0
- package/dist/classes/ovary.d/finished.js +1 -5
- package/dist/classes/ovary.d/initrd.d.ts +1 -1
- package/dist/classes/ovary.d/initrd.js +17 -19
- package/dist/classes/ovary.d/live-create-structure.js +1 -4
- package/dist/classes/ovary.d/luks-get-password.d.ts +12 -0
- package/dist/classes/ovary.d/luks-get-password.js +57 -0
- package/dist/classes/ovary.d/luks-home-support.d.ts +12 -0
- package/dist/classes/ovary.d/luks-home-support.js +75 -0
- package/dist/classes/ovary.d/luks-home.d.ts +15 -0
- package/dist/classes/ovary.d/luks-home.js +140 -0
- package/dist/classes/ovary.d/luks-root-bootstrap-builder.d.ts +11 -0
- package/dist/classes/ovary.d/luks-root-bootstrap-builder.js +45 -0
- package/dist/classes/ovary.d/luks-root.d.ts +15 -0
- package/dist/classes/ovary.d/luks-root.js +126 -0
- package/dist/classes/ovary.d/make-efi.js +1 -1
- package/dist/classes/ovary.d/make-squashfs.d.ts +1 -1
- package/dist/classes/ovary.d/make-squashfs.js +7 -3
- package/dist/classes/ovary.d/produce.d.ts +3 -3
- package/dist/classes/ovary.d/produce.js +76 -48
- package/dist/classes/ovary.d/syslinux.js +1 -1
- package/dist/classes/ovary.d/xorriso-command.d.ts +2 -2
- package/dist/classes/ovary.d/xorriso-command.js +27 -29
- package/dist/classes/ovary.d.ts +35 -16
- package/dist/classes/ovary.js +42 -16
- package/dist/classes/utils.d.ts +1 -0
- package/dist/classes/utils.js +3 -0
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.js +2 -2
- package/dist/commands/love.d.ts +3 -0
- package/dist/commands/love.js +40 -2
- package/dist/commands/produce.d.ts +3 -2
- package/dist/commands/produce.js +14 -17
- package/dist/commands/tools/{ppa.d.ts → repo.d.ts} +2 -2
- package/dist/commands/tools/{ppa.js → repo.js} +69 -67
- package/dracut/create-symlink +71 -0
- package/dracut/dracut-log.txt +3 -0
- package/dracut/dracut.conf.d/50-live.conf +24 -6
- package/dracut/dracut.conf.d/README.md +10 -0
- package/dracut/export +4 -0
- package/dracut/export-dracut-analysis +51 -0
- package/dracut/export-dracut-log +2 -0
- package/dracut/mkisofs +10 -0
- package/dracut/modules.d/00debug-shell/debug-hook.sh +13 -0
- package/dracut/modules.d/00debug-shell/module-setup.sh +20 -0
- package/dracut/modules.d/90block/README.md +7 -0
- package/dracut/modules.d/90block/block-cmdline.sh +3 -0
- package/dracut/modules.d/90block/module-setup.sh +15 -0
- package/dracut/modules.d/95iso-scan/README.md +3 -0
- package/dracut/modules.d/95iso-scan/iso-scan-fallback.sh +12 -0
- package/dracut/modules.d/95iso-scan/iso-scan.sh +92 -0
- package/dracut/modules.d/95iso-scan/module-setup.sh +18 -0
- package/dracut/modules.d/95luks-loop/README.md +9 -0
- package/dracut/modules.d/95luks-loop/luks-loop.sh +90 -0
- package/dracut/modules.d/95luks-loop/module-setup.sh +17 -0
- package/dracut/renew-initramfs +17 -0
- package/dracut/sbin2bin +10 -0
- package/dracut/update-dracut-conf-d +2 -0
- package/dracut/update-dracut-modules +62 -0
- package/manpages/doc/man/eggs.1.gz +0 -0
- package/manpages/doc/man/eggs.html +7 -661
- package/package.json +9 -8
- package/perrisbrewery/template/dependencies.yaml +6 -5
- package/scripts/_eggs +16 -31
- package/scripts/eggs.bash +4 -6
- package/scripts/luks-root-bootstrap-create.sh +235 -0
- package/scripts/luks-root-unlock.sh +172 -0
- package/scripts/mount-encrypted-home.sh +223 -0
- package/dist/commands/syncfrom.d.ts +0 -45
- package/dist/commands/syncfrom.js +0 -152
- package/dist/commands/syncto.d.ts +0 -40
- package/dist/commands/syncto.js +0 -175
package/package.json
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
"name": "penguins-eggs",
|
|
3
3
|
"shortName": "eggs",
|
|
4
4
|
"description": "A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others",
|
|
5
|
-
"version": "25.10.
|
|
5
|
+
"version": "25.10.19",
|
|
6
6
|
"author": "Piero Proietti",
|
|
7
7
|
"bin": {
|
|
8
8
|
"eggs": "./bin/run.js"
|
|
9
9
|
},
|
|
10
10
|
"bugs": "https://github.com/pieroproietti/penguins-eggs/issues",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@oclif/core": "^4.5.
|
|
13
|
-
"@oclif/plugin-autocomplete": "^3.2.
|
|
12
|
+
"@oclif/core": "^4.5.6",
|
|
13
|
+
"@oclif/plugin-autocomplete": "^3.2.37",
|
|
14
14
|
"@oclif/plugin-help": "^6.2.33",
|
|
15
|
-
"@oclif/plugin-version": "^2.2.
|
|
15
|
+
"@oclif/plugin-version": "^2.2.34",
|
|
16
16
|
"@types/express": "^5.0.3",
|
|
17
17
|
"ansis": "^4.2.0",
|
|
18
18
|
"axios": "^1.12.2",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"ink": "^5",
|
|
24
24
|
"ink-progress-bar": "^3.0.0",
|
|
25
25
|
"ink-spinner": "^5.0.0",
|
|
26
|
-
"inquirer": "^12.
|
|
26
|
+
"inquirer": "^12.10.0",
|
|
27
27
|
"js-yaml": "^4.1.0",
|
|
28
28
|
"mustache": "^4.2.0",
|
|
29
29
|
"netmask": "^2.0.2",
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
"@types/shelljs": "^0.8.17",
|
|
52
52
|
"@types/ws": "^8.18.1",
|
|
53
53
|
"chai": "^6.2.0",
|
|
54
|
-
"eslint": "^9.
|
|
55
|
-
"eslint-config-oclif": "^6.0.
|
|
54
|
+
"eslint": "^9.38.0",
|
|
55
|
+
"eslint-config-oclif": "^6.0.110",
|
|
56
56
|
"eslint-config-prettier": "^10.1.8",
|
|
57
57
|
"glob": "^11.0.3",
|
|
58
58
|
"mocha": "^11.7.4",
|
|
59
|
-
"oclif": "^4.22.
|
|
59
|
+
"oclif": "^4.22.32",
|
|
60
60
|
"perrisbrewery": "^25.9.16",
|
|
61
61
|
"prettier": "^3.6.2",
|
|
62
62
|
"shx": "^0.4.0",
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"/dist",
|
|
77
77
|
"/dracut",
|
|
78
78
|
"/eui",
|
|
79
|
+
"/initramfs-tools",
|
|
79
80
|
"/manpages",
|
|
80
81
|
"/mkinitcpio",
|
|
81
82
|
"/mkinitfs",
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
common:
|
|
6
6
|
- coreutils
|
|
7
7
|
- cryptsetup
|
|
8
|
+
- cryptsetup-bin
|
|
8
9
|
- cryptsetup-initramfs
|
|
9
10
|
- curl # wardrobe
|
|
10
11
|
- dbus-bin | uuidgen-runtime # uuid-runtime per devuan
|
|
@@ -13,11 +14,11 @@ common:
|
|
|
13
14
|
- git # wardrobe
|
|
14
15
|
- gpg # eggs
|
|
15
16
|
- jq # mom
|
|
16
|
-
- live-boot
|
|
17
|
-
- live-boot-doc
|
|
18
|
-
- live-boot-initramfs-tools
|
|
19
|
-
- live-config-systemd | live-config-sysvinit
|
|
20
|
-
- live-tools
|
|
17
|
+
- live-boot | dracut
|
|
18
|
+
- live-boot-doc | dracut
|
|
19
|
+
- live-boot-initramfs-tools | dracut
|
|
20
|
+
- live-config-systemd | live-config-sysvinit | dracut
|
|
21
|
+
- live-tools | dracut-live
|
|
21
22
|
- lvm2 # pvdisplay in krill
|
|
22
23
|
- nodejs (>= 18)
|
|
23
24
|
- parted
|
package/scripts/_eggs
CHANGED
|
@@ -59,7 +59,7 @@ _eggs_tools() {
|
|
|
59
59
|
cmds)
|
|
60
60
|
_values "completions" \
|
|
61
61
|
"clean[clean system log, apt, etc]" \
|
|
62
|
-
"
|
|
62
|
+
"repo[add/remove penguins-eggs-repo]" \
|
|
63
63
|
"skel[update skel from home configuration]" \
|
|
64
64
|
"stat[get statistics from sourceforge]" \
|
|
65
65
|
"yolk[configure eggs to install without internet]" \
|
|
@@ -75,12 +75,12 @@ _values "completions" \
|
|
|
75
75
|
--help"[Show help for command]" \
|
|
76
76
|
"*: :_files"
|
|
77
77
|
;;
|
|
78
|
-
"
|
|
78
|
+
"repo")
|
|
79
79
|
_arguments -S \
|
|
80
|
-
"(-a --add)"{-a,--add}"[add penguins-eggs
|
|
80
|
+
"(-a --add)"{-a,--add}"[add penguins-eggs-repo]" \
|
|
81
81
|
"(-h --help)"{-h,--help}"[Show CLI help.]" \
|
|
82
82
|
"(-n --nointeractive)"{-n,--nointeractive}"[no user interaction]" \
|
|
83
|
-
"(-r --remove)"{-r,--remove}"[remove penguins-eggs
|
|
83
|
+
"(-r --remove)"{-r,--remove}"[remove penguins-eggs-repo]" \
|
|
84
84
|
"(-v --verbose)"{-v,--verbose}"[verbose]" \
|
|
85
85
|
--help"[Show help for command]" \
|
|
86
86
|
"*: :_files"
|
|
@@ -198,11 +198,9 @@ _eggs() {
|
|
|
198
198
|
"pods[eggs pods: build ISOs from containers]" \
|
|
199
199
|
"produce[produce a live image from your system whithout your data]" \
|
|
200
200
|
"status[informations about eggs status]" \
|
|
201
|
-
"syncfrom[restore users and user data from a LUKS volumes]" \
|
|
202
|
-
"syncto[Save users and users' data ENCRYPTED]" \
|
|
203
201
|
"update[update the Penguins' eggs tool]" \
|
|
204
|
-
"help[Display help for eggs.]" \
|
|
205
202
|
"autocomplete[Display autocomplete installation instructions.]" \
|
|
203
|
+
"help[Display help for eggs.]" \
|
|
206
204
|
"version[]" \
|
|
207
205
|
|
|
208
206
|
;;
|
|
@@ -320,6 +318,9 @@ _arguments -S \
|
|
|
320
318
|
"(-h --help)"{-h,--help}"[Show CLI help.]" \
|
|
321
319
|
"(-v --verbose)"{-v,--verbose}"[]" \
|
|
322
320
|
"(-n --nointeractive)"{-n,--nointeractive}"[no user interaction]" \
|
|
321
|
+
"(-c --clone)"{-c,--clone}"[clone (uncrypted)]" \
|
|
322
|
+
"(-k --homecrypt)"{-k,--homecrypt}"[clone crypted home]" \
|
|
323
|
+
"(-f --fullcrypt)"{-f,--fullcrypt}"[clone crypted full]" \
|
|
323
324
|
--help"[Show help for command]" \
|
|
324
325
|
"*: :_files" ;;
|
|
325
326
|
mom)
|
|
@@ -336,11 +337,12 @@ produce)
|
|
|
336
337
|
_arguments -S \
|
|
337
338
|
"*"--addons"[addons to be used: adapt, pve, rsupport]:file:_files" \
|
|
338
339
|
--basename"[basename]:file:_files" \
|
|
339
|
-
"(-c --clone)"{-c,--clone}"[clone]" \
|
|
340
|
-
"(-
|
|
340
|
+
"(-c --clone)"{-c,--clone}"[clone (uncrypted)]" \
|
|
341
|
+
"(-k --homecrypt)"{-k,--homecrypt}"[clone crypted home]" \
|
|
342
|
+
"(-f --fullcrypt)"{-f,--fullcrypt}"[clone crypted full]" \
|
|
341
343
|
"*"--excludes"[use: static, homes, home]:file:_files" \
|
|
342
344
|
"(-h --help)"{-h,--help}"[Show CLI help.]" \
|
|
343
|
-
"(-
|
|
345
|
+
"(-K --kernel)"{-K,--kernel}"[kernel version]:file:_files" \
|
|
344
346
|
"*"--links"[desktop links]:file:_files" \
|
|
345
347
|
"(-m --max)"{-m,--max}"[max compression: xz -Xbcj ...]" \
|
|
346
348
|
"(-N --noicon)"{-N,--noicon}"[no icon eggs on desktop]" \
|
|
@@ -351,7 +353,7 @@ _arguments -S \
|
|
|
351
353
|
"(-s --script)"{-s,--script}"[script mode. Generate scripts to manage iso build]" \
|
|
352
354
|
"(-S --standard)"{-S,--standard}"[standard compression: xz -b 1M]" \
|
|
353
355
|
--theme"[theme for livecd, calamares branding and partitions]:file:_files" \
|
|
354
|
-
"(-
|
|
356
|
+
"(-i --includeRoot)"{-i,--includeRoot}"[folder /root is included on live]" \
|
|
355
357
|
"(-v --verbose)"{-v,--verbose}"[verbose]" \
|
|
356
358
|
"(-y --yolk)"{-y,--yolk}"[force yolk renew]" \
|
|
357
359
|
--help"[Show help for command]" \
|
|
@@ -362,27 +364,15 @@ _arguments -S \
|
|
|
362
364
|
"(-v --verbose)"{-v,--verbose}"[]" \
|
|
363
365
|
--help"[Show help for command]" \
|
|
364
366
|
"*: :_files" ;;
|
|
365
|
-
|
|
366
|
-
_arguments -S \
|
|
367
|
-
--delete"[rsync --delete delete extraneous files from dest dirs]:file:_files" \
|
|
368
|
-
"(-f --file)"{-f,--file}"[file containing luks-volume encrypted]:file:_files" \
|
|
369
|
-
"(-h --help)"{-h,--help}"[Show CLI help.]" \
|
|
370
|
-
"(-r --rootdir)"{-r,--rootdir}"[rootdir of the installed system, when used from live]:file:_files" \
|
|
371
|
-
"(-v --verbose)"{-v,--verbose}"[verbose]" \
|
|
372
|
-
--help"[Show help for command]" \
|
|
373
|
-
"*: :_files" ;;
|
|
374
|
-
syncto)
|
|
367
|
+
update)
|
|
375
368
|
_arguments -S \
|
|
376
|
-
"(-e --excludes)"{-e,--excludes}"[use: exclude.list.d/home.list]" \
|
|
377
|
-
"(-f --file)"{-f,--file}"[file luks-volume encrypted]:file:_files" \
|
|
378
369
|
"(-h --help)"{-h,--help}"[Show CLI help.]" \
|
|
379
370
|
"(-v --verbose)"{-v,--verbose}"[verbose]" \
|
|
380
371
|
--help"[Show help for command]" \
|
|
381
372
|
"*: :_files" ;;
|
|
382
|
-
|
|
373
|
+
autocomplete)
|
|
383
374
|
_arguments -S \
|
|
384
|
-
"(-
|
|
385
|
-
"(-v --verbose)"{-v,--verbose}"[verbose]" \
|
|
375
|
+
"(-r --refresh-cache)"{-r,--refresh-cache}"[Refresh cache (ignores displaying instructions)]" \
|
|
386
376
|
--help"[Show help for command]" \
|
|
387
377
|
"*: :_files" ;;
|
|
388
378
|
help)
|
|
@@ -390,11 +380,6 @@ _arguments -S \
|
|
|
390
380
|
"(-n --nested-commands)"{-n,--nested-commands}"[Include all nested commands in the output.]" \
|
|
391
381
|
--help"[Show help for command]" \
|
|
392
382
|
"*: :_files" ;;
|
|
393
|
-
autocomplete)
|
|
394
|
-
_arguments -S \
|
|
395
|
-
"(-r --refresh-cache)"{-r,--refresh-cache}"[Refresh cache (ignores displaying instructions)]" \
|
|
396
|
-
--help"[Show help for command]" \
|
|
397
|
-
"*: :_files" ;;
|
|
398
383
|
version)
|
|
399
384
|
_arguments -S \
|
|
400
385
|
--json"[Format output as json.]" \
|
package/scripts/eggs.bash
CHANGED
|
@@ -23,15 +23,13 @@ export:tarballs --clean --help --verbose
|
|
|
23
23
|
install --btrfs --chroot --crypted --domain --halt --help --ip --nointeractive --none --pve --random --replace --small --suspend --testing --unattended --verbose
|
|
24
24
|
krill --btrfs --chroot --crypted --domain --halt --help --ip --nointeractive --none --pve --random --replace --small --suspend --testing --unattended --verbose
|
|
25
25
|
kill --help --isos --nointeractive --verbose
|
|
26
|
-
love --help --verbose --nointeractive
|
|
26
|
+
love --help --verbose --nointeractive --clone --homecrypt --fullcrypt
|
|
27
27
|
mom --help
|
|
28
28
|
pods --help
|
|
29
|
-
produce --addons --basename --clone --
|
|
29
|
+
produce --addons --basename --clone --homecrypt --fullcrypt --excludes --help --kernel --links --max --noicon --nointeractive --pendrive --prefix --release --script --standard --theme --includeRoot --verbose --yolk
|
|
30
30
|
status --help --verbose
|
|
31
|
-
syncfrom --delete --file --help --rootdir --verbose
|
|
32
|
-
syncto --excludes --file --help --verbose
|
|
33
31
|
tools:clean --help --nointeractive --verbose
|
|
34
|
-
tools:
|
|
32
|
+
tools:repo --add --help --nointeractive --remove --verbose
|
|
35
33
|
tools:skel --help --user --verbose
|
|
36
34
|
tools:stat --help --month --year
|
|
37
35
|
tools:yolk --help --verbose
|
|
@@ -40,8 +38,8 @@ wardrobe:get --help --verbose
|
|
|
40
38
|
wardrobe:list --distro --help --verbose
|
|
41
39
|
wardrobe:show --help --json --verbose --wardrobe
|
|
42
40
|
wardrobe:wear --help --no_accessories --no_firmwares --verbose --wardrobe
|
|
43
|
-
help --nested-commands
|
|
44
41
|
autocomplete --refresh-cache
|
|
42
|
+
help --nested-commands
|
|
45
43
|
version --json --verbose
|
|
46
44
|
"
|
|
47
45
|
|
|
@@ -0,0 +1,235 @@
|
|
|
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
|
|
@@ -0,0 +1,172 @@
|
|
|
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."
|