Compare commits

...

5 commits

Author SHA1 Message Date
6e3ab48720 chequear typescript 2023-02-02 19:04:01 -03:00
53c1fa831d usar imports node: 2023-02-02 19:03:47 -03:00
4380042db3 refactorizar helpers
asdfasdf
2023-02-02 19:03:46 -03:00
db7ae846f7 qemu: arreglar types 2023-02-02 18:59:13 -03:00
a74af935ac qemu: shutdown 2023-02-02 18:55:31 -03:00
9 changed files with 43 additions and 27 deletions

View file

@ -11,7 +11,7 @@ import {
import { tmpdir } from "node:os"; import { tmpdir } from "node:os";
import path from "node:path"; import path from "node:path";
import { cwd } from "node:process"; import { cwd } from "node:process";
import { execFile } from "./helpers.js"; import { execFile } from "./helpers/better-api";
export class Alpine { export class Alpine {
dir: string; dir: string;

18
helpers/better-api.ts Normal file
View file

@ -0,0 +1,18 @@
import { promisify } from "node:util";
import {
execFile as execFileCallback,
spawn as spawnCallback,
} from "node:child_process";
import { access } from "node:fs/promises";
export const execFile = promisify(execFileCallback);
export const spawn = promisify(spawnCallback);
export async function canAccess(path: string): Promise<boolean> {
try {
await access(path);
return true;
} catch {
return false;
}
}

View file

@ -1,22 +1,5 @@
import { promisify } from "node:util";
import {
execFile as execFileCallback,
spawn as spawnCallback,
} from "node:child_process";
import { access } from "node:fs/promises";
import { getuid } from "node:process"; import { getuid } from "node:process";
import { execFile } from "./better-api";
export const execFile = promisify(execFileCallback);
export const spawn = promisify(spawnCallback);
export async function canAccess(path: string): Promise<boolean> {
try {
await access(path);
return true;
} catch {
return false;
}
}
export async function sudoChown(path: string, owner: string): Promise<void> { export async function sudoChown(path: string, owner: string): Promise<void> {
await execFile("sudo", ["chown", owner, path]); await execFile("sudo", ["chown", owner, path]);

View file

@ -3,7 +3,8 @@ import { tmpdir } from "node:os";
import path from "node:path"; import path from "node:path";
import { cwd } from "node:process"; import { cwd } from "node:process";
import { Alpine } from "./alpine.js"; import { Alpine } from "./alpine.js";
import { execFile, spawn, sudoChownToRunningUser } from "./helpers.js"; import { execFile } from "./helpers/better-api.js";
import { sudoChownToRunningUser } from "./helpers/sudo.js";
import { setupKernel } from "./kernel.js"; import { setupKernel } from "./kernel.js";
import { runQemu } from "./qemu.js"; import { runQemu } from "./qemu.js";
import { Runit } from "./runit/index.js"; import { Runit } from "./runit/index.js";

View file

@ -2,7 +2,8 @@ import { constants } from "node:fs";
import { copyFile } from "node:fs/promises"; import { copyFile } from "node:fs/promises";
import path from "node:path"; import path from "node:path";
import { Alpine } from "./alpine.js"; import { Alpine } from "./alpine.js";
import { canAccess, sudoChownToRunningUser, sudoRm } from "./helpers.js"; import { canAccess } from "./helpers/better-api.js";
import { sudoChownToRunningUser, sudoRm } from "./helpers/sudo.js";
export type Kind = "lts" | "virt"; export type Kind = "lts" | "virt";
export type Kernel = { export type Kernel = {

View file

@ -5,7 +5,8 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"run": "esbuild --log-level=warning --target=node18 --sourcemap --outdir=build-javascript --outbase=. *.ts **/*.ts && node --enable-source-maps build-javascript/index.js" "run": "esbuild --log-level=warning --target=node18 --sourcemap --outdir=build-javascript --outbase=. *.ts **/*.ts && node --enable-source-maps build-javascript/index.js",
"tsc:check": "tsc --noEmit"
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",

View file

@ -1,13 +1,16 @@
import { mkdtemp, rm } from "node:fs/promises"; import { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os"; import { tmpdir } from "node:os";
import path from "node:path"; import path from "node:path";
import { execFile } from "./helpers.js"; import { execFile } from "./helpers/better-api.js";
import { Kernel } from "./kernel.js"; import { Kernel } from "./kernel.js";
export async function runQemu( export async function runQemu(
squashfs: string, squashfs: string,
kernel: Kernel, kernel: Kernel,
{ graphic }: { graphic: boolean } = { graphic: true } { graphic, noShutdown }: { graphic?: boolean; noShutdown?: boolean } = {
graphic: true,
noShutdown: false,
}
) { ) {
const tmp = await mkdtemp(path.join(tmpdir(), "define-alpine-qemu-")); const tmp = await mkdtemp(path.join(tmpdir(), "define-alpine-qemu-"));
try { try {
@ -28,6 +31,7 @@ export async function runQemu(
kernelAppend.push("console=ttyS0"); kernelAppend.push("console=ttyS0");
qemuAppend.push("-nographic"); qemuAppend.push("-nographic");
} }
if (noShutdown) qemuAppend.push("-no-shutdown");
// sudo chown root:$(id -u) -R boot/ && sudo chmod g+rw -R boot/ // sudo chown root:$(id -u) -R boot/ && sudo chmod g+rw -R boot/
await execFile("qemu-system-x86_64", [ await execFile("qemu-system-x86_64", [
@ -49,7 +53,6 @@ export async function runQemu(
"-append", "-append",
kernelAppend.join(" "), kernelAppend.join(" "),
...qemuAppend, ...qemuAppend,
"-no-shutdown",
]); ]);
// -append "root=/dev/sda rootfstype=squashfs modules=ext4 quiet init=/sbin/runit-init $append" $qemuappend // -append "root=/dev/sda rootfstype=squashfs modules=ext4 quiet init=/sbin/runit-init $append" $qemuappend
} finally { } finally {

View file

@ -1,5 +1,5 @@
import { readFile } from "fs/promises"; import { readFile } from "node:fs/promises";
import path from "path"; import path from "node:path";
import { Alpine } from "../alpine.js"; import { Alpine } from "../alpine.js";
export class Runit { export class Runit {

9
tsconfig.json Normal file
View file

@ -0,0 +1,9 @@
{
"compilerOptions": {
"target": "es2022",
"module": "es2022",
"moduleResolution": "node",
"esModuleInterop": true,
"strict": true
}
}