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.
- package/.oclif.manifest.json +1 -1
- package/README.md +23 -42
- package/addons/eggs/adapt/applications/eggs-adapt.desktop +1 -1
- package/addons/templates/grub.template +7 -6
- package/addons/templates/isolinux.template +6 -6
- package/conf/derivatives.yaml +71 -0
- package/conf/distros/buster/calamares/calamares-modules/cleanup/cleanup.sh +2 -1
- package/conf/exclude.list +33 -30
- package/conf/init/cuckoo.sh +5 -0
- package/conf/init/unattended.sh +5 -0
- package/dist/classes/distro.js +31 -138
- package/dist/classes/ovary.js +75 -69
- package/dist/classes/pacman.js +19 -1
- package/dist/classes/utils.js +11 -4
- package/dist/classes/xdg.js +45 -17
- package/dist/commands/install.js +35 -3
- package/dist/commands/produce.js +6 -5
- package/dist/interfaces/i-packages.js +14 -3
- package/dist/krill/krill-prepare.js +63 -22
- package/dist/krill/krill-sequence.js +8 -6
- package/dist/krill/modules/m-keyboard.js +1 -1
- package/dist/krill/modules/packages.js +16 -9
- package/dist/lib/cli-autologin.js +15 -8
- package/dist/lib/dependencies.js +1 -0
- package/package.json +6 -6
- package/scripts/_eggs +8 -15
- package/scripts/eggs.bash +3 -4
- package/dist/commands/wardrobe/ironing.js +0 -143
package/dist/commands/install.js
CHANGED
|
@@ -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: '
|
|
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
|
package/dist/commands/produce.js
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
481
|
+
console.log(JSON.stringify(error));
|
|
482
|
+
// await Utils.pressKeyToExit(JSON.stringify(error))
|
|
482
483
|
}
|
|
483
484
|
/**
|
|
484
|
-
*
|
|
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(
|
|
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
|
-
|
|
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 (
|
|
42
|
+
if (remove.length > 0) {
|
|
36
43
|
let cmd = `chroot ${this.installTarget} apt-get purge -y `;
|
|
37
|
-
for (const elem of
|
|
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 (
|
|
49
|
+
if (install.length > 0) {
|
|
43
50
|
let cmd = `chroot ${this.installTarget} apt-get install -y `;
|
|
44
|
-
for (const elem of
|
|
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 (
|
|
62
|
+
if (remove.length > 0) {
|
|
56
63
|
let cmd = `chroot ${this.installTarget} pacman -R\n`;
|
|
57
|
-
for (const elem of
|
|
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 (
|
|
63
|
-
for (const elem of
|
|
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
|
|
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
|
|
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 +=
|
|
129
|
-
eggsMotd +=
|
|
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: ' +
|
|
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;
|
package/dist/lib/dependencies.js
CHANGED
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.
|
|
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.
|
|
14
|
-
"@oclif/plugin-not-found": "^2.3.
|
|
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.
|
|
17
|
-
"@oclif/test": "^2.2.
|
|
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-
|
|
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
|
-
|
|
265
|
+
help)
|
|
273
266
|
_command_flags=(
|
|
274
|
-
"--
|
|
267
|
+
"--nested-commands[Include all nested commands in the output.]"
|
|
275
268
|
)
|
|
276
269
|
;;
|
|
277
270
|
|
|
278
|
-
|
|
271
|
+
autocomplete)
|
|
279
272
|
_command_flags=(
|
|
280
|
-
"--
|
|
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 --
|
|
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
|
|