penguins-eggs 25.12.7 → 25.12.16

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 (118) hide show
  1. package/.oclif.manifest.json +1 -1
  2. package/README.md +47 -760
  3. package/README.pdf +13450 -14838
  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/simple.grub.main.cfg +3 -3
  9. package/assets/calamares/install-system.sh +0 -0
  10. package/assets/penguins-eggs.desktop +0 -0
  11. package/assets/penguins-krill.desktop +0 -0
  12. package/assets/penguins-links-add.desktop +0 -0
  13. package/assets/penguins-live-installer.desktop +0 -0
  14. package/bin/dev.js +0 -0
  15. package/conf/distros/alpine/calamares/calamares-modules/machineid-openrc/machineid-openrc.sh +0 -0
  16. package/conf/distros/buster/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  17. package/conf/distros/buster/calamares/calamares-modules/dpkg-unsafe-io/dpkg-unsafe-io.sh +0 -0
  18. package/conf/distros/buster/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  19. package/conf/distros/fedora/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +0 -0
  20. package/conf/distros/focal/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  21. package/conf/distros/focal/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  22. package/conf/distros/focal/calamares/libexec/calamares-aptsources.sh +0 -0
  23. package/conf/distros/focal/calamares/libexec/calamares-l10n-helper.sh +0 -0
  24. package/conf/distros/focal/calamares/libexec/calamares-logs-helper.sh +0 -0
  25. package/conf/distros/focal/calamares/libexec/calamares-nomodeset.sh +0 -0
  26. package/conf/distros/noble/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  27. package/conf/distros/noble/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  28. package/conf/distros/noble/calamares/libexec/calamares-aptsources.sh +0 -0
  29. package/conf/distros/noble/calamares/libexec/calamares-l10n-helper.sh +2 -1
  30. package/conf/distros/noble/calamares/libexec/calamares-logs-helper.sh +0 -0
  31. package/conf/distros/noble/calamares/libexec/calamares-nomodeset.sh +0 -0
  32. package/conf/distros/noble/calamares/settings.yml +1 -0
  33. package/conf/distros/opensuse/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +0 -0
  34. package/conf/distros/opensuse/calamares/settings.yml +0 -0
  35. package/conf/distros/opensuse/calamares/zstd2lzo.sh +0 -0
  36. package/conf/distros/trixie/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
  37. package/conf/distros/trixie/calamares/calamares-modules/dpkg-unsafe-io/dpkg-unsafe-io.sh +0 -0
  38. package/conf/distros/trixie/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
  39. package/conf/init/unattended.sh +0 -0
  40. package/dist/bin/dev.js +0 -0
  41. package/dist/bin/run.js +0 -0
  42. package/dist/classes/cli-autologin.d.ts +37 -4
  43. package/dist/classes/cli-autologin.js +125 -112
  44. package/dist/classes/daddy.js +4 -1
  45. package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +3 -2
  46. package/dist/classes/incubation/fisherman-helper/initcpio.js +25 -20
  47. package/dist/classes/incubation/incubator.d/manjaro.js +1 -0
  48. package/dist/classes/ovary.d/edit-live-fs.d.ts +1 -1
  49. package/dist/classes/ovary.d/edit-live-fs.js +15 -122
  50. package/dist/classes/ovary.d/fertilization.js +1 -1
  51. package/dist/classes/ovary.d/luks-home-support-systemd.d.ts +12 -0
  52. package/dist/classes/ovary.d/luks-home-support-systemd.js +70 -0
  53. package/dist/classes/ovary.d/luks-home-support.d.ts +1 -0
  54. package/dist/classes/ovary.d/luks-home-support.js +101 -24
  55. package/dist/classes/ovary.d/luks-home.js +33 -19
  56. package/dist/classes/ovary.d/luks-root.d.ts +1 -2
  57. package/dist/classes/ovary.d/luks-root.js +46 -27
  58. package/dist/classes/ovary.d/luks-shrink.d.ts +14 -0
  59. package/dist/classes/ovary.d/luks-shrink.js +86 -0
  60. package/dist/classes/ovary.d/produce.js +63 -21
  61. package/dist/classes/ovary.d.ts +3 -1
  62. package/dist/classes/ovary.js +3 -1
  63. package/dist/classes/utils.js +1 -1
  64. package/dist/classes/yolk.js +1 -1
  65. package/dist/commands/produce.js +11 -7
  66. package/dist/interfaces/calamares/i-calamares-branding.d.ts +56 -38
  67. package/dist/interfaces/calamares/i-calamares-branding.js +10 -0
  68. package/dist/krill/classes/prepare.d/users.js +1 -1
  69. package/dist/krill/classes/prepare.js +6 -2
  70. package/dist/krill/classes/sequence.d/fstab.js +1 -1
  71. package/dist/krill/classes/sequence.d/mkfs.js +1 -1
  72. package/dist/krill/classes/sequence.d/remove-homecrypt-hack.d.ts +13 -0
  73. package/dist/krill/classes/sequence.d/remove-homecrypt-hack.js +65 -0
  74. package/dist/krill/classes/sequence.d/unpackfs.js +2 -2
  75. package/dist/krill/classes/sequence.d.ts +3 -5
  76. package/dist/krill/classes/sequence.js +31 -29
  77. package/dist/krill/components/finished.js +2 -2
  78. package/dist/krill/components/install.js +2 -2
  79. package/dist/krill/components/keyboard.js +2 -2
  80. package/dist/krill/components/location.js +2 -2
  81. package/dist/krill/components/network.js +2 -2
  82. package/dist/krill/components/partitions.js +2 -2
  83. package/dist/krill/components/summary.js +2 -2
  84. package/dist/krill/components/users.js +2 -2
  85. package/dist/krill/components/welcome.js +2 -2
  86. package/dist/lib/utils.d.ts +1 -0
  87. package/dist/lib/utils.js +46 -0
  88. package/dracut/modules.d/00debug-shell/debug-hook.sh +0 -0
  89. package/dracut/modules.d/00debug-shell/module-setup.sh +0 -0
  90. package/dracut/modules.d/90block/block-cmdline.sh +0 -0
  91. package/dracut/modules.d/90block/module-setup.sh +0 -0
  92. package/dracut/modules.d/95iso-scan/iso-scan-fallback.sh +0 -0
  93. package/dracut/modules.d/95iso-scan/iso-scan.sh +0 -0
  94. package/dracut/modules.d/95iso-scan/module-setup.sh +0 -0
  95. package/dracut/modules.d/95luks-loop/luks-loop.sh +0 -0
  96. package/dracut/modules.d/95luks-loop/module-setup.sh +0 -0
  97. package/eui/eui-autostart-cinnamon.desktop +0 -0
  98. package/eui/eui-autostart-xfce.desktop +0 -0
  99. package/eui/eui-create-image.sh +0 -0
  100. package/eui/eui-start.sh +0 -0
  101. package/manpages/doc/man/eggs.1.gz +0 -0
  102. package/manpages/doc/man/eggs.html +8 -8
  103. package/package.json +130 -124
  104. package/perrisbrewery/scripts/postinst +0 -0
  105. package/perrisbrewery/scripts/postrm +0 -0
  106. package/perrisbrewery/scripts/preinst +0 -0
  107. package/perrisbrewery/scripts/prerm +0 -0
  108. package/scripts/99clean +0 -0
  109. package/scripts/adapt.sh +0 -0
  110. package/scripts/boot-encrypted-root.sh +0 -0
  111. package/scripts/bros/waydroid-helper.sh +0 -0
  112. package/scripts/lsb_release +0 -0
  113. package/scripts/mom.sh +0 -0
  114. package/scripts/mount-encrypted-home.sh +0 -0
  115. package/scripts/pve-live.service +0 -0
  116. package/scripts/pve-live.sh +0 -0
  117. package/scripts/restore_homecrypt_krill.sh +93 -0
  118. package/scripts/resy +0 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ./src/krill/modules/remove-installer-link.ts
3
+ * penguins-eggs v.25.7.x / ecmascript 2020
4
+ * author: Piero Proietti
5
+ * email: piero.proietti@gmail.com
6
+ * license: MIT
7
+ * https://stackoverflow.com/questions/23876782/how-do-i-split-a-typescript-class-into-multiple-files
8
+ */
9
+ import fs from 'node:fs';
10
+ import path from 'path';
11
+ /**
12
+ * removeHomecryptHack
13
+ */
14
+ export default async function removeHomecryptHack() {
15
+ const targetRoot = this.installTarget;
16
+ // -------------------------------------------------------
17
+ // 1. PULIZIA SYSVINIT (Critica per il boot)
18
+ // -------------------------------------------------------
19
+ const inittabPath = path.join(targetRoot, 'etc/inittab');
20
+ if (fs.existsSync(inittabPath)) {
21
+ let content = fs.readFileSync(inittabPath, 'utf8');
22
+ // Cerca la riga modificata dal nostro hack
23
+ const hackRegex = /^1:.*tty1-unlock-wrapper\.sh.*$/m;
24
+ // Ripristina la riga standard (adatta questa stringa se usi parametri diversi per agetty)
25
+ const standardLine = '1:2345:respawn:/sbin/agetty --noclear tty1 linux';
26
+ if (hackRegex.test(content)) {
27
+ content = content.replace(hackRegex, standardLine);
28
+ fs.writeFileSync(inittabPath, content);
29
+ // console.log('- Restored standard inittab entry')
30
+ }
31
+ }
32
+ // -------------------------------------------------------
33
+ // 2. PULIZIA SYSTEMD (Cosmetica / Best Practice)
34
+ // -------------------------------------------------------
35
+ // Anche se non rompe il boot, rimuoviamo i file inutili
36
+ const systemdFiles = [
37
+ 'etc/systemd/system/mount-encrypted-home.service',
38
+ 'etc/systemd/system/local-fs.target.wants/mount-encrypted-home.service'
39
+ ];
40
+ systemdFiles.forEach(fileRelPath => {
41
+ const fullPath = path.join(targetRoot, fileRelPath);
42
+ if (fs.existsSync(fullPath)) {
43
+ try {
44
+ fs.unlinkSync(fullPath);
45
+ }
46
+ catch (e) { /* ignore */ }
47
+ }
48
+ });
49
+ // -------------------------------------------------------
50
+ // 3. RIMOZIONE SCRIPT COMUNI
51
+ // -------------------------------------------------------
52
+ const scriptFiles = [
53
+ 'usr/local/bin/tty1-unlock-wrapper.sh',
54
+ 'usr/local/bin/mount-encrypted-home.sh'
55
+ ];
56
+ scriptFiles.forEach(fileRelPath => {
57
+ const fullPath = path.join(targetRoot, fileRelPath);
58
+ if (fs.existsSync(fullPath)) {
59
+ try {
60
+ fs.unlinkSync(fullPath);
61
+ }
62
+ catch (e) { /* ignore */ }
63
+ }
64
+ });
65
+ }
@@ -17,8 +17,8 @@ export default async function unpackfs() {
17
17
  const cmd = `unsquashfs -d ${this.installTarget} -f ${squafsPath} ${this.toNull}`;
18
18
  // Usiamo echo false per evitare di intasare il log con migliaia di file
19
19
  const echoNo = Utils.setEcho(false);
20
- console.log('Unpacking filesystem (this may take a while)...');
20
+ // console.log('Unpacking filesystem (this may take a while)...')
21
21
  // Esecuzione
22
22
  await exec(cmd, echoNo);
23
- console.log('Filesystem unpacked successfully.');
23
+ // console.log('Filesystem unpacked successfully.')
24
24
  }
@@ -32,6 +32,7 @@ import grubcfg from './sequence.d/grubcfg.js';
32
32
  import bootloader from './sequence.d/bootloader.js';
33
33
  import packages from './sequence.d/packages.js';
34
34
  import removeInstallerLink from './sequence.d/remove_installer_link.js';
35
+ import removeHomecryptHack from './sequence.d/remove-homecrypt-hack.js';
35
36
  import initramfsCfg from './sequence.d/initramfs_cfg.js';
36
37
  import initramfs from './sequence.d/initramfs.js';
37
38
  import delLiveUser from './sequence.d/del_live_user.js';
@@ -63,6 +64,7 @@ export default class Sequence {
63
64
  bootloader: typeof bootloader;
64
65
  packages: typeof packages;
65
66
  removeInstallerLink: typeof removeInstallerLink;
67
+ removeHomecryptHack: typeof removeHomecryptHack;
66
68
  initramfsCfg: typeof initramfsCfg;
67
69
  initramfs: typeof initramfs;
68
70
  delLiveUser: typeof delLiveUser;
@@ -92,13 +94,9 @@ export default class Sequence {
92
94
  settings: Settings;
93
95
  remix: IRemix;
94
96
  distro: IDistro;
95
- luksMappedName: string;
96
- luksFile: string;
97
- luksDevice: string;
98
- luksMountpoint: string;
99
97
  luksRootName: string;
98
+ cryptedHomeDevice: string;
100
99
  is_clone: boolean;
101
- is_crypted_clone: boolean;
102
100
  unattended: boolean;
103
101
  nointeractive: boolean;
104
102
  chroot: boolean;
@@ -6,6 +6,8 @@
6
6
  * email: piero.proietti@gmail.com
7
7
  * license: MIT
8
8
  */
9
+ import path from 'path';
10
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
9
11
  import Settings from '../../classes/settings.js';
10
12
  import React from 'react';
11
13
  import { render, Box, Text } from 'ink';
@@ -42,6 +44,7 @@ import grubcfg from './sequence.d/grubcfg.js';
42
44
  import bootloader from './sequence.d/bootloader.js';
43
45
  import packages from './sequence.d/packages.js';
44
46
  import removeInstallerLink from './sequence.d/remove_installer_link.js';
47
+ import removeHomecryptHack from './sequence.d/remove-homecrypt-hack.js';
45
48
  import initramfsCfg from './sequence.d/initramfs_cfg.js';
46
49
  import initramfs from './sequence.d/initramfs.js';
47
50
  import delLiveUser from './sequence.d/del_live_user.js';
@@ -77,6 +80,7 @@ export default class Sequence {
77
80
  bootloader = bootloader;
78
81
  packages = packages;
79
82
  removeInstallerLink = removeInstallerLink;
83
+ removeHomecryptHack = removeHomecryptHack;
80
84
  initramfsCfg = initramfsCfg;
81
85
  initramfs = initramfs;
82
86
  delLiveUser = delLiveUser;
@@ -107,13 +111,13 @@ export default class Sequence {
107
111
  settings = {};
108
112
  remix = {};
109
113
  distro = {};
110
- luksMappedName = 'luks-volume'; // encrypted ISOs
111
- luksFile = ``; // encrypted ISOs
112
- luksDevice = `/dev/mapper/${this.luksMappedName}`; // encrypted ISOs
113
- luksMountpoint = `/mnt`; // encrypted ISOs
114
- luksRootName = ''; // installation encrypted
114
+ // luksMappedName = 'luks-volume' // encrypted ISOs
115
+ // luksFile = `` // encrypted ISOs
116
+ // luksDevice = `/dev/mapper/${this.luksMappedName}` // encrypted ISOs
117
+ // luksMountpoint = `/mnt`
118
+ luksRootName = '';
119
+ cryptedHomeDevice = '/dev/mapper/live-home';
115
120
  is_clone = fs.existsSync('/etc/penguins-eggs.d/is_clone');
116
- is_crypted_clone = fs.existsSync('/etc/penguins-eggs.d/is_crypted_clone');
117
121
  unattended = false;
118
122
  nointeractive = false;
119
123
  chroot = false;
@@ -141,7 +145,7 @@ export default class Sequence {
141
145
  this.devices.swap = {};
142
146
  this.distro = new Distro();
143
147
  this.efi = fs.existsSync('/sys/firmware/efi/efivars');
144
- this.luksFile = `${this.distro.liveMediumPath}live/${this.luksMappedName}`;
148
+ // this.luksFile = `${this.distro.liveMediumPath}live/${this.luksMappedName}`
145
149
  this.luksRootName = `${this.distro.distroLike}_root`;
146
150
  this.luksRootName = this.luksRootName.toLowerCase(); // installation encrypted
147
151
  }
@@ -233,19 +237,6 @@ export default class Sequence {
233
237
  // 5. Core system configuration
234
238
  await this.executeStep("machineid", 46, () => this.machineId());
235
239
  await this.executeStep("Creating fstab", 49, () => this.fstab(this.partitions.installationDevice));
236
- // 6. Crypted clone restoration
237
- if (this.is_crypted_clone) {
238
- await this.executeStep("Restore private data from crypted clone", 55, async () => {
239
- if (fs.existsSync(this.luksFile)) {
240
- const cmd = `eggs syncfrom --rootdir /tmp/calamares-krill-root/ --file ${this.luksFile}`;
241
- await exec(cmd, Utils.setEcho(true));
242
- this.is_clone = true;
243
- }
244
- else {
245
- await Utils.pressKeyToExit(`Cannot find luks-volume file ${this.luksFile}`);
246
- }
247
- });
248
- }
249
240
  // 7. Network and hostname
250
241
  await this.executeStep("Network configuration", 61, () => this.networkCfg());
251
242
  await this.executeStep("Create hostname", 64, () => this.hostname(this.network.domain));
@@ -290,28 +281,37 @@ export default class Sequence {
290
281
  // 10. Always remove CLI autologin
291
282
  await this.executeStep("Remove autologin CLI", 80, () => this.cliAutologin.remove(this.installTarget));
292
283
  // 10. mkinitramfs
293
- await this.executeStep("initramfs configure", 86, () => this.initramfsCfg(this.partitions.installationDevice));
294
- await this.executeStep("initramfs", 87, () => this.initramfs());
284
+ await this.executeStep("initramfs configure", 81, () => this.initramfsCfg(this.partitions.installationDevice));
285
+ await this.executeStep("initramfs", 82, () => this.initramfs());
295
286
  // 11. Bootloader configuration
296
- await this.executeStep("bootloader-config", 81, () => this.bootloaderConfig());
297
- await this.executeStep("grubcfg", 82, () => this.grubcfg());
298
- await this.executeStep("bootloader", 83, () => this.bootloader());
287
+ await this.executeStep("bootloader-config", 83, () => this.bootloaderConfig());
288
+ await this.executeStep("grubcfg", 84, () => this.grubcfg());
289
+ await this.executeStep("bootloader", 85, () => this.bootloader());
299
290
  // 12. Final system setup
300
291
  if (this.distro.familyId === 'debian') {
301
- await this.executeStep("Remove sources-yolk", 84, () => this.execCalamaresModule('sources-yolk-undo'));
292
+ await this.executeStep("Remove sources-yolk", 86, () => this.execCalamaresModule('sources-yolk-undo'));
302
293
  }
303
- await this.executeStep("Add/remove packages", 85, () => this.packages());
294
+ await this.executeStep("Add/remove packages", 87, () => this.packages());
304
295
  await this.executeStep("Remove GUI installer link", 88, () => this.removeInstallerLink());
305
296
  await this.executeStep("Cleanup", 89, async () => {
306
297
  await exec(`rm -f ${this.installTarget}/etc/penguins-eggs.d/is_clone`);
307
- await exec(`rm -f ${this.installTarget}/etc/penguins-eggs.d/is_crypted_clone`);
308
298
  });
299
+ // 6. homecrypt clone restoration
300
+ if (fs.existsSync(this.cryptedHomeDevice)) {
301
+ await this.executeStep("Restoring data from homecrypt", 90, async () => {
302
+ let restoreHomeCrypt = path.resolve(__dirname, '../../../scripts/restore_homecrypt_krill.sh');
303
+ await exec(`${restoreHomeCrypt} ${this.cryptedHomeDevice} ${this.installTarget}`);
304
+ });
305
+ await this.executeStep("Remove Homecrypt hack", 91, async () => {
306
+ await this.removeHomecryptHack();
307
+ });
308
+ }
309
309
  // 13. Custom final steps
310
310
  const cfs = new CFS();
311
311
  const steps = await cfs.steps();
312
312
  if (steps.length > 0) {
313
313
  for (const step of steps) {
314
- await this.executeStep(`running ${step}`, 90, () => this.execCalamaresModule(step));
314
+ await this.executeStep(`running ${step}`, 92, () => this.execCalamaresModule(step));
315
315
  }
316
316
  }
317
317
  // 14- Handle chroot if requested
@@ -319,6 +319,8 @@ export default class Sequence {
319
319
  const message = `You are in chroot mode under ${this.installTarget}, type "exit" to exit.`;
320
320
  await this.emergencyShell(message);
321
321
  }
322
+ // Before to unmount
323
+ await exec('sync');
322
324
  // 15. Unmounting
323
325
  await this.executeStep("umount Virtual File System", 96, () => this.umountVfs());
324
326
  await this.executeStep("umount File system", 99, () => this.umountFs());
@@ -21,8 +21,8 @@ export default function Finished({ installationDevice = '', hostName = '', userN
21
21
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
22
22
  const branding = settings.branding;
23
23
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
24
- productName = calamares.string_product_name;
25
- version = calamares.string_product_version;
24
+ productName = calamares.strings.productName;
25
+ version = calamares.strings.version;
26
26
  /**
27
27
  * totale width=75
28
28
  * step width=15
@@ -22,8 +22,8 @@ export default function Install({ message = "Install", percent = 0, spinner = fa
22
22
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
23
23
  const branding = settings.branding;
24
24
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
25
- productName = calamares.string_product_name;
26
- version = calamares.string_product_version;
25
+ productName = calamares.strings.productName;
26
+ version = calamares.strings.version;
27
27
  let barLen = 53;
28
28
  let progress = Math.round(barLen * percent / 100);
29
29
  let todo = barLen - progress;
@@ -25,8 +25,8 @@ export default function Keyboard({ keyboardModel = '', keyboardLayout = '', keyb
25
25
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
26
26
  const branding = settings.branding;
27
27
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
28
- productName = calamares.string_product_name;
29
- version = calamares.string_product_version;
28
+ productName = calamares.strings.productName;
29
+ version = calamares.strings.version;
30
30
  /**
31
31
  * totale width=75
32
32
  * step width=15
@@ -25,8 +25,8 @@ export default function Location({ region = '', zone = '', language = '', dateNu
25
25
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
26
26
  const branding = settings.branding;
27
27
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
28
- productName = calamares.string_product_name;
29
- version = calamares.string_product_version;
28
+ productName = calamares.strings.productName;
29
+ version = calamares.strings.version;
30
30
  /**
31
31
  * totale width=75
32
32
  * step width=15
@@ -25,8 +25,8 @@ export default function Network({ iface, addressType, address, netmask, gateway,
25
25
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
26
26
  const branding = settings.branding;
27
27
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
28
- productName = calamares.string_product_name;
29
- version = calamares.string_product_version;
28
+ productName = calamares.strings.productName;
29
+ version = calamares.strings.version;
30
30
  /**
31
31
  * totale width=75
32
32
  * step width=15
@@ -29,8 +29,8 @@ export default function Partitions({ installationDevice, installationMode, files
29
29
  brandingFile = configRoot + 'branding/' + branding + '/branding.desc';
30
30
  if (fs.existsSync(brandingFile)) {
31
31
  const calamares = yaml.load(fs.readFileSync(brandingFile, 'utf-8'));
32
- productName = calamares.string_product_name;
33
- version = calamares.string_product_version;
32
+ productName = calamares.strings.productName;
33
+ version = calamares.strings.version;
34
34
  }
35
35
  }
36
36
  /**
@@ -21,8 +21,8 @@ export default function Summary({ username = '', password = '', rootPassword = '
21
21
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
22
22
  const branding = settings.branding;
23
23
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
24
- productName = calamares.string_product_name;
25
- version = calamares.string_product_version;
24
+ productName = calamares.strings.productName;
25
+ version = calamares.strings.version;
26
26
  /**
27
27
  * totale width=75
28
28
  * step width=15
@@ -35,8 +35,8 @@ export default function Users({ username, fullname, password, rootPassword, host
35
35
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
36
36
  const branding = settings.branding;
37
37
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
38
- productName = calamares.string_product_name;
39
- version = calamares.string_product_version;
38
+ productName = calamares.strings.productName;
39
+ version = calamares.strings.version;
40
40
  /**
41
41
  * totale width=75
42
42
  * step width=15
@@ -25,8 +25,8 @@ export default function Welcome({ language = '' }) {
25
25
  const settings = yaml.load(fs.readFileSync(configRoot + 'settings.conf', 'utf-8'));
26
26
  const branding = settings.branding;
27
27
  const calamares = yaml.load(fs.readFileSync(configRoot + 'branding/' + branding + '/branding.desc', 'utf-8'));
28
- productName = calamares.string_product_name;
29
- version = calamares.string_product_version;
28
+ productName = calamares.strings.productName;
29
+ version = calamares.strings.version;
30
30
  /**
31
31
  * totale width=75
32
32
  * step width=15
@@ -48,6 +48,7 @@ export declare const shx: {
48
48
  test: (flag: string, pathToCheck: string) => boolean;
49
49
  which: (cmd: string) => string | null;
50
50
  ln: (flag: string, target: string, link: string) => void;
51
+ ls: (arg1?: string | string[], arg2?: string | string[]) => string[];
51
52
  exec: (command: string, options?: {
52
53
  silent?: boolean;
53
54
  }) => ShellExecResult;
package/dist/lib/utils.js CHANGED
@@ -178,6 +178,52 @@ export const shx = {
178
178
  }
179
179
  fs.symlinkSync(target, link);
180
180
  },
181
+ ls: (arg1, arg2) => {
182
+ let options = '';
183
+ let paths = [];
184
+ // Rilevamento argomenti: ls('-R', path) vs ls(path)
185
+ if (typeof arg1 === 'string' && arg1.startsWith('-')) {
186
+ options = arg1;
187
+ // Se c'è arg2 lo usa, altrimenti default a '.'
188
+ paths = arg2 ? (Array.isArray(arg2) ? arg2 : [arg2]) : ['.'];
189
+ }
190
+ else {
191
+ // Nessuna opzione, arg1 sono i path. Se null, default a '.'
192
+ paths = arg1 ? (Array.isArray(arg1) ? arg1 : [arg1]) : ['.'];
193
+ }
194
+ const recursive = options.includes('R');
195
+ let results = [];
196
+ paths.forEach(p => {
197
+ if (!fs.existsSync(p))
198
+ return;
199
+ const stat = fs.statSync(p);
200
+ if (stat.isDirectory()) {
201
+ if (recursive) {
202
+ // Funzione ricorsiva interna
203
+ const walk = (dir) => {
204
+ const files = fs.readdirSync(dir);
205
+ files.forEach(f => {
206
+ const fullPath = path.join(dir, f);
207
+ results.push(fullPath); // Aggiunge il path completo
208
+ if (fs.statSync(fullPath).isDirectory()) {
209
+ walk(fullPath);
210
+ }
211
+ });
212
+ };
213
+ walk(p);
214
+ }
215
+ else {
216
+ // Comportamento standard: ritorna solo i nomi dei file nella cartella
217
+ results = results.concat(fs.readdirSync(p));
218
+ }
219
+ }
220
+ else {
221
+ // È un file singolo
222
+ results.push(p);
223
+ }
224
+ });
225
+ return results;
226
+ },
181
227
  exec: (command, options = {}) => {
182
228
  const env = getCleanEnv();
183
229
  const spawnOpts = {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/eui/eui-start.sh CHANGED
File without changes
Binary file
@@ -6,12 +6,12 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
7
  </head>
8
8
  <body>
9
- <h1>eggs(1) -- the reproductive system of penguins: eggs v25.12.7</h1>
9
+ <h1>eggs(1) -- the reproductive system of penguins: eggs v25.12.8</h1>
10
10
  <h1>SYNOPSIS</h1>
11
11
  <p>eggs is a console utility, in active development, who let you to remaster your system and redistribuite it as live ISO image.</p>
12
12
  <h1>INSTALL</h1>
13
13
  <p>penguins-eggs as an AppImage, it can be installed on all supported distributions. Download it from https://github.com/pieroproietti/penguins-eggs/releases, then run the following commands:</p>
14
- <pre><code>$ chmod +x penguins-eggs_25.12.7-1_amd64-x86_64.AppImage
14
+ <pre><code>$ chmod +x penguins-eggs_25.12.8-1_amd64-x86_64.AppImage
15
15
  $ sudo mv /usr/local/bin
16
16
  $ sudo eggs setup
17
17
  </code></pre>
@@ -19,30 +19,30 @@ $ sudo eggs setup
19
19
  <pre><code>$ doas apk add penguins-eggs@testing
20
20
  </code></pre>
21
21
  <p>AlmaLinux/RockyLinux</p>
22
- <pre><code>$ sudo dnf install ./penguins-eggs_25.12.7-1_amd64-1rocky9.5..x86_64.rpm
22
+ <pre><code>$ sudo dnf install ./penguins-eggs_25.12.8-1_amd64-1rocky9.5..x86_64.rpm
23
23
 
24
24
  </code></pre>
25
25
  <p>Arch</p>
26
26
  <pre><code>$ sudo pacman -S penguins-eggs
27
- $ sudo pacman -U penguins-eggs_25.12.7-1_amd64-1-x86_64.pkg.tar.zst
27
+ $ sudo pacman -U penguins-eggs_25.12.8-1_amd64-1-x86_64.pkg.tar.zst
28
28
  </code></pre>
29
29
  <p>Debian/Devuan/Ubuntu</p>
30
30
  <pre><code>$ sudo apt install penguins-eggs
31
- $ sudo dpkg -i penguins-eggs_25.12.7-1_amd64.deb
31
+ $ sudo dpkg -i penguins-eggs_25.12.8-1_amd64.deb
32
32
  </code></pre>
33
33
  <p>Fedora</p>
34
- <pre><code>$ sudo dnf install ./penguins-eggs_25.12.7-1_amd64-1fedora.x86_64.rpm
34
+ <pre><code>$ sudo dnf install ./penguins-eggs_25.12.8-1_amd64-1fedora.x86_64.rpm
35
35
  </code></pre>
36
36
  <p>Manjaro</p>
37
37
  <pre><code>$ sudo pamac install penguins-eggs
38
38
  </code></pre>
39
39
  <p>OpenMamba</p>
40
- <pre><code>$ sudo dnf install ./penguins-eggs_25.12.7-1_amd64-1mamba.x86_64.rpm
40
+ <pre><code>$ sudo dnf install ./penguins-eggs_25.12.8-1_amd64-1mamba.x86_64.rpm
41
41
  </code></pre>
42
42
  <h1>USAGE</h1>
43
43
  <pre><code>$ eggs (-v|--version|version)
44
44
 
45
- penguins-eggs/25.12.7
45
+ penguins-eggs/25.12.8
46
46
  $ eggs --help [COMMAND]
47
47
 
48
48
  USAGE