Siren

This document describes how to build Siren, a Raspberry Pi-based music player. Siren can play music made available by a DAAP server such as dmapd.

Siren is designed to run on the hardware listed below:

  • Raspberry Pi Model B
  • PiFace Control & Display
  • PiFace Control & Display Case
  • 5V Micro USB AC Adapter
  • 8GB SD Card
  • Edimax 802.11b/g/n Nano USB Adapter
  • HDMI Cable
  • USB Keyboard (For initial setup)

At the time of writing, most of this hardware is available from MCM Electronics.

Selecting the software for a Siren image

  1. Obtain the OpenWrt source tree using git clone git://git.openwrt.org/openwrt/openwrt.git.

  2. Enter the OpenWrt source tree and modify the package configuration provided by feeds.conf to use src-git packages ssh://git@github.com/MikePetullo/packages.git. Run ./scripts/feeds update.

  3. Pull the appropriate feeds, using

./scripts/feeds install \
	freifunk-watchdog \
	gst1-mod-mad \
	gst1-mod-ogg \
	gst1-mod-vorbis \
	gst1-mod-flac \
	lcdgrilo \
	wpa-supplicant \
	zoneinfo-core \
	zoneinfo-northamerica</pre></li>
  1. Run make menuconfig and select:
  • Target System: Broadcom BCM2708/BCM2709
  • Subtarget: BCM2708 based boards
  • Target Profile: Raspberry Pi Model B
  • Base system:
    • Remove dnsmasq
  • Kernel Modules:
    • Other modules: kmod-softdog
    • SPI Support:
      • kmod-spi-bcm2835
      • kmod-spi-dev
    • Wireless Drivers:
      • kmod-rtl8192cu (for firmware)
      • kmod-rtl8xxxu
  • LuCI: Freifunk: freifunk-watchdog
  • Multimedia:
    • grilo-plugins
    • Select grilo-plugins-dmap
    • gstreamer1-plugins-base
    • Select all GStreamer base modules
    • gstreamer1-plugins-good
    • Select all GStreamer good modules
    • gstreamer1-plugins-ugly
    • Select all GStreamer ugly modules
    • lcdgrilo
  • Network:
    • Remove odhcpd
    • wpa-supplicant
  • Utilities:
    • zoneinfo: zoneinfo-northamerica
  1. Create the directory files and populate it as described in the following sections.

Configure networking

  1. etc/config/network:
config interface loopback
        option ifname lo
        option proto static
        option ipaddr 127.0.0.1
        option netmask 255.0.0.0

config interface lan
        option ifname wlan0
        option proto dhcp
  1. etc/config/wireless (replace MACADDR, SSID, and KEY):
config wifi-device radio0
        option type     mac80211
        option channel  11
        option hwmode   11g
        option country  US
        option macaddr  MACADDR

config wifi-iface
        option device   radio0
        option network  lan
        option mode     sta
        option ssid     SSID
        option encryption psk2
        option key      KEY

Configure basic system settings

  1. etc/config/system:
config system
	option hostname	siren.example.com
	option timezone	EST5EDT,M3.2.0,M11.1.0

config timeserver ntp
        list server     0.openwrt.pool.ntp.org
        list server     1.openwrt.pool.ntp.org
        list server     2.openwrt.pool.ntp.org
        list server     3.openwrt.pool.ntp.org
        option enabled 1
        option enable_server 0
  1. etc/config/dropbear:
config dropbear
	option PasswordAuth 'off'
	option RootPasswordAuth 'off'
	option Port         '22'
  1. etc/config/freifunk-watchdog:
config process
        option process lcdgrilo
        option initscript /etc/init.d/lcdgrilo

Build software and perform installation

  1. Run make V=99.
  2. Use dd to copy openwrt-brcm2708-bcm2708-rpi-b-ext4-sdcard.bin to the Raspberry Pi’s flash card.
Assistant Professor

My research interests include free and open source software, system security, and network security.