Simple script and config (type-safe) for building custom Linux kernels for Firecracker MicroVMs

feat: add Docker support and update README for Docker usage

+46 -1
+4
.dockerignore
··· 1 + linux-stable 2 + vmlinux-builder 3 + .config 4 + .config.toml
+27
Dockerfile
··· 1 + FROM denoland/deno:latest 2 + 3 + RUN apt-get update 4 + 5 + RUN apt-get install -y \ 6 + git \ 7 + build-essential \ 8 + flex \ 9 + bison \ 10 + libncurses5-dev \ 11 + libssl-dev \ 12 + gcc \ 13 + bc \ 14 + libelf-dev \ 15 + pahole 16 + 17 + WORKDIR /app 18 + 19 + COPY deno.json deno.json 20 + 21 + COPY deno.lock deno.lock 22 + 23 + RUN deno install 24 + 25 + COPY . . 26 + 27 + ENTRYPOINT ["./build.ts"]
+6
README.md
··· 44 44 deno run -A jsr:@tsiry/vmlinux-builder 6.17.7 45 45 ``` 46 46 47 + Or with docker: 48 + 49 + ```bash 50 + docker run --rm -it -v $(pwd):/app tsiry/vmlinux-builder:latest 6.17.7 51 + ``` 52 + 47 53 ### Supported Version Formats 48 54 49 55 - `6.1` - Major.Minor version
+3 -1
build.ts
··· 1 1 #!/usr/bin/env -S deno run --allow-run --allow-read --allow-write --allow-env --allow-net 2 + import _ from "@es-toolkit/es-toolkit/compat"; 2 3 import chalk from "chalk"; 3 4 import cfg from "./default-config.ts"; 4 5 ··· 78 79 console.log(`Building vmlinux for Linux kernel ${chalk.cyan(NUM)}`); 79 80 80 81 const hasAptGet = await runQuiet(["which", "apt-get"]); 82 + const hasSudo = await runQuiet(["which", "sudo"]); 81 83 if (hasAptGet) { 82 84 try { 83 85 await run([ 84 - "sudo", 86 + ..._.compact([hasSudo ? "sudo" : null]), 85 87 "apt-get", 86 88 "install", 87 89 "-y",
+1
deno.json
··· 7 7 "build": "deno compile --allow-net --allow-read --allow-write --allow-env -o vmlinux-builder ./build.ts" 8 8 }, 9 9 "imports": { 10 + "@es-toolkit/es-toolkit": "jsr:@es-toolkit/es-toolkit@^1.41.0", 10 11 "@std/assert": "jsr:@std/assert@^1.0.15", 11 12 "@std/toml": "jsr:@std/toml@^1.0.11", 12 13 "@zod/zod": "jsr:@zod/zod@^4.1.12",
+5
deno.lock
··· 1 1 { 2 2 "version": "5", 3 3 "specifiers": { 4 + "jsr:@es-toolkit/es-toolkit@^1.41.0": "1.41.0", 4 5 "jsr:@std/assert@^1.0.15": "1.0.15", 5 6 "jsr:@std/collections@^1.1.3": "1.1.3", 6 7 "jsr:@std/internal@^1.0.12": "1.0.12", ··· 9 10 "npm:chalk@^5.6.2": "5.6.2" 10 11 }, 11 12 "jsr": { 13 + "@es-toolkit/es-toolkit@1.41.0": { 14 + "integrity": "4df54a18e80b869880cee8a8a9ff7a5e1c424a9fd0916dccd38d34686f110071" 15 + }, 12 16 "@std/assert@1.0.15": { 13 17 "integrity": "d64018e951dbdfab9777335ecdb000c0b4e3df036984083be219ce5941e4703b", 14 18 "dependencies": [ ··· 38 42 }, 39 43 "workspace": { 40 44 "dependencies": [ 45 + "jsr:@es-toolkit/es-toolkit@^1.41.0", 41 46 "jsr:@std/assert@^1.0.15", 42 47 "jsr:@std/toml@^1.0.11", 43 48 "jsr:@zod/zod@^4.1.12",