setup-cpp/src/nala/nala.ts

55 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-04-03 15:15:43 +08:00
import { execRootSync } from "admina"
import { dirname } from "patha"
2022-07-25 15:40:05 +08:00
import which from "which"
2022-07-25 15:46:23 +08:00
import { isUbuntu } from "../utils/env/isUbuntu"
import { addAptKeyViaDownload, hasNala, setupAptPack } from "../utils/setup/setupAptPack"
2022-07-25 15:40:05 +08:00
let binDir: string | undefined
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export async function setupNala(version: string, _setupDir: string, _arch: string) {
2022-07-25 15:46:23 +08:00
if (!isUbuntu()) {
2022-07-25 15:40:05 +08:00
return undefined
}
if (typeof binDir === "string") {
return { binDir }
}
const maybeBinDir = which.sync("nala", { nothrow: true })
if (maybeBinDir !== null) {
binDir = dirname(maybeBinDir)
return { binDir }
}
2024-08-08 04:16:16 +08:00
// https://gitlab.com/volian/nala/-/wikis/Installation
const keyFileName = await addAptKeyViaDownload(
2024-08-08 04:16:16 +08:00
"volian-archive-nala.gpg",
"https://deb.volian.org/volian/nala.key",
)
2022-08-08 08:33:11 +08:00
execRootSync("/bin/bash", [
2022-07-28 11:27:12 +08:00
"-c",
2024-08-08 04:16:16 +08:00
`echo "deb [signed-by=${keyFileName}] http://deb.volian.org/volian/ nala main" | tee /etc/apt/sources.list.d/volian-archive-nala.list`,
2022-07-28 11:27:12 +08:00
])
2022-07-25 15:40:05 +08:00
try {
if (version !== "legacy") {
await setupAptPack([{ name: "nala" }], true)
} else {
await setupAptPack([{ name: "nala-legacy" }], true)
}
} catch (err) {
await setupAptPack([{ name: "nala-legacy" }], true)
2022-07-25 15:40:05 +08:00
}
binDir = "/usr/bin" // eslint-disable-line require-atomic-updates
2022-07-25 15:40:05 +08:00
return { binDir }
}
export function bashWithNala(script: string) {
if (hasNala()) {
return `apt-get() { nala $@; }; export -f apt-get; ${script}; unset -f apt-get`
}
return script
}