UNPKG

setup-apt

Version:

Setup apt packages and repositories in Debian/Ubuntu-based distributions

63 lines 9.43 kB
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