Το προφίλ μας στο Google Plus
0

Intel Galileo: Linux, SSH, στατικές IP και άλλα tips

Προσφάτως απέκτησα ένα Intel Galileo Gen 2 development board. Σε περίπτωση που δεν έχετε ακούσει γι’ αυτό, πρόκειται για την απάντηση της Intel στην κοινότητα του Arduino. Στην πραγματικότητα, το Galileo είναι –ή υποτίθεται ότι είναι– pin compatible με το Arduino Uno: Μπορείτε να χρησιμοποιήσετε με το Galileo ακόμη και shields του Arduino.

Το Galileo προγραμματίζεται από το ίδιο IDE που προγραμματίζεται και το Arduino. Τα sketches, από τη στιγμή που θα μεταγλωττιστούν, υποτίθεται ότι είναι συμβατά: Μπορείτε να πάρετε το κύκλωμα για το LCD display από το Uno και να το δώσετε στο Galileo, να μεταγλωττίσετε εκ νέου και ν’ ανεβάσατε το πρόγραμμά σας, και όλα θα δουλεύουν όπως πρέπει. Αυτό τουλάχιστον ισχύει σε γενικές γραμμές…

Intel Galileo Gen 2 development board

Γιατί κάποιος να προτιμήσει το Galileo αντί για ένα τυπικό Uno ή κάποιο άλλο AVR-based Arduino; Επίσης: Γιατί κάποιος να πάρει *και* Galileo, όταν ήδη έχει ένα Arduino;

Το Galileo χρησιμοποιεί ένα Intel SoC (System on-a Chip) που είναι χρονισμένο στα (μη ευκαταφρόνητα) 400MHz. Είναι ισοδύναμο με κάποιες παλιές Pentium CPUs που κυκλοφορούσαν ευρέως. Επιπλέον, το board φέρει 256MB μνήμης RAM, μία είσοδο για κάρτες micro-SD, μία θύρα Ethernet αλλά και μία βάση micro PCI-Express, για κάρτες WiFi. Αναμφισβήτητα, το Galileo έχει αρκετά υψηλές προδιαγραφές για “Arduino”. Υπάρχει καλός λόγος γι’ αυτό: Ακόμη και χωρίς κάποια καρτούλα SD, το Galileo τρέχει μια μικρή διανομή Linux. Θα το παρατηρήσετε, καθώς χρειάζεται λίγος χρόνος για να ξεκινήσει και να φανεί στον υπολογιστή ως νέα σύνδεση USB. Υπάρχει μάλιστα και μια πιο πλήρης εκδοχή Linux για το Galileo — και βεβαίως μπορούμε να έχουμε δωρεάν το αντίστοιχο SD image. Τελικά, το Linux και η παρουσία Ethernet άνετα καθιστούν τη συσκευή ως ένα πρώτης τάξεως IoT (Internet of Things) development board.

Πώς θα μπορούσαμε να αποκτήσουμε πρόσβαση στη Linux πλευρά του Galileo; Ας εξετάσουμε δύο σενάρια.

  1. Πρόσβαση στο built-in Linux, δηλαδή στη διανομή που τρέχει το Galileo αν δεν εισάγουμε κάποια κάποια κατάλληλα διαμορφωμένη κάρτα SD.
  2. Πρόσβαση στο Linux της κάρτας SD. (Κατεβάστε το σχετικό image, μαζί με άλλα εργαλεία που θα χρειαστείτε.)

Πρόσβαση στο built-in Linux μέσω Telnet
Στην πλειονότητα των tutorials για το Galileo θα βρείτε αρκετούς τρόπους για την πρόσβαση στο Linux του Galileo.

  • Χρήση σειραϊκού καλωδίου και προσαρμοσμένου connector για τα σειραϊκά pins εξόδου (gen 2) ή 3.5mm jack (gen 1).
  • Εκτέλεση sketch για την αναδιαμόρφωση του USB port ως σειραϊκού τερματικού, και χρήση αυτού για τη σύνδεση. Υπάρχουν δύο προβλήματα μ’ αυτή την προσέγγιση. Αν και υποτίθεται ότι δουλεύει με το built-in Linux, σταματά να δέχεται οτιδήποτε στην είσοδο αν, π.χ., συνδεθείτε μέσω του PuTTY. Θα πάρετε, δηλαδή, login prompt, θα βλέπετε το κέλυφος — αλλά έως εκεί. Δεν θα εκτελείται *καμία* εντολή. Η συγκεκριμένη μέθοδος δουλεύει λίγο καλύτερα με την εκδοχή SD του Linux, όμως υπάρχει κι ένα άλλο σοβαρό μειονέκτημα: Το sketch μετατρέπει μόνιμα το USB port ώστε να λειτουργεί για σειραϊκές συνδέσεις, επομένως χάνετε τη δυνατότητα για ανέβασμα sketches.

Τι γίνεται στην περίπτωση που επιθυμείτε να έχετε *και* το Linux σας αλλά *και* να εκτελείτε τα sketches σας;

Όπως θα διαπιστώσετε, το built-in Linux δεν τρέχει κάποιον SSH daemon, επομένως αναγκαζόμαστε να στραφούμε στο telnet. Μικρό το κακό. Επίσης, αντί ν’ ακολουθήσουμε τη σειραϊκή οδό, ας στραφούμε σ’ αυτό το ωραίο Ethernet port. Το Ethernet εξάλλου είναι πολύ περισσότερο συνηθισμένο σήμερα: Απλά συνδέστε το Galileo σας στο οικιακό switch κι ανεβάστε ένα sketch σαν το ακόλουθο:

void setup() {
  system("ifconfig eth0 inet 192.168.0.10 netmask 255.255.255.0 up");
  system("telnetd");
}

void loop() {
}

Προφανώς, θα πρέπει να αλλάξετε αυτό το “192.168.0.10” με μία διεύθυνση IP που ταιριάζει στο δίκτυό σας. Αν χρησιμοποιείτε DHCP –πολύ συνηθισμένο για τους οικιακούς routers–, απλά βεβαιωθείτε ότι θα αντιστοιχίσετε στο Galileo μια στατική διεύθυνση εκτός του εύρους τιμών που μοιράζει ο DHCP server. (Υποθέτω ότι, ως καλός admin, έχετε στην άκρη ένα σύνολο διευθύνσεων τις οποίες δεν χρησιμοποιεί ο DHCP.)

Είστε τώρα έτοιμος να συνδεθείτε, μέσω Telnet, στο Galileo σας. Στραφείτε στο PuTTY για Windows ή στη γραμμή εντολών ενός Linux box και στον client ονόματι telnet. Στο δεύτερο από τα ακόλουθα screenshots φαίνεται το τι θα δείτε από το PuTTY, αμέσως μόλις συνδεθείτε.

Δουλεύοντας από τα Windows, για τη σύνδεση telnet μπορούμε να καταφύγουμε στο PuTTY.

Μόλις πραγματοποιήσαμε την πρώτη μας σύνδεση στο built-in Linux του Galileo, μέσω telnet και με τη βοήθεια του PuTTY για Windows.

Συνδεθείτε στο λογαριασμό του χρήστη root — δεν υπάρχει password ορισμένο. Τώρα που συνδεθήκατε, δεν υπάρχει λόγος να τρέχει το script. Καλέστε το προγραμματάκι top:

# top

Κατά πάσα πιθανότητα, το /sketch/sketch.elf θα είναι στο πάνω μέρος της λίστας του top.

Βρείτε το process για το /sketch/sketch.elf κι απλά σκοτώστε το (κατά πάσα πιθανότητα, θα είναι στο πάνω μέρος της λίστας):

# kill 929

Μπορείτε ν’ ανεβάσετε άλλο ένα sketch προς εκτέλεση. Σε αντίθεση με την προσέγγιση του σειραϊκού USB, εξακολουθείτε να έχετε τη δυνατότητα για uploads.

Παίξτε με το built-in Linux όσο θέλετε. Σύντομα θα διαπιστώσετε ότι είναι αρκετά περιορισμένο. Επίσης, τη στιγμή που θα επανεκκινήσετε το Galileo, όλες οι ρυθμίσεις σας θα χαθούν: Όλα τα sketches σας θα διαγραφούν και η ωραιότατη στατική διεύθυνση που αντιστοιχίσατε προηγουμένως θα πάψει να υφίσταται: Κάθε φορά που θα κάνετε reboot, θα χρειάζεται να εκτελείτε ξανά το προαναφερθέν sketch.

Αργά ή γρήγορα (μάλλον γρήγορα) θα στραφείτε στην SD card εκδοχή του Linux.

Πρόσβαση στο Linux της SD card μέσω SSH και παγιοποίηση ρυθμίσεων
Υποθέτουμε λοιπόν ότι έχετε ήδη προετοιμάσει ένα SD card με το Yocto Linux, ακολουθώντας τις οδηγίες της Intel. Λογικά, τώρα θα θέλετε να συνδεθείτε μέσω SSH.

  • Με το Linux της SD card πρέπει να είσαστε υπομονετικοί, αφού σε σύγκριση με τη built-in εκδοχή πιθανώς χρειάζεται περισσότερο χρόνο για το boot. Θα ξέρετε ότι έχει εκκινήσει επιτυχώς όταν η συσκευή USB (το Galileo) αναγνωρίζεται από το λειτουργικό του PC (αν χρησιμοποιείτε Windows, θα ακούτε και τον χαρακτηριστικό ήχο).
  • Το καλό με το SD card Linux είναι ότι περιλαμβάνει και μια υπηρεσία SSH. Επίσης, έχετε τη δυνατότητα για στατική IP που θα διατηρείται και μετά από reboot. Βεβαίως, το ίδιο ισχύει και για άλλες ρυθμίσεις.
  • Σε περίπτωση που έχετε το Galileo ενεργό και συνδεδεμένο στο Internet, εννοείται πως οφείλετε να δείτε και κάποια ζητήματα που αφορούν στην ασφάλεια. Περί αυτών θα συζητήσουμε σε λίγο.

Όπως μπορείτε να φανταστείτε, το script (sketch) για την απόκτηση πρόσβασης κατά SSH είναι ακόμα πιο απλό σε σχέση με το προηγούμενο που δώσαμε:

void setup() {
  system("ifconfig eth0 inet 192.168.0.10 netmask 255.255.255.0 up");
}

void loop() {
}

Ο SSH server ήδη λειτουργεί και δεν χρειάζεται επανεκκίνηση. Απλά αντιστοιχίστε στο Linux της SD card τη στατική σας διεύθυνση IP και είστε έτοιμοι: Πλέον, μπορείτε να συνδέεστε μέσω SSH.

Χρησιμοποιήστε τα top και kill, όπως κάναμε και προηγουμένως, προκειμένου να σταματήσετε το sketch, μιας και δεν χρειάζεται άλλο. Καλύτερα να το διαγράψετε κιόλας, ώστε κατά το επόμενο boot να μην ενεργοποιηθεί. Ούτως ή άλλως, θα φροντίσουμε ώστε οι αλλαγές στις ρυθμίσεις να είναι μόνιμες.

# rm /sketch/sketch.elf

Η πρώτη αλλαγή που θα θέλετε να πραγματοποιήσετε αφορά στο password του root. Προς το παρόν δεν έχει, οπότε ορίστε του ένα έτσι:

# passwd 
Changing password for root
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
passwd: password changed.

Τροποποιήστε το αρχείο /etc/network/interfaces, προκειμένου η στατική διεύθυνση IP να ισχύει και μετά από reboot. (Κατά πώς φαίνεται, ο μοναδικός διαθέσιμος text editor είναι το vi.) Βρείτε την ακόλουθη γραμμή…

iface eth0 inet dhcp

και στη θέση της βάλτε αυτές:

iface eth0 inet static
   address 192.168.0.10
   netmask 255.255.255.0
   gateway 192.168.0.250

Ο ορισμός gateway χρειάζεται μόνον αν σκοπεύετε να δώσετε στο Galileo πρόσβαση στο Internet. Σ’ αυτή την περίπτωση, θα χρειαστεί να τροποποιήσετε και το αρχείο /etc/resolv.conf (θα το κάνουμε σε λίγο). Η διεύθυνση IP του gateway είναι βεβαίως η εσωτερική διεύθυνση του router σας.

Οι έως τώρα αλλαγές δεν είναι αρκετές: Για τη διαχείριση των network interfaces το Galileo χρησιμοποιεί τον λεγόμενο Network Connections Manager (conman), οποίος αγνοεί το αρχείο /etc/network/interfaces. Θα χρειαστεί να πάμε στην “κλασική” μέθοδο διαχείρισης:

# cd /etc/rc5.d
# rm S05conman
# ln -s ../init.d/networking S05networking

Επανεκκινήστε τώρα το Galileo σας:

# shutdown -r now

Όταν ενεργοποιηθεί και πάλι, απλά συνδεθείτε μέσω SSH. Δεν χρειάζεται να τρέξετε ξανά το προηγούμενο sketch, αφού οι αλλαγές που κάναμε παραμένουν σε ισχύ. Εάν επιθυμείτε να συνδέσετε το Galileo στο Internet, προσθέστε την ακόλουθη γραμμή στο /etc/resolv.conf:

nameserver 192.168.0.250

Βεβαίως, στη θέση αυτού του “192.168.0.250” θα πρέπει να βάλετε την εσωτερική διεύθυνση IP του router σας. Εναλλακτικά, μπορείτε να πληκτρολογήσετε τη διεύθυνση IP κάποιου άλλου, διαθέσιμου DNS server. Αν έχετε κάποια αμφιβολία, χρησιμοποιήστε τον DNS της Google: 8.8.8.8. Υπενθυμίζουμε ότι για να δουλεύει η σύνδεση στο Internet, στο /etc/network/interfaces θα πρέπει να είναι ορισμένος κι ένας έγκυρος gateway.

Από τη στιγμή που είστε συνδεδεμένος στο λογαριασμό του root, ίσως θέλετε να αλλάξετε αυτό το περίεργο “clanton” με ένα περισσότερο “cool” hostname. Απλά ανοίξτε το αρχείο /etc/hostname και πληκτρολογήστε ένα όνομα της αρεσκείας σας. Στο επόμενο reboot θα ισχύει το νέο hostname.

Αν θέλετε ένα message of the day (motd) να εμφανίζεται σε κάθε login, απλά δημιουργήστε το αρχείο /etc/motd και βάλτε του το επιθυμητό περιεχόμενο.

Ενίσχυση της ασφάλειας
Αν επιθυμείτε να έχετε το Galileo σας στο Internet, κατ’ ελάχιστον οφείλετε να φροντίσετε για τα ακόλουθα:

  • Δώστε στο χρήστη root ένα συνθηματικό. Αυτό το κάναμε ήδη.
  • Απαγορέψτε τα root logins μέσω SSH.
  • Δημιουργήστε ένα unprivileged account, για τυπική ή αν θέλετε “καθημερινή” χρήση.

Η δημιουργία ενός account απλού ή αλλιώς μη εξουσιοδοτημένου χρήστη, γίνεται εύκολα:

# useradd -g root johndoe

(Στην πραγματικότητα το “johndoe” δεν αποτελεί καλή επιλογή για username, αλλά καταλαβαίνετε τι εννοούμε.) Προσέξτε την παράμετρο -g: Προτείνεται ο χρήστης σας να είναι μέλος της ομάδας (group) ονόματι “root”. Τα δικαιώματα (permissions) σε μερικά device files, όπως, π.χ., στο /dev/null, είναι read-write μόνο για τον root και το ομώνυμο group, κι αν δεν ανήκετε στο group “root” θα έχετε προβλήματα με κάποιες εντολές (όπως το scp).

Δώστε τώρα στο νέο χρήστη ένα καλό password:

# passwd johndoe
Changing password for johndoe
Enter the new password (minimum of 5, maximum of 8 characters) Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
passwd: password changed.

Κάπου εδώ είναι καλή ιδέα να ελέγξετε για το αν δουλεύει το account σας. Απλά ανοίξτε άλλη μια σύνδεση SSH αλλά κάντε login στο λογαριασμό του νέου χρήστη. Αν όλα πάνε καλά, προχωρήστε με την απενεργοποίηση του root login μέσω SSH. Ανοίξτε το αρχείο /etc/ssh/sshd_config, βρείτε τη γραμμή

PermitRootLogin yes

και αλλάξτε το “yes” σε “no”:

PermitRootLogin no

Εναλλακτικά απλά “σχολιάστε” ολόκληρη τη γραμμή, μιας και η προκαθορισμένη συμπεριφορά για τον SSH server είναι να μη δέχεται root logins. Προκειμένου να ληφθούν υπόψη οι αλλαγές, επανεκκινήστε το Galileo σας:

# shutdown -r now

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

$ su -

και θα μεταβαίνετε στο account του χρήστη root. (Επιθυμητό θα ήταν και το sudo, όμως δεν είναι παρόν στη συγκεκριμένη διανομή Linux και δεν έχω ακόμα διερευνήσει τα σχετικά περί package management.)

Θα μπορούσατε να δημιουργήσετε μερικά ωραία αρχεία startup για το BASH του accounts σας (.bashrc, .profile). Μπορείτε μάλιστα να χρησιμοποιήσετε τα δικά μου, τα οποία αποτελούν ελαφρώς απλοποιημένες εκδοχές των αντίστοιχων αρχείων που έχω για τα FreeBSD boxes μου. Απλά συνδεθείτε στο λογαριασμό του απλού σας χρήστη και πληκτρολογήστε τα ακόλουθα:

$ wget http://www.freebsdworld.gr/files/galileo-dot.tar.gz
$ tar xvzf galileo-dot.tar.gz

Ίσως χρειαστεί να πιέσετε το [A], για την αντικατάσταση αρχείων που υπάρχουν ήδη. Προκειμένου να ληφθούν υπόψη οι ρυθμίσεις που ορίζονται στα .bashrc και .profile, αποσυνδεθείτε από το λογαριασμό σας και συνδεθείτε και πάλι.

Ένα LCD screen για το Galileo
Οι οθόνες LCD είναι εξαιρετικά δημοφιλείς μεταξύ των ιδιοκτητών Arduino, αφού προσθέτουν νέες διαστάσεις σε πάμπολλα πρότζεκτ. Η εκδοχή οθόνης LCD με 16 χαρακτήρες και 2 γραμμές είναι από τις πιο συνηθισμένες και τυγχάνει να κατέχω μία. Από τη στιγμή που τα Galileo και Arduino Uno είναι συμβατά, το μόνο που χρειάζεται είναι να μεταφέρετε το κύκλωμα LCD από το Uno στο Galileo (στα ίδια GPIO pins), να αναμεταγλωττίσετε το sketch σας για την αρχιτεκτονική Intel και να το ανεβάσετε στο Galileo.

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

https://github.com/mikalhart/galileo-LiquidCrystal/releases

Μετά τη λήψη και την αποσυμπίεση του σχετικού archive, αντικαταστήστε όλα τα περιεχόμενα του καταλόγου libraries/LiquidCrystal (μέσα στον κατάλογο εγκατάστασης του Arduino) με τα περιεχόμενα του archive που μόλις κατεβάσατε.

Μεταγλωττίστε ξανά το project σας κι ανεβάστε το — η οθονούλα θα πρέπει να δουλεύει μια χαρά!

Μία ωραία οθόνη LCD για το Intel Galileo.

Happy coding!

Σ.τ.Ε. Το παρόν άρθρο μεταφράστηκε και δημοσιεύτηκε κατόπιν αδείας, από το Mostly Analog.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων