penguins-eggs
Version:
A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives
202 lines (201 loc) • 6.54 kB
JavaScript
/**
* ./src/krill/modules/bootloader-config.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 Utils from '../../../classes/utils.js';
import { exec } from '../../../lib/utils.js';
/**
*
* @param this
*/
export default async function bootloaderConfig() {
let cmd = '';
/**
* alpine
*/
switch (this.distro.familyId) {
case 'alpine': {
if (this.efi) {
try {
cmd = `chroot ${this.installTarget} apk add grub grub-efi efibootmgr shim} ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
else {
try {
cmd = `chroot ${this.installTarget} apk add grub grub-bios ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
/**
* archlinux
*/
break;
}
case 'archlinux': {
if (this.efi) {
try {
cmd = `chroot ${this.installTarget} pacman -Sy grub efibootmgr shim} ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
else {
try {
cmd = `chroot ${this.installTarget} pacman -Sy grub ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
/**
* debian
*/
break;
}
case 'debian': {
try {
cmd = `chroot ${this.installTarget} apt-get -y update ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
await exec('sleep 1', this.echo);
const aptInstallOptions = ' apt install -y --no-upgrade --allow-unauthenticated -o Acquire::gpgv::Options::=--ignore-time-conflict ';
if (this.efi) {
try {
cmd = `chroot ${this.installTarget} ${aptInstallOptions} grub-efi-${Utils.uefiArch()} efibootmgr shim-signed --allow-unauthenticated ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
else {
try {
cmd = `chroot ${this.installTarget} ${aptInstallOptions} grub-pc ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
/**
* fedora
*/
break;
}
case 'fedora': {
if (this.efi) {
try {
cmd = ``;
cmd += `chroot ${this.installTarget} `;
cmd += `dnf -y install grub2 `;
cmd += `grub2-efi-${process.arch} `;
cmd += `grub2-efi-${process.arch}-modules `;
cmd += `efibootmgr `;
cmd += `shim-${process.arch} ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
else {
try {
cmd = ``;
cmd += `chroot ${this.installTarget} `;
cmd += `dnf -y install grub2 `;
cmd += `grub2-pc `;
cmd += `grub2-pc-modules ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
/**
* openmamba
*/
break;
}
case 'openmamba': {
if (this.efi) {
try {
cmd = ``;
cmd += `chroot ${this.installTarget} `;
cmd += `dnf -y install grub `;
cmd += `grub-efi-x86_64 `;
cmd += `efibootmgr `;
cmd += `shim-signed ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
else {
try {
cmd = ``;
cmd += `chroot ${this.installTarget} `;
cmd += `dnf -y install grub ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
/**
* opensuse
*/
break;
}
case 'opensuse': {
if (this.efi) {
try {
cmd = `chroot ${this.installTarget} zypper install -y grub2 grub2-x86_64-efi efibootmgr shim} ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
else {
try {
cmd = `chroot ${this.installTarget} zypper install -y zypper install -y grub2 grub2-i386-pc ${this.toNull}`;
await exec(cmd, this.echo);
}
catch (error) {
await showError(cmd, error);
}
}
break;
}
// No default
}
// await Utils.debug(`grub packages install cmd: ${cmd}`)
}
/**
*
* @param cmd
* @param error
*/
async function showError(cmd, error) {
console.log('error:', error);
console.log(cmd);
await Utils.pressKeyToExit(cmd, true);
}