Headless Internet Radio


Created by Pete Nesbitt pete@linux1.ca
October 2014

GOAL:
Build a headless system to automatically play Internet radio.


Agtigo (PICO ITX)


Overview:
-auto login of user at boot
-auto run inet-radio script
-since no keyboard, insert a USB thumb drive to trigger power off
-for emergency shutdown (if you don't have a usd-drive), plug in usb keyboard and hit ctl-alt-del (set to shudown not reboot)
-this is not a security minded setup. It's intended for a dedicated box on a private network.


Issues:
-no volume control so not great with headphones, but using computer speakers is fine (they all have Volume controls.

Details:

 Install:
  -I used Fedora 19 "minimal install" from a thumbdrive
        -creat a single regular user to run everything under

  -post install, after a regular system update, install:
        alsa: alsa-lib alsa-firmware alsa-utils alsa-tools-firmware

        mplayer (comes from rpmfusion repo)

        Optionally pulse and alsa-pulse-plugin but no value here
        rpmfusion.org repo


  Radio Script:
        -download inet-radio.sh from linux1.ca
        -put it in /usr/local/bin (or whereever you like)
        -make it executable  'chmod 755 inet-radio.sh'

        -modify users profile to run script on login
          edit ~/.bash_profile

          add a single line to the end:
                /usr/local/bin/inet-radio.sh


# test mplayer with 
 mplayer -playlist http://cp.usa7.fastcast4u.com:2199/tunein/alcann00.asx
or 
 mplayer -playlist http://playerservices.streamtheworld.com/pls/CBC_R2_VCR_H.pls

if no sound, try amixer (cmd) or alsamixer (curses) to check master and line volumes etc


----------------------------

 Auto Login:
  -create getty@1.service within systemd services
        cp /usr/lib/systemd/system/getty@.service \
                 /etc/systemd/system/autologin@.service

        ln -sf /etc/systemd/system/autologin@.service \
                /etc/systemd/system/getty.target.wants/getty@tty1.service

  *this symlink may not be 100% correct, need to review default settings. I made my notes post install :(


   edit:  /etc/systemd/system/autologin@.service


        CHANGE:
         ExecStart=  line to read: (change USERNAME to the user created at install)
           ExecStart=-/sbin/mingetty --autologin USERNAME %I
          OR (I had some issues with this on one instance, so I used:
           ExecStart=-/sbin/agetty --noclear --autologin USERNAME %I 38400 linux


         Alias=  line to read:
           Alias=getty.target.wants/getty@tty1.service


    activate it all by running: 'systemctl daemon-reload'


----------------------------

 Auto Shutdown:
    -we have a standard and a backup method.

    Primary Method:
        -inserting a thumbdrive triggers a system power off.
        -we use a UDEV rule to call the systemd poweroff.target

        1) create a file for your rules. I used /etc/udev/rules.d/10-local.rules
           add a single line:

                KERNEL=="sdb", ENV{SYSTEMD_WANTS}="poweroff.target"

                -note that since my system has only one scsi disk (sda), the first inserted thumbdrive will be given sdb.
          
                -I tried with ACTION=="add" ACTION=="remove" and ACTION=="change" but only works for insert :[

        2) after editing the rules, run 'udevadm control --reload-rules' (or reboot)

          Now inserting a USB Thumb Drive will power everything off.

    Secondary/Emergency Method:
        shutdown via /usr/lib/systemd/system/
                -force a symlink of ctrl-alt-del to poweroff:

                ln -sf /lib/systemd/system/poweroff.target /lib/systemd/system/ctrl-alt-del.target

                -now pressing Ctrl-Alt-Del keys at once will power everything off.




That's it. If all went well, you can power it off, then hook up speakers and a network cable and nothing else.
Fire it up and after about 30 to 60 seconds (boot up + cache filling time) you should hear music.
When you're done, just insert a USB Drive and it will shut itself off.
Remove the USB drive to prevent a boot time loop.