Archiv der Kategorie: osbn

[gerrit] Benutzer auf einen Branch einschränken

Im Gerrit ist es möglich, das ein Benutzer nur den Zugriff auf einen bestimmten Branch bekommt.

Für das Lese und Schreibrecht auf den Branch develop(refs/heads/develop) werden die Rechte Read, Push und Create Referenz benötigt.

Wenn der Benutzer nur das angegebene Recht hat, ist er nicht mehr in der Lage auf das gitweb zuzugreifen. Um das gitweb nutzen zu können, benötigt der Benutzer das Read Recht auf refs/*.
Hat der Benutzer jedoch das Recht, kann er auf alle Branches innerhalb des Repositorys zugreifen.

[cygwin] keine Dateirechte beim upload mit Hilfe von lftp

Ein Kollege entwickelt seine Seite unter Windows und zum hochladen auf seinen webhosting Anbieter nutzt er lftp unter cygwin.
Das ganze funktionierte bislang ohne Probleme, bis er den Anbieter gewechselt hatte.

Beispiel:
lftp -u Benutzer,kennwort ftp-server -e "mirror -R /cygdrive/c/websites htdocs; exit"

Nachdem er die Dateien per lftp auf den neuen Server hochgeladen hatte, konnte die Seite über den Browser nicht mehr geöffnet werden. Ich schaute mir die hochgeladenen Dateien an und fand heraus, das Sie kein Dateirechte hatten. Nachdem ich die benötigten Rechte gesetzt hatte, war die Seite wieder aufrufbar.

Ich startete erneut die Übertragung der Dateien, diesmal jedoch zusätzlich mit dem Parameter -d. Bei der Debug-Ausgabe sah ich, das lftp ein CHMOD 000 auf die hochgeladenen Dateien ausführte.

Mit dem Parameter -p konnte ich lftp anweisen, die Rechte nicht zu ändern und die Seite war nach einem erneuten Upload aufrufbar.

lftp -u Benutzer,kennwort ftp-server -e "mirror -R -p /cygdrive/c/websites htdocs; exit"

[Raspberry Pi] Browser nach Systemstart im Fullscreen starten

Ein Kollege fragte mich neulich wie er am einfachsten auf drei Fernsehern verschiedene Urls für Präsentationen öffnen könnte. Er dachte zunächst daran einen Rechner mit entsprechender Grafikkarte zu kaufen, ich konnte ihn jedoch überzeugen anstatt eines Rechners, drei Raspberry Pi´s zu verwenden.

Der Plan ist, das der Raspberry Pi hochfährt und automatisch den Browser öffnet.
Um Resourcen zu sparen, wird der midori Browser über die Kommandozeile gestartet und nicht über einen Desktop. Das setzt voraus, das der Pi Benutzer nach dem hochfahren des Systems an der Kommandozeile angemeldet ist.

Hierfür muss die Datei /etc/inittab wie folgt angepasst werden:

Vorher
1:2345:respawn:/sbin/getty --noclear 38400 tty1
nachher
#1:2345:respawn:/sbin/getty --noclear 38400 tty1
1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1

Damit der Browser den gesamten Bildschirm ausfüllt (Kiosk Mode) und zum Beispiel der Mauszeiger nicht dargestellt wird, müssen noch weitere Programme installiert werden.

apt-get install matchbox x11-xserver-utils unclutter

Das Script sieht dann wie folgt aus:
#!/bin/sh
unclutter &
matchbox-window-manager & :
xset -dpms
xset s off
while true; do
/usr/bin/midori -e Fullscreen -a https://www.itbasic.de
done

Hier eine kurze Erklärung:
unclutter – lässt den Mauszeiger verschwinden
matchbox-window-manager – sorg für den Kiosk Modus
midori -e Fullscreen -a URL – startet den Browser
xset -dpms und xset s off deaktiviert den Bildschirmschoner
Die while Schleife sorgt dafür, das der Browser bei einem Absturz neu gestartet wird.

Nach einem chmod 755 presentation.sh, lässt sich das ganze dann über xinit /home/pi/presentation.sh starten. Um es wieder zu beenden reicht strg + alt + F1 und im Anschluss strg + c.

Automatischer Start

Ein Eintrag in der /home/pi/.profile reicht nun aus, damit die Präsentation nach dem Systemstart gestartet wird.

Ich habe jedoch das folgende Script in der /home/pi/.profile hinterlegt, welches prüft ob der Raspberry Pi eine IP Adresse über den dhcp Server bekommen hat. Wenn keine IP Adresse vorhanden ist, wird die Präsentation nicht gestartet und dafür ein Hinweis auf der Konsole ausgegeben.

start.sh:
#!/bin/bash
ifconfig | grep 192
if [ $? -eq 0 ]
then
xinit /home/pi/presentation.sh
else
echo "!!! keine Netzwerkverbindung !!!"
echo "Bitte stellen Sie eine Netzwerkverbindung her und"
echo "fuehren Sie xinit /home/pi/presentation.sh aus"
fi

Betriebssystem klonen

Für die zwei weiteren Fernseher muss mein Kollege einen Klone der SD Karte erstellen.
Das ganze lässt sich unter linux über dd einfach realisieren.

1. Image der SD Karte erstellen
dd if=/pfad/zur/sd/karte of=/home/user/sd-image.img
2. SD Karte wechseln und Image auf die neue SD Karte spielen
dd if=/home/user/sd-image.img of=/pfad/zur/sd/karte

Auf diesem Weg lässt sich ein Backup des gesamten System erstellen, hilfreich wenn man des öfteren verschiedene Programm etc ausprobieren möchte.

Hostnamen ändern

Zum Abschluss muss noch der Hostname in der /etc/hostname und /etc/hosts angepasst werden, da sonst der Hostname dreimal im Netzwerk vorhanden ist.

Quellen:
Browser im Kiosk Modus starten: https://github.com/MobilityLab/TransitScreen/wiki/Raspberry-Pi
Autologin:http://elinux.org/RPi_Debian_Auto_Login

[FHEM] mehrere 433 MHz Steckdosen auf einmal schalten

Mittlerweile werden mehrere Steckdosen über den Raspberry Pi geschaltet und die Funksteckdosen lassen sich ohne Probleme einzeln schalten. Alle Steckdosen über einen Taster zu schalten, ist jedoch bei den 433 MHz Steckdosen nicht auf dem Standardweg möglich.

Um die Steckdosen Licht1 und Licht2 über einen Taster (Flur) zu schalten, würde man es normalerweise wie folgt konfigurieren:

define Flur dummy
attr Flur eventMap on:an off:aus
attr Flur devStateIcon an:on:off aus:off:on
attr Flur room Flur
define FlurLichtOn notify Flur:on set Licht1,Licht2 on
define FlurLichtOff notify Flur:off set Licht1,Licht2 off

Leider funktioniert es nicht, denn der 433 MHz Sender ist nicht in der Lage die Schaltsignale gleichzeitig zu senden. Werden die einzelnen Schaltsignale mit einer kleinen Verzögerung gesendet, ist das Schalten über nur einen Taster möglich.

define Flur dummy
attr Flur eventMap on:an off:aus
attr Flur devStateIcon an:on:off aus:off:on
attr Flur room Flur
define FlurLichtOn notify Flur:on set Licht1 on;; sleep 5;; set Licht2 on
define FlurLichtOff notify Flur:off set Licht1 off;; sleep 5;; set Licht2 off

[gerrit] Rechteverebung ändern

Im git ist es möglich das ein Projekt die Rechte eines anderen Projekts erbt. In einem Projektverlauf kann es jedoch vorkommen, das diese Vererbung angepasst werden muss.

Im Gerrit gibt es zwei Möglichkeiten diese Vererbung zu ändern.

Die komplizierte Variante

Um die Vererbung zu ändern muss zunächst das Projekt ausgecheckt werden, im Anschluss in den Ordner wechseln.
Nun folgendes ausführen:
git fetch origin refs/meta/config:refs/remotes/origin/meta/config
git checkout meta/config

Als nächstes in der Datei project.config die Zeile inheritFrom = EWL1 anpassen und das neue Eltern Projekt hinterlegen zum Beispiel inheritFrom = ProjektNeu.
Nun einen commit durchführen und die Änderung pushen.
git commit -a -m 'Änderung der Rechte'
git push origin meta/config:meta/config

Im Anschluss den Cache des gerrit leeren
ssh -p29418 adminbenutzer@gerrit.itbasic.de gerrit flush-caches --cache project_list
ssh -p29418 adminbenutzer@gerrit.itbasic.de gerrit flush-caches --cache projects

Die einfache Variante

Die Vererbung über das gerrit zu ändern ist sehr einfach.

ssh -p29418 adminbenutzer@gerrit.itbasic.de gerrit set-project-parent --parent Projekt1 Projekt2

In diesem Fall vererbt Projekt1 die Rechte an Projekt2.

Im Anschluss den Cache des gerrit leeren
ssh -p29418 adminbenutzer@gerrit.itbasic.de gerrit flush-caches --cache project_list
ssh -p29418 adminbenutzer@gerrit.itbasic.de gerrit flush-caches --cache projects