penguins-eggs 25.10.23 → 25.10.24

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 (461) hide show
  1. package/.oclif.manifest.json +17 -3
  2. package/README.md +32 -30
  3. package/README.pdf +1008 -1045
  4. package/addons/eggs/theme/livecd/{grub.theme.cfg → full.grub.theme.cfg} +1 -1
  5. package/addons/eggs/theme/livecd/{isolinux.theme.cfg → full.isolinux.theme.cfg} +1 -1
  6. package/addons/eggs/theme/livecd/generic-splash.png +0 -0
  7. package/addons/eggs/theme/livecd/generic.grub.main.cfg +29 -0
  8. package/addons/eggs/theme/livecd/generic.grub.theme.cfg +67 -0
  9. package/addons/eggs/theme/livecd/generic.isolinux.main.cfg +34 -0
  10. package/addons/eggs/theme/livecd/generic.isolinux.theme.cfg +34 -0
  11. package/addons/eggs/theme/livecd/simple.grub.main.cfg +29 -0
  12. package/addons/eggs/theme/livecd/simple.grub.theme.cfg +67 -0
  13. package/addons/eggs/theme/livecd/{isolinux.main.simple.cfg → simple.isolinux.main.cfg} +1 -1
  14. package/addons/eggs/theme/livecd/simple.isolinux.theme.cfg +47 -0
  15. package/dist/classes/bleach.d.ts +37 -0
  16. package/dist/classes/bleach.js +148 -0
  17. package/dist/classes/cli-autologin.d.ts +52 -0
  18. package/dist/classes/cli-autologin.js +252 -0
  19. package/dist/classes/compressors.d.ts +54 -0
  20. package/dist/classes/compressors.js +109 -0
  21. package/dist/classes/daddy.d.ts +26 -0
  22. package/dist/classes/daddy.js +175 -0
  23. package/dist/classes/distro.d.ts +32 -0
  24. package/dist/classes/distro.js +363 -0
  25. package/dist/classes/diversions.d.ts +53 -0
  26. package/dist/classes/diversions.js +131 -0
  27. package/dist/classes/incubation/branding.d.ts +17 -0
  28. package/dist/classes/incubation/branding.js +85 -0
  29. package/dist/classes/incubation/customize/customize-partitions.d.ts +4 -0
  30. package/dist/classes/incubation/customize/customize-partitions.js +29 -0
  31. package/dist/classes/incubation/fisherman-helper/initcpio.d.ts +1 -0
  32. package/dist/classes/incubation/fisherman-helper/initcpio.js +69 -0
  33. package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
  34. package/dist/classes/incubation/fisherman-helper/packages.js +72 -0
  35. package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
  36. package/dist/classes/incubation/fisherman-helper/settings.js +116 -0
  37. package/dist/classes/incubation/fisherman.d.ts +71 -0
  38. package/dist/classes/incubation/fisherman.js +281 -0
  39. package/dist/classes/incubation/incubator.d/alpine.d.ts +32 -0
  40. package/dist/classes/incubation/incubator.d/alpine.js +78 -0
  41. package/dist/classes/incubation/incubator.d/archlinux.d.ts +32 -0
  42. package/dist/classes/incubation/incubator.d/archlinux.js +82 -0
  43. package/dist/classes/incubation/incubator.d/bionic.d.ts +32 -0
  44. package/dist/classes/incubation/incubator.d/bionic.js +83 -0
  45. package/dist/classes/incubation/incubator.d/buster.d.ts +32 -0
  46. package/dist/classes/incubation/incubator.d/buster.js +101 -0
  47. package/dist/classes/incubation/incubator.d/fedora.d.ts +32 -0
  48. package/dist/classes/incubation/incubator.d/fedora.js +81 -0
  49. package/dist/classes/incubation/incubator.d/focal.d.ts +32 -0
  50. package/dist/classes/incubation/incubator.d/focal.js +85 -0
  51. package/dist/classes/incubation/incubator.d/manjaro.d.ts +32 -0
  52. package/dist/classes/incubation/incubator.d/manjaro.js +82 -0
  53. package/dist/classes/incubation/incubator.d/noble.d.ts +32 -0
  54. package/dist/classes/incubation/incubator.d/noble.js +102 -0
  55. package/dist/classes/incubation/incubator.d/openmamba.d.ts +32 -0
  56. package/dist/classes/incubation/incubator.d/openmamba.js +81 -0
  57. package/dist/classes/incubation/incubator.d/opensuse.d.ts +32 -0
  58. package/dist/classes/incubation/incubator.d/opensuse.js +81 -0
  59. package/dist/classes/incubation/incubator.d/trixie.d.ts +32 -0
  60. package/dist/classes/incubation/incubator.d/trixie.js +98 -0
  61. package/dist/classes/incubation/incubator.d.ts +48 -0
  62. package/dist/classes/incubation/incubator.js +378 -0
  63. package/dist/classes/incubation/installer.d.ts +13 -0
  64. package/dist/classes/incubation/installer.js +52 -0
  65. package/dist/classes/keyboards.d.ts +50 -0
  66. package/dist/classes/keyboards.js +287 -0
  67. package/dist/classes/locales.d.ts +21 -0
  68. package/dist/classes/locales.js +77 -0
  69. package/dist/classes/network.d.ts +37 -0
  70. package/dist/classes/network.js +98 -0
  71. package/dist/classes/ovary.d/bind-live-fs.d.ts +18 -0
  72. package/dist/classes/ovary.d/bind-live-fs.js +185 -0
  73. package/dist/classes/ovary.d/bind-vfs.d.ts +17 -0
  74. package/dist/classes/ovary.d/bind-vfs.js +37 -0
  75. package/dist/classes/ovary.d/create-xdg-autostart.d.ts +13 -0
  76. package/dist/classes/ovary.d/create-xdg-autostart.js +194 -0
  77. package/dist/classes/ovary.d/edit-live-fs.d.ts +20 -0
  78. package/dist/classes/ovary.d/edit-live-fs.js +239 -0
  79. package/dist/classes/ovary.d/fertilization.d.ts +12 -0
  80. package/dist/classes/ovary.d/fertilization.js +53 -0
  81. package/dist/classes/ovary.d/finished.d.ts +13 -0
  82. package/dist/classes/ovary.d/finished.js +40 -0
  83. package/dist/classes/ovary.d/initrd.d.ts +21 -0
  84. package/dist/classes/ovary.d/initrd.js +96 -0
  85. package/dist/classes/ovary.d/kernel-copy.d.ts +12 -0
  86. package/dist/classes/ovary.d/kernel-copy.js +22 -0
  87. package/dist/classes/ovary.d/live-create-structure.d.ts +12 -0
  88. package/dist/classes/ovary.d/live-create-structure.js +70 -0
  89. package/dist/classes/ovary.d/luks-get-password.d.ts +12 -0
  90. package/dist/classes/ovary.d/luks-get-password.js +58 -0
  91. package/dist/classes/ovary.d/luks-home-support.d.ts +12 -0
  92. package/dist/classes/ovary.d/luks-home-support.js +75 -0
  93. package/dist/classes/ovary.d/luks-home.d.ts +15 -0
  94. package/dist/classes/ovary.d/luks-home.js +152 -0
  95. package/dist/classes/ovary.d/luks-root-initrd.d.ts +17 -0
  96. package/dist/classes/ovary.d/luks-root-initrd.js +213 -0
  97. package/dist/classes/ovary.d/luks-root.d.ts +15 -0
  98. package/dist/classes/ovary.d/luks-root.js +151 -0
  99. package/dist/classes/ovary.d/make-dot-disk.d.ts +12 -0
  100. package/dist/classes/ovary.d/make-dot-disk.js +71 -0
  101. package/dist/classes/ovary.d/make-efi.d.ts +14 -0
  102. package/dist/classes/ovary.d/make-efi.js +290 -0
  103. package/dist/classes/ovary.d/make-iso.d.ts +13 -0
  104. package/dist/classes/ovary.d/make-iso.js +45 -0
  105. package/dist/classes/ovary.d/make-squashfs.d.ts +18 -0
  106. package/dist/classes/ovary.d/make-squashfs.js +111 -0
  107. package/dist/classes/ovary.d/merged.d.ts +27 -0
  108. package/dist/classes/ovary.d/merged.js +78 -0
  109. package/dist/classes/ovary.d/produce.d.ts +23 -0
  110. package/dist/classes/ovary.d/produce.js +348 -0
  111. package/dist/classes/ovary.d/rexec.d.ts +13 -0
  112. package/dist/classes/ovary.d/rexec.js +34 -0
  113. package/dist/classes/ovary.d/syslinux.d.ts +12 -0
  114. package/dist/classes/ovary.d/syslinux.js +95 -0
  115. package/dist/classes/ovary.d/user-create-live.d.ts +14 -0
  116. package/dist/classes/ovary.d/user-create-live.js +97 -0
  117. package/dist/classes/ovary.d/users-remove.d.ts +9 -0
  118. package/dist/classes/ovary.d/users-remove.js +38 -0
  119. package/dist/classes/ovary.d/xorriso-command.d.ts +14 -0
  120. package/dist/classes/ovary.d/xorriso-command.js +120 -0
  121. package/dist/classes/ovary.d.ts +105 -0
  122. package/dist/classes/ovary.js +116 -0
  123. package/dist/classes/pacman.d/alpine.d.ts +56 -0
  124. package/dist/classes/pacman.d/alpine.js +167 -0
  125. package/dist/classes/pacman.d/archlinux.d.ts +62 -0
  126. package/dist/classes/pacman.d/archlinux.js +128 -0
  127. package/dist/classes/pacman.d/debian.d.ts +65 -0
  128. package/dist/classes/pacman.d/debian.js +143 -0
  129. package/dist/classes/pacman.d/fedora.d.ts +53 -0
  130. package/dist/classes/pacman.d/fedora.js +107 -0
  131. package/dist/classes/pacman.d/openmamba.d.ts +52 -0
  132. package/dist/classes/pacman.d/openmamba.js +106 -0
  133. package/dist/classes/pacman.d/opensuse.d.ts +53 -0
  134. package/dist/classes/pacman.d/opensuse.js +109 -0
  135. package/dist/classes/pacman.d.ts +139 -0
  136. package/dist/classes/pacman.js +683 -0
  137. package/dist/classes/pve-live.d.ts +17 -0
  138. package/dist/classes/pve-live.js +52 -0
  139. package/dist/classes/pxe.d.ts +76 -0
  140. package/dist/classes/pxe.js +353 -0
  141. package/dist/classes/settings.d.ts +52 -0
  142. package/dist/classes/settings.js +185 -0
  143. package/dist/classes/sources_list.d.ts +28 -0
  144. package/dist/classes/sources_list.js +89 -0
  145. package/dist/classes/systemctl.d.ts +47 -0
  146. package/dist/classes/systemctl.js +86 -0
  147. package/dist/classes/tailor.d.ts +50 -0
  148. package/dist/classes/tailor.js +563 -0
  149. package/dist/classes/tools.d.ts +26 -0
  150. package/dist/classes/tools.js +50 -0
  151. package/dist/classes/users.d.ts +28 -0
  152. package/dist/classes/users.js +143 -0
  153. package/dist/classes/utils.d/kernel.d.ts +39 -0
  154. package/dist/classes/utils.d/kernel.js +206 -0
  155. package/dist/classes/utils.d.ts +330 -0
  156. package/dist/classes/utils.js +968 -0
  157. package/dist/classes/xdg.d.ts +45 -0
  158. package/dist/classes/xdg.js +337 -0
  159. package/dist/classes/yolk.d.ts +33 -0
  160. package/dist/classes/yolk.js +114 -0
  161. package/dist/commands/adapt.d.ts +17 -0
  162. package/dist/commands/adapt.js +33 -0
  163. package/dist/commands/analyze.d.ts +26 -0
  164. package/dist/commands/analyze.js +95 -0
  165. package/dist/commands/calamares.d.ts +29 -0
  166. package/dist/commands/calamares.js +112 -0
  167. package/dist/commands/config.d.ts +35 -0
  168. package/dist/commands/config.js +120 -0
  169. package/dist/commands/cuckoo.d.ts +17 -0
  170. package/dist/commands/cuckoo.js +61 -0
  171. package/dist/commands/dad.d.ts +21 -0
  172. package/dist/commands/dad.js +47 -0
  173. package/dist/commands/export/iso.d.ts +19 -0
  174. package/dist/commands/export/iso.js +55 -0
  175. package/dist/commands/export/pkg.d.ts +29 -0
  176. package/dist/commands/export/pkg.js +173 -0
  177. package/dist/commands/export/tarballs.d.ts +27 -0
  178. package/dist/commands/export/tarballs.js +79 -0
  179. package/dist/commands/install.d.ts +39 -0
  180. package/dist/commands/install.js +113 -0
  181. package/dist/commands/kill.d.ts +24 -0
  182. package/dist/commands/kill.js +50 -0
  183. package/dist/commands/love.d.ts +25 -0
  184. package/dist/commands/love.js +118 -0
  185. package/dist/commands/mom.d.ts +16 -0
  186. package/dist/commands/mom.js +30 -0
  187. package/dist/commands/pods.d.ts +22 -0
  188. package/dist/commands/pods.js +92 -0
  189. package/dist/commands/produce.d.ts +37 -0
  190. package/dist/commands/produce.js +232 -0
  191. package/dist/commands/status.d.ts +23 -0
  192. package/dist/commands/status.js +31 -0
  193. package/dist/commands/tools/clean.d.ts +18 -0
  194. package/dist/commands/tools/clean.js +37 -0
  195. package/dist/commands/tools/repo.d.ts +31 -0
  196. package/dist/commands/tools/repo.js +246 -0
  197. package/dist/commands/tools/skel.d.ts +18 -0
  198. package/dist/commands/tools/skel.js +44 -0
  199. package/dist/commands/tools/stat.d.ts +31 -0
  200. package/dist/commands/tools/stat.js +70 -0
  201. package/dist/commands/tools/yolk.d.ts +24 -0
  202. package/dist/commands/tools/yolk.js +45 -0
  203. package/dist/commands/update.d.ts +46 -0
  204. package/dist/commands/update.js +238 -0
  205. package/dist/commands/wardrobe/get.d.ts +23 -0
  206. package/dist/commands/wardrobe/get.js +52 -0
  207. package/dist/commands/wardrobe/list.d.ts +24 -0
  208. package/dist/commands/wardrobe/list.js +125 -0
  209. package/dist/commands/wardrobe/show.d.ts +25 -0
  210. package/dist/commands/wardrobe/show.js +97 -0
  211. package/dist/commands/wardrobe/wear.d.ts +26 -0
  212. package/dist/commands/wardrobe/wear.js +84 -0
  213. package/dist/dhcpd-proxy/classes/packet.d.ts +36 -0
  214. package/dist/dhcpd-proxy/classes/packet.js +124 -0
  215. package/dist/dhcpd-proxy/index.d.ts +4 -0
  216. package/dist/dhcpd-proxy/index.js +4 -0
  217. package/dist/dhcpd-proxy/interfaces/i-pxe.d.ts +45 -0
  218. package/dist/dhcpd-proxy/interfaces/i-pxe.js +1 -0
  219. package/dist/dhcpd-proxy/lib/packet/converters.d.ts +11 -0
  220. package/dist/dhcpd-proxy/lib/packet/converters.js +395 -0
  221. package/dist/dhcpd-proxy/lib/packet/message-types.d.ts +10 -0
  222. package/dist/dhcpd-proxy/lib/packet/message-types.js +12 -0
  223. package/dist/dhcpd-proxy/lib/packet/options.d.ts +8 -0
  224. package/dist/dhcpd-proxy/lib/packet/options.js +264 -0
  225. package/dist/dhcpd-proxy/lib/sprintf.d.ts +6 -0
  226. package/dist/dhcpd-proxy/lib/sprintf.js +130 -0
  227. package/dist/dhcpd-proxy/lib/utils.d.ts +126 -0
  228. package/dist/dhcpd-proxy/lib/utils.js +255 -0
  229. package/dist/dhcpd-proxy/simple-proxy.d.ts +11 -0
  230. package/dist/dhcpd-proxy/simple-proxy.js +118 -0
  231. package/dist/index.d.ts +8 -0
  232. package/dist/index.js +8 -0
  233. package/dist/interfaces/calamares/i-calamares-bootloader.d.ts +23 -0
  234. package/dist/interfaces/calamares/i-calamares-bootloader.js +7 -0
  235. package/dist/interfaces/calamares/i-calamares-branding.d.ts +46 -0
  236. package/dist/interfaces/calamares/i-calamares-branding.js +1 -0
  237. package/dist/interfaces/calamares/i-calamares-displaymanager.d.ts +34 -0
  238. package/dist/interfaces/calamares/i-calamares-displaymanager.js +1 -0
  239. package/dist/interfaces/calamares/i-calamares-finished.d.ts +14 -0
  240. package/dist/interfaces/calamares/i-calamares-finished.js +1 -0
  241. package/dist/interfaces/calamares/i-calamares-packages.d.ts +26 -0
  242. package/dist/interfaces/calamares/i-calamares-packages.js +1 -0
  243. package/dist/interfaces/calamares/i-calamares-partitions.d.ts +39 -0
  244. package/dist/interfaces/calamares/i-calamares-partitions.js +1 -0
  245. package/dist/interfaces/calamares/i-calamares-settings.d.ts +36 -0
  246. package/dist/interfaces/calamares/i-calamares-settings.js +1 -0
  247. package/dist/interfaces/i-addons.d.ts +12 -0
  248. package/dist/interfaces/i-addons.js +8 -0
  249. package/dist/interfaces/i-analyze.d.ts +17 -0
  250. package/dist/interfaces/i-analyze.js +17 -0
  251. package/dist/interfaces/i-app.d.ts +14 -0
  252. package/dist/interfaces/i-app.js +8 -0
  253. package/dist/interfaces/i-config-tools.d.ts +15 -0
  254. package/dist/interfaces/i-config-tools.js +8 -0
  255. package/dist/interfaces/i-devices.d.ts +20 -0
  256. package/dist/interfaces/i-devices.js +8 -0
  257. package/dist/interfaces/i-distro.d.ts +23 -0
  258. package/dist/interfaces/i-distro.js +8 -0
  259. package/dist/interfaces/i-drive-list.d.ts +33 -0
  260. package/dist/interfaces/i-drive-list.js +8 -0
  261. package/dist/interfaces/i-eggs-config.d.ts +32 -0
  262. package/dist/interfaces/i-eggs-config.js +8 -0
  263. package/dist/interfaces/i-excludes.d.ts +14 -0
  264. package/dist/interfaces/i-excludes.js +8 -0
  265. package/dist/interfaces/i-exec.d.ts +11 -0
  266. package/dist/interfaces/i-exec.js +8 -0
  267. package/dist/interfaces/i-initrd.d.ts +13 -0
  268. package/dist/interfaces/i-initrd.js +8 -0
  269. package/dist/interfaces/i-install.d.ts +16 -0
  270. package/dist/interfaces/i-install.js +8 -0
  271. package/dist/interfaces/i-installer.d.ts +17 -0
  272. package/dist/interfaces/i-installer.js +8 -0
  273. package/dist/interfaces/i-luks-passphrase.d.ts +11 -0
  274. package/dist/interfaces/i-luks-passphrase.js +8 -0
  275. package/dist/interfaces/i-materia.d.ts +36 -0
  276. package/dist/interfaces/i-materia.js +8 -0
  277. package/dist/interfaces/i-net.d.ts +16 -0
  278. package/dist/interfaces/i-net.js +8 -0
  279. package/dist/interfaces/i-os-release.d.ts +5 -0
  280. package/dist/interfaces/i-os-release.js +1 -0
  281. package/dist/interfaces/i-packages.d.ts +16 -0
  282. package/dist/interfaces/i-packages.js +8 -0
  283. package/dist/interfaces/i-partitions.d.ts +16 -0
  284. package/dist/interfaces/i-partitions.js +8 -0
  285. package/dist/interfaces/i-pxe.d.ts +45 -0
  286. package/dist/interfaces/i-pxe.js +1 -0
  287. package/dist/interfaces/i-remix.d.ts +21 -0
  288. package/dist/interfaces/i-remix.js +8 -0
  289. package/dist/interfaces/i-settings.d.ts +33 -0
  290. package/dist/interfaces/i-settings.js +8 -0
  291. package/dist/interfaces/i-user.d.ts +14 -0
  292. package/dist/interfaces/i-user.js +8 -0
  293. package/dist/interfaces/i-workdir.d.ts +14 -0
  294. package/dist/interfaces/i-workdir.js +8 -0
  295. package/dist/interfaces/i-xkb-model.d.ts +24 -0
  296. package/dist/interfaces/i-xkb-model.js +8 -0
  297. package/dist/interfaces/index.d.ts +26 -0
  298. package/dist/interfaces/index.js +8 -0
  299. package/dist/krill/classes/cfs.d.ts +17 -0
  300. package/dist/krill/classes/cfs.js +39 -0
  301. package/dist/krill/classes/krill_enums.d.ts +37 -0
  302. package/dist/krill/classes/krill_enums.js +41 -0
  303. package/dist/krill/classes/prepare.d/confirm.d.ts +5 -0
  304. package/dist/krill/classes/prepare.d/confirm.js +30 -0
  305. package/dist/krill/classes/prepare.d/keyboard.d.ts +14 -0
  306. package/dist/krill/classes/prepare.d/keyboard.js +62 -0
  307. package/dist/krill/classes/prepare.d/location.d.ts +17 -0
  308. package/dist/krill/classes/prepare.d/location.js +59 -0
  309. package/dist/krill/classes/prepare.d/network.d.ts +14 -0
  310. package/dist/krill/classes/prepare.d/network.js +68 -0
  311. package/dist/krill/classes/prepare.d/partitions.d.ts +14 -0
  312. package/dist/krill/classes/prepare.d/partitions.js +86 -0
  313. package/dist/krill/classes/prepare.d/summary.d.ts +15 -0
  314. package/dist/krill/classes/prepare.d/summary.js +72 -0
  315. package/dist/krill/classes/prepare.d/users.d.ts +6 -0
  316. package/dist/krill/classes/prepare.d/users.js +63 -0
  317. package/dist/krill/classes/prepare.d/welcome.d.ts +6 -0
  318. package/dist/krill/classes/prepare.d/welcome.js +30 -0
  319. package/dist/krill/classes/prepare.d.ts +89 -0
  320. package/dist/krill/classes/prepare.js +319 -0
  321. package/dist/krill/classes/sequence.d/add_user.d.ts +20 -0
  322. package/dist/krill/classes/sequence.d/add_user.js +77 -0
  323. package/dist/krill/classes/sequence.d/bootloader.d.ts +14 -0
  324. package/dist/krill/classes/sequence.d/bootloader.js +117 -0
  325. package/dist/krill/classes/sequence.d/bootloader_config.d.ts +14 -0
  326. package/dist/krill/classes/sequence.d/bootloader_config.js +192 -0
  327. package/dist/krill/classes/sequence.d/change_password.d.ts +15 -0
  328. package/dist/krill/classes/sequence.d/change_password.js +18 -0
  329. package/dist/krill/classes/sequence.d/del_live_user.d.ts +14 -0
  330. package/dist/krill/classes/sequence.d/del_live_user.js +39 -0
  331. package/dist/krill/classes/sequence.d/fstab.d.ts +14 -0
  332. package/dist/krill/classes/sequence.d/fstab.js +177 -0
  333. package/dist/krill/classes/sequence.d/grubcfg.d.ts +17 -0
  334. package/dist/krill/classes/sequence.d/grubcfg.js +35 -0
  335. package/dist/krill/classes/sequence.d/hostname.d.ts +13 -0
  336. package/dist/krill/classes/sequence.d/hostname.js +50 -0
  337. package/dist/krill/classes/sequence.d/initramfs.d.ts +13 -0
  338. package/dist/krill/classes/sequence.d/initramfs.js +54 -0
  339. package/dist/krill/classes/sequence.d/initramfs_cfg.d.ts +14 -0
  340. package/dist/krill/classes/sequence.d/initramfs_cfg.js +35 -0
  341. package/dist/krill/classes/sequence.d/locale.d.ts +13 -0
  342. package/dist/krill/classes/sequence.d/locale.js +91 -0
  343. package/dist/krill/classes/sequence.d/locale_cfg.d.ts +10 -0
  344. package/dist/krill/classes/sequence.d/locale_cfg.js +58 -0
  345. package/dist/krill/classes/sequence.d/m_keyboard.d.ts +14 -0
  346. package/dist/krill/classes/sequence.d/m_keyboard.js +58 -0
  347. package/dist/krill/classes/sequence.d/machine_id.d.ts +15 -0
  348. package/dist/krill/classes/sequence.d/machine_id.js +33 -0
  349. package/dist/krill/classes/sequence.d/mkfs.d.ts +15 -0
  350. package/dist/krill/classes/sequence.d/mkfs.js +88 -0
  351. package/dist/krill/classes/sequence.d/mount_fs.d.ts +17 -0
  352. package/dist/krill/classes/sequence.d/mount_fs.js +68 -0
  353. package/dist/krill/classes/sequence.d/mount_vfs.d.ts +17 -0
  354. package/dist/krill/classes/sequence.d/mount_vfs.js +59 -0
  355. package/dist/krill/classes/sequence.d/network_cfg.d.ts +19 -0
  356. package/dist/krill/classes/sequence.d/network_cfg.js +73 -0
  357. package/dist/krill/classes/sequence.d/packages.d.ts +14 -0
  358. package/dist/krill/classes/sequence.d/packages.js +111 -0
  359. package/dist/krill/classes/sequence.d/partition.d/bios_luks.d.ts +17 -0
  360. package/dist/krill/classes/sequence.d/partition.d/bios_luks.js +73 -0
  361. package/dist/krill/classes/sequence.d/partition.d/bios_standard.d.ts +16 -0
  362. package/dist/krill/classes/sequence.d/partition.d/bios_standard.js +51 -0
  363. package/dist/krill/classes/sequence.d/partition.d/uefi_luks.d.ts +17 -0
  364. package/dist/krill/classes/sequence.d/partition.d/uefi_luks.js +77 -0
  365. package/dist/krill/classes/sequence.d/partition.d/uefi_standard.d.ts +10 -0
  366. package/dist/krill/classes/sequence.d/partition.d/uefi_standard.js +33 -0
  367. package/dist/krill/classes/sequence.d/partition.d.ts +14 -0
  368. package/dist/krill/classes/sequence.d/partition.js +84 -0
  369. package/dist/krill/classes/sequence.d/remove_installer_link.d.ts +13 -0
  370. package/dist/krill/classes/sequence.d/remove_installer_link.js +35 -0
  371. package/dist/krill/classes/sequence.d/umount.d.ts +14 -0
  372. package/dist/krill/classes/sequence.d/umount.js +28 -0
  373. package/dist/krill/classes/sequence.d/unpackfs.d.ts +13 -0
  374. package/dist/krill/classes/sequence.d/unpackfs.js +20 -0
  375. package/dist/krill/classes/sequence.d.ts +134 -0
  376. package/dist/krill/classes/sequence.js +400 -0
  377. package/dist/krill/components/finished.d.ts +16 -0
  378. package/dist/krill/components/finished.js +56 -0
  379. package/dist/krill/components/information.d.ts +8 -0
  380. package/dist/krill/components/information.js +162 -0
  381. package/dist/krill/components/install.d.ts +15 -0
  382. package/dist/krill/components/install.js +60 -0
  383. package/dist/krill/components/keyboard.d.ts +16 -0
  384. package/dist/krill/components/keyboard.js +54 -0
  385. package/dist/krill/components/location.d.ts +16 -0
  386. package/dist/krill/components/location.js +59 -0
  387. package/dist/krill/components/network.d.ts +19 -0
  388. package/dist/krill/components/network.js +65 -0
  389. package/dist/krill/components/partitions.d.ts +18 -0
  390. package/dist/krill/components/partitions.js +89 -0
  391. package/dist/krill/components/steps.d.ts +13 -0
  392. package/dist/krill/components/steps.js +148 -0
  393. package/dist/krill/components/summary.d.ts +25 -0
  394. package/dist/krill/components/summary.js +77 -0
  395. package/dist/krill/components/title.d.ts +11 -0
  396. package/dist/krill/components/title.js +35 -0
  397. package/dist/krill/components/users.d.ts +24 -0
  398. package/dist/krill/components/users.js +80 -0
  399. package/dist/krill/components/welcome.d.ts +13 -0
  400. package/dist/krill/components/welcome.js +63 -0
  401. package/dist/krill/interfaces/i_krill.d.ts +44 -0
  402. package/dist/krill/interfaces/i_krill.js +8 -0
  403. package/dist/krill/interfaces/i_krill_config.d.ts +35 -0
  404. package/dist/krill/interfaces/i_krill_config.js +8 -0
  405. package/dist/krill/lib/get_address.d.ts +8 -0
  406. package/dist/krill/lib/get_address.js +23 -0
  407. package/dist/krill/lib/get_dns.d.ts +8 -0
  408. package/dist/krill/lib/get_dns.js +23 -0
  409. package/dist/krill/lib/get_domain.d.ts +8 -0
  410. package/dist/krill/lib/get_domain.js +23 -0
  411. package/dist/krill/lib/get_gateway.d.ts +8 -0
  412. package/dist/krill/lib/get_gateway.js +23 -0
  413. package/dist/krill/lib/get_hostname.d.ts +8 -0
  414. package/dist/krill/lib/get_hostname.js +23 -0
  415. package/dist/krill/lib/get_luks_passphrase.d.ts +8 -0
  416. package/dist/krill/lib/get_luks_passphrase.js +32 -0
  417. package/dist/krill/lib/get_netmask.d.ts +8 -0
  418. package/dist/krill/lib/get_netmask.js +23 -0
  419. package/dist/krill/lib/get_password.d.ts +8 -0
  420. package/dist/krill/lib/get_password.js +36 -0
  421. package/dist/krill/lib/get_userfullname.d.ts +8 -0
  422. package/dist/krill/lib/get_userfullname.js +23 -0
  423. package/dist/krill/lib/get_username.d.ts +8 -0
  424. package/dist/krill/lib/get_username.js +23 -0
  425. package/dist/krill/lib/select_address_type.d.ts +8 -0
  426. package/dist/krill/lib/select_address_type.js +24 -0
  427. package/dist/krill/lib/select_filesystem_type.d.ts +8 -0
  428. package/dist/krill/lib/select_filesystem_type.js +40 -0
  429. package/dist/krill/lib/select_installation_device.d.ts +8 -0
  430. package/dist/krill/lib/select_installation_device.js +40 -0
  431. package/dist/krill/lib/select_installation_mode.d.ts +9 -0
  432. package/dist/krill/lib/select_installation_mode.js +25 -0
  433. package/dist/krill/lib/select_interface.d.ts +8 -0
  434. package/dist/krill/lib/select_interface.js +24 -0
  435. package/dist/krill/lib/select_keyboard_layout.d.ts +11 -0
  436. package/dist/krill/lib/select_keyboard_layout.js +36 -0
  437. package/dist/krill/lib/select_keyboard_model.d.ts +11 -0
  438. package/dist/krill/lib/select_keyboard_model.js +34 -0
  439. package/dist/krill/lib/select_keyboard_option.d.ts +11 -0
  440. package/dist/krill/lib/select_keyboard_option.js +34 -0
  441. package/dist/krill/lib/select_keyboard_variant.d.ts +11 -0
  442. package/dist/krill/lib/select_keyboard_variant.js +35 -0
  443. package/dist/krill/lib/select_languages.d.ts +8 -0
  444. package/dist/krill/lib/select_languages.js +28 -0
  445. package/dist/krill/lib/select_regions.d.ts +8 -0
  446. package/dist/krill/lib/select_regions.js +24 -0
  447. package/dist/krill/lib/select_replaced_partition.d.ts +8 -0
  448. package/dist/krill/lib/select_replaced_partition.js +31 -0
  449. package/dist/krill/lib/select_user_swap_choice.d.ts +9 -0
  450. package/dist/krill/lib/select_user_swap_choice.js +35 -0
  451. package/dist/krill/lib/select_zones.d.ts +8 -0
  452. package/dist/krill/lib/select_zones.js +518 -0
  453. package/dist/lib/kill_me_softly.d.ts +11 -0
  454. package/dist/lib/kill_me_softly.js +61 -0
  455. package/dist/lib/utils.d.ts +19 -0
  456. package/dist/lib/utils.js +65 -0
  457. package/package.json +3 -3
  458. package/scripts/_eggs +3 -1
  459. package/scripts/eggs.bash +2 -2
  460. /package/addons/eggs/theme/livecd/{grub.main.cfg → full.grub.main.cfg} +0 -0
  461. /package/addons/eggs/theme/livecd/{isolinux.main.full.cfg → full.isolinux.main.cfg} +0 -0
@@ -0,0 +1,968 @@
1
+ /**
2
+ * ./src/classes/utils.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
+ * Refactored Utils class - imports from modular utilities
9
+ */
10
+ import shx from 'shelljs';
11
+ import fs from 'fs';
12
+ import dns from 'dns';
13
+ import path from 'path';
14
+ import os from 'os';
15
+ import inquirer from 'inquirer';
16
+ import { execSync, spawnSync } from 'child_process';
17
+ import chalk from 'chalk';
18
+ import { Netmask } from 'netmask';
19
+ import Kernel from './utils.d/kernel.js';
20
+ import Distro from './distro.js';
21
+ // pjson
22
+ import { createRequire } from 'module';
23
+ const require = createRequire(import.meta.url);
24
+ const pjson = require('../../package.json');
25
+ // __dirname
26
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
27
+ /**
28
+ * Utils: general porpourse utils
29
+ * @remarks all the utilities
30
+ */
31
+ export default class Utils {
32
+ static vmlinuz(kernel = '') {
33
+ return Kernel.vmlinuz(kernel);
34
+ }
35
+ /**
36
+ * @deprecated Use Kernel.initramfs() instead
37
+ */
38
+ static initrdImg(kernel = '') {
39
+ return Kernel.initramfs(kernel);
40
+ }
41
+ /**
42
+ * Custom function to sort object keys
43
+ * @param obj
44
+ * @returns
45
+ */
46
+ static sortObjectKeys(obj) {
47
+ const sorted = {};
48
+ Object.keys(obj)
49
+ .sort()
50
+ .forEach(key => {
51
+ sorted[key] = obj[key];
52
+ });
53
+ return sorted;
54
+ }
55
+ /**
56
+ *
57
+ * @param file
58
+ * @param search
59
+ * @returns value
60
+ */
61
+ static searchOnFile(file = '', search = '') {
62
+ const lines = fs.readFileSync(file, 'utf8').split("\n");
63
+ let value = '';
64
+ lines.forEach(line => {
65
+ line = line.replace(/\s+/g, ' '); // Remove multiple spaces with single space
66
+ if (line.includes(search)) {
67
+ value = line.substring(line.indexOf('=') + 1);
68
+ }
69
+ });
70
+ value = value.replaceAll('"', ''); // Remove "
71
+ return value.trim();
72
+ }
73
+ /**
74
+ * Restituisce il prefisso della iso
75
+ * @param distroId
76
+ * @param codenameId
77
+ */
78
+ static snapshotPrefix(distroId, codenameId) {
79
+ let result = `egg-of_${distroId.toLowerCase()}-`;
80
+ if (codenameId === 'rolling' || codenameId === '') {
81
+ const releaseId = Utils.getOsRelease().VERSION_ID.trim();
82
+ if (releaseId !== '') {
83
+ result += releaseId;
84
+ }
85
+ }
86
+ else {
87
+ result += `${codenameId.toLowerCase()}`;
88
+ }
89
+ if (!result.endsWith('-')) {
90
+ result += '-';
91
+ }
92
+ return result;
93
+ }
94
+ /**
95
+ * Detect if running inside a container (Docker or LXC)
96
+ */
97
+ static isContainer() {
98
+ // Check for Docker's specific file
99
+ if (fs.existsSync('/.dockerenv')) {
100
+ return true;
101
+ }
102
+ // Check the cgroup file, which works for Docker, Podman, LXC, etc.
103
+ try {
104
+ const cgroupContent = fs.readFileSync('/proc/1/cgroup', 'utf8');
105
+ return cgroupContent.includes('/docker/') || cgroupContent.includes('/kubepods/');
106
+ }
107
+ catch (e) {
108
+ return false;
109
+ }
110
+ }
111
+ /**
112
+ * Check if the system uses Systemd
113
+ */
114
+ static isSystemd() {
115
+ let isSystemd = false;
116
+ if (!this.isContainer()) {
117
+ isSystemd = fs.readFileSync("/proc/1/comm").includes('systemd');
118
+ }
119
+ else {
120
+ isSystemd = true;
121
+ let distro = new Distro();
122
+ if (distro.distroId === "Devuan") {
123
+ isSystemd = false;
124
+ }
125
+ }
126
+ return isSystemd;
127
+ }
128
+ /**
129
+ * Check if the system uses SysVinit
130
+ */
131
+ static isSysvinit() {
132
+ let isSysvinit = false;
133
+ if (!this.isContainer()) {
134
+ isSysvinit = fs.readFileSync("/proc/1/comm").includes('init');
135
+ }
136
+ else {
137
+ let distro = new Distro();
138
+ if (distro.distroId === "Devuan") {
139
+ isSysvinit = true;
140
+ }
141
+ }
142
+ return isSysvinit;
143
+ }
144
+ /**
145
+ * Check if the system uses OpenRC
146
+ */
147
+ static isOpenRc() {
148
+ let isOpenRc = false;
149
+ if (!this.isContainer()) {
150
+ try {
151
+ execSync('command -v openrc');
152
+ isOpenRc = true;
153
+ }
154
+ catch (error) {
155
+ isOpenRc = false;
156
+ }
157
+ }
158
+ return isOpenRc;
159
+ }
160
+ /**
161
+ * Occore vedere un modo per creare machine-id dove non esiste
162
+ */
163
+ static machineId() {
164
+ let result = '';
165
+ if (fs.existsSync('/etc/machine-id')) {
166
+ result = fs.readFileSync('/etc/machine-id', 'utf-8').trim();
167
+ }
168
+ else if (fs.existsSync('/var/lib/dbus/machine-id')) {
169
+ result = fs.readFileSync('/var/lib/dbus/machine-id', 'utf-8').trim();
170
+ }
171
+ return result;
172
+ }
173
+ /**
174
+ *
175
+ * @param msg
176
+ */
177
+ static warning(msg = '') {
178
+ console.log(pjson.shortName + ' >>> ' + chalk.cyanBright(msg));
179
+ }
180
+ static info(msg = '') {
181
+ console.log(pjson.shortName + ' >>> ' + chalk.white(msg));
182
+ }
183
+ static success(msg = '') {
184
+ console.log(pjson.shortName + ' >>> ' + chalk.greenBright(msg));
185
+ }
186
+ static error(msg = '') {
187
+ console.error(pjson.shortName + ' >>> ' + chalk.bgRed(chalk.whiteBright(msg)));
188
+ }
189
+ /**
190
+ * Return the primary user's name
191
+ */
192
+ static async getPrimaryUser() {
193
+ const { execSync } = require('child_process');
194
+ let primaryUser = '';
195
+ try {
196
+ // Attempt to get the user from logname
197
+ primaryUser = execSync('/usr/bin/logname 2>/dev/null', { encoding: 'utf-8' }).trim();
198
+ }
199
+ catch (error) {
200
+ // console.log("logname failed, so we continue with other methods")
201
+ }
202
+ if (primaryUser === 'root') {
203
+ primaryUser = '';
204
+ }
205
+ if (primaryUser === '') {
206
+ try {
207
+ // Check if doas is installed and get the DOAS_USER
208
+ execSync('command -v doas', { stdio: 'ignore' });
209
+ primaryUser = execSync('echo $DOAS_USER', { encoding: 'utf-8' }).trim();
210
+ }
211
+ catch (error) {
212
+ // console.log("doas is not installed or DOAS_USER is not set, continue with the next method")
213
+ }
214
+ }
215
+ if (primaryUser === '') {
216
+ try {
217
+ // Check for the SUDO_USER
218
+ primaryUser = execSync('echo $SUDO_USER', { encoding: 'utf-8' }).trim();
219
+ }
220
+ catch (error) {
221
+ // console.log("SUDO_USER is not set, continue with the next method")
222
+ }
223
+ }
224
+ if (primaryUser === '') {
225
+ // console.log("Fallback to the USER environment variable")
226
+ primaryUser = process.env.USER || '';
227
+ }
228
+ if (primaryUser === '') {
229
+ primaryUser = 'dummy';
230
+ // console.error('Cannot determine the primary user.');
231
+ // process.exit(1);
232
+ }
233
+ return primaryUser;
234
+ }
235
+ /**
236
+ * restituisce uuid
237
+ * @param device
238
+ */
239
+ static uuid(device) {
240
+ const uuid = shx.exec(`blkid -s UUID -o value ${device}`).stdout.trim();
241
+ return uuid;
242
+ }
243
+ /**
244
+ *
245
+ * @param device
246
+ * @returns
247
+ */
248
+ static uuidGen() {
249
+ const uuid = shx.exec(`uuidgen`, { silent: true }).stdout.trim();
250
+ return uuid;
251
+ }
252
+ /**
253
+ *
254
+ * @param date
255
+ */
256
+ static formatDate(date) {
257
+ const d = new Date(date);
258
+ let month = String(d.getMonth() + 1);
259
+ let day = String(d.getDate());
260
+ const year = d.getFullYear();
261
+ let hh = String(d.getHours());
262
+ let mm = String(d.getMinutes());
263
+ if (month.length < 2) {
264
+ month = '0' + month;
265
+ }
266
+ if (day.length < 2) {
267
+ day = '0' + day;
268
+ }
269
+ if (hh.length < 2) {
270
+ hh = '0' + hh;
271
+ }
272
+ if (mm.length < 2) {
273
+ mm = '0' + mm;
274
+ }
275
+ return [year, month, day].join('-') + '_' + hh + mm;
276
+ }
277
+ /**
278
+ * return the name of the package: penguins-eggs
279
+ * @returns penguins-eggs
280
+ */
281
+ static getPackageName() {
282
+ return pjson.shortName;
283
+ }
284
+ /**
285
+ * Count the eggs present in the nest
286
+ * @returns {number} Numero degli snapshot presenti
287
+ */
288
+ static getSnapshotCount(snapshot_dir = '/') {
289
+ if (fs.existsSync(snapshot_dir)) {
290
+ const files = fs.readdirSync(snapshot_dir);
291
+ let nIsos = 0;
292
+ for (const f of files) {
293
+ if (f.endsWith('.iso')) {
294
+ nIsos++;
295
+ }
296
+ }
297
+ return nIsos;
298
+ }
299
+ return 0;
300
+ }
301
+ /**
302
+ * Get the syze of the snapshot
303
+ * @returns {string} grandezza dello snapshot in Byte
304
+ */
305
+ static getSnapshotSize(snapshot_dir = '/') {
306
+ let fileSizeInBytes = 0;
307
+ const size = shx.exec(`/usr/bin/find ${snapshot_dir} -maxdepth 1 -type f -name '*.iso' -exec du -sc {} + | tail -1 | awk '{print $1}'`, { silent: true }).stdout.trim();
308
+ if (size === '') {
309
+ fileSizeInBytes = 0;
310
+ }
311
+ else {
312
+ fileSizeInBytes = Number(size);
313
+ }
314
+ return fileSizeInBytes;
315
+ }
316
+ /**
317
+ * uefiArch
318
+ * @returns arch
319
+ */
320
+ static uefiArch() {
321
+ let arch = '';
322
+ if (process.arch === 'ia32') {
323
+ arch = 'i386';
324
+ //
325
+ if (shx.exec('uname -m', { silent: true }).stdout.trim() === 'x86_64') {
326
+ arch = 'amd64';
327
+ }
328
+ }
329
+ else if (process.arch === 'x64') {
330
+ arch = 'amd64';
331
+ }
332
+ else if (process.arch === 'arm64') {
333
+ arch = 'arm64';
334
+ }
335
+ return arch;
336
+ }
337
+ /**
338
+ * i386-pc,
339
+ * i386-efi,
340
+ * x86_64-efi,
341
+ * arm64-efi,
342
+ *
343
+ * ATTEMZIONE: install efibootmgr
344
+ *
345
+ * Fedora/RHEL have i386-pc
346
+ */
347
+ static uefiFormat() {
348
+ let format = '';
349
+ if (process.arch === 'ia32') {
350
+ format = 'i386-efi';
351
+ if (shx.exec('uname -m', { silent: true }).stdout.trim() === 'x86_64') {
352
+ format = 'x86_64-efi';
353
+ }
354
+ }
355
+ else if (process.arch === 'x64') {
356
+ format = 'x86_64-efi';
357
+ }
358
+ else if (process.arch === 'arm64') {
359
+ format = 'arm64-efi';
360
+ }
361
+ return format;
362
+ }
363
+ /**
364
+ *
365
+ * @returns
366
+ */
367
+ static usrLibPath() {
368
+ let path = '';
369
+ if (process.arch === 'x64') {
370
+ path = 'x86_64-linux-gnu';
371
+ }
372
+ else if (process.arch === 'arm64') {
373
+ path = 'aarch64-linux-gnu';
374
+ }
375
+ return path;
376
+ }
377
+ /**
378
+ *
379
+ * @param prefix
380
+ * @param backup
381
+ * @returns
382
+ */
383
+ static getPrefix(prefix, backup = false) {
384
+ if (backup) {
385
+ if (prefix.substring(0, 7) === 'egg-of_') {
386
+ prefix = 'egg-bk_' + prefix.substring(7);
387
+ }
388
+ else {
389
+ prefix = 'egg-bk_' + prefix;
390
+ }
391
+ }
392
+ return prefix;
393
+ }
394
+ /**
395
+ *
396
+ * @param volid
397
+ */
398
+ static getVolid(volid = 'unknown') {
399
+ // // 28 + 4 .iso = 32 lunghezza max di volid
400
+ if (volid.length >= 32) {
401
+ volid = volid.substring(0, 32);
402
+ }
403
+ return volid;
404
+ }
405
+ /**
406
+ * Return postfix
407
+ * @param basename
408
+ * @returns eggName
409
+ */
410
+ static getPostfix() {
411
+ let postfix = '_' + Utils.formatDate(new Date()) + '.iso';
412
+ return postfix;
413
+ }
414
+ /**
415
+ * Calculate the space used on the disk
416
+ * @return {void}
417
+ */
418
+ static getUsedSpace() {
419
+ let fileSizeInBytes = 0;
420
+ if (this.isLive()) {
421
+ fileSizeInBytes = 0; // this.getLiveRootSpace()
422
+ }
423
+ else {
424
+ fileSizeInBytes = Number(shx.exec(`df /home | /usr/bin/awk 'NR==2 {print $3}'`, {
425
+ silent: true
426
+ }).stdout);
427
+ }
428
+ return fileSizeInBytes;
429
+ }
430
+ /**
431
+ * Extimate the linuxfs dimension
432
+ * probably is better to rename it as
433
+ * getLiveSpaceRootNeed
434
+ * @returns {number} Byte
435
+ */
436
+ static getLiveRootSpace(type = 'debian-live') {
437
+ let squashFs = '/run/live/medium/live/filesystem.squashfs';
438
+ if (type === 'mx') {
439
+ squashFs = '/live/boot-dev/antiX/linuxfs';
440
+ }
441
+ // Ottengo la dimensione del file compresso
442
+ const compressedFs = fs.statSync(squashFs).size;
443
+ // get compression factor by reading the linuxfs squasfs file, if available
444
+ const compressedFs_compression_type = shx.exec(`dd if=${compressedFs} bs=1 skip=20 count=2 status=none 2>/dev/null| /usr/bin/od -An -tdI`);
445
+ let compression_factor = 0;
446
+ if (compressedFs_compression_type === '1') {
447
+ compression_factor = 37; // gzip
448
+ }
449
+ else if (compressedFs_compression_type === '2') {
450
+ compression_factor = 52; // lzo, not used by antiX
451
+ }
452
+ else if (compressedFs_compression_type === '3') {
453
+ compression_factor = 52; // lzma, not used by antiX
454
+ }
455
+ else if (compressedFs_compression_type === '4') {
456
+ compression_factor = 31; // xz
457
+ }
458
+ else if (compressedFs_compression_type === '5') {
459
+ compression_factor = 52; // lz4
460
+ }
461
+ else {
462
+ compression_factor = 30; // anything else or linuxfs not reachable (toram), should be pretty conservative
463
+ }
464
+ let rootfs_file_size = 0;
465
+ const linuxfs_file_size = (Number(shx.exec('df /live/linux --output=used --total | /usr/bin/tail -n1').stdout.trim()) * 1024 * 100) / compression_factor;
466
+ if (fs.existsSync('/live/persist-root')) {
467
+ rootfs_file_size = Number(shx.exec('df /live/persist-root --output=used --total | /usr/bin/tail -n1').stdout.trim()) * 1024;
468
+ }
469
+ let rootSpaceNeeded;
470
+ if (type === 'mx') {
471
+ /**
472
+ * add rootfs file size to the calculated linuxfs file size. Probaby conservative, as rootfs will likely have some overlap with linuxfs
473
+ */
474
+ rootSpaceNeeded = linuxfs_file_size + rootfs_file_size;
475
+ }
476
+ else {
477
+ rootSpaceNeeded = linuxfs_file_size;
478
+ }
479
+ return rootSpaceNeeded / 1073741824.0; // Converte in GB
480
+ }
481
+ /**
482
+ * Return true if i686 architecture
483
+ * @remarks to move in Utils
484
+ * @returns {boolean} true se l'architettura è i686
485
+ */
486
+ static isi686() {
487
+ return process.arch === 'ia32';
488
+ }
489
+ /**
490
+ * Controlla se è un pacchetto deb
491
+ * /usr/lib/penguins-eggs/bin/node
492
+ */
493
+ static isPackage() {
494
+ let ret = false;
495
+ //if (process.execPath !== '/usr/bin/node') {
496
+ if (process.execPath === '/usr/lib/penguins-eggs/bin/node') {
497
+ ret = true;
498
+ }
499
+ return ret;
500
+ }
501
+ /**
502
+ * Controlla se è un pacchetto sorgente
503
+ */
504
+ static isSources() {
505
+ let ret = false;
506
+ if (__dirname.substring(0, 6) === '/home/') {
507
+ ret = true;
508
+ }
509
+ return ret;
510
+ }
511
+ /**
512
+ * Controlla se è un pacchetto npm
513
+ */
514
+ static isNpmPackage() {
515
+ return !(this.isPackage() || this.isSources());
516
+ }
517
+ /**
518
+ *
519
+ */
520
+ static rootPenguin() {
521
+ return path.resolve(__dirname, '../../');
522
+ }
523
+ /**
524
+ * return the short name of the package: eggs
525
+ * @returns eggs
526
+ */
527
+ static getFriendName() {
528
+ return pjson.shortName;
529
+ }
530
+ /**
531
+ * return the version of the package
532
+ * @returns version example 8.0.0
533
+ */
534
+ static getPackageVersion() {
535
+ return pjson.version;
536
+ }
537
+ /**
538
+ * Get author name
539
+ */
540
+ static getAuthorName() {
541
+ return 'Piero Proietti piero.proietti@gmail.com';
542
+ }
543
+ /**
544
+ * Return the Debian version
545
+ * @returns {number} Versione di Debian
546
+ */
547
+ static getDebianVersion() {
548
+ const cmd = "cat /etc/debian_version | /usr/bin/cut -f1 -d'.'";
549
+ const version = Number(shx.exec(cmd, { silent: true }).stdout);
550
+ return version;
551
+ }
552
+ /**
553
+ * Return true if live system
554
+ * @returns {boolean} isLive
555
+ */
556
+ static isLive() {
557
+ let retVal = false;
558
+ const paths = [
559
+ '/lib/live/mount', // debian-live
560
+ '/run/live/rootfs/filesystem.squashfs', // debian trixie
561
+ '/lib/live/mount/rootfs/filesystem.squashfs', // ubuntu bionic
562
+ '/live/aufs', // mx-linux
563
+ '/media/root-rw', // AlpineLinux
564
+ '/run/archiso/airootfs', // Arch
565
+ '/run/miso/sfs/livefs', // Manjarolinux
566
+ '/run/rootfsbase' // Fedora
567
+ ];
568
+ for (let i = 0; i < paths.length; i++) {
569
+ if (Utils.isMountpoint(paths[i])) {
570
+ retVal = true;
571
+ }
572
+ }
573
+ return retVal;
574
+ }
575
+ /**
576
+ * Ritorna vero se path è un mountpoint
577
+ * @param path
578
+ */
579
+ static isMountpoint(path = '') {
580
+ const cmd = `mountpoint -q ${path}`;
581
+ // return 0 if the directory is a mountpoint, non-zero if not.
582
+ const result = shx.exec(cmd, { silent: true }).code;
583
+ return result === 0;
584
+ }
585
+ /**
586
+ *
587
+ * @param device
588
+ * @returns
589
+ */
590
+ static isBlockDevice(device = '') {
591
+ const cmd = `lsblk -d -o name | grep ${device}`;
592
+ const result = shx.exec(cmd, { silent: true }).code;
593
+ return result === 0;
594
+ }
595
+ /**
596
+ * return true if eggs run as root
597
+ * @returns isRoot
598
+ */
599
+ static isRoot(command = '') {
600
+ if (process.getuid && process.getuid() === 0) {
601
+ return true;
602
+ }
603
+ return false;
604
+ }
605
+ /**
606
+ *
607
+ * @param command
608
+ */
609
+ static useRoot(command = '') {
610
+ Utils.titles(pjson.shortName + ' ' + command + ` need to run with root privileges. Please, prefix it with sudo`);
611
+ }
612
+ /**
613
+ * get the kernel version
614
+ */
615
+ static kernelVersion() {
616
+ return os.release();
617
+ }
618
+ /**
619
+ * return the name of network device
620
+ */
621
+ static async iface() {
622
+ // return shx.exec(`ifconfig | awk 'FNR==1 { print $1 }' | tr --d :`, { silent: true }).stdout.trim()
623
+ const interfaces = Object.keys(os.networkInterfaces());
624
+ let netDeviceName = '';
625
+ for (const k in interfaces) {
626
+ if (interfaces[k] != 'lo') {
627
+ netDeviceName = interfaces[k];
628
+ }
629
+ }
630
+ return netDeviceName;
631
+ }
632
+ /**
633
+ * address
634
+ */
635
+ static address() {
636
+ const interfaces = os.networkInterfaces();
637
+ let address = '';
638
+ if (interfaces !== undefined) {
639
+ for (const devName in interfaces) {
640
+ const iface = interfaces[devName];
641
+ if (iface !== undefined) {
642
+ for (const alias of iface) {
643
+ if (alias.family === 'IPv4' &&
644
+ alias.address !== '127.0.0.1' &&
645
+ !alias.internal) {
646
+ // take just the first!
647
+ if (address === '') {
648
+ address = alias.address;
649
+ }
650
+ }
651
+ }
652
+ }
653
+ }
654
+ }
655
+ return address;
656
+ }
657
+ /**
658
+ * netmask
659
+ */
660
+ static netmask() {
661
+ const interfaces = os.networkInterfaces();
662
+ let netmask = '';
663
+ if (interfaces !== undefined) {
664
+ for (const devName in interfaces) {
665
+ const iface = interfaces[devName];
666
+ if (iface !== undefined) {
667
+ for (const alias of iface) {
668
+ if (alias.family === 'IPv4' &&
669
+ alias.address !== '127.0.0.1' &&
670
+ !alias.internal) {
671
+ // take just the first!
672
+ if (netmask === '') {
673
+ netmask = alias.netmask;
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
679
+ }
680
+ return netmask;
681
+ }
682
+ /**
683
+ * cidr
684
+ */
685
+ static cidr() {
686
+ const interfaces = os.networkInterfaces();
687
+ let cidr = '';
688
+ if (interfaces !== undefined) {
689
+ for (const devName in interfaces) {
690
+ const iface = interfaces[devName];
691
+ if (iface !== undefined) {
692
+ for (const alias of iface) {
693
+ if (alias.family === 'IPv4' &&
694
+ alias.address !== '127.0.0.1' &&
695
+ !alias.internal) {
696
+ // take just the first!
697
+ if (cidr === '') {
698
+ if (alias.cidr !== null) {
699
+ cidr = alias.cidr;
700
+ }
701
+ }
702
+ }
703
+ }
704
+ }
705
+ }
706
+ }
707
+ return cidr;
708
+ }
709
+ /**
710
+ *
711
+ * broadcast
712
+ */
713
+ static broadcast() {
714
+ let n = new Netmask(Utils.cidr());
715
+ return n.broadcast;
716
+ }
717
+ /**
718
+ * dns
719
+ */
720
+ static getDns() {
721
+ return dns.getServers();
722
+ }
723
+ /**
724
+ * getDomain
725
+ */
726
+ static getDomain() {
727
+ return shx.exec('domainname', { silent: true }).stdout.trim();
728
+ // return shx.exec(`route -n | grep 'UG[ \t]' | awk '{print $2}'`, { silent: true }).stdout.trim()
729
+ }
730
+ /**
731
+ * @returns gateway
732
+ */
733
+ static gateway() {
734
+ return shx.exec(`ip r | grep 'default' | awk '{print $3}'`, { silent: true }).stdout.trim();
735
+ //return shx.exec(`route -n | grep 'UG[ \t]' | awk '{print $2}'`, { silent: true }).stdout.trim()
736
+ }
737
+ /**
738
+ * write a file
739
+ * @param file
740
+ * @param text
741
+ */
742
+ static write(file, text) {
743
+ text = text.trim() + '\n';
744
+ file = file.trim();
745
+ fs.writeFileSync(file, text);
746
+ }
747
+ /**
748
+ *
749
+ * @param file
750
+ * @param cmd
751
+ */
752
+ static writeX(file, cmd) {
753
+ let text = `#!/bin/sh\n\n`;
754
+ text += `# Created at: ${Utils.formatDate(new Date())}\n`;
755
+ text += `# By: penguins_eggs v. ${Utils.getPackageVersion()}\n`;
756
+ text += `# ==> Perri\'s Brewery edition <== \n\n`;
757
+ text += cmd;
758
+ Utils.write(file, text);
759
+ shx.chmod('+x', file);
760
+ }
761
+ /**
762
+ *
763
+ * @param file
764
+ * @param cmd
765
+ */
766
+ static writeXs(file, cmds) {
767
+ let cmd = '';
768
+ for (const elem of cmds) {
769
+ cmd += elem + '\n';
770
+ }
771
+ Utils.writeX(file, cmd);
772
+ }
773
+ /**
774
+ *
775
+ * @param msg
776
+ */
777
+ static async customConfirm(msg = 'Select yes to continue... ') {
778
+ const varResult = await Utils.customConfirmCompanion(msg);
779
+ const result = JSON.parse(varResult);
780
+ if (result.confirm === 'Yes') {
781
+ return true;
782
+ }
783
+ else {
784
+ return false;
785
+ }
786
+ }
787
+ /**
788
+ *
789
+ * @param msg
790
+ */
791
+ static async customConfirmCompanion(msg = 'Select yes to continue... ') {
792
+ return new Promise(function (resolve) {
793
+ const questions = [
794
+ {
795
+ type: 'list',
796
+ name: 'confirm',
797
+ message: msg,
798
+ choices: ['No', 'Yes'],
799
+ default: 'No'
800
+ }
801
+ ];
802
+ inquirer.prompt(questions).then(function (options) {
803
+ resolve(JSON.stringify(options));
804
+ });
805
+ });
806
+ }
807
+ /**
808
+ *
809
+ * @param msg
810
+ */
811
+ static async customConfirmAbort(msg = 'Confirm') {
812
+ return new Promise(function (resolve) {
813
+ const questions = [
814
+ {
815
+ type: 'list',
816
+ name: 'confirm',
817
+ message: msg,
818
+ choices: ['No', 'Yes', 'Abort'],
819
+ default: 'Yes'
820
+ }
821
+ ];
822
+ inquirer.prompt(questions).then(function (options) {
823
+ resolve(JSON.stringify(options));
824
+ });
825
+ });
826
+ }
827
+ /**
828
+ *
829
+ */
830
+ static async pressKeyToExit(warning = 'Process will end', procContinue = true) {
831
+ Utils.warning(warning);
832
+ let msg = 'Press a key to exit...';
833
+ if (procContinue) {
834
+ msg = 'Press a key to continue...';
835
+ }
836
+ console.log(msg);
837
+ const pressKeyToExit = spawnSync('read _ ', { shell: true, stdio: [0, 1, 2] });
838
+ if (!procContinue) {
839
+ process.exit(0);
840
+ }
841
+ }
842
+ static async debug(cmd = 'cmd', procContinue = true) {
843
+ console.log(chalk.redBright('DEBUG >>> ') + cmd + '\n');
844
+ let msg = 'Press a key to exit...';
845
+ if (procContinue) {
846
+ msg = 'Press a key to continue...';
847
+ }
848
+ console.log(msg);
849
+ const pressKeyToExit = spawnSync('read _ ', { shell: true, stdio: [0, 1, 2] });
850
+ if (!procContinue) {
851
+ process.exit(0);
852
+ }
853
+ }
854
+ /**
855
+ * titles
856
+ * Penguin's are gettings alive!
857
+ */
858
+ static titles(command = '') {
859
+ console.clear();
860
+ console.log('');
861
+ console.log(' E G G S: the reproductive system of penguins');
862
+ console.log('');
863
+ console.log(Utils.flag());
864
+ console.log('command: ' + chalk.bgBlack.white(command) + '\n');
865
+ }
866
+ /**
867
+ *
868
+ * @returns flag
869
+ */
870
+ static flag() {
871
+ return chalk.bgGreen.whiteBright(' ' + pjson.name + ' ') +
872
+ chalk.bgWhite.blue(" Perri's Brewery edition ") +
873
+ chalk.bgRed.whiteBright(' ver. ' + pjson.version + ' ');
874
+ }
875
+ /**
876
+ *
877
+ * @param verbose
878
+ */
879
+ static setEcho(verbose = false) {
880
+ let echo = { echo: false, ignore: true };
881
+ if (verbose) {
882
+ echo = { echo: true, ignore: false };
883
+ }
884
+ return echo;
885
+ }
886
+ /**
887
+ *
888
+ * @param bytes
889
+ * @param decimals
890
+ * @returns
891
+ */
892
+ static formatBytes(bytes, decimals = 2) {
893
+ if (bytes === 0)
894
+ return '0 Bytes';
895
+ const k = 1024;
896
+ const dm = decimals < 0 ? 0 : decimals;
897
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
898
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
899
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + sizes[i];
900
+ }
901
+ /**
902
+ *
903
+ * @returns wardrobe
904
+ */
905
+ static async wardrobe() {
906
+ let wardrobe = `${os.homedir()}/.wardrobe`;
907
+ if (Utils.isRoot()) {
908
+ wardrobe = `/home/${await Utils.getPrimaryUser()}/.wardrobe`;
909
+ }
910
+ return wardrobe;
911
+ }
912
+ // Se il metodo fa parte di una classe, usa `static`. Altrimenti, rimuovilo.
913
+ static getOsRelease() {
914
+ const osReleasePath = path.join('/etc', 'os-release');
915
+ // Inizializza l'oggetto con valori predefiniti
916
+ const osInfo = {
917
+ ID: '',
918
+ VERSION_ID: '',
919
+ VERSION_CODENAME: 'n/a'
920
+ };
921
+ // Verifica se il file esiste
922
+ if (!fs.existsSync(osReleasePath)) {
923
+ console.error('/etc/os-release file does not exist.');
924
+ return osInfo;
925
+ }
926
+ // Leggi il contenuto del file
927
+ let fileContent;
928
+ try {
929
+ fileContent = fs.readFileSync(osReleasePath, 'utf8');
930
+ }
931
+ catch (error) {
932
+ console.error('Error reading /etc/os-release:', error);
933
+ return osInfo;
934
+ }
935
+ // Analizza ogni linea
936
+ const lines = fileContent.split('\n');
937
+ lines.forEach(line => {
938
+ if (line.startsWith('#') || line.trim() === '')
939
+ return;
940
+ const [key, value] = line.split('=');
941
+ if (key && value) {
942
+ const trimmedKey = key.trim();
943
+ const trimmedValue = value.trim().replace(/"/g, '');
944
+ // Popola solo le chiavi desiderate
945
+ if (trimmedKey === 'ID') {
946
+ osInfo.ID = trimmedValue;
947
+ }
948
+ else if (trimmedKey === 'VERSION_ID') {
949
+ osInfo.VERSION_ID = trimmedValue;
950
+ }
951
+ else if (trimmedKey === 'VERSION_CODENAME') {
952
+ osInfo.VERSION_CODENAME = trimmedValue;
953
+ }
954
+ }
955
+ });
956
+ // capitalize distroId
957
+ osInfo.ID = osInfo.ID[0].toUpperCase() + osInfo.ID.slice(1).toLowerCase();
958
+ osInfo.VERSION_CODENAME = osInfo.VERSION_CODENAME.toLowerCase();
959
+ return osInfo;
960
+ }
961
+ /* Funzione helper che crea una pausa non bloccante.
962
+ * @param ms Millisecondi da attendere
963
+ */
964
+ static sleep(ms = 60000) {
965
+ // console.log('wait...')
966
+ return new Promise(resolve => setTimeout(resolve, ms));
967
+ }
968
+ }