Как использовать команду изменения каталога CD и исходных текстов в рецепте сингулярности - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь создать контейнер сингулярности для моделирования робота Emika Franka.Для этого мне нужно использовать catkin для сборки moveit examples и panda_config из репозиториев GitHub.Тем не менее, я продолжаю сталкиваться с некоторыми проблемами из-за моего понимания того, как Singularity монтирует контейнер относительно моих основных системных папок.Я использую рецепт ниже, чтобы построить контейнер с командой sudo singularity build --sandbox ros-kinetic-pandasim-xenial/ recipes/ros_kinetic_pandasim_xenial/ros_kinetic_pandasim_xenial.def.

ros_kinetic_pandasim_xenial recipe

# Ros kinetic panda simulation ubuntu xenial singularity container recipe file
Bootstrap: docker
From: osrf/ros:kinetic-desktop-full-xenial

%help
    singularity container with Ros kinetic and Gazebo7 for the dynamic simulation of the Emika Franka Panda robot.

%post
    echo "Setting up ros kinetic emika Franka container."

    ## Set user permissions to root ##
    chmod 755 /root

    ## Retrieve updates ##
    apt-get update

    ## Install ros dependencies for building packages
    apt-get install -y python-rosinstall python-rosinstall-generator python-wstool build-essential

    ## Install additional ros packages ##
    apt-get install -y ros-kinetic-joint-state-controller ros-kinetic-controller-manager* ros-kinetic-joint-trajectory-controller
    apt-get install -y ros-kinetic-effort-controllers ros-kinetic-gazebo-ros* ros-kinetic-gazebo-ros-control ros-kinetic-rviz*
    apt-get install -y ros-kinetic-catkin python-catkin-tools

    ## Install other needed packages ##
    apt-get install -y usbutils wget libboost-filesystem-dev libjsoncpp-dev

    ## Setup ros dependency tool ##
    rosdep update

    ## Install MoveIt, MoveIt tutorials and the panda_movit_config files ##
    apt-get install -y ros-kinetic-moveit*
    . /opt/ros/kinetic/setup.sh
    mkdir -p ~/pandasim_ws/src
    cd ~/pandasim_ws/src
    git clone -b kinetic-devel https://github.com/ros-planning/moveit_tutorials.git
    git clone https://github.com/erdalpekel/panda_moveit_config.git
    rosdep install -y --from-paths . --ignore-src --rosdistro kinetic
    cd ~/pandasim_ws/
    catkin config --extend /opt/ros/kinetic
    catkin build
    . ~/pandasim_ws/devel/setup.bash

%environment

    ## Change floating point format ##
    LC_NUMERIC="en_US.UTF-8"

    ## Source ros setup file ##
    . /opt/ros/kinetic/setup.sh

    ## Source catkin setup file ##
    . ~/pandasim_ws/devel/setup.bash

Ожидаемое поведение

Я хочу, чтобы этот рецепт попал в папку ~ / pandasim_ws /, чтобы я мог выполнить сборку catkin.

Текущее поведение

В настоящее время мне выдается следующая ошибка:

#All required steps installed successfully
+ cd ~/pandasim_ws/
/bin/sh: 31: cd: can't cd to ~/pandasim_ws/
FATAL:   post proc: exit status 2
FATAL:   While performing build: while running engine: exit status 255

Основной вопрос

Может кто-нибудь дать объяснение или документацию о том, как сингулярность монтирует егоконтейнер относительно моих системных каталогов?Похоже, что он использует рабочее пространство пользователя и, следовательно, cd ~/ указывает на домашний каталог пользователя, который запустил контейнер внутри хост-системы.После / выглядит корневой каталог.Есть ли способ кд относительно папки песочницы сингулярности?Например, переменная $SINGULARITY_PATH или аргумент сборки.

1 Ответ

0 голосов
/ 12 апреля 2019

Я нашел решение.Поскольку Singularity использует оболочку sh, вы должны использовать команду bash -c для запуска команд bash.Более того, поскольку в песочнице вы действительно находитесь в основном рабочем пространстве, лучше установить ее в корневой папке, а не в домашней папке, см. документация по файлу определения .

## Install MoveIt, MoveIt tutorials and the panda_movit_config files ##
rosdep update
apt-get install -y ros-kinetic-moveit
apt-get install -y \
    ros-kinetic-catkin \
    python-catkin-tools \
    ros-kinetic-controller-manager* \
    ros-kinetic-effort-controllers \
    ros-kinetic-joint-trajectory-controller \
    ros-kinetic-rviz* \
    libboost-filesystem-dev \
    libjsoncpp-dev
bash -c "source /opt/ros/kinetic/setup.sh \
    && mkdir -p /moveit_ws/src \
    && cd /moveit_ws/src \
    && git clone -b kinetic-devel https://github.com/ros-planning/moveit_tutorials.git \
    && git clone https://github.com/erdalpekel/panda_moveit_config.git \
    && rosdep install -y --from-paths . --ignore-src --rosdistro kinetic \
    && cd /moveit_ws \
    && catkin config --extend /opt/ros/kinetic \
    && catkin build \
    && source /moveit_ws/devel/setup.bash
...