penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
100 lines (99 loc) • 4.24 kB
JavaScript
/**
* ./src/classes/ovary.d/produce.ts
* penguins-eggs v.25.7.x / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import mustache from 'mustache';
// packages
import fs from 'node:fs';
import path from 'node:path';
// backup
// interfaces
// libraries
import { exec } from '../../lib/utils.js';
import Diversions from './../diversions.js';
import Utils from './../utils.js';
// _dirname
const __dirname = path.dirname(new URL(import.meta.url).pathname);
const bootloaders = '/usr/lib/';
/**
* syslinux: da syspath
*/
export async function syslinux(theme = 'eggs') {
const bootloaders = Diversions.bootloaders(this.familyId);
const sysPath = path.join(bootloaders, 'syslinux/modules/bios');
const isoPath = path.join(bootloaders, 'ISOLINUX');
await exec(`cp ${sysPath}/chain.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
await exec(`cp ${isoPath}/isohdpfx.bin ${this.settings.iso_work}/isolinux/`, this.echo);
// just for x64 arch
await exec(`cp ${isoPath}/isolinux.bin ${this.settings.iso_work}/isolinux/`, this.echo);
await exec(`cp ${sysPath}/ldlinux.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
await exec(`cp ${sysPath}/libcom32.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
await exec(`cp ${sysPath}/libutil.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
await exec(`cp ${sysPath}/vesamenu.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
const splashDest = `${this.settings.iso_work}/isolinux/splash.png`;
const isolinuxThemeDest = path.join(this.settings.iso_work, 'isolinux/isolinux.theme.cfg');
const isolinuxDest = `${this.settings.iso_work}/isolinux/isolinux.cfg`;
let splashSrc = '';
let isolinuxTemplate = '';
let isolinuxThemeSrc = '';
if (this.hidden) {
splashSrc = path.resolve(__dirname, `../../../addons/${theme}/theme/livecd/generic-splash.png`);
isolinuxTemplate = path.resolve(__dirname, '../../../addons/eggs/theme/livecd/generic.isolinux.main.cfg');
isolinuxThemeSrc = path.resolve(__dirname, '../../../addons/eggs/theme/livecd/generic.isolinux.theme.cfg');
}
else {
isolinuxThemeSrc = path.resolve(__dirname, `../../../addons/${theme}/theme/livecd/isolinux.theme.cfg`);
if (this.theme.includes('/')) {
isolinuxThemeSrc = `${theme}/theme/livecd/isolinux.theme.cfg`;
}
if (!fs.existsSync(isolinuxThemeSrc)) {
Utils.warning('Cannot find: ' + isolinuxThemeSrc);
process.exit();
}
/**
* isolinux.cfg from isolinux.main.cfg
*/
path.join(this.settings.iso_work, 'isolinux/isolinux.cfg');
isolinuxTemplate = `${theme}/theme/livecd/isolinux.main.cfg`;
if (!fs.existsSync(isolinuxTemplate)) {
isolinuxTemplate = path.resolve(__dirname, '../../../addons/eggs/theme/livecd/isolinux.main.cfg');
}
if (!fs.existsSync(isolinuxTemplate)) {
Utils.warning('Cannot find: ' + isolinuxTemplate);
process.exit();
}
/**
* splash
*/
splashSrc = path.resolve(__dirname, `../../../addons/${theme}/theme/livecd/splash.png`);
if (this.theme.includes('/')) {
splashSrc = path.resolve(`${theme}/theme/livecd/splash.png`);
}
if (!fs.existsSync(splashSrc)) {
Utils.warning('Cannot find: ' + splashSrc);
process.exit();
}
}
// Splash
fs.copyFileSync(splashSrc, splashDest);
// isolinux.theme.cfg
fs.copyFileSync(isolinuxThemeSrc, isolinuxThemeDest);
// isolinux.main.cfg
const kernel_parameters = Diversions.kernelParameters(this.familyId, this.volid, this.fullcrypt);
const template = fs.readFileSync(isolinuxTemplate, 'utf8');
let fullname = this.settings.remix.fullname.toUpperCase();
if (this.hidden) {
fullname = 'LINUX';
}
const view = {
fullname,
initrdImg: `/live/${path.basename(this.initrd)}`,
kernel: this.kernel,
kernel_parameters,
vmlinuz: `/live/${path.basename(this.vmlinuz)}`
};
fs.writeFileSync(isolinuxDest, mustache.render(template, view));
}