penguins-eggs 25.10.28 → 25.10.30
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/addons/eggs/theme/applications/install-system.desktop +8 -6
- package/assets/calamares/io.calamares.calamares.policy +25 -0
- 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 +179 -0
- package/dist/classes/distro.d.ts +32 -0
- package/dist/classes/distro.js +363 -0
- package/dist/classes/diversions.d.ts +53 -0
- package/dist/classes/diversions.js +131 -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 +12 -0
- package/dist/classes/incubation/customize/customize-partitions.js +37 -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 +82 -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 +98 -0
- package/dist/classes/incubation/incubator.d.ts +49 -0
- package/dist/classes/incubation/incubator.js +383 -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 +193 -0
- package/dist/classes/ovary.d/edit-live-fs.d.ts +20 -0
- package/dist/classes/ovary.d/edit-live-fs.js +239 -0
- package/dist/classes/ovary.d/fertilization.d.ts +12 -0
- package/dist/classes/ovary.d/fertilization.js +53 -0
- package/dist/classes/ovary.d/finished.d.ts +13 -0
- package/dist/classes/ovary.d/finished.js +40 -0
- package/dist/classes/ovary.d/initrd.d.ts +21 -0
- package/dist/classes/ovary.d/initrd.js +96 -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 +70 -0
- package/dist/classes/ovary.d/luks-get-password.d.ts +12 -0
- package/dist/classes/ovary.d/luks-get-password.js +58 -0
- package/dist/classes/ovary.d/luks-helpers.d.ts +19 -0
- package/dist/classes/ovary.d/luks-helpers.js +73 -0
- package/dist/classes/ovary.d/luks-home-support.d.ts +12 -0
- package/dist/classes/ovary.d/luks-home-support.js +70 -0
- package/dist/classes/ovary.d/luks-home.d.ts +15 -0
- package/dist/classes/ovary.d/luks-home.js +132 -0
- package/dist/classes/ovary.d/luks-interactive-crypto-config.d.ts +47 -0
- package/dist/classes/ovary.d/luks-interactive-crypto-config.js +139 -0
- package/dist/classes/ovary.d/luks-root-initrd.d.ts +17 -0
- package/dist/classes/ovary.d/luks-root-initrd.js +213 -0
- package/dist/classes/ovary.d/luks-root.d.ts +15 -0
- package/dist/classes/ovary.d/luks-root.js +123 -0
- package/dist/classes/ovary.d/make-dot-disk.d.ts +12 -0
- package/dist/classes/ovary.d/make-dot-disk.js +71 -0
- package/dist/classes/ovary.d/make-efi.d.ts +14 -0
- package/dist/classes/ovary.d/make-efi.js +296 -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 +111 -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 +349 -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 +99 -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 +125 -0
- package/dist/classes/ovary.d.ts +111 -0
- package/dist/classes/ovary.js +122 -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 +330 -0
- package/dist/classes/utils.js +968 -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 +25 -0
- package/dist/commands/love.js +118 -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 +37 -0
- package/dist/commands/produce.js +232 -0
- package/dist/commands/status.d.ts +23 -0
- package/dist/commands/status.js +31 -0
- package/dist/commands/tools/clean.d.ts +18 -0
- package/dist/commands/tools/clean.js +37 -0
- package/dist/commands/tools/repo.d.ts +31 -0
- package/dist/commands/tools/repo.js +246 -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/dracut/dracut.conf.d/50-live.conf +12 -13
- package/package.json +1 -1
- package/perrisbrewery/template/dependencies.yaml +1 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-helpers.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import Ovary from '../ovary.js';
|
|
9
|
+
import { type CryptoConfig } from './luks-interactive-crypto-config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Funzione helper per eseguire comandi esterni in modo asincrono,
|
|
12
|
+
* gestendo lo standard input per passare le password.
|
|
13
|
+
* Restituisce una Promise che si risolve al successo o si rigetta in caso di errore.
|
|
14
|
+
*/
|
|
15
|
+
export declare function luksExecuteCommand(this: Ovary, command: string, args: string[], stdinData?: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* buildLuksFormatArgs
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildLuksFormatArgs(this: Ovary, config: CryptoConfig, luksFile: string): string[];
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-helpers.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from 'node:child_process';
|
|
9
|
+
import Utils from '../utils.js';
|
|
10
|
+
const noop = () => { };
|
|
11
|
+
/**
|
|
12
|
+
* Funzione helper per eseguire comandi esterni in modo asincrono,
|
|
13
|
+
* gestendo lo standard input per passare le password.
|
|
14
|
+
* Restituisce una Promise che si risolve al successo o si rigetta in caso di errore.
|
|
15
|
+
*/
|
|
16
|
+
export function luksExecuteCommand(command, args, stdinData) {
|
|
17
|
+
if (!this.hidden) {
|
|
18
|
+
Utils.info(`${command} ${args.join(' ')}`);
|
|
19
|
+
}
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
// Se passiamo dati a stdin, dobbiamo usare 'pipe'. Altrimenti, 'inherit'.
|
|
22
|
+
const stdioConfig = stdinData ? ['pipe', 'inherit', 'inherit'] : 'inherit';
|
|
23
|
+
const process = spawn(command, args, { stdio: stdioConfig });
|
|
24
|
+
// Se fornito, scriviamo i dati (es. la password) nello stdin del processo.
|
|
25
|
+
if (stdinData && process.stdin) {
|
|
26
|
+
process.stdin.write(stdinData);
|
|
27
|
+
process.stdin.end();
|
|
28
|
+
}
|
|
29
|
+
process.on('error', (err) => {
|
|
30
|
+
reject(new Error(`Error starting command "${command}": ${err.message}`));
|
|
31
|
+
});
|
|
32
|
+
process.on('close', (code) => {
|
|
33
|
+
if (code === 0) {
|
|
34
|
+
resolve(); // Success
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
reject(new Error(`Command "${command} ${args.join(' ')}" ended with error code ${code}`));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* buildLuksFormatArgs
|
|
44
|
+
*/
|
|
45
|
+
export function buildLuksFormatArgs(config, luksFile) {
|
|
46
|
+
const args = [
|
|
47
|
+
'--batch-mode', // Per saltare la conferma "YES"
|
|
48
|
+
'luksFormat',
|
|
49
|
+
'--type', 'luks2',
|
|
50
|
+
// Parametri base
|
|
51
|
+
'--cipher', config.cipher,
|
|
52
|
+
'--key-size', config['key-size'].toString(),
|
|
53
|
+
'--hash', config.hash,
|
|
54
|
+
'--sector-size', config['sector-size'].toString(),
|
|
55
|
+
'--pbkdf', config.pbkdf,
|
|
56
|
+
];
|
|
57
|
+
// Aggiungi i parametri condizionali del PBKDF
|
|
58
|
+
switch (config.pbkdf) {
|
|
59
|
+
case 'argon2id':
|
|
60
|
+
case 'argon2i':
|
|
61
|
+
const argonConfig = config;
|
|
62
|
+
args.push('--pbkdf-memory', argonConfig['pbkdf-memory (KiB)'].toString());
|
|
63
|
+
args.push('--pbkdf-parallel', argonConfig['pbkdf-parallel (threads)'].toString());
|
|
64
|
+
break;
|
|
65
|
+
case 'pbkdf2':
|
|
66
|
+
const pbkdf2Config = config;
|
|
67
|
+
args.push('--iter-time', pbkdf2Config['iter-time (ms)'].toString());
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
// Aggiungi il file di destinazione
|
|
71
|
+
args.push(luksFile);
|
|
72
|
+
return args;
|
|
73
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-home-support.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import Ovary from '../ovary.js';
|
|
9
|
+
/**
|
|
10
|
+
* Installa i file necessari per sbloccare home.img LUKS durante il boot
|
|
11
|
+
*/
|
|
12
|
+
export declare function installHomecryptSupport(this: Ovary, squashfsRoot: string, homeImgPath: string): void;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-home-support.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
// packages
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
import { dirname } from 'path';
|
|
13
|
+
import Utils from '../utils.js';
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
/**
|
|
17
|
+
* Installa i file necessari per sbloccare home.img LUKS durante il boot
|
|
18
|
+
*/
|
|
19
|
+
export function installHomecryptSupport(squashfsRoot, homeImgPath) {
|
|
20
|
+
Utils.warning('installing encrypted home support...');
|
|
21
|
+
// console.log("squashfsRoot:", squashfsRoot)
|
|
22
|
+
// console.log("homeImgPath:", homeImgPath)
|
|
23
|
+
// Leggi il template bash
|
|
24
|
+
const templatePath = path.join(__dirname, '../../../scripts/mount-encrypted-home.sh');
|
|
25
|
+
let bashScript = fs.readFileSync(templatePath, 'utf8');
|
|
26
|
+
// Sostituisci il placeholder con il path reale
|
|
27
|
+
bashScript = bashScript.replace('__HOME_IMG_PATH__', homeImgPath);
|
|
28
|
+
// Systemd service
|
|
29
|
+
const systemdService = `[Unit]
|
|
30
|
+
Description=Unlock and mount encrypted home.img
|
|
31
|
+
DefaultDependencies=no
|
|
32
|
+
After=systemd-udev-settle.service local-fs-pre.target
|
|
33
|
+
Before=local-fs.target display-manager.service
|
|
34
|
+
ConditionPathExists=${homeImgPath}
|
|
35
|
+
|
|
36
|
+
[Service]
|
|
37
|
+
Type=oneshot
|
|
38
|
+
RemainAfterExit=yes
|
|
39
|
+
StandardInput=tty
|
|
40
|
+
StandardOutput=journal+console
|
|
41
|
+
StandardError=journal+console
|
|
42
|
+
TTYPath=/dev/console
|
|
43
|
+
TTYReset=yes
|
|
44
|
+
TTYVHangup=yes
|
|
45
|
+
ExecStart=/usr/local/bin/mount-encrypted-home.sh
|
|
46
|
+
ExecStop=/bin/bash -c 'umount /home && cryptsetup close live-home'
|
|
47
|
+
|
|
48
|
+
[Install]
|
|
49
|
+
WantedBy=local-fs.target
|
|
50
|
+
`;
|
|
51
|
+
// Percorsi di destinazione
|
|
52
|
+
const scriptPath = path.join(squashfsRoot, 'usr/local/bin/mount-encrypted-home.sh');
|
|
53
|
+
const servicePath = path.join(squashfsRoot, 'etc/systemd/system/mount-encrypted-home.service');
|
|
54
|
+
const symlinkDir = path.join(squashfsRoot, 'etc/systemd/system/local-fs.target.wants');
|
|
55
|
+
const symlinkPath = path.join(symlinkDir, 'mount-encrypted-home.service');
|
|
56
|
+
// Create dirs
|
|
57
|
+
fs.mkdirSync(path.dirname(scriptPath), { recursive: true });
|
|
58
|
+
fs.mkdirSync(path.dirname(servicePath), { recursive: true });
|
|
59
|
+
fs.mkdirSync(symlinkDir, { recursive: true });
|
|
60
|
+
// Scrivi lo script
|
|
61
|
+
fs.writeFileSync(scriptPath, bashScript);
|
|
62
|
+
fs.chmodSync(scriptPath, 0o755);
|
|
63
|
+
// Scrivi il service
|
|
64
|
+
fs.writeFileSync(servicePath, systemdService);
|
|
65
|
+
// Crea il symlink per abilitare il service
|
|
66
|
+
if (fs.existsSync(symlinkPath)) {
|
|
67
|
+
fs.unlinkSync(symlinkPath);
|
|
68
|
+
}
|
|
69
|
+
fs.symlinkSync('../mount-encrypted-home.service', symlinkPath);
|
|
70
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-home.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import Ovary from '../ovary.js';
|
|
9
|
+
/**
|
|
10
|
+
* luksHome()
|
|
11
|
+
*
|
|
12
|
+
* create a container LUKS with the entire
|
|
13
|
+
* filesystem.squashfs
|
|
14
|
+
*/
|
|
15
|
+
export declare function luksHome(this: Ovary, clone?: boolean, homecrypt?: boolean): Promise<void>;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-home.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
// packages
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import Utils from '../utils.js';
|
|
11
|
+
import { exec } from '../../lib/utils.js';
|
|
12
|
+
const noop = () => { };
|
|
13
|
+
/**
|
|
14
|
+
* luksHome()
|
|
15
|
+
*
|
|
16
|
+
* create a container LUKS with the entire
|
|
17
|
+
* filesystem.squashfs
|
|
18
|
+
*/
|
|
19
|
+
export async function luksHome(clone = false, homecrypt = false) {
|
|
20
|
+
const loggers = {
|
|
21
|
+
log: this.hidden ? noop : console.log,
|
|
22
|
+
warning: this.hidden ? noop : Utils.warning,
|
|
23
|
+
success: this.hidden ? noop : Utils.success,
|
|
24
|
+
info: this.hidden ? noop : Utils.info,
|
|
25
|
+
};
|
|
26
|
+
const { log, warning, success, info } = loggers;
|
|
27
|
+
try {
|
|
28
|
+
/**
|
|
29
|
+
* this.luksMappedName = 'home.img';
|
|
30
|
+
* this.luksFile = `/tmp/${luksMappedName}`
|
|
31
|
+
* this.luksDevice = `/dev/mapper/${luksMappedName}`
|
|
32
|
+
* this.luksMountpoint = `/tmp/mnt/${luksMappedName}`
|
|
33
|
+
* this.luksPassword = '0'
|
|
34
|
+
*/
|
|
35
|
+
if (this.hidden) {
|
|
36
|
+
Utils.warning("intentionally blank. System is working, please wait");
|
|
37
|
+
}
|
|
38
|
+
log();
|
|
39
|
+
log('====================================');
|
|
40
|
+
log(` Creating ${this.luksMappedName}`);
|
|
41
|
+
log('====================================');
|
|
42
|
+
// Utils.warning('1. Calculation of space requirements...')
|
|
43
|
+
let sizeString = (await exec('du -sb --exclude=/home/eggs /home', { capture: true })).data.trim().split(/\s+/)[0];
|
|
44
|
+
let size = Number.parseInt(sizeString, 10);
|
|
45
|
+
const luksSize = Math.ceil(size * 2);
|
|
46
|
+
/**
|
|
47
|
+
* E' più precisa ma equivalente grazie
|
|
48
|
+
* al truncate
|
|
49
|
+
*/
|
|
50
|
+
// const fsOverhead = Math.max(size * 0.1, 100 * 1024 * 1024)
|
|
51
|
+
// const luksSize = size * 1.25 + fsOverhead // +25%
|
|
52
|
+
warning(`homes size: ${bytesToGB(size)}`);
|
|
53
|
+
warning(`partition LUKS ${this.luksFile} size: ${bytesToGB(luksSize)}`);
|
|
54
|
+
warning(`creating partition LUKS: ${this.luksFile}`);
|
|
55
|
+
await this.luksExecuteCommand('truncate', ['--size', `${luksSize}`, this.luksFile]);
|
|
56
|
+
warning(`formatting ${this.luksFile} as a LUKS volume...`);
|
|
57
|
+
//await this.luksExecuteCommand('cryptsetup', ['--batch-mode', 'luksFormat', this.luksFile], `${this.luksPassword}\n`);
|
|
58
|
+
const luksFormatArgs = this.buildLuksFormatArgs(this.luksConfig, this.luksFile);
|
|
59
|
+
await this.luksExecuteCommand('cryptsetup', luksFormatArgs, `${this.luksPassword}\n`);
|
|
60
|
+
warning(`opening the LUKS volume. It will be mapped to ${this.luksDevice}`);
|
|
61
|
+
await this.luksExecuteCommand('cryptsetup', ['luksOpen', this.luksFile, this.luksMappedName], `${this.luksPassword}\n`);
|
|
62
|
+
warning(`formatting c ext4 `);
|
|
63
|
+
await exec(`mkfs.ext4 -L live-home ${this.luksDevice}`, this.echo);
|
|
64
|
+
warning(`mounting ${this.luksDevice} on ${this.luksMountpoint}`);
|
|
65
|
+
if (fs.existsSync(this.luksMountpoint)) {
|
|
66
|
+
if (!Utils.isMountpoint(this.luksMountpoint)) {
|
|
67
|
+
await exec(`rm -rf ${this.luksMountpoint}`, this.echo);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
throw new Error(`${this.luksMountpoint} is already mounted, process will abort!`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
await exec(`mkdir -p ${this.luksMountpoint}`, this.echo);
|
|
74
|
+
await exec(`mount /dev/mapper/${this.luksMappedName} ${this.luksMountpoint}`, this.echo);
|
|
75
|
+
warning(`copying /home on ${this.luksMountpoint}`);
|
|
76
|
+
await exec(`rsync -ah --exclude='eggs' /home/ ${this.luksMountpoint}`, this.echo);
|
|
77
|
+
warning(`saving user accounts info...`);
|
|
78
|
+
// Crea directory per backup system files
|
|
79
|
+
await exec(`mkdir -p ${this.luksMountpoint}/.system-backup`, this.echo);
|
|
80
|
+
// Filtra solo utenti con UID >= 1000
|
|
81
|
+
await exec(`awk -F: '$3 >= 1000 {print}' /etc/passwd > ${this.luksMountpoint}/.system-backup/passwd`, this.echo);
|
|
82
|
+
await exec(`awk -F: '$3 >= 1000 {print}' /etc/shadow > ${this.luksMountpoint}/.system-backup/shadow`, this.echo);
|
|
83
|
+
// Per i gruppi: salva TUTTI (non filtrare per GID)
|
|
84
|
+
// Gli utenti possono appartenere a gruppi di sistema (sudo, audio, video, etc.)
|
|
85
|
+
await exec(`cp /etc/group ${this.luksMountpoint}/.system-backup/group`, this.echo);
|
|
86
|
+
await exec(`cp /etc/gshadow ${this.luksMountpoint}/.system-backup/gshadow`, this.echo);
|
|
87
|
+
// saving display manager (autologin) configs...
|
|
88
|
+
warning(`saving display manager configuration...`);
|
|
89
|
+
// GDM (gdm3 è comune su Debian/Ubuntu)
|
|
90
|
+
await exec(`[ -e /etc/gdm3 ] && cp -a /etc/gdm3 ${this.luksMountpoint}/.system-backup/`, this.echo);
|
|
91
|
+
// GDM (altre distro)
|
|
92
|
+
await exec(`[ -e /etc/gdm ] && cp -a /etc/gdm ${this.luksMountpoint}/.system-backup/`, this.echo);
|
|
93
|
+
// LightDM
|
|
94
|
+
await exec(`[ -e /etc/lightdm ] && cp -a /etc/lightdm ${this.luksMountpoint}/.system-backup/`, this.echo);
|
|
95
|
+
// SDDM (sia file .conf che directory .conf.d)
|
|
96
|
+
await exec(`[ -e /etc/sddm.conf ] && cp -a /etc/sddm.conf ${this.luksMountpoint}/.system-backup/`, this.echo);
|
|
97
|
+
await exec(`[ -e /etc/sddm.conf.d ] && cp -a /etc/sddm.conf.d ${this.luksMountpoint}/.system-backup/`, this.echo);
|
|
98
|
+
warning(`unmount ${this.luksDevice}`);
|
|
99
|
+
await exec(`umount ${this.luksMountpoint}`, this.echo);
|
|
100
|
+
warning(`closing LUKS volume ${this.luksMappedName}.`);
|
|
101
|
+
await this.luksExecuteCommand('cryptsetup', ['close', this.luksMappedName]);
|
|
102
|
+
warning(`moving ${this.luksMappedName} to (ISO)/live/.`);
|
|
103
|
+
await exec(`mv ${this.luksFile} ${this.settings.iso_work}/live`, this.echo);
|
|
104
|
+
warning('encryption process successfully completed!');
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (error instanceof Error) {
|
|
108
|
+
Utils.error(`ERROR: ${error.message}`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
Utils.error(`An unknown error has occurred.`);
|
|
112
|
+
}
|
|
113
|
+
Utils.warning('Cleaning performed following the error...');
|
|
114
|
+
if (fs.existsSync(this.luksMountpoint)) {
|
|
115
|
+
await exec(`umount -lf ${this.luksMountpoint}`).catch(() => { });
|
|
116
|
+
}
|
|
117
|
+
if (fs.existsSync(this.luksDevice)) {
|
|
118
|
+
await this.luksExecuteCommand('cryptsetup', ['close', this.luksMappedName]).catch(() => { });
|
|
119
|
+
}
|
|
120
|
+
await Utils.pressKeyToExit();
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Converte bytes in gigabytes per la visualizzazione.
|
|
126
|
+
*/
|
|
127
|
+
function bytesToGB(bytes) {
|
|
128
|
+
if (bytes === 0)
|
|
129
|
+
return '0.00 GB';
|
|
130
|
+
const gigabytes = bytes / (1024 * 1024 * 1024);
|
|
131
|
+
return gigabytes.toFixed(2) + ' GB';
|
|
132
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classe/ovary.d/luks-interactive-crypto-config.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import Ovary from '../ovary.js';
|
|
9
|
+
declare const CIPHER_OPTIONS: readonly ["aes-xts-plain64", "serpent-xts-plain64", "twofish-xts-plain64"];
|
|
10
|
+
declare const KEY_SIZE_OPTIONS: readonly [512, 256];
|
|
11
|
+
declare const HASH_OPTIONS: readonly ["sha512", "sha256"];
|
|
12
|
+
declare const SECTOR_SIZE_OPTIONS: readonly [4096, 512];
|
|
13
|
+
declare const ARGON_MEMORY_OPTIONS: readonly [524288, 1048576, 2097152];
|
|
14
|
+
declare const ARGON_PARALLEL_OPTIONS: readonly [1, 2, 4, 8];
|
|
15
|
+
declare const PBKDF2_ITER_TIME_OPTIONS: readonly [2000, 5000, 10000];
|
|
16
|
+
type Cipher = typeof CIPHER_OPTIONS[number];
|
|
17
|
+
type KeySize = typeof KEY_SIZE_OPTIONS[number];
|
|
18
|
+
type Hash = typeof HASH_OPTIONS[number];
|
|
19
|
+
type SectorSize = typeof SECTOR_SIZE_OPTIONS[number];
|
|
20
|
+
type ArgonPbkdf = "argon2id" | "argon2i";
|
|
21
|
+
type Pbkdf2Pbkdf = "pbkdf2";
|
|
22
|
+
type ArgonMemory = typeof ARGON_MEMORY_OPTIONS[number];
|
|
23
|
+
type ArgonParallel = typeof ARGON_PARALLEL_OPTIONS[number];
|
|
24
|
+
type Pbkdf2IterTime = typeof PBKDF2_ITER_TIME_OPTIONS[number];
|
|
25
|
+
export interface BaseCryptoConfig {
|
|
26
|
+
cipher: Cipher;
|
|
27
|
+
'key-size': KeySize;
|
|
28
|
+
hash: Hash;
|
|
29
|
+
'sector-size': SectorSize;
|
|
30
|
+
pbkdf: ArgonPbkdf | Pbkdf2Pbkdf;
|
|
31
|
+
}
|
|
32
|
+
export interface ArgonCryptoConfig extends BaseCryptoConfig {
|
|
33
|
+
pbkdf: ArgonPbkdf;
|
|
34
|
+
'pbkdf-memory (KiB)': ArgonMemory;
|
|
35
|
+
'pbkdf-parallel (threads)': ArgonParallel;
|
|
36
|
+
}
|
|
37
|
+
export interface Pbkdf2CryptoConfig extends BaseCryptoConfig {
|
|
38
|
+
pbkdf: Pbkdf2Pbkdf;
|
|
39
|
+
'iter-time (ms)': Pbkdf2IterTime;
|
|
40
|
+
}
|
|
41
|
+
export type CryptoConfig = ArgonCryptoConfig | Pbkdf2CryptoConfig;
|
|
42
|
+
/**
|
|
43
|
+
* Runs the interactive prompt to configure LUKS encryption settings.
|
|
44
|
+
* @returns A Promise that resolves to the CryptoConfig object.
|
|
45
|
+
*/
|
|
46
|
+
export declare function interactiveCryptoConfig(this: Ovary): Promise<CryptoConfig>;
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classe/ovary.d/luks-interactive-crypto-config.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import Utils from '../utils.js';
|
|
9
|
+
// --- 1. CONSTANT VALUES ---
|
|
10
|
+
const CIPHER_OPTIONS = [
|
|
11
|
+
"aes-xts-plain64",
|
|
12
|
+
"serpent-xts-plain64",
|
|
13
|
+
"twofish-xts-plain64",
|
|
14
|
+
];
|
|
15
|
+
const KEY_SIZE_OPTIONS = [512, 256];
|
|
16
|
+
const HASH_OPTIONS = ["sha512", "sha256"];
|
|
17
|
+
const SECTOR_SIZE_OPTIONS = [4096, 512];
|
|
18
|
+
const ARGON_MEMORY_OPTIONS = [524288, 1048576, 2097152];
|
|
19
|
+
const ARGON_PARALLEL_OPTIONS = [1, 2, 4, 8];
|
|
20
|
+
const PBKDF2_ITER_TIME_OPTIONS = [2000, 5000, 10000];
|
|
21
|
+
// --- 4. INTERACTIVE QUESTIONS (Internal) ---
|
|
22
|
+
// This array is not exported.
|
|
23
|
+
const questions = [
|
|
24
|
+
{
|
|
25
|
+
type: 'list',
|
|
26
|
+
name: 'cipher',
|
|
27
|
+
message: 'Choose the cipher algorithm:',
|
|
28
|
+
choices: CIPHER_OPTIONS,
|
|
29
|
+
default: 'aes-xts-plain64',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'list',
|
|
33
|
+
name: 'key-size',
|
|
34
|
+
message: 'Choose the key size:',
|
|
35
|
+
choices: KEY_SIZE_OPTIONS.map(size => ({
|
|
36
|
+
name: `${size} bits ${size === 512 ? '(Standard for AES-256/XTS)' : '(Standard for AES-128/XTS)'}`,
|
|
37
|
+
value: size,
|
|
38
|
+
})),
|
|
39
|
+
default: 512,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: 'list',
|
|
43
|
+
name: 'hash',
|
|
44
|
+
message: 'Choose the hash algorithm:',
|
|
45
|
+
choices: HASH_OPTIONS,
|
|
46
|
+
default: 'sha256',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
name: 'sector-size',
|
|
51
|
+
message: 'Choose the sector size:',
|
|
52
|
+
choices: SECTOR_SIZE_OPTIONS.map(size => ({
|
|
53
|
+
name: `${size} bytes ${size === 4096 ? '(Modern SSDs/NVMe)' : '(Legacy default/Loop devices'}`,
|
|
54
|
+
value: size,
|
|
55
|
+
})),
|
|
56
|
+
default: 512,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'list',
|
|
60
|
+
name: 'pbkdf',
|
|
61
|
+
message: 'Choose the key derivation function (PBKDF):',
|
|
62
|
+
choices: [
|
|
63
|
+
{ name: 'argon2id (Recommended, LUKS2 default)', value: 'argon2id' },
|
|
64
|
+
{ name: 'argon2i', value: 'argon2i' },
|
|
65
|
+
{ name: 'pbkdf2 (LUKS1 standard)', value: 'pbkdf2' },
|
|
66
|
+
],
|
|
67
|
+
default: 'argon2id',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: 'list',
|
|
71
|
+
name: 'pbkdf-memory (KiB)',
|
|
72
|
+
message: 'Choose the memory cost for Argon2 (KiB):',
|
|
73
|
+
choices: ARGON_MEMORY_OPTIONS.map(mem => ({
|
|
74
|
+
name: `${mem / 1024 / 1024} GiB (${mem} KiB)`,
|
|
75
|
+
value: mem,
|
|
76
|
+
})),
|
|
77
|
+
default: 524288,
|
|
78
|
+
when: (answers) => answers.pbkdf === 'argon2id' || answers.pbkdf === 'argon2i',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'list',
|
|
82
|
+
name: 'pbkdf-parallel (threads)',
|
|
83
|
+
message: 'Choose parallel threads for Argon2:',
|
|
84
|
+
choices: ARGON_PARALLEL_OPTIONS.map(threads => ({
|
|
85
|
+
name: `${threads} threads`,
|
|
86
|
+
value: threads,
|
|
87
|
+
})),
|
|
88
|
+
default: 4,
|
|
89
|
+
when: (answers) => answers.pbkdf === 'argon2id' || answers.pbkdf === 'argon2i',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'list',
|
|
93
|
+
name: 'iter-time (ms)',
|
|
94
|
+
message: 'Choose the iteration time for PBKDF2 (ms):',
|
|
95
|
+
choices: PBKDF2_ITER_TIME_OPTIONS.map(time => ({
|
|
96
|
+
name: `${time / 1000} seconds (${time} ms)`,
|
|
97
|
+
value: time,
|
|
98
|
+
})),
|
|
99
|
+
default: 2000,
|
|
100
|
+
when: (answers) => answers.pbkdf === 'pbkdf2',
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
// --- 5. EXPORTED MAIN FUNCTION ---
|
|
104
|
+
/**
|
|
105
|
+
* Runs the interactive prompt to configure LUKS encryption settings.
|
|
106
|
+
* @returns A Promise that resolves to the CryptoConfig object.
|
|
107
|
+
*/
|
|
108
|
+
export async function interactiveCryptoConfig() {
|
|
109
|
+
// Default luksConfig
|
|
110
|
+
const defaultLuksConfig = {
|
|
111
|
+
'cipher': 'aes-xts-plain64',
|
|
112
|
+
'key-size': 512,
|
|
113
|
+
'hash': 'sha256',
|
|
114
|
+
'sector-size': 512,
|
|
115
|
+
'pbkdf': 'argon2id',
|
|
116
|
+
'pbkdf-memory (KiB)': 524288,
|
|
117
|
+
'pbkdf-parallel (threads)': 4
|
|
118
|
+
};
|
|
119
|
+
const inquirer = (await import('inquirer')).default;
|
|
120
|
+
// Chiedi se usare la configurazione LUKS di default
|
|
121
|
+
const useDefault = await inquirer.prompt([{
|
|
122
|
+
type: 'confirm',
|
|
123
|
+
name: 'useDefault',
|
|
124
|
+
message: `Use default LUKS configuration`,
|
|
125
|
+
default: true
|
|
126
|
+
}]);
|
|
127
|
+
if (useDefault.useDefault) {
|
|
128
|
+
Utils.warning(`Using default LUKS configuration`);
|
|
129
|
+
return defaultLuksConfig;
|
|
130
|
+
}
|
|
131
|
+
const answers = await inquirer.prompt(questions);
|
|
132
|
+
// Use the double-cast fix to satisfy TypeScript
|
|
133
|
+
const finalConfig = answers;
|
|
134
|
+
if (finalConfig['sector-size'] === 4096) {
|
|
135
|
+
Utils.warning(`in a loop device - regardless of the hardware - the sector_size will be set to 512`);
|
|
136
|
+
finalConfig['sector-size'] = 512;
|
|
137
|
+
}
|
|
138
|
+
return finalConfig;
|
|
139
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./src/classes/ovary.d/luks-root-initrd.ts
|
|
3
|
+
* penguins-eggs v.25.10.x / ecmascript 2020
|
|
4
|
+
* author: Piero Proietti
|
|
5
|
+
* email: piero.proietti@gmail.com
|
|
6
|
+
* license: MIT
|
|
7
|
+
*/
|
|
8
|
+
import Ovary from '../ovary.js';
|
|
9
|
+
/**
|
|
10
|
+
* Creates a streamlined initrd image for Debian/Ubuntu with LUKS support using mkinitramfs within a temporary chroot.
|
|
11
|
+
* Copies the necessary unlock script, ensures losetup is included via a hook, and wraps /scripts/live for debugging.
|
|
12
|
+
* Assumes live-boot and cryptsetup packages are installed in the chroot.
|
|
13
|
+
* No cleanup of /etc modifications is performed as the chroot is temporary.
|
|
14
|
+
* @param this - Ovary instance context
|
|
15
|
+
* @param verbose - Whether to show verbose output
|
|
16
|
+
*/
|
|
17
|
+
export declare function luksRootInitrd(this: Ovary, verbose?: boolean): Promise<void>;
|