| umoci raw add-layer --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:rockcraft-base /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/.temp_layer.9520.tar --tag 26.04 |
| umoci config --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:26.04 --clear=config.entrypoint --clear=config.cmd |
| umoci config --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:26.04 --clear=config.cmd --config.cmd /bin/bash |
| umoci config --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:26.04 --config.env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| umoci config --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:26.04 --clear=config.labels --config.label org.opencontainers.image.version=26.04 --config.label org.opencontainers.image.title=ubuntu --config.label org.opencontainers.image.created=2026-09-12T10:25:59.825539+00:00 --config.label org.opencontainers.image.description=The Ubuntu container image maintained by Canonical
Ubuntu is a Debian-based Linux operating system that runs from the desktop to the cloud, to all your internet connected things.
It is the world's most popular operating system across public clouds and OpenStack clouds.
It is the number one platform for containers; from Docker to Kubernetes to LXD, Ubuntu can run your containers at scale.
Fast, secure and simple, Ubuntu powers millions of PCs worldwide.
|
| umoci config --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:26.04 --clear=manifest.annotations --manifest.annotation org.opencontainers.image.version=26.04 --manifest.annotation org.opencontainers.image.title=ubuntu --manifest.annotation org.opencontainers.image.created=2026-09-12T10:25:59.825539+00:00 --manifest.annotation org.opencontainers.image.description=The Ubuntu container image maintained by Canonical
Ubuntu is a Debian-based Linux operating system that runs from the desktop to the cloud, to all your internet connected things.
It is the world's most popular operating system across public clouds and OpenStack clouds.
It is the number one platform for containers; from Docker to Kubernetes to LXD, Ubuntu can run your containers at scale.
Fast, secure and simple, Ubuntu powers millions of PCs worldwide.
|
| umoci raw add-layer --image /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/ubuntu:26.04 /home/buildd/rockcraft-ubuntu-64c38dcc01e7a4a6a4edc23c9f41a2cf/images/.temp_layer.control_data.9520.tar |
| LABEL maintainer=https://github.com/danisla,https://github.com/ehfd |
| LABEL org.opencontainers.image.title=Selkies Base Container |
| LABEL org.opencontainers.image.description=Selkies session without a desktop environment: X11 (Xvfb) and the headless Wayland backend (labwc), PipeWire audio, GPU wiring, s6 service supervision, embedded coTURN |
| LABEL org.opencontainers.image.source=https://github.com/selkies-project/selkies |
| LABEL org.opencontainers.image.licenses=MPL-2.0 |
| ARG DISTRIB_IMAGE=ubuntu |
| ARG DISTRIB_RELEASE=26.04 |
| RUN |2 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 /bin/sh -c printf 'Acquire::Retries "5";\nAcquire::http::Timeout "30";\nAcquire::https::Timeout "30";\nAcquire::Retries::Delay::Maximum "30";\n' > /etc/apt/apt.conf.d/99-selkies-retries && if [ -f /etc/apt/sources.list.d/debian.sources ]; then sed -i 's/^Components: .*/& contrib non-free/' /etc/apt/sources.list.d/debian.sources; fi # buildkit |
| COPY addons/base/selkies-privileged-files /usr/local/bin/selkies-privileged-files # buildkit |
| ARG DEBIAN_FRONTEND=noninteractive |
| ARG TZ=UTC |
| ENV PASSWD=mypasswd |
| ARG LOCALE=en_US.UTF-8 |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /bin/sh -c apt-get clean && apt-get update && apt-get dist-upgrade -y && apt-get install --no-install-recommends -y apt-utils dbus-user-session fakeroot fuse kmod locales ssl-cert sudo udev tzdata && { [ "$(dpkg --print-architecture)" != "amd64" ] || apt-get install --no-install-recommends -y gcc-multilib; } && apt-get clean && rm -rf /var/lib/apt/lists/* /var/cache/debconf/* /var/log/* /tmp/* /var/tmp/* && sed -i "s/^# *\(${LOCALE} UTF-8\)/\1/" /etc/locale.gen && locale-gen && ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime && echo "${TZ}" > /etc/timezone && mv -f /usr/bin/sudo /usr/bin/sudo-root && ln -snf /usr/bin/fakeroot /usr/bin/sudo && groupadd -g 1000 ubuntu || echo 'Failed to add ubuntu group' && useradd -ms /bin/bash ubuntu -u 1000 -g 1000 || echo 'Failed to add ubuntu user' && usermod -a -G adm,audio,cdrom,dialout,dip,fax,floppy,games,input,lp,plugdev,render,ssl-cert,sudo,tape,tty,video,voice ubuntu && echo "ubuntu ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers && echo "ubuntu:${PASSWD}" | chpasswd && selkies-privileged-files release && { chown -R -f -h --no-preserve-root ubuntu:ubuntu / || echo 'Failed to set filesystem ownership in some paths to ubuntu user'; } # buildkit |
| ENV LANG=en_US.UTF-8 |
| ENV LANGUAGE=en_US:en |
| ENV LC_ALL=en_US.UTF-8 |
| USER 1000 |
| SHELL [/usr/bin/fakeroot -- /bin/sh -c] |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c if [ "$(dpkg --print-architecture)" = "amd64" ]; then dpkg --add-architecture i386; fi && apt-get clean && apt-get update && apt-get install --no-install-recommends -y s6 ca-certificates curl jq dnsutils file less nano vim htop git net-tools netcat-openbsd haveged zip unzip xz-utils bzip2 zstd unrar unar xdg-utils xdg-user-dirs desktop-file-utils libnvidia-egl-gbm1 libnvidia-egl-wayland1 libx11-xcb1 libxcb-dri3-0 libxcb-present0 cups-daemon cups-client cups-filters xserver-xorg-core xvfb x11-xserver-utils x11-xkb-utils x11-utils xauth wmctrl dbus-x11 xdotool xclip xcvt libx11-xcb1 libxcb1 libxcb-shm0 libxcb-xfixes0 libxcb-randr0 libxcb-dri3-0 libxkbcommon0 libxdamage1 libxfixes3 libxtst6 libxext6 x264 ffmpeg opus-tools libwayland-server0 libwayland-client0 libwayland-egl1 xwayland libpulse0 pipewire pipewire-audio pipewire-pulse wireplumber pipewire-alsa pipewire-jack pipewire-audio-client-libraries libspa-0.2-jack pipewire-v4l2 pipewire-libcamera alsa-utils jackd2 xsettingsd libgl1 libgl1-mesa-dri libegl1 libgles2 mesa-utils mesa-va-drivers mesa-vulkan-drivers libva2 libva-drm2 libdrm2 libgbm1 libvulkan1 libglu1-mesa ocl-icd-libopencl1 clinfo vainfo vdpauinfo mesa-vdpau-drivers libvdpau-va-gl1 nvidia-vaapi-driver vulkan-tools radeontop nvtop aspell aspell-en hunspell enchant-2 libavcodec-extra fonts-dejavu-core fonts-liberation fonts-noto-core fonts-noto-cjk fonts-noto-color-emoji fonts-noto-extra fonts-noto-cjk-extra fonts-symbola fonts-noto-ui-core fonts-noto-ui-extra fonts-dejavu-extra fonts-freefont-ttf fonts-hack fonts-ubuntu fonts-opensymbol xfonts-scalable xbitmaps librsvg2-common python3 python3-pip coturn ssl-cert labwc && if [ "$(dpkg --print-architecture)" = "amd64" ]; then apt-get install --no-install-recommends -y intel-media-va-driver-non-free i965-va-driver-shaders intel-gpu-tools rar libgl1:i386 libglx-mesa0:i386 libgl1-mesa-dri:i386 libegl1:i386 libgles2:i386 libglu1-mesa:i386 libvulkan1:i386 mesa-vulkan-drivers:i386 libva2:i386 libva-drm2:i386 libva-x11-2:i386 va-driver-all:i386 intel-media-va-driver-non-free:i386 i965-va-driver-shaders:i386 libvdpau1:i386; fi && apt-get clean && rm -rf /var/lib/apt/lists/* /var/cache/debconf/* /var/log/* /tmp/* /var/tmp/* # buildkit |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c printf '/usr/local/nvidia/lib\n/usr/local/nvidia/lib64\n' > /etc/ld.so.conf.d/nvidia.conf && mkdir -pm755 /etc/OpenCL/vendors /etc/vulkan/icd.d /usr/share/glvnd/egl_vendor.d && echo 'libnvidia-opencl.so.1' > /etc/OpenCL/vendors/nvidia.icd && VULKAN_API_VERSION="$(dpkg -s "libvulkan1:$(dpkg --print-architecture)" | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9]+(\.[0-9]+)(\.[0-9]+)')" && printf '{\n "file_format_version": "1.0.0",\n "ICD": {\n "library_path": "libGLX_nvidia.so.0",\n "api_version": "%s"\n }\n}\n' "${VULKAN_API_VERSION}" > /etc/vulkan/icd.d/nvidia_icd.json && printf '{\n "file_format_version": "1.0.0",\n "ICD": {\n "library_path": "libEGL_nvidia.so.0"\n }\n}\n' > /usr/share/glvnd/egl_vendor.d/10_nvidia.json # buildkit |
| ENV PATH=/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64 |
| ENV NVIDIA_VISIBLE_DEVICES=all |
| ENV NVIDIA_DRIVER_CAPABILITIES=all |
| ENV __GL_SYNC_TO_VBLANK=0 |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c install -d /var/log/apt # buildkit |
| COPY .devcontainer/features/desktop-selkies/src/fetch-release-wheels.sh /tmp/fetch-release-wheels.sh # buildkit |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c set -e; mkdir -p /tmp/picked; cp /tmp/wheels/*.whl /tmp/picked/ 2> /dev/null || true; bash /tmp/fetch-release-wheels.sh /tmp/picked; for project in pixelflux pcmflux; do if ls /tmp/picked/${project}-*.whl > /dev/null 2>&1; then PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install --no-cache-dir --no-index --find-links /tmp/picked ${project}; fi; done; PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install --no-cache-dir --retries 5 --timeout 60 --find-links /tmp/picked "$(ls /tmp/picked/selkies-*.whl 2> /dev/null || echo selkies)"; rm -rf /tmp/picked /tmp/fetch-release-wheels.sh # buildkit |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c set -e; selkies --help > /dev/null; python3 -c "import selkies, pixelflux, pcmflux"; python3 -c "import ctypes; [ctypes.CDLL(name) for name in ('libwayland-server.so.0', 'libEGL.so.1', 'libgbm.so.1', 'libpulse.so.0', 'libva.so.2', 'libdrm.so.2', 'libxkbcommon.so.0', 'libpixman-1.so.0')]" # buildkit |
| COPY --chown=1000:1000 /build-out/usr/bin/Xvfb /usr/bin/Xvfb # buildkit |
| COPY --chown=1000:1000 /build-out/usr/lib/ /usr/lib/ # buildkit |
| COPY --chown=1000:1000 /build-out/usr/share/egl/ /usr/share/egl/ # buildkit |
| COPY --chown=1000:1000 /usr/bin/labwc /usr/bin/labwc # buildkit |
| COPY --chown=1000:1000 /build-out/lib/ /usr/lib/ # buildkit |
| COPY --chown=1000:1000 /opt/add-ons/lib/ /usr/lib/ # buildkit |
| COPY --chown=1000:1000 addons/base/labwc-rc.xml /etc/xdg/labwc/rc.xml # buildkit |
| COPY --chown=1000:1000 addons/base/container-entrypoint.sh /etc/container-entrypoint.sh # buildkit |
| COPY --chown=1000:1000 addons/base/selkies-entrypoint.sh /etc/selkies-entrypoint.sh # buildkit |
| COPY --chown=1000:1000 addons/base/services/ /etc/service/ # buildkit |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c chmod -f 755 /etc/container-entrypoint.sh /etc/selkies-entrypoint.sh && find /etc/service \( -name run -o -name finish \) -exec chmod -f 755 {} + # buildkit |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /usr/bin/fakeroot -- /bin/sh -c echo "[ -n \"\$PS1\" ] && [ -z \"\$DISPLAY\" ] && [ -z \"\$WAYLAND_DISPLAY\" ] && [ -r \"\${XDG_RUNTIME_DIR:-/tmp/runtime-ubuntu}/container-env\" ] && . \"\${XDG_RUNTIME_DIR:-/tmp/runtime-ubuntu}/container-env\"" >> /etc/bash.bashrc && echo "[ ! -z \"\$TERM\" -a -r /etc/motd ] && echo \"\$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '\"')\" && cat /etc/motd" >> /etc/bash.bashrc && printf "==============================================\n= Selkies Base Container =\n==============================================\n" > /etc/motd # buildkit |
| USER 0 |
| SHELL [/bin/sh -c] |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /bin/sh -c selkies-privileged-files restore && if [ -d "/usr/libexec/sudo" ]; then SUDO_LIB="/usr/libexec/sudo"; else SUDO_LIB="/usr/lib/sudo"; fi && chown -R -f -h --no-preserve-root root:root /usr/bin/sudo-root /etc/sudo.conf /etc/sudoers /etc/sudoers.d /etc/sudo_logsrvd.conf "${SUDO_LIB}" || echo 'Failed to provide root permissions in some paths relevant to sudo' && chmod -f 4755 /usr/bin/sudo-root || echo 'Failed to set chmod setuid for root' && for helper in /usr/lib/polkit-1/polkit-agent-helper-1 /usr/libexec/polkit-agent-helper-1 /usr/bin/pkexec; do if [ -e "$helper" ]; then chown -f root:root "$helper" && chmod -f 4755 "$helper" || echo "Failed to restore setuid for $helper"; fi; done && for helper in /usr/lib/*/utempter/utempter /usr/libexec/utempter/utempter; do if [ -e "$helper" ]; then chown -f root:utmp "$helper" && chmod -f 2755 "$helper" || echo "Failed to restore setgid for $helper"; fi; done # buildkit |
| USER 1000 |
| ENV PIPEWIRE_LATENCY=256/48000 |
| ENV XDG_RUNTIME_DIR=/tmp/runtime-ubuntu |
| ENV PIPEWIRE_RUNTIME_DIR=/tmp/runtime-ubuntu |
| ENV PULSE_RUNTIME_PATH=/tmp/runtime-ubuntu/pulse |
| ENV PULSE_SERVER=unix:/tmp/runtime-ubuntu/pulse/native |
| ENV DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/runtime-ubuntu/dbus-system-bus |
| ENV SELKIES_WAYLAND_COMPOSITOR= |
| ENV SELKIES_WAYLAND_X11_FALLBACK=true |
| ENV SELKIES_PORT=8080 |
| ENV SELKIES_ENABLE_HTTPS=true |
| RUN |5 DISTRIB_IMAGE=ubuntu DISTRIB_RELEASE=26.04 DEBIAN_FRONTEND=noninteractive TZ=UTC LOCALE=en_US.UTF-8 /bin/sh -c rm -f /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/certs/ssl-cert-snakeoil.pem # buildkit |
| ENV APPIMAGE_EXTRACT_AND_RUN=1 |
| ENV DONT_PROMPT_WSL_INSTALL=1 |
| ENV SHELL=/bin/bash |
| ENV USER=ubuntu |
| ENV HOME=/home/ubuntu |
| WORKDIR /home/ubuntu |
| EXPOSE [8080/tcp] |
| HEALTHCHECK {Test:[CMD-SHELL p="${SELKIES_SUBFOLDER-${SUBFOLDER-}}"; p="${p#/}"; p="${p%/}"; p="${p:+/${p}}"; curl -fsS -k -o /dev/null "https://localhost:${SELKIES_PORT:-8080}${p}/api/health" || curl -fsS -o /dev/null "http://localhost:${SELKIES_PORT:-8080}${p}/api/health"] Interval:30s Timeout:5s StartPeriod:1m0s StartInterval:0s Retries:3} |
| ENTRYPOINT ["/etc/container-entrypoint.sh"] |
| USER 0 |
| SHELL [/bin/sh -c] |
| COPY /usr/local/bin/node /usr/local/bin/node # buildkit |
| COPY /usr/local/lib/node_modules /usr/local/lib/node_modules # buildkit |
| COPY /usr/bin/caddy /usr/local/bin/caddy # buildkit |
| RUN /bin/sh -c ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && selkies-privileged-files release # buildkit |
| USER 1000 |
| SHELL [/usr/bin/fakeroot -- /bin/sh -c] |
| RUN /usr/bin/fakeroot -- /bin/sh -c apt-get update && apt-get install --no-install-recommends -y unzip ca-certificates fonts-liberation libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2t64 libxshmfence1 && rm -rf /var/lib/apt/lists/* # buildkit |
| USER 0 |
| SHELL [/bin/sh -c] |
| RUN /bin/sh -c selkies-privileged-files restore && rm -rf /etc/service/selkies /etc/service/coturn && mkdir -p /data && chown 1000:1000 /data # buildkit |
| COPY --chown=1000:1000 docker/service/ /etc/service/ # buildkit |
| COPY docker/Caddyfile /etc/caddy/Caddyfile # buildkit |
| USER 1000 |
| ENV SELKIES_WAYLAND=true SELKIES_WAYLAND_COMPOSITOR=none SELKIES_ENABLE_DUAL_MODE=false |
| EXPOSE [8080/tcp] |
| HEALTHCHECK {Test:[CMD-SHELL curl -fsS -o /dev/null http://localhost:8080/login] Interval:0s Timeout:5s StartPeriod:1m0s StartInterval:0s Retries:0} |
| COPY --chown=1000:1000 /opt/app /opt/app # buildkit |
| ENV DATABASE_URL=/data/app.sqlite HOST=127.0.0.1 PORT=3000 |
| VOLUME [/data] |