Gerrit unter Ubuntu installieren

Bei Gerrit handelt es sich um ein Reviewsystem auf Git Basis. Die Software wird unter anderem vom Android Projekt benutzt. Gerrit selbst ist dabei in Java geschrieben. Deshalb sollte dieses natürlich installiert werden:

apt-get install openjdk-6-jre-headless

Nach der Installation von Java legen wir für Gerrit einen extra Benutzer an und wechseln in seinen Kontext:

adduser gerrit
su gerrit
cd ~gerrit

Im Homeverzeichnis des Nutzers angekommen laden wir das Kompilat von Gerrit herunter und starten den Initialisierungsvorgang:

wget http://gerrit.googlecode.com/files/gerrit-2.2.1.war
chmod 744 gerrit-2.2.1.war
java -jar gerrit-2.2.1.war init -d review

Das „review“ bezeichnet hierbei das Verzeichnis in welchem Gerrit die entsprechenden Dateien anlegt, welche für den Betrieb der Software benötigt werden.

Im ersten Schritt fragt Gerrit ob der Ordner angelegt und initialisiert werden soll, was wir mit Yes beantworten. Alle anderen Meldungen bestätigen wir mit der Entertaste bis wir zum Punkt „Email Delivery“ kommen. Hier geben wir die Daten für einen SMTP Server ein über welchen Gerrit die Mails verschickt. Bei der Frage nach der „Canonical URL“ sollte die URL eingegeben werden unter der das System später erreichbar sein soll z.B. „http://review.invertika.org“.

Nach der Konfiguration startet Gerrit und ist dann per Browser erreichbar. Nachdem man sich einen Account registriert hat ist man automatisch in der Gruppe „Administrators“. Nun sollte man unter Settings -> SSH Public Keys den entsprechenden Schlüssel hinterlegen. Mittels

ssh -p 29418 nutzername@host

z.B.

ssh -p 29418 

kann man nun überprüfen ob der Server den Schlüssel akzeptiert. Das ganze sollte dann so aussehen:

  ****    Welcome to Gerrit Code Review    ****

Hi seeseekey, you have successfully connected over SSH.

Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:

git clone ssh://:29418/REPOSITORY_NAME.git

Nachdem die grundlegende Konfiguration angelegt ist, kann damit begonnen werden, ein Projekt anzulegen. Dies geschieht allerdings nicht über die Weboberfläche, sondern per SSH:

ssh -p 29418 nutzername@host gerrit create-project -n projektname

z.B.

ssh -p 29418  gerrit create-project -n sandbox

Damit ist das Projekt dann angelegt. Nun muss noch das bestehende Repository in das Gerrit System überführt werden. Dazu wird zuerst das bereits bestehende Repository geclont:

git clone :Invertika/sandbox.git

Dann pushen wir das Repository in das neue Gerrit Projekt:

cd sandbox
git remote rm origin
git remote add origin ssh://:29418/sandbox.git
git push ssh://:29418/sandbox.git HEAD:refs/heads/master

Kommt es beim Push zu der Meldung:

Permission denied (publickey).

muss der entsprechende SSH Schlüssel zu dem Nutzer in Gerrit angetragen werden. Ist die Mailadresse eines Commiters nicht bekannt kann es zu folgendem Fehler kommen:

remote: ERROR:  In commit 9228f67aa9113fa73c80f36e81cb5a62bf930c6c
remote: ERROR:  committer email address manaserv@herse.(none)
remote: ERROR:  does not match your user account.
remote: ERROR:
remote: ERROR:  The following addresses are currently registered:
remote: ERROR:    
remote: ERROR:
remote: ERROR:  To register an email address, please visit:
remote: ERROR:  http://review.invertika.org/#settings,contact

Hier hilft es dem Projekt die entsprechenden Rechte zu geben damit die Identität „gefälscht“ werden darf. Ansonsten kann noch der Fehler:

! [remote rejected] HEAD -> master (prohibited by Gerrit)

auftreten. Auch hier hilft die temporäre Anhebung der Rechte für das jeweilige Projekt, da man normalerweise nicht in den Master Branch schreiben darf (was aber beim ersten Anlegen des Projektes gewollt ist).

Nachdem das Projekt angelegt ist kann man es sich mittels:

git clone ssh://:29418/sandbox.git

auf die Festplatte holen. Möchte man Gerrit neustarten, stoppen oder starten so sieht das wie folgt aus:

review/bin/gerrit.sh restart
review/bin/gerrit.sh stop
review/bin/gerrit.sh start

Weitere Informationen gibt es unter:
http://code.google.com/p/gerrit/
http://www.rockbox.org/wiki/GerritDemoGuide
http://de.wikipedia.org/wiki/Gerrit_%28Software%29
http://gerrit.googlecode.com/svn/documentation/2.1.5/config-replication.html
http://unethicalblogger.com/2009/12/07/code-review-with-gerrit-a-mostly-visual-guide.html
http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-you-are-not-committer.html

SSH Schlüssel für Github unter Ubuntu und Mac OS X hinzufügen

Wenn man ein Git Repository bei GitHub hat, so ist es doch recht nervig mit diesem per HTTPS zu arbeiten, da man dort für jede Anwendung sein GitHub Passwort eingeben muss. Einfacher ist es wenn man seinen Public SSH Key bei GitHub hinterlegt. Dabei wird hier davon ausgegangen das man noch keinen SSH Schlüssel besitzt. Um sich einen solchen anzulegen wechselt man auf die Konsole und gibt dort:

ssh-keygen -t rsa -C ""

ein, wobei die Mailadresse natürlich zu ersetzen ist. In seinem Homeverzeichnis hat man nun im Ordner .ssh eine Datei namens id_rsa.pub welche man in einem Texteditor öffnen sollte. Nun geht man auf die Seite https://github.com/account/ssh und fügt dort einen neuen Schlüssel (Add another public key) hinzu. Dabei kopiert man die Zeichenkette aus der id_rsa.pub Datei in das Feld Key. Anschließend kann man sich ein Git Repository über SSH mittels:

git clone :Invertika/data.git

holen und (die entsprechenden Rechte vorausgesetzt) problemlos mittels

git push

die getätigten Änderungen wieder in das GitHub Repository bringen, ohne ein Passwort eingeben zu müssen. Unter Mac OS X funktioniert das ganze im übrigen genauso.

Weitere Informationen gibt es unter:
http://help.github.com/win-set-up-git/

Mono auf älteren Ubuntusystemen installieren

Ich betreibe einen Server auf welchen im Moment noch die 10.04 (Lucid) Version von Ubuntu läuft. Auf diesem Rechner benötige ich ein Mono 2.10. Glücklicherweise muss man das ganze nicht von Hand kompilieren, da sich jemand die Arbeit gemacht hat und dafür ein Skript geschrieben hat:

wget --no-check-certificate https://github.com/nathanb/iws-snippets/raw/master/mono-install-scripts/ubuntu/install_mono-2.10.sh
chmod 755 install_mono-2.10.sh
./install_mono-2.10.sh

Nach dem Start des Skriptes ist der Rechner eine Weile beschäftigt, aber danach sollte die Mono Runtime 2.10 auf dem Rechner sein. Sie befindet sich dabei im Ordner /opt/mono-2.10/ kann also zum Beispiel so aufgerufen werden:

/opt/mono-2.10/bin/mono autoupdate.exe

Weitere Informationen gibt es unter:
http://www.integratedwebsystems.com/2011/02/mono-2-10-install-script-for-ubuntu-fedora/
http://www.integratedwebsystems.com/2011/08/install-mono-2-10-3-on-ubuntu-using-bash-script/

Updating certificates in /etc/ssl/certs… cat: write error: No space left on device

Beim updaten des Paketes ca-certificates gab es eine interessante Fehlermeldung:

Updating certificates in /etc/ssl/certs… cat: write error: No space left on device

Im ersten Moment klang das als ob es zu wenig freier Speicher vorhanden war. Ein

df -h

zeigt aber an das noch ausreichend Speicher verfügbar war. Erst beim zweiten Blick auf die Ausgabe von df zeigte sich der Übeltäter.

none 16M 16M 16M 100% /tmp/

Das /tmp/ Verzeichnis war voll. Nach dem löschen des Inhaltes des Verzeichnisses, funktionierte das Update wieder tadellos.

Probleme mit grub2 und btrfs unter Ubuntu

Nachdem ich auf meinem Netbook Lubuntu aufgesetzt hatte und dabei das Dateisystem btrfs nutze, gab grub2 beim Start folgende Fehlermeldung von sich:

sparse file not allowed

Abhilfe schafft es wenn man in der Datei /etc/grub.d/00_header die Zeile:

if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi

auskommentiert. Das ganze sieht dann so aus:

function recordfail {
  set recordfail=1
  #if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
}

Anschließend muss noch

update-grub

ausgeführt werden. Danach ist der Fehler verschwunden.

Weitere Informationen gibt es unter:
http://mirkolofio.wordpress.com/2011/05/20/error-sparse-file-not-allowed/
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/464743