penguins-eggs 10.0.53 → 10.0.54

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 (344) hide show
  1. package/.oclif.manifest.json +1548 -2
  2. package/README.md +788 -0
  3. package/addons/eggs/theme/livecd/grub.main.simple.cfg +49 -0
  4. package/addons/eggs/theme/livecd/isolinux.theme.cfg +6 -5
  5. package/conf/distros/fedora/calamares/settings.yml +0 -6
  6. package/dist/classes/bleach.d.ts +32 -0
  7. package/dist/classes/bleach.js +135 -0
  8. package/dist/classes/cfs.d.ts +17 -0
  9. package/dist/classes/cfs.js +39 -0
  10. package/dist/classes/cli-autologin.d.ts +52 -0
  11. package/dist/classes/cli-autologin.js +247 -0
  12. package/dist/classes/compressors.d.ts +54 -0
  13. package/dist/classes/compressors.js +109 -0
  14. package/dist/classes/daddy.d.ts +26 -0
  15. package/dist/classes/daddy.js +167 -0
  16. package/dist/classes/distro.d.ts +32 -0
  17. package/dist/classes/distro.js +341 -0
  18. package/dist/classes/diversions.d.ts +48 -0
  19. package/dist/classes/diversions.js +116 -0
  20. package/dist/classes/incubation/branding.d.ts +17 -0
  21. package/dist/classes/incubation/branding.js +85 -0
  22. package/dist/classes/incubation/fisherman-helper/displaymanager.d.ts +11 -0
  23. package/dist/classes/incubation/fisherman-helper/displaymanager.js +40 -0
  24. package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
  25. package/dist/classes/incubation/fisherman-helper/packages.js +72 -0
  26. package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
  27. package/dist/classes/incubation/fisherman-helper/settings.js +83 -0
  28. package/dist/classes/incubation/fisherman.d.ts +70 -0
  29. package/dist/classes/incubation/fisherman.js +263 -0
  30. package/dist/classes/incubation/incubator.d/alpine.d.ts +32 -0
  31. package/dist/classes/incubation/incubator.d/alpine.js +78 -0
  32. package/dist/classes/incubation/incubator.d/bionic.d.ts +32 -0
  33. package/dist/classes/incubation/incubator.d/bionic.js +83 -0
  34. package/dist/classes/incubation/incubator.d/buster.d.ts +32 -0
  35. package/dist/classes/incubation/incubator.d/buster.js +85 -0
  36. package/dist/classes/incubation/incubator.d/jessie.d.ts +31 -0
  37. package/dist/classes/incubation/incubator.d/jessie.js +44 -0
  38. package/dist/classes/incubation/incubator.d/noble.d.ts +32 -0
  39. package/dist/classes/incubation/incubator.d/noble.js +85 -0
  40. package/dist/classes/incubation/incubator.d/openmamba.d.ts +32 -0
  41. package/dist/classes/incubation/incubator.d/openmamba.js +81 -0
  42. package/dist/classes/incubation/incubator.d/opensuse.d.ts +32 -0
  43. package/dist/classes/incubation/incubator.d/opensuse.js +81 -0
  44. package/dist/classes/incubation/incubator.d/rolling.d.ts +32 -0
  45. package/dist/classes/incubation/incubator.d/rolling.js +80 -0
  46. package/dist/classes/incubation/incubator.d.ts +44 -0
  47. package/dist/classes/incubation/incubator.js +382 -0
  48. package/dist/classes/incubation/installer.d.ts +13 -0
  49. package/dist/classes/incubation/installer.js +52 -0
  50. package/dist/classes/keyboards.d.ts +50 -0
  51. package/dist/classes/keyboards.js +287 -0
  52. package/dist/classes/locales.d.ts +21 -0
  53. package/dist/classes/locales.js +77 -0
  54. package/dist/classes/network.d.ts +37 -0
  55. package/dist/classes/network.js +98 -0
  56. package/dist/classes/ovary.d.ts +198 -0
  57. package/dist/classes/ovary.js +1849 -0
  58. package/dist/classes/pacman.d/aldos.d.ts +52 -0
  59. package/dist/classes/pacman.d/aldos.js +100 -0
  60. package/dist/classes/pacman.d/alpine.d.ts +56 -0
  61. package/dist/classes/pacman.d/alpine.js +162 -0
  62. package/dist/classes/pacman.d/archlinux.d.ts +62 -0
  63. package/dist/classes/pacman.d/archlinux.js +137 -0
  64. package/dist/classes/pacman.d/debian.d.ts +65 -0
  65. package/dist/classes/pacman.d/debian.js +143 -0
  66. package/dist/classes/pacman.d/fedora.d.ts +53 -0
  67. package/dist/classes/pacman.d/fedora.js +101 -0
  68. package/dist/classes/pacman.d/openmamba.d.ts +52 -0
  69. package/dist/classes/pacman.d/openmamba.js +100 -0
  70. package/dist/classes/pacman.d/opensuse.d.ts +53 -0
  71. package/dist/classes/pacman.d/opensuse.js +102 -0
  72. package/dist/classes/pacman.d/voidlinux.d.ts +52 -0
  73. package/dist/classes/pacman.d/voidlinux.js +90 -0
  74. package/dist/classes/pacman.d.ts +139 -0
  75. package/dist/classes/pacman.js +775 -0
  76. package/dist/classes/pve-live.d.ts +17 -0
  77. package/dist/classes/pve-live.js +52 -0
  78. package/dist/classes/pxe.d.ts +74 -0
  79. package/dist/classes/pxe.js +410 -0
  80. package/dist/classes/settings.d.ts +53 -0
  81. package/dist/classes/settings.js +185 -0
  82. package/dist/classes/sources_list.d.ts +28 -0
  83. package/dist/classes/sources_list.js +89 -0
  84. package/dist/classes/systemctl.d.ts +47 -0
  85. package/dist/classes/systemctl.js +86 -0
  86. package/dist/classes/tailor.d.ts +50 -0
  87. package/dist/classes/tailor.js +526 -0
  88. package/dist/classes/tools.d.ts +26 -0
  89. package/dist/classes/tools.js +50 -0
  90. package/dist/classes/users.d.ts +28 -0
  91. package/dist/classes/users.js +143 -0
  92. package/dist/classes/utils.d.ts +324 -0
  93. package/dist/classes/utils.js +984 -0
  94. package/dist/classes/xdg.d.ts +45 -0
  95. package/dist/classes/xdg.js +337 -0
  96. package/dist/classes/yolk.d.ts +33 -0
  97. package/dist/classes/yolk.js +114 -0
  98. package/dist/commands/adapt.d.ts +17 -0
  99. package/dist/commands/adapt.js +33 -0
  100. package/dist/commands/analyze.d.ts +26 -0
  101. package/dist/commands/analyze.js +95 -0
  102. package/dist/commands/calamares.d.ts +29 -0
  103. package/dist/commands/calamares.js +112 -0
  104. package/dist/commands/config.d.ts +35 -0
  105. package/dist/commands/config.js +120 -0
  106. package/dist/commands/cuckoo.d.ts +16 -0
  107. package/dist/commands/cuckoo.js +62 -0
  108. package/dist/commands/dad.d.ts +20 -0
  109. package/dist/commands/dad.js +46 -0
  110. package/dist/commands/export/iso.d.ts +19 -0
  111. package/dist/commands/export/iso.js +55 -0
  112. package/dist/commands/export/pkg.d.ts +29 -0
  113. package/dist/commands/export/pkg.js +163 -0
  114. package/dist/commands/export/tarballs.d.ts +27 -0
  115. package/dist/commands/export/tarballs.js +84 -0
  116. package/dist/commands/install.d.ts +37 -0
  117. package/dist/commands/install.js +88 -0
  118. package/dist/commands/kill.d.ts +24 -0
  119. package/dist/commands/kill.js +50 -0
  120. package/dist/commands/love.d.ts +20 -0
  121. package/dist/commands/love.js +59 -0
  122. package/dist/commands/mom.d.ts +16 -0
  123. package/dist/commands/mom.js +30 -0
  124. package/dist/commands/produce.d.ts +34 -0
  125. package/dist/commands/produce.js +201 -0
  126. package/dist/commands/status.d.ts +23 -0
  127. package/dist/commands/status.js +31 -0
  128. package/dist/commands/syncfrom.d.ts +45 -0
  129. package/dist/commands/syncfrom.js +152 -0
  130. package/dist/commands/syncto.d.ts +40 -0
  131. package/dist/commands/syncto.js +175 -0
  132. package/dist/commands/tools/clean.d.ts +18 -0
  133. package/dist/commands/tools/clean.js +37 -0
  134. package/dist/commands/tools/ppa.d.ts +26 -0
  135. package/dist/commands/tools/ppa.js +138 -0
  136. package/dist/commands/tools/skel.d.ts +18 -0
  137. package/dist/commands/tools/skel.js +44 -0
  138. package/dist/commands/tools/stat.d.ts +31 -0
  139. package/dist/commands/tools/stat.js +70 -0
  140. package/dist/commands/tools/yolk.d.ts +24 -0
  141. package/dist/commands/tools/yolk.js +45 -0
  142. package/dist/commands/update.d.ts +51 -0
  143. package/dist/commands/update.js +219 -0
  144. package/dist/commands/wardrobe/get.d.ts +23 -0
  145. package/dist/commands/wardrobe/get.js +52 -0
  146. package/dist/commands/wardrobe/list.d.ts +24 -0
  147. package/dist/commands/wardrobe/list.js +125 -0
  148. package/dist/commands/wardrobe/show.d.ts +25 -0
  149. package/dist/commands/wardrobe/show.js +97 -0
  150. package/dist/commands/wardrobe/wear.d.ts +26 -0
  151. package/dist/commands/wardrobe/wear.js +84 -0
  152. package/dist/components/finished.d.ts +16 -0
  153. package/dist/components/finished.js +56 -0
  154. package/dist/components/information.d.ts +8 -0
  155. package/dist/components/information.js +154 -0
  156. package/dist/components/install.d.ts +15 -0
  157. package/dist/components/install.js +60 -0
  158. package/dist/components/keyboard.d.ts +16 -0
  159. package/dist/components/keyboard.js +54 -0
  160. package/dist/components/location.d.ts +16 -0
  161. package/dist/components/location.js +59 -0
  162. package/dist/components/network.d.ts +19 -0
  163. package/dist/components/network.js +65 -0
  164. package/dist/components/partitions.d.ts +16 -0
  165. package/dist/components/partitions.js +73 -0
  166. package/dist/components/steps.d.ts +13 -0
  167. package/dist/components/steps.js +148 -0
  168. package/dist/components/summary.d.ts +24 -0
  169. package/dist/components/summary.js +81 -0
  170. package/dist/components/title.d.ts +11 -0
  171. package/dist/components/title.js +35 -0
  172. package/dist/components/users.d.ts +24 -0
  173. package/dist/components/users.js +80 -0
  174. package/dist/components/welcome.d.ts +13 -0
  175. package/dist/components/welcome.js +63 -0
  176. package/dist/index-old.d.ts +8 -0
  177. package/dist/index-old.js +8 -0
  178. package/dist/index.d.ts +54 -0
  179. package/dist/index.js +147 -0
  180. package/dist/interfaces/i-addons.d.ts +12 -0
  181. package/dist/interfaces/i-addons.js +8 -0
  182. package/dist/interfaces/i-analyze.d.ts +17 -0
  183. package/dist/interfaces/i-analyze.js +17 -0
  184. package/dist/interfaces/i-app.d.ts +14 -0
  185. package/dist/interfaces/i-app.js +8 -0
  186. package/dist/interfaces/i-branding.d.ts +36 -0
  187. package/dist/interfaces/i-branding.js +8 -0
  188. package/dist/interfaces/i-calamares-displaymanager.d.ts +17 -0
  189. package/dist/interfaces/i-calamares-displaymanager.js +1 -0
  190. package/dist/interfaces/i-calamares-finished.d.ts +12 -0
  191. package/dist/interfaces/i-calamares-finished.js +1 -0
  192. package/dist/interfaces/i-calamares-packages.d.ts +28 -0
  193. package/dist/interfaces/i-calamares-packages.js +1 -0
  194. package/dist/interfaces/i-calamares-partition.d.ts +40 -0
  195. package/dist/interfaces/i-calamares-partition.js +1 -0
  196. package/dist/interfaces/i-config-tools.d.ts +15 -0
  197. package/dist/interfaces/i-config-tools.js +8 -0
  198. package/dist/interfaces/i-devices.d.ts +20 -0
  199. package/dist/interfaces/i-devices.js +8 -0
  200. package/dist/interfaces/i-distro.d.ts +23 -0
  201. package/dist/interfaces/i-distro.js +8 -0
  202. package/dist/interfaces/i-drive-list.d.ts +33 -0
  203. package/dist/interfaces/i-drive-list.js +8 -0
  204. package/dist/interfaces/i-eggs-config.d.ts +32 -0
  205. package/dist/interfaces/i-eggs-config.js +8 -0
  206. package/dist/interfaces/i-excludes.d.ts +14 -0
  207. package/dist/interfaces/i-excludes.js +8 -0
  208. package/dist/interfaces/i-exec.d.ts +11 -0
  209. package/dist/interfaces/i-exec.js +8 -0
  210. package/dist/interfaces/i-initrd.d.ts +13 -0
  211. package/dist/interfaces/i-initrd.js +8 -0
  212. package/dist/interfaces/i-install.d.ts +16 -0
  213. package/dist/interfaces/i-install.js +8 -0
  214. package/dist/interfaces/i-installer.d.ts +17 -0
  215. package/dist/interfaces/i-installer.js +8 -0
  216. package/dist/interfaces/i-krill-config.d.ts +33 -0
  217. package/dist/interfaces/i-krill-config.js +8 -0
  218. package/dist/interfaces/i-krill.d.ts +42 -0
  219. package/dist/interfaces/i-krill.js +8 -0
  220. package/dist/interfaces/i-materia.d.ts +36 -0
  221. package/dist/interfaces/i-materia.js +8 -0
  222. package/dist/interfaces/i-net.d.ts +16 -0
  223. package/dist/interfaces/i-net.js +8 -0
  224. package/dist/interfaces/i-packages.d.ts +16 -0
  225. package/dist/interfaces/i-packages.js +8 -0
  226. package/dist/interfaces/i-partitions.d.ts +16 -0
  227. package/dist/interfaces/i-partitions.js +8 -0
  228. package/dist/interfaces/i-pxe.d.ts +45 -0
  229. package/dist/interfaces/i-pxe.js +1 -0
  230. package/dist/interfaces/i-remix.d.ts +21 -0
  231. package/dist/interfaces/i-remix.js +8 -0
  232. package/dist/interfaces/i-settings.d.ts +33 -0
  233. package/dist/interfaces/i-settings.js +8 -0
  234. package/dist/interfaces/i-user.d.ts +14 -0
  235. package/dist/interfaces/i-user.js +8 -0
  236. package/dist/interfaces/i-workdir.d.ts +14 -0
  237. package/dist/interfaces/i-workdir.js +8 -0
  238. package/dist/interfaces/i-xkb-model.d.ts +24 -0
  239. package/dist/interfaces/i-xkb-model.js +8 -0
  240. package/dist/interfaces/index.d.ts +25 -0
  241. package/dist/interfaces/index.js +8 -0
  242. package/dist/krill/modules/add-user.d.ts +20 -0
  243. package/dist/krill/modules/add-user.js +48 -0
  244. package/dist/krill/modules/bootloader-config.d.ts +14 -0
  245. package/dist/krill/modules/bootloader-config.js +165 -0
  246. package/dist/krill/modules/bootloader.d.ts +14 -0
  247. package/dist/krill/modules/bootloader.js +157 -0
  248. package/dist/krill/modules/change-password.d.ts +15 -0
  249. package/dist/krill/modules/change-password.js +18 -0
  250. package/dist/krill/modules/del-live-user.d.ts +14 -0
  251. package/dist/krill/modules/del-live-user.js +39 -0
  252. package/dist/krill/modules/fstab.d.ts +14 -0
  253. package/dist/krill/modules/fstab.js +123 -0
  254. package/dist/krill/modules/grubcfg.d.ts +17 -0
  255. package/dist/krill/modules/grubcfg.js +29 -0
  256. package/dist/krill/modules/hostname.d.ts +13 -0
  257. package/dist/krill/modules/hostname.js +50 -0
  258. package/dist/krill/modules/initramfs-cfg.d.ts +14 -0
  259. package/dist/krill/modules/initramfs-cfg.js +22 -0
  260. package/dist/krill/modules/initramfs.d.ts +13 -0
  261. package/dist/krill/modules/initramfs.js +54 -0
  262. package/dist/krill/modules/locale-cfg.d.ts +10 -0
  263. package/dist/krill/modules/locale-cfg.js +58 -0
  264. package/dist/krill/modules/locale.d.ts +13 -0
  265. package/dist/krill/modules/locale.js +91 -0
  266. package/dist/krill/modules/m-keyboard.d.ts +14 -0
  267. package/dist/krill/modules/m-keyboard.js +58 -0
  268. package/dist/krill/modules/machine-id.d.ts +15 -0
  269. package/dist/krill/modules/machine-id.js +33 -0
  270. package/dist/krill/modules/mkfs.d.ts +15 -0
  271. package/dist/krill/modules/mkfs.js +50 -0
  272. package/dist/krill/modules/mount-fs.d.ts +17 -0
  273. package/dist/krill/modules/mount-fs.js +62 -0
  274. package/dist/krill/modules/mount-vfs.d.ts +17 -0
  275. package/dist/krill/modules/mount-vfs.js +40 -0
  276. package/dist/krill/modules/network-cfg.d.ts +19 -0
  277. package/dist/krill/modules/network-cfg.js +64 -0
  278. package/dist/krill/modules/packages.d.ts +14 -0
  279. package/dist/krill/modules/packages.js +111 -0
  280. package/dist/krill/modules/partition.d.ts +20 -0
  281. package/dist/krill/modules/partition.js +324 -0
  282. package/dist/krill/modules/remove-installer-link.d.ts +13 -0
  283. package/dist/krill/modules/remove-installer-link.js +35 -0
  284. package/dist/krill/modules/umount.d.ts +14 -0
  285. package/dist/krill/modules/umount.js +28 -0
  286. package/dist/krill/modules/unpackfs.d.ts +13 -0
  287. package/dist/krill/modules/unpackfs.js +20 -0
  288. package/dist/krill/prepare.d.ts +78 -0
  289. package/dist/krill/prepare.js +624 -0
  290. package/dist/krill/sequence.d.ts +154 -0
  291. package/dist/krill/sequence.js +652 -0
  292. package/dist/lib/get_address.d.ts +8 -0
  293. package/dist/lib/get_address.js +23 -0
  294. package/dist/lib/get_dns.d.ts +8 -0
  295. package/dist/lib/get_dns.js +23 -0
  296. package/dist/lib/get_domain.d.ts +8 -0
  297. package/dist/lib/get_domain.js +23 -0
  298. package/dist/lib/get_gateway.d.ts +8 -0
  299. package/dist/lib/get_gateway.js +23 -0
  300. package/dist/lib/get_hostname.d.ts +8 -0
  301. package/dist/lib/get_hostname.js +23 -0
  302. package/dist/lib/get_netmask.d.ts +8 -0
  303. package/dist/lib/get_netmask.js +23 -0
  304. package/dist/lib/get_password.d.ts +8 -0
  305. package/dist/lib/get_password.js +36 -0
  306. package/dist/lib/get_userfullname.d.ts +8 -0
  307. package/dist/lib/get_userfullname.js +23 -0
  308. package/dist/lib/get_username.d.ts +8 -0
  309. package/dist/lib/get_username.js +23 -0
  310. package/dist/lib/kill_me_softly.d.ts +11 -0
  311. package/dist/lib/kill_me_softly.js +61 -0
  312. package/dist/lib/select_address_type.d.ts +8 -0
  313. package/dist/lib/select_address_type.js +24 -0
  314. package/dist/lib/select_filesystem_type.d.ts +8 -0
  315. package/dist/lib/select_filesystem_type.js +46 -0
  316. package/dist/lib/select_installation_device.d.ts +8 -0
  317. package/dist/lib/select_installation_device.js +30 -0
  318. package/dist/lib/select_installation_mode.d.ts +8 -0
  319. package/dist/lib/select_installation_mode.js +24 -0
  320. package/dist/lib/select_interface.d.ts +8 -0
  321. package/dist/lib/select_interface.js +24 -0
  322. package/dist/lib/select_keyboard_layout.d.ts +11 -0
  323. package/dist/lib/select_keyboard_layout.js +36 -0
  324. package/dist/lib/select_keyboard_model.d.ts +11 -0
  325. package/dist/lib/select_keyboard_model.js +34 -0
  326. package/dist/lib/select_keyboard_option.d.ts +11 -0
  327. package/dist/lib/select_keyboard_option.js +34 -0
  328. package/dist/lib/select_keyboard_variant.d.ts +11 -0
  329. package/dist/lib/select_keyboard_variant.js +35 -0
  330. package/dist/lib/select_languages.d.ts +8 -0
  331. package/dist/lib/select_languages.js +28 -0
  332. package/dist/lib/select_regions.d.ts +8 -0
  333. package/dist/lib/select_regions.js +24 -0
  334. package/dist/lib/select_user_swap_choice.d.ts +8 -0
  335. package/dist/lib/select_user_swap_choice.js +34 -0
  336. package/dist/lib/select_zones.d.ts +8 -0
  337. package/dist/lib/select_zones.js +518 -0
  338. package/dist/lib/utils.d.ts +34 -0
  339. package/dist/lib/utils.js +79 -0
  340. package/dist/penguins-eggs-tarball-10.0.54-1-linux-x64.tar.gz +0 -0
  341. package/package.json +11 -7
  342. package/scripts/_eggs +10 -1
  343. package/scripts/eggs.bash +1 -0
  344. /package/addons/eggs/theme/livecd/{grub.main.cfg → grub.main.full.cfg} +0 -0
@@ -0,0 +1,526 @@
1
+ /**
2
+ * ./src/classes/tailor.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 fs from 'node:fs';
10
+ import yaml from 'js-yaml';
11
+ import path from 'node:path';
12
+ import { exec } from '../lib/utils.js';
13
+ import Distro from './distro.js';
14
+ import Pacman from './pacman.js';
15
+ import SourcesList from './sources_list.js';
16
+ import Utils from './utils.js';
17
+ /**
18
+ *
19
+ */
20
+ export default class Tailor {
21
+ materials = {};
22
+ category = 'costume';
23
+ costume = '';
24
+ echo = {};
25
+ toNull = ' > /dev/null 2>&1';
26
+ verbose = false;
27
+ wardrobe = '';
28
+ log = '';
29
+ /**
30
+ * @param wardrobe
31
+ * @param costume
32
+ */
33
+ constructor(costume, category = 'costume') {
34
+ this.costume = costume;
35
+ this.wardrobe = path.dirname(path.dirname(costume));
36
+ this.log = path.dirname(this.wardrobe) + "/wardrobe.log";
37
+ this.category = category;
38
+ }
39
+ /**
40
+ *
41
+ */
42
+ async prepare(verbose = true, no_accessories = false, no_firmwares = false) {
43
+ if (verbose) {
44
+ this.verbose = true;
45
+ this.toNull = '';
46
+ }
47
+ this.echo = Utils.setEcho(verbose);
48
+ Utils.warning(`preparing ${this.costume}`);
49
+ if (!fs.existsSync(this.log)) {
50
+ fs.writeFileSync(this.log, "# eggs wardrobe wear\n\n");
51
+ }
52
+ fs.appendFileSync(this.log, `## ${this.costume}\n`);
53
+ fs.appendFileSync(this.log, `Packages not found:\n`);
54
+ /**
55
+ * check curl presence
56
+ */
57
+ if (!Pacman.packageIsInstalled('curl')) {
58
+ Utils.pressKeyToExit('In this tailoring shop we use curl. sudo apt update | apt install curl');
59
+ process.exit();
60
+ }
61
+ // Analyze distro
62
+ const distro = new Distro();
63
+ let tailorList = '';
64
+ switch (distro.distroLike) {
65
+ case 'Debian': {
66
+ tailorList = `${this.costume}/debian.yml`;
67
+ if (!fs.existsSync(tailorList)) {
68
+ tailorList = `${this.costume}/devuan.yml`;
69
+ if (!fs.existsSync(tailorList)) {
70
+ tailorList = `${this.costume}/ubuntu.yml`;
71
+ if (!fs.existsSync(tailorList)) {
72
+ console.log(`no costume definition found compatible Debian`);
73
+ process.exit();
74
+ }
75
+ }
76
+ }
77
+ break;
78
+ }
79
+ case 'Devuan': {
80
+ tailorList = `${this.costume}/devuan.yml`;
81
+ if (!fs.existsSync(tailorList)) {
82
+ tailorList = `${this.costume}/debian.yml`;
83
+ if (!fs.existsSync(tailorList)) {
84
+ tailorList = `${this.costume}/ubuntu.yml`;
85
+ if (!fs.existsSync(tailorList)) {
86
+ console.log(`no costume definition found compatible Devuan`);
87
+ process.exit();
88
+ }
89
+ }
90
+ }
91
+ break;
92
+ }
93
+ case 'Ubuntu': {
94
+ tailorList = `${this.costume}/ubuntu.yml`;
95
+ if (!fs.existsSync(tailorList)) {
96
+ tailorList = `${this.costume}/debian.yml`;
97
+ console.log(`trying ` + tailorList);
98
+ if (!fs.existsSync(tailorList)) {
99
+ tailorList = `${this.costume}/devuan.yml`;
100
+ console.log(`trying ` + tailorList);
101
+ if (!fs.existsSync(tailorList)) {
102
+ console.log(`no costume definition found compatible Ubuntu`);
103
+ process.exit();
104
+ }
105
+ }
106
+ }
107
+ break;
108
+ }
109
+ case 'Arch': {
110
+ tailorList = `${this.costume}/arch.yml`;
111
+ if (!fs.existsSync(tailorList)) {
112
+ tailorList = `${this.costume}/debian.yml`;
113
+ if (!fs.existsSync(tailorList)) {
114
+ console.log(`no costume definition found compatible Arch`);
115
+ process.exit();
116
+ }
117
+ }
118
+ break;
119
+ }
120
+ case 'Alpine': {
121
+ tailorList = `${this.costume}/alpine.yml`;
122
+ if (!fs.existsSync(tailorList)) {
123
+ tailorList = `${this.costume}/debian.yml`;
124
+ if (!fs.existsSync(tailorList)) {
125
+ console.log(`no costume definition found compatible Alpine`);
126
+ process.exit();
127
+ }
128
+ }
129
+ break;
130
+ }
131
+ case 'AlmaLinux':
132
+ case 'RockyLinux':
133
+ case 'Fedora': {
134
+ tailorList = `${this.costume}/fedora.yml`;
135
+ if (!fs.existsSync(tailorList)) {
136
+ tailorList = `${this.costume}/debian.yml`;
137
+ if (!fs.existsSync(tailorList)) {
138
+ console.log(`no costume definition found compatible Fedora`);
139
+ process.exit();
140
+ }
141
+ }
142
+ break;
143
+ }
144
+ } // end analyze
145
+ /**
146
+ * find materials
147
+ */
148
+ if (fs.existsSync(tailorList)) {
149
+ this.materials = yaml.load(fs.readFileSync(tailorList, 'utf8'));
150
+ }
151
+ else {
152
+ switch (this.category) {
153
+ case 'costume': {
154
+ Utils.titles(`${this.category}: ${this.costume}`);
155
+ console.log("Tailor's list " + chalk.cyan(tailorList) + ' is not found \non your wardrobe ' + chalk.cyan(this.wardrobe) + '.\n');
156
+ console.log('Costume will not be installed, operations will abort.\n');
157
+ Utils.pressKeyToExit();
158
+ process.exit();
159
+ break;
160
+ }
161
+ case 'accessory': {
162
+ Utils.titles(`${this.category}: ${this.costume}`);
163
+ console.log("Tailor's list " + chalk.cyan(tailorList) + ' is not found \non your wardrobe ' + chalk.cyan(this.wardrobe) + '.\n');
164
+ console.log('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv');
165
+ console.log('Accessory will not be installed,');
166
+ console.log('operations will continue.');
167
+ console.log('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^');
168
+ sleep(3000);
169
+ return;
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * sequence
175
+ */
176
+ const sources_list = new SourcesList();
177
+ let step = '';
178
+ if (this.materials.sequence !== undefined) {
179
+ step = 'analyzing sequence';
180
+ Utils.warning(step);
181
+ /**
182
+ * sequence/repositories
183
+ */
184
+ if (this.materials.sequence.repositories !== undefined) {
185
+ if (distro.familyId === 'debian') {
186
+ /**
187
+ * sequence/repositories/sources_list
188
+ */
189
+ // evito di fallire se sources_list non è presente
190
+ if (this.materials.sequence.repositories.sources_list !== undefined) {
191
+ step = 'analyzing repositories';
192
+ Utils.warning(step);
193
+ if (distro.distroLike === 'Debian') {
194
+ await sources_list.components(this.materials.sequence.repositories.sources_list);
195
+ }
196
+ }
197
+ /**
198
+ * sequence/repositories/sources_list_d
199
+ */
200
+ if (this.materials.sequence.repositories.sources_list_d !== undefined && this.materials.sequence.repositories.sources_list_d[0] !== null) {
201
+ step = 'adding repositories to /etc/apt/sources_list_d';
202
+ Utils.warning(step);
203
+ for (const cmd of this.materials.sequence.repositories.sources_list_d) {
204
+ try {
205
+ // repeat 3 times if fail curl or others commands
206
+ for (let i = 0; i < 2; i++) {
207
+ const result = await exec(cmd, this.echo);
208
+ if (result.code === 0) {
209
+ break;
210
+ }
211
+ }
212
+ }
213
+ catch (error) {
214
+ await Utils.pressKeyToExit(JSON.stringify(error));
215
+ }
216
+ }
217
+ }
218
+ }
219
+ /**
220
+ * sequence/repositories/update
221
+ */
222
+ if (this.materials.sequence.repositories.update === undefined) {
223
+ console.log('repositiories, and repositories.update MUST be defined on sequence');
224
+ process.exit();
225
+ }
226
+ step = 'repositories update';
227
+ Utils.warning(step);
228
+ if (this.materials.sequence.repositories.update) {
229
+ switch (distro.familyId) {
230
+ case 'debian': {
231
+ await exec('apt-get update', Utils.setEcho(false));
232
+ break;
233
+ }
234
+ case 'archlinux': {
235
+ await exec('pacman -Sy', Utils.setEcho(false));
236
+ break;
237
+ }
238
+ case 'alpine': {
239
+ await exec('apk update', Utils.setEcho(false));
240
+ break;
241
+ }
242
+ case 'fedora': {
243
+ await exec('dnf update', Utils.setEcho(false));
244
+ break;
245
+ }
246
+ }
247
+ }
248
+ /**
249
+ * sequence/repositories/upgrade
250
+ */
251
+ if (this.materials.sequence.repositories.upgrade !== undefined) {
252
+ step = 'repositories upgrade';
253
+ Utils.warning(step);
254
+ if (this.materials.sequence.repositories.upgrade) {
255
+ switch (distro.familyId) {
256
+ case 'debian': {
257
+ await exec('apt-get full-upgrade', Utils.setEcho(false));
258
+ break;
259
+ }
260
+ case 'archlinux': {
261
+ await exec('pacman -Su', Utils.setEcho(false));
262
+ break;
263
+ }
264
+ case 'alpine': {
265
+ await exec('apk upgrade', Utils.setEcho(false));
266
+ break;
267
+ }
268
+ case 'fedora': {
269
+ await exec('dnf upgrade', Utils.setEcho(false));
270
+ break;
271
+ }
272
+ }
273
+ } // upgrade true
274
+ } // undefined upgrade
275
+ } // end sequence/repositories
276
+ /**
277
+ * sequence/cmds
278
+ */
279
+ if (this.materials.sequence.cmds !== undefined && Array.isArray(this.materials.sequence.cmds)) {
280
+ step = 'sequence commands';
281
+ Utils.warning(step);
282
+ for (const cmd of this.materials.sequence.cmds) {
283
+ if (fs.existsSync(`${this.costume}/${cmd}`)) {
284
+ await exec(`${this.costume}/${cmd} ${this.materials.name}`, Utils.setEcho(true));
285
+ }
286
+ else {
287
+ // exec cmd real env
288
+ await exec(`${cmd} ${this.materials.name}`, Utils.setEcho(true));
289
+ }
290
+ }
291
+ }
292
+ /**
293
+ * install packages
294
+ */
295
+ if (this.materials.sequence.packages !== undefined) {
296
+ const packages = await this.packagesExists(this.materials.sequence.packages);
297
+ if (packages.length > 1) {
298
+ switch (distro.familyId) {
299
+ case 'debian': {
300
+ await this.packagesInstall(packages);
301
+ break;
302
+ }
303
+ case 'archlinux': {
304
+ await this.packagesInstall(this.materials.sequence.packages, 'packages', `pacman -Sy --noconfirm`);
305
+ break;
306
+ }
307
+ case 'alpine': {
308
+ await this.packagesInstall(this.materials.sequence.packages, 'packages', `apk add`);
309
+ break;
310
+ }
311
+ case 'fedora': {
312
+ await this.packagesInstall(this.materials.sequence.packages, 'packages', `dnf install -y`);
313
+ break;
314
+ }
315
+ }
316
+ }
317
+ }
318
+ /**
319
+ * sequence/packages_python
320
+ */
321
+ if (this.materials.sequence.packages_python !== undefined && Array.isArray(this.materials.sequence.packages_python)) {
322
+ let cmd = 'pip install ';
323
+ let pip = '';
324
+ for (const elem of this.materials.sequence.packages_python) {
325
+ cmd += ` ${elem}`;
326
+ pip += `, ${elem}`;
327
+ }
328
+ step = `installing python packages pip ${pip.slice(2)}`;
329
+ Utils.warning(step);
330
+ await exec(cmd, this.echo);
331
+ }
332
+ /**
333
+ * sequence/accessories
334
+ */
335
+ if (!no_accessories) {
336
+ if (this.materials.sequence.accessories !== undefined && Array.isArray(this.materials.sequence.accessories)) {
337
+ step = 'wearing accessories';
338
+ for (const elem of this.materials.sequence.accessories) {
339
+ if ((elem === 'firmwares' || elem === './firmwares') && no_firmwares) {
340
+ continue;
341
+ }
342
+ if (elem.slice(0, 2) === './') {
343
+ // local accessory
344
+ const tailor = new Tailor(`${this.costume}/${elem.slice(2)}`, 'accessory');
345
+ await tailor.prepare(verbose);
346
+ }
347
+ else {
348
+ // global accessory
349
+ const tailor = new Tailor(`${this.wardrobe}/accessories/${elem}`, 'accessory');
350
+ await tailor.prepare(verbose);
351
+ }
352
+ }
353
+ }
354
+ } // no-accessories
355
+ } // end sequence
356
+ /**
357
+ * customize
358
+ */
359
+ if (this.materials.finalize !== undefined) {
360
+ /**
361
+ * finalize/customize
362
+ */
363
+ if (this.materials.finalize.customize && fs.existsSync(`/${this.costume}/sysroot`)) {
364
+ step = `finalize/customize: copying ${this.costume}/sysroot/ to /`;
365
+ Utils.warning(step);
366
+ let cmd = `rsync -avx ${this.costume}/sysroot/* / ${this.toNull}`;
367
+ await exec(cmd, this.echo);
368
+ // chown
369
+ cmd = `chown root:root /etc/sudoers.d /etc/skel -R`;
370
+ await exec(cmd, this.echo);
371
+ /**
372
+ * Copyng skel in /home/user
373
+ */
374
+ if (fs.existsSync(`${this.costume}/sysroot/etc/skel`)) {
375
+ const user = await Utils.getPrimaryUser();
376
+ step = `finalize/customize: copying skel in /home/${user}/`;
377
+ Utils.warning(step);
378
+ cmd = `rsync -avx ${this.costume}/sysroot/etc/skel/.config /home/${user}/ ${this.toNull}`;
379
+ await exec(cmd, this.echo);
380
+ await exec(`chown ${user}:${user} /home/${user}/ -R`);
381
+ }
382
+ }
383
+ /**
384
+ * finalize/cmds
385
+ */
386
+ if (this.materials.finalize.cmds !== undefined && Array.isArray(this.materials.finalize.cmds)) {
387
+ step = 'finalize/commands';
388
+ Utils.warning(step);
389
+ for (const cmd of this.materials.finalize.cmds) {
390
+ if (fs.existsSync(`${this.costume}/${cmd}`)) {
391
+ await exec(`${this.costume}/${cmd} ${this.materials.name}`, Utils.setEcho(true));
392
+ }
393
+ else {
394
+ // exec cmd real env
395
+ await exec(`${cmd}`, Utils.setEcho(true));
396
+ }
397
+ }
398
+ }
399
+ }
400
+ // show log
401
+ if (fs.existsSync(this.log)) {
402
+ await exec(`cat ${this.log}`);
403
+ }
404
+ /**
405
+ * reboot
406
+ */
407
+ if (this.materials.reboot) {
408
+ Utils.warning('Reboot');
409
+ await Utils.pressKeyToExit('system need to reboot', true);
410
+ await exec('reboot');
411
+ }
412
+ else {
413
+ console.log(`You look good with: ${this.materials.name}`);
414
+ }
415
+ }
416
+ /**
417
+ *
418
+ * @param packages
419
+ * @param verbose
420
+ * @param section
421
+ * @returns
422
+ */
423
+ async packagesExists(wanted) {
424
+ Utils.warning(`checking packages exists ${this.costume}`);
425
+ wanted.sort();
426
+ const distro = new Distro();
427
+ let cmd = "";
428
+ if (distro.familyId === "debian") {
429
+ cmd = `apt-cache --no-generate pkgnames`;
430
+ }
431
+ else if (distro.familyId === "archlinux") {
432
+ cmd = `pacman -S --list | awk '{print $2}'`;
433
+ }
434
+ else if (distro.familyId === "alpine") {
435
+ cmd = `apk search | awk -F'-[0-9]' '{print $1}' | sort -u`;
436
+ }
437
+ else if (distro.familyId === 'fedora') {
438
+ cmd = `dnf list --available | awk '{print $1}' | sed 's/\.[^.]*$//'`;
439
+ }
440
+ //available = (await exec(cmd, { capture: true, echo: false, ignore: false })).data.split('\n')
441
+ let available = [];
442
+ available = (await exec(cmd, { capture: true, echo: false, ignore: false })).data.split('\n');
443
+ available.sort();
444
+ let exists = [];
445
+ let not_exists = [];
446
+ for (const elem of wanted) {
447
+ if (available.includes(elem)) {
448
+ exists.push(elem);
449
+ }
450
+ else {
451
+ not_exists.push(elem);
452
+ fs.appendFileSync(this.log, `- ${elem}\n`);
453
+ }
454
+ }
455
+ if (not_exists.length > 0) {
456
+ console.log(`${this.materials.name}, ${not_exists.length} following packages was not found:`);
457
+ for (const elem of not_exists) {
458
+ console.log(`-${elem}`);
459
+ }
460
+ console.log();
461
+ console.log("Wait 3 seconds");
462
+ await sleep(3000);
463
+ }
464
+ return exists;
465
+ }
466
+ /**
467
+ * - check if every package if installed
468
+ * - if find any packages to install, install it
469
+ */
470
+ async packagesInstall(packages, comment = 'packages', cmd = 'apt-get install -yqq ') {
471
+ Utils.warning(`installing existing packages ${this.costume}`);
472
+ if (packages[0] !== null) {
473
+ const elements = [];
474
+ let strElements = '';
475
+ for (const elem of packages) {
476
+ elements.push(elem);
477
+ cmd += ` ${elem}`;
478
+ strElements += `, ${elem}`;
479
+ }
480
+ if (elements.length > 0) {
481
+ let step = `installing ${comment}: `;
482
+ if (!this.verbose) {
483
+ step += strElements.slice(2);
484
+ }
485
+ /**
486
+ * prova 3 volte
487
+ */
488
+ const limit = 3;
489
+ for (let tempts = 1; tempts < limit; tempts++) {
490
+ Utils.titles(step);
491
+ Utils.warning(`tempts ${tempts} of ${limit}`);
492
+ if (await this.tryCheckSuccess(cmd, this.echo)) {
493
+ break;
494
+ }
495
+ }
496
+ }
497
+ }
498
+ }
499
+ /**
500
+ *
501
+ * @param cmd
502
+ * @param echo
503
+ * @returns
504
+ */
505
+ async tryCheckSuccess(cmd, echo) {
506
+ let success = false;
507
+ try {
508
+ await exec(cmd, echo);
509
+ success = true;
510
+ }
511
+ catch {
512
+ success = false;
513
+ }
514
+ return success;
515
+ }
516
+ }
517
+ /**
518
+ *
519
+ * @param ms
520
+ * @returns
521
+ */
522
+ function sleep(ms = 0) {
523
+ return new Promise((resolve) => {
524
+ setTimeout(resolve, ms);
525
+ });
526
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ./src/classes/tools.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
+ interface IEggsConfigTools {
9
+ localPathIso: string;
10
+ remoteHost: string;
11
+ remotePathPackages: string;
12
+ remotePathIso: string;
13
+ remoteUser: string;
14
+ }
15
+ /**
16
+ * Utils: general porpourse utils
17
+ * @remarks all the utilities
18
+ */
19
+ export default class Tools {
20
+ config: IEggsConfigTools;
21
+ snapshot_dir: string;
22
+ snapshot_name: string;
23
+ tools_yaml: string;
24
+ loadSettings(): Promise<boolean>;
25
+ }
26
+ export {};
@@ -0,0 +1,50 @@
1
+ /**
2
+ * ./src/classes/tools.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 yaml from 'js-yaml';
9
+ import fs from 'node:fs';
10
+ import Settings from './settings.js';
11
+ import Utils from './utils.js';
12
+ /**
13
+ * Utils: general porpourse utils
14
+ * @remarks all the utilities
15
+ */
16
+ export default class Tools {
17
+ config = {};
18
+ snapshot_dir = '';
19
+ snapshot_name = '';
20
+ tools_yaml = '/etc/penguins-eggs.d/tools.yaml';
21
+ /*
22
+ * Load configuration from /etc/penguins-eggs.yaml
23
+ * @returns {boolean} Success
24
+ */
25
+ async loadSettings() {
26
+ let foundSettings = false;
27
+ if (fs.existsSync(this.tools_yaml)) {
28
+ foundSettings = true;
29
+ const loaded = yaml.load(fs.readFileSync(this.tools_yaml, 'utf8'));
30
+ this.config.remoteHost = loaded.remoteHost;
31
+ this.config.remoteUser = loaded.remoteUser;
32
+ this.config.remotePathPackages = loaded.remotePathPackages;
33
+ this.config.remotePathIso = loaded.remotePathIso;
34
+ this.config.localPathIso = loaded.localPathIso;
35
+ /**
36
+ * da eggs
37
+ */
38
+ const settings = new Settings();
39
+ settings.load();
40
+ this.snapshot_dir = settings.config.snapshot_dir;
41
+ const prefix = settings.config.snapshot_prefix;
42
+ this.snapshot_name = prefix + settings.config.snapshot_basename + '_' + Utils.uefiArch();
43
+ }
44
+ else {
45
+ console.log(`Can't find: ${this.tools_yaml}`);
46
+ process.exit(1);
47
+ }
48
+ return foundSettings;
49
+ }
50
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ./src/classes/users.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
+ /**
9
+ *
10
+ */
11
+ export default class Users {
12
+ gecos: string;
13
+ gid: string;
14
+ hasHome: boolean;
15
+ home: string;
16
+ login: string;
17
+ password: string;
18
+ saveIt: boolean;
19
+ shell: string;
20
+ size: number;
21
+ uid: string;
22
+ constructor(login: string, password: string, uid: string, gid: string, gecos: string, home: string, shell: string);
23
+ /**
24
+ * getSize
25
+ * @param verbose
26
+ */
27
+ getValues(): Promise<void>;
28
+ }