/ raspberry

Raspberry Pi als Git-Server in der Schule

Getreu dem Motto dieses Blogs "Technologie und Lernen verbinden" habe ich mir für das neue Jahr vorgenommen, meinen Schüler/-innen zu ermöglichen auf einem Git-Repository arbeiten zu können. Drei Vorteile sehe ich dabei für meinen Unterricht:

  • Projekte können einfacher und schneller über BlueJ 4 zentral gespeichert und versioniert werden
  • mehrere Schüler/-innen können bei bestimmten Projekten einfacher zusammenarbeiten
  • als Lehrkraft kann ich den Projektfortschritt besser beobachten

Die einzelnen Schritte, auf dem Weg zu einer praktikablen und praktischen Lösung stelle ich dazu im Folgenden vor.

Git-Server aufsetzen

Als Hardware verwende ich einen alten Raspberry Pi 1 Model B+ und einen alten USB-Stick. Ob der alte Raspberry Pi im Schuleinsatz schnell genug ist, muss sich dann allerdings erst noch herausstellen.

IMG_6132-1
Auf diesem habe ich mit Etcher Raspbian Lite drauf geflasht. Um per ssh auf den Raspberry zugreifen zu können, muss man dann nur noch eine leere Datei mit dem Name "ssh" auf der Boot-Partition ablegen. Schließt man dann den Raspberry im Netzwerk an kann man sich mit

ssh pi@raspberry

und dem Passwort "raspberry" auf der Konsole einloggen. Mit dem Befehl

passwd

sollte man dann zunächst das Standard-Passwort ändern. Damit die Schüler sich später noch per ssh und mit eingeschränkten Rechten auf dem Raspi anmelden können, wird noch ein neuer Nutzer erzeugt:

adduser git

Nach dem Update Prozess

sudo apt-get update 
sudo apt-get upgrade

installiert man git:

sudo apt-get install git-core

Zur einfachen Erstellung von "Snapshots" aus den Schüler-Repositories verwende ich gitclass. Dazu installiert man zunächst Rust:

curl https://sh.rustup.rs -sSf | sh

Und dann gitclass:

cargo install gitclass

Soweit sind alle benötigten Komponenten installiert. Nun muss noch der USB-Stick mit FAT (exFat machte größere Probleme) formatiert werden. Der Einsatz eines USB-Sticks ist nicht unbedingt notwendig, vereinfacht später jedoch den einfachen Austausch der Schüler-Projekte mit anderen Computern, die nicht im Netzwerk sind. Erstellt man mit

mkdir gitstick

einen Mountpunkt, kann dieser mit

sudo nano /etc/fstab

als letzte Zeile in der fstab-Datei eingetragen werden (ohne Zeilenumbruch):

/dev/sda1 /home/pi/gitstick vfat uid=pi,gid=git,umask=0000,sync,auto,nosuid,rw,nouser 0 0

Details zum Mount-Vorgang findet man hier.

Git-Repositories einrichten

Zunächst sollte ein Master Repository angelegt werden.

mkdir master.git
cd master.git
git init --bare
git remote add pi pi@raspberrypi:/home/pi/master.git
git remote add git git@raspberrypi:/home/pi/master.git

Damit die SchülerInnen sich später nicht per ssh auf dem Raspi anmelden können, wird der git-Nutzer auf die git-shell eingeschränkt.

chsh -s /usr/bin/git-shell git

Möchte man auch, dass nur push- und pull-Requests möglich und die git-shell nicht interaktiv bedient werden kann, schränkt man den git-Nutzer weiter ein:

$ mkdir /home/git/git-shell-commands
$ cat >/home/git/git-shell-commands/no-interactive-login <<\EOF
#!/bin/sh
printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
printf '%s\n' "provide interactive shell access."
exit 128
EOF
$ chmod +x /home/git/git-shell-commands/no-interactive-login

(Quelle: git-scm.com)

Nun erstelle ich mit BlueJ einen Prototypen (z.B. mit leeren Paket-Ordnern für die unterschiedlichen Projekte) und lade diesen über "Werkzeuge->Teamarbeit->Projekt gemeinsam nutzen" in das Master-Repository auf dem Raspberry Pi.

mastergit

Auf dem Raspberry Pi klone ich dann dieses Projekt für alle Schüler/-innen

cd gitstick
sudo git clone --bare ../master.git schuelername.git

Einsatz im Unterricht

Für den Einsatz in der Klasse nutze ich nun noch gitclass. Mit

gitclass init

wird eine neue Klasse angelegt. Danach werden alle Schüler der Klasse hinzugefügt und ihr Repository (/home/pi/gitstick/student1.git)angegeben. Hier könnten auch Online-Repositories angegeben werden.

gitclass add

Nun können sich die Schüler-/innen über BlueJ (oder auch direkt mit git) ihre Arbeitskopie auf ihren Rechner herunterladen und mit dem Programmieren beginnen.
GitBlueJTeam
Über die Button in der BlueJ-Oberfläche können dann neue Versionen (commit & push) in das Repository übertragen werden.

Über

gitclass update

werden die Dateien aus den Repositories aller Schülerinnen und Schüler kopiert, so dass man als Lehrkraft schneller die Projekte begutachten kann.

Backup

Und nach der ganzen Arbeit sollte man natürlich auch ein Backup der SD-Karte anlegen, falls mal etwas schief gehen sollte -> Backup-Anleitungen für Linux, MacOS und Windows.

Raspberry Pi als Git-Server in der Schule
Share this