diff --git a/pkgs/by-name/lx/lxc/4428.diff b/pkgs/by-name/lx/lxc/4428.diff new file mode 100644 index 000000000000..05f0c660c566 --- /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 similarity index 100% rename from pkgs/os-specific/linux/lxc/docbook-hack.patch rename to 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 similarity index 79% rename from pkgs/os-specific/linux/lxc/default.nix rename to pkgs/by-name/lx/lxc/package.nix index e525c9c3f5f7..ba817c1e2e50 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 01aea4df2747..000000000000 --- 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 9c0846d71df7..29ab608cd02f 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 { };