Mise à jour du système, juin 2017

Cela fait un moment que je n'ai pas retouché au projet, faute de temps. Mais me voici de retour pour quelques améliorations. J'ai tout d'abord commencé par vérifier que tout fonctionnait toujours correctement sans toucher à rien. Oui, j'ai bien confirmation, l'informatique est bien déterministe... ça fonctionne toujours. Si je veux repartir dans des développements, je vais sûrement avoir besoin d'autres fonctionnalités, donc d'autres paquetages et mon système n'a pas été mis à jour depuis 1 an...

Attention, actuellement, il n'est pas possible de faire une mise à jour complète du système. Certains paquetages ne doivent pas être mis à jour sous peine d'avoir un système qui ne soit plus complètement fonctionnel. Cette page est donc toujours en cours de rédaction pour tenter d'avoir un système fonctionnel avec la toute dernière version de Raspbian.

Mise à jour de la source pour RpiMonitor

Le dossier de dépôt du projet RpiMonitor a changé de localisation. Il est donc nécessaire de mettre à jour la source apt pour ces paquetages avec la commande suivante:

sudo wget http://goo.gl/vewCLL -O /etc/apt/sources.list.d/rpimonitor.list

Mise à jour des paquetages

Nous pouvons alors mettre à jour le système avec les classiques commandes, mais en ne mettant pas à jour tous les paquetages (pas nodejs, ni uv4l à cause de la mise à jour des dépendances nécessaires):

sudo apt-get update
sudo apt-get install apt apt-transport-https apt-utils bash bind9-host binutils ca-certificates cpio curl dbus dbus-x11 dmsetup dpkg dpkg-dev e2fslibs e2fsprogs file firmware-atheros firmware-brcm80211 firmware-libertas firmware-ralink firmware-realtek fontconfig fontconfig-config gdb gdbserver git git-man gnupg gpgv icedtea-7-jre-jamvm initramfs-tools isc-dhcp-client isc-dhcp-common krb5-locales libapt-inst1.5 libapt-pkg4.12 libasound2 libasound2-data libbind9-90 libc-bin libc-dev-bin libc6 libc6-dbg libc6-dev libcairo2 libcomerr2 libcurl3 libcurl3-gnutls libdbus-1-3 libdevmapper1.02.1 libdns-export100 libdns100 libdpkg-perl llibdrm-amdgpu1 ibdrm-freedreno1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libevent-2.0-5 libexpat1 libexpat1-dev libfcgi-perl libfontconfig1 libfuse2 libgcrypt20 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgif4 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgnutls-deb0-28 libgnutls-openssl27 libgraphite2-3 libgssapi-krb5-2 libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libhogweed2 libicu52 libidn11 libirs-export91 libisc-export95 libisc95 libisccc90 libisccfg-export90 libisccfg90 libjasper1 libk5crypto3 libkrb5-3 libkrb5support0 liblcms2-2 libldap-2.4-2 libllvm3.9 liblwres90 libmagic1 libmodule-build-perl libnettle4 libnspr4 libnss3 libpam-modules libpam-modules-bin libpam-runtime libpam-systemd libpam0g libpcre3 libpcsclite1 libplymouth4 libpng12-0 libpng12-dev libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 libpython2.7 libpython2.7-dev libpython2.7-minimal libpython2.7-stdlib librtmp1 libsndfile1 libsqlite3-0 libss2 libssh2-1 libssl1.0.0 libsystemd0 libtalloc2 libtasn1-6 libtdb1 libtiff5 libtirpc1 libudev1 libwbclient0 libxapian22 libxfont1 libxml2 libxpm4 locales login minicom multiarch-support ntp ntpdate openjdk-7-jre openjdk-7-jre-headless openssh-client openssh-server openssh-sftp-server openssl passwd perl perl-base perl-modules plymouth policykit-1 python-rpi.gpio python2.7 python2.7-dev python2.7-minimal python3-rpi.gpio raspi-config rpcbind rpimonitor rsyslog samba-common sed ssh sudo systemd systemd-sysv tzdata tzdata-java udev unzip vim-common vim-tiny wget wireless-regdb wpasupplicant x11-common
sudo apt-get autoremove
sudo apt-get clean

Il reste donc les paquetages "nodejs uv4l uv4l-server" et les paquetages "libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc libraspberrypi0 raspberrypi-bootloader uv4l-raspicam uv4l-raspicam-extras uv4l-renderer uv4l-webrtc" qui ne sont pas mis à jour. Leur mise à jour casse le système tel qu'il est défini actuellement.

Mise à jour des sources d'openrov-cockpit

Pour bénéficier des développements les plus récents, il est important de mettre à jour la branche de développement de l'adaptation d'openrov-cockpit. Ceci est réalisé grâce aux commandes suivantes:

cd ~/openrov-cockpit
git pull

Si mise à jour complète des paquetages

Si vous réalisez la mise à jour complète des paquetages, actuellement, il y a des problèmes qui ne sont pas tous résolus. Voici les premières pistes pour la résolution des problèmes rencontrés. Mais attention, après une mise à jour complète, la solution actuelle n'est pas fonctionnelle. Cela n'est pas très étonnant car pour réaliser une mise à jour complète, il faudrait réaliser un dist-upgrade et pas un upgrade simple, ce qui met bien en évidence la non compatibilité de la mise à jour.

Erreur d'accès au fichier pour modifier le gpio32

Une fois le tout appliqué, un petit redémarrage et c'est reparti. Mais cela ne fonctionne plus bien sûr. Donc j'ai commencé à retester étape par étape chaque composant de la solution en relançant manuelle l'application Node.js. La première erreur est une erreur de droit sur un fichier pour accéder au gpio.

Error: EACCES, permission denied '/sys/class/gpio/gpio32/value'

Au moins pour tester rapidement, je change manuellement les permissions sur ce fichier

sudo chmod 666 /sys/class/gpio/gpio32/value

Erreur sur l'accès à servoblaster

Après un deuxième lancement, j'obtiens une erreur sur l'absence du fichier /dev/servoblaster. En lançant manuellement le serveur, j'ai une erreur plus étrange: "can not parse the hardware string".

sudo /etc/init.d/servoblaster status
ERROR: /dev/servoblaster does not exist
sudo /usr/local/sbin/servod
servod: Cannot parse the hardware name string

Après une rapide recherche, il s'avère que c'est un problème connu qui se résoud assez facilement:

cat /proc/cpuinfo |grep -i hardware
Hardware : BCM2835

Ce à quoi il faut modifier le fichier PiBits/ServoBlaster/user/servod.c pour ajouter la description du matériel qui est maintenant BCM2835 et donc avoir "else if (strstr(modelstr, "BCM2709") || strstr(modelstr, "BCM2835"))".

cd ~/Src/PiBits/ServoBlaster/user
nano servod.c
# Ajouter || strstr(modelstr, "BCM2835") à la ligne #960
make
sudo make install
sudo /etc/init.d/servoblaster restart