parent
07a9a95b10
commit
505178ec2f
3 changed files with 36 additions and 0 deletions
|
@ -15,6 +15,7 @@ import { PasswdEntry, readPasswd } from "./helpers/passwd.js";
|
||||||
import { logDebug } from "./helpers/logger.js";
|
import { logDebug } from "./helpers/logger.js";
|
||||||
import assert from "node:assert";
|
import assert from "node:assert";
|
||||||
import { Persist } from "./persist.js";
|
import { Persist } from "./persist.js";
|
||||||
|
import { writePasswd } from "./passwd.js";
|
||||||
|
|
||||||
export class Alpine {
|
export class Alpine {
|
||||||
dir: string;
|
dir: string;
|
||||||
|
@ -172,6 +173,7 @@ export class Alpine {
|
||||||
const alpine = new Alpine({ dir });
|
const alpine = new Alpine({ dir });
|
||||||
await alpine.fstab.write();
|
await alpine.fstab.write();
|
||||||
await alpine.persist.write();
|
await alpine.persist.write();
|
||||||
|
await writePasswd(alpine);
|
||||||
return alpine;
|
return alpine;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
index.ts
2
index.ts
|
@ -15,10 +15,12 @@ import { setupDhcpcd } from "./services/dhcpcd.js";
|
||||||
import { setupNtpsec } from "./services/ntpsec.js";
|
import { setupNtpsec } from "./services/ntpsec.js";
|
||||||
import { setupGrafana } from "./services/grafana/index.js";
|
import { setupGrafana } from "./services/grafana/index.js";
|
||||||
import { setupLoki } from "./services/loki/index.js";
|
import { setupLoki } from "./services/loki/index.js";
|
||||||
|
import { generatePasswdSecretsFile } from "./passwd.js";
|
||||||
|
|
||||||
if (process.argv[2] === "generate-secrets") {
|
if (process.argv[2] === "generate-secrets") {
|
||||||
await generateForgejoSecretsFile();
|
await generateForgejoSecretsFile();
|
||||||
await generateGrafanaSecretsFile();
|
await generateGrafanaSecretsFile();
|
||||||
|
await generatePasswdSecretsFile();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
32
passwd.ts
Normal file
32
passwd.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import { nanoid } from "nanoid";
|
||||||
|
import { generateSecretsFile, loadSecretsFile } from "./helpers/secrets.js";
|
||||||
|
import { Alpine } from "./alpine.js";
|
||||||
|
import { execFile } from "./helpers/better-api.js";
|
||||||
|
|
||||||
|
export interface PasswdSecrets {
|
||||||
|
rootPassword: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadPasswdSecretsFile = loadSecretsFile<PasswdSecrets>("passwd");
|
||||||
|
export const generatePasswdSecretsFile = generateSecretsFile(
|
||||||
|
"passwd",
|
||||||
|
generatePasswdSecrets
|
||||||
|
);
|
||||||
|
async function generatePasswdSecrets(): Promise<PasswdSecrets> {
|
||||||
|
console.info(
|
||||||
|
"La contraseña por defecto de root va a estar en secrets/passwd.json"
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
rootPassword: nanoid(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function writePasswd(alpine: Alpine) {
|
||||||
|
const secrets = await loadPasswdSecretsFile();
|
||||||
|
const proc = execFile("chroot", [alpine.dir, "passwd", "root"]);
|
||||||
|
if (!proc.child.stdin) throw false;
|
||||||
|
proc.child.stdin.write(secrets.rootPassword + "\n");
|
||||||
|
proc.child.stdin.write(secrets.rootPassword + "\n");
|
||||||
|
proc.child.stdin.end();
|
||||||
|
await proc;
|
||||||
|
}
|
Loading…
Reference in a new issue