penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
50 lines (49 loc) • 2.27 kB
JavaScript
/**
* ./src/krill/modules/grubcfg.ts
* penguins-eggs v.25.7.x / ecmascript 2020
* REFACTORED: Adds SELinux permissive mode for RHEL family
*/
import fs from 'node:fs';
import Utils from '../../../classes/utils.js';
import { InstallationMode } from '../krill_enums.js';
/**
* grubcfg
* - open /etc/default/grub
* - handle BTRFS/LUKS settings
* - inject enforcing=0 for Fedora/RHEL to allow autorelabel on first boot
*/
export default async function grubcfg() {
const file = `${this.installTarget}/etc/default/grub`;
if (!fs.existsSync(file)) {
console.warn(`Warning: ${file} not found. Skipping GRUB config.`);
return;
}
let content = '';
const grubs = fs.readFileSync(file, 'utf8').split('\n');
// Cache per la verifica della famiglia
const isRhelFamily = ['almalinux', 'centos', 'fedora', 'rhel', 'rocky'].includes(this.distro.familyId);
for (let line of grubs) {
// 1. LOGICA ESISTENTE (BTRFS / LUKS)
// Questa logica riscrive completamente la riga DEFAULT se necessario
if (line.trim().startsWith('GRUB_CMDLINE_LINUX_DEFAULT=') && this.partitions.filesystemType === 'btrfs') {
const uuid = Utils.uuid(this.devices.swap.name);
if (this.partitions.installationMode === InstallationMode.Luks) {
line = `GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=${uuid}"`;
}
else {
line = `GRUB_CMDLINE_LINUX_DEFAULT="quiet splash rootflags=subvol=@"`;
}
}
// 2. LOGICA SELINUX (RHEL/FEDORA)
// Applichiamo la modifica sia se la riga è stata appena toccata, sia se è originale.
// Fedora usa spesso anche GRUB_CMDLINE_LINUX (senza DEFAULT), quindi controlliamo entrambe.
if (isRhelFamily &&
(line.trim().startsWith('GRUB_CMDLINE_LINUX_DEFAULT=') || line.trim().startsWith('GRUB_CMDLINE_LINUX=')) && // Se non c'è già il parametro, lo iniettiamo subito dopo la prima virgoletta
!line.includes('enforcing=0')) {
line = line.replace('="', '="enforcing=0 ');
console.log(`- GRUB: injected enforcing=0 into ${line.split('=')[0]}`);
}
content += line + '\n';
}
fs.writeFileSync(file, content, 'utf-8');
}