mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-30 19:47:50 +08:00
[docker] use ubuntu 16.04 and deal with user/group ids != 1000
- Update to Ubuntu xenial and switch to new gcc-arm-embedded PPA. - Hhandle permissions for docker volumes by dynamically changing the id of user pprz to LOCAL_USER_ID. This should finally make it possible use the shared volume with the paparazzi source in docker on machines where your user/group id is not 1000
This commit is contained in:
+12
-6
@@ -8,22 +8,23 @@ help:
|
|||||||
@echo " 1. make pull - pull all pprz images"
|
@echo " 1. make pull - pull all pprz images"
|
||||||
@echo " 1. make remove_images - remove all pprz images"
|
@echo " 1. make remove_images - remove all pprz images"
|
||||||
@echo " 2. make bash - run bash on pprz-dev"
|
@echo " 2. make bash - run bash on pprz-dev"
|
||||||
|
@echo " 2. make test - run make test on pprz-dev"
|
||||||
@echo " 2. make terminator - run terminator on pprz-dev"
|
@echo " 2. make terminator - run terminator on pprz-dev"
|
||||||
@echo " 2. make paparazzi - run ./paparazzi center on pprz-dev"
|
@echo " 2. make paparazzi - run ./paparazzi center on pprz-dev"
|
||||||
@echo " 2. make start - run ./start.py on pprz-dev"
|
@echo " 2. make start - run ./start.py on pprz-dev"
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@docker build --tag=flixr/pprz-dep dep/.
|
docker build --tag=flixr/pprz-dep dep/.
|
||||||
@docker build --tag=flixr/pprz-dev dev/.
|
docker build --tag=flixr/pprz-dev dev/.
|
||||||
|
|
||||||
pull:
|
pull:
|
||||||
@docker pull flixr/pprz-dep
|
docker pull flixr/pprz-dep
|
||||||
@docker pull flixr/pprz-dev
|
docker pull flixr/pprz-dev
|
||||||
|
|
||||||
remove_images:
|
remove_images:
|
||||||
@docker rmi -f flixr/pprz-dep
|
docker rmi -f flixr/pprz-dep
|
||||||
@docker rmi -f flixr/pprz-dev
|
docker rmi -f flixr/pprz-dev
|
||||||
|
|
||||||
bash terminator:
|
bash terminator:
|
||||||
@bash run.sh -i -t flixr/pprz-dev $@
|
@bash run.sh -i -t flixr/pprz-dev $@
|
||||||
@@ -33,3 +34,8 @@ paparazzi:
|
|||||||
|
|
||||||
start:
|
start:
|
||||||
@bash run.sh -i -t flixr/pprz-dev ./start.py
|
@bash run.sh -i -t flixr/pprz-dev ./start.py
|
||||||
|
|
||||||
|
test:
|
||||||
|
@bash run.sh -i -t flixr/pprz-dev make test
|
||||||
|
|
||||||
|
.PHONY: all help build pull remove_images bash terminator paparazzi start test
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# docker export pprz-dep | gzip -c > pprz-dep.tgz
|
# docker export pprz-dep | gzip -c > pprz-dep.tgz
|
||||||
# docker import pprz-dep < pprz-dep.tgz
|
# docker import pprz-dep < pprz-dep.tgz
|
||||||
|
|
||||||
FROM ubuntu:14.04
|
FROM ubuntu:16.04
|
||||||
MAINTAINER Felix Ruess <felix.ruess@gmail.com>
|
MAINTAINER Felix Ruess <felix.ruess@gmail.com>
|
||||||
|
|
||||||
# Add Tini
|
# Add Tini
|
||||||
@@ -16,18 +16,15 @@ RUN chmod +x /tini
|
|||||||
RUN locale-gen en_US.UTF-8
|
RUN locale-gen en_US.UTF-8
|
||||||
ENV LANG en_US.UTF-8
|
ENV LANG en_US.UTF-8
|
||||||
|
|
||||||
# Set the env variable DEBIAN_FRONTEND to noninteractive
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
# add Paparazzi PPA
|
# add Paparazzi PPA
|
||||||
RUN apt-get update && apt-get install -y software-properties-common
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y software-properties-common
|
||||||
RUN add-apt-repository ppa:paparazzi-uav/ppa
|
RUN add-apt-repository ppa:paparazzi-uav/ppa
|
||||||
RUN add-apt-repository ppa:terry.guo/gcc-arm-embedded
|
RUN add-apt-repository ppa:team-gcc-arm-embedded/ppa
|
||||||
|
|
||||||
# install paparazzi-dev which pull in the dependencies
|
# install paparazzi-dev which pull in the dependencies
|
||||||
# also install cross compiler and some stuff for X
|
# also install cross compiler and some stuff for X
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
|
||||||
gcc-arm-none-eabi \
|
gcc-arm-embedded \
|
||||||
libcanberra-gtk-module \
|
libcanberra-gtk-module \
|
||||||
paparazzi-dev \
|
paparazzi-dev \
|
||||||
paparazzi-jsbsim \
|
paparazzi-jsbsim \
|
||||||
|
|||||||
+25
-22
@@ -7,13 +7,11 @@
|
|||||||
FROM flixr/pprz-dep
|
FROM flixr/pprz-dep
|
||||||
MAINTAINER Felix Ruess <felix.ruess@gmail.com>
|
MAINTAINER Felix Ruess <felix.ruess@gmail.com>
|
||||||
|
|
||||||
# Set the env variable DEBIAN_FRONTEND to noninteractive
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
|
||||||
|
|
||||||
# install some extra convenience packages
|
# install some extra convenience packages
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
|
||||||
light-themes \
|
light-themes \
|
||||||
terminator
|
terminator \
|
||||||
|
vim
|
||||||
|
|
||||||
# Clean up APT when done.
|
# Clean up APT when done.
|
||||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
@@ -21,24 +19,29 @@ RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|||||||
ENV PULSE_SERVER /run/pulse/native
|
ENV PULSE_SERVER /run/pulse/native
|
||||||
|
|
||||||
# add basic user
|
# add basic user
|
||||||
ENV USERNAME pprz
|
ENV USERNAME=pprz USER_ID=1000 USERGROUPS=sudo,dialout,plugdev
|
||||||
ENV USERGROUPS sudo,dialout
|
RUN useradd --shell /bin/bash -u $USER_ID -o -c "Paparazzi Docker user" -m $USERNAME \
|
||||||
RUN useradd -m $USERNAME && \
|
&& usermod -aG $USERGROUPS $USERNAME
|
||||||
echo "$USERNAME:$USERNAME" | chpasswd && \
|
|
||||||
usermod --shell /bin/bash $USERNAME && \
|
|
||||||
usermod -aG $USERGROUPS $USERNAME && \
|
|
||||||
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USERNAME && \
|
|
||||||
chmod 0440 /etc/sudoers.d/$USERNAME && \
|
|
||||||
usermod --uid 1000 $USERNAME && \
|
|
||||||
groupmod --gid 1000 $USERNAME
|
|
||||||
|
|
||||||
# change user
|
|
||||||
USER pprz
|
|
||||||
|
|
||||||
ENV HOME /home/$USERNAME
|
|
||||||
WORKDIR $HOME
|
|
||||||
|
|
||||||
# set gtk theme
|
# set gtk theme
|
||||||
RUN echo include \"/usr/share/themes/Ambiance/gtk-2.0/gtkrc\" > $HOME/.gtkrc-2.0
|
RUN echo include \"/usr/share/themes/Ambiance/gtk-2.0/gtkrc\" > /home/$USERNAME/.gtkrc-2.0
|
||||||
|
|
||||||
|
|
||||||
|
# handle permissions for docker volumes by dynamically changing the id of user pprz to LOCAL_USER_ID (default 1000)
|
||||||
|
# this uses https://github.com/tianon/gosu/
|
||||||
|
ENV GOSU_VERSION 1.9
|
||||||
|
RUN set -x \
|
||||||
|
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
|
||||||
|
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
|
||||||
|
&& export GNUPGHOME="$(mktemp -d)" \
|
||||||
|
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
|
||||||
|
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
|
||||||
|
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
|
||||||
|
&& chmod +x /usr/local/bin/gosu \
|
||||||
|
&& gosu nobody true
|
||||||
|
|
||||||
|
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||||
|
|
||||||
CMD ["bash"]
|
CMD ["bash"]
|
||||||
|
|||||||
Executable
+26
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# If user exists, change user and group ids, otherwise add new local user
|
||||||
|
# Either use the LOCAL_USER_ID if passed in at runtime or
|
||||||
|
# fallback
|
||||||
|
|
||||||
|
USER_NAME=${USERNAME:-pprz}
|
||||||
|
USER_ID=${LOCAL_USER_ID:-1000}
|
||||||
|
GROUP_ID=${LOCAL_GROUP_ID:-1000}
|
||||||
|
|
||||||
|
if id -u $USER_NAME > /dev/null 2>&1; then
|
||||||
|
echo "Starting with UID: $USER_ID and GID: $GROUP_ID"
|
||||||
|
# modify existing pprz user instead of creating new one
|
||||||
|
#usermod -o --uid $USER_ID $USER_NAME
|
||||||
|
groupmod -o --gid $GROUP_ID $USER_NAME
|
||||||
|
# usermod goes through all files in home dir and changes the userid, which takes a while
|
||||||
|
# since we don't want/need that here, directly change the user id in /etc/passwd
|
||||||
|
sed -i "s/$USER_NAME:x:\([0-9]*\):\([0-9]*\):/$USER_NAME:x:$USER_ID:\2:/g" /etc/passwd
|
||||||
|
else
|
||||||
|
echo "Adding new user $USER_NAME with UID: $USER_ID and GID: $GROUP_ID"
|
||||||
|
useradd --shell /bin/bash -u $USER_ID -o -c "" -m $USER_NAME
|
||||||
|
fi
|
||||||
|
|
||||||
|
export HOME=/home/$USER_NAME
|
||||||
|
|
||||||
|
exec /usr/local/bin/gosu $USER_NAME "$@"
|
||||||
@@ -105,6 +105,8 @@ docker run \
|
|||||||
${PULSE_AUDIO_OPTS} \
|
${PULSE_AUDIO_OPTS} \
|
||||||
${USB_OPTS} \
|
${USB_OPTS} \
|
||||||
${SHARE_PAPARAZZI_HOME_OPTS} \
|
${SHARE_PAPARAZZI_HOME_OPTS} \
|
||||||
|
-e LOCAL_USER_ID=`id -u` \
|
||||||
|
-e LOCAL_GROUP_ID=`id -g` \
|
||||||
--rm $args
|
--rm $args
|
||||||
|
|
||||||
# remember exit status
|
# remember exit status
|
||||||
|
|||||||
Reference in New Issue
Block a user