Skip to content

Instantly share code, notes, and snippets.

@wsxq2
Last active September 10, 2025 06:40
Show Gist options
  • Select an option

  • Save wsxq2/b014023d89670853769a9306f405b1d6 to your computer and use it in GitHub Desktop.

Select an option

Save wsxq2/b014023d89670853769a9306f405b1d6 to your computer and use it in GitHub Desktop.
a script that init ros2 humble on ubuntu 22.04 with docker
# may need keep proxy env when use sudo
# add `Defaults env_keep += "http_proxy https_proxy"` after `Defaults env_reset` when executing visudo
locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings
sudo apt install software-properties-common
sudo add-apt-repository universe
# sudo apt update && sudo apt install curl -y
# export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
# curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo $VERSION_CODENAME)_all.deb" # If using Ubuntu derivates use $UBUNTU_CODENAME
# sudo dpkg -i /tmp/ros2-apt-source.deb
# Update the apt sources to use Tsinghua University's mirror (with root)
mv /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
# Add ROS 2 apt repository (with root)
# export https_proxy=http://192.168.3.107:7890 # may need proxy to download from github
apt-get install curl gnupg2 -y && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 手动模拟 rosdep init (with root)
mkdir -p /etc/ros/rosdep/sources.list.d/ && curl -o /etc/ros/rosdep/sources.list.d/20-default.list -L https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
sudo apt update
sudo apt upgrade
# install ros2
sudo apt install ros-humble-desktop
# install dev tools for ros2 (such as colcon)
sudo apt install ros-dev-tools
# may need colcon clean
# sudo apt install python3-colcon-clean
# test ros2
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener
# may need for colcon build packages
# rosdep install --from-paths src --ignore-src -r -y
# 移除旧包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装最新版本
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# may need set proxy to pull from dockerhub (with root):
cat > /etc/docker/daemon.json <<EOF
{
"proxies": {
"http-proxy": "http://192.168.3.107:7890",
"https-proxy": "http://192.168.3.107:7890",
"no-proxy": "127.0.0.0/8,192.168.0.0/16"
}
}
EOF
systemctl restart docker
# 测试
sudo docker run hello-world
# 添加以普通用户运行的能力
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
# 再测试
docker run hello-world
# 设置开机自启动
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment