Adam Stephens 2023-12-21 14:55:08 -05:00
parent 72ff6b5fcf
commit 56e9ca19b3
No known key found for this signature in database
5 changed files with 111 additions and 21 deletions

View file

@ -56,6 +56,10 @@ in
retry(instance_is_up)
machine.succeed("echo true | incus exec container /run/current-system/sw/bin/bash -")
with subtest("Container mounts lxcfs overlays"):
machine.succeed("incus exec container mount | grep 'lxcfs on /proc/cpuinfo type fuse.lxcfs'")
machine.succeed("incus exec container mount | grep 'lxcfs on /proc/meminfo type fuse.lxcfs'")
with subtest("Container CPU limits can be managed"):
set_container("limits.cpu 1")
cpuinfo = machine.succeed("incus exec container grep -- -c ^processor /proc/cpuinfo").strip()

View file

@ -1,41 +1,58 @@
{ config, lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, help2man, fuse
, util-linux, makeWrapper
, enableDebugBuild ? config.lxcfs.enableDebugBuild or false }:
{
lib,
stdenv,
fetchFromGitHub,
fuse3,
help2man,
makeWrapper,
meson,
ninja,
nixosTests,
pkg-config,
python3,
util-linux,
}:
stdenv.mkDerivation rec {
pname = "lxcfs";
version = "4.0.12";
version = "5.0.4";
src = fetchFromGitHub {
owner = "lxc";
repo = "lxcfs";
rev = "lxcfs-${version}";
sha256 = "sha256-+wp29GD+toXGfQbPGYbDJ7/P+FY1uQY4uK3OQxTE9GM=";
sha256 = "sha256-vusxbFV7cnQVBOOo7E+fSyaE63f5QiE2xZhYavc8jJU=";
};
postPatch = ''
sed -i -e '1i #include <sys/pidfd.h>' src/bindings.c
'';
patches = [
# skip RPM spec generation
./no-spec.patch
nativeBuildInputs = [ pkg-config help2man autoreconfHook makeWrapper ];
buildInputs = [ fuse ];
# skip installing systemd files
./skip-init.patch
preConfigure = lib.optionalString enableDebugBuild ''
sed -i 's,#AM_CFLAGS += -DDEBUG,AM_CFLAGS += -DDEBUG,' Makefile.am
'';
configureFlags = [
"--with-init-script=systemd"
"--sysconfdir=/etc"
"--localstatedir=/var"
# fix pidfd checks and include
./pidfd.patch
];
installFlags = [ "SYSTEMD_UNIT_DIR=\${out}/lib/systemd" ];
nativeBuildInputs = [
meson
help2man
makeWrapper
ninja
(python3.withPackages (p: [ p.jinja2 ]))
pkg-config
];
buildInputs = [ fuse3 ];
preConfigure = ''
patchShebangs tools/
'';
postInstall = ''
# `mount` hook requires access to the `mount` command from `util-linux`:
wrapProgram "$out/share/lxcfs/lxc.mount.hook" \
--prefix PATH : "${util-linux}/bin"
wrapProgram "$out/share/lxcfs/lxc.mount.hook" --prefix PATH : "${util-linux}/bin"
'';
postFixup = ''
@ -43,6 +60,10 @@ stdenv.mkDerivation rec {
patchelf --set-rpath "$(patchelf --print-rpath "$out/bin/lxcfs"):$out/lib" "$out/bin/lxcfs"
'';
passthru.tests = {
incus-container = nixosTests.incus.container;
};
meta = {
description = "FUSE filesystem for LXC";
homepage = "https://linuxcontainers.org/lxcfs";

View file

@ -0,0 +1,24 @@
diff --git a/meson.build b/meson.build
index a0289ad..93fc61a 100644
--- a/meson.build
+++ b/meson.build
@@ -253,19 +253,6 @@ if want_tests == true
c_args: '-DRELOADTEST -DDEBUG')
endif
-# RPM spec.
-lxcfs_spec = custom_target(
- 'lxcfs.spec',
- build_by_default: true,
- input: 'lxcfs.spec.in',
- output: 'lxcfs.spec',
- command: [
- meson_render_jinja2,
- config_h,
- '@INPUT@',
- '@OUTPUT@',
- ])
-
# Man pages
if want_docs == true
help2man = find_program('help2man')

View file

@ -0,0 +1,29 @@
diff --git a/meson.build b/meson.build
index a0289ad..211b01b 100644
--- a/meson.build
+++ b/meson.build
@@ -134,11 +134,13 @@ foreach ident: [
'''#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
+ #include <sys/pidfd.h>
#include <sys/wait.h>'''],
['pidfd_open',
'''#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
+ #include <sys/pidfd.h>
#include <sys/wait.h>'''],
]
have = cc.has_function(ident[0], prefix: ident[1], args: '-D_GNU_SOURCE')
diff --git a/src/bindings.c b/src/bindings.c
index 13259c1..e760330 100644
--- a/src/bindings.c
+++ b/src/bindings.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
+#include <sys/pidfd.h>
#include "config.h"
#include <dirent.h>

View file

@ -0,0 +1,12 @@
diff --git a/meson.build b/meson.build
index a0289ad..10c0a28 100644
--- a/meson.build
+++ b/meson.build
@@ -285,7 +285,6 @@ endif
# Include sub-directories.
-subdir('config/init')
subdir('share')
subdir('tests')