Offene Kerne

Bei der Software hat es die Open Source Bewegung schon weit gebracht, für so ziemlich jeden Anwendungsfall gibt es auch eine freie Applikation. Anders sieht das bei der Hardware aus. Hier ist vieles noch proprietär. Damit das nicht auf ewig so bleibt gibt es Projekte wie OpenCores welches unter http://opencores.org/ zu finden ist.

Die Projektübersicht von OpenCores

Die Projektübersicht von OpenCores

Gegründet im Oktober 1999 von Damjan Lampret, gibt es auf den Webseiten des Projektes eine Reihe von offenen Rechenwerken bis hin zu ganzen Prozessoren. Geschrieben ist das ganze meist in einer Hardwarebeschreibungssprache wie VHDL, Verilog oder SystemVerilog. Die Lizenzen variieren je nach Projekt meist zwischen der LGPL oder einer BSD Lizenz.

Git Repository in Subrepository verwandeln

Auf mactricks.de gibt es eine schöne Anleitung um aus einem Teil eines Git Repositories ein Subrepository zu erzeugen. Allerdings gibt es mit der Variante ein Problem. Wenn man das ganze mehr als zwei oder dreimal machen möchte, wird es mit der Zeit nervig all diese Befehle einzugeben.

Aus diesem Grund habe ich für das Extrahieren eines Subprojektes aus einem Git Repository ein Skript geschrieben:

#!/bin/sh
# extractSubproject <orignal repopath> <new repopath> <subfolder> <new remote (optional)>

# clone repository
git clone --no-hardlinks $1 $2

# extract subproject
cd $2
git filter-branch --subdirectory-filter $3 HEAD
git reset --hard
git remote rm origin
rm -r .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive
git prune

# Add optional remote and push
if [ "$4" != "" ]; then
git remote add origin $4
  git push origin master
fi

Heruntergeladen werden kann sich das Skript auch unter https://github.com/seeseekey/archive/blob/master/Bash/Git/extractSubproject.sh.

Git Server für mehrere Benutzer einrichten

Wie man Git auf einem Ubuntuserver aufsetzt hatte ich vor einiger Zeit in einem Artikel beschrieben. Nachteil der vorgestellten Methode ist, das sie sich nur für einen Nutzer eignet. Natürlich kann man mit dieser Methode auch mehrere Nutzer zu dem Repositories verbinden, hat damit aber keine Möglichkeit mehr Zugriffsberechtigungen für die Repositories zu setzen.

Als Lösung für das Problem wird Gitolite für die Nutzer und Rechteverwaltung genutzt. Im ersten Schritt werden auf dem Server die notwendigen Pakete installiert:

sudo apt-get install git openssh-server perl

Als nächster Schritt wird der Nutzer angelegt, in welchem Gitolite läuft und in diesen gewechselt:

sudo useradd -m git
sudo su git

Danach geht es auch schon an die Installation von Gitolite:

cd ~
git clone git://github.com/sitaramc/gitolite
mkdir bin
cd gitolite
./install -ln

Anschließend muss der öffentliche SSH Schlüssel von dem Rechner mit welchem auf das System zugriffen werden soll in den Home Ordner des „git“ Nutzers kopiert werden. Anschließend kann das Setup abgeschlossen werden:

cd ~/bin
./gitolite setup -pk $HOME/seeseekey.pub

Damit ist das Setup abgeschlossen und es kann an die Konfiguration gehen. Dazu wird vom Rechner dessen Public Key beim Setup benutzt wurde das entsprechende administrative Repository geklont:

git clone git@192.168.1.128:gitolite-admin

Die Dateistruktur des Repositories sieht dabei wie folgt aus:

conf
  gitolite.conf
keydir
  seeseekey.pub

In dem Verzeichnis „keydir“ sind die SSH Schlüssel enthalten. Um einen Nutzer hinzuzufügen reicht es einfach einen neuen öffentlichen Schlüssel in das Verzeichnis zu legen und das ganze ins Git Repository einzubringen. Die eigentliche Konfiguration der Repositories erfolgt in der „gitolite.conf“ Datei. Diese sieht nach der Erzeugung so aus:

repo gitolite-admin
    RW+     =   seeseekey

repo testing
    RW+     =        @all

Das bedeutet das es zwei Repositores gibt, eines trägt den Namen „gitolite-admin“ und dient der Verwaltung. Das zweite Repository ist „testing“ auf das alle Nutzer zugreifen dürfen. Benötigt man nun ein neues Repository, so fügt man einen neuen „repo“ Abschnitt mit dem Namen und den entsprechenden Rechten hinzu. Sobald das ganze commitet und gepusht wurde, legt Gitolite das neue Repository an. Wenn man bei den Schlüsseln mehrere SSH Schlüssel pro Nutzer wünscht, so legt man dafür am besten eine Verzeichnisstruktur an:

keydir
  seeseekey
    rechner1
      seeseekey.pub
    rechner2
      seeseekey.pub

Möchte man ein Repository löschen so entfernt man es aus der „gitolite.conf“ und löscht es anschließend auch vom Server. Damit hat man eine Lösung für Git Server mit mehren Nutzern und und entsprechender Verwaltung.

Den Raspberry Pi als Druckserver benutzen

Wer einen Drucker ohne Netzwerkanschluss besitzt, kann ihn mit Hilfe eines Raspberry Pi zu einem Netzwerkdrücker umrüsten. Dazu werden im ersten Schritt die notwendigen Pakete installiert:

sudo apt-get install avahi-daemon cups cups-pdf

Nach der Installation geht es an die Konfiguration. Dazu wird die „cupsd.conf“ bearbeitet:

sudo nano /etc/cups/cupsd.conf

Den Sektionen „<Location />“, „<Location /admin>“ und „<Location /admin/conf>“ wird dabei die Zeile:

Allow @Local

hinzugefügt. Daneben sollte noch die Zeile:

Listen <IP Adresse>:631

hinzugefügt werden. Das sorgt dafür das auf dem passenden Interface gehorcht wird. Danach geben wir in der Konsole folgendes ein:

sudo adduser pi lpadmin
sudo service cups restart

Damit wird der Nutzer „pi“ der Gruppe der Nutzer hinzugefügt welche Einstellungen vornehmen dürfen. Außerdem wird der CUPS Service neugestartet, so das die Änderungen in der Konfigurationsdatei wirksam werden. Nun kann sich über die URL:

https://<IP Adresse>:631

mit dem Webinterface von CUPS verbunden werden.

Das CUPS Webinterface

Das CUPS Webinterface

Im Webinterface wird nun unter dem Tab „Verwaltung“ der Punkt „Freigeben von Druckern welche mit diesem System verbunden sind“ aktiviert. Bestätigt wird das ganze mit den Zugangsdaten des Nutzers „pi“. Abschließend klickt man auf den Button „Verfügbare Drucker auflisten“ und fügt die angeschlossenen Drucker hinzu und gibt ihn frei. Dazu muss das passende Modell ausgesucht und bestätigt werden.

Anschließend kann man den Drucker in seinem Betriebssystem hinzufügen und über den Raspberry Pi drucken. Sollte wieder erwarten kein Druck stattfinden, so liegt das meist am falsch gewählten Druckertyp. Mit der beschriebenen Konfiguration lässt sich auch von iOS Geräten mittels AirPrint druchen.

Den Raspberry Pi in einen Airplay Server verwandeln

Selten gab es einen Embedded Computer so günstig wie den Raspberry Pi, also was liegt da näher sich einen solchen für den Heimeinsatz zu besorgen. Wenn man sich anschaut bei welchen Preisen Airplay Boxen anfangen, wird man merken das ein Raspberry Pi mit einem entsprechenden WLAN-Stick und einem Boxensystem immer noch günstiger ist. Airplay-Boxen, welche im Handel erhältlich sind beginnen ab 200 € mit einer nach oben offenen Grenze.

Für einen Raspberry Pi, Airplay Server benötigt man:

  • einen Rapsberry Pi
  • ein Gehäuse für den Pi
  • einen WLAN Stick
  • ein paar Boxen

Im ersten Schritt sollte man sich eine Raspberry Pi Distribution herunterladen, in diesem Fall wird Raspian benutzt. Dazu wird das Image heruntergeladen und entpackt. Anschließend hat man auf dem Rechner eine .img Datei. Diese muss nun auf die SD-Karte geflasht werden. Um herauszufinden, welches Volume geflasht werden muss, kann man sich auf dem Terminal unter Mac OS X mittels „df -h“ anschauen welches Gerät dazukommt. Eine andere Möglichkeit ist es die Karte über den Namen zu identifizieren, welcher bei neuen Karten meist „NO NAME“ oder „Untitled“ sein sollte.

Wenn das passende Gerät identifiziert wurde, sollte die gemountete Partition mittels:

diskutil unmount /dev/disk2s1

wieder freigegeben werden. Nun wechselt man im Terminal in den Ordner, in welchem die Imagedatei liegt und gibt dabei folgendes ein:

sudo dd bs=1m if=raspbian.img of=/dev/rdisk2

Zu beachten ist dabei das aus „disk2s1“ -> „rdisk2“ wird, womit das Gerät direkt angesprochen wird. Theoretisch würde auch „disk2“ funktionieren, allerdings geht die Übertragungsgeschwindigkeit hierbei drastisch in den Keller. Nach dem Flashen der Karte wird das Gerät mittels:

diskutil eject /dev/rdisk2

ausgeworfen. Die Karte kann nun in den ausgeschalteten Pi gelegt werden und dieser mit Strom versorgt werden. Beim ersten Start wird man vom Konfigurationsmenü „raspi-config“ begrüßt. Hier kann man das Tastaturlayout, den SSH Server und andere Dinge einstellen. Wir stellen ein deutsches Tastaturlayout ein und aktivieren den SSH Server. Des Weiteren sollte man das Passwort für den Nutzer Pi ändern und die root Partion auf den gesamten Bereich der SD-Karte ausdehnen. Anschließend kann man den Pi neu starten.

Für das drahtlose Netz wird der WLAN-Stick an den Raspberry Pi angeschlossen. Wenn man dies im laufenden Betrieb macht, kann es passieren, dass der Pi anschließend neu startet. Das ganze sieht etwas nach einer Brownout Detection aus, sprich der Raspberry hat für einen Moment zu wenig Strom und startet neu.

In der Konsole kann man jetzt mittels „ifconfig“ feststellen, ob ein weiteres Netzwerkgerät hinzugekommen ist. Dort sollten die Geräte „eth0“, „lo“ und „wlan0“ auftauchen. Nun geht es an die Konfiguration des WLANs. Dazu wird die „/etc/network/interfaces“ mittels „nano“ aufgerufen:

sudo nano /etc/network/interfaces

Dabei werden einige Änderungen in der Datei vorgenommen. Anschließend sollte die „interfaces“ Datei wie folgt aussehen:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
pre-up wpa_supplicant -B w -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Nun geht es an die Konfiguration der „/etc/wpa_supplicant/wpa_supplicant.conf“ Datei. Diese sollte nach der Konfiguration in etwa so aussehen:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
  ssid="WLAN"
  scan_ssid=1
  proto=RSN
  key_mgmt=WPA-PSK
  pairwise=CCMP
  group=CCMP
  psk="geheim"
}

Im vorliegenden Beispiel wurde ein WPA 2 verschlüsseltes WLAN eingerichtet. Bei einem Neustart sollte das WLAN anschließend verfügbar sein. Ist dies nicht der Fall, so kann der Prozess mittels:

sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -d

manuell aktiviert werden. Dabei sieht man dann auch entsprechende Fehlermeldungen, welche auf Probleme hinweisen können. Wenn die WLAN-Schnittstelle aktiv ist, kann man auf einem anderen Terminal mittels „iwconfig“ sehen, ob die Schnittstelle funktioniert. Dies ist dann gegeben, wenn die Schnittstelle nicht mehr als „unassociated“ markiert ist.

Der letzte Punkt, der jetzt noch fehlt, ist die Unterstützung für Airplay. Hierfür wird Shairport installiert. Dazu werden im ersten Schritt die notwendigen Bibliotheken installiert, sowie der Quellcode von Shairport und dem SDP Modul auf den Pi geholt:

sudo apt-get install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils libmodule-build-perl
git clone git clone https://github.com/njh/perl-net-sdp.git
git clone git://github.com/abrasive/shairport.git

Bevor Shairport kompiliert wird, muss das SDP Modul installiert werden. Dazu wechseln wie in den Ordner und geben dort folgendes ein:

perl Build.PL
sudo ./Build
sudo ./Build test
sudo ./Build install

Danach wechseln wir in den Shairport Ordner und geben dort „make“ ein. Anschließend können wir ganze mittels „perl shairport.pl“ starten und einen ersten Test vornehmen. Nun müssen wir noch dafür sorgen das Shairport beim Start des Pi auch gestartet wird. Außerdem soll der Empfänger noch einen ordentlichen Namen bekommen. Dazu geben wir im Shairport Ordner folgendes ein:

sudo make install
sudo cp shairport.init.sample /etc/init.d/shairport
cd /etc/init.d
sudo chmod a+x shairport
sudo update-rc.d shairport defaults
sudo nano shairport

Nachdem wir die Datei „shairport“ in „nano“ geöffnet haben, ändert wir dort den Namen z.B. in Schlafzimmer oder Wohnzimmer. Damit bekommt der Empfänger einen eindeutigen Namen. Nach einem Neustart oder einem manuellen:

./shairport start

ist der eigene AirPlay Empfänger fertig.

Weitere Informationen gibt es unter:
http://wiki.ubuntuusers.de/WLAN
http://wiki.ubuntuusers.de/WLAN/wpa_supplicant
http://netz10.de/2010/02/13/wlan-wpa2-mit-psk-manuell-konfigurieren/