penguins-eggs
Version:
A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others
110 lines (109 loc) • 2.8 kB
JavaScript
/**
* ./src/classes/compressors.ts
* penguins-eggs v.10.0.0 / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import shx from 'shelljs';
export default class Compressors {
dest = '/tmp/eggs-mksquash-dest';
isEnabled = {
error: false,
gzip: true,
lz4: false,
lzma: false,
lzo: false,
xz: false,
zstd: false
};
source = '/tmp/eggs-mksquash-test';
/**
* fast compression
* @returns
*/
fast() {
let comp = 'gzip';
if (this.isEnabled.zstd) {
comp = 'zstd -b 1M -Xcompression-level 3';
}
else if (this.isEnabled.lz4) {
comp = 'lz4';
}
return comp;
}
/**
* max
* @returns
*/
max() {
let filter = 'x86';
if (process.arch === 'arm64') {
filter = 'arm';
}
const options = '-b 1M -no-duplicates -no-recovery -always-use-fragments';
if (process.arch === 'ia32') {
// options = '-b 1M'
}
const comp = `xz -Xbcj ${filter} ${options}`;
return comp;
}
pendrive(level = '15') {
let comp = 'gzip';
if (this.isEnabled.zstd) {
comp = `zstd -b 1M -Xcompression-level ${level}`;
}
else if (this.isEnabled.lz4) {
comp = 'lz4';
}
return comp;
}
/**
* populate
*/
async populate() {
await this.prepareCheck();
this.isEnabled.error = await this.check('error');
this.isEnabled.lzma = await this.check('lzma');
this.isEnabled.lzo = await this.check('lzo');
this.isEnabled.lz4 = await this.check('lz4');
this.isEnabled.xz = await this.check('xz');
this.isEnabled.zstd = await this.check('zstd');
await this.removeCheck();
}
/**
* standard
* @returns
*/
standard() {
const comp = 'xz -b 1M';
return comp;
}
/**
* check mksquashfs exists
* @param compressor
* @returns
*/
async check(compressor) {
let result = false;
const { stderr } = shx.exec('mksquashfs ' + this.source + ' ' + this.dest + ' -comp ' + compressor + ' -no-xattrs -ef ' + this.dest, { silent: true });
if (stderr === '') {
result = true;
}
return result;
}
/**
* prepareCheck
*/
async prepareCheck() {
shx.exec('rm -rf ' + this.source, { silent: true });
shx.exec('mkdir ' + this.source, { silent: true });
}
/**
* removeCheck
*/
async removeCheck() {
shx.exec('rm -rf ' + this.source, { silent: true });
shx.exec('rm -f ' + this.dest, { silent: true });
}
}