diff --git a/Docker.static-builder b/Docker.static-builder new file mode 100644 index 0000000..7f31300 --- /dev/null +++ b/Docker.static-builder @@ -0,0 +1,3 @@ +FROM rust:alpine +RUN apk add --no-cache pkgconf libseccomp-static libseccomp-dev musl-dev +ENTRYPOINT ["/usr/local/cargo/bin/cargo", "build"] \ No newline at end of file diff --git a/README.md b/README.md index 3005be3..21ed33c 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,29 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ### Build -``` +```bash cargo build ``` +### Build static with container + +```bash +docker build -t x2t-sandbox-builder:1 -f Docker.static-builder . +docker run -it --rm \ + -v $PWD:/src --workdir /src \ + -e RUSTFLAGS='-C target-feature=+crt-static' \ + x2t-sandbox-builder:1 \ + --features tracing-mode \ + --target x86_64-unknown-linux-musl \ + --release \ + +./target/x86_64-unknown-linux-musl/release/x2t-sandbox --help +``` + ### Generate syscalls with strace -``` +```bash strace -f --output x2t-syscalls.txt /path/to/x2t some.xml ``` @@ -36,7 +51,7 @@ strace -f --output x2t-syscalls.txt /path/to/x2t some.xml cargo 开启 tracing-mode 后,宏找不到环境变量和文件不会失败,可以直接生成一个。 -``` +```bash cargo build --features tracing-mode RUST_LOG=trace ./target/debug/x2t-sandbox -- -l x2t-syscalls.txt /path/to/x2t some.xml cat x2t-syscalls.txt | sort | uniq | sponge x2t-syscalls.txt @@ -57,7 +72,7 @@ cargo build nix 是一个 fully reproducible 的构建和配置系统。 - 安装 nix - ``` + ```bash curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install ``` - 构建 @@ -75,7 +90,7 @@ nix 是一个 fully reproducible 的构建和配置系统。 # git push ``` - 二进制在 result 目录下 - ``` + ```bash ./result/bin/x2t-sandbox /path/to/x2t some.xml ``` @@ -86,7 +101,7 @@ nix 是一个 fully reproducible 的构建和配置系统。 - [x2t-syscalls.txt](x2t-syscalls.txt): x2t 用到的 syscall - [build.rs](build.rs): 解决少数构建平台无法找到 libseccomp 的问题 - [x2t-sandbox-rulegen](x2t-sandbox-rulegen/): 通过 macro 直接从 syscall 列表生成代码,不用内嵌syscall名字文本了,不容易被修改 - - Cargo.toml/Cargo.lock/rust-toolchain.toml: 已经被配置为默认构建静态链接的二进制 + - Cargo.toml/Cargo.lock: 已经被配置为默认构建静态链接的二进制 - optional: flake.nix/flake.lock: nix 搭建的、完全统一的统一开发环境,配置为默认构建静态链接的二进制 - .envrc: 如果不适用nix,注释掉,或者 direnv block 一下不加载就行 - .gitignore diff --git a/rust-toolchain.toml b/rust-toolchain.toml deleted file mode 100644 index 16e9862..0000000 --- a/rust-toolchain.toml +++ /dev/null @@ -1,3 +0,0 @@ -[toolchain] -channel = "stable" -targets = ["x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl"]