Archiv der Kategorie: Linux

Hosting Pushjet with Apache

Prepare MySQL-Database for pushjet

# mysql -u root -p
CREATE USER 'pushjet'@'localhost' IDENTIFIED WITH mysql_native_password AS '***';
GRANT USAGE ON *.* TO 'pushjet'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `pushjet`;
GRANT ALL PRIVILEGES ON `pushjet`.* TO 'pushjet'@'localhost'

Install gunicorn and pushjet via Shell

sudo su
apt-get install gunicorn python-pip libmysqlclient-dev
cd /opt
wget https://github.com/Pushjet/Pushjet-Server-Api/archive/master.zip
unzip master.zip
rm master.zip
mv Pushjet-Server-Api-master/ pushjet
cd pushjet
pip install -r requirements.txt
cp config{.example,}.py
cat database.sql | mysql -uroot -p{insert root password} -D pushjet

Create gunicorn config for pushjet /etc/gunicorn.d/pushjet

CONFIG = {
  'mode': 'wsgi',
  'working_dir': '/opt/pushjet/',
  'python': '/usr/bin/python2',
  'args': (
    '--bind=0.0.0.0:8080',
    '--workers=2',
    '--timeout=30',
    'application:app',
  ),

Modify pushjet config /opt/pushjet/config.py

# Must be a mysql database!
database_uri = 'mysql://pushjet:password@localhost/pushjet'
# Google Cloud Messaging configuration (required for android!)
google_api_key = 'ABCDEF....XYZ' 
# Change this to your FCM server key
google_gcm_sender_id = 512345678900 
# Change this to your GCM sender id

How to create the required key and id is documented here.

Create apache site config
/etc/apache2/sites-available/pushjet.conf

<VirtualHost *:443>
    SSLEngine On
    SSLCertificateFile /path/to/fullchain.pem
    SSLCertificateKeyFile /path/to/privkey.pem
    ServerAdmin root@my-push-domain.org
    ServerName my-push-domain.org
    ServerAlias my-push-domain.org
    RequestHeader set Front-End-Https "On"
    Header edit Location "^http:(.*)$" "https:$1"
    ProxyPass / unix:/var/run/gunicorn/pushjet.sock|http://localhost/
    RedirectMatch ^/$ http://my-push-domain.org/
</VirtualHost>

Alternatively you can also publish pushjet as sub directory

<Location /pushjet> 
    ProxyPass unix:/var/run/gunicorn/pushjet.sock|http://localhost/
</Location>

Enable the apache site and restart gunicorn and apache

sudo a2ensite pushjet.conf
systemctl restart gunicorn
systemctl restart apache2.service

Test it

To test it just go to https://my-push-domain.org/gcm
The result should look like this:

{
  "sender_id": 512345678900
}

Configure Pushjet Client

Open the pushjet settings:
Server URL: http://my-push-domain.org/
Custom Sender ID: 512345678900

Use Sonoff S20 pins for Sensors with espeasy

The Sonoff S20 has only a 4 pin header (GND, TX, RX, VCC).

To use this pins (TX=GPIO1, RX=GPIO3) for sensors, the serial interface has to be disabled:
Tools – Advanced – Enable Serial port: uncheck

Now it is possible to use gpio1 and gpio3 for Devices:
espeasy-dht11

This is the first test on a breadboard with DHT11
sonoff-s20-dht11
I don’t think that a humidity sensor makes any sense inside the socket. Therefore, I think I will use DS12B20 soldered on a female pin header in the final version.

And this is the result:
espeasy-devices

The values are also published via mqtt:

# mosquitto_sub -h 192.168.234.100 -t "#" -v
/sonoff-s20/DHT11/Temperature 24.00
/sonoff-s20/DHT11/Humidity 33.00

Sonoff S20 and espeasy

Flash espeasy

Image can be found here.
To boot the sonoff into flash mode, press and hold the button while connecting it to power.

./esptool.py --port /dev/ttyUSB0 write_flash 0x000 ESPEasy_R120_1024.bin -fs 8m

Connect to wifi and configure

Connect to ESP_0 with password configesp and set up the wifi connection.

After connecting to wifi open the webinterface http://ip.of.sonoff/config and configure the name and unit number. The name of my sonoff is sonoff-s20.

Configure Hardware and Devices.

espeasy-hardware espeasy-button espeasy-relay

Enable rules: Tools – Advanced – Rules: Checked

Now there is a new menu entry named Rules

On Button#State=1 do
  if [Relay#State]=0
    gpio,12,1
  else
    gpio,12,0
  endif
endon

Now you can toggle the relay with the button.

MQTT usage

I use the protocol OpenHAB MQTT. So I can subscribe these events:

# mosquitto_sub -h my.mqtt.server -t "#" -v
/sonoff-s20/Relay/State 1
/sonoff-s20/Relay/State 0

To switch on and off you can publish these messages:

# mosquitto_pub -h 192.168.234.100 -t "/sonoff-s20/gpio/12" -m "1"
# mosquitto_pub -h 192.168.234.100 -t "/sonoff-s20/gpio/12" -m "0"

It is also possible to change „Relay“ to „gpio“ and „State“ to „12“. In this case, the subscribed and published strings are the same, but the rules also have to be modified.

openHAB configuration

After configuration of the mqtt-binding in openhab.cfg I created a new item-file
items/sonoff.items:

Switch sonoff01 "Sonoff Socket" {mqtt=">[mosquitto:/sonoff-s20/gpio/12:command:ON:1],>[mosquitto:/sonoff-s20/gpio/12:command:OFF:0],<[mosquitto:/sonoff-s20/Relay/State:state:MAP(mqtt.map)]", autoupdate="false"}

I also created the file transforms/mqtt.map

0=OFF
1=ON

Raspberry Pi und analoger Sound

Vor einiger Zeit habe ich mir, wie viele andere auch, einen Raspberry Pi zugelegt, auf dem ich eine XBMC (mittlerweile Kodi) betreibe. Seinerzeit habe ich mir den Raspberry Pi Modell B in der 512MB Ram version angeschafft.

Aufgrund der doch begrenzten Tonqualität des verwendeten Bildschirms war ich darauf angewiesen ein paar externe PC-Lautsprecher zu verwenden. Hierbei stieß ich in der Anfangsphase auf viele Probleme. Darunter lautes Knacken beim Senderwechsel und diverse andere Tonstörungen. Mit diversen XBMC-Updates besserte sich die Lage, es gab das Knacken nur noch beim Starten und beenden. Nur diverse Tonstörungen, welche an ruhigen Stellen im Film zu hören waren, störten etwas. Es klang schon so, als ob man Hört, wie der Raspberry arbeitet.

Mit Raspberry Pi B+ bzw. Raspberry Pi 2 wird alles besser…

Mit dem Raspberry Pi B+ wurde ein verbesserter analoger Sound beworben, klang schon mal nicht schlecht, aber deshalb einen neuen Raspberry kaufen? Eher nicht.

Nun kam mittlerweile der Raspberry Pi 2 auf den Markt, welcher natürlich auch genannte Verbesserungen haben soll. Als sich die Chance bot, diesen relativ günstig zu erwerben schlug ich zu.

Kaum kam das Paket an wurde auch schon alles vorbereitet. Der Raspberry Pi 2 an sich ist schon wirklich super. Alles um einiges schneller und die Bedienung von Kodi absolut flüssig. So macht das wirklich Spaß. Die ersten Tontests hingegen waren doch sehr ernüchternd.

Das Knacken war hier weniger das Problem. Problematisch empfand ich ein permanentes Brummen/Rauschen. Dieses ließ sich nur verringern, indem ich den Lautstärkepegel an den Lautsprechern senkte. Für Filme mag das reichen, ab für Musik, die man auch mal lauter machen möchte ist das nicht praktikabel, da man hier wieder physisch an den Lautsprechern drehen muss.

Einziger Ausweg

Als Lösung bot sich hier scheinbar nur noch ein USB-Audio-Adapter:
usb-audio

Ich habe doch etwas hin und her überlegt, welchen Adapter ich bestelle und habe mich am Ende für den günstigsten Adapter aus China für unschlagbare 1,64€ inkl. Versand über eBay entschieden. Mittlerweile gibt es diesen sogar noch günstiger (1,16€). Es gibt auch noch Varianten als einfacher Adapter, aber ich fand es nützlich am Raspberry noch dieses kleine Verlängerungskabel zu haben, um den Adapter anders zu Positionieren. Dass man hier keinen hochqualitativen Artikel erhält, kann man bei dem Preis erahnen. Aber auch günstiges Plastik reicht, solange man den Adapter nicht dauernd abzieht und neu ansteckt.

Läuft sogar out of the box!

An den Raspberry angesteckt wurde der Adapter nach einem Neustart von Kodi erkannt und konnte über Optionen – System – Audio-Ausgabe – Audioausgabegerät: „ALSA: USB PnP Sound Device, Analog“ aktiviert werden.

Der Adapter meldet sich als:

Bus 003 Device 012: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller

Soundqualität

Was die Soundqualität angeht, kann ich nicht all zu viel sagen. Ich habe mal mit dem Onboard-Chip meines ASUS Z97-A unter Verwendung eines Logitech Z523 2.1 Soundsystems getestet und kann im direkten Vergleich keinen wirklichen Unterschied erkennen. Auf jeden Fall um Längen besser als der analoge Sound des Raspberry Pi.

NRPE von NSClient++ testen

Wenn man selbst nicht der Nagiosadmin ist, aber einen NSClient++ konfigurieren muss um dem Nagiosadmin entsprechende NRPE-Befehle bereitzustellen, ist es auch sinnvoll diese selbst testen zu können.

Dies ist direkt über den NSClient möglich, allerdings muss hierfür erst einmal 127.0.0.1 zu den „allowed_hosts“ aufgenommen werden. Hierfür muss die Datei nsclient.cfg angepasst werden:

[NRPE]
allowed_hosts=192.168.1.1,127.0.0.1

Anschließend muss der NSClient dienst neugestartet werden. Anschließend kann über folgenden Befehl ein definierter check aufgerufen werden:

C:\Program Files (x86)\NSCP>nscp nrpe --host 127.0.0.1 --command check_ok
OK: Lets pretend everything is going to be ok.

Auch Checks mit Argumenten können getestet werden, allerdings nur wenn der Parameter „allow_arguments=1“ gesetzt ist.

C:\Program Files (x86)\NSCP>nscp nrpe --host 127.0.0.1 --command checkcpu --arguments MaxWarn=80 time=5m
OK CPU Load ok.|'5m'=1%;80;0

Nagios NRPE Server für Enigma2

Nagios ist ja schon was Tolles, auch in einem Heimnetz. Reine Portüberwachung und Ping-Checks sind aber irgendwann nicht mehr genug.

Daher habe ich mich mal daran gemacht, den nagios-nrpe-server auf meiner Dreambox mit Enigma2 zum Laufen zu bekommen (fertiges Paket am Ende des Artikels).

Dazu habe ich mir die neuste Version aus dem Debian Repository in der mipsel-Version heruntergeladen.

mkdir sources
cd sources
wget http://ftp.debian.org/debian/pool/main/n/nagios-nrpe/nagios-nrpe-server_2.12-4_mipsel.deb
mkdir nagios-nrpe-server_2.12-4_mipsel
dpkg-deb -x nagios-nrpe-server_2.12-4_mipsel.deb nagios-nrpe-server_2.12-4_mipsel/
rm -r nagios-nrpe-server_2.12-4_mipsel/usr/share/
mkdir package
cp nagios-nrpe-server_2.12-4_mipsel/* -r package
mkdir package/CONTROL
vim package/CONTROL/control

Nun die Datei control unterhalb des Ordners CONTROL mit folgendem Inhalt füllen:

Package: nagios-nrpe-server
Version: 2.12-4-r0
Description: Nagios NRPE Server
Architecture: mipsel
Section: extra
Priority: optional
Maintainer: skin master <***@arcor.de>
Homepage: http://darkvoice.dyndns.org/dreambox-packages/nagios-nrpe-server
Depends: libwrap0
Source: http://darkvoice.dyndns.org/dreambox-packages/nagios-nrpe-server/sources

Nun die Datei conffiles unterhalb des Ordners CONTROL mit folgendem Inhalt füllen:

/etc/nagios/nrpe.cfg
/etc/nagios/nrpe_local.cfg

Nun die Datei preinst unterhalb des Ordners CONTROL mit folgendem Inhalt füllen:

addgroup -g 9000 nagios
adduser -D -H -s /bin/false -G nagios -u 9000 nagios

Nun die Datei postinst unterhalb des Ordners CONTROL mit folgendem Inhalt füllen:

ln -s ../init.d/nagios-nrpe-server /etc/rc0.d/K20nagios-nrpe-server
ln -s ../init.d/nagios-nrpe-server /etc/rc1.d/K20nagios-nrpe-server
ln -s ../init.d/nagios-nrpe-server /etc/rc2.d/S20nagios-nrpe-server
ln -s ../init.d/nagios-nrpe-server /etc/rc3.d/S20nagios-nrpe-server
ln -s ../init.d/nagios-nrpe-server /etc/rc4.d/S20nagios-nrpe-server
ln -s ../init.d/nagios-nrpe-server /etc/rc5.d/S20nagios-nrpe-server
ln -s ../init.d/nagios-nrpe-server /etc/rc6.d/K20nagios-nrpe-server
/etc/init.d/nagios-nrpe-server start

Nun die Datei prerm unterhalb des Ordners CONTROL mit folgendem Inhalt füllen:

/etc/init.d/nagios-nrpe-server stop
rm /etc/rc0.d/K20nagios-nrpe-server
rm /etc/rc1.d/K20nagios-nrpe-server
rm /etc/rc2.d/S20nagios-nrpe-server
rm /etc/rc3.d/S20nagios-nrpe-server
rm /etc/rc4.d/S20nagios-nrpe-server
rm /etc/rc5.d/S20nagios-nrpe-server
rm /etc/rc6.d/K20nagios-nrpe-server

Nun die Datei postrm unterhalb des Ordners CONTROL mit folgendem Inhalt füllen:

deluser nagios
delgroup nagios

Anschließend noch alle pre- und post-Scripte unterhalb von CONTROL ausführbar machen und das ganze zusammenschnüren:

chmod +x package/CONTROL/p*
./ipkg-build.sh package/

Als Resultat gibts dann eine nagios-nrpe-server_2.12-4-r0_mipsel.ipk

Ob das ganze hier alles so richtig ist, weiß ich nicht. Manches lässt sich vielleicht besser/einfacher lösen, aber es funktioniert.

Die IPK-Datei ist schnell installiert und wer einen NRPE-Agent schon ein mal eingerichtet hat, kommt ab hier sicher auch gut allein zurecht.

Quellen:
Script: ipkg-build
Howto: IPK Pakete erstellen
Download: fertiges Paket

Desinfec’t mit TeamViewer pimpen

Am 28.03.2011 war es wieder soweit. Die neuste Version von Desinfec’t kam heraus. Ich hatte bereits in der letzten Version eine Sache vermisst. Einen vorinstallierten Teamviewer-Client.

Es ist ja nicht das, dass ich diesen nicht im laufenden Betrieb nachinstallieren könnt, aber wenn mal wieder ein Bekannter meint er hätte Viren, mit Linux aber nicht umgehen will oder kann, würde ich da schon gerne weiterhelfen, auch über größere Distanz.

Auf der Software-Kollektion 2 der c’t-Ausgabe 08/2011 findet sich unterhalb des Ordners desinfect die Datei desinfect-2011.iso

Diese ISO-Datei enthält eigentlich nur ein modifiziertes Ubuntu in der Version 10.10, dieses gilt es nun weiter zu modifizieren.

Da das ISO schon bei 687MB liegt und der Teamviewer-Installer (komprimiert)  18MB groß ist, kommen wir in der Summe über die magischen 700MB. Daher beschreibt die folgende Anleitung lediglich die Einbindung eines kleinen Scripts was auf dem Desktop verknüpft wird und mit wenigen Klicks den Teamviewer nachlädt. In der Hoffnung, dass die so statisch wirkende TeamViewer-Download-URL auch wirklich statisch bleibt.

ISO entpacken

Alle Änderungen, die ich vornehmen will befinden sich innerhalb des Squashfs des ISOs, also entpacken wir das erstmal.

michael@michael-desktop:~/desinfect$ 7z e desinfect-2011.iso casper/filesystem.squashfs

 

Squashfs entpacken

michael@michael-desktop:~/desinfect$ sudo unsquashfs filesystem.squashfs

Hier ist das sudo entscheidend, da die Dateiberechtigungen sonst verloren gehen.

Anpassungen vornehmen

Nun erstellen wir fix ein Download- und Installations-Script für den Teamviewer:

michael@michael-desktop:~/desinfect$ sudo gedit squashfs-root/opt/desinfect/install_teamviewer.sh

Mit folgendem Inhalt:

if ! zenity --question --text "Soll Teamviewer jetzt heruntergeladen und installiert werden?" --title "Teamviewer"; then
  exit;
fi
tempfile=/tmp/teamviewer_linux.deb
wget http://www.teamviewer.com/download/teamviewer_linux.deb -O $tempfile --progress=bar:force 2>&1 | zenity --progress --title="Teamviewer wird heruntergeladen." --no-cancel --auto-close --width=400
if [ -f $tempfile ]; then
  gksu "dpkg -i $tempfile"
  if [ $? -eq 0 ]; then
    if zenity --question --text "Teamviewer wurde erfolgreich installiert. Teamviewer jetzt starten?" --title "Teamviewer"; then
      teamviewer
    fi
  else
    zenity --error --text "Installation fehlgeschlagen!" --title "Teamviewer"
  fi
  else
  zenity --error --text "Download fehlgeschlagen!" --title "Teamviewer"
fi
rm $tempfile

Ausführbar machen:

michael@michael-desktop:~/desinfect$ sudo chmod +x squashfs-root/opt/desinfect/install_teamviewer.sh

Dann noch den passenden Desktop-Link erstellen:

michael@michael-desktop:~/desinfect$ sudo gedit squashfs-root/etc/skel/Desktop/teamviewer-installer.desktop

Mit folgendem Inhalt:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=TeamViewer installieren
Comment=TeamViewer Remote Control Application
Exec=/opt/desinfect/install_teamviewer.sh
Icon=/usr/share/icons/gnome/48x48/apps/teamviewer.png
Type=Application

Und damit das Ganze noch ein wenig hübscher wird, hinterlegen wir mal noch ein passendes Icon, dazu laden wir vorher des deb-Paket für Teamviewer herunter.

michael@michael-desktop:~/desinfect$ wget http://www.teamviewer.com/download/teamviewer_linux.deb
michael@michael-desktop:~/desinfect$ ar x teamviewer_linux.deb
michael@michael-desktop:~/desinfect$ tar -xzf data.tar.gz ./opt/teamviewer/teamviewer/6/desktop/teamviewer.png
michael@michael-desktop:~/desinfect$ sudo mv opt/teamviewer/teamviewer/6/desktop/teamviewer.png squashfs-root/usr/share/icons/gnome/48x48/apps/

Squashfs wieder einpacken

michael@michael-desktop:~/desinfect$ mv filesystem.squashfs filesystem.squashfs.old
michael@michael-desktop:~/desinfect$ sudo mksquashfs squashfs-root/ filesystem.squashfs
michael@michael-desktop:~/desinfect$ sudo chown michael:michael filesystem.squashfs

ISO einpacken

Hier bin ich faul und greife gern auf isomaster zurück.

Einfach in isomaster das desinfect-2011.iso öffnen, die Datei filesystem.squashfs unterhalb von casper löschen und anschließend die neuerstellte an dieser Stelle einfügen.

Anschließend noch das ISO unter anderem Namen „desinfect-2001-teamviewer.iso“ speichern.

RDIFF erstellen

Um die Änderungen am ISO als  binäre Differenz anbieten zu können, kann man auf das Tool rdiff zurückgreifen.

michael@michael-desktop:~/desinfect$ rdiff signature desinfect-2011.iso desinfect-2011.sig
michael@michael-desktop:~/desinfect$ rdiff delta desinfect-2011.sig desinfect-2011-teamviewer.iso desinfect-2011.rdiff

Die hiermit erstellte rdiff-Datei kann auf die Originale iso-Datei folgendermaßen angewandt werden:

michael@michael-desktop:~/desinfect$ rdiff patch desinfect-2011.iso desinfect-2011.rdiff desinfect-2011-teamviewer-rdiff.iso

Kontrolle

michael@michael-desktop:~/desinfect$ md5sum *.iso
a1745f0ef34cc8630578f6f87378c0e1  desinfect-2011.iso
6d40967c515e366492cb7147996cbb3c  desinfect-2011-teamviewer.iso
6d40967c515e366492cb7147996cbb3c  desinfect-2011-teamviewer-rdiff.iso

Für Faule

anpassungen.tar.gz [4,6K]

Damit die rdiff-Datei etwas kompakter wird, habe ich beim erstellen der Signatur mit einer Block Size von 128 gearbeitet, sonst wären es über 11 MB.

desinfect-2011.rdiff.tar.gz [2,7M]

Fritz!Box-Telefonie unter Linux

Wer eine Fritz!Box mit Telefoniefunktionen sein Eigen nennen kann und als Betriebssystem Linux verwendet, sollte sich unbedingt dieses nützliche Tool ansehen.

ffgtk bietet einige nette Funktionen (Auswahl):

  • vollen Zugriff auf die Anruflisten der Fritzbox
  • die Möglichkeit Nummern direkt vom Computer zu wählen (in Verbindung mit ffgtk-dial auch direkt aus Firefox)
  • Integration anderer Adressverzeichnisse (z.B. Thunderbird)
  • Anzeige von Ankommenden Anrufen, samt Rückwärtsauflösung über Adressverzeichnis oder externe Rückwärtsauflösungsdienste (z.B. Das Örtliche)
  • Aktionen beim Abheben, Auflegen, etc.
  • Faxversand über den Computer
  • Anzeige einiger Verbindungsinformationen

So lässt sich zum Beispiel beim Annehmen eines Anrufes über einen Aktion definieren, dass der Messenger-Status auf „Beschäftigt“ gesetzt wird.

Wenn man weder mit VDSL noch mit vollem ADSL2+ gesegnet ist, ist es praktisch mit einem Mouseover seine aktuelle ADSL-Geschwindigkeit erfahren zu können.

Weitere brauchbare Hinweise und die Installation über ein entsprechendes Repository gibt’s im ubuntuusers-wiki.