Instalar ROS en cualquier distro usando debootstrap y proot
Introducción
ROS (Robot Operating System) es un conjunto de paquetes de software que permite controlar gran cantidad de sensores y actuadores y que provee algoritmos preprogramados y herramientas para simulación de ambientes para robots, desafortunadamente solo se distribuye para Debian y Ubuntu.
En este momento estoy usando Void Linux como distribución principal en mi laptop pero para trabajar en mi tesis necesito tener ROS instalado, podría instalar una máquina virtual o hacer una partición con Debian, pero me da pereza configurar todo eso y me es inconveniente por múltiples razones. Recompilar ROS para mi distro es una tarea larga y tediosa (ya lo he hecho antes), así que eso tampoco es opción.
Como alternativa decidí usar proot y debooststrap para tener un entorno Debian dentro de Void, que pueda usar cuando necesite ROS sin necesidad de reiniciar ni usar una máquina virtual.
proot(1)
, una herramienta que suelo usar para
tener un entorno tipo GNU/Linux en mi teléfono Android. Si no estás
familiarizado con el concepto de
chroot(1)
te
recomiendo que vayas antes a leer sobre el tema (aunque si sigues los pasos al
pie de letra quizá no tengas ningún problema, aunque eso nunca pasa ;).
debootstrap(8)
,
una utilidad que instala una versión mínima de Debian, a la que vamos a hacer chroot.
Manos a la obra
Para comenzar vamos a instalar debootstrap y proot, esto varía de distro a distro, en mi caso ambos programas se encuentran en los repositorios oficiales de Void Linux y probablemente se encuentre también en los repos de tu distro.
$ xbps-install debootstrap proot
Una vez instalados vamos a crear una carpeta donde va a vivir el Debian que vamos a instalar.
$ mkdir -p ~/Documentos/tesis/ROS
$ cd ~/Documentos/tesis/ROS
Ahora debemos seleccionar la versión de Debian a instalar. De acuerdo con el sitio de ROS, su versión LTS Melodic Morenia sólo está disponible para Debian 9 Stretch, si vas a usar alguna otra versión verifica para que versión de Debian está disponible. El espejo de Debian más cercano a mí es el de http://mmc.geofisica.unam.mx, así que voy a ejecutar debootstrap indicándole la versión de Debian y el espejo para descargar los paquetes.
$ sudo debootstrap stretch . ftp://mmc.geofisica.unam.mx/debian/
...
I: Base system installed successfully.
Si hasta aquí todo va bien en menos de 5 minutos deberías de tener una
instalación pequeña de Debian en la carpeta de ROS
.
Bien, ahora vamos a cambiar los permisos de los archivos, ya que debootstrap insiste en ejecutarse como root aunque no sea necesario.
$ sudo chmod -R $USER:$USER .
Vamos a entrar en este entorno de Debian, para evitar confusiones, cuando ejecute comandos dentro de Debian usaré el símbolo >
para representar el prompt dentro de Debian y $
dentro de Void.
Después de este comando, la terminal se comportará como si estuvieras dentro de una instalación de Debian y podremos instalar ROS siguiendo las instrucciones oficiales de ROS.
$ proot -R . /bin/bash -l
>
Si todo salió bien ahora deberías estar en una instalación de Debian, vamos a ver su funciona.
$ cat /etc/debian_version
9.11
Como puedes ver ahora estamos dentro de Debian, pero sólo en esta terminal, si abres una nueva terminal el entorno no va a ser el de Debian, sino el de la distro que estés usando.
Esta forma de lanzar proot
hace que tu carpeta HOME este compartida entre tu
distro y Debian, lo que puede ocasionar conflicto entre los archivos de
configuración de varios programas. Si quieres usar una carpeta HOME distinta
para tu distro y Debian debes lanzar proot
así:
$ HOME=/ruta/a/HOME/para/Debian proot -R . /bin/bash -l
>
Ahora si vamos a instalar ROS, para eso necesitamos ser root en Debian. En este caso vamos a usar proot de la siguiente forma:
$ exit # salimos de la instalación de Debian
$ proot -S . /bin/bash -l # y volvemos a entrar
#
Cuando lanzamos proot
con la bandera -S
proot lanza una shell como root en
Debian, ya que cuando usamos proot no podemos usar sudo
dentro de Debian.
Para representar que estamos como root
dentro del entorno de Debian usaré el símbolo #
para el prompt.
Muy bien, ahora solo queda añadir los repositorios de ROS a Debian, actualizar e instalar ROS.
# cat <<- EOF > /etc/apt/sources.list
###### Debian Main Repos
deb http://deb.debian.org/debian/ oldstable main contrib non-free
deb http://deb.debian.org/debian/ oldstable-updates main contrib non-free
deb http://deb.debian.org/debian-security oldstable/updates main
deb http://ftp.debian.org/debian stretch-backports main
###### ROS Repo
deb http://packages.ros.org/ros/ubuntu stretch main
EOF
# apt update
# sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# sudo apt update && sudo apt install ros-melodic-desktop
Listo, ahora tienes ROS instalado en tu sistema, aún faltan algunas cosas por configurar, pero eso lo puedes leer en la documentación de ROS.
Por último, si vas a estar usando seguido ROS, probablemente quieras crear un
alias para acceder rápidamente a Debian, en bash
y zsh
harías lo siguiente
$ alias debian="proot -R ~/Documento/tesis/ROS /bin/bash -l"
$ alias debiansu="proot -S ~/Documento/tesis/ROS /bin/bash -l"
Conclusión
Siguiendo este procedimiento puedes instalar cualquier otra versión de ROS en cualquier sistema Linux, incluso en un teléfono o tablet con Android. Si tienes dificultades con el procedimiento siempre puedes acercarte al LIDSOL en busca de ayuda.