UNPKG

penguins-eggs

Version:

A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others

93 lines (92 loc) 3.1 kB
/** * ./src/commands/cuckoo.ts * penguins-eggs v.10.0.0 / ecmascript 2020 * author: Piero Proietti * email: piero.proietti@gmail.com * license: MIT */ import { Args, Command, Flags } from '@oclif/core'; import fs from 'fs'; import Utils from '../classes/utils.js'; import { exec } from '../lib/utils.js'; import path from 'node:path'; import { execSync } from 'node:child_process'; // _dirname const __dirname = path.dirname(new URL(import.meta.url).pathname); export default class Pods extends Command { static args = { distro: Args.string({ description: 'distro to build', name: 'distro', required: false }) }; static description = 'eggs pods: build ISOs from containers'; static examples = [ 'eggs pods archlinux', 'eggs pods debian', 'eggs pods ubuntu', ]; static flags = { help: Flags.help({ char: 'h' }) }; /** * */ async run() { Utils.titles(this.id + ' ' + this.argv); const { args, flags } = await this.parse(Pods); if (!isPodmanInstalledSync()) { console.log('You need to install podmand to use this command'); process.exit(0); } if (process.getuid && process.getuid() === 0) { Utils.warning('You must use eggs pods without sudo'); process.exit(0); } // mode let pathPods = path.resolve(__dirname, `../../pods`); const userHome = `/home/${await Utils.getPrimaryUser()}/`; if (Utils.isSources()) { console.log("Using eggs pods from sources.\nThe pods directory of the source will be used "); } else { console.log("Using eggs pods from package."); if (!fs.existsSync(`${userHome}/pods`)) { console.log(`The pods directory will be created in the user home ${userHome}, do you want to continue?`); if (await Utils.customConfirm()) { console.log(`Creating a pods folder under ${userHome}`); await exec(`cp -r ${Utils.rootPenguin()}/pods ${userHome}`); } } pathPods = path.resolve(`${userHome}/pods`); } console.log(`Using ${pathPods}`); let distro = 'debian'; if (this.argv['0'] !== undefined) { distro = this.argv['0']; } let cmd = `${pathPods}/${distro}.sh`; if (fs.existsSync(cmd)) { console.log(`We are building a egg from a ${distro} container`); if (!await Utils.customConfirm()) { process.exit(0); } await exec(cmd); } else { console.log(`No script: ${cmd} fpr ${distro} container`); } } } /** * * @returns */ function isPodmanInstalledSync() { let podmanInstalled = false; try { execSync('podman --version', { stdio: 'ignore' }); podmanInstalled = true; } catch (error) { console.error('Podman does not appear to be installed or is not in the PATH.\n'); } return podmanInstalled; }