penguins-eggs 25.11.29 → 25.12.15

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 (121) hide show
  1. package/.oclif.manifest.json +1 -1
  2. package/README.md +118 -127
  3. package/README.pdf +10950 -11893
  4. package/addons/eggs/theme/livecd/simple.grub.main.cfg +3 -3
  5. package/conf/derivatives.yaml +2 -1
  6. package/conf/distros/buster/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  7. package/conf/distros/focal/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  8. package/conf/distros/noble/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  9. package/conf/distros/noble/calamares/libexec/calamares-l10n-helper.sh +2 -1
  10. package/conf/distros/noble/calamares/settings.yml +1 -0
  11. package/conf/distros/trixie/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  12. package/conf/exclude.list.d/var.list +11 -6
  13. package/dist/appimage/dependency-manager.js +1 -1
  14. package/dist/classes/cli-autologin.d.ts +37 -4
  15. package/dist/classes/cli-autologin.js +153 -115
  16. package/dist/classes/compressors.d.ts +7 -10
  17. package/dist/classes/compressors.js +44 -31
  18. package/dist/classes/daddy.js +4 -1
  19. package/dist/classes/distro.js +2 -2
  20. package/dist/classes/diversions.js +2 -3
  21. package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +3 -5
  22. package/dist/classes/incubation/fisherman-helper/initcpio.js +28 -20
  23. package/dist/classes/incubation/fisherman-helper/settings.js +1 -1
  24. package/dist/classes/incubation/fisherman.js +1 -1
  25. package/dist/classes/incubation/incubator.d/manjaro.js +1 -0
  26. package/dist/classes/incubation/incubator.js +1 -1
  27. package/dist/classes/ovary.d/create-xdg-autostart.js +1 -1
  28. package/dist/classes/ovary.d/edit-live-fs.d.ts +2 -13
  29. package/dist/classes/ovary.d/edit-live-fs.js +33 -146
  30. package/dist/classes/ovary.d/fertilization.js +1 -1
  31. package/dist/classes/ovary.d/luks-home.js +33 -19
  32. package/dist/classes/ovary.d/luks-root.d.ts +1 -2
  33. package/dist/classes/ovary.d/luks-root.js +46 -27
  34. package/dist/classes/ovary.d/luks-shrink.d.ts +14 -0
  35. package/dist/classes/ovary.d/luks-shrink.js +86 -0
  36. package/dist/classes/ovary.d/make-dot-disk.js +1 -1
  37. package/dist/classes/ovary.d/produce.js +64 -22
  38. package/dist/classes/ovary.d/user-create-live.d.ts +4 -10
  39. package/dist/classes/ovary.d/user-create-live.js +82 -84
  40. package/dist/classes/ovary.d/users-remove.d.ts +5 -6
  41. package/dist/classes/ovary.d/users-remove.js +61 -31
  42. package/dist/classes/ovary.d.ts +5 -3
  43. package/dist/classes/ovary.js +5 -3
  44. package/dist/classes/pacman.d/alpine.js +2 -2
  45. package/dist/classes/pacman.d/archlinux.js +2 -2
  46. package/dist/classes/pacman.d/debian.js +2 -3
  47. package/dist/classes/pacman.d/fedora.js +2 -3
  48. package/dist/classes/pacman.d/openmamba.js +2 -3
  49. package/dist/classes/pacman.d/opensuse.js +2 -3
  50. package/dist/classes/pacman.d.ts +0 -5
  51. package/dist/classes/pacman.js +3 -16
  52. package/dist/classes/pve-live.js +1 -1
  53. package/dist/classes/settings.js +1 -1
  54. package/dist/classes/sys-users.d.ts +76 -0
  55. package/dist/classes/sys-users.js +206 -0
  56. package/dist/classes/utils.d/kernel.js +3 -3
  57. package/dist/classes/utils.d.ts +15 -6
  58. package/dist/classes/utils.js +80 -47
  59. package/dist/classes/xdg.js +1 -1
  60. package/dist/classes/yolk.js +3 -5
  61. package/dist/commands/export/appimage.js +3 -3
  62. package/dist/commands/export/pkg.js +3 -3
  63. package/dist/commands/export/tarballs.js +3 -3
  64. package/dist/commands/krill.js +1 -1
  65. package/dist/commands/produce.js +14 -5
  66. package/dist/commands/setup/install.js +1 -1
  67. package/dist/commands/setup/purge.js +1 -1
  68. package/dist/commands/tools/yolk.js +1 -1
  69. package/dist/commands/update.js +1 -2
  70. package/dist/interfaces/calamares/i-calamares-branding.d.ts +56 -38
  71. package/dist/interfaces/calamares/i-calamares-branding.js +10 -0
  72. package/dist/interfaces/i-exec.d.ts +1 -0
  73. package/dist/krill/classes/prepare.d/location.js +1 -1
  74. package/dist/krill/classes/prepare.d/partitions.js +1 -1
  75. package/dist/krill/classes/prepare.d/users.js +2 -2
  76. package/dist/krill/classes/prepare.js +5 -5
  77. package/dist/krill/classes/sequence.d/add_user.d.ts +3 -15
  78. package/dist/krill/classes/sequence.d/add_user.js +87 -57
  79. package/dist/krill/classes/sequence.d/change_password.d.ts +5 -7
  80. package/dist/krill/classes/sequence.d/change_password.js +25 -10
  81. package/dist/krill/classes/sequence.d/del_live_user.d.ts +5 -7
  82. package/dist/krill/classes/sequence.d/del_live_user.js +39 -25
  83. package/dist/krill/classes/sequence.d/fstab.js +2 -2
  84. package/dist/krill/classes/sequence.d/grubcfg.d.ts +3 -7
  85. package/dist/krill/classes/sequence.d/grubcfg.js +33 -13
  86. package/dist/krill/classes/sequence.d/mkfs.js +2 -3
  87. package/dist/krill/classes/sequence.d/unpackfs.d.ts +2 -4
  88. package/dist/krill/classes/sequence.d/unpackfs.js +8 -5
  89. package/dist/krill/classes/sequence.d.ts +1 -5
  90. package/dist/krill/classes/sequence.js +28 -32
  91. package/dist/krill/components/finished.js +2 -2
  92. package/dist/krill/components/install.js +2 -2
  93. package/dist/krill/components/keyboard.js +2 -2
  94. package/dist/krill/components/location.js +2 -2
  95. package/dist/krill/components/network.js +2 -2
  96. package/dist/krill/components/partitions.js +2 -2
  97. package/dist/krill/components/summary.js +2 -2
  98. package/dist/krill/components/title.js +2 -2
  99. package/dist/krill/components/users.js +2 -2
  100. package/dist/krill/components/welcome.js +2 -2
  101. package/dist/krill/lib/select_installation_device.js +1 -1
  102. package/dist/krill/lib/select_replaced_partition.js +1 -1
  103. package/dist/lib/utils.d.ts +52 -19
  104. package/dist/lib/utils.js +271 -20
  105. package/manpages/doc/man/eggs.1.gz +0 -0
  106. package/manpages/doc/man/eggs.html +8 -8
  107. package/package.json +9 -9
  108. package/perrisbrewery/template/dependencies.yaml +1 -0
  109. package/scripts/boot-encrypted-root.sh +220 -0
  110. package/scripts/mount-encrypted-home.sh +324 -0
  111. package/scripts/restore_homecrypt_krill.sh +93 -0
  112. package/dracut/create-symlink +0 -71
  113. package/dracut/dracut-log.txt +0 -3
  114. package/dracut/export +0 -4
  115. package/dracut/export-dracut-analysis +0 -51
  116. package/dracut/export-dracut-log +0 -2
  117. package/dracut/mkisofs +0 -10
  118. package/dracut/renew-initramfs +0 -17
  119. package/dracut/sbin2bin +0 -10
  120. package/dracut/update-dracut-conf-d +0 -2
  121. package/dracut/update-dracut-modules +0 -62
@@ -0,0 +1,324 @@
1
+ #!/bin/bash
2
+ # This Bash script is used to unlock and mount a LUKS-encrypted home.img
3
+ # file for use as a /home directory, typically in a “live”
4
+ # operating system environment (booted from USB or DVD).
5
+ # v1.4 - Fixed 3-attempt loop by checking PIPESTATUS instead of pipe exit code.
6
+ # - Replaced non-breaking spaces with regular spaces.
7
+
8
+ # enable echo
9
+ set -e
10
+
11
+ # configuration
12
+ HOME_IMG="__HOME_IMG_PATH__"
13
+ LUKS_NAME="live-home"
14
+ MOUNT_POINT="/home"
15
+
16
+ # define path OverlayFS
17
+ # we will use /run che è un tmpfs (in RAM)
18
+ LOWER_DIR="/run/live-home-lower"
19
+ UPPER_DIR="/run/live-home-upper"
20
+ WORK_DIR="/run/live-home-work"
21
+
22
+ LOG_FILE="/var/log/mount-encrypted-home.log"
23
+
24
+ # logging
25
+ log() {
26
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
27
+ }
28
+
29
+ log_error() {
30
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" | tee -a "$LOG_FILE" >&2
31
+ }
32
+
33
+ # Cleanup in caso di errore
34
+ cleanup() {
35
+ log "Cleanup in progress..."
36
+ if mountpoint -q "$MOUNT_POINT" 2>/dev/null; then
37
+ umount "$MOUNT_POINT" 2>/dev/null || true
38
+ fi
39
+ if mountpoint -q "$LOWER_DIR" 2>/dev/null; then
40
+ umount "$LOWER_DIR" 2>/dev/null || true
41
+ fi
42
+ if [ -e "/dev/mapper/$LUKS_NAME" ]; then
43
+ cryptsetup close "$LUKS_NAME" 2>/dev/null || true
44
+ fi
45
+ rmdir "$LOWER_DIR" "$UPPER_DIR" "$WORK_DIR" 2>/dev/null || true
46
+ }
47
+
48
+ trap cleanup EXIT
49
+
50
+ log "=== Starting encrypted home mount process (v1.4) ==="
51
+
52
+ # Check available memory
53
+ AVAILABLE_MEM=$(free -m | awk '/^Mem:/{print $7}')
54
+ log "Available memory: ${AVAILABLE_MEM}MB"
55
+
56
+ if [ "$AVAILABLE_MEM" -lt 1024 ]; then
57
+ log_error "Low memory warning: only ${AVAILABLE_MEM}MB available"
58
+ log "This might cause issues with LUKS operations"
59
+ fi
60
+
61
+ # Wait for the media to become available (max 30 seconds)
62
+ log "Waiting for live media to be available..."
63
+ COUNTER=0
64
+ while [ ! -f "$HOME_IMG" ] && [ $COUNTER -lt 30 ]; do
65
+ sleep 1
66
+ COUNTER=$((COUNTER + 1))
67
+ done
68
+
69
+ if [ ! -f "$HOME_IMG" ]; then
70
+ log_error "home.img not found at $HOME_IMG after 30 seconds"
71
+ log "Available mounts:"
72
+ mount | grep live | tee -a "$LOG_FILE"
73
+ exit 0
74
+ fi
75
+
76
+ log "Found home.img at $HOME_IMG"
77
+
78
+ # Check file size
79
+ IMG_SIZE=$(stat -c %s "$HOME_IMG")
80
+ log "home.img size: $((IMG_SIZE / 1024 / 1024))MB"
81
+
82
+ # Check if it is a LUKS volume
83
+ if ! cryptsetup isLuks "$HOME_IMG" 2>&1 | tee -a "$LOG_FILE"; then
84
+ log_error "$HOME_IMG is not a valid LUKS volume"
85
+ exit 1
86
+ fi
87
+
88
+ log "Verified: home.img is a valid LUKS volume"
89
+
90
+ # Wait until the TTY is fully initialized
91
+ sleep 2
92
+
93
+ # Clean up any previous device mappers
94
+ if [ -e "/dev/mapper/$LUKS_NAME" ]; then
95
+ log "LUKS device already exists, closing it first..."
96
+ cryptsetup close "$LUKS_NAME" 2>&1 | tee -a "$LOG_FILE" || true
97
+ fi
98
+
99
+ # PASSWORD REQUEST
100
+ # disable 'set -e' to let 3 tempts
101
+ set +e
102
+
103
+ MAX_ATTEMPTS=3
104
+ ATTEMPT=1
105
+ UNLOCKED=0 # Flag per sapere se abbiamo sbloccato
106
+
107
+ while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
108
+ log "Unlock attempt $ATTEMPT of $MAX_ATTEMPTS"
109
+
110
+ # Check if Plymouth is active
111
+ if plymouth --ping 2>/dev/null; then
112
+ log "Plymouth active. Asking for password via Plymouth..."
113
+
114
+ # Execute the command and check PIPESTATUS.
115
+ plymouth ask-for-password --prompt="Enter passphrase for /home ($ATTEMPT/$MAX_ATTEMPTS)" | cryptsetup open "$HOME_IMG" "$LUKS_NAME" --key-file - 2>&1 | tee -a "$LOG_FILE"
116
+
117
+ # Check the status of cryptsetup (index 1), not tee (index 2)
118
+ # PIPESTATUS[0] = plymouth, [1] = cryptsetup, [2] = tee
119
+ if [ ${PIPESTATUS[1]} -eq 0 ]; then
120
+ log "LUKS volume unlocked successfully via Plymouth"
121
+ UNLOCKED=1
122
+ break
123
+ else
124
+ log_error "Failed to unlock LUKS volume via Plymouth (attempt $ATTEMPT)"
125
+ if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
126
+ plymouth display-message --text="Incorrect passphrase. Try again..."
127
+ sleep 2 # Gives time to read the message
128
+ fi
129
+ fi
130
+ else
131
+ # Fallback: Plymouth not active. asking for password via console
132
+ log "Plymouth not active. Asking for password via console..."
133
+
134
+ echo ""
135
+ echo "╔════════════════════════════════════════╗"
136
+ echo "║ Encrypted Home Directory Detected ║"
137
+ echo "╚════════════════════════════════════════╝"
138
+ echo ""
139
+ echo "Please enter your passphrase to unlock your data ($ATTEMPT/$MAX_ATTEMPTS)"
140
+ echo "(Press Ctrl+C to skip and continue with temporary home)"
141
+ echo ""
142
+
143
+ # Run the command and check PIPESTATUS
144
+ cryptsetup open "$HOME_IMG" "$LUKS_NAME" 2>&1 | tee -a "$LOG_FILE"
145
+
146
+ # Check the status of cryptsetup (index 0), not tee (index 1).
147
+ # PIPESTATUS[0] = cryptsetup, [1] = tee
148
+ if [ ${PIPESTATUS[0]} -eq 0 ]; then
149
+ log "LUKS volume unlocked successfully via console"
150
+ UNLOCKED=1
151
+ break
152
+ else
153
+ log_error "Failed to unlock LUKS volume (attempt $ATTEMPT)"
154
+ if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
155
+ echo "Incorrect passphrase. Please try again."
156
+ fi
157
+ fi
158
+ fi
159
+
160
+ ATTEMPT=$((ATTEMPT + 1))
161
+ done
162
+
163
+
164
+ # Check if unlocking failed after all attempts
165
+ # Enable echo
166
+ set -e
167
+
168
+ if [ $UNLOCKED -eq 0 ]; then
169
+ log_error "Maximum attempts reached. Continuing without encrypted home."
170
+ echo ""
171
+ echo "╔════════════════════════════════════════╗"
172
+ echo "║ Failed to unlock encrypted home ║"
173
+ echo "║ System will continue with default ║"
174
+ echo "╚════════════════════════════════════════╝"
175
+ echo ""
176
+
177
+ if plymouth --ping 2>/dev/null; then
178
+ plymouth display-message --text="Failed to unlock. Continuing with temporary home..."
179
+ sleep 3
180
+ plymouth quit
181
+ fi
182
+
183
+ sleep 3
184
+ exit 0 # Exits without error, allowing the system to continue
185
+ fi
186
+
187
+
188
+ # Verify that the device mapper exists
189
+ if [ ! -e "/dev/mapper/$LUKS_NAME" ]; then
190
+ log_error "Device /dev/mapper/$LUKS_NAME not found after unlock"
191
+ exit 1
192
+ fi
193
+
194
+ log "LUKS device available at /dev/mapper/$LUKS_NAME"
195
+
196
+ # Implementing OverlayFS
197
+ # 1. Create all necessary mount points and directories
198
+ log "Creating overlay directories..."
199
+ mkdir -p "$LOWER_DIR" "$UPPER_DIR" "$WORK_DIR" "$MOUNT_POINT"
200
+
201
+ # 2. Mount the decrypted volume as read-only as 'lowerdir'
202
+ log "Mounting decrypted volume to $LOWER_DIR (read-only base)"
203
+ if ! mount -o ro "/dev/mapper/$LUKS_NAME" "$LOWER_DIR" 2>&1 | tee -a "$LOG_FILE"; then
204
+ log_error "Failed to mount decrypted volume (read-only) to $LOWER_DIR"
205
+ exit 1
206
+ fi
207
+ log "Read-only base mounted successfully."
208
+
209
+ # 3. create overlay read-write for /home
210
+ log "Mounting overlay filesystem to $MOUNT_POINT"
211
+ OVERLAY_OPTS="lowerdir=$LOWER_DIR,upperdir=$UPPER_DIR,workdir=$WORK_DIR"
212
+ # Add “index=off” and “metacopy=off” for compatibility
213
+ OVERLAY_OPTS="$OVERLAY_OPTS,index=off,metacopy=off"
214
+
215
+ if ! mount -t overlay -o "$OVERLAY_OPTS" overlay "$MOUNT_POINT" 2>&1 | tee -a "$LOG_FILE"; then
216
+ log_error "Failed to mount overlay filesystem to $MOUNT_POINT"
217
+ # Try without extra options if it fails
218
+ OVERLAY_OPTS="lowerdir=$LOWER_DIR,upperdir=$UPPER_DIR,workdir=$WORK_DIR"
219
+ log "Retrying overlay mount with basic options..."
220
+ if ! mount -t overlay -o "$OVERLAY_OPTS" overlay "$MOUNT_POINT" 2>&1 | tee -a "$LOG_FILE"; then
221
+ log_error "Failed to mount overlay filesystem to $MOUNT_POINT (retry failed)"
222
+ exit 1
223
+ fi
224
+ fi
225
+ log "Writable overlay for /home mounted successfully."
226
+
227
+
228
+ # Restore users if they exists
229
+ if [ -d "$MOUNT_POINT/.system-backup" ]; then
230
+ log "Restoring user accounts..."
231
+
232
+ # Remove temporary live user
233
+ if id live >/dev/null 2>&1; then
234
+ log "Removing temporary 'live' user"
235
+ userdel -r live 2>&1 | tee -a "$LOG_FILE" || true
236
+ fi
237
+
238
+ # Restore users
239
+ if [ -f "$MOUNT_POINT/.system-backup/passwd" ]; then
240
+ cat "$MOUNT_POINT/.system-backup/passwd" >> /etc/passwd
241
+ log "Restored $(wc -l < "$MOUNT_POINT/.system-backup/passwd") user entries"
242
+ fi
243
+
244
+ if [ -f "$MOUNT_POINT/.system-backup/shadow" ]; then
245
+ cat "$MOUNT_POINT/.system-backup/shadow" >> /etc/shadow
246
+ fi
247
+
248
+ # Restore groups (replace completely)
249
+ if [ -f "$MOUNT_POINT/.system-backup/group" ]; then
250
+ cp "$MOUNT_POINT/.system-backup/group" /etc/group
251
+ log "Restored group memberships"
252
+ fi
253
+
254
+ if [ -f "$MOUNT_POINT/.system-backup/gshadow" ]; then
255
+ cp "$MOUNT_POINT/.system-backup/gshadow" /etc/gshadow
256
+ fi
257
+
258
+ # Restore Display Manager configs for autologin
259
+ log "Restoring display manager configurations (for autologin)..."
260
+
261
+ # GDM (gdm3)
262
+ if [ -d "$MOUNT_POINT/.system-backup/gdm3" ]; then
263
+ log "Restoring GDM3 config..."
264
+ # Remove the default live configuration before copying
265
+ rm -rf /etc/gdm3 2>/dev/null
266
+ cp -a "$MOUNT_POINT/.system-backup/gdm3" /etc/
267
+ fi
268
+
269
+ # GDM (gdm)
270
+ if [ -d "$MOUNT_POINT/.system-backup/gdm" ]; then
271
+ log "Restoring GDM config..."
272
+ rm -rf /etc/gdm 2>/dev/null
273
+ cp -a "$MOUNT_POINT/.system-backup/gdm" /etc/
274
+ fi
275
+
276
+ # LightDM
277
+ if [ -d "$MOUNT_POINT/.system-backup/lightdm" ]; then
278
+ log "Restoring LightDM config..."
279
+ rm -rf /etc/lightdm 2>/dev/null
280
+ cp -a "$MOUNT_POINT/.system-backup/lightdm" /etc/
281
+ fi
282
+
283
+ # SDDM
284
+ if [ -f "$MOUNT_POINT/.system-backup/sddm.conf" ]; then
285
+ log "Restoring SDDM config (sddm.conf)..."
286
+ cp -a "$MOUNT_POINT/.system-backup/sddm.conf" /etc/
287
+ fi
288
+ if [ -d "$MOUNT_POINT/.system-backup/sddm.conf.d" ]; then
289
+ log "Restoring SDDM config (sddm.conf.d)..."
290
+ rm -rf /etc/sddm.conf.d 2>/dev/null
291
+ cp -a "$MOUNT_POINT/.system-backup/sddm.conf.d" /etc/
292
+ fi
293
+
294
+ log "User accounts and DM configs restored successfully"
295
+
296
+ # Restart the display manager to reload users
297
+ log "Restarting display manager..."
298
+ if systemctl is-active --quiet gdm; then
299
+ systemctl restart gdm 2>&1 | tee -a "$LOG_FILE"
300
+ log "GDM restarted"
301
+ elif systemctl is-active --quiet lightdm; then
302
+ systemctl restart lightdm 2>&1 | tee -a "$LOG_FILE"
303
+ log "LightDM restarted"
304
+ elif systemctl is-active --quiet sddm; then
305
+ systemctl restart sddm 2>&1 | tee -a "$LOG_FILE"
306
+ log "SDDM restarted"
307
+ else
308
+ log "No active display manager found to restart"
309
+ fi
310
+ else
311
+ log "No .system-backup directory found. Assuming /home is just data."
312
+ fi
313
+
314
+ log "=== Encrypted home mount completed successfully ==="
315
+
316
+ # Notify Plymouth (if active) that we are done
317
+ if plymouth --ping 2>/dev/null; then
318
+ plymouth quit
319
+ fi
320
+
321
+ # Don't clean up success
322
+ trap - EXIT
323
+
324
+ exit 0
@@ -0,0 +1,93 @@
1
+ #!/bin/bash
2
+
3
+ # ==============================================================================
4
+ # SCRIPT DI RIPRISTINO DATI UTENTE CRITTOGRAFATI (--HOMECRYPT) PER KRILL
5
+ # LIVE_HOME_DEVICE $1 device LUKS già sbloccato
6
+ # TARGET_ROOT $2 root di destinazione
7
+ # ==============================================================================
8
+
9
+ # --- Variabili di Configurazione ---
10
+ LIVE_HOME_DEVICE="$1"
11
+ TARGET_ROOT="$2"
12
+
13
+ RESTORE_MNTPOINT="/tmp/live_home_restore"
14
+ TARGET_HOME_MNTPOINT="${TARGET_ROOT}/home"
15
+ BACKUP_DIR="${RESTORE_MNTPOINT}/.system-backup"
16
+
17
+ # 1. Verifica Condizione Cruciale: Il volume LUKS è sbloccato?
18
+ if [ ! -b "${LIVE_HOME_DEVICE}" ]; then
19
+ exit 0
20
+ fi
21
+
22
+ # 2. Montaggio del Volume Decrittato (solo lettura)
23
+ mkdir -p "${RESTORE_MNTPOINT}"
24
+ if ! mount -o ro "${LIVE_HOME_DEVICE}" "${RESTORE_MNTPOINT}"; then
25
+ exit 1
26
+ fi
27
+
28
+ # 3. Copia Ricorsiva dei Dati Utente
29
+ rsync -aH "${RESTORE_MNTPOINT}/" "${TARGET_HOME_MNTPOINT}/"
30
+
31
+ # 4. Ripristino dei File di Sistema (`.system-backup`)
32
+ if [ -d "${BACKUP_DIR}" ]; then
33
+
34
+ # 4.1. Ripristino /etc/passwd e /etc/shadow
35
+ # Aggiunge utenti con UID >= 1000, evitando duplicati
36
+ while IFS=: read -r username password uid gid gecos home shell; do
37
+ if ! grep -q "^${username}:" ${TARGET_ROOT}/etc/passwd; then
38
+ # La ridirezione >> è ora eseguita dal processo principale
39
+ echo "${username}:${password}:${uid}:${gid}:${gecos}:${home}:${shell}" >> ${TARGET_ROOT}/etc/passwd
40
+ grep "^${username}:" ${BACKUP_DIR}/shadow >> ${TARGET_ROOT}/etc/shadow
41
+ fi
42
+ done < ${BACKUP_DIR}/passwd
43
+
44
+ # 4.2. Ripristino Group/Gshadow (sovrascrittura)
45
+ #echo " - Ripristino file /etc/group e /etc/gshadow."
46
+ cp ${BACKUP_DIR}/group ${TARGET_ROOT}/etc/group
47
+ cp ${BACKUP_DIR}/gshadow ${TARGET_ROOT}/etc/gshadow
48
+
49
+ # 4.3. Ripristino Configurazioni Display Manager
50
+ [ -d ${BACKUP_DIR}/gdm3 ] && rsync -ah ${BACKUP_DIR}/gdm3 ${TARGET_ROOT}/etc/
51
+ [ -d ${BACKUP_DIR}/gdm ] && rsync -ah ${BACKUP_DIR}/gdm ${TARGET_ROOT}/etc/
52
+ [ -d ${BACKUP_DIR}/lightdm ] && rsync -ah ${BACKUP_DIR}/lightdm ${TARGET_ROOT}/etc/
53
+ [ -e ${BACKUP_DIR}/sddm.conf ] && cp -a ${BACKUP_DIR}/sddm.conf ${TARGET_ROOT}/etc/
54
+ [ -d ${BACKUP_DIR}/sddm.conf.d ] && rsync -ah ${BACKUP_DIR}/sddm.conf.d ${TARGET_ROOT}/etc/
55
+
56
+ fi
57
+
58
+ # 5. CORREZIONE DEI PERMESSI UTENTE (la parte mancante)
59
+
60
+ # Itera su tutte le directory utente all'interno del mountpoint di ripristino
61
+ find "${RESTORE_MNTPOINT}" -maxdepth 1 -mindepth 1 -type d ! -name '.system-backup' | while read dir_path; do
62
+
63
+ username=$(basename "${dir_path}")
64
+
65
+ # Escludi la directory root se dovesse essere presente
66
+ if [ "${username}" != "root" ]; then
67
+
68
+ # Recupera l'UID, GID e la directory home dal file passwd del TARGET
69
+ # Nota: Usiamo grep e awk per leggere l'utente dal file ripristinato
70
+ user_info=$(grep "^${username}:" "${TARGET_ROOT}/etc/passwd")
71
+
72
+ if [ -n "$user_info" ]; then
73
+ # Estrai UID e GID dal record in TARGET/etc/passwd
74
+ uid_target=$(echo "$user_info" | awk -F: '{print $3}')
75
+ gid_target=$(echo "$user_info" | awk -F: '{print $4}')
76
+
77
+ # Esegui chown ricorsivo sulla directory home del target
78
+ if [ -d "${TARGET_HOME_MNTPOINT}/${username}" ]; then
79
+ chown -R "${uid_target}:${gid_target}" "${TARGET_HOME_MNTPOINT}/${username}"
80
+ fi
81
+ fi
82
+ fi
83
+ done
84
+
85
+ # Rimuovi la directory di backup dalla home utente nel sistema installato
86
+ rm -rf ${TARGET_HOME_MNTPOINT}/.system-backup
87
+
88
+
89
+ # 6. Pulizia Finale
90
+ umount "${RESTORE_MNTPOINT}"
91
+ rmdir "${RESTORE_MNTPOINT}"
92
+
93
+ exit 0
@@ -1,71 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # Script per creare symlink dei moduli Penguins-Eggs in /usr/lib/dracut/modules.d
4
- # Questo è necessario perché Dracut 106 su Debian non legge dracutmodules_dirs con --confdir
5
- #
6
-
7
- set -e
8
-
9
- CUSTOM_DIR="/usr/lib/penguins-eggs/dracut/modules.d"
10
- SYSTEM_DIR="/usr/lib/dracut/modules.d"
11
-
12
- echo "=== Creazione Symlink Moduli Dracut ==="
13
- echo ""
14
-
15
- # Verifica di essere root
16
- if [ "$EUID" -ne 0 ]; then
17
- echo "ERRORE: Esegui come root (sudo)"
18
- exit 1
19
- fi
20
-
21
- # Verifica directory
22
- if [ ! -d "$CUSTOM_DIR" ]; then
23
- echo "ERRORE: $CUSTOM_DIR non esiste"
24
- exit 1
25
- fi
26
-
27
- if [ ! -d "$SYSTEM_DIR" ]; then
28
- echo "ERRORE: $SYSTEM_DIR non esiste"
29
- exit 1
30
- fi
31
-
32
- # Lista moduli
33
- MODULES=(
34
- "00debug-shell"
35
- "90block"
36
- "95iso-scan"
37
- "95luks"
38
- "95luks-loop"
39
- )
40
-
41
- echo "Creazione symlink..."
42
- for module in "${MODULES[@]}"; do
43
- SOURCE="$CUSTOM_DIR/$module"
44
- TARGET="$SYSTEM_DIR/$module"
45
-
46
- if [ ! -d "$SOURCE" ]; then
47
- echo " [SKIP] $module - non trovato"
48
- continue
49
- fi
50
-
51
- # Rimuovi esistente
52
- if [ -e "$TARGET" ] || [ -L "$TARGET" ]; then
53
- rm -rf "$TARGET"
54
- fi
55
-
56
- # Crea symlink
57
- ln -sf "$SOURCE" "$TARGET"
58
- echo " [OK] $module"
59
- done
60
-
61
- echo ""
62
- echo "Verifica symlink creati:"
63
- ls -la "$SYSTEM_DIR" | grep -E "(debug-shell|90block|iso-scan|95luks)"
64
-
65
- echo ""
66
- echo "Test dracut --list-modules:"
67
- dracut --list-modules 2>&1 | grep -E "(debug-shell|90block|iso-scan|95luks)" || echo " ATTENZIONE: moduli non ancora visibili"
68
-
69
- echo ""
70
- echo "=== Completato ==="
71
-
@@ -1,3 +0,0 @@
1
- dracut[I]: Executing: /usr/bin/dracut --force --confdir /usr/lib/penguins-eggs/dracut/dracut.conf.d --kmoddir /lib/modules/6.12.48+deb13-amd64 /home/eggs/iso/live/initrd.img-6.12.48+deb13-amd64 6.12.48+deb13-amd64
2
- dracut[I]: 62bluetooth: Could not find any command of '/usr/lib/bluetooth/bluetoothd /usr/libexec/bluetooth/bluetoothd'!
3
- dracut[E]: Module '90block' cannot be found.
package/dracut/export DELETED
@@ -1,4 +0,0 @@
1
- ./export-dracut-analysis /usr/lib/penguins-eggs/dracut/modules.d /usr/lib/penguins-eggs/dracut/dracut.conf.d
2
- scp dracut-analisys.txt artisan@192.168.1.2:/home/artisan
3
- scp /home/eggs/iso/egg-of_debian-trixie-* artisan@192.168.1.2:/home/artisan/dracut-log.txt
4
- rm dracut-analisys.txt
@@ -1,51 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Script per consolidare il contenuto di più directory di configurazione Dracut
4
- # in un unico file di testo.
5
-
6
- # --- Impostazioni ---
7
- OUTPUT_FILE="dracut-analysis.txt"
8
-
9
- # --- Logica dello Script ---
10
-
11
- # Controlla se è stato fornito almeno un percorso come argomento
12
- if [ "$#" -eq 0 ]; then
13
- echo "ERRORE: Devi specificare almeno un percorso di directory."
14
- echo "Uso: $0 <percorso_dir_1> [<percorso_dir_2> ...]"
15
- echo "Esempio: $0 ./modules.d ./dracut.conf.d"
16
- exit 1
17
- fi
18
-
19
- # Pulisce il file di output se esiste già e scrive l'intestazione
20
- echo "--- INIZIO ANALISI CONFIGURAZIONE DRACUT ---" > "$OUTPUT_FILE"
21
- echo "" >> "$OUTPUT_FILE"
22
-
23
- # Itera su tutte le directory passate come argomenti
24
- for TARGET_DIR in "$@"; do
25
- # Controlla se il percorso fornito è una directory valida
26
- if [ ! -d "$TARGET_DIR" ]; then
27
- echo "ATTENZIONE: '$TARGET_DIR' non è una directory valida o non esiste. Verrà saltata."
28
- continue # Salta questo argomento e passa al successivo
29
- fi
30
-
31
- # Aggiunge un'intestazione per la directory corrente nel file di output
32
- echo "##################################################" >> "$OUTPUT_FILE"
33
- echo "### CONTENUTO DIRECTORY: ${TARGET_DIR}" >> "$OUTPUT_FILE"
34
- echo "##################################################" >> "$OUTPUT_FILE"
35
- echo "" >> "$OUTPUT_FILE"
36
-
37
- # Trova tutti i file nella directory corrente e aggiunge il loro contenuto al file
38
- find "$TARGET_DIR" -type f | sort | while read -r filepath; do
39
- echo "==================================================" >> "$OUTPUT_FILE"
40
- echo "### FILE: ${filepath}" >> "$OUTPUT_FILE"
41
- echo "==================================================" >> "$OUTPUT_FILE"
42
- echo '```' >> "$OUTPUT_FILE"
43
- cat "$filepath" >> "$OUTPUT_FILE"
44
- echo '```' >> "$OUTPUT_FILE"
45
- echo "" >> "$OUTPUT_FILE"
46
- done
47
- done
48
-
49
- echo "--- FINE ANALISI CONFIGURAZIONE DRACUT ---" >> "$OUTPUT_FILE"
50
-
51
- echo "✅ Fatto! L'analisi combinata è stata salvata nel file: $OUTPUT_FILE"
@@ -1,2 +0,0 @@
1
- scp /home/eggs/iso/egg-of_debian-trixie-* artisan@192.168.1.2:/home/artisan
2
-
package/dracut/mkisofs DELETED
@@ -1,10 +0,0 @@
1
- #!/bin/bash
2
-
3
- if [[ $(id -u) -ne 0 ]]; then
4
- echo "Errore: Questo script deve essere eseguito come root o con sudo." >&2
5
- exit 1
6
- fi
7
-
8
- rm /home/eggs/.mnt/*.iso
9
- /home/eggs/ovarium/mkisofs
10
-
@@ -1,17 +0,0 @@
1
- #!/bin/bash
2
-
3
- if [[ $(id -u) -ne 0 ]]; then
4
- echo "Errore: Questo script deve essere eseguito come root o con sudo." >&2
5
- exit 1
6
- fi
7
-
8
- LOG="./dracut-log.txt"
9
- CONFDIR="/usr/lib/penguins-eggs/dracut/dracut.conf.d"
10
- LIVE="/home/eggs/iso/live"
11
-
12
- dracut --force \
13
- --confdir $CONFDIR \
14
- --kmoddir /lib/modules/6.12.48+deb13-amd64 \
15
- $LIVE/initrd.img-6.12.48+deb13-amd64 6.12.48+deb13-amd64 2>&1| tee $LOG
16
-
17
- scp $LOG artisan@192.168.1.2:/home/artisan
package/dracut/sbin2bin DELETED
@@ -1,10 +0,0 @@
1
- # Crea i collegamenti simbolici
2
- sudo ln -s /usr/sbin/cryptsetup /usr/bin/cryptsetup
3
- sudo ln -s /usr/sbin/losetup /usr/bin/losetup
4
- #sudo ln -s /usr/sbin/lsblk /usr/bin/lsblk già esiste
5
-
6
- # Nota: il log mostra anche altri comandi, potrebbero servire anche questi
7
- #sudo ln -s /bin/mount /usr/bin/mount # mount potrebbe essere in /bin
8
- #sudo ln -s /bin/umount /usr/bin/umount # umount potrebbe essere in /bin
9
- #sudo ln -s /usr/bin/find /usr/bin/find # find è già al posto giusto, di solito
10
- #sudo ln -s /bin/cat /usr/bin/cat # cat è già al posto giusto, di solito
@@ -1,2 +0,0 @@
1
- #!/bin/bash
2
- sudo cp dracut.conf.d/*.conf /usr/lib/penguins-eggs/dracut/dracut.conf.d/
@@ -1,62 +0,0 @@
1
- #!/bin/bash
2
-
3
- MODULES_TO_REPLACE=("00debug-shell" "90block" "95iso-scan" "95luks" "95luks-loop")
4
-
5
-
6
- DRACUT_MODULES_DIR="/usr/lib/penguins-eggs/dracut/modules.d"
7
- SOURCE_MODULES_DIR="$(dirname "$0")/modules.d"
8
-
9
-
10
- # --- FUNZIONE PRINCIPALE ---
11
- main() {
12
- echo "ATTENZIONE: adesso aggiorn $DRACUT_MODULES_DIR"
13
-
14
- # 1. Controllo dei permessi
15
- # Lo script deve essere eseguito come root per poter scrivere in /usr/lib
16
- if [[ $(id -u) -ne 0 ]]; then
17
- echo "Errore: Questo script deve essere eseguito come root o con sudo." >&2
18
- exit 1
19
- fi
20
-
21
- # 2. Verifica che la cartella di origine esista
22
- if [[ ! -d "$SOURCE_MODULES_DIR" ]]; then
23
- echo "Errore: La directory di origine '$SOURCE_MODULES_DIR' non è stata trovata." >&2
24
- exit 1
25
- fi
26
-
27
- echo "Avvio della sostituzione dei moduli Dracut..."
28
-
29
- # 3. Ciclo for per ogni modulo nell'array
30
- for module_name in "${MODULES_TO_REPLACE[@]}"; do
31
- local dest_path="$DRACUT_MODULES_DIR/$module_name"
32
- local source_path="$SOURCE_MODULES_DIR/$module_name"
33
-
34
- echo "--- Elaborazione del modulo: $module_name ---"
35
-
36
- # Controlla se il modulo di origine esiste prima di procedere
37
- if [[ ! -d "$source_path" ]]; then
38
- echo "Attenzione: Il modulo '$source_path' non esiste nella cartella di origine. Salto."
39
- continue
40
- fi
41
-
42
- # Rimuovi la vecchia versione del modulo, se esiste
43
- if [[ -d "$dest_path" ]]; then
44
- echo "Rimuovendo la vecchia versione: $dest_path"
45
- rm -rf "$dest_path"
46
- fi
47
-
48
- # Copia la nuova versione del modulo
49
- echo "Copiando la nuova versione da: $source_path"
50
- cp -r "$source_path" "$DRACUT_MODULES_DIR/"
51
-
52
- echo "Modulo '$module_name' aggiornato con successo."
53
- echo "------------------------------------"
54
- done
55
-
56
-
57
- echo "Operazione completata."
58
- echo "Ricorda di rigenerare l'initramfs con 'dracut -f' o un comando simile."
59
- }
60
-
61
- # Esegui la funzione principale
62
- main