Headless εγκατάσταση του NetBSD σε Raspberry Pi
Πρώτη δημοσίευση: 2025-01-12
Μία από τις αλλαγές στη λίστα της δεύτερης εορταστικής donation season ήταν η προσθήκη του OpenBSD. Το λειτουργικό είναι εγκατεστημένο σε ένα VPS που διατηρώ ανώνυμα στην ισλανδική 1984, και για έναν περίπου χρόνο τώρα φιλοξενεί την εκδοχή hidden service του kolderson-net.
Χάρη στη συγκεκριμένη εφαρμογή που έχω βρει για το OpenBSD, κάποια στιγμή σκέφτηκα ότι θα μπορούσα, ενδεχομένως, να δοκιμάσω και κάποιο άλλο λειτουργικό της οικογένειας του BSD. Θυμήθηκα τότε ότι στο παρελθόν είχα ένα VM με το NetBSD, όμως ποτέ δεν ασχολήθηκα σοβαρά. Θυμήθηκα επίσης ότι έχω ένα Raspberry Pi 3 Model B+, ξεχασμένο σ' ένα συρτάρι. Από τη στιγμή που το NetBSD είναι το κατ' εξοχήν portable BSD, συνειδητοποίησα ότι είχε έλθει η στιγμή το συγκεκριμένο Raspberry Pi να περάσει και πάλι στην ενεργό δράση -- αυτή τη φορά με το NetBSD.
Διερευνητική εγκατάσταση σε VM
Πριν εγκαταστήσω ένα λειτουργικό με το οποίο δεν είμαι εξοικειωμένος, μ' αρέσει να το δοκιμάζω πρώτα σε εικονική μηχανή. Έτσι έκανα και με το NetBSD.
Αρχικά, κατέβασα ένα ISO image της έκδοσης 10.1 για την αρχιτεκτονική amd64
.
Στη συνέχεια, σε περιβάλλον openSUSE Leap, δημιούργησα ένα νέο libvirt QEMU/KVM VM.
Ακολούθησε η εγκατάσταση του NetBSD στο VM, μια σχετικά απλή διαδικασία χάρη στο εργαλείο sysinst
.
Στον επίσημο δικτυακό τόπο του NetBSD Project φιλοξενείται ένας υπερπλήρης οδηγός για το λειτουργικό, στον οποίο, μεταξύ άλλων θεμάτων, περιγράφεται αναλυτικά και η διαδικασία της εγκατάστασης. Ομολογώ πως δεν διάβασα τον οδηγό, όχι πριν καταφέρω να συνδεθώ στο NetBSD, στο Raspberry Pi. Αντίθετα, για την πρώτη εγκατάσταση στο VM --και κυρίως για τις πρώτες βασικές ρυθμίσεις κι εργασίες αμέσως μετά-- πήγα στο BSD Jumpstart του @wesley974, κι από τους διαθέσιμους οδηγούς συμβουλεύτητα αυτόν για το NetBSD.
Για να μην τα πολυλογώ, η εγκατάσταση του NetBSD σε εικονική μηχανή αλλά και η μετέπειτα χρήση του λειτουργικού, μου άφησαν πολύ καλές εντυπώσεις. Ήταν προφανές ότι ο δρόμος για το NetBSD στο Raspberry Pi δεν είχε το παραμικρό εμπόδιο -- ή τουλάχιστον έτσι πίστεψα.
Πρώτη απόπειρα -- αποτυχία
Σε αντίθεση με το ISO image του NetBSD για αρχιτεκτονική amd64
, το οποίο κατέβασα για την εγκατάσταση στο VM, για την εγκατάσταση στο Raspberry Pi κατέβασα ένα συμπιεσμένο αρχείο IMG για αρχιτεκτονική aarch64
.
Αποσυμπίεσα το αρχείο και με τη βοήθεια του Raspberry Pi Imager το έγραψα σε μια κάρτα SD.
Βεβαίως, για την εγγραφή στην κάρτα θα μπορούσα να έχω καταφύγει στο εργαλείο dd
.
Όταν όμως το Raspberry Pi Imager είναι ήδη εγκατεστημένο στον υπολογιστή που εκείνη τη στιγμή χρησιμοποιώ, η αλήθεια είναι ότι το προτιμώ.
Μετά την εγγραφή τοποθέτησα την κάρτα SD στο Raspberry, το οποίο και σύνδεσα απευθείας στον router μέσω καλωδίου Ethernet: δεν είχα κανένα λόγο να δοκιμάσω σύνδεση μέσω WiFi, ειδικά από τη στιγμή που είχα ήδη αποφασίσει να εγκαταστήσω το NetBSD στο Pi χωρίς να συνδέσω στο board πληκτρολόγιο κι οθόνη.
Έβαλα το Raspberry Pi στο ρεύμα, φωτάκια ξεκίνησαν ν' αναβοσβήνουν ελπιδοφόρα, μετά από λίγο έβλεπα το IP που είχε πάρει το NetBSD από τον DHCP server του Pi-hole.
Όλα πολύ ωραία, λοιπόν, οπότε χωρίς καμία καθυστέρηση πήγα να συνδεθώ στο λογαριασμό root
του νέου συστήματος, μέσω SSH.
Δεν θυμάμαι αν το είχα διαβάσει κάπου, αν το είχα υποθέσει από μόνος μου ή αν είχα διαβάσει κάτι κάπου και λανθασμένα είχα συμπεράνει κάτι άλλο.
Σε κάθε περίπτωση, μετά το πρώτο boot του NetBSD στο Raspberry, περίμενα ότι η υπηρεσία του SSH θα είναι ενεργοποιημένη, καθώς κι ότι θα μπορώ να κάνω login μέσω SSH στο λογαριασμό του root
.
Για κάποιο λόγο, είχα κατά νου ότι ότι θα βρω το προκαθορισμένο password του root
κάπου στο σχετικό documentation, επομένως δεν θα έχω πρόβλημα με την πρώτη σύνδεσή μου στη νέα εγκατάσταση.
Τελικά, η υπηρεσία του SSH είναι πράγματι ενεργοποιημένη στο image του NetBSD για το Raspberry Pi.
Επίσης, δεν χρειάστηκε καν να ψάξω για το συνθηματικό του root
, αφού δεν είναι καν ορισμένο.
Υπάρχει μόνο ένα μικρό πρόβλημα:
για τις συνδέσεις SSH στο λογαριασμό του root
επιτρέπεται μόνο το public-key authentication.
Φυσικά, στο αντίστοιχο authorized_keys
δεν θα μπορούσε να υπάρχει κάποιο δημόσιο κλειδί μου, οπότε η απομακρυσμένη σύνδεση μέσω SSH ήταν απλά αδύνατη.
Το να γράψεις το image file του NetBSD σε κάρτα SD και να ξεκινήσεις το Raspberry Pi απ' αυτή, ισοδυναμεί με επιτυχημένη εγκατάσταση. Κατά το πρώτο boot, μάλιστα, το root partition αλλάζει μέγεθος αυτόματα, ώστε να καταλαμβάνει όλον το διαθέσιμο χώρο στην κάρτα. Είναι κρίμα, λοιπόν, που ενώ όλα έδειχναν ότι το νέο σύστημα ήταν έτοιμο, εγώ δεν μπορούσα καν να συνδεθώ.
Πίσω στην εικονική μηχανή
Στο σημείο αυτό θα μπορούσα να σηκώσω τα χέρια ψηλά (όχι στ' αλήθεια) και να συνδέσω στο Pi πληκτρολόγιο κι οθόνη. Την τελευταία στιγμή, όμως, σκέφτηκα να το ψάξω λίγο περισσότερο. Έτσι έκανα, και γρήγορα βρέθηκα στο επίσημο wiki για την εγκατάσταση του NetBSD στο Raspberry Pi.
Εκ των υστέρων, βλέπω τώρα ότι Θα μπορούσα να έχω ξεκινήσει από το συγκεκριμένο wiki, να έχω κερδίσει χρόνο και να 'χω γλιτώσει μια κάποια σύγχυση. Αλλά όχι, φυσικά και προτίμησα τις αυθαίρετες υποθέσεις.
Άρχισα να διαβάζω (σχεδόν διαγώνια) το wiki, ψάχνοντας για κάτι που θα έμοιαζε με ό,τι αντιμετώπιζα.
Αυτό το "κάτι" πράγματι υπάρχει, μαζί με προτεινόμενη λύση:
κλείνεις το Pi, μεταφέρεις την κάρτα SD σε άλλον υπολογιστή με NetBSD, προσαρτάς το root partition, βάζεις ένα δημόσιο κλειδί σου στο αρχείο authorized_keys
του root
, αποπροσαρτάς το root partition, μεταφέρεις την κάρτα SD ξανά στο Raspberry Pi, το ξεκινάς και σε λίγο συνδέεσαι μέσω SSH στο λογαριασμό του root
.
Τέλεια λύση, για όποιον έχει μηχάνημα που τρέχει NetBSD. Εγώ δεν είχα τέτοιο μηχάνημα. Ίσως όμως θα μπορούσα να κάνω κάτι μ' εκείνο το libvirt QEMU/KVM VM που ήδη είχα δημιουργήσει ώστε να δοκιμάσω το NetBSD.
Χωρίς άλλη καθυστέρηση, συνέδεσα την κάρτα SD στο host computer (αυτό με το openSUSE), ξεκίνησα τον Virtual Machine Manager, επέλεξα το NetBSD VM χωρίς όμως να το ενεργοποιήσω.
Άνοιξα το παράθυρο με τις ιδιότητες της μηχανής κι έκανα ένα κλικ στο Add Hardware.
Κοίταξα λίγο τις διαθέσιμες συσκευές.
Επέλεξα την κατηγορία USD Host Device, και μετά προσέθεσα τη συσκευή που αντιστοιχούσε σ' αυτό το Internal Memory Card Reader.
Μετά ξεκίνησα το NetBSD VM και σε πολύ λίγο με χαρά διαπίστωσα ότι έβλεπε την κάρτα SD με τις κατατμήσεις της, οπότε και προσάρτησα το root partition.
Για να μη μακρηγορώ, το δημόσιο κλειδί του host computer, το οποίο ήδη βρισκόταν στο NetBSD VM, το τοποθέτησα στο νέο αρχείο root/.ssh/authorized_keys
, στο προσαρτημένο partition της κάρτας SD.
Δεύτερη απόπειρα -- επιτυχία
Τοποθέτησα και πάλι την κάρτα SD, με το ελαφρώς τροποποιημένο περιεχόμενο, στο Raspberry Pi.
Έβαλα το τροφοδοτικό της συσκευής στην πρίζα και, ξανά, φωτάκια άρχισαν ν' αναβοσβήνουν ελπιδοφόρα.
Περίμενα λίγο και μ' έναν μικρό, ελάχιστο δισταγμό, από ένα τερματικό του υπολογιστή με το openSUSE, χρησιμοποίησα το ssh
ώστε να συνδεθώ στο λογαριασμό του root
στο NetBSD.
Η σύνδεση πέτυχε, μια μικρή απρογραμμάτιστη γιορτή ξέσπασε στο χομ-όφις, με φαντάστηκα ν' ανοίγω σαμπάνια.
Φυσικά και δεν είχα σαμπάνια -- και δεν σκοπεύω να έχω αφού δεν είναι κάτι που προορίζεται για πόση από ανθρώπους.
Μετά την επιτυχημένη απομακρυσμένη σύνδεση στο NetBSD, έτρεξα το top
(χωρίς λόγο) κι άρχισα να διαβάζω ήρεμα, χαρούμενα κι ελαφρώς μεθοδικά τον επίσημο οδηγό για το λειτουργικό.
Μεταξύ των εργασιών που ακολούθησαν, ήταν:
- ορισμός password για τον
root
, - δημιουργία νέου λογαριασμού απλού χρήστη,
- εγκατάσταση και ρύθμιση του
sudo
, ώστε από το λογαριασμό του απλού χρήστη να κάνω εργασίες με δικαιώματαroot
χωρίς πληκτρολόγηση του αντίστοιχου password, - ρύθμιση του SSH daemon, ώστε να μην επιτρέπονται συνδέσεις στο λογαριασμό του
root
με κανέναν τρόπο, και να επιτρέπονται συνδέσεις στους λογαριασμούς απλών χρηστών μόνο με public-key authentication.
Έμαθα επίσης πώς να διαχειρίζομαι υπηρεσίες, καθώς και πώς να εγκαθιστώ binary packages.
Από τα πρώτα πακέτα που εγκατέστησα ήταν το zsh
, το οποίο κι όρισα ως το προκαθορισμένο κέλυφος στο λογαριασμό του απλού χρήστη.
Μετά, εννοείται πως εγκατέστησα και το oh-my-zsh.
Μια πρακτική εφαρμογή για το NetBSD
Από την αρχή, το Raspberry Pi με το NetBSD σκόπευα να το έχω online 24/7. Θα ήθελα, όμως, να φιλοξενεί και κάποια εφαρμογή --ή καλύτερα κάποια υπηρεσία-- η οποία με κάποιον τρόπο θα το καθιστά χρήσιμο. Η αλήθεια είναι πως, από τις υπηρεσίες που ήδη τρέχω στο σπίτι και σε cloud servers, δεν υπάρχει λόγος να μεταφέρω κάποια στο NetBSD.
Σκέφτηκα να δημιουργήσω ένα νέο hidden service, το οποίο θα χρησίμευε ως backup της υπάρχουσας εκδοχής hidden service του kolderson-net. Εκτός από τη σκέψη, προχώρησα μάλιστα και σε δοκιμές στο VM με το FreeBSD, στο οποίο πράγματι έστησα την προαναφερθείσα εφεδρική υπηρεσία. Η όλη άσκηση ήταν ενδιαφέρουσα, αν μη τι άλλο επειδή εξοικειώθηκα λίγο καλύτερα με τη διαχείριση των NetBSD services, καθώς και με τις προκαθορισμένες θέσεις στις οποίες οι εν λόγω υπηρεσίες αποθηκεύουν ρυθμίσεις και δεδομένα. Και πάλι, όμως, έχω ήδη φροντίσει ώστε το deployment μιας εκδοχής hidden service του kolderson-net να γίνεται ανά πάσα στιγμή σχεδόν αυτοματοποιημένα, οπότε γιατί ν' απασχολήσω το Raspberry Pi;
Καθώς έβλεπα για άλλη μια φορά τις υπηρεσίες που τρέχω, θυμήθηκα κάτι που είχα διαβάσει για τα Tor relays. Στο επίσημο site της κοινότητας του Tor Project, υπάρχει μια δημοσίευση περί των χαρακτηριστικών που καλό είναι να έχει ένας server που πρόκειται να επωμιστεί ρόλο Tor relay. Ανέτρεξα και πάλι στη συγκεκριμένη δημοσίευση. Αυτό που θυμήθηκα είναι στην ενότητα Choosing an Operating System: τα περισσότερα Tor relays τρέχουν σε Debian servers, αλλά το δίκτυο του Tor θα είναι περισσότερο ωφελημένο --περισσότερο κατανεμημένο, υπό μία έννοια-- με νέα relays που θα τρέχουν σε BSD servers!
Για πολύ καιρό φιλοξενώ ένα Tor Bridge κι ένα Tor Middle relay σε έναν Debian server, τον οποίο ενοικιάζω ανώνυμα από την Contabo, χάρη στην υπηρεσία του Mynymbox. Στο σπίτι, μόλις είχα στήσει έναν ωραιότατο NetBSD server, σε ένα ικανότατο Raspberry Pi 3 Model B+.
Περιττό να σημειώσω πως φρόντισα ώστε άλλος ένας BSD server να φιλοξενεί άλλο ένα Tor relay -- και συγκεκριμένα άλλο ένα Tor Bridge. Σύμφωνα με το Relay Search, το συγκεκριμένο bridge έχουν ήδη αρχίσει να εκμεταλλεύονται χρήστες του Tor, οι οποίοι κατά πάσα πιθανότητα βρίσκονται σε χώρες όπου κυβέρνηση και ISPs εφαρμόζουν αυστηρούς περιορισμούς όσον αφορά στην ελεύθερη πρόσβαση στο ίντερνετ.
Δεν τους χάλασε που άλλος ένας σερβεράκος --μάλιστα με μπι-ες-ντι-- τους χαλάει τα σχέδια, από Σχετικά Βόρεια.