penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
113 lines (112 loc) • 4.68 kB
JavaScript
/**
* ./src/commands/krill.ts
* penguins-eggs v.25.11.x / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import { Command, Flags } from '@oclif/core';
import yaml from 'js-yaml';
import fs from 'node:fs';
import https from 'node:https';
import Utils from '../classes/utils.js';
import Krill from '../krill/classes/prepare.js';
import { shx } from '../lib/utils.js';
const agent = new https.Agent({
rejectUnauthorized: false
});
// import { ILvmOptions } from '../krill/interfaces/i-krill.js'
/**
* Class Krill
*/
export default class KrillCommand extends Command {
static description = 'a TUI system installer - install the system';
static examples = ['sudo eggs install', 'sudo eggs install --unattended --halt', 'sudo eggs install --chroot'];
static flags = {
btrfs: Flags.boolean({ char: 'b', description: 'Format btrfs' }),
chroot: Flags.boolean({ char: 'c', description: 'chroot before to end' }),
crypted: Flags.boolean({ char: 'k', description: 'Crypted CLI installation' }),
domain: Flags.string({ char: 'd', description: 'Domain name, defult: .local' }),
halt: Flags.boolean({ char: 'H', description: 'Halt the system after installation' }),
help: Flags.help({ char: 'h' }),
ip: Flags.boolean({ char: 'i', description: 'hostname as ip, eg: ip-192-168-1-33' }),
nointeractive: Flags.boolean({ char: 'n', description: 'no user interaction' }),
none: Flags.boolean({ char: 'N', description: 'Swap none: 256M' }),
pve: Flags.boolean({ char: 'p', description: 'Proxmox VE install' }),
random: Flags.boolean({ char: 'r', description: 'Add random to hostname, eg: colibri-ay412dt' }),
replace: Flags.string({ char: `R`, description: `Replace partition. eg: --replace /dev/sda3` }),
small: Flags.boolean({ char: 's', description: 'Swap small: RAM' }),
suspend: Flags.boolean({ char: 'S', description: 'Swap suspend: RAM x 2' }),
testing: Flags.boolean({ char: 't', description: 'Just testing krill' }),
unattended: Flags.boolean({ char: 'u', description: 'Unattended installation' }),
verbose: Flags.boolean({ char: 'v', description: 'Verbose' })
};
/**
* Execute
*/
async run() {
Utils.titles(this.id + ' ' + this.argv);
const { flags } = await this.parse(KrillCommand);
const { unattended } = flags;
// krillConfig
let krillConfig = {};
const content = fs.readFileSync('/etc/penguins-eggs.d/krill.yaml', 'utf8');
krillConfig = yaml.load(content);
// nointeractive
const { nointeractive } = flags;
// halt
const { halt } = flags;
// hostname
const { ip } = flags;
const { random } = flags;
// chroot before to end
const { chroot } = flags;
// eg: eggs install --replace /dev/sda3
let replace = '';
let replaceExit = false;
if (flags.replace) {
replace = flags.replace;
// Definiamo la dimensione minima richiesta in bytes (1 GB = 1024*1024*1024 bytes)
const minSizeBytes = 1024 * 1024 * 1024;
try {
const sizeInBytesString = shx.exec(`lsblk -b -n -o SIZE ${replace}`).stdout.trim();
const partitionSize = Number.parseInt(sizeInBytesString, 10);
if (partitionSize < minSizeBytes) {
console.log(`partition to replace ${replace}, is too little`);
replaceExit = true;
}
}
catch {
console.log(`partition ${replace} does not exists!`);
replaceExit = true;
}
}
let domain = '';
if (flags.domain) {
domain = flags.domain;
}
// swap
const { suspend } = flags;
const { small } = flags;
const { none } = flags;
let { crypted } = flags;
const { pve } = flags;
if (pve) {
crypted = false;
}
const { testing } = flags;
const { verbose } = flags;
if (Utils.isRoot() || testing) {
if (Utils.isLive() || testing) {
const krill = new Krill(unattended, nointeractive, halt, chroot);
await krill.prepare(krillConfig, ip, random, domain, suspend, small, none, crypted, pve, flags.btrfs, replace, testing, verbose);
}
else {
Utils.warning('You are in an installed system!');
}
}
else {
Utils.useRoot(this.id);
}
}
}