penguins-eggs 9.6.34 → 10.0.0
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 +1458 -1
- package/README.md +823 -8
- package/addons/eggs/theme/livecd/grub.main.cfg +4 -4
- package/addons/eggs/theme/livecd/isolinux.main.cfg +5 -5
- package/bin/dev.cmd +1 -1
- package/bin/dev.js +6 -0
- package/bin/run.js +5 -0
- package/conf/derivatives.yaml +2 -0
- package/conf/distros/buster/calamares/calamares-modules/bootloader-config/bootloader-config.sh +3 -3
- package/conf/distros/buster/calamares/calamares-modules/sources-yolk/sources-yolk.sh +1 -1
- package/conf/distros/buster/calamares/modules/fstab.yml +1 -1
- package/conf/distros/focal/calamares/modules/fstab.yml +1 -1
- package/conf/{exclude.list.homes → exclude.list.d/home.list} +6 -1
- package/conf/{exclude.list.template → exclude.list.d/master.list} +15 -24
- package/conf/exclude.list.d/var.list +21 -0
- package/conf/tools.yaml +1 -3
- package/dist/classes/bleach.d.ts +37 -0
- package/dist/classes/bleach.js +43 -91
- package/dist/classes/cfs.d.ts +17 -0
- package/dist/classes/cfs.js +15 -12
- package/dist/classes/compressors.d.ts +53 -0
- package/dist/classes/compressors.js +51 -58
- package/dist/classes/daddy.d.ts +18 -0
- package/dist/classes/daddy.js +93 -101
- package/dist/classes/distro.d.ts +26 -0
- package/dist/classes/distro.js +45 -27
- package/dist/classes/families/archlinux.d.ts +61 -0
- package/dist/classes/families/archlinux.js +56 -113
- package/dist/classes/families/debian.d.ts +65 -0
- package/dist/classes/families/debian.js +68 -143
- package/dist/classes/families/fedora.d.ts +52 -0
- package/dist/classes/families/fedora.js +43 -99
- package/dist/classes/families/mockup.d.ts +60 -0
- package/dist/classes/families/mockup.js +27 -46
- package/dist/classes/families/suse.d.ts +52 -0
- package/dist/classes/families/suse.js +45 -97
- package/dist/classes/incubation/branding.d.ts +17 -0
- package/dist/classes/incubation/branding.js +33 -32
- package/dist/classes/incubation/distros/bionic.d.ts +32 -0
- package/dist/classes/incubation/distros/bionic.js +15 -15
- package/dist/classes/incubation/distros/buster.d.ts +32 -0
- package/dist/classes/incubation/distros/buster.js +15 -15
- package/dist/classes/incubation/distros/focal.d.ts +32 -0
- package/dist/classes/incubation/distros/focal.js +15 -15
- package/dist/classes/incubation/distros/jessie.d.ts +31 -0
- package/dist/classes/incubation/distros/jessie.js +11 -13
- package/dist/classes/incubation/distros/rolling.d.ts +32 -0
- package/dist/classes/incubation/distros/rolling.js +15 -16
- package/dist/classes/incubation/fisherman-helper/displaymanager.d.ts +11 -0
- package/dist/classes/incubation/fisherman-helper/displaymanager.js +8 -9
- package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
- package/dist/classes/incubation/fisherman-helper/packages.js +17 -17
- package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
- package/dist/classes/incubation/fisherman-helper/settings.js +30 -28
- package/dist/classes/incubation/fisherman.d.ts +77 -0
- package/dist/classes/incubation/fisherman.js +137 -132
- package/dist/classes/incubation/incubator.d.ts +40 -0
- package/dist/classes/incubation/incubator.js +93 -87
- package/dist/classes/incubation/installer.d.ts +13 -0
- package/dist/classes/incubation/installer.js +27 -12
- package/dist/classes/initrd.d.ts +41 -0
- package/dist/classes/initrd.js +42 -44
- package/dist/classes/keyboards.d.ts +50 -0
- package/dist/classes/keyboards.js +110 -107
- package/dist/classes/locales.d.ts +21 -0
- package/dist/classes/locales.js +30 -34
- package/dist/classes/n8.d.ts +17 -0
- package/dist/classes/n8.js +16 -22
- package/dist/classes/network.d.ts +37 -0
- package/dist/classes/network.js +21 -25
- package/dist/classes/ovary.d.ts +205 -0
- package/dist/classes/ovary.js +1262 -1334
- package/dist/classes/pacman.d.ts +149 -0
- package/dist/classes/pacman.js +347 -426
- package/dist/classes/pve-live.d.ts +17 -0
- package/dist/classes/pve-live.js +23 -25
- package/dist/classes/pxe.d.ts +65 -0
- package/dist/classes/pxe.js +206 -210
- package/dist/classes/settings.d.ts +53 -0
- package/dist/classes/settings.js +99 -102
- package/dist/classes/sources_list.d.ts +28 -0
- package/dist/classes/sources_list.js +35 -39
- package/dist/classes/systemctl.d.ts +47 -0
- package/dist/classes/systemctl.js +35 -39
- package/dist/classes/tailor.d.ts +46 -0
- package/dist/classes/tailor.js +225 -241
- package/dist/classes/tools.d.ts +30 -0
- package/dist/classes/tools.js +20 -26
- package/dist/classes/users.d.ts +28 -0
- package/dist/classes/users.js +22 -16
- package/dist/classes/utils.d.ts +318 -0
- package/dist/classes/utils.js +91 -76
- package/dist/classes/xdg.d.ts +45 -0
- package/dist/classes/xdg.js +129 -133
- package/dist/classes/yolk.d.ts +33 -0
- package/dist/classes/yolk.js +54 -60
- package/dist/commands/adapt.d.ts +17 -0
- package/dist/commands/adapt.js +21 -25
- package/dist/commands/analyze.d.ts +26 -0
- package/dist/commands/analyze.js +60 -74
- package/dist/commands/calamares.d.ts +29 -0
- package/dist/commands/calamares.js +53 -60
- package/dist/commands/config.d.ts +36 -0
- package/dist/commands/config.js +120 -142
- package/dist/commands/cuckoo.d.ts +16 -0
- package/dist/commands/cuckoo.js +24 -28
- package/dist/commands/dad.d.ts +19 -0
- package/dist/commands/dad.js +26 -30
- package/dist/commands/export/deb.d.ts +19 -0
- package/dist/commands/export/deb.js +33 -42
- package/dist/commands/export/iso.d.ts +19 -0
- package/dist/commands/export/iso.js +24 -28
- package/dist/commands/install.d.ts +37 -0
- package/dist/commands/install.js +68 -68
- package/dist/commands/kill.d.ts +24 -0
- package/dist/commands/kill.js +31 -38
- package/dist/commands/mom.d.ts +16 -0
- package/dist/commands/mom.js +20 -22
- package/dist/commands/produce.d.ts +33 -0
- package/dist/commands/produce.js +100 -92
- package/dist/commands/status.d.ts +23 -0
- package/dist/commands/status.js +14 -20
- package/dist/commands/syncfrom.d.ts +45 -0
- package/dist/commands/syncfrom.js +99 -109
- package/dist/commands/syncto.d.ts +40 -0
- package/dist/commands/syncto.js +152 -216
- package/dist/commands/tools/clean.d.ts +18 -0
- package/dist/commands/tools/clean.js +21 -25
- package/dist/commands/tools/ppa.d.ts +26 -0
- package/dist/commands/tools/ppa.js +46 -50
- package/dist/commands/tools/skel.d.ts +18 -0
- package/dist/commands/tools/skel.js +27 -31
- package/dist/commands/tools/stat.d.ts +31 -0
- package/dist/commands/tools/stat.js +21 -25
- package/dist/commands/tools/yolk.d.ts +24 -0
- package/dist/commands/tools/yolk.js +23 -27
- package/dist/commands/update.d.ts +47 -0
- package/dist/commands/update.js +66 -70
- package/dist/commands/wardrobe/get.d.ts +23 -0
- package/dist/commands/wardrobe/get.js +26 -28
- package/dist/commands/wardrobe/list.d.ts +24 -0
- package/dist/commands/wardrobe/list.js +69 -67
- package/dist/commands/wardrobe/show.d.ts +25 -0
- package/dist/commands/wardrobe/show.js +57 -52
- package/dist/commands/wardrobe/wear.d.ts +26 -0
- package/dist/commands/wardrobe/wear.js +39 -41
- package/dist/components/finished.d.ts +15 -0
- package/dist/components/finished.js +37 -42
- package/dist/components/information.d.ts +8 -0
- package/dist/components/information.js +155 -0
- package/dist/components/install.d.ts +15 -0
- package/dist/components/install.js +31 -35
- package/dist/components/keyboard.d.ts +16 -0
- package/dist/components/keyboard.js +37 -40
- package/dist/components/location.d.ts +16 -0
- package/dist/components/location.js +38 -38
- package/dist/components/network.d.ts +19 -0
- package/dist/components/network.js +47 -48
- package/dist/components/partitions.d.ts +16 -0
- package/dist/components/partitions.js +47 -51
- package/dist/components/steps.d.ts +13 -0
- package/dist/components/steps.js +148 -0
- package/dist/components/summary.d.ts +24 -0
- package/dist/components/summary.js +53 -54
- package/dist/components/title.d.ts +12 -0
- package/dist/components/title.js +35 -0
- package/dist/components/users.d.ts +24 -0
- package/dist/components/users.js +43 -43
- package/dist/components/welcome.d.ts +13 -0
- package/dist/components/welcome.js +37 -38
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -5
- package/dist/interfaces/i-addons.d.ts +13 -0
- package/dist/interfaces/i-addons.js +8 -3
- package/dist/interfaces/i-analyze.d.ts +17 -0
- package/dist/interfaces/i-analyze.js +11 -16
- package/dist/interfaces/i-app.d.ts +14 -0
- package/dist/interfaces/i-app.js +8 -2
- package/dist/interfaces/i-branding.d.ts +36 -0
- package/dist/interfaces/i-branding.js +8 -2
- package/dist/interfaces/i-calamares-partition.d.ts +18 -0
- package/dist/interfaces/i-calamares-partition.js +3 -4
- package/dist/interfaces/i-config-tools.d.ts +18 -0
- package/dist/interfaces/i-config-tools.js +8 -2
- package/dist/interfaces/i-devices.d.ts +20 -0
- package/dist/interfaces/i-devices.js +8 -2
- package/dist/interfaces/i-distro.d.ts +27 -0
- package/dist/interfaces/i-distro.js +3 -4
- package/dist/interfaces/i-drive-list.d.ts +33 -0
- package/dist/interfaces/i-drive-list.js +3 -4
- package/dist/interfaces/i-eggs-config.d.ts +32 -0
- package/dist/interfaces/i-eggs-config.js +3 -4
- package/dist/interfaces/i-excludes.d.ts +14 -0
- package/dist/interfaces/i-excludes.js +8 -0
- package/dist/interfaces/i-exec.d.ts +11 -0
- package/dist/interfaces/i-exec.js +3 -4
- package/dist/interfaces/i-initrd.d.ts +13 -0
- package/dist/interfaces/i-initrd.js +8 -2
- package/dist/interfaces/i-install.d.ts +16 -0
- package/dist/interfaces/i-install.js +8 -2
- package/dist/interfaces/i-installer.d.ts +17 -0
- package/dist/interfaces/i-installer.js +8 -2
- package/dist/interfaces/i-krill-config.d.ts +33 -0
- package/dist/interfaces/i-krill-config.js +3 -4
- package/dist/interfaces/i-krill.d.ts +42 -0
- package/dist/interfaces/i-krill.js +8 -2
- package/dist/interfaces/i-materia.d.ts +41 -0
- package/dist/interfaces/i-materia.js +8 -2
- package/dist/interfaces/i-net.d.ts +16 -0
- package/dist/interfaces/i-net.js +8 -2
- package/dist/interfaces/i-packages.d.ts +29 -0
- package/dist/interfaces/i-packages.js +3 -4
- package/dist/interfaces/i-partitions.d.ts +16 -0
- package/dist/interfaces/i-partitions.js +8 -2
- package/dist/interfaces/i-pxe.d.ts +21 -0
- package/dist/interfaces/i-pxe.js +8 -39
- package/dist/interfaces/i-remix.d.ts +21 -0
- package/dist/interfaces/i-remix.js +3 -4
- package/dist/interfaces/i-settings.d.ts +39 -0
- package/dist/interfaces/i-settings.js +8 -2
- package/dist/interfaces/i-user.d.ts +14 -0
- package/dist/interfaces/i-user.js +8 -2
- package/dist/interfaces/i-workdir.d.ts +14 -0
- package/dist/interfaces/i-workdir.js +8 -2
- package/dist/interfaces/i-xkb-model.d.ts +24 -0
- package/dist/interfaces/i-xkb-model.js +8 -2
- package/dist/interfaces/index.d.ts +25 -0
- package/dist/interfaces/index.js +3 -4
- package/dist/krill/modules/add-user.d.ts +20 -0
- package/dist/krill/modules/add-user.js +11 -15
- package/dist/krill/modules/bootloader-config-arch.d.ts +14 -0
- package/dist/krill/modules/bootloader-config-arch.js +15 -11
- package/dist/krill/modules/bootloader-config-debian.d.ts +10 -0
- package/dist/krill/modules/bootloader-config-debian.js +20 -16
- package/dist/krill/modules/bootloader-config.d.ts +10 -0
- package/dist/krill/modules/bootloader-config.js +3 -6
- package/dist/krill/modules/bootloader.d.ts +14 -0
- package/dist/krill/modules/bootloader.js +9 -13
- package/dist/krill/modules/change-password.d.ts +15 -0
- package/dist/krill/modules/change-password.js +5 -8
- package/dist/krill/modules/del-live-user.d.ts +14 -0
- package/dist/krill/modules/del-live-user.js +8 -12
- package/dist/krill/modules/fstab.d.ts +14 -0
- package/dist/krill/modules/fstab.js +69 -46
- package/dist/krill/modules/grubcfg.d.ts +17 -0
- package/dist/krill/modules/grubcfg.js +8 -17
- package/dist/krill/modules/hostname.d.ts +13 -0
- package/dist/krill/modules/hostname.js +11 -17
- package/dist/krill/modules/initramfs-cfg.d.ts +14 -0
- package/dist/krill/modules/initramfs-cfg.js +6 -15
- package/dist/krill/modules/initramfs.d.ts +13 -0
- package/dist/krill/modules/initramfs.js +17 -19
- package/dist/krill/modules/locale-cfg.d.ts +10 -0
- package/dist/krill/modules/locale-cfg.js +8 -12
- package/dist/krill/modules/locale.d.ts +13 -0
- package/dist/krill/modules/locale.js +7 -11
- package/dist/krill/modules/m-keyboard.d.ts +14 -0
- package/dist/krill/modules/m-keyboard.js +14 -18
- package/dist/krill/modules/m-timezone.d.ts +14 -0
- package/dist/krill/modules/m-timezone.js +8 -12
- package/dist/krill/modules/machine-id.d.ts +15 -0
- package/dist/krill/modules/machine-id.js +6 -10
- package/dist/krill/modules/mkfs.d.ts +13 -0
- package/dist/krill/modules/mkfs.js +33 -23
- package/dist/krill/modules/mount-fs.d.ts +17 -0
- package/dist/krill/modules/mount-fs.js +20 -26
- package/dist/krill/modules/mount-vfs.d.ts +17 -0
- package/dist/krill/modules/mount-vfs.js +16 -21
- package/dist/krill/modules/network-cfg.d.ts +19 -0
- package/dist/krill/modules/network-cfg.js +28 -31
- package/dist/krill/modules/packages.d.ts +14 -0
- package/dist/krill/modules/packages.js +17 -21
- package/dist/krill/modules/partition.d.ts +20 -0
- package/dist/krill/modules/partition.js +80 -86
- package/dist/krill/modules/remove-installer-link.d.ts +13 -0
- package/dist/krill/modules/remove-installer-link.js +7 -11
- package/dist/krill/modules/umount.d.ts +14 -0
- package/dist/krill/modules/umount.js +9 -13
- package/dist/krill/modules/unpackfs.d.ts +13 -0
- package/dist/krill/modules/unpackfs.js +7 -11
- package/dist/krill/prepare.d.ts +77 -0
- package/dist/krill/{krill-prepare.js → prepare.js} +136 -130
- package/dist/krill/sequence.d.ts +156 -0
- package/dist/krill/sequence.js +640 -0
- package/dist/lib/cli-autologin.d.ts +43 -0
- package/dist/lib/cli-autologin.js +88 -92
- package/dist/lib/get_address.d.ts +8 -0
- package/dist/lib/get_address.js +9 -11
- package/dist/lib/get_dns.d.ts +8 -0
- package/dist/lib/get_dns.js +9 -11
- package/dist/lib/get_domain.d.ts +8 -0
- package/dist/lib/get_domain.js +9 -11
- package/dist/lib/get_gateway.d.ts +8 -0
- package/dist/lib/get_gateway.js +9 -11
- package/dist/lib/get_hostname.d.ts +8 -0
- package/dist/lib/get_hostname.js +9 -11
- package/dist/lib/get_netmask.d.ts +8 -0
- package/dist/lib/get_netmask.js +9 -11
- package/dist/lib/get_password.d.ts +8 -0
- package/dist/lib/get_password.js +10 -13
- package/dist/lib/get_userfullname.d.ts +8 -0
- package/dist/lib/get_userfullname.js +9 -11
- package/dist/lib/get_username.d.ts +8 -0
- package/dist/lib/get_username.js +9 -12
- package/dist/lib/kill_me_softly.d.ts +11 -0
- package/dist/lib/kill_me_softly.js +19 -24
- package/dist/lib/select_address_type.d.ts +8 -0
- package/dist/lib/select_address_type.js +9 -12
- package/dist/lib/select_filesystem_type.d.ts +8 -0
- package/dist/lib/select_filesystem_type.js +19 -17
- package/dist/lib/select_installation_device.d.ts +8 -0
- package/dist/lib/select_installation_device.js +11 -15
- package/dist/lib/select_installation_mode.d.ts +8 -0
- package/dist/lib/select_installation_mode.js +9 -11
- package/dist/lib/select_interface.d.ts +8 -0
- package/dist/lib/select_interface.js +9 -12
- package/dist/lib/select_keyboard_layout.d.ts +11 -0
- package/dist/lib/select_keyboard_layout.js +11 -15
- package/dist/lib/select_keyboard_model.d.ts +11 -0
- package/dist/lib/select_keyboard_model.js +11 -15
- package/dist/lib/select_keyboard_option.d.ts +11 -0
- package/dist/lib/select_keyboard_option.js +11 -15
- package/dist/lib/select_keyboard_variant.d.ts +11 -0
- package/dist/lib/select_keyboard_variant.js +11 -15
- package/dist/lib/select_languages.d.ts +8 -0
- package/dist/lib/select_languages.js +11 -15
- package/dist/lib/select_regions.d.ts +8 -0
- package/dist/lib/select_regions.js +9 -11
- package/dist/lib/select_user_swap_choice.d.ts +8 -0
- package/dist/lib/select_user_swap_choice.js +13 -17
- package/dist/lib/select_zones.d.ts +8 -0
- package/dist/lib/select_zones.js +9 -11
- package/dist/lib/utils.d.ts +34 -0
- package/dist/lib/utils.js +24 -14
- package/manpages/doc/man/eggs.1.gz +0 -0
- package/manpages/doc/man/eggs.html +130 -76
- package/package.json +55 -74
- package/scripts/_eggs +9 -7
- package/scripts/eggs.bash +4 -4
- package/LICENSE +0 -339
- package/bin/dev +0 -17
- package/bin/run +0 -5
- package/conf/exclude.list.custom +0 -3
- package/dist/components/elements/information.js +0 -194
- package/dist/components/elements/steps.js +0 -152
- package/dist/components/elements/title.js +0 -36
- package/dist/interfaces/i-filters.js +0 -3
- package/dist/krill/krill-sequence.js +0 -645
- package/dist/lib/dependencies.js +0 -120
- package/manpages/doc/man/README.md +0 -0
- /package/conf/{exclude.list.usr → exclude.list.d/usr.list} +0 -0
package/dist/classes/pxe.js
CHANGED
|
@@ -1,40 +1,151 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
const tslib_1 = require("tslib");
|
|
11
|
-
const utils_1 = require("../lib/utils");
|
|
12
|
-
const distro_1 = tslib_1.__importDefault(require("./distro"));
|
|
13
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
14
|
-
const http_1 = tslib_1.__importDefault(require("http"));
|
|
15
|
-
const node_static_1 = tslib_1.__importDefault(require("node-static"));
|
|
16
|
-
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
17
|
-
const settings_1 = tslib_1.__importDefault(require("./settings"));
|
|
18
|
-
const utils_2 = tslib_1.__importDefault(require("./utils"));
|
|
2
|
+
* ./src/classes/pxe.ts
|
|
3
|
+
* penguins-eggs v.10.0.0 / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
19
8
|
// @ts-ignore
|
|
20
|
-
|
|
9
|
+
import etrick from 'etrick';
|
|
10
|
+
import fs from 'node:fs';
|
|
11
|
+
import http from 'node:http';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import nodeStatic from 'node-static';
|
|
21
14
|
// @ts-ignore
|
|
22
|
-
|
|
15
|
+
import tftp from 'tftp';
|
|
16
|
+
import { exec } from '../lib/utils.js';
|
|
17
|
+
import Distro from './distro.js';
|
|
18
|
+
import Settings from './settings.js';
|
|
19
|
+
import Utils from './utils.js';
|
|
20
|
+
// _dirname
|
|
21
|
+
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
23
22
|
/**
|
|
24
23
|
* Pxe:
|
|
25
24
|
*/
|
|
26
|
-
class Pxe {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
export default class Pxe {
|
|
26
|
+
bootLabel = '';
|
|
27
|
+
echo = {};
|
|
28
|
+
eggRoot = '';
|
|
29
|
+
initrdImg = '';
|
|
30
|
+
isos = []; // cuckoo's nest
|
|
31
|
+
nest = '';
|
|
32
|
+
pxeRoot = '';
|
|
33
|
+
settings = {};
|
|
34
|
+
verbose = false;
|
|
35
|
+
vmlinuz = '';
|
|
36
|
+
/**
|
|
37
|
+
* configure PXE bios
|
|
38
|
+
*/
|
|
39
|
+
async bios() {
|
|
40
|
+
console.log('creating cuckoo configuration pxe: BIOS');
|
|
41
|
+
await this.tryCatch(`cp ${__dirname}/../../addons/eggs/theme/livecd/isolinux.theme.cfg ${this.pxeRoot}/isolinux.theme.cfg`);
|
|
42
|
+
await this.tryCatch(`cp ${__dirname}/../../addons/eggs/theme/livecd/splash.png ${this.pxeRoot}/splash.png`);
|
|
43
|
+
/**
|
|
44
|
+
* ipxe.efi
|
|
45
|
+
*/
|
|
46
|
+
await this.tryCatch(`ln -s ${__dirname}/../../ipxe/ipxe.efi ${this.pxeRoot}/ipxe.efi`);
|
|
47
|
+
// pxe
|
|
48
|
+
const distro = new Distro();
|
|
49
|
+
await this.tryCatch(`ln -s ${distro.pxelinuxPath}pxelinux.0 ${this.pxeRoot}/pxelinux.0`);
|
|
50
|
+
await this.tryCatch(`ln -s ${distro.pxelinuxPath}lpxelinux.0 ${this.pxeRoot}/lpxelinux.0`);
|
|
51
|
+
// syslinux
|
|
52
|
+
await this.tryCatch(`ln -s ${distro.syslinuxPath}ldlinux.c32 ${this.pxeRoot}/ldlinux.c32`);
|
|
53
|
+
await this.tryCatch(`ln -s ${distro.syslinuxPath}vesamenu.c32 ${this.pxeRoot}/vesamenu.c32`);
|
|
54
|
+
await this.tryCatch(`ln -s ${distro.syslinuxPath}libcom32.c32 ${this.pxeRoot}/libcom32.c32`);
|
|
55
|
+
await this.tryCatch(`ln -s ${distro.syslinuxPath}libutil.c32 ${this.pxeRoot}/libutil.c32`);
|
|
56
|
+
await this.tryCatch(`ln -s ${distro.memdiskPath}memdisk ${this.pxeRoot}/memdisk`);
|
|
57
|
+
await this.tryCatch(`mkdir ${this.pxeRoot}/pxelinux.cfg`);
|
|
58
|
+
let content = '';
|
|
59
|
+
content += '# eggs: pxelinux.cfg/default\n';
|
|
60
|
+
content += '# search path for the c32 support libraries (libcom32, libutil etc.)\n';
|
|
61
|
+
content += 'path\n';
|
|
62
|
+
content += 'include isolinux.theme.cfg\n';
|
|
63
|
+
content += 'UI vesamenu.c32\n';
|
|
64
|
+
content += '\n';
|
|
65
|
+
content += `menu title cuckoo: when you need a flying PXE server! ${Utils.address()}\n`;
|
|
66
|
+
content += 'PROMPT 0\n';
|
|
67
|
+
content += 'TIMEOUT 200\n';
|
|
68
|
+
content += '\n';
|
|
69
|
+
content += 'label egg\n';
|
|
70
|
+
content += `menu label ${this.bootLabel.replace('.iso', '')}\n`;
|
|
71
|
+
if (this.settings.distro.familyId === 'debian') {
|
|
72
|
+
/**
|
|
73
|
+
* DEBIAN
|
|
74
|
+
*/
|
|
75
|
+
const clid = this.settings.distro.codenameLikeId;
|
|
76
|
+
if (clid === 'bionic' || clid === 'stretch' || clid === 'jessie') {
|
|
77
|
+
content += 'kernel vmlinuz\n';
|
|
78
|
+
content += `append initrd=initrd boot=live config noswap noprompt fetch=http://${Utils.address()}/live/filesystem.squashfs\n`;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
content += `kernel http://${Utils.address()}/vmlinuz\n`;
|
|
82
|
+
content += `append initrd=http://${Utils.address()}/initrd boot=live config noswap noprompt fetch=http://${Utils.address()}/live/filesystem.squashfs\n`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (distro.familyId === 'archlinux') {
|
|
86
|
+
/**
|
|
87
|
+
* ARCH LINUX
|
|
88
|
+
*/
|
|
89
|
+
let tool = 'archiso';
|
|
90
|
+
if (distro.distroId === 'ManjaroLinux') {
|
|
91
|
+
tool = 'miso';
|
|
92
|
+
}
|
|
93
|
+
content += `kernel http://${Utils.address()}/vmlinuz\n`;
|
|
94
|
+
content += `append initrd=http://${Utils.address()}/initrd boot=live config noswap noprompt ${tool}_http_srv=http://${Utils.address()}/\n`;
|
|
95
|
+
content += 'sysappend 3\n';
|
|
96
|
+
content += '\n';
|
|
97
|
+
}
|
|
98
|
+
if (this.isos.length > 0) {
|
|
99
|
+
content += 'menu separator\n';
|
|
100
|
+
for (const iso of this.isos) {
|
|
101
|
+
content += '\n';
|
|
102
|
+
content += `label ${iso}\n`;
|
|
103
|
+
content += `menu label ${iso}\n`;
|
|
104
|
+
content += `kernel http://${Utils.address()}/memdisk\n`;
|
|
105
|
+
content += `initrd http://${Utils.address()}/${iso}\n`;
|
|
106
|
+
content += 'append iso raw sysappend 3\n';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const file = `${this.pxeRoot}/pxelinux.cfg/default`;
|
|
110
|
+
fs.writeFileSync(file, content);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* build
|
|
114
|
+
*/
|
|
115
|
+
async build() {
|
|
116
|
+
if (fs.existsSync(this.pxeRoot)) {
|
|
117
|
+
await this.tryCatch(`rm ${this.pxeRoot} -rf`);
|
|
118
|
+
}
|
|
119
|
+
await this.tryCatch(`mkdir ${this.pxeRoot} -p`);
|
|
120
|
+
await this.tryCatch(`mkdir ${this.pxeRoot} -p`);
|
|
121
|
+
await this.tryCatch(`ln -s ${this.eggRoot}live ${this.pxeRoot}/live`);
|
|
122
|
+
await this.tryCatch(`ln -s ${this.nest}.disk ${this.pxeRoot}/.disk`);
|
|
123
|
+
if (this.settings.distro.distroId === 'ManjaroLinux') {
|
|
124
|
+
await this.tryCatch(`ln -s ${this.eggRoot}manjaro ${this.pxeRoot}/manjaro`);
|
|
125
|
+
}
|
|
126
|
+
else if (this.settings.distro.distroId === 'Arch' || this.settings.distro.distroId === 'RebornOS') {
|
|
127
|
+
await this.tryCatch(`ln -s ${this.eggRoot}arch ${this.pxeRoot}/arch`);
|
|
128
|
+
}
|
|
129
|
+
if (fs.existsSync(this.eggRoot)) {
|
|
130
|
+
await this.tryCatch(`cp ${this.eggRoot}live/${this.vmlinuz} ${this.pxeRoot}/vmlinuz`, true);
|
|
131
|
+
await this.tryCatch(`chmod 777 ${this.pxeRoot}/vmlinuz`);
|
|
132
|
+
await this.tryCatch(`cp ${this.eggRoot}live/${this.initrdImg} ${this.pxeRoot}/initrd`, true);
|
|
133
|
+
await this.tryCatch(`chmod 777 ${this.pxeRoot}/initrd`);
|
|
134
|
+
}
|
|
135
|
+
// link iso images in pxe
|
|
136
|
+
for (const iso of this.isos) {
|
|
137
|
+
await this.tryCatch(`ln -s ${this.nest}/${iso} ${this.pxeRoot}/${iso}`);
|
|
138
|
+
}
|
|
139
|
+
await this.bios();
|
|
140
|
+
await this.ipxe();
|
|
141
|
+
await this.http();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
*
|
|
145
|
+
* @param dhcpOptions
|
|
146
|
+
*/
|
|
147
|
+
dhcpStart(dhcpOptions) {
|
|
148
|
+
new etrick(dhcpOptions);
|
|
38
149
|
}
|
|
39
150
|
/**
|
|
40
151
|
* fertilization()
|
|
@@ -42,9 +153,9 @@ class Pxe {
|
|
|
42
153
|
* cuckoo's nest
|
|
43
154
|
*/
|
|
44
155
|
async fertilization() {
|
|
45
|
-
this.settings = new
|
|
156
|
+
this.settings = new Settings();
|
|
46
157
|
await this.settings.load();
|
|
47
|
-
if (
|
|
158
|
+
if (Utils.isLive()) {
|
|
48
159
|
this.eggRoot = this.settings.distro.liveMediumPath;
|
|
49
160
|
if (
|
|
50
161
|
// ArchisoCompatibles
|
|
@@ -56,15 +167,15 @@ class Pxe {
|
|
|
56
167
|
this.settings.distro.distroId === 'phyOS' ||
|
|
57
168
|
this.settings.distro.distroId === 'RebornOS') {
|
|
58
169
|
this.eggRoot = '/run/archiso/bootmnt/';
|
|
59
|
-
await
|
|
60
|
-
await
|
|
170
|
+
await exec(`mkdir ${this.eggRoot} -p`);
|
|
171
|
+
await exec(`mount /dev/sr0 ${this.eggRoot}`);
|
|
61
172
|
}
|
|
62
173
|
}
|
|
63
174
|
else {
|
|
64
|
-
//this.eggRoot = path.dirname(this.settings.config.snapshot_mnt) + '/iso/'
|
|
175
|
+
// this.eggRoot = path.dirname(this.settings.config.snapshot_mnt) + '/iso/'
|
|
65
176
|
this.eggRoot = this.settings.config.snapshot_mnt + 'iso/';
|
|
66
177
|
}
|
|
67
|
-
if (!
|
|
178
|
+
if (!Utils.isLive() && !fs.existsSync(this.settings.config.snapshot_mnt)) {
|
|
68
179
|
console.log('no image available, build an image with: sudo eggs produce');
|
|
69
180
|
process.exit();
|
|
70
181
|
}
|
|
@@ -73,8 +184,8 @@ class Pxe {
|
|
|
73
184
|
/**
|
|
74
185
|
* se pxeRoot non esiste viene creato
|
|
75
186
|
*/
|
|
76
|
-
if (!
|
|
77
|
-
await
|
|
187
|
+
if (!fs.existsSync(this.pxeRoot)) {
|
|
188
|
+
await exec(`mkdir ${this.pxeRoot} -p`);
|
|
78
189
|
}
|
|
79
190
|
/**
|
|
80
191
|
* Ricerca delle ISOs
|
|
@@ -97,22 +208,22 @@ class Pxe {
|
|
|
97
208
|
* live: this.iso/live
|
|
98
209
|
*/
|
|
99
210
|
const pathFiles = this.eggRoot + 'live';
|
|
100
|
-
const files =
|
|
211
|
+
const files = fs.readdirSync(pathFiles);
|
|
101
212
|
for (const file of files) {
|
|
102
213
|
if (this.settings.distro.familyId === 'debian') {
|
|
103
|
-
if (
|
|
104
|
-
this.vmlinuz =
|
|
214
|
+
if (path.basename(file).slice(0, 7) === 'vmlinuz') {
|
|
215
|
+
this.vmlinuz = path.basename(file);
|
|
105
216
|
}
|
|
106
|
-
if (
|
|
107
|
-
this.initrdImg =
|
|
217
|
+
if (path.basename(file).slice(0, 6) === 'initrd') {
|
|
218
|
+
this.initrdImg = path.basename(file);
|
|
108
219
|
}
|
|
109
220
|
}
|
|
110
221
|
else if (this.settings.distro.familyId === 'archlinux') {
|
|
111
|
-
if (
|
|
112
|
-
this.vmlinuz =
|
|
222
|
+
if (path.basename(file).slice(0, 7) === 'vmlinuz') {
|
|
223
|
+
this.vmlinuz = path.basename(file);
|
|
113
224
|
}
|
|
114
|
-
if (
|
|
115
|
-
this.initrdImg =
|
|
225
|
+
if (path.basename(file).slice(0, 9) === 'initramfs') {
|
|
226
|
+
this.initrdImg = path.basename(file);
|
|
116
227
|
}
|
|
117
228
|
}
|
|
118
229
|
}
|
|
@@ -120,8 +231,8 @@ class Pxe {
|
|
|
120
231
|
* bootLabel
|
|
121
232
|
*/
|
|
122
233
|
this.bootLabel = 'not found';
|
|
123
|
-
if (
|
|
124
|
-
const a =
|
|
234
|
+
if (fs.existsSync(this.eggRoot + '/.disk/mkisofs')) {
|
|
235
|
+
const a = fs.readFileSync(this.eggRoot + '/.disk/mkisofs', 'utf8');
|
|
125
236
|
const b = a.slice(Math.max(0, a.indexOf('-o ') + 3));
|
|
126
237
|
const c = b.slice(0, Math.max(0, b.indexOf(' ')));
|
|
127
238
|
this.bootLabel = c.slice(Math.max(0, c.lastIndexOf('/') + 1));
|
|
@@ -131,111 +242,43 @@ class Pxe {
|
|
|
131
242
|
console.log(`initrd: ${this.initrdImg}`);
|
|
132
243
|
}
|
|
133
244
|
/**
|
|
134
|
-
*
|
|
135
|
-
*/
|
|
136
|
-
async build() {
|
|
137
|
-
if (fs_1.default.existsSync(this.pxeRoot)) {
|
|
138
|
-
await this.tryCatch(`rm ${this.pxeRoot} -rf`);
|
|
139
|
-
}
|
|
140
|
-
await this.tryCatch(`mkdir ${this.pxeRoot} -p`);
|
|
141
|
-
await this.tryCatch(`mkdir ${this.pxeRoot} -p`);
|
|
142
|
-
await this.tryCatch(`ln -s ${this.eggRoot}live ${this.pxeRoot}/live`);
|
|
143
|
-
await this.tryCatch(`ln -s ${this.nest}.disk ${this.pxeRoot}/.disk`);
|
|
144
|
-
if (this.settings.distro.distroId === 'ManjaroLinux') {
|
|
145
|
-
await this.tryCatch(`ln -s ${this.eggRoot}manjaro ${this.pxeRoot}/manjaro`);
|
|
146
|
-
}
|
|
147
|
-
else if (this.settings.distro.distroId === 'Arch' || this.settings.distro.distroId === 'RebornOS') {
|
|
148
|
-
await this.tryCatch(`ln -s ${this.eggRoot}arch ${this.pxeRoot}/arch`);
|
|
149
|
-
}
|
|
150
|
-
if (fs_1.default.existsSync(this.eggRoot)) {
|
|
151
|
-
await this.tryCatch(`cp ${this.eggRoot}live/${this.vmlinuz} ${this.pxeRoot}/vmlinuz`, true);
|
|
152
|
-
await this.tryCatch(`chmod 777 ${this.pxeRoot}/vmlinuz`);
|
|
153
|
-
await this.tryCatch(`cp ${this.eggRoot}live/${this.initrdImg} ${this.pxeRoot}/initrd`, true);
|
|
154
|
-
await this.tryCatch(`chmod 777 ${this.pxeRoot}/initrd`);
|
|
155
|
-
}
|
|
156
|
-
// link iso images in pxe
|
|
157
|
-
for (const iso of this.isos) {
|
|
158
|
-
await this.tryCatch(`ln -s ${this.nest}/${iso} ${this.pxeRoot}/${iso}`);
|
|
159
|
-
}
|
|
160
|
-
await this.bios();
|
|
161
|
-
await this.ipxe();
|
|
162
|
-
await this.http();
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* configure PXE bios
|
|
245
|
+
* configure PXE http server
|
|
166
246
|
*/
|
|
167
|
-
async
|
|
168
|
-
console.log('creating cuckoo configuration
|
|
169
|
-
|
|
170
|
-
await this.tryCatch(`cp ${__dirname}/../../addons/eggs/theme/livecd/splash.png ${this.pxeRoot}/splash.png`);
|
|
171
|
-
/**
|
|
172
|
-
* ipxe.efi
|
|
173
|
-
*/
|
|
174
|
-
await this.tryCatch(`ln -s ${__dirname}/../../ipxe/ipxe.efi ${this.pxeRoot}/ipxe.efi`);
|
|
175
|
-
// pxe
|
|
176
|
-
const distro = new distro_1.default();
|
|
177
|
-
await this.tryCatch(`ln -s ${distro.pxelinuxPath}pxelinux.0 ${this.pxeRoot}/pxelinux.0`);
|
|
178
|
-
await this.tryCatch(`ln -s ${distro.pxelinuxPath}lpxelinux.0 ${this.pxeRoot}/lpxelinux.0`);
|
|
179
|
-
// syslinux
|
|
180
|
-
await this.tryCatch(`ln -s ${distro.syslinuxPath}ldlinux.c32 ${this.pxeRoot}/ldlinux.c32`);
|
|
181
|
-
await this.tryCatch(`ln -s ${distro.syslinuxPath}vesamenu.c32 ${this.pxeRoot}/vesamenu.c32`);
|
|
182
|
-
await this.tryCatch(`ln -s ${distro.syslinuxPath}libcom32.c32 ${this.pxeRoot}/libcom32.c32`);
|
|
183
|
-
await this.tryCatch(`ln -s ${distro.syslinuxPath}libutil.c32 ${this.pxeRoot}/libutil.c32`);
|
|
184
|
-
await this.tryCatch(`ln -s ${distro.memdiskPath}memdisk ${this.pxeRoot}/memdisk`);
|
|
185
|
-
await this.tryCatch(`mkdir ${this.pxeRoot}/pxelinux.cfg`);
|
|
247
|
+
async http() {
|
|
248
|
+
console.log('creating cuckoo configuration: PXE html');
|
|
249
|
+
const file = `${this.pxeRoot}/index.html`;
|
|
186
250
|
let content = '';
|
|
187
|
-
content += '
|
|
188
|
-
content += '
|
|
189
|
-
content += '
|
|
190
|
-
content +=
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
content += `menu title cuckoo: when you need a flying PXE server! ${utils_2.default.address()}\n`;
|
|
194
|
-
content += 'PROMPT 0\n';
|
|
195
|
-
content += 'TIMEOUT 200\n';
|
|
196
|
-
content += '\n';
|
|
197
|
-
content += 'label egg\n';
|
|
198
|
-
content += `menu label ${this.bootLabel.replace('.iso', '')}\n`;
|
|
199
|
-
if (this.settings.distro.familyId === 'debian') {
|
|
200
|
-
/**
|
|
201
|
-
* DEBIAN
|
|
202
|
-
*/
|
|
203
|
-
const clid = this.settings.distro.codenameLikeId;
|
|
204
|
-
if (clid === 'bionic' || clid === 'stretch' || clid === 'jessie') {
|
|
205
|
-
content += 'kernel vmlinuz\n';
|
|
206
|
-
content += `append initrd=initrd boot=live config noswap noprompt fetch=http://${utils_2.default.address()}/live/filesystem.squashfs\n`;
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
content += `kernel http://${utils_2.default.address()}/vmlinuz\n`;
|
|
210
|
-
content += `append initrd=http://${utils_2.default.address()}/initrd boot=live config noswap noprompt fetch=http://${utils_2.default.address()}/live/filesystem.squashfs\n`;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
else if (distro.familyId === 'archlinux') {
|
|
214
|
-
/**
|
|
215
|
-
* ARCH LINUX
|
|
216
|
-
*/
|
|
217
|
-
let tool = 'archiso';
|
|
218
|
-
if (distro.distroId === 'ManjaroLinux') {
|
|
219
|
-
tool = 'miso';
|
|
220
|
-
}
|
|
221
|
-
content += `kernel http://${utils_2.default.address()}/vmlinuz\n`;
|
|
222
|
-
content += `append initrd=http://${utils_2.default.address()}/initrd boot=live config noswap noprompt ${tool}_http_srv=http://${utils_2.default.address()}/\n`;
|
|
223
|
-
content += 'sysappend 3\n';
|
|
224
|
-
content += '\n';
|
|
251
|
+
content += '<html><title>Penguin\'s eggs PXE server</title>';
|
|
252
|
+
content += '<div style="background-image:url(\'/splash.png\');background-repeat:no-repeat;width: 640;height:480;padding:5px;border:1px solid black;">';
|
|
253
|
+
content += '<h1>Cucko PXE server</h1>';
|
|
254
|
+
content += `<body>address: <a href=http://${Utils.address()}>${Utils.address()}</a><br/>`;
|
|
255
|
+
if (Utils.isLive()) {
|
|
256
|
+
content += 'started from live iso image<br/>';
|
|
225
257
|
}
|
|
226
|
-
|
|
227
|
-
content += '
|
|
258
|
+
else {
|
|
259
|
+
content += 'Serving:<li>';
|
|
228
260
|
for (const iso of this.isos) {
|
|
229
|
-
content += '
|
|
230
|
-
content += `label ${iso}\n`;
|
|
231
|
-
content += `menu label ${iso}\n`;
|
|
232
|
-
content += `kernel http://${utils_2.default.address()}/memdisk\n`;
|
|
233
|
-
content += `initrd http://${utils_2.default.address()}/${iso}\n`;
|
|
234
|
-
content += 'append iso raw sysappend 3\n';
|
|
261
|
+
content += `<ul><a href='http://${Utils.address()}/${iso}'>${iso}</a></ul>`;
|
|
235
262
|
}
|
|
263
|
+
content += '</li>';
|
|
236
264
|
}
|
|
237
|
-
|
|
238
|
-
|
|
265
|
+
content += 'source: <a href=\'https://github.com/pieroproietti/penguins-eggs\'>https://github.com/pieroproietti/penguins-eggs</a><br/>';
|
|
266
|
+
content += 'manual: <a href=\'https://penguins-eggs.net/book/italiano9.2.html\'>italiano</a>, <a href=\'https://penguins--eggs-net.translate.goog/book/italiano9.2?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en\'>translated</a><br/>';
|
|
267
|
+
content += 'discuss: <a href=\'https://t.me/penguins_eggs\'>Telegram group<br/></body</html>';
|
|
268
|
+
fs.writeFileSync(file, content);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* start http server for images
|
|
272
|
+
*
|
|
273
|
+
*/
|
|
274
|
+
async httpStart() {
|
|
275
|
+
const port = 80;
|
|
276
|
+
const httpRoot = this.pxeRoot + '/';
|
|
277
|
+
console.log('http listening: 0.0.0.0:' + port);
|
|
278
|
+
const file = new (nodeStatic.Server)(httpRoot);
|
|
279
|
+
http.createServer((req, res) => {
|
|
280
|
+
file.serve(req, res);
|
|
281
|
+
}).listen(port);
|
|
239
282
|
}
|
|
240
283
|
/**
|
|
241
284
|
*
|
|
@@ -245,13 +288,13 @@ class Pxe {
|
|
|
245
288
|
let content = '#!ipxe\n';
|
|
246
289
|
content += 'dhcp\n';
|
|
247
290
|
content += 'set net0/ip=dhcp\n';
|
|
248
|
-
content += `console --picture http://${
|
|
291
|
+
content += `console --picture http://${Utils.address()}/splash.png -x 1024 -y 768\n`;
|
|
249
292
|
content += 'goto start ||\n';
|
|
250
293
|
content += '\n';
|
|
251
294
|
content += ':start\n';
|
|
252
|
-
content += `set server_root http://${
|
|
295
|
+
content += `set server_root http://${Utils.address()}:80/\n`;
|
|
253
296
|
const serverRootVars = '${server_root}';
|
|
254
|
-
content += `menu cuckoo: when you need a flying PXE server! ${
|
|
297
|
+
content += `menu cuckoo: when you need a flying PXE server! ${Utils.address()}\n`;
|
|
255
298
|
content += 'item --gap boot from ovarium\n';
|
|
256
299
|
content += `item egg-menu \${space} ${this.bootLabel.replaceAll('.iso', '')}\n\n`;
|
|
257
300
|
if (this.isos.length > 0) {
|
|
@@ -268,8 +311,8 @@ class Pxe {
|
|
|
268
311
|
content += 'goto ${target}\n';
|
|
269
312
|
content += '\n';
|
|
270
313
|
content += ':egg-menu\n';
|
|
271
|
-
content += `kernel http://${
|
|
272
|
-
content += `initrd http://${
|
|
314
|
+
content += `kernel http://${Utils.address()}/vmlinuz\n`;
|
|
315
|
+
content += `initrd http://${Utils.address()}/initrd\n`;
|
|
273
316
|
/**
|
|
274
317
|
* CORRECT:
|
|
275
318
|
* content += `imgargs vmlinuz fetch=http://${Utils.address()}/live/filesystem.squashfs boot=live dhcp initrd=initrd ro\n`
|
|
@@ -278,7 +321,7 @@ class Pxe {
|
|
|
278
321
|
/**
|
|
279
322
|
* DEBIAN
|
|
280
323
|
*/
|
|
281
|
-
content += `imgargs vmlinuz fetch=http://${
|
|
324
|
+
content += `imgargs vmlinuz fetch=http://${Utils.address()}/live/filesystem.squashfs boot=live dhcp initrd=initrd ro\n`;
|
|
282
325
|
}
|
|
283
326
|
else if (this.settings.distro.familyId === 'archlinux') {
|
|
284
327
|
/**
|
|
@@ -288,7 +331,7 @@ class Pxe {
|
|
|
288
331
|
if (this.settings.distro.codenameId === 'Qonos' || this.settings.distro.codenameId === 'Ruah' || this.settings.distro.codenameId === 'Sikaris' || this.settings.distro.codenameId === 'UltimaThule') {
|
|
289
332
|
tool = 'miso';
|
|
290
333
|
}
|
|
291
|
-
content += `imgargs vmlinuz ${tool}_http_srv=http://${
|
|
334
|
+
content += `imgargs vmlinuz ${tool}_http_srv=http://${Utils.address()}/ boot=live dhcp initrd=initrd ro\n`;
|
|
292
335
|
// content += 'ipappend 3\n'
|
|
293
336
|
}
|
|
294
337
|
content += 'sleep 5\n';
|
|
@@ -312,66 +355,20 @@ class Pxe {
|
|
|
312
355
|
content += 'chain --autofree http://boot.netboot.xyz/menu.ipxe || echo HTTP failed, localbooting...\n';
|
|
313
356
|
content += 'goto start\n\n';
|
|
314
357
|
const file = `${this.pxeRoot}/autoexec.ipxe`;
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* configure PXE http server
|
|
319
|
-
*/
|
|
320
|
-
async http() {
|
|
321
|
-
console.log('creating cuckoo configuration: PXE html');
|
|
322
|
-
const file = `${this.pxeRoot}/index.html`;
|
|
323
|
-
let content = '';
|
|
324
|
-
content += '<html><title>Penguin\'s eggs PXE server</title>';
|
|
325
|
-
content += '<div style="background-image:url(\'/splash.png\');background-repeat:no-repeat;width: 640;height:480;padding:5px;border:1px solid black;">';
|
|
326
|
-
content += '<h1>Cucko PXE server</h1>';
|
|
327
|
-
content += `<body>address: <a href=http://${utils_2.default.address()}>${utils_2.default.address()}</a><br/>`;
|
|
328
|
-
if (!utils_2.default.isLive()) {
|
|
329
|
-
content += 'Serving:<li>';
|
|
330
|
-
for (const iso of this.isos) {
|
|
331
|
-
content += `<ul><a href='http://${utils_2.default.address()}/${iso}'>${iso}</a></ul>`;
|
|
332
|
-
}
|
|
333
|
-
content += '</li>';
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
content += 'started from live iso image<br/>';
|
|
337
|
-
}
|
|
338
|
-
content += 'source: <a href=\'https://github.com/pieroproietti/penguins-eggs\'>https://github.com/pieroproietti/penguins-eggs</a><br/>';
|
|
339
|
-
content += 'manual: <a href=\'https://penguins-eggs.net/book/italiano9.2.html\'>italiano</a>, <a href=\'https://penguins--eggs-net.translate.goog/book/italiano9.2?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en\'>translated</a><br/>';
|
|
340
|
-
content += 'discuss: <a href=\'https://t.me/penguins_eggs\'>Telegram group<br/></body</html>';
|
|
341
|
-
fs_1.default.writeFileSync(file, content);
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
*
|
|
345
|
-
* @param dhcpOptions
|
|
346
|
-
*/
|
|
347
|
-
dhcpStart(dhcpOptions) {
|
|
348
|
-
new etrick_1.default(dhcpOptions);
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* start http server for images
|
|
352
|
-
*
|
|
353
|
-
*/
|
|
354
|
-
async httpStart() {
|
|
355
|
-
const port = 80;
|
|
356
|
-
const httpRoot = this.pxeRoot + '/';
|
|
357
|
-
console.log('http listening: 0.0.0.0:' + port);
|
|
358
|
-
const file = new (node_static_1.default.Server)(httpRoot);
|
|
359
|
-
http_1.default.createServer(function (req, res) {
|
|
360
|
-
file.serve(req, res);
|
|
361
|
-
}).listen(port);
|
|
358
|
+
fs.writeFileSync(file, content);
|
|
362
359
|
}
|
|
363
360
|
/**
|
|
364
361
|
* start tftp
|
|
365
362
|
*/
|
|
366
363
|
async tftpStart(tftpOptions) {
|
|
367
|
-
const tftpServer =
|
|
368
|
-
tftpServer.on('error',
|
|
364
|
+
const tftpServer = tftp.createServer(tftpOptions);
|
|
365
|
+
tftpServer.on('error', (error) => {
|
|
369
366
|
// Errors from the main socket
|
|
370
367
|
// The current transfers are not aborted
|
|
371
368
|
console.error(error);
|
|
372
369
|
});
|
|
373
|
-
tftpServer.on('request',
|
|
374
|
-
req.on('error',
|
|
370
|
+
tftpServer.on('request', (req, res) => {
|
|
371
|
+
req.on('error', (error) => {
|
|
375
372
|
// Error from the request
|
|
376
373
|
// The connection is already closed
|
|
377
374
|
console.error('[' + req.stats.remoteAddress + ':' + req.stats.remotePort + '] (' + req.file + ') ' + error.message);
|
|
@@ -388,12 +385,11 @@ class Pxe {
|
|
|
388
385
|
if (echo) {
|
|
389
386
|
console.log(cmd);
|
|
390
387
|
}
|
|
391
|
-
await
|
|
388
|
+
await exec(cmd, this.echo);
|
|
392
389
|
}
|
|
393
390
|
catch (error) {
|
|
394
391
|
console.log(`Error: ${error}`);
|
|
395
|
-
await
|
|
392
|
+
await Utils.pressKeyToExit(cmd);
|
|
396
393
|
}
|
|
397
394
|
}
|
|
398
395
|
}
|
|
399
|
-
exports.default = Pxe;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/settings.ts
|
|
3
|
+
* penguins-eggs v.10.0.0 / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import { IApp, IDistro, IRemix, IWorkDir } from '../interfaces/index.js';
|
|
9
|
+
import { IEggsConfig } from '../interfaces/index.js';
|
|
10
|
+
import Incubator from './incubation/incubator.js';
|
|
11
|
+
/**
|
|
12
|
+
* Setting
|
|
13
|
+
*/
|
|
14
|
+
export default class Settings {
|
|
15
|
+
app: IApp;
|
|
16
|
+
config: IEggsConfig;
|
|
17
|
+
distro: IDistro;
|
|
18
|
+
efi_work: string;
|
|
19
|
+
i686: boolean;
|
|
20
|
+
incubator: Incubator;
|
|
21
|
+
initrd_image: string;
|
|
22
|
+
initrdImg: string;
|
|
23
|
+
isLive: boolean;
|
|
24
|
+
iso_work: string;
|
|
25
|
+
isoFilename: string;
|
|
26
|
+
kernel_image: string;
|
|
27
|
+
remix: IRemix;
|
|
28
|
+
session_excludes: string;
|
|
29
|
+
vmlinuz: string;
|
|
30
|
+
work_dir: IWorkDir;
|
|
31
|
+
constructor(compression?: string);
|
|
32
|
+
/**
|
|
33
|
+
* Calculate and show free space on the disk
|
|
34
|
+
* @returns {void}
|
|
35
|
+
*/
|
|
36
|
+
listFreeSpace(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Load configuration from config_file
|
|
39
|
+
* @returns {boolean} Success
|
|
40
|
+
*/
|
|
41
|
+
load(): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
*
|
|
44
|
+
* @param basename
|
|
45
|
+
* @param theme
|
|
46
|
+
*/
|
|
47
|
+
loadRemix(basename?: string, theme?: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
*
|
|
50
|
+
* @param config
|
|
51
|
+
*/
|
|
52
|
+
save(config: IEggsConfig): Promise<void>;
|
|
53
|
+
}
|