Einleitung
Nach einer Aktualisierung des Synology NAS funktionieren in der Regel weder ipkg noch alle per ipkg installierten Pakete. Dies liegt daran, dass bei der ipkg-Installation oft mit symbolischen Links gearbeitet wird, die leider ein Update nicht überstehen (http://www.synology-wiki.de/index.php/IPKG). Auch das git-Paket ist bei mir immer betroffen. Seit kurzem gibt es nun auch ein git-Paket der Synocommunity, das sich über die DSM-Paketverwaltung installieren lässt. Das heartbleed-Update des NAS ist nun ein willkommener Anlass, die git-Installation umzustellen.
Wichtig:
- Die folgende Anleitung, setzt voraus dass git schon einmal lief, ein gituser auf dem NAS existiert, openSSL installiert ist und läuft
- Die genannten Pfade gehen von einem Synology NAS aus und einer git-Installation mit ipkg aus. git liegt dann unter
/opt/bin/git
, nach der unten beschrieben Installationsprozedur liegt git dann unter/usr/local/git/bin
- Ab DSM 4.3 gibt es ein offizielles git-Paket von Synology zur einfachen Installation über die Paketverwaltung
Installation prüfen
Als root auf dem NAS anmelden (dazu musss SSH aktiviert werden):
ssh SERVERIP -l root
Zuerst nachprüfen, ob ipkg vorhanden ist:
ls /opt
Wenn das Verzeichnis nicht existiert wurde der symbolische Link gelöscht. Deshalb prüfen, ob ipkg generell noch auf dem Volume ist:
ls /volume1/@optware/bin
Hier sollte ipkg auftauchen.
Den symobolischen Link neu setzen:
ln -s /volume1/@optware /opt
Datei /root/.profile
und /etc/rc.local
überprüfen, NAS neu starten: siehe http://www.jufer.info/projekte/synology_nas/restore_ipkg_after_dsm_upgrade
Jetzt prüfen ob git per ipkg installiert wurde:
/opt/bin/ipkg list_installed
Hier muss git auftauchen. git nun deinstallieren:
/opt/bin/ipkg remove git
git ist nun deinstalliert. ipkg sollte aber auf dem NAS bleiben, weil es für spätere Installtionen nützlich ist.
Git installieren über synocommunity
Nun kan man versuchen, über die eigene Programmier-IDE wie Eclipse oder Netbeans oder Git-GUI einen Push auf das git-repository zu starten. Wenn das klappt – Gratulation!
“git-upload-pack” Fehler beheben
Wenn man Pech hat, meldet die IDE: “git-upload-pack: not found”. Das Problem ist oft ein Fehler in der PATH-Angabe – ausgelöst durch einen Zugriff auf den Server mit SSH. PATH sorgt dafür, dass Dateien direkt ohne ihren kompletten Pfad aufgerufen werden können. Meldet sich der git-client von außen am NAS per SSH an, kennt er die korrekten Pfade für git und git-upload-pack nicht. Deshalb muss der Pfad auf dem Server richtig gesetzt werden.
Dafür gibt es unter UNIX mehrere Möglichkeiten, so hat z. B. jeder User auf einem UNIX-System in der Datei .profile eine Pfadangabe. Wenn wir uns also mit einem User auf dem NAS anmelden, muss der Pfad für diesen User das Verzeichnis auf das git-upload-pack enthalten. Erschwerend kommt bei der hinzu, dass wir uns in der Regel bei git per SSH auf dem Server anmelden und auch der Dienst SSH eigene Pfadangaben haben kann. Zusätzlich ist der SSH-Dämon normalerweise auf dem Synology NAS nicht konfiguriert, /etc/profile
oder ~/.profile
aus zulesen. Deshalb gibt es zwei favorisierte Lösungen:
- Mit symbolischen Links arbeiten, ohne Pfade anzugeben
- SSH so konfigurieren, dass User-Umgebungen (“environments”) beachtet werden und User-Pfade gesetzt werden
Symbolische Links scheiden aufgrund der schlechten Erfahrungen aus. Daher wird im Folgenden Lösung zwei weiter verfolgt:
Die sshd-Konfiguration aufrufen und mit vi ändern:
vi /etc/ssh/sshd_config
Dort die Zeile suchen:
#PermitUserEnvironment no
und ändern in:
PermitUserEnvironment yes
Nun mit dem git-User per SSH anmelden:ssh SERVER-IP -l MYGITUSER
Verzeichnis anlegen:
md .ssh cd .ssh vi
Folgenden Pfad eingeben (Abhängig davon wo git-user-pack liegt), z. B.:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:/usr/local/git/bin
Als “environment” speichern – ohne Dateindung und logout.
Jetzt den sshd neu starten oder das NAS neu starten. Abschließend prüfen, ob der Pfad für den git-User nun auf das git-upload-pack zeigt:
ssh MYGITUSER@SERVER-IP echo \$PATH
Nun sollte die IDE oder GitX einen Push auf das repository ausführen können.