Το Portsnap είναι ένα σύστημα για την ασφαλή διανομή του δέντρου των ports του FreeBSD. Κάθε μια ώρα περίπου, δημιουργείται ένα φωτογραφικό αντίγραφο, “snapshot” ολόκληρου του δέντρου των ports, το οποίο και υπογράφεται κρυπτογραφικά. Τα αρχεία που προκύπτουν, διανέμονται μέσω HTTP.
Όπως και το CVSup το, Portsnap χρησιμοποιεί το μοντέλο ανανέωσης pull: Τα δέντρα των ports, αφού πακεταριστούν και υπογραφούν, διατίθενται σε ένα web server ο οποίος παθητικά περιμένει τα μηχανήματα-πελάτες που θα ζητήσουν αρχεία. Οι χρήστες πρέπει να εκτελέσουν το portsnap(8) για να κατεβάσουν τις ανανεώσεις, είτε χειροκίνητα, είτε μέσω του cron(8) ώστε η διαδικασία να γίνεται αυτόματα σε τακτά διαστήματα.
Για τεχνικούς λόγους, το Portsnap δεν ανανεώνει απευθείας το “εν χρήσει” δέντρο των ports στο /usr/ports/. Αντί για αυτό, εργάζεται σε ένα συμπιεσμένο αντίγραφο του δέντρου, το οποίο αποθηκεύεται από προεπιλογή στο /var/db/portsnap/. Το συμπιεσμένο αυτό αντίγραφο χρησιμοποιείται για την μετέπειτα ανανέωση του κανονικού δέντρου των ports.
Σημείωση: Αν εγκαταστήσετε τον Portsnap από την συλλογή των Ports του FreeBSD, η προεπιλεγμένη θέση για το συμπιεσμένο snapshot θα είναι /usr/local/portsnap/ αντί για /var/db/portsnap/.
Από το FreeBSD 6.0 και μετά, το Portsnap περιέχεται στο βασικό σύστημα του FreeBSD. Σε παλιότερες εκδόσεις του FreeBSD μπορεί να εγκατασταθεί μέσω του port ports-mgmt/portsnap.
Η λειτουργία του Portsnap ελέγχεται από το αρχείο ρυθμίσεων /etc/portsnap.conf. Για τους περισσότερους χρήστες, οι προεπιλεγμένες ρυθμίσεις είναι σωστές. Για περισσότερες πληροφορίες, δείτε τη σελίδα manual portsnap.conf(5).
Σημείωση: Αν εγκαταστήσετε το Portsnap από την συλλογή των Ports, θα χρησιμοποιεί το αρχείο ρυθμίσεων /usr/local/etc/portsnap.conf αντί για το /etc/portsnap.conf. Αυτό το αρχείο ρυθμίσεων δεν δημιουργείται κατά την εγκατάσταση του Port, δημιουργείται όμως ένα υπόδειγμα του αρχείου ρυθμίσεων. Για να το βάλετε στη σωστή θέση εκτελέστε την ακόλουθη εντολή:
# cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf
Την πρώτη φορά που θα εκτελέσετε το portsnap(8), θα χρειαστεί να κατεβάσει ένα συμπιεσμένο snapshot ολόκληρου του δέντρου των ports στο /var/db/portsnap/ (ή στο /usr/local/portsnap/ αν το Portsnap εγκαταστάθηκε από την συλλογή των Ports). Στις αρχές του 2006, το snapshot είχε μέγεθος περίπου 41 MB.
# portsnap fetch
Μετά το κατέβασμα του συμπιεσμένου snapshot, είναι πλέον δυνατή η εξαγωγή του “πραγματικού (live)” αντιγράφου του δέντρου των ports στον κατάλογο /usr/ports/. Αυτό είναι απαραίτητο, ακόμα και αν έχετε ήδη δημιουργήσει δέντρο ports στον κατάλογο αυτό (π.χ. με χρήση της CVSup), καθώς με αυτό τον τρόπο, το portsnap δημιουργεί μια βασική αναφορά από την οποία κάθε φορά ανακαλύπτει ποια τμήματα του δέντρου των ports πρέπει να ανανεωθούν αργότερα.
# portsnap extract
Σημείωση: Κατά την προεπιλεγμένη εγκατάσταση, δεν δημιουργείται ο κατάλογος /usr/ports. Αν χρησιμοποιείτε το FreeBSD 6.0-RELEASE, θα πρέπει να τον δημιουργήσετε πριν εκτελέσετε την portsnap. Σε πιο πρόσφατες εκδόσεις του FreeBSD ή του Portsnap, η εργασία αυτή θα γίνει αυτόματα την πρώτη φορά που θα χρησιμοποιήσετε την εντολή portsnap.
Μετά το αρχικό κατέβασμα και εξαγωγή ενός δέντρου ports στον κατάλογο /usr/ports/, η ανανέωση των ports αποτελείται βασικά από δύο βήματα: Να γίνουν fetch οι ανανεώσεις στο συμπιεσμένο snapshot, και να χρησιμοποιηθούν για την ανανέωση (update) στο πραγματικό δέντρο των ports. Τα δύο αυτά βήματα, μπορούν να δοθούν στην portsnap ως μια μόνο εντολή:
# portsnap fetch update
Σημείωση: Μερικές παλιότερες εκδόσεις της portsnap δεν υποστηρίζουν αυτή τη σύνταξη. Αν το παραπάνω αποτύχει, δοκιμάστε αντί για αυτό το παρακάτω:
# portsnap fetch # portsnap update
Για να αποφευχθούν “προβλήματα συνωστισμού” κατά την πρόσβαση στους εξυπηρετητές Portsnap, η portsnap fetch δεν εκτελείται μέσω εργασίας του cron(8). Αντί για αυτό, υπάρχει η ειδική εντολή portsnap cron, η οποία περιμένει ένα τυχαίο διάστημα ως και 3600 δευτερόλεπτα πριν κατεβάσει τις ανανεώσεις.
Επιπρόσθετα, σας συνιστούμε να μην εκτελείτε την εντολή portsnap
update μέσω εργασίας του cron, καθώς μπορεί να προκαλέσετε
σημαντικά προβλήματα αν τύχει να εκτελεστεί την ίδια ώρα που γίνεται μεταγλώττιση ή
εγκατάσταση κάποιου port. Είναι ωστόσο ασφαλές να ανανεώσετε τα αρχεία INDEX των ports και αυτό μπορεί να γίνει περνώντας την επιλογή
-I
στο portsnap. (Προφανώς αν
εκτελέσετε το portsnap -I update μέσω του cron, θα είναι απαραίτητο να εκτελέσετε αργότερα το portsnap update χωρίς την επιλογή -I
για
να ανανεωθεί το υπόλοιπο τμήμα του δέντρου.)
Προσθέτοντας την ακόλουθη γραμμή στο /etc/crontab, το portsnap θα ανανεώσει το συμπιεσμένο snapshot και τα αρχεία INDEX στον κατάλογο /usr/ports/, και θα σας στείλει email αν κάποια εγκαταστημένα ports χρειάζονται ανανέωση:
0 3 * * * root portsnap -I cron update && pkg_version -vIL=
Σημείωση: Αν το ρολόι του συστήματος δεν είναι ρυθμισμένο στην τοπική ζώνη ώρας, σας παρακαλούμε να αντικαταστήσετε το 3 με μια τυχαία τιμή μεταξύ 0 και 23, ώστε να γίνεται πιο ομοιόμορφη κατανομή του φορτίου στους εξυπηρετητές του Portsnap.
Σημείωση: Κάποιες παλιότερες εκδόσεις του portsnap δεν υποστηρίζουν πολλαπλές εντολές (π.χ., cron update) στην ίδια γραμμή εντολής του portsnap. Αν η παραπάνω γραμμή αποτύχει, δοκιμάστε να αντικαταστήσετε την portsnap -I cron update με portsnap cron && portsnap -I update.
Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την
<questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.