wiki:ubuntu

Version 3 (modified by Tim Harvey, 6 months ago) (diff)

added predictable network interface name section

Ubuntu

Gateworks supports the popular Ubuntu OS on Newport and Ventana products using an Ubuntu built root filesystem with a Gateworks kernel. In some cases you may be able to use an Ubuntu built kernel.

See also:

Ubuntu Packages

Ubuntu inherits its package management from Debian Linux using the 'apt' packaging system and 'deb' packages. The list of package feeds is in /etc/apt/sources.list:

# cat rootfs/etc/apt/sources.list
deb http://ports.ubuntu.com/ubuntu-ports vivid main
deb http://ports.ubuntu.com/ubuntu-ports vivid universe

You can search for Ubuntu packages at https://launchpad.net/ubuntu. The search results will show what Ubuntu versions (by name) the package is available in and clicking on the resulting package will show information as to the package feed its contained in.

The standard Ubuntu package feeds are located at http://ports.ubuntu.com/ubuntu-ports/ and you will find packages in the dist/<ubuntu-version>/<feed> directories. Ubuntu breaks up feeds into the following:

  • Main - Officially supported software.
  • Restricted - Supported software that is not available under a completely free license.
  • Universe - Community maintained software, i.e. not officially supported software.
  • Multiverse - Software that is not free. (meaning licensing)

If you are trying to find out what package an application belongs to you have a few choices:

  1. Use dpkg -S on your Ubuntu development host. For example to find the package that contains ifconfig:
    $ dpkg -S $(which ifconfig)
    net-tools: /sbin/ifconfig
    
    • ifconfig is in /sbin/ifconfig and is part of the net-tools package
    • dpkg -L net-tools will show you everything else contained in that package
  2. Use apt-cache search:
    $ apt-cache search ifconfig
    iproute2 - networking and traffic control tools
    net-tools - The NET-3 networking toolkit
    gnome-nettool - network information tool for GNOME
    inetutils-tools - base networking utilities (experimental package)
    libnet-ifconfig-wrapper-perl - multiplatform Perl wrapper for ifconfig
    moreutils - additional Unix utilities
    wmifinfo - Dockapp that shows information for all interfaces
    
  3. Googling the question 'what package contains <xyz>'

Personal Package Archives (PPAs) are package feeds that are not part of Ubuntu and can be used by people to distribute their own personally built packages. To use a PPA you need to first add it to your repository list and update your package sources.

References:

Modem Support

Aleksander Morgado (​https://aleksander.es), a key developer behind the ModemManager, libqmi, and libmbim projects that provide modem support on Ubuntu provides up-to-date Ubuntu PPA's for 14.04 trusty and 16.04 xenial. Instructions on how to add the PPA feeds and update the packages exist there:

Xenial:

apt-get install software-properties-common # contains add-apt-repository
add-apt-repository ppa:aleksander-m/modemmanager-xenial
apt-get update
apt-get install modemmanager libqmi-utils libmbim-utils

Trusty:

add-apt-repository ppa:aleksander-m/modemmanager-trusty
apt-get update
apt-get install modemmanager libqmi-utils libmbim-utils

See modem for more info on how to use these packages

SSH Server

The openssh-server package provides an ssh daemon suitable for secure shell (ssh) and secure copy (scp):

apt-get install openssh-server

During development it may be useful to enable root ssh capability, which is disabled by default. To do this edit /etc/ssh/sshd_config, and:

  1. comment out the following line:
    PermitRootLogin without-password
    
  2. Just below it, add the following line:
    PermitRootLogin yes
    
  3. Then reload SSH config:
    service ssh reload
    

Wireless

Access Point (AP)

These instructions below are for creating a wireless Access Point (AP) that will allow nearby client connections.

  1. Install required packages
    apt-get update
    apt-get install iw hostapd linux-firmware
    
  2. Download the Gateworks hostapd-conf script from our Yocto BSP, this script will produce a 'basic' configuration file to set up your AP:
    wget https://raw.githubusercontent.com/Gateworks/meta-gateworks/master/recipes-support/hostapd-conf/hostapd-conf/hostapd-conf
    chmod +x ./hostapd-conf
    
  3. Run the script with your parameters
    # See usage
    ./hostapd-conf
    
    # See available channel information for device
    ./hostapd-conf wlan0 ssid-name # parses information from 'iw list' command
    
    # Enter full AP configuration
    ./hostapd-conf wlan0 test-ssid 161 VHT80
    
  4. Run hostapd with your configuration file
    hostapd -B hostapd-phy0.conf # use -dd flag for more debug output
    # "wlan0: interface state UNINITIALIZED->HT_SCAN" shows AP has been set up
    

Note that the hostapd-phy0.conf file created for you via the hostapd-conf script is meant to be a starting point and does not allow you to create every possible combination of configurations. For more information on the hostapd.conf file and its options, see the hostapd.conf documentation.

Client using wpa_supplicant

These instructions below are for creating a wireless client that will connect to a nearby access point.

  1. Install required packages:
    apt-get update
    apt-get install iw wpasupplicant udhcpc
    
  2. Edit /etc/network/interfaces and edit/add the following to configure wlan0 on boot wpa_supplicant:
    auto wlan0
    iface wlan0 inet dhcp
            wireless_mode managed
            wireless_essid any
            wpa-driver nl80211
            wpa-conf /etc/wpa_supplicant.conf
    
  3. Create WPA Supplicant Configuration File at /etc/wpa_supplicant.conf, replacing ssid and psk with correct information
    network={
            scan_ssid=1
            ssid="testssid"
            proto=WPA
            key_mgmt=WPA-PSK
            psk="testpass"
    }
    
  4. Sync and power cycle the board
    sync
    

Troubleshooting:

  • To scan for available access points in range you can use the iw tool:
    iw dev wlan0 scan # scan for AP's
    
  • To manually connect to wireless if auto connection is not working: While the above will configure wireless Client mode on bootup, if you want to start it manually you can do so by manually starting/re-starting wpa_supplicant (ifup will do this for you on bootup if configured in /etc/network/interfaces):
    ifconfig wlan0 up
    killall wpa_supplicant
    wpa_supplicant -i wlan0 -D nl80211 -c /etc/wpa_supplicant.conf -B # manage wireless client
    udhcpc -i wlan0 # obtain dhcp lease
    

Predictable Interface Names (systemd/udev)

The Linux kernel creates Ethernet network interfaces named 'eth<n>' where <n> starts at 0 and increments for each device registered by various drivers. The kernel makes no guarantee that these names remain constant across kernel versions or even power cycles. It is not uncommon for example for USB network interfaces to get registered in an inconsistent fashion between power cycles. It is also not uncommon for a kernel change (ie making a built-in driver be a module instead) to cause interface names move around due to changes in the registration order.

To combat this uncertainty a feature referred to as 'Predictable Interface Names' is implemented in Linux distros which use systemd and udev. Specifically this feature has been in udevd since v197. In this case the network interfaces are re-named based on udev rules according to their bus topology. For example under this scheme a PCI based Ethernet network interface on bus 5, slot 0, function 1 would be names 'enp5s0f1'. The best documentation for the naming scheme appears to be the udev code comments

Predictable interface names is enabled by default on systems using systemd/udev however you can disable it in a couple of ways:

  • pass in a kernel command-line parameter of net.ifnames=0. Note that this is 'not' a kernel feature (thus is independent of what kernel version you are using) but the systemd/udev components that implement this feature look for that on the command-line.
  • remove /lib/systemd/network/99-default.link from the root filesystem.

Alternatively you can also create your own link files to name interfaces to your liking. A link file defines matching criteria and link criteria for naming. You can use 'udevadm info <device>' to obtain details that udev knows about devices (ie 'udevadm info /sys/class/net/eth0' or /udevadm info /dev/ttyUSB0'). Your link files should be placed in /etc/systemd/network and should sort before 99-default.link from /lib/systemd/network.

References: