penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
70 lines (67 loc) • 2.58 kB
JavaScript
/**
* ./src/classes/ovary.d/luks-home-support.ts
* penguins-eggs v.25.10.x / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
// packages
import fs from 'fs';
import path, { dirname } from 'path';
import { fileURLToPath } from 'url';
import Utils from '../utils.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
/**
* Installa i file necessari per sbloccare home.img LUKS durante il boot
*/
export function installHomecryptSupport(squashfsRoot, homeImgPath) {
Utils.warning('installing encrypted home support...');
// console.log("squashfsRoot:", squashfsRoot)
// console.log("homeImgPath:", homeImgPath)
// Leggi il template bash
const templatePath = path.join(__dirname, '../../../scripts/mount-encrypted-home.sh');
let bashScript = fs.readFileSync(templatePath, 'utf8');
// Sostituisci il placeholder con il path reale
bashScript = bashScript.replace('__HOME_IMG_PATH__', homeImgPath);
// Systemd service
const systemdService = `[Unit]
Description=Unlock and mount encrypted home.img
DefaultDependencies=no
After=systemd-udev-settle.service local-fs-pre.target
Before=local-fs.target display-manager.service
ConditionPathExists=${homeImgPath}
[]
Type=oneshot
RemainAfterExit=yes
StandardInput=tty
StandardOutput=journal+console
StandardError=journal+console
TTYPath=/dev/console
TTYReset=yes
TTYVHangup=yes
ExecStart=/usr/local/bin/mount-encrypted-home.sh
ExecStop=/bin/bash -c 'umount /home && cryptsetup close live-home'
[]
WantedBy=local-fs.target
`;
// Percorsi di destinazione
const scriptPath = path.join(squashfsRoot, 'usr/local/bin/mount-encrypted-home.sh');
const servicePath = path.join(squashfsRoot, 'etc/systemd/system/mount-encrypted-home.service');
const symlinkDir = path.join(squashfsRoot, 'etc/systemd/system/local-fs.target.wants');
const symlinkPath = path.join(symlinkDir, 'mount-encrypted-home.service');
// Create dirs
fs.mkdirSync(path.dirname(scriptPath), { recursive: true });
fs.mkdirSync(path.dirname(servicePath), { recursive: true });
fs.mkdirSync(symlinkDir, { recursive: true });
// Scrivi lo script
fs.writeFileSync(scriptPath, bashScript);
fs.chmodSync(scriptPath, 0o755);
// Scrivi il service
fs.writeFileSync(servicePath, systemdService);
// Crea il symlink per abilitare il service
if (fs.existsSync(symlinkPath)) {
fs.unlinkSync(symlinkPath);
}
fs.symlinkSync('../mount-encrypted-home.service', symlinkPath);
}