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

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

рецепт ros_kinetic_pandasim_xenial

# 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/, чтобы я мог выполнить сборку сережки.

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

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

#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 ~/ указывает на домашний каталог пользователя, запустившего контейнер внутри хост-системы. Следующий / выглядит как корневой каталог. Есть ли способ cd относительно папки песочницы сингулярности? Например, переменная $SINGULARITY_PATH или аргумент сборки.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
778
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение. Поскольку сингулярность использует оболочку 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

Другие вопросы по теме