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.
- package/.oclif.manifest.json +1 -1
- package/README.md +47 -760
- package/README.pdf +13450 -14838
- package/addons/eggs/adapt/applications/eggs-adapt.desktop +0 -0
- package/addons/eggs/pve/applications/eggs-pve.desktop +0 -0
- package/addons/eggs/rsupport/applications/eggs-rsupport.desktop +0 -0
- package/addons/eggs/theme/applications/install-system.desktop +0 -0
- package/addons/eggs/theme/livecd/simple.grub.main.cfg +3 -3
- package/assets/calamares/install-system.sh +0 -0
- package/assets/penguins-eggs.desktop +0 -0
- package/assets/penguins-krill.desktop +0 -0
- package/assets/penguins-links-add.desktop +0 -0
- package/assets/penguins-live-installer.desktop +0 -0
- package/bin/dev.js +0 -0
- package/conf/distros/alpine/calamares/calamares-modules/machineid-openrc/machineid-openrc.sh +0 -0
- package/conf/distros/buster/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
- package/conf/distros/buster/calamares/calamares-modules/dpkg-unsafe-io/dpkg-unsafe-io.sh +0 -0
- package/conf/distros/buster/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
- package/conf/distros/fedora/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +0 -0
- package/conf/distros/focal/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
- package/conf/distros/focal/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
- package/conf/distros/focal/calamares/libexec/calamares-aptsources.sh +0 -0
- package/conf/distros/focal/calamares/libexec/calamares-l10n-helper.sh +0 -0
- package/conf/distros/focal/calamares/libexec/calamares-logs-helper.sh +0 -0
- package/conf/distros/focal/calamares/libexec/calamares-nomodeset.sh +0 -0
- package/conf/distros/noble/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
- package/conf/distros/noble/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
- package/conf/distros/noble/calamares/libexec/calamares-aptsources.sh +0 -0
- package/conf/distros/noble/calamares/libexec/calamares-l10n-helper.sh +2 -1
- package/conf/distros/noble/calamares/libexec/calamares-logs-helper.sh +0 -0
- package/conf/distros/noble/calamares/libexec/calamares-nomodeset.sh +0 -0
- package/conf/distros/noble/calamares/settings.yml +1 -0
- package/conf/distros/opensuse/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +0 -0
- package/conf/distros/opensuse/calamares/settings.yml +0 -0
- package/conf/distros/opensuse/calamares/zstd2lzo.sh +0 -0
- package/conf/distros/trixie/calamares/calamares-modules/cleanup/cleanup.sh +1 -1
- package/conf/distros/trixie/calamares/calamares-modules/dpkg-unsafe-io/dpkg-unsafe-io.sh +0 -0
- package/conf/distros/trixie/calamares/calamares-modules/sources-yolk/sources-yolk.sh +0 -0
- package/conf/init/unattended.sh +0 -0
- package/dist/bin/dev.js +0 -0
- package/dist/bin/run.js +0 -0
- package/dist/classes/cli-autologin.d.ts +37 -4
- package/dist/classes/cli-autologin.js +125 -112
- package/dist/classes/daddy.js +4 -1
- package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +3 -2
- package/dist/classes/incubation/fisherman-helper/initcpio.js +25 -20
- package/dist/classes/incubation/incubator.d/manjaro.js +1 -0
- package/dist/classes/ovary.d/edit-live-fs.d.ts +1 -1
- package/dist/classes/ovary.d/edit-live-fs.js +15 -122
- package/dist/classes/ovary.d/fertilization.js +1 -1
- package/dist/classes/ovary.d/luks-home-support-systemd.d.ts +12 -0
- package/dist/classes/ovary.d/luks-home-support-systemd.js +70 -0
- package/dist/classes/ovary.d/luks-home-support.d.ts +1 -0
- package/dist/classes/ovary.d/luks-home-support.js +101 -24
- package/dist/classes/ovary.d/luks-home.js +33 -19
- package/dist/classes/ovary.d/luks-root.d.ts +1 -2
- package/dist/classes/ovary.d/luks-root.js +46 -27
- package/dist/classes/ovary.d/luks-shrink.d.ts +14 -0
- package/dist/classes/ovary.d/luks-shrink.js +86 -0
- package/dist/classes/ovary.d/produce.js +63 -21
- package/dist/classes/ovary.d.ts +3 -1
- package/dist/classes/ovary.js +3 -1
- package/dist/classes/utils.js +1 -1
- package/dist/classes/yolk.js +1 -1
- package/dist/commands/produce.js +11 -7
- package/dist/interfaces/calamares/i-calamares-branding.d.ts +56 -38
- package/dist/interfaces/calamares/i-calamares-branding.js +10 -0
- package/dist/krill/classes/prepare.d/users.js +1 -1
- package/dist/krill/classes/prepare.js +6 -2
- package/dist/krill/classes/sequence.d/fstab.js +1 -1
- package/dist/krill/classes/sequence.d/mkfs.js +1 -1
- package/dist/krill/classes/sequence.d/remove-homecrypt-hack.d.ts +13 -0
- package/dist/krill/classes/sequence.d/remove-homecrypt-hack.js +65 -0
- package/dist/krill/classes/sequence.d/unpackfs.js +2 -2
- package/dist/krill/classes/sequence.d.ts +3 -5
- package/dist/krill/classes/sequence.js +31 -29
- package/dist/krill/components/finished.js +2 -2
- package/dist/krill/components/install.js +2 -2
- package/dist/krill/components/keyboard.js +2 -2
- package/dist/krill/components/location.js +2 -2
- package/dist/krill/components/network.js +2 -2
- package/dist/krill/components/partitions.js +2 -2
- package/dist/krill/components/summary.js +2 -2
- package/dist/krill/components/users.js +2 -2
- package/dist/krill/components/welcome.js +2 -2
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.js +46 -0
- package/dracut/modules.d/00debug-shell/debug-hook.sh +0 -0
- package/dracut/modules.d/00debug-shell/module-setup.sh +0 -0
- package/dracut/modules.d/90block/block-cmdline.sh +0 -0
- package/dracut/modules.d/90block/module-setup.sh +0 -0
- package/dracut/modules.d/95iso-scan/iso-scan-fallback.sh +0 -0
- package/dracut/modules.d/95iso-scan/iso-scan.sh +0 -0
- package/dracut/modules.d/95iso-scan/module-setup.sh +0 -0
- package/dracut/modules.d/95luks-loop/luks-loop.sh +0 -0
- package/dracut/modules.d/95luks-loop/module-setup.sh +0 -0
- package/eui/eui-autostart-cinnamon.desktop +0 -0
- package/eui/eui-autostart-xfce.desktop +0 -0
- package/eui/eui-create-image.sh +0 -0
- package/eui/eui-start.sh +0 -0
- package/manpages/doc/man/eggs.1.gz +0 -0
- package/manpages/doc/man/eggs.html +8 -8
- package/package.json +130 -124
- package/perrisbrewery/scripts/postinst +0 -0
- package/perrisbrewery/scripts/postrm +0 -0
- package/perrisbrewery/scripts/preinst +0 -0
- package/perrisbrewery/scripts/prerm +0 -0
- package/scripts/99clean +0 -0
- package/scripts/adapt.sh +0 -0
- package/scripts/boot-encrypted-root.sh +0 -0
- package/scripts/bros/waydroid-helper.sh +0 -0
- package/scripts/lsb_release +0 -0
- package/scripts/mom.sh +0 -0
- package/scripts/mount-encrypted-home.sh +0 -0
- package/scripts/pve-live.service +0 -0
- package/scripts/pve-live.sh +0 -0
- package/scripts/restore_homecrypt_krill.sh +93 -0
- 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'
|
|
111
|
-
luksFile =
|
|
112
|
-
luksDevice = `/dev/mapper/${this.luksMappedName}
|
|
113
|
-
luksMountpoint = `/mnt
|
|
114
|
-
luksRootName = '';
|
|
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",
|
|
294
|
-
await this.executeStep("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",
|
|
297
|
-
await this.executeStep("grubcfg",
|
|
298
|
-
await this.executeStep("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",
|
|
292
|
+
await this.executeStep("Remove sources-yolk", 86, () => this.execCalamaresModule('sources-yolk-undo'));
|
|
302
293
|
}
|
|
303
|
-
await this.executeStep("Add/remove 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}`,
|
|
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.
|
|
25
|
-
version = calamares.
|
|
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.
|
|
26
|
-
version = calamares.
|
|
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.
|
|
29
|
-
version = calamares.
|
|
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.
|
|
29
|
-
version = calamares.
|
|
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.
|
|
29
|
-
version = calamares.
|
|
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.
|
|
33
|
-
version = calamares.
|
|
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.
|
|
25
|
-
version = calamares.
|
|
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.
|
|
39
|
-
version = calamares.
|
|
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.
|
|
29
|
-
version = calamares.
|
|
28
|
+
productName = calamares.strings.productName;
|
|
29
|
+
version = calamares.strings.version;
|
|
30
30
|
/**
|
|
31
31
|
* totale width=75
|
|
32
32
|
* step width=15
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -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
|
package/eui/eui-create-image.sh
CHANGED
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
45
|
+
penguins-eggs/25.12.8
|
|
46
46
|
$ eggs --help [COMMAND]
|
|
47
47
|
|
|
48
48
|
USAGE
|