about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/by-name/lx/lxc/4428.diff78
-rw-r--r--pkgs/by-name/lx/lxc/docbook-hack.patch (renamed from pkgs/os-specific/linux/lxc/docbook-hack.patch)0
-rw-r--r--pkgs/by-name/lx/lxc/package.nix (renamed from pkgs/os-specific/linux/lxc/default.nix)28
-rw-r--r--pkgs/os-specific/linux/lxc/add-meson-options.patch153
-rw-r--r--pkgs/top-level/all-packages.nix2
5 files changed, 95 insertions, 166 deletions
diff --git a/pkgs/by-name/lx/lxc/4428.diff b/pkgs/by-name/lx/lxc/4428.diff
new file mode 100644
index 0000000000000..05f0c660c5662
--- /dev/null
+++ b/pkgs/by-name/lx/lxc/4428.diff
@@ -0,0 +1,78 @@
+diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
+index 92d6f01c3d..d2b67d8d6f 100644
+--- a/.github/workflows/build.yml
++++ b/.github/workflows/build.yml
+@@ -50,6 +50,7 @@ jobs:
+           meson setup build \
+                 -Dtests=true \
+                 -Dpam-cgroup=true \
++                -Dtools-multicall=true \
+                 -Dwerror=true \
+                 -Db_lto_mode=default
+           ninja -C build
+diff --git a/src/lxc/cmd/meson.build b/src/lxc/cmd/meson.build
+index 3ed3670e4b..edfb986622 100644
+--- a/src/lxc/cmd/meson.build
++++ b/src/lxc/cmd/meson.build
+@@ -46,7 +46,7 @@ cmd_lxc_init_static_sources = files(
+     '../string_utils.c',
+     '../string_utils.h') + include_sources
+ 
+-cmd_lxc_monitord_sources = files('lxc_monitord.c') + include_sources + netns_ifaddrs_sources
++cmd_lxc_monitord_sources = files('lxc_monitord.c')
+ cmd_lxc_user_nic_sources = files('lxc_user_nic.c') + cmd_common_sources + netns_ifaddrs_sources
+ cmd_lxc_usernsexec_sources = files('lxc_usernsexec.c') + cmd_common_sources + netns_ifaddrs_sources
+ 
+@@ -88,8 +88,8 @@ cmd_programs += executable(
+     'lxc-monitord',
+     cmd_lxc_monitord_sources,
+     include_directories: liblxc_includes,
+-    dependencies: liblxc_dep,
+-    link_with: [liblxc_static],
++    dependencies: liblxc_dependencies,
++    link_whole: [liblxc_static],
+     install: true,
+     install_dir: lxclibexec)
+ 
+diff --git a/src/lxc/tools/meson.build b/src/lxc/tools/meson.build
+index 00a863d936..6d317fc80b 100644
+--- a/src/lxc/tools/meson.build
++++ b/src/lxc/tools/meson.build
+@@ -1,6 +1,7 @@
+ # SPDX-License-Identifier: LGPL-2.1+
+ 
+-tools_common_sources = files('arguments.c', 'arguments.h') + include_sources + netns_ifaddrs_sources
++tools_common_sources = files('arguments.c', 'arguments.h') + include_sources
++tools_common_sources_for_dynamic_link = tools_common_sources + netns_ifaddrs_sources
+ 
+ tools_commands_dynamic_link = ['attach', 'autostart', 'cgroup', 'checkpoint', 'config',
+     'console', 'copy', 'create', 'destroy', 'device', 'execute', 'freeze',
+@@ -15,7 +16,7 @@ if want_tools
+     foreach cmd : tools_commands_dynamic_link
+         public_programs += executable(
+             'lxc-' + cmd,
+-            files('lxc_' + cmd + '.c') + tools_common_sources + liblxc_ext_sources,
++            files('lxc_' + cmd + '.c') + tools_common_sources_for_dynamic_link + liblxc_ext_sources,
+             dependencies: liblxc_dependencies,
+             include_directories: liblxc_includes,
+             c_args: ['-DNO_LXC_CONF'],
+@@ -26,16 +27,16 @@ if want_tools
+     foreach cmd : tools_commands_static_link
+         public_programs += executable(
+             'lxc-' + cmd,
+-            files('lxc_' + cmd + '.c') + tools_common_sources,
++            files('lxc_' + cmd + '.c') + files('arguments.c', 'arguments.h'),
+             dependencies: liblxc_dependencies,
+             include_directories: liblxc_includes,
+-            link_with: [liblxc_static],
++            link_whole: [liblxc_static],
+             install: true)
+     endforeach
+ endif
+ 
+ if want_tools_multicall
+-    tools_all_sources = files('lxc_multicall.c') + tools_common_sources
++    tools_all_sources = files('lxc_multicall.c') + tools_common_sources_for_dynamic_link
+     foreach cmd : tools_commands
+         tools_all_sources += files('lxc_' + cmd + '.c')
+     endforeach
diff --git a/pkgs/os-specific/linux/lxc/docbook-hack.patch b/pkgs/by-name/lx/lxc/docbook-hack.patch
index f758014efbaa2..f758014efbaa2 100644
--- a/pkgs/os-specific/linux/lxc/docbook-hack.patch
+++ b/pkgs/by-name/lx/lxc/docbook-hack.patch
diff --git a/pkgs/os-specific/linux/lxc/default.nix b/pkgs/by-name/lx/lxc/package.nix
index e525c9c3f5f7d..ba817c1e2e50e 100644
--- a/pkgs/os-specific/linux/lxc/default.nix
+++ b/pkgs/by-name/lx/lxc/package.nix
@@ -2,6 +2,7 @@
   lib,
   stdenv,
   fetchFromGitHub,
+  dbus,
   docbook2x,
   libapparmor,
   libcap,
@@ -9,22 +10,22 @@
   libselinux,
   meson,
   ninja,
-  nix-update-script,
   nixosTests,
   openssl,
   pkg-config,
   systemd,
+  nix-update-script,
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "lxc";
-  version = "5.0.3";
+  version = "6.0.0";
 
   src = fetchFromGitHub {
     owner = "lxc";
     repo = "lxc";
-    rev = "refs/tags/lxc-${version}";
-    hash = "sha256-lnLmLgWXt3pI2S+4OeHRlPP5gui7S7ZXXClFt+n/8sY=";
+    rev = "refs/tags/v${finalAttrs.version}";
+    hash = "sha256-D994gekFgW/1Q4iVFM/3Zi0JXKn9Ghfd3UcjckVfoFY=";
   };
 
   nativeBuildInputs = [
@@ -35,6 +36,7 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
+    dbus
     libapparmor
     libcap
     libseccomp
@@ -44,17 +46,19 @@ stdenv.mkDerivation rec {
   ];
 
   patches = [
-     # make build more nix compatible
-    ./add-meson-options.patch
-
     # fix docbook2man version detection
     ./docbook-hack.patch
+
+    # fix linking
+    ./4428.diff
   ];
 
   mesonFlags = [
     "-Dinstall-init-files=false"
     "-Dinstall-state-dirs=false"
     "-Dspecfile=false"
+    # re-enable when fixed https://github.com/lxc/lxc/issues/4427
+    # "-Dtools-multicall=true"
   ];
 
   enableParallelBuilding = true;
@@ -65,11 +69,13 @@ stdenv.mkDerivation rec {
     tests = {
       incus-legacy-init = nixosTests.incus.container-legacy-init;
       incus-systemd-init = nixosTests.incus.container-systemd-init;
+      lxd = nixosTests.lxd.container;
     };
+
     updateScript = nix-update-script {
       extraArgs = [
-        "-vr"
-        "lxc-(.*)"
+        "--version-regex"
+        "v(6.0.*)"
       ];
     };
   };
@@ -88,4 +94,4 @@ stdenv.mkDerivation rec {
     platforms = lib.platforms.linux;
     maintainers = lib.teams.lxc.members;
   };
-}
+})
diff --git a/pkgs/os-specific/linux/lxc/add-meson-options.patch b/pkgs/os-specific/linux/lxc/add-meson-options.patch
deleted file mode 100644
index 01aea4df27473..0000000000000
--- a/pkgs/os-specific/linux/lxc/add-meson-options.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-diff --git a/meson.build b/meson.build
-index 21a8705d0..f12b81442 100644
---- a/meson.build
-+++ b/meson.build
-@@ -50,7 +50,7 @@ rootfsmount = get_option('rootfs-mount-path')
- user_network_db_opt = get_option('usernet-db-path')
- user_network_conf_opt = get_option('usernet-config-path')
- 
--bashcompletiondir = join_paths('/', 'usr', 'share', 'bash-completion', 'completions')
-+bashcompletiondir = join_paths(prefixdir, get_option('datadir'), 'bash-completion', 'completions')
- bindir = join_paths(prefixdir, get_option('bindir'))
- datadir = join_paths(prefixdir, get_option('datadir'))
- mandir = join_paths(prefixdir, get_option('mandir'))
-@@ -123,22 +123,6 @@ conf.set('PACKAGE_VERSION', meson.project_version())
- conf.set('RUNTIME_PATH', runtimepath)
- conf.set('SYSCONFDIR', sysconfdir)
- 
--# Set sysconfdir
--fs = import('fs')
--distrosysconfdir = get_option('distrosysconfdir')
--if distrosysconfdir != ''
--    distrosysconfdir = join_paths(sysconfdir, distrosysconfdir)
--    conf.set('LXC_DISTRO_SYSCONF', distrosysconfdir)
--elif fs.is_dir('/etc/sysconfig')
--    distrosysconfdir = join_paths(sysconfdir, 'sysconfig')
--    conf.set('LXC_DISTRO_SYSCONF', distrosysconfdir)
--elif fs.is_dir('/etc/default')
--    distrosysconfdir = join_paths(sysconfdir, 'default')
--    conf.set('LXC_DISTRO_SYSCONF', distrosysconfdir)
--else
--    error('"distrosysconfdir" is not set')
--endif
--
- # Cross-compile on Android.
- srcconf.set10('IS_BIONIC', host_machine.system() == 'android')
- 
-@@ -148,6 +132,7 @@ coverity = get_option('coverity-build')
- init_script = get_option('init-script')
- sanitize = get_option('b_sanitize')
- want_examples = get_option('examples')
-+want_install_init = get_option('install-init-files')
- want_io_uring = get_option('io-uring-event-loop')
- want_pam_cgroup = get_option('pam-cgroup')
- want_mans = get_option('man')
-@@ -160,10 +145,30 @@ want_openssl = get_option('openssl')
- want_selinux = get_option('selinux')
- want_oss_fuzz = get_option('oss-fuzz')
- want_seccomp = get_option('seccomp')
-+want_spec = get_option('specfile')
-+want_state_dirs = get_option('install-state-dirs')
- want_thread_safety = get_option('thread-safety')
- want_memfd_rexec = get_option('memfd-rexec')
- want_sd_bus = get_option('sd-bus')
- 
-+# Set sysconfdir
-+fs = import('fs')
-+if want_install_init
-+    distrosysconfdir = get_option('distrosysconfdir')
-+    if distrosysconfdir != ''
-+        distrosysconfdir = join_paths(sysconfdir, distrosysconfdir)
-+        conf.set('LXC_DISTRO_SYSCONF', distrosysconfdir)
-+    elif fs.is_dir('/etc/sysconfig')
-+        distrosysconfdir = join_paths(sysconfdir, 'sysconfig')
-+        conf.set('LXC_DISTRO_SYSCONF', distrosysconfdir)
-+    elif fs.is_dir('/etc/default')
-+        distrosysconfdir = join_paths(sysconfdir, 'default')
-+        conf.set('LXC_DISTRO_SYSCONF', distrosysconfdir)
-+    else
-+        error('"distrosysconfdir" is not set')
-+    endif
-+endif
-+
- srcconf.set_quoted('DEFAULT_CGROUP_PATTERN', cgrouppattern)
- if coverity
-     srcconf.set('ENABLE_COVERITY_BUILD', 1)
-@@ -926,14 +931,16 @@ if want_apparmor
- endif
- subdir('config/bash')
- subdir('config/etc')
--subdir('config/init/common')
--subdir('config/init/systemd')
--subdir('config/init/sysvinit')
--subdir('config/init/upstart')
-+if want_install_init
-+    subdir('config/init/common')
-+    subdir('config/init/systemd')
-+    subdir('config/init/sysvinit')
-+    subdir('config/init/upstart')
-+    subdir('config/sysconfig')
-+endif
- if want_selinux
-     subdir('config/selinux')
- endif
--subdir('config/sysconfig')
- subdir('config/templates')
- subdir('config/templates/common.conf.d')
- subdir('config/yum')
-@@ -963,21 +970,25 @@ pkg_config_file = pkgconfig.generate(liblxc,
- )
- 
- # Empty dirs.
--install_emptydir(join_paths(localstatedir, 'cache', 'lxc'))
--install_emptydir(join_paths(localstatedir, 'lib', 'lxc'))
-+if want_state_dirs
-+    install_emptydir(join_paths(localstatedir, 'cache', 'lxc'))
-+    install_emptydir(join_paths(localstatedir, 'lib', 'lxc'))
-+endif
- 
- # RPM spec file.
--specconf = configuration_data()
--specconf.set('LXC_VERSION_BASE', meson.project_version())
--specconf.set('LXC_VERSION_BETA', version_data.get('LXC_VERSION_BETA'))
--specconf.set('PACKAGE', meson.project_name())
--specconf.set('LXC_DISTRO_SYSCONF', conf.get('LXC_DISTRO_SYSCONF'))
--
--configure_file(
--    configuration: specconf,
--    input: 'lxc.spec.in',
--    output: 'lxc.spec',
--    install: false)
-+if want_spec
-+    specconf = configuration_data()
-+    specconf.set('LXC_VERSION_BASE', meson.project_version())
-+    specconf.set('LXC_VERSION_BETA', version_data.get('LXC_VERSION_BETA'))
-+    specconf.set('PACKAGE', meson.project_name())
-+    specconf.set('LXC_DISTRO_SYSCONF', conf.get('LXC_DISTRO_SYSCONF'))
-+
-+    configure_file(
-+        configuration: specconf,
-+        input: 'lxc.spec.in',
-+        output: 'lxc.spec',
-+        install: false)
-+endif
- 
- # Build overview.
- status = [
-diff --git a/meson_options.txt b/meson_options.txt
-index 9803473d2..84a6d45b5 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -120,3 +120,12 @@ option('memfd-rexec', type : 'boolean', value : 'true',
- 
- option('distrosysconfdir', type : 'string', value: '',
-        description: 'relative path to sysconfdir for distro default configuration')
-+
-+option('specfile', type : 'boolean', value: true,
-+       description: 'whether to prepare RPM spec')
-+
-+option('install-init-files', type : 'boolean', value: true,
-+       description: 'whether to install init files for local init (e.g. systemd, sysvinit)')
-+
-+option('install-state-dirs', type : 'boolean', value: true,
-+       description: 'whether to create state directories on install')
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9c0846d71df7e..29ab608cd02ff 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10551,8 +10551,6 @@ with pkgs;
 
   lwc = callPackage ../tools/misc/lwc { };
 
-  lxc = callPackage ../os-specific/linux/lxc {  };
-
   lxd-image-server = callPackage ../tools/virtualization/lxd-image-server { };
 
   lzfse = callPackage ../tools/compression/lzfse { };