penguins-eggs 10.0.28 → 10.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/.oclif.manifest.json +1500 -2
  2. package/README.md +760 -0
  3. package/addons/README.md +0 -2
  4. package/addons/eggs/adapt/applications/eggs-adapt.desktop +1 -1
  5. package/addons/eggs/theme/livecd/isolinux.main.alpine.cfg +43 -0
  6. package/addons/eggs/theme/livecd/{isolinux.main.cfg → isolinux.main.original.cfg} +1 -1
  7. package/conf/distros/alpine/README.md +1 -1
  8. package/conf/distros/alpine/calamares/calamares-modules/bootloader-config/bootloader-config.sh +40 -0
  9. package/conf/distros/alpine/calamares/calamares-modules/bootloader-config/module.yml +9 -0
  10. package/conf/distros/alpine/calamares/calamares-modules/cleanup/cleanup.sh +13 -0
  11. package/conf/distros/alpine/calamares/calamares-modules/cleanup/module.yml +9 -0
  12. package/conf/distros/alpine/calamares/modules/bootloader.yml +57 -0
  13. package/conf/distros/alpine/calamares/modules/displaymanager.yml +23 -0
  14. package/conf/distros/alpine/calamares/modules/finished.yml +5 -0
  15. package/conf/distros/alpine/calamares/modules/fstab.yml +12 -0
  16. package/conf/distros/alpine/calamares/modules/locale.yml +98 -0
  17. package/conf/distros/alpine/calamares/modules/luksopenswaphookcfg.yml +5 -0
  18. package/conf/distros/alpine/calamares/modules/machineid.yml +17 -0
  19. package/conf/distros/alpine/calamares/modules/mount.yml +56 -0
  20. package/conf/distros/alpine/calamares/modules/packages.yml +6 -0
  21. package/conf/distros/alpine/calamares/modules/partition.yml +242 -0
  22. package/conf/distros/alpine/calamares/modules/removeuser.yml +15 -0
  23. package/conf/distros/alpine/calamares/modules/unpackfs.yml +6 -0
  24. package/conf/distros/alpine/calamares/modules/users.yml +18 -0
  25. package/conf/distros/alpine/calamares/modules/welcome.yml +19 -0
  26. package/conf/distros/alpine/calamares/settings.yml +57 -0
  27. package/conf/love.yaml +8 -0
  28. package/dist/classes/bleach.d.ts +32 -0
  29. package/dist/classes/bleach.js +136 -0
  30. package/dist/classes/cfs.d.ts +17 -0
  31. package/dist/classes/cfs.js +39 -0
  32. package/dist/classes/cli-autologin.d.ts +52 -0
  33. package/dist/classes/cli-autologin.js +230 -0
  34. package/dist/classes/compressors.d.ts +54 -0
  35. package/dist/classes/compressors.js +109 -0
  36. package/dist/classes/daddy.d.ts +26 -0
  37. package/dist/classes/daddy.js +161 -0
  38. package/dist/classes/distro.d.ts +36 -0
  39. package/dist/classes/distro.js +346 -0
  40. package/dist/classes/families/alpine.d.ts +55 -0
  41. package/dist/classes/families/alpine.js +163 -0
  42. package/dist/classes/families/archlinux.d.ts +61 -0
  43. package/dist/classes/families/archlinux.js +140 -0
  44. package/dist/classes/families/debian.d.ts +65 -0
  45. package/dist/classes/families/debian.js +138 -0
  46. package/dist/classes/families/fedora.d.ts +52 -0
  47. package/dist/classes/families/fedora.js +100 -0
  48. package/dist/classes/families/mockup.d.ts +60 -0
  49. package/dist/classes/families/mockup.js +79 -0
  50. package/dist/classes/families/opensuse.d.ts +52 -0
  51. package/dist/classes/families/opensuse.js +104 -0
  52. package/dist/classes/incubation/branding.d.ts +17 -0
  53. package/dist/classes/incubation/branding.js +89 -0
  54. package/dist/classes/incubation/distros/alpine.d.ts +32 -0
  55. package/dist/classes/incubation/distros/alpine.js +80 -0
  56. package/dist/classes/incubation/distros/bionic.d.ts +32 -0
  57. package/dist/classes/incubation/distros/bionic.js +83 -0
  58. package/dist/classes/incubation/distros/buster.d.ts +32 -0
  59. package/dist/classes/incubation/distros/buster.js +85 -0
  60. package/dist/classes/incubation/distros/jessie.d.ts +31 -0
  61. package/dist/classes/incubation/distros/jessie.js +44 -0
  62. package/dist/classes/incubation/distros/noble.d.ts +32 -0
  63. package/dist/classes/incubation/distros/noble.js +85 -0
  64. package/dist/classes/incubation/distros/rolling.d.ts +32 -0
  65. package/dist/classes/incubation/distros/rolling.js +82 -0
  66. package/dist/classes/incubation/fisherman-helper/displaymanager.d.ts +11 -0
  67. package/dist/classes/incubation/fisherman-helper/displaymanager.js +39 -0
  68. package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
  69. package/dist/classes/incubation/fisherman-helper/packages.js +72 -0
  70. package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
  71. package/dist/classes/incubation/fisherman-helper/settings.js +83 -0
  72. package/dist/classes/incubation/fisherman.d.ts +77 -0
  73. package/dist/classes/incubation/fisherman.js +251 -0
  74. package/dist/classes/incubation/incubator.d.ts +40 -0
  75. package/dist/classes/incubation/incubator.js +328 -0
  76. package/dist/classes/incubation/installer.d.ts +13 -0
  77. package/dist/classes/incubation/installer.js +64 -0
  78. package/dist/classes/keyboards.d.ts +50 -0
  79. package/dist/classes/keyboards.js +287 -0
  80. package/dist/classes/locales.d.ts +21 -0
  81. package/dist/classes/locales.js +80 -0
  82. package/dist/classes/n8.d.ts +18 -0
  83. package/dist/classes/n8.js +36 -0
  84. package/dist/classes/network.d.ts +37 -0
  85. package/dist/classes/network.js +98 -0
  86. package/dist/classes/ovary.d.ts +214 -0
  87. package/dist/classes/ovary.js +1872 -0
  88. package/dist/classes/pacman.d.ts +149 -0
  89. package/dist/classes/pacman.js +703 -0
  90. package/dist/classes/pve-live.d.ts +17 -0
  91. package/dist/classes/pve-live.js +52 -0
  92. package/dist/classes/pxe.d.ts +74 -0
  93. package/dist/classes/pxe.js +410 -0
  94. package/dist/classes/settings.d.ts +53 -0
  95. package/dist/classes/settings.js +185 -0
  96. package/dist/classes/sources_list.d.ts +28 -0
  97. package/dist/classes/sources_list.js +89 -0
  98. package/dist/classes/systemctl.d.ts +47 -0
  99. package/dist/classes/systemctl.js +86 -0
  100. package/dist/classes/tailor.d.ts +46 -0
  101. package/dist/classes/tailor.js +587 -0
  102. package/dist/classes/tools.d.ts +30 -0
  103. package/dist/classes/tools.js +54 -0
  104. package/dist/classes/users.d.ts +28 -0
  105. package/dist/classes/users.js +143 -0
  106. package/dist/classes/utils.d.ts +323 -0
  107. package/dist/classes/utils.js +951 -0
  108. package/dist/classes/xdg.d.ts +45 -0
  109. package/dist/classes/xdg.js +329 -0
  110. package/dist/classes/yolk.d.ts +33 -0
  111. package/dist/classes/yolk.js +114 -0
  112. package/dist/commands/adapt.d.ts +17 -0
  113. package/dist/commands/adapt.js +33 -0
  114. package/dist/commands/analyze.d.ts +26 -0
  115. package/dist/commands/analyze.js +95 -0
  116. package/dist/commands/calamares.d.ts +29 -0
  117. package/dist/commands/calamares.js +110 -0
  118. package/dist/commands/config.d.ts +35 -0
  119. package/dist/commands/config.js +192 -0
  120. package/dist/commands/cuckoo.d.ts +16 -0
  121. package/dist/commands/cuckoo.js +62 -0
  122. package/dist/commands/dad.d.ts +20 -0
  123. package/dist/commands/dad.js +46 -0
  124. package/dist/commands/export/deb.d.ts +19 -0
  125. package/dist/commands/export/deb.js +51 -0
  126. package/dist/commands/export/iso.d.ts +19 -0
  127. package/dist/commands/export/iso.js +55 -0
  128. package/dist/commands/install.d.ts +37 -0
  129. package/dist/commands/install.js +92 -0
  130. package/dist/commands/kill.d.ts +24 -0
  131. package/dist/commands/kill.js +50 -0
  132. package/dist/commands/love.d.ts +20 -0
  133. package/dist/commands/love.js +55 -0
  134. package/dist/commands/mom.d.ts +16 -0
  135. package/dist/commands/mom.js +30 -0
  136. package/dist/commands/produce.d.ts +34 -0
  137. package/dist/commands/produce.js +196 -0
  138. package/dist/commands/status.d.ts +23 -0
  139. package/dist/commands/status.js +31 -0
  140. package/dist/commands/syncfrom.d.ts +45 -0
  141. package/dist/commands/syncfrom.js +152 -0
  142. package/dist/commands/syncto.d.ts +40 -0
  143. package/dist/commands/syncto.js +175 -0
  144. package/dist/commands/tools/clean.d.ts +18 -0
  145. package/dist/commands/tools/clean.js +37 -0
  146. package/dist/commands/tools/ppa.d.ts +26 -0
  147. package/dist/commands/tools/ppa.js +138 -0
  148. package/dist/commands/tools/skel.d.ts +18 -0
  149. package/dist/commands/tools/skel.js +44 -0
  150. package/dist/commands/tools/stat.d.ts +31 -0
  151. package/dist/commands/tools/stat.js +70 -0
  152. package/dist/commands/tools/yolk.d.ts +24 -0
  153. package/dist/commands/tools/yolk.js +45 -0
  154. package/dist/commands/update.d.ts +47 -0
  155. package/dist/commands/update.js +140 -0
  156. package/dist/commands/wardrobe/get.d.ts +23 -0
  157. package/dist/commands/wardrobe/get.js +52 -0
  158. package/dist/commands/wardrobe/list.d.ts +24 -0
  159. package/dist/commands/wardrobe/list.js +125 -0
  160. package/dist/commands/wardrobe/show.d.ts +25 -0
  161. package/dist/commands/wardrobe/show.js +97 -0
  162. package/dist/commands/wardrobe/wear.d.ts +26 -0
  163. package/dist/commands/wardrobe/wear.js +81 -0
  164. package/dist/components/finished.d.ts +15 -0
  165. package/dist/components/finished.js +55 -0
  166. package/dist/components/information.d.ts +8 -0
  167. package/dist/components/information.js +153 -0
  168. package/dist/components/install.d.ts +15 -0
  169. package/dist/components/install.js +56 -0
  170. package/dist/components/keyboard.d.ts +16 -0
  171. package/dist/components/keyboard.js +54 -0
  172. package/dist/components/location.d.ts +16 -0
  173. package/dist/components/location.js +59 -0
  174. package/dist/components/network.d.ts +19 -0
  175. package/dist/components/network.js +65 -0
  176. package/dist/components/partitions.d.ts +16 -0
  177. package/dist/components/partitions.js +73 -0
  178. package/dist/components/steps.d.ts +13 -0
  179. package/dist/components/steps.js +148 -0
  180. package/dist/components/summary.d.ts +24 -0
  181. package/dist/components/summary.js +82 -0
  182. package/dist/components/title.d.ts +11 -0
  183. package/dist/components/title.js +35 -0
  184. package/dist/components/users.d.ts +24 -0
  185. package/dist/components/users.js +80 -0
  186. package/dist/components/welcome.d.ts +13 -0
  187. package/dist/components/welcome.js +63 -0
  188. package/dist/index.d.ts +8 -0
  189. package/dist/index.js +8 -0
  190. package/dist/interfaces/i-addons.d.ts +12 -0
  191. package/dist/interfaces/i-addons.js +8 -0
  192. package/dist/interfaces/i-analyze.d.ts +17 -0
  193. package/dist/interfaces/i-analyze.js +17 -0
  194. package/dist/interfaces/i-app.d.ts +14 -0
  195. package/dist/interfaces/i-app.js +8 -0
  196. package/dist/interfaces/i-branding.d.ts +36 -0
  197. package/dist/interfaces/i-branding.js +8 -0
  198. package/dist/interfaces/i-calamares-partition.d.ts +18 -0
  199. package/dist/interfaces/i-calamares-partition.js +8 -0
  200. package/dist/interfaces/i-config-tools.d.ts +18 -0
  201. package/dist/interfaces/i-config-tools.js +8 -0
  202. package/dist/interfaces/i-devices.d.ts +20 -0
  203. package/dist/interfaces/i-devices.js +8 -0
  204. package/dist/interfaces/i-distro.d.ts +27 -0
  205. package/dist/interfaces/i-distro.js +8 -0
  206. package/dist/interfaces/i-drive-list.d.ts +33 -0
  207. package/dist/interfaces/i-drive-list.js +8 -0
  208. package/dist/interfaces/i-eggs-config.d.ts +32 -0
  209. package/dist/interfaces/i-eggs-config.js +8 -0
  210. package/dist/interfaces/i-excludes.d.ts +14 -0
  211. package/dist/interfaces/i-excludes.js +8 -0
  212. package/dist/interfaces/i-exec.d.ts +11 -0
  213. package/dist/interfaces/i-exec.js +8 -0
  214. package/dist/interfaces/i-initrd.d.ts +13 -0
  215. package/dist/interfaces/i-initrd.js +8 -0
  216. package/dist/interfaces/i-install.d.ts +16 -0
  217. package/dist/interfaces/i-install.js +8 -0
  218. package/dist/interfaces/i-installer.d.ts +17 -0
  219. package/dist/interfaces/i-installer.js +8 -0
  220. package/dist/interfaces/i-krill-config.d.ts +33 -0
  221. package/dist/interfaces/i-krill-config.js +8 -0
  222. package/dist/interfaces/i-krill.d.ts +42 -0
  223. package/dist/interfaces/i-krill.js +8 -0
  224. package/dist/interfaces/i-materia.d.ts +41 -0
  225. package/dist/interfaces/i-materia.js +8 -0
  226. package/dist/interfaces/i-net.d.ts +16 -0
  227. package/dist/interfaces/i-net.js +8 -0
  228. package/dist/interfaces/i-packages.d.ts +16 -0
  229. package/dist/interfaces/i-packages.js +8 -0
  230. package/dist/interfaces/i-partitions.d.ts +16 -0
  231. package/dist/interfaces/i-partitions.js +8 -0
  232. package/dist/interfaces/i-pxe.d.ts +45 -0
  233. package/dist/interfaces/i-pxe.js +1 -0
  234. package/dist/interfaces/i-remix.d.ts +21 -0
  235. package/dist/interfaces/i-remix.js +8 -0
  236. package/dist/interfaces/i-settings.d.ts +33 -0
  237. package/dist/interfaces/i-settings.js +8 -0
  238. package/dist/interfaces/i-user.d.ts +14 -0
  239. package/dist/interfaces/i-user.js +8 -0
  240. package/dist/interfaces/i-workdir.d.ts +14 -0
  241. package/dist/interfaces/i-workdir.js +8 -0
  242. package/dist/interfaces/i-xkb-model.d.ts +24 -0
  243. package/dist/interfaces/i-xkb-model.js +8 -0
  244. package/dist/interfaces/index.d.ts +25 -0
  245. package/dist/interfaces/index.js +8 -0
  246. package/dist/krill/modules/add-user.d.ts +20 -0
  247. package/dist/krill/modules/add-user.js +49 -0
  248. package/dist/krill/modules/bootloader-config-alpine.d.ts +14 -0
  249. package/dist/krill/modules/bootloader-config-alpine.js +37 -0
  250. package/dist/krill/modules/bootloader-config-arch.d.ts +14 -0
  251. package/dist/krill/modules/bootloader-config-arch.js +37 -0
  252. package/dist/krill/modules/bootloader-config-debian.d.ts +10 -0
  253. package/dist/krill/modules/bootloader-config-debian.js +50 -0
  254. package/dist/krill/modules/bootloader-config.d.ts +10 -0
  255. package/dist/krill/modules/bootloader-config.js +25 -0
  256. package/dist/krill/modules/bootloader.d.ts +14 -0
  257. package/dist/krill/modules/bootloader.js +30 -0
  258. package/dist/krill/modules/change-password.d.ts +15 -0
  259. package/dist/krill/modules/change-password.js +18 -0
  260. package/dist/krill/modules/del-live-user.d.ts +14 -0
  261. package/dist/krill/modules/del-live-user.js +38 -0
  262. package/dist/krill/modules/fstab.d.ts +14 -0
  263. package/dist/krill/modules/fstab.js +121 -0
  264. package/dist/krill/modules/grubcfg.d.ts +17 -0
  265. package/dist/krill/modules/grubcfg.js +29 -0
  266. package/dist/krill/modules/hostname.d.ts +13 -0
  267. package/dist/krill/modules/hostname.js +50 -0
  268. package/dist/krill/modules/initramfs-cfg.d.ts +14 -0
  269. package/dist/krill/modules/initramfs-cfg.js +25 -0
  270. package/dist/krill/modules/initramfs.d.ts +13 -0
  271. package/dist/krill/modules/initramfs.js +48 -0
  272. package/dist/krill/modules/locale-cfg.d.ts +10 -0
  273. package/dist/krill/modules/locale-cfg.js +61 -0
  274. package/dist/krill/modules/locale.d.ts +13 -0
  275. package/dist/krill/modules/locale.js +48 -0
  276. package/dist/krill/modules/m-keyboard.d.ts +14 -0
  277. package/dist/krill/modules/m-keyboard.js +79 -0
  278. package/dist/krill/modules/m-timezone.d.ts +14 -0
  279. package/dist/krill/modules/m-timezone.js +22 -0
  280. package/dist/krill/modules/machine-id.d.ts +15 -0
  281. package/dist/krill/modules/machine-id.js +30 -0
  282. package/dist/krill/modules/mkfs.d.ts +13 -0
  283. package/dist/krill/modules/mkfs.js +48 -0
  284. package/dist/krill/modules/mount-fs.d.ts +17 -0
  285. package/dist/krill/modules/mount-fs.js +60 -0
  286. package/dist/krill/modules/mount-vfs.d.ts +17 -0
  287. package/dist/krill/modules/mount-vfs.js +40 -0
  288. package/dist/krill/modules/network-cfg.d.ts +19 -0
  289. package/dist/krill/modules/network-cfg.js +64 -0
  290. package/dist/krill/modules/packages.d.ts +14 -0
  291. package/dist/krill/modules/packages.js +111 -0
  292. package/dist/krill/modules/partition.d.ts +20 -0
  293. package/dist/krill/modules/partition.js +324 -0
  294. package/dist/krill/modules/remove-installer-link.d.ts +13 -0
  295. package/dist/krill/modules/remove-installer-link.js +35 -0
  296. package/dist/krill/modules/umount.d.ts +14 -0
  297. package/dist/krill/modules/umount.js +27 -0
  298. package/dist/krill/modules/unpackfs.d.ts +13 -0
  299. package/dist/krill/modules/unpackfs.js +19 -0
  300. package/dist/krill/prepare.d.ts +78 -0
  301. package/dist/krill/prepare.js +626 -0
  302. package/dist/krill/sequence.d.ts +159 -0
  303. package/dist/krill/sequence.js +687 -0
  304. package/dist/lib/get_address.d.ts +8 -0
  305. package/dist/lib/get_address.js +23 -0
  306. package/dist/lib/get_dns.d.ts +8 -0
  307. package/dist/lib/get_dns.js +23 -0
  308. package/dist/lib/get_domain.d.ts +8 -0
  309. package/dist/lib/get_domain.js +23 -0
  310. package/dist/lib/get_gateway.d.ts +8 -0
  311. package/dist/lib/get_gateway.js +23 -0
  312. package/dist/lib/get_hostname.d.ts +8 -0
  313. package/dist/lib/get_hostname.js +23 -0
  314. package/dist/lib/get_netmask.d.ts +8 -0
  315. package/dist/lib/get_netmask.js +23 -0
  316. package/dist/lib/get_password.d.ts +8 -0
  317. package/dist/lib/get_password.js +36 -0
  318. package/dist/lib/get_userfullname.d.ts +8 -0
  319. package/dist/lib/get_userfullname.js +23 -0
  320. package/dist/lib/get_username.d.ts +8 -0
  321. package/dist/lib/get_username.js +23 -0
  322. package/dist/lib/kill_me_softly.d.ts +11 -0
  323. package/dist/lib/kill_me_softly.js +61 -0
  324. package/dist/lib/select_address_type.d.ts +8 -0
  325. package/dist/lib/select_address_type.js +24 -0
  326. package/dist/lib/select_filesystem_type.d.ts +8 -0
  327. package/dist/lib/select_filesystem_type.js +45 -0
  328. package/dist/lib/select_installation_device.d.ts +8 -0
  329. package/dist/lib/select_installation_device.js +30 -0
  330. package/dist/lib/select_installation_mode.d.ts +8 -0
  331. package/dist/lib/select_installation_mode.js +24 -0
  332. package/dist/lib/select_interface.d.ts +8 -0
  333. package/dist/lib/select_interface.js +24 -0
  334. package/dist/lib/select_keyboard_layout.d.ts +11 -0
  335. package/dist/lib/select_keyboard_layout.js +36 -0
  336. package/dist/lib/select_keyboard_model.d.ts +11 -0
  337. package/dist/lib/select_keyboard_model.js +34 -0
  338. package/dist/lib/select_keyboard_option.d.ts +11 -0
  339. package/dist/lib/select_keyboard_option.js +34 -0
  340. package/dist/lib/select_keyboard_variant.d.ts +11 -0
  341. package/dist/lib/select_keyboard_variant.js +35 -0
  342. package/dist/lib/select_languages.d.ts +8 -0
  343. package/dist/lib/select_languages.js +28 -0
  344. package/dist/lib/select_regions.d.ts +8 -0
  345. package/dist/lib/select_regions.js +24 -0
  346. package/dist/lib/select_user_swap_choice.d.ts +8 -0
  347. package/dist/lib/select_user_swap_choice.js +34 -0
  348. package/dist/lib/select_zones.d.ts +8 -0
  349. package/dist/lib/select_zones.js +518 -0
  350. package/dist/lib/utils.d.ts +34 -0
  351. package/dist/lib/utils.js +79 -0
  352. package/manpages/doc/man/eggs.1.gz +0 -0
  353. package/manpages/doc/man/eggs.html +21 -5
  354. package/mkinitfs/README.md +9 -0
  355. package/package.json +4 -4
  356. package/scripts/_eggs +9 -2
  357. package/scripts/eggs.bash +2 -1
  358. package/addons/eggs/ichoice/applications/eggs-ichoice.desktop +0 -23
  359. package/addons/eggs/ichoice/bin/eggs-ichoice.sh +0 -44
  360. package/scripts/love +0 -25
  361. /package/{addons/eggs/adapt/bin/adapt → scripts/adapt.sh} +0 -0
@@ -0,0 +1,703 @@
1
+ /**
2
+ * ./src/classes/pacman.ts
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 { execSync } from 'node:child_process';
9
+ import fs from 'node:fs';
10
+ // _dirname
11
+ import path from 'node:path';
12
+ import shx from 'shelljs';
13
+ import { exec } from '../lib/utils.js';
14
+ import Distro from './distro.js';
15
+ import Alpine from './families/alpine.js';
16
+ import Archlinux from './families/archlinux.js';
17
+ import Debian from './families/debian.js';
18
+ import Fedora from './families/fedora.js';
19
+ import Settings from './settings.js';
20
+ import Utils from './utils.js';
21
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
22
+ const config_file = '/etc/penguins-eggs.d/eggs.yaml';
23
+ const config_tools = '/etc/penguins-eggs.d/tools.yaml';
24
+ /**
25
+ * Utils: general porpouse utils
26
+ * @remarks all the utilities
27
+ */
28
+ export default class Pacman {
29
+ static debs4calamares = ['calamares', 'qml-module-qtquick2', 'qml-module-qtquick-controls'];
30
+ distro = {};
31
+ remix = {};
32
+ /**
33
+ *
34
+ * @param verbose
35
+ */
36
+ static async autocompleteInstall(verbose = false) {
37
+ if (this.distro().familyId === 'debian') {
38
+ if (Pacman.packageIsInstalled('bash-completion')) {
39
+ if (fs.existsSync('/usr/share/bash-completion/completions/')) {
40
+ await exec(`cp ${__dirname}/../../scripts/eggs.bash /usr/share/bash-completion/completions/`);
41
+ }
42
+ else if (fs.existsSync('/etc/bash_completion.d/')) {
43
+ await exec(`cp ${__dirname}/../../scripts/eggs.bash /etc/bash_completion.d/`);
44
+ }
45
+ }
46
+ }
47
+ else if (this.distro().familyId === 'archlinux' && Pacman.packageIsInstalled('bash-completion')) {
48
+ await exec(`cp ${__dirname}/../../scripts/eggs.bash /usr/share/bash-completion/completions/`);
49
+ }
50
+ }
51
+ /**
52
+ * return true if calamares is installed
53
+ */
54
+ static calamaresExists() {
55
+ return this.commandIsInstalled('calamares');
56
+ }
57
+ /**
58
+ *
59
+ */
60
+ static async calamaresInstall(verbose = false) {
61
+ if (this.isInstalledGui()) {
62
+ if (this.distro().familyId === 'debian') {
63
+ await Debian.calamaresInstall(verbose);
64
+ }
65
+ else if (this.distro().familyId === 'fedora') {
66
+ await Fedora.calamaresInstall(verbose);
67
+ }
68
+ else if (this.distro().familyId === 'archlinux') {
69
+ if (this.distro().distroId === 'ManjaroLinux') {
70
+ const cmd = `pacman -Sy --noconfirm calamares`;
71
+ try {
72
+ await exec(cmd, Utils.setEcho(true));
73
+ }
74
+ catch {
75
+ Utils.error(`manjaro: ${cmd}`); // + e.error)
76
+ }
77
+ }
78
+ else {
79
+ await Archlinux.calamaresInstall(verbose);
80
+ }
81
+ }
82
+ else if (this.distro().familyId === 'alpine') {
83
+ await Alpine.calamaresInstall(verbose);
84
+ }
85
+ // remove others calamares links
86
+ await exec('rm -f /usr/share/applications/calamares-eggs-debugging.desktop');
87
+ await exec('rm -f /usr/share/applications/calamares-eggs.desktop');
88
+ await exec('rm -f /usr/share/applications/calamares.desktop');
89
+ }
90
+ }
91
+ /**
92
+ * calamaresPolicies
93
+ */
94
+ static async calamaresPolicies() {
95
+ if (this.distro().familyId === 'debian') {
96
+ await Debian.calamaresPolicies();
97
+ }
98
+ else if (this.distro().familyId === 'fedora') {
99
+ await Fedora.calamaresPolicies();
100
+ }
101
+ else if (this.distro().familyId === 'archlinux') {
102
+ await Archlinux.calamaresPolicies();
103
+ }
104
+ else if (this.distro().familyId === 'alpine') {
105
+ await Alpine.calamaresPolicies();
106
+ }
107
+ }
108
+ /**
109
+ *
110
+ */
111
+ static async calamaresRemove(verbose = true) {
112
+ let retVal = false;
113
+ if (this.distro().familyId === 'debian') {
114
+ retVal = await Debian.calamaresRemove(verbose);
115
+ }
116
+ else if (this.distro().familyId === 'fedora') {
117
+ retVal = await Fedora.calamaresRemove(verbose);
118
+ }
119
+ else if (this.distro().familyId === 'archlinux') {
120
+ retVal = await Archlinux.calamaresRemove(verbose);
121
+ }
122
+ else if (this.distro().familyId === 'alpine') {
123
+ retVal = await Alpine.calamaresRemove(verbose);
124
+ }
125
+ return retVal;
126
+ }
127
+ /**
128
+ *
129
+ * @param cmd
130
+ */
131
+ static commandIsInstalled(cmd) {
132
+ let installed = false;
133
+ // if (shx.exec(`command -V ${cmd} &>/dev/null`).code == 0) {
134
+ // remove output
135
+ if (shx.exec(`command -V ${cmd} >/dev/null 2>&1`).code == 0) {
136
+ installed = true;
137
+ }
138
+ return installed;
139
+ }
140
+ /**
141
+ * Restituisce VERO se i file di configurazione SONO presenti
142
+ */
143
+ static configurationCheck() {
144
+ const confExists = fs.existsSync(config_file);
145
+ return confExists;
146
+ }
147
+ /**
148
+ *
149
+ */
150
+ static async configurationFresh() {
151
+ const config = {};
152
+ config.version = Utils.getPackageVersion();
153
+ config.snapshot_dir = '/home/eggs';
154
+ config.snapshot_prefix = '';
155
+ config.snapshot_excludes = '/etc/penguins-eggs.d/exclude.list';
156
+ config.snapshot_basename = ''; // before default was hostname
157
+ config.user_opt = 'live';
158
+ config.user_opt_passwd = 'evolution';
159
+ config.root_passwd = 'evolution';
160
+ config.theme = 'eggs';
161
+ config.force_installer = true;
162
+ config.make_efi = true;
163
+ config.make_md5sum = false;
164
+ config.make_isohybrid = true;
165
+ config.compression = 'xz';
166
+ config.ssh_pass = false;
167
+ config.timezone = 'Europe/Rome';
168
+ // config.locales_default = '__NOT_USED_MORE'
169
+ // config.locales = ['__NOT_USED_MORE']
170
+ // config.timezone = 'America/New_York'
171
+ // const env = process.env
172
+ // config.locales_default = env.LANG !== undefined ? env.LANG : 'en_US.UTF-8'
173
+ // config.locales = config.locales_default === 'en_US.UTF-8' ? ['en_US.UTF-8'] : [config.locales_default, 'en_US.UTF-8']
174
+ config.pmount_fixed = false;
175
+ if (!this.calamaresExists()) {
176
+ config.force_installer = false;
177
+ console.log('Due the lacks of calamares package set force_installer = false');
178
+ }
179
+ if (!Pacman.isUefi() && Utils.uefiArch() !== 'i386') {
180
+ config.make_efi = false;
181
+ console.log('Due the lacks of grub-efi-' + Utils.uefiArch() + '-bin package set make_efi = false');
182
+ }
183
+ /**
184
+ * Salvo la configurazione di eggs.yaml
185
+ */
186
+ config.machine_id = Utils.machineId();
187
+ config.vmlinuz = Utils.vmlinuz();
188
+ config.initrd_img = Utils.initrdImg();
189
+ const settings = new Settings();
190
+ await settings.save(config);
191
+ }
192
+ /**
193
+ * Creazione del file di configurazione /etc/penguins-eggs
194
+ */
195
+ static async configurationInstall(links = true, verbose = false) {
196
+ const confRoot = '/etc/penguins-eggs.d';
197
+ if (!fs.existsSync(confRoot)) {
198
+ execSync(`mkdir ${confRoot}`);
199
+ }
200
+ if (verbose) {
201
+ console.log('configuration install: ' + confRoot);
202
+ }
203
+ const addons = `${confRoot}/addons`;
204
+ if (fs.existsSync(addons)) {
205
+ execSync(`rm -rf ${addons}`);
206
+ }
207
+ const distros = `${confRoot}/distros`;
208
+ if (fs.existsSync(distros)) {
209
+ execSync(`rm -rf ${distros}`);
210
+ }
211
+ execSync(`mkdir -p ${distros}`);
212
+ /**
213
+ * We use /etc/penguins-eggs.d/init for our init scripts:
214
+ * # unattended.sh -> eggs install --unattended
215
+ * # cuckoo -> eggs cuckoo
216
+ */
217
+ const init = `${confRoot}/init`;
218
+ if (fs.existsSync(init)) {
219
+ execSync(`rm -rf ${init}`);
220
+ }
221
+ execSync(`mkdir -p ${init}`);
222
+ shx.ln('-s', path.resolve(__dirname, '../../addons'), addons);
223
+ shx.cp(path.resolve(__dirname, '../../conf/README.md'), confRoot);
224
+ shx.cp(path.resolve(__dirname, '../../conf/derivatives.yaml'), confRoot);
225
+ shx.cp(path.resolve(__dirname, '../../conf/krill.yaml'), confRoot);
226
+ shx.cp(path.resolve(__dirname, '../../conf/love.yaml'), confRoot);
227
+ shx.cp(path.resolve(__dirname, '../../conf/tools.yaml'), config_tools);
228
+ shx.cp(path.resolve(__dirname, '../../conf/yolk.yaml'), confRoot);
229
+ // init
230
+ shx.cp(path.resolve(__dirname, '../../conf/init/unattended.sh'), '/etc/penguins-eggs.d/init');
231
+ shx.chmod('+x', '/etc/penguins-eggs.d/init/unattended.sh');
232
+ shx.cp(path.resolve(__dirname, '../../conf/init/cuckoo.sh'), '/etc/penguins-eggs.d/init');
233
+ shx.chmod('+x', '/etc/penguins-eggs.d/init/cuckoo.sh');
234
+ // creazione cartella exclude.list.d
235
+ execSync(`mkdir -p /etc/penguins-eggs.d/exclude.list.d`);
236
+ shx.cp(path.resolve(__dirname, '../../conf/exclude.list.d/*'), '/etc/penguins-eggs.d/exclude.list.d');
237
+ await this.configurationFresh();
238
+ }
239
+ /**
240
+ * Ritorna vero se machine-id è uguale
241
+ */
242
+ static async configurationMachineNew(verbose = false) {
243
+ const settings = new Settings();
244
+ await settings.load();
245
+ const result = Utils.machineId() !== settings.config.machine_id;
246
+ if (verbose && result) {
247
+ console.log('configurationMachineNew: True');
248
+ }
249
+ return result;
250
+ }
251
+ /**
252
+ * Rimozione dei file di configurazione
253
+ */
254
+ static async configurationRemove(verbose = true) {
255
+ const echo = Utils.setEcho(verbose);
256
+ if (fs.existsSync('/etc/penguins-eggs.d')) {
257
+ await exec('rm /etc/penguins-eggs.d -rf', echo);
258
+ }
259
+ if (fs.existsSync('/etc/calamares')) {
260
+ await exec('rm /etc/calamares -rf', echo);
261
+ }
262
+ }
263
+ /**
264
+ *
265
+ * @returns
266
+ */
267
+ static distro() {
268
+ return new Distro();
269
+ }
270
+ /**
271
+ * distroTemplateCheck
272
+ */
273
+ static distroTemplateCheck() {
274
+ const { codenameLikeId } = this.distro();
275
+ return fs.existsSync(`/etc/penguins-eggs.d/distros/${codenameLikeId}`);
276
+ }
277
+ /**
278
+ *
279
+ */
280
+ static async distroTemplateInstall(verbose = false) {
281
+ if (verbose) {
282
+ console.log('distroTemplateInstall');
283
+ }
284
+ const echo = Utils.setEcho(verbose);
285
+ const rootPen = Utils.rootPenguin();
286
+ await exec(`mkdir /etc/penguins-eggs.d/distros/${this.distro().codenameLikeId}`);
287
+ /**
288
+ * Debian 10 - Buster: è il master per tutte le distro
289
+ */
290
+ const buster = `${rootPen}/conf/distros/buster`;
291
+ /**
292
+ * Debian 8 jessie: eredita grub, isolinux e locales da buster, contiene krill al posto di calamares
293
+ */
294
+ if (this.distro().codenameLikeId === 'jessie') {
295
+ const dest = '/etc/penguins-eggs.d/distros/jessie';
296
+ await exec(`cp -r ${rootPen}/conf/distros/jessie/krill ${dest}/krill`, echo);
297
+ /**
298
+ * Debian 9 stretch: eredita grub, isolinux e locales da buster, contiene krill al posto di calamares
299
+ */
300
+ }
301
+ else if (this.distro().codenameLikeId === 'stretch') {
302
+ const dest = '/etc/penguins-eggs.d/distros/stretch';
303
+ await exec(`cp -r ${rootPen}/conf/distros/jessie/krill ${dest}/krill`, echo);
304
+ /**
305
+ * Debian 10 buster: eredita tutto da buster
306
+ */
307
+ }
308
+ else if (this.distro().codenameLikeId === 'buster') {
309
+ const dest = '/etc/penguins-eggs.d/distros/buster';
310
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
311
+ /**
312
+ * Debian 11 bullseye: eredita tutto da buster
313
+ */
314
+ }
315
+ else if (this.distro().codenameLikeId === 'bullseye') {
316
+ const dest = '/etc/penguins-eggs.d/distros/bullseye';
317
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
318
+ /**
319
+ * Debian 12 bookworm: eredita tutto da buster
320
+ */
321
+ }
322
+ else if (this.distro().codenameLikeId === 'bookworm') {
323
+ const dest = '/etc/penguins-eggs.d/distros/bookworm';
324
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
325
+ /**
326
+ * Debian 13 trixie: eredita tutto da buster
327
+ */
328
+ }
329
+ else if (this.distro().codenameLikeId === 'trixie') {
330
+ const dest = '/etc/penguins-eggs.d/distros/trixie';
331
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
332
+ /***********************************************************************************
333
+ * Devuan
334
+ **********************************************************************************/
335
+ /**
336
+ * Devuan beowulf: eredita tutto da buster
337
+ */
338
+ }
339
+ else if (this.distro().codenameLikeId === 'beowulf') {
340
+ const dest = '/etc/penguins-eggs.d/distros/beowulf';
341
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
342
+ /**
343
+ * Devuan chimaera: eredita tutto da buster
344
+ */
345
+ }
346
+ else if (this.distro().codenameLikeId === 'chimaera') {
347
+ const dest = '/etc/penguins-eggs.d/distros/chimaera';
348
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
349
+ /**
350
+ * Devuan daedalus: eredita tutto da buster
351
+ */
352
+ }
353
+ else if (this.distro().codenameLikeId === 'daedalus') {
354
+ const dest = '/etc/penguins-eggs.d/distros/daedalus';
355
+ await exec(`cp -r ${buster}/calamares ${dest}/calamares`, echo);
356
+ /***********************************************************************************
357
+ * Ubuntu
358
+ **********************************************************************************/
359
+ /**
360
+ * Ubuntu 10.04 bionic: eredita da bionic, focal grub ed isolinux, da buster i seguenti
361
+ */
362
+ }
363
+ else if (this.distro().codenameLikeId === 'bionic') {
364
+ const dest = '/etc/penguins-eggs.d/distros/bionic';
365
+ const bionic = `${rootPen}/conf/distros/bionic`;
366
+ await exec(`cp -r ${bionic}/* ${dest}`, echo);
367
+ // Poi da buster
368
+ await exec(`cp -r ${buster}/calamares/calamares-modules/cleanup ${dest}/calamares/calamares-modules/cleanup`, echo);
369
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk ${dest}/calamares/calamares-modules/sources-yolk`, echo);
370
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk-undo ${dest}/calamares/calamares-modules/sources-yolk-undo`, echo);
371
+ await exec(`cp -r ${buster}/calamares/modules/packages.yml ${dest}/calamares/modules/packages.yml`, echo);
372
+ await exec(`cp -r ${buster}/calamares/modules/removeuser.yml ${dest}/calamares/modules/removeuser.yml`, echo);
373
+ await exec(`cp -r ${buster}/calamares/modules/unpackfs.yml ${dest}/calamares/modules/unpackfs.yml`, echo);
374
+ await exec(`cp -r ${buster}/calamares/modules/displaymanager.yml ${dest}/calamares/modules/displaymanager.yml`, echo);
375
+ /**
376
+ * Ubuntu focal: eredita da noble e buster
377
+ */
378
+ }
379
+ else if (this.distro().codenameLikeId === 'focal') {
380
+ const dest = '/etc/penguins-eggs.d/distros/focal';
381
+ const noble = `${rootPen}/conf/distros/noble`;
382
+ await exec(`cp -r ${noble}/* ${dest}`, echo);
383
+ // backport per focal e jammy: fstab, mount, users
384
+ await exec(`cp ${noble}/calamares/modules/focal-jammy/* ${dest}/calamares/modules/`, echo);
385
+ await exec(`cp -r ${buster}/calamares/calamares-modules/cleanup ${dest}/calamares/calamares-modules/cleanup`, echo);
386
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk ${dest}/calamares/calamares-modules/sources-yolk`, echo);
387
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk-undo ${dest}/calamares/calamares-modules/sources-yolk-undo`, echo);
388
+ await exec(`cp -r ${buster}/calamares/modules/packages.yml ${dest}/calamares/modules/packages.yml`, echo);
389
+ await exec(`cp -r ${buster}/calamares/modules/removeuser.yml ${dest}/calamares/modules/removeuser.yml`, echo);
390
+ await exec(`cp -r ${buster}/calamares/modules/unpackfs.yml ${dest}/calamares/modules/unpackfs.yml`, echo);
391
+ await exec(`cp -r ${buster}/calamares/modules/displaymanager.yml ${dest}/calamares/modules/displaymanager.yml`, echo);
392
+ /**
393
+ * Ubuntu 22.04 jammy: eredita da noble e buster
394
+ */
395
+ }
396
+ else if (this.distro().codenameLikeId === 'jammy') {
397
+ const dest = '/etc/penguins-eggs.d/distros/jammy';
398
+ const noble = `${rootPen}/conf/distros/noble`;
399
+ await exec(`cp -r ${noble}/* ${dest}`, echo);
400
+ // backport per focal e jammy: fstab, mount, users
401
+ await exec(`cp ${noble}/calamares/modules/focal-jammy/* ${dest}/calamares/modules/`, echo);
402
+ await exec(`cp -r ${buster}/calamares/calamares-modules/cleanup ${dest}/calamares/calamares-modules/cleanup`, echo);
403
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk ${dest}/calamares/calamares-modules/sources-yolk`, echo);
404
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk-undo ${dest}/calamares/calamares-modules/sources-yolk-undo`, echo);
405
+ await exec(`cp -r ${buster}/calamares/modules/packages.yml ${dest}/calamares/modules/packages.yml`, echo);
406
+ await exec(`cp -r ${buster}/calamares/modules/removeuser.yml ${dest}/calamares/modules/removeuser.yml`, echo);
407
+ await exec(`cp -r ${buster}/calamares/modules/unpackfs.yml ${dest}/calamares/modules/unpackfs.yml`, echo);
408
+ await exec(`cp -r ${buster}/calamares/modules/displaymanager.yml ${dest}/calamares/modules/displaymanager.yml`, echo);
409
+ /**
410
+ * Ubuntu noble: e la nuova baseline per ubuntu
411
+ *
412
+ */
413
+ }
414
+ else if (this.distro().codenameLikeId === 'noble') {
415
+ const dest = '/etc/penguins-eggs.d/distros/noble';
416
+ const noble = `${rootPen}/conf/distros/noble`;
417
+ await exec(`cp -r ${noble}/* ${dest}`, echo);
418
+ await exec(`cp -r ${buster}/calamares/calamares-modules/cleanup ${dest}/calamares/calamares-modules/cleanup`, echo);
419
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk ${dest}/calamares/calamares-modules/sources-yolk`, echo);
420
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk-undo ${dest}/calamares/calamares-modules/sources-yolk-undo`, echo);
421
+ await exec(`cp -r ${buster}/calamares/modules/packages.yml ${dest}/calamares/modules/packages.yml`, echo);
422
+ await exec(`cp -r ${buster}/calamares/modules/removeuser.yml ${dest}/calamares/modules/removeuser.yml`, echo);
423
+ await exec(`cp -r ${buster}/calamares/modules/unpackfs.yml ${dest}/calamares/modules/unpackfs.yml`, echo);
424
+ await exec(`cp -r ${buster}/calamares/modules/displaymanager.yml ${dest}/calamares/modules/displaymanager.yml`, echo);
425
+ /**
426
+ * Ubuntu rhino: eredita da noble e buster
427
+ *
428
+ */
429
+ }
430
+ else if (this.distro().codenameLikeId === 'devel') {
431
+ const dest = '/etc/penguins-eggs.d/distros/devel';
432
+ const noble = `${rootPen}/conf/distros/noble`;
433
+ await exec(`cp -r ${noble}/* ${dest}`, echo);
434
+ await exec(`cp -r ${buster}/calamares/calamares-modules/cleanup ${dest}/calamares/calamares-modules/cleanup`, echo);
435
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk ${dest}/calamares/calamares-modules/sources-yolk`, echo);
436
+ await exec(`cp -r ${buster}/calamares/calamares-modules/sources-yolk-undo ${dest}/calamares/calamares-modules/sources-yolk-undo`, echo);
437
+ await exec(`cp -r ${buster}/calamares/modules/packages.yml ${dest}/calamares/modules/packages.yml`, echo);
438
+ await exec(`cp -r ${buster}/calamares/modules/removeuser.yml ${dest}/calamares/modules/removeuser.yml`, echo);
439
+ await exec(`cp -r ${buster}/calamares/modules/unpackfs.yml ${dest}/calamares/modules/unpackfs.yml`, echo);
440
+ await exec(`cp -r ${buster}/calamares/modules/displaymanager.yml ${dest}/calamares/modules/displaymanager.yml`, echo);
441
+ /***********************************************************************************
442
+ * Fedora
443
+ **********************************************************************************/
444
+ /**
445
+ * Fedora 35 ThirtyFive: eredita da ThirtyFive
446
+ */
447
+ }
448
+ else if (this.distro().codenameLikeId === 'thirtyfive') {
449
+ const dest = '/etc/penguins-eggs.d/distros/thirtyfive/';
450
+ const thirtytive = `${rootPen}/conf/distros/thirtyfive/*`;
451
+ await exec(`cp -r ${thirtytive} ${dest}`, echo);
452
+ /***********************************************************************************
453
+ * Arch Linux
454
+ **********************************************************************************/
455
+ /**
456
+ * Endeavour rolling: eredita da rolling
457
+ */
458
+ }
459
+ else if (this.distro().codenameLikeId === 'rolling') {
460
+ const dest = '/etc/penguins-eggs.d/distros/rolling/';
461
+ const rolling = `${rootPen}/conf/distros/rolling/*`;
462
+ await exec(`cp -r ${rolling} ${dest}`, echo);
463
+ /***********************************************************************************
464
+ * Alpine
465
+ **********************************************************************************/
466
+ }
467
+ else if (this.distro().codenameLikeId === 'alpine') {
468
+ // eredita solo da alpine
469
+ const dest = '/etc/penguins-eggs.d/distros/alpine/';
470
+ const alpine = `${rootPen}/conf/distros/alpine/`;
471
+ await exec(`cp -r ${alpine}/calamares ${dest}/calamares`, echo);
472
+ }
473
+ }
474
+ /**
475
+ * Controlla se calamares è installabile
476
+ * @returns
477
+ */
478
+ static isCalamaresAvailable() {
479
+ let result = this.distro().isCalamaresAvailable;
480
+ if (process.arch === 'arm' || process.arch === 'arm64') {
481
+ result = false;
482
+ }
483
+ return result;
484
+ }
485
+ /**
486
+ *
487
+ * @returns true se GUI
488
+ */
489
+ static isInstalledGui() {
490
+ return this.isInstalledXorg() || this.isInstalledWayland();
491
+ }
492
+ /**
493
+ * check if it's installed wayland
494
+ * @returns true if wayland
495
+ */
496
+ static isInstalledWayland() {
497
+ let installed = false;
498
+ if (this.distro().familyId === 'debian') {
499
+ if (Debian.packageIsInstalled('xwayland')) {
500
+ installed = true;
501
+ }
502
+ }
503
+ else if (this.distro().familyId === 'fedora') {
504
+ if (Fedora.packageIsInstalled('xorg-x11-server-Xwayland*')) {
505
+ installed = true;
506
+ }
507
+ }
508
+ else if (this.distro().familyId === 'archlinux') {
509
+ if (Archlinux.packageIsInstalled('xwayland')) {
510
+ installed = true;
511
+ }
512
+ }
513
+ else if (this.distro().familyId === 'alpine' && Alpine.packageIsInstalled('xwayland*')) {
514
+ installed = true;
515
+ }
516
+ return installed;
517
+ }
518
+ /**
519
+ * check if it's installed xorg
520
+ * @returns
521
+ */
522
+ static isInstalledXorg() {
523
+ let installed = false;
524
+ if (this.distro().familyId === 'debian') {
525
+ if (Debian.packageIsInstalled('xserver-xorg-core')) {
526
+ installed = true;
527
+ }
528
+ }
529
+ else if (this.distro().familyId === 'fedora') {
530
+ if (Fedora.packageIsInstalled('xorg-x11-server-Xorg.x86_64')) {
531
+ installed = true;
532
+ }
533
+ }
534
+ else if (this.distro().familyId === 'archlinux') {
535
+ if (Archlinux.packageIsInstalled('xorg-server-common')) {
536
+ installed = true;
537
+ }
538
+ }
539
+ else if (this.distro().familyId === 'alpine' && Alpine.packageIsInstalled('xorg-server')) {
540
+ installed = true;
541
+ }
542
+ return installed;
543
+ }
544
+ /**
545
+ * Check if the system is just CLI
546
+ */
547
+ static isRunningCli() {
548
+ return !this.isRunningGui();
549
+ }
550
+ /**
551
+ * Check if the system is GUI able
552
+ */
553
+ static isRunningGui() {
554
+ return this.isRunningXorg() || this.isRunningWayland();
555
+ }
556
+ /**
557
+ * Constrolla se è operante wayland
558
+ */
559
+ static isRunningWayland() {
560
+ return process.env.XDG_SESSION_TYPE === 'wayland';
561
+ }
562
+ /**
563
+ * controlla se è operante xserver-xorg-core
564
+ */
565
+ static isRunningXorg() {
566
+ return process.env.XDG_SESSION_TYPE === 'x11';
567
+ }
568
+ /**
569
+ * Check se la macchina ha grub adatto ad efi
570
+ * Forse conviene spostarlo in pacman
571
+ */
572
+ static isUefi() {
573
+ let isUefi = false;
574
+ if (this.distro().familyId === 'debian') {
575
+ if (Utils.uefiArch() !== 'i386' && this.packageIsInstalled('grub-efi-' + Utils.uefiArch() + '-bin')) {
576
+ isUefi = true;
577
+ }
578
+ }
579
+ else if (Pacman.distro().familyId === 'fedora') {
580
+ isUefi = true;
581
+ }
582
+ else if (Pacman.distro().familyId === 'archlinux') {
583
+ isUefi = true;
584
+ }
585
+ else if (Pacman.distro().familyId === 'alpine') {
586
+ isUefi = true;
587
+ }
588
+ return isUefi;
589
+ }
590
+ /**
591
+ * Installa manPage
592
+ */
593
+ static async manPageInstall(verbose = false) {
594
+ const manPageSrc = path.resolve(__dirname, '../../manpages/doc/man/eggs.roll.gz');
595
+ if (fs.existsSync(manPageSrc)) {
596
+ const man1Dir = '/usr/share/man/man1/';
597
+ if (!fs.existsSync(man1Dir)) {
598
+ exec(`mkdir ${man1Dir} -p`);
599
+ }
600
+ const manPageDest = man1Dir + 'eggs.1.gz';
601
+ exec(`cp ${manPageSrc} ${manPageDest}`);
602
+ if (shx.exec('which mandb', { silent: true }).stdout.trim() !== '') {
603
+ await exec('mandb > /dev/null');
604
+ if (verbose) {
605
+ console.log('manPage eggs installed...');
606
+ }
607
+ }
608
+ }
609
+ }
610
+ /**
611
+ * restuisce VERO se il pacchetto è installato
612
+ * @param debPackage
613
+ */
614
+ static async packageAptAvailable(packageName) {
615
+ let available = false;
616
+ if (this.distro().familyId === 'debian') {
617
+ available = Debian.packageIsInstalled(packageName);
618
+ }
619
+ return available;
620
+ }
621
+ /**
622
+ *
623
+ * @param debPackage
624
+ * @returns
625
+ */
626
+ static async packageAptLast(debPackage) {
627
+ let version = '';
628
+ if (this.distro().familyId === 'debian') {
629
+ version = await Debian.packageAptLast(debPackage);
630
+ }
631
+ return version;
632
+ }
633
+ /**
634
+ * Install the package packageName
635
+ * @param packageName {string} Pacchetto Debian da installare
636
+ * @returns {boolean} True if success
637
+ */
638
+ static async packageInstall(packageName) {
639
+ let retVal = false;
640
+ if (this.distro().familyId === 'debian') {
641
+ retVal = await Debian.packageInstall(packageName);
642
+ }
643
+ else if (this.distro().familyId === 'archlinux') {
644
+ retVal = await Archlinux.packageInstall(packageName);
645
+ }
646
+ else if (this.distro().familyId === 'fedora') {
647
+ retVal = await Fedora.packageInstall(packageName);
648
+ }
649
+ else if (this.distro().familyId === 'alpine') {
650
+ retVal = await Alpine.packageInstall(packageName);
651
+ }
652
+ return retVal;
653
+ }
654
+ /**
655
+ * restuisce VERO se il pacchetto è installato
656
+ * @param debPackage
657
+ */
658
+ static packageIsInstalled(packageName) {
659
+ let installed = false;
660
+ if (this.distro().familyId === 'debian') {
661
+ installed = Debian.packageIsInstalled(packageName);
662
+ }
663
+ else if (this.distro().familyId === 'fedora') {
664
+ installed = Fedora.packageIsInstalled(packageName);
665
+ }
666
+ else if (this.distro().familyId === 'archlinux') {
667
+ installed = Archlinux.packageIsInstalled(packageName);
668
+ }
669
+ else if (this.distro().familyId === 'alpine') {
670
+ installed = Alpine.packageIsInstalled(packageName);
671
+ }
672
+ return installed;
673
+ }
674
+ static async packageNpmLast(packageNpm = 'penguins-eggs') {
675
+ return shx.exec('npm show ' + packageNpm + ' version', { silent: true }).stdout.trim();
676
+ }
677
+ /**
678
+ *
679
+ * @returns grub
680
+ */
681
+ static whichGrubIsInstalled() {
682
+ let grubInstalled = '';
683
+ if (this.distro().familyId === 'debian') {
684
+ if (this.packageIsInstalled('grub-common')) {
685
+ grubInstalled = 'grub';
686
+ }
687
+ }
688
+ else if (this.distro().familyId === 'fedora') {
689
+ if (this.packageIsInstalled('grub2-common.noarch')) {
690
+ grubInstalled = 'grub2';
691
+ }
692
+ }
693
+ else if (this.distro().familyId === 'archlinux') {
694
+ if (this.packageIsInstalled('grub')) {
695
+ grubInstalled = 'grub';
696
+ }
697
+ }
698
+ else if (this.distro().familyId === 'alpine') {
699
+ grubInstalled = 'grub';
700
+ }
701
+ return grubInstalled;
702
+ }
703
+ }