life coded

a personal blog by Maximilian Ehlers

Fixing broken Wifi after Fedora upgrade

Gnome is nagging about updates and I finally decided to run dnf upgrade.
As always it worked pretty smoothly and after a short while, my computer was up to date again.

I was able to continue my tasks and all seemed well. At least until I rebooted. Suddenly my network connections did not work anymore.
All WIFI networks are visible, but no connection wanted to work.

In this post I want to outlie the steps that I took to get it working again.

Logs

The first thing I do in a situation likes this is reading the logs.
To get the most accurate information I opened a terminal and ran journalctl -xef.

JOURNALCTL(1)

NAME
journalctl - Query the systemd journal

SYNOPSIS
journalctl [OPTIONS...] [MATCHES...]

DESCRIPTION
journalctl may be used to query the contents of the systemd(1) journal as written by systemd-journald.service(8).

-x, --catalog
Augment log lines with explanation texts from the message catalog. This will add explanatory help texts to log messages in the output where this is available.
These short help texts will explain the context of an error or log event, possible solutions, as well as pointers to support forums, developer documentation,
and any other relevant manuals. Note that help texts are not available for all messages, but only for selected ones. For more information on the message
catalog, please refer to the Message Catalog Developer Documentation[4].

Note: when attaching journalctl output to bug reports, please do not use -x.

-e, --pager-end
Immediately jump to the end of the journal inside the implied pager tool. This implies -n1000 to guarantee that the pager will not buffer logs of unbounded
size. This may be overridden with an explicit -n with some other numeric value, while -nall will disable this cap. Note that this option is only supported for
the less(1) pager.

-f, --follow
Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.

So with this command we can read all the latest logs of what is happening in the system with some additional information printed out. If you do not know what systemd is you can read about it here.

Here is some of the output that came when trying to connect to a network:

Jul 04 20:08:50 laptop wpa_supplicant[1679]: wlp6s0: SME: Trying to authenticate with xxxx (SSID='Max iPhone' freq=2412 MHz)                               
Jul 04 20:08:50 laptop kernel: wlp6s0: authenticate with xxxx                                                                                              
Jul 04 20:08:50 laptop kernel: wlp6s0: send auth to xxxx (try 1/3)                                                                                         
Jul 04 20:08:50 laptop kernel: wlp6s0: authenticated                                                                                                                    
Jul 04 20:08:50 laptop wpa_supplicant[1679]: wlp6s0: Trying to associate with xxxx (SSID='Max iPhone' freq=2412 MHz)                                       
....
Jul 04 20:08:50 laptop NetworkManager[1171]: <info>  [1530727730.3499] device (wlp6s0): state change: config -> ip-config (reason 'none', internal state 'managed')     
Jul 04 20:08:50 laptop NetworkManager[1171]: <info>  [1530727730.3506] dhcp4 (wlp6s0): activation: beginning transaction (timeout in 45 seconds)     


----------------------------------
----------------------------------

Jul 04 20:08:50 laptop NetworkManager[1171]: <info>  [1530727730.3533] dhcp4 (wlp6s0): dhclient started with pid 11632                                                  
Jul 04 20:08:50 laptop NetworkManager[1171]: <info>  [1530727730.3570] dhcp4 (wlp6s0): client pid 11632 exited with status 127                    

----------------------------------
----------------------------------
                      
Jul 04 20:08:50 laptop NetworkManager[1171]: <info>  [1530727730.3570] dhcp4 (wlp6s0): state changed unknown -> done                                                    
Jul 04 20:08:50 laptop NetworkManager[1171]: <info>  [1530727730.3571] dhcp4 (wlp6s0): canceled DHCP transaction                                                        
Jul 04 20:08:50 laptop kernel: wlp6s0: Limiting TX power to 20 (20 - 0) dBm as advertised by xxxx

As we can see here it seems that some kind of error is happening when the dhclient program is executed as it exited with status 127. This means that the command was not found, or had some other error that stopped it from working (http://www.tldp.org/LDP/abs/html/exitcodes.html)

Invoking dhclient directly then gave me the following details

dhclient: error while loading shared libraries: libirs-export.so.91: cannot open shared object file: No such file or directory 

The first thing I tried now was downgrading the NetworkManager, bind99 and bind packages.

Unfortuantely this did not have any effects. I was still receiving the same error message.

After searching for possible steps on how to continue on duckduckgo I came across the program ldconfig.
Here is an excerpt from the man pages:

DESCRIPTION
       ldconfig  creates  the  necessary  links  and  cache  to  the  most  recent  shared  libraries  found  in the directories specified on the command line, in the file
       /etc/ld.so.conf, and in the trusted directories, /lib and /usr/lib (on some 64-bit architectures such as x86-64, lib and /usr/lib are the  trusted  directories  for
       32-bit libraries, while /lib64 and /usr/lib64 are used for 64-bit libraries).

So I went ahead and checked out the /etc/ld.so.conf file and sure enough there was only 1 line in there => !include ld.so.conf.d/*.conf.

The exclamation mark is indicating a comment, so actually none of the files in /etc/ld.so.conf are being loaded by the ldconf program.

That folder includes the export libraries from bind9 though, so I went ahead and uncommented this line.

Now seemed like an appropriate time for a reboot and et voila, after I logged back in I was able to use my wifi normally again.

Key learning

While this post is pretty short, this actually took me a couple of hours, spread over a few days and I had used workarounds in between, like setting my IP manually instead of using DHCP. This also let me connect to networks.

In the end I managed to fix everything though and that is most satisfying experience. So while these kind of upgrading errors are quite annoying, the tooling of the Linux ecosystem is so powerful that you can fix almost anything by yourself.

If you encounter a problem like this try to take it as a challenge that makes you learn something instead of getting annoyed and just doing a fresh install or giving up on the Linux world.