-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
265 lines (180 loc) · 15.1 KB
/
Dockerfile
File metadata and controls
265 lines (180 loc) · 15.1 KB
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
ARG ATC_PIE_VERSION=1.10.0
ARG CROC_VERSION=10.4.2
ARG BUILDKIT_SBOM_SCAN_STAGE=true
FROM debian:latest AS build
LABEL name="elevation-generator"
LABEL org.opencontainers.image.authors="jlp04"
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
ARG TARGETARCH
ARG TARGETVARIANT
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=cache-apt-$TARGETARCH-$TARGETVARIANT \
--mount=type=cache,target=/var/lib/apt,sharing=locked,id=lib-apt-$TARGETARCH-$TARGETVARIANT \
apt update && apt dist-upgrade -y && apt --no-install-recommends install -y ca-certificates
RUN sed -i 's/http/https/g' /etc/apt/sources.list.d/*
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=cache-apt-$TARGETARCH-$TARGETVARIANT \
--mount=type=cache,target=/var/lib/apt,sharing=locked,id=lib-apt-$TARGETARCH-$TARGETVARIANT \
apt-get update && apt --no-install-recommends install -y git sudo wget && sudo apt autoclean
RUN mkdir -p /flightgear/script
WORKDIR /flightgear/script
ADD --link https://gitlab.com/flightgear/fgmeta/-/archive/next/fgmeta-next.tar.gz /dev/null
RUN git clone https://gitlab.com/flightgear/fgmeta.git
WORKDIR /flightgear/script/fgmeta
RUN git pull
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
COPY --link <<"EOF" /etc/apt/apt.conf.d/01overrides
APT::Install-Recommends "0";
APT::Get::Assume-Yes "true";
EOF
RUN useradd --no-log-init -r -u 999 -g sudo user
USER user:sudo
WORKDIR /flightgear/script/dnc-managed
RUN mkdir -p /flightgear/script/dnc-managed/flightgear/scripts/python
ARG DEBIAN_FRONTEND=noninteractive
ADD --link https://github.com/c-ares/c-ares.git#v1.34 /dev/null
ADD --link https://git.code.sf.net/p/libplib/code.git#master /dev/null
ARG branch_end=2024.1
ADD --link https://gitlab.com/flightgear/simgear/-/archive/release/${branch_end}/simgear-release-${branch_end}.tar.gz /dev/null
ADD --link https://gitlab.com/flightgear/flightgear/-/archive/release/${branch_end}/flightgear-release-${branch_end}.tar.gz /dev/null
ADD --link https://gitlab.com/flightgear/fgdata/-/archive/release/${branch_end}/fgdata-release-${branch_end}.tar.gz /dev/null
ADD --link https://gitlab.com/flightgear/openscenegraph/-/archive/release/2024-build/openscenegraph-release-2024-build.tar.gz /dev/null
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=cache-apt-$TARGETARCH-$TARGETVARIANT \
--mount=type=cache,target=/var/lib/apt,sharing=locked,id=lib-apt-$TARGETARCH-$TARGETVARIANT \
--mount=type=cache,target=/flightgear/script/dnc-managed,sharing=private,id=dnc-managed-$TARGETARCH-$TARGETVARIANT,uid=999 \
/flightgear/script/fgmeta/download_and_compile.sh -s -j$(nproc) --non-interactive -b Release --cmake-args=OSG='-DCMAKE_POLICY_DEFAULT_CMP0072=OLD -DOPENGL_PROFILE=GLCORE -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=ON -DOSG_GL3_AVAILABLE=OFF -DOpenGL_GL_PREFERENCE=LEGACY' \
CARES \
PLIB \
SIMGEAR \
FGFS \
DATA \
OSG || /flightgear/script/fgmeta/download_and_compile.sh -s -j$(nproc) --non-interactive -b Release --cmake-args=OSG='-DCMAKE_POLICY_DEFAULT_CMP0072=OLD -DOPENGL_PROFILE=GLCORE -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=ON -DOSG_GL3_AVAILABLE=OFF -DOpenGL_GL_PREFERENCE=LEGACY' \
CARES \
PLIB \
SIMGEAR \
FGFS \
DATA \
OSG
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=cache-apt-$TARGETARCH-$TARGETVARIANT \
--mount=type=cache,target=/var/lib/apt,sharing=locked,id=lib-apt-$TARGETARCH-$TARGETVARIANT \
--mount=type=cache,target=/flightgear/script/dnc-managed,sharing=private,id=dnc-managed-$TARGETARCH-$TARGETVARIANT,uid=999 \
/flightgear/script/fgmeta/download_and_compile.sh -s -j$(nproc) --non-interactive -b Release --reset-origin-url --cmake-args=OSG='-DCMAKE_POLICY_DEFAULT_CMP0072=OLD -DOPENGL_PROFILE=GLCORE -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=ON -DOSG_GL3_AVAILABLE=OFF -DOpenGL_GL_PREFERENCE=LEGACY' \
CARES \
PLIB \
SIMGEAR \
FGFS \
DATA \
OSG || /flightgear/script/fgmeta/download_and_compile.sh -s -j$(nproc) --non-interactive -b Release --reset-origin-url --cmake-args=OSG='-DCMAKE_POLICY_DEFAULT_CMP0072=OLD -DOPENGL_PROFILE=GLCORE -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=ON -DOSG_GL3_AVAILABLE=OFF -DOpenGL_GL_PREFERENCE=LEGACY' \
CARES \
PLIB \
SIMGEAR \
FGFS \
DATA \
OSG && sudo cp --preserve=all -R /flightgear/script/dnc-managed/install /tmp/install && sudo cp --preserve=all -R /flightgear/script/dnc-managed/flightgear/scripts/python/TerraSync /tmp/TerraSync
RUN sudo rm -rf /var/lib/apt/lists/* /var/cache/apt/*
RUN sudo rm /etc/apt/apt.conf.d/01overrides
WORKDIR /
ARG ATC_PIE_VERSION
RUN sudo wget https://sourceforge.net/projects/atc-pie/files/ATC-pie-$ATC_PIE_VERSION.tar.gz
RUN sudo tar xzf ATC-pie-$ATC_PIE_VERSION.tar.gz
RUN sudo rm /ATC-pie-$ATC_PIE_VERSION.tar.gz
RUN sudo chown -R user:sudo ATC-pie-$ATC_PIE_VERSION
COPY --link <<"EOF" /generate_elevation.sh
#!/bin/bash
export ROUNDED_TOP=$(python3 -c \
"if (float($1) < 0):
print(round((float($1) + 0.5)))
else:
print(round((float($1) + 0.5)))")
export ROUNDED_BOTTOM=$(python3 -c \
"if (float($3) < 0):
print(round((float($3) - 0.5)))
else:
print(round((float($3) - 0.5)))")
export ROUNDED_LEFT=$(python3 -c \
"if (float($2) < 0):
print(round((float($2) - 0.5)))
else:
print(round((float($2) - 0.5)))")
export ROUNDED_RIGHT=$(python3 -c \
"if (float($4) < 0):
print(round((float($4) + 0.5)))
else:
print(round((float($4) + 0.5)))")
pushd /flightgear/script/dnc-managed/flightgear/scripts/python/TerraSync/
./terrasync.py -t ~/.fgfs/TerraSync/ --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/ts/
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/ts/ --only-subdir Airports
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/ts/ --only-subdir Models
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/ts/ --only-subdir Objects
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/ts/ --only-subdir Terrain
./terrasync.py -t ~/.fgfs/TerraSync/ --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/o2c/ --only-subdir osm2city
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/o2c/ --only-subdir Buildings
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/o2c/ --only-subdir Details
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/o2c/ --only-subdir Pylons
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/o2c/ --only-subdir Roads
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://de1mirror.flightgear.org/o2c/ --only-subdir Trees
./terrasync.py -t ~/.fgfs/TerraSync/ --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/ts/
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/ts/ --only-subdir Airports
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/ts/ --only-subdir Models
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/ts/ --only-subdir Objects
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/ts/ --only-subdir Terrain
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/o2c/ --only-subdir Buildings
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/o2c/ --only-subdir Details
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/o2c/ --only-subdir Pylons
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/o2c/ --only-subdir Roads
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://terrasync.eti.pg.gda.pl/o2c/ --only-subdir Trees
./terrasync.py -t ~/.fgfs/TerraSync/ --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/ws2/
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/ws2/ --only-subdir Airports
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/ws2/ --only-subdir Models
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/ws2/ --only-subdir Objects
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/ws2/ --only-subdir Terrain
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/osm2city/ --only-subdir Buildings
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/osm2city/ --only-subdir Details
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/osm2city/ --only-subdir Pylons
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/osm2city/ --only-subdir Roads
./terrasync.py -t ~/.fgfs/TerraSync/ -r --top $ROUNDED_TOP --bottom $ROUNDED_BOTTOM --left $ROUNDED_LEFT --right $ROUNDED_RIGHT --report -u https://us1mirror.flightgear.org/terrasync/osm2city/ --only-subdir Trees
popd
pushd /ATC-pie-${ATC_PIE_VERSION}
LD_LIBRARY_PATH=/flightgear/script/dnc-managed/install/openscenegraph/lib ./mkElevMap.py $1,$2 $3,$4 61 -- /flightgear/script/dnc-managed/install/flightgear/bin/fgelev
mkdir OUTPUT/elev
mv OUTPUT/auto.elev OUTPUT/elev/$5.elev
pushd OUTPUT
mkdir -p bg/$5
curScale=14000000
curChangeBy=$(( $curScale / 2 ))
while [ $curChangeBy -ne 0 ]; do wget "https://render.openstreetmap.org/cgi-bin/export?bbox=$2,$3,$4,$1&scale=$curScale&format=png&token=$6" -O map.png && curScale=$(( $curScale - $curChangeBy )) || curScale=$(( $curScale + $curChangeBy )) && curChangeBy=$(( $curChangeBy / 2 )); done; wget "https://render.openstreetmap.org/cgi-bin/export?bbox=$2,$3,$4,$1&scale=$curScale&format=png&token=$6" -O map.png || (curScale=$(( $curScale + 1 )) && wget "https://render.openstreetmap.org/cgi-bin/export?bbox=$2,$3,$4,$1&scale=$curScale&format=png&token=$6" -O map.png || (curScale=$(( $curScale + 1 )) && wget "https://render.openstreetmap.org/cgi-bin/export?bbox=$2,$3,$4,$1&scale=$curScale&format=png&token=$6" -O map.png || (curScale=$(( $curScale + 1 )) && wget "https://render.openstreetmap.org/cgi-bin/export?bbox=$2,$3,$4,$1&scale=$curScale&format=png&token=$6" -O map.png)))
magick map.png -alpha set -channel A -evaluate Divide 2 $5-osm.png
mv $5-osm.png bg/$5/$5-osm.png
croc send elev/$5.elev bg/$5/$5-osm.png
popd
popd
EOF
FROM debian:latest AS build-go
ARG CROC_VERSION
ENV GO_VERSION=1.24
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt --no-install-recommends install -y golang-$GO_VERSION-go git ca-certificates && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
ADD --link https://github.com/schollz/croc.git#v${CROC_VERSION} /croc-v$CROC_VERSION
WORKDIR /croc-v$CROC_VERSION
ENV CGO_ENABLED=0
ENV LDFLAGS='-extldflags "-static"'
ARG TARGETARCH
ARG TARGETVARIANT
RUN --mount=type=cache,target=/root/.cache/go-build,id=cache-go-$TARGETARCH-$TARGETVARIANT /usr/lib/go-$GO_VERSION/bin/go build -ldflags "$LDFLAGS" -o croc
RUN rm -rf /root/.cache/go-build/*
RUN tar -czvf croc_v${CROC_VERSION}_Linux-unknown.tar.gz croc LICENSE
RUN sha256sum *.tar.gz > croc_v${CROC_VERSION}_checksums.txt
FROM debian:latest AS run
ARG ATC_PIE_VERSION
ARG CROC_VERSION
COPY --from=build /tmp/TerraSync /flightgear/script/dnc-managed/flightgear/scripts/python/TerraSync
COPY --from=build /tmp/install /flightgear/script/dnc-managed/install
COPY --from=build /ATC-pie-$ATC_PIE_VERSION /ATC-pie-$ATC_PIE_VERSION
COPY --from=build /generate_elevation.sh /generate_elevation.sh
COPY --from=build-go /croc-v$CROC_VERSION/croc_v${CROC_VERSION}_Linux-unknown.tar.gz /v$CROC_VERSION/
COPY --from=build-go /croc-v$CROC_VERSION/croc_v${CROC_VERSION}_checksums.txt /v$CROC_VERSION/
RUN chmod +x ./generate_elevation.sh
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt --no-install-recommends install -y curl ca-certificates python3 python-is-python3 python3-pyqt5 libopengl0 && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
RUN set -o pipefail && curl https://getcroc.schollz.com | bash || curl https://getcroc.schollz.com | sed 's^croc_base_url="https://github.com/schollz/croc/releases/download"^croc_base_url="file://"^g' | bash
RUN rm -R /v$CROC_VERSION /tmp/*
RUN mkdir -p ~/.fgfs/TerraSync
VOLUME ["/root/.fgfs/TerraSync"]
WORKDIR /ATC-pie-$ATC_PIE_VERSION
ENTRYPOINT ["/generate_elevation.sh"]