Mythbuntu 9.10 med open-sasc-ng

Permalänk

Mythbuntu 9.10 med open-sasc-ng

En liten guide i hur man kompilerar en fungerande open-sasc-ng för nyaste kerneln i till exempel Mythbuntu 9.10 (men denna guide fungerar givetvis lika bra för andra Linuxar också). Jag går inte in på hur man konfigurerar själva MythTV-backend, men det är ju rätt enkelt (tänk bara på att det är dom "virtuella" DVB-korten som skall användas - i detta fall #2 och #3 eftersom jag har en dubbelmottagare)

Installera Mythbuntu 9.1 på följande sätt:
Språk – Engelska
Timezone – Europe/Swedish
Keyboard – Swedish
Disk – xxx
Ange ett "User name" samt "Computer name"
Välj typ av MythTV setup – Primary Backend with Frontend
Välj tjänster – SSH
Remote control – ingen
Installera
Finish

Starta om och klicka <esc> - avsluta MythTV
Välj Application → System → Update manager
Patcha systemet med alla saknade patchar
Passa även på att lägga på extra-drivrutiner för div hårdvara om du blir meddelad om detta. Till sist, but till fast IP-address om så önskas.
Starta om (igen)

Starta en konsol (root)

apt-get install build-essential
apt-get install subversion
apt-get install libssl-dev
apt-get install gettext
apt-get install kernel-package
apt-get install g++-4.2

cd /usr/src
svn co http://opensvn.csie.org/opensascng/open-sasc-ng

Dax för lite patchning (i denna guide har vi checka ut rev 77 av open-sasc-ng)

cd /usr/src/open-sasc-ng

wget --no-check-certificate https://opensvn.csie.org/traccgi/opensascng/raw-attachment/ti...

wget --no-check-certificate https://opensvn.csie.org/traccgi/opensascng/raw-attachment/wi...

patch -p0 -F99 < completepatch.diff
patch -R -p0 -F99 < opensascng-kernel-2.6.31-pawel5870.patch

En sista patch måste vi göra manuellt (ticket #46)

vi /usr/src/open-sasc-ng/dvbloopback/module/dvblb_proc.c

Leta reda på raden:
lbdev->procfile->owner = THIS_MODULE;

och kommentera bort den så här:
//lbdev->procfile->owner = THIS_MODULE;

Gör samma sak med:
dvblb->procdir->owner = THIS_MODULE;
dvblb->procfile->owner = THIS_MODULE;
procdir->owner = THIS_MODULE;

Hint: Raderna 175, 187, 196 och 221

Förbered kompilering:
./configure –-cxx=/usr/bin/g++-4.2

Kompilera loopback-modulen (den fejkade DVB-adaptern)
make module

Nu kan du ladda loopback-modulen med följande kommando:
insmod /usr/src/open-sasc-ng/dvbloopback.ko num_adapters=2

Note: Jag har ett WinTV-Nova-T-500 kort med dubbla mottagare, så därför laddar jag 2 st adaptrar

Kolla att modulen laddades korrekt med följande kommando:

dmesg

Så här ser det ut för mig:
[ 2769.026728] DVB: registering new adapter (DVB-LOOPBACK)
[ 2769.027132] DVB: registering new adapter (DVB-LOOPBACK)

Note:
Kommandot ”dmesg” kan användas för att se att loopback-modulen har laddats.
Kommandot ”insmod” används för att ladda loopback-modulen.
Kommandor ”rmmod dvbloopback.ko” används för att ta bort modulen

Nu är det dags att kompilera själva sasc. Kör följande kommando:

make

Nu återstår det bara att skapa lite kataloger och filer. Kör följande:

mkdir /usr/src/open-sasc-ng/sc_files
cd /usr/src/open-sasc-ng/sc_files/
touch cardclient.conf
touch ca.cache
chmod 777 *

Redigera cardclient.conf enligt:
newcamd:hostname:port:emm/caid/mask:username:password:cfgKey
Exempel:
newcamd:127.0.0.1:15050:1/0500/ffff:mythtv:mythtv:0102030405060708091011121314

Dags att starta SASC:

cd /usr/src/open-sasc-ng/
/usr/src/open-sasc-ng/sasc-ng -j 0:2 -j 1:3

Note: Detta startar sasc-processen. Eftersom detta exemplet bygger på 2st DVB-adaptrar så gäller att 0 och 1 är fysiska adaptrar, 2 och 3 blir dom virtuella.

Ovanstående ”låser” terminalen i open-sasc-ng, men det är ett bra tillfälle att kolla att grejjerna fungerar. Tänk på att man måste stå i /usr/src/open-sasc-ng/ för att det skall fungera.

Startup-script (bara exempel, men bra att utgå ifrån
----------------------------------------------------------------------
Note: Dessa skrip kanske inte fungerar helt och hållet – kör manuellt i sådana fall... och jag ber som hemskt mycket om ursäkt om dom ser för &%¤# ut, men indentering verkar inte fungera i detta forum

/etc/init.d/sascd
--------------------
#!/bin/bash
# Startup script for sascd
# chkconfig: - 70 15
# description: sascd.
# processname:
# pidfile:
# config:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME="runmulti-sasc-ng"
DESC="OPENSASC-NG"
DAEMON="sasc-ng"
TIMEOUT=10
ENABLED=1
test "$ENABLED" != "0" || exit 0
rm -f /tmp/SASC_COMPLETE
LOOP=0
case "$1" in
start)
if ! ps -C sasc-ng > /dev/null 2>&1; then
echo -e "Starting $DESC: $NAME. \n"
runmulti-sasc-ng &
until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do
sleep 1
LOOP=$((LOOP+1))
done
if [ $LOOP -eq $TIMEOUT ]; then
echo -e "OPENSASC-NG has timed out in $TIMEOUT seconds. OPENSASC-NG will not start. \n"
exit 1
fi
echo -e "OPENSASC-NG startup time was $LOOP second(s). \n"
echo -e "OPENSASC-NG startup sequence completed. \n"
else
echo -e "OPENSASC-NG is already running. \n"
fi
;;
stop)
if ps -C sasc-ng > /dev/null 2>&1; then
echo -e "Stopping $DESC: $NAME. \n"
sleep 3
killall -q -TERM $NAME
killall -q -TERM $DAEMON
sleep 5
rmmod dvbloopback.ko
else
echo -e "OPENSASC-NG is not running. \n"
fi
;;
restart|force-reload)
if ps -C sasc-ng > /dev/null 2>&1; then
echo -e "Restarting $DESC: $NAME. \n"
sleep 3
killall -q -TERM $NAME
killall -q -TERM $DAEMON
sleep 5
rmmod dvbloopback.ko
sleep 2
runmulti-sasc-ng &
until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do
sleep 1
LOOP=$((LOOP+1))
done
if [ $LOOP -eq $TIMEOUT ]; then
echo -e "SASC-NG has timed out in $TIMEOUT seconds. SASC-NG will not start. \n"
exit 1
fi
echo -e "OPENSASC-NG startup time was $LOOP second(s). \n"
echo -e "OPENSASC-NG startup sequence completed. \n"
else
echo -e "OPENSASC-NG is not running. \n"
fi
;;
*)
N=/etc/init.d/$NAME
echo "Use: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
rm -f /tmp/SASC_COMPLETE
exit 0

/usr/local/sbin/runmulti-sasc-ng
----------------------------------------
#!/bin/bash
# Script to automate running of OPENSASC-NG and Drivers
# Updated 080712
# Driver directory
DRIVERDIR="/usr/src/open-sasc-ng/"
# Path to SASC-NG binary
SASCPRG="/usr/src/open-sasc-ng/sasc-ng"
# Number of DVB Cards you have in your system dedicated to SASC-NG
ADAPTERS="2"
# Startup Options passed to SASC-NG._ Adjust according to your devices.
# This connects tuner 1 and 2 with virtual tuner 3 and 4
# to Option1 and Option2.
OPTION="-j 0:2 -j 1:3"
MAXTRIES=10
# Minimum runtime required (in seconds) for SASC-NG to continue restart attempts
MINRUN=20
## End Configuration Section ##
SASCCMD="$SASCPRG $OPTION"_
KILL="/usr/bin/killall -q -TERM"
# Detect whether the DVBLooopback driver is already loaded
# and return 0 if it *is* loaded, 1 if not:
function DriverLoaded()
{
grep -qse dvbloopback /proc/modules
}
# Load all DVBLoopback driver modules needed for your hardware:
function LoadDriver()
{
insmod $DRIVERDIR/dvbloopback.ko num_adapters=$ADAPTERS
sleep 5
}
# Unload all DVBLoopback driver modules loaded in LoadDriver():
function UnloadDriver()
{
rmmod dvbloopback.ko
}
# Load driver if it hasn't been loaded already:
if ! DriverLoaded; then
LoadDriver
fi
LASTRESTART=$(date +%s)
LOOPCOUNT=0
while (true) do
if [ $LOOPCOUNT -le $MAXTRIES ] || [ $MAXTRIES -eq 0 ] ; then
cd /usr/src/open-sasc-ng/
eval "screen -D -m -S sasc-ng1 $SASCCMD &"
# Wait for SASC-NG to initialize then do rest
#sleep 10
touch /tmp/SASC_COMPLETE
else
$KILL runmulti-sasc-ng
fi

# Remember PID of SASC-NG processes
PID=$!
# Wait for SASC-NG to end or signal to arrive
wait $PID
# Remember return value of SASC-NG
RET=$?
if test $RET -eq 0 -o $RET -eq 2; then exit; fi
TIMEOFDEATH=$(date +%s)
RUNTIME=$((TIMEOFDEATH - LASTRESTART))
if [ $TIMEOFDEATH -le $(($LASTRESTART + $MINRUN)) ] ; then
echo "`date` OPENSASC-NG crashed in $RUNTIME seconds. "
$KILL runsasc
fi
echo "`date` Reloading DVBLoopback drivers"
$KILL sasc-ng
#sleep 10
UnloadDriver
LoadDriver
LASTRESTART=$(date +%s)
LOOPCOUNT=$((LOOPCOUNT+1))
echo "`date` Restarting SASC-NG $LOOPCOUNT time(s). Maximum retries set to $MAXTRIES"
done

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

Kör följande kommandon:

chmod 755 /usr/local/sbin/runmulti-sasc-ng
chmod 755 /etc/init.d/sascd
_
Testa nu genom att köra:
/etc/init.d/sascd start
dmesg (kolla)
/etc/init.d/sascd stop
dmesg (kolla)
osv...

Tänk på att mythtv-backend alltid måste starta efter sascd, så med andra ord kör:
/etc/init.d/sascd start
/etc/init.d/mythtv-backend restart

Mycket nöje...
/Kalle