penguins-eggs 9.3.14 → 9.3.20

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.
@@ -10,6 +10,14 @@ const tslib_1 = require("tslib");
10
10
  const core_1 = require("@oclif/core");
11
11
  const utils_1 = tslib_1.__importDefault(require("../classes/utils"));
12
12
  const krill_prepare_1 = tslib_1.__importDefault(require("../krill/krill-prepare"));
13
+ const node_path_1 = tslib_1.__importDefault(require("node:path"));
14
+ const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
15
+ const fs_1 = tslib_1.__importDefault(require("fs"));
16
+ const axios_1 = tslib_1.__importDefault(require("axios"));
17
+ const node_https_1 = tslib_1.__importDefault(require("node:https"));
18
+ const agent = new node_https_1.default.Agent({
19
+ rejectUnauthorized: false
20
+ });
13
21
  /**
14
22
  * Class Krill
15
23
  */
@@ -20,7 +28,29 @@ class Install extends core_1.Command {
20
28
  async run() {
21
29
  utils_1.default.titles(this.id + ' ' + this.argv);
22
30
  const { flags } = await this.parse(Install);
31
+ let custom = flags.custom;
23
32
  let unattended = flags.unattended;
33
+ if (unattended) {
34
+ custom = 'us';
35
+ }
36
+ // krillConfig
37
+ let krillConfig = {};
38
+ if (custom !== undefined) {
39
+ let fname = node_path_1.default.basename(custom);
40
+ unattended = true;
41
+ let url = `https://raw.githubusercontent.com/pieroproietti/penguins-wardrobe/main/config/${fname}.yaml`;
42
+ let res;
43
+ await axios_1.default.get(url, { httpsAgent: agent })
44
+ .then(function (response) {
45
+ krillConfig = js_yaml_1.default.load(response.data);
46
+ })
47
+ .catch(function (error) {
48
+ const content = fs_1.default.readFileSync('/etc/penguins-eggs.d/krill.yaml', 'utf8');
49
+ krillConfig = js_yaml_1.default.load(content);
50
+ });
51
+ }
52
+ // noninteractive
53
+ let noninteractive = flags.nointeractive;
24
54
  // hostname
25
55
  let ip = flags.ip;
26
56
  let random = flags.random;
@@ -41,7 +71,7 @@ class Install extends core_1.Command {
41
71
  if (utils_1.default.isRoot()) {
42
72
  if (utils_1.default.isLive()) {
43
73
  const krill = new krill_prepare_1.default();
44
- await krill.prepare(unattended, ip, random, domain, suspend, small, none, crypted, pve, verbose);
74
+ await krill.prepare(unattended, noninteractive, krillConfig, ip, random, domain, suspend, small, none, crypted, pve, verbose);
45
75
  }
46
76
  else {
47
77
  utils_1.default.warning('You are in an installed system!');
@@ -55,6 +85,8 @@ class Install extends core_1.Command {
55
85
  exports.default = Install;
56
86
  Install.flags = {
57
87
  unattended: core_1.Flags.boolean({ char: 'u', description: 'Unattended installation' }),
88
+ custom: core_1.Flags.string({ char: 'c', description: 'custom unattended configuration' }),
89
+ nointeractive: core_1.Flags.boolean({ char: 'n', description: 'assume yes' }),
58
90
  // hostname
59
91
  ip: core_1.Flags.boolean({ char: 'i', description: 'hostname as ip, eg: ip-192-168-1-33' }),
60
92
  random: core_1.Flags.boolean({ char: 'r', description: 'Add random to hostname, eg: colibri-ay412dt' }),
@@ -64,8 +96,8 @@ Install.flags = {
64
96
  // swap: Flags.string({char: 's', description: 'swap: none, small, suspend'}),
65
97
  suspend: core_1.Flags.boolean({ char: 'S', description: 'Swap suspend: RAM x 2' }),
66
98
  small: core_1.Flags.boolean({ char: 's', description: 'Swap small: RAM' }),
67
- none: core_1.Flags.boolean({ char: 'n', description: 'Swap none: 256M' }),
68
- //
99
+ none: core_1.Flags.boolean({ char: 'N', description: 'Swap none: 256M' }),
100
+ //
69
101
  crypted: core_1.Flags.boolean({ char: 'k', description: 'Crypted CLI installation' }),
70
102
  pve: core_1.Flags.boolean({ char: 'p', description: 'Proxmox VE install' }),
71
103
  // generic
@@ -74,6 +74,7 @@ class Produce extends core_1.Command {
74
74
  const verbose = flags.verbose;
75
75
  const scriptOnly = flags.script;
76
76
  const yolkRenew = flags.yolk;
77
+ const nointeractive = flags.nointeractive;
77
78
  /**
78
79
  * theme: if not defined will use eggs
79
80
  */
@@ -90,7 +91,6 @@ class Produce extends core_1.Command {
90
91
  }
91
92
  }
92
93
  }
93
- const nointeractive = false;
94
94
  const i = await config_1.default.thatWeNeed(nointeractive, verbose, backup);
95
95
  if ((i.needApt || i.configurationInstall || i.configurationRefresh || i.distroTemplate) && (await utils_1.default.customConfirm('Select yes to continue...'))) {
96
96
  await config_1.default.install(i, verbose);
@@ -113,8 +113,8 @@ class Produce extends core_1.Command {
113
113
  utils_1.default.titles(this.id + ' ' + this.argv);
114
114
  const ovary = new ovary_1.default();
115
115
  utils_1.default.warning('Produce an egg...');
116
- if (await ovary.fertilization(prefix, basename, theme, compression)) {
117
- await ovary.produce(backup, clone, scriptOnly, yolkRenew, release, myAddons, verbose);
116
+ if (await ovary.fertilization(prefix, basename, theme, compression, !nointeractive)) {
117
+ await ovary.produce(backup, clone, scriptOnly, yolkRenew, release, myAddons, nointeractive, verbose);
118
118
  ovary.finished(scriptOnly);
119
119
  }
120
120
  }
@@ -130,7 +130,7 @@ Produce.flags = {
130
130
  backup: core_1.Flags.boolean({ char: 'b', description: 'backup mode (CRYPTED)' }),
131
131
  clone: core_1.Flags.boolean({ char: 'c', description: 'clone mode' }),
132
132
  fast: core_1.Flags.boolean({ char: 'f', description: 'fast compression' }),
133
- normal: core_1.Flags.boolean({ char: 'n', description: 'normal compression' }),
133
+ // normal: Flags.boolean({ char: 'n', description: 'normal compression' }),
134
134
  max: core_1.Flags.boolean({ char: 'm', description: 'max compression' }),
135
135
  verbose: core_1.Flags.boolean({ char: 'v', description: 'verbose' }),
136
136
  yolk: core_1.Flags.boolean({ char: 'y', description: '-y force yolk renew' }),
@@ -138,7 +138,8 @@ Produce.flags = {
138
138
  help: core_1.Flags.help({ char: 'h' }),
139
139
  theme: core_1.Flags.string({ description: 'theme for livecd, calamares branding and partitions' }),
140
140
  addons: core_1.Flags.string({ multiple: true, description: 'addons to be used: adapt, ichoice, pve, rsupport' }),
141
- release: core_1.Flags.boolean({ description: 'release: max compression, remove penguins-eggs and calamares after installation' })
141
+ release: core_1.Flags.boolean({ description: 'release: max compression, remove penguins-eggs and calamares after installation' }),
142
+ nointeractive: core_1.Flags.boolean({ char: 'n', description: 'don\'t ask for user interctions' })
142
143
  };
143
144
  Produce.description = 'produce a live image from your system whithout your data';
144
145
  Produce.examples = [
@@ -1,5 +1,16 @@
1
1
  "use strict";
2
- /**
3
- * calamares module packages
4
- */
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ # Debian/Buster et others
5
+ # packages
6
+ ---
7
+ backend: apt
8
+
9
+ operations:
10
+ - remove:
11
+ - calamares
12
+ - eggs
13
+ - try_install:
14
+ - firefox-esr-$LOCALE
15
+
16
+ */
@@ -1,30 +1,60 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
2
4
  /**
3
5
  * penguins-eggs: krill
4
6
  *
5
7
  * author: Piero Proietti
6
8
  * mail: piero.proietti@gmail.com
7
9
  *
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- const tslib_1 = require("tslib");
11
- /**
12
- * Ideally, I want to respect calamares way, remplementing the same (SEMPLIFIED) steps
13
- * in a TUI interface
10
+ * OEM Installation (https://github.com/calamares/calamares/issues/871)
11
+ *
12
+ * Thanks to Adriaan De Groot (calamares author)
13
+ *
14
+ * There are two phases involved here, both of which could confusingly be called "OEM mode".
15
+ * To be clear, the goal of the two phases is to end up with Linux (some distro) installed
16
+ * on a piece of hardware which is passed to a customer's hands. On first boot, the
17
+ * hardware is (re)configured with user input.
18
+ *
19
+ * Phase 1, OEM preparation
20
+ * is about creating the image that will be used on first boot; so that is a normal partition,
21
+ * create a standard user (e.g. "live") with autologin, populate a default desktop with a big
22
+ * icon "first run this" or set up autostart of the configurator.
23
+ * It is roughly a standard installation, with a little more configuration of the desktop
24
+ * of the live user.
25
+ *
26
+ * - welcome - no need
27
+ * - locale - en_US.UTF-8
28
+ * - keyboard - us
29
+ * - partition - ext4
30
+ * - users - live/evolution root/evolution
31
+ * - network - dhcp
32
+ * - summary - no need
33
+ *
34
+ * Phase 2, "OEM user"
35
+ * Set User Information on first Boot, from the "live" user, a new user for actual login --
36
+ * along with whatever other configurations are wanted for the distro for the actual user.
14
37
  *
15
- * Phase 1 - prepare.
16
- * View modules are shown as UI pages, jobs from job modules
17
- * are executed immediately in the background.
18
38
  * - welcome
19
39
  * - locale
20
40
  * - keyboard
21
- * - partition
22
- * - keyboard
41
+ * - partition - no need
23
42
  * - users
24
43
  * - network
25
44
  * - summary
26
- */
27
- const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
45
+ *
46
+ * Phase one should allow an empty password for the live user, and it would be useful to read
47
+ * configuration from a file instead of having to go through the UI. It should install a
48
+ * phase-2-configured Calamares into the target system
49
+ * (either through a package, or as part of the image).
50
+ *
51
+ * Phase two is possible with the "dont-chroot" flag and (again) careful configuration.
52
+ * Typically you drop the partition module (that was done in phase 1) and keep the users
53
+ * module, add in a delete-calamares script (note to downstreams: that kind of module
54
+ * should be upstreamed), add some user configuration (e.g. Plasma LNF if you're a
55
+ * KDE-shipping-distro). To get all that you just need Calamares installed and the
56
+ * relevant /etc/calamares/ files.
57
+ */
28
58
  const os_1 = tslib_1.__importDefault(require("os"));
29
59
  const react_1 = tslib_1.__importDefault(require("react"));
30
60
  const ink_1 = require("ink");
@@ -80,7 +110,7 @@ class Krill {
80
110
  /**
81
111
  * @param cryped
82
112
  */
83
- async prepare(unattended = false, ip = false, random = false, domain = 'local', suspend = false, small = false, none = false, cryped = false, pve = false, verbose = false) {
113
+ async prepare(unattended = false, noninteractive = false, krillConfig = {}, ip = false, random = false, domain = 'local', suspend = false, small = false, none = false, cryped = false, pve = false, verbose = false) {
84
114
  /**
85
115
  * Check for disk presence
86
116
  */
@@ -114,7 +144,7 @@ class Krill {
114
144
  console.log(`cannot find configuration file ${config_file},`);
115
145
  process.exit(1);
116
146
  }
117
- this.krillConfig = js_yaml_1.default.load(fs_1.default.readFileSync(config_file, 'utf-8'));
147
+ this.krillConfig = krillConfig; // yaml.load(fs.readFileSync(config_file, 'utf-8')) as IKrillConfig
118
148
  if (unattended) {
119
149
  oWelcome = { language: this.krillConfig.language };
120
150
  oLocation = {
@@ -179,6 +209,7 @@ class Krill {
179
209
  dns: utils_1.default.getDns(),
180
210
  domain: utils_1.default.getDomain()
181
211
  };
212
+ // end unattended!
182
213
  }
183
214
  else {
184
215
  oWelcome = await this.welcome();
@@ -191,7 +222,7 @@ class Krill {
191
222
  /**
192
223
  * summary
193
224
  */
194
- await this.summary(oLocation, oKeyboard, oPartitions, oUsers, unattended);
225
+ await this.summary(oLocation, oKeyboard, oPartitions, oUsers, unattended, noninteractive);
195
226
  /**
196
227
  * installation
197
228
  */
@@ -203,7 +234,7 @@ class Krill {
203
234
  async welcome() {
204
235
  let language = this.krillConfig.language;
205
236
  if (language === '') {
206
- language = await this.locales.getDefault(); // 'en_US.UTF-8'
237
+ language = await this.locales.getDefault(); // 'en_US.UTF-8'
207
238
  }
208
239
  let welcomeElem;
209
240
  while (true) {
@@ -449,19 +480,28 @@ class Krill {
449
480
  /**
450
481
  * SUMMARY
451
482
  */
452
- async summary(location, keyboard, partitions, users, unattended = false) {
483
+ async summary(location, keyboard, partitions, users, unattended = false, noninteractive = false) {
484
+ //
453
485
  let summaryElem;
454
- let message = "";
455
- if (unattended) {
486
+ let message = "Double check the installation disk: " + partitions.installationDevice;
487
+ if (unattended && noninteractive) {
456
488
  message = "Unattended installation will start in 5 seconds, press CTRL-C to abort!";
457
489
  }
458
490
  while (true) {
459
491
  summaryElem = react_1.default.createElement(summary_1.default, { name: users.name, password: users.password, rootPassword: users.rootPassword, hostname: users.hostname, region: location.region, zone: location.zone, language: location.language, keyboardModel: keyboard.keyboardModel, keyboardLayout: keyboard.keyboardLayout, installationDevice: partitions.installationDevice, message: message });
460
- if (unattended) {
492
+ if (unattended && noninteractive) {
461
493
  redraw(summaryElem);
462
494
  await sleep(5000);
463
495
  break;
464
496
  }
497
+ else if (unattended && !noninteractive) {
498
+ if (await confirm(summaryElem, "Read the Summary, confirm or abort")) {
499
+ break;
500
+ }
501
+ else {
502
+ process.exit(0);
503
+ }
504
+ }
465
505
  else if (await confirm(summaryElem, "Confirm Summary datas?")) {
466
506
  break;
467
507
  }
@@ -512,7 +552,8 @@ function redraw(elem) {
512
552
  let opt = {};
513
553
  opt.patchConsole = true;
514
554
  opt.debug = false;
515
- shelljs_1.default.exec('clear');
555
+ console.clear();
556
+ // shx.exec('clear')
516
557
  (0, ink_1.render)(elem, opt);
517
558
  }
518
559
  /**
@@ -88,7 +88,7 @@ class Sequence {
88
88
  // bootloader-config
89
89
  this.bootloaderConfig = bootloader_config_1.default;
90
90
  this.bootloaderConfigUbuntu = bootloader_config_ubuntu_1.default;
91
- //
91
+ //
92
92
  this.grubcfg = grubcfg_1.default;
93
93
  this.bootloader = bootloader_1.default;
94
94
  this.packages = packages_1.default;
@@ -388,7 +388,7 @@ class Sequence {
388
388
  catch (error) {
389
389
  await utils_1.default.pressKeyToExit(JSON.stringify(error));
390
390
  }
391
- // changePassword
391
+ // changePassword root
392
392
  message = "adding user password ";
393
393
  percent = 0.63;
394
394
  try {
@@ -427,6 +427,7 @@ class Sequence {
427
427
  // cleanup
428
428
  await cliAutologin.msgRemove(`${this.installTarget}/etc/motd`);
429
429
  await cliAutologin.msgRemove(`${this.installTarget}/etc/issue`);
430
+ await cliAutologin.remove(this.installTarget);
430
431
  // bootloader-config
431
432
  message = "bootloader-config ";
432
433
  percent = 0.70;
@@ -437,7 +438,7 @@ class Sequence {
437
438
  catch (error) {
438
439
  await utils_1.default.pressKeyToExit(JSON.stringify(error));
439
440
  }
440
- // grubcfg
441
+ // grubcfg
441
442
  message = "grubcfg ";
442
443
  percent = 0.75;
443
444
  try {
@@ -457,7 +458,6 @@ class Sequence {
457
458
  catch (error) {
458
459
  await utils_1.default.pressKeyToExit(JSON.stringify(error));
459
460
  }
460
- // await Utils.pressKeyToExit('check bootloaded and continue...')
461
461
  // sources-yolk-undo
462
462
  if (this.distro.familyId === 'debian') {
463
463
  message = "sources-yolk-undo";
@@ -478,10 +478,12 @@ class Sequence {
478
478
  await this.packages();
479
479
  }
480
480
  catch (error) {
481
- await utils_1.default.pressKeyToExit(JSON.stringify(error));
481
+ console.log(JSON.stringify(error));
482
+ // await Utils.pressKeyToExit(JSON.stringify(error))
482
483
  }
483
484
  /**
484
- * removeInstallerLink
485
+ *
486
+ * if calamares is present, remove link Installers
485
487
  */
486
488
  if (await pacman_1.default.calamaresCheck()) {
487
489
  message = "remove installer link";
@@ -69,7 +69,7 @@ async function mKeyboard() {
69
69
  content += ` Option "XkbLayout" "` + this.keyboardLayout + `"\n`;
70
70
  content += `EndSection\n`;
71
71
  // Not always exist /etc/X11/xorg.conf.d
72
- if (fs_1.default.existsSync(`this.installTarget + '/etc/X11/xorg.conf.d`)) {
72
+ if (fs_1.default.existsSync(this.installTarget + '/etc/X11/xorg.conf.d')) {
73
73
  utils_1.default.write(this.installTarget + '/etc/X11/xorg.conf.d/00-keyboard.conf', content);
74
74
  }
75
75
  }
@@ -25,23 +25,30 @@ async function packages() {
25
25
  modulePath = '/etc/calamares/';
26
26
  }
27
27
  const config_file = `${this.installTarget}${modulePath}modules/packages.conf`;
28
+ let remove = [];
29
+ let install = [];
28
30
  if (fs_1.default.existsSync(config_file)) {
29
31
  const packages = js_yaml_1.default.load(fs_1.default.readFileSync(config_file, 'utf-8'));
30
- if (packages.operations !== undefined) {
32
+ let operations = JSON.parse(JSON.stringify(packages.operations));
33
+ remove = operations[0].remove;
34
+ if (operations.length > 1) {
35
+ install = operations[1].install;
36
+ }
37
+ if (operations !== undefined) {
31
38
  if (packages.backend === 'apt') {
32
39
  /**
33
40
  * apt: Debian/Devuan/Ubuntu
34
41
  */
35
- if (packages.operations.remove !== undefined) {
42
+ if (remove.length > 0) {
36
43
  let cmd = `chroot ${this.installTarget} apt-get purge -y `;
37
- for (const elem of packages.operations.remove) {
44
+ for (const elem of remove) {
38
45
  cmd += elem + ' ';
39
46
  }
40
47
  await (0, utils_1.exec)(`${cmd} ${this.toNull}`, this.echo);
41
48
  }
42
- if (packages.operations.try_install !== undefined) {
49
+ if (install.length > 0) {
43
50
  let cmd = `chroot ${this.installTarget} apt-get install -y `;
44
- for (const elem of packages.operations.try_install) {
51
+ for (const elem of install) {
45
52
  cmd += elem + ' ';
46
53
  }
47
54
  await (0, utils_1.exec)(`chroot ${this.installTarget} apt-get update ${this.toNull}`, this.echo);
@@ -52,15 +59,15 @@ async function packages() {
52
59
  /**
53
60
  * pacman: arch/manjaro
54
61
  */
55
- if (packages.operations.remove !== undefined) {
62
+ if (remove.length > 0) {
56
63
  let cmd = `chroot ${this.installTarget} pacman -R\n`;
57
- for (const elem of packages.operations.remove) {
64
+ for (const elem of remove) {
58
65
  cmd += elem + ' ';
59
66
  }
60
67
  await (0, utils_1.exec)(`${cmd} ${echoYes}`, this.echo);
61
68
  }
62
- if (packages.operations.try_install !== undefined) {
63
- for (const elem of packages.operations.try_install) {
69
+ if (install.length > 0) {
70
+ for (const elem of install) {
64
71
  await (0, utils_1.exec)(`chroot ${this.installTarget} pacman -S ${elem}`, echoYes);
65
72
  }
66
73
  }
@@ -8,6 +8,7 @@ const path_1 = tslib_1.__importDefault(require("path"));
8
8
  const utils_1 = tslib_1.__importDefault(require("../classes/utils"));
9
9
  const pacman_1 = tslib_1.__importDefault(require("../classes/pacman"));
10
10
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
11
+ const pjson = require('../../package.json');
11
12
  // libraries
12
13
  const utils_2 = require("../lib/utils");
13
14
  // Comando per avviare ubiquity: sudo --preserve-env DBUS_SESSION_BUS_ADDRESS, XDG_RUNTIME sh -c 'calamares'
@@ -113,10 +114,10 @@ async function addMotd(distro, version, user, userPasswd, rootPasswd, chroot = '
113
114
  let installer = 'sudo eggs install';
114
115
  if (pacman_1.default.packageIsInstalled('calamares')) {
115
116
  if (pacman_1.default.packageIsInstalled('plasma-desktop')) {
116
- installer = 'startplasma-wayland to run GUI and launch calamares, or from terminal sudo eggs krill -c';
117
+ installer = 'startplasma-wayland to run GUI and launch calamares';
117
118
  }
118
119
  else if (pacman_1.default.packageIsInstalled('xfce4')) {
119
- installer = 'startxfce4 to run GUI and launch calamares, or from terminal sudo eggs krill -c';
120
+ installer = 'startxfce4 to run GUI and launch calamares installer';
120
121
  }
121
122
  }
122
123
  if (!fs_1.default.existsSync(fileMotd)) {
@@ -125,8 +126,14 @@ async function addMotd(distro, version, user, userPasswd, rootPasswd, chroot = '
125
126
  msgRemove(fileMotd);
126
127
  let eggsMotd = fs_1.default.readFileSync(fileMotd, 'utf-8');
127
128
  eggsMotd += startMessage + '\n';
128
- eggsMotd += 'You are logged as: ' + chalk_1.default.bold(user) + ' your password is: ' + chalk_1.default.bold(userPasswd) + ', root password: ' + chalk_1.default.bold(rootPasswd) + '\n';
129
- eggsMotd += `to install the system: ${installer}\n`;
129
+ eggsMotd += utils_1.default.flag() + '\n';
130
+ eggsMotd += 'You are logged as: ' + chalk_1.default.bold(user) + ' your password is: ' + chalk_1.default.bold(userPasswd) + ', root password: ' + chalk_1.default.bold(rootPasswd) + '\n\n';
131
+ eggsMotd += `install : ` + chalk_1.default.bold(installer) + `\n`;
132
+ eggsMotd += ` unattended : ` + chalk_1.default.bold(`sudo eggs install --unattended # us configuration`) + `\n`;
133
+ eggsMotd += ` unattended custom : ` + chalk_1.default.bold(`sudo eggs install --custom [ br | it | yours ]`) + `\n`;
134
+ eggsMotd += `PXE server : ` + chalk_1.default.bold(`sudo eggs cuckoo`) + `\n`;
135
+ eggsMotd += `(*) to get your custom unattended configuration: fork https://github.com/pieroproietti/penguins-wardrobe` + `\n`;
136
+ eggsMotd += ` create your configuration in /config and ask for a Pull Request` + `\n`;
130
137
  eggsMotd += stopMessage + '\n';
131
138
  fs_1.default.writeFileSync(fileMotd, eggsMotd);
132
139
  }
@@ -144,10 +151,10 @@ async function addIssue(distro, version, user, userPasswd, rootPasswd, chroot =
144
151
  const fileIssue = `${chroot}/etc/issue`;
145
152
  msgRemove(fileIssue);
146
153
  let eggsIssue = fs_1.default.readFileSync(fileIssue, 'utf-8');
147
- eggsIssue += startMessage + '\n';
148
- eggsIssue += `This is a ${distro}/${version} system created by penguin's eggs.\n`;
149
- eggsIssue += 'You can login with user: ' + chalk_1.default.bold(user) + ' and password: ' + chalk_1.default.bold(userPasswd) + ', root password: ' + chalk_1.default.bold(rootPasswd) + '\n';
150
- eggsIssue += stopMessage + '\n';
154
+ // eggsIssue += startMessage + '\n'
155
+ // eggsIssue += `This is a ${distro}/${version} system created by penguin's eggs.\n`
156
+ // eggsIssue += 'You can login with user: ' + chalk.bold(user) + ' and password: ' + chalk.bold(userPasswd) + ', root password: ' + chalk.bold(rootPasswd) + '\n'
157
+ // eggsIssue += stopMessage + '\n'
151
158
  fs_1.default.writeFileSync(fileIssue, eggsIssue);
152
159
  }
153
160
  exports.addIssue = addIssue;
@@ -50,6 +50,7 @@ exports.depCommon = [
50
50
  'git',
51
51
  'live-boot',
52
52
  'live-boot-initramfs-tools',
53
+ 'lsb-release',
53
54
  'lvm2',
54
55
  'parted',
55
56
  "pxelinux",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "penguins-eggs",
3
3
  "description": "Perri's Brewery edition: remaster your system and distribuite it",
4
- "version": "9.3.14",
4
+ "version": "9.3.20",
5
5
  "author": "Piero Proietti @pieroproietti",
6
6
  "bin": {
7
7
  "eggs": "bin/run"
@@ -10,11 +10,11 @@
10
10
  "dependencies": {
11
11
  "@oclif/core": "^1.21.0",
12
12
  "@oclif/plugin-autocomplete": "1.3.8",
13
- "@oclif/plugin-help": "^5.1.20",
14
- "@oclif/plugin-not-found": "^2.3.9",
13
+ "@oclif/plugin-help": "^5.1.23",
14
+ "@oclif/plugin-not-found": "^2.3.15",
15
15
  "@oclif/plugin-version": "^1.1.3",
16
- "@oclif/plugin-warn-if-update-available": "^2.0.16",
17
- "@oclif/test": "^2.2.17",
16
+ "@oclif/plugin-warn-if-update-available": "^2.0.19",
17
+ "@oclif/test": "^2.2.21",
18
18
  "axios": "^1.2.1",
19
19
  "chalk": "^4.1.2",
20
20
  "ink": "^3.2.0",
@@ -55,7 +55,7 @@
55
55
  "mocha": "^10.2.0",
56
56
  "nyc": "^15.1.0",
57
57
  "oclif-pnpm": "^3.4.3-1",
58
- "perrisbrewery": "^9.3.13-1",
58
+ "perrisbrewery": "^9.3.13-2",
59
59
  "ts-node": "^10.9.1"
60
60
  },
61
61
  "peerDependencies": {
package/scripts/_eggs CHANGED
@@ -29,12 +29,11 @@ _eggs () {
29
29
  "tools\:yolk:configure eggs to install without internet"
30
30
  "update:update the penguin's eggs tool"
31
31
  "wardrobe\:get:get warorobe"
32
- "wardrobe\:ironing:ordered show of costumes or accessories in wardrobe"
33
32
  "wardrobe\:list:list costumes and accessoires in wardrobe"
34
33
  "wardrobe\:show:show costumes/accessories in wardrobe"
35
34
  "wardrobe\:wear:wear costume/accessories from wardrobe"
36
- "autocomplete:display autocomplete installation instructions"
37
35
  "help:Display help for <%= config.bin %>."
36
+ "autocomplete:display autocomplete installation instructions"
38
37
  "version:"
39
38
  )
40
39
 
@@ -110,6 +109,8 @@ export:iso)
110
109
  install)
111
110
  _command_flags=(
112
111
  "--unattended[Unattended installation]"
112
+ "--custom=-[custom unattended configuration]:"
113
+ "--nointeractive[assume yes]"
113
114
  "--ip[hostname as ip, eg: ip-192-168-1-33]"
114
115
  "--random[Add random to hostname, eg: colibri-ay412dt]"
115
116
  "--domain=-[Domain name, defult: .local]:"
@@ -143,7 +144,6 @@ produce)
143
144
  "--backup[backup mode (CRYPTED)]"
144
145
  "--clone[clone mode]"
145
146
  "--fast[fast compression]"
146
- "--normal[normal compression]"
147
147
  "--max[max compression]"
148
148
  "--verbose[verbose]"
149
149
  "--yolk[-y force yolk renew]"
@@ -152,6 +152,7 @@ produce)
152
152
  "--theme=-[theme for livecd, calamares branding and partitions]:"
153
153
  "--addons=-[addons to be used: adapt, ichoice, pve, rsupport]:"
154
154
  "--release[release: max compression, remove penguins-eggs and calamares after installation]"
155
+ "--nointeractive[don't ask for user interctions]"
155
156
  )
156
157
  ;;
157
158
 
@@ -234,14 +235,6 @@ wardrobe:get)
234
235
  )
235
236
  ;;
236
237
 
237
- wardrobe:ironing)
238
- _command_flags=(
239
- "--wardrobe=-[wardrobe]:"
240
- "--verbose[]"
241
- "--help[Show CLI help.]"
242
- )
243
- ;;
244
-
245
238
  wardrobe:list)
246
239
  _command_flags=(
247
240
  "--verbose[]"
@@ -269,15 +262,15 @@ wardrobe:wear)
269
262
  )
270
263
  ;;
271
264
 
272
- autocomplete)
265
+ help)
273
266
  _command_flags=(
274
- "--refresh-cache[Refresh cache (ignores displaying instructions)]"
267
+ "--nested-commands[Include all nested commands in the output.]"
275
268
  )
276
269
  ;;
277
270
 
278
- help)
271
+ autocomplete)
279
272
  _command_flags=(
280
- "--nested-commands[Include all nested commands in the output.]"
273
+ "--refresh-cache[Refresh cache (ignores displaying instructions)]"
281
274
  )
282
275
  ;;
283
276
 
package/scripts/eggs.bash CHANGED
@@ -19,10 +19,10 @@ cuckoo --help
19
19
  dad --help --clean --default --verbose
20
20
  export:deb --help --all --clean --verbose
21
21
  export:iso --help --backup --clean --verbose
22
- install --unattended --ip --random --domain --suspend --small --none --crypted --pve --help --verbose
22
+ install --unattended --custom --nointeractive --ip --random --domain --suspend --small --none --crypted --pve --help --verbose
23
23
  kill --help --verbose
24
24
  mom --help
25
- produce --prefix --basename --backup --clone --fast --normal --max --verbose --yolk --script --help --theme --addons --release
25
+ produce --prefix --basename --backup --clone --fast --max --verbose --yolk --script --help --theme --addons --release --nointeractive
26
26
  status --verbose --help
27
27
  syncfrom --delete --file --rootdir --help --verbose
28
28
  syncto --delete --file --help --verbose
@@ -33,12 +33,11 @@ tools:stat --help --month --year
33
33
  tools:yolk --help --verbose
34
34
  update --help --verbose
35
35
  wardrobe:get --verbose --help
36
- wardrobe:ironing --wardrobe --verbose --help
37
36
  wardrobe:list --verbose --help
38
37
  wardrobe:show --wardrobe --json --verbose --help
39
38
  wardrobe:wear --wardrobe --no_accessories --no_firmwares --silent --verbose --help
40
- autocomplete --refresh-cache
41
39
  help --nested-commands
40
+ autocomplete --refresh-cache
42
41
  version --json --verbose
43
42
  "
44
43