penguins-eggs 25.8.28 → 25.9.3
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 +36 -31
- package/README.pdf +2720 -2021
- 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/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/bionic/calamares/calamares-modules/after-bootloader/after-bootloader.sh +0 -0
- package/conf/distros/bionic/calamares/calamares-modules/before-bootloader/before-bootloader.sh +0 -0
- package/conf/distros/bionic/calamares/calamares-modules/before-bootloader-mkdirs/before-bootloader-mkdirs.sh +0 -0
- package/conf/distros/bionic/calamares/calamares-modules/bug/bug.sh +0 -0
- package/conf/distros/bionic/calamares/calamares-modules/grubcfg/main.py +0 -0
- package/conf/distros/buster/calamares/calamares-modules/cleanup/cleanup.sh +0 -0
- 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/openmamba/calamares/modules/users.yml +1 -1
- 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/init/unattended.sh +0 -0
- package/dist/classes/incubation/incubator.js +5 -1
- package/dist/classes/ovary.d/initrd.js +4 -4
- package/dist/classes/ovary.d/kernel-copy.js +1 -1
- package/dist/classes/ovary.d/make-efi.js +8 -8
- package/dist/classes/ovary.d/make-squashfs.js +1 -1
- package/dist/classes/ovary.d/produce.js +2 -2
- package/dist/classes/pxe.js +1 -9
- package/dist/classes/utils.d/kernel.js +2 -1
- package/dist/classes/utils.d.ts +2 -1
- package/dist/classes/utils.js +19 -5
- package/dist/commands/export/pkg.js +3 -3
- package/dist/krill/classes/sequence.d/add_user.js +6 -0
- package/dist/krill/classes/sequence.d/bootloader.js +27 -4
- package/dist/krill/classes/sequence.d/bootloader_config.js +60 -8
- package/dist/krill/classes/sequence.d/mkfs.js +8 -4
- package/dist/krill/classes/sequence.d/mount_vfs.js +24 -5
- package/dist/krill/classes/sequence.d/partition.d/uefi_standard.js +7 -5
- package/dist/krill/classes/sequence.js +8 -8
- package/dist/{penguins-eggs_25.8.28-1_i386.deb → penguins-eggs_25.9.3-1_amd64.deb} +0 -0
- package/dist/penguins-eggs_25.9.3-1_amd64.deb.sha256 +1 -0
- package/dist/{penguins-eggs_25.8.28-1_arm64.deb → penguins-eggs_25.9.3-1_arm64.deb} +0 -0
- package/dist/penguins-eggs_25.9.3-1_arm64.deb.sha256 +1 -0
- package/dist/{penguins-eggs_25.8.28-1_amd64.deb → penguins-eggs_25.9.3-1_i386.deb} +0 -0
- package/dist/penguins-eggs_25.9.3-1_i386.deb.sha256 +1 -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/package.json +131 -125
- 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/perrisbrewery/template/dependencies-bionic.yaml +10 -7
- package/pods/almalinux.sh +0 -0
- package/pods/archlinux.sh +0 -0
- package/pods/ci/kernel-overlay-install.sh +0 -0
- package/pods/ci/minimal/almalinux-container2host.sh +0 -0
- package/pods/ci/minimal/archlinux-container2host.sh +0 -0
- package/pods/ci/minimal/debian-container2host.sh +0 -0
- package/pods/ci/minimal/fedora-container2host.sh +0 -0
- package/pods/ci/minimal/manjaro-container2host.sh +0 -0
- package/pods/ci/minimal/opensuse-container2host.sh +0 -0
- package/pods/ci/penguins-eggs-execute.sh +0 -0
- package/pods/ci/penguins-eggs-install.sh +0 -0
- package/pods/ci/run +0 -0
- package/pods/ci/run-on-almalinux.sh +0 -0
- package/pods/ci/run-on-archlinux.sh +0 -0
- package/pods/ci/run-on-debian.sh +0 -0
- package/pods/ci/run-on-devuan.sh +0 -0
- package/pods/ci/run-on-fedora.sh +0 -0
- package/pods/ci/run-on-manjaro.sh +0 -0
- package/pods/ci/run-on-opensuse.sh +0 -0
- package/pods/ci/run-on-rockylinux.sh +0 -0
- package/pods/ci/run-on-ubuntu.sh +0 -0
- package/pods/debian.sh +0 -0
- package/pods/devuan.sh +0 -0
- package/pods/fedora.sh +0 -0
- package/pods/lmde.sh +0 -0
- package/pods/manjaro.sh +0 -0
- package/pods/opensuse.sh +0 -0
- package/pods/podman.command.sh +0 -0
- package/pods/rocky.sh +0 -0
- package/pods/run-build-packages-debs.sh +0 -0
- package/pods/run-create-debs.sh +0 -0
- package/pods/ubuntu.sh +0 -0
- package/scripts/99clean +0 -0
- package/scripts/adapt.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/pve-live.service +0 -0
- package/scripts/pve-live.sh +0 -0
- package/scripts/resy +0 -0
- package/dist/penguins-eggs_25.8.28-1_amd64.deb.sha256 +0 -1
- package/dist/penguins-eggs_25.8.28-1_arm64.deb.sha256 +0 -1
- package/dist/penguins-eggs_25.8.28-1_i386.deb.sha256 +0 -1
|
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/bin/dev.js
CHANGED
|
File without changes
|
package/conf/distros/alpine/calamares/calamares-modules/machineid-openrc/machineid-openrc.sh
CHANGED
|
File without changes
|
package/conf/distros/bionic/calamares/calamares-modules/after-bootloader/after-bootloader.sh
CHANGED
|
File without changes
|
package/conf/distros/bionic/calamares/calamares-modules/before-bootloader/before-bootloader.sh
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -60,7 +60,7 @@ defaultGroups:
|
|
|
60
60
|
# Autologin causes a user to become automatically logged in to
|
|
61
61
|
# the desktop environment on boot.
|
|
62
62
|
# Disable when your Distribution does not require such a group.
|
|
63
|
-
autologinGroup: autologin
|
|
63
|
+
# autologinGroup: autologin
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
### ROOT AND SUDO
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/conf/init/unattended.sh
CHANGED
|
File without changes
|
|
@@ -360,8 +360,12 @@ export default class Incubator {
|
|
|
360
360
|
sudoers() {
|
|
361
361
|
let live = 'live';
|
|
362
362
|
let content = `${live} ALL=(ALL) NOPASSWD: /usr/bin/calamares`;
|
|
363
|
+
content = `# ${live} ALL=(ALL) NOPASSWD: /usr/bin/calamares`;
|
|
363
364
|
let fname = '/etc/sudoers.d/calamares';
|
|
364
|
-
|
|
365
|
+
// su bionic fa un macello
|
|
366
|
+
if (this.distro.codenameLikeId !== 'bionic') {
|
|
367
|
+
fs.writeFileSync(fname, content, 'utf-8');
|
|
368
|
+
}
|
|
365
369
|
}
|
|
366
370
|
}
|
|
367
371
|
/**
|
|
@@ -17,7 +17,7 @@ const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
|
17
17
|
* initrdAlpine
|
|
18
18
|
*/
|
|
19
19
|
export async function initrdAlpine() {
|
|
20
|
-
Utils.warning(`creating ${path.basename(this.initrd)} Alpine on ISO/live`);
|
|
20
|
+
Utils.warning(`creating ${path.basename(this.initrd)} Alpine on (ISO)/live`);
|
|
21
21
|
let initrdImg = Utils.initrdImg();
|
|
22
22
|
initrdImg = initrdImg.slice(Math.max(0, initrdImg.lastIndexOf('/') + 1));
|
|
23
23
|
const pathConf = path.resolve(__dirname, `../../../mkinitfs/live.conf`);
|
|
@@ -27,7 +27,7 @@ export async function initrdAlpine() {
|
|
|
27
27
|
* initrdArch
|
|
28
28
|
*/
|
|
29
29
|
export async function initrdArch() {
|
|
30
|
-
Utils.warning(`creating ${path.basename(this.initrd)} using mkinitcpio on ISO/live`);
|
|
30
|
+
Utils.warning(`creating ${path.basename(this.initrd)} using mkinitcpio on (ISO)/live`);
|
|
31
31
|
let dirConf = 'arch';
|
|
32
32
|
let tool = 'archiso';
|
|
33
33
|
let hookSrc = '/usr/lib/initcpio/hooks/archiso_pxe_http';
|
|
@@ -64,7 +64,7 @@ export async function initrdArch() {
|
|
|
64
64
|
* initrdDebian
|
|
65
65
|
*/
|
|
66
66
|
export async function initrdDebian(verbose = false) {
|
|
67
|
-
Utils.warning(`creating ${this.initrd} using mkinitramfs on ISO/live`);
|
|
67
|
+
Utils.warning(`creating ${this.initrd} using mkinitramfs on (ISO)/live`);
|
|
68
68
|
let isCrypted = false;
|
|
69
69
|
if (fs.existsSync('/etc/crypttab')) {
|
|
70
70
|
isCrypted = true;
|
|
@@ -79,7 +79,7 @@ export async function initrdDebian(verbose = false) {
|
|
|
79
79
|
* initrdDracut) Almalinux/Fedora/Openmamba/Opensuse/Rocky/Voidlinux
|
|
80
80
|
*/
|
|
81
81
|
export async function initrdDracut() {
|
|
82
|
-
Utils.warning(`creating ${path.basename(this.initrd)} using dracut on ISO/live`);
|
|
82
|
+
Utils.warning(`creating ${path.basename(this.initrd)} using dracut on (ISO)/live`);
|
|
83
83
|
const prefix = this.settings.config.snapshot_prefix;
|
|
84
84
|
const confdir = '--confdir ' + path.resolve(__dirname, `../../../dracut/dracut.conf.d`);
|
|
85
85
|
// const dracutdir='--dracutdir /opt/penguins-eggs/dracut'
|
|
@@ -17,6 +17,6 @@ const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
|
17
17
|
* kernelCopy
|
|
18
18
|
*/
|
|
19
19
|
export async function kernelCopy() {
|
|
20
|
-
Utils.warning(`copying ${path.basename(this.vmlinuz)} on ISO/live`);
|
|
20
|
+
Utils.warning(`copying ${path.basename(this.vmlinuz)} on (ISO)/live`);
|
|
21
21
|
await exec(`cp ${this.vmlinuz} ${this.settings.iso_work}live/`, this.echo);
|
|
22
22
|
}
|
|
@@ -57,9 +57,9 @@ export async function makeEfi(theme = 'eggs') {
|
|
|
57
57
|
const efiMemdiskDir = path.join(efiPath, '/memdisk/');
|
|
58
58
|
const efiImgMnt = path.join(efiPath, 'mnt');
|
|
59
59
|
const isoDir = this.settings.iso_work;
|
|
60
|
-
// create (
|
|
60
|
+
// create (ISO)/boot/grub
|
|
61
61
|
await exec(`mkdir ${isoDir}/boot/grub/${Utils.uefiFormat()} -p`, this.echo);
|
|
62
|
-
// create (
|
|
62
|
+
// create (ISO)/EFI
|
|
63
63
|
await exec(`mkdir ${isoDir}/EFI/boot -p`, this.echo);
|
|
64
64
|
await exec(`cp ${shimEfi} ${isoDir}/EFI/boot/${bootEfiName()}`, this.echo);
|
|
65
65
|
await exec(`cp ${grubEfi} ${isoDir}/EFI/boot/${grubEfiName()}`, this.echo);
|
|
@@ -91,9 +91,9 @@ export async function makeEfi(theme = 'eggs') {
|
|
|
91
91
|
cfgSeekerUsbText += seeker;
|
|
92
92
|
Utils.write(cfgSeekerUsb, cfgSeekerUsbText);
|
|
93
93
|
/**
|
|
94
|
-
* create grub.cfg (bridge) on (
|
|
94
|
+
* create grub.cfg (bridge) on (ISO)/boot/grub/x86_64-efi/grub.cfg
|
|
95
95
|
*/
|
|
96
|
-
Utils.warning(`creating grub.cfg bridge to main. (
|
|
96
|
+
Utils.warning(`creating grub.cfg bridge to main. (ISO)/boot/grub/${Utils.uefiFormat()}`);
|
|
97
97
|
let cfgBridge = `${isoDir}/boot/grub/${Utils.uefiFormat()}/grub.cfg`;
|
|
98
98
|
let cfgBridgeText = `# grub.cfg bridge\n`;
|
|
99
99
|
cfgBridgeText += `# created on ${cfgBridge}\n`;
|
|
@@ -109,7 +109,7 @@ export async function makeEfi(theme = 'eggs') {
|
|
|
109
109
|
pathBait = path.join(isoDir, '/EFI/ubuntu');
|
|
110
110
|
}
|
|
111
111
|
await exec(`mkdir ${pathBait} -p`, this.echo);
|
|
112
|
-
Utils.warning(`creating grub.cfg seeker ISO/DVD on (
|
|
112
|
+
Utils.warning(`creating grub.cfg seeker ISO/DVD on (ISO)/EFI/${path.basename(pathBait)}`);
|
|
113
113
|
let cfgBait = path.join(pathBait, '/grub.cfg');
|
|
114
114
|
let cfgBaitText = '';
|
|
115
115
|
cfgBaitText += `\n`;
|
|
@@ -166,12 +166,12 @@ export async function makeEfi(theme = 'eggs') {
|
|
|
166
166
|
await exec(`umount ${efiImgMnt}`, this.echo);
|
|
167
167
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
168
168
|
// Copy isoImg in ${${isoDir}/boot/grub
|
|
169
|
-
Utils.warning("copyng efi.img on (
|
|
169
|
+
Utils.warning("copyng (efi.img) on (ISO)/boot/grub");
|
|
170
170
|
await exec(`cp ${efiImg} ${isoDir}/boot/grub`, this.echo);
|
|
171
171
|
/**
|
|
172
|
-
* creating grub.cfg (4) on (
|
|
172
|
+
* creating grub.cfg (4) on (ISO)/boot/grub
|
|
173
173
|
*/
|
|
174
|
-
Utils.warning("creating grub.cfg main on (
|
|
174
|
+
Utils.warning("creating grub.cfg main on (ISO)/boot/grub");
|
|
175
175
|
// copy splash to efiWorkDir
|
|
176
176
|
const splashDest = `${efiWorkDir}/boot/grub/splash.png`;
|
|
177
177
|
let splashSrc = path.resolve(__dirname, `../../../addons/${theme}/theme/livecd/splash.png`);
|
|
@@ -85,7 +85,7 @@ export async function makeSquashfs(scriptOnly = false, unsecure = false) {
|
|
|
85
85
|
cmd = cmd.replaceAll(/\s\s+/g, ' ');
|
|
86
86
|
Utils.writeX(`${this.settings.work_dir.ovarium}mksquashfs`, cmd);
|
|
87
87
|
if (!scriptOnly) {
|
|
88
|
-
Utils.warning('creating filesystem.squashfs on ISO/live');
|
|
88
|
+
Utils.warning('creating filesystem.squashfs on (ISO)/live');
|
|
89
89
|
// Utils.warning(`compression: ` + compression)
|
|
90
90
|
const test = (await exec(cmd, Utils.setEcho(true))).code;
|
|
91
91
|
if (test !== 0) {
|
|
@@ -248,8 +248,8 @@ export async function produce(kernel = '', clone = false, cryptedclone = false,
|
|
|
248
248
|
synctoCmd += ' --excludes'; // from Marco, usa home.list
|
|
249
249
|
}
|
|
250
250
|
await exec(synctoCmd, Utils.setEcho(true));
|
|
251
|
-
Utils.warning(`moving ${luksFile} in ${this.nest}
|
|
252
|
-
await exec(`mv ${luksFile} ${this.nest}
|
|
251
|
+
Utils.warning(`moving ${luksFile} in ${this.nest}(ISO)/live`);
|
|
252
|
+
await exec(`mv ${luksFile} ${this.nest}(ISO)/live`, this.echo);
|
|
253
253
|
}
|
|
254
254
|
const mkIsofsCmd = (await this.xorrisoCommand(clone, cryptedclone)).replaceAll(/\s\s+/g, ' ');
|
|
255
255
|
this.makeDotDisk(this.volid, mksquashfsCmd, mkIsofsCmd);
|
package/dist/classes/pxe.js
CHANGED
|
@@ -334,15 +334,7 @@ export default class Pxe {
|
|
|
334
334
|
ip=dhcp`;
|
|
335
335
|
break;
|
|
336
336
|
case 'fedora':
|
|
337
|
-
|
|
338
|
-
root=live:http://${Utils.address()}/live/filesystem.squashfs \
|
|
339
|
-
rootfstype=auto \
|
|
340
|
-
ro \
|
|
341
|
-
rd.live.image \
|
|
342
|
-
rd.luks=0 \
|
|
343
|
-
rd.md=0 \
|
|
344
|
-
rd.dm=0\n`;
|
|
345
|
-
break;
|
|
337
|
+
case 'openmamba':
|
|
346
338
|
case 'opensuse':
|
|
347
339
|
lp = `initrd=http://${Utils.address()}/live/${path.basename(this.initrdImg)} \
|
|
348
340
|
root=live:http://${Utils.address()}/live/filesystem.squashfs \
|
|
@@ -73,10 +73,11 @@ export default class Kernel {
|
|
|
73
73
|
initramfs = `/boot/initramfs-${version}-x86_64.img`;
|
|
74
74
|
}
|
|
75
75
|
else {
|
|
76
|
-
// Gestione generica per le altre distro (Debian, Fedora, SUSE,
|
|
76
|
+
// Gestione generica per le altre distro (Debian, Fedora, SUSE, OpenMamba, cc.)
|
|
77
77
|
const candidates = [
|
|
78
78
|
`/boot/initrd.img-${kernel}`, // Debian, Ubuntu
|
|
79
79
|
`/boot/initramfs-${kernel}.img`, // Fedora, RHEL
|
|
80
|
+
`/boot/initramfs-${kernel}-1mamba-x86_64.img`, // Openmamba
|
|
80
81
|
`/boot/initrd-${kernel}`, // openSUSE
|
|
81
82
|
`/boot/initramfs-${kernel}`, // fallbacks
|
|
82
83
|
];
|
package/dist/classes/utils.d.ts
CHANGED
|
@@ -294,7 +294,8 @@ export default class Utils {
|
|
|
294
294
|
/**
|
|
295
295
|
*
|
|
296
296
|
*/
|
|
297
|
-
static pressKeyToExit(
|
|
297
|
+
static pressKeyToExit(warning?: string, procContinue?: boolean): Promise<void>;
|
|
298
|
+
static debug(cmd?: string, procContinue?: boolean): Promise<void>;
|
|
298
299
|
/**
|
|
299
300
|
* titles
|
|
300
301
|
* Penguin's are gettings alive!
|
package/dist/classes/utils.js
CHANGED
|
@@ -80,13 +80,15 @@ export default class Utils {
|
|
|
80
80
|
if (codenameId === 'rolling' || codenameId === '') {
|
|
81
81
|
const releaseId = Utils.getOsRelease().VERSION_ID.trim();
|
|
82
82
|
if (releaseId !== '') {
|
|
83
|
-
result +=
|
|
83
|
+
result += releaseId;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
else {
|
|
87
|
-
result += `${codenameId.toLowerCase()}
|
|
87
|
+
result += `${codenameId.toLowerCase()}`;
|
|
88
|
+
}
|
|
89
|
+
if (!result.endsWith('-')) {
|
|
90
|
+
result += '-';
|
|
88
91
|
}
|
|
89
|
-
result = result.replace(`/`, '-');
|
|
90
92
|
return result;
|
|
91
93
|
}
|
|
92
94
|
/**
|
|
@@ -819,8 +821,20 @@ export default class Utils {
|
|
|
819
821
|
/**
|
|
820
822
|
*
|
|
821
823
|
*/
|
|
822
|
-
static async pressKeyToExit(
|
|
823
|
-
Utils.warning(
|
|
824
|
+
static async pressKeyToExit(warning = 'Process will end', procContinue = true) {
|
|
825
|
+
Utils.warning(warning);
|
|
826
|
+
let msg = 'Press a key to exit...';
|
|
827
|
+
if (procContinue) {
|
|
828
|
+
msg = 'Press a key to continue...';
|
|
829
|
+
}
|
|
830
|
+
console.log(msg);
|
|
831
|
+
const pressKeyToExit = spawnSync('read _ ', { shell: true, stdio: [0, 1, 2] });
|
|
832
|
+
if (!procContinue) {
|
|
833
|
+
process.exit(0);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
static async debug(cmd = 'cmd', procContinue = true) {
|
|
837
|
+
console.log(chalk.redBright('DEBUG >>> ') + cmd + '\n');
|
|
824
838
|
let msg = 'Press a key to exit...';
|
|
825
839
|
if (procContinue) {
|
|
826
840
|
msg = 'Press a key to continue...';
|
|
@@ -92,7 +92,7 @@ export default class ExportPkg extends Command {
|
|
|
92
92
|
*/
|
|
93
93
|
}
|
|
94
94
|
else if (familyId === "debian") {
|
|
95
|
-
Utils.warning("debian
|
|
95
|
+
Utils.warning("debian DEB");
|
|
96
96
|
localPath = `/home/${this.user}/penguins-eggs/dist`;
|
|
97
97
|
remotePath = this.Tu.config.remotePathPackages + "/debs";
|
|
98
98
|
let arch = Utils.uefiArch();
|
|
@@ -105,7 +105,7 @@ export default class ExportPkg extends Command {
|
|
|
105
105
|
*/
|
|
106
106
|
}
|
|
107
107
|
else if (familyId === 'fedora') {
|
|
108
|
-
Utils.warning("fedora
|
|
108
|
+
Utils.warning("fedora RPM");
|
|
109
109
|
localPath = `/home/${this.user}/rpmbuild/RPMS/x86_64`;
|
|
110
110
|
if (distroId === 'fedora') {
|
|
111
111
|
remotePath = this.Tu.config.remotePathPackages + "/fedora";
|
|
@@ -121,7 +121,7 @@ export default class ExportPkg extends Command {
|
|
|
121
121
|
}
|
|
122
122
|
else if (familyId === 'openmamba') {
|
|
123
123
|
Utils.warning("openmamba rpm packages");
|
|
124
|
-
localPath = `/
|
|
124
|
+
localPath = `/home/${this.user}/rpmbuild/RPMS/x86_64`;
|
|
125
125
|
remotePath = this.Tu.config.remotePathPackages + "/openmamba";
|
|
126
126
|
filter = `penguins-eggs-[0-9][0-9].@([0-9]|[0-1][0-9]).@([0-9]|[0-3][0-9])-*mamba.*.rpm`;
|
|
127
127
|
/**
|
|
@@ -29,6 +29,9 @@ export default async function addUser(username = 'live', password = 'evolution',
|
|
|
29
29
|
else if (this.distro.familyId === 'fedora') {
|
|
30
30
|
cmd = `chroot ${this.installTarget} adduser ${username} --create-home --shell /bin/bash --comment "${fullusername},${roomNumber},${workPhone},${homePhone}" ${this.toNull}`;
|
|
31
31
|
}
|
|
32
|
+
else if (this.distro.familyId === 'openmamba') {
|
|
33
|
+
cmd = `chroot ${this.installTarget} useradd ${username} --create-home --shell /bin/bash --comment "${fullusername},${roomNumber},${workPhone},${homePhone}" ${this.toNull}`;
|
|
34
|
+
}
|
|
32
35
|
else if (this.distro.familyId === 'opensuse') {
|
|
33
36
|
cmd = `chroot ${this.installTarget} useradd ${username} --create-home --shell /bin/bash --comment "${fullusername},${roomNumber},${workPhone},${homePhone}" ${this.toNull}`;
|
|
34
37
|
}
|
|
@@ -39,6 +42,9 @@ export default async function addUser(username = 'live', password = 'evolution',
|
|
|
39
42
|
if (this.distro.familyId === 'debian') {
|
|
40
43
|
group = 'sudo';
|
|
41
44
|
}
|
|
45
|
+
else if (this.distro.familyId === 'openmamba') {
|
|
46
|
+
group = 'sysadmin';
|
|
47
|
+
}
|
|
42
48
|
cmd = `chroot ${this.installTarget} usermod -aG ${group} ${username} ${this.toNull}`;
|
|
43
49
|
await exec(cmd, this.echo);
|
|
44
50
|
// add autologin group in archlinux
|
|
@@ -18,10 +18,33 @@ import path from 'node:path';
|
|
|
18
18
|
export default async function bootloader() {
|
|
19
19
|
let grubName = Diversion.grubName(this.distro.familyId);
|
|
20
20
|
let grubForce = Diversion.grubForce(this.distro.familyId);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
let cmd = '';
|
|
22
|
+
let grubLog = '/grub-install.lgo';
|
|
23
|
+
if (this.efi) {
|
|
24
|
+
/**
|
|
25
|
+
* UEFI Installation
|
|
26
|
+
* This is the correct way to install GRUB for UEFI systems.
|
|
27
|
+
* --target: Specifies the EFI architecture (x86_64-efi or arm64-efi).
|
|
28
|
+
* --efi-directory: Tells GRUB where the EFI System Partition is mounted. CRITICAL.
|
|
29
|
+
* --bootloader-id: Creates the \EFI\fedora directory on the ESP and labels the NVRAM entry. CRITICAL.
|
|
30
|
+
* We do NOT specify the device (e.g., /dev/sda) for UEFI.
|
|
31
|
+
*/
|
|
32
|
+
let target = `x86_64-efi`;
|
|
33
|
+
if (process.arch === 'arm64') {
|
|
34
|
+
target = `arm64-efi`;
|
|
35
|
+
}
|
|
36
|
+
let bootloaderId = this.distro.distroLike.toLowerCase();
|
|
37
|
+
cmd = `chroot ${this.installTarget} ${grubName}-install --target=${target} --efi-directory=/boot/efi --bootloader-id=${bootloaderId} --recheck ${grubForce}`;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
/**
|
|
41
|
+
* MBR (Legacy BIOS) Installation
|
|
42
|
+
* For legacy boot, we specify the installation device directly.
|
|
43
|
+
*/
|
|
44
|
+
const target = 'i386-pc';
|
|
45
|
+
cmd = `chroot ${this.installTarget} ${grubName}-install --target=${target} ${this.partitions.installationDevice} ${grubForce} ${grubLog}`;
|
|
46
|
+
}
|
|
47
|
+
// await Utils.debug(`grub-install: ${cmd}`)
|
|
25
48
|
await exec(cmd, this.echo);
|
|
26
49
|
/**
|
|
27
50
|
* grub-mkconfig
|
|
@@ -20,7 +20,7 @@ export default async function bootloaderConfig() {
|
|
|
20
20
|
if (this.distro.familyId === 'alpine') {
|
|
21
21
|
if (this.efi) {
|
|
22
22
|
try {
|
|
23
|
-
cmd = `chroot ${this.installTarget} apk add grub grub-efi efibootmgr} ${this.toNull}`;
|
|
23
|
+
cmd = `chroot ${this.installTarget} apk add grub grub-efi efibootmgr shim} ${this.toNull}`;
|
|
24
24
|
await exec(cmd, this.echo);
|
|
25
25
|
}
|
|
26
26
|
catch (error) {
|
|
@@ -43,7 +43,7 @@ export default async function bootloaderConfig() {
|
|
|
43
43
|
else if (this.distro.familyId === 'archlinux') {
|
|
44
44
|
if (this.efi) {
|
|
45
45
|
try {
|
|
46
|
-
cmd = `chroot ${this.installTarget} pacman -Sy grub efibootmgr} ${this.toNull}`;
|
|
46
|
+
cmd = `chroot ${this.installTarget} pacman -Sy grub efibootmgr shim} ${this.toNull}`;
|
|
47
47
|
await exec(cmd, this.echo);
|
|
48
48
|
}
|
|
49
49
|
catch (error) {
|
|
@@ -75,7 +75,7 @@ export default async function bootloaderConfig() {
|
|
|
75
75
|
const aptInstallOptions = ' apt install -y --no-upgrade --allow-unauthenticated -o Acquire::gpgv::Options::=--ignore-time-conflict ';
|
|
76
76
|
if (this.efi) {
|
|
77
77
|
try {
|
|
78
|
-
cmd = `chroot ${this.installTarget} ${aptInstallOptions} grub-efi-${Utils.uefiArch()} --allow-unauthenticated ${this.toNull}`;
|
|
78
|
+
cmd = `chroot ${this.installTarget} ${aptInstallOptions} grub-efi-${Utils.uefiArch()} efibootmgr shim-signed --allow-unauthenticated ${this.toNull}`;
|
|
79
79
|
await exec(cmd, this.echo);
|
|
80
80
|
}
|
|
81
81
|
catch (error) {
|
|
@@ -92,13 +92,19 @@ export default async function bootloaderConfig() {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
|
-
* fedora
|
|
95
|
+
* fedora
|
|
96
96
|
*/
|
|
97
97
|
}
|
|
98
|
-
else if (this.distro.familyId === 'fedora'
|
|
98
|
+
else if (this.distro.familyId === 'fedora') {
|
|
99
99
|
if (this.efi) {
|
|
100
100
|
try {
|
|
101
|
-
cmd =
|
|
101
|
+
cmd = ``;
|
|
102
|
+
cmd += `chroot ${this.installTarget} `;
|
|
103
|
+
cmd += `dnf -y install grub2 `;
|
|
104
|
+
cmd += `grub2-efi-${process.arch} `;
|
|
105
|
+
cmd += `grub2-efi-${process.arch}-modules `;
|
|
106
|
+
cmd += `efibootmgr `;
|
|
107
|
+
cmd += `shim-${process.arch} ${this.toNull}`;
|
|
102
108
|
await exec(cmd, this.echo);
|
|
103
109
|
}
|
|
104
110
|
catch (error) {
|
|
@@ -107,7 +113,43 @@ export default async function bootloaderConfig() {
|
|
|
107
113
|
}
|
|
108
114
|
else {
|
|
109
115
|
try {
|
|
110
|
-
cmd =
|
|
116
|
+
cmd = ``;
|
|
117
|
+
cmd += `chroot ${this.installTarget} `;
|
|
118
|
+
cmd += `dnf -y install grub2 `;
|
|
119
|
+
cmd += `grub2-pc `;
|
|
120
|
+
cmd += `grub2-pc-modules ${this.toNull}`;
|
|
121
|
+
await exec(cmd, this.echo);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
await showError(cmd, error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* openmamba
|
|
129
|
+
*/
|
|
130
|
+
}
|
|
131
|
+
else if (this.distro.familyId === 'openmamba') {
|
|
132
|
+
if (this.efi) {
|
|
133
|
+
try {
|
|
134
|
+
cmd = ``;
|
|
135
|
+
cmd += `chroot ${this.installTarget} `;
|
|
136
|
+
cmd += `dnf -y install grub `;
|
|
137
|
+
cmd += `grub-efi-x86_64 `;
|
|
138
|
+
cmd += `efibootmgr `;
|
|
139
|
+
cmd += `shim-signed ${this.toNull}`;
|
|
140
|
+
await exec(cmd, this.echo);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
await showError(cmd, error);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
try {
|
|
148
|
+
cmd = ``;
|
|
149
|
+
cmd += `chroot ${this.installTarget} `;
|
|
150
|
+
cmd += `dnf -y install grub2 `;
|
|
151
|
+
cmd += `grub2-pc `;
|
|
152
|
+
cmd += `grub2-pc-modules ${this.toNull}`;
|
|
111
153
|
await exec(cmd, this.echo);
|
|
112
154
|
}
|
|
113
155
|
catch (error) {
|
|
@@ -121,7 +163,16 @@ export default async function bootloaderConfig() {
|
|
|
121
163
|
else if (this.distro.familyId === 'opensuse') {
|
|
122
164
|
if (this.efi) {
|
|
123
165
|
try {
|
|
124
|
-
cmd = `chroot ${this.installTarget} zypper install -y grub2 grub2-
|
|
166
|
+
cmd = `chroot ${this.installTarget} zypper install -y grub2 grub2-x86_64-efi efibootmgr shim} ${this.toNull}`;
|
|
167
|
+
await exec(cmd, this.echo);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
await showError(cmd, error);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
try {
|
|
175
|
+
cmd = `chroot ${this.installTarget} zypper install -y zypper install -y grub2 grub2-i386-pc ${this.toNull}`;
|
|
125
176
|
await exec(cmd, this.echo);
|
|
126
177
|
}
|
|
127
178
|
catch (error) {
|
|
@@ -129,6 +180,7 @@ export default async function bootloaderConfig() {
|
|
|
129
180
|
}
|
|
130
181
|
}
|
|
131
182
|
}
|
|
183
|
+
// await Utils.debug(`grub packages install cmd: ${cmd}`)
|
|
132
184
|
}
|
|
133
185
|
/**
|
|
134
186
|
*
|
|
@@ -29,9 +29,11 @@ export default async function mkfs() {
|
|
|
29
29
|
this.devices.efi.name = 'none'; // Trovare il modo
|
|
30
30
|
}
|
|
31
31
|
if (this.partitions.filesystemType === 'ext4') {
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* EFI
|
|
34
|
+
*/
|
|
33
35
|
if (this.efi) {
|
|
34
|
-
await exec(`
|
|
36
|
+
await exec(`mkfs.vfat -F 32 ${this.devices.efi.name} ${this.toNull}`, this.echo);
|
|
35
37
|
}
|
|
36
38
|
// boot
|
|
37
39
|
if (this.devices.boot.name !== 'none') {
|
|
@@ -39,11 +41,13 @@ export default async function mkfs() {
|
|
|
39
41
|
this.devices.boot.fsType = 'ext2';
|
|
40
42
|
this.devices.boot.mountPoint = '/boot';
|
|
41
43
|
}
|
|
42
|
-
await exec(`mke2fs -Ft ${this.devices.boot.fsType} ${this.devices.boot.name} ${this.toNull}`, this.echo)
|
|
44
|
+
// await exec(`mke2fs -Ft ${this.devices.boot.fsType} ${this.devices.boot.name} ${this.toNull}`, this.echo)
|
|
45
|
+
await exec(`mkfs.${this.devices.boot.fsType} -F ${this.devices.boot.name} ${this.toNull}`, this.echo);
|
|
43
46
|
}
|
|
44
47
|
// root
|
|
45
48
|
if (this.devices.root.name !== 'none') {
|
|
46
|
-
await exec(`mke2fs -Ft ${this.devices.root.fsType} ${this.devices.root.name} ${this.toNull}`, this.echo)
|
|
49
|
+
// await exec(`mke2fs -Ft ${this.devices.root.fsType} ${this.devices.root.name} ${this.toNull}`, this.echo)
|
|
50
|
+
await exec(`mkfs.ext4 -F ${this.devices.root.name} ${this.toNull}`, this.echo);
|
|
47
51
|
}
|
|
48
52
|
// data
|
|
49
53
|
if (this.devices.data.name !== 'none') {
|
|
@@ -11,18 +11,37 @@ import { exec } from '../../../lib/utils.js';
|
|
|
11
11
|
* mountvfs()
|
|
12
12
|
*/
|
|
13
13
|
export async function mountVfs() {
|
|
14
|
+
/**
|
|
15
|
+
* dev
|
|
16
|
+
*/
|
|
14
17
|
await exec(`mkdir ${this.installTarget}/dev ${this.toNull}`, this.echo);
|
|
15
|
-
await exec(`mkdir ${this.installTarget}/dev/pts ${this.toNull}`, this.echo);
|
|
16
|
-
await exec(`mkdir ${this.installTarget}/proc ${this.toNull}`, this.echo);
|
|
17
|
-
await exec(`mkdir ${this.installTarget}/sys ${this.toNull}`, this.echo);
|
|
18
|
-
await exec(`mkdir ${this.installTarget}/run ${this.toNull}`, this.echo);
|
|
19
18
|
await exec(`mount -o bind /dev ${this.installTarget}/dev ${this.toNull}`, this.echo);
|
|
19
|
+
/**
|
|
20
|
+
* dev/pts
|
|
21
|
+
*/
|
|
22
|
+
await exec(`mkdir ${this.installTarget}/dev/pts ${this.toNull}`, this.echo);
|
|
20
23
|
await exec(`mount -o bind /dev/pts ${this.installTarget}/dev/pts ${this.toNull}`, this.echo);
|
|
24
|
+
/**
|
|
25
|
+
* proc
|
|
26
|
+
*/
|
|
27
|
+
await exec(`mkdir ${this.installTarget}/proc ${this.toNull}`, this.echo);
|
|
21
28
|
await exec(`mount -o bind /proc ${this.installTarget}/proc ${this.toNull}`, this.echo);
|
|
29
|
+
/**
|
|
30
|
+
* sys
|
|
31
|
+
*/
|
|
32
|
+
await exec(`mkdir ${this.installTarget}/sys ${this.toNull}`, this.echo);
|
|
22
33
|
await exec(`mount -o bind /sys ${this.installTarget}/sys ${this.toNull}`, this.echo);
|
|
34
|
+
/**
|
|
35
|
+
* sys/efivar
|
|
36
|
+
*/
|
|
23
37
|
if (this.efi) {
|
|
24
|
-
await exec(`
|
|
38
|
+
await exec(`mkdir -p ${this.installTarget}/sys/firmware/efi/efivars ${this.toNull}`, this.echo);
|
|
39
|
+
await exec(`mount -o bind /sys/firmware/efi/efivars ${this.installTarget}/sys/firmware/efi/efivars`);
|
|
25
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* run: use recursive binding rbins
|
|
43
|
+
*/
|
|
44
|
+
await exec(`mkdir ${this.installTarget}/run ${this.toNull}`, this.echo);
|
|
26
45
|
await exec(`mount -o rbind /run ${this.installTarget}/run ${this.toNull}`, this.echo);
|
|
27
46
|
}
|
|
28
47
|
/**
|
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
import { exec } from '../../../../lib/utils.js';
|
|
10
10
|
export default async function uefiStandard(installDevice = "", p = "") {
|
|
11
11
|
await exec(`parted --script ${installDevice} mklabel gpt`, this.echo);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
await exec(`parted --script ${installDevice} mkpart
|
|
15
|
-
await exec(`parted --script ${installDevice}
|
|
16
|
-
await exec(`parted --script ${installDevice}
|
|
12
|
+
// Partizione EFI: inizia a 1MiB e ha una dimensione di circa 256MiB
|
|
13
|
+
// Finisce a 257MiB per avere uno spazio netto di 256MiB
|
|
14
|
+
await exec(`parted --script ${installDevice} mkpart efi fat32 1MiB 257MiB`, this.echo);
|
|
15
|
+
await exec(`parted --script ${installDevice} mkpart swap linux-swap 257MiB ${this.swapSize + 257}MiB`, this.echo);
|
|
16
|
+
await exec(`parted --script ${installDevice} mkpart root ext4 ${this.swapSize + 257}MiB 100%`, this.echo);
|
|
17
|
+
await exec(`parted --script ${installDevice} set 1 boot on`, this.echo);
|
|
18
|
+
await exec(`parted --script ${installDevice} set 1 esp on`, this.echo);
|
|
17
19
|
this.devices.efi.name = `${installDevice}${p}1`;
|
|
18
20
|
this.devices.efi.fsType = 'F 32 -I';
|
|
19
21
|
this.devices.efi.mountPoint = '/boot/efi';
|
|
@@ -162,12 +162,7 @@ export default class Sequence {
|
|
|
162
162
|
// Setup (unchanged)
|
|
163
163
|
await this.setupInstallation(domain, unattended, nointeractive, chroot, halt, verbose);
|
|
164
164
|
// Installation sequence - each step clearly visible
|
|
165
|
-
await this.runInstallationSequence();
|
|
166
|
-
// Handle chroot if requested
|
|
167
|
-
if (chroot) {
|
|
168
|
-
const message = `You are in chroot mode under ${this.installTarget}, type "exit" to exit.`;
|
|
169
|
-
await this.emergencyShell(message);
|
|
170
|
-
}
|
|
165
|
+
await this.runInstallationSequence(chroot);
|
|
171
166
|
// Completion
|
|
172
167
|
await this.completeInstallation();
|
|
173
168
|
}
|
|
@@ -211,7 +206,7 @@ export default class Sequence {
|
|
|
211
206
|
/**
|
|
212
207
|
* Main installation sequence - Linear and clear
|
|
213
208
|
*/
|
|
214
|
-
async runInstallationSequence() {
|
|
209
|
+
async runInstallationSequence(chroot = false) {
|
|
215
210
|
// 1. Partitioning and formatting
|
|
216
211
|
let isPartitioned = false;
|
|
217
212
|
await this.executeStep("Creating partitions", 0, async () => {
|
|
@@ -316,7 +311,12 @@ export default class Sequence {
|
|
|
316
311
|
await this.executeStep(`running ${step}`, 90, () => this.execCalamaresModule(step));
|
|
317
312
|
}
|
|
318
313
|
}
|
|
319
|
-
// 14
|
|
314
|
+
// 14- Handle chroot if requested
|
|
315
|
+
if (chroot) {
|
|
316
|
+
const message = `You are in chroot mode under ${this.installTarget}, type "exit" to exit.`;
|
|
317
|
+
await this.emergencyShell(message);
|
|
318
|
+
}
|
|
319
|
+
// 15. Unmounting
|
|
320
320
|
await this.executeStep("umount Virtual File System", 96, () => this.umountVfs());
|
|
321
321
|
await this.executeStep("umount File system", 99, () => this.umountFs());
|
|
322
322
|
}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
28ef347c6cbe76b3ed0df657751b9e4c77d540926b62d0429510873bc68d9b55 penguins-eggs_25.9.3-1_amd64.deb
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
e87f2ff251f6d8043cec34f6679152f36aced09de133d46056cd546f4fbfc0bc penguins-eggs_25.9.3-1_arm64.deb
|