Thursday, June 18, 2009
Greek Coding Camp 2009!
O Chania-LUG και η ελληνική ομάδα Fedora διοργανώνουν 4-7 Ιουλίου το Greek Coding Camp. Μια κατασκήνωση στην Παλαιόχωρα με laptop, hacking, μπάνια και άλλα events.
Μέσα στα projects έχω βάλει και κάποια scripts και προγραμματάκια που χρησιμοποιώ στο FreeBSD Documentation αλλά και για την δημιουργία Custom FreeBSD DVDs. Επίσης υπάρχει και μια πρόταση για μετάφραση documentation (θα προτείνω κάποιο άρθρο).
Ελπίζω να εγκριθεί κάποια από τις προτάσεις μου. Το σίγουρο πάντως είναι ότι θα περάσουμε καλά!
Λεπτομέρειες για τη διοργάνωση μπορείτε να βρείτε εδώ:
Greek Coding Camp Wiki
Ανακοινώσεις έχουν ήδη σταλεί στις περισσότερες ενεργές λίστες / forums. Μη λείψει κανείς!
Ετικέτες
camping,
chania-lug,
development,
fedora,
FOSS,
hacking,
programming,
translation
Friday, June 5, 2009
Git on FreeBSD - Repository για τον Chania-LUG
Κάποια μέλη του Συλλόγου ζήτησαν να βάλουμε git στο server του Chania-LUG. Έχουμε ήδη εγκατεστημένο mercurial αλλά προφανώς ένα ακόμα repository δεν βλάπτει. Ξεκίνησα λοιπόν να διαβάζω το documentation, τόσο τα αρχεία READΜΕ και INSTALL που εγκαθίστανται με το git, όσο και τις online πηγές. Οι πιο βοηθητικές για μένα ήταν:
Όπως είναι λογικό, λίγο αργότερα είχα μπερδευτεί. Τι θέλω τελικά; Ενα repository που να μπορεί να γίνεται clone μέσω git protocol, να γίνεται push/pull μέσω ssh (για ελάχιστους χρήστες, γιατί ssh πρόσβαση στο server είναι πολύ περιορισμένη) και http pull/push για όλους τους υπόλοιπους. Με βάση τα παραπάνω πρέπει:
Μεταξύ http και https προτίμησα το απλό http γιατί 1)στο https το certificate θα ήταν self signed και θα γεμίζαμε χαζά warnings 2)το κενό ασφαλείας είναι πολύ μικρό, καθώς ακόμα και αν κάποιος έπαιρνε τον κωδικό με man-in-the-middle attack, το πολύ να έμπαινε σε ένα git repo. Αφήνουμε βέβαια πάντα ανοικτό το ενδεχόμενο να αλλάξουμε γνώμη στο μέλλον.
Ας δούμε λοιπόν πως γίνεται η εγκατάσταση git σε FreeBSD!
Αυτό είναι το εύκολο κομμάτι:
Και εδώ είναι οι δύο επιλογές που χρησιμοποιήθηκαν:
Προφανώς δεν με ενδιαφέρουν οι επιλογές που αναφέρονται σε CVS και Perforce. Μετά από λίγη ώρα building, η βασική εγκατάσταση είναι έτοιμη. Αρχίζει το διάβασμα των αρχείων README / INSTALL από το /usr/local/share/examples/git/gitweb καθώς και των οδηγών που ανέφερα παραπάνω.
Μετά από διάφορες δοκιμές αλλαγές και πειραματισμούς, κατέληξα στην παρακάτω VirtualHosts καταχώριση για τον apache που χρησιμοποιούμε:
Με αυτό τον τρόπο το web interface εμφανίζεται στη διεύθυνση http://git.chania-lug.gr
Ναι, αλλά αυτό δεν είναι αρκετό.
Πρέπει να δημιουργηθούν τα repositories. Εδώ δείχνω τη δημιουργία του test.git. Η ίδια διαδικασία χρησιμοποιείται για καθένα:
H επιλογή bare ορίζει ότι δεν θα δημιουργηθεί work area για το repository.
Με το παραπάνω θα επιτρέπεται στον git daemon να δίνει αυτό το repository.
Επειδή θα γίνεται http push/pull, το repo θα ανήκει στο χρήστη www. Το www group θα έχει επίσης write access ώστε όσοι χρήστες χρησιμοποιούν ssh (και ανηκουν στο www group) θα μπορούν επίσης να κάνουν push.
Καλά όλα αυτά, αλλά ακόμα δεν είμαστε έτοιμοι. Πρέπει να επεξεργαστούμε το αρχείο /usr/local/www/gitweb/gitweb.cgi (ή να φτιάξουμε άλλο δικό μας αρχείο ρυθμίσεων). Προτιμάμε την πρώτη λύση, μια και οι αλλαγές είναι λίγες. Ο κατάλογος των repositories (repos) βρίσκεται άλλωστε ήδη μέσα στο DocumentRoot του site. Οι αλλαγές που κάνουμε στο gitweb.cgi είναι:
Ακόμα δεν έχουμε projects.list και χρειαζόμαστε ένα όπως φαίνεται παραπάνω, με το περιεχόμενο:
Τέλος ξεχάσαμε να βάλουμε description στο repository. Αλλάζουμε το περιεχόμενο του αρχείου:
με το επιθυμητό.
Πρέπει ακόμα να φτιάξουμε το αρχείο κωδικών με την httpasswd καθώς και να επιβεβαιώσουμε ότι το WebDAV και το davfs είναι ενεργοποιημένα στα modules του apache. Νομίζω θα το καταφέρετε. Εδώ κάπου τελειώνει (νομίζω) το web configuration.
Σε σχέση με τα προηγούμενα, αυτό είναι παιχνιδάκι. Υπάρχει αντίστοιχο /usr/local/etc/rc.d script, και κάποιες μεταβλητές για το /etc/rc.conf που φαίνονται παρακάτω:
Εξαιτίας του base-path μπορεί κάποιος να κάνει:
αντί για:
To δεύτερο πάντως χρειάζεται όταν γίνεται git http-push (pull).
Μην ξεχάσετε να ανοίξετε την πόρτα 9418 TCP στο firewall (και να κάνετε προώθηση από το router σας).
Έχοντας κάνει όλα τα παραπάνω, μπορούμε να κάνουμε μερικές απλές ρυθμίσεις στο client μηχάνημα μας:
Δημιουργούμε το αρχείο ~/.netrc με τα παρακάτω περιεχόμενα:
και διορθώνουμε στα γρήγορα τα permissions:
Προαιρετικά, μπορούμε να γράψουμε και:
ώστε να μη χρειάζεται συνέχεια να δίνουμε το url του server.
Μπορούμε τώρα να κάνουμε clone, μέσω πρωτοκόλλου git:
και push μέσω http:
Τι είναι αυτός ο θόρυβος; Α ναι, ο δίσκος γυρίζει σαν τρελός. Είναι πάλι τρεις το πρωί, και μου κάνει παρέα ο cron...
Όπως είναι λογικό, λίγο αργότερα είχα μπερδευτεί. Τι θέλω τελικά; Ενα repository που να μπορεί να γίνεται clone μέσω git protocol, να γίνεται push/pull μέσω ssh (για ελάχιστους χρήστες, γιατί ssh πρόσβαση στο server είναι πολύ περιορισμένη) και http pull/push για όλους τους υπόλοιπους. Με βάση τα παραπάνω πρέπει:
- Να εκτελείται ο git daemon με κάποιες ρυθμίσεις (εύκολο) για git clone / pull
- Να χρησιμοποιηθεί http ή https authentication
- Να χρησιμοποιηθεί WebDAV για την αποστολή / λήψη δεδομένων μέσω http (σύμφωνα πάντα με τις πληροφορίες που βρήκα)
Μεταξύ http και https προτίμησα το απλό http γιατί 1)στο https το certificate θα ήταν self signed και θα γεμίζαμε χαζά warnings 2)το κενό ασφαλείας είναι πολύ μικρό, καθώς ακόμα και αν κάποιος έπαιρνε τον κωδικό με man-in-the-middle attack, το πολύ να έμπαινε σε ένα git repo. Αφήνουμε βέβαια πάντα ανοικτό το ενδεχόμενο να αλλάξουμε γνώμη στο μέλλον.
Ας δούμε λοιπόν πως γίνεται η εγκατάσταση git σε FreeBSD!
Εγκατάσταση του Port
Αυτό είναι το εύκολο κομμάτι:
# cd /usr/ports/devel/git
# make install clean
Και εδώ είναι οι δύο επιλογές που χρησιμοποιήθηκαν:
[X] GUI Enable building of GUI tools
[X] GITWEB Install gitweb
Προφανώς δεν με ενδιαφέρουν οι επιλογές που αναφέρονται σε CVS και Perforce. Μετά από λίγη ώρα building, η βασική εγκατάσταση είναι έτοιμη. Αρχίζει το διάβασμα των αρχείων README / INSTALL από το /usr/local/share/examples/git/gitweb καθώς και των οδηγών που ανέφερα παραπάνω.
HTTP Configuration
Μετά από διάφορες δοκιμές αλλαγές και πειραματισμούς, κατέληξα στην παρακάτω VirtualHosts καταχώριση για τον apache που χρησιμοποιούμε:
<virtualhost>
ServerName git.chania-lug.gr
DocumentRoot "/usr/local/www/gitweb"
DAVLockDB "/some/place/locks/DAV.lock"
DirectoryIndex gitweb.cgi
CustomLog /some/place/logs/git.chania-lug.gr/access_log.txt combined env=!dontlog
ErrorLog /some/place/logs/git.chania-lug.gr/error_log.txt
<directory>
Options FollowSymlinks ExecCGI
AllowOverride None
Order allow,deny
Allow from all
<files>
SetHandler cgi-script
<files>
</directory>
<location /repos/test.git>
DAV on
Options +Indexes
AuthUserFile /some/other/place/htpasswd
AuthGroupFile /dev/null
AuthName "git"
AuthType Basic
Require valid-user
</location>
<location /repos/live-helper.git>
DAV on
Options +Indexes
AuthUserFile /some/other/place/htpasswd
AuthGroupFile /dev/null
AuthName "git"
AuthType Basic
Require valid-user
</location>
<virtualhost>
Με αυτό τον τρόπο το web interface εμφανίζεται στη διεύθυνση http://git.chania-lug.gr
Ναι, αλλά αυτό δεν είναι αρκετό.
Πρέπει να δημιουργηθούν τα repositories. Εδώ δείχνω τη δημιουργία του test.git. Η ίδια διαδικασία χρησιμοποιείται για καθένα:
# cd /usr/local/www/gitweb/repos
# mkdir test.git
# cd test.git
# git init --bare
H επιλογή bare ορίζει ότι δεν θα δημιουργηθεί work area για το repository.
# touch git-daemon-export-ok
Με το παραπάνω θα επιτρέπεται στον git daemon να δίνει αυτό το repository.
# git --bare update-server-info
# mv hooks/post-update.sample hooks/post-update
Επειδή θα γίνεται http push/pull, το repo θα ανήκει στο χρήστη www. Το www group θα έχει επίσης write access ώστε όσοι χρήστες χρησιμοποιούν ssh (και ανηκουν στο www group) θα μπορούν επίσης να κάνουν push.
# cd ..
# chown -R www:www test.git
# chmod -R g+w test.git
Καλά όλα αυτά, αλλά ακόμα δεν είμαστε έτοιμοι. Πρέπει να επεξεργαστούμε το αρχείο /usr/local/www/gitweb/gitweb.cgi (ή να φτιάξουμε άλλο δικό μας αρχείο ρυθμίσεων). Προτιμάμε την πρώτη λύση, μια και οι αλλαγές είναι λίγες. Ο κατάλογος των repositories (repos) βρίσκεται άλλωστε ήδη μέσα στο DocumentRoot του site. Οι αλλαγές που κάνουμε στο gitweb.cgi είναι:
our $projectroot = "/usr/local/www/gitweb/repos";
our $projects_list = "/usr/local/www/gitweb/projects.list";
Ακόμα δεν έχουμε projects.list και χρειαζόμαστε ένα όπως φαίνεται παραπάνω, με το περιεχόμενο:
test.git Manolis+Kiagias
Τέλος ξεχάσαμε να βάλουμε description στο repository. Αλλάζουμε το περιεχόμενο του αρχείου:
/usr/local/www/gitweb/repos/test.git/.git/description
με το επιθυμητό.
Πρέπει ακόμα να φτιάξουμε το αρχείο κωδικών με την httpasswd καθώς και να επιβεβαιώσουμε ότι το WebDAV και το davfs είναι ενεργοποιημένα στα modules του apache. Νομίζω θα το καταφέρετε. Εδώ κάπου τελειώνει (νομίζω) το web configuration.
Ρύθμιση του git_daemon
Σε σχέση με τα προηγούμενα, αυτό είναι παιχνιδάκι. Υπάρχει αντίστοιχο /usr/local/etc/rc.d script, και κάποιες μεταβλητές για το /etc/rc.conf που φαίνονται παρακάτω:
git_daemon_enable="YES"
git_daemon_flags="--base-path=/usr/local/www/gitweb/repos /usr/local/www/gitweb/repos"
Εξαιτίας του base-path μπορεί κάποιος να κάνει:
git clone git://git.chania-lug.gr/test.git
αντί για:
git clone git://git.chania-lug.gr/repos/test.git
To δεύτερο πάντως χρειάζεται όταν γίνεται git http-push (pull).
Μην ξεχάσετε να ανοίξετε την πόρτα 9418 TCP στο firewall (και να κάνετε προώθηση από το router σας).
Ρύθμιση του Client
Έχοντας κάνει όλα τα παραπάνω, μπορούμε να κάνουμε μερικές απλές ρυθμίσεις στο client μηχάνημα μας:
Δημιουργούμε το αρχείο ~/.netrc με τα παρακάτω περιεχόμενα:
machine git.chania-lug.gr
login yourusername
password yourpassword
και διορθώνουμε στα γρήγορα τα permissions:
chmod 600 ~/.netrc
Προαιρετικά, μπορούμε να γράψουμε και:
git-config remote.upload.url \
http://yourusername@git.chania-lug.gr/test.git/
ώστε να μη χρειάζεται συνέχεια να δίνουμε το url του server.
Μπορούμε τώρα να κάνουμε clone, μέσω πρωτοκόλλου git:
git clone git://git.chania-lug.gr/test.git test.git
και push μέσω http:
git http-push http://git.chania-lug.gr/repos/test.git master
Τι είναι αυτός ο θόρυβος; Α ναι, ο δίσκος γυρίζει σαν τρελός. Είναι πάλι τρεις το πρωί, και μου κάνει παρέα ο cron...
Subscribe to:
Posts (Atom)