penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
85 lines (84 loc) • 3.21 kB
JavaScript
import { access } from 'fs/promises';
/**
* ./src/classes/incubation/fisherman-helper/initcpio.ts
* penguins-eggs v.25.7.x / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import { exec } from '../../../lib/utils.js';
/**
* Cerca il file .preset per mkinitcpio appropriato per il kernel corrente.
* @returns Il percorso del file .preset trovato.
* @throws {Error} Se non è possibile trovare un file .preset valido.
*/
export async function initcpio() {
try {
const kernelVersion = (await exec('uname -r', { capture: true })).data;
const version = kernelVersion.trim();
// Logica Manjaro
if (version.includes('MANJARO')) {
try {
const parts = version.split('.');
const kernelName = `linux${parts[0]}${parts[1]}`;
// Tentativo 1: Major/Minor (es. /etc/mkinitcpio.d/linux61.preset)
const manjaroPreset = `/etc/mkinitcpio.d/${kernelName}.preset`;
await access(manjaroPreset);
return manjaroPreset;
}
catch {
try {
const parts = version.split('.');
const kernelName = `linux${parts[0]}${parts[1]}`;
// Tentativo 2: Major/Minor con Architettura (es. /etc/mkinitcpio.d/linux61-x86_64.preset)
const manjaroPresetArch = `/etc/mkinitcpio.d/${kernelName}-x86_64.preset`;
await access(manjaroPresetArch);
return manjaroPresetArch;
}
catch {
// Fallito, si procede al FALLBACK ARCH
}
}
}
else if (version.includes('cachyos')) {
// Logica CachyOS
try {
let kernelType = 'linux-cachyos'; // default
if (version.includes('lts')) {
kernelType = 'linux-cachyos-lts';
}
else if (version.includes('zen')) {
kernelType = 'linux-cachyos-zen';
}
else if (version.includes('hardened')) {
kernelType = 'linux-hardened';
}
const cachyPreset = `/etc/mkinitcpio.d/${kernelType}.preset`;
await access(cachyPreset);
return cachyPreset;
}
catch {
// Fallito, si procede al fallback Arch
}
}
// FALLBACK ARCH
let kernelType = 'linux'; // default
if (version.includes('lts')) {
kernelType = 'linux-lts';
}
else if (version.includes('zen')) {
kernelType = 'linux-zen';
}
else if (version.includes('hardened')) {
kernelType = 'linux-hardened';
}
const archPreset = `/etc/mkinitcpio.d/${kernelType}.preset`;
// Verifica che esista
await access(archPreset);
return archPreset;
}
catch {
// Lancia un errore se tutti i tentativi falliscono.
throw new Error(`Impossibile trovare un file .preset valido in /etc/mkinitcpio.d/.`);
}
}