From 7d508765d0827290b03e3295756b0be9273af751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=93=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=B0=D1=80=D1=8C?= Date: Sun, 14 Jun 2026 16:17:27 +0300 Subject: [PATCH] feat: pre-install typing-extensions to ensure smooth upgrades for apt-installed packages --- cobot/commands/local_setup.py | 8 ++++++++ scripts/setup_ros2_desktop.sh | 4 ++++ scripts/setup_ros2_ros_base.sh | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/cobot/commands/local_setup.py b/cobot/commands/local_setup.py index 82aa5e4..f7b5c9d 100644 --- a/cobot/commands/local_setup.py +++ b/cobot/commands/local_setup.py @@ -196,6 +196,14 @@ def _ensure_root_pip_break(p: process.StepProgress) -> None: ">> /root/.config/pip/pip.conf )" ) process.stream(privilege.sudo(["bash", "-c", snippet]), on_line=p.log) + # rosdep calls `pip install -U ` which tries to upgrade all transitive deps, + # including packages installed by apt that have no pip RECORD file. Pre-installing + # them via pip creates the RECORD so the later upgrade can proceed cleanly. + process.stream( + privilege.sudo(["pip3", "install", "--break-system-packages", + "--ignore-installed", "typing-extensions"]), + on_line=p.log, + ) def _register_rosdep_source(p: process.StepProgress, env: dict) -> None: diff --git a/scripts/setup_ros2_desktop.sh b/scripts/setup_ros2_desktop.sh index a7b2b61..617202f 100755 --- a/scripts/setup_ros2_desktop.sh +++ b/scripts/setup_ros2_desktop.sh @@ -62,6 +62,10 @@ sudo mkdir -p /root/.config/pip if ! sudo grep -qs 'break-system-packages' /root/.config/pip/pip.conf 2>/dev/null; then printf '[global]\nbreak-system-packages = true\n' | sudo tee -a /root/.config/pip/pip.conf > /dev/null fi +# rosdep uses `pip install -U` which tries to upgrade apt-installed packages that +# have no pip RECORD file (e.g. typing-extensions). Pre-installing via pip creates +# the RECORD so subsequent upgrades succeed. +sudo pip3 install --break-system-packages --ignore-installed typing-extensions PROGRESS 100 "Done" echo "ROS2 Jazzy Desktop installed successfully." diff --git a/scripts/setup_ros2_ros_base.sh b/scripts/setup_ros2_ros_base.sh index 02b0724..84e2173 100755 --- a/scripts/setup_ros2_ros_base.sh +++ b/scripts/setup_ros2_ros_base.sh @@ -62,6 +62,10 @@ sudo mkdir -p /root/.config/pip if ! sudo grep -qs 'break-system-packages' /root/.config/pip/pip.conf 2>/dev/null; then printf '[global]\nbreak-system-packages = true\n' | sudo tee -a /root/.config/pip/pip.conf > /dev/null fi +# rosdep uses `pip install -U` which tries to upgrade apt-installed packages that +# have no pip RECORD file (e.g. typing-extensions). Pre-installing via pip creates +# the RECORD so subsequent upgrades succeed. +sudo pip3 install --break-system-packages --ignore-installed typing-extensions PROGRESS 100 "Done" echo "ROS2 Jazzy (ros-base) installed successfully."