penguins-eggs 25.10.3 → 25.10.19

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.
Files changed (497) hide show
  1. package/.oclif.manifest.json +51 -145
  2. package/README.md +3 -3
  3. package/addons/eggs/theme/livecd/isolinux.main.simple.cfg +3 -3
  4. package/conf/distros/archlinux/calamares/modules/bootloader.yml +86 -0
  5. package/conf/distros/archlinux/calamares/modules/partition.yml +8 -386
  6. package/conf/distros/archlinux/calamares/settings.yml +0 -4
  7. package/conf/distros/fedora/calamares/modules/README.md +4 -0
  8. package/conf/distros/fedora/calamares/modules/bootloader.yml +2 -1
  9. package/conf/distros/fedora/calamares/modules/mount.yml +6 -1
  10. package/conf/distros/fedora/calamares/settings.yml +6 -1
  11. package/conf/distros/focal/calamares/modules/mount.yml +23 -5
  12. package/conf/distros/noble/calamares/libexec/calamares-l10n-helper.sh +3 -0
  13. package/conf/distros/opensuse/calamares/calamares-modules/bootloaderspecification/bootloaderspecification.sh +1 -1
  14. package/conf/distros/opensuse/calamares/modules/dracut.mustache +7 -0
  15. package/conf/distros/opensuse/calamares/modules/packages.mustache +1 -0
  16. package/conf/distros/opensuse/calamares/modules/removeuser.mustache +2 -1
  17. package/conf/distros/opensuse/calamares/modules/unpackfs.mustache +2 -1
  18. package/conf/distros/opensuse/calamares/settings.yml +1 -1
  19. package/conf/distros/trixie/calamares/modules/shellprocess@boot_deploy.yml +3 -4
  20. package/conf/love.yaml +1 -1
  21. package/dist/classes/bleach.d.ts +37 -0
  22. package/dist/classes/bleach.js +148 -0
  23. package/dist/classes/cli-autologin.d.ts +52 -0
  24. package/dist/classes/cli-autologin.js +252 -0
  25. package/dist/classes/compressors.d.ts +54 -0
  26. package/dist/classes/compressors.js +109 -0
  27. package/dist/classes/daddy.d.ts +26 -0
  28. package/dist/classes/daddy.js +175 -0
  29. package/dist/classes/distro.d.ts +32 -0
  30. package/dist/classes/distro.js +363 -0
  31. package/dist/classes/diversions.d.ts +53 -0
  32. package/dist/classes/diversions.js +152 -0
  33. package/dist/classes/incubation/branding.d.ts +17 -0
  34. package/dist/classes/incubation/branding.js +85 -0
  35. package/dist/classes/incubation/customize/customize-partitions.d.ts +4 -0
  36. package/dist/classes/incubation/customize/customize-partitions.js +29 -0
  37. package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +1 -0
  38. package/dist/classes/incubation/fisherman-helper/initcpio.js +69 -0
  39. package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
  40. package/dist/classes/incubation/fisherman-helper/packages.js +72 -0
  41. package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
  42. package/dist/classes/incubation/fisherman-helper/settings.js +116 -0
  43. package/dist/classes/incubation/fisherman.d.ts +71 -0
  44. package/dist/classes/incubation/fisherman.js +281 -0
  45. package/dist/classes/incubation/incubator.d/alpine.d.ts +32 -0
  46. package/dist/classes/incubation/incubator.d/alpine.js +78 -0
  47. package/dist/classes/incubation/incubator.d/archlinux.d.ts +32 -0
  48. package/dist/classes/incubation/incubator.d/archlinux.js +82 -0
  49. package/dist/classes/incubation/incubator.d/bionic.d.ts +32 -0
  50. package/dist/classes/incubation/incubator.d/bionic.js +83 -0
  51. package/dist/classes/incubation/incubator.d/buster.d.ts +32 -0
  52. package/dist/classes/incubation/incubator.d/buster.js +101 -0
  53. package/dist/classes/incubation/incubator.d/fedora.d.ts +32 -0
  54. package/dist/classes/incubation/incubator.d/fedora.js +81 -0
  55. package/dist/classes/incubation/incubator.d/focal.d.ts +32 -0
  56. package/dist/classes/incubation/incubator.d/focal.js +85 -0
  57. package/dist/classes/incubation/incubator.d/manjaro.d.ts +32 -0
  58. package/dist/classes/incubation/incubator.d/manjaro.js +82 -0
  59. package/dist/classes/incubation/incubator.d/noble.d.ts +32 -0
  60. package/dist/classes/incubation/incubator.d/noble.js +102 -0
  61. package/dist/classes/incubation/incubator.d/openmamba.d.ts +32 -0
  62. package/dist/classes/incubation/incubator.d/openmamba.js +81 -0
  63. package/dist/classes/incubation/incubator.d/opensuse.d.ts +32 -0
  64. package/dist/classes/incubation/incubator.d/opensuse.js +81 -0
  65. package/dist/classes/incubation/incubator.d/trixie.d.ts +32 -0
  66. package/dist/classes/incubation/incubator.d/trixie.js +98 -0
  67. package/dist/classes/incubation/incubator.d.ts +48 -0
  68. package/dist/classes/incubation/incubator.js +378 -0
  69. package/dist/classes/incubation/installer.d.ts +13 -0
  70. package/dist/classes/incubation/installer.js +52 -0
  71. package/dist/classes/keyboards.d.ts +50 -0
  72. package/dist/classes/keyboards.js +287 -0
  73. package/dist/classes/locales.d.ts +21 -0
  74. package/dist/classes/locales.js +77 -0
  75. package/dist/classes/network.d.ts +37 -0
  76. package/dist/classes/network.js +98 -0
  77. package/dist/classes/ovary.d/bind-live-fs.d.ts +18 -0
  78. package/dist/classes/ovary.d/bind-live-fs.js +185 -0
  79. package/dist/classes/ovary.d/bind-vfs.d.ts +17 -0
  80. package/dist/classes/ovary.d/bind-vfs.js +37 -0
  81. package/dist/classes/ovary.d/create-xdg-autostart.d.ts +13 -0
  82. package/dist/classes/ovary.d/create-xdg-autostart.js +194 -0
  83. package/dist/classes/ovary.d/edit-live-fs.d.ts +20 -0
  84. package/dist/classes/ovary.d/edit-live-fs.js +239 -0
  85. package/dist/classes/ovary.d/fertilization.d.ts +12 -0
  86. package/dist/classes/ovary.d/fertilization.js +53 -0
  87. package/dist/classes/ovary.d/finished.d.ts +13 -0
  88. package/dist/classes/ovary.d/finished.js +40 -0
  89. package/dist/classes/ovary.d/initrd.d.ts +21 -0
  90. package/dist/classes/ovary.d/initrd.js +95 -0
  91. package/dist/classes/ovary.d/kernel-copy.d.ts +12 -0
  92. package/dist/classes/ovary.d/kernel-copy.js +22 -0
  93. package/dist/classes/ovary.d/live-create-structure.d.ts +12 -0
  94. package/dist/classes/ovary.d/live-create-structure.js +70 -0
  95. package/dist/classes/ovary.d/luks-get-password.d.ts +12 -0
  96. package/dist/classes/ovary.d/luks-get-password.js +57 -0
  97. package/dist/classes/ovary.d/luks-home-support.d.ts +12 -0
  98. package/dist/classes/ovary.d/luks-home-support.js +75 -0
  99. package/dist/classes/ovary.d/luks-home.d.ts +15 -0
  100. package/dist/classes/ovary.d/luks-home.js +140 -0
  101. package/dist/classes/ovary.d/luks-root-bootstrap-builder.d.ts +11 -0
  102. package/dist/classes/ovary.d/luks-root-bootstrap-builder.js +45 -0
  103. package/dist/classes/ovary.d/luks-root.d.ts +15 -0
  104. package/dist/classes/ovary.d/luks-root.js +126 -0
  105. package/dist/classes/ovary.d/make-dot-disk.d.ts +12 -0
  106. package/dist/classes/ovary.d/make-dot-disk.js +62 -0
  107. package/dist/classes/ovary.d/make-efi.d.ts +14 -0
  108. package/dist/classes/ovary.d/make-efi.js +274 -0
  109. package/dist/classes/ovary.d/make-iso.d.ts +13 -0
  110. package/dist/classes/ovary.d/make-iso.js +45 -0
  111. package/dist/classes/ovary.d/make-squashfs.d.ts +18 -0
  112. package/dist/classes/ovary.d/make-squashfs.js +114 -0
  113. package/dist/classes/ovary.d/merged.d.ts +27 -0
  114. package/dist/classes/ovary.d/merged.js +78 -0
  115. package/dist/classes/ovary.d/produce.d.ts +23 -0
  116. package/dist/classes/ovary.d/produce.js +347 -0
  117. package/dist/classes/ovary.d/rexec.d.ts +13 -0
  118. package/dist/classes/ovary.d/rexec.js +34 -0
  119. package/dist/classes/ovary.d/syslinux.d.ts +12 -0
  120. package/dist/classes/ovary.d/syslinux.js +82 -0
  121. package/dist/classes/ovary.d/user-create-live.d.ts +14 -0
  122. package/dist/classes/ovary.d/user-create-live.js +97 -0
  123. package/dist/classes/ovary.d/users-remove.d.ts +9 -0
  124. package/dist/classes/ovary.d/users-remove.js +38 -0
  125. package/dist/classes/ovary.d/xorriso-command.d.ts +14 -0
  126. package/dist/classes/ovary.d/xorriso-command.js +121 -0
  127. package/dist/classes/ovary.d.ts +106 -0
  128. package/dist/classes/ovary.js +116 -0
  129. package/dist/classes/pacman.d/alpine.d.ts +56 -0
  130. package/dist/classes/pacman.d/alpine.js +167 -0
  131. package/dist/classes/pacman.d/archlinux.d.ts +62 -0
  132. package/dist/classes/pacman.d/archlinux.js +128 -0
  133. package/dist/classes/pacman.d/debian.d.ts +65 -0
  134. package/dist/classes/pacman.d/debian.js +143 -0
  135. package/dist/classes/pacman.d/fedora.d.ts +53 -0
  136. package/dist/classes/pacman.d/fedora.js +107 -0
  137. package/dist/classes/pacman.d/openmamba.d.ts +52 -0
  138. package/dist/classes/pacman.d/openmamba.js +106 -0
  139. package/dist/classes/pacman.d/opensuse.d.ts +53 -0
  140. package/dist/classes/pacman.d/opensuse.js +109 -0
  141. package/dist/classes/pacman.d.ts +139 -0
  142. package/dist/classes/pacman.js +683 -0
  143. package/dist/classes/pve-live.d.ts +17 -0
  144. package/dist/classes/pve-live.js +52 -0
  145. package/dist/classes/pxe.d.ts +76 -0
  146. package/dist/classes/pxe.js +353 -0
  147. package/dist/classes/settings.d.ts +52 -0
  148. package/dist/classes/settings.js +185 -0
  149. package/dist/classes/sources_list.d.ts +28 -0
  150. package/dist/classes/sources_list.js +89 -0
  151. package/dist/classes/systemctl.d.ts +47 -0
  152. package/dist/classes/systemctl.js +86 -0
  153. package/dist/classes/tailor.d.ts +50 -0
  154. package/dist/classes/tailor.js +563 -0
  155. package/dist/classes/tools.d.ts +26 -0
  156. package/dist/classes/tools.js +50 -0
  157. package/dist/classes/users.d.ts +28 -0
  158. package/dist/classes/users.js +143 -0
  159. package/dist/classes/utils.d/kernel.d.ts +39 -0
  160. package/dist/classes/utils.d/kernel.js +206 -0
  161. package/dist/classes/utils.d.ts +328 -0
  162. package/dist/classes/utils.js +958 -0
  163. package/dist/classes/xdg.d.ts +45 -0
  164. package/dist/classes/xdg.js +337 -0
  165. package/dist/classes/yolk.d.ts +33 -0
  166. package/dist/classes/yolk.js +114 -0
  167. package/dist/commands/adapt.d.ts +17 -0
  168. package/dist/commands/adapt.js +33 -0
  169. package/dist/commands/analyze.d.ts +26 -0
  170. package/dist/commands/analyze.js +95 -0
  171. package/dist/commands/calamares.d.ts +29 -0
  172. package/dist/commands/calamares.js +112 -0
  173. package/dist/commands/config.d.ts +35 -0
  174. package/dist/commands/config.js +120 -0
  175. package/dist/commands/cuckoo.d.ts +17 -0
  176. package/dist/commands/cuckoo.js +61 -0
  177. package/dist/commands/dad.d.ts +21 -0
  178. package/dist/commands/dad.js +47 -0
  179. package/dist/commands/export/iso.d.ts +19 -0
  180. package/dist/commands/export/iso.js +55 -0
  181. package/dist/commands/export/pkg.d.ts +29 -0
  182. package/dist/commands/export/pkg.js +173 -0
  183. package/dist/commands/export/tarballs.d.ts +27 -0
  184. package/dist/commands/export/tarballs.js +79 -0
  185. package/dist/commands/install.d.ts +39 -0
  186. package/dist/commands/install.js +113 -0
  187. package/dist/commands/kill.d.ts +24 -0
  188. package/dist/commands/kill.js +50 -0
  189. package/dist/commands/love.d.ts +24 -0
  190. package/dist/commands/love.js +111 -0
  191. package/dist/commands/mom.d.ts +16 -0
  192. package/dist/commands/mom.js +30 -0
  193. package/dist/commands/pods.d.ts +22 -0
  194. package/dist/commands/pods.js +92 -0
  195. package/dist/commands/produce.d.ts +36 -0
  196. package/dist/commands/produce.js +218 -0
  197. package/dist/commands/status.d.ts +23 -0
  198. package/dist/commands/status.js +31 -0
  199. package/dist/commands/tools/clean.d.ts +18 -0
  200. package/dist/commands/tools/clean.js +37 -0
  201. package/dist/commands/tools/repo.d.ts +31 -0
  202. package/dist/commands/tools/repo.js +246 -0
  203. package/dist/commands/tools/skel.d.ts +18 -0
  204. package/dist/commands/tools/skel.js +44 -0
  205. package/dist/commands/tools/stat.d.ts +31 -0
  206. package/dist/commands/tools/stat.js +70 -0
  207. package/dist/commands/tools/yolk.d.ts +24 -0
  208. package/dist/commands/tools/yolk.js +45 -0
  209. package/dist/commands/update.d.ts +46 -0
  210. package/dist/commands/update.js +238 -0
  211. package/dist/commands/wardrobe/get.d.ts +23 -0
  212. package/dist/commands/wardrobe/get.js +52 -0
  213. package/dist/commands/wardrobe/list.d.ts +24 -0
  214. package/dist/commands/wardrobe/list.js +125 -0
  215. package/dist/commands/wardrobe/show.d.ts +25 -0
  216. package/dist/commands/wardrobe/show.js +97 -0
  217. package/dist/commands/wardrobe/wear.d.ts +26 -0
  218. package/dist/commands/wardrobe/wear.js +84 -0
  219. package/dist/dhcpd-proxy/classes/packet.d.ts +36 -0
  220. package/dist/dhcpd-proxy/classes/packet.js +124 -0
  221. package/dist/dhcpd-proxy/index.d.ts +4 -0
  222. package/dist/dhcpd-proxy/index.js +4 -0
  223. package/dist/dhcpd-proxy/interfaces/i-pxe.d.ts +45 -0
  224. package/dist/dhcpd-proxy/interfaces/i-pxe.js +1 -0
  225. package/dist/dhcpd-proxy/lib/packet/converters.d.ts +11 -0
  226. package/dist/dhcpd-proxy/lib/packet/converters.js +395 -0
  227. package/dist/dhcpd-proxy/lib/packet/message-types.d.ts +10 -0
  228. package/dist/dhcpd-proxy/lib/packet/message-types.js +12 -0
  229. package/dist/dhcpd-proxy/lib/packet/options.d.ts +8 -0
  230. package/dist/dhcpd-proxy/lib/packet/options.js +264 -0
  231. package/dist/dhcpd-proxy/lib/sprintf.d.ts +6 -0
  232. package/dist/dhcpd-proxy/lib/sprintf.js +130 -0
  233. package/dist/dhcpd-proxy/lib/utils.d.ts +126 -0
  234. package/dist/dhcpd-proxy/lib/utils.js +255 -0
  235. package/dist/dhcpd-proxy/simple-proxy.d.ts +11 -0
  236. package/dist/dhcpd-proxy/simple-proxy.js +118 -0
  237. package/dist/index.d.ts +8 -0
  238. package/dist/index.js +8 -0
  239. package/dist/interfaces/calamares/i-calamares-bootloader.d.ts +23 -0
  240. package/dist/interfaces/calamares/i-calamares-bootloader.js +7 -0
  241. package/dist/interfaces/calamares/i-calamares-branding.d.ts +46 -0
  242. package/dist/interfaces/calamares/i-calamares-branding.js +1 -0
  243. package/dist/interfaces/calamares/i-calamares-displaymanager.d.ts +34 -0
  244. package/dist/interfaces/calamares/i-calamares-displaymanager.js +1 -0
  245. package/dist/interfaces/calamares/i-calamares-finished.d.ts +14 -0
  246. package/dist/interfaces/calamares/i-calamares-finished.js +1 -0
  247. package/dist/interfaces/calamares/i-calamares-packages.d.ts +26 -0
  248. package/dist/interfaces/calamares/i-calamares-packages.js +1 -0
  249. package/dist/interfaces/calamares/i-calamares-partitions.d.ts +39 -0
  250. package/dist/interfaces/calamares/i-calamares-partitions.js +1 -0
  251. package/dist/interfaces/calamares/i-calamares-settings.d.ts +36 -0
  252. package/dist/interfaces/calamares/i-calamares-settings.js +1 -0
  253. package/dist/interfaces/i-addons.d.ts +12 -0
  254. package/dist/interfaces/i-addons.js +8 -0
  255. package/dist/interfaces/i-analyze.d.ts +17 -0
  256. package/dist/interfaces/i-analyze.js +17 -0
  257. package/dist/interfaces/i-app.d.ts +14 -0
  258. package/dist/interfaces/i-app.js +8 -0
  259. package/dist/interfaces/i-config-tools.d.ts +15 -0
  260. package/dist/interfaces/i-config-tools.js +8 -0
  261. package/dist/interfaces/i-devices.d.ts +20 -0
  262. package/dist/interfaces/i-devices.js +8 -0
  263. package/dist/interfaces/i-distro.d.ts +23 -0
  264. package/dist/interfaces/i-distro.js +8 -0
  265. package/dist/interfaces/i-drive-list.d.ts +33 -0
  266. package/dist/interfaces/i-drive-list.js +8 -0
  267. package/dist/interfaces/i-eggs-config.d.ts +32 -0
  268. package/dist/interfaces/i-eggs-config.js +8 -0
  269. package/dist/interfaces/i-excludes.d.ts +14 -0
  270. package/dist/interfaces/i-excludes.js +8 -0
  271. package/dist/interfaces/i-exec.d.ts +11 -0
  272. package/dist/interfaces/i-exec.js +8 -0
  273. package/dist/interfaces/i-initrd.d.ts +13 -0
  274. package/dist/interfaces/i-initrd.js +8 -0
  275. package/dist/interfaces/i-install.d.ts +16 -0
  276. package/dist/interfaces/i-install.js +8 -0
  277. package/dist/interfaces/i-installer.d.ts +17 -0
  278. package/dist/interfaces/i-installer.js +8 -0
  279. package/dist/interfaces/i-luks-passphrase.d.ts +11 -0
  280. package/dist/interfaces/i-luks-passphrase.js +8 -0
  281. package/dist/interfaces/i-materia.d.ts +36 -0
  282. package/dist/interfaces/i-materia.js +8 -0
  283. package/dist/interfaces/i-net.d.ts +16 -0
  284. package/dist/interfaces/i-net.js +8 -0
  285. package/dist/interfaces/i-os-release.d.ts +5 -0
  286. package/dist/interfaces/i-os-release.js +1 -0
  287. package/dist/interfaces/i-packages.d.ts +16 -0
  288. package/dist/interfaces/i-packages.js +8 -0
  289. package/dist/interfaces/i-partitions.d.ts +16 -0
  290. package/dist/interfaces/i-partitions.js +8 -0
  291. package/dist/interfaces/i-pxe.d.ts +45 -0
  292. package/dist/interfaces/i-pxe.js +1 -0
  293. package/dist/interfaces/i-remix.d.ts +21 -0
  294. package/dist/interfaces/i-remix.js +8 -0
  295. package/dist/interfaces/i-settings.d.ts +33 -0
  296. package/dist/interfaces/i-settings.js +8 -0
  297. package/dist/interfaces/i-user.d.ts +14 -0
  298. package/dist/interfaces/i-user.js +8 -0
  299. package/dist/interfaces/i-workdir.d.ts +14 -0
  300. package/dist/interfaces/i-workdir.js +8 -0
  301. package/dist/interfaces/i-xkb-model.d.ts +24 -0
  302. package/dist/interfaces/i-xkb-model.js +8 -0
  303. package/dist/interfaces/index.d.ts +26 -0
  304. package/dist/interfaces/index.js +8 -0
  305. package/dist/krill/classes/cfs.d.ts +17 -0
  306. package/dist/krill/classes/cfs.js +39 -0
  307. package/dist/krill/classes/krill_enums.d.ts +37 -0
  308. package/dist/krill/classes/krill_enums.js +41 -0
  309. package/dist/krill/classes/prepare.d/confirm.d.ts +5 -0
  310. package/dist/krill/classes/prepare.d/confirm.js +30 -0
  311. package/dist/krill/classes/prepare.d/keyboard.d.ts +14 -0
  312. package/dist/krill/classes/prepare.d/keyboard.js +62 -0
  313. package/dist/krill/classes/prepare.d/location.d.ts +17 -0
  314. package/dist/krill/classes/prepare.d/location.js +59 -0
  315. package/dist/krill/classes/prepare.d/network.d.ts +14 -0
  316. package/dist/krill/classes/prepare.d/network.js +68 -0
  317. package/dist/krill/classes/prepare.d/partitions.d.ts +14 -0
  318. package/dist/krill/classes/prepare.d/partitions.js +86 -0
  319. package/dist/krill/classes/prepare.d/summary.d.ts +15 -0
  320. package/dist/krill/classes/prepare.d/summary.js +72 -0
  321. package/dist/krill/classes/prepare.d/users.d.ts +6 -0
  322. package/dist/krill/classes/prepare.d/users.js +63 -0
  323. package/dist/krill/classes/prepare.d/welcome.d.ts +6 -0
  324. package/dist/krill/classes/prepare.d/welcome.js +30 -0
  325. package/dist/krill/classes/prepare.d.ts +89 -0
  326. package/dist/krill/classes/prepare.js +319 -0
  327. package/dist/krill/classes/sequence.d/add_user.d.ts +20 -0
  328. package/dist/krill/classes/sequence.d/add_user.js +77 -0
  329. package/dist/krill/classes/sequence.d/bootloader.d.ts +14 -0
  330. package/dist/krill/classes/sequence.d/bootloader.js +117 -0
  331. package/dist/krill/classes/sequence.d/bootloader_config.d.ts +14 -0
  332. package/dist/krill/classes/sequence.d/bootloader_config.js +192 -0
  333. package/dist/krill/classes/sequence.d/change_password.d.ts +15 -0
  334. package/dist/krill/classes/sequence.d/change_password.js +18 -0
  335. package/dist/krill/classes/sequence.d/del_live_user.d.ts +14 -0
  336. package/dist/krill/classes/sequence.d/del_live_user.js +39 -0
  337. package/dist/krill/classes/sequence.d/fstab.d.ts +14 -0
  338. package/dist/krill/classes/sequence.d/fstab.js +177 -0
  339. package/dist/krill/classes/sequence.d/grubcfg.d.ts +17 -0
  340. package/dist/krill/classes/sequence.d/grubcfg.js +35 -0
  341. package/dist/krill/classes/sequence.d/hostname.d.ts +13 -0
  342. package/dist/krill/classes/sequence.d/hostname.js +50 -0
  343. package/dist/krill/classes/sequence.d/initramfs.d.ts +13 -0
  344. package/dist/krill/classes/sequence.d/initramfs.js +54 -0
  345. package/dist/krill/classes/sequence.d/initramfs_cfg.d.ts +14 -0
  346. package/dist/krill/classes/sequence.d/initramfs_cfg.js +35 -0
  347. package/dist/krill/classes/sequence.d/locale.d.ts +13 -0
  348. package/dist/krill/classes/sequence.d/locale.js +91 -0
  349. package/dist/krill/classes/sequence.d/locale_cfg.d.ts +10 -0
  350. package/dist/krill/classes/sequence.d/locale_cfg.js +58 -0
  351. package/dist/krill/classes/sequence.d/m_keyboard.d.ts +14 -0
  352. package/dist/krill/classes/sequence.d/m_keyboard.js +58 -0
  353. package/dist/krill/classes/sequence.d/machine_id.d.ts +15 -0
  354. package/dist/krill/classes/sequence.d/machine_id.js +33 -0
  355. package/dist/krill/classes/sequence.d/mkfs.d.ts +15 -0
  356. package/dist/krill/classes/sequence.d/mkfs.js +88 -0
  357. package/dist/krill/classes/sequence.d/mount_fs.d.ts +17 -0
  358. package/dist/krill/classes/sequence.d/mount_fs.js +68 -0
  359. package/dist/krill/classes/sequence.d/mount_vfs.d.ts +17 -0
  360. package/dist/krill/classes/sequence.d/mount_vfs.js +59 -0
  361. package/dist/krill/classes/sequence.d/network_cfg.d.ts +19 -0
  362. package/dist/krill/classes/sequence.d/network_cfg.js +73 -0
  363. package/dist/krill/classes/sequence.d/packages.d.ts +14 -0
  364. package/dist/krill/classes/sequence.d/packages.js +111 -0
  365. package/dist/krill/classes/sequence.d/partition.d/bios_luks.d.ts +17 -0
  366. package/dist/krill/classes/sequence.d/partition.d/bios_luks.js +73 -0
  367. package/dist/krill/classes/sequence.d/partition.d/bios_standard.d.ts +16 -0
  368. package/dist/krill/classes/sequence.d/partition.d/bios_standard.js +51 -0
  369. package/dist/krill/classes/sequence.d/partition.d/uefi_luks.d.ts +17 -0
  370. package/dist/krill/classes/sequence.d/partition.d/uefi_luks.js +77 -0
  371. package/dist/krill/classes/sequence.d/partition.d/uefi_standard.d.ts +10 -0
  372. package/dist/krill/classes/sequence.d/partition.d/uefi_standard.js +33 -0
  373. package/dist/krill/classes/sequence.d/partition.d.ts +14 -0
  374. package/dist/krill/classes/sequence.d/partition.js +84 -0
  375. package/dist/krill/classes/sequence.d/remove_installer_link.d.ts +13 -0
  376. package/dist/krill/classes/sequence.d/remove_installer_link.js +35 -0
  377. package/dist/krill/classes/sequence.d/umount.d.ts +14 -0
  378. package/dist/krill/classes/sequence.d/umount.js +28 -0
  379. package/dist/krill/classes/sequence.d/unpackfs.d.ts +13 -0
  380. package/dist/krill/classes/sequence.d/unpackfs.js +20 -0
  381. package/dist/krill/classes/sequence.d.ts +134 -0
  382. package/dist/krill/classes/sequence.js +400 -0
  383. package/dist/krill/components/finished.d.ts +16 -0
  384. package/dist/krill/components/finished.js +56 -0
  385. package/dist/krill/components/information.d.ts +8 -0
  386. package/dist/krill/components/information.js +162 -0
  387. package/dist/krill/components/install.d.ts +15 -0
  388. package/dist/krill/components/install.js +60 -0
  389. package/dist/krill/components/keyboard.d.ts +16 -0
  390. package/dist/krill/components/keyboard.js +54 -0
  391. package/dist/krill/components/location.d.ts +16 -0
  392. package/dist/krill/components/location.js +59 -0
  393. package/dist/krill/components/network.d.ts +19 -0
  394. package/dist/krill/components/network.js +65 -0
  395. package/dist/krill/components/partitions.d.ts +18 -0
  396. package/dist/krill/components/partitions.js +89 -0
  397. package/dist/krill/components/steps.d.ts +13 -0
  398. package/dist/krill/components/steps.js +148 -0
  399. package/dist/krill/components/summary.d.ts +25 -0
  400. package/dist/krill/components/summary.js +77 -0
  401. package/dist/krill/components/title.d.ts +11 -0
  402. package/dist/krill/components/title.js +35 -0
  403. package/dist/krill/components/users.d.ts +24 -0
  404. package/dist/krill/components/users.js +80 -0
  405. package/dist/krill/components/welcome.d.ts +13 -0
  406. package/dist/krill/components/welcome.js +63 -0
  407. package/dist/krill/interfaces/i_krill.d.ts +44 -0
  408. package/dist/krill/interfaces/i_krill.js +8 -0
  409. package/dist/krill/interfaces/i_krill_config.d.ts +35 -0
  410. package/dist/krill/interfaces/i_krill_config.js +8 -0
  411. package/dist/krill/lib/get_address.d.ts +8 -0
  412. package/dist/krill/lib/get_address.js +23 -0
  413. package/dist/krill/lib/get_dns.d.ts +8 -0
  414. package/dist/krill/lib/get_dns.js +23 -0
  415. package/dist/krill/lib/get_domain.d.ts +8 -0
  416. package/dist/krill/lib/get_domain.js +23 -0
  417. package/dist/krill/lib/get_gateway.d.ts +8 -0
  418. package/dist/krill/lib/get_gateway.js +23 -0
  419. package/dist/krill/lib/get_hostname.d.ts +8 -0
  420. package/dist/krill/lib/get_hostname.js +23 -0
  421. package/dist/krill/lib/get_luks_passphrase.d.ts +8 -0
  422. package/dist/krill/lib/get_luks_passphrase.js +32 -0
  423. package/dist/krill/lib/get_netmask.d.ts +8 -0
  424. package/dist/krill/lib/get_netmask.js +23 -0
  425. package/dist/krill/lib/get_password.d.ts +8 -0
  426. package/dist/krill/lib/get_password.js +36 -0
  427. package/dist/krill/lib/get_userfullname.d.ts +8 -0
  428. package/dist/krill/lib/get_userfullname.js +23 -0
  429. package/dist/krill/lib/get_username.d.ts +8 -0
  430. package/dist/krill/lib/get_username.js +23 -0
  431. package/dist/krill/lib/select_address_type.d.ts +8 -0
  432. package/dist/krill/lib/select_address_type.js +24 -0
  433. package/dist/krill/lib/select_filesystem_type.d.ts +8 -0
  434. package/dist/krill/lib/select_filesystem_type.js +40 -0
  435. package/dist/krill/lib/select_installation_device.d.ts +8 -0
  436. package/dist/krill/lib/select_installation_device.js +40 -0
  437. package/dist/krill/lib/select_installation_mode.d.ts +9 -0
  438. package/dist/krill/lib/select_installation_mode.js +25 -0
  439. package/dist/krill/lib/select_interface.d.ts +8 -0
  440. package/dist/krill/lib/select_interface.js +24 -0
  441. package/dist/krill/lib/select_keyboard_layout.d.ts +11 -0
  442. package/dist/krill/lib/select_keyboard_layout.js +36 -0
  443. package/dist/krill/lib/select_keyboard_model.d.ts +11 -0
  444. package/dist/krill/lib/select_keyboard_model.js +34 -0
  445. package/dist/krill/lib/select_keyboard_option.d.ts +11 -0
  446. package/dist/krill/lib/select_keyboard_option.js +34 -0
  447. package/dist/krill/lib/select_keyboard_variant.d.ts +11 -0
  448. package/dist/krill/lib/select_keyboard_variant.js +35 -0
  449. package/dist/krill/lib/select_languages.d.ts +8 -0
  450. package/dist/krill/lib/select_languages.js +28 -0
  451. package/dist/krill/lib/select_regions.d.ts +8 -0
  452. package/dist/krill/lib/select_regions.js +24 -0
  453. package/dist/krill/lib/select_replaced_partition.d.ts +8 -0
  454. package/dist/krill/lib/select_replaced_partition.js +31 -0
  455. package/dist/krill/lib/select_user_swap_choice.d.ts +9 -0
  456. package/dist/krill/lib/select_user_swap_choice.js +35 -0
  457. package/dist/krill/lib/select_zones.d.ts +8 -0
  458. package/dist/krill/lib/select_zones.js +518 -0
  459. package/dist/lib/kill_me_softly.d.ts +11 -0
  460. package/dist/lib/kill_me_softly.js +61 -0
  461. package/dist/lib/utils.d.ts +19 -0
  462. package/dist/lib/utils.js +65 -0
  463. package/dracut/create-symlink +71 -0
  464. package/dracut/dracut-log.txt +3 -0
  465. package/dracut/dracut.conf.d/50-live.conf +24 -6
  466. package/dracut/dracut.conf.d/README.md +10 -0
  467. package/dracut/export +4 -0
  468. package/dracut/export-dracut-analysis +51 -0
  469. package/dracut/export-dracut-log +2 -0
  470. package/dracut/mkisofs +10 -0
  471. package/dracut/modules.d/00debug-shell/debug-hook.sh +13 -0
  472. package/dracut/modules.d/00debug-shell/module-setup.sh +20 -0
  473. package/dracut/modules.d/90block/README.md +7 -0
  474. package/dracut/modules.d/90block/block-cmdline.sh +3 -0
  475. package/dracut/modules.d/90block/module-setup.sh +15 -0
  476. package/dracut/modules.d/95iso-scan/README.md +3 -0
  477. package/dracut/modules.d/95iso-scan/iso-scan-fallback.sh +12 -0
  478. package/dracut/modules.d/95iso-scan/iso-scan.sh +92 -0
  479. package/dracut/modules.d/95iso-scan/module-setup.sh +18 -0
  480. package/dracut/modules.d/95luks-loop/README.md +9 -0
  481. package/dracut/modules.d/95luks-loop/luks-loop.sh +90 -0
  482. package/dracut/modules.d/95luks-loop/module-setup.sh +17 -0
  483. package/dracut/renew-initramfs +17 -0
  484. package/dracut/sbin2bin +10 -0
  485. package/dracut/update-dracut-conf-d +2 -0
  486. package/dracut/update-dracut-modules +62 -0
  487. package/manpages/doc/man/eggs.1.gz +0 -0
  488. package/manpages/doc/man/eggs.html +7 -661
  489. package/package.json +10 -9
  490. package/perrisbrewery/template/dependencies.yaml +6 -5
  491. package/scripts/_eggs +16 -31
  492. package/scripts/eggs.bash +4 -6
  493. package/scripts/luks-root-bootstrap-create.sh +235 -0
  494. package/scripts/luks-root-unlock.sh +172 -0
  495. package/scripts/mount-encrypted-home.sh +223 -0
  496. package/conf/distros/archlinux/calamares/modules/shellprocess@sync.yml +0 -5
  497. package/conf/distros/opensuse/calamares/modules/dracut.yml +0 -14
@@ -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,75 @@
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
+ // Crea le directory necessarie
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
+ // console.log(`✓ Created: ${scriptPath}`)
64
+ // Scrivi il service
65
+ fs.writeFileSync(servicePath, systemdService);
66
+ // console.log(`✓ Created: ${servicePath}`)
67
+ // Crea il symlink per abilitare il service
68
+ if (fs.existsSync(symlinkPath)) {
69
+ fs.unlinkSync(symlinkPath);
70
+ }
71
+ fs.symlinkSync('../mount-encrypted-home.service', symlinkPath);
72
+ // console.log(`✓ Enabled: mount-encrypted-home.service`)
73
+ // console.log('Encrypted home support installed successfully')
74
+ // console.log('Logs will be available at: /var/log/mount-encrypted-home.log')
75
+ }
@@ -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,140 @@
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 { spawn } from 'node:child_process';
11
+ import Utils from '../utils.js';
12
+ import { exec } from '../../lib/utils.js';
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
+ try {
21
+ /**
22
+ * this.luksName = 'home.img';
23
+ * this.luksFile = `/tmp/${luksName}`
24
+ * this.luksDevice = `/dev/mapper/${luksName}`
25
+ * this.luksMappedName = this.luksName
26
+ * this.luksMountpoint = `/tmp/mnt/${luksName}`
27
+ * this.luksPassword = 'evolution'
28
+ */
29
+ console.log();
30
+ console.log('====================================');
31
+ console.log(` Creating ${this.luksName}`);
32
+ console.log('====================================');
33
+ // Utils.warning('1. Calculation of space requirements...')
34
+ let sizeString = (await exec('du -sb --exclude=/home/eggs /home', { capture: true })).data.trim().split(/\s+/)[0];
35
+ let size = Number.parseInt(sizeString, 10);
36
+ // const fsOverhead = Math.max(size * 0.1, 100 * 1024 * 1024)
37
+ // const luksSize = size + fsOverhead + (size * 0.2) // +20% di sicurezza
38
+ const luksSize = Math.ceil(size * 2);
39
+ Utils.warning(`homes size: ${bytesToGB(size)}`);
40
+ Utils.warning(`partition LUKS ${this.luksFile} size: ${bytesToGB(luksSize)}`);
41
+ Utils.warning(`creating partition LUKS: ${this.luksFile}`);
42
+ await executeCommand('truncate', ['--size', `${luksSize}`, this.luksFile]);
43
+ Utils.warning(`formatting ${this.luksFile} as a LUKS volume...`);
44
+ await executeCommand('cryptsetup', ['--batch-mode', 'luksFormat', this.luksFile], `${this.luksPassword}\n`);
45
+ this.luksUuid = (await exec(`cryptsetup luksUUID ${this.luksFile}`, { capture: true, echo: false })).data.trim();
46
+ Utils.warning(`LUKS uuid: ${this.luksUuid}`);
47
+ Utils.warning(`opening the LUKS volume. It will be mapped to ${this.luksDevice}`);
48
+ await executeCommand('cryptsetup', ['luksOpen', this.luksFile, this.luksMappedName], `${this.luksPassword}\n`);
49
+ Utils.warning(`formatting c ext4 `);
50
+ await exec(`mkfs.ext4 -L live-home ${this.luksDevice}`, this.echo);
51
+ Utils.warning(`mounting ${this.luksDevice} on ${this.luksMountpoint}`);
52
+ if (fs.existsSync(this.luksMountpoint)) {
53
+ if (!Utils.isMountpoint(this.luksMountpoint)) {
54
+ await exec(`rm -rf ${this.luksMountpoint}`, this.echo);
55
+ }
56
+ else {
57
+ throw new Error(`${this.luksMountpoint} is already mounted, process will abort!`);
58
+ }
59
+ }
60
+ await exec(`mkdir -p ${this.luksMountpoint}`, this.echo);
61
+ await exec(`mount /dev/mapper/${this.luksName} ${this.luksMountpoint}`, this.echo);
62
+ Utils.warning(`copying /home on ${this.luksMountpoint}`);
63
+ await exec(`rsync -ah --exclude='eggs' /home/ ${this.luksMountpoint}`, this.echo);
64
+ Utils.warning(`saving user accounts info...`);
65
+ // Crea directory per backup system files
66
+ await exec(`mkdir -p ${this.luksMountpoint}/.system-backup`, this.echo);
67
+ // Filtra solo utenti con UID >= 1000
68
+ await exec(`awk -F: '$3 >= 1000 {print}' /etc/passwd > ${this.luksMountpoint}/.system-backup/passwd`, this.echo);
69
+ await exec(`awk -F: '$3 >= 1000 {print}' /etc/shadow > ${this.luksMountpoint}/.system-backup/shadow`, this.echo);
70
+ // Per i gruppi: salva TUTTI (non filtrare per GID)
71
+ // Gli utenti possono appartenere a gruppi di sistema (sudo, audio, video, etc.)
72
+ await exec(`cp /etc/group ${this.luksMountpoint}/.system-backup/group`, this.echo);
73
+ await exec(`cp /etc/gshadow ${this.luksMountpoint}/.system-backup/gshadow`, this.echo);
74
+ Utils.warning(`unmount ${this.luksDevice}`);
75
+ await exec(`umount ${this.luksMountpoint}`, this.echo);
76
+ Utils.warning(`closing LUKS volume ${this.luksMappedName}.`);
77
+ await executeCommand('cryptsetup', ['close', this.luksMappedName]);
78
+ Utils.warning(`moving ${this.luksName} to (ISO)/live/.`);
79
+ await exec(`mv ${this.luksFile} ${this.settings.iso_work}/live`, this.echo);
80
+ Utils.warning('encryption process successfully completed!');
81
+ /**
82
+ * YOU MUST! unlink the key on production
83
+ */
84
+ // fs.unlinkSync(`${this.settings.iso_work}/live/home.key`)
85
+ }
86
+ catch (error) {
87
+ if (error instanceof Error) {
88
+ Utils.error(`ERROR: ${error.message}`);
89
+ }
90
+ else {
91
+ Utils.error(`An unknown error has occurred.`);
92
+ }
93
+ Utils.warning('Cleaning performed following the error...');
94
+ if (fs.existsSync(this.luksMountpoint)) {
95
+ await exec(`umount -lf ${this.luksMountpoint}`).catch(() => { });
96
+ }
97
+ if (fs.existsSync(this.luksDevice)) {
98
+ await executeCommand('cryptsetup', ['luksClose', this.luksName]).catch(() => { });
99
+ }
100
+ await Utils.pressKeyToExit();
101
+ process.exit(1);
102
+ }
103
+ }
104
+ /**
105
+ * Funzione helper per eseguire comandi esterni in modo asincrono,
106
+ * gestendo lo standard input per passare le password.
107
+ * Restituisce una Promise che si risolve al successo o si rigetta in caso di errore.
108
+ */
109
+ function executeCommand(command, args, stdinData) {
110
+ return new Promise((resolve, reject) => {
111
+ // Se passiamo dati a stdin, dobbiamo usare 'pipe'. Altrimenti, 'inherit'.
112
+ const stdioConfig = stdinData ? ['pipe', 'inherit', 'inherit'] : 'inherit';
113
+ const process = spawn(command, args, { stdio: stdioConfig });
114
+ // Se fornito, scriviamo i dati (es. la password) nello stdin del processo.
115
+ if (stdinData && process.stdin) {
116
+ process.stdin.write(stdinData);
117
+ process.stdin.end();
118
+ }
119
+ process.on('error', (err) => {
120
+ reject(new Error(`Error starting command "${command}": ${err.message}`));
121
+ });
122
+ process.on('close', (code) => {
123
+ if (code === 0) {
124
+ resolve(); // Success
125
+ }
126
+ else {
127
+ reject(new Error(`Command "${command} ${args.join(' ')}" ended with error code ${code}`));
128
+ }
129
+ });
130
+ });
131
+ }
132
+ /**
133
+ * Converte bytes in gigabytes per la visualizzazione.
134
+ */
135
+ function bytesToGB(bytes) {
136
+ if (bytes === 0)
137
+ return '0.00 GB';
138
+ const gigabytes = bytes / (1024 * 1024 * 1024);
139
+ return gigabytes.toFixed(2) + ' GB';
140
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * luks-root-bootstrap-builder.ts
3
+ *
4
+ * Crea un filesystem.squashfs bootstrap completo con Debian
5
+ * per sbloccare il sistema principale cifrato
6
+ */
7
+ import Ovary from '../ovary.js';
8
+ /**
9
+ * Crea il filesystem bootstrap completo
10
+ */
11
+ export declare function createBootstrapFilesystem(this: Ovary, outputSquashfs: string): Promise<void>;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * luks-root-bootstrap-builder.ts
3
+ *
4
+ * Crea un filesystem.squashfs bootstrap completo con Debian
5
+ * per sbloccare il sistema principale cifrato
6
+ */
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import Utils from '../utils.js';
10
+ import { exec } from '../../lib/utils.js';
11
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
12
+ /**
13
+ * Crea il filesystem bootstrap completo
14
+ */
15
+ export async function createBootstrapFilesystem(outputSquashfs) {
16
+ Utils.warning('Creating full Debian bootstrap filesystem...');
17
+ Utils.warning('This will take several minutes...');
18
+ const scriptsDir = path.join(__dirname, '../../../scripts');
19
+ const createScript = path.join(scriptsDir, 'luks-root-bootstrap-create.sh');
20
+ const unlockScript = path.join(scriptsDir, 'luks-root-unlock.sh');
21
+ // Verifica che gli script esistano
22
+ if (!fs.existsSync(createScript)) {
23
+ throw new Error(`Build script not found: ${createScript}`);
24
+ }
25
+ if (!fs.existsSync(unlockScript)) {
26
+ throw new Error(`Unlock script not found: ${unlockScript}`);
27
+ }
28
+ try {
29
+ // Esegui lo script di creazione bash
30
+ Utils.warning('Executing bootstrap creation script...');
31
+ await exec(`bash ${createScript} ${outputSquashfs} ${unlockScript}`, { echo: true });
32
+ // Verifica che il file sia stato creato
33
+ if (!fs.existsSync(outputSquashfs)) {
34
+ throw new Error('Bootstrap filesystem was not created');
35
+ }
36
+ const stats = fs.statSync(outputSquashfs);
37
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
38
+ Utils.success(`✓ Bootstrap filesystem created: ${sizeMB} MB`);
39
+ Utils.success(' Full Debian system with systemd and encrypted root unlock');
40
+ }
41
+ catch (error) {
42
+ Utils.error(`Failed to create bootstrap filesystem: ${error}`);
43
+ throw error;
44
+ }
45
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ./src/classes/ovary.d/encrypt-live-fs.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
+ * luksRoot()
11
+ *
12
+ * create a container LUKS with the entire
13
+ * filesystem.squashfs
14
+ */
15
+ export declare function luksRoot(this: Ovary): Promise<void>;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * ./src/classes/ovary.d/encrypt-live-fs.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 { spawn } from 'node:child_process';
11
+ import Utils from '../utils.js';
12
+ import { exec } from '../../lib/utils.js';
13
+ /**
14
+ * luksRoot()
15
+ *
16
+ * create a container LUKS with the entire
17
+ * filesystem.squashfs
18
+ */
19
+ export async function luksRoot() {
20
+ // filesystem.squashfs.real
21
+ const live_fs = `${this.settings.iso_work}live/filesystem.squashfs.real`;
22
+ try {
23
+ /**
24
+ * this.luksName = 'luks.img';
25
+ * this.luksFile = `/tmp/${luksName}`
26
+ * this.luksDevice = `/dev/mapper/${luksName}`
27
+ * this.luksMappedName = this.luksName
28
+ * this.luksMountpoint = `/tmp/mnt/${luksName}`
29
+ * this.luksPassword = 'evolution'
30
+ */
31
+ console.log();
32
+ console.log('====================================');
33
+ console.log(` Creating ${this.luksName}`);
34
+ console.log('====================================');
35
+ // Utils.warning('1. Calculation of space requirements...')
36
+ const sizeString = (await exec(`unsquashfs -s ${live_fs} | grep "Filesystem size" | sed -e 's/.*size //' -e 's/ .*//'`, { capture: true, echo: false })).data;
37
+ let size = Number.parseInt(sizeString); // Dimensione in Byte
38
+ // Add overhead * 1.20
39
+ const luksSize = Math.ceil(size * 1.20);
40
+ Utils.warning(`filesystem.squashfs size: ${bytesToGB(size)}`);
41
+ Utils.warning(`partition LUKS ${this.luksFile} size: ${bytesToGB(luksSize)}`);
42
+ Utils.warning(`creating partition LUKS: ${this.luksFile}`);
43
+ await executeCommand('truncate', ['--size', `${luksSize}`, this.luksFile]);
44
+ Utils.warning(`formatting ${this.luksFile} as a LUKS volume...`);
45
+ await executeCommand('cryptsetup', ['--batch-mode', 'luksFormat', this.luksFile], `${this.luksPassword}\n`);
46
+ this.luksUuid = (await exec(`cryptsetup luksUUID ${this.luksFile}`, { capture: true, echo: false })).data.trim();
47
+ Utils.warning(`LUKS uuid: ${this.luksUuid}`);
48
+ Utils.warning(`opening the LUKS volume. It will be mapped to ${this.luksDevice}`);
49
+ await executeCommand('cryptsetup', ['luksOpen', this.luksFile, this.luksMappedName], `${this.luksPassword}\n`);
50
+ Utils.warning(`formatting ext4`);
51
+ await exec(`mkfs.ext4 -L live-root ${this.luksDevice}`, this.echo);
52
+ Utils.warning(`mounting ${this.luksDevice} on ${this.luksMountpoint}`);
53
+ if (fs.existsSync(this.luksMountpoint)) {
54
+ if (!Utils.isMountpoint(this.luksMountpoint)) {
55
+ await exec(`rm -rf ${this.luksMountpoint}`, this.echo);
56
+ }
57
+ else {
58
+ throw new Error(`${this.luksMountpoint} is already mounted, process will abort!`);
59
+ }
60
+ }
61
+ await exec(`mkdir -p ${this.luksMountpoint}`, this.echo);
62
+ await exec(`mount /dev/mapper/${this.luksName} ${this.luksMountpoint}`, this.echo);
63
+ Utils.warning(`moving ${live_fs} ${this.luksMountpoint}/filesystem.squashfs`);
64
+ await exec(`mv ${live_fs} ${this.luksMountpoint}/filesystem.squashfs`, this.echo);
65
+ Utils.warning(`unmount ${this.luksMountpoint} `);
66
+ await exec(`umount ${this.luksMountpoint}`, this.echo);
67
+ Utils.warning(`closing LUKS volume ${this.luksFile}.`);
68
+ await executeCommand('cryptsetup', ['close', this.luksMappedName]);
69
+ Utils.warning(`moving ${this.luksMappedName} on (ISO)/live.`);
70
+ await exec(`mv ${this.luksFile} ${this.settings.iso_work}/live`, this.echo);
71
+ }
72
+ catch (error) {
73
+ if (error instanceof Error) {
74
+ Utils.error(`ERROR: ${error.message}`);
75
+ }
76
+ else {
77
+ Utils.error(`An unknown error has occurred.`);
78
+ }
79
+ Utils.warning('Cleaning performed following the error...');
80
+ if (fs.existsSync(this.luksMountpoint)) {
81
+ await exec(`umount -lf ${this.luksMountpoint}`).catch(() => { });
82
+ }
83
+ if (fs.existsSync(this.luksDevice)) {
84
+ await executeCommand('cryptsetup', ['luksClose', this.luksName]).catch(() => { });
85
+ }
86
+ await Utils.pressKeyToExit();
87
+ process.exit(1);
88
+ }
89
+ }
90
+ /**
91
+ * Funzione helper per eseguire comandi esterni in modo asincrono,
92
+ * gestendo lo standard input per passare le password.
93
+ * Restituisce una Promise che si risolve al successo o si rigetta in caso di errore.
94
+ */
95
+ function executeCommand(command, args, stdinData) {
96
+ return new Promise((resolve, reject) => {
97
+ // Se passiamo dati a stdin, dobbiamo usare 'pipe'. Altrimenti, 'inherit'.
98
+ const stdioConfig = stdinData ? ['pipe', 'inherit', 'inherit'] : 'inherit';
99
+ const process = spawn(command, args, { stdio: stdioConfig });
100
+ // Se fornito, scriviamo i dati (es. la password) nello stdin del processo.
101
+ if (stdinData && process.stdin) {
102
+ process.stdin.write(stdinData);
103
+ process.stdin.end();
104
+ }
105
+ process.on('error', (err) => {
106
+ reject(new Error(`Error starting command "${command}": ${err.message}`));
107
+ });
108
+ process.on('close', (code) => {
109
+ if (code === 0) {
110
+ resolve(); // Success
111
+ }
112
+ else {
113
+ reject(new Error(`Command "${command} ${args.join(' ')}" ended with error code ${code}`));
114
+ }
115
+ });
116
+ });
117
+ }
118
+ /**
119
+ * Converte bytes in gigabytes per la visualizzazione.
120
+ */
121
+ function bytesToGB(bytes) {
122
+ if (bytes === 0)
123
+ return '0.00 GB';
124
+ const gigabytes = bytes / (1024 * 1024 * 1024);
125
+ return gigabytes.toFixed(2) + ' GB';
126
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * ./src/classes/ovary.d/produce.ts
3
+ * penguins-eggs v.25.7.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
+ * makeDotDisk
11
+ */
12
+ export declare function makeDotDisk(this: Ovary, info?: string, mksquashfs?: string, mkisofs?: string): void;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * ./src/classes/ovary.d/produce.ts
3
+ * penguins-eggs v.25.7.x / ecmascript 2020
4
+ * author: Piero Proietti
5
+ * email: piero.proietti@gmail.com
6
+ * license: MIT
7
+ */
8
+ // packages
9
+ import fs from 'node:fs';
10
+ import shx from 'shelljs';
11
+ import path from 'path';
12
+ // interfaces
13
+ // libraries
14
+ // classes
15
+ import Utils from './../utils.js';
16
+ // _dirname
17
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
18
+ /**
19
+ * makeDotDisk
20
+ */
21
+ export function makeDotDisk(info = '', mksquashfs = '', mkisofs = '') {
22
+ const dotDisk = this.settings.iso_work + '.disk';
23
+ if (fs.existsSync(dotDisk)) {
24
+ shx.rm('-rf', dotDisk);
25
+ }
26
+ shx.mkdir('-p', dotDisk);
27
+ /**
28
+ * write volid .disk/info
29
+ * Required
30
+ */
31
+ let volidContent = this.settings.isoFilename;
32
+ fs.writeFileSync(path.join(dotDisk, 'info'), volidContent, 'utf-8');
33
+ /**
34
+ * A readme now replace the old .disk/info
35
+ */
36
+ let readme = ``;
37
+ readme += `# penguins_eggs\n`;
38
+ readme += `\n`;
39
+ readme += `Volinfo: ${this.volid}\n`;
40
+ readme += `Image created at: ${Utils.formatDate(new Date())} using penguins_eggs v. ${Utils.getPackageVersion()})\n`;
41
+ readme += `repo: [penguins-eggs](https://github.com/penguins-eggs)\n`;
42
+ readme += `blog: [penguins-eggs.net](https://penguins-eggs.net)\n`;
43
+ readme += `author: [Piero Proietti](mailto://piero.proietti@gmail.com)\n`;
44
+ fs.writeFileSync(path.join(dotDisk, 'README.md'), readme, 'utf-8');
45
+ /**
46
+ * write mksquashfs as .disk/mksquashfs
47
+ */
48
+ fs.writeFileSync(path.join(dotDisk, 'mksquashfs'), mksquashfs, 'utf-8');
49
+ /**
50
+ * write mkisofs as .disk/mkisofs
51
+ */
52
+ fs.writeFileSync(path.join(dotDisk, 'mkisofs'), mkisofs, 'utf-8');
53
+ /**
54
+ * touch uuid as file name on .disk/id
55
+ *
56
+ * This is a DEBIAN standard
57
+ */
58
+ if (this.uuid && this.uuid.trim() !== '') {
59
+ shx.mkdir(path.join(dotDisk, 'id'));
60
+ shx.touch(path.join(dotDisk, 'id', this.uuid));
61
+ }
62
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ./src/classes/ovary.d/make-efi.ts
3
+ * penguins-eggs v.25.7.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
+ *
11
+ * @param this
12
+ * @param theme
13
+ */
14
+ export declare function makeEfi(this: Ovary, theme?: string): Promise<void>;