Εμφάνιση 1-15 από 15
  1. #1
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.196
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Καλησπέρα.

    *** Ακολουθεί κατεβατό ***

    Χρόνια τώρα όλο λέω θα γράψω κάποια πράγματα για το NetBSD είτε εδώ είτε στο blog μου, πιο πολύ για να ανατρέχω εγώ αν ξεχάσω κάτι αλλά και για όσους θέλουν να τα διαβάσουν αλλά όλο το αναβάλλω.

    Τώρα που γίνεται αυτός ο ντόρος με τον systemd διαβάζω πολλά μηνύματα και εδώ και σε άλλα φόρα με κόσμο να έχει τσατιστεί με κάποιους στην κοινότητα του linux και να σκέφτεται να μεταβεί σε FreeBSD οπότε μου ξύπνησε και πάλι η ιδέα να γράψω για το NetBSD.

    [Περιγραφή του NetBSD και rant]
    Spoiler:

    Ένα πράγμα που με τσάτιζε πάντα ήταν η κακή προώθηση που γινόταν στο NetBSD από το foundation και γενικά τους devs του. Εντάξει καταλαβαίνω ότι υπάρχει κόσμος που δεν γνωρίζει καν ότι υπάρχουν τα *BSD (εδώ πολύς κόσμος δεν γνωρίζει το λίνουξ και ότι υπάρχει κάτι πέρα από τα windows) αλλά τα άτομα του FreeBSD (και του PCBSD) προσπαθούν να προωθήσουν το λειτουργικό και υπάρχει πολύς κόσμος που όχι μόνο έχει ακούσει για αυτό αλλά το έχει στήσει και σε κάποιο VM και το δουλεύει.

    Όποιος ακούσει για τα υπόλοιπα 2 μεγάλα BSD και προσπαθήσει να μάθει κάτι για αυτά θα διαβάσει σίγουρα τα εξής:

    * FreeBSD εστιάζει στις καλύτερες δυνατές επιδόσεις.

    * OpenBSD εστιάζει στην καλύτερη δυνατή ασφάλεια.

    * NetBSD εστιάζει στη μεγαλύτερη δυνατή φορητότητα.

    Αυτό ο τρόπος λανσαρίσματος κατ εμέ είναι τεράστιο λάθος της πλευράς του NetBSD γιατί διώχνει κόσμο. Όποιος διαβάζει το παραπάνω θα πάει κατευθείαν σε Free χωρίς δεύτερη σκέψη (και όχι άδικα μια και παρέχει τέλεια υποστήριξη ZFS, nvidia binary οδηγό, μεγάλο αριθμό ports, κτλ). Ακόμη και το Open έχει το κοινό του γιατί πολλοί αρχίζουν να δίνουν σημασία στην ασφάλεια (ειδικά μετά από όσα γράφτηκαν από τον Snowden) και τους αρέσει που οι devs του Open εστιάζουν στον καθαρό κώδικα. Στο Net όμως δεν βλέπει κανένα λόγο να πάει. Το μόνο θετικό που διαβάζει στις περισσότερες κριτικές είναι ότι θα μάθεις το λειτουργικό μια φορά και θα δουλεύει με τον ίδιο τρόπο και σε x86 και σε sparc και παντού αλλά ποιος έχει τέτοια μηχανήματα οπότε δεν κερδίζει τίποτα σε σχέση με τα υπόλοιπα δύο.

    Αυτό που δεν γίνεται γνωστό είναι ότι το Net έχει συμβάλει πάρα πολύ στην ανάπτυξη όλων των BSD. Παλαιότερα, το Net ήταν ίσως το πιο τεχνολογικά ανεπτυγμένο και ένας μεγάλος αριθμός υποδομών που χρησιμοποιούνταν από όλα τα BSD, είχε αναπτυχθεί στο Net. Για παράδειγμα, πριν κάμποσα χρόνια η usb stack του Free δεν ήταν καθόλου καλή και ακόμη και ένα απλό πράγμα όπως ένα flashάκι δεν έπαιζε απροβλημάτιστα. Έτσι ενσωμάτωσαν για κάποιο διάστημα αυτήν του Net, το οποίο τους έδωσε το χρόνο να αναπτύξουν από την αρχή μια πολύ καλή usb stack. Άλλο παράδειγμα είναι η υποδομή rcorder των initscripts η οποία αναπτύχθηκε στο Net και ενσωματώθηκε και από άλλα BSD. Άλλη μια καινοτομία ήταν ότι το Net ήταν το μόνο που μπορούσε να εγκατασταθεί σε επεκταμένη κατάτμηση. Επίσης το Net έχει από τις πιο γρήγορες networking stack και όποτε κάποιο πανεπιστήμιο ή δίκτυο κορμού ενσωμάτωνε μια νέα τεχνολογία και γίνονταν δοκιμές συνήθως το NetBSD έπιανε την μεγαλύτερη ταχύτητα.

    Σημειωτέον ότι τα παραπάνω δεν τα αναφέρω επικριτικά. Η κοινότητα των *BSD έχει μακρά ιστορία συνεργασίας και ενσωμάτωσης κώδικα από το ένα στο άλλο, το οποίο είναι πολύ καλό γιατί επωφελούνται όλοι και δεν σπαταλούνται ώρες να αναπτυχθεί ξανά το ίδιο πράγμα. Το Net για παράδειγμα έχει πάρει την KMS υποδομή για τις κάρτες γραφικών η οποία έχει αναπτυχθεί από το Open. Τα ανέφερα απλά σαν παράδειγμα για να δείξω ότι το Net έχει προσφέρει, αντίθετα με την αντίληψη μερικών ότι είναι ένα παρωχημένο λειτουργικό χωρίς κανένα σκοπό και με μοναδικό του ατού την portability.

    Πάντα το Net είχε λίγο κόσμο αλλά ήταν γενικά ο κόσμος των BSD μικρός. Με τους γρήγορους επεξεργαστές όμως και την εύκολη virtualization μπορούσαμε όλοι να δοκιμάσουμε εύκολα όποιο λειτουργικό θέλουμε. Έτσι σιγά σιγά άρχισαν όλο και περισσότεροι χρήστες να δοκιμάζουν *BSD. Λόγω του κακού αυτού λανσαρίσματος όμως, το Net δεν προσέλκυσε και τόσους πολλούς νέους χρήστες και μάλιστα έχασε και κάποιους σε άλλα BSD λόγω αργοπορημένης ανάπτυξης (πχ ακόμη και τώρα δεν υπάρχει καλή υποστήριξη για ZFS). Και έτσι γίνεται ένας μύλος όπου λόγω αργής ανάπτυξης δεν προσελκύει κόσμο και λόγω έλλειψης κόσμου υπάρχει αργή ανάπτυξη.

    Ακόμη και σήμερα όμως που δεν είναι στα καλύτερά του, συνεχίζει να παρέχει κάποιες καινοτομίες. Έχει υποστήριξη για τον LVM το οποίο εκτός ότι επιτρέπει την ανάγνωση δίσκων που έχουν προέλθει από κάποιο linux σύστημα, παρέχει μια ευελιξία σε σχέση με τις στατικές κατατμήσεις μέχρι να υλοποιηθεί το ZFS (στο Free υπάρχει εδώ και καιρό καταπληκτική υποστήριξη για ZFS). Επίσης είναι από τα πρώτα BSD που υποστήριξε εκκίνηση από GPT (και το Free έχει) και κατά συνέπεια μπορεί να εγκατασταθεί ακόμη και σε νέα μηχανήματα με UEFI (υπάρχει UEFI boot loader αλλά ακόμη δεν έχει ενσωματωθεί στο -current οπότε για την ώρα πρέπει να γίνει εγκατάσταση σε κατάσταση συμβατότητας και μετά να χρησιμοποιηθεί κάποιος άλλος bootloader) ενώ πχ το Open δεν μπορεί ακόμη να δουλέψει GPT οπότε μπορεί να εκκινήσει μόνο από τον κλασικό MBR άρα μόνο σε κατάσταση συμβατότητας.

    Επίσης μια υποδομή που μου αρέσει πάρα πολύ είναι το build system του Net γιατί με έχει σώσει πολλές φορές. Πολλές φορές μου τύχαινε να θέλω να εγκαταστήσω σε μια σχετικά νέα μητρική η οποία να έχει κάποιο συστατικό που δεν υποστηρίζεται (πχ ο ελεγκτής sata). Μια περίπτωση που μου είχε τύχει ήταν να υπάρχει AHCI υποστήριξη στο -current αλλά όχι στην επίσημη έκδοση. Υπάρχει βέβαια ο releng server που παρέχει ISO από nightly builds αλλά μερικές φορές ούτε αυτό αρκεί γιατί ο οδηγός που χρειάζεσαι δεν είναι ενεργοποιημένος στον πυρήνα.

    Σε κάποιο άλλο λειτουργικό θα αναγκαζόμουν να περιμένω μέχρι να βγει κάποια έκδοση που να υποστηρίζει το υλικό που θέλω ώστε να μπορέσω να εγκαταστήσω. Στο NetBSD μπορώ να κατεβάσω τον πηγαίο κώδικα του βασικού συστήματος, να ενεργοποιήσω τον οδηγό που θέλω και να παράγω ένα "custom" ISO με το οποίο να μπορώ να κάνω την εγκατάσταση. Το build system χρειάζεται μόνο ένα C compiler και ένα Posix shell. Στην αρχή χρησιμοποιείται ο compiler του συστήματος για να παραχθεί ένας cross compiler ο οποίος μετά μεταγλωττίζει όλο το βασικό σύστημα οπότε μπορείς να το τρέξεις από οποιοδήποτε linux, MacOS, ακόμη και από Windows. Μπορεί να μην ακούγεται σπουδαίο και ειδικά σήμερα που έχει ψιλο-σταθεροποιηθεί το hardware και για όλα τα συστατικά υπάρχει κάποιο πρότυπο (πχ AHCI, xHCI, κτλ) σίγουρα μπορεί να μην είναι κάτι ιδιαίτερο αλλά με έχει βγάλει από δυσκολίες πολλές φορές.


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

    [Κατέβασμα αρχείων]
    Spoiler:

    Για κάθε έκδοση υπάρχει στους mirrors το αντίστοιχο install cd καθώς επίσης και το source cd για όποιον θέλει να μην κατεβάζει μετά τα sources. Εγώ όμως θέλω να δείξω κάποιες λειτουργίες που δυστυχώς ακόμη δεν έχουν περάσει στην stable έκδοση (6.1.5 αυτή τη στιγμή) για αυτό θα εγκαταστήσω μια από τις nightly εκδόσεις. Δυστυχώς δεν υπάρχει installcd αλλά μόνο boot cd που χρησιμοποιείται για αναβαθμίσεις και εγκατάσταση μέσω δικτύου. Έτσι η διαδικασία θα είναι λίγο πιο μανούρα από ό,τι όταν βγει τελικά η 7.0 έκδοση.

    Αν μπούμε στον releng server που υπάρχουν όλες οι nightly εκδόσεις βλέπουμε διάφορους καταλόγους μερικοί εκ των οποίων είναι οι εξής:
    Κώδικας:
    HEAD/
    netbsd-5/
    netbsd-6/
    netbsd-7/
    Ο κάθε κατάλογος συμβολίζει μια διαφορετική γραμμή ανάπτυξης. Αυτή τη στιγμή υπάρχουν δύο branches με τελευταίες επίσημες εκδόσεις 5.2.3 και 6.1.5 αντίστοιχα. Οι netbsd-5 και netbsd-6 κατάλογοι περιέχουν όλες τις αλλαγές των δύο branches και από τις οποίες κάποια στιγμή στο μέλλον θα προκύψει η επόμενη minor έκδοση (5.3 και 6.2 αντίστοιχα).

    Ο netbsd-7 κατάλογος συμβολίζει την επόμενη γραμμή ανάπτυξης και δεν έχει κάποια επίσημη έκδοση αυτή τη στιγμή αλλά κάποια στιγμή στο μέλλον θα μας δώσει την πρώτη major έκδοση 7.0.

    Ο HEAD κατάλογος συμβολίζει την -current γραμμή ανάπτυξης στην οποία ενσωματώνονται όλες οι αλλαγές μέχρι να ωριμάσουν και να περάσουν σε κάποιο branch.

    Εδώ εξηγεί καλύτερα από εμένα τα πάντα για το κάθε branch και τις εκδόσεις του.

    Εμείς θα εγκαταστήσουμε την έκδοση netbsd-7. Μέσα σε κάθε κατάλογο θα βρούμε καταλόγους με όνομα την ημερομηνία του εκάστοτε build. Αυτή τη στιγμή που γράφω το παρόν μήνυμα οι κατάλογοι είναι οι εξής:

    Κώδικας:
    201501230010Z/
    201501231250Z/
    201501241500Z/
    Ο κατάλογος που κατέβασα εγώ και θα εγκαταστήσω έχει όνομα 201501181820Z γιατί τον κατέβασα πριν λίγες ημέρες. Εφόσον η εγκατάστασή μας θα κατεβάσει τα απαραίτητα πακέτα μέσω δικτύου, χρειάζεται να κατεβάσουμε μόνο το boot cd, έτσι κατεβάζω το αρχείο netbsd-7/ΗΜΕΡΟΜΗΝΙΑ/amd64/installation/cdrom/boot.iso μια και μιλάμε για 64bitο επεξεργαστή.


    [Εκκίνηση εγκατάστασης]
    Spoiler:

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-01.jpeg 
Εμφανίσεις:  16 
Μέγεθος:  45,9 KB 
ID: 150034
    Όταν εκκινήσουμε τον υπολογιστή με το boot.iso, το πρώτο που βλέπουμε είναι η παραπάνω εικόνα. Παλαιότερα όταν πρωτοβγήκε το πρότυπο ACPI (και για κάμποσο διάστημα μετά) υπήρχαν κακές υλοποιήσεις που δεν τηρούσαν το πρότυπο με συνέπεια να μην μπορεί να εκκινηθεί ο υπολογιστής ή να κρασάρει σε κάποιο σημείο. Έτσι μια συνήθης συμβουλή, είτε μιλάμε για εγκατάσταση linux ή για bsd, ήταν "δοκίμασε να κλείσεις το acpi". Για αυτό τον λόγο υπάρχουν οι επιλογές 2 και 3 αλλά σήμερα σχεδόν παντού παίζει σωστά το ACPI οπότε δεν υπάρχει λόγος να τις χρησιμοποιήσουμε. Εμείς θα επιλέξουμε την επιλογή 1 (ή απλά πατάμε enter).
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-02.jpeg 
Εμφανίσεις:  12 
Μέγεθος:  52,8 KB 
ID: 150036
    Αφού φορτώσει ο πυρήνας τους διάφορους οδηγούς και ξεκινήσει το σύστημα, θα τρέξει το πρόγραμμα της εγκατάστασης και θα δούμε την παραπάνω εικόνα όπου μας ενημερώνει ότι μπορούμε να μετακινούμαστε στις επιλογές με τα βελάκια αλλά και με τα γράμματα που φαίνονται δίπλα στη κάθε επιλογή. Πατάμε enter ώστε να επιλέξουμε μηνύματα στα αγγλικά.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-03.jpeg 
Εμφανίσεις:  10 
Μέγεθος:  49,5 KB 
ID: 150037
    Το επόμενο βήμα είναι να επιλέξουμε την γλώσσα πληκτρολογίου που θέλουμε να χρησιμοποιήσουμε. Για την εγκατάσταση δεν παίζει κανένα ρόλο η γλώσσα (ίσως μόνο αν θέλουμε να δηλώσουμε ελληνικά στο κωδικό του root αλλά και αυτό ακόμη μπορεί να γίνει μετά την εγκατάσταση).
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-04.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  51,0 KB 
ID: 150038
    Πατάμε απλά το k ώστε να επιλέξουμε Ελληνικά όπως φαίνεται στην παραπάνω εικόνα και enter για να πάμε στο επόμενο στάδιο.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-05.jpeg 
Εμφανίσεις:  4 
Μέγεθος:  21,7 KB 
ID: 150039
    Πλέον βρισκόμαστε στο κεντρικό μενού της εγκατάστασης. Το config menu θα το χρησιμοποιήσουμε στο τελικό στάδιο της εγκατάστασης. Από το utility menu μπορούμε να εκτελέσουμε ένα shell ώστε να τρέξουμε κάποια εντολή που θέλουμε. Η επιλογή "Upgrade" είναι για αναβάθμιση του NetBSD σε επόμενη έκδοση για όσους δεν θέλουν να το κάνουν κατευθείαν από το σύστημά τους. Εμείς θα πατήσουμε enter ώστε να επιλέξουμε την a επιλογή και να εγκαταστήσουμε ένα νέο σύστημα.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-06.jpeg 
Εμφανίσεις:  5 
Μέγεθος:  36,4 KB 
ID: 150040
    Εδώ διαβάζουμε ένα ενημερωτικό μήνυμα ότι έχουμε επιλέξει νέα εγκατάσταση και αυτό μπορεί να σβήσει πληροφορίες που υπάρχουν στον σκληρό δίσκο και άλλα τέτοια. Επιλέγουμε b Yes φυσικά.


    [Δημιουργία κατατμήσεων]
    Spoiler:

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-07.jpeg 
Εμφανίσεις:  4 
Μέγεθος:  13,3 KB 
ID: 150041
    Εδώ βρίσκεται η πρώτη διαφοροποίηση του NetBSD-7.0. Η επιλογή "Extended partitioning" είναι νέα και δεν υπάρχει στις επίσημες εκδόσεις και είναι αυτή που μας επιτρέπει να πειράξουμε πολλές επιλογές καθώς και να χρησιμοποιήσουμε GPT layout αντί για MBR. Επιλέγουμε b για να χρησιμοποιήσουμε την προχωρημένη λειτουργία.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-08.jpeg 
Εμφανίσεις:  6 
Μέγεθος:  43,7 KB 
ID: 150042
    Όπως βλέπουμε, το πρόγραμμα εγκατάστασης έχει πλέον υποστήριξη για πολλές λειτουργίες που μέχρι τώρα έπρεπε να τις κάνουμε χειροκίνητα όπως LVM, κρυπτογράφηση (CGD), RAID. Το πρώτο που έχουμε να κάνουμε είναι να πούμε ότι θέλουμε να χρησιμοποιήσουμε GPT αντί για MBR. Αυτό γίνεται πατώντας enter πάνω στο σκληρό δηλαδή στην επιλογή a που είναι ήδη επιλεγμένη.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-10.jpeg 
Εμφανίσεις:  398 
Μέγεθος:  17,8 KB 
ID: 150043
    Πατάμε το πλήκτρο c γιατί μας ενδιαφέρει να χρησιμοποιήσουμε το νεότερο τρόπο δημιουργίας κατατμήσεων GPT.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-11.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  10,3 KB 
ID: 150044
    Εδώ βλέπουμε ένα ενημερωτικό μήνυμα ότι θα διαγραφούν όλες οι υπάρχουσες κατατμήσεις του σκληρού δίσκου. Αν υπάρχουν MBR κατατμήσεις στον σκληρό δίσκο, αυτές θα πάψουν να υφίστανται επειδή θα χρησιμοποιήσουμε ένα διαφορετικό τρόπο δημιουργίας τώρα. Αν στον σκληρό έχουμε δεδομένα ή λειτουργικά συστήματα που χρησιμοποιούν MBR (πχ 32bit windows), τότε δεν πρέπει να συνεχίσουμε γιατί αυτά θα διαγραφούν.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-12.jpeg 
Εμφανίσεις:  5 
Μέγεθος:  47,7 KB 
ID: 150045
    Ξαναβλέπουμε τον διαχειριστή κατατμήσεων αλλά αυτή τη φορά διαβάζουμε ότι έχουμε GPT-labeled δίσκο. Πάμε λοιπόν να δημιουργήσουμε τις κατατμήσεις μας. Για να γίνει αυτό πατάμε πάλι enter πάνω στον σκληρό και θα μας ανοίξει και πάλι ένα μενού επιλογών.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-13.jpeg 
Εμφανίσεις:  396 
Μέγεθος:  10,5 KB 
ID: 150046
    Εδώ θα επιλέξουμε το a ώστε να δημιουργήσουμε κατατμήσεις.

    Το πρόγραμμα εγκατάστασης έχει επιλέξει για εμάς το απλό σενάριο της μίας κατάτμησης για όλο το σύστημα αρχείων / και μία για swap. Το swap θα έχει μέγεθος 2GB και το / θα έχει μέγεθος 4GB με τη διαφορά ότι βλέπουμε ένα + δεξιά από τον αριθμό των τομέων. Όπως βλέπουμε, ο δίσκος έχει ακόμη 14GB ελεύθερα που δεν έχουν χρησιμοποιηθεί για καμμία κατάτμηση. Αυτό το κάνει το πρόγραμμα ώστε να μας δώσει τη δυνατότητα να δημιουργήσουμε και άλλες κατατμήσεις αν θέλουμε. Το + σημαίνει ότι αφού δημιουργήσουμε όσες κατατμήσεις θέλουμε, όσος χώρος υπάρχει ελεύθερος, να δοθεί στο /. Δηλαδή αν πατήσουμε όπως είμαστε τώρα το πλήκτρο x για να δεχτούμε αυτές τις δύο κατατμήσεις, το swap θα έχει μέγεθος 2GB και το / θα έχει 18GB.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-14.jpeg 
Εμφανίσεις:  5 
Μέγεθος:  50,4 KB 
ID: 150047
    Επειδή δεν θέλω να χρησιμοποιώ την κατάσταση συμβατότητας, θα δημιουργήσω ακόμη μία κατάτμηση με FAT32 σύστημα αρχείων που θα χρησιμοποιηθεί ώστε να μπορεί να εκκινηθεί το σύστημα σε καθαρή κατάσταση UEFI. Άρα πατάω το πλήκτρο g για να δημιουργήσω μία άλλη κατάτμηση.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-16.jpeg 
Εμφανίσεις:  4 
Μέγεθος:  6,9 KB 
ID: 150048

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-17.jpeg 
Εμφανίσεις:  4 
Μέγεθος:  4,6 KB 
ID: 150049

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-18.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  54,5 KB 
ID: 150050
    Για mountpoint βάζουμε ό,τι να ναι γιατί θα επιλέξουμε να μην γίνεται mount σε επόμενο στάδιο. Έπειτα επιλέγουμε το μέγεθος που θέλουμε να έχει η κατάτμηση ανάλογα με τις ανάγκες μας. Έδωσα 256MB (και 512MB είναι σύνηθες) δηλαδή κάτι μεγάλο ώστε να μας επιτρέπει να εγκαταστήσουμε πολλούς loaders και images (πχ 5-6 εκδόσεις πυρήνων linux). Μετά μας ξαναγυρνάει στην προηγούμενη οθόνη όπου βλέπουμε και την νέα κατάτμηση. Πατάμε το πλήκτρο x ώστε να δεχτούμε τις κατατμήσεις και να πάμε στο επόμενο στάδιο των λεπτομερών ρυθμίσεων.

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-19.jpeg 
Εμφανίσεις:  6 
Μέγεθος:  34,4 KB 
ID: 150051
    Εδώ μας δείχνει την γενική εικόνα του δίσκου και μας επιτρέπει να κάνουμε αλλαγές αν θέλουμε πριν συνεχίσει η εγκατάσταση. Το πρώτο πράγμα που κάνουμε είναι να πατήσουμε το πλήκτρο h και να ζητήσουμε τομείς ως μονάδα εμφάνισης ώστε να έχουμε καλύτερη εποπτεία.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-20.jpeg 
Εμφανίσεις:  4 
Μέγεθος:  54,0 KB 
ID: 150052

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-21.jpeg 
Εμφανίσεις:  4 
Μέγεθος:  41,7 KB 
ID: 150053
    Και πάλι έχουμε την εικόνα του δίσκου αλλά τώρα βλέπουμε τομείς αντί για τα χαζό megabyte και μπορούμε να δούμε καλύτερα τι παίζει. Εγκυκλοπαιδικά να πούμε σε αυτό το σημείο ότι το κλασικό layout των BSD όταν εγκαθίστανται σε μία MBR κατάτμήση είναι να δημιουργείται το λεγόμενο disklabel το οποίο μας επιτρέπει να έχουμε πολλαπλές "κατατμήσεις". Είθισται αυτές να ονομάζονται a αυτή που είναι το /, b το swap, η c συμβολίζει την MBR κατάτμηση του NetBSD και η d συμβολίζει ολόκληρο τον δίσκο. Από την e και πέρα είναι οι custom κατατμήσεις που τυχόν δημιουργεί ο διαχειριστής. Επειδή εμείς χρησιμοποιούμε GPT δεν μας ενδιαφέρει και τόσο αυτό αλλά μας τις εμφανίζει και πάλι με αυτό το μοτίβο.

    Ο GPT περιέχει δύο headers (ένα στην αρχή και ένα στο τέλος) που καταλαμβάνουν 34 τομείς ο καθένας, για αυτό το λόγο βλέπουμε να αρχίζει η πρώτη κατάτμηση από τον τομέα 34. Σε ένα απλό κλασικό σκληρό δίσκο που έχει τομείς των 512 bytes δεν μας ενδιαφέρει που θα πέσει η κάθε κατάτμηση. Αν όμως έχουμε ένα δίσκο από τους "καινούριους" που έχουν τομείς των 4K (σχεδόν όλοι από 1TB και πάνω) ή ένα SSD, τότε θα έχουμε μεγάλη πτώση των επιδόσεων. Για αυτό το λόγο θα αλλάξουμε τις κατατμήσεις ώστε να τις ευθυγραμμίσουμε με την επιθυμητή τιμή των 4KB (8 τομείς των 512).

    Αυτό που μας ενδιαφέρει είναι η αρχή της κάθε κατάτμησης να πέφτει σε τομέα που να είναι πολλαπλάσιο του 8. Εμείς έχουμε ως αρχή 34 (/8 = 4.250), 37222450 (/8 = 4652806.250), 41417746 (/8 = 5177218.250) άρα πρέπει να μετακυλίσουμε την αρχή και των τριών κατατμήσεων. Για ευκολία θα ξεκινήσουμε πρώτα από την 3η οπότε πατάμε το πλήκτρο e.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-22.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  28,3 KB 
ID: 150004
    Η τελική εικόνα που πρέπει να πάρουμε είναι η παραπάνω. Αλλάζουμε τον τύπο συστήματος αρχείων από FFSv2 που ήταν η μανίσια επιλογή σε MSDOS, μετακινούμε την αρχή της κατάτμησης 2 τομείς νωρίτερα στο 41417744 ώστε να είναι πολλαπλάσιο του 8, επιλέγουμε να μην γίνει mount και σβήνουμε το mount point. Έπειτα επιλέγουμε x ώστε να αλλάξουμε την επόμενη κατάτμηση.

    Μετά έρχεται η σειρά του swap. Εδώ η δουλειά μας είναι ακόμη πιο εύκολη. Μετακινούμε την αρχή 2 τομείς νωρίτερα στο 37222448 ώστε να είναι πολλαπλάσιο του 8 και εφόσον κάναμε την ίδια ακριβώς αλλαγή και στην 3η κατάτμηση, το τέλος του swap θα ταιριάζει και δεν χρειάζεται να το αλλάξουμε.

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-24.jpeg 
Εμφανίσεις:  2 
Μέγεθος:  33,8 KB 
ID: 150006
    Ερχόμαστε και στην περίπτωση του / που είναι η πιο σημαντική. Πρέπει και πάλι να αλλάξουμε την αρχή ώστε να είναι πολλαπλάσιο του 8. Εδώ επέλεξα τη κλασική ευθυγράμμιση στο 1MB και έτσι η κατάτμηση αρχίζει στους 2048 τομείς (θα μπορούσα να είχα επιλέξει τους 40 τομείς ή οποιοδήποτε άλλο πολλαπλάσιο). Έπειτα πρέπει να μικρύνω το μέγεθος από 37222416 σε 37220400 ώστε να μην πέσουμε μέσα στον χώρο του swap και άλλαξα και το fragment size (αυτό που σε άλλα συστήματα αρχείων λέγεται block size δηλαδή η μικρότερη μονάδα με την οποία δουλεύει το σύστημα αρχείων) σε 4K που έχει ο δίσκος μας.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-25.jpeg 
Εμφανίσεις:  2 
Μέγεθος:  35,9 KB 
ID: 150007
    Εδώ βλέπουμε πάλι την εικόνα του δίσκου μας μετά από τις αλλαγές που έχουμε κάνει και αφού όλα τα έχουμε κάνει σωστά, πατάμε το πλήκτρο x για να γυρίσουμε στο κεντρικό μενού του διαχειριστή κατατμήσεων.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-26.jpeg 
Εμφανίσεις:  2 
Μέγεθος:  27,4 KB 
ID: 150008
    Να μαστε στο κεντρικό μενού όπου βλέπουμε να έχουν δημιουργηθεί οι 3 GPT κατατμήσεις μας. Τα dk που βλέπουμε είναι τα λεγόμενα wedges και είναι τα αντικείμενα που χρησιμοποιεί το NetBSD για να προσπελάσεις τις GPT (και όχι μόνο) κατατμήσεις. Είμαστε πλέον έτοιμοι να εγκαταστήσουμε το σύστημα και πατάμε το πλήκτρο x για να το κάνουμε.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-27.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  7,9 KB 
ID: 150009
    Η κλασική πια ερώτηση αν θέλουμε να συνεχίσουμε όπου εννοείται επιλέγουμε Yes. Σε αυτό το σημείο θα δημιουργηθούν οι κατατμήσεις, τα wedges, καθώς και τα συστήματα αρχείων. Ενδέχεται να εμφανιστεί ένα μήνυμα λάθους στην δημιουργία του wedge της Fat32 κατάτμησης. Η έκδοση του προγράμματος εγκατάστασης (τουλάχιστον στην ημερομηνία που δοκίμασα εγώ) έχει ένα μικρο-πρόβλημα και δεν την δημιουργεί αλλά δεν μας πειράζει μια και μπορούμε να την δημιουργήσουμε μετά εμείς (άλλωστε θα την χρειαστούμε στο απώτερο μέλλον).
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-28.jpeg 
Εμφανίσεις:  2 
Μέγεθος:  41,3 KB 
ID: 150010
    Εγκατάσταση του boot loader. Ο περισσότερος κόσμος δεν χρησιμοποιεί σειριακή κονσόλα οπότε απλά πατάει enter στην μανίσια επιλογή a.


    [Εγκατάσταση συστήματος]
    Spoiler:

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-29.jpeg 
Εμφανίσεις:  396 
Μέγεθος:  15,0 KB 
ID: 150012
    Σε αυτό το σημείο επιλέγουμε τον τύπο εγκατάστασης. Μπορούμε να κάνουμε πλήρη εγκατάσταση, πλήρη χωρίς γραφικό, να βάλουμε το ελάχιστο δυνατό, και αυτό που θα χρησιμοποιήσουμε εμείς δηλαδή την επιλογή d custom εγκατάσταση.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-30.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  28,7 KB 
ID: 150013
    Το πρόγραμμα εγκατάστασης μας έχει επιλέξει τα απολύτως απαραίτητα πακέτα αλλά εμείς θα επιλέξουμε και άλλα. Επιλέγουμε τον compiler, τις manpages, τα επιμέρους misc προγράμματα, τα προγράμματα επεξεργασίας κειμένου και τέλος κάποια πακέτα από τον πηγαίο κώδικα.

    Ο πυρήνας DRMKMS είναι και αυτός ένας από τους λόγους που επιλέξαμε αυτή την nightly έκδοση και δεν υπάρχει στην επίσημη έκδοση 6.1.5. Ανάλογα με πόσο νέα κάρτα γραφικών έχουμε, μπορεί να μην παίζει σωστά για αυτό και δεν έχει ενεργοποιηθεί ο οδηγός στον GENERIC πυρήνα αλλά δίνεται ξεχωριστά. Μπορούμε να επιλέξουμε έναν από τους δύο. Εγώ συνηθίζω να επιλέγω τον GENERIC ώστε να είμαι σίγουρος ότι το σύστημα θα εκκινηθεί σωστά μετά την εγκατάσταση και αφού γίνει αυτό τον εγκαθιστώ χειροκίνητα εγώ για να τον δοκιμάσω άφοβα.

    Επίσης, επειδή τα πακέτα του πηγαίου κώδικα είναι μεγάλα (περίπου 500MB) και θα μεγαλώσουν τον χρόνο εγκατάστασης, μπορούμε να μην τα επιλέξουμε τώρα ώστε να τελειώσουμε γρήγορα την εγκατάσταση και να τα κατεβάσουμε σε επόμενο στάδιο όταν θα δούμε πώς αναβαθμίζεται το σύστημα.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-31.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  23,2 KB 
ID: 150014
    Αν τελικά αποφασίσουμε να εγκαταστήσουμε τον πηγαίο κώδικα, επιλέγουμε τα τέσσερα πρώτα πακέτα όπως φαίνεται στην παραπάνω εικόνα και έπειτα πατάμε το πλήκτρο x για να γυρίσουμε πίσω.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-32.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  28,7 KB 
ID: 150015
    Εδώ βλέπουμε την τελική εικόνα με τα πακέτα που πρόκειται να εγκατασταθούν και πατάμε και πάλι το πλήκτρο x για συνέχεια.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-33.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  22,4 KB 
ID: 150016
    Βλέπουμε ότι πρόκειται να εγκατασταθούν 12 πακέτα. Εφόσον δεν μπορούμε να εγκαταστήσουμε γρήγορα μέσω CD, αναγκαστικά επιλέγουμε δικτυακή εγκατάσταση μέσω HTTP.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-991.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  27,2 KB 
ID: 150017
    Τα μόνα πεδία που πειράζουμε είναι τα a, b. Ως διακομιστή θα ορίσουμε τον releng server που είναι ο nyftp.netbsd.org από τον οποίον και είχαμε κατεβάσει το boot.iso. Ως αρχικό κατάλογο θα ορίσουμε τον κατάλογο που περιέχει τα αρχεία μας δηλαδή τον pub/NetBSD-daily/netbsd-7/ΗΜΕΡΟΜΗΝΙΑ όπου ημερομηνία αυτήν του nightly build που χρησιμοποιήσαμε. Έπειτα θα πατήσουμε το πλήκτρο j για να ρυθμιστεί προσωρινά η κάρτα δικτύου μας και να μπορέσουν να κατέβουν τα πακέτα.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-992.jpeg 
Εμφανίσεις:  395 
Μέγεθος:  5,6 KB 
ID: 150018
    Επιλέγουμε το interface που θέλουμε να ρυθμίσουμε και στη δική μου περίπτωση λέγεται wm0. Εδώ έχουμε μια διαφοροποίηση με το linux. Στο linux οι κάρτες δικτύου ονομάζονται eth0, eth1, κτλ. Στα BSD, το interface εξαρτάται από τον οδηγό. Η δική μου κάρτα είναι Intel e1000 οπότε ονομάζεται wm0. Μία κάρτα με realtek chipset μπορεί να ονομαζόταν rl0 ή κάτι παρόμοιο. Αυτό ήταν κάτι πολύ χρήσιμο σε υπολογιστές με πολλές κάρτες δικτύου γιατί σου επέτρεπε εύκολα να ξεχωρίσεις την κάρτα που θέλεις ενώ στο linux ήταν πολύ πιο δύσκολο να ορίσεις ότι η Χ κάρτα να εμφανίζεται πάντα ως eth0 (πριν να βγει η udev).
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-993.jpeg 
Εμφανίσεις:  2 
Μέγεθος:  10,4 KB 
ID: 150020
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-994.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  22,4 KB 
ID: 150021
    Επιλέγουμε autoselect στο media type, αυτόματη διευθυνσιοδότηση μέσω DHCP, δηλώνουμε domain και όνομα υπολογιστή. Έπειτα μας εμφανίζει τις πληροφορίες και μας ρωτάει αν όλα είναι καλά και ξαναγυρνάμε πίσω. Εδώ θα πατήσουμε κλασικά το πλήκτρο x ώστε να κατέβουν τα πακέτα από τον διακομιστή (στη δική μου έκδοση αφού πάτησα το x με γύρισε στην προηγούμενη εικόνα και ξανα-επέλεξα HTTP και Get Distribution και τότε κατέβασε κανονικά και εγκατέστησε τα πακέτα.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-34.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  23,3 KB 
ID: 150023
    Τελειώσαμε την εγκατάσταση και τώρα απλά θα κάνουμε κάποιες απλές ρυθμίσεις.


    [Τελικές ρυθμίσεις της εγκατάστασης]
    Spoiler:

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-35.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  32,5 KB 
ID: 150024
    Εδώ είμαστε στο config menu που λέγαμε. Ας ξεκινήσουμε με το να ορίσουμε τη ζώνη ώρας μας οπότε πατάμε το πλήκτρο b.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-37.jpeg 
Εμφανίσεις:  2 
Μέγεθος:  24,9 KB 
ID: 150025
    Επιλέγουμε πρώτα Europe και μετά Athens και βλέπουμε να εμφανίζεται η σωστή ώρα.

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-38.jpeg 
Εμφανίσεις:  394 
Μέγεθος:  5,9 KB 
ID: 150026
    Το επόμενο βήμα είναι η επιλογή c δηλαδή να ορίσουμε το κέλυφος που θέλουμε να έχει ο χρήστης root. Εγώ επιλέγω πάντα το korn shell γιατί είναι πιο βολικό από το απλό bourne shell, τουλάχιστον μέχρι να εγκαταστήσουμε bash, zsh ή όποιο άλλο θέλουμε. Επόμενο βήμα ο ορισμός κωδικού στο χρήστη root.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-41.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  11,6 KB 
ID: 150027
    Με την επιλογή o δημιουργώ ένα νέο χρήστη και επιλέγω να είναι μέλος της ομάδας wheel (η μανίσια επιλογή στα BSD είναι να επιτρέπει να κάνει su μόνο όποιος χρήστης είναι μέλος της ομάδας wheel).
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-40.jpeg 
Εμφανίσεις:  1 
Μέγεθος:  15,5 KB 
ID: 150028
    Εδώ βλέπουμε τους δαίμονες που θα ξεκινήσουν με το σύστημα. Όπως βλέπουμε έχω απενεργοποιήσει τους cgd και raidframe μια και δεν χρησιμοποιήσαμε αυτές τις υποδομές και έχω ενεργοποιήσει τον sshd.

    Όπως διαβάζουμε στις επιλογές e, f, το πρόγραμμα εγκατάστασης μας επιτρέπει να εγκαταστήσουμε binary πακέτα και να φέρουμε την pkgsrc για χτίσιμο πακέτων. Αυτό είναι επίσης νέα λειτουργία της έκδοσης 7.0 και δεν υπάρχει στην επίσημη έκδοση. Στο επόμενο μήνυμα, θα γράψω για την αναβάθμιση του βασικού συστήματος καθώς και τα binary πακέτα και την pkgsrc οπότε δεν τα εγκαθιστώ τώρα για να τα δούμε εκεί με μεγαλύτερη λεπτομέρεια.

    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  nbsd-43.jpeg 
Εμφανίσεις:  3 
Μέγεθος:  37,7 KB 
ID: 150030
    Η εγκατάστασή μας έχει τελειώσει. Το παρόν μήνυμά μου είναι τεράστιο και ίσως δίνει την εντύπωση ότι χρειάζεται πολύς χρόνος αλλά στην πραγματικότητα τα OpenBSD, NetBSD είναι τα συστήματα που εγκαθίστανται πιο γρήγορα από όλα. Όσο έκανα να γράψω το παρόν μήνυμα θα μπορούσα να είχα στήσει 30 μηχανήματα


    [Πρώτη εκκίνηση]
    Spoiler:

    Την πρώτη φορά που θα εκκινήσουμε το σύστημα, πολύ πιθανώς να δούμε ένα μήνυμα λάθους που να λέει ότι τα init scripts swap2 και postfix δεν έχουν εκκινηθεί σωστά. Λίγο πιο πάνω θα δούμε ότι αφενός δεν έχει οριστεί swap space και αφετέρου ότι είναι άδειο το hostname. Επειδή όπως είπαμε έχουν προστεθεί πολλές νέες λειτουργίες στον εγκαταστάτη της έκδοσης 7.0, υπάρχουν κάποια τέτοια προβληματάκια (τα οποία μπορεί να έχουν λυθεί σε μετέπειτα έκδοση από αυτήν που δοκίμασα εγώ).

    Για να ορίσουμε hostname έχουμε δύο επιλογές. Η μία είναι θέτοντας τιμή στην μεταβλητή hostname στο /etc/rc.conf. Η άλλη είναι να δημιουργήσουμε το αρχείο /etc/myname και να θέσουμε εκεί το όνομα. Στην επόμενη επανεκκίνηση θα έχει τεθεί σωστά το όνομα και δεν θα πάρουμε μήνυμα λάθους. Αντί για επανεκκίνηση μπορούμε απλά να τρέξουμε το init script που είναι για αυτή τη δουλειά δηλαδή να τρέξουμε /etc/rc.d/network restart. Έπειτα αρκεί να τρέξουμε /etc/rc.d/postfix start ώστε να ξεκινήσουμε τον δαίμονα ηλεκτρονικού ταχυδρομείου postfix.

    Όσον αφορά το πρόβλημα με το swap, τα init scripts είναι ρυθμισμένα έτσι ώστε να ψάχνουν στο αρχείο /etc/fstab και να ενεργοποιούν όσες κατατμήσεις έχουν τύπο swap. Στην περίπτωσή μας όμως για κάποιο λόγο το πρόγραμμα εγκατάστασης δεν δημιούργησε καταχώρηση για το swap στο αρχείο fstab (ίσως μπερδεύτηκε επειδή χρησιμοποιήσαμε GPT). Έτσι εμείς θα ανοίξουμε το αρχείο /etc/fstab με τον κειμενογράφο vi και θα προσθέσουμε την παρακάτω καταχώρηση.
    Κώδικας:
    /dev/dk1  none  swap  sw  0 0
    και έπειτα θα εκτελέσουμε τα κατάλληλα init scripts
    Κώδικας:
    # /etc/rc.d/swap1 start
    # /etc/rc.d/swap2 start
    Τα προβλήματα που είχαμε διορθώθηκαν και στην επόμενη επανεκκίνηση δεν θα δούμε κανένα μήνυμα λάθους.

    Το σύστημά μας είναι έτοιμο. Έχουμε εγκαταστήσει όλο το βασικό σύστημα και το οποίο περιέχει όλους τους απαραίτητους δαίμονες για ένα τυπικό διακομιστή. Για desktop χρήση εννοείται πως θα χρειαστούμε πολλά περισσότερα πακέτα.

    Ένα πράγμα που με ενοχλεί σε πολλά εγχειρίδια είναι ότι σε καθοδηγούν στην εγκατάσταση αλλά μετά σε παρατάνε χωρίς να ξέρεις τι να κάνεις. Υπάρχουν βέβαια οδηγίες για το κάθε πρόγραμμα και υποδομή αλλά είναι η πληροφορία είναι διάσπαρτη. Για να διαβάσω εγώ την manpage του X πρέπει πρώτα να ξέρω ότι υπάρχει το X πράγμα το οποίο δεν θα συμβαίνει αν δεν έχω ασχοληθεί καθόλου με το λειτουργικό.

    Στα BSD υπάρχει μια manpage με όνομα afterboot η οποία έχει ακριβώς αυτό το σκοπό, να σου μάθει τι υπάρχει από εδώ και πέρα και σε καθοδηγεί για διάφορες βασικές λειτουργίες όπως να ορίσεις δίκτυό σου, να δημιουργήσεις νέους χρήστες, αναφέρει ποιοι δαίμονες υπάρχουν και την λειτουργία του καθενός, περιγράφει τα init scripts, μέχρι και πληροφορίες για να κάνεις compile νεότερο πυρήνα έχει. Επειδή λοιπόν η manpage εξηγεί τα πάντα, εγώ θα αναφέρω περιληπτικά κάποιες βασικές ρυθμίσεις που μπορούμε να κάνουμε.

    Το πρώτο που χρειάζεται να πειράξουμε είναι φυσικά οι ρυθμίσεις του δικτύου μας ώστε να μπορούμε να κατεβάσουμε και να εγκαταστήσουμε πακέτα ή ό,τι άλλο θέλουμε να κάνουμε.

    [Στατική IP]
    Ένα σενάριο είναι να έχουμε στατικές IP στο δίκτυό μας οπότε πρέπει να ορίσουμε διεύθυνση IP (και IPv6 αν θέλουμε), Πύλη, Διακομιστές ονομάτων.

    Η δήλωση της διεύθυνσης IP γίνεται και πάλι με δύο τρόπους είτε με μεταβλητή στο αρχείο rc.conf ή σε ξεχωριστό αρχείο στο /etc. Πρώτα πρέπει να δούμε ποιο interface μας ενδιαφέρει να ρυθμίσουμε. Στην δική μου περίπτωση είχαμε intel e1000 κάρτα οπότε έχουμε το interface wm0. Άρα η μεταβλητή που πρέπει να ορίσουμε στο rc.conf είναι η ifconfig_wm0 ενώ το ξεχωριστό αρχείο είναι το /etc/ifconfig.wm0

    Δημιουργούμε λοιπόν το αρχείο /etc/ifconfig.wm0 και μέσα γράφουμε
    Κώδικας:
    inet 192.168.1.50 netmask 255.255.255.0
    Αν έχουμε και IPv6 τότε αυτό δηλώνεται με inet6.

    Η πύλη δηλώνεται στην μεταβλητή defaultroute στο rc.conf ή στο αρχείο /etc/mygate. Οι διακομιστές ονομάτων δηλώνονται στο αρχείο /etc/resolv.conf με την μορφή "nameserver τάδε_ip" πχ
    Κώδικας:
    nameserver 192.168.1.5
    [DHCP]
    Για να ορίσουμε δυναμική εκχώρηση διεύθυνσης υπάρχουν 3-4 τρόποι. Ο απλός τρόπος είναι να δημιουργήσουμε το αρχείο /etc/ifconfig.wm0 και μέσα να
    γράψουμε απλά dhcp. Μαζί με την διεύθυνση IP θα δηλωθούν αυτόματα και η πύλη και οι διακομιστές ονομάτων οπότε δεν χρειάζεται να πειράξουμε κανένα άλλο αρχείο.

    Ένας πιο σύνθετος αλλά καλύτερος τρόπος είναι να ορίσουμε στο αρχείο rc.conf την μεταβλητή dhcpcd=YES (ή dhclient=YES ανάλογα με ποιον δαίμονα προτιμούμε). Έτσι έχουμε τη δυνατότητα να αλλάξουμε την συμπεριφορά του δαίμονα ανάλογα με τις προτιμήσεις μας (οι ρυθμίσεις μπορούν να γίνουν είτε θέτοντας τιμή στην μεταβλητή dhcpcd_flags στο αρχείο rc.conf ή ακόμη καλύτερα στο αρχείο /etc/dhcpcd.conf)

    Όλα τα παραπάνω περιγράφονται περιληπτικά στην manpage afterboot και λεπτομερώς στην manpage ifconfig.if. Επίσης απαραίτητο είναι να διαβάσουμε την manpage του rc.conf και να δηλώσουμε τι θέλουμε να ξεκινά κατά την εκκίνηση και τι όχι.


    Στο επόμενο μήνυμα θα γράψω για την αναβάθμιση του βασικού συστήματος και την εγκατάσταση πακέτων.

    Εννοείται πως δεν τα εξηγώ τέλεια αλλά ελπίζω να αποτελέσει το έναυσμα για να εγκαταστήσει κάποιος το πολύ καλό αυτό λειτουργικό που είναι το NetBSD. Ευχαριστώ για την υπομονή σας.

    - - - Updated - - -

    Ένας τελικός χρήστης που χρησιμοποιεί linux (ειδικά κάποιος που δουλεύει μόνο γραφικό περιβάλλον) δεν θα δει μεγάλες διαφορές.

    Κάποιες διαφορές που μου έρχονται στο μυαλό είναι πχ στην απόκτηση πληροφοριών όπως οι εξής:

    Spoiler:

    * Στο βασικό σύστημα δεν υπάρχει η εντολή free που χρησιμοποιούμε στο linux για να δούμε πόση ελεύθερη μνήμη υπάρχει. Μπορούμε να πάρουμε πληροφορίες όμως χρησιμοποιώντας άλλες εντολές όπως οι παρακάτω:
    Κώδικας:
    # vmstat
    
     procs    memory      page                       disks   faults      cpu
     r b      avm    fre  flt  re  pi   po   fr   sr f0 c0   in   sy  cs us sy id
     1 0    36196 1950848 454   0   0    0    0    0  0  0   10  613  44  0  1 99
    
    # swapctl -l
    Device            1K-blocks       Used               Avail        Capacity    Priority
    /dev/dk1         2097648             0         2097648             0%       0
    Με την vmstat βλέπουμε ότι αυτή τη στιγμή χρησιμοποιούνται 36MB και μένουν 1,950MB ελεύθερα. Με την swapctl βλέπουμε ότι έχουμε 2GB swap και αυτή τη στιγμή δεν χρησιμοποιείται καθόλου.

    * Για να πάρουμε πληροφορίες για το σκληρό δίσκο μπορούμε να χρησιμοποιήσουμε την εντολή atactl (σε αντιστοιχία με τις hdparm και smartctl)
    Κώδικας:
    # atactl wd0 identify
    Model: QEMU HARDDISK, Rev: 2.2.0, Serial #: QM00001
    Device type: ATA, fixed
    Capacity 21 Gbytes, 41943040 sectors, 512 bytes/sector
    . . .
    
    # atactl wd0 smart status
    SMART supported, SMART enabled
    id value thresh crit collect reliability description                 raw
      1 100    6     yes online  positive    Raw read error rate         0
      3 100    0     yes online  positive    Spin-up time                16
      4 100   20     no  online  positive    Start/stop count            100
      5 100   36     yes online  positive    Reallocated sector count    0
      9 100    0     yes online  positive    Power-on hours count        1
     12 100    0     yes online  positive    Device power cycle count    0
    190  69   50     yes online  positive    Airflow Temperature         31 Lifetime min/max 31/0
    Πληροφορίες για τον επεξεργαστή (αντίστοιχη του /proc/cpuinfo) μπορούμε να πάρουμε τρέχοντας την εντολή cpuctl
    Κώδικας:
    # cpuctl identify 0
    . . .
    cpu0: "Intel Core Processor (Haswell)"
    cpu0: Intel 4th gen Core, Xeon E3-12xx v3 (Haswell) (686-class), 3192.78 MHz
    cpu0: family 0x6 model 0x3c stepping 0x1 (id 0x306c1)
    cpu0: features 0x178bfbfd<FPU,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA>
    . . .
    Πληροφορίες για τις pci συσκευές παίρνουμε με την εντολή pcictl (αντίστοιχη της lspci)
    Κώδικας:
    # pcictl pci0 list
    000:00:0: Intel 82G33/P35 Host Bridge (host bridge)
    000:01:0: unmatched vendor 0x1234 product 0x1111 (VGA display, revision 0x02)
    000:02:0: Intel i82540EM 1000baseT Ethernet (ethernet network, revision 0x03)
    . . .
    Μια άλλη διαφορά είναι σχετικά με την επανεκκίνηση και τερματισμό του συστήματος. Πολύς κόσμος έχει συνηθίσει στο linux να τρέχει reboot ή halt. Στην manpage πχ του reboot διαβάζουμε το παρακάτω
    NAME
    halt, reboot, poweroff - stop the system.

    DESCRIPTION
    If halt or reboot is called when the system is not in runlevel 0 or 6,
    in other words when it's running normally, shutdown will be invoked
    instead (with the -h or -r flag). For more info see the shutdown(8)
    manpage.
    Δηλαδή όταν τρέχουμε reboot ή halt από ένα κανονικό runlevel, εκτελείται πρώτα η shutdown η οποία διαβάζει τα init scripts και εκτελεί τις απαραίτητες διεργασίες για να κλείσει το σύστημα. Έτσι ενώ το σωστό είναι να τρέξουμε "shutdown -r now", τρέχοντας reboot όλα παίζουν σωστά. Στα BSD όμως δεν γίνεται αυτό και όταν τρέχουμε reboot ή halt απλά σκοτώνονται οι εφαρμογές αντί να εκτελεστούν τα απαραίτητα scripts. Έτσι καλό είναι να συνηθίσουμε να τρέχουμε shutdown -h/-r/-p now.


    [Αλλαγές στο fstab]
    Spoiler:

    Χτες ξέχασα να αναφέρω ότι δεν εγκατέστησα το πακέτο για τον X και τον πηγαίο του κώδικα επειδή θα χρησιμοποιήσουμε όχι την έκδοση που βρίσκεται στο βασικό σύστημα αλλά την modular έκδοση που μπορούμε να εγκαταστήσουμε σαν πακέτο. Επίσης ξέχασα να αναφέρω μια αλλαγή που μπορούμε να κάνουμε στο /etc/fstab. Άλλη μια λειτουργία που υπάρχει στην 7.0 έκδοση είναι ότι δεν χρειάζεται να χρησιμοποιούμε τις απλές devices που μπορούν να αλλάξουν αν προστεθεί ή αφαιρεθεί ένας δίσκος αλλά μπορούμε όπως και στο linux να χρησιμοποιήσουμε σταθερές ετικέτες.

    Για να το κάνουμε αυτό πρέπει πρώτα να ορίσουμε τις ετικέτες και επ ευκαιρίαν θα δημιουργήσουμε και την FAT32 κατάτμηση σε περίπτωση που απέτυχε να δημιουργηθεί κατά την εγκατάσταση.
    Κώδικας:
    # gpt show wd0
         start      size  index  contents
             0         1         PMBR
             1         1         Pri GPT header
             2        32         Pri GPT table
            34      2014         
          2048  36696240      1  GPT part - NetBSD FFSv1/FFSv2
      36698288   4195296      2  GPT part - NetBSD swap
      40893584   1049423         
      41943007        32         Sec GPT table
      41943039         1         Sec GPT header
    Όπως με το πρόγραμμα gdisk βλέπουμε τον GPT πίνακα κατατμήσεων στο linux, το ίδιο κάνουμε και εδώ με την εντολή gpt. Βλέπουμε ότι μετά τον πρωτεύοντα header έχουμε μια κενή περιοχή επειδή ευθυγραμμίσαμε την κατάτμησή μας στο 1MB, μετά έχουμε τις δύο κατατμήσεις και μετά ένα κενό χώρο. Αυτό γίνεται επειδή δεν δημιουργήθηκε η FAT32 κατάτμηση. Ας την δημιουργήσουμε τώρα.

    Κώδικας:
    # gpt add -b 40893584 -i 3 -l ESP -t efi wd0
    Partition 3 added, use:
    	dkctl wd0 addwedge <wedgename> 40893584 1049423 <type>
    to create a wedge for it
    
    # gpt label -i 1 -l ROOT wd0
    partition 1 on rwd0d labeled ROOT
    
    # gpt label -i 2 -l SWAP wd0
    partition 2 on rwd0d labeled SWAP
    Δημιουργούμε την 3η κατάτμηση με ετικέτα ESP και τύπο efi. Επίσης θέτουμε τιμή ετικέτας στις υπάρχουσες κατατμήσεις. Με αυτό τον τρόπο αντί να έχουμε στο fstab συσκευές όπως "/dev/dk0", μπορούμε να ορίσουμε την ετικέτα. Έτσι οι καταχωρήσεις θα γίνουν ως εξής
    Κώδικας:
    NAME=ROOT    /       ffs     rw   1 1
    NAME=SWAP   none  swap sw   0 0
    Τελευταία επεξεργασία από το μέλος imitheos : 26-01-15 στις 14:19.
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  2. #2
    Εγγραφή
    20-06-2007
    Περιοχή
    Chicago, Illinois
    Ηλικία
    32
    Μηνύματα
    30.613
    Downloads
    96
    Uploads
    25
    Άρθρα
    14
    Τύπος
    FTTH
    Ταχύτητα
    1 Gbps
    ISP
    Nova
    Εξαιρετικη δουλεια !
    Dies, died, will die.
    Lived, lives, will live.

  3. #3
    Εγγραφή
    07-02-2007
    Μηνύματα
    747
    Downloads
    6
    Uploads
    0
    @admins
    Αφαιρέστε το "imi"... Επιτέλους δηλαδή!
    Οδηγός για LaTeX στα Ελληνικά
    Οδηγός για Linux στα Ελληνικά

  4. #4
    Εγγραφή
    30-01-2005
    Περιοχή
    City of light with thy violet crown
    Ηλικία
    44
    Μηνύματα
    6.973
    Downloads
    23
    Uploads
    0
    Ταχύτητα
    150/30Mbps
    ISP
    BT FTTP
    Router
    pfSense/Openreach ONT
    Παράθεση Αρχικό μήνυμα από pmav99 Εμφάνιση μηνυμάτων
    @admins
    Αφαιρέστε το "imi"... Επιτέλους δηλαδή!
    Σωστός!
    Όταν ενώνουμε τις δυνάμεις μας, μπορούμε να πετύχουμε το ακατόρθωτο - Παναγιώτης Γιαννάκης

    Never say never, because limits, like fears, are often just an illusion -
    Michael Jordan


  5. #5
    Εγγραφή
    10-06-2011
    Περιοχή
    offroad
    Μηνύματα
    2.616
    Downloads
    6
    Uploads
    0
    Τύπος
    Cable
    Ταχύτητα
    800/150
    ISP
    Get Norway
    Router
    OPNsense
    Δε πάει να ναι και 500 κατεβατα, άμα είναι από imitheo είναι το λιγότερο άριστο

  6. #6
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.196
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Ευχαριστώ για τα καλά λόγια. Από το άριστο απέχει πάρα πολύ μια και άλλες παράγραφοι είναι τεράστιες και ποιος ξέρει πόσο χάλια σύνταξη έχω . Παλιά που μπορούσες να αλλάξεις σελίδα ήταν πολύ βολικό για τέτοια μηνύματα. Επίσης δυστυχώς το φόρουμ δεν έχει (από όσο ξέρω) κάποια δυνατότητα "wiki" ώστε να μπορεί να διορθώσει κανείς το μήνυμα και να προσθέσει και άλλες πληροφορίες που μπορεί να ξέχασα. Αν πάντως παρακινήσει κάποιον να δουλέψει NetBSD (ή έστω και κάποιο άλλο BSD), τα έβγαλε τα λεφτά του.

    Υπάρχει και το επίσημο guide που έχει και αυτό φωτογραφίες και είναι πολύ πιο καλογραμμένο αλλά αφορά τις επίσημες εκδόσεις οπότε χρησιμοποιεί MBR, disklabels, κτλ. Εγώ ήθελα να δείξω μια εγκατάσταση που να εκμεταλλεύεται καλύτερες "σύγχρονες" τεχνολογίες. Αν υπήρχε και υπόστηριξη για κάποιο πιο σύγχρονο fs όπως ZFS, btrfs, τότε θα έλεγα ότι δεν έχει να ζηλέψει κάτι σε σχέση με το linux.

    Αν μπορέσω σήμερα, θα γράψω πώς μπορούμε να αναβαθμίσουμε το βασικό σύστημα και έπειτα πώς μπορούμε να εγκαταστήσουμε binary πακέτα ή να τα χτίσουμε από τον πηγαίο κώδικα. Προσπάθησα να "δεσμεύσω" τα 2, 3 μηνύματα για αυτό το σκοπό αλλά ό,τι και να έκανα το έκανε auto-merge με το πρώτο μου μήνυμα.

    - - - Updated - - -

    [Εισαγωγή]
    Πολλές φορές διαβάζουμε κάποιο μήνυμα να αναφέρει "Linux" και κάποιος που είναι τυπικός να διορθώνει "το σωστό είναι GNU/Linux" ή να το πηγαίνει ακόμη πιο πέρα και να προτείνει ένα ολόκληρο κατεβατό για τίτλο. Μπορεί βέβαια να έχουμε συνηθίσει τον όρο Linux και με αυτόν να εννοούμε ολόκληρο το σύστημα αλλά τυπικά Linux ονομάζεται μόνο ο πυρήνας.

    Τα παρακάτω είναι κάποια από τα προγράμματα που χρειαζόμαστε στο ελάχιστο μόνο για να εκκινηθεί το σύστημα και να κάνουμε βασικές λειτουργίες. Ακόμη και για ένα πολύ minimal λειτουργικό χωρίς διαχειριστή πακέτων και χωρίς καμμία από τις ευκολίες που παρέχει μια τυπική διανομή, θα χρειαστούμε πολλά ακόμη προγράμματα.

    * Linux για πυρήνα
    * libc για shared βιβλιοθήκες
    * bash για κέλυφος
    * bzip2 / gzip / xz για αποσυμπίεση
    * coretuils για ls, rm , cat, du, df, κτλ
    * τάδεfsprogs για το σύστημα αρχείων που χρησιμοποιούμε
    * elvis / vi / nano / κτλ για κειμενογράφο

    Τα BSD (Free, Net, Open, κτλ) λοιπόν δεν παρέχουν μόνο ένα πυρήνα αλλά ένα ολοκληρωμένο λειτουργικό που ονομάζεται "βασικό σύστημα" και που αναπτύσσεται μαζί σαν μία οντότητα από την ομάδα του εκάστοτε λειτουργικού (παρέχονται και κάποια "εξωτερικά" προγράμματα όπως πχ ο gcc όταν ο όγκος δουλειάς που χρειάζεται για την ανάπτυξη δεν είναι εφικτό να παραχθεί από την ομάδα). Συνήθως το βασικό σύστημα περιέχει όλα τα απαραίτητα συστατικά για χρήση διακομιστή και από εκεί και πέρα υπάρχει ο διαχειριστής πακέτων που επιτρέπει τον χρήστη να εγκαταστήσει εξωτερικά προγράμματα όπως γίνεται και στο Linux.

    Ας δούμε λοιπόν πως μπορούμε να αναβαθμίσουμε το βασικό σύστημα. Καλό υλικό για διάβασμα αποτελούν οι επίσημοι οδηγοί αναβάθμισης για stable έκδοση και για current. Όπως πάντα, υπάρχουν πολλοί τρόποι για να κάνουμε μια εργασία.

    Ένας τρόπος είναι η αναβάθμιση με την χρήση binary πακέτων. Στο προηγούμενο μήνυμα, είδαμε στο κεντρικό μενού του προγράμματος εγκατάστασης να υπάρχει μια επιλογή "Upgrade NetBSD". Πηγαίνουμε δηλαδή και κατεβάζουμε από τον releng server, τα binary πακέτα (στον κατάλογο αρχιτεκτονική/binary/sets) από την έκδοση που θέλουμε καθώς και το νέο boot.iso και εκκινούμε από αυτό. Η επιλογή Upgrade κάνει την ίδια δουλειά με την Install απλά δεν δημιουργεί κατατμήσεις. Έτσι εγκαθιστά τα νέα πακέτα αποσυμπιέζοντας τα πάνω στα παλιά αρχεία και στο τέλος έχουμε την επιλογή να κάνουμε merge τα αρχεία ρυθμίσεων του /etc. Αυτός είναι ο πιο απλός τρόπος αναβάθμισης (αν δεν κάνω λάθος, αυτόν τον τρόπο προτείνουν και στο OpenBSD). Εδώ δεν έχει κάτι ιδιαίτερο να περιγράψω για αυτό θα εστιάσω στο χτίσιμο του συστήματος από τον πηγαίο κώδικα.

    [Κατέβασμα και ενημέρωση πηγαίου κώδικα]
    Spoiler:

    Στο στάδιο της επιλογής πακέτων είχα γράψει όμως ότι επειδή τα πακέτα του πηγαίου κώδικα έχουν μεγάλο μέγεθος και θα τραβήξουν το χρόνο της εγκατάστασης, μπορεί κάποιος να τα παραλείψει και να τα κατεβάσει μετά.
    Κώδικας:
    #!/bin/sh
    SRCDATE=201501251410Z
    mkdir -p /usr/INSTALL
    cd /usr/INSTALL
    for i in src syssrc sharesrc gnusrc; do
      ftp http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-7/${SRCDATE}/source/sets/${i}.tgz
      tar zxvfC ${i}.tgz /
    done
    Αν δεν έχω κάνει κάποιο λάθος, το παραπάνω script θα κατεβάσει στον κατάλογο /usr/INSTALL τα απαραίτητα πακέτα και θα τα αποσυμπιέσει στον κατάλογο /usr/src. Το μόνο που αλλάζουμε είναι την τιμή της μεταβλητής SRCDATE. Αν φυσικά έχουμε εγκαταστήσει τα πακέτα κατά την διάρκεια της εγκατάστασης, τότε παραλείπουμε το παραπάνω βήμα.

    Έτσι λοιπόν έχουμε όλο τον πηγαίο κώδικα στον κατάλογο /usr/src. Για να ενημερώσουμε τον κώδικα θα χρησιμοποιήσουμε το VCS πρόγραμμα cvs. Έχει ξεκινήσει η μετατροπή των αποθετηρίων στο git το οποίο υλοποιεί νεότερες τεχνολογίες και κάνει πολύ πιο εύκολη την ανάπτυξη σε σχέση με το cvs. Ήδη υπάρχει git mirror στο github για το -current αλλά θα γίνει επίσημα η μετατροπή όλων των branch.

    Σε αυτό το σημείο αξίζει να αναφέρουμε ότι θα μπορούσαμε να χρησιμοποιήσουμε την λειτουργία checkout του cvs και να κατεβάσουμε τον κώδικα κατευθείαν από το αποθετήριο αλλά επειδή υπάρχουν πάρα πολλά αρχεία, το κατέβασμα μέσω cvs είναι σχετικά αργό οπότε μας βολεύει να κατεβάζουμε αρχικά ένα συμπιεσμένο "snapshot" και μετά να χρησιμοποιούμε το cvs για να το ενημερώσουμε.

    Σε οποιοδήποτε κατάλογο είναι μέρος ενός CVS αποθετηρίου υπάρχει ένας κατάλογος με όνομα CVS ο οποίος περιέχει πληροφορίες όπως πχ τον server του αποθετηρίου ώστε να μπορεί να γίνει η ενημέρωση. Δύο από αυτά τα αρχεία είναι το Root το οποίο αναφέρει τον server που χρησιμοποιούμε και το Tag το οποίο λέει στο cvs ποιο branch να κατεβάσει.
    Κώδικας:
    # cat /usr/src/CVS/Root
    anoncvs@anoncvs.netbsd.org:/cvsroot
    # cat /usr/src/CVS/Tag
    Tnetbsd-7
    Το tag το ορίζουμε μία φορά κατά το αρχικό checkout και μετά το cvs θυμάται ποιο branch θέλουμε να παρακολουθούμε. Έτσι, αν δεν θέλουμε να μεταπηδήσουμε σε κάποιο άλλο branch, εκτελούμε απλά την λειτουργία update του cvs χωρίς να χρειάζεται να ορίζουμε πολλές παραμέτρους.

    Κώδικας:
    # export CVSROOT=anoncvs3.de.netbsd.org
    # cvs update -dP
    
    cvs update: Updating .
    cvs update: Updating bin
    cvs update: Updating bin/cat
    . . .
    cvs update: Updating distrib/sets/lists/base
    P distrib/sets/lists/base/md.amd64
    . . .
    cvs update: Updating doc
    U doc/CHANGES-7.0
    Από την σελίδα με τους mirrors βρίσκουμε κάποιο κοντινό σε εμάς server (πχ το γαλλικό ή το γερμανικό) ώστε να μην φορτώνουμε τον κεντρικό server και εκτελούμε την λειτουργία update. Οι δύο παράμετροι που δίνουμε δηλώνουν ότι θέλουμε να αφαιρούνται οι κατάλογοι που είναι άδειοι (επειδή έχουν αφαιρεθεί όλα τους τα αρχεία στο αποθετήριο) και να δημιουργούνται όσοι νέοι κατάλογοι έχουν εμφανιστεί.

    Για ένα χρονικό διάστημα δεν θα βλέπουμε έξοδο στην οθόνη σαν να έχει κολλήσει το cvs αλλά δεν υπάρχει πρόβλημα. Αυτό γίνεται γιατί υπολογίζεται η λίστα των αρχείων που έχουν διαφορές ανάμεσα στο δικό μας tree και στο αποθετήριο. Έπειτα θα εμφανίσει όλες τις αλλαγές που έχει κάνει. Όταν βλέπουμε να εμφανίζονται ονόματα καταλόγων χωρίς κάποιο αρχείο (όπως στην περίπτωση των bin, bin/cat παραπάνω), αυτό σημαίνει ότι δεν έχει κάποια αλλαγή σε εκείνο τον κατάλογο. Όταν εμφανίζεται το όνομα κάποιου αρχείου, τότε έχει γίνει κάποια αλλαγή που συμβολίζεται με ένα κωδικό. Το U σημαίνει update δηλαδή το αρχείο αναβαθμίστηκε, το P σημαίνει patch δηλαδή πάλι έχουμε αναβάθμιση αλλά οι αλλαγές ήταν λίγες οπότε στάλθηκε ένα patch αντί για όλο το αρχείο, κτλ.

    Έτσι λοιπόν ο κώδικάς μας αντικατοπτρίζει την πιο πρόσφατη εικόνα του netbsd-7 branch και μπορούμε να τον χτίσουμε. Αυτό φυσικά δεν το κάνουμε κάθε 2 ώρες αλλά κρίνουμε από την έξοδο του cvs, από το αρχείο CHANGES, κτλ αν έχει γίνει κάποια αξιόλογη αλλαγή που χρειαζόμαστε.


    [Χτίσιμο του κώδικα]
    Το πρώτο πράγμα που πρέπει να κοιτάξουμε είναι το αρχείο UPDATING το οποίο περιέχει οδηγίες για σημαντικές αλλαγές που έχουν γίνει και που μπορεί να σπάσουν το σύστημα (σπάνιο πράγμα να υπάρχει βέβαια). Εκτός από το UPDATING υπάρχει και το αρχείο BUILDING το οποίο σε συνδυασμό με την manpage mk.conf εξηγούν λεπτομερώς αυτά που θα περιγράψω παρακάτω.

    1) Παλαιός τρόπος χτισίματος
    Spoiler:

    Ο κλασικός τρόπος χτισίματος είναι να εκτελέσουμε το make μέσα στον κατάλογο /usr/src. Και σκέτο make να τρέξουμε, αυτό θα τρέξει το build target και θα χτίσει το σύστημα. Κάποιοι κλασικοί targets που μπορούμε να εκτελέσουμε είναι οι παρακάτω:

    * build => Χτίζει ολόκληρο το βασικό σύστημα εκτός από τον πυρήνα.
    * distribution => Αφού εκτελέσει το build στόχο και χτίσει το σύστημα, εγκαθιστά τα πάντα στον κατάλογο DESTDIR (δηλαδή στο / αν δεν το αλλάξουμε)
    * buildworld => Το ίδιο με distribution αλλά φροντίζει ώστε το DESTDIR να μην έχει τιμή /
    * installword => Εγκαθιστά τα sets που θα ορίσουμε από το DESTDIR στο / έτσι μπορούμε να ελέγξουμε καλύτερα την αναβάθμιση από ό,τι με το distribution στόχο.
    * release => Τρέχει τον distribution στόχο αλλά επίσης μεταγλωττίζει και τον πυρήνα και μετά πακετάρει τα πάντα στους αντίστοιχους καταλόγους ώστε να παραχθεί η "διανομή" που βλέπουμε στον releng server
    * iso-image => Παίρνει τα αρχεία που έχουν παραχθεί από τον release στόχο (πρέπει να τον εκτελέσουμε εμείς) και παράγει ένα εκκινήσιμο iso.
    * install-image => Το ίδιο αλλά αντί για iso παράγει ένα image που μπορούμε να γράψουμε σε usb flashάκι.

    Πριν να τρέξουμε τους διάφορους στόχους για να δούμε τι κάνουν, θα ορίσουμε κάποιες μεταβλητές που επηρεάζουν την λειτουργία του make.

    Κώδικας:
    # cat /etc/mk.conf
    BSDOBJDIR=/usr/work/obj
    DESTDIR=/usr/work/destdir
    MAKEVERBOSE=1
    MKOBJDIRS=yes
    MKUPDATE=yes
    RELEASEDIR=/usr/work/release
    TOOLDIR=/usr/work/tools
    * Με την BSDOBJDIR ορίζουμε ότι θέλουμε τα object αρχεία να εγκαθίστανται στον κατάλογο /usr/work/obj ώστε να μην μολύνουμε το πηγαίο κώδικα (Η μανίσια επιλογή είναι /usr/obj αλλά εγώ τα μάζεψα όλα στον κατάλογο work)
    * Η DESTDIR ορίζει τον κατάλογο στον οποίο θα εγκατασταθούν όλα τα παραγόμενα αρχεία ώστε να μην πάνε κατευθείαν στο / (Ο κατάλογος που ορίζουμε δεν πρέπει να τελειώνει σε /).
    * Με την MAKEVERBOSE ορίζουμε πόσο λεπτομερή θα είναι τα μηνύματα που παίρνουμε από το make. Η μανίσια επιλογή είναι 2 και μας εμφανίζει τις εντολές του compiler που τρέχουν. Εγώ το μείωσα σε 1 ώστε να βλέπουμε μεν τι στάδιο έχουμε αλλά όχι τις εντολές
    * Με την MKOBJDIRS λέμε ότι κάτα την διάρκεια του χτισίματος να τρέξει αυτόματα ο στόχος obj που δημιουργεί τους απαραίτητους καταλόγους στο /usr/work/obj. Έτσι δεν χρειάζεται να τρέχουμε "make obj" χειροκίνητα.
    * Η MKUPDATE έχει ως συνέπεια να μην εγκαθίστανται κατευθείαν τα αρχεία στο DESTDIR αλλά να ελέγχεται πρώτα αν έχουν αλλαχθεί από το προηγούμενο build. Επίσης ενεργοποιεί την παράμετρο NOCLEANDIR και έτσι δεν τρέχει "make cleandir" στην αρχή του build. Αυτό έχει ως συνέπεια να γίνεται πολύ γρήγορα το χτίσιμο όταν έχουμε λίγες αλλαγές επειδή θα μεταγλωττιστούν μόνο τα αρχεία που έχουν αλλάξει αντί για όλο το σύστημα από την αρχή. Σε μεγάλες αλλαγές όμως (πχ αν αλλάξουμε branch), μπορεί να αποτύχει το χτίσιμο.
    * Η RELEASEDIR ορίζει τον κατάλογο στον οποίο θα εγκατασταθούν τα αρχεία που προκύπτουν από τον στόχο release.
    * Η TOOLDIR ορίζει τον κατάλογο στον οποίο θα εγκατασταθούν τα απαραίτητα εργαλεία για το χτίσιμο (make, gcc, κτλ).

    Αυτές οι παράμετροι δεν είναι φυσικά οι μόνες που μπορούμε να ορίσουμε αλλά μπορούμε να πειράξουμε όλες τις πτυχές του συστήματος. Για παράδειγμα αν κάποιος δεν θέλει να χτίσει τον δαίμονα ηλεκτρονικού ταχυδρομείου postfix μπορεί να ορίσει MKPOSTFIX=no. Στην manpage mk.conf αναφέρονται όλες οι παράμετροι που διέπουν το χτίσιμο.

    Κώδικας:
    # mkdir -p /usr/work/obj
    # mkdir /usr/work/destdir
    # mkdir /usr/work/release
    # mkdir /usr/work/tools
    # cd /usr/src
    # make distribution
    Πρώτα δημιουργούμε τους καταλόγους που έχουμε ορίσει και έπειτα τρέχουμε τον στόχο που θέλουμε. Αν και τα Makefiles υποστηρίζουν 25 στόχους, ο κλασικός που τρέχουμε είναι ο distribution που χτίζει τα πάντα με την μία χωρίς να πρηζόμαστε. Μόνο όταν χρειάζομαι κάποιο iso, τότε τρέχω release και μετά iso-image.

    Spoiler:

    Κώδικας:
    Build started at: Tue Jan 27 22:43:07 EET 2015
    check-tools ===> .
    do-top-obj ===> .
    do-tools-obj ===> .
    . . .
    do-tools ===> .
    build_install ===> tools
    dependall ===> tools/host-mkdep
    dependall ===> tools/compat
    dependall ===> tools/binstall
    install ===> tools/compat
    install ===> tools/binstall
    install ===> tools/host-mkdep
    . . .
    do-distrib-dirs ===> .
    distrib-dirs ===> etc	(with: DESTDIR=/usr/work/destdir)
    includes ===> .
    includes ===> include
    includes ===> include/rpc
    . . .
    dependall ===> lib/libcurses
    dependall ===> lib/libquota
    . . .
    install ===> lib/libcurses
    install ===> lib/libquota
    . . .
    install ===> bin
    install ===> sbin
    . . .
    install-etc-release ===> etc
         create  etc/etc-release
        install  etc/release
    Build started at:  Tue Jan 27 22:43:07 EET 2015
    Build finished at: Tue Jan 27 22:47:02 EET 2015
    distribution ===> etc	(with: INSTALL_DONE=1)
    install-etc-files ===> etc
         create  etc/MAKEDEV
        install  /usr/work/destdir/etc/master.passwd
        install  /usr/work/destdir/etc/ttys
    . . .
    makesetfiles ===> /usr/src/distrib/sets
         create  set lists
    postinstall-fix-obsolete ===> .
       === Removing obsolete files ===
    Source directory: /usr/src
    Target directory: /usr/work/destdir/
    obsolete fix:
    	Removed obsolete directory /usr/work/destdir//usr/include/gcc-4.1
    postinstall fixes passed: obsolete
    postinstall fixes failed:
       ===============================
    postinstall-fix-obsolete_stand ===> .
       === Removing obsolete files ===
    Source directory: /usr/src
    Target directory: /usr/work/destdir/
    obsolete_stand fix:
    postinstall fixes passed: obsolete_stand
    postinstall fixes failed:
       ===============================
    checkflist ===> distrib/sets
    make distribution started at:  Tue Jan 27 22:43:07 EET 2015
    make distribution finished at: Tue Jan 27 22:47:19 EET 2015

    Στο παραπάνω spoiler βλέπουμε την υπερ-απλουστευμένη έξοδο του χτισίματος με τα βήματα που έγιναν. Πρώτα έτρεξε ο obj στόχος και δημιουργήθηκαν οι κατάλογοι στους οποίους θα αποθηκευτούν τα object αρχεία, έπειτα ο στόχος tools που μεταγλώττισε τα εργαλεία, έπειτα ο στόχος build που χτίζει τα σύστημα και τέλος ο στόχος distribution. Σε αυτό το σημείο έχουμε χτίσει το βασικό σύστημα αλλά πριν το εγκαταστήσουμε καλό είναι να χτίσουμε τον νέο πυρήνα και να εκκινήσουμε από αυτόν γιατί μπορεί να έχει εισαχθεί κάποιο νέο API που χρειάζεται.

    Αν δεν χρησιμοποιούμε κάποιο custom πυρήνα, τότε μπορούμε να παράγουμε τον GENERIC και μέσω του release στόχου αλλά ας δούμε πώς γίνεται χειροκίνητα.
    Κώδικας:
    # cd /usr/src/sys/arch/amd64/conf
    # cp GENERIC MINE
    .. edit MINE ..
    # config MINE
    Build directory is ../compile/MINE
    Don't forget to run "make depend"
    # cd ../compile/MINE
    # make depend
    # make
    # mv /netbsd /netbsd.τάδε
    # mv netbsd /netbsd
    Το αρχείο ρύθμισης του πυρήνα είναι αρχείο κειμένου που περιέχει καταχωρήσεις για κάθε οδηγό που πρέπει να χτιστεί. Αυτό που κάνουμε εμείς είναι να αντιγράψουμε τον αρχείο ρύθμισης του GENERIC (ή κάποιου άλλου που μας βολεύει) σε κάποιο νέο όνομα, να το επεξεργαστούμε και έπειτα να τρέξουμε την εντολή config η οποία αντιγράφει τα απαραίτητα αρχεία στον κατάλογο /usr/src/sys/arch/amd64/compile. Έτσι ο κατάλογος με τα object files είναι ξεχωριστός για κάθε πυρήνα και δεν μολύνουμε τον κώδικά μας.

    Έπειτα χτίζουμε τον νέο πυρήνα και τον αντιγράφουμε στο / αφού πρώτα μετονομάσουμε τον τρέχοντα πυρήνα σε κάτι άλλο ώστε αν δεν δουλέψει ο νέος πυρήνας να μπορούμε να εκκινήσουμε με τον παλιό που ξέρουμε ότι δουλεύει. Μετά κάνουμε reboot και εκκινούμε από τον νέο πυρήνα οπότε είμαστε έτοιμοι να αναβαθμίσουμε το σύστημά μας.

    Κώδικας:
    # export INSTALLSETS="base comp man misc modules text"
    # make installworld
    installsets ===> distrib/sets	(with: INSTALLDIR=/ INSTALLSETS=base comp man misc modules text)
    postinstall-check ===> .	(with: DESTDIR=)
       === Post installation checks ===
    . . .
       ================================
    make installworld started at:  Tue Jan 27 23:36:15 EET 2015
    make installworld finished at: Tue Jan 27 23:36:53 EET 2015
    Όπως περιγράψαμε περιληπτικά πριν, ο στόχος installworld εγκαθιστά τα αρχεία στο / από το κατάλογο DESTDIR. Από τη μάνα του εγκαθιστά όλα τα πακέτα αλλά μας επιτρέπει να επιλέξουμε ποια θέλουμε. Εμείς κατά την αρχική εγκατάσταση δεν επιλέξαμε το πακέτο games επειδή δεν το θέλαμε οπότε δεν θέλουμε να εγκατασταθεί ούτε τώρα. Έτσι θέτουμε τιμή στην μεταβλητή INSTALLSETS με τα πακέτα που θέλουμε. Έσβησα την παράγραφο Post installation checks γιατί θα το δούμε αμέσως μετά.

    Έτσι λοιπόν έχουμε περάσει και το βασικό σύστημα και μας μένει μόνο να κάνουμε merge τα αρχεία του /etc. Αυτό γίνεται σε δύο στάδια. Θα μπορούσαμε να εκτελέσουμε κατευθείαν την εντολή etcupdate και να μας εμφανίσει τις διαφορές αλλά έτσι θα έχουμε πάρα πολλά αρχεία να δούμε. Για αυτό το λόγο τρέχουμε πρώτα την εντολή postinstall.

    Κώδικας:
    # postinstall -s /usr/src check
    Source directory: /usr/src
    Target directory: /
    defaults check:
    	/tmp/_postinstall.15957.0/defaults/rc.conf != /etc/defaults/rc.conf
    rc check:
    	/usr/src/etc/rc.d/wpa_supplicant != /etc/rc.d/wpa_supplicant
    ptyfsoldnodes check:
    	Remove legacy device node /dev/ptyp0
    	Remove legacy device node /dev/ptyp1
    	Remove legacy device node /dev/ttyp0
    	Remove legacy device node /dev/ttyp1
    obsolete check:
    	Remove obsolete file /usr/lib/libstdc++.so.7.2
    	Remove obsolete file /usr/lib/i386/libstdc++.so.7.2
    postinstall checks failed: defaults motd mtree rc ptyfsoldnodes obsolete
    To fix, run:
        sh /usr/sbin/postinstall -s /usr/src -d / fix defaults motd mtree rc ptyfsoldnodes obsolete
    Note that this may overwrite local changes.
    
    # postinstall -s /usr/src fix
    Source directory: /usr/src
    Target directory: /
    defaults fix:
    	Copied /tmp/_postinstall.18000.0/defaults/rc.conf to /etc/defaults/rc.conf
    rc fix:
    	Copied /usr/src/etc/rc.d/wpa_supplicant to /etc/rc.d/wpa_supplicant
    ptyfsoldnodes fix:
    	Removed legacy device node /dev/ptyp0
    	Removed legacy device node /dev/ptyp1
    	Removed legacy device node /dev/ttyp0
    	Removed legacy device node /dev/ttyp1
    obsolete fix:
    	Removed obsolete file /usr/lib/libstdc++.so.7.2
    	Removed obsolete file /usr/lib/i386/libstdc++.so.7.2
    Η εντολή postinstall στην λειτουργία check ελέγχει για αλλαγές που μπορούν να επιλυθούν αυτόματα χωρίς να πρηζόμαστε εμείς. Μας εμφανίζει τι θα γίνει και αν συμφωνούμε τρέχουμε την λειτουργία fix οπότε και επιλύονται τα προβλήματα. Έτσι μας μένουν μόνο τα πραγματικά αρχεία ρυθμίσεων που έχουν αλλάξει.

    Κώδικας:
    # etcupdate -a -l -s /usr/work/destdir
    *** Creating /tmp/temproot
    *** Populating /tmp/temproot from /usr/work/destdir
    *** Checking for new directories
    *** Checking for added/modified files
    ===> /dev/MAKEDEV.local (ok)
    ===> /dev/MAKEDEV (ok)
    . . .
    ===> /etc/group (modified)
    
    --- /etc/group  2015-01-25 14:44:26.000000000 +0200
    +++ /tmp/temproot/etc/group     2013-07-09 12:34:58.000000000 +0300
    @@ -1,4 +1,4 @@
    -wheel:*:0:root,imitheos
    +wheel:*:0:root
     daemon:*:1:daemon
     kmem:*:2:root
     sys:*:3:root
    File: /etc/group (modified)
    
    Please select one of the following operations:
    
      d  Don't install the new file (keep your old file)
      i  Install the new file (overwrites your local modifications!)
      m  Merge the currently installed and new files
      s  Show the differences between the currently installed and new files
      su  Show differences in unified format ("diff -u")
      sc  Show differences in context format ("diff -c")
      ss  Show differences side by side ("sdiff -w80")
      scommand Show differences using the specified diff-like command
      v  Show the new file
    
    What do you want to do? [Leave it for later] d
    Removing /tmp/temproot/etc/group
    Η εντολή etcupdate μας εμφανίζει ένα diff με τις διαφορές των αρχείων και μας ρωτάει τι θέλουμε να κάνει. Έχω προσθέσει δύο παραμέτρους που δεν χρειάζονται για την λειτουργία της αλλά που μας κάνουν την ζωή πιο εύκολη. Η παράμετρος -a κρατάει ένα MD5 checksum για κάθε αρχείο οπότε αν αυτό το checksum ταιριάζει με το τοπικό μας αρχείο σημαίνει ότι δεν πειράξαμε εμείς κάποια επιλογή από τις default που ήρθαν με το σύστημα, επομένως δεν μας ρωτάει και αντιγράφει αυτόματα το νέο αρχείο. Η παράμετρος -l ελέγχει το RCS id σε όσα αρχεία υπάρχει. Αν το τοπικό μας αρχείο διαφέρει από αυτό της αναβάθμισης αλλά έχουν ίδιο id σημαίνει ότι δεν έχει γίνει κάποια αλλαγή στο αρχείο του συστήματος και απλά οι διαφορές έγκεινται στο ότι αλλάξαμε κάποια επιλογή εμείς οπότε παραβλέπει το αρχείο και δεν μας ρωτάει. Έτσι με αυτές τις δύο επιλογές γλυτώνουμε κόπο.


    2) Νέος τρόπος χτισίματος
    Στο σχολείο στη μία τάξη του γυμνασίου μας μάθαιναν ένα τρόπο που ήθελε μία ώρα να λύσουμε ένα τύπο άσκησης και στην επόμενη τάξη μας μάθαιναν ένα κανόνα που την έλυνε σε μία σειρά. Έτσι και εδώ έπρεπε πρώτα να δείξουμε τον παλιό χειροκίνητο τρόπο για να εξοικειωθούμε με το πώς δουλεύει το πράγμα, άσχετα αν δεν τον χρησιμοποιεί πια κανείς, και τώρα ήρθε η ώρα να δούμε πώς χρησιμοποιούμε το build.sh που μας κάνει τη ζωή πιο εύκολη.

    Spoiler:

    Πολλές αρχιτεκτονικές από τις οποίες υποστηρίζει το NetBSD δεν έχουν την απαραίτητη δύναμη για να χτίσουν το λειτουργικό. Έτσι είναι απαραίητο να γίνει cross compiling. Το build.sh εισήχθη για να κάνει αυτή την δουλειά πιο εύκολη. Σε χαμηλό επίπεδο δεν κάνει κάτι ιδιαίτερο αλλά τρέχει απλά τους διάφορους στόχους του Makefile όπως δείξαμε ότι μπορούμε να κάνουμε χειροκίνητα. Ο χρήστης όμως απλά τρέχει το build.sh χωρίς να χρειάζεται να ψάξει ποιες τιμές σε ποιες μεταβλητές πρέπει να θέσει.

    Κώδικας:
    # ./build.sh -h
    
    Usage: build.sh [-EhnorUuxy] [-a arch] [-B buildid] [-C cdextras]
                    [-D dest] [-j njob] [-M obj] [-m mach] [-N noisy]
                    [-O obj] [-R release] [-S seed] [-T tools]
                    [-V var=[value]] [-w wrapper] [-X x11src] [-Y extsrcsrc]
                    [-Z var]
                    operation [...]
    
     Build operations (all imply "obj" and "tools"):
        distribution        Run "make distribution" (includes DESTDIR/etc/ files).
    
     Other operations:
        install=idir        Run "make installworld" to `idir' to install all sets
                            except `etc'.  Useful after "distribution" or "release"
        kernel=conf         Build kernel with config file `conf'
    
     Options:
        -D dest        Set DESTDIR to dest.  [Default: destdir.MACHINE]
        -j njob        Run up to njob jobs in parallel; see make(1) -j.
        -N noisy       Set the noisyness (MAKEVERBOSE) level of the build:
                           0   Minimal output ("quiet")
                           1   Describe what is occurring
                           2   Describe what is occurring and echo the actual command
                           3   Ignore the effect of the "@" prefix in make commands
                           4   Trace shell commands using the shell's -x flag
                       [Default: 2]
        -O obj         Set obj root directory to obj; sets a MAKEOBJDIR pattern.
                       Unsets MAKEOBJDIRPREFIX.
        -R release     Set RELEASEDIR to release.  [Default: releasedir]
        -T tools       Set TOOLDIR to tools.  If unset, and TOOLDIR is not set in
                       the environment, nbmake will be (re)built
                       unconditionally.
        -u             Set MKUPDATE=yes; do not run "make cleandir" first.
                       Without this, everything is rebuilt, including the tools.
        -V var=[value] Set variable `var' to `value'.
    Βλέπουμε τις παραμέτρους που δέχεται το script (κάποιες τις παρέλλειψα).
    Κώδικας:
    # ./build.sh -D /usr/work/destdir -j 2 -N 1 -O /usr/work/obj -R /usr/work/release/ -T /usr/work/tools/ -u distribution
    ===> build.sh command:    ./build.sh -D /usr/work/destdir -j 2 -N 0 -O /usr/work/obj -R /usr/work/release -T /usr/work/tools -u distribution
    . . .
    ===> Summary of results:
    	 build.sh command:    ./build.sh -D /usr/work/destdir -j 2 -N 0 -O /usr/work/obj -R /usr/work/release -T /usr/work/tools -u distribution
    	 build.sh started:    Wed Jan 28 18:27:33 EET 2015
    	 NetBSD version:      7.0_BETA
    	 MACHINE:             amd64
    	 MACHINE_ARCH:        x86_64
    	 Build platform:      NetBSD 7.0_BETA amd64
    	 HOST_SH:             /bin/sh
    	 MAKECONF file:       /etc/mk.conf
    	 TOOLDIR path:        /usr/work/tools
    	 DESTDIR path:        /usr/work/destdir
    	 RELEASEDIR path:     /usr/work/release
    	 Created /usr/work/tools/bin/nbmake
    	 Updated makewrapper: /usr/work/tools/bin/nbmake-amd64
    	 Successful make distribution
    	 build.sh ended:      Wed Jan 28 18:32:54 EET 2015
    Η διαδικασία έχει τα ίδια στάδια αλλά δεν χρειάζεται να διαβάσουμε 3-4 αρχεία οδηγούς και να εισάγουμε παραμέτρους στο mk.conf. Επειδή χρησιμοποίησα τους ίδιους καταλόγους με τον χειροκίνητο τρόπο και την πααμετρο -u, το χτίσιμο χρειάστηκε μόλις 5 λεπτά γιατί όλα ήταν έτοιμα από πριν.

    Κώδικας:
    # ./build.sh -D /usr/work/destdir -j 2 -N 1 -O /usr/work/obj -R /usr/work/release/ -T /usr/work/tools/ -u kernel=MINE
    . . .
           link  MINE/netbsd
    NetBSD 7.0_BETA (MINE) #0: Wed Jan 28 18:36:59 EET 2015
       text	   data	    bss	    dec	    hex	filename
    12574305	 627484	 614400	13816189	 d2d17d	netbsd
    ===> Kernels built from MINE:
      /usr/work/obj/sys/arch/amd64/compile/MINE/netbsd
    ===> build.sh ended:      Wed Jan 28 18:37:01 EET 2015
    
    # mv /netbsd /netbsd.τάδε
    # cp /usr/work/obj/sys/arch/amd64/compile/MINE/netbsd /netbsd
    Το χτίσιμο του πυρήνα και η αντιγραφή του στο / αφού κάνουμε backup τον παλιό για παν ενδεχόμενο. Σε αυτό το σημείο κάνουμε επανεκκίνηση το σύστημα για να φορτώσουμε από τον νεό πυρήνα.

    Κώδικας:
    # ./build.sh -D /usr/work/destdir -j 2 -N 1 -O /usr/work/obj -R /usr/work/release/ -T /usr/work/tools/ -u -V INSTALLSETS="base comp man misc modules text" install=/
    ===> build.sh started:    Wed Jan 28 18:38:09 EET 2015
    installsets ===> distrib/sets	(with: INSTALLDIR=/ INSTALLSETS=base comp man misc text)
    postinstall-check ===> .	(with: DESTDIR=/)
       === Post installation checks ===
    . . .
       ================================
    make installworld started at:  Wed Jan 28 18:38:09 EET 2015
    make installworld finished at: Wed Jan 28 18:38:45 EET 2015
    ===> Successful installworld to /
    ===> build.sh ended:      Wed Jan 28 18:38:45 EET 2015
    Η εγκατάσταση του νέου βασικού συστήματος όπως και πριν.

    Κώδικας:
    # postinstall -s /usr/src check
    # postinstall -s /usr/src fix
    # etcupdate -a -l -s /usr/work/destdir
    Η συγχώνευση των αλλαγών στα αρχεία ρυθμίσεων του /etc με τον ίδιο ακριβώς τρόπο όπως και πριν.


    3) Βελτίωση νέου τρόπου

    Το build.sh βελτίωσε την κατάσταση (ειδικά στο cross-compiling) αλλά έχει το κακό ότι κάθε φορά πρέπει να δώσεις ένα κάρο παραμέτρους. Έτσι έπρεπε να γράψουμε ένα άλλο script που να το καλεί με τις ίδιες παραμέτρους κάθε φορά. Για αυτό το λόγο δημιουργήθηκαν κάποια προγράμματα που μας βοηθάνε. Θα δείξω απλά πώς μπορούμε να τα binary πακέτα τους χωρίς να εξηγήσω την διαδικασία γιατί θα το κάνω στην επόμενη ενότητα.
    Κώδικας:
    # export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/7.0_BETA/All"
    # pkg_add sysbuild
    sysbuild-2.7nb1: copying /usr/pkg/share/examples/sysbuild/default.conf to /usr/pkg/etc/sysbuild/default.conf
    Με την μεταβλητή PKG_PATH ορίζουμε τον server από τον οποίο θέλουμε να παίρνουμε πακέτα. Θέλουμε να πάρουμε πακέτα της έκδοσης 7.0_BETA για την αρχιτεκτονική x86_64. Έπειτα εγκαθιστούμε το πακέτο sysbuild. Για να το παραμετροποιήσουμε θα πρέπει να πειράξουμε το αρχείο /usr/pkg/etc/sysbuild/default.conf. Οι αρχικές ρυθμίσεις είναι χτίσιμο σαν χρήστης στον home κατάλογο του χρήστη.
    Κώδικας:
    BUILD_ROOT="/usr/work"
    INCREMENTAL_BUILD="yes"
    Οι παραπάνω δύο αλλαγές αρκούν για να έχουμε το ίδιο αποτέλεσμα με την εκτέλεση του build.sh. Τώρα ένα απλό "sysbuild build" θα τρέξει πρώτα το cvs για να ενημερώσει τον κώδικα και έπειτα θα χτίσει όλο το σύστημα και μάλιστα μπορεί να ρυθμιστεί ο δαίμονας cron ώστε να τρέχει το sysbuild χωρίς καν να ασχολούμαστε εμείς.

    Κώδικας:
    # export PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/7.0_BETA/All"
    # pkg_add sysupgrade
    sysupgrade-1.5nb1: copying /usr/pkg/share/examples/sysupgrade/default.conf to /usr/pkg/etc/sysupgrade.conf
    Το sysupgrade είναι το δεύτερο πρόγραμμα το οποίο αναλαμβάνει να απλοποιήσει την αναβάθμιση του συστήματος. Τρέχοντας απλά "sysupgrade auto", αυτό θα βρει τα απαραίτητα πακέτα, θα τα εγκαταστήσει, θα τρέξει etcupdate και postinstall όλα μόνο του. Το μόνο που χρειάζεται να του πούμε στο αρχείο sysupgrade.conf είναι που μπορεί να βρει τον κατάλογο release. Μπορεί να δουλέψει και με ένα τοπικό κατάλογο που προήλθε από δικό μας χτίσιμο αλλά και με κάποιο ftp server αν δεν θέλουμε να χτίσουμε το πηγαίο κώδικα.

    Αυτός ο τρόπος είναι ο πιο εύκολος για ένα νέο χρήστη γιατί απλά χρειάζεται να πειράξει μόλις δύο μεταβλητές σε δύο αρχεία (και ούτε καν αυτές αν θα χτίσει στο δικό του home κατάλογο).
    Τελευταία επεξεργασία από το μέλος imitheos : 28-01-15 στις 20:37.
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  7. #7
    Εγγραφή
    08-02-2006
    Ηλικία
    37
    Μηνύματα
    206
    Downloads
    1
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    17000/1023
    ISP
    HOL
    Router
    Speedport Entry 2i
    SNR / Attn
    9.1(dB) / 12(dB)
    Path Level
    Fastpath
    Διάβασα το rant κομμάτι και όντως η άποψή μου για τα BSD συμφωνεί με αυτά που έγραψες.
    Μπορείς να γράψεις και 2 λογάκια για το dragonflybsd; Μου αρέσει που καινοτομεί σε διάφορεσ τεχνολογίες αλλά το userbase του πρέπει να είναι αρκετά μικρότερο απο τα υπόλοιπα.

  8. #8
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.196
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Παράθεση Αρχικό μήνυμα από freestyler Εμφάνιση μηνυμάτων
    Διάβασα το rant κομμάτι και όντως η άποψή μου για τα BSD συμφωνεί με αυτά που έγραψες.
    Μπορείς να γράψεις και 2 λογάκια για το dragonflybsd; Μου αρέσει που καινοτομεί σε διάφορεσ τεχνολογίες αλλά το userbase του πρέπει να είναι αρκετά μικρότερο απο τα υπόλοιπα.
    Το dragonfly το έβαλα και το δούλεψα κάποιες μέρες όταν είχε βγει το hammer για να εξοικειωθώ μαζί του και να δω πώς παίζει αλλά πέρα από αυτό δεν γνωρίζω και πολλά ώστε να γράψω κάποιο οδηγό.
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  9. #9
    Εγγραφή
    08-02-2006
    Ηλικία
    37
    Μηνύματα
    206
    Downloads
    1
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    17000/1023
    ISP
    HOL
    Router
    Speedport Entry 2i
    SNR / Attn
    9.1(dB) / 12(dB)
    Path Level
    Fastpath
    Δεν εννοούσα οδηγό, μια παράγραφο με εντυπώσεις, αλλά αφού δεν έχεις ασχοληθεί δεν πειράζει.
    Sorry για το hijack.

  10. #10
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.196
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Μια σημαντική ενότητα που δεν είδαμε πριν είναι η εγκατάσταση των "εξωτερικών" προγραμμάτων που απαρτίζουν ένα λειτουργικό σύστημα. Η εγκατάσταση μπορεί να γίνει με δύο τρόπους που είναι η χρήση binary πακέτων και το χτίσιμο του προγράμματος από τον πηγαίο του κώδικα.

    [Binary πακέτα]
    Spoiler:

    Ένα μικρό παράδειγμα χρήσης binary πακέτων είδαμε στο προηγούμενο μήνυμα χωρίς όμως να αναλύσουμε τα προγράμματα που χρειάζονται και την λειτουργία τους.

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

    Κώδικας:
    # export PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/7.0/All"
    Εμείς τρέχουμε την 64bitη 7.0_BETA οπότε χρησιμοποιούμε τον κατάλογο x86_64 και από αυτόν τον κατάλογο 7.0_BETA ή ακόμη καλύτερα τον κατάλογο 7.0 ο οποίος αυτή τη στιγμή δείχνει στον 7.0_BETA οπότε δεν θα χρειαστεί να πειράξουμε την μεταβλητή όταν βγει επίσημα η έκδοση.

    Τα προγράμματα που χρησιμοποιούμε για αυτή τη δουλειά είναι τα pkg_add, pkg_delete, pkg_info.

    Κώδικας:
    # pkg_add -v vim
    Package vim-share-7.4.430 registered in /var/db/pkg/vim-share-7.4.430
    Package vim-7.4.430 registered in /var/db/pkg/vim-7.4.430
    Η εντολή pkg_add παίρνει ως όρισμα το πακέτο που θέλουμε και αφού το κατεβάσει βλέπει τι εξαρτήσεις έχει και κάνει το ίδιο και για αυτές μέχρι να κατέβουν όλες και να τις εγκαταστήσει. Επίσης μπορούμε να δηλώσουμε και την επιλογή -u ώστε να αναβαθμιστεί το πακέτο αν υπάρχει νεότερη έκδοση.

    Κώδικας:
    # pkg_delete -R vim
    Delete file /usr/pkg/bin/vim
    . . .
    Attempting to remove dependency on package 'vim-share-7.4.430{,nb*}'
    Delete file /usr/pkg/bin/xxd
    . . .
    Αντίστοιχα η εντολή pkg_delete απεγκαθιστά ένα πρόγραμμα μαζί με τις εξαρτήσεις του (όσες δεν χρειάζονται από άλλα πακέτα φυσικά).

    Αυτές οι εντολές είναι ο κλασικός τρόπος εγκατάστασης binary πακέτων. Δυστυχώς όμως έχουν κάμποσα μειονεκτήματα όπως ότι είναι χρονοβόρες μια και πρέπει να κατέβει το κάθε πακέτο για να υπολογιστούν οι εξαρτήσεις, δεν είναι εύκολη η αναβάθμιση υπαρχόντων πακέτων, κτλ. Για αυτό το λόγο υπήρξε η ιδέα να γραφτεί ένα νέο πρόγραμμα του οποίου η λειτουργία να ομοιάζει με το apt-get του Debian στην ευκολία και στις δυνατότητες. Αυτό το πρόγραμμα ονομάστηκε pkgin.

    Κώδικας:
    # export PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/7.0/All"
    # pkg_add -v pkgin
    pkgin-0.6.4nb8: copying /usr/pkg/share/examples/pkgin/repositories.conf.example to /usr/pkg/etc/pkgin/repositories.conf
    ==================================================
    First steps before using pkgin.
    
    . Modify /usr/pkg/etc/pkgin/repositories.conf to suit your platform
    . Initialize the database :
             # pkgin update
    # pkgin update
    Database need to be updated.
    proceed ? [Y/n] y
    . . .
    updating database: 100%
    Το pkgin κατεβάζει μια περιγραφή των χαρακτηριστικών όλων των πακέτων οπότε γνωρίζει τις εξαρτήσεις χωρίς να χρειάζεται να κατεβάσει το αρχείο.

    Κώδικας:
    # pkgin install vim
    calculating dependencies...
    
    nothing to upgrade.
    2 packages to be installed: vim-share-7.4.430 vim-7.4.430 (0B to download, 20M to install)
    
    proceed ? [Y/n] y
    downloading packages...
    installing packages...
    installing vim-share-7.4.430...
    installing vim-7.4.430...
    Σας θυμίζει κάτι ? Το pkgin υλοποιεί πολλές λειτουργίες που έχουν άλλοι διαχειριστές όπως του Debian, Gentoo, κτλ και έτσι μπορείς εύκολα να αναβαθμίσεις πακέτα ή όλο το σύστημα, να δεις τι παρέχει το κάθε πακέτο και τι εξαρτήσεις έχει, να αφαιρέσεις πακέτα που δεν χρησιμοποιούνται πλέον, κτλ.


    [pkgsrc και χτίσιμο]
    Spoiler:

    Με τα binary πακέτα δεν ασχολήθηκα ιδιαίτερα γιατί πιστεύω πως είναι εύκολο θέμα και δεν χρειάζεται ιδιαίτερη ανάλυση. Με το pkgin μπορείς να κάνεις εύκολα τα πάντα χωρίς πρήξιμο. Ας δούμε τώρα το pkgsrc που είναι η υποδομή του NetBSD για χτίσιμο πακέτων από τον πηγαίο κώδικα. Το πρόβλημα που έχουν τα binary πακέτα σε όλα τα λειτουργικά είναι ότι δεν μπορούν να καλύψουν τα πάντα. Η μανίσια επιλογή του pkgsrc για κατάλογο εγκατάστασης είναι ο κατάλογος /usr/pkg επομένως όλα τα πακέτα χτίζονται με αυτό το prefix. Τι γίνεται αν εσύ θέλεις να τα έχεις αλλού ? Τι γίνεται αν ένα πρόγραμμα χτίζεται χωρίς την Χ βιβλιοθήκη ενώ εσύ την χρειάζεσαι ?

    Για αυτό το λόγο μπορεί ο χρήστης να χτίζει μόνος του τα πακέτα όπως γίνεται στο Gentoo και σε άλλες source διανομές. Το πρώτο μέλημά μας είναι να κατεβάσουμε μία snapshot της pkgsrc. Αυτό το βήμα θα μπορούσαμε να το κάνουμε και μέσα από τον εγκαταστάτη αλλά το άφησα επίτηδες να το κάνουμε χειροκίνητα. Η pkgsrc παρέχει δύο branches, το current που έχει τις πιο νέες εκδόσεις των προγραμμάτων (κάτι σαν το ~arch του gentoo ή το testing του debian) και το stable branch στο οποίο μπαίνουν εκδόσεις που έχουν δοκιμαστεί και έχουν αποδειχθεί ότι είναι σταθερές (στο σημείο που μπορεί να δοκιμαστούν) και το οποίο αυτή την στιγμή ονομάζεται 2014Q4. Εγώ σαν παράδειγμα θα κατεβάσω την -current έκδοση αλλά δεν αλλάζει κάτι στην διαδικασία αν επιλέξει κάποιος την stable.

    Κώδικας:
    # cd /usr/INSTALL
    # ftp ftp://ftp3.de.netbsd.org/pub/NetBSD/pkgsrc/current/pkgsrc.tar.bz2
    Από την σελίδα με τους mirrors που είδαμε σε προηγούμενο μήνυμα, επέλεξα τον γερμανικό server ως πιο κοντινό και κατεβάζω την τελευταία snapshot. Όπως είπαμε και στην περίπτωση του πηγαίου κώδικα, αυτό το κάνουμε επειδή το CVS είναι αργό οπότε μας συμφέρει να κατεβάσουμε αρχικά ένα συμπιεσμένο αρχείο και μετά απλά να το ανανεώσουμε.

    Κώδικας:
    # cd /usr
    # tar jxvf /usr/INSTALL/pkgsrc.tar.bz2
    # cd pkgsrc
    # cvs -z3 update -dP
    Μπαίνουμε στον κατάλογο /usr και αποσυμπιέζουμε με το πρόγραμμα tar το συμπιεσμένο αρχείο και μπαίνουμε στον κατάλογο pkgsrc. Μέχρι να ολοκληρωθεί η μετατροπή του repository σε git, δυστυχώς θα πέσουμε στην ανάγκη του cvs . Τρέχουμε λοιπόν την λειτουργία update του cvs ώστε να πάρουμε την τελευταία έκδοση. Η παράμετρος -z3 ζητάει από τον server να συμπιέσει τα δεδομένα που μας στέλνει ώστε να μην κάνει 4 χρόνια να τα στείλει. Πριν να πάμε να χτίσουμε πακέτα θα πάμε πρώτα να δηλώσουμε κάποιες χρήσιμες μεταβλητές στο αρχείο mk.conf όπως κάναμε και στην περίπτωση του βασικού συστήματος.

    Κώδικας:
    .ifdef BSD_PKG_MK
    DISTDIR=/usr/cache/distfiles
    LOCALBASE=/usr/pkg
    PACKAGES=/usr/cache/packages
    WRKOBJDIR=/usr/work/pkgsrc
    
    #ACCEPTABLES_LICENSES+=
    DEPENDS_TARGET=package-install
    MAKE_JOBS=2
    PKGSRC_KEEP_BIN_PKGS=yes
    PKG_DEFAULT_OPTIONS= -pulseaudio
    SMART_MESSAGES=yes
    UPDATE_TARGET=package
    X11_TYPE=modular
    .else
    BSDOBJDIR=/usr/work/obj
    DESTDIR=/usr/work/destdir
    MAKEVERBOSE=1
    MKOBJDIRS=yes
    MKUPDATE=yes
    RELEASEDIR=/usr/work/release
    TOOLDIR=/usr/work/tools
    .endif
    Φυσικά υπάρχουν πάρα πολλές μεταβλητές που μπορούμε να δηλώσουμε. Εγώ θα εξηγήσω κάποιες βασικές που κατά τη γνώμη μου βελτιώνουν την διαδικασία. Πρώτα ας δούμε τι είναι αυτά τα .if που έβαλα. Βλέπουμε πως οι μεταβλητές που είχαμε δηλώσει στην ενότητα του βασικού συστήματος υπάρχουν αυτούσιες στο κομάτι του else. Όταν χτίζουμε οποιοδήποτε πακέτο από την pkgsrc, δηλώνεται η μεταβλητή BSD_PKG_MK. Έτσι μας δίνεται η δυνατότητα να ξεχωρίσουμε το κομμάτι της pkgsrc από αυτό του βασικού συστήματος και να δηλώσουμε διαφορετικές επιλογές στο καθένα (αν και οι περισσότερες μεταβλητές έχουν διαφορετικό όνομα οπότε δεν υπάρχει μπέρδεμα). Ας εξηγήσουμε τώρα τις μεταβλητές στο κομμάτι της pkgsrc.

    * Η LOCALBASE δηλώνει τον prefix κατάλογο στον οποίο θα εγκαθίστανται τα αρχεία και πρέπει να δηλωθεί πριν εγκαταστήσουμε οτιδήποτε γιατί αλλιώς δεν θα μπορεί η pkgsrc να βρει τα αρχεία. Μπορούμε να αλλάξουμε την αρχική επιλογή του /usr/pkg αλλά έτσι δεν θα μπορούμε να εγκαταστήσουμε binary πακέτα από κάποιον server (μόνο αυτά που έχουμε χτίσει εμείς)
    * Η WRKOBJDIR δηλώνει τον κατάλογο στον οποίον θα αποσυμπιέζεται ο πηγαίος κώδικας και γενικά όλα τα προσωρινά αρχεία που χρειάζονται μέχρι να τελειώσει το χτίσιμο. Για να μην μολύνουμε τον κατάλογο της pkgsrc μπορούμε να επιλέξουμε ένα άλλο κατάλογο.
    * Οι DISTDIR και PACKAGES δηλώνουν τον κατάλογο στον οποίον θα αποθηκεύονται τα αρχεία του πηγαίου κώδικα κάθε προγράμματος καθώς και τα παραγόμενα binary πακέτα. Κανονικά αποθηκεύονται στους αντίστοιχους καταλόγους μέσα στην pkgsrc αλλά μας δίνεται η δυνατότητα να ορίσουμε κάποια άλλη θέση ώστε να μην μολύνεται ο κατάλογος της pkgsrc. Επίσης μας είναι χρήσιμο και σε άλλα σενάρια όπως πχ να χρησιμοποιούμε ένα πολύ γρήγορο αλλά μικρό ssd για το σύστημά μας οπότε να μην φτάνει ο χώρος για τόσο μεγάλα αρχεία όπως αυτά που υπάρχουν στους δύο αυτούς καταλόγους. Έτσι μπορούμε να τα ορίσουμε σε ένα άλλο κατάλογο που να υπάρχει σε κάποιο μεγάλο μηχανικό δίσκο.
    * Η ACCEPTABLE_LICENSES ορίζει ποιες άδειες λογισμικού είμαστε διατεθειμένοι να δεχτούμε. Η αρχική επιλογή δέχεται μόνο τις ελεύθερες άδειες οπότε αν θέλουμε να χτίσουμε ένα πρόγραμμα που η άδειά του δεν παρέχει και τόσες ελευθερίες θα πρέπει να την προσθέσουμε στην μεταβλητή.
    * Η MAKE_JOBS ορίζει πόσες εργασίες θα εκτελεί ταυτόχρονα το make και συνήθως ορίζεται στον αριθμό των επεξεργαστών που έχει το σύστημά μας. Παλαιότερα πολλά προγράμματα δεν είχαν σωστά γραμμένα Makefiles με συνέπεια να αποτυγχάνει το χτίσιμό τους όταν εκτελούνταν περισσότερες της μίας εργασίες ταυτόχρονα αλλά πλέον είναι πάρα πολύ σπάνιο αυτό το φαινόμενο και μπορούμε να της θέσουμε άφοβα τιμή.
    * Η X11_TYPE παίρνει τιμή native ή modular και δηλώνει ποιον τύπο X server θέλουμε να χρησιμοποιήσουμε. Θέτοντας τιμή modular δηλώνουμε ότι θέλουμε να χρησιμοποιήσουμε την νεότερη έκδοση της pkgsrc που απαρτίζεται από πολλά μικρά πακέτα σε αντίθεση με το μεγάλο ενιαίο tree.
    * Η PKG_DEFAULT_OPTIONS ορίζει ποιες σημαίες θέλουμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε για όλα τα πακέτα και είναι κάτι αντίστοιχο των USE flags του gentoo. Μετά έχουμε την δυνατότητα να αλλάζουμε επιλογή για μεμονωμένα προγράμματα.
    * Ένας make στόχος που συνήθως τρέχουμε είναι ο install ο οποίος εγκαθιστά το πρόγραμμα χωρίς όμως να φτιάξει κάποιο πακέτο. Υπάρχει μεν ο στόχος package που λέει στο σύστημα αφού εγκαταστήσει τα αρχεία να τα πακετάρει κιόλας αλλά από συνήθεια πολύς κόσμος τρέχει τον install στόχο. Η επιλογή PKGSRC_KEEP_BIN_PKGS λοιπόν αλλάζει αυτή την λειτουργία ώστε όταν τρέχουμε install να είναι σαν να τρέξαμε τον στόχο package και να δημιουργείται binary πακέτο.
    * Ακόμη και να μην το ξεχάσουμε και να γράψουμε make package, αυτό αφορά μόνο το πρόγραμμα που επιλέξαμε και δημιουργείται πακέτο μόνο για αυτό και όχι για τις εξαρτήσεις του γιατί σε αυτές εκτελείται ο στόχος install. Με την μεταβλητή DEPENDS_TARGET λέμε ότι σε όλες τις εξαρτήσεις αντί να τρέχεις τον στόχο install θα τρέχεις τον package-install ο οποίος δημιουργεί binary πακέτο.
    * Επίσης όταν επιχειρήσουμε να αναβαθμίσουμε ένα πρόγραμμα και τρέξουμε τον στόχο update, πάλι δεν δημιουργείται πακέτο οπότε χρησιμοποιούμε την μεταβλητή UPDATE_TARGET για να πούμε ότι θέλουμε να δημιουργείται binary πακέτο.

    Αυτές οι μεταβλητές έχουν ως συνέπεια να δημιουργείται binary πακέτο σε όλες τις περιπτώσεις. Έτσι όταν έχουμε πολλούς υπολογιστές, μπορούμε να χτίζουμε τα προγράμματα στο πιο δυνατό υπολογιστή με ό,τι επιλογές θέλουμε και έπειτα να αντιγράφουμε τα παραγόμενα binary πακέτα στους άλλους υπολογιστές και να τα χρησιμοποιούμε για να αναβαθμίσουμε εύκολα και γρήγορα και εκείνους.

    Η διαδικασία του χτισίματος περιλαμβάνει πολλά στάδια και άρα και πολλούς στόχους. Μπορούμε για παράδειγμα να τρέξουμε τον στόχο fetch ο οποίος απλά θα κατεβάσει τα αρχεία του πηγαίου κώδικα, τον στόχο configure ο οποίος θα φέρει τα αρχεία, θα τα αποσυμπιέσει και θα τρέξει το ./configure ώστε να γίνει η ρύθμιση, κτλ. Συνήθως όμως τρέχουμε απλά make install ώστε να γίνει όλη η διαδικασία με την μία. Εγώ θα περιγράψω μόνο κάποιους "ειδικούς" στόχους όπως οι fetch-list, show-depends, show-options.

    Είπαμε ότι το πρόγραμμα pcictl μας εμφανίζει πληροφορίες για τις pci συσκευές μας. Κακά τα ψέμματα όμως δεν είναι και τόσο βολικό όσο το lspci. Ας πάμε λοιπόν να εγκαταστήσουμε το πρόγραμμα pciutils για να περιγράψουμε τους διάφορους στόχους που μπορούμε να εκτελέσουμε.

    Κώδικας:
    # cd /usr/pkgsrc/sysutils/pciutils
    # make fetch-list
    #!/bin/sh
    #
    # This is an auto-generated script, the result of running
    # `/usr/bin/make fetch-list' in directory "/usr/npkgsrc/sysutils/pciutils"
    # on host "nbsd-test.gr" on "Sat Jan 31 22:26:38 EET 2015".
    #
    
    #
    # Need additional files for gmake-4.1nb1 (devel/gmake)...
    
    # Fetch make-4.1.tar.bz2 (1327342 bytes):
    #
    unsorted_sites="http://ftp.gnu.org/pub/gnu/make/"
    sites=" `echo $unsorted_sites | /usr/bin/awk -v seed=$$ 'BEGIN { srand(seed); ORS = \" \" } {			 n = split($0, site);					 for (i = n; i > 0; i--) {				 ir = int(rand() * i + 1);			 t = site[i]; site[i] = site[ir]; site[ir] = t;	 print site[i]; } }'`"
    /bin/mkdir -p /usr/cache/distfiles/
    cd /usr/cache/distfiles/ && { [ -f make-4.1.tar.bz2 -o -f make-4.1.tar.bz2 ] ||
    for site in $sites; do
    	/usr/bin/ftp      -o make-4.1.tar.bz2 "${site}make-4.1.tar.bz2"  && break ||
    	echo make-4.1.tar.bz2 not fetched
    done; }
    Η fetch-list με είχε σώσει τις παλιές εποχές που είχαμε 384K ADSL ή ακόμη παλαιότερα με το 64K ISDN / 56K PSTN. Η συνήθης μέθοδος εκτέλεσης είναι "make fetch-list > my-fetch.sh". Σου παράγει ένα shell script το οποίο κατεβάζει τον πηγαίο κώδικα, patches, κτλ για όλες τις εξαρτήσεις του προγράμματος που του λες. Έπαιρνα το shell script, πήγαινα στο πανεπιστήμιο και μπορούσα να κατεβάσω τα αρχεία σε οποιοδήποτε *nix μηχάνημα. Ο κώδικας του script είναι επίτηδες λίγο άθλιος γιατί είναι φτιαγμένος να παίζει και στο πιο παλιό bourne shell.

    Κώδικας:
    # cd /usr/pkgsrc/sysutils/pciutils
    # make show-depends
    Σε πολλούς οδηγούς αναφέρεται ο στόχος "show-depends" και προτείνεται για να βλέπουμε τις εξαρτήσεις των προγραμμάτων. Εμένα δεν μου αρέσει γιατί μπερδεύει τον χρήστη. Ας δούμε την πολύ απλή περίπτωση του pciutils στην οποία δεν παίρνουμε κανένα αποτέλεσμα οπότε δεν πρέπει να έχει καμμία εξάρτηση. Αν πάμε όμως να τρέξουμε "make install" θα δούμε ότι θα πάει να κατεβάσει το gmake και άλλα αρχεία (το βλέπουμε και παραπάνω στο αποτέλεσμα της fetch-list) ενώ υποτίθεται ότι δεν υπάρχει καμμία εξάρτηση. Αυτό γίνεται γιατί η show-depends εμφανίζει μόνο τις runtime εξαρτήσεις δηλαδή τις βιβλιοθήκες που χρειάζεται το πρόγραμμα για να τρέξει και που όντως δεν υπάρχουν.

    Κώδικας:
    # make show-depends
    # make show-depends VARNAME=BUILD_DEPENDS
    # make show-depends VARNAME=TOOL_DEPENDS
    gmake>=3.81:../../devel/gmake
    pkg-config>=0.25:../../devel/pkg-config
    Για να δούμε όλες τις εξαρτήσεις πρέπει να τρέξουμε τρεις φορές τον στόχο. Βλέπουμε ότι το pciutils δεν έχει ούτε build εξαρτήσεις αλλά χρειάζεται δύο εργαλεία που είναι το gmake και το pkg-config.

    Spoiler:

    Αυτό φαίνεται καλύτερα σε κάποιο μεγάλο project όπως είναι το mplayer. Όπως βλέπουμε χρειάζεται και πάλι το gmake ως εργαλείο γιατί το Makefile του δεν είναι συμβατό με το bmake, χρειάζεται κάποια *proto πακέτα με headers για να χτιστεί και τέλος χρειάζεται ένα κάρο βιβλιοθήκες για να μπορεί να τρέξει.
    Κώδικας:
    # cd /usr/npkgsrc/multimedia/mplayer
    # make show-depends VARNAME=TOOL_DEPENDS
    gmake>=3.81:../../devel/gmake
    pkg-config>=0.25:../../devel/pkg-config
    
    # make show-depends VARNAME=BUILD_DEPENDS
    yasm-[0-9]*:../../devel/yasm
    dri2proto>=2.1:../../x11/dri2proto
    glproto>=1.4.11:../../x11/glproto
    damageproto>=1.1.0:../../x11/damageproto
    xproto>=7.0.9:../../x11/xproto
    fixesproto>=4.0.0:../../x11/fixesproto
    xextproto>=7.0.99.1:../../x11/xextproto
    inputproto>=1.4:../../x11/inputproto
    kbproto>=1.0.2:../../x11/kbproto
    xcb-proto>=1.4:../../x11/xcb-proto
    xf86vidmodeproto>=2.3:../../x11/xf86vidmodeproto
    xf86driproto>=2.0.3:../../x11/xf86driproto
    libpciaccess>=0.10.4:../../sysutils/libpciaccess
    renderproto>=0.9.3nb1:../../x11/renderproto
    randrproto>=1.4:../../x11/randrproto
    scrnsaverproto>=1.1.0:../../x11/scrnsaverproto
    xineramaproto>=1.1.1:../../x11/xineramaproto
    videoproto>=2.2.1:../../x11/videoproto
    xf86dgaproto>=2.1:../../x11/xf86dgaproto
    
    # make show-depends VARNAME=DEPENDS
    mplayer-share>=1.1.1:../../multimedia/mplayer-share
    cdparanoia>=3.0.9.8nb5:../../audio/cdparanoia
    libdv>=0.104nb2:../../multimedia/libdv
    esound>=0.2.41nb1:../../audio/esound
    faad2>=2.6.1:../../audio/faad2
    giflib>=5.1.0:../../graphics/giflib
    jpeg>=9:../../graphics/jpeg
    libmad>=0.15.1bnb1:../../audio/libmad
    nas>=1.7bnb2:../../audio/nas
    png>=1.6.0nb1:../../graphics/png
    SDL>=1.2.10:../../devel/SDL
    MesaLib>=7.11.2:../../graphics/MesaLib
    libX11>=1.1:../../x11/libX11
    libXxf86vm>=1.1.0:../../x11/libXxf86vm
    libXt>=1.0.0:../../x11/libXt
    libtheora>=1.0alpha3nb1:../../multimedia/libtheora
    x264-devel>=20140303:../../multimedia/x264-devel
    xvidcore>=1.1.0nb1:../../multimedia/xvidcore
    libXScrnSaver>=1.1.2:../../x11/libXScrnSaver
    libXinerama>=1.0.1:../../x11/libXinerama
    libXv>=1.0.1:../../x11/libXv
    libXvMC>=1.0.2:../../x11/libXvMC
    libXxf86dga>=1.0.1:../../x11/libXxf86dga
    fontconfig>=2.10.93nb2:../../fonts/fontconfig
    freetype2>=2.4.11:../../graphics/freetype2


    Κώδικας:
    # make show-depends-dirs
    devel/gmake
    devel/pkg-config
    pkgtools/digest
    # make show-depends-pkgpaths
    devel/gmake
    devel/pkg-config
    pkgtools/digest
    Ένας τρόπος να δούμε όλες τις (άμεσες) εξαρτήσεις ανεξαρτήτως τύπου είναι να χρησιμοποιήσουμε τους εσωτερικούς στόχους show-depends-dirs και show-depends-pkgpaths. Ένας άλλος τρόπος είναι το παρακάτω patch.

    Κώδικας:
    # diff -ur mk/pkgformat/pkg/depends.mk.orig mk/pkgformat/pkg/depends.mk
    --- mk/pkgformat/pkg/depends.mk    	2015-01-31 22:38:57.000000000 +0200
    +++ mk/pkgformat/pkg/depends.mk 	2015-01-31 22:33:00.000000000 +0200
    @@ -53,7 +53,10 @@
     	@case ${VARNAME:Q}"" in						\
     	BUILD_DEPENDS)	${_REDUCE_DEPENDS_CMD} ${BUILD_DEPENDS:Q} ;;	\
     	TOOL_DEPENDS)	${_HOST_REDUCE_DEPENDS_CMD} ${TOOL_DEPENDS:Q} ;;\
    -	DEPENDS|*)	${_REDUCE_DEPENDS_CMD} ${DEPENDS:Q} ;;		\
    +	DEPENDS)	${_REDUCE_DEPENDS_CMD} ${DEPENDS:Q} ;;		\
    +	*)		${_REDUCE_DEPENDS_CMD} ${BUILD_DEPENDS:Q} ; 	\
    +			${_HOST_REDUCE_DEPENDS_CMD} ${TOOL_DEPENDS:Q};	\
    +			${_REDUCE_DEPENDS_CMD} ${DEPENDS:Q} ;;		\
     	esac
     
     _LIST_DEPENDS_CMD=	\
    Για όποιον δεν έχει πρόβλημα να πειράξει τον κώδικα, το παραπάνω patch διαχωρίζει το default από το DEPENDS και έτσι αν γράψουμε σκέτο show-depends χωρίς να δηλώσουμε ποιο τύπο θέλουμε, να μας εμφανίζει και τους τρεις τύπους εξαρτήσεων. Έτσι παίρνουμε όλα τα αποτελέσματα αλλά δεν είναι δόκιμη βελτίωση γιατί εμφανίζει μόνο τις άμεσες εξαρτήσεις. Δεν μας εμφανίζει για παράδειγμα ότι το pkg-config με τη σειρά του χρειάζεται το libtool-base.

    Προ αμνημονεύτων χρόνων που με τσάτισε ο show-depends έκατσα και το έψαξα λίγο και βρήκα τους δύο αυτούς τρόπους που αναφέρω. Έμαθα λοιπόν αυτό το τρόπο χειρισμού και μετά δεν ξανα-ασχολήθηκα οπότε ενδέχεται να έχουν αλλάξει τα πράγματα και να υπάρχει κάποιος δόκιμος τρόπος που να εμφανίζει τα πάντα όμορφα και σωστά.

    Ας δούμε και τον τελευταίο στόχο που μας δείχνει τις διάφορες επιλογές που μπορούμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε από τα προγράμματά μας όπως οι USE σημαίες στο Gentoo.

    Κώδικας:
    # make show-options
    This package does not use the options framework.
    
    # make show-depends-options
    ===> Options for pkgtools/digest
    This package does not use the options framework.
    ===> Options for devel/gmake
    Any of the following general options may be selected:
    	nls	 Use native language support.
    
    These options are enabled by default:
    	nls
    
    These options are currently enabled:
    	nls
    
    You can select which build options to use by setting PKG_DEFAULT_OPTIONS
    or PKG_OPTIONS.gmake.
    ===> Options for devel/libtool-base
    This package does not use the options framework.
    ===> Options for devel/pkg-config
    This package does not use the options framework.
    Ο στόχος show-options μας εμφανίζει όλες τι επιλογές που υποστηρίζει το πρόγραμμα που θέλουμε που στην παρούσα περίπτωση είναι καμμία. Ο στόχος show-depends-options κάνει το ίδιο για τις εξαρτήσεις. Βλέπουμε πως αυτή η επιλογή λειτουργεί σωστά και παίρνει σβάρνα όλες τις εξαρτήσεις αντί για μόνο τις άμεσες του προγράμματός μας γιατί εμφανίζει και το libtool-base. Το μόνο πρόγραμμα που υποστηρίζει επιλογές είναι το gmake το οποίο μας δίνει τη δυνατότητα γλωσσικής υποστήριξης. Η μανίσια επιλογή είναι να υποστηρίζεται η γλωσσική υποστήριξη και αν θέλουμε μπορούμε να την απενεργοποιήσουμε. Όπως μας λέει και το ενημερωτικό μήνυμα, μπορούμε να το κάνουμε είτε μέσω της μεταβλητής PKG_DEFAULT_OPTIONS που περιγράψαμε νωρίτερα και που θα απενεργοποιήσει την επιλογή για όλα τα προγράμματα ή μέσω της μεταβλητής PKG_OPTIONS.gmake που θα το κάνει μόνο για το gmake.

    Ας προσπαθήσουμε να τρέξουμε τον στόχο fetch για να φέρουμε τον πηγαίο κώδικα του pciutils ώστε να δούμε ένα μήνυμα που θα μας βγει.
    Κώδικας:
    # make fetch
    ===> _pkgformat-check-vulnerable [pciutils-3.3.0] ===> Skipping vulnerability checks.
    WARNING: No /var/db/pkg/pkg-vulnerabilities file found.
    WARNING: To fix run: '/usr/sbin/pkg_admin -K /var/db/pkg fetch-pkg-vulnerabilities'
    # pkg_admin fetch-pkg-vulnerabilities
    # echo "fetch_pkg_vulnerabilities=YES" >> /etc/daily.conf
    Μας εμφανίζει ένα μήνυμα ότι δεν μπορεί να βρει αρχείο με αδυναμίες προγραμμάτων. Τρέχουμε λοιπόν το πρόγραμμα pkg_admin για να φέρουμε το αρχείο και επίσης λέμε ότι θέλουμε να τρέχει από τον δαίμονα cron κάθε ημέρα ώστε να ανανεώνεται. Το αρχείο περιέχει όλες τις γνωστές αδυναμίες προγραμμάτων και αν πάμε να γκαταστήσουμε ένα πρόγραμμα με κάποια αδυναμία η pkgsrc δεν θα μας αφήσει.

    Κώδικας:
    # make install
    => Fetching pciutils-3.3.0.tar.gz
    ===> depends-message [pciutils-3.3.0] ===> Installing dependencies for pciutils-3.3.0
    => Tool dependency gmake>=3.81: NOT found
    => Verifying package-install for ../../devel/gmake
    => Fetching make-4.1.tar.bz2
    => Checksum SHA1 OK for make-4.1.tar.bz2
    => Checksum RMD160 OK for make-4.1.tar.bz2
    ===> depends-message [gmake-4.1nb1 pciutils-3.3.0] ===> Installing dependencies for gmake-4.1nb1
    ===> tools-message [gmake-4.1nb1 pciutils-3.3.0] ===> Overriding tools for gmake-4.1nb1
    ===> extract-message [gmake-4.1nb1 pciutils-3.3.0] ===> Extracting for gmake-4.1nb1
    ===> patch-message [gmake-4.1nb1 pciutils-3.3.0] ===> Patching for gmake-4.1nb1
    => Applying pkgsrc patches for gmake-4.1nb1
    ===> wrapper-message [gmake-4.1nb1 pciutils-3.3.0] ===> Creating toolchain wrappers for gmake-4.1nb1
    ===> configure-message [gmake-4.1nb1 pciutils-3.3.0] ===> Configuring for gmake-4.1nb1
    ===> build-message [gmake-4.1nb1 pciutils-3.3.0] ===> Building for gmake-4.1nb1
    => Unwrapping files-to-be-installed.
    ===> install-message [gmake-4.1nb1 pciutils-3.3.0] ===> Installing for gmake-4.1nb1
    => Creating binary package /usr/work/pkgsrc/devel/gmake/work/.packages/gmake-4.1nb1.tgz
    ===> package-message [gmake-4.1nb1 pciutils-3.3.0] ===> Building binary package for gmake-4.1nb1
    => Creating binary package /usr/cache/packages/All/gmake-4.1nb1.tgz
    ===> su-real-package-install [gmake-4.1nb1 pciutils-3.3.0] ===> Install binary package of gmake-4.1nb1
    => Returning to build of pciutils-3.3.0
    Εδώ βλέπουμε χωρίς την έξοδο από τις εντολές τα διάφορα στάδια του χτισίματος. Κατεβάζει τον πηγαίο κώδικα αλλά βλέπει ότι λείπει το gmake οπότε σταματάει και πάει να χτίσει εκείνο πρώτα. Βλέπουμε ότι ενώ έτρεξα τον στόχο install, ο στόχος που εκτελεί στο gmake είναι ο package-install λόγω της μεταβλητής DEPENDS_TARGET που ορίσαμε. Εκτελούνται ένας-ένας όλοι οι στόχοι όπως πχ fetch => extract => patch => configure => build => install => make binary package. Όταν τελειώσουν επιτυχώς όλες οι εξαρτήσεις, γίνεται και το χτίσιμο του προγράμματος που θέλουμε.

    Κώδικας:
    # ls /usr/cache/packages
    All       devel     pkgtools  sysutils
    # ls /usr/cache/packages/All
    digest-20121220.tgz       libtool-base-2.4.2nb9.tgz pkg-config-0.28.tgz
    gmake-4.1nb1.tgz          pciutils-3.3.0.tgz
    Όπως βλέπουμε, έχει χτιστεί ένα όμορφο πακέτο για το πρόγραμμά μας και όλες τις εξαρτήσεις του οπότε μπορούμε να αντιγράψουμε τον κατάλογο και να τον χρησιμοποιήσουμε για νέα εγκατάσταση ή αναβάθμιση σε κάποιο άλλο υπολογιστή χωρίς να ξανακάνουμε όλη τη χρονοβόρα διαδικασία του χτισίματος.

    Ένας άλλος στόχος που μπορούμε να εκτελέσουμε είναι ο clean για να σβηστεί ο πηγαίος κώδικας και λοιπά προσωρινά αρχεία. Λόγω της μεταβλητής WRKOBJDIR που ορίσαμε, δεν μολύνουμε τον κατάλογο της pkgsrc μας οπότε δεν έγινε και κάτι και να μην καθαρίσουμε αλλά μπορεί πχ να χρειαζόμαστε χώρο στο δίσκο

    Κώδικας:
    # make clean
    ===> su-do-clean [pciutils-3.3.0] ===> Cleaning for pciutils-3.3.0
    # make clean-depends
    ===> su-do-clean [digest-20121220] ===> Cleaning for digest-20121220
    ===> su-do-clean [gmake-4.1.nb1] ===> Cleaning for gmaek-4.1.nb1
    ===> su-do-clean [libtool-base-2.4.2nb9] ===> Cleaning for libtool-base-2.4.2nb9
    ===> su-do-clean [pkg-config-0.28] ===> Cleaning for pkg-config-0.28
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  11. #11
    Εγγραφή
    28-02-2006
    Μηνύματα
    1.150
    Downloads
    0
    Uploads
    0
    ISP
    Cosmote
    DSLAM
    ΟΤΕ - ΓΑΛΑΤΣΙ
    Να δώσω και εγώ τα συγχαρητήρια μου στον imitheo, για τo εξαιρετικό post του.

    Η πρώτη μου επαφή με το NetBSD ήταν το 2004, με την έκδοση 1.6.2 τότε, όταν ήμουν ακόμα προπτυχιακός φοιτητής.

    Αν και αυτή τη στιγμή δεν το έχω εγκατεστημένο κάπου, παρακολουθώ την εξέλιξή του και το χρησιμοποιώ κατά περιόδους, είτε στο κυρίως pc μου είτε στο raspberry pi.

    Πάντως, πιστεύω ότι η έκδοση 7.0 έχει βαλτώσει αρκετά, αφού την περιμένουμε από το καλοκαίρι, με προβλήματα που αφορούν ουσιαστικά του porting του drm για intel & amd κάρτες γραφικών. Ελπίζω τα προβλήματα αυτά να λυθούν σύντομα, για να του ξαναδώσω μια ευκαιρία στο desktop. Την αξίζει άλλωστε!
    NetBSD Rocks!
    http://www.netbsd.org

  12. #12
    Εγγραφή
    28-02-2006
    Μηνύματα
    1.150
    Downloads
    0
    Uploads
    0
    ISP
    Cosmote
    DSLAM
    ΟΤΕ - ΓΑΛΑΤΣΙ
    Για να μην ανοίγω άλλο νήμα, ενημερώνω ότι προς τα τέλη Σεπτέμβρη/αρχές Οκτώβρη κυκλοφόρησε επιτέλους η έκδοση 7 του NetBSD.

    Για όποιον θέλει να ρίξει μια ματιά, το σχετικό announcement είναι εδώ:

    http://www.netbsd.org/releases/formal-7/NetBSD-7.0.html

    Μόλις βρω λίγο χρόνο, θα την περάσω στο raspberry pi μου (που τρέχει μια beta από το Μάιο).
    NetBSD Rocks!
    http://www.netbsd.org

  13. #13
    Εγγραφή
    27-07-2013
    Μηνύματα
    23
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    15574/1022
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΝΕΑΠΟΛΗ
    Router
    Speedport Entry 2i
    SNR / Attn
    8/13(dB) / 19/9(dB)
    Ένα και μισό χρόνο δούλευα freedsd.Τέλειο. Είχα βάλει όλα τα desktop gnome,kde,Xfce.(Επίσης δούλευα Linux 7 διανομές και είχα βάλει τα πάντα και
    τον εκτυπωτη LaserJet Pro MFP M125nw.)΄Hxo,video,κλπ.
    Το μόνο πρόβλημα ήταν με τον εκτυπωτή.Mου φαίνεται κατάφερα να βλέπει την πόρτα usb και μετά τι cup (cup δικαιώματα file sudoers), τι spooler,δοκίμασα παπάδες, τι φίλτρα κλπ
    Εκτυπωτής :LaserJet Pro MFP M125nw

    Κάπου κάνω λάθος

    Ερώτηση:Μήπως μπορεί να βοηθήσει κανένας να εκτυπώσω,έστω και μόνο text από terminal.Text είναι αρκετό.
    ΄Οπως στο dos (cmd) path όνομα > prn δεν θυμάμαι καλά ή print path name file σε εκτυπωτή με παράλληλη σύνδεση.

    Help.
    Thanks.

  14. #14
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.196
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Παράθεση Αρχικό μήνυμα από gtc Εμφάνιση μηνυμάτων
    Το μόνο πρόβλημα ήταν με τον εκτυπωτή.Mου φαίνεται κατάφερα να βλέπει την πόρτα usb και μετά τι cup (cup δικαιώματα file sudoers), τι spooler,δοκίμασα παπάδες, τι φίλτρα κλπ
    Εκτυπωτής :LaserJet Pro MFP M125nw
    Συνήθως σε αυτούς τους εκτυπωτές όλα τα κάνει ο επεξεργαστής οπότε θέλεις "ειδικό" οδηγό για να παίξουν σωστά σε αντίθεση με ένα κανονικό εκτυπωτή που δεν χρειάζεσαι τίποτα. Και με αυτόν τον οδηγό, πολλές φορές έχεις προβλήματα με τέτοιους εκτυπωτές. Παρόλα αυτά όμως βλέπω στην σελίδα του hplip ότι υποστηρίζεται πλήρως από την έκδοση 3.14.3. Το FreeBSD από ό,τι βλέπω στα ports παρέχει την 3.16.11 οπότε λογικά θα πρέπει να παίζει.

    Έχεις εγκατεστημένα τα print/cups, print/hplip, print/hplip-plugin ?
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  15. #15
    Εγγραφή
    27-07-2013
    Μηνύματα
    23
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    15574/1022
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΝΕΑΠΟΛΗ
    Router
    Speedport Entry 2i
    SNR / Attn
    8/13(dB) / 19/9(dB)
    Ναι.Thanks πολύ χρήσιμη η βοήθεια σου.

Παρόμοια Θέματα

  1. Οδηγός Freetz για Fritz!box
    Από MarkoDiMarko στο φόρουμ AVM ADSL modems και routers
    Μηνύματα: 82
    Τελευταίο Μήνυμα: 31-05-20, 17:23
  2. Οδηγος: Κεραιες τηλεοπτικού σήματος - Εγκατάσταση
    Από graphist83 στο φόρουμ DVB-T, Tηλεοράσεις, IPTV
    Μηνύματα: 74
    Τελευταίο Μήνυμα: 26-03-20, 22:05
  3. Μηνύματα: 2
    Τελευταίο Μήνυμα: 18-04-14, 02:43

Tags για αυτό το Θέμα

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας