penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
88 lines (87 loc) • 3.47 kB
JavaScript
/**
* ./src/krill/modules/mkfs.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 { exec, shx } from '../../../lib/utils.js';
import { InstallationMode, SwapChoice } from '../krill_enums.js';
/**
* mkfs
*
* mkfs - create an ext2/ext3/ext4/btrfs
*/
export default async function mkfs() {
const result = true;
if (this.partitions.installationMode === InstallationMode.Replace) {
/**
* we need to define this.devices
*/
this.devices.root.name = this.partitions.replacedPartition;
this.devices.root.mountPoint = '/';
this.devices.root.fsType = this.partitions.filesystemType;
this.devices.boot.name = 'none'; // OK
this.devices.data.name = 'none'; // OK
this.partitions.userSwapChoice = SwapChoice.File;
this.devices.swap.name = 'file'; // OK
this.devices.efi.name = 'none';
if (this.efi) {
// usare shx.exec qui
const efiDetectCmd = `fdisk -l | grep 'EFI System' | awk '{print $1}'`;
const efiName = shx.exec(efiDetectCmd, { silent: true }).stdout.trim();
if (efiName) {
this.devices.efi.name = efiName;
this.devices.efi.mountPoint = '/boot/efi';
}
else {
this.devices.efi.name = 'none';
}
}
}
if (this.partitions.filesystemType === 'ext4') {
/**
* EFI
*/
if (this.efi) {
await exec(`mkfs.vfat -F 32 ${this.devices.efi.name} ${this.toNull}`, this.echo);
}
// boot
if (this.devices.boot.name !== 'none') {
if (this.devices.boot.fsType === undefined) {
this.devices.boot.fsType = 'ext2';
this.devices.boot.mountPoint = '/boot';
}
// await exec(`mke2fs -Ft ${this.devices.boot.fsType} ${this.devices.boot.name} ${this.toNull}`, this.echo)
await exec(`mkfs.${this.devices.boot.fsType} -F ${this.devices.boot.name} ${this.toNull}`, this.echo);
}
// root
if (this.devices.root.name !== 'none') {
// await exec(`mke2fs -Ft ${this.devices.root.fsType} ${this.devices.root.name} ${this.toNull}`, this.echo)
await exec(`mkfs.ext4 -F ${this.devices.root.name} ${this.toNull}`, this.echo);
}
// data
if (this.devices.data.name !== 'none') {
}
// swap
if (this.partitions.userSwapChoice === SwapChoice.File) {
// we'll create it on mount-fs
}
else if (this.devices.swap.name !== 'none') {
await exec(`mkswap ${this.devices.swap.name} ${this.toNull}`, this.echo);
}
}
else if (this.partitions.filesystemType === 'btrfs') {
await exec(`mkfs.btrfs -f btrfs ${this.devices.root.name} ${this.toNull}`, this.echo);
// Monta temporaneamente il volume Btrfs
await exec(`mount ${this.devices.root.name} /mnt`);
await exec(`btrfs subvolume create /mnt/@/`);
await exec(`btrfs subvolume create /mnt/`);
await exec(`btrfs subvolume create /mnt/`);
await exec(`btrfs subvolume create /mnt/`);
// Smonta /mnt
await exec(`umount /mnt`);
}
return result;
}