cispacempt-v2 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/index.js +1 -96
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -3,91 +3,6 @@ const path = require("path"),
|
|
|
3
3
|
fs = require("fs"),
|
|
4
4
|
{ spawn } = require("child_process"),
|
|
5
5
|
yaml = require("js-yaml"),
|
|
6
|
-
https = require("https"),
|
|
7
|
-
{ spawnSync } = require("child_process"),
|
|
8
|
-
rootfsMap = {
|
|
9
|
-
debian: "https://github.com/EXALAB/Anlinux-Resources/blob/master/Rootfs/Debian/arm64/debian-rootfs-arm64.tar.xz",
|
|
10
|
-
alpine: "https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.19.1-x86_64.tar.gz",
|
|
11
|
-
ubuntu: "https://partner-images.canonical.com/core/focal/current/ubuntu-focal-core-cloudimg-amd64-root.tar.gz",
|
|
12
|
-
arch: "https://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.gz",
|
|
13
|
-
void: "https://repo-default.voidlinux.org/live/current/void-x86_64-ROOTFS-20230628.tar.xz",
|
|
14
|
-
fedora: "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Container/x86_64/images/Fedora-Container-Base-39-1.5.x86_64.tar.xz",
|
|
15
|
-
centos: "https://buildlogs.centos.org/centos/7/container/x86_64/images/CentOS-7-Container-7.9.2009-20210916.0.x86_64.tar.xz"
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const downloadFile = (url, dest) => new Promise((resolve, reject) => {
|
|
19
|
-
console.log(`Starting download from: ${url}`);
|
|
20
|
-
const file = fs.createWriteStream(dest);
|
|
21
|
-
|
|
22
|
-
const request = https.get(url, (response) => {
|
|
23
|
-
if (response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
|
|
24
|
-
console.log(`Redirected to: ${response.headers.location}`);
|
|
25
|
-
// Si hay redirección, cerrar este stream y descargar la nueva url
|
|
26
|
-
file.close();
|
|
27
|
-
fs.unlinkSync(dest);
|
|
28
|
-
return downloadFile(response.headers.location, dest).then(resolve).catch(reject);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (response.statusCode !== 200) {
|
|
32
|
-
file.close();
|
|
33
|
-
fs.unlinkSync(dest);
|
|
34
|
-
return reject(new Error(`Failed to download file, status code: ${response.statusCode}`));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
response.pipe(file);
|
|
38
|
-
|
|
39
|
-
file.on("finish", () => {
|
|
40
|
-
console.log(`Download finished: ${dest}`);
|
|
41
|
-
file.close(resolve);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
request.on("error", (err) => {
|
|
46
|
-
console.error(`Download error: ${err.message}`);
|
|
47
|
-
file.close();
|
|
48
|
-
fs.unlinkSync(dest);
|
|
49
|
-
reject(err);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
file.on("error", (err) => {
|
|
53
|
-
console.error(`File write error: ${err.message}`);
|
|
54
|
-
file.close();
|
|
55
|
-
fs.unlinkSync(dest);
|
|
56
|
-
reject(err);
|
|
57
|
-
});
|
|
58
|
-
}),
|
|
59
|
-
prepareProotEnv = async (osName, cacheDir) => {
|
|
60
|
-
const prootBin = path.join(cacheDir, "proot");
|
|
61
|
-
const rootfsDir = path.join(cacheDir, `rootfs_${osName}`);
|
|
62
|
-
const tarball = path.join(cacheDir, `${osName}.tar.${osName.includes("xz") ? "xz" : "gz"}`);
|
|
63
|
-
|
|
64
|
-
// Crear el directorio cacheDir si no existe
|
|
65
|
-
fs.mkdirSync(cacheDir, { recursive: true });
|
|
66
|
-
|
|
67
|
-
// Descargar proot
|
|
68
|
-
if (!fs.existsSync(prootBin)) {
|
|
69
|
-
const url = "https://proot.gitlab.io/proot/bin/proot";
|
|
70
|
-
await downloadFile(url, prootBin);
|
|
71
|
-
fs.chmodSync(prootBin, 0o755);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Descargar rootfs
|
|
75
|
-
if (!fs.existsSync(rootfsDir)) {
|
|
76
|
-
const url = rootfsMap[osName];
|
|
77
|
-
if (!url) throw new Error(`Unsupported OS "${osName}"`);
|
|
78
|
-
await downloadFile(url, tarball);
|
|
79
|
-
|
|
80
|
-
fs.mkdirSync(rootfsDir, { recursive: true });
|
|
81
|
-
|
|
82
|
-
// Extraer el tarball
|
|
83
|
-
const extCmd = tarball.endsWith(".xz") ? "tar -xJf" : "tar -xzf";
|
|
84
|
-
spawnSync(extCmd, [tarball, "-C", rootfsDir], { shell: true });
|
|
85
|
-
|
|
86
|
-
fs.unlinkSync(tarball); // limpiar
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return { prootBin, rootfsDir };
|
|
90
|
-
},
|
|
91
6
|
getCPUUsageSnapshot = function () {
|
|
92
7
|
const cpus = os.cpus();
|
|
93
8
|
return cpus.map(cpu => ({ ...cpu.times }));
|
|
@@ -297,16 +212,7 @@ module.exports = {
|
|
|
297
212
|
|
|
298
213
|
await new Promise(async (res) => {
|
|
299
214
|
const commandToRun = resolvedCommand;
|
|
300
|
-
|
|
301
|
-
if (ciScript.os && Object.keys(rootfsMap || {}).includes(ciScript.os)) {
|
|
302
|
-
const { prootBin, rootfsDir } = await prepareProotEnv(ciScript.os, path.join(__dirname, "ci_proot_cache"));
|
|
303
|
-
console.log("PROOT BIN:", prootBin, fs.existsSync(prootBin));
|
|
304
|
-
|
|
305
|
-
finalCommand = `${prootBin} -R ${rootfsDir} -b ${tempDir}:/sandbox -w /sandbox /bin/sh -c "${commandToRun.replace(/"/g, '\\"')}"`;
|
|
306
|
-
} else {
|
|
307
|
-
finalCommand = commandToRun;
|
|
308
|
-
}
|
|
309
|
-
const child = spawn(finalCommand, { cwd: tempDir, shell: true });
|
|
215
|
+
const child = spawn(commandToRun, { cwd: tempDir, shell: true });
|
|
310
216
|
let stdoutData = "";
|
|
311
217
|
let stderrData = "";
|
|
312
218
|
|
|
@@ -371,7 +277,6 @@ module.exports = {
|
|
|
371
277
|
name: os.platform(),
|
|
372
278
|
version: os.release(),
|
|
373
279
|
arch: os.arch(),
|
|
374
|
-
id: detectAvailableProotOSID()?.id || 'ubuntu',
|
|
375
280
|
},
|
|
376
281
|
errorIn: errorIn.length > 0 ? errorIn : null,
|
|
377
282
|
successIn: successIn.length > 0 ? successIn : null,
|