init script

Share

Jake Graft pointed out in a comment that I had forgotten to put the init script from the MythTV book online. My apologies.

#! /bin/sh
#
# mythbackend
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

BACKEND=/usr/local/bin/mythbackend
BACKEND_NAME=mythbackend

MYTHUSER="myth"

test -x $BACKEND || exit 0

set -e

case "$1" in
  start)
        echo -n "Starting MythTV: $BACKEND_NAME"
        su ${MYTHUSER} -c "$BACKEND -v all -d -l ${MBE_LOGFILE}" &
        echo "."
        ;;
  stop)
        echo -n "Stopping MythTV: $BACKEND_NAME"
        killall $BACKEND
        echo "."
        ;;
  *)
        echo "Usage: $0 {start|stop}" >&2
        exit 1
        ;;
esac

exit 0
Share

Building a symlink tree for MythTV recordings

Share

I wanted to build a directory of symlinks that pointed to my MythTV recordings, so I wrote a little python script to do it for me. I figure someone else might find this useful too…

    #!/usr/bin/python
    
    # Copyright (C) Michael Still (mikal@stillhq.com) 2007
    # Released under the terms of the GNU GPL
    
    import MySQLdb
    import os
    import re
    
    from socket import gethostname
    
    # Connect to the MythTV database based on the MythTV config
    config_values = {}
    home = os.environ.get('HOME')
    config = open(home + '/.mythtv/mysql.txt')
    for line in config.readlines():
      if not line.startswith('#') and len(line) > 5:
        (key, value) = line.rstrip('\n').split('=')
        config_values[key] = value
    
    db_connection = MySQLdb.connect(host = config_values['DBHostName'],
                                    user = config_values['DBUserName'],
                                    passwd = config_values['DBPassword'],
                                    db = config_values['DBName'])
    cursor = db_connection.cursor(MySQLdb.cursors.DictCursor)
    
    # Regexp for what is allowed in the symlink name
    unsafe = re.compile('[^a-zA-Z0-9\-\:_]+')
    
    # Find the recordings directory -- this assumes you haven't used an
    # identifier string for this machine...
    cursor.execute('select * from settings where value="RecordFilePrefix" and '
                   'hostname="%s";' % gethostname())
    row = cursor.fetchone()
    basedir = row['data']
    
    # Now find all the recordings we have at the moment
    cursor.execute('select title, subtitle, starttime, basename from recorded;')
    
    for i in range(cursor.rowcount):
      row = cursor.fetchone()
    
      title = row['title']
      subtitle = row['subtitle']
      if subtitle == '':
        subtitle = str(row['starttime'])
    
      title = title.replace(' ', '_')
      title = unsafe.sub('', title)
    
      subtitle = subtitle.replace(' ', '_')
      subtitle = unsafe.sub('', subtitle)
    
      extn = row['basename'].split('.')[1]
    
      try:
        os.mkdir(title)
      except:
        pass
    
      try:
        os.symlink('%s/%s' %(basedir, row['basename']),
                   '%s/%s.%s' %(title, subtitle, extn))
      except:
        pass
    

This creates a tree of symlinks in the current directory that looks like this:

    $ find . -type l
    ./Masterminds/Air_America
    ./Tech_Now/Getting_Famous
    ./Babar/To_Tell_or_Not_to_Tell
    ./Babar/The_Intruder
    ./Babar/Special_Delivery
    ./Babar/Conga_the_Terrible
    ./Babar/The_Celestville_Enquirer
    ./The_Backyardigans/Viking_Voyage
    ./The_Backyardigans/Cops_and_Robots
    ./The_Backyardigans/Eureka
    ./The_Backyardigans/Movers_of_Arabia
    ./The_Backyardigans/Save_the_Day
    ./Go_Diego_Go/Rainforest_Race
    ./Go_Diego_Go/Cool_Water_for_Ana_the_Anaconda
    ./Go_Diego_Go/Great_Jaguar_to_the_Rescue
    ./Go_Diego_Go/Diego_Saves_the_River_Dolphin
    ./Go_Diego_Go/Jorge_the_Little_Hawk_Learns_to_Migrate
    ./How_Its_Made/2007-06-08_09:30:00
    
Share