Dockerfile 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. # syntax=docker/dockerfile:1.7
  2. # =============================================================================
  3. # Versions
  4. # =============================================================================
  5. # Update these values whenever the NVIDIA GPU Operator driver changes.
  6. ARG NVIDIA_DRIVER_BRANCH=580
  7. ARG NVIDIA_DRIVER_VERSION=580.173.02
  8. ARG NVIDIA_DRIVER_PACKAGE_VERSION=580.173.02-1ubuntu1
  9. ARG SUNSHINE_REF=0784774
  10. ARG SUNSHINE_VERSION=v2026.730.3043
  11. ARG BUILD_DEPS_VERSION=v2026.724.203728
  12. ARG NV_CODEC_HEADERS_VERSION=n13.0.19.1
  13. # ============================================================================
  14. # Build du FFmpeg utilisé par Sunshine
  15. # nv-codec-headers volontairement limité à NVENC API 13.0
  16. # ============================================================================
  17. FROM docker.io/library/ubuntu:24.04 AS ffmpeg-build
  18. ARG BUILD_DEPS_VERSION
  19. ARG NV_CODEC_HEADERS_VERSION
  20. ENV DEBIAN_FRONTEND=noninteractive
  21. RUN apt-get update && \
  22. apt-get install -y --no-install-recommends \
  23. autoconf \
  24. automake \
  25. build-essential \
  26. ca-certificates \
  27. cmake \
  28. git \
  29. libass-dev \
  30. libfreetype6-dev \
  31. libgnutls28-dev \
  32. libmp3lame-dev \
  33. libnuma-dev \
  34. libopus-dev \
  35. libsdl2-dev \
  36. libtool \
  37. libvorbis-dev \
  38. libxcb1-dev \
  39. libxcb-shm0-dev \
  40. libxcb-xfixes0-dev \
  41. libx11-xcb-dev \
  42. libxcb-dri3-dev \
  43. make \
  44. meson \
  45. nasm \
  46. ninja-build \
  47. pkg-config \
  48. texinfo \
  49. wget \
  50. zlib1g-dev && \
  51. rm -rf /var/lib/apt/lists/*
  52. RUN git clone \
  53. --branch "${BUILD_DEPS_VERSION}" \
  54. --depth 1 \
  55. --recurse-submodules \
  56. https://github.com/LizardByte/build-deps.git \
  57. /src/build-deps
  58. # Le point important :
  59. # on remplace les nv-codec-headers utilisés pour compiler FFmpeg
  60. # par la dernière release API 13.0.
  61. RUN rm -rf /src/build-deps/third-party/FFmpeg/nv-codec-headers && \
  62. git clone \
  63. --branch "${NV_CODEC_HEADERS_VERSION}" \
  64. --depth 1 \
  65. https://github.com/FFmpeg/nv-codec-headers.git \
  66. /src/build-deps/third-party/FFmpeg/nv-codec-headers
  67. RUN cmake \
  68. -S /src/build-deps \
  69. -B /src/build-deps/build \
  70. -G "Unix Makefiles" \
  71. -DCMAKE_BUILD_TYPE=Release \
  72. -DCMAKE_INSTALL_PREFIX=/opt/build-deps \
  73. -DBUILD_ALL=OFF \
  74. -DBUILD_FFMPEG=ON \
  75. -DBUILD_FFMPEG_NV_CODEC_HEADERS=ON \
  76. -DBUILD_FFMPEG_CUDA_LLVM=OFF \
  77. -DBUILD_TESTS=OFF \
  78. -DBUILD_DOCS=OFF && \
  79. cmake --build /src/build-deps/build --parallel "$(nproc)" && \
  80. cmake --install /src/build-deps/build
  81. # ============================================================================
  82. # Build de Sunshine avec notre FFmpeg
  83. # ============================================================================
  84. FROM docker.io/nvidia/cuda:12.9.2-devel-ubuntu24.04 AS sunshine-build
  85. ARG SUNSHINE_REF
  86. ARG SUNSHINE_VERSION
  87. ENV DEBIAN_FRONTEND=noninteractive
  88. RUN apt-get update && \
  89. apt-get install -y --no-install-recommends \
  90. ca-certificates \
  91. git && \
  92. rm -rf /var/lib/apt/lists/*
  93. RUN git clone \
  94. --filter=blob:none \
  95. https://github.com/LizardByte/Sunshine.git \
  96. /src/sunshine && \
  97. cd /src/sunshine && \
  98. git checkout "${SUNSHINE_REF}" && \
  99. git submodule update --init --recursive --depth 1
  100. # Installation des dépendances de compilation de Sunshine.
  101. # --skip-cuda désactive NVFBC/CUDA dans Sunshine, PAS NVENC via FFmpeg.
  102. RUN cd /src/sunshine && \
  103. ./scripts/linux_build.sh \
  104. --sudo-off \
  105. --skip-cuda \
  106. --step=deps
  107. # Remplacement du FFmpeg précompilé de LizardByte par le nôtre.
  108. COPY --from=ffmpeg-build /opt/build-deps/ffmpeg /tmp/custom-ffmpeg
  109. RUN cd /src/sunshine && \
  110. BRANCH=master \
  111. BUILD_VERSION="${SUNSHINE_VERSION}" \
  112. COMMIT="${SUNSHINE_REF}" \
  113. ./scripts/linux_build.sh \
  114. --sudo-off \
  115. --step=cmake
  116. RUN rm -rf /src/sunshine/build/_deps/ffmpeg && \
  117. mkdir -p /src/sunshine/build/_deps/ffmpeg && \
  118. cp -a \
  119. /tmp/custom-ffmpeg/. \
  120. /src/sunshine/build/_deps/ffmpeg/
  121. RUN cd /src/sunshine && \
  122. ./scripts/linux_build.sh \
  123. --sudo-off \
  124. --step=build && \
  125. ./scripts/linux_build.sh \
  126. --sudo-off \
  127. --step=package && \
  128. cp /src/sunshine/build/cpack_artifacts/Sunshine.deb /sunshine.deb
  129. # =============================================================================
  130. # Main image
  131. # =============================================================================
  132. FROM docker.io/library/ubuntu:24.04
  133. ARG NVIDIA_DRIVER_BRANCH
  134. ARG NVIDIA_DRIVER_VERSION
  135. ARG NVIDIA_DRIVER_PACKAGE_VERSION
  136. ARG USER_NAME=ubuntu
  137. ARG USER_UID=1000
  138. ARG USER_GID=1000
  139. ENV DEBIAN_FRONTEND=noninteractive \
  140. HOME=/home/ubuntu \
  141. USER=ubuntu \
  142. DISPLAY=:20 \
  143. DISPLAY_SIZEW=1920 \
  144. DISPLAY_SIZEH=1080 \
  145. DISPLAY_REFRESH=120 \
  146. DISPLAY_DPI=96 \
  147. DISPLAY_CDEPTH=24 \
  148. VIDEO_PORT=HDMI-0 \
  149. TZ=Europe/Paris \
  150. LANG=fr_FR.UTF-8 \
  151. LANGUAGE=fr_FR:fr \
  152. LC_ALL=fr_FR.UTF-8 \
  153. XDG_RUNTIME_DIR=/tmp/runtime-ubuntu \
  154. PIPEWIRE_RUNTIME_DIR=/tmp/runtime-ubuntu \
  155. PULSE_RUNTIME_PATH=/tmp/runtime-ubuntu/pulse \
  156. PULSE_SERVER=unix:/tmp/runtime-ubuntu/pulse/native \
  157. NVIDIA_VISIBLE_DEVICES=all \
  158. NVIDIA_DRIVER_CAPABILITIES=all \
  159. EXPECTED_NVIDIA_DRIVER_VERSION=${NVIDIA_DRIVER_VERSION} \
  160. NVIDIA_I386_PACKAGE_VERSION=${NVIDIA_DRIVER_PACKAGE_VERSION}
  161. SHELL ["/bin/bash", "-o", "pipefail", "-c"]
  162. USER root
  163. # =============================================================================
  164. # Base desktop / gaming environment
  165. # =============================================================================
  166. RUN dpkg --add-architecture i386 \
  167. && apt-get update \
  168. && apt-get install --no-install-recommends -y \
  169. btop fonts-noto-cjk fonts-ubuntu mousepad nano ristretto thunar \
  170. ubuntu-wallpapers \
  171. adwaita-icon-theme \
  172. elementary-xfce-icon-theme \
  173. greybird-gtk-theme \
  174. hicolor-icon-theme \
  175. humanity-icon-theme \
  176. keyboard-configuration \
  177. tango-icon-theme \
  178. xfce4-goodies \
  179. xfce4-notifyd \
  180. xfce4-pulseaudio-plugin \
  181. xfonts-base \
  182. xfonts-scalable \
  183. alsa-utils \
  184. ca-certificates \
  185. curl \
  186. dbus \
  187. dbus-user-session \
  188. dbus-x11 \
  189. file \
  190. fonts-dejavu \
  191. fonts-liberation \
  192. fonts-noto \
  193. fonts-noto-color-emoji \
  194. kmod \
  195. libasound2-plugins \
  196. libcap2-bin \
  197. libegl1 \
  198. libgbm1 \
  199. libgl1 \
  200. libglvnd0 \
  201. libglx0 \
  202. libpciaccess0 \
  203. libpulse0 \
  204. libvulkan1 \
  205. libx11-6 \
  206. libx11-xcb1 \
  207. libxdamage1 \
  208. libxext6 \
  209. libxfixes3 \
  210. libxinerama1 \
  211. libxrandr2 \
  212. libxss1 \
  213. libxtst6 \
  214. locales \
  215. mesa-utils \
  216. pciutils \
  217. pipewire \
  218. pipewire-pulse \
  219. procps \
  220. psmisc \
  221. pulseaudio-utils \
  222. sudo \
  223. supervisor \
  224. tzdata \
  225. udev \
  226. vulkan-tools \
  227. wireplumber \
  228. x11-utils \
  229. x11-xserver-utils \
  230. xauth \
  231. xcvt \
  232. xdg-user-dirs \
  233. xdg-utils \
  234. xfce4 \
  235. xfce4-terminal \
  236. xkb-data \
  237. xserver-xorg-core \
  238. xserver-xorg-input-libinput \
  239. xserver-xorg-legacy \
  240. xz-utils \
  241. mate-themes \
  242. neofetch \
  243. wmctrl \
  244. && sed -i \
  245. -e 's/^# *fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' \
  246. -e 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' \
  247. /etc/locale.gen \
  248. && locale-gen \
  249. && apt-get clean \
  250. && rm -rf \
  251. /var/lib/apt/lists/* \
  252. /var/cache/apt/* \
  253. /var/cache/debconf/* \
  254. /tmp/* \
  255. /var/tmp/*
  256. # =============================================================================
  257. # Desktop user
  258. # =============================================================================
  259. RUN set -eux; \
  260. if ! getent group "${USER_GID}" >/dev/null; then \
  261. groupadd --gid "${USER_GID}" "${USER_NAME}"; \
  262. fi; \
  263. if ! id -u "${USER_NAME}" >/dev/null 2>&1; then \
  264. useradd \
  265. --uid "${USER_UID}" \
  266. --gid "${USER_GID}" \
  267. --create-home \
  268. --shell /bin/bash \
  269. "${USER_NAME}"; \
  270. else \
  271. usermod --shell /bin/bash "${USER_NAME}"; \
  272. fi; \
  273. for group in \
  274. audio \
  275. games \
  276. input \
  277. render \
  278. tty \
  279. video; \
  280. do \
  281. getent group "${group}" >/dev/null \
  282. && usermod -aG "${group}" "${USER_NAME}" \
  283. || true; \
  284. done; \
  285. echo "${USER_NAME} ALL=(ALL:ALL) NOPASSWD: ALL" \
  286. > "/etc/sudoers.d/${USER_NAME}"; \
  287. chmod 0440 "/etc/sudoers.d/${USER_NAME}"; \
  288. install \
  289. -d \
  290. -o "${USER_UID}" \
  291. -g "${USER_GID}" \
  292. -m 0700 \
  293. /tmp/runtime-ubuntu; \
  294. install \
  295. -d \
  296. -o "${USER_UID}" \
  297. -g "${USER_GID}" \
  298. /home/${USER_NAME}/.config/sunshine \
  299. /games
  300. # =============================================================================
  301. # NVIDIA repository + nvidia-xconfig
  302. #
  303. # Only the userspace Xorg configuration utility is installed here.
  304. # The kernel driver remains fully managed by the NVIDIA GPU Operator.
  305. # =============================================================================
  306. RUN curl -fsSLO \
  307. https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
  308. && dpkg -i cuda-keyring_1.1-1_all.deb \
  309. && rm -f cuda-keyring_1.1-1_all.deb \
  310. && apt-get update \
  311. && apt-get install --no-install-recommends -y \
  312. "nvidia-xconfig=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  313. && nvidia-xconfig --version \
  314. && apt-get clean \
  315. && rm -rf \
  316. /var/lib/apt/lists/* \
  317. /var/cache/apt/*
  318. # =============================================================================
  319. # NVIDIA Xorg driver modules
  320. #
  321. # Extract only the Xorg-side NVIDIA modules matching the host driver.
  322. # Do not install the whole amd64 NVIDIA userspace stack with APT.
  323. # =============================================================================
  324. RUN cd /tmp \
  325. && apt-get update \
  326. && apt-get download \
  327. "xserver-xorg-video-nvidia-${NVIDIA_DRIVER_BRANCH}=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  328. && mkdir -p /tmp/nvidia-xorg \
  329. && dpkg-deb -x \
  330. "xserver-xorg-video-nvidia-${NVIDIA_DRIVER_BRANCH}_${NVIDIA_DRIVER_PACKAGE_VERSION}_amd64.deb" \
  331. /tmp/nvidia-xorg \
  332. && install -D -m 0755 \
  333. /tmp/nvidia-xorg/usr/lib/xorg/modules/drivers/nvidia_drv.so \
  334. /usr/lib/xorg/modules/drivers/nvidia_drv.so \
  335. && cp -a \
  336. /tmp/nvidia-xorg/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so* \
  337. /usr/lib/xorg/modules/extensions/ \
  338. && rm -rf \
  339. /tmp/nvidia-xorg \
  340. /tmp/xserver-xorg-video-nvidia-*.deb \
  341. /var/lib/apt/lists/*
  342. # =============================================================================
  343. # NVIDIA GLVND / Vulkan configuration
  344. #
  345. # Actual 64-bit NVIDIA libraries are injected at runtime by the GPU Operator /
  346. # NVIDIA Container Toolkit.
  347. # =============================================================================
  348. RUN printf '%s\n' \
  349. '/usr/local/nvidia/lib' \
  350. '/usr/local/nvidia/lib64' \
  351. > /etc/ld.so.conf.d/nvidia.conf \
  352. && install -d -m 0755 \
  353. /etc/vulkan/icd.d \
  354. /usr/share/glvnd/egl_vendor.d \
  355. && cat > /etc/vulkan/icd.d/nvidia_icd.json <<'EOF'
  356. {
  357. "file_format_version": "1.0.0",
  358. "ICD": {
  359. "library_path": "libGLX_nvidia.so.0",
  360. "api_version": "1.3.0"
  361. }
  362. }
  363. EOF
  364. RUN cat > /usr/share/glvnd/egl_vendor.d/10_nvidia.json <<'EOF'
  365. {
  366. "file_format_version": "1.0.0",
  367. "ICD": {
  368. "library_path": "libEGL_nvidia.so.0"
  369. }
  370. }
  371. EOF
  372. # =============================================================================
  373. # Sunshine
  374. # =============================================================================
  375. COPY --from=sunshine-build /sunshine.deb /tmp/sunshine.deb
  376. RUN apt-get update \
  377. && apt-get install --no-install-recommends -y \
  378. /tmp/sunshine.deb \
  379. && setcap cap_sys_admin,cap_dac_override,cap_sys_nice=ep \
  380. "$(command -v sunshine)" \
  381. && rm -f /tmp/sunshine.deb \
  382. && apt-get clean \
  383. && rm -rf \
  384. /var/lib/apt/lists/* \
  385. /var/cache/apt/*
  386. # =============================================================================
  387. # Steam + 32-bit Linux gaming runtime
  388. # =============================================================================
  389. RUN dpkg --add-architecture i386 \
  390. && apt-get update \
  391. && apt-get install --no-install-recommends -y \
  392. ca-certificates \
  393. curl \
  394. && curl -fsSL \
  395. https://repo.steampowered.com/steam/archive/stable/steam.gpg \
  396. -o /usr/share/keyrings/steam.gpg \
  397. && printf '%s\n' \
  398. 'deb [arch=amd64,i386 signed-by=/usr/share/keyrings/steam.gpg] https://repo.steampowered.com/steam/ stable steam' \
  399. > /etc/apt/sources.list.d/steam-bootstrap.list \
  400. && apt-get update \
  401. && apt-get install --no-install-recommends -y \
  402. steam-launcher \
  403. steam-libs-amd64 \
  404. steam-libs-i386 \
  405. libegl1:amd64 \
  406. libegl1:i386 \
  407. libgbm1:amd64 \
  408. libgbm1:i386 \
  409. libgl1:amd64 \
  410. libgl1:i386 \
  411. libgl1-mesa-dri:amd64 \
  412. libgl1-mesa-dri:i386 \
  413. libglx-mesa0:amd64 \
  414. libglx-mesa0:i386 \
  415. libvulkan1:amd64 \
  416. libvulkan1:i386 \
  417. xdg-desktop-portal \
  418. xdg-desktop-portal-gtk \
  419. && rm -f /etc/apt/sources.list.d/steam-bootstrap.list \
  420. && apt-get clean \
  421. && rm -rf \
  422. /var/lib/apt/lists/* \
  423. /var/cache/apt/*
  424. # =============================================================================
  425. # Non-snap Firefox
  426. # =============================================================================
  427. RUN install -d -m 0755 /etc/apt/keyrings \
  428. && curl -fsSL https://packages.mozilla.org/apt/repo-signing-key.gpg \
  429. -o /etc/apt/keyrings/packages.mozilla.org.asc \
  430. && echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" \
  431. > /etc/apt/sources.list.d/mozilla.list \
  432. && printf '%s\n' \
  433. 'Package: *' \
  434. 'Pin: origin packages.mozilla.org' \
  435. 'Pin-Priority: 1000' \
  436. > /etc/apt/preferences.d/mozilla \
  437. && apt-get update \
  438. && apt-get install --no-install-recommends -y \
  439. firefox \
  440. firefox-l10n-fr \
  441. && apt-get clean
  442. # =============================================================================
  443. # NVIDIA 32-bit userspace
  444. #
  445. # The GPU Operator currently does not provide the compat32 libraries required
  446. # by 32-bit OpenGL applications and Proton/DXVK.
  447. #
  448. # Install the exact userspace version matching the host driver, then keep a
  449. # protected copy under /opt. The NVIDIA runtime can remove/mask the files in
  450. # /usr/lib/i386-linux-gnu when the pod starts; sunshine-entrypoint.sh restores
  451. # them afterwards.
  452. # =============================================================================
  453. RUN dpkg --add-architecture i386 \
  454. && apt-get update \
  455. && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
  456. "libnvidia-common-${NVIDIA_DRIVER_BRANCH}=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  457. "libnvidia-gpucomp-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  458. "libnvidia-decode-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  459. "libnvidia-compute-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  460. "libnvidia-gl-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
  461. && mkdir -p /opt/nvidia-i386 \
  462. && for file in $( \
  463. dpkg -L \
  464. "libnvidia-gl-${NVIDIA_DRIVER_BRANCH}:i386" \
  465. "libnvidia-compute-${NVIDIA_DRIVER_BRANCH}:i386" \
  466. "libnvidia-decode-${NVIDIA_DRIVER_BRANCH}:i386" \
  467. "libnvidia-gpucomp-${NVIDIA_DRIVER_BRANCH}:i386" \
  468. | grep '^/usr/lib/i386-linux-gnu/' \
  469. | sort -u \
  470. ); do \
  471. if [[ -e "${file}" || -L "${file}" ]]; then \
  472. cp -a --parents "${file}" /opt/nvidia-i386/; \
  473. fi; \
  474. done \
  475. && test -e \
  476. /opt/nvidia-i386/usr/lib/i386-linux-gnu/libGLX_nvidia.so.0 \
  477. && test -e \
  478. "/opt/nvidia-i386/usr/lib/i386-linux-gnu/libnvidia-glcore.so.${NVIDIA_DRIVER_VERSION}" \
  479. && ldconfig \
  480. && apt-get clean \
  481. && rm -rf \
  482. /var/lib/apt/lists/* \
  483. /var/cache/apt/*
  484. # Keep APT package indexes available for Steam's dependency checker.
  485. RUN apt-get update \
  486. && apt-get clean
  487. # =============================================================================
  488. # Runtime scripts
  489. # =============================================================================
  490. COPY desktop-entrypoint.sh /etc/desktop-entrypoint.sh
  491. COPY sunshine-entrypoint.sh /etc/sunshine-entrypoint.sh
  492. COPY supervisord.conf /etc/supervisord.conf
  493. COPY --chmod=0755 scripts/ /usr/local/bin/
  494. RUN sed -i 's/\r$//' \
  495. /etc/desktop-entrypoint.sh \
  496. /etc/sunshine-entrypoint.sh \
  497. /etc/supervisord.conf \
  498. && chmod 0755 \
  499. /etc/desktop-entrypoint.sh \
  500. /etc/sunshine-entrypoint.sh \
  501. && chmod 0644 \
  502. /etc/supervisord.conf
  503. # =============================================================================
  504. # Final filesystem permissions
  505. # =============================================================================
  506. RUN chown -R \
  507. "${USER_UID}:${USER_GID}" \
  508. "/home/${USER_NAME}" \
  509. /tmp/runtime-ubuntu
  510. # =============================================================================
  511. # Sanity checks
  512. # =============================================================================
  513. RUN command -v \
  514. steam \
  515. && command -v \
  516. nvidia-xconfig \
  517. && command -v \
  518. supervisord \
  519. && command -v \
  520. pipewire \
  521. && command -v \
  522. wireplumber \
  523. && command -v \
  524. Xorg \
  525. && command -v \
  526. xfce4-session \
  527. && test -x \
  528. /etc/sunshine-entrypoint.sh \
  529. && test -x \
  530. /etc/desktop-entrypoint.sh
  531. # =============================================================================
  532. # Runtime
  533. # =============================================================================
  534. USER 1000:1000
  535. WORKDIR /home/ubuntu
  536. STOPSIGNAL SIGTERM
  537. ENTRYPOINT ["/etc/sunshine-entrypoint.sh"]