penguins-eggs 9.6.34 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/.oclif.manifest.json +1458 -1
  2. package/README.md +823 -8
  3. package/addons/eggs/theme/livecd/grub.main.cfg +4 -4
  4. package/addons/eggs/theme/livecd/isolinux.main.cfg +5 -5
  5. package/bin/dev.cmd +1 -1
  6. package/bin/dev.js +6 -0
  7. package/bin/run.js +5 -0
  8. package/conf/derivatives.yaml +2 -0
  9. package/conf/distros/buster/calamares/calamares-modules/bootloader-config/bootloader-config.sh +3 -3
  10. package/conf/distros/buster/calamares/calamares-modules/sources-yolk/sources-yolk.sh +1 -1
  11. package/conf/distros/buster/calamares/modules/fstab.yml +1 -1
  12. package/conf/distros/focal/calamares/modules/fstab.yml +1 -1
  13. package/conf/{exclude.list.homes → exclude.list.d/home.list} +6 -1
  14. package/conf/{exclude.list.template → exclude.list.d/master.list} +15 -24
  15. package/conf/exclude.list.d/var.list +21 -0
  16. package/conf/tools.yaml +1 -3
  17. package/dist/classes/bleach.d.ts +37 -0
  18. package/dist/classes/bleach.js +43 -91
  19. package/dist/classes/cfs.d.ts +17 -0
  20. package/dist/classes/cfs.js +15 -12
  21. package/dist/classes/compressors.d.ts +53 -0
  22. package/dist/classes/compressors.js +51 -58
  23. package/dist/classes/daddy.d.ts +18 -0
  24. package/dist/classes/daddy.js +93 -101
  25. package/dist/classes/distro.d.ts +26 -0
  26. package/dist/classes/distro.js +45 -27
  27. package/dist/classes/families/archlinux.d.ts +61 -0
  28. package/dist/classes/families/archlinux.js +56 -113
  29. package/dist/classes/families/debian.d.ts +65 -0
  30. package/dist/classes/families/debian.js +68 -143
  31. package/dist/classes/families/fedora.d.ts +52 -0
  32. package/dist/classes/families/fedora.js +43 -99
  33. package/dist/classes/families/mockup.d.ts +60 -0
  34. package/dist/classes/families/mockup.js +27 -46
  35. package/dist/classes/families/suse.d.ts +52 -0
  36. package/dist/classes/families/suse.js +45 -97
  37. package/dist/classes/incubation/branding.d.ts +17 -0
  38. package/dist/classes/incubation/branding.js +33 -32
  39. package/dist/classes/incubation/distros/bionic.d.ts +32 -0
  40. package/dist/classes/incubation/distros/bionic.js +15 -15
  41. package/dist/classes/incubation/distros/buster.d.ts +32 -0
  42. package/dist/classes/incubation/distros/buster.js +15 -15
  43. package/dist/classes/incubation/distros/focal.d.ts +32 -0
  44. package/dist/classes/incubation/distros/focal.js +15 -15
  45. package/dist/classes/incubation/distros/jessie.d.ts +31 -0
  46. package/dist/classes/incubation/distros/jessie.js +11 -13
  47. package/dist/classes/incubation/distros/rolling.d.ts +32 -0
  48. package/dist/classes/incubation/distros/rolling.js +15 -16
  49. package/dist/classes/incubation/fisherman-helper/displaymanager.d.ts +11 -0
  50. package/dist/classes/incubation/fisherman-helper/displaymanager.js +8 -9
  51. package/dist/classes/incubation/fisherman-helper/packages.d.ts +20 -0
  52. package/dist/classes/incubation/fisherman-helper/packages.js +17 -17
  53. package/dist/classes/incubation/fisherman-helper/settings.d.ts +15 -0
  54. package/dist/classes/incubation/fisherman-helper/settings.js +30 -28
  55. package/dist/classes/incubation/fisherman.d.ts +77 -0
  56. package/dist/classes/incubation/fisherman.js +137 -132
  57. package/dist/classes/incubation/incubator.d.ts +40 -0
  58. package/dist/classes/incubation/incubator.js +93 -87
  59. package/dist/classes/incubation/installer.d.ts +13 -0
  60. package/dist/classes/incubation/installer.js +27 -12
  61. package/dist/classes/initrd.d.ts +41 -0
  62. package/dist/classes/initrd.js +42 -44
  63. package/dist/classes/keyboards.d.ts +50 -0
  64. package/dist/classes/keyboards.js +110 -107
  65. package/dist/classes/locales.d.ts +21 -0
  66. package/dist/classes/locales.js +30 -34
  67. package/dist/classes/n8.d.ts +17 -0
  68. package/dist/classes/n8.js +16 -22
  69. package/dist/classes/network.d.ts +37 -0
  70. package/dist/classes/network.js +21 -25
  71. package/dist/classes/ovary.d.ts +205 -0
  72. package/dist/classes/ovary.js +1262 -1334
  73. package/dist/classes/pacman.d.ts +149 -0
  74. package/dist/classes/pacman.js +347 -426
  75. package/dist/classes/pve-live.d.ts +17 -0
  76. package/dist/classes/pve-live.js +23 -25
  77. package/dist/classes/pxe.d.ts +65 -0
  78. package/dist/classes/pxe.js +206 -210
  79. package/dist/classes/settings.d.ts +53 -0
  80. package/dist/classes/settings.js +99 -102
  81. package/dist/classes/sources_list.d.ts +28 -0
  82. package/dist/classes/sources_list.js +35 -39
  83. package/dist/classes/systemctl.d.ts +47 -0
  84. package/dist/classes/systemctl.js +35 -39
  85. package/dist/classes/tailor.d.ts +46 -0
  86. package/dist/classes/tailor.js +225 -241
  87. package/dist/classes/tools.d.ts +30 -0
  88. package/dist/classes/tools.js +20 -26
  89. package/dist/classes/users.d.ts +28 -0
  90. package/dist/classes/users.js +22 -16
  91. package/dist/classes/utils.d.ts +318 -0
  92. package/dist/classes/utils.js +91 -76
  93. package/dist/classes/xdg.d.ts +45 -0
  94. package/dist/classes/xdg.js +129 -133
  95. package/dist/classes/yolk.d.ts +33 -0
  96. package/dist/classes/yolk.js +54 -60
  97. package/dist/commands/adapt.d.ts +17 -0
  98. package/dist/commands/adapt.js +21 -25
  99. package/dist/commands/analyze.d.ts +26 -0
  100. package/dist/commands/analyze.js +60 -74
  101. package/dist/commands/calamares.d.ts +29 -0
  102. package/dist/commands/calamares.js +53 -60
  103. package/dist/commands/config.d.ts +36 -0
  104. package/dist/commands/config.js +120 -142
  105. package/dist/commands/cuckoo.d.ts +16 -0
  106. package/dist/commands/cuckoo.js +24 -28
  107. package/dist/commands/dad.d.ts +19 -0
  108. package/dist/commands/dad.js +26 -30
  109. package/dist/commands/export/deb.d.ts +19 -0
  110. package/dist/commands/export/deb.js +33 -42
  111. package/dist/commands/export/iso.d.ts +19 -0
  112. package/dist/commands/export/iso.js +24 -28
  113. package/dist/commands/install.d.ts +37 -0
  114. package/dist/commands/install.js +68 -68
  115. package/dist/commands/kill.d.ts +24 -0
  116. package/dist/commands/kill.js +31 -38
  117. package/dist/commands/mom.d.ts +16 -0
  118. package/dist/commands/mom.js +20 -22
  119. package/dist/commands/produce.d.ts +33 -0
  120. package/dist/commands/produce.js +100 -92
  121. package/dist/commands/status.d.ts +23 -0
  122. package/dist/commands/status.js +14 -20
  123. package/dist/commands/syncfrom.d.ts +45 -0
  124. package/dist/commands/syncfrom.js +99 -109
  125. package/dist/commands/syncto.d.ts +40 -0
  126. package/dist/commands/syncto.js +152 -216
  127. package/dist/commands/tools/clean.d.ts +18 -0
  128. package/dist/commands/tools/clean.js +21 -25
  129. package/dist/commands/tools/ppa.d.ts +26 -0
  130. package/dist/commands/tools/ppa.js +46 -50
  131. package/dist/commands/tools/skel.d.ts +18 -0
  132. package/dist/commands/tools/skel.js +27 -31
  133. package/dist/commands/tools/stat.d.ts +31 -0
  134. package/dist/commands/tools/stat.js +21 -25
  135. package/dist/commands/tools/yolk.d.ts +24 -0
  136. package/dist/commands/tools/yolk.js +23 -27
  137. package/dist/commands/update.d.ts +47 -0
  138. package/dist/commands/update.js +66 -70
  139. package/dist/commands/wardrobe/get.d.ts +23 -0
  140. package/dist/commands/wardrobe/get.js +26 -28
  141. package/dist/commands/wardrobe/list.d.ts +24 -0
  142. package/dist/commands/wardrobe/list.js +69 -67
  143. package/dist/commands/wardrobe/show.d.ts +25 -0
  144. package/dist/commands/wardrobe/show.js +57 -52
  145. package/dist/commands/wardrobe/wear.d.ts +26 -0
  146. package/dist/commands/wardrobe/wear.js +39 -41
  147. package/dist/components/finished.d.ts +15 -0
  148. package/dist/components/finished.js +37 -42
  149. package/dist/components/information.d.ts +8 -0
  150. package/dist/components/information.js +155 -0
  151. package/dist/components/install.d.ts +15 -0
  152. package/dist/components/install.js +31 -35
  153. package/dist/components/keyboard.d.ts +16 -0
  154. package/dist/components/keyboard.js +37 -40
  155. package/dist/components/location.d.ts +16 -0
  156. package/dist/components/location.js +38 -38
  157. package/dist/components/network.d.ts +19 -0
  158. package/dist/components/network.js +47 -48
  159. package/dist/components/partitions.d.ts +16 -0
  160. package/dist/components/partitions.js +47 -51
  161. package/dist/components/steps.d.ts +13 -0
  162. package/dist/components/steps.js +148 -0
  163. package/dist/components/summary.d.ts +24 -0
  164. package/dist/components/summary.js +53 -54
  165. package/dist/components/title.d.ts +12 -0
  166. package/dist/components/title.js +35 -0
  167. package/dist/components/users.d.ts +24 -0
  168. package/dist/components/users.js +43 -43
  169. package/dist/components/welcome.d.ts +13 -0
  170. package/dist/components/welcome.js +37 -38
  171. package/dist/index.d.ts +8 -0
  172. package/dist/index.js +8 -5
  173. package/dist/interfaces/i-addons.d.ts +13 -0
  174. package/dist/interfaces/i-addons.js +8 -3
  175. package/dist/interfaces/i-analyze.d.ts +17 -0
  176. package/dist/interfaces/i-analyze.js +11 -16
  177. package/dist/interfaces/i-app.d.ts +14 -0
  178. package/dist/interfaces/i-app.js +8 -2
  179. package/dist/interfaces/i-branding.d.ts +36 -0
  180. package/dist/interfaces/i-branding.js +8 -2
  181. package/dist/interfaces/i-calamares-partition.d.ts +18 -0
  182. package/dist/interfaces/i-calamares-partition.js +3 -4
  183. package/dist/interfaces/i-config-tools.d.ts +18 -0
  184. package/dist/interfaces/i-config-tools.js +8 -2
  185. package/dist/interfaces/i-devices.d.ts +20 -0
  186. package/dist/interfaces/i-devices.js +8 -2
  187. package/dist/interfaces/i-distro.d.ts +27 -0
  188. package/dist/interfaces/i-distro.js +3 -4
  189. package/dist/interfaces/i-drive-list.d.ts +33 -0
  190. package/dist/interfaces/i-drive-list.js +3 -4
  191. package/dist/interfaces/i-eggs-config.d.ts +32 -0
  192. package/dist/interfaces/i-eggs-config.js +3 -4
  193. package/dist/interfaces/i-excludes.d.ts +14 -0
  194. package/dist/interfaces/i-excludes.js +8 -0
  195. package/dist/interfaces/i-exec.d.ts +11 -0
  196. package/dist/interfaces/i-exec.js +3 -4
  197. package/dist/interfaces/i-initrd.d.ts +13 -0
  198. package/dist/interfaces/i-initrd.js +8 -2
  199. package/dist/interfaces/i-install.d.ts +16 -0
  200. package/dist/interfaces/i-install.js +8 -2
  201. package/dist/interfaces/i-installer.d.ts +17 -0
  202. package/dist/interfaces/i-installer.js +8 -2
  203. package/dist/interfaces/i-krill-config.d.ts +33 -0
  204. package/dist/interfaces/i-krill-config.js +3 -4
  205. package/dist/interfaces/i-krill.d.ts +42 -0
  206. package/dist/interfaces/i-krill.js +8 -2
  207. package/dist/interfaces/i-materia.d.ts +41 -0
  208. package/dist/interfaces/i-materia.js +8 -2
  209. package/dist/interfaces/i-net.d.ts +16 -0
  210. package/dist/interfaces/i-net.js +8 -2
  211. package/dist/interfaces/i-packages.d.ts +29 -0
  212. package/dist/interfaces/i-packages.js +3 -4
  213. package/dist/interfaces/i-partitions.d.ts +16 -0
  214. package/dist/interfaces/i-partitions.js +8 -2
  215. package/dist/interfaces/i-pxe.d.ts +21 -0
  216. package/dist/interfaces/i-pxe.js +8 -39
  217. package/dist/interfaces/i-remix.d.ts +21 -0
  218. package/dist/interfaces/i-remix.js +3 -4
  219. package/dist/interfaces/i-settings.d.ts +39 -0
  220. package/dist/interfaces/i-settings.js +8 -2
  221. package/dist/interfaces/i-user.d.ts +14 -0
  222. package/dist/interfaces/i-user.js +8 -2
  223. package/dist/interfaces/i-workdir.d.ts +14 -0
  224. package/dist/interfaces/i-workdir.js +8 -2
  225. package/dist/interfaces/i-xkb-model.d.ts +24 -0
  226. package/dist/interfaces/i-xkb-model.js +8 -2
  227. package/dist/interfaces/index.d.ts +25 -0
  228. package/dist/interfaces/index.js +3 -4
  229. package/dist/krill/modules/add-user.d.ts +20 -0
  230. package/dist/krill/modules/add-user.js +11 -15
  231. package/dist/krill/modules/bootloader-config-arch.d.ts +14 -0
  232. package/dist/krill/modules/bootloader-config-arch.js +15 -11
  233. package/dist/krill/modules/bootloader-config-debian.d.ts +10 -0
  234. package/dist/krill/modules/bootloader-config-debian.js +20 -16
  235. package/dist/krill/modules/bootloader-config.d.ts +10 -0
  236. package/dist/krill/modules/bootloader-config.js +3 -6
  237. package/dist/krill/modules/bootloader.d.ts +14 -0
  238. package/dist/krill/modules/bootloader.js +9 -13
  239. package/dist/krill/modules/change-password.d.ts +15 -0
  240. package/dist/krill/modules/change-password.js +5 -8
  241. package/dist/krill/modules/del-live-user.d.ts +14 -0
  242. package/dist/krill/modules/del-live-user.js +8 -12
  243. package/dist/krill/modules/fstab.d.ts +14 -0
  244. package/dist/krill/modules/fstab.js +69 -46
  245. package/dist/krill/modules/grubcfg.d.ts +17 -0
  246. package/dist/krill/modules/grubcfg.js +8 -17
  247. package/dist/krill/modules/hostname.d.ts +13 -0
  248. package/dist/krill/modules/hostname.js +11 -17
  249. package/dist/krill/modules/initramfs-cfg.d.ts +14 -0
  250. package/dist/krill/modules/initramfs-cfg.js +6 -15
  251. package/dist/krill/modules/initramfs.d.ts +13 -0
  252. package/dist/krill/modules/initramfs.js +17 -19
  253. package/dist/krill/modules/locale-cfg.d.ts +10 -0
  254. package/dist/krill/modules/locale-cfg.js +8 -12
  255. package/dist/krill/modules/locale.d.ts +13 -0
  256. package/dist/krill/modules/locale.js +7 -11
  257. package/dist/krill/modules/m-keyboard.d.ts +14 -0
  258. package/dist/krill/modules/m-keyboard.js +14 -18
  259. package/dist/krill/modules/m-timezone.d.ts +14 -0
  260. package/dist/krill/modules/m-timezone.js +8 -12
  261. package/dist/krill/modules/machine-id.d.ts +15 -0
  262. package/dist/krill/modules/machine-id.js +6 -10
  263. package/dist/krill/modules/mkfs.d.ts +13 -0
  264. package/dist/krill/modules/mkfs.js +33 -23
  265. package/dist/krill/modules/mount-fs.d.ts +17 -0
  266. package/dist/krill/modules/mount-fs.js +20 -26
  267. package/dist/krill/modules/mount-vfs.d.ts +17 -0
  268. package/dist/krill/modules/mount-vfs.js +16 -21
  269. package/dist/krill/modules/network-cfg.d.ts +19 -0
  270. package/dist/krill/modules/network-cfg.js +28 -31
  271. package/dist/krill/modules/packages.d.ts +14 -0
  272. package/dist/krill/modules/packages.js +17 -21
  273. package/dist/krill/modules/partition.d.ts +20 -0
  274. package/dist/krill/modules/partition.js +80 -86
  275. package/dist/krill/modules/remove-installer-link.d.ts +13 -0
  276. package/dist/krill/modules/remove-installer-link.js +7 -11
  277. package/dist/krill/modules/umount.d.ts +14 -0
  278. package/dist/krill/modules/umount.js +9 -13
  279. package/dist/krill/modules/unpackfs.d.ts +13 -0
  280. package/dist/krill/modules/unpackfs.js +7 -11
  281. package/dist/krill/prepare.d.ts +77 -0
  282. package/dist/krill/{krill-prepare.js → prepare.js} +136 -130
  283. package/dist/krill/sequence.d.ts +156 -0
  284. package/dist/krill/sequence.js +640 -0
  285. package/dist/lib/cli-autologin.d.ts +43 -0
  286. package/dist/lib/cli-autologin.js +88 -92
  287. package/dist/lib/get_address.d.ts +8 -0
  288. package/dist/lib/get_address.js +9 -11
  289. package/dist/lib/get_dns.d.ts +8 -0
  290. package/dist/lib/get_dns.js +9 -11
  291. package/dist/lib/get_domain.d.ts +8 -0
  292. package/dist/lib/get_domain.js +9 -11
  293. package/dist/lib/get_gateway.d.ts +8 -0
  294. package/dist/lib/get_gateway.js +9 -11
  295. package/dist/lib/get_hostname.d.ts +8 -0
  296. package/dist/lib/get_hostname.js +9 -11
  297. package/dist/lib/get_netmask.d.ts +8 -0
  298. package/dist/lib/get_netmask.js +9 -11
  299. package/dist/lib/get_password.d.ts +8 -0
  300. package/dist/lib/get_password.js +10 -13
  301. package/dist/lib/get_userfullname.d.ts +8 -0
  302. package/dist/lib/get_userfullname.js +9 -11
  303. package/dist/lib/get_username.d.ts +8 -0
  304. package/dist/lib/get_username.js +9 -12
  305. package/dist/lib/kill_me_softly.d.ts +11 -0
  306. package/dist/lib/kill_me_softly.js +19 -24
  307. package/dist/lib/select_address_type.d.ts +8 -0
  308. package/dist/lib/select_address_type.js +9 -12
  309. package/dist/lib/select_filesystem_type.d.ts +8 -0
  310. package/dist/lib/select_filesystem_type.js +19 -17
  311. package/dist/lib/select_installation_device.d.ts +8 -0
  312. package/dist/lib/select_installation_device.js +11 -15
  313. package/dist/lib/select_installation_mode.d.ts +8 -0
  314. package/dist/lib/select_installation_mode.js +9 -11
  315. package/dist/lib/select_interface.d.ts +8 -0
  316. package/dist/lib/select_interface.js +9 -12
  317. package/dist/lib/select_keyboard_layout.d.ts +11 -0
  318. package/dist/lib/select_keyboard_layout.js +11 -15
  319. package/dist/lib/select_keyboard_model.d.ts +11 -0
  320. package/dist/lib/select_keyboard_model.js +11 -15
  321. package/dist/lib/select_keyboard_option.d.ts +11 -0
  322. package/dist/lib/select_keyboard_option.js +11 -15
  323. package/dist/lib/select_keyboard_variant.d.ts +11 -0
  324. package/dist/lib/select_keyboard_variant.js +11 -15
  325. package/dist/lib/select_languages.d.ts +8 -0
  326. package/dist/lib/select_languages.js +11 -15
  327. package/dist/lib/select_regions.d.ts +8 -0
  328. package/dist/lib/select_regions.js +9 -11
  329. package/dist/lib/select_user_swap_choice.d.ts +8 -0
  330. package/dist/lib/select_user_swap_choice.js +13 -17
  331. package/dist/lib/select_zones.d.ts +8 -0
  332. package/dist/lib/select_zones.js +9 -11
  333. package/dist/lib/utils.d.ts +34 -0
  334. package/dist/lib/utils.js +24 -14
  335. package/manpages/doc/man/eggs.1.gz +0 -0
  336. package/manpages/doc/man/eggs.html +130 -76
  337. package/package.json +55 -74
  338. package/scripts/_eggs +9 -7
  339. package/scripts/eggs.bash +4 -4
  340. package/LICENSE +0 -339
  341. package/bin/dev +0 -17
  342. package/bin/run +0 -5
  343. package/conf/exclude.list.custom +0 -3
  344. package/dist/components/elements/information.js +0 -194
  345. package/dist/components/elements/steps.js +0 -152
  346. package/dist/components/elements/title.js +0 -36
  347. package/dist/interfaces/i-filters.js +0 -3
  348. package/dist/krill/krill-sequence.js +0 -645
  349. package/dist/lib/dependencies.js +0 -120
  350. package/manpages/doc/man/README.md +0 -0
  351. /package/conf/{exclude.list.usr → exclude.list.d/usr.list} +0 -0
@@ -1,243 +1,179 @@
1
- "use strict";
2
1
  /**
3
- * penguins-eggs
4
- * command: syncto.ts
2
+ * ./src/commands/syncto.ts
3
+ * penguins-eggs v.10.0.0 / ecmascript 2020
5
4
  * author: Piero Proietti
6
5
  * email: piero.proietti@gmail.com
7
6
  * license: MIT
8
7
  */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- const tslib_1 = require("tslib");
8
+ // https://gist.github.com/ansemjo/6f1cf9d9b8f7ce8f70813f52c63b74a6
9
+ import { Command, Flags } from '@oclif/core';
10
+ import fs from 'node:fs';
11
+ import Compressors from '../classes/compressors.js';
12
+ import Settings from '../classes/settings.js';
13
+ import Utils from '../classes/utils.js';
14
+ import { exec } from '../lib/utils.js';
11
15
  /**
12
16
  *
13
- * syncfrom (restore)
14
- * --include-from file.list // if only include is provided everything from the list if used to update the system.
15
- * --exclude-from file-list // it just updates the system
16
- * --delete
17
- *
18
- * If both options are provided then it works as a combination as provided in the link above.
19
- * https://stackoverflow.com/questions/19296190/rsync-include-from-vs-exclude-from-what-is-the-actual-difference
20
- *
21
- * The same logic is applied for the syncto also.
22
- *
23
- * On top of all of this the --delete option
24
- * if needed to be passed so that everything else is removed, but this
25
- * this should not be available by default
26
17
  */
27
- const core_1 = require("@oclif/core");
28
- const fs_1 = tslib_1.__importDefault(require("fs"));
29
- const path_1 = tslib_1.__importDefault(require("path"));
30
- const utils_1 = tslib_1.__importDefault(require("../classes/utils"));
31
- const utils_2 = require("../lib/utils");
32
- // backup
33
- const promises_1 = require("fs/promises");
34
- const fs_2 = require("fs");
35
- const users_1 = tslib_1.__importDefault(require("../classes/users"));
36
- /**
37
- *
38
- */
39
- class Syncto extends core_1.Command {
40
- constructor() {
41
- super(...arguments);
42
- this.verbose = false;
43
- this.echo = {};
44
- this.luksName = 'luks-eggs-backup';
45
- this.luksFile = `/run/live/medium/live/${this.luksName}`;
46
- this.luksDevice = `/dev/mapper/${this.luksName}`;
47
- this.luksMountpoint = '/tmp/eggs-backup';
48
- }
18
+ export default class Syncto extends Command {
19
+ static description = 'Save users and users\' data ENCRYPTED';
20
+ static examples = [
21
+ 'sudo eggs syncto',
22
+ 'sudo eggs syncto --file /path/to/luks-volume',
23
+ 'sudo eggs syncto --excludes'
24
+ ];
25
+ static flags = {
26
+ excludes: Flags.boolean({ char: 'e', description: 'use: exclude.list.d/home.list' }),
27
+ file: Flags.string({ char: 'f', description: 'file luks-volume encrypted' }),
28
+ help: Flags.help({ char: 'h' }),
29
+ verbose: Flags.boolean({ char: 'v', description: 'verbose' }),
30
+ };
31
+ echo = {};
32
+ exclude = false;
33
+ excludeHome = '/etc/penguins-eggs.d/exclude.list.d/home.list';
34
+ luksName = 'luks-volume';
35
+ luksDevice = `/dev/mapper/${this.luksName}`;
36
+ luksFile = `/tmp/${this.luksName}`;
37
+ luksMountpoint = `/tmp/mnt/${this.luksName}`;
38
+ privateSquashfs = `private.squashfs`;
39
+ settings = {};
40
+ verbose = false;
49
41
  /**
50
42
  *
51
43
  */
52
- async run() {
53
- const { flags } = await this.parse(Syncto);
54
- if (flags.verbose) {
55
- this.verbose = true;
56
- }
57
- this.echo = utils_1.default.setEcho(this.verbose);
58
- let fileVolume = '';
59
- if (flags.file) {
60
- fileVolume = flags.file;
61
- }
62
- let destDelete = false;
63
- if (flags.delete) {
64
- destDelete = true;
65
- }
66
- if (utils_1.default.isRoot()) {
67
- /**
68
- * restore con file
69
- */
70
- if (fileVolume === '') {
71
- fileVolume = '/tmp/luks-eggs-data';
72
- }
73
- this.luksName = path_1.default.basename(fileVolume);
74
- this.luksFile = fileVolume;
75
- this.luksDevice = `/dev/mapper/${this.luksName}`;
76
- this.luksMountpoint = '/tmp/eggs-data';
77
- if (!fs_1.default.existsSync(fileVolume)) {
78
- await this.luksCreate();
44
+ async luksCreate() {
45
+ await exec(`rm -rf ${this.luksFile}`);
46
+ // ==========================================================================
47
+ // Create squashfs
48
+ // ==========================================================================
49
+ Utils.warning(`Creating private.squashfs`);
50
+ const compressors = new Compressors();
51
+ await compressors.populate();
52
+ // comp
53
+ let comp = '';
54
+ this.settings = new Settings();
55
+ if (await this.settings.load()) {
56
+ let compression = compressors.fast();
57
+ if (this.settings.config.compression == `max`) {
58
+ compression = compressors.max();
79
59
  }
80
- else {
81
- utils_1.default.warning(`LUKS volume: ${this.luksFile} exist, don't need create`);
60
+ else if (this.settings.config.compression == `standard`) {
61
+ compression = compressors.standard();
82
62
  }
83
- if (fs_1.default.existsSync(fileVolume)) {
84
- await this.luksOpen();
85
- await this.backup(destDelete);
86
- await this.luksClose();
63
+ comp = `-comp ${compression}`;
64
+ }
65
+ // exclude /home/eggs
66
+ let exclude_nest = '';
67
+ if (fs.existsSync(this.settings.work_dir.workdir)) {
68
+ exclude_nest = `-e ${this.settings.config.snapshot_dir}`;
69
+ }
70
+ // exclude file
71
+ let exclude_home = '';
72
+ if (this.exclude) {
73
+ exclude_home = `-ef ${this.excludeHome}`;
74
+ }
75
+ // creato dummyfs per /etc/
76
+ await exec(`mkdir -p /tmp/dummyfs/etc`, this.echo);
77
+ await exec(`cp -a /etc/passwd /tmp/dummyfs/etc`, this.echo);
78
+ await exec(`cp -a /etc/group /tmp/dummyfs/etc`, this.echo);
79
+ await exec(`cp -a /etc/shadow /tmp/dummyfs/etc`, this.echo);
80
+ await exec(`mkdir -p /tmp/dummyfs/etc/lightdm`, this.echo); // lightdm
81
+ await exec(`cp -a /etc/lightdm/lightdm.conf /tmp/dummyfs/etc/lightdm/`, this.echo); // lightdm
82
+ let mkPrivateSquashfs = `mksquashfs \
83
+ /tmp/dummyfs/etc \
84
+ /home \
85
+ /tmp/${this.privateSquashfs} \
86
+ ${comp} \
87
+ ${exclude_nest} \
88
+ ${exclude_home} \
89
+ -keep-as-directory \
90
+ -noappend`;
91
+ mkPrivateSquashfs = mkPrivateSquashfs.replaceAll(/\s\s+/g, ` `);
92
+ await exec(mkPrivateSquashfs, Utils.setEcho(true));
93
+ // remove dummyfs
94
+ await exec(`rm /tmp/dummyfs/ -rf`, this.echo);
95
+ // ==========================================================================
96
+ // Create LUKS volume
97
+ // ==========================================================================
98
+ Utils.titles("Creating LUKS Volume");
99
+ // calcolo size
100
+ const sizeString = (await exec(`unsquashfs -s /tmp/${this.privateSquashfs} | grep "Filesystem size" | sed -e 's/.*size //' -e 's/ .*//'`, { capture: true, echo: false })).data;
101
+ let size = Number.parseInt(sizeString) + 2048;
102
+ console.log("size private.squashfs:", bytesToGB(size), size);
103
+ const luksBlockSize = 512;
104
+ const luksBlocks = Math.ceil(size / luksBlockSize);
105
+ size = luksBlockSize * luksBlocks;
106
+ // Aggiungo un 20% in più per ottenere luksSize
107
+ const luksSize = Math.ceil((size) * 1.2);
108
+ console.log("luksSize:", bytesToGB(luksSize), luksSize);
109
+ // truncate * 2048 è cruciale
110
+ const truncateAt = luksSize * 2048;
111
+ Utils.warning(`Preparing file ${this.luksFile} for ${this.luksDevice}, size ${truncateAt}`);
112
+ await exec(`truncate --size ${luksSize} ${this.luksFile}`, this.echo);
113
+ Utils.warning(`Creating LUKS Volume on ${this.luksFile}`);
114
+ await exec(`cryptsetup --batch-mode luksFormat ${this.luksFile}`, Utils.setEcho(true));
115
+ console.log('');
116
+ // open LUKS volume temp
117
+ Utils.warning(`Opening LUKS Volume on ${this.luksFile}`);
118
+ const { code } = await exec(`cryptsetup luksOpen ${this.luksFile} ${this.luksName}`, Utils.setEcho(true));
119
+ if (code != 0) {
120
+ Utils.error(`cryptsetup luksOpen ${this.luksFile} ${this.luksName} failed`);
121
+ process.exit(code);
122
+ }
123
+ await exec('udevadm settle', this.echo);
124
+ // formatta ext4 il volume
125
+ await exec(`mkfs.ext4 ${this.luksDevice}`, this.echo);
126
+ console.log('');
127
+ // mount LUKS volume
128
+ if (!fs.existsSync(`this.luksMountpoint)`)) {
129
+ Utils.warning(`creating mountpoint ${this.luksMountpoint}`);
130
+ await exec(`mkdir -p ${this.luksMountpoint}`, this.echo);
131
+ }
132
+ if (!Utils.isMountpoint(`${this.luksMountpoint}`)) {
133
+ Utils.warning(`mounting volume: ${this.luksDevice} on ${this.luksMountpoint}`);
134
+ const { code } = await exec(`mount ${this.luksDevice} ${this.luksMountpoint}`, Utils.setEcho(true));
135
+ if (code != 0) {
136
+ Utils.error(`mount ${this.luksDevice} ${this.luksMountpoint} failed`);
137
+ process.exit(code);
87
138
  }
88
139
  }
89
- else {
90
- utils_1.default.useRoot(this.id);
91
- }
140
+ // copy private.squashfs
141
+ Utils.warning(`moving /tmp/${this.privateSquashfs} to ${this.luksMountpoint}`);
142
+ await exec(`mv /tmp/${this.privateSquashfs} ${this.luksMountpoint}`, this.echo);
143
+ Utils.warning(`Umounting ${this.luksMountpoint}`);
144
+ await exec(`umount ${this.luksMountpoint}`, this.echo);
145
+ Utils.warning(`Vlosing ${this.luksMountpoint}`);
146
+ await exec(`cryptsetup luksClose ${this.luksName}`, this.echo);
92
147
  }
93
148
  /**
94
149
  *
95
150
  */
96
- async backup(destDelete = false) {
97
- if (this.verbose) {
98
- utils_1.default.warning('backup');
99
- }
100
- utils_1.default.warning(`Saving users' data on ${this.luksFile}`);
101
- const usersArray = await this.usersFill();
102
- for (const element of usersArray) {
103
- if (element.saveIt && fs_1.default.existsSync(element.home)) {
104
- await (0, utils_2.exec)(`mkdir -p ${this.luksMountpoint}/ROOT${element.home}`, this.echo);
105
- const source = element.home;
106
- let dest = this.luksMountpoint + '/ROOT' + element.home;
107
- dest = dest.slice(0, Math.max(0, dest.lastIndexOf('/')));
108
- let cmd = `rsync --archive ${source} ${dest}`;
109
- if (destDelete) {
110
- cmd = `rsync --archive --delete ${source} ${dest}`;
111
- }
112
- await (0, utils_2.exec)(cmd, this.echo);
113
- }
114
- }
115
- utils_1.default.warning(`Saving users' accounts on ${this.luksFile}`);
116
- await (0, utils_2.exec)(`mkdir -p ${this.luksMountpoint}/etc`, this.echo);
117
- await (0, utils_2.exec)(`cp /etc/passwd ${this.luksMountpoint}/etc`, this.echo);
118
- await (0, utils_2.exec)(`cp /etc/shadow ${this.luksMountpoint}/etc`, this.echo);
119
- await (0, utils_2.exec)(`cp /etc/group ${this.luksMountpoint}/etc`, this.echo);
120
- }
121
- /**
122
- * usersFill
123
- */
124
- async usersFill() {
125
- const usersArray = [];
126
- await (0, promises_1.access)('/etc/passwd', fs_2.constants.R_OK | fs_2.constants.W_OK);
127
- const passwd = fs_1.default.readFileSync('/etc/passwd', 'utf-8').split('\n');
128
- for (const element of passwd) {
129
- const line = element.split(':');
130
- const users = new users_1.default(line[0], line[1], line[2], line[3], line[4], line[5], line[6]);
131
- await users.getValues();
132
- if (users.password !== undefined) {
133
- usersArray.push(users);
134
- }
135
- }
136
- return usersArray;
137
- }
138
- /**
139
- *
140
- */
141
- async luksCreate() {
142
- utils_1.default.warning(`Creating LUKS Volume on ${this.luksFile}`);
143
- let totalSize = 0;
144
- console.log('I will extimate volume size from your private data:');
145
- const users = await this.usersFill();
146
- for (const user of users) {
147
- if (user.login !== 'root' && user.saveIt) {
148
- let utype = 'user ';
149
- if (Number.parseInt(user.uid) < 1000) {
150
- utype = 'service';
151
- }
152
- console.log(`- ${utype}: ${user.login.padEnd(16)} \thome: ${user.home} \tsize: ${utils_1.default.formatBytes(user.size)} \tBytes: ${user.size} `);
153
- totalSize += user.size;
154
- }
155
- }
156
- console.log(`Total\t\t\t\t\t\t\tsize: ${utils_1.default.formatBytes(totalSize)} \tBytes: ${totalSize}`);
157
- /**
158
- * after we get size, we can start building luks-volume
159
- */
160
- const binaryHeaderSize = 4194304;
161
- const volumeSize = totalSize * 1.5 + binaryHeaderSize;
162
- // Deciding blockSize and blocks
163
- const blockSize = 512;
164
- let blocks = Math.ceil(volumeSize / blockSize);
165
- // We need a minimum size of 32 MB
166
- const minimunSize = 134217728; // 128 * 1024 *1024
167
- if (totalSize < minimunSize) { }
168
- if (blocks * blockSize < minimunSize) {
169
- blocks = Math.ceil(minimunSize / blockSize);
170
- }
171
- utils_1.default.warning(`Creating an encrypted file ${this.luksFile} blocks=${blocks}, block size: ${blockSize}, size: ${utils_1.default.formatBytes(blocks * blockSize)}`);
172
- await (0, utils_2.exec)(`dd if=/dev/zero of=${this.luksFile} bs=${blockSize} count=${blocks}`, this.echo);
173
- // find first unused device
174
- const findFirstUnusedDevice = await (0, utils_2.exec)('losetup -f', { echo: this.verbose, ignore: false, capture: true });
175
- let firstUnusedDevice = '';
176
- if (findFirstUnusedDevice.code !== 0) {
177
- utils_1.default.pressKeyToExit(`Error: ${findFirstUnusedDevice.code} ${findFirstUnusedDevice.data}`);
178
- }
179
- else {
180
- firstUnusedDevice = findFirstUnusedDevice.data.trim();
181
- }
182
- await (0, utils_2.exec)(`losetup ${firstUnusedDevice} ${this.luksFile}`, this.echo);
183
- // Utils.warning('Enter a large string of random text below to setup the pre-encryption')
184
- await (0, utils_2.exec)(`cryptsetup -y -v --type luks2 luksFormat ${this.luksFile}`, utils_1.default.setEcho(true));
185
- // Utils.warning(`Enter the desired passphrase for the encrypted ${this.luksName} below`)
186
- const crytoSetup = await (0, utils_2.exec)(`cryptsetup luksOpen --type luks2 ${this.luksFile} ${this.luksName}`, utils_1.default.setEcho(true));
187
- if (crytoSetup.code !== 0) {
188
- utils_1.default.pressKeyToExit(`Error: ${crytoSetup.code} ${crytoSetup.data}`);
189
- }
190
- utils_1.default.warning(`Formatting ${this.luksDevice} to ext2`);
191
- const formatting = await (0, utils_2.exec)(`sudo mkfs.ext2 ${this.luksDevice}`, this.echo);
192
- if (formatting.code !== 0) {
193
- utils_1.default.pressKeyToExit(`Error: ${formatting.code} ${formatting.data}`);
194
- }
195
- // this.luksClose()
196
- }
197
- /**
198
- *
199
- */
200
- async luksOpen() {
201
- if (!fs_1.default.existsSync(this.luksDevice)) {
202
- // Utils.warning(`LUKS open volume: ${this.luksName}`)
203
- await (0, utils_2.exec)(`cryptsetup luksOpen --type luks2 ${this.luksFile} ${this.luksName}`, utils_1.default.setEcho(true));
151
+ async run() {
152
+ Utils.titles(this.id + ' ' + this.argv);
153
+ const { flags } = await this.parse(Syncto);
154
+ if (flags.verbose) {
155
+ this.verbose = true;
204
156
  }
205
- else {
206
- utils_1.default.warning(`LUKS volume: ${this.luksName} already open`);
157
+ this.echo = Utils.setEcho(this.verbose);
158
+ let fileLuks = '';
159
+ if (flags.file) {
160
+ fileLuks = flags.file;
207
161
  }
208
- if (!fs_1.default.existsSync(this.luksMountpoint)) {
209
- await (0, utils_2.exec)(`mkdir -p ${this.luksMountpoint}`, this.echo);
162
+ if (flags.excludes) {
163
+ this.exclude = true;
210
164
  }
211
- if (!utils_1.default.isMountpoint(this.luksMountpoint)) {
212
- utils_1.default.warning(`mount volume: ${this.luksDevice} on ${this.luksMountpoint}`);
213
- await (0, utils_2.exec)(`mount ${this.luksDevice} ${this.luksMountpoint}`, this.echo);
165
+ if (Utils.isRoot()) {
166
+ await this.luksCreate();
214
167
  }
215
168
  else {
216
- utils_1.default.warning(`mount volume: ${this.luksDevice} already mounted on ${this.luksMountpoint}`);
217
- }
218
- }
219
- /**
220
- *
221
- */
222
- async luksClose() {
223
- if (utils_1.default.isMountpoint(this.luksMountpoint)) {
224
- await (0, utils_2.exec)(`umount ${this.luksMountpoint}`, this.echo);
225
- }
226
- if (fs_1.default.existsSync(this.luksDevice)) {
227
- utils_1.default.warning(`LUKS close volume: ${this.luksName}`);
228
- await (0, utils_2.exec)(`cryptsetup luksClose ${this.luksName}`, this.echo);
169
+ Utils.useRoot(this.id);
229
170
  }
230
171
  }
231
172
  }
232
- Syncto.flags = {
233
- delete: core_1.Flags.string({ description: 'rsync --delete delete extraneous files from dest dirs' }),
234
- file: core_1.Flags.string({ char: 'f', description: 'file LUKS volume encrypted' }),
235
- help: core_1.Flags.help({ char: 'h' }),
236
- verbose: core_1.Flags.boolean({ char: 'v', description: 'verbose' }),
237
- };
238
- Syncto.description = 'saves users and user data in a LUKS volume inside the iso';
239
- Syncto.examples = [
240
- 'sudo eggs syncto',
241
- 'sudo eggs syncto --file /path/to/fileLUKS',
242
- ];
243
- exports.default = Syncto;
173
+ /**
174
+ * Convert bytes to gigabytes
175
+ */
176
+ function bytesToGB(bytes) {
177
+ const gigabytes = bytes / 1_073_741_824;
178
+ return gigabytes.toFixed(2) + ' GB';
179
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ./src/commands/tools/clean.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 { Command } from '@oclif/core';
9
+ export default class Clean extends Command {
10
+ static description: string;
11
+ static examples: string[];
12
+ static flags: {
13
+ help: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<void>;
14
+ nointeractive: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
15
+ verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
@@ -1,43 +1,39 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
1
  /**
5
- * penguins-eggs
6
- * command: clean.ts
2
+ * ./src/commands/tools/clean.ts
3
+ * penguins-eggs v.10.0.0 / ecmascript 2020
7
4
  * author: Piero Proietti
8
5
  * email: piero.proietti@gmail.com
9
6
  * license: MIT
10
7
  */
11
- const core_1 = require("@oclif/core");
12
- const utils_1 = tslib_1.__importDefault(require("../../classes/utils"));
13
- const bleach_1 = tslib_1.__importDefault(require("../../classes/bleach"));
14
- class Clean extends core_1.Command {
8
+ import { Command, Flags } from '@oclif/core';
9
+ import Bleach from '../../classes/bleach.js';
10
+ import Utils from '../../classes/utils.js';
11
+ export default class Clean extends Command {
12
+ static description = 'clean system log, apt, etc';
13
+ static examples = [
14
+ 'sudo eggs tools clean',
15
+ ];
16
+ static flags = {
17
+ help: Flags.help({ char: 'h' }),
18
+ nointeractive: Flags.boolean({ char: 'n', description: 'no user interaction' }),
19
+ verbose: Flags.boolean({ char: 'v', description: 'verbose' }),
20
+ };
15
21
  async run() {
16
22
  const { flags } = await this.parse(Clean);
17
- utils_1.default.titles(this.id + ' ' + this.argv);
23
+ Utils.titles(this.id + ' ' + this.argv);
18
24
  let verbose = false;
19
25
  if (flags.verbose) {
20
26
  verbose = true;
21
27
  }
22
- const nointeractive = flags.nointeractive;
23
- if (utils_1.default.isRoot()) {
24
- if (nointeractive || await utils_1.default.customConfirm('Select yes to continue...')) {
25
- const bleach = new bleach_1.default();
28
+ const { nointeractive } = flags;
29
+ if (Utils.isRoot()) {
30
+ if (nointeractive || await Utils.customConfirm('Select yes to continue...')) {
31
+ const bleach = new Bleach();
26
32
  bleach.clean(verbose);
27
33
  }
28
34
  }
29
35
  else {
30
- utils_1.default.useRoot(this.id);
36
+ Utils.useRoot(this.id);
31
37
  }
32
38
  }
33
39
  }
34
- Clean.flags = {
35
- help: core_1.Flags.help({ char: 'h' }),
36
- nointeractive: core_1.Flags.boolean({ char: 'n', description: 'no user interaction' }),
37
- verbose: core_1.Flags.boolean({ char: 'v', description: 'verbose' }),
38
- };
39
- Clean.description = 'clean system log, apt, etc';
40
- Clean.examples = [
41
- 'sudo eggs tools clean',
42
- ];
43
- exports.default = Clean;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ./src/commands/tools/ppa.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 { Command } from '@oclif/core';
9
+ /**
10
+ *
11
+ */
12
+ export default class Ppa extends Command {
13
+ static description: string;
14
+ static examples: string[];
15
+ static flags: {
16
+ add: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
17
+ help: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<void>;
18
+ nointeractive: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
19
+ remove: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
20
+ verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
21
+ };
22
+ /**
23
+ *
24
+ */
25
+ run(): Promise<void>;
26
+ }