-
Notifications
You must be signed in to change notification settings - Fork 797
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
208 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# Get the base Ubuntu/GTSAM image from Docker Hub | ||
FROM dellaert/ubuntu-gtsam-python:bionic | ||
|
||
# Things needed to get a python GUI | ||
ENV DEBIAN_FRONTEND noninteractive | ||
RUN apt-get install -y python-tk | ||
RUN pip install matplotlib | ||
|
||
# Install a VNC X-server, Frame buffer, and windows manager | ||
RUN apt-get install -y x11vnc xvfb fluxbox | ||
|
||
# Finally, install wmctrl needed for bootstrap script | ||
RUN apt-get install -y wmctrl | ||
|
||
# Copy bootstrap script and make sure it runs | ||
COPY bootstrap.sh / | ||
|
||
CMD '/bootstrap.sh' |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#!/bin/bash | ||
|
||
# Based on: http://www.richud.com/wiki/Ubuntu_Fluxbox_GUI_with_x11vnc_and_Xvfb | ||
|
||
main() { | ||
log_i "Starting xvfb virtual display..." | ||
launch_xvfb | ||
log_i "Starting window manager..." | ||
launch_window_manager | ||
log_i "Starting VNC server..." | ||
run_vnc_server | ||
} | ||
|
||
launch_xvfb() { | ||
local xvfbLockFilePath="/tmp/.X1-lock" | ||
if [ -f "${xvfbLockFilePath}" ] | ||
then | ||
log_i "Removing xvfb lock file '${xvfbLockFilePath}'..." | ||
if ! rm -v "${xvfbLockFilePath}" | ||
then | ||
log_e "Failed to remove xvfb lock file" | ||
exit 1 | ||
fi | ||
fi | ||
|
||
# Set defaults if the user did not specify envs. | ||
export DISPLAY=${XVFB_DISPLAY:-:1} | ||
local screen=${XVFB_SCREEN:-0} | ||
local resolution=${XVFB_RESOLUTION:-1280x960x24} | ||
local timeout=${XVFB_TIMEOUT:-5} | ||
|
||
# Start and wait for either Xvfb to be fully up or we hit the timeout. | ||
Xvfb ${DISPLAY} -screen ${screen} ${resolution} & | ||
local loopCount=0 | ||
until xdpyinfo -display ${DISPLAY} > /dev/null 2>&1 | ||
do | ||
loopCount=$((loopCount+1)) | ||
sleep 1 | ||
if [ ${loopCount} -gt ${timeout} ] | ||
then | ||
log_e "xvfb failed to start" | ||
exit 1 | ||
fi | ||
done | ||
} | ||
|
||
launch_window_manager() { | ||
local timeout=${XVFB_TIMEOUT:-5} | ||
|
||
# Start and wait for either fluxbox to be fully up or we hit the timeout. | ||
fluxbox & | ||
local loopCount=0 | ||
until wmctrl -m > /dev/null 2>&1 | ||
do | ||
loopCount=$((loopCount+1)) | ||
sleep 1 | ||
if [ ${loopCount} -gt ${timeout} ] | ||
then | ||
log_e "fluxbox failed to start" | ||
exit 1 | ||
fi | ||
done | ||
} | ||
|
||
run_vnc_server() { | ||
local passwordArgument='-nopw' | ||
|
||
if [ -n "${VNC_SERVER_PASSWORD}" ] | ||
then | ||
local passwordFilePath="${HOME}/.x11vnc.pass" | ||
if ! x11vnc -storepasswd "${VNC_SERVER_PASSWORD}" "${passwordFilePath}" | ||
then | ||
log_e "Failed to store x11vnc password" | ||
exit 1 | ||
fi | ||
passwordArgument=-"-rfbauth ${passwordFilePath}" | ||
log_i "The VNC server will ask for a password" | ||
else | ||
log_w "The VNC server will NOT ask for a password" | ||
fi | ||
|
||
x11vnc -ncache 10 -ncache_cr -display ${DISPLAY} -forever ${passwordArgument} & | ||
wait $! | ||
} | ||
|
||
log_i() { | ||
log "[INFO] ${@}" | ||
} | ||
|
||
log_w() { | ||
log "[WARN] ${@}" | ||
} | ||
|
||
log_e() { | ||
log "[ERROR] ${@}" | ||
} | ||
|
||
log() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ${@}" | ||
} | ||
|
||
control_c() { | ||
echo "" | ||
exit | ||
} | ||
|
||
trap control_c SIGINT SIGTERM SIGHUP | ||
|
||
main | ||
|
||
exit |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Build command for Docker image | ||
# TODO(dellaert): use docker compose and/or cmake | ||
# Needs to be run in docker/ubuntu-gtsam-python-vnc directory | ||
docker build -t dellaert/ubuntu-gtsam-python-vnc:bionic . |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# After running this script, connect VNC client to 0.0.0.0:5900 | ||
docker run -it \ | ||
--workdir="/usr/src/gtsam" \ | ||
-p 5900:5900 \ | ||
dellaert/ubuntu-gtsam-python-vnc:bionic |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# Get the base Ubuntu/GTSAM image from Docker Hub | ||
FROM dellaert/ubuntu-gtsam:bionic | ||
|
||
# Install pip | ||
RUN apt-get install -y python-pip python-dev | ||
|
||
# Install python wrapper requirements | ||
RUN pip install -r /usr/src/gtsam/cython/requirements.txt | ||
|
||
# Run cmake again, now with cython toolbox on | ||
WORKDIR /usr/src/gtsam/build | ||
RUN cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DGTSAM_USE_SYSTEM_EIGEN=ON \ | ||
-DGTSAM_WITH_EIGEN_MKL=OFF \ | ||
-DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \ | ||
-DGTSAM_BUILD_TIMING_ALWAYS=OFF \ | ||
-DGTSAM_BUILD_TESTS=OFF \ | ||
-DGTSAM_INSTALL_CYTHON_TOOLBOX=ON \ | ||
.. | ||
|
||
# Build again, as ubuntu-gtsam image cleaned | ||
RUN make -j3 install && make clean | ||
|
||
# Needed to run python wrapper: | ||
RUN echo 'export PYTHONPATH=/usr/local/cython/' >> /root/.bashrc | ||
|
||
# Run bash | ||
CMD ["bash"] |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Build command for Docker image | ||
# TODO(dellaert): use docker compose and/or cmake | ||
docker build --no-cache -t dellaert/ubuntu-gtsam-python:bionic . |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Get the base Ubuntu image from Docker Hub | ||
FROM dellaert/ubuntu-boost-tbb-eigen3:bionic | ||
|
||
# Install git | ||
RUN apt-get update && \ | ||
apt-get install -y git | ||
|
||
# Install compiler | ||
RUN apt-get install -y build-essential | ||
|
||
# Clone GTSAM | ||
WORKDIR /usr/src/ | ||
RUN git clone https://github.com/borglab/gtsam.git | ||
|
||
# Run cmake | ||
RUN mkdir /usr/src/gtsam/build | ||
WORKDIR /usr/src/gtsam/build | ||
RUN cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DGTSAM_USE_SYSTEM_EIGEN=ON \ | ||
-DGTSAM_WITH_EIGEN_MKL=OFF \ | ||
-DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \ | ||
-DGTSAM_BUILD_TIMING_ALWAYS=OFF \ | ||
-DGTSAM_BUILD_TESTS=OFF \ | ||
-DGTSAM_INSTALL_CYTHON_TOOLBOX=OFF \ | ||
.. | ||
|
||
# Build | ||
RUN make -j3 install && make clean | ||
|
||
# Needed to link with GTSAM | ||
RUN echo 'export LD_LIBRARY_PATH=/usr/local/lib' >> /root/.bashrc | ||
|
||
# Run bash | ||
CMD ["bash"] |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Build command for Docker image | ||
# TODO(dellaert): use docker compose and/or cmake | ||
docker build --no-cache -t dellaert/ubuntu-gtsam:bionic . |