NetworkManager-1.58.0

#### Beyond Linux® From Scratch (systemd Edition) - Version r13.0-1303

### Chapter 16. Networking Utilities

- Prev

  BIND Utilities-9.20.26

- Next

  network-manager-applet-1.34.0

- Up
- Home

# NetworkManager-1.58.0

## Introduction to NetworkManager

NetworkManager is a set of co-operative tools that make networking simple and straightforward. Whether you use WiFi, wired, 3G, or Bluetooth, NetworkManager allows you to quickly move from one network to another: Once a network has been configured and joined once, it can be detected and re-joined automatically the next time it's available.

### Note

Development versions of BLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.

### Note

Make sure that you disable the systemd-networkd service or configure it not to manage the interfaces you want to manage with NetworkManager.

### Package Information

- Download (HTTP): https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/releases/1.58.0/downloads/NetworkManager-1.58.0.tar.xz

- Download MD5 sum: 897723f25e84233eb6e54b46947e7e1b

- Download size: 6.3 MB

- Estimated disk space required: 355 MB (with tests and documentation)

- Estimated build time: 0.8 SBU (with tests, using parallelism=4)

### NetworkManager Dependencies

#### Required

libndp-1.9

#### Recommended

cURL-8.21.0, GLib-2.88.3 (with GObject Introspection), iptables-1.8.13, libpsl-0.23.3, newt-0.52.25 (for nmtui), nss-3.126, Polkit-127 (runtime), PyGObject-3.56.3, Systemd-261.2, Vala-0.56.19, and wpa_supplicant-2.12 (runtime, built with D-Bus support)

#### Optional

BlueZ-5.87, D-Bus Python-1.4.0 (for the test suite), GnuTLS-3.8.13 (can be used instead of nss-3.126), GTK-Doc-1.36.1, jansson-2.15.1, libnvme-1.16.2, LLVM-22.1.8 (with Clang and the BPF target), ModemManager-1.24.2, UPower-1.91.3, Valgrind-3.27.1, dnsmasq, firewalld, libaudit, libteam, mobile-broadband-provider-info, libbpf, PPP, and RP-PPPoE

## Kernel Configuration

If you wish to run the tests, check that at least the following options are enabled in the kernel configuration. Those options have been determined to be necessary, but may not be sufficient. Recompile the kernel if necessary:

    [*] Networking support --->                                                [NET]
      Networking options --->
        [*]   TCP/IP networking                                               [INET]
        <*/M>   IP: tunneling                                             [NET_IPIP]
        <*/M>   IP: GRE demultiplexer                              [NET_IPGRE_DEMUX]
        <*/M>   IP: GRE tunnels over IP                                  [NET_IPGRE]
        <*>     The IPv6 protocol --->                                        [IPV6]
          <*/M>   IPv6: IPv6-in-IPv4 tunnel (SIT driver)                  [IPV6_SIT]
          <*/M>   IPv6: GRE tunnel                                        [IPV6_GRE]
          [*]     IPv6: Multiple Routing Tables               [IPV6_MULTIPLE_TABLES]
        [*]     MPTCP: Multipath TCP                                         [MPTCP]
        [*]       MPTCP: IPv6 support for Multipath TCP                 [MPTCP_IPV6]
        <*/M> 802.1Q/802.1ad VLAN Support                               [VLAN_8021Q]
        [*]   QoS and/or fair queueing --->                              [NET_SCHED]
          <*> Stochastic Fairness Queueing (SFQ)                       [NET_SCH_SFQ]
          <*> Token Bucket Filter (TBF)                                [NET_SCH_TBF]
          <*> Fair Queue Controlled Delay AQM (FQ_CODEL)          [NET_SCH_FQ_CODEL]
          <*> Ingress/classifier-action Qdisc                      [NET_SCH_INGRESS]

    Device Drivers --->
      [*] Network device support --->                                   [NETDEVICES]
        [*]   Network core driver support                                 [NET_CORE]
        <*/M>   Bonding driver support                                     [BONDING]
        <*/M>   Dummy net driver support                                     [DUMMY]
        <*/M>   Ethernet team driver support --->                         [NET_TEAM]
        <*/M>   MAC-VLAN support                                           [MACVLAN]
        <*/M>     MAC-VLAN based tap driver                                [MACVTAP]
        <*/M>   IP-VLAN support                                             [IPVLAN]
        <*/M>   Virtual eXtensible Local Area Network (VXLAN)                [VXLAN]
        <*/M>   Virtual ethernet pair device                                  [VETH]
        <*/M>   Virtual Routing and Forwarding (Lite)                      [NET_VRF]

## Installation of NetworkManager

Fix the python scripts so that they use Python 3:

    grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/'

Install NetworkManager by running the following commands:

    mkdir build &&
    cd    build &&

    meson setup ..                    \
          --prefix=/usr               \
          --buildtype=release         \
          -D libaudit=no              \
          -D nmtui=true               \
          -D ovs=false                \
          -D ppp=false                \
          -D nbft=false               \
          -D selinux=false            \
          -D qt=false                 \
          -D session_tracking=systemd \
          -D nm_cloud_setup=false     \
          -D clat=false               \
          -D modem_manager=false      &&
    ninja

An already active graphical session with a bus address is necessary to run the tests. To test the results, issue ninja test.

A few tests may fail, depending on enabled kernel options.

Now, as the `root` user:

    ninja install &&
    rm -rf /usr/share/doc/NetworkManager-1.58.0 &&
    mv -v /usr/share/doc/NetworkManager{,-1.58.0}

If you have not passed the `-D docs=true` option to meson, you can install the pregenerated manual pages with (as the `root` user):

    for file in $(echo ../man/*.[1578]); do
        section=${file##*.} &&
        install -vdm 755 /usr/share/man/man$section
        install -vm 644 $file /usr/share/man/man$section/
    done

If you have not used `-D docs=true`, the pregenerated HTML documentation can also be installed with (as the `root` user):

    cp -Rv ../docs/{api,libnm} /usr/share/doc/NetworkManager-1.58.0

## Command Explanations

`--buildtype=release`: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.

`-D docs=true`: Use this switch to enable building man pages and documentation if GTK-Doc-1.36.1 is installed.

`-D nmtui=true`: This switch enables building nmtui.

`-D ovs=false`: This switch disable the Open vSwitch integration because it needs jansson-2.15.1. Remove it if you have jansson-2.15.1 installed on your system.

`-D modem_manager=false`: This switch is required if ModemManager is not installed. Omit this switch if you have built ModemManager and mobile-broadband-provider-info.

`-D nbft=false`: This switch is required if libnvme-1.16.2 is not installed, and disabled NBFT support in the initrd generator. Note that BLFS does not use the initrd generator provided from NetworkManager by default.

`-D session_tracking=systemd`: This switch is used to set systemd-logind as the default program for session tracking.

`-D ppp=false`: This switch disables PPP support in NetworkManager since the programs necessary for it are not installed. Remove this switch if you need PPP support and have PPP installed.

`-D libaudit=no` and `-D selinux=false`: This switch disables support for libaudit and SELinux since they are not used in BLFS.

`-D qt=false`: This switch disables the Qt 5 examples.

`-D nm_cloud_setup=false`: Use this switch if you have not installed jansson-2.15.1. This disables nm-cloud-setup which is used to automatically configure the network in a public cloud environment within a VM.

`-D clat=false`: This switch disables CLAT support. Remove it if you have installed libbpf, and also installed LLVM built with Clang and the BPF target enabled (note that in the BLFS LLVM-22.1.8 instruction the BPF target is not enabled).

`-D crypto=gnutls`: Use this switch if you have GnuTLS installed and want to use it for certificate and key operations in NetworkManager, instead of using NSS (the default).

`-D crypto=null`: Use this switch if neither NSS nor GnuTLS is installed but you want to build NetworkManager anyway. This switch will make NetworkManager lack some features (for example 802.1X).

## Configuring NetworkManager

### Config Files

`/etc/NetworkManager/NetworkManager.conf`

### Configuration Information

For NetworkManager to work, at least a minimal configuration file must be present. Such a file is not installed with make install. Issue the following command as the `root` user to create a minimal `NetworkManager.conf` file:

    cat >> /etc/NetworkManager/NetworkManager.conf << "EOF"
    [main]
    plugins=keyfile
    EOF

This file should not be modified directly by users of the system. Instead, system specific changes should be made using configuration files in the `/etc/NetworkManager/conf.d` directory.

To allow polkit to manage authorizations, add the following configuration file:

    cat > /etc/NetworkManager/conf.d/polkit.conf << "EOF"
    [main]
    auth-polkit=true
    EOF

To prevent NetworkManager from updating the `/etc/resolv.conf` file, add the following configuration file:

    cat > /etc/NetworkManager/conf.d/no-dns-update.conf << "EOF"
    [main]
    dns=none
    EOF

For additional configuration options, see man 5 NetworkManager.conf.

To allow regular users to configure network connections, you should add them to the `netdev` group, and create a polkit rule that grants access. Run the following commands as the `root` user:

    groupadd -fg 86 netdev &&
    /usr/sbin/usermod -a -G netdev <username>

    cat > /usr/share/polkit-1/rules.d/org.freedesktop.NetworkManager.rules << "EOF"
    polkit.addRule(function(action, subject) {
        if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("netdev")) {
            return polkit.Result.YES;
        }
    });
    EOF

### Systemd Unit

To start the NetworkManager daemon at boot, enable the previously installed systemd unit by running the following command as the `root` user:

### Note

If using Network Manager to manage an interface, any previous configuration for that interface should be removed, and the interface brought down prior to starting Network Manager.

    systemctl enable NetworkManager

Starting in version 1.11.2 of NetworkManager, a systemd unit named `NetworkManager-wait-online.service` is enabled, which is used to prevent services that require network connectivity from starting until NetworkManager establishes a connection. To disable this behavior, run the following command as the `root` user:

    systemctl disable NetworkManager-wait-online

## Contents

Installed Programs: NetworkManager, nmcli, nm-online, nmtui, and, symlinked to nmtui: nmtui-connect, nmtui-edit, and nmtui-hostname
Installed Libraries: libnm.so and several modules under /usr/lib/NetworkManager
Installed Directories: /etc/NetworkManager, /usr/include/libnm, /usr/lib/NetworkManager, /usr/share/doc/NetworkManager-1.58.0, /usr/share/gtk-doc/html/{libnm,NetworkManager} (if the documentation is built), and /var/lib/NetworkManager

### Short Descriptions

nmcli | is a command-line tool for controlling NetworkManager and getting its status
nm-online | is a utility to determine whether you are online
nmtui | is an interactive ncurses-based user interface for nmcli
nmtui-connect | is an interactive ncurses-based user interface to activate/deactivate connections
nmtui-edit | is an interactive ncurses-based user interface to edit connections
nmtui-hostname | is an interactive ncurses-based user interface to edit the hostname
NetworkManager | is the network management daemon
`libnm.so` | contains functions used by NetworkManager

- Prev

  BIND Utilities-9.20.26

- Next

  network-manager-applet-1.34.0

- Up
- Home