Last active
January 26, 2025 05:37
-
-
Save k-okada/8a102e8cfa7ff464e6bdcee6ca1086cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
docker run --rm -v $(pwd):/ws -ti ubuntu:22.04 /bin/bash -exec ' | |
export REPOSITORY=file:///ws/apt_repo | |
export REPOSITORY=http://packages.ros.org.jsk.imi.i.u-tokyo.ac.jp/ros-one-arm64 | |
echo "deb [trusted=yes] $REPOSITORY ./" | tee /etc/apt/sources.list.d/apt_repo.list | |
apt update | |
DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt install -y python3-rosdep2 | |
echo "yaml $REPOSITORY/local.yaml debian" | tee /etc/ros/rosdep/sources.list.d/1-apt_repo.list | |
rosdep update | |
apt install -y ros-one-pr2eus | |
bash -i | |
' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
test $(id -u) -eq 0 && (echo "do not run with root user"; exit 1) | |
test -e $(pwd)/src && (echo "please run 'rm -fr src', before you start"; exit 1) | |
set -x | |
# setup | |
which git || sudo apt install -y git | |
which curl || sudo apt install -y curl | |
test -e /sbin/tzconfig || DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC sudo -E apt-get -y install tzdata | |
which yq || (curl -LJO https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64; sudo mv yq_linux_amd64 /usr/local/bin/yq; sudo chmod a+x /usr/local/bin/yq) | |
REPOS='setup_files ros_environment cmake_modules catkin_virtualenv genmsg geneus ros_environment rospack roscpp_core genpy roslisp message_runtime gencpp gennodejs genlisp message_generation rosconsole std_msgs ros_comm pluginlib ros_comm_msgs ros bond_core nodelet_core actionlib convex_decomposition angles geometry2 geometry dynamic_reconfigure common_tutorials ros_tutorials jsk_roseus laser_geometry openslam_gmapping slam_gmapping laser_filters vision_opencv jsk_common jsk_common_msgs jsk_3rdparty rosconsole_bridge resource_retriever robot_pose_ekf robot_state_publisher class_loader kdl_parser urdf eigen_stl_containers random_numbers geometric_shapes collada_urdf jsk_model_tools rosbag_migration_rule realtime_tools image_common image_pipeline image_transport_plugins ros_control control_toolbox pr2_simulator pr2_navigation pr2_ethercat_drivers pr2_controllers pr2_apps xacro diagnostics pr2_common pr2_common_actions pr2_mechanism pr2_mechanism_msgs control_msgs navigation navigation_msgs common_msgs audio_common app_manager mongodb_store executive_smach libuvc_ros filters gazebo_ros_pkgs roslint moveit_msgs ivcon rqt_reconfigure jsk_pr2eus' | |
QUERY=$( | |
echo -n '{ "repositories": {'; | |
sep="" | |
for repo in $REPOS; do | |
echo -n "$sep \"$repo\": .repositories.\"$repo\"" | |
sep="," | |
done | |
echo -n "} }" | |
) | |
echo $QUERY | |
rm -f worker-jobs.repos | |
yq "$QUERY" $(pwd)/ros-o-builder/sources.repos | tee worker-jobs.repos | |
# clone repositories | |
test -e ros-o-builder || git clone --depth 1 https://github.com/k-okada/ros-o-builder -b build-for-jammy | |
test -e ros-deb-builder-action || git clone https://github.com/k-okada/ros-deb-builder-action -b fix_for_jsk | |
# fix | |
mkdir -p $(pwd)/.cache/ccache/ | |
sudo rm -f /etc/ros/rosdep/sources.list.d/01-local.list /etc/ros/rosdep/sources.list.d/02-remote.list | |
rm -f /tmp/prepare.sh /tmp/build.sh | |
sed "s@/home/runner@$(pwd)@g" ros-deb-builder-action/prepare.sh | sed 's/amd64/arm64/g' > /tmp/prepare.sh | |
sed "s@/home/runner@$(pwd)@g" ros-deb-builder-action/build.sh > /tmp/build.sh | |
test -e /tmp/retry_1.0.5-3build1~ubuntu0.24.04.1_arm64.deb || (curl -L https://launchpad.net/ubuntu/+archive/primary/+files/retry_1.0.5-3build1~ubuntu0.24.04.1_arm64.deb -o /tmp/retry_1.0.5-3build1~ubuntu0.24.04.1_arm64.deb; sudo dpkg -i /tmp/retry_1.0.5-3build1~ubuntu0.24.04.1_arm64.deb) | |
# fix for arm64, use apt-cacher-ng | |
#sed -i "s@--components=main,universe@--components=main,universe --architecture=arm64 --keyring=/etc/apt/trusted.gpg.d/@g" /tmp/prepare.sh | |
echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean true" | sudo debconf-set-selections | |
DEBIAN_FRONTEND=noninteractive sudo apt install -y apt-cacher-ng | |
sudo /etc/init.d/apt-cacher-ng restart | |
sed -i "s@--components=main,universe@--components=main,universe --architecture=arm64 --aptopt='Acquire::http { Proxy \"http://127.0.0.1:3142\"; }'@g" /tmp/prepare.sh | |
#debug | |
sed -i "s@mkdir -p /sbuild-nonexistent/.ros/log/@set -x; mkdir -p /build; mkdir -p /sbuild-nonexistent/.ros/log/@g" /tmp/build.sh | |
# add key | |
#sudo apt install -y gpg | |
#gpg --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C || echo "OK" | |
#gpg --export --armor 871920D1991BC93C | sudo apt-key add - && sudo apt-get update | |
# runscript | |
rm -f ppa-k-okada-keyring.gpg | |
echo -n "" | \ | |
DEB_DISTRO=jammy \ | |
SBUILD_CONF="\$extra_packages = ['$(pwd)/apt_repo_dependencies']; \$enable_network = 1; \$build_profiles = 'nocheck'; \$build_environment = { 'CCACHE_DIR' => '/tmp/ccache' };" \ | |
REPOS_FILE=$(pwd)/worker-jobs.repos \ | |
sh /tmp/prepare.sh | |
#fix | |
##sed -i "s@'/build/ccache'@'/tmp'@g" ~/.sbuildrc | |
##mkdir /tmp/ccache; chmod a+rw /tmp/ccache | |
./depends.py ./src | |
DEB_DISTRO=jammy \ | |
ROS_DISTRO=one \ | |
ROSDEP_SOURCE=$(pwd)/ros-o-builder/rosdep.yaml \ | |
sh /tmp/build.sh | |
cd apt_repo | |
apt-ftparchive packages . > Packages | |
apt-ftparchive release . > Release | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
docker run --rm --privileged --net=host -v $(pwd):/ws -ti ubuntu:24.04 /bin/bash |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -x | |
set -e | |
echo "postfix postfix/main_mailer_type string 'No configuration'" | debconf-set-selections | |
apt update && DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt install -y sudo adduser whois emacs | |
useradd -m -p $(mkpasswd user) -s /bin/bash user | |
adduser user sudo |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import sys, os | |
import subprocess | |
from pathlib import Path | |
import catkin_pkg.packages | |
import rosdep2 | |
from rosdep2.main import _get_default_RosdepLookup, get_sources_cache_dir, configure_installer_context, create_default_installer_context, get_default_installer | |
def get_depends(target_pkg, pkgs): | |
print("get_depends for ", target_pkg) | |
pkg_list = list(filter(lambda x: x[1].name==target_pkg, pkgs)) | |
if len(pkg_list) == 0: | |
print("skip \t\t\t\t\t\t\t", target_pkg) | |
return [] | |
elif len(pkg_list) > 1: | |
print("more than one package", pkg_list) | |
sys.exit(1) | |
pkg_list = pkg_list[0] | |
#depends = [pkg.name for pkg in pkg_list[1]['build_depends']+pkg_list[1]['buildtool_depends']+pkg_list[1]['exec_depends']+pkg_list[1]['test_depends'] if pkg.name in [pkg[1].name for pkg in pkgs]] | |
#depends = [pkg.name for pkg in pkg_list[1]['build_depends']+pkg_list[1]['buildtool_depends']+pkg_list[1]['exec_depends'] if pkg.condition is None or pkg.condition == '$ROS_PYTHON_VERSION == 3'] | |
depends = [pkg.name for pkg in pkg_list[1]['build_depends']+pkg_list[1]['buildtool_depends']+pkg_list[1]['exec_depends']+pkg_list[1]['test_depends'] if pkg.condition is None or pkg.condition == '$ROS_PYTHON_VERSION == 3'] | |
# skip system packages | |
system_packages = [] | |
for depend in depends: | |
# if depend in view.rosdep_defs.keys(): | |
# print(view.lookup(depend).data) | |
if depend in view.rosdep_defs.keys() and 'ubuntu' in view.lookup(depend).data.keys(): | |
system_packages.append(depend) | |
# print(">> skip system keys\t\t", depend) | |
depends = [depend for depend in depends if depend not in system_packages] | |
return depends | |
if __name__ == '__main__': | |
ws = sys.argv[1] if len(sys.argv) > 1 else "." | |
if ws.endswith('/'): | |
ws = ws[:len(ws)-1] | |
ws = Path(ws) | |
pkgs = [(path, catpkg) for (path, catpkg) in catkin_pkg.packages.find_packages(ws).items()] | |
print([pkg[1].name for pkg in pkgs]) | |
print("'{}' have {} packages".format(ws, len(list(pkgs)))) | |
class Options(object): | |
pass | |
options=Options() | |
Options.ros_distro ='debian' | |
Options.os_override ='ubuntu:jammy' | |
Options.sources_cache_dir = get_sources_cache_dir() | |
Options.verbose = False | |
Options.dependency_types = {'build', 'buildtool', 'build_export', 'buildtool_export', 'exec', 'test', 'doc'} | |
Options.as_root = {} | |
os.environ['ROS_DISTRO'] = options.ros_distro | |
os.environ['ROS_VERSION'] = '1' | |
os.environ['ROS_PYTHON_VERSION'] = '3' | |
lookup = _get_default_RosdepLookup(options) | |
view = lookup.get_rosdep_view('*default*', verbose=options.verbose) | |
target_pkgs = ["pr2eus"] | |
build_pkgs = [] | |
#target_pkgs = ["message_generation"] | |
while target_pkgs != []: | |
target_pkg = target_pkgs.pop() | |
if target_pkg in build_pkgs: | |
continue | |
target_pkgs = list(set(target_pkgs + (get_depends(target_pkg, pkgs)))) | |
# add target_pkg to buidl_pkgs | |
build_pkgs.append(target_pkg) | |
# remove target_pkg from pkgs | |
pkgs = [pkg for pkg in pkgs if pkg[1].name != target_pkg] | |
#print("target_pkgs", len(target_pkgs)) | |
print("building packages -> ", len(build_pkgs)) | |
print("unused packages -> ", len(pkgs)) | |
for pkg in pkgs: | |
#print(pkg[0]) | |
open(ws.name+"/"+pkg[0]+"/CATKIN_IGNORE",'a').close() | |
pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment