SBC Serial Port Device Console Server


Have you ever had to drag your laptop with a serial port and cable into an extremely loud, freezing cold (or boiling hot), data center to program a new network device such as a router or firewall? In the time it takes to find the right drivers and COM port for the USB Serial Port adaptor you can make a small network based serial port console server for around $100. This allows you to do the same work on up to 4 devices from anywhere with a network connection.

Don’t be like this guy when you could be working remote over a vpn!


This blog post shows how to use a Raspberry Pi 3 single board computer (SBC) as a network based serial port console server.  Connect the Raspberry Pi to an Ethernet or wireless network then use SSH or telnet to open a terminal window. Since the SBC runs a real 64 bit Linux operating system normal applications such as IPERF3, NMAP, and SCREEN work just fine.

Total project cost depends on what parts you already have and what you need to purchase. It takes around 2 hours to download the latest operating system image and copy it to the flash chip during which time you can build the kit and get everything ready.


There are many popular Network Serial Port Console servers available on eBay and Amazon for hundreds of dollars.  They have limited feature sets with closed operating systems and cannot be upgraded or expanded.

Bill of Materials

Here is the list of parts (BOM) needed to complete the build out of the project.

NOTE: a reliable power supply and Micro SD Flash Memory Card are important to the stability of this solution. Skimping on these two items could cause unplanned trips to the data center for troubleshooting this solution which is supposed to save you time, not make things worse.

  1. Raspberry Pi 3 ~$40

    Case available from Adafruit
  2. Case for Raspberry Pi 3 ~ $10 (Optional but recommended)
  3. Micro SD Card – 8GB or larger ~$20 (get an enterprise grade “type 10” flash chip with fast read write speeds)
  4. Micro SD to SD Card adapter for your computer ~$10 (used to transfer the OS image)
  5. USB to Serial Port adapter(s) ~$15 (up to 4 can be used simultaneously if needed)
  6. USB Power supply (or PoE option below)
    1. MicroUSB to USB type A power cable ~$5 (same type use by most android phones)
    2. 5-10 Watt USB Power Supply Adapter ~$5 (2.5 Amps recommended for fully loaded setup) or…
  7. IEEE 802.3af Micro USB Active PoE Splitter Power Over Ethernet 48V to 5V 2.4A ~$10
  8. An “admin” computer to use for testing and setup – Mac, Windows, Linux
  9. For initial setup you would also need the following:
    1. HDMI cable
    2. HDMI capable display monitor 1080p
    3. USB Keyboard

Setup Process

Follow these steps to build the solution:

  1. Obtain all the needed components in one place to be assembled later.
  2. NOTE: this process works for many other SBC besides just raspberry pi – see some here:
  3. For example: here is a Rock64 from Pine for USD$20 on Amazon that runs latest Debian with 4K HDMI support.
  4. Download the Operating System image to your admin computer.
    1. Open a web browser to: and download the latest version. Be sure to check the SHA-256 checksum.
  5. Insert the MicroSD card into the admin computer.
  6. Checking microSD Card performance and check whether is counterfeit:
    – H2testw 1.4 – Gold Standard In Detecting USB Counterfeit Drives
    – F3 – an alternative to h2testw
    This will help determine if the Micro SD Card is worth using.
  7. Copy the OS image to the MicroSD card.
    1. The image file size is over 4.3GB so depending on the write speed of the MicroSD card this can take an hour or so.
    2. Open a terminal command line interface on the admin computer.
    3. Here are the steps for Mac OS:
      diskutil list
      diskutil unmountDisk /dev/disk4
      sudo dd bs=1m if=~/Downloads/ubuntu-16.04-preinstalled-server-armhf+raspi3.img of=/dev/disk4

      Press Ctrl-t to monitor copy progress.

    4. Instructions for other Operating Systems and images can be found here:
  8. While the copy process takes place complete the following…
  9. Remove the Raspberry Pi from the box and assemble with the case.
  10. Connect the Raspberry Pi unit to the following:
    1. Local Area Ethernet Network
    2. HDMI display
    3. USB keyboard
  11. Turn on the display.
  12. When the copy process on the Admin computer completes you can remove the MicroSD card from the adapter.
  13. Insert the MicroSD card into the Raspberry Pi 3.
  14. Use the Micro USB cable to connect the Raspberry Pi 3 device to the power adapter.
  15. The Raspberry Pi 3 will boot up. You should see the login prompt on the display.
  16. Login with user and pass ubuntu/ubuntu.
  17. Run ifconfig to see the local assigned IP address. This assumes there is a DHCP server on the LAN. You can also assign a static IP address if needed.
  18. You can also use arp from your admin computer to find the IP Address:
  19. Open a secure shell session from your admin PC to the IP Address.
  20. Update the Raspberry Pi and install the tools you need:
    sudo apt-get –y update
    sudo apt-get –y upgrade
    sudo apt-get –y install iperf3 nmap sendemail
  21. Note the Ethernet MAC address and make a label to identify the Raspberry Pi 3 when it’s being used in the field. You may want to note the default password and other contact info on the label as well.
  22. Optionally: Here’s a script that can email you the IP Address when the Raspberry Pi boots up. Edit /etc/rc.local and add a link to this file there.
    IPADDRESS=$(/sbin/ifconfig eth0 | sed -n 's/.*inet addr:\([^ ]*\).*/\1/p')
    MACADDRESS=$(/sbin/ifconfig eth0 | sed -n 's/.*Link\([^ ]*\):*/\1/p')
    echo "RaspberryPi3 IP address:\n - $IPADDRESS " | sendemail -o tls=yes password=qdfqraugzundgjzn -s -f -t -u "raspberrypi3 IP Address" -q

    Here is an example of what the email looks like:

        RaspberryPi3 IP address:
        - Mon Nov  7 01:15:14 UTC 2016
        - encap:Ethernet  HWaddr b8:27:eb:12:34:56
  23. Once the setup steps are completed you can unplug everything and move the Raspberry Pi 3 device to its operational location in the field.

Operating Instructions

Once you have everything ready you can move the solution into place where the device with the serial port resides.  For example:  a data center with racks of network equipment that needs to have its initial networking configuration applied or changed.  The Raspberry Pi 3 has 4 USB ports that can each be used with a standard USB to RS-232 Serial Port adaptor.  With a USB hub you could connect even more serial port adapters if needed.

  1. Connect the serial ports to the serial port adaptors with the cables you’d normally use with your laptop.
  2. Connect the USB to RS-232 serial port adaptors to the Raspberry Pi 3.
  3. Make sure the Micro SD Card with the configured Operating System image is seated properly in the Raspberry Pi 3.
  4. Use the MicroSD USB cable to connect the Raspberry Pi 3 to the power supply adaptor.
  5. Based on the setup steps above you should know how to find the IP address using the MAC address and the DHCP server, ARP, or the email script.
  6. Using the IP address of the Raspberry Pi you can now establish an ssh secure shell session from your admin workstation.
    ssh ‪ubuntu@
  7. Login with the user name and password established during the setup steps.
    ‪ubuntu@'s password: P@ss!23456789
  8. Find the device path to the USB Seral Port(s) with this command:
    ls -al /dev/ttyU*

    crw-rw---- 1 root dialout 188, 0 Nov  6 02:26 /dev/ttyUSB0

    With multiple USB to Serial adaptors you will see many tty entries. See this post for more details on this:

  9. Use the “screen” application to connect to the USB Serial Port
    screen /dev/ttyUSB0
  10. Press the enter key to wake up the console device and do your work.
  11. To quit the screen app, type CTRL-A, then \.
  12. You can also use the Raspberry Pi 3 as a remote linux administration workstation with commands such as iperf3 and nmap.

USB Device Power Usage

Run this command to see the maximum power utilization budget of the USB devices plugged into your Raspberry Pi 3.

ubuntu@ubuntu:~$ lsusb -v|egrep "^Bus|MaxPower"
Bus 001 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
    MaxPower              100mA
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
    MaxPower              100mA
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
    MaxPower               44mA
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
    MaxPower                2mA

Obviously, the more USB devices you connect the more power you will need. Adjust the capacity of the USB power supply adapter accordingly.

Next Steps

On my wishlist of things to try next:

Raspberry Pi 3 Specifications

Raspberry Pi 3 Model B
Release date 29 February 2016
Introductory price US$35
Operating system Raspbian
Ubuntu MATE
Snappy Ubuntu Core
Windows 10 IoT Core[1]
Arch Linux ARM
System-on-chip used Broadcom BCM2837
CPU 1.2 GHz 64/32-bit quad-core ARM Cortex-A53
Memory GB LPDDR2 RAM at 900 MHz[2]
Storage MicroSDHC slot
Graphics Broadcom VideoCore IV at higher clock frequencies (300 MHz & 400 MHz) than previous that run at 250 MHz
Power 800 mA (4.0 W)

JDSU Medusa Labs Test Tools Suite

JDSU Medusa Labs Test Tools Suite

JDSU Medusa Labs Test Tool (MLTT) Suite 6.0 is the industry’s leading application-based data and signal integrity testing solution for companies developing servers, switches, Host Bus Adapters (HBAs), Ethernet Network Adapters (NICs and CNAs), and other storage equipment for next-generation converged storage networks.

Test functions Covered:

  • data integrity
  • performance benchmarking
  • stress test
  • data corruption errors
  • undesirable device and system data pattern sensitivities
  • input/output (I/O) timeouts
  • I/O losses
  • system lockup scenarios

Test Tools Diagram


The Medusa Labs Test Tools Suite performs data integrity testing, generated signal quality stressing data patterns, and enterprise application simulation. The suite consists of these tools:

  • I/O Tools Pain, Maim, and Sock
    • Pain is a synchronous I/O tool designed to issue a single pending I/O per worker thread.
    • Maim is an asynchronous I/O tool that uses a single worker thread to issue multiple I/Os at once.
    • Sock is a TCP and UDP traffic generator. Each thread opens its own socket connections.
  • Catapult Test Tools Automation
    • Target discovery tool that acts as a shell for the I/O tools.
    • Passes these targets to the other Medusa Labs Test Tools for I/O testing.
    • Launch tests on remote systems and verify test results.
    • Test scripting and automation.
  • FindLBA is for use when debugging data corruption issues in tests on file systems or logical devices. It is useful in cases where the logical block address (LBA) reported in the I/O tool error logs is not accurate because the tools are not directly referencing areas of the physical media. You can use FindLBA in conjunction with a protocol analyzer to identify the actual LBA corresponding to a file offset reported by Medusa Labs Test Tools. The FindLBA tool sends a periodic “poll” of consecutive reads to a specified offset, which you can identify in a protocol trace. FindLBA is most useful when you need help finding I/O command that resulted in data corruption in a protocol trace capture.
  • GetKey is used for remote license checkouts. A system with network access to a license server can perform a license checkout for another system that does not have network access. This utility is particularly useful for temporarily using Medusa Labs Test Tools at an offsite location.


PDF DataSheet:

A 30 day trial is available. Here are some notes on the steps to follow:

  1. Download and install the software:
  2. From a fresh CMD prompt run PAIN.EXE – it will generate a DAT file that you have to send to get a license key back.


MEDUSA_MLM_ADMIN_CFG=C:\Program Fies\Medusa Labs\Test Tools\config\MedusaTools.cfg
MEDUSA_MLTT_INSTALL_DIR=C:\Program Files\Medusa Labs\Test Tools\
C:\Windows\system32>"\Program Files\Medusa Labs\Test Tools\bin\pain.exe"
Medusa Labs Test Tools
Copyright (c) 1997-2007, 2008-2013, JDS Uniphase Corp. All rights reserved.
PAIN 3.3.3 (win-x64) Medusa Labs Synchronous I/O Test Tool
Built on: Thu Dec 12 18:15:53 UTC 2013
Workstation name set to: GARAGESSD
Initializing license management library...
Loaded: Medusa L.E.O. module for Medusa License Management client library
LM Server:
LM Port: 5033
License library initialized
Checking for existing license...
This system does not have a valid license
Attempting to checkout a license over the network for 90 days
If the license server is down or not reachable, this may take a while...
License error: Unknown socket error
Creating the license checkout request file 'C:\Program Files\Medusa Labs\Test Tools\config\GSSD.dat'...
Created the license checkout request file 'C:\Program Files\Medusa Labs\Test Tools\config\GSSD.dat'
This file may be used for proxy license checkout
STOP: Thu Jun 26 16:10:37 2014 - exit code 18 (licensing operation failure)

I’ve sent in my DAT file and am waiting to hear back from tech support with the license file now. 6/26/2014 16:35

salt stack setup on beaglebone black rev c debian arm

I’ve been having fun playing around with my new ARM processor mini computer.  It’s a Beagle Bone Black (aka bbb) Revision C which has 512mb ram, 4gb flash storage, and comes pre-installed with Debian.

See my previous post on the Getting Started Experience:

Here are the details of the salt stack minion install.

SaltStack takes a new approach to infrastructure management by developing software that is easy enough to get running in seconds, scalable enough to manage tens of thousands of servers, and fast enough to control and communicate with them in milliseconds. SaltStack delivers a dynamic infrastructure communication bus used for orchestration, remote execution, configuration management and much more.

Before you start this procedure you should have the following things ready:

  1. BBB unit
  2. USB cable
  3. Ethernet cable
  4. Internet access
  5. Admin console computer to drive the setup – I used an apple mac mini running windows 8.1 enterprise
  6. admin console should be setup with the BBB drivers the come with it and you will need basic apps like Putty for terminal access
  7. Salt Master server already setup and on the network

This process took about 15 minutes. I used the following guide as a reference:

Procedure to install salt minion:

  1. plug everything in following the BBB getting started guide. the bbb i used was
  2. open a terminal window to the BBB. I used putty to connect to the BBB three different ways:
    1. with ssh to the local USB NDIS ip address
    2. to the COM3 serial port
    3. with ssh to the dhcp assigned ethernet address (check the dhcp server logs for “beaglebone”)
  3. Login as root – there is no root password for the bbb out of the box configuration
  4. Since i have a few BBB units it’s important to change the hostname so I’m able to differentiate them in the logs, dhcp servers, and salt configurations:
    vi /etc/hostname # change beaglebone to something unique
    vi /etc/hosts # change beaglebone to something unique
    reboot # or manually restart each service using the hostname
  5. This block of code will perform the four following steps: update apt repo list, import the APT repo signing key, update the package DB, and install the salt-minion.
    echo 'deb wheezy-saltstack main' >> /etc/apt/sources.list
    wget -q -O- "" | apt-key add -
    apt-get update
    apt-get -y install salt-minion
    #copy and paste these 4 lines to your terminal session
  6. Configure the minion by editing this file
    vi /etc/salt/minion
  7. Insert a new line to configure the master either for an IP address or hostname:
    #master: salt

    In this example I am pointing the master to

  8. Now you need to start the salt stack minion daemon
    salt-minion -d
  9. The next part is done on the salt master server. Open a console to your master, view the pending key requests, and accept them:
    salt-key -A
  10. That’s it!  You can test the install by running a few commands:
     salt '*' grains.items
     cpu_flags: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls
     cpu_model: ARMv7 Processor rev 2 (v7l)
     cpuarch: armv7l
     defaultencoding: UTF-8
     defaultlanguage: en_US
     fqdn: beaglebone
     host: beaglebone
     hwaddr_interfaces: {'lo': '00:00:00:00:00:00', 'usb0': '96:b3:d1:ff:ff:ff', 'eth0': '1c:ba:8c:ff:ff:ff'}
     id: beaglebone
     ip_interfaces: {'lo': [''], 'usb0': [''], 'eth0': ['']}
     kernel: Linux
     kernelrelease: 3.8.13-bone47
     localhost: beaglebone
     lsb_distrib_codename: wheezy
     lsb_distrib_description: Debian GNU/Linux 7.4 (wheezy)
     lsb_distrib_id: Debian
     lsb_distrib_os: GNU/Linux
     lsb_distrib_release: 7.4
     mem_total: 497
     nodename: beaglebone
     num_cpus: 1
     num_gpus: 0
     os: Debian
     os_family: Debian
     osarch: armhf
     oscodename: wheezy
     osfullname: Debian
     osrelease: 7.4
     path: /sbin:/usr/sbin:/bin:/usr/bin
     ps: ps -efHww
     saltpath: /usr/lib/python2.7/dist-packages/salt
     saltversion: 2014.1.4
     server_id: 546237894
     shell: /bin/sh
     virtual: physical
     zmqversion: 3.2.3


Here is a detailed log of the install process:

root@beaglebone:~# echo 'deb wheezy-saltstack main' >> /etc/apt/sources.list
root@beaglebone:~# wget -q -O- "" | apt-key add -
root@beaglebone:~# apt-get update
Hit wheezy/updates Release.gpg
Get:1 wheezy-saltstack Release.gpg [836 B]
Hit wheezy Release.gpg
Hit wheezy/updates Release
Hit wheezy-bbb Release.gpg
Get:2 wheezy-saltstack Release [5204 B]
Hit wheezy-updates Release.gpg
Hit wheezy Release
Hit wheezy-bbb Release
Get:3 wheezy-backports Release.gpg [836 B]
Hit wheezy/updates/main armel Packages
Hit wheezy-updates Release
Hit wheezy/updates/contrib armel Packages
Get:4 wheezy-saltstack/main armel Packages [2921 B]
Get:5 wheezy-backports Release [147 kB]
Hit wheezy/main armel Packages
Hit wheezy/updates/non-free armel Packages
Get:6 wheezy-saltstack/main armhf Packages [3414 B]
Hit wheezy-bbb/main armhf Packages
Hit wheezy/updates/main armhf Packages
Hit wheezy/contrib armel Packages
Hit wheezy/updates/contrib armhf Packages
Hit wheezy/non-free armel Packages
Hit wheezy/updates/non-free armhf Packages
Hit wheezy/main armhf Packages
Hit wheezy/updates/contrib Translation-en
Hit wheezy/contrib armhf Packages
Hit wheezy/updates/main Translation-en
Ign wheezy-saltstack/main Translation-en
Hit wheezy/non-free armhf Packages
Hit wheezy/updates/non-free Translation-en
Ign wheezy-bbb/main Translation-en
Get:7 wheezy-backports/main armel Packages [434 kB]
Hit wheezy/contrib Translation-en
Hit wheezy/main Translation-en
Hit wheezy/non-free Translation-en
Hit wheezy-updates/main armel Packages
Get:8 wheezy-backports/contrib armel Packages [2459 B]
Hit wheezy-updates/contrib armel Packages
Hit wheezy-updates/non-free armel Packages
Get:9 wheezy-backports/non-free armel Packages [4819 B]
Hit wheezy-updates/main armhf Packages
Get:10 wheezy-backports/main armhf Packages [450 kB]
Hit wheezy-updates/contrib armhf Packages
Hit wheezy-updates/non-free armhf Packages
Hit wheezy-updates/contrib Translation-en
Hit wheezy-updates/main Translation-en/DiffIndex
Hit wheezy-updates/non-free Translation-en
Get:11 wheezy-backports/contrib armhf Packages [4958 B]
Get:12 wheezy-backports/non-free armhf Packages [4819 B]
Get:13 wheezy-backports/contrib Translation-en [5113 B]
Get:14 wheezy-backports/main Translation-en [257 kB]
Get:15 wheezy-backports/non-free Translation-en [18.8 kB]
Fetched 1342 kB in 7s (178 kB/s)
Reading package lists... Done

root@beaglebone:~# apt-get -y install salt-minion
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
 dctrl-tools debconf-utils dmidecode libjs-jquery libpgm-5.1-0 libzmq3 msgpack-python python-async
 python-crypto python-git python-gitdb python-jinja2 python-m2crypto python-mako python-markupsafe
 python-smmap python-yaml python-zmq salt-common
Suggested packages:
 debtags python-crypto-dbg python-crypto-doc python-jinja2-doc python-beaker python-mako-doc salt-doc
The following NEW packages will be installed:
 dctrl-tools debconf-utils dmidecode libjs-jquery libpgm-5.1-0 libzmq3 msgpack-python python-async
 python-crypto python-git python-gitdb python-jinja2 python-m2crypto python-mako python-markupsafe
 python-smmap python-yaml python-zmq salt-common salt-minion
0 upgraded, 20 newly installed, 0 to remove and 19 not upgraded.
Need to get 4503 kB of archives.
After this operation, 16.2 MB of additional disk space will be used.
Get:1 wheezy-saltstack/main libzmq3 armhf 3.2.3+dfsg-1~bpo70~dst+1 [344 kB]
Get:2 wheezy/main libpgm-5.1-0 armhf 5.1.118-1~dfsg-0.1 [180 kB]
Get:3 wheezy-backports/main dmidecode armhf 2.12-2~bpo70+1 [51.8 kB]
Get:4 wheezy-saltstack/main python-zmq armhf 13.1.0-1~bpo70~dst+1 [357 kB]
Get:5 wheezy/main dctrl-tools armhf 2.22.2 [151 kB]
Get:6 wheezy/main debconf-utils all 1.5.49 [55.8 kB]
Get:7 wheezy-saltstack/main salt-common all 2014.1.4+ds-2~bpo70+1 [1674 kB]
Get:8 wheezy/main libjs-jquery all 1.7.2+dfsg-1 [80.1 kB]
Get:9 wheezy/main msgpack-python armhf 0.1.10-1 [48.3 kB]
Get:10 wheezy/main python-crypto armhf 2.6-4+deb7u3 [521 kB]
Get:11 wheezy/main python-async armhf 0.6.1-1 [41.8 kB]
Get:12 wheezy/main python-smmap all 0.8.2-1 [20.9 kB]
Get:13 wheezy/main python-gitdb armhf 0.5.4-1 [56.7 kB]
Get:14 wheezy/main python-git all 0.3.2~RC1-1 [314 kB]
Get:15 wheezy-saltstack/main salt-minion all 2014.1.4+ds-2~bpo70+1 [27.4 kB]
Get:16 wheezy/main python-markupsafe armhf 0.15-1 [14.3 kB]
Get:17 wheezy/main python-jinja2 armhf 2.6-1 [167 kB]
Get:18 wheezy/main python-m2crypto armhf 0.21.1-2 [174 kB]
Get:19 wheezy/main python-mako all 0.7.0-1.1 [59.3 kB]
Get:20 wheezy/main python-yaml armhf 3.10-4 [164 kB]
Fetched 4503 kB in 8s (516 kB/s)
Selecting previously unselected package libpgm-5.1-0.
(Reading database ... 59253 files and directories currently installed.)
Unpacking libpgm-5.1-0 (from .../libpgm-5.1-0_5.1.118-1~dfsg-0.1_armhf.deb) ...
Selecting previously unselected package libzmq3:armhf.
Unpacking libzmq3:armhf (from .../libzmq3_3.2.3+dfsg-1~bpo70~dst+1_armhf.deb) ...
Selecting previously unselected package dmidecode.
Unpacking dmidecode (from .../dmidecode_2.12-2~bpo70+1_armhf.deb) ...
Selecting previously unselected package dctrl-tools.
Unpacking dctrl-tools (from .../dctrl-tools_2.22.2_armhf.deb) ...
Selecting previously unselected package debconf-utils.
Unpacking debconf-utils (from .../debconf-utils_1.5.49_all.deb) ...
Selecting previously unselected package libjs-jquery.
Unpacking libjs-jquery (from .../libjs-jquery_1.7.2+dfsg-1_all.deb) ...
Selecting previously unselected package msgpack-python.
Unpacking msgpack-python (from .../msgpack-python_0.1.10-1_armhf.deb) ...
Selecting previously unselected package python-crypto.
Unpacking python-crypto (from .../python-crypto_2.6-4+deb7u3_armhf.deb) ...
Selecting previously unselected package python-async.
Unpacking python-async (from .../python-async_0.6.1-1_armhf.deb) ...
Selecting previously unselected package python-smmap.
Unpacking python-smmap (from .../python-smmap_0.8.2-1_all.deb) ...
Selecting previously unselected package python-gitdb.
Unpacking python-gitdb (from .../python-gitdb_0.5.4-1_armhf.deb) ...
Selecting previously unselected package python-git.
Unpacking python-git (from .../python-git_0.3.2~RC1-1_all.deb) ...
Selecting previously unselected package python-markupsafe.
Unpacking python-markupsafe (from .../python-markupsafe_0.15-1_armhf.deb) ...
Selecting previously unselected package python-jinja2.
Unpacking python-jinja2 (from .../python-jinja2_2.6-1_armhf.deb) ...
Selecting previously unselected package python-m2crypto.
Unpacking python-m2crypto (from .../python-m2crypto_0.21.1-2_armhf.deb) ...
Selecting previously unselected package python-mako.
Unpacking python-mako (from .../python-mako_0.7.0-1.1_all.deb) ...
Selecting previously unselected package python-yaml.
Unpacking python-yaml (from .../python-yaml_3.10-4_armhf.deb) ...
Selecting previously unselected package python-zmq.
Unpacking python-zmq (from .../python-zmq_13.1.0-1~bpo70~dst+1_armhf.deb) ...
Selecting previously unselected package salt-common.
Unpacking salt-common (from .../salt-common_2014.1.4+ds-2~bpo70+1_all.deb) ...
Selecting previously unselected package salt-minion.
Unpacking salt-minion (from .../salt-minion_2014.1.4+ds-2~bpo70+1_all.deb) ...
Processing triggers for man-db ...
Setting up libpgm-5.1-0 (5.1.118-1~dfsg-0.1) ...
Setting up libzmq3:armhf (3.2.3+dfsg-1~bpo70~dst+1) ...
Setting up dmidecode (2.12-2~bpo70+1) ...
Setting up dctrl-tools (2.22.2) ...
Setting up debconf-utils (1.5.49) ...
Setting up libjs-jquery (1.7.2+dfsg-1) ...
Setting up msgpack-python (0.1.10-1) ...
Setting up python-crypto (2.6-4+deb7u3) ...
Setting up python-async (0.6.1-1) ...
Setting up python-smmap (0.8.2-1) ...
Setting up python-gitdb (0.5.4-1) ...
Setting up python-git (0.3.2~RC1-1) ...
Setting up python-markupsafe (0.15-1) ...
Setting up python-jinja2 (2.6-1) ...
Setting up python-m2crypto (0.21.1-2) ...
Setting up python-mako (0.7.0-1.1) ...
Setting up python-yaml (3.10-4) ...
Setting up python-zmq (13.1.0-1~bpo70~dst+1) ...
Setting up salt-common (2014.1.4+ds-2~bpo70+1) ...
Setting up salt-minion (2014.1.4+ds-2~bpo70+1) ...
[ ok ] Starting salt-minion (via systemctl): salt-minion.service.
Processing triggers for python-support ...

BeagleBone Black Rev C Setup Experience

Updated: See my post on Setting up Salt Stack for Debian on this ARM SBC.

I got my new BeagleBone Black Rev C Single Board Computer in the mail via USPS today (May 21st, 2014). Not too bad. It’s all up and running and I was able to ssh into it and run my first demo app.

I had decided to get a BBB a few days ago and was disappointed when I went to order them on line they were out of stock.  They had run out of the Rev B with only 2 GB on board eMMC (embedded Multi-Media Controller) memory storage and were working on a new Rev C model with 4 GB. But I filled out the web to requesting to be informed when they were back in stock.  Here’s the email they sent me:

Adafruit Industries <>
May 18 (3 days ago)

Dear Iben Rodriguez ,

You have successfully subscribed to the Back In Stock Notification List for:

BeagleBone Black Rev C – 4GB Flash – Pre-installed Debian

We shall send you an e-mail when it is back in stock!

The very next day I was plesantly surprised to find this message sitting in my inbox:

Adafruit Industries <>
May 19 (2 days ago)

Dear Iben Rodriguez,

We have restocked a product you asked to be notified about.

Please check it out before it goes out of stock again!

Product Back In Stock
BeagleBone Black Rev C – 4GB Flash – Pre-installed Debian


So I dropped everything and went on line and ordered one for me and one for the kids. The total cost with the cheapest shipping option (USPS) was $59.97 and the nice part was I was able to use PayPal. I’m glad I didn’t pay for more expensive shipping as it only took them 2 days to get it to me.

I also ordered a Half-open Frame Design Clear Case Enclosure for $7.97.Image

The mailman managed to squeeze the package into my mailbox.  Try that with a “regular” computer.

Inside was a smaller box all surrounded in bubble wrap.

It came with a 3 foot USB cable 4P(A)M to mini 5P(B)M, a getting started card, and a packing slip.






Getting Started Card






The packing slip has a quote on it:

Art is I; science is we – Claude Bernard

for support:


Initial setup

I used the USB to PC connection method.  I also plugged an Ethernet cable in and connected the BBB to my lab network. It booted up right away and got an IP address via DHCP.  They really went out of their way to make this thing easy to use.  The file system showed up in my Windows Explorer with a START.htm and a README.htm file.  Just click on those and they open up in your web browser. No network or Internet connection needed.


Opening these files will give you the instructions you need to install the correct drivers for your PC’s Operating System to communicate over the USB network port.

Install the drivers for your operating system to give you network-over-USB access to your BeagleBone. Additional drivers give you serial access to your board.

Operating System USB Drivers Comments
Windows (64-bit) 64-bit installer If in doubt, try the 64-bit installer first.

Windows (32-bit) 32-bit installer
Mac OS X Network
Install both sets of drivers.
Linux Driver installation isn’t required, but you might find a few udev rules helpful.

Note: Additional FTDI USB to serial/JTAG information and drivers are available from

Note: Additional USB to virtual Ethernet information and drivers are available from and



putty com3 9600 baud USB to serial connection

I used windows 8.1 and after installing the drivers you can find the assigned serial communications port in your windows computer device manager. Mine showed up as COM3.



Open Putty and configure a serial port session for COM3.


When you initially connect you will be greeted with a banner message as follows:

Debian GNU/Linux 7 beaglebone ttyGS0

default username:password is [debian:temppwd]


The IP Address for usb0 is:
beaglebone login:

I logged in as root and since there’s no default password set it takes you right to the # prompt.

Last login: Wed Apr 23 20:20:20 UTC 2014 on ttyO0
Linux beaglebone 3.8.13-bone47 #1 SMP Fri Apr 11 01:36:09 UTC 2014 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Running ifconfig and df -h show some basic system info.

root@beaglebone:~# ifconfig -a
 eth0 Link encap:Ethernet HWaddr 1c:ba:8c:xx:xx:xx
 inet Mask:
 inet6 addr: fe80::xxxx:8cff:fea2:xxxx/64 Scope:Link
 RX packets:1073 errors:0 dropped:0 overruns:0 frame:0
 TX packets:126 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:215972 (210.9 KiB) TX bytes:17833 (17.4 KiB)
lo Link encap:Local Loopback
 inet addr: Mask:
 inet6 addr: ::1/128 Scope:Host
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr f6:66:fe:xx:xx:xx
 inet addr: Bcast: Mask:
 inet6 addr: fe80::f466:xxxx:xxxx:xxc6/64 Scope:Link
 RX packets:2072 errors:0 dropped:0 overruns:0 frame:0
 TX packets:4634 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:146703 (143.2 KiB) TX bytes:6914510 (6.5 MiB)
 root@beaglebone:~# df -h
 Filesystem Size Used Avail Use% Mounted on
 rootfs 3.4G 1.4G 1.9G 44% /
 udev 10M 0 10M 0% /dev
 tmpfs 100M 632K 99M 1% /run
 /dev/disk/by-uuid/8aecba16-c811-47ee-86ed-78588c08ce2a 3.4G 1.4G 1.9G 44% /
 tmpfs 249M 0 249M 0% /dev/shm
 tmpfs 249M 0 249M 0% /sys/fs/cgroup
 tmpfs 100M 0 100M 0% /run/user
 tmpfs 5.0M 0 5.0M 0% /run/lock
 /dev/mmcblk0p1 96M 72M 25M 75% /boot/uboot
 /dev/mmcblk1p1 63G 5.1G 58G 9% /media/NO NAME

Notice the 64 GB MicroSDXC UFD shows up as /dev/mmcblk1p1

Update the Debian Operating System with the latest patches using the Advanced Packaging Tool get command.

root@beaglebone:~# apt-get update
root@beaglebone:~# apt-get upgrade
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages will be upgraded:
base-files dpkg dpkg-dev libdpkg-perl liblcms2-2 libsmbclient libsoup-gnome2.4-1 libsoup2.4-1 libssl-dev
libssl-doc libssl1.0.0 libwbclient0 libxfont1 libxml2 libxml2-dev libxml2-utils linux-libc-dev openssl tzdata
19 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 14.1 MB of archives.
After this operation, 46.1 kB of additional disk space will be used.

This is super awesome!  I created a file on the local file system, pulled power, plugged it back in and after a few seconds the system was back up and my file was still there.  This is the fastest computer in the lab.

BBB Web Server

Open a web browser and connect to the USB Network Interface:

There are actually 2 different web servers running on the BBB Rev C debian OS out of the box.


The default web server running on port 80 is served from the /var/lib/cloud9 directory on the local file system:

root@beaglebone:/var/lib/cloud9# ls -al
total 636
drwxr-xr-x 13 debian debian 4096 Apr 23 20:20 .
drwxr-xr-x 41 root root 4096 Jan 1 2000 ..
drwxr-xr-x 3 debian debian 4096 Apr 23 21:01 .c9
drwxr-xr-x 8 debian debian 4096 Apr 23 21:01 .git
-rw-r–r– 1 debian debian 13 Apr 23 21:01 .gitignore
-rw-r–r– 1 debian debian 8808 Apr 23 21:01 LICENSE
-rw-r–r– 1 debian debian 471 Apr 23 21:01
drwxr-xr-x 4 debian debian 4096 Apr 23 21:01 Support
drwxr-xr-x 3 debian debian 4096 Apr 23 21:01 attic
drwxr-xr-x 2 root root 4096 Apr 23 20:20 autorun
drwxr-xr-x 2 debian debian 4096 Apr 23 21:01 demo
drwxr-xr-x 5 debian debian 4096 Apr 23 21:01 extras
-rw-r–r– 1 debian debian 562718 Apr 23 21:01 favicon.ico
drwxr-xr-x 2 debian debian 4096 Apr 23 21:01 images
-rw-r–r– 1 debian debian 2377 May 22 18:45 index.html
drwxr-xr-x 2 debian debian 4096 Apr 23 21:01 javascripts
-rw-r–r– 1 debian debian 673 Apr 23 21:01 params.json
drwxr-xr-x 5 debian debian 4096 Apr 23 21:01 static
drwxr-xr-x 2 debian debian 4096 Apr 23 21:01 stylesheets
-rw-r–r– 1 debian debian 659 Apr 23 21:01 testace.html

The alternate web server running on port 8080 is served from the /var/www/ directory on the local file system.  There are no files in this directory from the factory and directory browsing is enabled so any files you place here will be listed in the browser.


There’s a link to the GITHUB bone101 Getting Started section:


Getting started information for BeagleBone and BeagleBone Black written in BoneScript

The content here is presented by the default web server running with the demonstration Linux distributions provided on BeagleBone and BeagleBone Black. It is written in HTML and makes use of the BoneScript server running on the board and BoneScript JavaScript library running in these HTML pages.


Run your first program.  

I tried the demo program called “Blink an on-board LED” and just by clicking the “RUN” button in the IDE you are able to download and run the program. Super easy! I changed some of the timer numbers and ran it again.  This makes it so easy to experiment.

var b = require(‘bonescript’);
var led = “USR3”;
var state = 0;

b.pinMode(led, ‘out’);
toggleLED = function() {
state = state ? 0 : 1;
b.digitalWrite(led, state);

timer = setInterval(toggleLED, 1000);

stopTimer = function() {

setTimeout(stopTimer, 30000);


Splunk Forwarder on BeagleBoard Black

Download – forwarder-for-linux-arm-raspberry-pi_10.tgz – the installer from:

Installation Manual:

Installation Steps:



tar -xvzf forwarder-for-linux-arm-raspberry-pi_10.tgz -C /opt

root@beaglebone:/opt/splunkforwarder/bin# /opt/splunkforwarder/bin/splunk start
/opt/splunkforwarder/bin/splunkd: error while loading shared libraries: cannot open shared object file: No such file or directory
/opt/splunkforwarder/bin/splunkd: error while loading shared libraries: cannot open shared object file: No such file or directory

Splunk> Finding your faults, just like mom.

Checking prerequisites…
/opt/splunkforwarder/bin/splunkd: error while loading shared libraries: cannot open shared object file: No such file or directory
Checking mgmt port [8089]: /opt/splunkforwarder/bin/splunkd: error while loading shared libraries: cannot open shared object file: No such file or directory
Creating: /opt/splunkforwarder/var/lib/splunk
Creating: /opt/splunkforwarder/var/run/splunk
Creating: /opt/splunkforwarder/var/run/splunk/appserver/i18n
Creating: /opt/splunkforwarder/var/run/splunk/appserver/modules/static/css
Creating: /opt/splunkforwarder/var/run/splunk/upload
Creating: /opt/splunkforwarder/var/spool/splunk
Creating: /opt/splunkforwarder/var/spool/dirmoncache
Creating: /opt/splunkforwarder/var/lib/splunk/authDb
Creating: /opt/splunkforwarder/var/lib/splunk/hashDb
/opt/splunkforwarder/bin/splunkd: error while loading shared libraries: cannot open shared object file: No such file or directory
SSL certificate generation failed.

root@beaglebone:~# ls -al /opt/splunkforwarder/lib
total 5468
drwxr-xr-x 3 root root 4096 Sep 28 2013 .
drwxr-xr-x 9 root root 4096 May 23 04:29 ..
-r–r–r– 1 root root 57 Sep 27 2013 copyright.txt
drwxr-xr-x 2 root root 4096 Sep 28 2013 engines
lrwxrwxrwx 1 root root 20 Sep 27 2013 ->
lrwxrwxrwx 1 root root 20 Sep 27 2013 ->
-r-xr-xr-x 1 root root 511016 Sep 28 2013
lrwxrwxrwx 1 root root 15 Sep 27 2013 ->
lrwxrwxrwx 1 root root 15 Sep 27 2013 ->
-r-xr-xr-x 1 root root 71020 Sep 28 2013
lrwxrwxrwx 1 root root 18 Sep 27 2013 ->
-r-xr-xr-x 1 root root 1476588 Sep 28 2013
lrwxrwxrwx 1 root root 18 Sep 27 2013 ->
lrwxrwxrwx 1 root root 18 Sep 27 2013 ->
-r-xr-xr-x 1 root root 97796 Sep 28 2013
lrwxrwxrwx 1 root root 16 Sep 27 2013 ->
lrwxrwxrwx 1 root root 16 Sep 27 2013 ->
-r-xr-xr-x 1 root root 244172 Sep 28 2013
lrwxrwxrwx 1 root root 19 Sep 27 2013 ->
lrwxrwxrwx 1 root root 19 Sep 27 2013 ->
-r-xr-xr-x 1 root root 575376 Sep 28 2013
lrwxrwxrwx 1 root root 15 Sep 27 2013 ->
-r-xr-xr-x 1 root root 336464 Sep 28 2013
lrwxrwxrwx 1 root root 16 Sep 27 2013 ->
lrwxrwxrwx 1 root root 16 Sep 27 2013 ->
-r-xr-xr-x 1 root root 1832152 Sep 28 2013
lrwxrwxrwx 1 root root 17 Sep 27 2013 ->
lrwxrwxrwx 1 root root 17 Sep 27 2013 ->
-r-xr-xr-x 1 root root 323324 Sep 28 2013
lrwxrwxrwx 1 root root 13 Sep 27 2013 ->
lrwxrwxrwx 1 root root 13 Sep 27 2013 ->
-r-xr-xr-x 1 root root 94648 Sep 28 2013

root@beaglebone:~# /opt/splunkforwarder/bin/splunk cmd $(which env) | grep -i splunk

root@beaglebone:~# /opt/splunkforwarder/bin/splunk cmd $(which ldd) /opt/splunkforwarder/bin/splunkd => /lib/arm-linux-gnueabihf/ (0xb6f68000) => /opt/splunkforwarder/lib/ (0xb6f2a000) => /opt/splunkforwarder/lib/ (0xb6d69000) => /opt/splunkforwarder/lib/ (0xb6d1a000) => /opt/splunkforwarder/lib/ (0xb6cc8000) => /opt/splunkforwarder/lib/ (0xb6b5c000) => /lib/arm-linux-gnueabihf/ (0xb6b50000) => /opt/splunkforwarder/lib/ (0xb6ad2000) => /opt/splunkforwarder/lib/ (0xb6ac0000) => /opt/splunkforwarder/lib/ (0xb6a33000) => /opt/splunkforwarder/lib/ (0xb6a1b000) => /lib/arm-linux-gnueabihf/ (0xb69af000) => /lib/arm-linux-gnueabihf/ (0xb6994000) => /lib/arm-linux-gnueabihf/ (0xb68af000)
/lib/ => /lib/ (0xb6f85000)


One of the new BBB Rev C units I just got had a bad HDMI port and so I had to send it back for RMA.  When I got the repaired unit back it had angstrom on it so i had to figure out how to flash it back to debian.

The instructions here:

look good except that I’d be sure to get the latest “flasher” image from here:

Updates seem to happen on a monthly basis:

  • 2014-06-05
    • BeagleBone Black: v3.8.13-bone56 kernel
  • 2014-05-06
    • BeagleBone Black: v3.8.13-bone49 kernel
  • 2014-04-18
    • BeagleBone Black: v3.8.13-bone47 kernel
One of the nice benefits of this experience (ordeal?) is that I got a base or bare minimum debian install with none of the fluff and there was even some hardening done as far as the usernames and passwords go.  
Below I will share some of the details for your consideration.
Here is the disk usage with the original factory image: 44% full using 1.4G of the 3.4G on board flash.Factory image:

root@beaglebone:~# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 3.4G 1.4G 1.9G 44% /
udev 10M 0 10M 0% /dev
tmpfs 100M 632K 99M 1% /run
/dev/disk/by-uuid/8aecba16-c811-47ee-86ed-78588c08ce2a 3.4G 1.4G 1.9G 44% /
tmpfs 249M 0 249M 0% /dev/shm
tmpfs 249M 0 249M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/mmcblk0p1 96M 72M 25M 75% /boot/uboot
/dev/mmcblk1p1 63G 5.1G 58G 9% /media/NO NAME

Base image: 
root@arm:~# uname -a
Linux arm 3.8.13-bone56 #1 SMP Wed Jun 4 23:59:23 UTC 2014 armv7l GNU/Linux
root@bbb1:~# df -h
Filesystem                                              Size  Used Avail Use% Mounted on
rootfs                                                  3.4G  630M  2.6G  20% /
udev                                                     10M     0   10M   0% /dev
tmpfs                                                   100M  1.5M   98M   2% /run
/dev/disk/by-uuid/ae487a65-a8c7-44e8-a20f-acadab4e5fb5  3.4G  630M  2.6G  20% /
tmpfs                                                   249M     0  249M   0% /dev/shm
tmpfs                                                   249M     0  249M   0% /sys/fs/cgroup
tmpfs                                                   100M     0  100M   0% /run/user
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
/dev/mmcblk0p1                                           96M   79M   18M  82% /boot/uboot
I also restored the password settings so I could login with no password.
passwd -d root # to clear the password
vi /etc/pam.d/common-auth # change the line below nullok
vi /etc/ssh/sshd_config # To enable empty passwords, change to yes
PermitEmptyPasswords yes