crosvm: 104.0 -> 107.1

crosvm now includes a Cargo.lock again, so we don't need to vendor it
into Nixpkgs.

Its build system now compiles the seccomp policies into the binary, so
we don't need to build and install those ourselves any more.
This commit is contained in:
Alyssa Ross 2022-09-30 21:09:00 +00:00 committed by Alyssa Ross
parent fcdbfc3d11
commit fb60a5c947
3 changed files with 25 additions and 2258 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,15 +0,0 @@
diff --git i/src/crosvm.rs w/src/crosvm.rs
index ab7c466b..636dc140 100644
--- i/src/crosvm.rs
+++ w/src/crosvm.rs
@@ -345,7 +345,9 @@ impl Default for JailConfig {
fn default() -> Self {
JailConfig {
pivot_root: PathBuf::from(option_env!("DEFAULT_PIVOT_ROOT").unwrap_or("/var/empty")),
- seccomp_policy_dir: PathBuf::from(SECCOMP_POLICY_DIR),
+ seccomp_policy_dir: PathBuf::from(
+ option_env!("DEFAULT_SECCOMP_POLICY_DIR").unwrap_or(SECCOMP_POLICY_DIR),
+ ),
seccomp_log_failures: false,
}
}

View file

@ -1,60 +1,56 @@
{ stdenv, lib, rustPlatform, fetchgit { stdenv, lib, rust, rustPlatform, fetchgit, fetchpatch
, minijail-tools, pkg-config, protobuf, wayland-scanner , clang, pkg-config, protobuf, python3, wayland-scanner
, libcap, libdrm, libepoxy, minijail, virglrenderer, wayland, wayland-protocols , libcap, libdrm, libepoxy, minijail, virglrenderer, wayland, wayland-protocols
}: }:
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "crosvm"; pname = "crosvm";
version = "104.0"; version = "107.1";
src = fetchgit { src = fetchgit {
url = "https://chromium.googlesource.com/chromiumos/platform/crosvm"; url = "https://chromium.googlesource.com/chromiumos/platform/crosvm";
rev = "265aab613b1eb31598ea0826f04810d9f010a2c6"; rev = "5a49a836e63aa6e9ae38b80daa09a013a57bfb7f";
sha256 = "OzbtPHs6BWK83RZ/6eCQHA61X6SY8FoBkaN70a37pvc="; sha256 = "F+5i3R7Tbd9xF63Olnyavzg/hD+8HId1duWm8bvAmLA=";
fetchSubmodules = true; fetchSubmodules = true;
}; };
separateDebugInfo = true; separateDebugInfo = true;
patches = [ patches = [
./default-seccomp-policy-dir.diff # Backport seccomp sandbox update for recent Glibc.
# fetchpatch is not currently gerrit/gitiles-compatible, so we
# have to use the mirror.
# https://github.com/NixOS/nixpkgs/pull/133604
(fetchpatch {
url = "https://github.com/google/crosvm/commit/aae01416807e7c15270b3d44162610bcd73952ff.patch";
sha256 = "nQuOMOwBu8QvfwDSuTz64SQhr2dF9qXt2NarbIU55tU=";
})
]; ];
cargoLock.lockFile = ./Cargo.lock; cargoSha256 = "1jg9x5adz1lbqdwnzld4xg4igzmh90nd9xm287cgkvh5fbmsjfjv";
nativeBuildInputs = [ minijail-tools pkg-config protobuf wayland-scanner ]; nativeBuildInputs = [ clang pkg-config protobuf python3 wayland-scanner ];
buildInputs = [ buildInputs = [
libcap libdrm libepoxy minijail virglrenderer wayland wayland-protocols libcap libdrm libepoxy minijail virglrenderer wayland wayland-protocols
]; ];
arch = stdenv.hostPlatform.parsed.cpu.name; preConfigure = ''
patchShebangs third_party/minijail/tools/*.py
postPatch = '' substituteInPlace build.rs --replace '"clang"' '"${stdenv.cc.targetPrefix}clang"'
cp ${cargoLock.lockFile} Cargo.lock
sed -i "s|/usr/share/policy/crosvm/|$PWD/seccomp/$arch/|g" \
seccomp/$arch/*.policy
''; '';
preBuild = '' "CARGO_TARGET_${lib.toUpper (builtins.replaceStrings ["-"] ["_"] (rust.toRustTarget stdenv.hostPlatform))}_LINKER" =
export DEFAULT_SECCOMP_POLICY_DIR=$out/share/policy "${stdenv.cc.targetPrefix}cc";
for policy in seccomp/$arch/*.policy; do # crosvm mistakenly expects the stable protocols to be in the root
compile_seccomp_policy \ # of the pkgdatadir path, rather than under the "stable"
--default-action trap $policy ''${policy%.policy}.bpf # subdirectory.
done PKG_CONFIG_WAYLAND_PROTOCOLS_PKGDATADIR =
"${wayland-protocols}/share/wayland-protocols/stable";
substituteInPlace seccomp/$arch/*.policy \
--replace "@include $(pwd)/seccomp/$arch/" "@include $out/share/policy/"
'';
buildFeatures = [ "default" "virgl_renderer" "virgl_renderer_next" ]; buildFeatures = [ "default" "virgl_renderer" "virgl_renderer_next" ];
postInstall = ''
mkdir -p $out/share/policy/
cp -v seccomp/$arch/*.{policy,bpf} $out/share/policy/
'';
passthru.updateScript = ./update.py; passthru.updateScript = ./update.py;
meta = with lib; { meta = with lib; {