@@ -18,6 +18,7 @@ RUN apt-get -q update \
18
18
clang-tools \
19
19
python3-pip \
20
20
python3-dev \
21
+ python3-venv \
21
22
lsb-release \
22
23
wget \
23
24
gnupg \
@@ -38,14 +39,14 @@ RUN apt-get -q update \
38
39
39
40
FROM ci AS robot
40
41
41
- # Configure a new non-root user
42
- ARG USERNAME=blue
42
+ #
43
+ # Ubuntu 24.04 "Noble", which is used as the base image for
44
+ # jazzy and rolling images, now includes a user "ubuntu" at UID 1000
45
+ ARG USERNAME=ubuntu
43
46
ARG USER_UID=1000
44
47
ARG USER_GID=$USER_UID
45
48
46
- RUN groupadd --gid $USER_GID $USERNAME \
47
- && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
48
- && echo $USERNAME ALL=\( root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
49
+ RUN echo $USERNAME ALL=\( root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
49
50
&& chmod 0440 /etc/sudoers.d/$USERNAME \
50
51
&& usermod -a -G dialout $USERNAME \
51
52
&& echo "source /usr/share/bash-completion/completions/git" >> /home/$USERNAME/.bashrc
@@ -56,6 +57,16 @@ ENV DEBIAN_FRONTEND=noninteractive
56
57
USER $USERNAME
57
58
ENV USER=$USERNAME
58
59
60
+ # Python in Ubuntu is now marked as a "Externally managed environment",
61
+ # Per best practice, create a venv for local python packages
62
+ #
63
+ # These two ENVs effectively "activate" the venv for subsequent calls to
64
+ # python/pip in the Dockerfile
65
+ WORKDIR /home/$USERNAME
66
+ ENV VIRTUAL_ENV=/home/$USERNAME/.venv/blue
67
+ RUN python3 -m venv --system-site-packages --symlinks $VIRTUAL_ENV
68
+ ENV PATH="$VIRTUAL_ENV/bin:$PATH"
69
+
59
70
# Install MAVROS dependencies
60
71
WORKDIR /home/$USERNAME
61
72
RUN wget https://raw.githubusercontent.com/mavlink/mavros/ros2/mavros/scripts/install_geographiclib_datasets.sh \
@@ -97,7 +108,8 @@ RUN sudo apt-get -q update \
97
108
&& sudo rm -rf /var/lib/apt/lists/*
98
109
99
110
RUN echo "source ${USER_WORKSPACE}/install/setup.bash" >> /home/$USERNAME/.bashrc \
100
- && echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> /home/$USERNAME/.bashrc
111
+ && echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> /home/$USERNAME/.bashrc \
112
+ && echo "\n # Ensure colcon is run in the venv\n alias colcon='python3 -m colcon'" >> /home/$USERNAME/.bashrc
101
113
102
114
FROM robot AS desktop
103
115
0 commit comments