Blob Blame History Raw
#
# spec file for package NetworkManager
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


# Toggle this whenever enabling/disabling the nm-probe-radius-server-cert.patch patch (as we export additional symbols)
# Like this, g-c-c and NM-applet, which consume this symbol, will block updating NM if we have to disable the patch until
# they are touched too
%define with_cacert_patch 0
%global _udevdir %(pkg-config --variable udevdir udev)
%global _pppddir %(ls -d %{_libdir}/pppd/2.?.?)
%global _dbusconfdir %{_datadir}/dbus-1/system.d

### Handy switches for easy testing of experimental features:
# (Remember that _with = OFF and _without = ON)

# FIXME: We should find out how to run specific tests and avoid
# tests that are doomed to fail in OBS.
# From "test-client.py --help":
#   test-client.py MyTestCase.testSomething  - run MyTestCase.testSomething
# Summary of Failures:
#07/74 check-local-exports-libnm    FAIL  0.11s  exit status 1
#08/74 platform/test-address-linux  FAIL  0.03s  killed by signal 6 SIGABRT
#10/74 platform/test-cleanup-linux  FAIL  0.03s  killed by signal 6 SIGABRT
#12/74 platform/test-link-linux     FAIL  0.03s  killed by signal 6 SIGABRT
#16/74 platform/test-route-linux    FAIL  0.03s  killed by signal 6 SIGABRT
#17/74 platform/test-tc-linux       FAIL  0.03s  killed by signal 6 SIGABRT
#24/74 test-l3cfg                   FAIL  0.10s  killed by signal 6 SIGABRT
#38/74 devices/test-acd             FAIL  0.04s  killed by signal 6 SIGABRT
%bcond_with TESTS
%if %{with TESTS}
%define tests_meson_opt yes
%else
%define tests_meson_opt no
%endif

# NetworkManager uses netconfig in SLES products only.
%if 0%{?suse_version} > 1500
%define with_netconfig 0
%else
%define with_netconfig 1
%endif

# Libaudit: yes-disabled-by-default enables support, but disables
# it unless explicitly configured via NetworkManager.conf
%bcond_without LIBAUDIT
%if %{with LIBAUDIT}
%define libaudit_meson_opt yes-disabled-by-default
%else
%define libaudit_meson_opt no
%endif

Name:           NetworkManager
Version:        1.40.12
Release:        0
Summary:        Network Link Manager and user applications for it
License:        GPL-2.0-or-later AND LGPL-2.1-or-later
Group:          Productivity/Networking/System
URL:            https://www.gnome.org/projects/NetworkManager/
Source0:        https://download.gnome.org/sources/NetworkManager/1.40/%{name}-%{version}.tar.xz
Source1:        nfs
Source2:        NetworkManager.conf
Source3:        baselibs.conf
Source4:        conncheck-disabled.conf
Source98:       macros.NetworkManager
Source99:       NetworkManager-rpmlintrc

# PATCH-FEATURE-OPENSUSE systemd-network-config.patch -- don't try to start NM under systemd if it is disabled in system configuration
Patch0:         systemd-network-config.patch
# PATCH-FIX-UPSTREAM nm-probe-radius-server-cert.patch bnc#574266 glin@suse.com -- Probe the RADIUS server certificate
Patch1:         nm-probe-radius-server-cert.patch
# PATCH-FIX-OPENSUSE nm-dont-overwrite-resolv-conf.patch bsc#1021665, bsc#960153 sckang@suse.com -- NetworkManager spawns netconfig to update DNS settings, and terminates netconfig after 1s. But 1s isn't quite long enough for netconfig to complete the task. Adjust it to 0 seconds(don't send SIGKILL) to avoid NM overwriting /etc/resolv.conf.
Patch4:         nm-dont-overwrite-resolv-conf.patch
# PATCH-FIX-OPENSUSE NetworkManager-1.10.6-netconfig.patch boo#1092352 -- Don't return SR_NOTFOUND if netconfig fails to launch
Patch5:         NetworkManager-1.10.6-netconfig.patch
# PATCH-FIX-UPSTREAM 0001-Coerce-connectivity-LIMITED-to-NONE-when-device-is-d.patch boo#1103678
Patch6:         0001-Coerce-connectivity-LIMITED-to-NONE-when-device-is-d.patch
# PATCH-FIX-OPENSUSE nm-add-CAP_SYS_ADMIN-permission.patch bsc#1129587 sckang@suse.com -- Add CAP_SYS_ADMIN which netconfig needs to call setdomainname
Patch7:         nm-add-CAP_SYS_ADMIN-permission.patch

BuildRequires:  c++_compiler
BuildRequires:  dnsmasq
BuildRequires:  fdupes
BuildRequires:  meson
BuildRequires:  ncurses-devel
BuildRequires:  pkgconfig
BuildRequires:  ppp-devel
BuildRequires:  python3-dbus-python
BuildRequires:  readline-devel
BuildRequires:  rp-pppoe
BuildRequires:  wireless-tools
BuildRequires:  perl(YAML)
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(dbus-glib-1) >= 0.94
BuildRequires:  pkgconfig(glib-2.0) >= 2.32
BuildRequires:  pkgconfig(gobject-introspection-1.0)
BuildRequires:  pkgconfig(gtk-doc)
BuildRequires:  pkgconfig(jansson) >= 2.7
BuildRequires:  pkgconfig(libcurl)
BuildRequires:  pkgconfig(libndp)
BuildRequires:  pkgconfig(libnewt) >= 0.52.15
BuildRequires:  pkgconfig(libnl-3.0) >= 3.2.8
BuildRequires:  pkgconfig(libnl-genl-3.0)
BuildRequires:  pkgconfig(libnl-route-3.0)
BuildRequires:  pkgconfig(libpsl) >= 0.1
BuildRequires:  pkgconfig(libselinux)
BuildRequires:  pkgconfig(libsystemd) >= 209
BuildRequires:  pkgconfig(libudev) >= 175
BuildRequires:  pkgconfig(mm-glib) >= 0.7.991
BuildRequires:  pkgconfig(mobile-broadband-provider-info)
BuildRequires:  pkgconfig(nss)
BuildRequires:  pkgconfig(polkit-gobject-1)
BuildRequires:  pkgconfig(udev)
BuildRequires:  pkgconfig(uuid)
BuildRequires:  pkgconfig(vapigen)
### Conditional BRs
%if %{with LIBAUDIT}
BuildRequires:  pkgconfig(audit)
%endif
## Required for tests
%if %{with TESTS}
#BuildRequires:  python3-gobject
%endif
##
Requires:       NetworkManager-branding
Requires:       mozilla-nss
%if %{with_netconfig}
Requires:       sysconfig-netconfig >= 0.80.5
%endif
Requires:       wpa_supplicant >= 0.6.4
Recommends:     dnsmasq
Recommends:     iproute2
Recommends:     iputils
Recommends:     nftables
Recommends:     org.freedesktop.ModemManager
# Provides required by sysconfig. The latter is used by older versions.
Provides:       dhcdbd = 1.14
Provides:       service(network)
Provides:       sysvinit(network)
Obsoletes:      dhcdbd < 1.14
Obsoletes:      libnm-glib-vpn1 < 1.32
Obsoletes:      libnm-glib4 < 1.32
Obsoletes:      libnm-util2 < 1.32
# NetworkManager-wifi was folded back into the main package
# The dep chain is not really different and it causes too many
# problems for users having that split. Not worth the pain
Provides:       NetworkManager-wifi = %{version}
Obsoletes:      NetworkManager-wifi <= %{version}

%{?systemd_ordering}

%description
NetworkManager attempts to keep an active network connection available
at all times.  The point of NetworkManager is to make networking
configuration and setup as painless and automatic as possible.	If
using DHCP, NetworkManager is intended to replace default routes,
obtain IP addresses from a DHCP server, and change name servers
whenever it sees fit.

%package devel
Summary:        Libraries and headers for adding NetworkManager support to applications
Group:          Development/Libraries/Other
Requires:       %{name} = %{version}
Requires:       libnm0 = %{version}
Requires:       typelib-1_0-NM-1_0 = %{version}
Provides:       %{name}-doc = %{version}
Obsoletes:      %{name}-doc < 0.9.1

%description devel
This package contains various headers accessing some NetworkManager
functionality from applications.

%package -n libnm0
Summary:        Convenience library for clients of NetworkManager
Group:          System/Libraries

%description -n libnm0
This package contains the libraries that make it easier to use some
Network Manager functionality from applications that use glib.

%package -n typelib-1_0-NM-1_0
Summary:        Introspection bindings for the NetworkManager client convenience library
Group:          System/Libraries

%description -n typelib-1_0-NM-1_0
This package contains the gi-bindings that make it easier to use some
Network Manager functionality from applications that use glib.

This package provides the GObject Introspection bindings for the
NetworkManager library.

%package branding-upstream
Summary:        Default upstream configuration for NetworkManager
Group:          Productivity/Networking/System
Requires:       NetworkManager = %{version}
Supplements:    (NetworkManager and branding-upstream)
Conflicts:      NetworkManager-branding
Provides:       NetworkManager-branding = %{version}
BuildArch:      noarch

%description branding-upstream
This package provides the default upstream configuration for
NetworkManager. Specifically,
it is not configured for connection checking against
http://conncheck.opensuse.org. For, the version with connection
checking, install %{name}-branding-openSUSE.

%package pppoe
Summary:        NetworkManager plugin for ADSL connections
Group:          Productivity/Networking/System
Requires:       %{name} = %{version}
Enhances:       %{name}
Supplements:    (%{name} and rp-pppoe)
Requires:       rp-pppoe
%requires_eq    ppp

%description pppoe
NetworkManager plugin for ADSL connections.

This package is needed to configure PPPoE interfaces

%package bluetooth
Summary:        Bluetooth device plugin for NetworkManager
Group:          System Environment/Base
Requires:       %{name} = %{version}
Requires:       NetworkManager-wwan = %{version}
BuildRequires:  pkgconfig(bluez) >= 5
Supplements:    (NetworkManager and bluez)

%description bluetooth
This package contains NetworkManager support for Bluetooth devices.

%package wwan
Summary:        Mobile broadband device plugin for NetworkManager
Group:          System Environment/Base
Requires:       %{name} = %{version}
Requires:       ModemManager

%description wwan
This package contains NetworkManager support for mobile broadband (WWAN)
devices.

%package ovs
Summary:        Open vSwitch device plugin for NetworkManager
Group:          System Environment/Base
Requires:       %{name} = %{version}
Requires:       openvswitch
Supplements:    (NetworkManager and openvswitch)

%description ovs
This package contains NetworkManager support for Open vSwitch bridges.

%package tui
Summary:        NetworkManager curses-based UI
Group:          System Environment/Base
Requires:       %{name} = %{version}
Requires:       libnm0 = %{version}
Supplements:    (patterns-base-enhanced_base and NetworkManager)

%description tui
This adds a curses-based "TUI" (Text User Interface) to
NetworkManager, to allow performing some of the operations supported
by nm-connection-editor and nm-applet in a non-graphical environment.

%package cloud-setup
Summary:        Automatically configure NetworkManager in cloud
Group:          System Environment/Base
Requires:       %{name} = %{version}
Requires:       libnm0 = %{version}

%description cloud-setup
Installs a nm-cloud-setup tool that can automatically configure
NetworkManager in cloud setups. Currently only EC2 is supported.
This tool is still experimental.

%lang_package

%prep
%setup -q
%patch0 -p1
%if %{with_cacert_patch}
%patch1 -p1
%endif
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1

# Fix server.conf's location, to end up in %%{_defaultdocdir}/%%{name},
# rather then %%{_datadir}/doc/%%{name}/examples:
sed -i -r "/install_dir: join_paths/s/(nm_datadir, 'doc)\
(', nm_name), 'examples'/\1\/packages\2/" data/meson.build

%build
%define _lto_cflags %{nil}
export CFLAGS="%{optflags} -fno-strict-aliasing -fcommon"
export PYTHON=%{_bindir}/python3
%meson \
    -Dsystemdsystemunitdir=%{_unitdir} \
    -Dudev_dir=%{_udevdir} \
    -Ddbus_conf_dir=%{_dbusconfdir} \
    -Ddnsmasq=%{_sbindir}/dnsmasq \
    -Ddist_version=%{version} \
    -Dpolkit_agent_helper_1=%{_libexecdir}/polkit-1/polkit-agent-helper-1 \
    -Dhostname_persist=suse \
    -Dlibaudit=%{libaudit_meson_opt} \
    -Diwd=true \
    -Dpppd=%{_sbindir}/pppd \
    -Dpppd_plugin_dir=%{_pppddir} \
    -Dnm_cloud_setup=true \
    -Dbluez5_dun=true \
%if %{suse_version} >= 1550
    -Dnetconfig=%{_sbindir}/netconfig \
%else
    -Dnetconfig=/sbin/netconfig \
%endif
    -Dconfig_dhcp_default=internal \
    -Ddhcpcanon=no \
    -Ddhcpcd=no \
    -Ddhclient=%{_sbindir}/dhclient \
    -Ddocs=true \
    -Dtests=%{tests_meson_opt} \
    -Dmore_asserts=0 \
    -Dmore_logging=false \
    -Dqt=false \
    -Db_lto=true \
    %{nil}
%meson_build

%if %{with TESTS}
%check
%meson_test
%endif

%install
%meson_install
%find_lang %{name}
%fdupes %{buildroot}%{_datadir}/gtk-doc/
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_sysconfdir}/NetworkManager/{VPN,conf.d}
mkdir -p %{buildroot}%{_localstatedir}/log/
mkdir -p %{buildroot}%{_localstatedir}/lib/NetworkManager/dispatcher.d
mkdir -p %{buildroot}%{_prefix}/lib/NetworkManager/VPN
touch %{buildroot}%{_localstatedir}/log/NetworkManager
mkdir -p %{buildroot}%{_sysconfdir}/NetworkManager/system-connections
install -m 0755 %{SOURCE1} %{buildroot}%{_prefix}/lib/NetworkManager/dispatcher.d/
install -m 0644 %{SOURCE2} %{buildroot}%{_prefix}/lib/NetworkManager/
chmod 0644 %{buildroot}%{_prefix}/lib/NetworkManager/NetworkManager.conf
install -m 0644 %{SOURCE4} %{buildroot}%{_prefix}/lib/NetworkManager/conf.d
# Install RPM macros to be consumed by plugins
mkdir -p %{buildroot}%{_rpmmacrodir}
install -m 0644 %{SOURCE98} %{buildroot}%{_rpmmacrodir}/

# drop on demand activation, it is handled as a system service
rm -f %{buildroot}%{_datadir}/dbus-1/system-services/org.freedesktop.NetworkManager.service

%pre
%service_add_pre NetworkManager.service NetworkManager-dispatcher.service nm-priv-helper.service

%post
%service_add_post NetworkManager.service NetworkManager-dispatcher.service nm-priv-helper.service

%preun
%service_del_preun NetworkManager.service NetworkManager-dispatcher.service nm-priv-helper.service

%postun
%service_del_postun NetworkManager.service NetworkManager-dispatcher.service nm-priv-helper.service

%pre cloud-setup
%service_add_pre nm-cloud-setup.service

%post cloud-setup
%service_add_post nm-cloud-setup.service

%preun cloud-setup
%service_del_preun nm-cloud-setup.service

%postun cloud-setup
%service_del_postun nm-cloud-setup.service

%post -n libnm0 -p /sbin/ldconfig
%postun -n libnm0 -p /sbin/ldconfig

%files
%license COPYING
%doc ChangeLog NEWS AUTHORS TODO
%{_bindir}/nm-online
%{_bindir}/nmcli
%{_datadir}/bash-completion/completions/nmcli
%{_sbindir}/NetworkManager
%{_datadir}/dbus-1/system-services/org.freedesktop.nm_dispatcher.service
%{_datadir}/dbus-1/interfaces/org.freedesktop.NetworkManager.*
%{_datadir}/polkit-1/actions/org.freedesktop.NetworkManager.policy
%attr(0700,root,root) %{_localstatedir}/lib/NetworkManager
%{_mandir}/man1/nm-online.1%{?ext_man}
%{_mandir}/man1/nmcli.1%{?ext_man}
%{_mandir}/man5/nm-settings-keyfile.5%{?ext_man}
%{_mandir}/man5/NetworkManager.conf.5%{?ext_man}
%{_mandir}/man5/nm-settings.5%{?ext_man}
%{_mandir}/man5/nm-system-settings.conf.5%{?ext_man}
%{_mandir}/man5/nm-settings-dbus.5%{?ext_man}
%{_mandir}/man5/nm-settings-nmcli.5%{?ext_man}
%{_mandir}/man7/nmcli-examples.7%{?ext_man}
%{_mandir}/man8/NetworkManager-dispatcher.8%{?ext_man}
%{_mandir}/man8/NetworkManager-wait-online.service.8%{?ext_man}
%{_mandir}/man8/NetworkManager.8%{?ext_man}
%{_mandir}/man8/nm-initrd-generator.8%{?ext_man}
%dir %{_libdir}/NetworkManager
%dir %{_libdir}/NetworkManager/%{version}
%{_libdir}/NetworkManager/%{version}/libnm-device-plugin-wifi.so
%{_libexecdir}/nm-daemon-helper
%{_libexecdir}/nm-dhcp-helper
%{_libexecdir}/nm-dispatcher
%{_libexecdir}/nm-initrd-generator
%{_libexecdir}/nm-priv-helper
%dir %{_sysconfdir}/NetworkManager
%dir %{_sysconfdir}/NetworkManager/VPN
%dir %{_sysconfdir}/NetworkManager/conf.d
%dir %{_sysconfdir}/NetworkManager/dispatcher.d
%dir %{_sysconfdir}/NetworkManager/system-connections
%attr(0755,root,root) %{_prefix}/lib/NetworkManager/dispatcher.d/nfs
%{_unitdir}/NetworkManager.service
%{_unitdir}/NetworkManager-dispatcher.service
%{_unitdir}/NetworkManager-wait-online.service
%dir %{_unitdir}/NetworkManager.service.d
%{_udevdir}/rules.d/84-nm-drivers.rules
%{_udevdir}/rules.d/85-nm-unmanaged.rules
%{_udevdir}/rules.d/90-nm-thunderbolt.rules
%{_unitdir}/nm-priv-helper.service
%ghost %config(noreplace) %{_localstatedir}/log/NetworkManager
%dir %{_prefix}/lib/NetworkManager
%{_prefix}/lib/NetworkManager/NetworkManager.conf
%dir %{_prefix}/lib/NetworkManager/conf.d
%dir %{_prefix}/lib/NetworkManager/dispatcher.d
%dir %{_prefix}/lib/NetworkManager/dispatcher.d/no-wait.d
%dir %{_prefix}/lib/NetworkManager/dispatcher.d/pre-up.d
%dir %{_prefix}/lib/NetworkManager/dispatcher.d/pre-down.d
%dir %{_prefix}/lib/NetworkManager/VPN
%dir %{_prefix}/lib/firewalld
%dir %{_prefix}/lib/firewalld/zones
%{_prefix}/lib/firewalld/zones/nm-shared.xml
%{_dbusconfdir}/nm-dispatcher.conf
%{_dbusconfdir}/org.freedesktop.NetworkManager.conf
%{_datadir}/dbus-1/system-services/org.freedesktop.nm_priv_helper.service
%{_dbusconfdir}/nm-priv-helper.conf
%{_defaultdocdir}/NetworkManager/server.conf

%files devel
%{_includedir}/libnm/
%{_datadir}/gir-1.0/*.gir
%dir %{_datadir}/vala/vapi
%{_datadir}/vala/vapi/libnm.deps
%{_datadir}/vala/vapi/libnm.vapi
%{_libdir}/libnm.so
%{_libdir}/pkgconfig/libnm.pc
%doc %{_datadir}/gtk-doc/html/NetworkManager/
%doc %{_datadir}/gtk-doc/html/libnm/
%{_rpmmacrodir}/macros.NetworkManager

%files -n libnm0
%{_libdir}/libnm.so.*

%files -n typelib-1_0-NM-1_0
%{_libdir}/girepository-1.0/NM-1.0.typelib

%files lang -f %{name}.lang

%files branding-upstream
%{_prefix}/lib/NetworkManager/conf.d/conncheck-disabled.conf

%files pppoe
%{_libdir}/NetworkManager/%{version}/libnm-device-plugin-adsl.so
%{_libdir}/NetworkManager/%{version}/libnm-ppp-plugin.so
%dir %{_libdir}/pppd/2.*
%{_libdir}/pppd/2.*/nm-pppd-plugin.*

%files bluetooth
%{_libdir}/NetworkManager/%{version}/libnm-device-plugin-bluetooth.so

%files wwan
%{_libdir}/NetworkManager/%{version}/libnm-device-plugin-wwan.so
%{_libdir}/NetworkManager/%{version}/libnm-wwan.so

%files ovs
%{_libdir}/NetworkManager/%{version}/libnm-device-plugin-ovs.so
%{_unitdir}/NetworkManager.service.d/NetworkManager-ovs.conf
%{_mandir}/man7/nm-openvswitch.7%{?ext_man}

%files tui
%{_bindir}/nmtui*
%{_mandir}/man1/nmtui.1%{?ext_man}
%{_mandir}/man1/nmtui-connect.1%{?ext_man}
%{_mandir}/man1/nmtui-edit.1%{?ext_man}
%{_mandir}/man1/nmtui-hostname.1%{?ext_man}

%files cloud-setup
%{_libexecdir}/nm-cloud-setup
%{_unitdir}/nm-cloud-setup.service
%{_unitdir}/nm-cloud-setup.timer
%{_prefix}/lib/NetworkManager/dispatcher.d/90-nm-cloud-setup.sh
%{_prefix}/lib/NetworkManager/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh
%{_mandir}/man8/nm-cloud-setup.8%{?ext_man}

%changelog