forked from OpenDroneMap/ODM
-
Notifications
You must be signed in to change notification settings - Fork 1
/
start-dev-env.sh
executable file
·145 lines (118 loc) · 4.26 KB
/
start-dev-env.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
set -eo pipefail
__dirname=$(cd $(dirname "$0"); pwd -P)
cd "${__dirname}"
if [ "$1" = "--setup" ]; then
export HOME=/home/$2
if [ ! -f .setupdevenv ]; then
echo "Recompiling environment... this might take a while."
bash configure.sh reinstall
touch .setupdevenv
apt update && apt install -y vim git
chown -R $3:$4 /code
chown -R $3:$4 /var/www
fi
echo "Adding $2 to /etc/passwd"
echo "$2:x:$3:$4::/home/$2:/bin/bash" >> /etc/passwd
echo "Adding $2 to /etc/group"
echo "$2:x:$4:" >> /etc/group
echo "Adding $2 to /etc/shadow"
echo "$2:x:14871::::::" >> /etc/shadow
echo "$2 ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
echo "odm ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
echo "echo '' && echo '' && echo '' && echo '###################################' && echo 'ODM Dev Environment Ready. Hack on!' && echo '###################################' && echo '' && cd /code" > $HOME/.bashrc
# Install qt creator
if hash qtcreator 2>/dev/null; then
has_qtcreator="YES"
fi
if [ "$has_qtcreator" != "YES" ] && [ "$5" == "YES" ]; then
apt install -y libxrender1 gdb qtcreator
fi
# Install liquidprompt
if [ ! -e "$HOME/liquidprompt" ]; then
git clone https://github.com/nojhan/liquidprompt.git --depth 1 $HOME/liquidprompt
fi
if [ -e "$HOME/liquidprompt" ]; then
echo "source $HOME/liquidprompt/liquidprompt" >> $HOME/.bashrc
echo "export LP_PS1_PREFIX='(odmdev)'" >> $HOME/.bashrc
fi
# Colors
echo "alias ls='ls --color=auto'" >> $HOME/.bashrc
# Python paths
echo $(python3 /code/opendm/context.py) >> $HOME/.bashrc
# Vim
printf "syntax on\nset showmatch\nset ts=4\nset sts=4\nset sw=4\nset autoindent\nset smartindent\nset smarttab\nset expandtab" > $HOME/.vimrc
# Misc aliases
echo "alias pdal=/code/SuperBuild/install/bin/pdal" >> $HOME/.bashrc
echo "alias opensfm=/code/SuperBuild/install/bin/opensfm/bin/opensfm" >> $HOME/.bashrc
su -c bash $2
exit 0
fi
platform="Linux" # Assumed
uname=$(uname)
case $uname in
"Darwin")
platform="MacOS"
;;
MINGW*)
platform="Windows"
;;
esac
if [[ $platform != "Linux" && $platform != "MacOS" ]]; then
echo "This script only works on Linux and MacOS."
exit 1
fi
if hash docker 2>/dev/null; then
has_docker="YES"
fi
if hash nvidia-smi 2>/dev/null; then
has_nvidia_smi="YES"
fi
if [ "$has_docker" != "YES" ]; then
echo "You need to install docker before running this script."
exit 1
fi
IMAGE_SET=NO
if [[ ! -z $IMAGE ]]; then
IMAGE_SET=YES
fi
export PORT="${PORT:=3000}"
export QTC="${QTC:=NO}"
export IMAGE="${IMAGE:=opendronemap/nodeodm}"
export GPU="${GPU:=NO}"
if [ -z "$DATA" ]; then
echo "Usage: DATA=/path/to/datasets [VARS] $0"
echo
echo "VARS:"
echo " DATA Path to directory that contains datasets for testing. The directory will be mounted in /datasets. If you don't have any, simply set it to a folder outside the ODM repository."
echo " PORT Port to expose for NodeODM (default: $PORT)"
echo " IMAGE Docker image to use (default: $IMAGE)"
echo " GPU Enable GPU support (default: $GPU)"
echo " QTC When set to YES, installs QT Creator for C++ development (default: $QTC)"
exit 1
fi
echo "Starting development environment..."
echo "Datasets path: $DATA"
echo "Expose port: $PORT"
echo "QT Creator: $QTC"
echo "Image: $IMAGE"
echo "GPU: $GPU"
if [ ! -e "$HOME"/.odm-dev-home ]; then
mkdir -p "$HOME"/.odm-dev-home
fi
USER_ID=$(id -u)
GROUP_ID=$(id -g)
USER=$(id -un)
GPU_FLAGS=""
if [[ "$GPU" != "NO" ]]; then
if [[ "$IMAGE_SET" = "NO" ]]; then
IMAGE="$IMAGE:gpu"
fi
GPU_FLAGS="--gpus all"
if [[ "$has_nvidia_smi" = "YES" ]]; then
GPU_FLAGS="$GPU_FLAGS --device /dev/nvidia0 --device /dev/nvidia-uvm --device /dev/nvidia-uvm-tools --device /dev/nvidia-modeset --device /dev/nvidiactl"
fi
fi
xhost + || true
docker run -ti --entrypoint bash --name odmdev --user root -v $(pwd):/code -v "$DATA":/datasets -p $PORT:3000 $GPU_FLAGS --privileged -e DISPLAY -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -v="/tmp/.X11-unix:/tmp/.X11-unix:rw" -v="$HOME/.odm-dev-home:/home/$USER" $IMAGE -c "/code/start-dev-env.sh --setup $USER $USER_ID $GROUP_ID $QTC"
exit 0