diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6d4e12c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +linux-stable +vmlinux-builder +.config +.config.toml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ec14099 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM denoland/deno:latest + +RUN apt-get update + +RUN apt-get install -y \ + git \ + build-essential \ + flex \ + bison \ + libncurses5-dev \ + libssl-dev \ + gcc \ + bc \ + libelf-dev \ + pahole + +WORKDIR /app + +COPY deno.json deno.json + +COPY deno.lock deno.lock + +RUN deno install + +COPY . . + +ENTRYPOINT ["./build.ts"] \ No newline at end of file diff --git a/README.md b/README.md index aca2fa1..32a08c6 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,12 @@ Or follow the [official Deno installation guide](https://docs.deno.com/runtime/g deno run -A jsr:@tsiry/vmlinux-builder 6.17.7 ``` +Or with docker: + +```bash +docker run --rm -it -v $(pwd):/app tsiry/vmlinux-builder:latest 6.17.7 +``` + ### Supported Version Formats - `6.1` - Major.Minor version diff --git a/build.ts b/build.ts index c60f0a2..8cde3c6 100755 --- a/build.ts +++ b/build.ts @@ -1,4 +1,5 @@ #!/usr/bin/env -S deno run --allow-run --allow-read --allow-write --allow-env --allow-net +import _ from "@es-toolkit/es-toolkit/compat"; import chalk from "chalk"; import cfg from "./default-config.ts"; @@ -78,10 +79,11 @@ if (!versionRegex.test(NUM)) { console.log(`Building vmlinux for Linux kernel ${chalk.cyan(NUM)}`); const hasAptGet = await runQuiet(["which", "apt-get"]); +const hasSudo = await runQuiet(["which", "sudo"]); if (hasAptGet) { try { await run([ - "sudo", + ..._.compact([hasSudo ? "sudo" : null]), "apt-get", "install", "-y", diff --git a/deno.json b/deno.json index 207c10e..4affc60 100644 --- a/deno.json +++ b/deno.json @@ -7,6 +7,7 @@ "build": "deno compile --allow-net --allow-read --allow-write --allow-env -o vmlinux-builder ./build.ts" }, "imports": { + "@es-toolkit/es-toolkit": "jsr:@es-toolkit/es-toolkit@^1.41.0", "@std/assert": "jsr:@std/assert@^1.0.15", "@std/toml": "jsr:@std/toml@^1.0.11", "@zod/zod": "jsr:@zod/zod@^4.1.12", diff --git a/deno.lock b/deno.lock index b543887..a3ed50b 100644 --- a/deno.lock +++ b/deno.lock @@ -1,6 +1,7 @@ { "version": "5", "specifiers": { + "jsr:@es-toolkit/es-toolkit@^1.41.0": "1.41.0", "jsr:@std/assert@^1.0.15": "1.0.15", "jsr:@std/collections@^1.1.3": "1.1.3", "jsr:@std/internal@^1.0.12": "1.0.12", @@ -9,6 +10,9 @@ "npm:chalk@^5.6.2": "5.6.2" }, "jsr": { + "@es-toolkit/es-toolkit@1.41.0": { + "integrity": "4df54a18e80b869880cee8a8a9ff7a5e1c424a9fd0916dccd38d34686f110071" + }, "@std/assert@1.0.15": { "integrity": "d64018e951dbdfab9777335ecdb000c0b4e3df036984083be219ce5941e4703b", "dependencies": [ @@ -38,6 +42,7 @@ }, "workspace": { "dependencies": [ + "jsr:@es-toolkit/es-toolkit@^1.41.0", "jsr:@std/assert@^1.0.15", "jsr:@std/toml@^1.0.11", "jsr:@zod/zod@^4.1.12",