Ω Omega, mon odroid-xu4

Site personel auto-hébergé sur une carte odroid Xu4

Document modifié le : jeudi 27 juin 2019 - 18:40.

Données de l'xu4

(De chez hardkernel) :
Photo 1 du xu4 Photo 2 du xu4
ODROID-XU4 est une nouvelle génération de de carte informatique autonome plus puissante tout en restant économe en energie et pouvant gérer des variations de charges.
Offrant un support open source, la carte peut exécuter différentes versions de Linux, y compris la dernière Ubuntu 15.04 et Android 4.4 KitKat et 5,0 Lollipop.
En mettant en œuvre les interfaces eMMC 5.0, USB 3.0 et Ethernet Gigabit, le ODROID-XU4 possède des vitesses de transfert de données étonnantes, une fonctionnalité qui est de plus en plus nécessaire pour soutenir la puissance de traitement de pointe sur les appareils ARM.
Cela permet aux utilisateurs de profiter vraiment d'une mise à niveau en informatique, en particulier avec le démarrage plus rapide, la navigation Web, le réseau et les jeux 3D.

1 Achat de l'xu4 :

Commandé sur le site de "pollin.de", reçu rapidement dans une grosse boite qui contient aussi de la pub et un gros catalogue, le tout en allemand bien sur. Le prix :
1 94-810409 ODROID-XU4, 2GHz Cortex A15 & A7 79,95 EUR 79,95 EUR 1 94-810344 ODROID-XU3/XU4 eMMC-Modul, 32GB 47,95 EUR 47,95 EUR 1 94-810417 ODROID-XU4, Gehäuse, blau 7,95 EUR 7,95 EUR 1 94-351539 Stecker-Schaltnetzteil, 5V-/4A 7,95 EUR 7,95 EUR
pour un total de 153,75 € (9,95 € de transport).

C'est plus cher qu'un Raspberry, mais ce n'est pas la même chose.

2 Configuration de base :

2.1 Agrandir la partition avec odroid-utility.sh

Comme vu plus haut j'ai une carte de 32GB d'eMMC5 avec une image d'ubuntu pré-chargée dessus. Une des premiére chose à faire, est d'utiliser l'utilitaire odroid-utility.sh et d'agrandir la place disponible puis de rédémarrer pour pendre un compte la nouvelle taille. Ne pas le faire semble prendre le risque de corrompre la mémoire eMMC.

2.2 Configuration clavier et réseau

Tout est en anglais et querty. Pour passer en français j'ai installer bon nombre de pack-fr, mais cela n'a pas suffi. Dans le gestionnaire de paquet, j'ai trouvé à installer l'outil graphique de configuration de la langue qui m'a installé ce qui manquait et, magie, It' work !
Après l'utilisation d'odroid-utility.sh pour dé-activer X et redémarrer un console, rebelotte du clavier querty. J'ai testé les commandes console-data et console-setup vu sur la toile sans effet concluant. J'ai un peu galéré, essayé loadkeys fr qui fonctionne mais qui n'est pas mémorisé après un redémarrage, essai de modifier la configuration dans le fichier /etc/default/keyboard ; mais rien n'y fait la console est en querty après redemarrage.
Solution temporaire : ajouter la commande loadkeys au fichier /etc/rc.local.
odroid@omega:~$ cat /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Pour avoir le clavier azerty au boot loadkeys fr exit 0 odroid@omega:~$
Redémarrage et essaie de clavier à la demande de login, ça marche. Loguez vous et profitez pour changer de mot de passe (passwd) et le nom de xu4 dans le réseau (hostname).

Réglage du dns pour indiquer le dnsmasq du pi via network-manager (réglage enregistré dans /etc/NetworkManager/system-connections/Wired\ connection\ 1).
Réglage d'un bail dhcp avec une adresse ipv4 fixe (192.168.1.126) dans la box (Freebox révolution) (http://192.168.1.254/#Fbx.os.app.settings.Dhcp).

2.3 SSH

On suprime les clefs d'origine du xu4 :
odroid@omega:~$ sudo rm /etc/ssh/ssh_host_*
On en recréé de nouvelles sur le xu4 :
odroid@omega:~$ sudo dpkg-reconfigure openssh-server
Sur la machine autorisée à ce connecter sur l'xu4 si on n'a pas déjà de clef (Sinon on garde celle déjà utilisée)
bruno@Saucy:~$ ssh-keygen -t rsa
Je n'ai pas mis de passphrase à ma clef. (A vous de voir !)
Et on l'exporte sur l'xu4 :
bruno@Saucy:~$ ssh-copy-id -i /home/bruno/.ssh/id_rsa.pub odroid@192.168.1.125
J'ai installé dnsmasq sur un Raspberry, j'entre la configuration pour le xu4 dans le fichier /etc/hosts et redemarre le Raspberry :
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 raspberrypi 192.168.1.125 pi pi.lan.ducouet.fr 2a01:e35:8a1d:8230:ba27:ebff:fefb:b02f pi pi.lan.ducouet.fr 192.168.1.126 omega omega.lan.ducouet.fr 2a01:e35:8a1d:8230:21e:6ff:fe30:937 omega omega.lan.ducouet.fr 192.168.1.100 printer printer.lan.ducouet.fr 192.168.1.120 luke luke.lan.ducouet.fr 2a01:e35:8a1d:8230:993d:647c:250:c195 luke luke.lan.ducouet.fr 192.168.1.121 yoda yoda.lan.ducouet.fr 192.168.1.100 printer printer.lan.ducouet.fr 192.168.1.254 box box.lan.ducouet.fr
Et on test
bruno@luke:~$ ssh odroid@omega The authenticity of host 'omega (2a01:e35:8a1d:8230:21e:6ff:fe30:937)' can't be established. ECDSA key fingerprint is 39:33:10:3b:53:cf:bc:9b:db:37:ef:bb:09:7e:d2:00. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'omega,2a01:e35:8a1d:8230:21e:6ff:fe30:937' (ECDSA) to the list of known hosts. Welcome to Ubuntu 15.04 (GNU/Linux 3.10.82-56 armv7l) * Documentation: https://help.ubuntu.com/ Last login: Mon Sep 14 13:27:53 2015 from 2a01:e35:8a1d:8230:7c5f:5913:7dc9:c9c0 odroid@omega:~$
Pour désactiver la posibilité de se connecter via mot de passe : On modifie le fichier /etc/ssh/sshd_config du xu4 :
odroid@omega:/etc$ cd ssh odroid@omega:/etc/ssh$ sudo nano sshd_config ChallengeResponseAuthentication no (Déjà mis par défaut) PasswordAuthentication no UsePAM no
On relance sshd
odroid@omega:/etc/ssh$ sudo /etc/init.d/ssh reload [ ok ] Reloading ssh configuration (via systemctl): ssh.service. odroid@omega:/etc/ssh$
On se déconnecte
odroid@omega:/etc/ssh$ exit déconnexion Connection to omega closed.
On renomme le fichier id_rsa
bruno@luke:~$ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.back
On essai de se reconnecter
bruno@luke:~$ ssh odroid@omega Permission denied (publickey). bruno@luke:~$
sshd du xu4 ne demande pas de mot de passe et attend une clef valide.
On remet la clef et on essai de se connecter :
bruno@luke:~$ mv ~/.ssh/id_rsa.back ~/.ssh/id_rsa bruno@luke:~$ ssh odroid@omega Last login: Mon Sep 14 14:02:27 2015 from 2a01:e35:8a1d:8230:7c5f:5913:7dc9:c9c0 odroid@omega:~$
Si tout marche bien, sauvegardez vos clefs id_rsa et id_rsa.pub dans un endroit sûr (Il n'y a pas de passphrase). Elle pourront servir à d'autre utilisation.

Pourquoi redémarrer complétement ? If suffit pour la plupart du temps de relancer juste le service dont la configuration à été modifiée. Mais modifier le hostname, le clavier, le réseau, les mots de passe peut entrainer les effets de bord inattendus. Essayez de taper les carcactéres spéciaux avec la keymap querty minimaliste que j'ai eu sur le xu4. Que ça tombe en marche, c'est facile. que tout se remette bien aprés une coupure de courant, c'est mieux.

Pensez à documenter ce que vous faites. Dans un mois ou un an, on aura oublié des détails.

2.4 Diminuer le bruit du ventilateur

Source et dépot
De base, le ventilateur peut se faire entendre. La solution peut être sur https://github.com/nthx/odroid-xu3-fan-control.
J'ai légèrement adapté l'installation et le script sh qui fait varié la vitesse de 2 à 255. Le mode du ventilo est à 2 d'origine, commenté les lignes qui mettaient à un mode inférieur à 60 puis l'ai copié dans /sbin. Le mode d'instalation fourni demande de faire un lien symbolique de /home/odroid/odroid-xu3-fan-control/odroid-fan-controller vers /etc/init.d/, je l'ai copié dans /etc/sbin/ et modifier la ligne cmd="/home/odroid/odroid-xu3-fan-control/odroid-xu3-fan-control.sh" en cmd="/sbin/odroid-xu3-fan-control.sh".
sudo update-rc.d odroid-fan-controller defaults pour l'activer au démarage.
Dans le fichier /media/boot/boot.ini, j'ai passé le gouvernor à OnDemand.
La température au repos reste à 58°C avec "un mode" ventilo à 2, inaudible.
odroid@omega:~$ git clone https://github.com/nthx/odroid-xu3-fan-control.git odroid@omega:~$ cd ./odroid-xu3-fan-control/ ... odroid@omega:~$ cat /etc/init.d/odroid-fan-controller ..... dir="" user="root" cmd="/sbin/odroid-xu3-fan-control.sh" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" .... odroid@omega:~$ cat /sbin/odroid-xu3-fan-control.sh #!/bin/bash # Loud fan control script to lower speed of fun based on current # max temperature of any cpu # # See README.md for details. #set to false to suppress logs DEBUG=true # Make sure only root can run our script if (( $EUID != 0 )); then echo "This script must be run as root:" 1>&2 echo "sudo $0" 1>&2 exit 1 fi if [ -f /sys/devices/odroid_fan.13/fan_mode ]; then FAN=13 elif [ -f /sys/devices/odroid_fan.14/fan_mode ]; then FAN=14 else echo "This machine is not supported." exit 1 fi TEMPERATURE_FILE="/sys/devices/10060000.tmu/temp" FAN_MODE_FILE="/sys/devices/odroid_fan.$FAN/fan_mode" FAN_SPEED_FILE="/sys/devices/odroid_fan.$FAN/pwm_duty" TEST_EVERY=3 #seconds LOGGER_NAME=odroid-xu4-fan-control #make sure after quiting script fan goes to auto control function cleanup { ${DEBUG} && logger -t $LOGGER_NAME "event: quit; temp: auto" echo 1 > ${FAN_MODE_FILE} } trap cleanup EXIT function exit_xu3_only_supported { ${DEBUG} && logger -t $LOGGER_NAME "event: non-xu3 $1" exit 2 } if [ ! -f $TEMPERATURE_FILE ]; then exit_xu3_only_supported "no temp file" elif [ ! -f $FAN_MODE_FILE ]; then exit_xu3_only_supported "no fan mode file" elif [ ! -f $FAN_SPEED_FILE ]; then exit_xu3_only_supported "no fan speed file" fi current_max_temp=`cat ${TEMPERATURE_FILE} | cut -d: -f2 | sort -nr | head -1` fan_speed=0 echo "fan control started. Current max temp: ${current_max_temp}" echo "For more logs see:" echo "sudo tail -f /var/log/syslog" while [ true ]; do current_max_temp=`cat ${TEMPERATURE_FILE} | cut -d: -f2 | sort -nr | head -1` ${DEBUG} && logger -t $LOGGER_NAME "event: read_max; temp: ${current_max_temp}" if (( ${current_max_temp} >= 75000 )); then new_fan_speed=255 elif (( ${current_max_temp} >= 70000 )); then new_fan_speed=200 elif (( ${current_max_temp} >= 68000 )); then new_fan_speed=100 elif (( ${current_max_temp} >= 58000 )); then new_fan_speed=60 else new_fan_speed=20 fi if [ "$new_fan_speed" -ne "$fan_speed" ] ; then # update only if needed ${DEBUG} && logger -t $LOGGER_NAME "event: adjust; speed: ${fan_speed} -> ${new_fan_speed}" echo 0 > ${FAN_MODE_FILE} #to be sure we can manage fan echo ${new_fan_speed} > ${FAN_SPEED_FILE} # echo "event: adjust; speed: ${fan_speed} -> ${new_fan_speed}" let fan_speed=${new_fan_speed} else ${DEBUG} && logger -t $LOGGER_NAME "event: adjust; speed: no change" # echo "event: adjust; speed: no change (${fan_speed}) temp: ${current_max_temp}" fi sleep ${TEST_EVERY} done odroid@omega:$ cat /media/boot/boot.init .... # --- CPU Governor Setup --- # Uncomment only one line. New governor is set after 90secs after boot. # ------------------------------------------ # - Performance (Keep all the CPU's at Maximum frequency) # setenv governor "performance" # ------------------------------------------ # - Ondemand setenv governor "ondemand" ....
On redemarre (sudo init 6 marche bien) et on tape sudo tail -f /var/log/syslog. Le max temp est à 60000 (60° ?). Le ventilo ne descend pas en dessous de 50 mais monte moins et plus progressivement.

2.4.1 Gérer le ventilateur directement par le pilote

Ce n'est pas de moi mais de Odroid forum. Il suffit de créer une règle udev pour passer les paramètres souhaités.
odroid@omega:~$ cat /etc/udev/rules.d/60-odroid_fan2.rules DRIVER=="odroid-fan", ACTION=="add", ATTR{fan_speeds}="15 25 50 95", ATTR{temp_levels}="60 70 80" odroid@omega:~$ sudo cat /sys/devices/10060000.tmu/temp [sudo] password for odroid: sensor0 : 55000 sensor1 : 50000 sensor2 : 55000 sensor3 : 55000 sensor4 : 49000
Entre temps j'y ai rajouté un ventilateur Noctua, j'entend plus rien. Photo 3 du xu4

2.5 Les messages d'erreurs au démarage

L'xu4 et xu3-Lite n'ont pas de capteur d'energie sur la carte. Donc, vous verrez toujours ces messages d'erreurs au démarage.
[ 11.229087] [c4] INA231 2-0040: I2C write error: (-6) reg: 0x0 [ 11.233666] [c4] INA231 2-0040: ============= Probe INA231 Fail! : sensor_arm (0xFFFFFFFA) ============= [ 11.244188] [c4] INA231 2-0041: I2C write error: (-6) reg: 0x0 [ 11.249087] [c4] INA231 2-0041: ============= Probe INA231 Fail! : sensor_mem (0xFFFFFFFA) ============= [ 11.259855] [c5] INA231 2-0044: I2C write error: (-6) reg: 0x0 [ 11.264473] [c5] INA231 2-0044: ============= Probe INA231 Fail! : sensor_g3d (0xFFFFFFFA) ============= [ 11.274430] [c5] INA231 2-0045: I2C write error: (-6) reg: 0x0 [ 11.279926] [c5] INA231 2-0045: ============= Probe INA231 Fail! : sensor_kfc (0xFFFFFFFA) =============
Si vous aimeriez ne plus voir ces messages, ajouter le driver à la liste noire.
sudo nano /etc/modprobe.d/blacklist-odroid.conf
Ajoutez juste la ligne blacklist ina231_sensor et les messages disparaiteront.

2.6 Désactiver la mise en veille HDMI et activer le clavier numerique au démarage

Modification du fichier /etc/kbd/config (Trouvé sur forum Raspberry
Ne semble pas fonctionner ...
# screen blanking timeout. monitor remains on, but the screen is cleared to # range: 0-60 min (0==never) kernels I've looked at default to 10 minutes. # (see linux/drivers/char/console.c) BLANK_TIME=0 ... # Powerdown time. The console will go to DPMS Off mode POWERDOWN_TIME # minutes _after_ blanking. (POWERDOWN_TIME + BLANK_TIME after the last input) ... POWERDOWN_TIME=0 # Turn on numlock by default LEDS=+num