Wiki

Outils pour utilisateurs

Outils du site


sasc-ng

Installation de sasc-ng

FS#8

sasc-ng n'existe plus, il a été remplacé par ffdecsawrapper voir cette discussion

ATTENTION Consulter impérativement ce post qui fait le point des différentes évolutions de sasc avant de vous lancer dans l'installation.

Introduction

SASC-NG est ce que l'on appelle un “softcam”. C'est un des logiciels nécessaire pour décoder les flux cryptés du satellite ou de la TNT. Il peut être utilisé dans de nombreux cas:

  • Quand votre carte DVB n'a pas de CI (commun interface)
  • Quand vous ne voulez pas acheter un CI et un CAM (car c'est un peu cher)
  • Quand vous voulez partager votre carte d'abonnement sur plusieurs cartes d'acquisition (cela peut violer les clauses contractuelles de votre abonnement, mais n'est pas illégal)

Attention, avec le noyau 2.6.38 , sasc-ng ne fonctionne plus du fait du passage a la version V4L2 Donc mauvaise idée d'upgrader si vous utilisez sasc-ng (merci à FabriceMG pour cette info

Le projet Opensasc est arrêté depuis longtemps maintenant. Il a été repris par vdr-sasc-ng

Préparation

Faites l'installation sous root, ce sera plus facile.

Vérifier les dépendances

Pour compiler, vous aurez besoin des paquets suivants:

  • les sources de votre noyau
  • les paquets mercurial openssl gettext libssl-dev screen wget gcc gcc++

et peut être d'autres

Installer sasc-ng

Récupérer les sources sasc-ng

cd /usr/local/src
 hg clone http://85.17.209.13:6100/sc
cd /usr/local/src/sc
chmod +x contrib/sasc-ng/configure
chmod +x contrib/sasc-ng/dvbloopback/module/config_dvb.pl

Configurer et compiler

cd /usr/local/src/sc/contrib/sasc-ng/
./configure 
make
make module

NOTE1

à l'étape “configure, vous pouvez être amené à indiquer le chemin vers les sources de votre driver si vous l'avez compilé vous même

NOTE 2

A l'étape “make” vous aurez peut être l'erreur indiquant qu'il ne trouve pas le fichier linux/compiler.h. Il suffit de le créer:

cd /usr/src/v4l-dvb/linux/include/linux
sudo touch compiler.h

Le chemin est à adapter en fonction de votre driver de carte tuner si vous l'avez compilé vous même.

Le résultat de la compilation est uniquement utilisable pour ce noyau. Si vous changez de noyau, vous devrez refaire la compilation de sasc.

Installer le module dvbloopback

Il suffit de placer le module dans l'arborescence du noyau pour faciliter son lancement.

rm /lib/modules/`uname -r`/misc/dvbloopback.ko
cd /usr/local/src/sc/contrib/sasc-ng/
cp sasc-ng /usr/bin
cp /usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/* /usr/lib/
mkdir /lib/modules/`uname -r`/misc
/usr/bin/install dvbloopback.ko /lib/modules/`uname -r`/misc/
depmod

monter le module

Comme vous avez placé le module en bonne position, vous pouvez utilisez la commande “modprobe”:

modprobe dvbloopback

Si vous avez plusieurs cartes DVB à décoder, vous devez spécifier le nombre de tuner (adapter) virtuel que vous souhaitez. Si vous voulez 3 tuners virtuels:

modprobe dvbloopback num_adapters=3

Charger le module au boot

Il n'est pas nécessaire de modifier le fichier /etc/modules pour monter le module au démarrage. Le lancement de celui-ci est inclus dans le script de démarrage de sasc que vous trouverez plus loin.

Démarrer manuellement sasc-ng

Pour démarrer sasc-ng avec un CAM:

LD_LIBRARY_PATH=/usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/ ./sasc-ng -j 0:1 --cam-budget

Pour l'utiliser un CAM avec MythTV:

LD_LIBRARY_PATH=/usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/ ./sasc-ng -j 0:1 --cam-budget --sid-allpid --sid-nocache

Pour utiliser sasc-ng avec newcs, vous devrez mettre en place un fichier de configuration (voir le chapitre “fichiers aditionnels” et consulter le wiki newcs) puis lancer.

LD_LIBRARY_PATH=/usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/ ./sasc-ng -j 0:1 

Attention : il se peut que vous soyez obligé de préciser l'emplacement des fichiers de configuration avec l'option –cam-dir.

L'option –sid-allpid permet de mettre à jour toutes les clefs de décryptage pour toutes les chaînes à chaque connexion de sasc.

L'option –buffer 8M permet de modifier la taille du cache de sasc, ce sera nécessaire si vous avez plusieurs tuners virtuels qui utilisent simultanément sasc (il semble inutile de monter au delà de 8 Mega-octets)

Automatisation de SASC

modifier les fichiers et répertoires

Vous devez créer votre propre répertoire pour stocker vos fichiers de configuration (cardclient.conf) et créer un lien sasc-ng dans le répertoire des exécutables.

mkdir /etc/camfiles
cd /usr/local/src/sc/contrib/sasc-ng/
mv sc_files/* /etc/camfiles/
cp sasc-ng /usr/bin/

Vous trouverez des exemples de fichiers de configuration dans le répertoire /usr/local/src/opensasc/sc/PLUGINS/src/sc-src/examples.

Puis copier les librairies au bon endroit:

cp /usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/* /usr/lib/

Script de lancement de SASC

Nous allons maintenant éditer les scripts de lancement de SASC. Ce script installe le module dvbloopback et lance la commande sasc-ng.

Créer /usr/local/bin/runsasc

et copier ce script (vous pouvez ignorer la variable DRIVERDIR dans le script. Puisque vous avez copier le module dans l'arborescence du noyau, vous devez juste faire “modprobe dvbloopback” sans préciser le chemin.) Faites attention au nombre de tuner (adapter), que vous souhaitez charger! Il est réglé sur 3 et l'option -j a été personnalisée.

#!/bin/bash 

# Script pour lancer SASC-NG et le module dvbloopback 

# Répertoire de stockage du driver  
DRIVERDIR="" 
# Commande de lancement de sasc 
#(doit inclure le chemin si sasc-ng n'est pas dans /usr/bin ou /usr/local/bin) 
SASCPRG="/usr/local/src/sc/contrib/sasc-ng" 
# Emplacement des fichiers de configuration (/sc_files par défaut)
CAMDIR="" 
# Nombre de cartes DVB qui seront crées et utilisées avec sasc-ng  
ADAPTERS="3" 
# Options à passer à SASC-NG.  À ajuster en fonction de votre marériel. 
OPTIONS="-j 0:3 -j 1:4 -j 2:5 --cam-budget --sid-allpid --sid-nocache --cam-dir" 
# Nombre de tentatives de démarrage de sasc-ng avant de prononcer le "non-démarrage" de celui-ci (mettre à 0 pour relancer sans limitation) 
MAXTRIES=10 
# Temps minimum en secondes entre 2 relances de sasc-ng
MINRUN=20

## Fin de section de configuration ## 

SASCCMD="$SASCPRG $OPTIONS $CAMDIR" 
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() 
{ 
  modprobe dvbloopback num_adapters=$ADAPTERS 
  sleep 5 
} 

# Unload all DVBLoopback driver modules loaded in LoadDriver(): 
function UnloadDriver() 
{ 
  rmmod dvbloopback
} 

# 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 
        eval "screen -D -m -S sasc-ng $SASCCMD &" 
        # Wait for SASC-NG to initialize then do rest 
        sleep 10 
        touch /tmp/SASC_COMPLETE 
      else 
        $KILL runsasc 
      fi 
      # Remember PID of SASC-NG process 
      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` SASC-NG crashed in $RUNTIME seconds. Minimum required runtime for SASC-NG is $MINRUN seconds. Killing runsasc process..." 
        $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

Modifier les permissions:

chmod 755 /usr/local/bin/runsasc
chmod +x /usr/local/bin/runsasc

Script de lancement au démarrage

Nous allons créer un script pour lancer SASC au démarrage de la machine.

Créer /etc/init.d/sascd

Et copier ces lignes:

#! /bin/bash 
# 
# sasc start-stop script 
# 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
NAME="runsasc" 
DESC="SASC-NG" 
DAEMON="sasc-ng" 

ENABLED=0 
test -f /etc/default/sascc && . /etc/default/sascc 
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" 
         runsasc & 
         until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do 
           sleep 1 
           LOOP=$((LOOP+1)) 
         done 
         if [ $LOOP -eq $TIMEOUT ]; then 
           echo -e "SASC-NG startup sequence has timed out in $TIMEOUT seconds. SASC-NG will not start. n" 
           exit 1 
         fi 
         echo -e "SASC-NG startup time was $LOOP second(s). n" 
         echo -e "SASC-NG startup sequence completed. n" 
         else 
         echo -e "SASC-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 "SASC-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 
         runsasc & 
         until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do 
           sleep 1 
           LOOP=$((LOOP+1)) 
         done 
         if [ $LOOP -eq $TIMEOUT ]; then 
           echo -e "SASC-NG startup sequence has timed out in $TIMEOUT seconds. SASC-NG will not start. n" 
           exit 1 
         fi 
         echo -e "SASC-NG startup time was $LOOP second(s). n" 
         echo -e "SASC-NG startup sequence completed. n" 
         else 
         echo -e "SASC-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

Changer les permissions et le niveau de lancement(runlevels):

chmod +x /etc/init.d/sascd
cd /etc/rc5.d
ln -s /etc/init.d/sascd
mv sascd S99sascd

Vous avez besoin de créer un fichier de configuration:

Créer /etc/default/sascc

Et ajouter ceci:

# /etc/default/sascc 
# Fichier de configuration de sascd

# Mettre à 1 pour valider le lancement de sascd 
ENABLED=1 

# DVBLoopback Device creation timeout (in seconds) 
TIMEOUT=60

Fichiers Additionels

Si vous souhaitez utiliser NewCS avec une carte d'abonnement, vous devez créer ce fichier: /etc/camfiles/cardclient.conf et copier la ligne suivante qui pourra être personnaliser si nécssaire

#
# Comment lines can start with # or ;
#
# every client line starts with the client name, followed by some arguments:
# 'hostname' is the name of the server
# 'port'     is the port on the server
# 'emm'      is a flag to allow EMM transfers to the server
#            (0=disabled 1=enabled)
# 'caid'     (optional) caid on which this client should work
# 'mask'     (optional) mask for caid e.g. caid=1700 mask=FF00 would allow
#            anything between 1700 & 17FF.
#            Default is 1700 & FF00. If only caid is given mask is FFFF.
#            You may give multiple caid/mask values comma separated
#            (e.g. 1702,1722,0d0c/ff00).
# 'username' is the login username
# 'password' is the login password
#
# newcamd client
# 'cfgkey' is the config key (28bytes)
#newcamd:hostname:port:emm/caid/mask:username:password:cfgKey
newcamd:127.0.0.1:15050:1/0500/FFFF:dummy:dummy:0102030405060708091011121314
#

Références

Bugs identifiés

Avec le noyau 2.6.32, j'ai dû appliquer cette correction pour compiler sasc

change the line 11 in /usr/src/linux/include/asm-generic/int-ll64.h,
from:
#include <asm/bitsperlong.h>
to:
#include <asm-generic/bitsperlong.h>

Bonus

Un petit script pour connaitre le nom des chaînes décodées (merci à FabriceMG)

#!/bin/bash

for i in `grep V1 /usr/local/src/sc/contrib/sasc-ng/sc_files/ecm.cache |awk -F":" '{print $2}'|sort|uniq`;
        do
        c=`mysql mythconverg -r -s --execute "select name from channel where chanid=$i"`;
        h=`printf "%x" $i`
        echo "[$h] $i => $c";
done

Rédigé par gilles74 le 3/1/2009/
Mis à jour par Gilles74 le 28/2/2010 pour tenir compte de la disparition d'opensasc
Ajout des options sid-allpid et buffer le 21/3/2010

sasc-ng.txt · Dernière modification: 04/09/2013 par gilles74