Chapters ▾ 2nd Edition

4.5 Το Git στον διακομιστή - Δαίμονες του Git

Δαίμονες του Git

Στη συνέχεια θα εγκαταστήσουμε έναν δαίμονα που θα εξυπηρετεί αποθετήρια μέσω του πρωτοκόλλου “Git”. Αυτή είναι μια συνήθης επιλογή για γρήγορη και χωρίς ταυτοποίηση πρόσβαση στα δεδομένα μας στο Git. Θυμόμαστε πως δεδομένου ότι πρόκειται για μια υπηρεσία χωρίς ταυτοποίηση, οτιδήποτε παρέχεται πάνω από αυτό το πρωτόκολλο είναι δημόσιο εντός του δικτύου του.

Εάν τρέχουμε τον δαίμονα σε έναν διακομιστή εκτός firewall, θα πρέπει να χρησιμοποιείται μόνο για έργα που είναι ορατά σε όλον τον κόσμο. Αν ο διακομιστής στον οποίο τον τρέχουμε είναι εντός firewall, μπορούμε να τον χρησιμοποιήσουμε για έργα στα οποία ένας μεγάλος αριθμός ανθρώπων ή υπολογιστών (continuous integration ή build servers) έχουν πρόσβαση μόνο για ανάγνωση, όταν δεν θέλουμε να προσθέσουμε κλειδί SSH για τον καθένα.

Σε κάθε περίπτωση, το πρωτόκολλο Git είναι σχετικά εύκολο στη ρύθμισή του. Βασικά, θα πρέπει να εκτελέσουμε αυτή την εντολή με “δαιμονοποιημένο” τρόπο:

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Ο διακόπτης --reuseaddr επιτρέπει στον διακομιστή να επανεκκινήσει χωρίς να αναμένει αποσύνδεση των παλαιών συνδέσεων, ο διακόπτης --base-path επιτρέπει την κλωνοποίηση έργων χωρίς να καθορίζεται ολόκληρη η διαδρομή (path), και η διαδρομή (path) στο τέλος λέει στον δαίμονα Git πού να αναζητήσει αποθετήρια προς εξαγωγή. Εάν τρέχουμε ένα firewall, θα χρειαστεί επίσης να του ανοίξουμε μία τρύπα στη θύρα 9418 στο κουτί που τον εγκαθιστούμε στον διακομιστή.

Μπορούμε να “δαιμονοποίησουμε” αυτή τη διαδικασία με διάφορους τρόπους, ανάλογα με το λειτουργικό σύστημα που εκτελούμε.

Δεδομένου ότι systemd είναι το πιο συνηθισμένο σύστημα init στις μοντέρνες διανομές Linux, μπορούμε να χρησιμοποιήσουμε αυτό για τον σκοπό αυτό. Απλά βάλτε ένα αρχείο στο /etc/systemd/system/git-daemon.service με αυτά τα περιεχόμενα:

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

Αν προσέξουμε ο δαίμονας του Git daemon ξεκινά εδώ ως git τόσο για την ομάδα (group) όσο και για τον χρήστη (user). Το τροποποιούμε ώστε να το προσαρμόσουμε στις ανάγκες μας και σιγουρευόμαστε ότι ο χρήστης που δίνεται υπάρχει στο σύστημα. Επίσης, ελέγχουμε ότι το εκτελέσιμο αρχείο του Git βρίσκεται πράγματι στο /usr/bin/git αλλιώς αλλάζουμε τη διαδρομή (path) αναλόγως.

Τέλος, θα εκτελέσουμε systemctl enable git-daemon ώστε η υπηρεσία να ξεκινά αυτόματα κατά την εκκίνηση του υπολογιστή και μπορούμε να εκκινήσούμε και να σταματήσουμε την υπηρεσία με systemctl start git-daemon και systemctl stop git-daemon αντίστοιχα.

Σε άλλα συστήματα, ίσως θελήσουμε να χρησιμοποιήσουμε το xinetd, ένα script στο σύστημά μας sysvinit ή κάτι άλλο — με την προϋπόθεση ότι μπορούμε δαιμονοποιήσουμε αυτή την εντολή και να την παρακολουθούμε με κάποιον τρόπο.

Στη συνέχεια, πρέπει να ενημερώσουμε το Git ποια αποθετήρια επιτρέπουν την πρόσβαση σε διακομιστές Git χωρίς ταυτοποίηση. Μπορούμε να το κάνουμε σε κάθε αποθετήριο δημιουργώντας ένα αρχείο που ονομάζεται git-daemon-export-ok.

$ cd /path/to/project.git
$ touch git-daemon-export-ok

Η παρουσία αυτού του αρχείου λέει στο Git ότι επιτρέπεται να εξυπηρετήσει αυτό το έργο χωρίς ταυτοποίηση.