Οδηγός εγκατάστασης Ubuntu/LTSP σε Raspberry Pi 2

Ξεκίνησε από gidarakos, 11 Νοε 2015, 12:30:34 ΜΜ

« προηγούμενο - επόμενο »

alkisg

Οι thin clients δεν έχουν εύκολα πρόσβαση στις τοπικές συσκευές. Άρα θα είναι πολύ πιο εύκολο αν ξεκινήσουν ως fat clients παρά ως thin.

Επίσης, έχω την εντύπωση ότι αν ξεκινήσουμε να χρησιμοποιούμε το Pi για τα πράγματα που είναι ειδικά για το Pi, όπως προγραμματισμό GPIO, κάμερα module ή οτιδήποτε άλλο, και όχι δηλαδή ως κλασσικός σταθμός εργασίας, τότε θα είναι καλύτερα να κάνουμε Raspbian εικονικό δίσκο και όχι Ubuntu εικονικό δίσκο, ώστε να έχει και τα αντίστοιχα πακέτα και περιβάλλοντα που υπάρχουν στο Raspbian.
Για παράδειγμα, το python-rpi-gpo δεν το βλέπω να είναι πακεταρισμένο για Ubuntu, μάλλον θα είναι μόνο στα αποθετήρια του Raspbian, οπότε για να αποφύγουμε να τα αντιγράφουμε όλα αυτά στο αποθετήριό μας, θα είναι ευκολότερο να χρησιμοποιήσουμε Raspbian. Τουλάχιστον μέχρι αυτά τα πακέτα να περάσουν και στο Debian και στο Ubuntu.

Οπότε να ανεβάσω τις απαραίτητες αλλαγές για χτίσιμο Raspbian chroot; Ή θα κάνεις δοκιμή πρώτα τοπικά με Raspbian χωρίς LTSP; :)

gidarakos

Παράθεση από: gidarakos στις 21 Δεκ 2015, 02:30:00 ΜΜ
.. να μπορέσουμε να υλοποιήσουμε το Quick Reaction Game.

Έκανα κάποιες δοκιμές:
1) Στο Raspbian το: >>> import RPi.GPIO as GPIO δούλεψε κανονικά άρα το module RPi.GPIO ήταν ήδη "φορτωμένο". Αν και δεν συνέχισα το worksheet, λογικά θα δούλευε η άσκηση..

2) Στον LTSP server η python απαντούσε:
>>> import RPi.GPIO as GPIO
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import RPi.GPIO as GPIO
ImportError: No module named RPi.GPIO
>>>

και στη προσπάθεια να το εγκαταστήσω εμφάνισε λάθη:
Κώδικας: bash
administrator@server:~$ sudo pip install RPi.GPIO
[sudo] password for administrator: 
Downloading/unpacking RPi.GPIO
  Running setup.py egg_info for package RPi.GPIO
    
Installing collected packages: RPi.GPIO
  Running setup.py install for RPi.GPIO
    building 'RPi.GPIO' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/py_gpio.c -o build/temp.linux-i686-2.7/source/py_gpio.o
    source/py_gpio.c:23:20: μοιραίο σφάλμα: Python.h: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    Complete output from command /usr/bin/python -c "import setuptools;__file__='/home/administrator/build/RPi.GPIO/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-8qEiSv-record/install-record.txt:
    running install

running build

running build_py

running build_ext

building 'RPi.GPIO' extension

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/py_gpio.c -o build/temp.linux-i686-2.7/source/py_gpio.o

source/py_gpio.c:23:20: μοιραίο σφάλμα: Python.h: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

compilation terminated.

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /usr/bin/python -c "import setuptools;__file__='/home/administrator/build/RPi.GPIO/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-8qEiSv-record/install-record.txt failed with error code 1
Storing complete log in /home/administrator/.pip/pip.log
administrator@server:~$


3) Στον εικονικό armhf στην προσπάθεια να το εγκαταστήσω και εκεί λάθη:
Κώδικας: bash
administrator@server:~$ sudo ltsp-chroot -ma armhf
[sudo] password for administrator: 
root@server:/# sudo pip install RPi.GPIO
qemu: Unsupported syscall: 374
Downloading/unpacking RPi.GPIO
qemu: Unsupported syscall: 374
  Downloading RPi.GPIO-0.5.11.tar.gz
  Running setup.py (path:/tmp/pip_build_root/RPi.GPIO/setup.py) egg_info for package RPi.GPIO
    
Installing collected packages: RPi.GPIO
  Running setup.py install for RPi.GPIO
    building 'RPi.GPIO' extension
    arm-linux-gnueabihf-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/py_gpio.c -o build/temp.linux-armv7l-2.7/source/py_gpio.o
    source/py_gpio.c:23:20: fatal error: Python.h: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
     #include "Python.h"
                        ^
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    Complete output from command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/RPi.GPIO/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-EkDqNk-record/install-record.txt --single-version-externally-managed --compile:
    running install

running build

running build_py

creating build

creating build/lib.linux-armv7l-2.7

creating build/lib.linux-armv7l-2.7/RPi

copying RPi/__init__.py -> build/lib.linux-armv7l-2.7/RPi

running build_ext

building 'RPi.GPIO' extension

creating build/temp.linux-armv7l-2.7

creating build/temp.linux-armv7l-2.7/source

arm-linux-gnueabihf-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/py_gpio.c -o build/temp.linux-armv7l-2.7/source/py_gpio.o

source/py_gpio.c:23:20: fatal error: Python.h: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

 #include "Python.h"

                    ^

compilation terminated.

error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/RPi.GPIO/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-EkDqNk-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/RPi.GPIO
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 235, in main
    return command.main(cmd_args)
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 51: ordinal not in range(128)
root@server:/#


Παράθεση από: alkisg στις 21 Δεκ 2015, 07:13:43 ΜΜ
Οπότε να ανεβάσω τις απαραίτητες αλλαγές για χτίσιμο Raspbian chroot; Ή θα κάνεις δοκιμή πρώτα τοπικά με Raspbian χωρίς LTSP; :)
Α) Άλκη λογικά σε raspbian πρέπει να "παίζουν" τα διάφορα worksheets.. μέσα στις γιορτές σκέφτομαι να αγοράσω leds+resistors+buttons να κάνω καμιά δοκιμή.

Β) To raspbian chroot ενδιαφέρον θα ήταν!!! Με τη λογική; Θα επιλέγουμε αν θέλουμε thin/fat/rarpbian;

Γ) Μήπως είναι πιο πρακτικό και "εύκολο" μέσω thin/fat και python να παίξει τουλάχιστον το module RPi.GPIO;

alkisg

Β) Αμ δε, δυστυχώς το Raspberry Pi δεν περιλαμβάνει boot manager και έτσι δεν γίνεται εύκολα να επιλέξεις αν θες τοπικά ή thin ή fat. Για να γίνει αυτό, θα χρειαζόταν να προσθέσω στο LTSP δυνατότητα για μενού μέσα στο initramfs, αλλά πάει λίγο μακρυά η βαλίτσα...!

Γ) Στο raspbian, δώσε:
dpkg -l '*rpio*' | grep ^ii

Μετά κατέβασε τα deb αρχεία είτε
α) με apt-get install --reinstall πακέτο, από raspbian, και μετά βρίσκεις το .deb στο /var/cache/apt/archives, είτε
β) από τη σελίδα http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/

Τέλος μετάφερε και εγκατέστησε τα .deb στον εικονικό δίσκο του Ubuntu.
Αν τελικά είναι θέμα 2-3 πακέτων, οκ τα βάζουμε και στο αποθετήριο αν είναι...

(οι παραπάνω οδηγίες θα μπορούσαν να γίνουν πιο απλές αν δηλώναμε το αποθετήριο του Rasbpian με μειωμένο priority, αλλά θα μου έπαιρνε πιο πολύ χρόνο να βρω τις ακριβείς εντολές :))

gidarakos

#33
Παράθεση από: alkisg στις 21 Δεκ 2015, 07:13:43 ΜΜ
Οπότε να ανεβάσω τις απαραίτητες αλλαγές για χτίσιμο Raspbian chroot;
1) Δεν εννοούσες από τη μεριά του LTSP; Δηλαδή όχι τοπικά όπως αναφέρεσαι εδώ:
Παράθεση από: alkisg στις 22 Δεκ 2015, 12:59:43 ΜΜ
Β) Αμ δε, δυστυχώς το Raspberry Pi δεν περιλαμβάνει boot manager και έτσι δεν γίνεται εύκολα να επιλέξεις αν θες τοπικά ή thin ή fat. Για να γίνει αυτό, θα χρειαζόταν να προσθέσω στο LTSP δυνατότητα για μενού μέσα στο initramfs, αλλά πάει λίγο μακρυά η βαλίτσα...!
Τοπικά μπορούμε όπως το κάνω, με δυο sd, μία με raspbian και μια για boot thin/fat. :)

2) Από raspbian:
Κώδικας: bash
pi@raspberrypi:~ $ dpkg -l '*rpi*' | grep ^ii
ii  python-rpi.gpio  0.6.0a3-1    armhf        Python GPIO module for Raspberry Pi
ii  python3-rpi.gpio 0.6.0a3-1    armhf        Python 3 GPIO module for Raspberry Pi
ii  rpi-update       20140705     all          Raspberry Pi firmware updating tool
pi@raspberrypi:~ $

και
Κώδικας: bash
pi@raspberrypi:~ $ dpkg -l '*gpio*' | grep ^ii
ii  python-gpiozero  1.0.0        all          Simple API for controlling devices attached to the GPIO pins.
ii  python-rpi.gpio  0.6.0a3-1    armhf        Python GPIO module for Raspberry Pi
ii  python3-gpiozero 1.0.0        all          Simple API for controlling devices attached to the GPIO pins.
ii  python3-rpi.gpio 0.6.0a3-1    armhf        Python 3 GPIO module for Raspberry Pi
pi@raspberrypi:~ $

Τα *zero δεν υπάρχουν στο http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/


gidarakos

Κώδικας: bash
administrator@server:~$ sudo ltsp-chroot -ma armhf
root@server:/# wget http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.6.0a3-1_armhf.deb
--2015-12-22 15:31:58--  http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.6.0a3-1_armhf.deb
Εύρεση του archive.raspberrypi.org (archive.raspberrypi.org)... qemu: Unsupported syscall: 374
93.93.128.211, 93.93.128.230, 93.93.130.39, ...
Connecting to archive.raspberrypi.org (archive.raspberrypi.org)|93.93.128.211|:80... συνδέθηκε.
Η αίτηση για HTTP στάλθηκε, αναμονή απάντησης... 200 OK
Μήκος: 22460 (22K) [application/x-debian-package]
Saving to: 'python-rpi.gpio_0.6.0a3-1_armhf.deb'

100%[======================================>] 22460       --.-K/s   in 0,02s   

2015-12-22 15:31:58 (935 KB/s) - 'python-rpi.gpio_0.6.0a3-1_armhf.deb' saved [22460/22460]

root@server:/# sudo apt-get install --reinstall python-rpi.gpio_0.6.0a3-1_armhf.deb
qemu: Unsupported syscall: 374
Ανάγνωση Λιστών Πακέτων... Ολοκληρώθηκε
Κατασκευή Δένδρου Εξαρτήσεων                  
Ανάγνωση περιγραφής της τρέχουσας κατάσταση... Ολοκληρώθηκε
E: Αδυναμία εντοπισμού του πακέτου python-rpi.gpio_0.6.0a3-1_armhf.deb
E: Couldn't find any package by regex 'python-rpi.gpio_0.6.0a3-1_armhf.deb'
root@server:/#

alkisg

Χαχα σόρρυ, να γιατί το IRC είναι πολλές φορές γρηγορότερο από το φόρουμ σε τέτοιες διερευνητικές περιπτώσεις...
Με dpkg -i paketo.deb κάνε την εγκατάσταση.
Αν σου πει ότι έχει πρόβλημα εξαρτήσεων, ξεκίνα από το "λιγότερο εξαρτημένο" προς το περισσότερο εξαρτημένο, και σαν τελική εντολή δώσε apt-get -f install.

gidarakos

Ok :) ευχαριστώ για το χρόνο σου.. η συνέχεια αύριο..

Το 1) σε αυτό το θέμα δε μου το σχολίασες.. :) Σχετικά με chroot και τοπικά..
Αν έχουμε raspbian chroot δε θα επιλέγαμε από τον LTSP αν θα σερβίρετε στα raspberry όπως π.χ. επιλέγουμε αν θα "παίζουν" thin ή fat;

alkisg

Μπορεί να γίνει με 3 διαφορετικούς τρόπους, με dnsmasq μενού, με pxelinux μενού ή με νέο initramfs μενού.
Τα δύο πρώτα είναι μόνο μέσω δικτύου, το τελευταίο μπορεί να ισχύσει και για τοπική εγκατάσταση.
Και στις 3 περιπτώσεις το raspbian μπορεί να βρίσκεται είτε σε chroot στον server είτε ακόμα και μόνο στην κάρτα SD των clients.

Για την ώρα εγώ δεν θέλω να αφιερώσω και πολύ χρόνο στο Raspberry Pi, του έβαλα ένα Raspbian και του έκανα κάτι κόλπα με τον omxplayer ώστε να γίνει media player/vnc viewer και ησύχασα!
Όμως απ' ότι λένε, στον 4.5 kernel θα αρχίζει να υποστηρίζεται εγγενώς η κάρτα γραφικών του, αν συνεχίσει ο κόσμος να επενδύει σε αυτό τότε ΟΚ θα αξίζει τον κόπο για μια παραπάνω ενασχόληση.

gidarakos

#39
Φαίνεται να πήγαν όλα καλά:
Κώδικας: bash
sudo ltsp-chroot -ma armhf
export FLASH_KERNEL_SKIP=true
apt-get install idle idle3
cd /tmp
wget http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.6.0a3-1_armhf.deb
wget http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python3-rpi.gpio_0.6.0a3-1_armhf.deb
wget http://archive.raspberrypi.org/debian/pool/main/s/spidev/python-spidev_2.0~git20150907_armhf.deb
wget http://archive.raspberrypi.org/debian/pool/main/s/spidev/python3-spidev_2.0~git20150907_armhf.deb
wget http://archive.raspberrypi.org/debian/pool/main/g/gpiozero/python-gpiozero_1.0.0_all.deb
wget http://archive.raspberrypi.org/debian/pool/main/g/gpiozero/python3-gpiozero_1.0.0_all.deb
dpkg -i python-rpi.gpio_0.6.0a3-1_armhf.deb
dpkg -i python3-rpi.gpio_0.6.0a3-1_armhf.deb
dpkg -i python-spidev_2.0~git20150907_armhf.deb
dpkg -i python3-spidev_2.0~git20150907_armhf.deb
dpkg -i python-gpiozero_1.0.0_all.deb
dpkg -i python3-gpiozero_1.0.0_all.deb
apt-get -f install
exit
sudo ltsp-update-image armhf

Από εξαρτήσεις το python-gpiozero "ζητούσε" το python-spidev.

Πλέον ΜΟΝΟ σε fat η εντολή στην Python: >>> import RPi.GPIO as GPIO "πέρασε" χωρίς λάθος.

Στον LTSP server όπως ήταν αναμενόμενο:
Κώδικας: bash
administrator@server:~/Λήψεις$ sudo dpkg -i python-rpi.gpio_0.6.0a3-1_armhf.deb
dpkg: σφάλμα στην επεξεργασία του python-rpi.gpio_0.6.0a3-1_armhf.deb (--install):
 η αρχιτεκτονική του πακέτου (armhf) δεν ταιριάζει με αυτή του συστήματος (i386)
Προέκυψαν σφάλματα κατά την επεξεργασία του:
 python-rpi.gpio_0.6.0a3-1_armhf.deb
administrator@server:~/Λήψεις$

gidarakos

#40
Για να μπορέσουμε να τρέξουμε την Python στα fat ως διαχειριστές όπως μας ζητάει το worksheet του Quick Reaction Game θα πρέπει πρώτα να κάνουμε αυτό: https://alkisg.mysch.gr/steki/index.php?topic=3256.msg33534#msg33534
Παράθεση από: alkisg στις 15 Οκτ 2010, 01:38:30 ΜΜ
Με την ευκαιρία, όσοι έχουν fat clients και θέλουν προσωρινά να δώσουν δικαιώματα sudo σε κάποιον χρήστη που κάθεται σε κάποιο σταθμό εργασίας, μπορούν να εκτελέσουν:
sudo sh -c 'echo "username ALL=NOPASSWD: ALL" >> /etc/sudoers'

Με την παραπάνω, και μέχρι να γίνει επανεκκίνηση του σταθμού εργασίας, ο χρήστης username θα μπορεί να εκτελεί οποιαδήποτε διεργασία χωρίς κωδικό, ακριβώς όπως γίνεται με το live CD του Ubuntu.

Αυτή είναι εξεζητημένη και μόνο για fat clients και δεν θα μπει στο μενού εκτέλεση! ;)

Αντίστοιχη εντολή για το group sudo, η οποία μάλιστα μπορεί να εκτελεστεί και σε όλα τα τερματικά μαζί:
sudo sh -c 'echo "%sudo ALL=NOPASSWD: ALL" >> /etc/sudoers'


Ακολούθησα τις εντολές του worksheet χωρίς μηνύματα λάθους αλλά επειδή δεν έχω ακόμα συνδέσει led δεν βλέπω αν όντως ανάβει το led με την εντολή: GPIO.output(led, 1)

gidarakos

#41
Παράθεση από: gidarakos στις 21 Δεκ 2015, 02:30:00 ΜΜ
Δεν ξέρω αν θα μπορούσαμε να χρησιμοποιήσουμε τις GPIO του Raspberry σε περιβάλλον LTSP/thin client!!! Δηλαδή π.χ. να μπορέσουμε να υλοποιήσουμε το Quick Reaction Game.

Αγοράστηκαν τα υλικά, στήθηκε το κύκλωμα και όλα δούλεψαν μια χαρά! Υπενθυμίζω ότι μιλάμε για περιβάλλον fat client.

gidarakos

#42
Ενημέρωσα τον οδηγό προσθέτοντας και στο τέλος μια βασική Παρατήρηση IV. Όποιος δοκιμάσει projects με GPIO, αν έχει χρόνο ας δώσει κάποιο feedback..

gidarakos

Κατόπιν υποστήριξης IRC από τον Άλκη, ενημερώθηκε το lts.conf, με δυνατότητα προσθήκης δικαιωμάτων sudo, σε πολλούς χρήστες και ομάδες (groups).
Επίσης στις Παρατηρήσεις IV, προστέθηκε μία εντολή για απενεργοποίηση των δικαιωμάτων sudo, χωρίς επανεκκίνηση των clients.

gidarakos

Στις 8/1/16 κυκλοφόρησαν καινούργιες εκδόσεις στα python*-rpi.gpio_* οπότε ενημερώθηκαν αντίστοιχα οι εντολές στο βήμα 3.
Επίσης στο Α) του ΠΡΟΣΘΗΚΗ ΛΟΓΙΣΜΙΚΟΥ/ΑΛΛΑΓΗ IP SERVER προστέθηκαν οι εντολές apt-get update και apt get dist-upgrade, έτσι ώστε πριν την εγκατάσταση καινούργιου λογισμικού να γίνεται έλεγχος/εγκατάσταση αναβαθμίσεων.