penguins-eggs 25.11.29 → 25.12.7
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 +1 -1
- package/README.md +72 -110
- package/README.pdf +11041 -10623
- package/conf/derivatives.yaml +2 -1
- package/conf/exclude.list.d/var.list +11 -6
- package/dist/appimage/dependency-manager.js +1 -1
- package/dist/classes/cli-autologin.js +77 -52
- package/dist/classes/compressors.d.ts +7 -10
- package/dist/classes/compressors.js +44 -31
- package/dist/classes/distro.js +2 -2
- package/dist/classes/diversions.js +2 -3
- package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +2 -5
- package/dist/classes/incubation/fisherman-helper/initcpio.js +7 -4
- package/dist/classes/incubation/fisherman-helper/settings.js +1 -1
- package/dist/classes/incubation/fisherman.js +1 -1
- package/dist/classes/incubation/incubator.js +1 -1
- package/dist/classes/ovary.d/create-xdg-autostart.js +1 -1
- package/dist/classes/ovary.d/edit-live-fs.d.ts +1 -12
- package/dist/classes/ovary.d/edit-live-fs.js +129 -135
- package/dist/classes/ovary.d/make-dot-disk.js +1 -1
- package/dist/classes/ovary.d/produce.js +1 -1
- package/dist/classes/ovary.d/user-create-live.d.ts +4 -10
- package/dist/classes/ovary.d/user-create-live.js +82 -84
- package/dist/classes/ovary.d/users-remove.d.ts +5 -6
- package/dist/classes/ovary.d/users-remove.js +61 -31
- package/dist/classes/ovary.d.ts +2 -2
- package/dist/classes/ovary.js +2 -2
- package/dist/classes/pacman.d/alpine.js +2 -2
- package/dist/classes/pacman.d/archlinux.js +2 -2
- package/dist/classes/pacman.d/debian.js +2 -3
- package/dist/classes/pacman.d/fedora.js +2 -3
- package/dist/classes/pacman.d/openmamba.js +2 -3
- package/dist/classes/pacman.d/opensuse.js +2 -3
- package/dist/classes/pacman.d.ts +0 -5
- package/dist/classes/pacman.js +3 -16
- package/dist/classes/pve-live.js +1 -1
- package/dist/classes/settings.js +1 -1
- package/dist/classes/sys-users.d.ts +76 -0
- package/dist/classes/sys-users.js +206 -0
- package/dist/classes/utils.d/kernel.js +3 -3
- package/dist/classes/utils.d.ts +15 -6
- package/dist/classes/utils.js +79 -46
- package/dist/classes/xdg.js +1 -1
- package/dist/classes/yolk.js +2 -4
- package/dist/commands/export/appimage.js +3 -3
- package/dist/commands/export/pkg.js +3 -3
- package/dist/commands/export/tarballs.js +3 -3
- package/dist/commands/krill.js +1 -1
- package/dist/commands/produce.js +9 -4
- package/dist/commands/setup/install.js +1 -1
- package/dist/commands/setup/purge.js +1 -1
- package/dist/commands/tools/yolk.js +1 -1
- package/dist/commands/update.js +1 -2
- package/dist/interfaces/i-exec.d.ts +1 -0
- package/dist/krill/classes/prepare.d/location.js +1 -1
- package/dist/krill/classes/prepare.d/partitions.js +1 -1
- package/dist/krill/classes/prepare.d/users.js +2 -2
- package/dist/krill/classes/prepare.js +5 -5
- package/dist/krill/classes/sequence.d/add_user.d.ts +3 -15
- package/dist/krill/classes/sequence.d/add_user.js +87 -57
- package/dist/krill/classes/sequence.d/change_password.d.ts +5 -7
- package/dist/krill/classes/sequence.d/change_password.js +25 -10
- package/dist/krill/classes/sequence.d/del_live_user.d.ts +5 -7
- package/dist/krill/classes/sequence.d/del_live_user.js +39 -25
- package/dist/krill/classes/sequence.d/fstab.js +1 -1
- package/dist/krill/classes/sequence.d/grubcfg.d.ts +3 -7
- package/dist/krill/classes/sequence.d/grubcfg.js +33 -13
- package/dist/krill/classes/sequence.d/mkfs.js +1 -2
- package/dist/krill/classes/sequence.d/unpackfs.d.ts +2 -4
- package/dist/krill/classes/sequence.d/unpackfs.js +8 -5
- package/dist/krill/classes/sequence.js +2 -3
- package/dist/krill/components/title.js +2 -2
- package/dist/krill/lib/select_installation_device.js +1 -1
- package/dist/krill/lib/select_replaced_partition.js +1 -1
- package/dist/lib/utils.d.ts +51 -19
- package/dist/lib/utils.js +225 -20
- package/manpages/doc/man/eggs.1.gz +0 -0
- package/manpages/doc/man/eggs.html +8 -8
- package/package.json +9 -9
- package/perrisbrewery/template/dependencies.yaml +1 -0
- package/scripts/boot-encrypted-root.sh +220 -0
- package/scripts/mount-encrypted-home.sh +324 -0
- package/dracut/create-symlink +0 -71
- package/dracut/dracut-log.txt +0 -3
- package/dracut/export +0 -4
- package/dracut/export-dracut-analysis +0 -51
- package/dracut/export-dracut-log +0 -2
- package/dracut/mkisofs +0 -10
- package/dracut/renew-initramfs +0 -17
- package/dracut/sbin2bin +0 -10
- package/dracut/update-dracut-conf-d +0 -2
- 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
|
package/dracut/create-symlink
DELETED
|
@@ -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
|
-
|
package/dracut/dracut-log.txt
DELETED
|
@@ -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"
|
package/dracut/export-dracut-log
DELETED
package/dracut/mkisofs
DELETED
package/dracut/renew-initramfs
DELETED
|
@@ -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,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
|