penguins-eggs
Version:
A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others
220 lines (219 loc) • 7.59 kB
JavaScript
/**
* ./src/commands/syncfrom.ts
* penguins-eggs v.10.0.0 / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import { Command, Flags } from '@oclif/core';
import inquirer from 'inquirer';
import Distro from '../classes/distro.js';
import Tools from '../classes/tools.js';
import Utils from '../classes/utils.js';
import Diversions from '../classes/diversions.js';
import { exec } from '../lib/utils.js';
import axios from 'axios';
import https from 'node:https';
const agent = new https.Agent({
rejectUnauthorized: false
});
/**
*
*/
export default class Update extends Command {
static description = "update the Penguins' eggs tool";
static examples = ['eggs update'];
static flags = {
help: Flags.help({ char: 'h' }),
verbose: Flags.boolean({ char: 'v', description: 'verbose' })
};
distro = new Distro();
/**
* run
*/
async run() {
Utils.titles(this.id + ' ' + this.argv);
const { flags } = await this.parse(Update);
Utils.titles(this.id + ' ' + this.argv);
if (Utils.isRoot()) {
if (Utils.isSources()) {
Utils.warning(`You are on penguins-eggs v. ${Utils.getPackageVersion()} from sources`);
}
else if (Utils.isPackage()) {
Utils.warning(`You are on eggs-${Utils.getPackageVersion()} installed as package`);
}
await this.chooseUpdate();
}
else {
Utils.useRoot(this.id);
}
}
async chooseUpdate() {
console.log();
const choose = await this.choosePkg();
Utils.titles(`updating via ${choose}`);
switch (choose) {
case 'repos': {
await this.getPkgFromRepo();
break;
}
case 'lan': {
await this.getPkgFromLan();
break;
}
case 'sourceforge': {
this.getPkgFromSourceforge();
break;
}
case 'sources': {
this.getFromSources();
break;
}
// No default
}
}
/**
*
*/
async choosePkg() {
const choices = ['abort'];
choices.push('lan', 'repos', 'sourceforge', 'sources');
const questions = [
{
choices,
message: 'select update method',
name: 'selected',
type: 'list'
}
];
const answer = await inquirer.prompt(questions);
if (answer.selected === 'abort') {
process.exit(0);
}
return answer.selected;
}
/**
*
*/
async getPkgFromRepo() {
let cmd = "";
if (this.distro.familyId === "debian") {
cmd = 'apt install penguins-eggs';
}
else if (this.distro.familyId === 'archlinux') {
cmd = 'pacman -S penguins-eggs';
}
else if (this.distro.familyId === 'alpine') {
cmd = `apk add penguins-egga`;
}
console.log(cmd);
await exec(cmd);
}
/**
* download da LAN
*/
async getPkgFromLan() {
const Tu = new Tools();
await Tu.loadSettings();
Utils.warning('import from lan');
if (this.distro.familyId === "debian") {
const filterDeb = `penguins-eggs_10.?.*-*_${Utils.uefiArch()}.deb`;
const cmd = `scp ${Tu.config.remoteUser}@${Tu.config.remoteHost}:${Tu.config.remotePathPackages}/debs/${filterDeb} /tmp`;
await exec(cmd, { capture: true, echo: true });
if (await Utils.customConfirm(`Want to install ${filterDeb}`)) {
await exec(`dpkg -i /tmp/${filterDeb}`);
}
}
else if (this.distro.familyId === 'archlinux') {
let repo = "aur";
if (Diversions.isManjaroBased(this.distro.distroId)) {
repo = 'manjaro';
}
const filterAur = `penguins-eggs-10.?.*-?-any.pkg.tar.zst`;
const cmd = `scp ${Tu.config.remoteUser}@${Tu.config.remoteHost}:${Tu.config.remotePathPackages}/${repo}/${filterAur} /tmp`;
await exec(cmd, { capture: true, echo: true });
if (await Utils.customConfirm(`Want to install ${filterAur}`)) {
await exec(`pacman -U /tmp/${filterAur}`);
}
}
else if (this.distro.familyId === 'alpine') {
let arch = 'x86_64';
if (process.arch === 'ia32') {
arch = 'i386';
}
const filter = `penguins-eggs*10.?.*-r*.apk`;
const cmd = `scp ${Tu.config.remoteUser}@${Tu.config.remoteHost}:${Tu.config.remotePathPackages}/alpine/${filter} /tmp`;
await exec(cmd, { capture: true, echo: true });
if (await Utils.customConfirm(`Want to install ${filter}`)) {
await exec(`apk add /tmp/${filter}`);
}
}
}
/**
*
*/
async getPkgFromSourceforge() {
let repo = '';
let cmd = '';
let url = 'https://sourceforge.net/projects/penguins-eggs/files/Packages';
let filter = `penguins-eggs`;
if (this.distro.familyId === "debian") {
repo = "debs";
url = `${url}/${repo}/${Utils.uefiArch()}`;
filter = `penguins-eggs_10.?.*-?_${Utils.uefiArch()}.deb`;
cmd = `sudo dpkg -i ${filter}`;
}
else if (this.distro.familyId === 'archlinux') {
repo = "aur";
filter = `penguins-eggs-10.?.*-?-any.pkg.tar.zst`;
cmd = `sudo pacman -U ${filter}`;
if (Diversions.isManjaroBased(this.distro.distroId)) {
repo = 'manjaro';
}
url = `${url}/${repo}`;
}
let command = `Open your browser at:\n`;
command += `${url}\n`;
command += `select and download the package: ${filter},\n`;
command += `then type the command:\n`;
command += `${cmd}`;
console.log(command);
await this.show(url);
}
/**
*
* @param aptVersion
*/
getFromSources() {
console.log('You can get a fresh installation, cloning penguins-eggs:');
console.log('cd ~');
console.log('git clone https://github.com/pieroproietti/penguins-eggs');
console.log('');
console.log('Then, open your browser to read detailed instructions:');
console.log('https://github.com/pieroproietti/penguins-eggs/blob/master/PREREQUISITES/README.md');
console.log('');
console.log('');
}
/**
* show
*/
async show(url) {
url += `/stats/json`;
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
// adjust 0 before single digit date
const day = ('0' + yesterday.getDate()).slice(-2);
const month = ('0' + (yesterday.getMonth() + 1)).slice(-2);
const year = yesterday.getFullYear();
const end = year + '-' + month + '-' + day;
let start = year + '-' + month + '-' + day;
const request = '?start_date=' + start + '&end_date=' + end;
url += request;
const res = await axios.get(url, { httpsAgent: agent });
console.log("\nStatistics to get an idea: yesterday downloads");
console.log();
for (const country of res.data.countries) {
console.log('- ' + country[0] + ': ' + country[1]);
}
}
}