NOTE: From the start of 2015 Eumetcast doesn't use DVB-S anymore. This means that next information is partly out-dated, especially the receiver part.

Choosing the desired channels as described below is still possible, but this page needs an update.

Installing Eumetcast on Linux Fedora-8, kernel 2.6

Introduction.

This page describes the commands needed to run Eumetcast on Linux kernel 2.6, and some problems I faced.
Note that most of installation is handled by scripts on the Eumetsat CD. This CD also contains almost all needed tools with the right version, and description / trouble shooting guide etc. Use this page for additional information, and to 'play' around.

Special thanks to Ernst Lobsiger for his numerous suggestions to solve the problems I had initially.

Other install descriptions can be found here:


Contents


1. Overview.

Used hardware and software

Overview of all used Linux-tools

commandfunctionexamplelocation command Fedora
szaptune dvb-receiver; keep tuner activeszap -c /etc/channels.conf -n 1/usr/bin
dvbnetFiltering packetsdvbnet -a 0 -p 100/usr/bin
ifconfigPID routingifconfig dvb0_0 192.168.240.230/sbin
multicast routingifconfig dummy0 192.168.238.238 multicast
smcroutemulticast routingsmcroute -a dvb0_0 192.168.1.1 224.223.222.223/usr/local/sbin

Scripts and tools supplied by Eumetsat:

commandfunctionexamplelocation
etokendscript; start and stop etokenetokend start$HOME/bin
etokendexecutablestart via script/usr/local/sbin/etokend
pcscdscript; start and stop pcscdpcscd start$HOME/bin
pcscdexecutablestart via script/usr/local/sbin/pcscd
tellicast-clientstart and stop Tellicast,tellicast-client start$HOME/bin
tc-recvactual Tellicast executableexecuted via Tellicast/usr/local/bin/tc-recv
Note: etokend needs compat-libstdc. See readme file in the EKU_software part of the Eumetsat-CD; compat-libstdc++-296-2.96-132.fc4.i386.rpm or .deb files are available on this CD. Without this lib installed etokend will crash.

Files for Tellicast, supplied by Eumetsat:

filefunctionlocationto edit by user for:
recv.iniInit. for Tellicast/etcuser_name
password
recv-channels.inidefinitions channels to receive/etcenable channels; see ecast_cfg
location received files

Tool to monitor receiver, select channels, start/stop Tellicast

ecast_cfg

Channel selection can be done by this tool instead of by Tellicast. For this, enable all channels in recv-channels.ini.


back

2. Receiver: Opera.

Opera is a USB TV DVB-receiver. There are more receivers like this, e.g. DVBWorld. They look very much the same, and can be used for the same purpose. Installation, however, will differ from the Opera.

2.1. Firmware

The Opera receiver needs firmware, to be loaded at power-up. This firmware is present on the Opera installation CD, in subdir. 'Drivers'; they are named:
  • 2830SCap2.sys
  • 2830SLoad2.sys
    The files need to be translated so they can be handled (uploaded at power-up) by Linux:

  • dvb-usb-opera-01.fw
  • dvb-usb-opera1-fpga-01.fw

    If you want to do the translation yourself: A Perl-script is available at: get_dvb_firmware
    There is no easy download-button on this page (at least, I couldn't find it), but copy-paste will do:

    Now run the script:
    $ ./get_dvb_firmware opera1

    The 2 files are now translated into 2 new files:

    Copy these files into:
    /lib/firmware

    (For more information about this firmware see opera-firmware)


    2.2. Activate and tune the receiver.

    Needed: First plug in the receiver. This will initialize:
  • /dev/dvb/adapter0/dvr0
  • /dev/dvb/adapter0/demux0
  • /dev/dvb/adapter0/net0
  • /dev/dvb/adapter0/frontend0

    Initializing and tuning receiver is done by szap using the channels.conf file:

    $ szap -c /etc/channels.conf -n 1 > /dev/null &

    After this szap will stay running in background. This is necessary to keep de tuner active. Stopping szap will cause the dvb-driver to put the tuner in power-off state. For the rest szap doesn't do anything (after tuning the receiver).
    Command to monitor signal strength etc.:

    $ femon

    This will show next info (about 1 line per sec)

    
    status 1f | signal dd32 | snr a122 | ber 000000ca | unc 00000000 | FE_HAS_LOCK
    status 1f | signal dc11 | snr a2de | ber 0000008d | unc 00000000 | FE_HAS_LOCK
    status 1f | signal dad7 | snr a4c7 | ber 00000089 | unc 00000000 | FE_HAS_LOCK
    ...
    
    Note that these numbers should change a bit all the time. If all numbers are fixed then there is no connection to the receiver, and the output of femon is invalid!
    Stop femon using kill or ctrl-C, if desired.

    All received data is now entering your PC via USB. This can be checked using:
    $ dvbtraffic

    0000     2 p/s     0 kb/s     4 kbit
    0001     2 p/s     0 kb/s     4 kbit
    0010     0 p/s     0 kb/s     1 kbit
    0011     3 p/s     0 kb/s     5 kbit
    0012    16 p/s     2 kb/s    25 kbit
    005a    59 p/s    10 kb/s    90 kbit
    0064   232 p/s    42 kb/s   349 kbit
    0066  1470 p/s   269 kb/s  2210 kbit
    012c  1279 p/s   234 kb/s  1924 kbit
    012d    55 p/s    10 kb/s    84 kbit
    012e    10 p/s     1 kb/s    16 kbit
    01f4     1 p/s     0 kb/s     2 kbit
    01fe  3514 p/s   645 kb/s  5286 kbit
    01ff     0 p/s     0 kb/s     1 kbit
    ...
    2000 25293 p/s  4643 kb/s 38041 kbit
    -PID--FREQ-----BANDWIDTH-BANDWIDTH-
    
    The left column shows PID in hex:
  • PID 100 = 0x0064 (announcement channel, note the low bitrate)
  • PID 510 = 0x01fe (METOP, note the high bitrate)

    Note: More sophisticated receivers filter PIDS in hardware. This reduces data transfer over USB.

    PROBLEM: If receiver is tuned and locked but dvbtraffic doesn't show anything: See DVB problem

    Note that up to now no PID's are defined to receive. Apparently no PID-filtering is done in the receiver; all data transmitted by satellite is entering your PC. (Including non-Eumetcast data.)


    back

    3. Routing data.

    The data, now entering your PC via USB, needs to be filtered before entering Tellicast. Some of the commands may be not in the search path, so extend the search path:
    $ export PATH=$PATH:/sbin:/usr/local/sbin


    Filtering packets with a certain PID is done using dvbnet:
    $ dvbnet -a 0 -p <pidnr>
    Filtered data per PID needs then to be routed to a IP address; This is configured by ifconfig:
    $ ifconfig dvb0_<n> 192.168.240.<230+n>
    Each time dvbnet is called a new name is defined: dvb0_0, dvb0_1 etc. The last number has to be used instead of <n>

    Example:

    $ dvbnet -a 0 -p 100
    Status: device dvb0_0 for pid 100 created successfully.
    $ /sbin/ifconfig dvb0_0 192.168.240.230

    From now on incoming packages can be observed with a sniffer, e.g. wireshark. The source address is always:

  • 192.168.1.1
    The destination address depends on the channel, distributed using a certain PID. For pid 100, so dvb0_0, the destination address for the TSL Announcement Channel is:
  • 224.223.222.223
    Note that each PID may contain several channels (i.e., destination addresses)

    Before starting smcroute daemon all remaining needed PID's need to be defined:
    $ dvbnet -a 0 -p 500
    Status: device dvb0_1 for pid 500 created successfully.
    $ /sbin/ifconfig dvb0_1 192.168.240.231
    Etc.

    To check activated PID's:
    $ dvbnet -l

    
    Device: /dev/dvb/adapter0/net0
    Query DVB network interfaces:
    -----------------------------
    Found device 0: interface dvb0_0, listening on PID 100
    Found device 1: interface dvb0_1, listening on PID 500
    -----------------------------
    Found 2 interface(s).
    
    The data needs to be routed to Tellicast, which, by default, is listening to IP 192.168.238.238. (See recv.ini)
    First a common IP end address needs to be defined:
    $ ifconfig dummy0 192.168.238.238 multicast

    Now start the smcroute daemon:
    $ smcroute -d
    From now on traffic is also visible using ifconfig:
    $ ifconfig dvb0_0
    $ ifconfig dvb0_1
    Note increasing RX packets each time you run ifconfig for a certain dvb0_<n>.

    Then, data at dvb0_0 needs to be routed to this address (TSL anouncement at PID 100):
    $ smcroute -a dvb0_0 192.168.1.1 224.223.222.223 dummy0
    And the next one: (EUMETSAT Data Channel 1 at PID 500, NOAA etc.)
    $ smcroute -a dvb0_1 192.168.1.1 224.223.222.1 dummy0
    Next one is a different channel at same PID 500 (EUMETSAT Data Channel 5; MSG1 RSS):
    $ smcroute -a dvb0_1 192.168.1.1 224.223.222.29 dummy0
    etc.
    Traffic is now also visible at dummy0:
    $ ifconfig dummy0
    Note increasing TX(!) packets each time you run ifconfig for dummy0.
    Show initialized routes:
    $ ip mroute

    
    (192.168.1.1, 224.223.222.29)    Iif: dvb0_1     Oifs: dummy0 
    (192.168.1.1, 224.223.222.1)     Iif: dvb0_1     Oifs: dummy0 
    (192.168.1.1, 224.223.222.223)   Iif: dvb0_0     Oifs: dummy0 
    
    
    PROBLEM: No traffic on dummy 0. See firewallFirewall
    back

    4. Starting etoken, pcscd.

    For a first trial this part may be skipped. In recv.ini, define for user_name and key:
    user_name=eumetcastuser
    user_key=9Ecast3004us
    This will allow you to receive essential data (6-hourly MSG data and a bit more).
    back

    5. Starting Tellicast.

    After starting Tellicast you should get a webpage on:
    http://localhost:2517
    PROBLEM: No localhost:2517.
    Solve
    back

    6. Stopping.

    Before unplugging receiver or putting your PC into hibernate best is to stop all traffic:

    $ /usr/local/sbin/smcroute -k
    $ /sbin/ifconfig dummy0 down
    $ /sbin/ifconfig dvb0_0 down
    $ /sbin/ifconfig dvb0_1 down
    ...
    $ dvbnet -d 0
    $ dvbnet -d 1
    ...
    killall szap


    back

    7. Summary

    All commands to activate receiver, select 2 PID's and 3 channels, and then bring them down again:

    1. Up:
    szap -c /etc/channels.conf -n 1 > /dev/null &
    sleep 5 # wait for receiver to tune/lock

    dvbnet -a 0 -p 100
    ifconfig dvb0_0 192.168.240.230
    dvbnet -a 0 -p 500
    ifconfig dvb0_1 192.168.240.231

    ifconfig dummy0 192.168.238.238 multicast
    smcroute -d
    sleep 5 # wait for daemon to start

    smcroute -a dvb0_0 192.168.1.1 224.223.222.223 dummy0
    smcroute -a dvb0_1 192.168.1.1 224.223.222.1 dummy0
    smcroute -a dvb0_1 192.168.1.1 224.223.222.29 dummy0

    2. Check:
    femon
    dvbtraffic
    dvbnet -l
    ifconfig dvb0_0
    ifconfig dvb0_1
    ifconfig dummy0
    ip mroute

    3. Down:
    ifconfig dummy0 down
    smcroute -k # wait for daemon to stop
    sleep 5
    ifconfig dvb0_0 down
    ifconfig dvb0_1 down
    dvbnet -d 0
    dvbnet -d 1
    killall szap



    7. Debugging.

  • dvbtraffic should show received packets.
  • /usr/sbin/tcpdump -v -i dvb0_0
  • /usr/sbin/tcpdump -v -i dvb0_0
  • /usr/bin/scandvb -c
    back

    8. Trouble shooting.

    A few problems I faced are mentioned here. Please check the Eumetsat troble shooting guide for much more!

    8.1. No traffic shown with command: dvbtraffic

    Symptom:
  • Opera receiver is tuned and locked; (shown by 'femon').
  • szap is running (try 'pgrep szap')
  • However, dvbtraffic doesn't show traffic (seems to wait forever).
    Solution: Try a 'hotplug': This did help with my Opera receiver. Strangly enough no hotplug wasn't needed anymore after this one...
    Switching on power of receiver and PC at the same time may cause this problem.
    After plugging in the receiver you should have: /dev/dvb/adapter0/demux0
    /dev/dvb/adapter0/dvr0
    /dev/dvb/adapter0/frontend0
    /dev/dvb/adapter0/net0

    8.2. No traffic on dummy0.

    Note: It is possible that the very first time after setting up the route to dummy0 packets are accepted by Firewall, resulting in even a completely received and processed file by Tellicast. But after that Firewall might block traffic.
    So don't think "One file received, so Firewall cannot be the problem" (like I did)!

    ifconfig dvb0_0 shows packets on RX
    ifconfig dummy0 does NOT show packets on TX
    ip mrouts shows connection between dvb0_0 etc. and dummy0

    Firewall is blocking packets from entering dummy0. Try following:

    If this is the case then it's definitely a Firewall issue. Adapt the rules:

    8.3. Tellicast problems.

    There are a few issues which can prevent Tellicast from running. Although starting Tellicast will give a message:
  • Starting tellicast-client: [ OK ]
    and stopping will give:
  • Stopping tellicast-client: [ OK ]
    that doesn't mean Tellicast did start properly!
    A more reliable check is:
  • pgrep tc-recv
    This should show 3 processes (3 process numbers).
    Or try command:
  • tellicast-client status

    Problem 1: Message: SELinux: AVC Denial

    SELinux prevents unauthorized ethernet access by programs. For the moment you can switch SELinux to 'Permissive', which means you get still the warning message, but SELinux doesn't prevent any program from running. Now check that Tellicast really runs.

    Problem 2: Tellicast stops immediately after starting.

    pgrep tc-recv doesn't show any process.
    Check recv.log. If next message is given:
    MSG:2012-03-25 16:49:21.865:tc-recv starting... [3428]
    MSG:2012-03-25 16:49:21.865:tc-recv version is 2.4.3a (200602131458200) linux2.4_rh7.3-i86pc (Linux 2.6.23.14-107.fc8 on a 2-processor (GenuineIntel, 1 (Model 3, Stepping 4)) system)
    MSG:2012-03-25 16:49:21.865:Log level is "verbose".
    VRB:2012-03-25 16:49:21.876:Created new eToken server [3431]
    ERR:2012-03-25 16:49:21.876:Cannot resolve own ip address, please check your host name file or domain name server
    ERR:2012-03-25 16:49:21.876:An error occurred while starting tc-recv. Shutting down!
    MSG:2012-03-25 16:49:21.876:tc-recv shutting down... [3428]
    MSG:2012-03-25 16:49:22.019:tc-recv stopped [3428].
    
    Then try the command: hostname localhost.localdomain and then restart tellicast again.

    Problem 3: No localhost:2517 generated

    (in webbrowser, http://localhost:2517 shows: Unable to connect)
    pgrep tc-recv will show 2 processes instead of 3. This may be caused by an error in recv-channels.ini or recv.ini. Check recv.log, but be aware that this file is not instantly updated!

    9. Some messages to check install.

  • dmesg gives:
    opera1 1-6:1.0: no suspend for driver opera1?
    dvb-usb: Opera1 DVB-S USB2.0 successfully deinitialized and disconnected.
    dvb-usb: found a 'Opera1 DVB-S USB2.0' in cold state, will try to load a firmware
    dvb-usb: downloading firmware from file 'dvb-usb-opera-01.fw'
    dvb-usb: generic DVB-USB module successfully deinitialized and disconnected.
    opera: start downloading fpga firmware dvb-usb-opera1-fpga-01.fw
    dvb-usb: found a 'Opera1 DVB-S USB2.0' in warm state.
    DVB: registering new adapter (Opera1 DVB-S USB2.0)
    dvb-usb: MAC address: 00:e0:4f:00:39:86
    DVB: registering frontend 0 (ST STV0299 DVB-S)...
    input: IR-receiver inside an USB DVB receiver as /class/input/input12
    dvb-usb: schedule remote query interval to 200 msecs.
    dvb-usb: Opera1 DVB-S USB2.0 successfully initialized and connected.
    
  • /sbin/lsmod gives:
    Module                  Size  Used by
    stv0299                12873  1 
    i2c_i801               12113  0 
    
    dvb_pll                13637  1 
    dvb_usb_opera          12745  1 
    dvb_usb                18509  1 dvb_usb_opera
    dvb_core               69481  2 stv0299,dvb_usb
    i2c_core               21825  5 dvb_pll,stv0299,dvb_usb_opera,dvb_usb,i2c_i801
    
  • "cat /proc/sys/net/ipv4/conf/all/rp_filter" gives:
    0