setear passwd en root

fixes #11
This commit is contained in:
Cat /dev/Nulo 2023-02-22 22:15:24 -03:00
parent 07a9a95b10
commit 505178ec2f
3 changed files with 36 additions and 0 deletions

View file

@ -15,6 +15,7 @@ import { PasswdEntry, readPasswd } from "./helpers/passwd.js";
import { logDebug } from "./helpers/logger.js";
import assert from "node:assert";
import { Persist } from "./persist.js";
import { writePasswd } from "./passwd.js";
export class Alpine {
dir: string;
@ -172,6 +173,7 @@ export class Alpine {
const alpine = new Alpine({ dir });
await alpine.fstab.write();
await alpine.persist.write();
await writePasswd(alpine);
return alpine;
}
}

View file

@ -15,10 +15,12 @@ import { setupDhcpcd } from "./services/dhcpcd.js";
import { setupNtpsec } from "./services/ntpsec.js";
import { setupGrafana } from "./services/grafana/index.js";
import { setupLoki } from "./services/loki/index.js";
import { generatePasswdSecretsFile } from "./passwd.js";
if (process.argv[2] === "generate-secrets") {
await generateForgejoSecretsFile();
await generateGrafanaSecretsFile();
await generatePasswdSecretsFile();
exit(0);
}

32
passwd.ts Normal file
View 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;
}