Note: this page may be very out of date.

This article describes how to build and configure oscam.

Note that this oscam configuration is configured to work with Ziggo as provider.
It might work with other providers, but that needs to be confirmed.

Make sure you have cmake and subversion installed, these are required for checking out and building oscam.

Create a user for oscam and add it to the uucp group

useradd oscam -s /sbin/nologin -m -d /opt/oscam/
gpasswd -a oscam uucp

create the required directories

mkdir /opt/oscam/src/

Now we need to checkout the oscam source code using SVN

svn co http://streamboard.gmc.to/svn/oscam /opt/oscam/src/

Now we need to configure oscam

cd /opt/oscam/src/trunk
./config.sh

This is my configuration

Addons:
  [*] WEBIF
  [*] HAVE_DVBAPI
  [*] IRDETO_GUESSING
  [*] CS_ANTICASC
  [*] WITH_DEBUG
  [ ] CS_WITH_DOUBLECHECK
  [*] CS_LED
  [*] CS_LOGHISTORY

Protocols:
  [*] MODULE_CAMD33
  [*] MODULE_CAMD35
  [*] MODULE_CAMD35_TCP
  [*] MODULE_NEWCAMD
  [*] MODULE_CCCAM
  [*] MODULE_RADEGAST
  [*] MODULE_SERIAL
  [*] MODULE_MONITOR
  [*] MODULE_CONSTCW

Reader:
  [*] READER_NAGRA
  [*] READER_IRDETO
  [*] READER_CONAX
  [*] READER_CRYPTWORKS
  [*] READER_SECA
  [*] READER_VIACCESS
  [*] READER_VIDEOGARD
  [*] READER_DRE
  [*] READER_TONGFANG

Now compile oscam

make

After oscam is built you should have a file like 'oscam-1.00-unstable_svnxxxx-i686-pc-linux' in /opt/oscam/src/Distribution/.
We need to copy this file to an alternate location

cd /opt/oscam/src/Distribution/
cp ./oscam-* /opt/oscam/oscam.bin

Ok, the binaries are installed :)
Now we need to configure oscam first create the configuration directories

mkdir -p /opt/oscam/etc/
mkdir -p /opt/oscam/etc/cw/

Note: /opt/oscam/etc/cw/ is used for caching keys.

Now, create oscam.conf in /opt/oscam/etc/oscam.conf

Note: replace example CAID with your own CAID (e.g. 0602)

[global]
usrfile                       = /opt/oscam/oscamuser.log
logfile                       = /opt/oscam/oscam.log
cwlogdir                      = /opt/oscam/etc/cw
disablelog                    = 0
disableuserfile               = 0
usrfileflag                   = 0
clienttimeout                 = 2000
fallbacktimeout               = 1500
clientmaxidle                 = 120
failbantime                   = 0
bindwait                      = 120
netprio                       = 0
clientdyndns                  = 0
resolvedelay                  = 2
unlockparental                = 0
nice                          = -1
serialreadertimeout           = 1000
maxlogsize                    = 10
waitforcards                  = 1
preferlocalcards              = 1
saveinithistory               = 0
readerrestartseconds          = 5
lb_mode                       = 0
lb_save                       = 0
lb_nbest_readers              = 1
lb_nfb_readers                = 1
lb_min_ecmcount               = 5
lb_max_ecmcount               = 500
lb_reopen_seconds             = 900
resolvegethostbyname          = 0

[newcamd]
port                          = [email protected]:000000
key                           = 0102030405060708091011121314
allowed                       =
keepalive                     = 1
mgclient                      = 0

[webif]
httpport                      = 15080
httpuser                      = username
httppwd                       = password
httprefresh                   = 0
httpallowed                   = 127.0.0.1,YourIpRange
httphideidleclients           = 0
httpreadonly                  = 0

Now create oscam.server in /opt/oscam/etc/oscam.server

[reader]
Label = Ziggo
Device = /dev/ttyUSB0
mhz = 600
cardmhz = 600
Protocol = mouse
EMMCache = 1,3,2
Group = 1
caid = 0604:0000
rsakey = 3C8633AAC0D367533DEC7BB2EEEDEB8CA3ADA52E58B99BB34672783277A1DAAC3B6106AD0909774E031B2A6E30195B437683AD0FC599B87D08CEA47BE1B6C76A
boxkey = 1122334455667788
fallback = 0

Now create oscam.user in /opt/oscam/etc/oscam.user

[account]
user = tvheadend
pwd = tvheadend
uniq = 0
group = 1
ident = 0604:000000
caid = 0604
au = Ziggo

Ok, if everything is configured correctly we can test the oscam installation

/opt/oscam/oscam.bin -c /opt/oscam/etc/& touch /opt/oscam/oscam.log ; tail -f /opt/oscam/oscam.log ; killall oscam.bin

this should create some output like this

-------------------------------------------------------------------------------
>> OSCam <<  cardserver started at Thu Oct 28 11:06:01 2010
-------------------------------------------------------------------------------
2010/10/28 11:06:01 B73DF6C0 s version=1.00-unstable_svn, build #, system=i686-pc-linux, nice=-1
2010/10/28 11:06:01 B73DF6C0 s client max. idle=120 sec, debug level=0
2010/10/28 11:06:01 B73DF6C0 s max. logsize=10 Kb
2010/10/28 11:06:01 B73DF6C0 s client timeout=2000 ms, fallback timeout=1500 ms, cache delay=0 ms
2010/10/28 11:06:01 B73DF6C0 s auth size=4788
2010/10/28 11:06:01 B73DF6C0 s Cannot open file "/opt/oscam/etc//oscam.services" (errno=2)
2010/10/28 11:06:01 B73DF6C0 s userdb reloaded: 0 accounts freed, 2 accounts loaded, 0 expired, 0 disabled
2010/10/28 11:06:01 B73DF6C0 s signal handling initialized (type=sysv)
2010/10/28 11:06:01 B73DF6C0 s can't open file "/opt/oscam/etc//oscam.srvid" (err=2), no service-id's loaded
2010/10/28 11:06:01 B73DF6C0 s can't open file "/opt/oscam/etc//oscam.tiers" (err=2), no tier-id's loaded
2010/10/28 11:06:01 B73DF6C0 s can't open file "/opt/oscam/etc//oscam.provid" (err=2), no provids's loaded
2010/10/28 11:06:01 B73DF6C0 s can't open file "/opt/oscam/etc//oscam.ird" (errno=2) irdeto guessing not loaded
2010/10/28 11:06:01 B73DF6C0 s monitor: initialized (fd=7, port=988)
2010/10/28 11:06:01 B73DF6C0 s camd33: disabled
2010/10/28 11:06:01 B73DF6C0 s camd35: disabled
2010/10/28 11:06:01 B73DF6C0 s cs378x: disabled
2010/10/28 11:06:01 B73DF6C0 s newcamd: initialized (fd=8, port=15050, crypted)
2010/10/28 11:06:01 B73DF6C0 s CAID: 0604
2010/10/28 11:06:01 B73DF6C0 s provid #0: 000000
2010/10/28 11:06:01 B73DF6C0 s cccam: disabled
2010/10/28 11:06:01 B73DF6C0 s radegast: disabled
2010/10/28 11:06:01 B73DF6C0 s http thread started
2010/10/28 11:06:01 B73DF6C0 s creating thread for device /dev/ttyUSB0 slot 0
2010/10/28 11:06:01 B73DF6C0 s waiting for local card init
2010/10/28 11:06:01 B7375280 r reader thread started (thread=B7375280, device=/dev/ttyUSB0, detect=cd, mhz=600, cardmhz=600)
2010/10/28 11:06:01 B76EA280 h HTTP Server listening on port 15080
2010/10/28 11:06:04 B7375280 r card detected
2010/10/28 11:06:08 B7375280 r ATR: 3B 9F 21 0E 49 52 44 45 54 4F 20 41 43 53 20 56 35 2E 37 9A
2010/10/28 11:06:09 B7375280 r Maximum frequency for this card is formally 6 Mhz, clocking it to 6.00 Mhz
2010/10/28 11:06:10 B7375280 r detect irdeto card
2010/10/28 11:06:10 B7375280 r caid: 0604, acs: 6.08, country code: NLD
2010/10/28 11:06:10 B7375280 r providers: 4, ascii serial: xxxxxxxxxxx, hex serial: XXXXXX, hex base: XX
2010/10/28 11:06:13 B7375280 r active providers: 4 (xxxxxx,xxxxxx,xxxxxx,xxxxxx)
2010/10/28 11:06:13 B7375280 r found cardsystem
2010/10/28 11:06:14 B7375280 r entitlements for provider: 1, id: XXXXXX
2010/10/28 11:06:14 B7375280 r chid: 0001, date: 2004/08/16 - 2004/09/15
2010/10/28 11:06:14 B7375280 r chid: 000B, date: 2004/08/16 - 2004/09/15
2010/10/28 11:06:14 B7375280 r chid: FFE0, date: 2004/08/16 - 2004/08/20
2010/10/28 11:06:14 B7375280 r chid: 0384, date: 2004/08/16 - 2004/09/15
2010/10/28 11:06:14 B7375280 r chid: 000D, date: 2004/08/16 - 2004/09/15
2010/10/28 11:06:19 B7375280 r [irdeto-reader] ready for requests
2010/10/28 11:06:19 B73DF6C0 s init for all local cards done
2010/10/28 11:06:19 B73DF6C0 s anti cascading disabled
2010/10/28 11:06:19 B736E280 c client connected to 15050 port
2010/10/28 11:06:19 B7367280 c client connected to 15050 port
2010/10/28 11:06:19 B7367280 c Connection closed to client
2010/10/28 11:06:19 B736E280 c Connection closed to client
2010/10/28 11:06:19 B7367280 c thread B7367280 ended!
2010/10/28 11:06:19 B736E280 c thread B736E280 ended!

Oscam is now running on serverip:15050.
Open your tvheadend web interface.
Go to Configuration and click Code Word Client
Click Add Entry
Doubleclick 'hostname' type your server ip or hostname that is runnin oscam.
Doubleclick 'port' type the port number (if you made no changes to config files it should be 15050).
Doubleclick 'username' type the username as configured in oscam.user.
Doubleclick 'password' type the password as configured in oscam.user.
Doubleclick 'DES key' here you can insert your DES key. If you haven't changed it in oscam.conf (you should!) then this should be: 01:02:03:04:05:06:07:08:09:10:11:12:13:14
Check 'Update Card'
Now check Enabled and click 'Save Changes'

When you click Save Changes you will see something like this in the system logs

Mar 24 20:55:38 cwc: 10.2.0.2: Connected as user 0x0x to a Irdeto-card [0x0604 : xx.xx.xx.xx.xx.xx.xx.xx] with 5 providers
Mar 24 20:55:38 cwc: 10.2.0.2: irdeto card
Mar 24 20:55:38 cwc: 10.2.0.2: Provider ID #1: 0x000000 xx.xx.xx.xx.xx.xx.xx.xx
Mar 24 20:55:38 cwc: 10.2.0.2: Provider ID #2: 0x000001 xx.xx.xx.xx.xx.xx.xx.xx
Mar 24 20:55:38 cwc: 10.2.0.2: Provider ID #3: 0x000002 xx.xx.xx.xx.xx.xx.xx.xx
Mar 24 20:55:38 cwc: 10.2.0.2: Provider ID #4: 0x000003 xx.xx.xx.xx.xx.xx.xx.xx
Mar 24 20:55:38 cwc: 10.2.0.2: Provider ID #5: 0x000004 xx.xx.xx.xx.xx.xx.xx.xx
Mar 24 20:55:38 cwc: 10.2.0.2: Will forward EMMs

Ok tvheadend is now connected to oscam and is able to descramble channels that your card gives you access to.
Now to kill oscam press ctrl+c in the console.

Now you need to change the owner and group of /opt/oscam to oscam (because you should run oscam as a unprivileged user)

chown -R oscam:oscam /opt/oscam

For Gentoo users i have an init script

nano -w /etc/init.d/oscam

#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header:

depend() {
        use net
}

start() {
        ebegin "Starting oscam" 
        start-stop-daemon \
                --start \
                --user $OSCAMUSER \
                --name $OSCAMNAME \
                --exec $OSCAMBIN -- $OSCAMOPTS
        eend $?
}

stop() {
        ebegin "Stopping oscam" 
        start-stop-daemon --stop --signal 2 --name $OSCAMNAME
        eend $?
}

nano -w /etc/conf.d/oscam

# /etc/conf.d/oscam: config file for /etc/init.d/oscam

OSCAMOPTS="-b -c /opt/oscam/etc/" 
OSCAMUSER="oscam" 
OSCAMNAME="oscam.bin" 
OSCAMBIN="/opt/oscam/${OSCAMNAME}"