penguins-eggs 25.10.3 → 25.10.6
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 +826 -0
- package/conf/distros/archlinux/calamares/modules/bootloader.yml +86 -0
- package/conf/distros/archlinux/calamares/modules/partition.yml +8 -386
- package/conf/distros/archlinux/calamares/settings.yml +0 -4
- package/conf/distros/fedora/calamares/modules/README.md +4 -0
- package/conf/distros/fedora/calamares/modules/bootloader.yml +2 -1
- package/conf/distros/fedora/calamares/modules/mount.yml +6 -1
- package/conf/distros/fedora/calamares/settings.yml +6 -1
- package/conf/distros/focal/calamares/modules/mount.yml +23 -5
- package/conf/distros/noble/calamares/libexec/calamares-l10n-helper.sh +3 -0
- package/conf/distros/opensuse/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +1 -1
- package/conf/distros/opensuse/calamares/modules/dracut.mustache +7 -0
- package/conf/distros/opensuse/calamares/modules/packages.mustache +1 -0
- package/conf/distros/opensuse/calamares/modules/removeuser.mustache +2 -1
- package/conf/distros/opensuse/calamares/modules/unpackfs.mustache +2 -1
- package/conf/distros/opensuse/calamares/settings.yml +1 -1
- package/dist/classes/bleach.d.ts +37 -0
- package/dist/classes/bleach.js +148 -0
- package/dist/classes/cli-autologin.d.ts +52 -0
- package/dist/classes/cli-autologin.js +252 -0
- package/dist/classes/compressors.d.ts +54 -0
- package/dist/classes/compressors.js +109 -0
- package/dist/classes/daddy.d.ts +26 -0
- package/dist/classes/daddy.js +175 -0
- package/dist/classes/distro.d.ts +32 -0
- package/dist/classes/distro.js +356 -0
- package/dist/classes/diversions.d.ts +53 -0
- package/dist/classes/diversions.js +133 -0
- package/dist/classes/incubation/branding.d.ts +17 -0
- package/dist/classes/incubation/branding.js +85 -0
- package/dist/classes/incubation/customize/customize-partitions.d.ts +4 -0
- package/dist/classes/incubation/customize/customize-partitions.js +29 -0
- package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +1 -0
- package/dist/classes/incubation/fisherman-helper/initcpio.js +69 -0
- package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
- package/dist/classes/incubation/fisherman-helper/packages.js +72 -0
- package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
- package/dist/classes/incubation/fisherman-helper/settings.js +116 -0
- package/dist/classes/incubation/fisherman.d.ts +71 -0
- package/dist/classes/incubation/fisherman.js +281 -0
- package/dist/classes/incubation/incubator.d/alpine.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/alpine.js +78 -0
- package/dist/classes/incubation/incubator.d/archlinux.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/archlinux.js +81 -0
- package/dist/classes/incubation/incubator.d/bionic.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/bionic.js +83 -0
- package/dist/classes/incubation/incubator.d/buster.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/buster.js +101 -0
- package/dist/classes/incubation/incubator.d/fedora.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/fedora.js +81 -0
- package/dist/classes/incubation/incubator.d/focal.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/focal.js +85 -0
- package/dist/classes/incubation/incubator.d/manjaro.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/manjaro.js +82 -0
- package/dist/classes/incubation/incubator.d/noble.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/noble.js +102 -0
- package/dist/classes/incubation/incubator.d/openmamba.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/openmamba.js +81 -0
- package/dist/classes/incubation/incubator.d/opensuse.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/opensuse.js +81 -0
- package/dist/classes/incubation/incubator.d/trixie.d.ts +32 -0
- package/dist/classes/incubation/incubator.d/trixie.js +101 -0
- package/dist/classes/incubation/incubator.d.ts +48 -0
- package/dist/classes/incubation/incubator.js +378 -0
- package/dist/classes/incubation/installer.d.ts +13 -0
- package/dist/classes/incubation/installer.js +52 -0
- package/dist/classes/keyboards.d.ts +50 -0
- package/dist/classes/keyboards.js +287 -0
- package/dist/classes/locales.d.ts +21 -0
- package/dist/classes/locales.js +77 -0
- package/dist/classes/network.d.ts +37 -0
- package/dist/classes/network.js +98 -0
- package/dist/classes/ovary.d/bind-live-fs.d.ts +18 -0
- package/dist/classes/ovary.d/bind-live-fs.js +185 -0
- package/dist/classes/ovary.d/bind-vfs.d.ts +17 -0
- package/dist/classes/ovary.d/bind-vfs.js +37 -0
- package/dist/classes/ovary.d/create-xdg-autostart.d.ts +13 -0
- package/dist/classes/ovary.d/create-xdg-autostart.js +194 -0
- package/dist/classes/ovary.d/edit-live-fs.d.ts +20 -0
- package/dist/classes/ovary.d/edit-live-fs.js +245 -0
- package/dist/classes/ovary.d/fertilization.d.ts +12 -0
- package/dist/classes/ovary.d/fertilization.js +52 -0
- package/dist/classes/ovary.d/finished.d.ts +13 -0
- package/dist/classes/ovary.d/finished.js +44 -0
- package/dist/classes/ovary.d/initrd.d.ts +21 -0
- package/dist/classes/ovary.d/initrd.js +97 -0
- package/dist/classes/ovary.d/kernel-copy.d.ts +12 -0
- package/dist/classes/ovary.d/kernel-copy.js +22 -0
- package/dist/classes/ovary.d/live-create-structure.d.ts +12 -0
- package/dist/classes/ovary.d/live-create-structure.js +73 -0
- package/dist/classes/ovary.d/make-dot-disk.d.ts +12 -0
- package/dist/classes/ovary.d/make-dot-disk.js +62 -0
- package/dist/classes/ovary.d/make-efi.d.ts +14 -0
- package/dist/classes/ovary.d/make-efi.js +274 -0
- package/dist/classes/ovary.d/make-iso.d.ts +13 -0
- package/dist/classes/ovary.d/make-iso.js +45 -0
- package/dist/classes/ovary.d/make-squashfs.d.ts +18 -0
- package/dist/classes/ovary.d/make-squashfs.js +110 -0
- package/dist/classes/ovary.d/merged.d.ts +27 -0
- package/dist/classes/ovary.d/merged.js +78 -0
- package/dist/classes/ovary.d/produce.d.ts +23 -0
- package/dist/classes/ovary.d/produce.js +319 -0
- package/dist/classes/ovary.d/rexec.d.ts +13 -0
- package/dist/classes/ovary.d/rexec.js +34 -0
- package/dist/classes/ovary.d/syslinux.d.ts +12 -0
- package/dist/classes/ovary.d/syslinux.js +82 -0
- package/dist/classes/ovary.d/user-create-live.d.ts +14 -0
- package/dist/classes/ovary.d/user-create-live.js +97 -0
- package/dist/classes/ovary.d/users-remove.d.ts +9 -0
- package/dist/classes/ovary.d/users-remove.js +38 -0
- package/dist/classes/ovary.d/xorriso-command.d.ts +14 -0
- package/dist/classes/ovary.d/xorriso-command.js +123 -0
- package/dist/classes/ovary.d.ts +87 -0
- package/dist/classes/ovary.js +90 -0
- package/dist/classes/pacman.d/alpine.d.ts +56 -0
- package/dist/classes/pacman.d/alpine.js +167 -0
- package/dist/classes/pacman.d/archlinux.d.ts +62 -0
- package/dist/classes/pacman.d/archlinux.js +128 -0
- package/dist/classes/pacman.d/debian.d.ts +65 -0
- package/dist/classes/pacman.d/debian.js +143 -0
- package/dist/classes/pacman.d/fedora.d.ts +53 -0
- package/dist/classes/pacman.d/fedora.js +107 -0
- package/dist/classes/pacman.d/openmamba.d.ts +52 -0
- package/dist/classes/pacman.d/openmamba.js +106 -0
- package/dist/classes/pacman.d/opensuse.d.ts +53 -0
- package/dist/classes/pacman.d/opensuse.js +109 -0
- package/dist/classes/pacman.d.ts +139 -0
- package/dist/classes/pacman.js +683 -0
- package/dist/classes/pve-live.d.ts +17 -0
- package/dist/classes/pve-live.js +52 -0
- package/dist/classes/pxe.d.ts +76 -0
- package/dist/classes/pxe.js +353 -0
- package/dist/classes/settings.d.ts +52 -0
- package/dist/classes/settings.js +185 -0
- package/dist/classes/sources_list.d.ts +28 -0
- package/dist/classes/sources_list.js +89 -0
- package/dist/classes/systemctl.d.ts +47 -0
- package/dist/classes/systemctl.js +86 -0
- package/dist/classes/tailor.d.ts +50 -0
- package/dist/classes/tailor.js +563 -0
- package/dist/classes/tools.d.ts +26 -0
- package/dist/classes/tools.js +50 -0
- package/dist/classes/users.d.ts +28 -0
- package/dist/classes/users.js +143 -0
- package/dist/classes/utils.d/kernel.d.ts +39 -0
- package/dist/classes/utils.d/kernel.js +206 -0
- package/dist/classes/utils.d.ts +327 -0
- package/dist/classes/utils.js +955 -0
- package/dist/classes/xdg.d.ts +45 -0
- package/dist/classes/xdg.js +337 -0
- package/dist/classes/yolk.d.ts +33 -0
- package/dist/classes/yolk.js +114 -0
- package/dist/commands/adapt.d.ts +17 -0
- package/dist/commands/adapt.js +33 -0
- package/dist/commands/analyze.d.ts +26 -0
- package/dist/commands/analyze.js +95 -0
- package/dist/commands/calamares.d.ts +29 -0
- package/dist/commands/calamares.js +112 -0
- package/dist/commands/config.d.ts +35 -0
- package/dist/commands/config.js +120 -0
- package/dist/commands/cuckoo.d.ts +17 -0
- package/dist/commands/cuckoo.js +61 -0
- package/dist/commands/dad.d.ts +21 -0
- package/dist/commands/dad.js +47 -0
- package/dist/commands/export/iso.d.ts +19 -0
- package/dist/commands/export/iso.js +55 -0
- package/dist/commands/export/pkg.d.ts +29 -0
- package/dist/commands/export/pkg.js +173 -0
- package/dist/commands/export/tarballs.d.ts +27 -0
- package/dist/commands/export/tarballs.js +79 -0
- package/dist/commands/install.d.ts +39 -0
- package/dist/commands/install.js +113 -0
- package/dist/commands/kill.d.ts +24 -0
- package/dist/commands/kill.js +50 -0
- package/dist/commands/love.d.ts +21 -0
- package/dist/commands/love.js +73 -0
- package/dist/commands/mom.d.ts +16 -0
- package/dist/commands/mom.js +30 -0
- package/dist/commands/pods.d.ts +22 -0
- package/dist/commands/pods.js +92 -0
- package/dist/commands/produce.d.ts +35 -0
- package/dist/commands/produce.js +221 -0
- package/dist/commands/status.d.ts +23 -0
- package/dist/commands/status.js +31 -0
- package/dist/commands/syncfrom.d.ts +45 -0
- package/dist/commands/syncfrom.js +152 -0
- package/dist/commands/syncto.d.ts +40 -0
- package/dist/commands/syncto.js +175 -0
- package/dist/commands/tools/clean.d.ts +18 -0
- package/dist/commands/tools/clean.js +37 -0
- package/dist/commands/tools/ppa.d.ts +31 -0
- package/dist/commands/tools/ppa.js +244 -0
- package/dist/commands/tools/skel.d.ts +18 -0
- package/dist/commands/tools/skel.js +44 -0
- package/dist/commands/tools/stat.d.ts +31 -0
- package/dist/commands/tools/stat.js +70 -0
- package/dist/commands/tools/yolk.d.ts +24 -0
- package/dist/commands/tools/yolk.js +45 -0
- package/dist/commands/update.d.ts +46 -0
- package/dist/commands/update.js +238 -0
- package/dist/commands/wardrobe/get.d.ts +23 -0
- package/dist/commands/wardrobe/get.js +52 -0
- package/dist/commands/wardrobe/list.d.ts +24 -0
- package/dist/commands/wardrobe/list.js +125 -0
- package/dist/commands/wardrobe/show.d.ts +25 -0
- package/dist/commands/wardrobe/show.js +97 -0
- package/dist/commands/wardrobe/wear.d.ts +26 -0
- package/dist/commands/wardrobe/wear.js +84 -0
- package/dist/dhcpd-proxy/classes/packet.d.ts +36 -0
- package/dist/dhcpd-proxy/classes/packet.js +124 -0
- package/dist/dhcpd-proxy/index.d.ts +4 -0
- package/dist/dhcpd-proxy/index.js +4 -0
- package/dist/dhcpd-proxy/interfaces/i-pxe.d.ts +45 -0
- package/dist/dhcpd-proxy/interfaces/i-pxe.js +1 -0
- package/dist/dhcpd-proxy/lib/packet/converters.d.ts +11 -0
- package/dist/dhcpd-proxy/lib/packet/converters.js +395 -0
- package/dist/dhcpd-proxy/lib/packet/message-types.d.ts +10 -0
- package/dist/dhcpd-proxy/lib/packet/message-types.js +12 -0
- package/dist/dhcpd-proxy/lib/packet/options.d.ts +8 -0
- package/dist/dhcpd-proxy/lib/packet/options.js +264 -0
- package/dist/dhcpd-proxy/lib/sprintf.d.ts +6 -0
- package/dist/dhcpd-proxy/lib/sprintf.js +130 -0
- package/dist/dhcpd-proxy/lib/utils.d.ts +126 -0
- package/dist/dhcpd-proxy/lib/utils.js +255 -0
- package/dist/dhcpd-proxy/simple-proxy.d.ts +11 -0
- package/dist/dhcpd-proxy/simple-proxy.js +118 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/interfaces/calamares/i-calamares-bootloader.d.ts +23 -0
- package/dist/interfaces/calamares/i-calamares-bootloader.js +7 -0
- package/dist/interfaces/calamares/i-calamares-branding.d.ts +46 -0
- package/dist/interfaces/calamares/i-calamares-branding.js +1 -0
- package/dist/interfaces/calamares/i-calamares-displaymanager.d.ts +34 -0
- package/dist/interfaces/calamares/i-calamares-displaymanager.js +1 -0
- package/dist/interfaces/calamares/i-calamares-finished.d.ts +14 -0
- package/dist/interfaces/calamares/i-calamares-finished.js +1 -0
- package/dist/interfaces/calamares/i-calamares-packages.d.ts +26 -0
- package/dist/interfaces/calamares/i-calamares-packages.js +1 -0
- package/dist/interfaces/calamares/i-calamares-partitions.d.ts +39 -0
- package/dist/interfaces/calamares/i-calamares-partitions.js +1 -0
- package/dist/interfaces/calamares/i-calamares-settings.d.ts +36 -0
- package/dist/interfaces/calamares/i-calamares-settings.js +1 -0
- package/dist/interfaces/i-addons.d.ts +12 -0
- package/dist/interfaces/i-addons.js +8 -0
- package/dist/interfaces/i-analyze.d.ts +17 -0
- package/dist/interfaces/i-analyze.js +17 -0
- package/dist/interfaces/i-app.d.ts +14 -0
- package/dist/interfaces/i-app.js +8 -0
- package/dist/interfaces/i-config-tools.d.ts +15 -0
- package/dist/interfaces/i-config-tools.js +8 -0
- package/dist/interfaces/i-devices.d.ts +20 -0
- package/dist/interfaces/i-devices.js +8 -0
- package/dist/interfaces/i-distro.d.ts +23 -0
- package/dist/interfaces/i-distro.js +8 -0
- package/dist/interfaces/i-drive-list.d.ts +33 -0
- package/dist/interfaces/i-drive-list.js +8 -0
- package/dist/interfaces/i-eggs-config.d.ts +32 -0
- package/dist/interfaces/i-eggs-config.js +8 -0
- 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 +8 -0
- package/dist/interfaces/i-initrd.d.ts +13 -0
- package/dist/interfaces/i-initrd.js +8 -0
- package/dist/interfaces/i-install.d.ts +16 -0
- package/dist/interfaces/i-install.js +8 -0
- package/dist/interfaces/i-installer.d.ts +17 -0
- package/dist/interfaces/i-installer.js +8 -0
- package/dist/interfaces/i-luks-passphrase.d.ts +11 -0
- package/dist/interfaces/i-luks-passphrase.js +8 -0
- package/dist/interfaces/i-materia.d.ts +36 -0
- package/dist/interfaces/i-materia.js +8 -0
- package/dist/interfaces/i-net.d.ts +16 -0
- package/dist/interfaces/i-net.js +8 -0
- package/dist/interfaces/i-os-release.d.ts +5 -0
- package/dist/interfaces/i-os-release.js +1 -0
- package/dist/interfaces/i-packages.d.ts +16 -0
- package/dist/interfaces/i-packages.js +8 -0
- package/dist/interfaces/i-partitions.d.ts +16 -0
- package/dist/interfaces/i-partitions.js +8 -0
- package/dist/interfaces/i-pxe.d.ts +45 -0
- package/dist/interfaces/i-pxe.js +1 -0
- package/dist/interfaces/i-remix.d.ts +21 -0
- package/dist/interfaces/i-remix.js +8 -0
- package/dist/interfaces/i-settings.d.ts +33 -0
- package/dist/interfaces/i-settings.js +8 -0
- package/dist/interfaces/i-user.d.ts +14 -0
- package/dist/interfaces/i-user.js +8 -0
- package/dist/interfaces/i-workdir.d.ts +14 -0
- package/dist/interfaces/i-workdir.js +8 -0
- package/dist/interfaces/i-xkb-model.d.ts +24 -0
- package/dist/interfaces/i-xkb-model.js +8 -0
- package/dist/interfaces/index.d.ts +26 -0
- package/dist/interfaces/index.js +8 -0
- package/dist/krill/classes/cfs.d.ts +17 -0
- package/dist/krill/classes/cfs.js +39 -0
- package/dist/krill/classes/krill_enums.d.ts +37 -0
- package/dist/krill/classes/krill_enums.js +41 -0
- package/dist/krill/classes/prepare.d/confirm.d.ts +5 -0
- package/dist/krill/classes/prepare.d/confirm.js +30 -0
- package/dist/krill/classes/prepare.d/keyboard.d.ts +14 -0
- package/dist/krill/classes/prepare.d/keyboard.js +62 -0
- package/dist/krill/classes/prepare.d/location.d.ts +17 -0
- package/dist/krill/classes/prepare.d/location.js +59 -0
- package/dist/krill/classes/prepare.d/network.d.ts +14 -0
- package/dist/krill/classes/prepare.d/network.js +68 -0
- package/dist/krill/classes/prepare.d/partitions.d.ts +14 -0
- package/dist/krill/classes/prepare.d/partitions.js +86 -0
- package/dist/krill/classes/prepare.d/summary.d.ts +15 -0
- package/dist/krill/classes/prepare.d/summary.js +72 -0
- package/dist/krill/classes/prepare.d/users.d.ts +6 -0
- package/dist/krill/classes/prepare.d/users.js +63 -0
- package/dist/krill/classes/prepare.d/welcome.d.ts +6 -0
- package/dist/krill/classes/prepare.d/welcome.js +30 -0
- package/dist/krill/classes/prepare.d.ts +89 -0
- package/dist/krill/classes/prepare.js +319 -0
- package/dist/krill/classes/sequence.d/add_user.d.ts +20 -0
- package/dist/krill/classes/sequence.d/add_user.js +77 -0
- package/dist/krill/classes/sequence.d/bootloader.d.ts +14 -0
- package/dist/krill/classes/sequence.d/bootloader.js +117 -0
- package/dist/krill/classes/sequence.d/bootloader_config.d.ts +14 -0
- package/dist/krill/classes/sequence.d/bootloader_config.js +192 -0
- package/dist/krill/classes/sequence.d/change_password.d.ts +15 -0
- package/dist/krill/classes/sequence.d/change_password.js +18 -0
- package/dist/krill/classes/sequence.d/del_live_user.d.ts +14 -0
- package/dist/krill/classes/sequence.d/del_live_user.js +39 -0
- package/dist/krill/classes/sequence.d/fstab.d.ts +14 -0
- package/dist/krill/classes/sequence.d/fstab.js +177 -0
- package/dist/krill/classes/sequence.d/grubcfg.d.ts +17 -0
- package/dist/krill/classes/sequence.d/grubcfg.js +35 -0
- package/dist/krill/classes/sequence.d/hostname.d.ts +13 -0
- package/dist/krill/classes/sequence.d/hostname.js +50 -0
- package/dist/krill/classes/sequence.d/initramfs.d.ts +13 -0
- package/dist/krill/classes/sequence.d/initramfs.js +54 -0
- package/dist/krill/classes/sequence.d/initramfs_cfg.d.ts +14 -0
- package/dist/krill/classes/sequence.d/initramfs_cfg.js +35 -0
- package/dist/krill/classes/sequence.d/locale.d.ts +13 -0
- package/dist/krill/classes/sequence.d/locale.js +91 -0
- package/dist/krill/classes/sequence.d/locale_cfg.d.ts +10 -0
- package/dist/krill/classes/sequence.d/locale_cfg.js +58 -0
- package/dist/krill/classes/sequence.d/m_keyboard.d.ts +14 -0
- package/dist/krill/classes/sequence.d/m_keyboard.js +58 -0
- package/dist/krill/classes/sequence.d/machine_id.d.ts +15 -0
- package/dist/krill/classes/sequence.d/machine_id.js +33 -0
- package/dist/krill/classes/sequence.d/mkfs.d.ts +15 -0
- package/dist/krill/classes/sequence.d/mkfs.js +88 -0
- package/dist/krill/classes/sequence.d/mount_fs.d.ts +17 -0
- package/dist/krill/classes/sequence.d/mount_fs.js +68 -0
- package/dist/krill/classes/sequence.d/mount_vfs.d.ts +17 -0
- package/dist/krill/classes/sequence.d/mount_vfs.js +59 -0
- package/dist/krill/classes/sequence.d/network_cfg.d.ts +19 -0
- package/dist/krill/classes/sequence.d/network_cfg.js +73 -0
- package/dist/krill/classes/sequence.d/packages.d.ts +14 -0
- package/dist/krill/classes/sequence.d/packages.js +111 -0
- package/dist/krill/classes/sequence.d/partition.d/bios_luks.d.ts +17 -0
- package/dist/krill/classes/sequence.d/partition.d/bios_luks.js +73 -0
- package/dist/krill/classes/sequence.d/partition.d/bios_standard.d.ts +16 -0
- package/dist/krill/classes/sequence.d/partition.d/bios_standard.js +51 -0
- package/dist/krill/classes/sequence.d/partition.d/uefi_luks.d.ts +17 -0
- package/dist/krill/classes/sequence.d/partition.d/uefi_luks.js +77 -0
- package/dist/krill/classes/sequence.d/partition.d/uefi_standard.d.ts +10 -0
- package/dist/krill/classes/sequence.d/partition.d/uefi_standard.js +33 -0
- package/dist/krill/classes/sequence.d/partition.d.ts +14 -0
- package/dist/krill/classes/sequence.d/partition.js +84 -0
- package/dist/krill/classes/sequence.d/remove_installer_link.d.ts +13 -0
- package/dist/krill/classes/sequence.d/remove_installer_link.js +35 -0
- package/dist/krill/classes/sequence.d/umount.d.ts +14 -0
- package/dist/krill/classes/sequence.d/umount.js +28 -0
- package/dist/krill/classes/sequence.d/unpackfs.d.ts +13 -0
- package/dist/krill/classes/sequence.d/unpackfs.js +20 -0
- package/dist/krill/classes/sequence.d.ts +134 -0
- package/dist/krill/classes/sequence.js +400 -0
- package/dist/krill/components/finished.d.ts +16 -0
- package/dist/krill/components/finished.js +56 -0
- package/dist/krill/components/information.d.ts +8 -0
- package/dist/krill/components/information.js +162 -0
- package/dist/krill/components/install.d.ts +15 -0
- package/dist/krill/components/install.js +60 -0
- package/dist/krill/components/keyboard.d.ts +16 -0
- package/dist/krill/components/keyboard.js +54 -0
- package/dist/krill/components/location.d.ts +16 -0
- package/dist/krill/components/location.js +59 -0
- package/dist/krill/components/network.d.ts +19 -0
- package/dist/krill/components/network.js +65 -0
- package/dist/krill/components/partitions.d.ts +18 -0
- package/dist/krill/components/partitions.js +89 -0
- package/dist/krill/components/steps.d.ts +13 -0
- package/dist/krill/components/steps.js +148 -0
- package/dist/krill/components/summary.d.ts +25 -0
- package/dist/krill/components/summary.js +77 -0
- package/dist/krill/components/title.d.ts +11 -0
- package/dist/krill/components/title.js +35 -0
- package/dist/krill/components/users.d.ts +24 -0
- package/dist/krill/components/users.js +80 -0
- package/dist/krill/components/welcome.d.ts +13 -0
- package/dist/krill/components/welcome.js +63 -0
- package/dist/krill/interfaces/i_krill.d.ts +44 -0
- package/dist/krill/interfaces/i_krill.js +8 -0
- package/dist/krill/interfaces/i_krill_config.d.ts +35 -0
- package/dist/krill/interfaces/i_krill_config.js +8 -0
- package/dist/krill/lib/get_address.d.ts +8 -0
- package/dist/krill/lib/get_address.js +23 -0
- package/dist/krill/lib/get_dns.d.ts +8 -0
- package/dist/krill/lib/get_dns.js +23 -0
- package/dist/krill/lib/get_domain.d.ts +8 -0
- package/dist/krill/lib/get_domain.js +23 -0
- package/dist/krill/lib/get_gateway.d.ts +8 -0
- package/dist/krill/lib/get_gateway.js +23 -0
- package/dist/krill/lib/get_hostname.d.ts +8 -0
- package/dist/krill/lib/get_hostname.js +23 -0
- package/dist/krill/lib/get_luks_passphrase.d.ts +8 -0
- package/dist/krill/lib/get_luks_passphrase.js +32 -0
- package/dist/krill/lib/get_netmask.d.ts +8 -0
- package/dist/krill/lib/get_netmask.js +23 -0
- package/dist/krill/lib/get_password.d.ts +8 -0
- package/dist/krill/lib/get_password.js +36 -0
- package/dist/krill/lib/get_userfullname.d.ts +8 -0
- package/dist/krill/lib/get_userfullname.js +23 -0
- package/dist/krill/lib/get_username.d.ts +8 -0
- package/dist/krill/lib/get_username.js +23 -0
- package/dist/krill/lib/select_address_type.d.ts +8 -0
- package/dist/krill/lib/select_address_type.js +24 -0
- package/dist/krill/lib/select_filesystem_type.d.ts +8 -0
- package/dist/krill/lib/select_filesystem_type.js +40 -0
- package/dist/krill/lib/select_installation_device.d.ts +8 -0
- package/dist/krill/lib/select_installation_device.js +40 -0
- package/dist/krill/lib/select_installation_mode.d.ts +9 -0
- package/dist/krill/lib/select_installation_mode.js +25 -0
- package/dist/krill/lib/select_interface.d.ts +8 -0
- package/dist/krill/lib/select_interface.js +24 -0
- package/dist/krill/lib/select_keyboard_layout.d.ts +11 -0
- package/dist/krill/lib/select_keyboard_layout.js +36 -0
- package/dist/krill/lib/select_keyboard_model.d.ts +11 -0
- package/dist/krill/lib/select_keyboard_model.js +34 -0
- package/dist/krill/lib/select_keyboard_option.d.ts +11 -0
- package/dist/krill/lib/select_keyboard_option.js +34 -0
- package/dist/krill/lib/select_keyboard_variant.d.ts +11 -0
- package/dist/krill/lib/select_keyboard_variant.js +35 -0
- package/dist/krill/lib/select_languages.d.ts +8 -0
- package/dist/krill/lib/select_languages.js +28 -0
- package/dist/krill/lib/select_regions.d.ts +8 -0
- package/dist/krill/lib/select_regions.js +24 -0
- package/dist/krill/lib/select_replaced_partition.d.ts +8 -0
- package/dist/krill/lib/select_replaced_partition.js +31 -0
- package/dist/krill/lib/select_user_swap_choice.d.ts +9 -0
- package/dist/krill/lib/select_user_swap_choice.js +35 -0
- package/dist/krill/lib/select_zones.d.ts +8 -0
- package/dist/krill/lib/select_zones.js +518 -0
- package/dist/lib/kill_me_softly.d.ts +11 -0
- package/dist/lib/kill_me_softly.js +61 -0
- package/dist/lib/utils.d.ts +19 -0
- package/dist/lib/utils.js +65 -0
- package/package.json +5 -5
- package/conf/distros/archlinux/calamares/modules/shellprocess@sync.yml +0 -5
- package/conf/distros/opensuse/calamares/modules/dracut.yml +0 -14
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Krill Installer - Simplified Refactoring
|
|
3
|
+
* ./src/krill/prepare.ts
|
|
4
|
+
* penguins-eggs v.25.7.x / ecmascript 2020
|
|
5
|
+
* author: Piero Proietti
|
|
6
|
+
* email: piero.proietti@gmail.com
|
|
7
|
+
* license: MIT
|
|
8
|
+
*/
|
|
9
|
+
import os from 'os';
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import shx from 'shelljs';
|
|
12
|
+
import axios from 'axios';
|
|
13
|
+
import { SwapChoice, InstallationMode, FsType } from './krill_enums.js';
|
|
14
|
+
import Keyboards from '../../classes/keyboards.js';
|
|
15
|
+
import Locales from '../../classes/locales.js';
|
|
16
|
+
import Systemctl from '../../classes/systemctl.js';
|
|
17
|
+
import Utils from '../../classes/utils.js';
|
|
18
|
+
import { exec } from '../../lib/utils.js';
|
|
19
|
+
import Sequence from './sequence.js';
|
|
20
|
+
// UI Components
|
|
21
|
+
import { welcome } from './prepare.d/welcome.js';
|
|
22
|
+
import { location } from './prepare.d/location.js';
|
|
23
|
+
import { keyboard } from './prepare.d/keyboard.js';
|
|
24
|
+
import { partitions } from './prepare.d/partitions.js';
|
|
25
|
+
import { users } from './prepare.d/users.js';
|
|
26
|
+
import { network } from './prepare.d/network.js';
|
|
27
|
+
import { summary } from './prepare.d/summary.js';
|
|
28
|
+
const config_file = '/etc/penguins-eggs.d/krill.yaml';
|
|
29
|
+
/**
|
|
30
|
+
* Main Krill installer class - Simplified refactoring
|
|
31
|
+
*/
|
|
32
|
+
export default class Krill {
|
|
33
|
+
// UI Components
|
|
34
|
+
welcome = welcome;
|
|
35
|
+
location = location;
|
|
36
|
+
keyboard = keyboard;
|
|
37
|
+
partitions = partitions;
|
|
38
|
+
users = users;
|
|
39
|
+
network = network;
|
|
40
|
+
summary = summary;
|
|
41
|
+
// Configuration
|
|
42
|
+
krillConfig = {};
|
|
43
|
+
locales = new Locales();
|
|
44
|
+
keyboards = new Keyboards();
|
|
45
|
+
// Installation flags
|
|
46
|
+
unattended = false;
|
|
47
|
+
nointeractive = false;
|
|
48
|
+
chroot = false;
|
|
49
|
+
halt = false;
|
|
50
|
+
/**
|
|
51
|
+
* Constructor
|
|
52
|
+
*/
|
|
53
|
+
constructor(unattended = false, nointeractive = false, halt = false, chroot = false) {
|
|
54
|
+
this.unattended = unattended;
|
|
55
|
+
this.nointeractive = nointeractive;
|
|
56
|
+
this.chroot = chroot;
|
|
57
|
+
this.halt = halt;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Main prepare method - Simplified and cleaner
|
|
61
|
+
*/
|
|
62
|
+
async prepare(krillConfig = {}, ip = false, random = false, domain = '', suspend = false, small = false, none = false, crypted = false, pve = false, btrfs = false, replace = '', testing = false, verbose = false) {
|
|
63
|
+
try {
|
|
64
|
+
// System validation
|
|
65
|
+
await this.checkSystemRequirements();
|
|
66
|
+
// Configuration setup
|
|
67
|
+
this.krillConfig = krillConfig;
|
|
68
|
+
await this.setupConfiguration();
|
|
69
|
+
// Stop services
|
|
70
|
+
await this.stopSystemServices(verbose, testing);
|
|
71
|
+
// Build configurations
|
|
72
|
+
const configs = await this.buildConfigurations(ip, random, suspend, small, none);
|
|
73
|
+
// Interactive or unattended mode
|
|
74
|
+
const finalConfigs = this.unattended
|
|
75
|
+
? this.applyUnattendedOptions(configs, crypted, pve, btrfs, replace)
|
|
76
|
+
: await this.runInteractiveMode(crypted, pve, btrfs, replace);
|
|
77
|
+
// Install
|
|
78
|
+
await this.performInstallation(finalConfigs, domain, testing, verbose);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
await Utils.pressKeyToExit(`${error.message}\nkrill installer refuses to continue`);
|
|
82
|
+
process.exit();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check system requirements (disks, LVM)
|
|
87
|
+
*/
|
|
88
|
+
async checkSystemRequirements() {
|
|
89
|
+
// Check disk presence
|
|
90
|
+
const drives = shx.exec('lsblk |grep disk|cut -f 1 "-d "', { silent: true }).stdout.trim().split('\n');
|
|
91
|
+
if (drives[0] === '') {
|
|
92
|
+
throw new Error('No disk to install the system in this machine.');
|
|
93
|
+
}
|
|
94
|
+
// Check LVM presence
|
|
95
|
+
if (await this.pvExist()) {
|
|
96
|
+
await this.createLvmRemovalScript();
|
|
97
|
+
throw new Error('There is a lvm2 volume in the system, remove it manually before installation.');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Setup configuration files and auto-configure timezone
|
|
102
|
+
*/
|
|
103
|
+
async setupConfiguration() {
|
|
104
|
+
// Check config file
|
|
105
|
+
if (!fs.existsSync(config_file)) {
|
|
106
|
+
throw new Error(`Cannot find configuration file ${config_file}`);
|
|
107
|
+
}
|
|
108
|
+
// Check calamares/krill configuration
|
|
109
|
+
let configRoot = '/etc/penguins-eggs.d/krill/';
|
|
110
|
+
if (fs.existsSync('/etc/calamares/settings.conf')) {
|
|
111
|
+
configRoot = '/etc/calamares/';
|
|
112
|
+
}
|
|
113
|
+
if (!fs.existsSync(configRoot + 'settings.conf')) {
|
|
114
|
+
throw new Error('Cannot find calamares/krill configuration file, please create it running: sudo eggs calamares');
|
|
115
|
+
}
|
|
116
|
+
// Auto-configure timezone
|
|
117
|
+
await this.autoConfigureTimezone();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Auto-configure timezone from internet
|
|
121
|
+
*/
|
|
122
|
+
async autoConfigureTimezone() {
|
|
123
|
+
try {
|
|
124
|
+
const response = await axios.get('https://geoip.kde.org/v1/calamares');
|
|
125
|
+
if (response.statusText === 'OK') {
|
|
126
|
+
const timeZone = response.data.time_zone;
|
|
127
|
+
this.krillConfig.region = timeZone.substring(0, timeZone.indexOf('/'));
|
|
128
|
+
this.krillConfig.zone = timeZone.substring(timeZone.indexOf('/') + 1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error('Error auto-configuring timezone:', error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Stop system services
|
|
137
|
+
*/
|
|
138
|
+
async stopSystemServices(verbose, testing) {
|
|
139
|
+
const systemdCtl = new Systemctl(verbose);
|
|
140
|
+
if (await systemdCtl.isActive('udisks2.service') && !testing) {
|
|
141
|
+
await systemdCtl.stop('udisks2.service');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build default configurations
|
|
146
|
+
*/
|
|
147
|
+
async buildConfigurations(ip, random, suspend, small, none) {
|
|
148
|
+
// Generate hostname
|
|
149
|
+
const hostname = this.generateHostname(ip, random);
|
|
150
|
+
// Build configuration objects
|
|
151
|
+
const oWelcome = { language: this.krillConfig.language };
|
|
152
|
+
const oLocation = {
|
|
153
|
+
language: this.krillConfig.language,
|
|
154
|
+
region: this.krillConfig.region,
|
|
155
|
+
zone: this.krillConfig.zone
|
|
156
|
+
};
|
|
157
|
+
const oKeyboard = {
|
|
158
|
+
keyboardModel: this.krillConfig.keyboardModel,
|
|
159
|
+
keyboardLayout: this.krillConfig.keyboardLayout,
|
|
160
|
+
keyboardVariant: this.krillConfig.keyboardVariant,
|
|
161
|
+
keyboardOption: this.krillConfig.keyboardOption
|
|
162
|
+
};
|
|
163
|
+
let userSwapChoice = this.krillConfig.userSwapChoice;
|
|
164
|
+
if (suspend)
|
|
165
|
+
userSwapChoice = SwapChoice.Suspend;
|
|
166
|
+
else if (small)
|
|
167
|
+
userSwapChoice = SwapChoice.Small;
|
|
168
|
+
else if (none)
|
|
169
|
+
userSwapChoice = SwapChoice.None;
|
|
170
|
+
const oPartitions = {
|
|
171
|
+
installationDevice: this.krillConfig.installationDevice,
|
|
172
|
+
installationMode: this.krillConfig.installationMode,
|
|
173
|
+
filesystemType: this.krillConfig.filesystemType,
|
|
174
|
+
userSwapChoice,
|
|
175
|
+
replacedPartition: this.krillConfig.replacedPartition
|
|
176
|
+
};
|
|
177
|
+
const oUsers = {
|
|
178
|
+
username: this.krillConfig.name,
|
|
179
|
+
fullname: this.krillConfig.fullname,
|
|
180
|
+
password: this.krillConfig.password,
|
|
181
|
+
rootPassword: this.krillConfig.rootPassword,
|
|
182
|
+
autologin: this.krillConfig.autologin,
|
|
183
|
+
hostname
|
|
184
|
+
};
|
|
185
|
+
const oNetwork = {
|
|
186
|
+
iface: await Utils.iface(),
|
|
187
|
+
addressType: this.krillConfig.addressType,
|
|
188
|
+
address: Utils.address(),
|
|
189
|
+
netmask: Utils.netmask(),
|
|
190
|
+
gateway: Utils.gateway(),
|
|
191
|
+
dns: Utils.getDns(),
|
|
192
|
+
domain: Utils.getDomain()
|
|
193
|
+
};
|
|
194
|
+
return { oWelcome, oLocation, oKeyboard, oPartitions, oUsers, oNetwork };
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Generate hostname based on options
|
|
198
|
+
*/
|
|
199
|
+
generateHostname(ip, random) {
|
|
200
|
+
let hostname = this.krillConfig.hostname;
|
|
201
|
+
if (hostname === '') {
|
|
202
|
+
hostname = shx.exec('cat /etc/hostname', { silent: true }).trim();
|
|
203
|
+
}
|
|
204
|
+
if (ip) {
|
|
205
|
+
hostname = 'ip-' + Utils.address().replaceAll('.', '-');
|
|
206
|
+
}
|
|
207
|
+
if (random) {
|
|
208
|
+
const fl = shx.exec(`tr -dc a-z </dev/urandom | head -c 2 ; echo ''`, { silent: true }).trim();
|
|
209
|
+
const n = shx.exec(`tr -dc 0-9 </dev/urandom | head -c 3 ; echo ''`, { silent: true }).trim();
|
|
210
|
+
const sl = shx.exec(`tr -dc a-z </dev/urandom | head -c 2 ; echo ''`, { silent: true }).trim();
|
|
211
|
+
hostname = `${os.hostname()}-${fl}${n}${sl}`;
|
|
212
|
+
}
|
|
213
|
+
return hostname;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Apply options for unattended installation
|
|
217
|
+
*/
|
|
218
|
+
applyUnattendedOptions(configs, crypted, pve, btrfs, replace = '') {
|
|
219
|
+
const { oPartitions, oUsers } = configs;
|
|
220
|
+
// Set defaults for unattended
|
|
221
|
+
oPartitions.installationMode = InstallationMode.EraseDisk;
|
|
222
|
+
if (replace != '') {
|
|
223
|
+
oPartitions.installationMode = InstallationMode.Replace;
|
|
224
|
+
oPartitions.replacedPartition = replace;
|
|
225
|
+
oPartitions.filesystemType = 'ext4';
|
|
226
|
+
}
|
|
227
|
+
// Apply options
|
|
228
|
+
if (btrfs)
|
|
229
|
+
oPartitions.filesystemType = FsType.btrfs;
|
|
230
|
+
if (crypted || pve)
|
|
231
|
+
oPartitions.installationMode = InstallationMode.Luks;
|
|
232
|
+
// Set default installation device if empty
|
|
233
|
+
if (oPartitions.installationDevice === '') {
|
|
234
|
+
const drives = shx.exec('lsblk |grep disk|cut -f 1 "-d "', { silent: true }).stdout.trim().split('\n');
|
|
235
|
+
if (drives.length > 0) {
|
|
236
|
+
oPartitions.installationDevice = `/dev/` + drives[0];
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
throw new Error("Unable to find installation drive");
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return configs;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Run interactive mode with UI
|
|
246
|
+
*/
|
|
247
|
+
async runInteractiveMode(crypted, pve, btrfs, replace) {
|
|
248
|
+
const oWelcome = await this.welcome();
|
|
249
|
+
const oLocation = await this.location(oWelcome.language);
|
|
250
|
+
const oKeyboard = await this.keyboard();
|
|
251
|
+
const oPartitions = await this.partitions(this.krillConfig.installationDevice, crypted, pve, btrfs, replace);
|
|
252
|
+
const oUsers = await this.users();
|
|
253
|
+
const oNetwork = await this.network();
|
|
254
|
+
return { oWelcome, oLocation, oKeyboard, oPartitions, oUsers, oNetwork };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Perform installation or testing
|
|
258
|
+
*/
|
|
259
|
+
async performInstallation(configs, domain, testing, verbose) {
|
|
260
|
+
const { oLocation, oKeyboard, oPartitions, oUsers, oNetwork } = configs;
|
|
261
|
+
await this.summary(oLocation, oKeyboard, oPartitions, oUsers);
|
|
262
|
+
if (testing) {
|
|
263
|
+
console.log();
|
|
264
|
+
Utils.titles("install --testing");
|
|
265
|
+
console.log("Just testing krill, the process will end!");
|
|
266
|
+
console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
|
|
267
|
+
console.log(oPartitions);
|
|
268
|
+
process.exit();
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
const sequence = new Sequence(oLocation, oKeyboard, oPartitions, oUsers, oNetwork);
|
|
272
|
+
await sequence.start(domain, this.unattended, this.nointeractive, this.chroot, this.halt, verbose);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Create script to remove LVM partitions
|
|
277
|
+
*/
|
|
278
|
+
async createLvmRemovalScript() {
|
|
279
|
+
const scriptName = "removeLvmPartitions";
|
|
280
|
+
let cmds = "#!/bin/bash\n";
|
|
281
|
+
cmds += `# remove LV (Logical Volumes)\n`;
|
|
282
|
+
cmds += `vg=$(vgs --noheadings -o vg_name| awk '{$1=$1};1')\n`;
|
|
283
|
+
cmds += `lvs -o lv_name --noheadings | awk '{$1=$1};1' | while read -r lv; do\n`;
|
|
284
|
+
cmds += ` lvremove -y /dev/mapper/$vg-$lv\n`;
|
|
285
|
+
cmds += `done\n`;
|
|
286
|
+
cmds += `\n`;
|
|
287
|
+
cmds += `# remove VG (Volume groups)\n`;
|
|
288
|
+
cmds += `vgremove --force $(vgs --noheadings -o vg_name $vg)\n`;
|
|
289
|
+
cmds += `\n`;
|
|
290
|
+
cmds += `# remove PV (Physical Volumes) \n`;
|
|
291
|
+
cmds += `pv=$(pvs --noheading -o pv_name | awk '{$1=$1};1')\n`;
|
|
292
|
+
cmds += `pvremove --force --force $pv\n`;
|
|
293
|
+
cmds += `# wipe PV (Physical Volumes) \n`;
|
|
294
|
+
cmds += `wipefs -a $pv\n`;
|
|
295
|
+
cmds += `# clean device\n`;
|
|
296
|
+
cmds += `sgdisk --zap-all $pv\n`;
|
|
297
|
+
cmds += `dd if=/dev/zero of=$pv bs=1M count=10\n`;
|
|
298
|
+
fs.writeFileSync(scriptName, cmds);
|
|
299
|
+
await exec(`chmod +x ${scriptName}`);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Check if Physical Volumes exist
|
|
303
|
+
*/
|
|
304
|
+
async pvExist() {
|
|
305
|
+
const check = `#!/bin/sh\npvdisplay |grep "PV Name" >/dev/null && echo 1|| echo 0`;
|
|
306
|
+
return shx.exec(check, { silent: true }).stdout.trim() === '1';
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Utility function for netmask conversion
|
|
311
|
+
*/
|
|
312
|
+
function netmask2CIDR(mask) {
|
|
313
|
+
const countCharOccurences = (string, char) => string.split(char).length - 1;
|
|
314
|
+
const decimalToBinary = (dec) => (dec >>> 0).toString(2);
|
|
315
|
+
const getNetMaskParts = (nmask) => nmask.split('.').map(Number);
|
|
316
|
+
return countCharOccurences(getNetMaskParts(mask)
|
|
317
|
+
.map(part => decimalToBinary(part))
|
|
318
|
+
.join(''), '1');
|
|
319
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/krill/modules/add-user.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 Sequence from '../sequence.js';
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param this
|
|
13
|
+
* @param username
|
|
14
|
+
* @param password
|
|
15
|
+
* @param fullusername
|
|
16
|
+
* @param roomNumber
|
|
17
|
+
* @param workPhone
|
|
18
|
+
* @param homePhone
|
|
19
|
+
*/
|
|
20
|
+
export default function addUser(this: Sequence, username?: string, password?: string, fullusername?: string, roomNumber?: string, workPhone?: string, homePhone?: string): Promise<void>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/krill/modules/add-user.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 Utils from '../../../classes/utils.js';
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import yaml from 'js-yaml';
|
|
12
|
+
import { exec } from '../../../lib/utils.js';
|
|
13
|
+
/**
|
|
14
|
+
*
|
|
15
|
+
* @param this
|
|
16
|
+
* @param username
|
|
17
|
+
* @param password
|
|
18
|
+
* @param fullusername
|
|
19
|
+
* @param roomNumber
|
|
20
|
+
* @param workPhone
|
|
21
|
+
* @param homePhone
|
|
22
|
+
*/
|
|
23
|
+
export default async function addUser(username = 'live', password = 'evolution', fullusername = '', roomNumber = '', workPhone = '', homePhone = '') {
|
|
24
|
+
// adduser user
|
|
25
|
+
let cmd = `chroot ${this.installTarget} adduser ${username} --home /home/${username} --shell /bin/bash --disabled-password --gecos "${fullusername},${roomNumber},${workPhone},${homePhone}" ${this.toNull}`;
|
|
26
|
+
if (this.distro.familyId === 'archlinux') {
|
|
27
|
+
cmd = `chroot ${this.installTarget} useradd --create-home --shell /bin/bash ${username} ${this.toNull}`;
|
|
28
|
+
}
|
|
29
|
+
else if (this.distro.familyId === 'fedora') {
|
|
30
|
+
cmd = `chroot ${this.installTarget} adduser ${username} --create-home --shell /bin/bash --comment "${fullusername},${roomNumber},${workPhone},${homePhone}" ${this.toNull}`;
|
|
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
|
+
}
|
|
35
|
+
else if (this.distro.familyId === 'opensuse') {
|
|
36
|
+
cmd = `chroot ${this.installTarget} useradd ${username} --create-home --shell /bin/bash --comment "${fullusername},${roomNumber},${workPhone},${homePhone}" ${this.toNull}`;
|
|
37
|
+
}
|
|
38
|
+
await exec(cmd, this.echo);
|
|
39
|
+
cmd = `echo ${username}:${password} | chroot ${this.installTarget} /usr/sbin/chpasswd ${this.toNull}`;
|
|
40
|
+
await exec(cmd, this.echo);
|
|
41
|
+
let group = 'wheel';
|
|
42
|
+
if (this.distro.familyId === 'debian') {
|
|
43
|
+
group = 'sudo';
|
|
44
|
+
}
|
|
45
|
+
else if (this.distro.familyId === 'openmamba') {
|
|
46
|
+
group = 'sysadmin';
|
|
47
|
+
}
|
|
48
|
+
cmd = `chroot ${this.installTarget} usermod -aG ${group} ${username} ${this.toNull}`;
|
|
49
|
+
await exec(cmd, this.echo);
|
|
50
|
+
// add autologin group in archlinux
|
|
51
|
+
await exec(cmd, this.echo);
|
|
52
|
+
if (this.distro.familyId === 'archlinux') {
|
|
53
|
+
await exec(`chroot ${this.installTarget} getent group autologin || groupadd autologin`);
|
|
54
|
+
await exec(`chroot ${this.installTarget} usermod -aG autologin ${username}`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* look to calamares/modules/users.conf for groups
|
|
58
|
+
*/
|
|
59
|
+
let usersConf = '/etc/calamares/modules/users.conf';
|
|
60
|
+
if (!fs.existsSync(usersConf)) {
|
|
61
|
+
usersConf = '/etc/penguins-eggs.d/krill/modules/users.conf';
|
|
62
|
+
}
|
|
63
|
+
if (fs.existsSync(usersConf)) {
|
|
64
|
+
const o = yaml.load(fs.readFileSync(usersConf, 'utf8'));
|
|
65
|
+
for (const group of o.defaultGroups) {
|
|
66
|
+
const groupExists = await exec(`getent group ${group}`);
|
|
67
|
+
if (groupExists.code == 0) {
|
|
68
|
+
let addGroup = `chroot ${this.installTarget} usermod -aG ${group} ${username}`;
|
|
69
|
+
await exec(addGroup);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(`cannot find: ${usersConf}!`);
|
|
75
|
+
await Utils.pressKeyToExit();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/krill/modules/bootloader.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 Sequence from '../../classes/sequence.js';
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param this
|
|
13
|
+
*/
|
|
14
|
+
export default function bootloader(this: Sequence): Promise<void>;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/krill/modules/bootloader.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 Diversion from '../../../classes/diversions.js';
|
|
10
|
+
import Utils from '../../../classes/utils.js';
|
|
11
|
+
import { exec } from '../../../lib/utils.js';
|
|
12
|
+
import fs from 'node:fs';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param this
|
|
17
|
+
*/
|
|
18
|
+
export default async function bootloader() {
|
|
19
|
+
let grubName = Diversion.grubName(this.distro.familyId);
|
|
20
|
+
let grubForce = Diversion.grubForce(this.distro.familyId);
|
|
21
|
+
let cmd = '';
|
|
22
|
+
if (this.efi) {
|
|
23
|
+
/**
|
|
24
|
+
* UEFI Installation
|
|
25
|
+
* This is the correct way to install GRUB for UEFI systems.
|
|
26
|
+
* --target: Specifies the EFI architecture (x86_64-efi or arm64-efi).
|
|
27
|
+
* --efi-directory: Tells GRUB where the EFI System Partition is mounted. CRITICAL.
|
|
28
|
+
* --bootloader-id: Creates the \EFI\fedora directory on the ESP and labels the NVRAM entry. CRITICAL.
|
|
29
|
+
* We do NOT specify the device (e.g., /dev/sda) for UEFI.
|
|
30
|
+
*/
|
|
31
|
+
let target = `x86_64-efi`;
|
|
32
|
+
if (process.arch === 'arm64') {
|
|
33
|
+
target = `arm64-efi`;
|
|
34
|
+
}
|
|
35
|
+
let bootloaderId = this.distro.distroLike.toLowerCase();
|
|
36
|
+
cmd = `chroot ${this.installTarget} ${grubName}-install --target=${target} --efi-directory=/boot/efi --bootloader-id=${bootloaderId} --recheck ${grubForce}`;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
/**
|
|
40
|
+
* MBR (Legacy BIOS) Installation
|
|
41
|
+
* For legacy boot, we specify the installation device directly.
|
|
42
|
+
*/
|
|
43
|
+
const target = 'i386-pc';
|
|
44
|
+
cmd = `chroot ${this.installTarget} ${grubName}-install --target=${target} ${this.partitions.installationDevice} ${grubForce}`;
|
|
45
|
+
}
|
|
46
|
+
// await Utils.debug(`grub-install: ${cmd}`)
|
|
47
|
+
await exec(cmd, this.echo);
|
|
48
|
+
/**
|
|
49
|
+
* grub-mkconfig
|
|
50
|
+
*/
|
|
51
|
+
cmd = `chroot ${this.installTarget} ${grubName}-mkconfig -o /boot/${grubName}/grub.cfg ${this.toNull}`;
|
|
52
|
+
await exec(cmd, this.echo);
|
|
53
|
+
/**
|
|
54
|
+
* In fedora family, we need to call kernel-install to force entry creation
|
|
55
|
+
*/
|
|
56
|
+
if (this.distro.familyId === "fedora") {
|
|
57
|
+
/**
|
|
58
|
+
* create grub2 entries
|
|
59
|
+
*
|
|
60
|
+
*/
|
|
61
|
+
cmd = `chroot ${this.installTarget} kernel-install add $(uname -r) /boot/vmlinuz-$(uname -r)`;
|
|
62
|
+
await exec(cmd, this.echo);
|
|
63
|
+
/**
|
|
64
|
+
* and not only: on RHEL, Almalinux, Rocky it take UUID from janitor
|
|
65
|
+
*/
|
|
66
|
+
if (this.distro.distroId === "Almalinux" || this.distro.distroId === "Rocky") {
|
|
67
|
+
/**
|
|
68
|
+
* grub2: adapt entries at new system
|
|
69
|
+
*/
|
|
70
|
+
const rootUUID = Utils.uuid(this.devices.root.name);
|
|
71
|
+
const resumeUUID = Utils.uuid(this.devices.swap.name);
|
|
72
|
+
await updateEntries(this.installTarget, rootUUID, resumeUUID);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param installTarget
|
|
79
|
+
* @param rootUUID
|
|
80
|
+
* @param resumeUUID
|
|
81
|
+
*/
|
|
82
|
+
async function updateEntries(installTarget, rootUUID, resumeUUID) {
|
|
83
|
+
const entriesPath = path.join(installTarget, `/boot/loader/entries/`);
|
|
84
|
+
const entries = fs.readdirSync(entriesPath);
|
|
85
|
+
if (entries.length > 0) {
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
const currentEntry = path.join(entriesPath, entry);
|
|
88
|
+
let source = fs.readFileSync(currentEntry, 'utf8');
|
|
89
|
+
let lines = source.split('\n');
|
|
90
|
+
let content = '';
|
|
91
|
+
for (let line of lines) {
|
|
92
|
+
line = searchAndReplace(line, 'root=UUID=', rootUUID);
|
|
93
|
+
line = searchAndReplace(line, 'resume=UUID=', resumeUUID);
|
|
94
|
+
content += line + '\n';
|
|
95
|
+
}
|
|
96
|
+
fs.writeFileSync(`${currentEntry}`, content, 'utf-8');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
*
|
|
102
|
+
* @param line
|
|
103
|
+
* @param search
|
|
104
|
+
* @param replace
|
|
105
|
+
* @returns
|
|
106
|
+
*/
|
|
107
|
+
function searchAndReplace(line, search, replace) {
|
|
108
|
+
if (line.includes(search)) {
|
|
109
|
+
const lenSearch = search.length;
|
|
110
|
+
const lenReplace = replace.length;
|
|
111
|
+
const at = line.indexOf(search);
|
|
112
|
+
const first = line.substring(0, at + lenSearch);
|
|
113
|
+
const last = line.substring(at + lenSearch + lenReplace);
|
|
114
|
+
line = first + replace + last;
|
|
115
|
+
}
|
|
116
|
+
return line;
|
|
117
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/krill/modules/bootloader-config.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 Sequence from '../sequence.js';
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param this
|
|
13
|
+
*/
|
|
14
|
+
export default function bootloaderConfig(this: Sequence): Promise<void>;
|