Schulung-Teil6-Erste Schritte mit git
Vorwort
Diese Schulung hat am 30.03.2017 stattgefunden. Zuerst haben wir git installiert und ein wenig kennengelernt und dann noch ein Projekt aus git installiert. Das ist noch nicht funktionsfähig, da noch notwendige Komponenten fehlen, doch das wird wohl voraussichtlich in zwei Wochen folgen.
Unsere Test-Server werden bei uns wohl bald mal noch verschoben, dass wir auch vom Arbeitsplatz aus auf die Geräte zugreifen können. So können wir in den Schulungen noch Aufgaben bekommen, welche wir dann in der Zeit bis zur nächsten Schulung probieren können. Da geplant ist, dass die Server und virtuellen Maschinen dann statische IP Adressen kriegen wird sich das aufstarten ein wenig ändern. Trotzdem folgt als erstes noch eine Repetition zum aufstarten und einloggen in Server und virtuellen Maschine.
Falls noch Fragen offen sind nach dieser Anleitung bitte oben bei "Ansichten" auf "Diskussion" gehen und Feedback hinterlassen, dass ich noch weitere Details hinzufügen kann. jr
Repetition
Fernstart des Servers
Zuerst wollen wir unseren Server erstmal einschalten. Dazu nutzen wir das "wakeonlan" Programm. Die allgemeine Formulierung dazu ist:
wakeonlan -i "broadcast IP" "MAC address"
In meinem Fall war der Befehl "wakeonlan -i 192.168.67.255 00:21:5a:6d:6d:42". Für meine Arbeitskollegen ändert sich die MAC-Adresse, doch die restliche Synthax können sie auch nutzen.
IP des Servers ausfindig machen
Als nächstes wollen wir herausfinden, welche IP Adresse unser Server vom DHCP-Server bezogen hat. Aus meiner Erfahrung hat mein Server immer die gleiche Adresse bezogen, doch da dies nicht garantiert ist, schaut man besser nach.
less /var/lib/dhcp/dhcpd.leases
Hier suchen wir unseren Eintrag anhand der MAC-Adresse raus, dass wir anschliessend auf unserem Server einloggen können. Über "q" kann man less wieder verlassen.
Fernzugriff auf Server
Um den Fernzugriff zu machen nutzen wir das Programm "ssh". Da aus Sicherheitsgründen nicht als root eingeloggt werden kann per SSH, haben wir noch einen weiteren Benutzer kreiert beim Aufsetzen des Systems. Um die Adresse vom Server herauszufinden haben wir ja vorher den Eintrag im DHCP-Server gesucht.
ssh "username"@"remote computer"
IP der virtuellen Maschine ausfindig machen
Ich kenne aktuell leider keinen besseren Weg um auf die virtuelle Maschine zu kommen und darum muss man diesen, ein wenig umständlichen, Weg nutzen. Da wir ja erst auf dem Server (Xen-Hypervisor) sind, können wir uns die virtuellen Maschinen anzeigen lassen.
sudo xl list
In dieser Auflistung ist jede Maschine mit einer ID versehen. Diese Zahl merken wir uns für den nächsten Befehl.
sudo xl console "ID"
Jetzt müssen wir unsere Login-Daten der virtuellen Maschine eingeben und anschliessend die IP Adresse der virtuellen Maschine herausfinden:
ip a
Es wäre auch schon möglich von hier aus zu arbeiten, doch man kann dann nicht das gesammte Fenster nutzen, sondern nur einen Teil davon. Somit ist es angenehmer, wenn man jetzt wieder die virtuelle Maschine verlässt und entweder vom Server aus oder vom Computer wo man dran sitzt eine neue Verbindung direkt zur virtuellen Maschine macht.
Um von der virtuellen Maschine aus wieder auf denn Server zu kommen, muss man Ctrl+5 oder AltGr+] drücken. Falls man direkt vom Computer aus auf die virtuelle Maschine will, den Server über "exit" verlassen.
Packete auf den neusten Stand bringen
Jetzt wo wir uns auf unserer virtuellen Maschine befinden, wollen wir als erstes mal die Liste der verfügbaren Packete auf den neusten Stand bringen. Dies machen wir über
user1@vm1:~$ sudo apt update
Falls zu den bereits installierten Packeten eine neuere Version vorliegt, so wird es dies uns melden und diese Packete können wir über den folgenden Befehl installieren
user1@vm1:~$ sudo apt upgrade
git installieren
Wir haben unsere Packete auf den neusten Stand gebracht und verfügen über die aktuelle Version der verfügbaren Packete. Da wir heute git installieren wollen, machen wir dies über
user1@vm1:~$ sudo apt install git
Bei der Installation zeigt es uns, dass noch weitere Packete benötigt werden, dass es funktioniert.
Die folgenden zusätzlichen Pakete werden installiert: git-man liberror-perl patch rsync
- Bei "git-man" handelt es sich um die Man-Page von git
- "liberr-perl" ist eine Bibliothek im Zusammenhang mit Fehlern und wurde in Perl geschrieben
- Bei "patch" handelt es sich um eine Anleitung für Änderungen einer Datei. Das Gegenstück dazu ist "diff" Hier findet man noch eine Anleitung auf Englisch wie man diese beiden Programme nutzen kann.
- Bei Rsync handelt es sich um Packet/Programm zum Datentransfer. Wird bei uns produktiv genutzt um Backups zu machen
Ordner von git uberwachen lassen
Da wir jetzt git installiert haben können wir einen oder mehrere Ordner von git überwachen lassen. Sofern der Ordner noch nicht besteht, erstellen wir den über
mkdir "mein ordner für git"
Anschliessend wechseln wir in den neu erstellten Ordner (oder einen bereits bestehenden) durch
cd "mein ordner für git"
Dass wir die Überwachung nun auch aktivieren geben wir den folgenden Befehl ein:
git init
Ab jetzt werden Änderungen von Dateien überwacht.
Kivitendo über git laden
Es gibt bereits einen Eintrag in unserem Wiki, doch ich werde trotzdem nochmals auflisten wie man dabei vorgeht. Unser Webserver (apache2) hat unter Debian den Benutzer "www-data" und nutzt den Ordner /var/www/. Da dieser Ordner jedoch root gehört müssen wir mit sudo arbeiten.
Wir wollein einen neuen Ordner direkt mit dem Benutzer www-data erstellen
user1@vm1:~$ sudo -u www-data mkdir /var/www/git
Leider erhalten wir die Meldung "permission denied". Der Grund dafür ist, dass der Ordner /var/www/ dem Benutzer root gehört und somit der Benutzer www-data keinen Ordner erstellen darf. Um die Verzeichnisstruktur besser kennenzulernen hatte ich bereits einen Wiki-Eintrag erstellt. Man kann also auch dort noch weitere Informationen finden, falls man noch kein Experte für Linux ist.
Also erstellen wir diesen Ordner erst mal als Benutzer root:
user1@vm1:~$ sudo mkdir /var/www/git
Und wechseln nun den Datei-Inhaber, sowie den Gruppen-Inhaber über
user1@vm1:~$ sudo chown www-data:www-data /var/www/git
Als nächstes Wechseln wir in diesen neu erstellen Ordner
user1@vm1:~$ cd /var/www/git
Wir fangen jetzt an diesen Ordner von git überwachen zu lassen
user1@vm1:/var/www/git$ git init
Wir laden uns jetzt, während wir der Benutzer www-data sind, eine Kopie von Kivitendo in diesen Ordner
sudo -u www-data git clone https://github.com/kivitendo/kivitendo-erp.git
In unserem Ordner /var/www/git/ wurde ein neuer Unterordner erstellt. Also wechseln wir mal in diesen neuen Ordner
user1@vm1:/var/www/git$ cd kivitendo-erp/
und lassen uns da den gesammten Ordnerinhalt anzeigen
user1@vm1:/var/www/git/kivitendo-erp$ ls -la insgesamt 112 drwxr-xr-x 19 www-data www-data 4096 Mär 30 14:17 . drwxr-xr-x 3 www-data www-data 4096 Mär 30 14:17 .. drwxr-xr-x 3 www-data www-data 4096 Mär 30 14:17 bin drwxr-xr-x 2 www-data www-data 4096 Mär 30 14:17 config drwxr-xr-x 6 www-data www-data 4096 Mär 30 14:17 css lrwxrwxrwx 1 www-data www-data 14 Mär 30 14:17 dispatcher.fcgi -> dispatcher.fpl -rwxr-xr-x 1 www-data www-data 621 Mär 30 14:17 dispatcher.fpl -rwxr-xr-x 1 www-data www-data 507 Mär 30 14:17 dispatcher.pl drwxr-xr-x 7 www-data www-data 4096 Mär 30 14:17 doc -rw-r--r-- 1 www-data www-data 1150 Mär 30 14:17 favicon.ico drwxr-xr-x 8 www-data www-data 4096 Mär 30 14:17 .git -rw-r--r-- 1 www-data www-data 553 Mär 30 14:17 .gitignore -rw-r--r-- 1 www-data www-data 451 Mär 30 14:17 .htaccess drwxr-xr-x 6 www-data www-data 4096 Mär 30 14:17 image -rw-r--r-- 1 www-data www-data 369 Mär 30 14:17 index.html drwxr-xr-x 9 www-data www-data 4096 Mär 30 14:17 js -rw-r--r-- 1 www-data www-data 375 Mär 30 14:17 .jshintrc drwxr-xr-x 4 www-data www-data 4096 Mär 30 14:17 locale -rw-r--r-- 1 www-data www-data 2236 Mär 30 14:17 .mailmap drwxr-xr-x 4 www-data www-data 4096 Mär 30 14:17 menus drwxr-xr-x 4 www-data www-data 4096 Mär 30 14:17 modules drwxr-xr-x 3 www-data www-data 4096 Mär 30 14:17 scripts drwxr-xr-x 26 www-data www-data 4096 Mär 30 14:17 SL drwxr-xr-x 2 www-data www-data 4096 Mär 30 14:17 spool drwxr-xr-x 4 www-data www-data 4096 Mär 30 14:17 sql drwxr-xr-x 20 www-data www-data 4096 Mär 30 14:17 t drwxr-xr-x 5 www-data www-data 4096 Mär 30 14:17 templates drwxr-xr-x 3 www-data www-data 4096 Mär 30 14:17 users -rw-r--r-- 1 www-data www-data 15 Mär 30 14:17 VERSION
-> Die Datei ".git" (Punkt am Beginn sagt, dass es eine versteckte Datei ist) ist zwingend notwendig, wenn ein Programm/Projekt über git verwaltet wird.
-> In ".gitignore" -> sind Dateien/Ordner eingetragen, welche nicht durch git verwaltet werden. Hier kann man also individuelle Einstellungen machen die nicht für alle gleich sind. Über einen Editor kann man auch weitere Ordner hinzufügen.
Weitere Befehle für den Umgang mit git
Da wir jetzt ein neues Programm über git geladen haben, können wir jetzt git ein wenig besser kennenlernen. Es gibt auch im Netz bereits Seiten um die git Grundbefehle kennenzulernen. Auch bei uns im Wiki gibt es schon Einträge zu git. Sie befinden sich hier und hier
Der erste Befehl zeigt uns was für Zweige (eng. Branches) verfügbar sind. Da wir es erst gerade geholt haben, ist diese Zahl noch sehr klein und zeigt uns nur den master-Zweig an.
user1@vm1:/var/www/git/kivitendo-erp$ git branch * master
Dieser Befehl funktioniert jedoch nur, wenn wir uns in einem Ordner befinden, welcher von git überwacht wird. Zum zeigen, dass es eine Fehlermeldung produkiert in einem anderen Ordner hier der Versuch dazu:
user1@vm1:/var/www/git$ git branch fatal: Not a git repository (or any of the parent directories): .git
Um zu sehen welche Versionen es zu einem bestimmten Projekt gib, kann man dies über den folgenden Befehl anzeigen lassen:
user1@vm1:/var/www/git/kivitendo-erp$ git tag
Dass wir einen neuen Zweig anfange können müssen wir den nächsten Befehl eingeben:
user1@vm1:/var/www/git/kivitendo-erp$ sudo git checkout -b produktiv release-3.4.1
- Der neue Zweig wird über "-b" angefangen
- "produktiv" ist der Name den wir für den neuen Zweig gewählt haben
- "release-3.4.1" ist die Version von Kivitendo, welche wir als Basis für diesen Zweig nehmen wollen.
Da wir einen neuen Zweig gemacht haben können wir jetzt mit dem "git branch" mehr sehen:
user1@vm1:/var/www/git/kivitendo-erp$ git branch master * produktiv
Ein weiterer Befehl zum zeigen was unser aktueller Stand ist, ist der folgende:
user1@vm1:/var/www/git/kivitendo-erp$ git status Auf Branch produktiv nichts zu committen, Arbeitsverzeichnis unverändert
Falls eine neue Version veröffentlicht wurde und man diese installieren möchte, wechselt man erst wieder in den Master-Zweig
falls updates gemacht wurden und man die installieren will
user1@vm1:/var/www/git/kivitendo-erp$ sudo git checkout master Zu Branch 'master' gewechselt Ihr Branch ist auf dem selben Stand wie 'origin/master'.
und würde dann die neue Version holen. Natürlich kann dies bei mir nichts neues anzeigen, da ja bereits die aktuelle Version erst gerade installiert wurde.
user1@vm1:/var/www/git/kivitendo-erp$ sudo git pull
Um sehen zu können, was zuletst an einem Release verändert wurde kann man diesen Befehl benutzen:
user1@vm1:/var/www/git/kivitendo-erp$ sudo git log
Will man wieder in einen anderen Zweig wechseln, so macht man dies über
user1@vm1:/var/www/git/kivitendo-erp$ sudo git checkout produktiv Zu Branch 'produktiv' gewechselt
Schlusswort
Unser Kivitendo kann bislang noch nicht laufen, da noch kein Postgres installiert und konfiguriert wurde.
Wenn man die virtuelle Maschine oder den Server ausschaltet, während man in einer SSH Session ist, so kann man über "Enter"+~+. zum Client zurückkommen. Man drückt also nacheinander die Enter-Taste, AltGr+~, Spacebar und zum Schluss noch .
Aufgabe fürs nächste Mal
Kivitendo ist nur ein Beispiel von einem Programm welches über git weiterentwickelt wird. Weitere Programme welche sich bei uns im Einsatz befinden und man über git bezieht sind NextCloud oder Openki. Auch der Linux-Kernel wird über git weiterentwickelt.
Die Aufgabe ist es jetzt weitere Programme von git zu laden. Falls man schauen will, was es alles gibt geht man am besten zu github.com
,