setup-apt
Version:
Setup apt packages and repositories in Debian/Ubuntu-based distributions
63 lines • 9.43 kB
JavaScript
import { tmpdir } from "os";
import { dirname, join } from "path";
import { execRootSync } from "admina";
import { error } from "ci-log";
import { readFile, writeFile } from "fs/promises";
import { DownloaderHelper } from "node-downloader-helper";
import which from "which";
import { hasAptGet } from "./get-apt.js";
import { installAptPack } from "./install.js";
let binDir;
export async function setupAptFast() {
if (!hasAptGet()) {
return undefined;
}
if (typeof binDir === "string") {
return { binDir };
}
const maybeBinDir = which.sync("apt-fast", { nothrow: true });
if (maybeBinDir !== null) {
binDir = dirname(maybeBinDir);
return { binDir };
}
binDir = "/usr/bin"; // eslint-disable-line require-atomic-updates
// Install via the installer script
await setupAptFastViaInstaller();
return { binDir };
}
async function setupAptFastViaInstaller() {
const depP = installAptPack([{ name: "bash" }, { name: "wget" }]);
// https://github.com/ilikenwf/apt-fast
const installer = new DownloaderHelper("https://raw.githubusercontent.com/ilikenwf/apt-fast/c2cd0a0420d3f2d647dc82cf749bfd58c4697dac/quick-install.sh", tmpdir(), { fileName: "install-apt-fast.sh" });
installer.on("error", (err) => {
throw new Error(`Failed to download install-apt-fast.sh: ${err}`);
});
await installer.start();
const installerPath = join(tmpdir(), "install-apt-fast.sh");
// Patch the installer script to not use sudo explicitly
let script = await readFile(installerPath, "utf8");
script = script
.replace(/sudo/g, "")
.replace("https://raw.githubusercontent.com/ilikenwf/apt-fast/master", "https://raw.githubusercontent.com/Rongronggg9/apt-fast/ac82051792f764220e5e303d4560de0f1952826b");
await writeFile(installerPath, script);
await depP;
try {
execRootSync("bash", [installerPath]);
}
catch (err) {
error(`Failed to install apt-fast via installer: ${err}`);
}
// Update the apt-fast config
const aptFastConfigPath = "/etc/apt-fast.conf";
let aptFastConfig = await readFile(aptFastConfigPath, "utf8");
// enable default suggested configs
const opts = ["_APTMGR", "DOWNLOADBEFORE"];
for (const opt of opts) {
aptFastConfig = aptFastConfig.replace(new RegExp(`^#\\s*${opt}`, "m"), opt);
}
// write the config using execRootSync
const tempAptFast = join(tmpdir(), "apt-fast.conf");
await writeFile(tempAptFast, aptFastConfig);
execRootSync("mv", [tempAptFast, aptFastConfigPath]);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LWZhc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXB0LWZhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUMzQixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUU3QyxJQUFJLE1BQTBCLENBQUE7QUFFOUIsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZO0lBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3RCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsTUFBTSxHQUFHLFVBQVUsQ0FBQSxDQUFDLDZDQUE2QztJQUVqRSxtQ0FBbUM7SUFDbkMsTUFBTSx3QkFBd0IsRUFBRSxDQUFBO0lBRWhDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsS0FBSyxVQUFVLHdCQUF3QjtJQUNyQyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFakUsdUNBQXVDO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQ3BDLCtHQUErRyxFQUMvRyxNQUFNLEVBQUUsRUFDUixFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxDQUNwQyxDQUFBO0lBQ0QsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7SUFFdkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUE7SUFFM0Qsd0RBQXdEO0lBQ3hELElBQUksTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNsRCxNQUFNLEdBQUcsTUFBTTtTQUNaLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQ3BCLE9BQU8sQ0FDTiw0REFBNEQsRUFDNUQsaUdBQWlHLENBQ2xHLENBQUE7SUFFSCxNQUFNLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFdEMsTUFBTSxJQUFJLENBQUE7SUFFVixJQUFJLENBQUM7UUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLEtBQUssQ0FBQyw2Q0FBNkMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUE7SUFDOUMsSUFBSSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFN0QsbUNBQW1DO0lBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sU0FBUyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUMzQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCJcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQgeyBleGVjUm9vdFN5bmMgfSBmcm9tIFwiYWRtaW5hXCJcbmltcG9ydCB7IGVycm9yIH0gZnJvbSBcImNpLWxvZ1wiXG5pbXBvcnQgeyByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCB7IERvd25sb2FkZXJIZWxwZXIgfSBmcm9tIFwibm9kZS1kb3dubG9hZGVyLWhlbHBlclwiXG5pbXBvcnQgd2hpY2ggZnJvbSBcIndoaWNoXCJcbmltcG9ydCB7IGhhc0FwdEdldCB9IGZyb20gXCIuL2dldC1hcHQuanNcIlxuaW1wb3J0IHsgaW5zdGFsbEFwdFBhY2sgfSBmcm9tIFwiLi9pbnN0YWxsLmpzXCJcblxubGV0IGJpbkRpcjogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEFwdEZhc3QoKSB7XG4gIGlmICghaGFzQXB0R2V0KCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKHR5cGVvZiBiaW5EaXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geyBiaW5EaXIgfVxuICB9XG5cbiAgY29uc3QgbWF5YmVCaW5EaXIgPSB3aGljaC5zeW5jKFwiYXB0LWZhc3RcIiwgeyBub3Rocm93OiB0cnVlIH0pXG4gIGlmIChtYXliZUJpbkRpciAhPT0gbnVsbCkge1xuICAgIGJpbkRpciA9IGRpcm5hbWUobWF5YmVCaW5EaXIpXG4gICAgcmV0dXJuIHsgYmluRGlyIH1cbiAgfVxuXG4gIGJpbkRpciA9IFwiL3Vzci9iaW5cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXNcblxuICAvLyBJbnN0YWxsIHZpYSB0aGUgaW5zdGFsbGVyIHNjcmlwdFxuICBhd2FpdCBzZXR1cEFwdEZhc3RWaWFJbnN0YWxsZXIoKVxuXG4gIHJldHVybiB7IGJpbkRpciB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwQXB0RmFzdFZpYUluc3RhbGxlcigpIHtcbiAgY29uc3QgZGVwUCA9IGluc3RhbGxBcHRQYWNrKFt7IG5hbWU6IFwiYmFzaFwiIH0sIHsgbmFtZTogXCJ3Z2V0XCIgfV0pXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lsaWtlbndmL2FwdC1mYXN0XG4gIGNvbnN0IGluc3RhbGxlciA9IG5ldyBEb3dubG9hZGVySGVscGVyKFxuICAgIFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2lsaWtlbndmL2FwdC1mYXN0L2MyY2QwYTA0MjBkM2YyZDY0N2RjODJjZjc0OWJmZDU4YzQ2OTdkYWMvcXVpY2staW5zdGFsbC5zaFwiLFxuICAgIHRtcGRpcigpLFxuICAgIHsgZmlsZU5hbWU6IFwiaW5zdGFsbC1hcHQtZmFzdC5zaFwiIH0sXG4gIClcbiAgaW5zdGFsbGVyLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRvd25sb2FkIGluc3RhbGwtYXB0LWZhc3Quc2g6ICR7ZXJyfWApXG4gIH0pXG4gIGF3YWl0IGluc3RhbGxlci5zdGFydCgpXG5cbiAgY29uc3QgaW5zdGFsbGVyUGF0aCA9IGpvaW4odG1wZGlyKCksIFwiaW5zdGFsbC1hcHQtZmFzdC5zaFwiKVxuXG4gIC8vIFBhdGNoIHRoZSBpbnN0YWxsZXIgc2NyaXB0IHRvIG5vdCB1c2Ugc3VkbyBleHBsaWNpdGx5XG4gIGxldCBzY3JpcHQgPSBhd2FpdCByZWFkRmlsZShpbnN0YWxsZXJQYXRoLCBcInV0ZjhcIilcbiAgc2NyaXB0ID0gc2NyaXB0XG4gICAgLnJlcGxhY2UoL3N1ZG8vZywgXCJcIilcbiAgICAucmVwbGFjZShcbiAgICAgIFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2lsaWtlbndmL2FwdC1mYXN0L21hc3RlclwiLFxuICAgICAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vUm9uZ3JvbmdnZzkvYXB0LWZhc3QvYWM4MjA1MTc5MmY3NjQyMjBlNWUzMDNkNDU2MGRlMGYxOTUyODI2YlwiLFxuICAgIClcblxuICBhd2FpdCB3cml0ZUZpbGUoaW5zdGFsbGVyUGF0aCwgc2NyaXB0KVxuXG4gIGF3YWl0IGRlcFBcblxuICB0cnkge1xuICAgIGV4ZWNSb290U3luYyhcImJhc2hcIiwgW2luc3RhbGxlclBhdGhdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcihgRmFpbGVkIHRvIGluc3RhbGwgYXB0LWZhc3QgdmlhIGluc3RhbGxlcjogJHtlcnJ9YClcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgYXB0LWZhc3QgY29uZmlnXG4gIGNvbnN0IGFwdEZhc3RDb25maWdQYXRoID0gXCIvZXRjL2FwdC1mYXN0LmNvbmZcIlxuICBsZXQgYXB0RmFzdENvbmZpZyA9IGF3YWl0IHJlYWRGaWxlKGFwdEZhc3RDb25maWdQYXRoLCBcInV0ZjhcIilcblxuICAvLyBlbmFibGUgZGVmYXVsdCBzdWdnZXN0ZWQgY29uZmlnc1xuICBjb25zdCBvcHRzID0gW1wiX0FQVE1HUlwiLCBcIkRPV05MT0FEQkVGT1JFXCJdXG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdHMpIHtcbiAgICBhcHRGYXN0Q29uZmlnID0gYXB0RmFzdENvbmZpZy5yZXBsYWNlKG5ldyBSZWdFeHAoYF4jXFxcXHMqJHtvcHR9YCwgXCJtXCIpLCBvcHQpXG4gIH1cblxuICAvLyB3cml0ZSB0aGUgY29uZmlnIHVzaW5nIGV4ZWNSb290U3luY1xuICBjb25zdCB0ZW1wQXB0RmFzdCA9IGpvaW4odG1wZGlyKCksIFwiYXB0LWZhc3QuY29uZlwiKVxuICBhd2FpdCB3cml0ZUZpbGUodGVtcEFwdEZhc3QsIGFwdEZhc3RDb25maWcpXG4gIGV4ZWNSb290U3luYyhcIm12XCIsIFt0ZW1wQXB0RmFzdCwgYXB0RmFzdENvbmZpZ1BhdGhdKVxufVxuIl19