Unverified Commit 7e73ead5 authored by Adam Stephens's avatar Adam Stephens
Browse files

lxc: 5.0.3 -> 6.0.0, pin to lts, move/format

parent f171f4ff
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
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
+17 −11
Original line number Diff line number Diff line
@@ -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;
  };
}
})
+0 −153
Original line number Diff line number Diff line
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')
+0 −2
Original line number Diff line number Diff line
@@ -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 { };