My problem, making sure the wifi on a headless linux box connects at boot.
This should work the same on a server install as on a desktop install, with network-manager removed (because it conflicted with this approach).
I haven’t much familiarity with the network manager to speak to that.
So, I had an Ubuntu-Desktop installation that I switched to an Ubuntu-Server installation, and I’ve placed it quite a bit away from the nearest router.
Rather than running cables, I plugged in an old USB wifi dongle. My installation is on a headless machine (no keyboard, no monitor) so getting this right was important as I would have no other way to connect into the box and debug/fix it.
I started off by testing out wpa_supplicant as the router needed a WPA paraphrase.
sudo apt-get install wpa_supplicant
Then, to get the paraphrase into a key, I copy the output from wpa_passphrase into a config file and test :
wpa_passphrase network password network={ ssid="network" #psk="password" psk=e2e04dcb82891a286e5d524b63f4963ac1f8dc49852bd6b97441d9545054d270 } wpa_passphrase network password > wpa-test-config.cfg
Before testing I checked the WPA support and driver info:
hwinfo --netcard
Pay attention to the lines about Driver* and WLAN* – the latter will give you info about what is supported. I didn’t do much with the driver info describing which module controls my card, though that could be useful for debugging.
The WLAN encryption modes my device supported are :
WLAN encryption modes: WEP40 WEP104 TKIP CCMP
which equates to wep 64, wep 128, wpa tkip and wpa aes I think (thanks to http://bernaerts.dyndns.org/linux/230-ubuntu-setup-wifi-commandline )
Now to test:sudo wpa_supplicant -iwlan0 -cwpa-test-config.cfg -Dwext
I noticed initially that my device was connecting to the node, but kept getting disconnected, and reconnecting. I saw lots of messages like this….
CTRL-EVENT-DISCONNECTED basssid=MAC reason=0
and, after finding lots of possibilities ranging from unsupported hardware to buggy-as-heck drivers, I found that for me this was simply because something called network manager was running. (ubuntu server 12.04, was originally an Ubuntu desktop install that I changed to server mode)
Removing Network MaagerSo as this was interfering with my wifi config it had to go; unfortunately I did an
sudo apt-get remove
on that, and then the box lost network connection ! 😦
While I was setting up the box I was internet-connected via a LAN cable, so just borrowing a keyboard/mouse/monitor and adding my LAN port (eth0 for me) to auto network configuration on boot brought me back to a place where I can ssh into the box and continue.
I updated /etc/network/interfaces to :
auto lo iface lo inet loopback # added to bring up eth0 (my lan port) and set it up to get an address automatically # ifconfig can help you find which ethx / wlanx you need to add here. auto eth0 iface eth0 inet dhcpTesting again
Now that my network works on LAN without network manager, I retest the wireless connection with wpa_supplicant per above, and it connects fine.
Mannually calling dhclient wlan0 gets me an ip-address, so I’m happy out.
I update /etc/network/interfaces to include the wlan0 interface in auto start and getting an ipaddress via DHCP, but it also needs the above call to wpa_supplicant to get connected to the wireless base station first.
Having been burnt earlier removing network manager, I backup the known-good version of /etc/network/interfaces and write a script to let me test changes to it temporarily, and then revert to the know good. The script works by backing up the config, applying the test config, and then reverting after a specified timeout.
If the test-changes have worked, I can permanently use that config.
The script :
cat test-network.sh #!/bin/bash # first make sure /home/me/network/interfaces.safe is a known-good working config!! # copy /network/interfaces to /home/me/network/interfaces.test and edit, # then run this script to test. # copy over test config and restart nw to test cp /home/me/network/interfaces.test /etc/network/interfaces /etc/init.d/networking restart # let the new config stay for a while for checking sh -c "sleep 30" # revert for safety # replace the live config with the backed-up known-good config and restart nw to activate cp /home/me/network/interfaces.safe /etc/network/interfaces /etc/init.d/networking restart # if it didn't work, edit the test conf and run again # if it did, consider replacing the known good version(.safe) with the tested-good version(.test)The working config to auto start Wireless on boot up
My known-good version of the interfaces config, with the now tested-good wireless config, looks like this :
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto wlan0 iface wlan0 inet dhcp pre-up wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa-supplicant.conf