{"id":66653,"date":"2022-08-23T09:01:26","date_gmt":"2022-08-23T09:01:26","guid":{"rendered":"https:\/\/www.cryptocabaret.com\/?p=66653"},"modified":"2022-08-23T09:01:26","modified_gmt":"2022-08-23T09:01:26","slug":"how-i-migrated-to-networkmanager-keyfiles-for-configuration","status":"publish","type":"post","link":"https:\/\/www.cryptocabaret.com\/?p=66653","title":{"rendered":"How I migrated to NetworkManager keyfiles for configuration"},"content":{"rendered":"<p><span class=\"field field--name-title field--type-string field--label-hidden\">How I migrated to NetworkManager keyfiles for configuration<\/span><br \/>\n<span class=\"field field--name-uid field--type-entity-reference field--label-hidden\"><a title=\"View user profile.\" href=\"https:\/\/opensource.com\/users\/dboth\" class=\"username\">David Both<\/a><\/span><br \/>\n<span class=\"field field--name-created field--type-created field--label-hidden\">Tue, 08\/23\/2022 &#8211; 03:00<\/span><\/p>\n<div data-drupal-selector=\"rate-node-70163\" class=\"rate-widget-thumbs-up\" title=\"Register or Login to like.\">\n<div class=\"rate-thumbs-up-btn-up vote-pending\"><a href=\"https:\/\/opensource.com\/user\/register\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml\">Login<\/a> to like<\/div>\n<div class=\"rate-score\"><a href=\"https:\/\/opensource.com\/user\/register\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml\">Login<\/a> to like<\/div>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item\">\n<p>NetworkManager was introduced in 2004 to make network configuration more flexible and dynamic. The old SystemV startup shell scripts, of which the interface configuration files were a part, were incapable of handling WiFi, wired, VPNs, broadband modems, and more\u2014or at least incapable of doing it quickly or efficiently.<\/p>\n<p>In a series of articles, I&#8217;ve written about why I&#8217;m a fan of NetworkManager and how I&#8217;ve used it. In <a href=\"https:\/\/opensource.com\/article\/22\/4\/networkmanager-linux\" target=\"_blank\" rel=\"noopener\">part 1<\/a>, I looked at what NetworkManager does and some of the tools it provides for viewing network connections and devices. In that article, I mentioned that NetworkManager does not need interface configuration files for most hosts. However, it can create its own ini-style configuration files, and it recognizes the older network interface configuration files. The NetworkManager configuration files are officially called keyfiles. In <a href=\"https:\/\/opensource.com\/article\/22\/8\/network-configuration-files\" target=\"_blank\" rel=\"noopener\">part 2<\/a>, I looked at the deprecated interface configuration files and how to configure them, should you still be using them.<\/p>\n<p>Support for the deprecated <code>ifcfg<\/code> files is no longer provided by default for new installations beginning with Fedora 36. It will continue to use them on systems that have been upgraded from earlier versions of Fedora to release 36\u2014at least for a while longer. Still, it is not a good idea at this late stage to depend on deprecated <code>ifcfg<\/code> configuration files. So for part 3 of this series, I will demonstrate migrating existing interface configuration files to the NetworkManager keyfiles using the command-line tool provided. I will also look at using both command-line and GUI tools to create new keyfiles from scratch and compare them for ease of use.<\/p>\n<p>The migration is considerably more straightforward than it sounds. I used the <code>nmcli connection migrate<\/code> command on the two systems I needed to migrate, one with a single network interface card (NIC) and one, my router\/firewall, with three NICs. After some extensive testing on a VM, it also worked perfectly the first time on both production hosts. That&#8217;s it: No other commands, options, or arguments required. And it is fast, taking much less than one second on both hosts.<\/p>\n<h2>Why should I migrate my files?<\/h2>\n<p>Most of the restrictions of the old shell scripts lay in the structure\u2014or lack thereof\u2014of the <code>ifcfg<\/code> files. NetworkManager introduced the new network connection keyfiles to overcome those issues. But until Fedora 36, it still would recognize the old <code>ifcfg<\/code> configuration files. Now, NetworkManager no longer creates or supports <code>ifcfg<\/code> files for new installations.<\/p>\n<p>I experimented with NetworkManager on a new Fedora 36 installation and could not convince it to use newly created <code>ifcfg<\/code> files. It continued to treat the interfaces as dynamic host configuration protocol (DHCP) and obtain its configuration values from the DHCP server. The <code>ifcfg<\/code> files are no longer supported on new installations because the <code>NetworkManager-initscripts-ifcfg-rh<\/code> package is no longer installed. That package contains the tools needed to use the <code>ifcfg<\/code> files. Hosts upgraded from older releases of Fedora will still have the <code>NetworkManager-initscripts-ifcfg-rh<\/code> package installed, so it will, for the time being, be upgraded along with the rest of the installation to Fedora 36. This may not be true in the future.<\/p>\n<p>If you are using DHCP configuration for your network hosts, you do not need to migrate any <code>ifcfg<\/code> files. In fact, you can simply delete them, if they still exist, and NetworkManager will deal with managing the network connections. Personally, I prefer to move deprecated files like these to an archive subdirectory in <code>\/root<\/code> so that I can find them later, just in case.<\/p>\n<p>All hosts with static connections should be migrated. This usually includes servers, firewalls, and other hosts that may need to perform their network functions without the DHCP server being active. I have two hosts like this: my main server and my firewall\/router.<\/p>\n<h2>My experiments<\/h2>\n<p>When NetworkManager officially deprecated the interface configuration files located in <code>\/etc\/sysconfig\/network-scripts<\/code>, it did not immediately stop using them, but the update procedure did drop in a readme file, <code>\/etc\/sysconfig\/network-scripts\/readme-ifcfg-rh.txt<\/code>. This short file states explicitly that the <code>ifcfg<\/code>-style files are deprecated. It also provides a simple command that performs the migration for us.<\/p>\n<p>I suggest you read that file on your host and then experiment in a non-production environment. I used a VM for my experiments and learned a lot. Before I started making changes, I displayed the connection data shown below to get the current state of the network connection.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver ~<span class=\"br0\">]<\/span><span class=\"co0\"># nmcli<\/span><br>\nenp0s3: connected to Wired connection <span class=\"nu0\">1<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"st0\">\"Intel 82540EM\"<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 ethernet <span class=\"br0\">(<\/span>e1000<span class=\"br0\">)<\/span>, 08:00:<span class=\"nu0\">27<\/span>:07:CD:FE, hw, mtu <span class=\"nu0\">1500<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 ip4 default<br>\n\u00a0 \u00a0 \u00a0 \u00a0 inet4 192.168.0.136<span class=\"sy0\">\/<\/span><span class=\"nu0\">24<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 route4 192.168.0.0<span class=\"sy0\">\/<\/span><span class=\"nu0\">24<\/span> metric <span class=\"nu0\">100<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 route4 default via 192.168.0.254 metric <span class=\"nu0\">100<\/span><br><br>\nlo: unmanaged<br>\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"st0\">\"lo\"<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 loopback <span class=\"br0\">(<\/span>unknown<span class=\"br0\">)<\/span>, 00:00:00:00:00:00, sw, mtu <span class=\"nu0\">65536<\/span><br><br>\nDNS configuration:<br>\n\u00a0 \u00a0 \u00a0 \u00a0 servers: 192.168.0.52 8.8.8.8 8.8.4.4<br>\n\u00a0 \u00a0 \u00a0 \u00a0 domains: example.org<br>\n\u00a0 \u00a0 \u00a0 \u00a0 interface: enp0s3<\/div><\/div><\/pre>\n<p>I created a simple <code>ifcfg<\/code> file that defines a static configuration on one of my VMs then tested it to verify that this static config worked properly. Here is the <code>ifcfg-enp0s3<\/code> file I created for this testing:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"re2\">TYPE<\/span>=Ethernet<br><span class=\"re2\">PROXY_METHOD<\/span>=none<br><span class=\"re2\">BROWSER_ONLY<\/span>=no<br><span class=\"re2\">BOOTPROTO<\/span>=static<br><span class=\"co0\"># HWADDR=08:00:27:07:CD:FE<\/span><br><span class=\"re2\">IPADDR<\/span>=192.168.0.95<br><span class=\"re2\">PREFIX<\/span>=<span class=\"nu0\">24<\/span><br><span class=\"re2\">DEFROUTE<\/span>=no<br><span class=\"re2\">IPV4_FAILURE_FATAL<\/span>=no<br><span class=\"re2\">IPV6INIT<\/span>=no<br><span class=\"re2\">NAME<\/span>=enp0s3<br><span class=\"re2\">ONBOOT<\/span>=<span class=\"kw2\">yes<\/span><br><span class=\"re2\">DNS1<\/span>=192.168.0.52<br><span class=\"re2\">DNS2<\/span>=8.8.8.8<br><span class=\"re2\">AUTOCONNECT_PRIORITY<\/span>=-<span class=\"nu0\">999<\/span><br><span class=\"re2\">DEVICE<\/span>=enp0s3<\/div><\/div><\/pre>\n<p>I commented out the hardware address in the <code>ifcfg-enp0s3<\/code> file because it does not seem necessary. I tried it both ways, and it works just as well either way\u2014once I finally got it working at all. NetworkManager completely ignored the contents of this file until I installed the <code>NetworkManager-initscripts-ifcfg-rh<\/code> package. After that, NetworkManager was able to set the network configuration from this\u00a0<code>ifcfg-enp0s3<\/code> file.<\/p>\n<p>Then it was time to try the migration tool. I ran the command shown below to migrate the <code>ifcfg<\/code> file to a keyfile.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># nmcli connection migrate <\/span><br>\nConnection <span class=\"st_h\">'Wired connection 1'<\/span> <span class=\"br0\">(<\/span>c7b11d30-522e-306f-<span class=\"nu0\">8622<\/span>-527119911afc<span class=\"br0\">)<\/span> successfully migrated.<br><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># <\/span><\/div><\/div><\/pre>\n<p>This command took less than a second. It creates the new keyfile and then deletes the <code>ifcfg<\/code> file. I suggest making a copy of the original <code>ifcfg<\/code> file before running this migration tool. It created the <code>\/etc\/NetworkManager\/system-connections\/enp0s3.nmconnection<\/code> file for my host. Without specifying a specific interface, this command will migrate all <code>ifcfg<\/code> files located in <code>\/etc\/sysconfig\/network-scripts<\/code>. If a host has multiple NICs and corresponding <code>ifcfg<\/code> files, only some of which you want to migrate, you can specify a list of connections to migrate.<\/p>\n<p>The keyfiles can be modified using your favorite editor. I tried this by changing the <code>IPADDR<\/code> entry and restarting NetworkManager just to make sure it worked. The\u00a0<code>nmcli connection reload<\/code> command did not work for me. Making changes directly to the keyfiles using an editor is not recommended, but it does work. To be honest, many experienced sysadmins (like me) really prefer editing ASCII text configuration files directly, so\u2014recommended or not\u2014that is how I do things most of the time. I just like to know what is actually in those files so I can recognize when something is wrong with them. It helps with solving configuration problems.<\/p>\n<h2>Doing it for real<\/h2>\n<p>After a day of experimenting so that I fully understood how this all works and how to recover in case it fails, I was ready to do it for real. I chose my main server for this initial attempt because it only has a single NIC, which will make it faster to get back online if there is a problem.<\/p>\n<p>First, I copied the file <code>\/etc\/sysconfig\/network-scripts\/ifcfg-eno1<\/code> shown in below to <code>\/root<\/code> as a backup. The <code>nmcli connection migrate<\/code> command can make the conversion back from keyfile to <code>ifcfg<\/code> file. But why bother when I can have an exact backup ready to drop back in?<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"re2\">HWADDR<\/span>=e0:d5:5e:a2:de:a4<br><span class=\"re2\">TYPE<\/span>=Ethernet<br><span class=\"re2\">PROXY_METHOD<\/span>=none<br><span class=\"re2\">BROWSER_ONLY<\/span>=no<br><span class=\"re2\">BOOTPROTO<\/span>=static<br><span class=\"re2\">DEFROUTE<\/span>=<span class=\"kw2\">yes<\/span><br><span class=\"re2\">IPADDR<\/span>=192.168.0.52<br><span class=\"re2\">PREFIX<\/span>=<span class=\"nu0\">24<\/span><br><span class=\"re2\">GATEWAY<\/span>=192.168.0.254<br><span class=\"re2\">DOMAIN<\/span>=example.org<br><span class=\"re2\">IPV6INIT<\/span>=no<br><span class=\"re2\">DNS1<\/span>=192.168.0.52<br><span class=\"re2\">DNS2<\/span>=8.8.8.8<br><span class=\"re2\">DNS3<\/span>=8.8.4.4<br><span class=\"re2\">IPV4_FAILURE_FATAL<\/span>=no<br><span class=\"re2\">IPV6INIT<\/span>=no<br><span class=\"re2\">PEERROUTES<\/span>=no<br><span class=\"re2\">NAME<\/span>=<span class=\"st0\">\"enp0s31f6\"<\/span><br><span class=\"re2\">ONBOOT<\/span>=<span class=\"kw2\">yes<\/span><br><span class=\"re2\">AUTOCONNECT_PRIORITY<\/span>=-<span class=\"nu0\">999<\/span><br><span class=\"re2\">DEVICE<\/span>=<span class=\"st0\">\"enp0s31f6\"<\/span><\/div><\/div><\/pre>\n<p>After running the <code>nmcli connection migrate<\/code> command, I verified that it emits the status line to indicate that the conversion took place, which it did. I next verified that the <code>ifcfg<\/code> file was gone and the <code>\/etc\/NetworkManager\/system-connections\/enp0s31f6.nmconnection<\/code> keyfile was in place:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"br0\">[<\/span>connection<span class=\"br0\">]<\/span><br><span class=\"re2\">id<\/span>=enp0s31f6<br><span class=\"re2\">uuid<\/span>=abf4c85b-57cc-<span class=\"nu0\">4484<\/span>-4fa9-b4a71689c359<br><span class=\"re2\">type<\/span>=ethernet<br>\nautoconnect-priority=-<span class=\"nu0\">999<\/span><br>\ninterface-name=enp0s31f6<br><br><span class=\"br0\">[<\/span>ethernet<span class=\"br0\">]<\/span><br>\nmac-address=E0:D5:5E:A2:DE:A4<br><br><span class=\"br0\">[<\/span>ipv4<span class=\"br0\">]<\/span><br><span class=\"re2\">address1<\/span>=192.168.0.52<span class=\"sy0\">\/<\/span><span class=\"nu0\">24<\/span>,192.168.0.254<br><span class=\"re2\">dns<\/span>=192.168.0.52;8.8.8.8;8.8.4.4;<br>\ndns-search=example.org;<br>\nignore-auto-routes=<span class=\"kw2\">true<\/span><br><span class=\"re2\">method<\/span>=manual<br><br><span class=\"br0\">[<\/span>ipv6<span class=\"br0\">]<\/span><br>\naddr-gen-mode=stable-privacy<br><span class=\"re2\">method<\/span>=ignore<br>\nnever-default=<span class=\"kw2\">true<\/span><br><br><span class=\"br0\">[<\/span>proxy<span class=\"br0\">]<\/span><\/div><\/div><\/pre>\n<p>This file will not be used until the NetworkManager is restarted or the host is rebooted. I first restarted NetworkManager and then checked the result, as shown below. The network configuration looks correct:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver ~<span class=\"br0\">]<\/span><span class=\"co0\"># nmcli<\/span><br>\nenp0s31f6: connected to enp0s31f6<br>\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"st0\">\"Intel I219-V\"<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 ethernet <span class=\"br0\">(<\/span>e1000e<span class=\"br0\">)<\/span>, E0:D5:5E:A2:DE:A4, hw, mtu <span class=\"nu0\">1500<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 ip4 default<br>\n\u00a0 \u00a0 \u00a0 \u00a0 inet4 192.168.0.52<span class=\"sy0\">\/<\/span><span class=\"nu0\">24<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 route4 default via 192.168.0.254 metric <span class=\"nu0\">100<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 route4 192.168.0.0<span class=\"sy0\">\/<\/span><span class=\"nu0\">24<\/span> metric <span class=\"nu0\">100<\/span><br><br>\nlo: unmanaged<br>\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"st0\">\"lo\"<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 loopback <span class=\"br0\">(<\/span>unknown<span class=\"br0\">)<\/span>, 00:00:00:00:00:00, sw, mtu <span class=\"nu0\">65536<\/span><br><br>\nDNS configuration:<br>\n\u00a0 \u00a0 \u00a0 \u00a0 servers: 192.168.0.52 8.8.8.8 8.8.4.4<br>\n\u00a0 \u00a0 \u00a0 \u00a0 domains: example.org<br>\n\u00a0 \u00a0 \u00a0 \u00a0 interface: enp0s31f6<\/div><\/div><\/pre>\n<p>After a complete reboot, I verified the network configuration again, and it looked identical to the output above. With that working, I removed the <code>NetworkManager-initscripts-ifcfg-rh<\/code> package and rebooted again, just because it can&#8217;t hurt to verify everything.<\/p>\n<p>Once I knew that the migration tool works on one of my production systems, and an important one at that, I was ready to do this on my firewall\/router, the one with three NICs. I ran the same <code>nmcli connection migrate<\/code> command on that host and verified the results. After ensuring all was working correctly, I used DNF to remove the <code>NetworkManager-initscripts-ifcfg-rh<\/code> package from both production hosts. And I tested with a couple more reboots of each host just to ensure nothing got borked during the removal of the <code>initscripts<\/code> package.<\/p>\n<\/p>\n<div class=\"embedded-resource-list callout-float-right\">\n<div class=\"field field--name-title field--type-string field--label-hidden field__item\">More Linux resources<\/div>\n<div class=\"field field--name-links field--type-link field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/developers.redhat.com\/cheat-sheets\/linux-commands-cheat-sheet\/?intcmp=70160000000h1jYAAQ\">Linux commands cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/developers.redhat.com\/cheat-sheets\/advanced-linux-commands\/?intcmp=70160000000h1jYAAQ\">Advanced Linux commands cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/services\/training\/rh024-red-hat-linux-technical-overview?intcmp=70160000000h1jYAAQ\">Free online course: RHEL technical overview<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/cheat-sheet-networking?intcmp=70160000000h1jYAAQ\">Linux networking cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/cheat-sheet-selinux?intcmp=70160000000h1jYAAQ\">SELinux cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/linux-common-commands-cheat-sheet?intcmp=70160000000h1jYAAQ\">Linux common commands cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/resources\/what-are-linux-containers?intcmp=70160000000h1jYAAQ\">What are Linux containers?<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/linux?intcmp=70160000000h1jYAAQ\">Our latest Linux articles<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<h2>What if I don&#8217;t have ifcfg files?<\/h2>\n<p>New installations of Fedora don&#8217;t create any type of network interface configuration files. The default is for NetworkManager to handle network interfaces as DHCP connections. So you don&#8217;t need to do anything for hosts that use DHCP to obtain their network configuration information.<\/p>\n<p>However, you may need to create a static configuration for some new hosts even when you don<b>&#8216;<\/b>t have a deprecated <code>ifcfg<\/code> file to migrate.<\/p>\n<h2>Reverting to DHCP<\/h2>\n<p>Reversion to the use of DHCP is easy. Just remove the keyfile for the desired connection from <code>\/etc\/NetworkManager\/system-connections\/<\/code> and restart the NetworkManager. <i>Remove<\/i> can mean moving the file somewhere else or just deleting it.<\/p>\n<p>In preparation for my next series of experiments in creating new keyfiles, I moved the <code>enp0s31f6.nmconnection<\/code> keyfile to <code>\/root<\/code> and restarted NetworkManager.<\/p>\n<h4>Creating new keyfiles<\/h4>\n<p>Although the old <code>ip<\/code> command can still be used to modify network interface settings in a live environment, those changes are not persistent after a reboot. Changes made using NetworkManager tools such as <code>nmcli\u00a0<\/code>or <code>nmtui<\/code>, the GUI NetworkManager connection editor (<code>nm-connection-editor<\/code>), and your favorite text editor are persistent. The connection editor is available for Fedora on the system tray for each of the desktops I tried\u2014Xfce, Cinnamon, LXDE, KDE Plasma\u2014and probably the rest of the desktops I haven&#8217;t yet tried.<\/p>\n<h4>Text editor<\/h4>\n<p>Assuming you are familiar with the keyfile structure, syntax, and variables, creating or modifying keyfiles from scratch is possible with just an ASCII text editor. As much as I appreciate and use that capability, using one of the three tools provided is usually much simpler.<\/p>\n<h4>Using nmtui<\/h4>\n<p>The <code>nmtui<\/code> tool (NetworkManager Text User Interface) is my second choice for a tool in this trio. I find the interface cumbersome, unattractive, and not intuitive. This tool is not installed by default, and I probably would not have installed it if I were not writing this article.<\/p>\n<p>However, it does work, and it created a keyfile for me that was essentially identical to the one created by the GUI Connection Manager I discuss below. The only differences I found\u00a0 (using the <code>diff<\/code> command, of course) were the timestamp field in the file and one different selection I intentionally made when configuring the connection. The interface does provide some clues about the data you need to provide to create a working keyfile.<\/p>\n<p>Start this tool by entering the command <code>nmtui<\/code> on the command line. In general, the arrow keys allow movement between the fields on the displayed pages, and the <strong>Enter<\/strong> key selects an item to modify or add. The <strong>Page Up\/Page Down<\/strong> keys scroll the page. Select <b>Edit a connection<\/b> and press <b>Enter<\/b> to create a new keyfile.<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/EditingNetworkConnections-Figure-07.png\" width=\"306\" height=\"350\" alt=\"A window shows three options under NetworkManager TUI. Edit a connection is first and highlighted in red\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(David Both, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>After wending my way through the interface, I arrived at the Edit Connection page. It was not clear to me from this interface that the CIDR prefix should be appended to the IP address, but I did that anyway, and it worked. Fill in the appropriate data on this page to configure the interface. Notice that I have disabled IPV6.<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/EditingNetworkConnections-Figure-08_0.png\" width=\"675\" height=\"648\" alt=\"The Edit Connection window includes editable fields including name, device, IPv4 Configuration (including addresses, gateway, DNS servers, Search domains) and a similar IPv6 configuration, which is disabled. Routing options that can be checked are shown: Require IPv4 addressing for this connection is checked for this example.\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(David Both, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Next, scroll down to the bottom of the page using the keyboard and press <b>OK<\/b> to save the keyfile. The keyfile is saved immediately, but NetworkManager must be restarted to activate this file, whether new or changed. Although this is not my favorite interface for creating and managing NetworkManager keyfiles, I plan to use it when the GUI Connection Editor is unavailable, such as when working on a remote host.<\/p>\n<h4>Using nmcli<\/h4>\n<p>I have used the <code>nmcli<\/code> tool (Network Manager Command Line Interface) to configure an interface in the past, and this tool also works very well. I just like it the least because it requires the most typing and reading of the man page and online references. Executing the command immediately creates the interface configuration file in the <code>\/etc\/NetworkManager\/system-connections\/<\/code> directory.<\/p>\n<p>The command shown below adds the needed keyfile, just like the other tools.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># nmcli connection add connection-name enp0s3-Wired ifname enp0s3 type ethernet ipv4.addresses 192.168.0.136\/24 ipv4.gateway 192.168.0.254 ipv4.dns 192.168.0.254,8.8.8.8,8.8.4.4 ipv4.dns-search example.org ipv6.method disabled <\/span><br>\nConnection <span class=\"st_h\">'ethernet-enp0s3'<\/span> <span class=\"br0\">(<\/span>67d3a3c1-3d08-474b-ae91-a1005f323459<span class=\"br0\">)<\/span> successfully added.<br><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># cat enp0s3-Wired.nmconnection <\/span><br><span class=\"br0\">[<\/span>connection<span class=\"br0\">]<\/span><br><span class=\"re2\">id<\/span>=ethernet-enp0s3<br><span class=\"re2\">uuid<\/span>=67d3a3c1-3d08-474b-ae91-a1005f323459<br><span class=\"re2\">type<\/span>=ethernet<br>\ninterface-name=enp0s3<br><br><span class=\"br0\">[<\/span>ethernet<span class=\"br0\">]<\/span><br><br><span class=\"br0\">[<\/span>ipv4<span class=\"br0\">]<\/span><br><span class=\"re2\">address1<\/span>=192.168.0.136<span class=\"sy0\">\/<\/span><span class=\"nu0\">32<\/span>,192.168.0.254<br><span class=\"re2\">dns<\/span>=192.168.0.52;8.8.8.8;8.8.4.4;<br>\ndns-search=example.org;<br><span class=\"re2\">method<\/span>=manual<br><br><span class=\"br0\">[<\/span>ipv6<span class=\"br0\">]<\/span><br>\naddr-gen-mode=stable-privacy<br><span class=\"re2\">method<\/span>=disabled<br><br><span class=\"br0\">[<\/span>proxy<span class=\"br0\">]<\/span><br><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># <\/span><\/div><\/div><\/pre>\n<p>One of the assistance tools available while using <code>nmcli connection add<\/code> is the Bash tab-completion sequence that shows the available subcommands:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># nmcli connection add <tab><tab><\/tab><\/tab><\/span><br>\nautoconnect \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ifname \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dhcp-send-hostname<br>\ncon-name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.addresses \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dhcp-timeout<br>\nconnection.auth-retries \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dad-timeout \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dns<br>\nconnection.autoconnect \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.dhcp-client-id \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.dns-options<br>\nconnection.autoconnect-priority \u00a0 \u00a0ipv4.dhcp-fqdn \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dns-priority<br>\nconnection.autoconnect-retries \u00a0 \u00a0 ipv4.dhcp-hostname \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dns-search<br>\nconnection.autoconnect-slaves \u00a0 \u00a0 \u00a0ipv4.dhcp-hostname-flags \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.gateway<br>\nconnection.dns-over-tls \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dhcp-iaid \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.ignore-auto-dns<br>\nconnection.gateway-ping-timeout \u00a0 \u00a0ipv4.dhcp-reject-servers \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.ignore-auto-routes<br>\nconnection.id \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dhcp-send-hostname \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.ip6-privacy<br>\nconnection.interface-name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dhcp-timeout \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.may-fail<br>\nconnection.lldp \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dhcp-vendor-class-identifier \u00a0ipv6.method<br>\nconnection.llmnr \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.dns \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.never-default<br>\nconnection.master \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dns-options \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.ra-timeout<br>\nconnection.mdns \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.dns-priority \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.required-timeout<br>\nconnection.metered \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.dns-search \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.route-metric<br>\nconnection.mud-url \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.gateway \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.routes<br>\nconnection.multi-connect \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.ignore-auto-dns \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.route-table<br>\nconnection.permissions \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.ignore-auto-routes \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.routing-rules<br>\nconnection.read-only \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.may-fail \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.token<br>\nconnection.secondaries \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.method \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0master<br>\nconnection.slave-type \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.never-default \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 match.driver<br>\nconnection.stable-id \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.required-timeout \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0match.interface-name<br>\nconnection.timestamp \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv4.route-metric \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0match.kernel-command-line<br>\nconnection.type \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.routes \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0match.path<br>\nconnection.uuid \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv4.route-table \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 proxy.browser-only<br>\nconnection.wait-device-timeout \u00a0 \u00a0 ipv4.routing-rules \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 proxy.method<br>\nconnection.zone \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.addresses \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 proxy.pac-script<br><span class=\"kw3\">help<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.addr-gen-mode \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 proxy.pac-url<br>\nhostname.from-dhcp \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dhcp-duid \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 slave-type<br>\nhostname.from-dns-lookup \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dhcp-hostname \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 tc.qdiscs<br>\nhostname.only-from-default \u00a0 \u00a0 \u00a0 \u00a0 ipv6.dhcp-hostname-flags \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 tc.tfilters<br>\nhostname.priority \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ipv6.dhcp-iaid \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"kw3\">type<\/span><br><span class=\"br0\">[<\/span>root<span class=\"sy0\">@<\/span>myserver system-connections<span class=\"br0\">]<\/span><span class=\"co0\"># nmcli connection add <\/span><\/div><\/div><\/pre>\n<p>I typically prefer the command line for most tasks. However, the complexity of getting the syntax and options of this command correct means that I must always use the man page and research the command before I issue it. That takes time. And it still complained about things I missed or got incorrect. Even when it did not throw an error, it created keyfiles that worked poorly, if at all. For example, the connection worked when I would SSH out from the test VM, but I could not SSH into the test VM. I am still not sure what the problem was, but that keyfile had the wrong CIDR prefix for the IP address. I eventually got the command correct by referring to the example on the manual page <b>nmcli-examples(7)<\/b>.<\/p>\n<p>When this is the only available method, I can do it, but it is my least preferred tool.<\/p>\n<h4>Using the GUI NetworkManager connection editor<\/h4>\n<p>I have used one of my laptops for parts of this section to show both wired and wireless connections. Although I typically prefer command-line tools, I like this GUI NetworkManager connection editor tool best of all the three available tool options. It is easy to use, intuitive, provides fast access to any configuration item that would ever be needed, and is directly available itself in the desktop system tray of all the desktops I have tried.<\/p>\n<p>Just right-click on the network icon, the one that looks like a pair of computers, in the system tray. Then choose <b>Edit Connections.<\/b><\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/EditingNetworkConnections-Figure-11.png\" width=\"225\" height=\"276\" alt=\"A dropdown menu shows options for enabling networking, WiFi, and notifications, and others. A pointer arrow indicates the choice Edit Connections\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(David Both, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>This opens the connection editing window, as pictured below. Double-click the desired connection from the connection list, usually <code>Wired Connection 1<\/code> or a WiFi SSID. The illustration below shows both wired and wireless connections open for editing on one of my laptops. I have never needed to edit a wireless connection because the ones I connect to always use DHCP for configuration. It is possible to require static addressing for wireless connections, but I have never encountered that.<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/EditingNetworkConnections-Figure-12.png\" width=\"675\" height=\"432\" alt=\"Two windows showing options for editing wired and wireless connections are side by side. The wired ethernet connection has fields for device, MTU, LAN info, and link negotiation. The WiFi version has fields for SSID, Mode, Band, Channel, Rate, Transmission Power, Device, and MTU,\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(David Both, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>The <b>Ethernet<\/b> tab of the Editing Wired Connection 1 dialog window shows the device name <code>enp111s0<\/code> for this laptop. In most cases, nothing on this page needs to be changed.<\/p>\n<p>Back on my VM, I changed the <b>Method<\/b> field from <b>Automatic (DHCP)<\/b> to <b>Manual<\/b>. I added the IP Address, the CIDR prefix, and the default route (gateway) I want for this host. I also added three DNS servers and the search domain. These are the minimum configuration variables needed for a network connection. They are also the same ones defined in the interface configuration files and the previous keyfiles. The device name for this NIC is <code>enp0s3<\/code>. Here is<i>\u00a0<\/i>the configuration for the wired connection using the GUI NetworkManager connection editor tool.<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/EditingNetworkConnections-Figure-13.png\" width=\"606\" height=\"539\" alt=\"The manual wired connection fields include addresses, DNS servers, search domains, DHCP client ID. The box to require IPv4 addressing for this connection to complete is checked.\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(David Both, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Another option available for the <b>Method<\/b> field is <b>Disabled.<\/b> I set the IPV6 to <strong>Disabled<\/strong> since I don&#8217;t use IPV6.<\/p>\n<p>After setting these values, clicking the <b>Save<\/b> button creates the new keyfile immediately. Making changes to existing keyfiles is just as easy. However, NetworkManager must be restarted for these configuration changes to take effect.<\/p>\n<p>In terms of the amount of time and work involved in creating new NetworkManager keyfiles, the GUI Connection Editor is far better than the other options. It provides an easy-to-use interface with enough information about the data required to be helpful.<\/p>\n<h2>Conclusions<\/h2>\n<p>Fedora 36 changes the equation for using the old-style, deprecated interface configuration files. For new installations of Fedora 36, those files will not work unless the <code>NetworkManager-initscripts-ifcfg-rh<\/code> package is explicitly installed. This is a warning sign that all support for those deprecated <code>ifcfg<\/code> scripts will be completely ignored in the future.<\/p>\n<p>Fortunately, the migration from any existing <code>ifcfg<\/code> scripts is trivially easy, and creating new ones is not much more difficult using one of the three tools available. I prefer the GUI NetworkManager connection editor tool because it is clear and easy. I can use the <code>nmtui<\/code> tool, which does the same thing as the GUI version but has a somewhat clunkier user interface. I try not to use the <code>nmcli<\/code> tool if I can help it. It does work but is cumbersome and takes a lot of reading and experimentation to get the correct command syntax and all of the right arguments to create a fully usable keyfile.<\/p>\n<p>So go ahead and migrate now. I did, and it was easy.<\/p>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-field-article-subhead field--type-text-long field--label-hidden field__item\">\n<p>Interface configuration files may not be supported in Fedora much longer, but migrating to NetworkManager is easier than you might think.<\/p>\n<\/div>\n<div class=\"field field--name-field-lead-image field--type-entity-reference field--label-hidden field__item\">\n<article class=\"media media--type-image media--view-mode-caption\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/LAW_fedora_cla.png\" width=\"520\" height=\"292\" alt=\"A network diagram\" title=\"A network diagram\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Opensource.com<\/p>\n<\/div>\n<\/article>\n<\/div>\n<div class=\"field field--name-field-tags field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/linux\" hreflang=\"en\">Linux<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/sysadmin\" hreflang=\"en\">Sysadmin<\/a><\/div>\n<\/p><\/div>\n<div class=\"field field--name-field-listicle-title field--type-string field--label-hidden field__item\">What to read next<\/div>\n<div class=\"field field--name-field-listicles field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/article\/22\/4\/networkmanager-linux\" hreflang=\"en\">Get started with NetworkManager on Linux<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/article\/22\/8\/network-configuration-files\" hreflang=\"en\">A sysadmin&#8217;s guide to network interface configuration files<\/a><\/div>\n<\/p><\/div>\n<div class=\"field field--name-field-default-license field--type-list-string field--label-hidden field__item\"><a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/\"><br \/>\n        <img decoding=\"async\" alt=\"Creative Commons License\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/cc-by-sa--32.png\" title=\"This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.\"><\/a>This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.<\/div>\n<section class=\"field field--name-field-comments field--type-comment field--label-hidden comment-wrapper\">\n<div class=\"comments__count\">\n<div class=\"login\"><a href=\"https:\/\/opensource.com\/user\/register?absolute=1\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml&amp;absolute=1\">Login<\/a> to post a comment.<\/div>\n<\/p><\/div>\n<\/section>\n<p class=\"wpematico_credit\"><small>Powered by <a href=\"http:\/\/www.wpematico.com\" target=\"_blank\" rel=\"noopener\">WPeMatico<\/a><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How I migrated to NetworkManager keyfiles for configuration David Both Tue, 08\/23\/2022 &#8211; 03:00 Register or Login to like Register or Login to like NetworkManager was introduced in 2004 to make network configuration more flexible and dynamic. The old SystemV startup shell scripts, of which the interface configuration files were a part, were incapable of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":66654,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[307],"tags":[],"class_list":["post-66653","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source"],"_links":{"self":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/66653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66653"}],"version-history":[{"count":0,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/66653\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/media\/66654"}],"wp:attachment":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}