penguins-eggs 25.10.19 → 25.10.23

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