penguins-eggs 10.0.28 → 10.0.31

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 (359) 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 +88 -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 +16 -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 +81 -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 +91 -0
  276. package/dist/krill/modules/m-keyboard.d.ts +14 -0
  277. package/dist/krill/modules/m-keyboard.js +70 -0
  278. package/dist/krill/modules/machine-id.d.ts +15 -0
  279. package/dist/krill/modules/machine-id.js +30 -0
  280. package/dist/krill/modules/mkfs.d.ts +13 -0
  281. package/dist/krill/modules/mkfs.js +48 -0
  282. package/dist/krill/modules/mount-fs.d.ts +17 -0
  283. package/dist/krill/modules/mount-fs.js +60 -0
  284. package/dist/krill/modules/mount-vfs.d.ts +17 -0
  285. package/dist/krill/modules/mount-vfs.js +40 -0
  286. package/dist/krill/modules/network-cfg.d.ts +19 -0
  287. package/dist/krill/modules/network-cfg.js +64 -0
  288. package/dist/krill/modules/packages.d.ts +14 -0
  289. package/dist/krill/modules/packages.js +111 -0
  290. package/dist/krill/modules/partition.d.ts +20 -0
  291. package/dist/krill/modules/partition.js +324 -0
  292. package/dist/krill/modules/remove-installer-link.d.ts +13 -0
  293. package/dist/krill/modules/remove-installer-link.js +35 -0
  294. package/dist/krill/modules/umount.d.ts +14 -0
  295. package/dist/krill/modules/umount.js +27 -0
  296. package/dist/krill/modules/unpackfs.d.ts +13 -0
  297. package/dist/krill/modules/unpackfs.js +19 -0
  298. package/dist/krill/prepare.d.ts +78 -0
  299. package/dist/krill/prepare.js +624 -0
  300. package/dist/krill/sequence.d.ts +157 -0
  301. package/dist/krill/sequence.js +685 -0
  302. package/dist/lib/get_address.d.ts +8 -0
  303. package/dist/lib/get_address.js +23 -0
  304. package/dist/lib/get_dns.d.ts +8 -0
  305. package/dist/lib/get_dns.js +23 -0
  306. package/dist/lib/get_domain.d.ts +8 -0
  307. package/dist/lib/get_domain.js +23 -0
  308. package/dist/lib/get_gateway.d.ts +8 -0
  309. package/dist/lib/get_gateway.js +23 -0
  310. package/dist/lib/get_hostname.d.ts +8 -0
  311. package/dist/lib/get_hostname.js +23 -0
  312. package/dist/lib/get_netmask.d.ts +8 -0
  313. package/dist/lib/get_netmask.js +23 -0
  314. package/dist/lib/get_password.d.ts +8 -0
  315. package/dist/lib/get_password.js +36 -0
  316. package/dist/lib/get_userfullname.d.ts +8 -0
  317. package/dist/lib/get_userfullname.js +23 -0
  318. package/dist/lib/get_username.d.ts +8 -0
  319. package/dist/lib/get_username.js +23 -0
  320. package/dist/lib/kill_me_softly.d.ts +11 -0
  321. package/dist/lib/kill_me_softly.js +61 -0
  322. package/dist/lib/select_address_type.d.ts +8 -0
  323. package/dist/lib/select_address_type.js +24 -0
  324. package/dist/lib/select_filesystem_type.d.ts +8 -0
  325. package/dist/lib/select_filesystem_type.js +46 -0
  326. package/dist/lib/select_installation_device.d.ts +8 -0
  327. package/dist/lib/select_installation_device.js +30 -0
  328. package/dist/lib/select_installation_mode.d.ts +8 -0
  329. package/dist/lib/select_installation_mode.js +24 -0
  330. package/dist/lib/select_interface.d.ts +8 -0
  331. package/dist/lib/select_interface.js +24 -0
  332. package/dist/lib/select_keyboard_layout.d.ts +11 -0
  333. package/dist/lib/select_keyboard_layout.js +36 -0
  334. package/dist/lib/select_keyboard_model.d.ts +11 -0
  335. package/dist/lib/select_keyboard_model.js +34 -0
  336. package/dist/lib/select_keyboard_option.d.ts +11 -0
  337. package/dist/lib/select_keyboard_option.js +34 -0
  338. package/dist/lib/select_keyboard_variant.d.ts +11 -0
  339. package/dist/lib/select_keyboard_variant.js +35 -0
  340. package/dist/lib/select_languages.d.ts +8 -0
  341. package/dist/lib/select_languages.js +28 -0
  342. package/dist/lib/select_regions.d.ts +8 -0
  343. package/dist/lib/select_regions.js +24 -0
  344. package/dist/lib/select_user_swap_choice.d.ts +8 -0
  345. package/dist/lib/select_user_swap_choice.js +34 -0
  346. package/dist/lib/select_zones.d.ts +8 -0
  347. package/dist/lib/select_zones.js +518 -0
  348. package/dist/lib/utils.d.ts +34 -0
  349. package/dist/lib/utils.js +79 -0
  350. package/manpages/doc/man/eggs.1.gz +0 -0
  351. package/manpages/doc/man/eggs.html +4 -588
  352. package/mkinitfs/README.md +9 -0
  353. package/package.json +4 -4
  354. package/scripts/_eggs +9 -2
  355. package/scripts/eggs.bash +2 -1
  356. package/addons/eggs/ichoice/applications/eggs-ichoice.desktop +0 -23
  357. package/addons/eggs/ichoice/bin/eggs-ichoice.sh +0 -44
  358. package/scripts/love +0 -25
  359. /package/{addons/eggs/adapt/bin/adapt → scripts/adapt.sh} +0 -0
@@ -0,0 +1,230 @@
1
+ /**
2
+ * ./src/lib/cli-autologin.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 chalk from 'chalk';
9
+ import { execSync } from 'node:child_process';
10
+ import fs from 'node:fs';
11
+ import path from 'node:path';
12
+ import shx from 'shelljs';
13
+ // libraries
14
+ import { exec } from '../lib/utils.js';
15
+ import Pacman from './pacman.js';
16
+ import Utils from './utils.js';
17
+ const startMessage = 'eggs-start-message';
18
+ const stopMessage = 'eggs-stop-message';
19
+ /*
20
+ * Comando per avviare ubiquity:
21
+ * sudo --preserve-env DBUS_SESSION_BUS_ADDRESS, XDG_RUNTIME sh -c 'calamares'
22
+ */
23
+ /**
24
+ * CliAutologin
25
+ */
26
+ export default class CliAutologin {
27
+ /**
28
+ * add
29
+ * @param distro
30
+ * @param version
31
+ * @param user
32
+ * @param userPasswd
33
+ * @param rootPasswd
34
+ * @param chroot
35
+ */
36
+ async add(distro, version, user, userPasswd, rootPasswd, chroot = '/') {
37
+ if (Utils.isSystemd()) {
38
+ const fileOverride = `${chroot}/etc/systemd/system/getty@.service.d/override.conf`;
39
+ const dirOverride = path.dirname(fileOverride);
40
+ if (fs.existsSync(dirOverride)) {
41
+ shx.exec(`rm ${dirOverride} -rf`);
42
+ }
43
+ shx.exec(`mkdir ${dirOverride}`);
44
+ let content = '';
45
+ content += '[Service]' + '\n';
46
+ content += 'ExecStart=' + '\n';
47
+ content += 'ExecStart=-/sbin/agetty --noclear --autologin ' + user + ' %I $TERM' + '\n';
48
+ fs.writeFileSync(fileOverride, content);
49
+ shx.exec(`chmod +x ${fileOverride}`);
50
+ await this.addIssue(distro, version, user, userPasswd, rootPasswd, chroot);
51
+ await this.addMotd(distro, version, user, userPasswd, rootPasswd, chroot);
52
+ }
53
+ else if (Utils.isOpenRc()) {
54
+ const inittab = chroot + '/etc/inittab';
55
+ let content = '';
56
+ const search = `tty1::respawn:/sbin/getty 38400 tty1`;
57
+ const replace = `tty1::respawn:/sbin/getty -L 38400 tty1 -n -l /bin/autologin`;
58
+ const lines = fs.readFileSync(inittab, 'utf8').split('\n');
59
+ for (let i = 0; i < lines.length; i++) {
60
+ if (lines[i].includes(search)) {
61
+ lines[i] = replace;
62
+ }
63
+ content += lines[i] + '\n';
64
+ }
65
+ fs.writeFileSync(inittab, content, 'utf-8');
66
+ // create /bin/autologin
67
+ const autologin = chroot + '/bin/autologin';
68
+ content = '#!/bin/sh' + '\n';
69
+ content += `/bin/login -f ${user}` + '\n';
70
+ fs.writeFileSync(autologin, content, 'utf-8');
71
+ execSync(`chmod +x ${autologin}`);
72
+ await this.addIssue(distro, version, user, userPasswd, rootPasswd, chroot);
73
+ await this.addMotd(distro, version, user, userPasswd, rootPasswd, chroot);
74
+ }
75
+ else if (Utils.isSysvinit()) {
76
+ const inittab = chroot + '/etc/inittab';
77
+ const search = '1:2345:respawn:/sbin/getty';
78
+ const replace = `1:2345:respawn:/sbin/getty --autologin ${user} 38400 tty1`;
79
+ let content = '';
80
+ const lines = fs.readFileSync(inittab, 'utf8').split('\n');
81
+ for (let i = 0; i < lines.length; i++) {
82
+ if (lines[i].includes(search)) {
83
+ lines[i] = replace;
84
+ }
85
+ content += lines[i] + '\n';
86
+ }
87
+ fs.writeFileSync(inittab, content, 'utf-8');
88
+ await this.addIssue(distro, version, user, userPasswd, rootPasswd, chroot);
89
+ await this.addMotd(distro, version, user, userPasswd, rootPasswd, chroot);
90
+ }
91
+ }
92
+ /**
93
+ *
94
+ * @param distro
95
+ * @param version
96
+ * @param user
97
+ * @param userPasswd
98
+ * @param rootPasswd
99
+ * @param chroot
100
+ */
101
+ async addIssue(distro, version, user, userPasswd, rootPasswd, chroot = '/') {
102
+ const fileIssue = `${chroot}/etc/issue`;
103
+ this.msgRemove(fileIssue);
104
+ const eggsIssue = fs.readFileSync(fileIssue, 'utf8');
105
+ // eggsIssue += startMessage + '\n'
106
+ // eggsIssue += `This is a ${distro}/${version} system created by Penguins' eggs.\n`
107
+ // eggsIssue += 'You can login with user: ' + chalk.bold(user) + ' and password: ' + chalk.bold(userPasswd) + ', root password: ' + chalk.bold(rootPasswd) + '\n'
108
+ // eggsIssue += stopMessage + '\n'
109
+ fs.writeFileSync(fileIssue, eggsIssue);
110
+ }
111
+ /**
112
+ *
113
+ * @param distro
114
+ * @param version
115
+ * @param user
116
+ * @param userPasswd
117
+ * @param rootPasswd
118
+ * @param chroot
119
+ */
120
+ async addMotd(distro, version, user, userPasswd, rootPasswd, chroot = '/') {
121
+ const fileMotd = `${chroot}/etc/motd`;
122
+ let installer = 'sudo eggs install';
123
+ if (Pacman.calamaresExists()) {
124
+ if (Pacman.packageIsInstalled('plasma-desktop')) {
125
+ installer = 'startplasma-wayland to run GUI and launch calamares';
126
+ }
127
+ else if (Pacman.packageIsInstalled('xfce4')) {
128
+ installer = 'startxfce4 to run GUI and launch calamares installer';
129
+ }
130
+ }
131
+ if (!fs.existsSync(fileMotd)) {
132
+ await exec(`touch ${fileMotd}`);
133
+ }
134
+ this.msgRemove(fileMotd);
135
+ let eggsMotd = fs.readFileSync(fileMotd, 'utf8');
136
+ eggsMotd += startMessage + '\n';
137
+ eggsMotd += Utils.flag() + '\n';
138
+ eggsMotd += 'You are logged as: ' + chalk.bold(user) + ' your password is: ' + chalk.bold(userPasswd) + ', root password: ' + chalk.bold(rootPasswd) + '\n\n';
139
+ eggsMotd += 'install : ' + chalk.bold(installer) + '\n';
140
+ eggsMotd += ' unattended : ' + chalk.bold('sudo eggs install --unattended # us configuration') + '\n';
141
+ eggsMotd += ' chroot : ' + chalk.bold('sudo eggs install --chroot # chroot on installed before to end') + '\n';
142
+ eggsMotd += 'PXE server : ' + chalk.bold('sudo eggs cuckoo') + '\n';
143
+ eggsMotd += '(*) to get your custom unattended configuration: fork https://github.com/pieroproietti/penguins-wardrobe' + '\n';
144
+ eggsMotd += ' create your configuration in /config and ask for a Pull Request' + '\n';
145
+ eggsMotd += stopMessage + '\n';
146
+ fs.writeFileSync(fileMotd, eggsMotd);
147
+ }
148
+ /**
149
+ * remove
150
+ * @param chroot
151
+ */
152
+ async remove(chroot = '/') {
153
+ if (Utils.isSystemd()) {
154
+ /**
155
+ * Systemd
156
+ */
157
+ const fileOverride = `${chroot}/etc/systemd/system/getty@.service.d/override.conf`;
158
+ const dirOverride = path.dirname(fileOverride);
159
+ if (fs.existsSync(dirOverride)) {
160
+ shx.exec(`rm ${dirOverride} -rf`);
161
+ }
162
+ // shx.exec(`systemctl revert getty@.service`)
163
+ this.msgRemove(`${chroot}/etc/motd`);
164
+ this.msgRemove(`${chroot}/etc/issue`);
165
+ }
166
+ else if (Utils.isOpenRc()) {
167
+ /**
168
+ * openrc
169
+ */
170
+ const inittab = chroot + '/etc/inittab';
171
+ const search = 'autologin';
172
+ const replace = `tty1::respawn:/sbin/getty 38400 tty1`;
173
+ let content = '';
174
+ const lines = fs.readFileSync(inittab, 'utf8').split('\n');
175
+ for (let i = 0; i < lines.length; i++) {
176
+ if (lines[i].includes(search)) {
177
+ lines[i] = replace;
178
+ }
179
+ content += lines[i] + '\n';
180
+ }
181
+ fs.writeFileSync(inittab, content, 'utf-8');
182
+ this.msgRemove(`${chroot}/etc/motd`);
183
+ this.msgRemove(`${chroot}/etc/issue`);
184
+ const autologin = `${chroot}/bin/autologin`;
185
+ execSync(`rm -f ${autologin}`);
186
+ }
187
+ else if (Utils.isSysvinit()) {
188
+ /**
189
+ * sysvinit
190
+ */
191
+ const inittab = chroot + '/etc/inittab';
192
+ const search = '--autologin';
193
+ const replace = '1:2345:respawn:/sbin/getty 38400 tty1 ';
194
+ let content = '';
195
+ const lines = fs.readFileSync(inittab, 'utf8').split('\n');
196
+ for (let i = 0; i < lines.length; i++) {
197
+ if (lines[i].includes(search)) {
198
+ lines[i] = replace;
199
+ }
200
+ content += lines[i] + '\n';
201
+ }
202
+ fs.writeFileSync(inittab, content, 'utf-8');
203
+ this.msgRemove(`${chroot}/etc/motd`);
204
+ this.msgRemove(`${chroot}/etc/issue`);
205
+ } // to add: openrc and runit for Devuan
206
+ }
207
+ /**
208
+ *
209
+ * @param path
210
+ */
211
+ async msgRemove(path) {
212
+ if (fs.existsSync(path)) {
213
+ const rows = fs.readFileSync(path, 'utf8').split('\n');
214
+ let cleaned = '';
215
+ let remove = false;
216
+ for (const row of rows) {
217
+ if (row.includes(startMessage)) {
218
+ remove = true;
219
+ }
220
+ if (!remove && row !== '') {
221
+ cleaned += row + '\n';
222
+ }
223
+ if (row.includes(stopMessage)) {
224
+ remove = false;
225
+ }
226
+ }
227
+ fs.writeFileSync(path, cleaned, 'utf-8');
228
+ }
229
+ }
230
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * ./src/classes/compressors.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
+ export default class Compressors {
9
+ dest: string;
10
+ isEnabled: {
11
+ error: boolean;
12
+ gzip: boolean;
13
+ lz4: boolean;
14
+ lzma: boolean;
15
+ lzo: boolean;
16
+ xz: boolean;
17
+ zstd: boolean;
18
+ };
19
+ source: string;
20
+ /**
21
+ * fast compression
22
+ * @returns
23
+ */
24
+ fast(): string;
25
+ /**
26
+ * max
27
+ * @returns
28
+ */
29
+ max(): string;
30
+ pendrive(level?: string): string;
31
+ /**
32
+ * populate
33
+ */
34
+ populate(): Promise<void>;
35
+ /**
36
+ * standard
37
+ * @returns
38
+ */
39
+ standard(): string;
40
+ /**
41
+ * check mksquashfs exists
42
+ * @param compressor
43
+ * @returns
44
+ */
45
+ private check;
46
+ /**
47
+ * prepareCheck
48
+ */
49
+ private prepareCheck;
50
+ /**
51
+ * removeCheck
52
+ */
53
+ private removeCheck;
54
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * ./src/classes/compressors.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 shx from 'shelljs';
9
+ export default class Compressors {
10
+ dest = '/tmp/eggs-mksquash-dest';
11
+ isEnabled = {
12
+ error: false,
13
+ gzip: true,
14
+ lz4: false,
15
+ lzma: false,
16
+ lzo: false,
17
+ xz: false,
18
+ zstd: false
19
+ };
20
+ source = '/tmp/eggs-mksquash-test';
21
+ /**
22
+ * fast compression
23
+ * @returns
24
+ */
25
+ fast() {
26
+ let comp = 'gzip';
27
+ if (this.isEnabled.zstd) {
28
+ comp = 'zstd -b 1M -Xcompression-level 3';
29
+ }
30
+ else if (this.isEnabled.lz4) {
31
+ comp = 'lz4';
32
+ }
33
+ return comp;
34
+ }
35
+ /**
36
+ * max
37
+ * @returns
38
+ */
39
+ max() {
40
+ let filter = 'x86';
41
+ if (process.arch === 'arm64') {
42
+ filter = 'arm';
43
+ }
44
+ const options = '-b 1M -no-duplicates -no-recovery -always-use-fragments';
45
+ if (process.arch === 'ia32') {
46
+ // options = '-b 1M'
47
+ }
48
+ const comp = `xz -Xbcj ${filter} ${options}`;
49
+ return comp;
50
+ }
51
+ pendrive(level = '15') {
52
+ let comp = 'gzip';
53
+ if (this.isEnabled.zstd) {
54
+ comp = `zstd -b 1M -Xcompression-level ${level}`;
55
+ }
56
+ else if (this.isEnabled.lz4) {
57
+ comp = 'lz4';
58
+ }
59
+ return comp;
60
+ }
61
+ /**
62
+ * populate
63
+ */
64
+ async populate() {
65
+ await this.prepareCheck();
66
+ this.isEnabled.error = await this.check('error');
67
+ this.isEnabled.lzma = await this.check('lzma');
68
+ this.isEnabled.lzo = await this.check('lzo');
69
+ this.isEnabled.lz4 = await this.check('lz4');
70
+ this.isEnabled.xz = await this.check('xz');
71
+ this.isEnabled.zstd = await this.check('zstd');
72
+ await this.removeCheck();
73
+ }
74
+ /**
75
+ * standard
76
+ * @returns
77
+ */
78
+ standard() {
79
+ const comp = 'xz -b 1M';
80
+ return comp;
81
+ }
82
+ /**
83
+ * check mksquashfs exists
84
+ * @param compressor
85
+ * @returns
86
+ */
87
+ async check(compressor) {
88
+ let result = false;
89
+ const { stderr } = shx.exec('mksquashfs ' + this.source + ' ' + this.dest + ' -comp ' + compressor + ' -ef ' + this.dest, { silent: true });
90
+ if (stderr === '') {
91
+ result = true;
92
+ }
93
+ return result;
94
+ }
95
+ /**
96
+ * prepareCheck
97
+ */
98
+ async prepareCheck() {
99
+ shx.exec('rm -rf ' + this.source, { silent: true });
100
+ shx.exec('mkdir ' + this.source, { silent: true });
101
+ }
102
+ /**
103
+ * removeCheck
104
+ */
105
+ async removeCheck() {
106
+ shx.exec('rm -rf ' + this.source, { silent: true });
107
+ shx.exec('rm -f ' + this.dest, { silent: true });
108
+ }
109
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ./src/classes/daddy.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 Settings from '../classes/settings.js';
9
+ import { IEggsConfig } from '../interfaces/i-eggs-config.js';
10
+ export default class Daddy {
11
+ settings: Settings;
12
+ /**
13
+ * editConfif
14
+ * @param c
15
+ * @returns
16
+ */
17
+ editConfig(c: IEggsConfig): Promise<string>;
18
+ /**
19
+ *
20
+ * @param reset
21
+ * @param isCustom
22
+ * @param fileCustom
23
+ * @param verbose
24
+ */
25
+ helpMe(reset?: boolean, isCustom?: boolean, fileCustom?: string, verbose?: boolean): Promise<void>;
26
+ }
@@ -0,0 +1,161 @@
1
+ /**
2
+ * ./src/classes/daddy.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 chalk from 'chalk';
9
+ import inquirer from 'inquirer';
10
+ import yaml from 'js-yaml';
11
+ import fs from 'node:fs';
12
+ // _dirname
13
+ import path from 'node:path';
14
+ // We need to remove .js extension from import
15
+ import Pacman from '../classes/pacman.js';
16
+ import Settings from '../classes/settings.js';
17
+ import Utils from '../classes/utils.js';
18
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
19
+ export default class Daddy {
20
+ settings = {};
21
+ /**
22
+ * editConfif
23
+ * @param c
24
+ * @returns
25
+ */
26
+ async editConfig(c) {
27
+ // Utils.titles('dad')
28
+ console.log(chalk.cyan('Edit and save Live system parameters'));
29
+ console.log();
30
+ let compressionOpt = 0;
31
+ if (c.compression === 'xz') {
32
+ compressionOpt = 1;
33
+ }
34
+ else if (c.compression === 'xz -Xbcj x86') {
35
+ compressionOpt = 2;
36
+ }
37
+ if (c.snapshot_prefix === '') {
38
+ c.snapshot_prefix = Utils.snapshotPrefix(this.settings.distro.distroId, this.settings.distro.codenameId);
39
+ }
40
+ return new Promise((resolve) => {
41
+ const questions = [
42
+ {
43
+ default: c.snapshot_prefix,
44
+ message: 'LiveCD iso prefix: ',
45
+ name: 'snapshot_prefix',
46
+ type: 'input'
47
+ },
48
+ {
49
+ default: c.snapshot_basename,
50
+ message: 'LiveCD iso basename: ',
51
+ name: 'snapshot_basename',
52
+ type: 'input'
53
+ },
54
+ {
55
+ default: c.user_opt,
56
+ message: 'LiveCD user:',
57
+ name: 'user_opt',
58
+ type: 'input'
59
+ },
60
+ {
61
+ default: c.user_opt_passwd,
62
+ message: 'LiveCD user password: ',
63
+ name: 'user_opt_passwd',
64
+ type: 'input'
65
+ },
66
+ {
67
+ default: c.root_passwd,
68
+ message: 'LiveCD root password: ',
69
+ name: 'root_passwd',
70
+ type: 'input'
71
+ },
72
+ {
73
+ choices: ['fast', 'max'],
74
+ default: compressionOpt,
75
+ message: 'LiveCD compression: ',
76
+ name: 'compression',
77
+ type: 'list'
78
+ }
79
+ ];
80
+ inquirer.prompt(questions).then((options) => {
81
+ resolve(JSON.stringify(options));
82
+ });
83
+ });
84
+ }
85
+ /**
86
+ *
87
+ * @param reset
88
+ * @param isCustom
89
+ * @param fileCustom
90
+ * @param verbose
91
+ */
92
+ async helpMe(reset = false, isCustom = false, fileCustom = '', verbose = false) {
93
+ if (isCustom) {
94
+ console.log('using custom file:', fileCustom);
95
+ }
96
+ // Controllo configurazione
97
+ if (!Pacman.configurationCheck()) {
98
+ console.log('- creating configuration dir...');
99
+ await Pacman.configurationInstall(verbose);
100
+ }
101
+ // Templates
102
+ if (!Pacman.distroTemplateCheck()) {
103
+ console.log('- distro template install...');
104
+ await Pacman.distroTemplateInstall(verbose);
105
+ }
106
+ // show and edit configuration
107
+ this.settings = new Settings();
108
+ let config = {};
109
+ let jsonConf = '';
110
+ if (await this.settings.load()) {
111
+ config = this.settings.config;
112
+ config.compression = 'fast';
113
+ if (reset || isCustom) {
114
+ if (config.snapshot_prefix === '') {
115
+ config.snapshot_prefix = Utils.snapshotPrefix(this.settings.distro.distroId, this.settings.distro.codenameId);
116
+ }
117
+ jsonConf = JSON.stringify(config);
118
+ }
119
+ else {
120
+ jsonConf = await this.editConfig(config);
121
+ }
122
+ // Custom configuration
123
+ if (isCustom) {
124
+ const conf = fs.readFileSync(fileCustom, 'utf8');
125
+ const confCustom = yaml.load(conf);
126
+ config.snapshot_basename = confCustom.snapshot_basename;
127
+ config.snapshot_prefix = confCustom.snapshot_prefix;
128
+ config.user_opt = confCustom.user_opt;
129
+ config.user_opt_passwd = confCustom.user_opt_passwd;
130
+ config.root_passwd = confCustom.root_passwd;
131
+ config.theme = confCustom.theme;
132
+ jsonConf = JSON.stringify(config);
133
+ }
134
+ // Save new configuration
135
+ const confNew = JSON.parse(jsonConf);
136
+ config.snapshot_basename = confNew.snapshot_basename;
137
+ config.snapshot_prefix = confNew.snapshot_prefix;
138
+ config.user_opt = confNew.user_opt;
139
+ config.user_opt_passwd = confNew.user_opt_passwd;
140
+ config.root_passwd = confNew.root_passwd;
141
+ config.theme = confNew.theme;
142
+ await this.settings.save(config);
143
+ }
144
+ console.log();
145
+ console.log(chalk.cyan('Your configuration was saved on: /etc/penguins-eggs.d'));
146
+ console.log();
147
+ console.log(chalk.cyan(`You can create a clean ISO with: `) + chalk.white(`sudo eggs produce`));
148
+ console.log(chalk.cyan(`or a full personal clone: `) + chalk.white(`sudo eggs produce --clone`));
149
+ console.log();
150
+ console.log(chalk.cyan(`If you don't have enough space to remaster, you can mount`));
151
+ console.log(chalk.cyan(`some remote or local space. Follow the samples:`));
152
+ console.log(chalk.cyan(`- first, create an hidden mountpoint under the nest:`));
153
+ console.log(chalk.white(`sudo mkdir /home/eggs/.mnt -p`));
154
+ console.log(chalk.cyan(`- then, mount remote space:`));
155
+ console.log(chalk.white(`sudo sshfs -o allow_other root@192.168.1.2:/zfs/iso /home/eggs/.mnt`));
156
+ console.log(chalk.cyan('- or, mount a local partition:'));
157
+ console.log(chalk.white(`sudo mount /dev/sdx1 /home/eggs/.mnt`));
158
+ console.log();
159
+ console.log(chalk.cyan('More help? ') + chalk.white('eggs mom'));
160
+ }
161
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * penguins-eggs
3
+ * class: distro.ts
4
+ * author: Piero Proietti
5
+ * email: piero.proietti@gmail.com
6
+ * license: MIT
7
+ */
8
+ import { IDistro } from '../interfaces/index.js';
9
+ /**
10
+ * Classe
11
+ */
12
+ declare class Distro implements IDistro {
13
+ bugReportUrl: string;
14
+ codenameId: string;
15
+ codenameLikeId: string;
16
+ distroId: string;
17
+ distroLike: string;
18
+ familyId: string;
19
+ homeUrl: string;
20
+ isCalamaresAvailable: boolean;
21
+ isolinuxPath: string;
22
+ liveMediumPath: string;
23
+ memdiskPath: string;
24
+ pxelinuxPath: string;
25
+ releaseId: string;
26
+ releaseLike: string;
27
+ squashfs: string;
28
+ supportUrl: string;
29
+ syslinuxPath: string;
30
+ usrLibPath: string;
31
+ /**
32
+ * Costruttore
33
+ */
34
+ constructor();
35
+ }
36
+ export default Distro;