Τελικά ολοκληρώθηκε το boot μέσω sd με το Raspberry Pi 2 να λειτουργεί ως thin/fat client με το γνωστό περιβάλλον gnome-fallback.
Τα βήματα που ακολούθησα, με κάποιες αλλαγές προσαρμοσμένες στο σχολικό εργαστήριο που έχει ήδη
Ubuntu LTSP Server 12.04, είναι τα ακόλουθα:
Edit 23/12/16:Κατόπιν δοκιμών έγιναν αλλαγές στην παρατήρηση V.
Edit 22/12/16:Προστέθηκε παρατήρηση V σχετικά με την χρήση του adaptor HDMI-->VGA.
Edit 15/12/16:α) Στο βήμα 7 έγιναν οι απαραίτητες αλλαγές για να γίνεται χρήση του linux-firmware-raspi2_1.20151118+b70b451-0ubuntu1_armhf.deb βάση του επίσημου οδηγού του Άλκη (edited 2016-08-11).
β) Στα βήματα 7, 9 και στο Β) το "Documents" αντικαταστάθηκε με το "Έγγραφα" για να μη δημιουργείτε επιπλέον φάκελος με το όνομα Documents.
Edit 30/11/16:Στο βήμα 8 έγινε αλλαγή στο url σχετικά με την εφαρμογή SD Formatter 4.0.
Edit 6/10/16:Στις 4/9/16 κυκλοφόρησαν καινούργιες εκδόσεις στα python*-gpiozero_* οπότε ενημερώθηκαν αντίστοιχα οι εντολές στο βήμα 3.
Edit 9/5/16:Στις 21/4/16 κυκλοφόρησαν καινούργιες εκδόσεις στα python*-gpiozero_* οπότε ενημερώθηκαν αντίστοιχα οι εντολές στο βήμα 3.
Edit 11/2/16:Στις 9/2/16 κυκλοφόρησαν καινούργιες εκδόσεις στα python*-gpiozero_* οπότε ενημερώθηκαν αντίστοιχα οι εντολές στο βήμα 3.
Edit 19/1/16:α) Στις 8/1/16 κυκλοφόρησαν καινούργιες εκδόσεις στα python*-rpi.gpio_* οπότε ενημερώθηκαν αντίστοιχα οι εντολές στο βήμα 3.
β) Στο Α του ΠΡΟΣΘΗΚΗ ΛΟΓΙΣΜΙΚΟΥ, προστέθηκαν οι εντολές apt-get update και apt get dist-upgrade, έτσι ώστε πριν την εγκατάσταση καινούργιου λογισμικού να γίνεται έλεγχος/εγκατάσταση αναβαθμίσεων.
Edit 11/1/16:α) Άλλαξε το όνομα της οδηγίας για το πληκτρολόγιο σε INIT_COMMAND_XKB (βήμα 6).
β) Δυνατότητα προσθήκης πολλών χρηστών και ομάδων με δικαιώματα sudo, στο lts.conf (βήμα 6).
γ) Προσθήκη δυνατότητας απενεργοποίησης των δικαιωμάτων sudo, χωρίς επανεκκίνηση των clients (Παρατήρηση IV).
Edit 10/1/16:Για να μπορούμε να χρησιμοποιούμε στα fat clients, τα GPIO (general purpose input/output) pins, προστέθηκαν τα εξής:
α) Εγκατάσταση απαραίτητου λογισμικού στο βήμα 3.
β) Οδηγία στο lts.conf (βήμα 6) ώστε κάποιος χρήστης σε fat client να μπορεί να εκτελεί εφαρμογές με δικαιώματα sudo.
γ) Παρατήρηση IV.
Edit 27/11/15:Επειδή κάποια πληκτρολόγια δεν τα ανιχνεύει σωστά το Xorg (π.χ. με το Logitech K340 δε λειτουργεί η αλλαγή γλώσσας left alt+shift), προστέθηκε μία επιπλέον οδηγία στο lts.conf (βήμα 6).
Edit 25/11/15:Αλλαγή της εντολής εγκατάστασης του Libre Office στο βήμα 3. Φαίνεται να "κολλάει" η εγκατάσταση του ca-certificates-java. Υπάρχει πρόβλημα στη συνεργασία του ca-certificates-java με τον εξομοιωτή qemu.
Edit 23/11/15:α) Διόρθωση συντακτικού λάθους (MOUNT_PACKAGE_DIR="/var/cache/apt/archives") στο περιεχόμενο του αρχείου /etc/ltsp/ltsp-build-client-raspi2.conf (βήμα 1).
β) Αλλαγή της εντολής για την κάρτα ήχου, σε MODULE_01="snd_bcm2835", στο αρχείο lts.conf (βήμα 6).
Edit 13/11/15:α) Έγιναν αλλαγές, στο περιεχόμενο του αρχείου lts.conf, στο 6ο βήμα: i) Προσθήκη οδηγίας LTSP_FATCLIENT, ii) Ενεργοποίηση της κάρτας ήχου modprobe snd_bcm2835.
β) Προσθήκη της εγκατάσταση του Libre Office, για fat client, πριν τα language pack (βήμα 3).
1) Δημιουργία του αρχείου /etc/ltsp/ltsp-build-client-raspi2.conf:
sudo gedit /etc/ltsp/ltsp-build-client-raspi2.conf
στο οποίο προσθέτουμε τις ακόλουθες γραμμές:
# This is a configuration file to build an LTSP chroot for Raspberry Pi 2.
DIST=trusty
MOUNT_PACKAGE_DIR="/var/cache/apt/archives"
APT_KEYS="/etc/ltsp/ts_sch_gr-ppa.key"
EXTRA_MIRROR="http://ppa.launchpad.net/ts.sch.gr/ppa/ubuntu $DIST main"
KERNEL_ARCH="raspi2"
LATE_PACKAGES="dosfstools less nano epoptes-client"
2) Δημιουργία του εικονικού δίσκου thin chroot:
sudo -i
add-apt-repository --yes ppa:ts.sch.gr
apt-key export 03AFA832 > /etc/ltsp/ts_sch_gr-ppa.key
apt-get update
apt-get dist-upgrade
apt-get --yes install qemu-user-static binfmt-support
ltsp-build-client --arch armhf --config /etc/ltsp/ltsp-build-client-raspi2.conf
exit
3) Προσθήκη του ubuntu-desktop gnome-session-flashback και άλλων απαραίτητων λογισμικών για να λειτουργήσει και σαν fat client:
sudo ltsp-chroot -ma armhf
export FLASH_KERNEL_SKIP=true
apt-get install ubuntu-desktop gnome-session-flashback
apt-get install ubuntu-restricted-extras
apt-get install --no-install-recommends libreoffice
apt-get install language-pack-el
apt-get install $(check-language-support)
# Εγκατάσταση του απαραίτητου λογισμικού, για να μπορούμε να χρησιμοποιούμε στα fat clients, τα GPIO (general purpose input/output) pins.
apt-get install idle idle3
cd /tmp
wget http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.6.1-1_armhf.deb
wget http://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python3-rpi.gpio_0.6.1-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.3.1_all.deb
wget http://archive.raspberrypi.org/debian/pool/main/g/gpiozero/python3-gpiozero_1.3.1_all.deb
dpkg -i python-rpi.gpio_0.6.1-1_armhf.deb
dpkg -i python3-rpi.gpio_0.6.1-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.3.1_all.deb
dpkg -i python3-gpiozero_1.3.1_all.deb
apt-get -f install
exit
4) Ενημέρωση του εικονικού δίσκου:
sudo ltsp-update-image armhf
5) Επειδή θέλουμε να ασχολούμαστε με ένα lts.conf δημιουργούμε ένα symlink:
sudo ln -sf ../i386/lts.conf /var/lib/tftpboot/ltsp/armhf/lts.conf
6) Προσθέτουμε στο τέλος του αρχείου lts.conf:
sudo gedit /var/lib/tftpboot/ltsp/i386/lts.conf
τις ακόλουθες γραμμές:
# This partial MAC address means "apply this section to all PI clients".
[B8:27:EB:*]
# KERNEL_DEVICE instructs LTSP to locate and automatically update the kernel.
KERNEL_DEVICE=/dev/mmcblk0p1
# Αν θέλετε ΟΛΑ τα Raspberry να λειτουργούν ως thin client, αφαιρέστε το σχόλιο από την επόμενη εντολή.
# LTSP_FATCLIENT=False
# Ενεργοποίηση της κάρτας ήχου snd_bcm2835.
MODULE_01="snd_bcm2835"
# Αν δε λειτουργεί σωστά το πληκτρολόγιο π.χ. δε γίνεται αλλαγή γλώσσας left alt+shift, αφαιρέστε το σχόλιο από την επόμενη εντολή.
# INIT_COMMAND_XKB="echo \"setxkbmap -layout us,gr -option '' -option grp:alt_shift_toggle,grp_led:scroll &\" > /usr/share/ldm/rc.d/I02-greek-locale"
# Αν θέλετε να εκτελείτε εντολές σε fat client χρήστες με δικαιώματα sudo (π.χ. sudo idle3 &), αφαιρέστε τα σχόλια από τις επόμενες εντολές, βάζοντας όπου username1, username2, τα αντίστοιχα ονόματα των χρηστών. Μπορείτε να προσθέσετε κι άλλες εγγραφές.
# RCFILE_SUDOERS_01="echo \"username1 ALL=NOPASSWD: ALL\" >> /etc/sudoers"
# RCFILE_SUDOERS_02="echo \"username2 ALL=NOPASSWD: ALL\" >> /etc/sudoers"
# Αν θέλετε να εκτελείτε εντολές σε fat client groups με δικαιώματα sudo (π.χ. sudo idle3 &), αφαιρέστε τα σχόλια από τις επόμενες εντολές, βάζοντας όπου groupname1, groupname2, τα αντίστοιχα ονόματα των groups. Μπορείτε να προσθέσετε κι άλλες εγγραφές.
# RCFILE_SUDOERS_groupname1="echo \"groupname1 ALL=NOPASSWD: ALL\" >> /etc/sudoers"
# RCFILE_SUDOERS_groupname2="echo \"groupname2 ALL=NOPASSWD: ALL\" >> /etc/sudoers"
7) Προετοιμασία αρχείων για αντιγραφή στην sd του Raspberry:
sd_card="$HOME/Έγγραφα/RaspberryPi/sd_card"
mkdir -p "$sd_card"
cd "$sd_card"
wget http://ports.ubuntu.com/ubuntu-ports/pool/multiverse/l/linux-firmware-raspi2/linux-firmware-raspi2_1.20151118+b70b451-0ubuntu1_armhf.deb
dpkg-deb -X linux-firmware-raspi2_1.20151118+b70b451-0ubuntu1_armhf.deb .
mv usr/lib/linux-firmware-raspi2/* .
rm -rf usr/ linux-firmware-raspi2_1.20151118+b70b451-0ubuntu1_armhf.deb
cp /var/lib/tftpboot/ltsp/armhf/{vmlinuz,initrd.img} .
echo "# See https://www.raspberrypi.org/documentation/configuration/config-txt.md
# for many tuning options (e.g. monitor resolution) that you can put in this file.
kernel vmlinuz
initramfs initrd.img" > config.txt
server_ip=$(ip route get 192.168.67.0 | awk '/src/ { print $NF }')
echo "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline rootwait init=/sbin/init-ltsp root=/dev/nbd0 nbdroot=$server_ip:/opt/ltsp/armhf" > cmdline.txt
ΠΡΟΣΟΧΗ: Οι γραμμές
9-12 είναι
μία εντολή.
08) Χρειαζόμαστε οποιαδήποτε μικρή σε χωρητικότητα sd, γιατί τα αρχεία που θα αντιγράψουμε είναι <30MB.
Προετοιμάζουμε την sd σε fat32 file system. Αυτό από Ubuntu μπορείτε να το κάνετε με την εφαρμογή gparted (αν δεν την έχετε μπορείτε εύκολα να την εγκαταστήσετε μέσω του Κέντρου λογισμικού Ubuntu) και από windows με την εφαρμογή SD Formatter 4.0 ακολουθώντας τα 4 βήματα του INSTALL RASPBIAN WITH NOOBS (
https://www.raspberrypi.org/learning/software-guide/quickstart/).
Προσοχή: Αν έχετε αρχεία στην sd θα διαγραφούν!
9) Αντιγράφουμε όλα τα αρχεία από το φάκελο Έγγραφα/RaspberryPi/sd_card στην sd.
Αν το micro sd reader δεν το έχουμε στο server: α) Μεταφέρουμε πρώτα τα αρχεία από το server σε ένα flash drive, β) συνδέουμε στον ίδιο υπολογιστή flash+sd, γ) μεταφέρουμε τα αρχεία από το flash στην sd.
Υπάρχει και η λύση να προμηθευτούμε για το server, ένα USB micro sd reader, των οποίων οι τιμές πλέον ξεκινάνε από τα 2€!
10) Τοποθετούμε την sd στο Raspberry και αφού το έχουμε συνδέσει στο τοπικό μας δίκτυο, το τροφοδοτούμε με ρεύμα. Αν έχουν πάει όλα καλά μετά από λίγο θα εμφανιστεί η γνωστή login screen.
ΠΡΟΣΘΗΚΗ ΛΟΓΙΣΜΙΚΟΥ/ΑΛΛΑΓΗ IP SERVER:A) Αν θέλουμε να εγκαταστήσουμε στον fat client επιπλέον λογισμικό ακολουθούμε τα βήματα 3 και 4, δηλαδή:
sudo ltsp-chroot -ma armhf
export FLASH_KERNEL_SKIP=true
apt-get update
apt-get dist-upgrade
apt-get install #εδώ βάζεται το όνομα του λογισμικού που θέλετε να εγκαταστήσετε
exit
sudo ltsp-update-image armhf
B) Αν αλλάξετε IP στον LTSP Server θα πρέπει να ξανά τρέξετε τις δύο τελευταίες εντολές, του 7ου βήματος, για να δημιουργηθεί ενημερωμένο cmdline.txt:
server_ip=$(ip route get 192.168.67.0 | awk '/src/ { print $NF }')
echo "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline rootwait init=/sbin/init-ltsp root=/dev/nbd0 nbdroot=$server_ip:/opt/ltsp/armhf" > $HOME/Έγγραφα/RaspberryPi/sd_card/cmdline.txt
ΠΡΟΣΟΧΗ: Στη συνέχεια αντιγράψτε το ενημερωμένο cmdline.txt, από το φάκελο Έγγραφα/RaspberryPi/sd_card, στην sd. Αντικαταστήστε το ήδη υπάρχον.
Σημείωση: Στην 1η εντολή (server_ip) ΔΕΝ αλλάζουμε την IP. Στη 2η εντολή (echo) πρόσθεσα το $HOME/Έγγραφα/RaspberryPi/sd_card/ έτσι ώστε το cmdline.txt να δημιουργείται πάντα στον sd_card φάκελο.
ΠΑΡΑΤΗΡΗΣΕΙΣ:I) Λόγω της RAM του Raspberry και των προεπιλεγμένων ρυθμίσεων του server (lts.conf), τα Raspberry θα bootάρουν ως fat client. Αυτό θα έχει ως συνέπεια και λόγω του 3ου βήματος να λείπουν ορισμένα λογισμικά ή όπως θα δείτε τα χειριστήρια τως παραθύρων εμφανίζονται αριστερά!
II) Αν θέλετε
μόνο τα Raspberry να ξεκινάνε ως
thin, στο 6ο βήμα της εγκατάστασης
αφαιρέστε το σχόλιο (
#) από την οδηγία
LTSP_FATCLIENT=False, αποθηκεύστε τις αλλαγές και κάντε επανεκκίνηση τα Raspberry. Ο server δε χρειάζεται επανεκκίνηση.
III) Αν θέλετε να ξανά ακολουθήσετε όλα τα βήματα και για να μπορέσετε να ξαναδημιουργήσετε τον εικονικό δίσκο armhf (βήμα 2 εντολή 7), θα πρέπει πρώτα να τον διαγράψετε:
sudo rm -rf /opt/ltsp/armhf
IV) Προσοχή: Αυτή η παρατήρηση αφορά
ΜΟΝΟ fat clients.
Για να μπορούμε να χρησιμοποιούμε στα fat clients, τα
GPIO (general purpose input/output) pins και να υλοποιούμε projects στο Raspberry όπως το
Python Quick Reaction Game, θα χρειαστεί να εκτελούμε εφαρμογές με δικαιώματα sudo (π.χ. sudo idle3 &). Δε θα μας ζητάει κωδικό!
Η
ενεργοποίηση αυτής της δυνατότητας μπορεί να γίνει με διάφορους τρόπους:
1ος: Με ενεργοποίηση της οδηγίας/οδηγιών RCFILE_SUDOERS στο lts.conf. Δείτε το βήμα 6.
(Μόνιμη λύση).2ος: Αν θέλουμε για μεμονωμένο
χρήστη, τότε από το Epoptes, κάνουμε δεξί κλικ στο αντίστοιχο fat client -> Εκτέλεση -> Εκτέλεση και στο Εκτέλεση εντολής γράφουμε:
sudo sh -c 'echo "username ALL=NOPASSWD: ALL" >> /etc/sudoers'
Όπου
username βάζουμε το αντίστοιχο όνομα του fat client χρήστη. Αυτό θα ισχύει μέχρι να γίνει επανεκκίνηση ο fat client.
(Προσωρινή λύση).3ος: Αν θέλουμε για ολόκληρο
group, τότε από το Epoptes και επιλέγοντας τον/τους fat client, κάνουμε δεξί κλικ -> Εκτέλεση -> Εκτέλεση και στο Εκτέλεση εντολής γράφουμε:
sudo sh -c 'echo "%groupname ALL=NOPASSWD: ALL" >> /etc/sudoers'
Όπου
groupname βάζουμε το αντίστοιχο όνομα του group. Αυτό θα ισχύει μέχρι να γίνουν επανεκκίνηση ο/οι fat client.
(Προσωρινή λύση).Η
απενεργοποίηση χωρίς επανεκκίνηση των clients μπορεί να γίνει από το Epoptes, επιλέγοντας τον/τους fat client και κάνοντας δεξί κλικ -> Εκτέλεση -> Εκτέλεση και στο Εκτέλεση εντολής γράφουμε:
sudo sed "/ALL=NOPASSWD/d" -i /etc/sudoers
Οι λύσεις βασίστηκαν στο Εκτέλεση εντολών στους clients με τα sch-scriptsV) Αν θέλετε να χρησιμοποιήσετε το Raspberry και μέσω
VGA σύνδεσης (κάνοντας χρήση του σχετικού
adaptor HDMI-->VGA), θα πρέπει να ενημερώσετε το αρχείο
config.txt που βρίσκεται στην sd.
Το ανοίγετε για επεξεργασία με διπλό αριστερό κλικ και προσθέτετε στο τέλος του τις ακόλουθες γραμμές:
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=16 #1024x768, 60Hz
Σημείωση: Αν συνδέσετε το Raspberry σε οθόνη CRT μπορείτε να δοκιμάσετε να αυξήσετε τη συχνότητα στα 85Hz, για πιο σταθερή εικόνα. Αυτό γίνεται αλλάζοντας σε hdmi_mode=19 #1024x768, 85Hz. Για περισσότερες αναλύσεις/συχνότητες ανατρέξτε στην ενότητα HDMI_MODE (DMT) στο
https://www.raspberrypi.org/documentation/configuration/config-txt.mdΕπίσης αν αλλάξετε το config.txt του φακέλου Έγγραφα/RaspberryPi/sd_card, στη συνέχεια αντιγράψτε το ενημερωμένο config.txt, από το φάκελο, στην sd. Αντικαταστήστε το ήδη υπάρχον.
ΠΡΟΣΟΧΗ: Επειδή με αυτές τις οδηγίες/εντολές εξαναγκάζουμε το Raspberry να λειτουργεί σε συγκεκριμένη ανάλυση και συχνότητα, ίσως να έχουμε προβλήματα απεικόνισης όταν αλλάζουμε οθόνες (HDMI/VGA).
Αν αφαιρέσετε τις γραμμές hdmi_group και hdmi_mode και αφήσετε
μόνο τη hdmi_force, δε θα έχετε προβλήματα απεικόνισης αλλά θα έχετε πολύ
χαμηλή ανάλυση όταν συνδέετε VGA οθόνη.
Οι οδηγίες βασίστηκαν στον επίσημο αγγλικό οδηγό του Άλκη https://help.ubuntu.com/community/UbuntuLTSP/RaspberryPi