Server Configuration για SVN με Apache

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Για το subversion και την χρήση του μάθαμε από την αντίστοιχη παρουσίαση, της οποίας οι διαφάνειες βρίσκονται εδώ. Όμως για να μπορούν και άλλοι να επικοινωνήσουν με το repository, είναι απαραίτητο να στήσετε περαιτέρω έναn svn server.


Το subversion προσφέρει πολλούς τρόπους για να γίνει αυτό. Μπορείτε να χρησιμοποιήσετε δικό του server, τον svnserve, ο οποίος είναι απλός αλλά χάνει σε δυνατότητες. Έπειτα υπάρχει το λεγόμενο svn+ssh, αλλά για κάθε χρήστη που θα θέλει να αλληλεπιδράσει με το repository θα χρειάζεστε και account στο μηχάνημα, με πρόσβαση μέσω ssh.

Η πιο εύκολη και καθαρή λύση είναι να ρυθμίσουμε τον ήδη υπάρχοντα web server (στην περίπτωσή μας apache) για να εξυπηρετεί και αυτήν την ανάγκη. Παρέχει δε και έναν απλό τρόπο για authentication.

Ο οδηγός βασίζεται στην αντίστοιχη ενότητα του svn book, και θα επικεντρωθεί σε Debian, αλλά πολύ εύκολα προσαρμόζεται σε άλλες διανομές. Το μόνο που αλλάζει είναι τα πακέτα εγκατάστασης και το που βρίσκονται τα configuration files του apache.

Εγκατάσταση

Αρχικά λοιπόν, υποθέτοντας ότι έχετε apache και subversion, θα πρέπει να εγκαταστήσουμε μόνο την "κόλλα" μεταξύ svn και apache

# aptitude install libapache2-svn

έπειτα ως root θα πρέπει να κάνετε link κάποια αρχεία από το mods-available στο mods-enabled, αν αυτό δεν γίνει αυτόματα κατά την εγκατάσταση:

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/dav_svn.load ./
# ln -s ../mods-available/dav_svn.conf ./
# ln -s ../mods-available/auth_basic.load ./

Ρύθμιση του Apache

Για τη ρύθμιση του Apache βάζουμε τα ακόλουθα στο αρχείο /etc/apache2/mods-enabled/dav_svn.conf, ή αν προτιμάτεε στο τέλος του /etc/apache2/httpd.conf:

<Location /svn>
  DAV svn
  SVNParentPath /var/svn

  # our access control policy
  AuthzSVNAccessFile /var/svn/.svn-access-file

  # try anonymous access first, resort to real
  # authentication if necessary.
  Require valid-user

  # how to authenticate a user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /var/svn/.svn-auth-file
</Location>

Καλό είναι να ρυθμίσουμε τον Apache ώστε να κάνει log τα svn commands με πιο φιλικό τρόπο, και κατά προτίμηση σε ξεχωριστό αρχείο. Για να γίνει αυτό προσθέτουμε στο αρχείο /etc/apache2/sites-enabled/default, κάτω από τη γραμμή CustomLog /var/log/apache2/access.log combined, το ακόλουθο:

 CustomLog /var/log/apache2/svn.log "%t %u %{SVN-ACTION}e" env=SVN-ACTION

και τώρα μπορούμε να παρακολουθούμε την κίνηση στο repository από το αρχείο /var/log/apache2/svn.log.

Ρύθμιση του repository

Το τι σημαίνουν τα παραπάνω, θα ξεκαθαριστεί αφού στήσουμε το svn directory.

# mkdir /var/svn
# cd /var/svn
# svnadmin create repo
# chown -R www-data:www-data repo

Αυτό σημαίνει ότι το repository "repo" στο σύστημα θα βρίσκεται στο /var/svn/repo, ενώ η διεύθυνση του θα είναι http://<your_ip_address>/svn/repo. Φυσικά βοηθάει να έχουμε κάποιο dynamic dns client για να υπάρχει ένα σταθερό hostname.

Έχουμε αλλάξει και τα permissions για να διαβάζεται/γράφεται από τον www-data, τον χρήστη του apache. Υπάρχουν πολλοί άλλοι τρόποι για να γίνει αυτό, αλλά και ο συγκεκριμένος δουλεύει.

Το μόνο που απομένει είναι να έχουμε user authentication για να μην κάνει κάποιος τρίτος commit στο δικό μας project.

Όντας στο /var/svn δημιουργούμε το .svn-access-file (με τελεία για να είναι κρυφό αρχείο του συστήματος). Αυτό το αρχείο έχει μια συγκεκριμένη δομή:

[repo1:/]
user1 = rw
user2 = rw
guest = r

[repo2:/trunk]
user1 = rw
user3 = rw

Μας επιτρέπει δηλαδή να ορίσουμε δικαιώματα r/w ανά χρήστη ανά repository, ακόμα και ανά φάκελο του repository! Η συγκεκριμένη μέθοδος όμως είναι αρκετά απαιτητική, και για μεγάλα sites με πολλά ή μεγάλα respotiries δε συνίσταται. Συμβουλευτείτε το svn book για απλούστερους μηχανισμούς authorization.

Για μια απλή συνεργασία αρκεί βέβαια το

[repo:/]
user1 = rw
user2 = rw
user3 = rw
guest = r

Τέλος το μόνο που απομένει είναι να ορίσουμε κωδικούς για τους χρήστες user[1-3], το guest account προφανώς δεν χρειάζεται.

Πάλι στο /var/svn δίνουμε

# touch .svn-auth-file
# chown root:www-data .svn-auth-file
# chmod 640 .svn-auth-file
# htpasswd -m .svn-auth-file user1

και συμπληρώνετε τον κωδικό. Για επιπλέον χρήστες, απλά επαναλάβετε την τελευταία εντολή.

Κάνουμε reload το configuration του Apache και είμαστε έτοιμοι

 # /etc/init.d/apache2 reload

ή

 apache2ctl restart

Διαβάστε

Version Control With Subversion