diff --git a/builder/image-build-ros.sh b/builder/image-build-ros.sh new file mode 100755 index 00000000..c8b258e5 --- /dev/null +++ b/builder/image-build-ros.sh @@ -0,0 +1,49 @@ +#! /usr/bin/env bash + +# +# Script for building ROS packages from scratch +# +# Copyright (C) 2022 Copter Express Technologies +# +# Author: Oleg Kalachev +# +# Distributed under MIT License (available at https://opensource.org/licenses/MIT). +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# + +set -ex # exit on error, echo commands + +# http://wiki.ros.org/Installation/Source + +ROS_DISTRO=noetic +. /etc/os-release # set $VERSION_CODENAME to Debian release code name + +echo "=== Building ROS from scratch" + +apt-get update +apt-get install -y python3-distutils python3-rosdep python3-rosinstall-generator build-essential # python3-vcstool + +# install vcstool using pip +curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py && rm get-pip.py +pip3 install -U vcstool + +rm /etc/ros/rosdep/sources.list.d/20-default.list && rosdep init +rosdep --os=debian:$VERSION_CODENAME update + +echo "Create Catkin workspace to build ROS package" +mkdir ~/ros_catkin_ws +cd ~/ros_catkin_ws + +echo "Download ROS sources" +rosinstall_generator ros_base --rosdistro $ROS_DISTRO --deps --tar > noetic.rosinstall +mkdir ./src +vcs import --input noetic.rosinstall ./src + +echo "Resolve dependencies" +rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro $ROS_DISTRO -y + +echo "Build ROS" +./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release + +source ~/ros_catkin_ws/install_isolated/setup.bash diff --git a/builder/image-build.sh b/builder/image-build.sh index 60fa5fe4..a6bf9522 100755 --- a/builder/image-build.sh +++ b/builder/image-build.sh @@ -104,7 +104,7 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/butterf ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/butterfly.socket' '/lib/systemd/system/' ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/monkey.service' '/lib/systemd/system/' # software install -${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-software.sh' +# ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-software.sh' # network setup ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-network.sh' # avahi setup @@ -113,13 +113,14 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/avahi-s # If RPi then use a one thread to build a ROS package on RPi, else use all [[ $(arch) == 'armv7l' ]] && NUMBER_THREADS=1 || NUMBER_THREADS=$(nproc --all) # Clover -${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/noetic-rosdep-clover.yaml' '/etc/ros/rosdep/' +# ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/noetic-rosdep-clover.yaml' '/etc/ros/rosdep/' ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/ros_python_paths' '/etc/sudoers.d/' ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/pigpiod.service' '/lib/systemd/system/' ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/launch.nanorc' '/usr/share/nano/' # ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/kinetic-ros-clover.rosinstall' '/home/pi/ros_catkin_ws/' # Add rename script -${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-ros.sh' ${REPO_URL} ${IMAGE_VERSION} false false ${NUMBER_THREADS} +#${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-ros.sh' ${REPO_URL} ${IMAGE_VERSION} false false ${NUMBER_THREADS} +${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-build-ros.sh' ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-validate.sh' ${BUILDER_DIR}/image-resize.sh ${IMAGE_PATH}