Script zur Installation eines Pearl-Dissis für Oscam
Verfasst: Do 24. Okt 2013, 14:21
Da ich mein Pearl-Dissi schon auf mehrern Systemen mehrmals eingerichtet habe, habe ich die Lust verloren, dieses jedes mal Stück für Stück von Hand zu machen.
Da das ganze nur unter Debian 7 (Wheezy) möglich ist, wird das Betriebssytem geprüft.
Deshalb hab' ich mir heute dieses kleine Script geschrieben, welches das Ganze automatisiert:
Achtung! In diesem Script sind keinerlei Erfolgsprüfungen erhalten. Es arbeitet einfach alles Schritte aus dem HowTo ab.
danach einfach noch folgendes in die Oscam.conf einfügen:
[lcd]
enablelcd = 1
lcd_hideidle = 0
lcd_writeintervall = 10
Jetzt OSCAM Neustarten.
Da das ganze nur unter Debian 7 (Wheezy) möglich ist, wird das Betriebssytem geprüft.
Deshalb hab' ich mir heute dieses kleine Script geschrieben, welches das Ganze automatisiert:
Spoiler
Show
Code: Alles auswählen
#!/bin/bash
# Script zum Kompilieren und Einrichten eines Pearl-Displays für OScam
# V 0.05
#
# Changelog:
#
# V 0.01: Grundsätzlich nur zur Anwendung unter Debian 7 geeignet
# V 0.02: Erkennung ob Debian 6 oder 7. Abbruch bei 6
# V 0.03: Unterstützung für Debian Squeeze hinzugefügt (kein Abbruch mehr)
# V 0.04: Erkennung von Ubuntu und Debian 5 (Lenny) hinzugefügt --> Abbruch
# V 0.05: Kurzbefehle LCD START|STOP|RESTART sowie täglichen Neustart durch Crontab hinzugefügt
#
# © Al-x83, IPC-PEBKAC
#
#
clear
#Installieren der nötigen Pakete:
echo "==============================================================================="
echo ""
echo -n "Prüfe aktuell verfügbare Pakete.."
echo ""
echo ""
echo "==============================================================================="
echo ""
apt-get update >/dev/null
clear
#Pruefe Argumente
[ "$1" = "32" ] && SYSBIT="32"
[ "$1" = "64" ] && SYSBIT="64"
#Linux Version? (Debian/Ubuntu)
if [ -f /usr/bin/lsb_release ]; then
LSB=$(/usr/bin/lsb_release -d)
_LINUX=$(echo $LSB|cut -d":" -f2|awk {'print $1'})
if [ "$_LINUX" = "Debian" ]; then
LINUXVERSION=$(echo $LSB|cut -d":" -f2|awk {'print $3'})
elif [ "$_LINUX" = "Ubuntu" ]; then
LINUXVERSION=$(echo $LSB|cut -d":" -f2|awk {'print $2'})
fi
fi
if [ -z "$LINUXVERSION" ]; then
[ -f /etc/debian_version ] && LINUXVERSION=$(cat /etc/debian_version)
fi
#Debian Wheezy
if [ -n "$LINUXVERSION" ]&&[ $(echo $LINUXVERSION|cut -c1) == 7 ]; then
echo "================================================================================="
echo ""
echo -n "Debian $LINUXVERSION (Wheezy) erkannt. Pakete werden installiert..."
echo ""
echo ""
echo "================================================================================="
echo ""
sleep 5
apt-get install cc1111 libtool automake1.10 autoconf zlib1g-dev libssl-dev python-dev libc6 libusb-dev libibus-1.0-dev subversion libgd2-noxpm-dev libgd2-noxpm -y
clear
fi
if [ -n "$LINUXVERSION" ]&&[ $(echo $LINUXVERSION|cut -c1) == 6 ]; then
#Debian Squeeze
echo "================================================================================="
echo ""
echo -n "Debian $LINUXVERSION (Squeeze) erkannt. Allgemeine Pakete werden installiert..."
echo ""
echo ""
echo "================================================================================="
echo ""
sleep 5
apt-get install libtool automake1.10 autoconf zlib1g-dev libssl-dev libc6 libusb-dev libibus-dev subversion libgd2-noxpm-dev libgd2-noxpm -y
clear
#pruefe System ob 32 oder 64 bit
if [ -z "$SYSBIT" ]; then
if [ `uname -m` = 'x86_64' ]; then
#x64:
echo "================================================================================="
echo ""
echo -n "Debian $LINUXVERSION (Squeeze) amd64 erkannt. Architekturspezifische Pakete werden installiert..."
echo ""
echo ""
echo "================================================================================="
echo ""
wget http://ftp.de.debian.org/debian/pool/main/c/cc1111/cc1111_2.9.0-2_amd64.deb
dpkg -i cc1111_2.9.0-2_amd64.deb
cc1111_2.9.0-2_amd64.deb
sleep 5
clear
else
#x86
echo "================================================================================="
echo ""
echo -n "Debian $LINUXVERSION (Squeeze) i386 erkannt. Architekturspezifische Pakete werden installiert..."
echo ""
echo ""
echo "================================================================================="
echo ""
wget http://ftp.de.debian.org/debian/pool/main/c/cc1111/cc1111_2.9.0-2_i386.deb
dpkg -i cc1111_2.9.0-2_i386.deb
rm cc1111_2.9.0-2_i386.deb
sleep 5
clear
fi
fi
fi
#Ubuntu
if [ "$_LINUX" = "Ubuntu" ]; then
echo "================================================================================="
echo ""
echo -n "Ubuntu $LINUXVERSION erkannt. "
echo ""
echo -n "Aufgrund von ständig neuen Versionen mit varierenden Paketnamen NICHT unterstützt"
echo ""
echo ""
echo "================================================================================="
echo ""
exit 0
fi
#Lenny
if [ -n "$LINUXVERSION" ]&&[ $(echo $LINUXVERSION|cut -c1) == 5 ]; then
echo "================================================================================="
echo ""
echo -n "Debian $LINUXVERSION Lenny erkannt. "
echo ""
echo -n "Definitiv zu alt und dehalb NICHT unterstützt"
echo ""
echo ""
echo "================================================================================="
echo ""
exit 0
fi
#Laden und installieren des Display-Hacks:
echo "================================================================================="
echo ""
echo -n "Laden und installieren des Display-Hacks.."
echo ""
echo ""
echo "================================================================================="
echo ""
wget http://tech.section5.ch/files/dpfhack-0.1alpha.tgz
tar -xvzf dpfhack-0.1alpha.tgz
cd dpf/src
make
clear
#Laden und entpacken von LCD4LINUX:
echo "================================================================================="
echo ""
echo -n "Laden und entpacken von LCD4LINUX.."
echo ""
echo ""
echo "================================================================================="
echo ""
cd ..
cd ..
wget http://tech.section5.ch/files/dpf-lcd4linux.tgz
tar -xvzf dpf-lcd4linux.tgz
rm dpf-lcd4linux.tgz
cd dpf
#Anpassen von build-dpf-lcd4linux.sh:
echo "s./configure --with-drivers=DPF./configure --with-drivers='DPF' --with-plugins='all,!dbus,!mpris_dbus'.g" > ~/.sedfile
cp build-dpf-lcd4linux.sh build-dpf-lcd4linux.sh.bak
sed -f ~/.sedfile build-dpf-lcd4linux.sh.bak > build-dpf-lcd4linux.sh
rm build-dpf-lcd4linux.sh.bak
rm ~/.sedfile
clear
#Kompilieren von LCD4LINUX
echo "================================================================================="
echo ""
echo -n "Kompilieren von LCD4LINUX.."
echo ""
echo ""
echo "================================================================================="
echo ""
./build-dpf-lcd4linux.sh ../src/dpflib/
cd lcd4linux
sudo make install
clear
#Config Datei erstellen:
echo "================================================================================="
echo ""
echo -n "/etc/lcd4linux.conf erstellen.."
echo ""
echo ""
echo "================================================================================="
echo ""
cat << EOF > /etc/lcd4linux.conf
Display 'DPF'
Layout 'mylayout'
Variables {
time_minute 60000
time_second 1000
time_tick second
time_faster 0.5
color_black '000000'
color_white 'ffffff'
color_blue '0000FF'
color_green '008000'
color_red '800000'
color_transparent 'ffffff00'
color_lighter 'ffffff80'
color_darker '00000080'
color_fg 'ffffff'
color_bg '00000044'
color_bar_fg 'ffffff'
color_bar_bg '00000044'
color_bar1 '5f5fff'
color_bar2 'ff5f5f'
width_quarter 12
width_full 53
width_half 24
width_idle 22
width_logo 39
tablestart 6
}
Display dpf {
driver 'DPF'
port 'dev/sg0'
font '6x8'
foreground color_white
background color_blue
basecolor color_black
}
Display dpf {
driver 'DPF'
port 'dev/sg0'
font '6x8'
foreground color_white
background color_blue
basecolor color_black
}
Widget OVersion {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', 1)
width width_full
align 'L'
update time_minute
style bold
background color_blue
}
Widget ORevision{
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', 2)
width width_full
align 'L'
update time_minute
style bold
background color_blue
}
Widget CLOCK {
class 'Text'
expression strftime ('%H:%M:%S', time())
prefix ' '
width width_full
align 'L'
update time_second
style bold
background color_green
foreground color_white
}
Widget DATE {
class 'Text'
expression strftime ('%d.%m.%Y', time())
width width_full
align 'L'
update time_second
style bold
background color_red
foreground color_white
}
Widget RAM {
class 'Text'
expression (floor(meminfo('MemFree')*10/1024)/10).' / '.(floor(meminfo('MemTotal')*10/1024)/10)
prefix 'RAM'
postfix ' MB'
width width_half
#precision 0
align 'R'
update time_second
Background color_transparent
Foreground color_fg
}
Widget DF {
class 'Text'
expression statfs('/root', 'bavail')*statfs('/root', 'bsize')/1024/1024/1024
prefix 'USBStick '
postfix ' GB frei'
precision 2
width width_half
align 'R'
update time_second * 10
Background color_transparent
Foreground color_fg
}
Widget Busy {
class 'Text'
expression proc_stat::cpu('busy', 500)
prefix 'Busy'
postfix '%'
width width_half
precision 1
align 'R'
update time_second
Background color_transparent
Foreground color_fg
}
Widget BusyBar {
class 'Bar'
expression proc_stat::cpu('busy', 500)
expression2 proc_stat::cpu('system', 500)
length width_half
direction 'E'
update time_second * time_faster
Background color_transparent
Foreground color_bar_fg
BarColor0 color_bar1
BarColor1 color_bar2
}
Widget Load {
class 'Text'
expression loadavg(1)
prefix 'Load'
postfix loadavg(1)>1.0?'!':' '
width width_half
precision 1
align 'R'
update time_second
Background color_transparent
Foreground color_fg
}
Widget LoadBar {
class 'Bar'
expression loadavg(1)
max 5.0
length width_half
direction 'E'
update time_second * time_faster
Background color_transparent
Foreground color_bar_fg
BarColor0 color_bar1
BarColor1 color_bar2
}
Widget Eth0 {
class 'Text'
expression (netdev('eth0', 'Rx_bytes', 500)+netdev('eth0', 'Tx_bytes', 500))/1024/1024
prefix 'eth0'
postfix ' MB/s'
width width_half
precision 3
align 'R'
update time_second
Background color_transparent
Foreground color_fg
}
Widget Eth0Bar {
class 'Bar'
expression netdev('eth0', 'Rx_bytes', 500)
expression2 netdev('eth0', 'Tx_bytes', 500)
length width_half
direction 'E'
update time_second * time_faster
Background color_transparent
Foreground color_bar_fg
BarColor0 color_bar1
BarColor1 color_bar2
}
Widget Eth0Trf {
class 'Text'
expression (netdev('eth0', 'Rx_bytes', 0)+netdev('eth0', 'Tx_bytes', 0))/1024/1024
prefix 'Traffic eth0'
postfix ' MB'
width width_half
precision 3
align 'R'
update tick
Background color_transparent
#Background color_bg
Foreground color_fg
}
Widget OTotals {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', 4)
prefix ' Server Totals: '
width width_full
align 'L'
update time_minute
style 'bold'
Background color_red
Foreground color_white
}
Widget Ouptime {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', 3)
prefix 'Oscam '
width width_full
align 'L'
update 10000
foreground color_white
background color_transparent
}
####################### Oscam Table #####################
Widget OscamRow00 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow01 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 1)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 1),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow02 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 2)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 2),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow03 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 3)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 3),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow04 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 4)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 4),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow05 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 5)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 5),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow06 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 6)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 6),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow07 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 7)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 7),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow08 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 8)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 8),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow09 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 9)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 9),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow10 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 10)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 10),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow11 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 11)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 11),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow12 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 12)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 12),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow13 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 13)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 13),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow14 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 14)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 14),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow15 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 15)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 15),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow16 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 16)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 16),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow17 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 17)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 17),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow18 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 18)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 18),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow19 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 19)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 19),'T') == 0 ? color_blue : color_transparent
}
Widget OscamRow20 {
class 'Text'
expression file::readline('/tmp/.oscam/oscam.lcd', tablestart + 20)
width width_full
align 'L'
update 10000
Background strstr(file::readline('/tmp/.oscam/oscam.lcd', tablestart + 20),'T') == 0 ? color_blue : color_transparent
}
Layout mylayout {
#----------------------------------------<start topline
Row01.Col01 'OVersion'
Row01.Col29 'ORevision'
Row01.Col44 'CLOCK'
#----------------------------------------<end topline
#----------------------------------------<start header
Row03.Col02 'RAM'
Row03.Col29 'DF'
Row04.Col02 'Busy'
Row05.Col02 'BusyBar'
Row06.Col02 'Load'
Row07.Col02 'LoadBar'
Row04.Col29 'Eth0'
Row05.Col29 'Eth0Bar'
Row06.Col29 'Eth0Trf'
Row07.Col29 'Ouptime'
#----------------------------------------<end header
ROW09.Col01 'OscamRow00'
ROW10.Col01 'OscamRow01'
ROW11.Col01 'OscamRow02'
ROW12.Col01 'OscamRow03'
ROW13.Col01 'OscamRow04'
ROW14.Col01 'OscamRow05'
ROW15.Col01 'OscamRow06'
ROW16.Col01 'OscamRow07'
ROW17.Col01 'OscamRow08'
ROW18.Col01 'OscamRow09'
ROW19.Col01 'OscamRow10'
ROW20.Col01 'OscamRow11'
ROW21.Col01 'OscamRow12'
ROW22.Col01 'OscamRow13'
ROW23.Col01 'OscamRow14'
ROW24.Col01 'OscamRow15'
ROW25.Col01 'OscamRow16'
ROW26.Col01 'OscamRow17'
ROW27.Col01 'OscamRow18'
ROW28.Col01 'OscamRow19'
ROW29.Col01 'OscamRow20'
#----------------------------------------<start lastline
ROW30.Col01 'OTotals'
ROW30.Col43 'DATE'
#----------------------------------------<end lastline
Layer 2 {
X1.Y1 'IMAGE'
}
}
Widget IMAGE2 {
class 'Image'
file '/home/vpn/box.png'
update 10000
reload 1
visible 1
inverted 0
}
EOF
#Rechte setzen:
chown root:root /etc/lcd4linux.conf
chmod 700 /etc/lcd4linux.conf
#Hinzufügen des Startscript:
cat << EOF > /var/emu/script/lcd4linux.sh
#!/bin/bash
# LCD4LINUX-Script
#
# V 0.04
# Changelog:
# V 0.02 Diverse Bugs
# V 0.03 PID - Bug gefixed
# V 0.04 Befehl Status hinzugefügt
#
# © Al-x83, IPC-PEBKAC
#
#
# LCD4LINUX-Start
start_lcd4linux () {
sleep 5
echo "LCD4linux gestartet"
lcd4linux -q
}
# LCD4LINUX-Stop
stop_lcd4linux () {
pkill lcd4linux
sleep 5
PID="$(pgrep -x lcd4linux)"
if [[ ! -n $PID ]] ; then
echo "LCD4linux beendet"
else
pkill -9 lcd4linux
echo "LCD4linux gekillt"
fi
}
# Befehlsparameter
case "$1" in
start)
PID="$(pgrep -x lcd4linux)"
if [[ ! -z $PID ]] ; then
echo "LCD4linux ist bereits gestartet"
else
start_lcd4linux
pgrep -x lcd4linux > /tmp/.lcd4linux.pid
PID="$(pgrep -F /tmp/.lcd4linux.pid)"
echo "LCD4Linux mit PID $PID gestartet"
fi
rm /tmp/.lcd4linux.pid
;;
stop)
PID="$(pgrep -x lcd4linux)"
if [[ ! -z $PID ]] ; then
stop_lcd4linux
else
echo "LCD4linux ist bereits beendet"
fi
;;
restart)
echo "LCD4linux restart"
stop_lcd4linux
sleep 3
start_lcd4linux
;;
status)
PID="$(pgrep -x lcd4linux)"
if [[ ! -z $PID ]] ; then
pgrep -x lcd4linux > /tmp/.lcd4linux.pid
PID="$(pgrep -F /tmp/.lcd4linux.pid)"
echo "LCD4linux ist bereits mit PID $PID gestartet"
rm /tmp/.lcd4linux.pid
else
echo "LCD4Linux ist inaktiv"
fi
;;
*)
clear
echo "==============================================================================="
echo ""
echo -n "Befehlsliste: LCD4linux"
echo ""
echo ""
echo "Start, Stop, Restart, Status start | stop | restart | status"
echo ""
echo "==============================================================================="
echo ""
;; esac
exit 0
EOF
#Script ausführbar machen:
chmod +x /var/emu/script/lcd4linux.sh
#Softlink anlegen:
ln -s /var/emu/script/lcd4linux.sh /bin/lcd
#In Crontab eintragen:
echo "" >> /etc/crontab
echo "#LCD4Linux neustarten" >> /etc/crontab
echo "30 4 * * * root /var/emu/script/lcd4linux.sh stop" >> /etc/crontab
echo "31 4 * * * root /var/emu/script/lcd4linux.sh start" >> /etc/crontab
#Syslog schonen:
touch /etc/rsyslog.d/1-lcd4linux.conf
echo ":msg, contains, "readline requested line" -/dev/null" >> /etc/rsyslog.d/1-lcd4linux.conf
echo "& ~" >> /etc/rsyslog.d/1-lcd4linux.conf
service rsyslog restart
exit 0
danach einfach noch folgendes in die Oscam.conf einfügen:
[lcd]
enablelcd = 1
lcd_hideidle = 0
lcd_writeintervall = 10
Jetzt OSCAM Neustarten.