Introduzione
Recentemente, mentre lavoravo alla tesi, mi sono trovato di fronte alla necessità di creare un'immagine di Ubuntu per un single-board computer già dotato di ROS (Robot Operating System – sistema operativo per robot). In breve, la tesi è dedicata alla gestione di un gruppo di robot. I robot sono dotati di due ruote e di tre sensori di distanza. Tutto questo è controllato tramite ROS, che gira sulla scheda ODROID-C2.

Robot Ladybug. Scusa per la bassa qualità della foto
Non avevo né il tempo né la voglia di installare ROS su ogni singolo robot, pertanto è emersa la necessità di un'immagine di sistema con ROS già installato. Dopo aver navigato tra le risorse di internet, ho trovato diversi approcci su come potesse essere fatto.
In generale, tutte le soluzioni trovate possono essere suddivise nelle seguenti categorie.
- Programmi che creano un'immagine da un sistema pronto e configurato (, , , systemback e altri.)
- Progetti che consentono di creare la propria immagine (, )
- Creazione manuale dell'immagine ( e , in aggiunta a )
L'uso di soluzioni della prima categoria sembrava l'opzione più semplice e allettante, tuttavia non sono riuscito a creare un'immagine live del sistema per ODROID. Le soluzioni della seconda categoria non erano adatte a me a causa della soglia di accesso piuttosto elevata. Anche la creazione manuale seguendo i tutorial disponibili non era fattibile, poiché nella mia immagine non c'era un filesystem compresso.
Alla fine, dopo aver scoperto un video su chroot (chroot — change root, link al video alla fine del post) e le sue funzionalità, ho deciso di utilizzarlo. Di seguito descriverò il mio caso specifico di personalizzazione di Ubuntu per sviluppatori di robotica.
Dati di origine:
- L'intero processo di modifica dell'immagine (eccetto la scrittura sulla scheda SD utilizzando balenaEtcher) è stato eseguito sul sistema operativo Ubuntu 18.04.
- Il sistema operativo che ho modificato è – Ubuntu 18.04.3 versione desktop mate.
- La macchina su cui deve funzionare il sistema assemblato è – ODROID-C2.
Preparazione dell'immagine
Scarichiamo l'immagine di Ubuntu per ODROID da
Estraiamo l'archivio
unxz –kvCreiamo una directory in cui monteremo l'immagine
mkdir mntIdentifichiamo la partizione su cui si trova il filesystem
fileCerchiamo la partizione con il filesystem in formato ext2, ext3 o ext4. Abbiamo bisogno dell'indirizzo dell'inizio della partizione (evidenziato in rosso nello screenshot):

Nota. La posizione del filesystem può essere vista anche tramite l'utilità parted.Montiamo l'immagine
sudo mount -o loop,offset=$((264192*512)) mnt/La partizione di cui abbiamo bisogno inizia con il blocco 264192 (potresti avere numeri diversi), la dimensione di un blocco è di 512 byte, moltiplichiamo per ottenere l'offset in byte.
Andiamo nella cartella con il sistema montato e ci chrootiamo.
cd mnt/ sudo chroot ~/livecd/mnt/ bin/sh~/livecd/mnt — percorso completo della directory con il sistema montato
bin/sh — shell (può essere sostituita anche con bin/bash)
Ora possiamo iniziare a installare i pacchetti e le applicazioni necessarie.
Installazione di ROS
Ho installato l'ultima versione di ROS (ROS Melodic) secondo .
Aggiorniamo l'elenco dei pacchetti
sudo apt-get updateQui ho riscontrato un errore:
Err:6 http://deb.odroid.in/c2 bionic InRelease Le seguenti firme non erano valide: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)È legato al fatto che la chiave per la firma dei pacchetti è scaduta. Per aggiornare le chiavi digitiamo:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9Prepariamo il sistema per l'installazione di ROS
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo apt updateInstalliamo ROS
Sfortunatamente, non sono riuscito a installare la versione desktop di ROS, quindi ho installato solo i pacchetti di base:sudo apt install ros-melodic-ros-base apt search ros-melodicNota 1. Durante l'installazione è emerso occasionalmente un errore:
dpkg: errore: impossibile scrivere il record della database di stato riguardo 'iputils-ping' in '/var/lib/dpkg/status': Spazio esaurito sul dispositivoSi risolve pulendo la cache dell'utilità apt:
sudo apt-get clean; sudo apt-get autocleanNota 2. Dopo l'installazione, dobbiamo sorgere (source) con il comando:
source /opt/ros/melodic/setup.bashnon sarà possibile, poiché non abbiamo avviato bash, quindi NON dobbiamo digitarlo nel terminale.
Installiamo le dipendenze necessarie
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateConfigurazione dei permessi
Poiché ci siamo chrootati e, di fatto, stiamo eseguendo tutte le operazioni con i privilegi di root del sistema raccolto, anche ROS verrà eseguito solo con i privilegi di superutente.
Nel tentativo di avviare roscore senza sudo si verifica il seguente errore:Traceback (most recent call last): File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 230, in main write_pid_file(options.pid_fn, options.core, options.port) File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 106, in write_pid_file with open(pid_fn, "w") as f: IOError: [Errno 13] Permesso negato: '/home/user/.ros/roscore-11311.pid'Per evitare che l'errore si verifichi, cambiamo ricorsivamente i permessi della cartella home dell'utente ROS. Per fare ciò digitiamo:
sudo rosdep fix-permissionsInstalliamo i pacchetti rviz e rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Finiture finali
- Uscire da chroot:
exit - Smontiamo l'immagine
cd .. sudo umount mnt/ - Imballiamo l'immagine del sistema in un archivio
xz –ckv1
Tutto! Ora con puoi scrivere l'immagine del sistema su scheda SD, inserirla in ODROID-C2, e avrai Ubuntu con ROS installato!
Link:
- Il video che parla di come chrootarsi in linux e perché è utile è stato molto utile:

Fonte: habr.com

