penguins-eggs 25.11.12 → 25.11.29

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 (168) hide show
  1. package/.oclif.manifest.json +161 -140
  2. package/README.md +811 -4
  3. package/README.pdf +20763 -3833
  4. package/addons/eggs/adapt/applications/eggs-adapt.desktop +0 -0
  5. package/addons/eggs/pve/applications/eggs-pve.desktop +0 -0
  6. package/addons/eggs/rsupport/applications/eggs-rsupport.desktop +0 -0
  7. package/addons/eggs/theme/applications/install-system.desktop +0 -0
  8. package/addons/eggs/theme/livecd/full.grub.main.cfg +39 -4
  9. package/addons/eggs/theme/livecd/full.isolinux.main.cfg +47 -4
  10. package/assets/calamares/install-system.sh +0 -0
  11. package/assets/penguins-eggs.desktop +0 -0
  12. package/assets/penguins-krill.desktop +0 -0
  13. package/assets/penguins-links-add.desktop +0 -0
  14. package/assets/penguins-live-installer.desktop +0 -0
  15. package/bin/dev.js +0 -0
  16. package/bin/run.js +11 -0
  17. package/conf/derivatives.yaml +2 -1
  18. package/conf/distros/alpine/calamares/calamares-modules/machineid-openrc/machineid-openrc.sh +0 -0
  19. package/conf/distros/buster/calamares/calamares-modules/cleanup/cleanup.sh +0 -0
  20. package/conf/distros/buster/calamares/calamares-modules/dpkg-unsafe-io/dpkg-unsafe-io.sh +0 -0
  21. package/conf/distros/buster/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  22. package/conf/distros/fedora/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +0 -0
  23. package/conf/distros/focal/calamares/calamares-modules/.keepit +0 -0
  24. package/conf/distros/focal/calamares/calamares-modules/cleanup/cleanup.sh +20 -0
  25. package/conf/distros/focal/calamares/calamares-modules/cleanup/module.yml +9 -0
  26. package/conf/distros/focal/calamares/calamares-modules/sources-yolk/module.yml +8 -0
  27. package/conf/distros/focal/calamares/calamares-modules/sources-yolk/sources-yolk.sh +50 -0
  28. package/conf/distros/focal/calamares/calamares-modules/sources-yolk-undo/module.yml +8 -0
  29. package/conf/distros/focal/calamares/libexec/.keepit +0 -0
  30. package/conf/distros/focal/calamares/libexec/README.md +5 -0
  31. package/conf/distros/focal/calamares/libexec/calamares-aptsources.sh +15 -0
  32. package/conf/distros/focal/calamares/libexec/calamares-l10n-helper.sh +38 -0
  33. package/conf/distros/focal/calamares/libexec/calamares-logs-helper.sh +34 -0
  34. package/conf/distros/focal/calamares/libexec/calamares-nomodeset.sh +19 -0
  35. package/conf/distros/focal/calamares/modules/after_bootloader_context.yml +26 -0
  36. package/conf/distros/focal/calamares/modules/before_bootloader_context.yml +12 -0
  37. package/conf/distros/focal/calamares/modules/bootloader.yml +86 -0
  38. package/conf/distros/focal/calamares/modules/bootloader.yml.old +35 -0
  39. package/conf/distros/focal/calamares/modules/displaymanager.yml +12 -0
  40. package/conf/distros/focal/calamares/modules/finished.yml +6 -0
  41. package/conf/distros/focal/calamares/modules/fstab.yml +63 -0
  42. package/conf/distros/focal/calamares/modules/grubcfg.yml +51 -0
  43. package/conf/distros/focal/calamares/modules/keyboard.yml +29 -0
  44. package/conf/distros/focal/calamares/modules/locale.yml +7 -0
  45. package/conf/distros/focal/calamares/modules/machineid.yml +10 -0
  46. package/conf/distros/focal/calamares/modules/mount.yml +20 -0
  47. package/conf/distros/focal/calamares/modules/netinstall.yml +5 -0
  48. package/conf/distros/focal/calamares/modules/packages.mustache +5 -0
  49. package/conf/distros/focal/calamares/modules/partition.yml +21 -0
  50. package/conf/distros/focal/calamares/modules/removeuser.mustache +3 -0
  51. package/conf/distros/focal/calamares/modules/shellprocess@aptsources.yml +11 -0
  52. package/conf/distros/focal/calamares/modules/shellprocess@boot_deploy.yml +9 -0
  53. package/conf/distros/focal/calamares/modules/shellprocess@boot_reconfigure.yml +15 -0
  54. package/conf/distros/focal/calamares/modules/shellprocess@install_translations.yml +8 -0
  55. package/conf/distros/focal/calamares/modules/shellprocess@logs.yml +8 -0
  56. package/conf/distros/focal/calamares/modules/shellprocess@mkinitramfs.yml +6 -0
  57. package/conf/distros/focal/calamares/modules/shellprocess@nomodeset.yml +12 -0
  58. package/conf/distros/focal/calamares/modules/umount.yml +4 -0
  59. package/conf/distros/focal/calamares/modules/unpackfs.mustache +6 -0
  60. package/conf/distros/focal/calamares/modules/users.yml +27 -0
  61. package/conf/distros/focal/calamares/modules/welcome.yml +24 -0
  62. package/conf/distros/focal/calamares/settings.yml +97 -0
  63. package/conf/distros/noble/calamares/calamares-modules/cleanup/cleanup.sh +0 -0
  64. package/conf/distros/noble/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  65. package/conf/distros/noble/calamares/libexec/calamares-aptsources.sh +0 -0
  66. package/conf/distros/noble/calamares/libexec/calamares-l10n-helper.sh +0 -0
  67. package/conf/distros/noble/calamares/libexec/calamares-logs-helper.sh +0 -0
  68. package/conf/distros/noble/calamares/libexec/calamares-nomodeset.sh +0 -0
  69. package/conf/distros/opensuse/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +0 -0
  70. package/conf/distros/opensuse/calamares/settings.yml +0 -0
  71. package/conf/distros/opensuse/calamares/zstd2lzo.sh +0 -0
  72. package/conf/distros/trixie/calamares/calamares-modules/cleanup/cleanup.sh +0 -0
  73. package/conf/distros/trixie/calamares/calamares-modules/dpkg-unsafe-io/dpkg-unsafe-io.sh +0 -0
  74. package/conf/distros/trixie/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  75. package/conf/init/unattended.sh +0 -0
  76. package/dist/appimage/dependency-manager.d.ts +31 -0
  77. package/dist/appimage/dependency-manager.js +292 -0
  78. package/dist/appimage/first-run-check.d.ts +8 -0
  79. package/dist/appimage/first-run-check.js +13 -0
  80. package/dist/bin/dev.cmd +3 -0
  81. package/dist/bin/dev.js +6 -0
  82. package/dist/bin/run.cmd +3 -0
  83. package/dist/bin/run.js +16 -0
  84. package/dist/classes/cli-autologin.js +5 -5
  85. package/dist/classes/daddy.js +11 -11
  86. package/dist/classes/diversions.d.ts +5 -0
  87. package/dist/classes/diversions.js +23 -7
  88. package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +7 -0
  89. package/dist/classes/incubation/fisherman-helper/initcpio.js +7 -0
  90. package/dist/classes/incubation/fisherman.js +0 -2
  91. package/dist/classes/network.d.ts +1 -1
  92. package/dist/classes/ovary.d/edit-live-fs.d.ts +1 -1
  93. package/dist/classes/ovary.d/edit-live-fs.js +129 -93
  94. package/dist/classes/ovary.d/fertilization.js +1 -1
  95. package/dist/classes/ovary.d/xorriso-command.js +1 -5
  96. package/dist/classes/pacman.d.ts +21 -7
  97. package/dist/classes/pacman.js +59 -39
  98. package/dist/classes/utils.d.ts +5 -5
  99. package/dist/classes/utils.js +30 -11
  100. package/dist/commands/calamares.js +1 -1
  101. package/dist/commands/config.js +3 -14
  102. package/dist/commands/cuckoo.js +1 -1
  103. package/dist/commands/{analyze.d.ts → export/appimage.d.ts} +10 -9
  104. package/dist/commands/export/appimage.js +76 -0
  105. package/dist/commands/export/iso.js +1 -1
  106. package/dist/commands/export/pkg.d.ts +1 -1
  107. package/dist/commands/export/pkg.js +2 -2
  108. package/dist/commands/{install.d.ts → krill.d.ts} +3 -4
  109. package/dist/commands/{install.js → krill.js} +5 -6
  110. package/dist/commands/produce.js +1 -1
  111. package/dist/commands/setup/install.d.ts +17 -0
  112. package/dist/commands/setup/install.js +71 -0
  113. package/dist/commands/setup/purge.d.ts +17 -0
  114. package/dist/commands/setup/purge.js +71 -0
  115. package/dist/commands/tools/repo.d.ts +0 -5
  116. package/dist/commands/tools/repo.js +205 -127
  117. package/dist/commands/update.d.ts +16 -1
  118. package/dist/commands/update.js +140 -63
  119. package/dist/krill/components/information.js +2 -2
  120. package/dist/krill/components/title.js +13 -13
  121. package/dist/lib/utils.d.ts +16 -0
  122. package/dist/lib/utils.js +5 -32
  123. package/dracut/create-symlink +0 -0
  124. package/dracut/export +0 -0
  125. package/dracut/export-dracut-analysis +0 -0
  126. package/dracut/export-dracut-log +0 -0
  127. package/dracut/mkisofs +0 -0
  128. package/dracut/modules.d/00debug-shell/debug-hook.sh +0 -0
  129. package/dracut/modules.d/00debug-shell/module-setup.sh +0 -0
  130. package/dracut/modules.d/90block/block-cmdline.sh +0 -0
  131. package/dracut/modules.d/90block/module-setup.sh +0 -0
  132. package/dracut/modules.d/95iso-scan/iso-scan-fallback.sh +0 -0
  133. package/dracut/modules.d/95iso-scan/iso-scan.sh +0 -0
  134. package/dracut/modules.d/95iso-scan/module-setup.sh +0 -0
  135. package/dracut/modules.d/95luks-loop/luks-loop.sh +0 -0
  136. package/dracut/modules.d/95luks-loop/module-setup.sh +0 -0
  137. package/dracut/renew-initramfs +0 -0
  138. package/dracut/sbin2bin +0 -0
  139. package/dracut/update-dracut-conf-d +0 -0
  140. package/dracut/update-dracut-modules +0 -0
  141. package/eui/eui-autostart-cinnamon.desktop +0 -0
  142. package/eui/eui-autostart-xfce.desktop +0 -0
  143. package/eui/eui-create-image.sh +0 -0
  144. package/eui/eui-start.sh +0 -0
  145. package/manpages/doc/man/eggs.1.gz +0 -0
  146. package/manpages/doc/man/eggs.html +594 -9
  147. package/package.json +124 -130
  148. package/perrisbrewery/scripts/postinst +0 -0
  149. package/perrisbrewery/scripts/postrm +0 -0
  150. package/perrisbrewery/scripts/preinst +0 -0
  151. package/perrisbrewery/scripts/prerm +0 -0
  152. package/perrisbrewery/template/dependencies.yaml +0 -5
  153. package/perrisbrewery/template/man.template.md +7 -0
  154. package/scripts/99clean +0 -0
  155. package/scripts/_eggs +56 -47
  156. package/scripts/adapt.sh +0 -0
  157. package/scripts/bros/waydroid-helper.sh +0 -0
  158. package/scripts/eggs.bash +4 -4
  159. package/scripts/lsb_release +0 -0
  160. package/scripts/mom.sh +0 -0
  161. package/scripts/pve-live.service +0 -0
  162. package/scripts/pve-live.sh +0 -0
  163. package/scripts/resy +0 -0
  164. package/dist/commands/analyze.js +0 -95
  165. package/dist/commands/pods.d.ts +0 -22
  166. package/dist/commands/pods.js +0 -92
  167. package/scripts/boot-encrypted-root.sh +0 -220
  168. package/scripts/mount-encrypted-home.sh +0 -324
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * ./src/classes/ovary.d/edit-live-fs.ts
3
- * penguins-eggs v.25.7.x / ecmascript 2020
3
+ * penguins-eggs v.25.11.x / ecmascript 2020
4
4
  * author: Piero Proietti
5
5
  * email: piero.proietti@gmail.com
6
6
  * license: MIT
@@ -31,17 +31,18 @@ export async function editLiveFs(clone = false) {
31
31
  if (this.verbose) {
32
32
  console.log('Ovary: editLiveFs');
33
33
  }
34
+ const workDir = this.settings.work_dir.merged;
34
35
  /**
35
36
  * /etc/penguins-eggs.d/is_clone file created on live
36
37
  */
37
38
  if (clone) {
38
- await exec(`touch ${this.settings.work_dir.merged}/etc/penguins-eggs.d/is_clone`, this.echo);
39
+ await exec(`touch ${workDir}/etc/penguins-eggs.d/is_clone`, this.echo);
39
40
  }
40
41
  /**
41
42
  * /etc/default/epoptes-client created on live
42
43
  */
43
44
  if (Pacman.packageIsInstalled('epoptes')) {
44
- const file = `${this.settings.work_dir.merged}/etc/default/epoptes-client`;
45
+ const file = `${workDir}/etc/default/epoptes-client`;
45
46
  const text = `SERVER=${os.hostname}.local\n`;
46
47
  fs.writeFileSync(file, text);
47
48
  }
@@ -52,74 +53,116 @@ export async function editLiveFs(clone = false) {
52
53
  Utils.write(file, text);
53
54
  }
54
55
  // Truncate logs, remove archived logs.
55
- let cmd = `find ${this.settings.work_dir.merged}/var/log -name "*gz" -print0 | xargs -0r rm -f`;
56
+ let cmd = `find ${workDir}/var/log -name "*gz" -print0 | xargs -0r rm -f`;
56
57
  await exec(cmd, this.echo);
57
- cmd = `find ${this.settings.work_dir.merged}/var/log/ -type f -exec truncate -s 0 {} \\;`;
58
+ cmd = `find ${workDir}/var/log/ -type f -exec truncate -s 0 {} \\;`;
58
59
  await exec(cmd, this.echo);
60
+ // =========================================================================
61
+ // FIX STRUTTURALE PER DEVUAN/DEBIAN (/var folders)
62
+ // =========================================================================
63
+ // Ricrea le directory essenziali che potrebbero essere state rimosse
64
+ // o che devono esistere vuote per il corretto avvio dei servizi.
65
+ const dirsToCreate = [
66
+ `${workDir}/var/lib/dbus`, // Fondamentale per dbus
67
+ `${workDir}/var/spool/rsyslog`, // Fondamentale per rsyslog
68
+ `${workDir}/var/spool/cron/crontabs` // Fondamentale per cron
69
+ ];
70
+ for (const dir of dirsToCreate) {
71
+ if (!fs.existsSync(dir)) {
72
+ await exec(`mkdir -p ${dir}`, this.echo);
73
+ // Assicuriamo permessi corretti (dbus vuole 755 root:root di base)
74
+ await exec(`chmod 755 ${dir}`, this.echo);
75
+ }
76
+ }
77
+ // =========================================================================
78
+ // FIX CRITICO PER /var/run e /var/lock
79
+ // =========================================================================
80
+ // Su Debian/Devuan moderni, /var/run DEVE essere un symlink a /run.
81
+ // Se rsync lo ha copiato come directory, D-Bus e altri servizi falliscono.
82
+ const varRun = `${workDir}/var/run`;
83
+ if (fs.existsSync(varRun) && !fs.lstatSync(varRun).isSymbolicLink()) {
84
+ if (this.verbose)
85
+ console.log('Fixing /var/run symlink...');
86
+ await exec(`rm -rf ${varRun}`, this.echo);
87
+ await exec(`ln -s /run ${varRun}`, this.echo);
88
+ }
89
+ const varLock = `${workDir}/var/lock`;
90
+ if (fs.existsSync(varLock) && !fs.lstatSync(varLock).isSymbolicLink()) {
91
+ if (this.verbose)
92
+ console.log('Fixing /var/lock symlink...');
93
+ await exec(`rm -rf ${varLock}`, this.echo);
94
+ await exec(`ln -s /run/lock ${varLock}`, this.echo);
95
+ }
96
+ // =========================================================================
59
97
  // Allow all fixed drives to be mounted with pmount
60
- if (this.settings.config.pmount_fixed && fs.existsSync(`${this.settings.work_dir.merged}/etc/pmount.allow`)) {
98
+ if (this.settings.config.pmount_fixed && fs.existsSync(`${workDir}/etc/pmount.allow`)) {
61
99
  // MX aggiunto /etc
62
- await exec(`sed -i 's:#/dev/sd\[a-z\]:/dev/sd\[a-z\]:' ${this.settings.work_dir.merged}/etc/pmount.allow`, this.echo);
100
+ await exec(`sed -i 's:#/dev/sd\[a-z\]:/dev/sd\[a-z\]:' ${workDir}/etc/pmount.allow`, this.echo);
63
101
  }
64
102
  // Remove obsolete live-config file
65
- if (fs.existsSync(`${this.settings.work_dir.merged}lib/live/config/1161-openssh-server`)) {
66
- await exec(`rm -f ${this.settings.work_dir.merged}/lib/live/config/1161-openssh-server`, this.echo);
103
+ if (fs.existsSync(`${workDir}lib/live/config/1161-openssh-server`)) {
104
+ await exec(`rm -f ${workDir}/lib/live/config/1161-openssh-server`, this.echo);
67
105
  }
68
- if (fs.existsSync(`${this.settings.work_dir.merged}/etc/ssh/sshd_config`)) {
106
+ if (fs.existsSync(`${workDir}/etc/ssh/sshd_config`)) {
69
107
  /**
70
108
  * enable/disable SSH root/users password login
71
109
  */
72
- await exec(`sed -i '/PermitRootLogin/d' ${this.settings.work_dir.merged}/etc/ssh/sshd_config`);
73
- await exec(`sed -i '/PasswordAuthentication/d' ${this.settings.work_dir.merged}/etc/ssh/sshd_config`);
110
+ await exec(`sed -i '/PermitRootLogin/d' ${workDir}/etc/ssh/sshd_config`);
111
+ await exec(`sed -i '/PasswordAuthentication/d' ${workDir}/etc/ssh/sshd_config`);
74
112
  if (this.settings.config.ssh_pass) {
75
- await exec(`echo 'PasswordAuthentication yes' | tee -a ${this.settings.work_dir.merged}/etc/ssh/sshd_config`, this.echo);
113
+ await exec(`echo 'PasswordAuthentication yes' | tee -a ${workDir}/etc/ssh/sshd_config`, this.echo);
76
114
  }
77
115
  else {
78
- await exec(`echo 'PermitRootLogin prohibit-password' | tee -a ${this.settings.work_dir.merged}/etc/ssh/sshd_config`, this.echo);
79
- await exec(`echo 'PasswordAuthentication no' | tee -a ${this.settings.work_dir.merged}/etc/ssh/sshd_config`, this.echo);
116
+ await exec(`echo 'PermitRootLogin prohibit-password' | tee -a ${workDir}/etc/ssh/sshd_config`, this.echo);
117
+ await exec(`echo 'PasswordAuthentication no' | tee -a ${workDir}/etc/ssh/sshd_config`, this.echo);
80
118
  }
81
119
  }
82
- /**
83
- * ufw --force reset
84
- */
85
- // if (Pacman.packageIsInstalled('ufw')) {
86
- // await exec('ufw --force reset')
87
- // }
88
120
  /**
89
121
  * /etc/fstab should exist, even if it's empty,
90
122
  * to prevent error messages at boot
91
123
  */
92
- await exec(`rm ${this.settings.work_dir.merged}/etc/fstab`, this.echo);
93
- await exec(`touch ${this.settings.work_dir.merged}/etc/fstab`, this.echo);
124
+ await exec(`rm ${workDir}/etc/fstab`, this.echo);
125
+ await exec(`touch ${workDir}/etc/fstab`, this.echo);
94
126
  /**
95
127
  * Remove crypttab if exists
96
128
  * this is crucial for tpm systems.
97
129
  */
98
- if (fs.existsSync(`${this.settings.work_dir.merged}/etc/crypttab`)) {
99
- await exec(`rm ${this.settings.work_dir.merged}/etc/crypttab`, this.echo);
130
+ if (fs.existsSync(`${workDir}/etc/crypttab`)) {
131
+ await exec(`rm ${workDir}/etc/crypttab`, this.echo);
100
132
  }
133
+ // =========================================================================
134
+ // FIX MACHINE-ID (Il colpevole del blocco SysVinit)
135
+ // =========================================================================
101
136
  /**
102
137
  * Blank out systemd machine id.
103
- * If it does not exist, systemd-journald will fail,
104
- * but if it exists and is empty, systemd will automatically
105
- * set up a new unique ID.
138
+ * SU SYSTEMD: File vuoto = rigenerazione.
139
+ * SU SYSVINIT (Devuan): File NON deve esistere o deve essere 0 bytes.
106
140
  */
107
- if (fs.existsSync(`${this.settings.work_dir.merged}/etc/machine-id`)) {
108
- await exec(`rm ${this.settings.work_dir.merged}/etc/machine-id`, this.echo);
109
- await exec(`touch ${this.settings.work_dir.merged}/etc/machine-id`, this.echo);
110
- Utils.write(`${this.settings.work_dir.merged}/etc/machine-id`, ':');
141
+ // 1. Pulisci /etc/machine-id
142
+ if (fs.existsSync(`${workDir}/etc/machine-id`)) {
143
+ await exec(`rm ${workDir}/etc/machine-id`, this.echo);
144
+ // Per Systemd serve il file vuoto per fare il bind mount
145
+ // Per Devuan va bene vuoto (lo riempie dbus-uuidgen)
146
+ await exec(`touch ${workDir}/etc/machine-id`, this.echo);
147
+ }
148
+ // 2. Rimuovi /var/lib/dbus/machine-id
149
+ // Questo è il file "vero" per dbus su sistemi non-systemd.
150
+ // Deve sparire per essere rigenerato al boot.
151
+ if (fs.existsSync(`${workDir}/var/lib/dbus/machine-id`)) {
152
+ await exec(`rm ${workDir}/var/lib/dbus/machine-id`, this.echo);
111
153
  }
154
+ // =========================================================================
112
155
  /**
113
156
  * LMDE4: utilizza UbuntuMono16.pf2
114
157
  * aggiungo un link a /boot/grub/fonts/UbuntuMono16.pf2
115
158
  */
116
- if (fs.existsSync(`${this.settings.work_dir.merged}/boot/grub/fonts/unicode.pf2`)) {
117
- shx.cp(`${this.settings.work_dir.merged}/boot/grub/fonts/unicode.pf2`, `${this.settings.work_dir.merged}/boot/grub/fonts/UbuntuMono16.pf2`);
159
+ if (fs.existsSync(`${workDir}/boot/grub/fonts/unicode.pf2`)) {
160
+ shx.cp(`${workDir}/boot/grub/fonts/unicode.pf2`, `${workDir}/boot/grub/fonts/UbuntuMono16.pf2`);
118
161
  }
119
162
  /**
120
163
  * cleaning /etc/resolv.conf
121
164
  */
122
- const resolvFile = `${this.settings.work_dir.merged}/etc/resolv.conf`;
165
+ const resolvFile = `${workDir}/etc/resolv.conf`;
123
166
  shx.rm(resolvFile);
124
167
  /**
125
168
  * Per tutte le distro systemd
@@ -134,27 +177,27 @@ export async function editLiveFs(clone = false) {
134
177
  * systemctl enable 'systemd-resolved.service
135
178
  */
136
179
  if (await systemdctl.isEnabled('remote-cryptsetup.target')) {
137
- await systemdctl.disable('remote-cryptsetup.target', this.settings.work_dir.merged, true);
180
+ await systemdctl.disable('remote-cryptsetup.target', workDir, true);
138
181
  }
139
182
  if (await systemdctl.isEnabled('speech-dispatcherd.service')) {
140
- await systemdctl.disable('speech-dispatcherd.service', this.settings.work_dir.merged, true);
183
+ await systemdctl.disable('speech-dispatcherd.service', workDir, true);
141
184
  }
142
185
  if (await systemdctl.isEnabled('wpa_supplicant-nl80211@.service')) {
143
- await systemdctl.disable('wpa_supplicant-nl80211@.service', this.settings.work_dir.merged, true);
186
+ await systemdctl.disable('wpa_supplicant-nl80211@.service', workDir, true);
144
187
  }
145
188
  if (await systemdctl.isEnabled('wpa_supplicant@.service')) {
146
- await systemdctl.disable('wpa_supplicant@.service', this.settings.work_dir.merged, true);
189
+ await systemdctl.disable('wpa_supplicant@.service', workDir, true);
147
190
  }
148
191
  if (await systemdctl.isEnabled('wpa_supplicant-wired@.service')) {
149
- await systemdctl.disable('wpa_supplicant-wired@.service', this.settings.work_dir.merged, true);
192
+ await systemdctl.disable('wpa_supplicant-wired@.service', workDir, true);
150
193
  }
151
194
  /**
152
195
  * All systemd distros
153
196
  */
154
- await exec(`rm -f ${this.settings.work_dir.merged}/var/lib/wicd/configurations/*`, this.echo);
155
- await exec(`rm -f ${this.settings.work_dir.merged}/etc/wicd/wireless-settings.conf`, this.echo);
156
- await exec(`rm -f ${this.settings.work_dir.merged}/etc/NetworkManager/system-connections/*`, this.echo);
157
- await exec(`rm -f ${this.settings.work_dir.merged}/etc/network/wifi/*`, this.echo);
197
+ await exec(`rm -f ${workDir}/var/lib/wicd/configurations/*`, this.echo);
198
+ await exec(`rm -f ${workDir}/etc/wicd/wireless-settings.conf`, this.echo);
199
+ await exec(`rm -f ${workDir}/etc/NetworkManager/system-connections/*`, this.echo);
200
+ await exec(`rm -f ${workDir}/etc/network/wifi/*`, this.echo);
158
201
  /**
159
202
  * removing from /etc/network/:
160
203
  * if-down.d if-post-down.d if-pre-up.d if-up.d interfaces interfaces.d
@@ -162,7 +205,7 @@ export async function editLiveFs(clone = false) {
162
205
  const cleanDirs = ['if-down.d', 'if-post-down.d', 'if-pre-up.d', 'if-up.d', 'interfaces.d'];
163
206
  let cleanDir = '';
164
207
  for (cleanDir of cleanDirs) {
165
- await exec(`rm -f ${this.settings.work_dir.merged}/etc/network/${cleanDir}/wpasupplicant`, this.echo);
208
+ await exec(`rm -f ${workDir}/etc/network/${cleanDir}/wpasupplicant`, this.echo);
166
209
  }
167
210
  }
168
211
  /**
@@ -170,70 +213,63 @@ export async function editLiveFs(clone = false) {
170
213
  * and netman, so they aren't stealthily included in the snapshot.
171
214
  */
172
215
  if (this.familyId === 'debian') {
173
- if (fs.existsSync(`${this.settings.work_dir.merged}/etc/network/interfaces`)) {
174
- await exec(`rm -f ${this.settings.work_dir.merged}/etc/network/interfaces`, this.echo);
175
- Utils.write(`${this.settings.work_dir.merged}/etc/network/interfaces`, 'auto lo\niface lo inet loopback');
216
+ if (fs.existsSync(`${workDir}/etc/network/interfaces`)) {
217
+ await exec(`rm -f ${workDir}/etc/network/interfaces`, this.echo);
218
+ Utils.write(`${workDir}/etc/network/interfaces`, 'auto lo\niface lo inet loopback');
176
219
  }
177
220
  /**
178
221
  * add some basic files to /dev
179
222
  */
180
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/console`)) {
181
- await exec(`mknod -m 622 ${this.settings.work_dir.merged}/dev/console c 5 1`, this.echo);
182
- }
183
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/null`)) {
184
- await exec(`mknod -m 666 ${this.settings.work_dir.merged}/dev/null c 1 3`, this.echo);
185
- }
186
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/zero`)) {
187
- await exec(`mknod -m 666 ${this.settings.work_dir.merged}/dev/zero c 1 5`, this.echo);
188
- }
189
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/ptmx`)) {
190
- await exec(`mknod -m 666 ${this.settings.work_dir.merged}/dev/ptmx c 5 2`, this.echo);
191
- }
192
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/tty`)) {
193
- await exec(`mknod -m 666 ${this.settings.work_dir.merged}/dev/tty c 5 0`, this.echo);
194
- }
195
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/random`)) {
196
- await exec(`mknod -m 444 ${this.settings.work_dir.merged}/dev/random c 1 8`, this.echo);
197
- }
198
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/urandom`)) {
199
- await exec(`mknod -m 444 ${this.settings.work_dir.merged}/dev/urandom c 1 9`, this.echo);
200
- }
201
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/{console,ptmx,tty}`)) {
202
- await exec(`chown -v root:tty ${this.settings.work_dir.merged}/dev/{console,ptmx,tty}`, this.echo);
203
- }
204
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/fd`)) {
205
- await exec(`ln -sv /proc/self/fd ${this.settings.work_dir.merged}/dev/fd`, this.echo);
206
- }
207
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/stdin`)) {
208
- await exec(`ln -sv /proc/self/fd/0 ${this.settings.work_dir.merged}/dev/stdin`, this.echo);
209
- }
210
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/stdout`)) {
211
- await exec(`ln -sv /proc/self/fd/1 ${this.settings.work_dir.merged}/dev/stdout`, this.echo);
223
+ // Ho condensato i controlli ripetitivi su mknod per leggibilità
224
+ // Nota: Questo è safe da eseguire, anche se devtmpfs solitamente gestisce tutto.
225
+ const devNodes = [
226
+ { path: 'console', m: '622', type: 'c', major: 5, minor: 1 },
227
+ { path: 'null', m: '666', type: 'c', major: 1, minor: 3 },
228
+ { path: 'zero', m: '666', type: 'c', major: 1, minor: 5 },
229
+ { path: 'ptmx', m: '666', type: 'c', major: 5, minor: 2 },
230
+ { path: 'tty', m: '666', type: 'c', major: 5, minor: 0 },
231
+ { path: 'random', m: '444', type: 'c', major: 1, minor: 8 },
232
+ { path: 'urandom', m: '444', type: 'c', major: 1, minor: 9 },
233
+ ];
234
+ for (const node of devNodes) {
235
+ if (!fs.existsSync(`${workDir}/dev/${node.path}`)) {
236
+ await exec(`mknod -m ${node.m} ${workDir}/dev/${node.path} ${node.type} ${node.major} ${node.minor}`, this.echo);
237
+ }
212
238
  }
213
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/stderr`)) {
214
- await exec(`ln -sv /proc/self/fd/2 ${this.settings.work_dir.merged}/dev/stderr`, this.echo);
239
+ if (!fs.existsSync(`${workDir}/dev/{console,ptmx,tty}`)) {
240
+ await exec(`chown -v root:tty ${workDir}/dev/{console,ptmx,tty}`, this.echo);
215
241
  }
216
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/core`)) {
217
- await exec(`ln -sv /proc/kcore ${this.settings.work_dir.merged}/dev/core`, this.echo);
242
+ // Link simbolici standard
243
+ const links = [
244
+ { src: '/proc/self/fd', dest: 'fd' },
245
+ { src: '/proc/self/fd/0', dest: 'stdin' },
246
+ { src: '/proc/self/fd/1', dest: 'stdout' },
247
+ { src: '/proc/self/fd/2', dest: 'stderr' },
248
+ { src: '/proc/kcore', dest: 'core' }
249
+ ];
250
+ for (const link of links) {
251
+ if (!fs.existsSync(`${workDir}/dev/${link.dest}`)) {
252
+ await exec(`ln -sv ${link.src} ${workDir}/dev/${link.dest}`, this.echo);
253
+ }
218
254
  }
219
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/shm`)) {
220
- await exec(`mkdir -v ${this.settings.work_dir.merged}/dev/shm`, this.echo);
255
+ if (!fs.existsSync(`${workDir}/dev/shm`)) {
256
+ await exec(`mkdir -v ${workDir}/dev/shm`, this.echo);
221
257
  }
222
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/pts`)) {
223
- await exec(`mkdir -v ${this.settings.work_dir.merged}/dev/pts`, this.echo);
258
+ if (!fs.existsSync(`${workDir}/dev/pts`)) {
259
+ await exec(`mkdir -v ${workDir}/dev/pts`, this.echo);
224
260
  }
225
- if (!fs.existsSync(`${this.settings.work_dir.merged}/dev/shm`)) {
226
- await exec(`chmod 1777 ${this.settings.work_dir.merged}/dev/shm`, this.echo);
261
+ if (!fs.existsSync(`${workDir}/dev/shm`)) {
262
+ await exec(`chmod 1777 ${workDir}/dev/shm`, this.echo);
227
263
  }
228
264
  /**
229
265
  * creo /tmp
230
266
  */
231
- if (!fs.existsSync(`${this.settings.work_dir.merged}/tmp`)) {
232
- await exec(`mkdir ${this.settings.work_dir.merged}/tmp`, this.echo);
267
+ if (!fs.existsSync(`${workDir}/tmp`)) {
268
+ await exec(`mkdir ${workDir}/tmp`, this.echo);
233
269
  }
234
270
  /**
235
271
  * Assegno 1777 a /tmp creava problemi con MXLINUX
236
272
  */
237
- await exec(`chmod 1777 ${this.settings.work_dir.merged}/tmp`, this.echo);
273
+ await exec(`chmod 1777 ${workDir}/tmp`, this.echo);
238
274
  }
239
275
  }
@@ -25,7 +25,7 @@ export async function fertilization(snapshot_prefix = '', snapshot_basename = ''
25
25
  this.settings = new Settings();
26
26
  if (await this.settings.load()) {
27
27
  await this.settings.loadRemix(this.theme);
28
- this.volid = Utils.getVolid(this.settings.remix.name);
28
+ this.volid = Utils.VolidTrim(this.settings.remix.name);
29
29
  this.uuid = Utils.uuidGen();
30
30
  //this.familyId = this.settings.distro.familyId
31
31
  this.nest = this.settings.config.snapshot_mnt;
@@ -38,13 +38,9 @@ export async function xorrisoCommand(clone = false, homecrypt = false, fullcrypt
38
38
  }
39
39
  // postfix (data)
40
40
  const postfix = Utils.getPostfix();
41
- console.log('prefix:', prefix);
42
- console.log('prefix:', this.volid);
43
- console.log('arch:', Utils.uefiArch());
44
- console.log('typology:', typology);
45
41
  console.log('postfix:', postfix);
46
42
  this.settings.isoFilename = prefix + this.volid + '_' + Utils.uefiArch() + typology + postfix;
47
- // node della ISO
43
+ console.log('isoFilename:', this.settings.isoFilename);
48
44
  const output = this.settings.config.snapshot_mnt + this.settings.isoFilename;
49
45
  let command = '';
50
46
  // const appid = `-appid "${this.settings.distro.distroId}" `
@@ -15,10 +15,15 @@ export default class Pacman {
15
15
  distro: IDistro;
16
16
  remix: IRemix;
17
17
  /**
18
- *
18
+ * autocompleteInstall()
19
19
  * @param verbose
20
20
  */
21
- static autocompleteInstall(verbose?: boolean): Promise<void>;
21
+ static autocompleteInstall(): Promise<void>;
22
+ /**
23
+ * autocompleteRemove
24
+ * @param verbose
25
+ */
26
+ static autocompleteRemove(verbose?: boolean): Promise<void>;
22
27
  /**
23
28
  * return true if calamares is installed
24
29
  */
@@ -52,14 +57,14 @@ export default class Pacman {
52
57
  * Creazione del file di configurazione /etc/penguins-eggs
53
58
  */
54
59
  static configurationInstall(links?: boolean, verbose?: boolean): Promise<void>;
55
- /**
56
- * Ritorna vero se machine-id è uguale
57
- */
58
- static configurationMachineNew(verbose?: boolean): Promise<boolean>;
59
60
  /**
60
61
  * Rimozione dei file di configurazione
61
62
  */
62
63
  static configurationRemove(verbose?: boolean): Promise<void>;
64
+ /**
65
+ * Ritorna vero se machine-id è uguale
66
+ */
67
+ static configurationMachineNew(verbose?: boolean): Promise<boolean>;
63
68
  /**
64
69
  *
65
70
  * @returns
@@ -117,7 +122,11 @@ export default class Pacman {
117
122
  /**
118
123
  * Installa manPage
119
124
  */
120
- static manPageInstall(verbose?: boolean): Promise<void>;
125
+ static manpageInstall(): Promise<void>;
126
+ /**
127
+ * manpageRemove
128
+ */
129
+ static manpageRemove(): Promise<void>;
121
130
  /**
122
131
  *
123
132
  * @param debPackage
@@ -135,5 +144,10 @@ export default class Pacman {
135
144
  * @param debPackage
136
145
  */
137
146
  static packageIsInstalled(packageName: string): boolean;
147
+ /**
148
+ *
149
+ * @param packageNpm
150
+ * @returns
151
+ */
138
152
  static packageNpmLast(packageNpm?: string): Promise<string>;
139
153
  }
@@ -33,19 +33,30 @@ export default class Pacman {
33
33
  distro = {};
34
34
  remix = {};
35
35
  /**
36
- *
36
+ * autocompleteInstall()
37
37
  * @param verbose
38
38
  */
39
- static async autocompleteInstall(verbose = false) {
39
+ static async autocompleteInstall() {
40
40
  if (Pacman.packageIsInstalled('bash-completion')) {
41
41
  if (fs.existsSync('/usr/share/bash-completion/completions/')) {
42
42
  await exec(`cp ${__dirname}/../../scripts/eggs.bash /usr/share/bash-completion/completions/`);
43
43
  }
44
- else if (fs.existsSync('/etc/bash_completion.d/')) {
45
- await exec(`cp ${__dirname}/../../scripts/eggs.bash /etc/bash_completion.d/`);
44
+ }
45
+ // Su arch è ok, su debian God know
46
+ if (Pacman.packageIsInstalled('zsh-completions')) {
47
+ if (fs.existsSync('/usr/share/zsh/site-functions')) {
48
+ await exec(`cp ${__dirname}/../../scripts/_eggs /usr/share/zsh/site-functions/`);
46
49
  }
47
50
  }
48
51
  }
52
+ /**
53
+ * autocompleteRemove
54
+ * @param verbose
55
+ */
56
+ static async autocompleteRemove(verbose = false) {
57
+ await exec(`rm -f /usr/share/bash-completion/completions/eggs.bash`);
58
+ await exec(`rm -f /usr/share/zsh/site-functions/._eggs`);
59
+ }
49
60
  /**
50
61
  * return true if calamares is installed
51
62
  */
@@ -139,8 +150,6 @@ export default class Pacman {
139
150
  */
140
151
  static commandIsInstalled(cmd) {
141
152
  let installed = false;
142
- // if (shx.exec(`command -V ${cmd} &>/dev/null`).code == 0) {
143
- // remove output
144
153
  if (shx.exec(`command -V ${cmd} >/dev/null 2>&1`).code == 0) {
145
154
  installed = true;
146
155
  }
@@ -222,7 +231,7 @@ export default class Pacman {
222
231
  execSync(`rm -rf ${init}`);
223
232
  }
224
233
  execSync(`mkdir -p ${init}`);
225
- shx.ln('-s', path.resolve(__dirname, '../../addons'), addons);
234
+ // shx.ln('-s', path.resolve(__dirname, '../../addons'), addons)
226
235
  shx.cp(path.resolve(__dirname, '../../conf/README.md'), confRoot);
227
236
  shx.cp(path.resolve(__dirname, '../../conf/derivatives.yaml'), confRoot);
228
237
  shx.cp(path.resolve(__dirname, '../../conf/derivatives_fedora.yaml'), confRoot);
@@ -240,6 +249,21 @@ export default class Pacman {
240
249
  shx.cp(path.resolve(__dirname, '../../conf/exclude.list.d/*'), '/etc/penguins-eggs.d/exclude.list.d');
241
250
  await this.configurationFresh();
242
251
  }
252
+ /**
253
+ * Rimozione dei file di configurazione
254
+ */
255
+ static async configurationRemove(verbose = false) {
256
+ const echo = Utils.setEcho(verbose);
257
+ if (fs.existsSync('/etc/penguins-eggs.d')) {
258
+ await exec('rm /etc/penguins-eggs.d -rf', echo);
259
+ }
260
+ /**
261
+ * No remove calamares more
262
+ */
263
+ // if (fs.existsSync('/etc/calamares')) {
264
+ // await exec('rm /etc/calamares -rf', echo)
265
+ // }
266
+ }
243
267
  /**
244
268
  * Ritorna vero se machine-id è uguale
245
269
  */
@@ -252,18 +276,6 @@ export default class Pacman {
252
276
  }
253
277
  return result;
254
278
  }
255
- /**
256
- * Rimozione dei file di configurazione
257
- */
258
- static async configurationRemove(verbose = true) {
259
- const echo = Utils.setEcho(verbose);
260
- if (fs.existsSync('/etc/penguins-eggs.d')) {
261
- await exec('rm /etc/penguins-eggs.d -rf', echo);
262
- }
263
- if (fs.existsSync('/etc/calamares')) {
264
- await exec('rm /etc/calamares -rf', echo);
265
- }
266
- }
267
279
  /**
268
280
  *
269
281
  * @returns
@@ -417,21 +429,21 @@ export default class Pacman {
417
429
  * Ubuntu
418
430
  **********************************************************************************/
419
431
  /**
420
- * Ubuntu focal: eredita da noble
432
+ * Ubuntu focal: eredita da focal
421
433
  */
422
434
  }
423
435
  else if (distroUniqueId === 'focal') {
424
436
  const dest = '/etc/penguins-eggs.d/distros/focal';
425
- const noble = `${rootPen}/conf/distros/noble`;
426
- await exec(`cp -r ${noble}/* ${dest}`, echo);
437
+ const focal = `${rootPen}/conf/distros/focal`;
438
+ await exec(`cp -r ${focal}/* ${dest}`, echo);
427
439
  /**
428
- * Ubuntu 22.04 jammy: eredita da noble
440
+ * Ubuntu 22.04 jammy: eredita da focal
429
441
  */
430
442
  }
431
443
  else if (distroUniqueId === 'jammy') {
432
444
  const dest = '/etc/penguins-eggs.d/distros/jammy';
433
- const noble = `${rootPen}/conf/distros/noble`;
434
- await exec(`cp -r ${noble}/* ${dest}`, echo);
445
+ const focal = `${rootPen}/conf/distros/focal`;
446
+ await exec(`cp -r ${focal}/* ${dest}`, echo);
435
447
  /**
436
448
  * Ubuntu noble: e la nuova baseline per ubuntu
437
449
  *
@@ -591,23 +603,26 @@ export default class Pacman {
591
603
  /**
592
604
  * Installa manPage
593
605
  */
594
- static async manPageInstall(verbose = false) {
595
- const manPageSrc = path.resolve(__dirname, '../../manpages/doc/man/eggs.roll.gz');
596
- if (fs.existsSync(manPageSrc)) {
597
- const man1Dir = '/usr/share/man/man1/';
598
- if (!fs.existsSync(man1Dir)) {
599
- exec(`mkdir ${man1Dir} -p`);
600
- }
601
- const manPageDest = man1Dir + 'eggs.1.gz';
602
- exec(`cp ${manPageSrc} ${manPageDest}`);
603
- if (shx.exec('which mandb', { silent: true }).stdout.trim() !== '') {
604
- await exec('mandb > /dev/null');
605
- if (verbose) {
606
- console.log('manPage eggs installed...');
607
- }
606
+ static async manpageInstall() {
607
+ const manpageSrc = path.resolve(__dirname, '../../manpages/doc/man/eggs.1.gz');
608
+ if (fs.existsSync(manpageSrc)) {
609
+ const manpageDest = `/usr/share/man/man1`;
610
+ if (!fs.existsSync(manpageDest)) {
611
+ await exec(`mkdir ${manpageDest} -p`);
608
612
  }
613
+ await exec(`cp ${manpageSrc} ${manpageDest}`);
614
+ // if (shx.exec('which mandb', { silent: true }).stdout.trim() !== '') {
615
+ // await exec('mandb > /dev/null')
616
+ // }
609
617
  }
610
618
  }
619
+ /**
620
+ * manpageRemove
621
+ */
622
+ static async manpageRemove() {
623
+ const manpageEggs = `/usr/share/man/man1/eggs.1.gz`;
624
+ await exec(`rm -rf ${manpageEggs}`);
625
+ }
611
626
  /**
612
627
  *
613
628
  * @param debPackage
@@ -675,6 +690,11 @@ export default class Pacman {
675
690
  }
676
691
  return installed;
677
692
  }
693
+ /**
694
+ *
695
+ * @param packageNpm
696
+ * @returns
697
+ */
678
698
  static async packageNpmLast(packageNpm = 'penguins-eggs') {
679
699
  return shx.exec('npm show ' + packageNpm + ' version', { silent: true }).stdout.trim();
680
700
  }
@@ -41,6 +41,10 @@ export default class Utils {
41
41
  * @param codenameId
42
42
  */
43
43
  static snapshotPrefix(distroId: string, codenameId: string): string;
44
+ /**
45
+ * isAppImage
46
+ */
47
+ static isAppImage(): boolean;
44
48
  /**
45
49
  * Detect if running inside a container (Docker or LXC)
46
50
  */
@@ -136,7 +140,7 @@ export default class Utils {
136
140
  *
137
141
  * @param volid
138
142
  */
139
- static getVolid(volid?: string): string;
143
+ static VolidTrim(volid?: string): string;
140
144
  /**
141
145
  * Return postfix
142
146
  * @param basename
@@ -243,10 +247,6 @@ export default class Utils {
243
247
  * cidr
244
248
  */
245
249
  static cidr(): string;
246
- /**
247
- *
248
- * broadcast
249
- */
250
250
  static broadcast(): string;
251
251
  /**
252
252
  * dns