penguins-eggs 10.0.57 → 10.1.0

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