Loading nixos/modules/programs/openvpn3.nix +86 −21 Original line number Diff line number Diff line { config, lib, pkgs, ... }: let json = pkgs.formats.json { }; cfg = config.programs.openvpn3; in { inherit (lib) mkEnableOption mkPackageOption mkOption literalExpression max options lists; inherit (lib.types) bool submodule ints; in { options.programs.openvpn3 = { enable = lib.mkEnableOption "the openvpn3 client"; package = lib.mkOption { type = lib.types.package; default = pkgs.openvpn3.override { enableSystemdResolved = config.services.resolved.enable; enable = mkEnableOption "the openvpn3 client"; package = mkPackageOption pkgs "openvpn3" { }; netcfg = mkOption { description = "Network configuration"; default = { }; type = submodule { options = { settings = mkOption { description = "Options stored in {file}`/etc/openvpn3/netcfg.json` configuration file"; default = { }; type = submodule { freeformType = json.type; options = { systemd_resolved = mkOption { type = bool; description = "Whether to use systemd-resolved integration"; default = config.services.resolved.enable; defaultText = literalExpression "config.services.resolved.enable"; example = false; }; }; }; }; }; }; }; log-service = mkOption { description = "Log service configuration"; default = { }; type = submodule { options = { settings = mkOption { description = "Options stored in {file}`/etc/openvpn3/log-service.json` configuration file"; default = { }; type = submodule { freeformType = json.type; options = { journald = mkOption { description = "Use systemd-journald"; type = bool; default = true; example = false; }; log_dbus_details = mkOption { description = "Add D-Bus details in log file/syslog"; type = bool; default = true; example = false; }; log_level = mkOption { description = "How verbose should the logging be"; type = (ints.between 0 7) // { merge = _loc: defs: lists.foldl max 0 (options.getValues defs); }; default = 3; example = 6; }; timestamp = mkOption { description = "Add timestamp log file"; type = bool; default = false; example = true; }; }; }; }; }; }; defaultText = lib.literalExpression ''pkgs.openvpn3.override { enableSystemdResolved = config.services.resolved.enable; }''; description = '' Which package to use for `openvpn3`. ''; }; }; config = lib.mkIf cfg.enable { services.dbus.packages = [ cfg.package ]; services.dbus.packages = [ cfg.package ]; users.users.openvpn = { isSystemUser = true; Loading @@ -31,13 +89,20 @@ in group = "openvpn"; }; users.groups.openvpn = { gid = config.ids.gids.openvpn; users.groups.openvpn = { gid = config.ids.gids.openvpn; }; environment = { systemPackages = [ cfg.package ]; etc = { "openvpn3/netcfg.json".source = json.generate "netcfg.json" cfg.netcfg.settings; "openvpn3/log-service.json".source = json.generate "log-service.json" cfg.log-service.settings; }; }; environment.systemPackages = [ cfg.package ]; systemd.packages = [ cfg.package ]; }; meta.maintainers = with lib.maintainers; [ shamilton progrm_jarvis ]; } pkgs/by-name/gd/gdbuspp/package.nix 0 → 100644 +46 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, meson, ninja, glib, pkg-config, }: stdenv.mkDerivation rec { pname = "gdbuspp"; version = "2"; src = fetchFromGitHub { owner = "OpenVPN"; repo = "gdbuspp"; rev = "refs/tags/v${version}"; hash = "sha256-A0sl4zZa17zMec/jJASE8lDVNohzJzEGZbWjjsorB2Y="; }; postPatch = '' patchShebangs --build ./scripts/get-git-ref ''; nativeBuildInputs = [ meson ninja pkg-config ]; buildInputs = [ glib ]; meta = { description = "GDBus++ - a glib2 D-Bus wrapper for C++"; longDescription = '' This library provides a simpler C++ based interface to implement D-Bus into applications in a more C++ approach, based on the C++17 standard. ''; homepage = "https://codeberg.org/OpenVPN/gdbuspp"; changelog = "https://codeberg.org/OpenVPN/gdbuspp/releases/tag/v${version}"; license = lib.licenses.agpl3Only; sourceProvenance = [ lib.sourceTypes.fromSource ]; maintainers = [ lib.maintainers.progrm_jarvis ]; platforms = lib.platforms.linux; }; } pkgs/by-name/op/openvpn3/0001-build-reduce-hardcode-in-asio_path.patch 0 → 100644 +46 −0 Original line number Diff line number Diff line From 30b2528054e6627a7124ac04cb018356ef23d864 Mon Sep 17 00:00:00 2001 From: Petr Portnov <mrjarviscraft@gmail.com> Date: Mon, 2 Sep 2024 22:25:33 +0300 Subject: [PATCH 1/1] build: reduce hardcode in `asio_path` Currently, `asio_path` variable value is concatenated with `/asio/include` to specify the path to custom `asio` installation. The problem is that this is too strict as some distros (namely NixOS) may have the `include` directory with a differently named parent. Thus this change minimizes the hardcoded part of the path to make it more flexible. Signed-off-by: Petr Portnov <mrjarviscraft@gmail.com> --- meson.build | 2 +- meson_options.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index c9e0a2d..c01eb8e 100644 --- a/meson.build +++ b/meson.build @@ -74,7 +74,7 @@ endif # # Setup additional include header dirs # -asio_inc = get_option('asio_path') / 'asio' / 'include' +asio_inc = get_option('asio_path') / 'include' message ('ASIO library: ' + asio_inc) openvpn3_core_inc = get_option('openvpn3_core_path') diff --git a/meson_options.txt b/meson_options.txt index d9cf02e..43e301e 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -26,7 +26,7 @@ option('debug_options', type: 'boolean', value: false, # # Build environment and related build time options # -option('asio_path', type: 'string', value: './vendor/asio', +option('asio_path', type: 'string', value: './vendor/asio/asio', description: 'Path to the ASIO header files') option('openvpn3_core_path', type: 'string', value: './openvpn3-core', -- 2.43.0 pkgs/by-name/op/openvpn3/0002-build-allow-installation-directories-customization.patch 0 → 100644 +115 −0 Original line number Diff line number Diff line From 848cc46d05c203de393d75434a3f571d78687f50 Mon Sep 17 00:00:00 2001 From: Petr Portnov <mrjarviscraft@gmail.com> Date: Sun, 22 Sep 2024 13:16:02 +0300 Subject: [PATCH] build: allow installation directories' customization This allows to configure the installation directories for systemd and D-Bus files. Signed-off-by: Petr Portnov <mrjarviscraft@gmail.com> --- distro/systemd/meson.build | 9 +++++++-- meson.build | 12 ++++++++++-- meson_options.txt | 12 ++++++++++++ src/configmgr/meson.build | 10 ++++++---- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/distro/systemd/meson.build b/distro/systemd/meson.build index 36d556c..9c636b6 100644 --- a/distro/systemd/meson.build +++ b/distro/systemd/meson.build @@ -15,12 +15,17 @@ systemd_cfg = configuration_data({ systemd_service_cfg = dependency('systemd') +systemd_system_unit_dir = get_option('systemd_system_unit_dir') +if systemd_system_unit_dir == '' + systemd_system_unit_dir = systemd_service_cfg.get_variable('systemdsystemunitdir') +endif + configure_file( input: 'openvpn3-autoload.service.in', output: 'openvpn3-autoload.service', configuration: systemd_cfg, install: true, - install_dir: systemd_service_cfg.get_variable('systemdsystemunitdir'), + install_dir: systemd_system_unit_dir, ) configure_file( @@ -28,7 +33,7 @@ configure_file( output: 'openvpn3-session@.service', configuration: systemd_cfg, install: true, - install_dir: systemd_service_cfg.get_variable('systemdsystemunitdir'), + install_dir: systemd_system_unit_dir, ) custom_target('openvpn3-systemd', diff --git a/meson.build b/meson.build index 586c72a..ba41440 100644 --- a/meson.build +++ b/meson.build @@ -203,8 +203,16 @@ message('OpenVPN 3 Linux service binary directory: ' + get_option('prefix') / li # # D-Bus configuration -dbus_policy_dir = dep_dbus.get_variable('datadir') / 'dbus-1' / 'system.d' -dbus_service_dir = dep_dbus.get_variable('system_bus_services_dir') +dbus_policy_dir = get_option('dbus_policy_dir') +if dbus_policy_dir == '' + dbus_policy_dir = dep_dbus.get_variable('datadir') / 'dbus-1' / 'system.d' +endif + +dbus_service_dir = get_option('dbus_system_service_dir') +if dbus_service_dir == '' + dbus_service_dir = dep_dbus.get_variable('system_bus_services_dir') +endif + dbus_config = { 'OPENVPN_USERNAME': get_option('openvpn_username'), 'LIBEXEC_PATH': get_option('prefix') / libexec_dir, diff --git a/meson_options.txt b/meson_options.txt index 43e301e..04809df 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -93,6 +93,18 @@ option('use-legacy-polkit-pkla', type: 'feature', value: 'disabled', option('polkit_pkla_rulesdir', type: 'string', value: '', description: 'Override PolicyKit PKLA rules directory') +# +# Installation +# +option('dbus_policy_dir', type: 'string', + description: 'D-Bus policy directory') +option('dbus_system_service_dir', type: 'string', + description: 'D-Bus system service directory') +option('systemd_system_unit_dir', type: 'string', + description: 'Path to systemd system unit directory') +option('create_statedir', type: 'feature', value: 'enabled', + description: 'Create directory for OpenVPN 3 state during install phase') + # # Testing tools # diff --git a/src/configmgr/meson.build b/src/configmgr/meson.build index 5d0a649..6f788b7 100644 --- a/src/configmgr/meson.build +++ b/src/configmgr/meson.build @@ -52,7 +52,9 @@ configure_file( install_dir: dbus_service_dir, ) -# Create the configs directory for persistent configuration profiles -# NOTE: Can be replaced with install_emptydir() when Meson 0.60 or newer -# is available on all supported distros -meson.add_install_script('sh','-c', 'mkdir -p $DESTDIR@0@'.format(openvpn3_statedir / 'configs')) +if get_option('create_statedir').enabled() + # Create the configs directory for persistent configuration profiles + # NOTE: Can be replaced with install_emptydir() when Meson 0.60 or newer + # is available on all supported distros + meson.add_install_script('sh','-c', 'mkdir -p $DESTDIR@0@'.format(openvpn3_statedir / 'configs')) +endif -- 2.45.2 pkgs/by-name/op/openvpn3/package.nix 0 → 100644 +135 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, asio, glib, jsoncpp, libcap_ng, libnl, libuuid, lz4, openssl, pkg-config, protobuf, python3, systemd, tinyxml-2, wrapGAppsHook3, gobject-introspection, meson, ninja, gdbuspp, cmake, git, enableSystemdResolved ? true, }: stdenv.mkDerivation rec { pname = "openvpn3"; # also update openvpn3-core version = "23"; src = fetchFromGitHub { owner = "OpenVPN"; repo = "openvpn3-linux"; rev = "refs/tags/v${version}"; hash = "sha256-5gkutqyUPZDwRPzSFdUXg2G5mtQKbdhZu8xnNAdXoF0="; # `openvpn3-core` is a submodule. # TODO: make it into a separate package fetchSubmodules = true; }; patches = [ # Merged in upstream, will land in v24 # https://github.com/OpenVPN/openvpn3-linux/commit/75abb7dc9366ba85fb1a144d88f02a1e8a62f538 ./0001-build-reduce-hardcode-in-asio_path.patch ./0002-build-allow-installation-directories-customization.patch ]; postPatch = '' echo '#define OPENVPN_VERSION "3.git:unknown:unknown" #define PACKAGE_GUIVERSION "v${builtins.replaceStrings [ "_" ] [ ":" ] version}" #define PACKAGE_NAME "openvpn3-linux" ' > ./src/build-version.h patchShebangs \ ./scripts \ ./src/python/{openvpn2,openvpn3-as,openvpn3-autoload} \ ./distro/systemd/openvpn3-systemd \ ./src/tests/dbus/netcfg-subscription-test \ ./src/shell/bash-completion/gen-openvpn2-completion.py ''; pythonPath = python3.withPackages (ps: [ ps.dbus-python ps.pygobject3 ps.systemd ]); nativeBuildInputs = [ meson ninja pkg-config cmake git python3.pkgs.wrapPython python3.pkgs.docutils python3.pkgs.jinja2 python3.pkgs.dbus-python wrapGAppsHook3 gobject-introspection ]; buildInputs = [ asio glib jsoncpp libcap_ng libnl libuuid lz4 openssl protobuf tinyxml-2 gdbuspp ] ++ lib.optionals enableSystemdResolved [ systemd.dev ]; mesonFlags = [ (lib.mesonOption "selinux" "disabled") (lib.mesonOption "selinux_policy" "disabled") (lib.mesonOption "bash-completion" "enabled") (lib.mesonOption "test_programs" "disabled") (lib.mesonOption "unit_tests" "disabled") (lib.mesonOption "asio_path" "${asio}") (lib.mesonOption "dbus_policy_dir" "${placeholder "out"}/share/dbus-1/system.d") (lib.mesonOption "dbus_system_service_dir" "${placeholder "out"}/share/dbus-1/system-services") (lib.mesonOption "systemd_system_unit_dir" "${placeholder "out"}/lib/systemd/system") (lib.mesonOption "create_statedir" "disabled") (lib.mesonOption "sharedstatedir" "/etc") ]; dontWrapGApps = true; preFixup = '' makeWrapperArgs+=("''${gappsWrapperArgs[@]}") ''; postFixup = '' wrapPythonPrograms wrapPythonProgramsIn "$out/libexec/openvpn3-linux" "$out ${pythonPath}" ''; NIX_LDFLAGS = "-lpthread"; meta = { description = "OpenVPN 3 Linux client"; license = lib.licenses.agpl3Plus; homepage = "https://github.com/OpenVPN/openvpn3-linux/"; changelog = "https://github.com/OpenVPN/openvpn3-linux/releases/tag/v${version}"; maintainers = with lib.maintainers; [ shamilton progrm_jarvis ]; platforms = lib.platforms.linux; }; } Loading
nixos/modules/programs/openvpn3.nix +86 −21 Original line number Diff line number Diff line { config, lib, pkgs, ... }: let json = pkgs.formats.json { }; cfg = config.programs.openvpn3; in { inherit (lib) mkEnableOption mkPackageOption mkOption literalExpression max options lists; inherit (lib.types) bool submodule ints; in { options.programs.openvpn3 = { enable = lib.mkEnableOption "the openvpn3 client"; package = lib.mkOption { type = lib.types.package; default = pkgs.openvpn3.override { enableSystemdResolved = config.services.resolved.enable; enable = mkEnableOption "the openvpn3 client"; package = mkPackageOption pkgs "openvpn3" { }; netcfg = mkOption { description = "Network configuration"; default = { }; type = submodule { options = { settings = mkOption { description = "Options stored in {file}`/etc/openvpn3/netcfg.json` configuration file"; default = { }; type = submodule { freeformType = json.type; options = { systemd_resolved = mkOption { type = bool; description = "Whether to use systemd-resolved integration"; default = config.services.resolved.enable; defaultText = literalExpression "config.services.resolved.enable"; example = false; }; }; }; }; }; }; }; log-service = mkOption { description = "Log service configuration"; default = { }; type = submodule { options = { settings = mkOption { description = "Options stored in {file}`/etc/openvpn3/log-service.json` configuration file"; default = { }; type = submodule { freeformType = json.type; options = { journald = mkOption { description = "Use systemd-journald"; type = bool; default = true; example = false; }; log_dbus_details = mkOption { description = "Add D-Bus details in log file/syslog"; type = bool; default = true; example = false; }; log_level = mkOption { description = "How verbose should the logging be"; type = (ints.between 0 7) // { merge = _loc: defs: lists.foldl max 0 (options.getValues defs); }; default = 3; example = 6; }; timestamp = mkOption { description = "Add timestamp log file"; type = bool; default = false; example = true; }; }; }; }; }; }; defaultText = lib.literalExpression ''pkgs.openvpn3.override { enableSystemdResolved = config.services.resolved.enable; }''; description = '' Which package to use for `openvpn3`. ''; }; }; config = lib.mkIf cfg.enable { services.dbus.packages = [ cfg.package ]; services.dbus.packages = [ cfg.package ]; users.users.openvpn = { isSystemUser = true; Loading @@ -31,13 +89,20 @@ in group = "openvpn"; }; users.groups.openvpn = { gid = config.ids.gids.openvpn; users.groups.openvpn = { gid = config.ids.gids.openvpn; }; environment = { systemPackages = [ cfg.package ]; etc = { "openvpn3/netcfg.json".source = json.generate "netcfg.json" cfg.netcfg.settings; "openvpn3/log-service.json".source = json.generate "log-service.json" cfg.log-service.settings; }; }; environment.systemPackages = [ cfg.package ]; systemd.packages = [ cfg.package ]; }; meta.maintainers = with lib.maintainers; [ shamilton progrm_jarvis ]; }
pkgs/by-name/gd/gdbuspp/package.nix 0 → 100644 +46 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, meson, ninja, glib, pkg-config, }: stdenv.mkDerivation rec { pname = "gdbuspp"; version = "2"; src = fetchFromGitHub { owner = "OpenVPN"; repo = "gdbuspp"; rev = "refs/tags/v${version}"; hash = "sha256-A0sl4zZa17zMec/jJASE8lDVNohzJzEGZbWjjsorB2Y="; }; postPatch = '' patchShebangs --build ./scripts/get-git-ref ''; nativeBuildInputs = [ meson ninja pkg-config ]; buildInputs = [ glib ]; meta = { description = "GDBus++ - a glib2 D-Bus wrapper for C++"; longDescription = '' This library provides a simpler C++ based interface to implement D-Bus into applications in a more C++ approach, based on the C++17 standard. ''; homepage = "https://codeberg.org/OpenVPN/gdbuspp"; changelog = "https://codeberg.org/OpenVPN/gdbuspp/releases/tag/v${version}"; license = lib.licenses.agpl3Only; sourceProvenance = [ lib.sourceTypes.fromSource ]; maintainers = [ lib.maintainers.progrm_jarvis ]; platforms = lib.platforms.linux; }; }
pkgs/by-name/op/openvpn3/0001-build-reduce-hardcode-in-asio_path.patch 0 → 100644 +46 −0 Original line number Diff line number Diff line From 30b2528054e6627a7124ac04cb018356ef23d864 Mon Sep 17 00:00:00 2001 From: Petr Portnov <mrjarviscraft@gmail.com> Date: Mon, 2 Sep 2024 22:25:33 +0300 Subject: [PATCH 1/1] build: reduce hardcode in `asio_path` Currently, `asio_path` variable value is concatenated with `/asio/include` to specify the path to custom `asio` installation. The problem is that this is too strict as some distros (namely NixOS) may have the `include` directory with a differently named parent. Thus this change minimizes the hardcoded part of the path to make it more flexible. Signed-off-by: Petr Portnov <mrjarviscraft@gmail.com> --- meson.build | 2 +- meson_options.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index c9e0a2d..c01eb8e 100644 --- a/meson.build +++ b/meson.build @@ -74,7 +74,7 @@ endif # # Setup additional include header dirs # -asio_inc = get_option('asio_path') / 'asio' / 'include' +asio_inc = get_option('asio_path') / 'include' message ('ASIO library: ' + asio_inc) openvpn3_core_inc = get_option('openvpn3_core_path') diff --git a/meson_options.txt b/meson_options.txt index d9cf02e..43e301e 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -26,7 +26,7 @@ option('debug_options', type: 'boolean', value: false, # # Build environment and related build time options # -option('asio_path', type: 'string', value: './vendor/asio', +option('asio_path', type: 'string', value: './vendor/asio/asio', description: 'Path to the ASIO header files') option('openvpn3_core_path', type: 'string', value: './openvpn3-core', -- 2.43.0
pkgs/by-name/op/openvpn3/0002-build-allow-installation-directories-customization.patch 0 → 100644 +115 −0 Original line number Diff line number Diff line From 848cc46d05c203de393d75434a3f571d78687f50 Mon Sep 17 00:00:00 2001 From: Petr Portnov <mrjarviscraft@gmail.com> Date: Sun, 22 Sep 2024 13:16:02 +0300 Subject: [PATCH] build: allow installation directories' customization This allows to configure the installation directories for systemd and D-Bus files. Signed-off-by: Petr Portnov <mrjarviscraft@gmail.com> --- distro/systemd/meson.build | 9 +++++++-- meson.build | 12 ++++++++++-- meson_options.txt | 12 ++++++++++++ src/configmgr/meson.build | 10 ++++++---- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/distro/systemd/meson.build b/distro/systemd/meson.build index 36d556c..9c636b6 100644 --- a/distro/systemd/meson.build +++ b/distro/systemd/meson.build @@ -15,12 +15,17 @@ systemd_cfg = configuration_data({ systemd_service_cfg = dependency('systemd') +systemd_system_unit_dir = get_option('systemd_system_unit_dir') +if systemd_system_unit_dir == '' + systemd_system_unit_dir = systemd_service_cfg.get_variable('systemdsystemunitdir') +endif + configure_file( input: 'openvpn3-autoload.service.in', output: 'openvpn3-autoload.service', configuration: systemd_cfg, install: true, - install_dir: systemd_service_cfg.get_variable('systemdsystemunitdir'), + install_dir: systemd_system_unit_dir, ) configure_file( @@ -28,7 +33,7 @@ configure_file( output: 'openvpn3-session@.service', configuration: systemd_cfg, install: true, - install_dir: systemd_service_cfg.get_variable('systemdsystemunitdir'), + install_dir: systemd_system_unit_dir, ) custom_target('openvpn3-systemd', diff --git a/meson.build b/meson.build index 586c72a..ba41440 100644 --- a/meson.build +++ b/meson.build @@ -203,8 +203,16 @@ message('OpenVPN 3 Linux service binary directory: ' + get_option('prefix') / li # # D-Bus configuration -dbus_policy_dir = dep_dbus.get_variable('datadir') / 'dbus-1' / 'system.d' -dbus_service_dir = dep_dbus.get_variable('system_bus_services_dir') +dbus_policy_dir = get_option('dbus_policy_dir') +if dbus_policy_dir == '' + dbus_policy_dir = dep_dbus.get_variable('datadir') / 'dbus-1' / 'system.d' +endif + +dbus_service_dir = get_option('dbus_system_service_dir') +if dbus_service_dir == '' + dbus_service_dir = dep_dbus.get_variable('system_bus_services_dir') +endif + dbus_config = { 'OPENVPN_USERNAME': get_option('openvpn_username'), 'LIBEXEC_PATH': get_option('prefix') / libexec_dir, diff --git a/meson_options.txt b/meson_options.txt index 43e301e..04809df 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -93,6 +93,18 @@ option('use-legacy-polkit-pkla', type: 'feature', value: 'disabled', option('polkit_pkla_rulesdir', type: 'string', value: '', description: 'Override PolicyKit PKLA rules directory') +# +# Installation +# +option('dbus_policy_dir', type: 'string', + description: 'D-Bus policy directory') +option('dbus_system_service_dir', type: 'string', + description: 'D-Bus system service directory') +option('systemd_system_unit_dir', type: 'string', + description: 'Path to systemd system unit directory') +option('create_statedir', type: 'feature', value: 'enabled', + description: 'Create directory for OpenVPN 3 state during install phase') + # # Testing tools # diff --git a/src/configmgr/meson.build b/src/configmgr/meson.build index 5d0a649..6f788b7 100644 --- a/src/configmgr/meson.build +++ b/src/configmgr/meson.build @@ -52,7 +52,9 @@ configure_file( install_dir: dbus_service_dir, ) -# Create the configs directory for persistent configuration profiles -# NOTE: Can be replaced with install_emptydir() when Meson 0.60 or newer -# is available on all supported distros -meson.add_install_script('sh','-c', 'mkdir -p $DESTDIR@0@'.format(openvpn3_statedir / 'configs')) +if get_option('create_statedir').enabled() + # Create the configs directory for persistent configuration profiles + # NOTE: Can be replaced with install_emptydir() when Meson 0.60 or newer + # is available on all supported distros + meson.add_install_script('sh','-c', 'mkdir -p $DESTDIR@0@'.format(openvpn3_statedir / 'configs')) +endif -- 2.45.2
pkgs/by-name/op/openvpn3/package.nix 0 → 100644 +135 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, asio, glib, jsoncpp, libcap_ng, libnl, libuuid, lz4, openssl, pkg-config, protobuf, python3, systemd, tinyxml-2, wrapGAppsHook3, gobject-introspection, meson, ninja, gdbuspp, cmake, git, enableSystemdResolved ? true, }: stdenv.mkDerivation rec { pname = "openvpn3"; # also update openvpn3-core version = "23"; src = fetchFromGitHub { owner = "OpenVPN"; repo = "openvpn3-linux"; rev = "refs/tags/v${version}"; hash = "sha256-5gkutqyUPZDwRPzSFdUXg2G5mtQKbdhZu8xnNAdXoF0="; # `openvpn3-core` is a submodule. # TODO: make it into a separate package fetchSubmodules = true; }; patches = [ # Merged in upstream, will land in v24 # https://github.com/OpenVPN/openvpn3-linux/commit/75abb7dc9366ba85fb1a144d88f02a1e8a62f538 ./0001-build-reduce-hardcode-in-asio_path.patch ./0002-build-allow-installation-directories-customization.patch ]; postPatch = '' echo '#define OPENVPN_VERSION "3.git:unknown:unknown" #define PACKAGE_GUIVERSION "v${builtins.replaceStrings [ "_" ] [ ":" ] version}" #define PACKAGE_NAME "openvpn3-linux" ' > ./src/build-version.h patchShebangs \ ./scripts \ ./src/python/{openvpn2,openvpn3-as,openvpn3-autoload} \ ./distro/systemd/openvpn3-systemd \ ./src/tests/dbus/netcfg-subscription-test \ ./src/shell/bash-completion/gen-openvpn2-completion.py ''; pythonPath = python3.withPackages (ps: [ ps.dbus-python ps.pygobject3 ps.systemd ]); nativeBuildInputs = [ meson ninja pkg-config cmake git python3.pkgs.wrapPython python3.pkgs.docutils python3.pkgs.jinja2 python3.pkgs.dbus-python wrapGAppsHook3 gobject-introspection ]; buildInputs = [ asio glib jsoncpp libcap_ng libnl libuuid lz4 openssl protobuf tinyxml-2 gdbuspp ] ++ lib.optionals enableSystemdResolved [ systemd.dev ]; mesonFlags = [ (lib.mesonOption "selinux" "disabled") (lib.mesonOption "selinux_policy" "disabled") (lib.mesonOption "bash-completion" "enabled") (lib.mesonOption "test_programs" "disabled") (lib.mesonOption "unit_tests" "disabled") (lib.mesonOption "asio_path" "${asio}") (lib.mesonOption "dbus_policy_dir" "${placeholder "out"}/share/dbus-1/system.d") (lib.mesonOption "dbus_system_service_dir" "${placeholder "out"}/share/dbus-1/system-services") (lib.mesonOption "systemd_system_unit_dir" "${placeholder "out"}/lib/systemd/system") (lib.mesonOption "create_statedir" "disabled") (lib.mesonOption "sharedstatedir" "/etc") ]; dontWrapGApps = true; preFixup = '' makeWrapperArgs+=("''${gappsWrapperArgs[@]}") ''; postFixup = '' wrapPythonPrograms wrapPythonProgramsIn "$out/libexec/openvpn3-linux" "$out ${pythonPath}" ''; NIX_LDFLAGS = "-lpthread"; meta = { description = "OpenVPN 3 Linux client"; license = lib.licenses.agpl3Plus; homepage = "https://github.com/OpenVPN/openvpn3-linux/"; changelog = "https://github.com/OpenVPN/openvpn3-linux/releases/tag/v${version}"; maintainers = with lib.maintainers; [ shamilton progrm_jarvis ]; platforms = lib.platforms.linux; }; }