diff --git a/README.md b/README.md index f1e964a..83f45f1 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,13 @@ - bpf2go - cilium 的工具 +### 环境(nix) + +一切尽在 Nix Flake 中: +``` +nix develop +``` + ### 启动 - 一个终端 diff --git a/devenv/el/7/README.md b/devenv/el/7/README.md new file mode 100644 index 0000000..0e48471 --- /dev/null +++ b/devenv/el/7/README.md @@ -0,0 +1,16 @@ +# CentOS 7 的开发环境 + +## 要注意的地方 + +尽量不要用这个,坑太多了。 + +如果非要用,有几个地方要注意 +- 更新内核,使用 elrepo 的 kernel-lt 或者更新的主线内核 kernel-ml +- 使用 scl 的 llvm-toolset-7 的 clang +- 无法使用 btf + +## 换个思路用 nix flake + +- 内核用 elrepo 的 kernel-lt 或者 kernel-ml,安装完以后重启 +- sh <(curl -L https://nixos.org/nix/install) --daemon +- `nix develop` diff --git a/devenv/el/7/Vagrantfile b/devenv/el/7/Vagrantfile new file mode 100644 index 0000000..f185022 --- /dev/null +++ b/devenv/el/7/Vagrantfile @@ -0,0 +1,15 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + config.vm.box = "centos/7" + + config.vm.provision "shell", inline: <<-SHELL + yum install -y epel-release elrepo-release centos-release-scl + yum install -y kernel-lt kernel-lt-headers @development golang bpftool + SHELL +end diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..299ec12 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1695318763, + "narHash": "sha256-FHVPDRP2AfvsxAdc+AsgFJevMz5VBmnZglFUMlxBkcY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e12483116b3b51a185a33a272bf351e357ba9a99", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..6b67672 --- /dev/null +++ b/flake.nix @@ -0,0 +1,35 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + outputs = { nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; in { + devShells = let + mkShell = pkgs.mkShell.override { stdenv = pkgs.clangStdenv; }; + go = pkgs.go; + cilium-ebpf = pkgs.buildGoModule { + name = "cilium-ebpf"; + version = "0.11.0"; + + src = pkgs.fetchFromGitHub { + owner = "cilium"; + repo = "ebpf"; + rev = "v0.11.0"; + sha256 = "+radPnp1l7OUYCEMvuVQU26V4o57R9cQkiU6khfdHAc="; + }; + vendorSha256 = "qt6cXgU7lSw84F4/opvNnrsVU9LvjdT+LvEvaFL9CTQ="; + + doCheck = false; + doInstallCheck = false; + }; + in { + default = mkShell { + buildInputs = with pkgs; [ + bpftool + go + cilium-ebpf + ]; + }; + }; + }); +} \ No newline at end of file