penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
78 lines (77 loc) • 3.05 kB
JavaScript
/**
* ./src/krill/modules/partition.d/bios-luks.ts
* penguins-eggs v.25.7.x / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
* https://stackoverflow.com/questions/23876782/how-do-i-split-a-typescript-class-into-multiple-files
*/
import { render } from 'ink';
// React
import React from 'react';
import Utils from '../../../../classes/utils.js';
import { exec } from '../../../../lib/utils.js';
import Install from '../../../components/install.js';
import getLuksPassphrase from '../../../lib/get_luks_passphrase.js';
/**
*
* @param this
* @param installDevice
* @param p
* @returns
*/
export default async function biosLuks(installDevice = "", p = "") {
await exec(`parted --script ${installDevice} mklabel msdos`, this.echo);
await exec(`parted --script --align optimal ${installDevice} mkpart primary ext4 1MiB 512MiB`, this.echo); // sda1
await exec(`parted --script --align optimal ${installDevice} mkpart primary ext4 512MiB 100%`, this.echo); // sda3
await exec(`parted --script ${installDevice} set 1 boot on`, this.echo); // sda1
await exec(`parted --script ${installDevice} set 1 esp on`, this.echo); // sda1
// BOOT 512M
this.devices.boot.name = `${installDevice}${p}1`; // 'boot'
this.devices.boot.fsType = 'ext4';
this.devices.boot.mountPoint = '/boot';
// disabilito spinner per introduzione passphrase
const message = "Creating partitions";
await redraw(React.createElement(Install, { message: message, percent: 0 }));
const passphrase = await getLuksPassphrase('evolution', 'evolution'); // It's just a default
await redraw(React.createElement(Install, { message: message, percent: 0, spinner: this.spinner }));
// Aggiungi parametri di sicurezza espliciti
const cipher = "aes-xts-plain64";
const keySize = "512";
const hash = "sha512";
// ROOT
try {
await exec(`echo -n "${passphrase}" | cryptsetup --batch-mode --cipher ${cipher} --key-size ${keySize} --hash ${hash} --type luks2 --key-file=- -v luksFormat ${installDevice}${p}2`, this.echo);
}
catch (error) {
Utils.warning(`Error: ${error.message}`);
process.exit(1);
}
try {
await exec(`echo -n "${passphrase}" | cryptsetup --key-file=- --type luks2 luksOpen ${installDevice}${p}2 root_crypted`, this.echo);
}
catch (error) {
Utils.warning(`Error: ${error.message}`);
process.exit(1);
}
// this.devices.boot.name = DEFINED`
this.devices.data.name = 'none';
this.devices.efi.name = 'none';
this.devices.root.name = `/dev/mapper/${this.luksRootName}`;
this.devices.root.cryptedFrom = `${installDevice}${p}2`;
this.devices.root.fsType = 'ext4';
this.devices.root.mountPoint = '/';
this.devices.swap.name = 'none';
return true;
}
/**
*
* @param elem
*/
async function redraw(elem) {
const opt = {};
opt.patchConsole = false;
opt.debug = true;
console.clear();
render(elem, opt);
}