Shrieker

This document describes how to build Shrieker, a Raspberry Pi-based ringer. Shrieker connects to an XMPP server, listens for messages, and displays messages that arrive before activating an audible alarm.

Shrieker 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 Shrieker 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.

  • Pull the appropriate feeds, using ./scripts/feeds install \ freifunk-watchdog \ gst1-mod-mad \ lcdringer \ wpa-supplicant \ zoneinfo-core \ zoneinfo-northamerica

  • Run make menuconfig and select:

    1. Target System: Broadcom BCM2708/BCM2709/
    2. Subtarget: BCM2708 based boards
    3. Target Profile: Raspberry Pi Model B
  1. 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:
    • gstreamer1-plugins-base
      • Select all GStreamer base modules
    • gstreamer1-plugins-good
      • Select all GStreamer good modules
    • gstreamer1-plugins-ugly
      • Select all GStreamer ugly modules
  • Network:
    • lcdringer
    • 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 lcdringer

etc/lcdringer.conf (replace EXAMPLE.COM, PASSWORD, USER1, and USER2; USER1 and USER2 are the users permitted to cause lcdringer to ring):

[account]
jid=lcdringer@EXAMPLE.COM
password=PASSWORD
ring_path=/usr/share/lcdringer/ring.mp3

[friends]
jids=USER1@EXAMPLE.COM;USER2@EXAMPLE.COM

Configure basic system settings

  1. etc/config/system:
config system
	option hostname	shrieker.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 lcdringer
        option initscript /etc/init.d/lcdringer

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.
Avatar
W. Michael Petullo

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