From 38e8ac3e21e45865190f91c301911ee78a6dcc7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Sun, 8 Sep 2024 17:21:09 +0200 Subject: [PATCH] split base build to multiple dockerfiles. --- .devcontainer/Dockerfile | 148 ---------------- .devcontainer/README.md | 20 --- .devcontainer/devcontainer.json | 44 ----- .docker/README.md | 44 ++--- .docker/build | 18 +- .gitignore | 10 ++ build | 72 ++++++++ client/.env.development | 1 - client/Dockerfile | 8 +- config.yml | 20 +++ {server/runtime => runtime}/.Xresources | 0 runtime/Dockerfile | 108 ++++++++++++ {server => runtime}/Dockerfile.arm | 103 ++--------- runtime/Dockerfile.bookworm | 102 +++++++++++ {server => runtime}/Dockerfile.intel | 107 ++--------- {server => runtime}/Dockerfile.nvidia | 102 ++--------- .../Dockerfile.nvidia.bookworm | 95 ++-------- {server/runtime => runtime}/dbus | 0 {server/runtime => runtime}/default.pa | 0 .../fontconfig/75-emoji.conf | 0 {server/runtime => runtime}/fonts/.gitkeep | 0 .../runtime => runtime}/icon-theme/.gitkeep | 0 .../intel/add-render-group.sh | 0 .../intel/supervisord.rendergroup.conf | 0 .../runtime => runtime}/nvidia/entrypoint.sh | 0 {server/runtime => runtime}/supervisord.conf | 0 .../runtime => runtime}/supervisord.dbus.conf | 0 runtime/xorg-deps/Dockerfile | 34 ++++ .../xorg-deps}/xf86-input-neko/.gitignore | 0 .../xorg-deps}/xf86-input-neko/80-neko.conf | 0 .../xorg-deps}/xf86-input-neko/COPYING | 0 .../xorg-deps}/xf86-input-neko/Dockerfile | 0 .../xorg-deps}/xf86-input-neko/Makefile.am | 0 .../xorg-deps}/xf86-input-neko/README.md | 0 .../xf86-input-neko/autogen-clean.sh | 0 .../xorg-deps}/xf86-input-neko/autogen.sh | 0 .../xorg-deps}/xf86-input-neko/configure.ac | 0 .../xorg-deps}/xf86-input-neko/m4/.gitkeep | 0 .../xorg-deps}/xf86-input-neko/release.sh | 0 .../xf86-input-neko/src/Makefile.am | 0 .../xorg-deps}/xf86-input-neko/src/neko.c | 0 .../xf86-input-neko/xorg-neko.pc.in | 0 .../01_v0.3.8_xdummy-randr.patch | 0 .../xorg-deps}/xf86-video-dummy/README.md | 0 .../xf86-video-dummy/v0.3.8/COPYING | 0 .../xf86-video-dummy/v0.3.8/ChangeLog | 0 .../xf86-video-dummy/v0.3.8/Makefile.am | 0 .../xf86-video-dummy/v0.3.8/Makefile.in | 0 .../xorg-deps}/xf86-video-dummy/v0.3.8/README | 0 .../xf86-video-dummy/v0.3.8/aclocal.m4 | 0 .../xf86-video-dummy/v0.3.8/compile | 0 .../xf86-video-dummy/v0.3.8/config.guess | 0 .../xf86-video-dummy/v0.3.8/config.h.in | 0 .../xf86-video-dummy/v0.3.8/config.sub | 0 .../xf86-video-dummy/v0.3.8/configure | 0 .../xf86-video-dummy/v0.3.8/configure.ac | 0 .../xf86-video-dummy/v0.3.8/depcomp | 0 .../xf86-video-dummy/v0.3.8/install-sh | 0 .../xf86-video-dummy/v0.3.8/ltmain.sh | 0 .../xf86-video-dummy/v0.3.8/missing | 0 .../xf86-video-dummy/v0.3.8/src/Makefile.am | 0 .../xf86-video-dummy/v0.3.8/src/Makefile.in | 0 .../xf86-video-dummy/v0.3.8/src/compat-api.h | 0 .../xf86-video-dummy/v0.3.8/src/dummy.h | 0 .../v0.3.8/src/dummy_cursor.c | 0 .../xf86-video-dummy/v0.3.8/src/dummy_dga.c | 0 .../v0.3.8/src/dummy_driver.c | 0 {server/runtime => runtime}/xorg.conf | 0 server/.gitignore | 10 -- server/Dockerfile | 166 +----------------- server/Dockerfile.bookworm | 160 +---------------- server/dev/build | 19 +- server/dev/fmt | 6 +- server/dev/go | 8 +- server/dev/lint | 6 +- server/dev/rebuild | 2 +- server/dev/rebuild.input | 2 +- server/dev/runtime/Dockerfile | 2 +- server/dev/start | 6 +- 79 files changed, 455 insertions(+), 968 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/README.md delete mode 100644 .devcontainer/devcontainer.json create mode 100755 build delete mode 100644 client/.env.development create mode 100644 config.yml rename {server/runtime => runtime}/.Xresources (100%) create mode 100644 runtime/Dockerfile rename {server => runtime}/Dockerfile.arm (53%) create mode 100644 runtime/Dockerfile.bookworm rename {server => runtime}/Dockerfile.intel (55%) rename {server => runtime}/Dockerfile.nvidia (76%) rename {server => runtime}/Dockerfile.nvidia.bookworm (79%) rename {server/runtime => runtime}/dbus (100%) rename {server/runtime => runtime}/default.pa (100%) rename {server/runtime => runtime}/fontconfig/75-emoji.conf (100%) rename {server/runtime => runtime}/fonts/.gitkeep (100%) rename {server/runtime => runtime}/icon-theme/.gitkeep (100%) rename {server/runtime => runtime}/intel/add-render-group.sh (100%) rename {server/runtime => runtime}/intel/supervisord.rendergroup.conf (100%) rename {server/runtime => runtime}/nvidia/entrypoint.sh (100%) rename {server/runtime => runtime}/supervisord.conf (100%) rename {server/runtime => runtime}/supervisord.dbus.conf (100%) create mode 100644 runtime/xorg-deps/Dockerfile rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/.gitignore (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/80-neko.conf (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/COPYING (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/Dockerfile (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/Makefile.am (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/README.md (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/autogen-clean.sh (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/autogen.sh (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/configure.ac (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/m4/.gitkeep (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/release.sh (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/src/Makefile.am (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/src/neko.c (100%) rename {server/xorg => runtime/xorg-deps}/xf86-input-neko/xorg-neko.pc.in (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/01_v0.3.8_xdummy-randr.patch (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/README.md (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/COPYING (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/ChangeLog (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/Makefile.am (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/Makefile.in (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/README (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/aclocal.m4 (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/compile (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/config.guess (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/config.h.in (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/config.sub (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/configure (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/configure.ac (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/depcomp (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/install-sh (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/ltmain.sh (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/missing (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/Makefile.am (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/Makefile.in (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/compat-api.h (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/dummy.h (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/dummy_cursor.c (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/dummy_dga.c (100%) rename {server/xorg => runtime/xorg-deps}/xf86-video-dummy/v0.3.8/src/dummy_driver.c (100%) rename {server/runtime => runtime}/xorg.conf (100%) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 7bb676fc..00000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,148 +0,0 @@ -# -# Stage 0: Build xorg dependencies. -# -FROM debian:bullseye-slim as xorg-deps - -ENV DEBIAN_FRONTEND=noninteractive - -RUN set -eux; \ - apt-get update; \ - apt-get install -y \ - git gcc pkgconf autoconf automake libtool make xorg-dev xutils-dev \ - && rm -rf /var/lib/apt/lists/*; - -WORKDIR /xorg - -COPY xorg/ /xorg/ - -# build xserver-xorg-video-dummy 0.3.8-2 with RandR support. -RUN set -eux; \ - cd xf86-video-dummy; \ - git clone --depth 1 --branch xserver-xorg-video-dummy-1_0.3.8-2 https://salsa.debian.org/xorg-team/driver/xserver-xorg-video-dummy; \ - cd xserver-xorg-video-dummy; \ - patch -p1 < ../xdummy-randr.patch; \ - ./autogen.sh; \ - make -j$(nproc); \ - make install; - -# build custom input driver -RUN set -eux; \ - cd xf86-input-neko; \ - ./autogen.sh --prefix=/usr; \ - ./configure; \ - make -j$(nproc); \ - make install; - -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.166.0/containers/go/.devcontainer/base.Dockerfile - -# [Choice] Go version: 1, 1.16, 1.15 -ARG VARIANT="1" -FROM mcr.microsoft.com/vscode/devcontainers/go:0-${VARIANT} - -# [Option] Install Node.js -ARG INSTALL_NODE="true" -ARG NODE_VERSION="lts/*" -RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi - -# build dependencies -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - libx11-dev libxrandr-dev libxtst-dev libgtk-3-dev \ - libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev; \ - # install libxcvt-dev (not available in base image) - wget http://ftp.de.debian.org/debian/pool/main/libx/libxcvt/libxcvt-dev_0.1.2-1_amd64.deb; \ - wget http://ftp.de.debian.org/debian/pool/main/libx/libxcvt/libxcvt0_0.1.2-1_amd64.deb; \ - apt-get install --no-install-recommends ./libxcvt0_0.1.2-1_amd64.deb ./libxcvt-dev_0.1.2-1_amd64.deb; - -# runtime dependencies -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - wget ca-certificates supervisor \ - pulseaudio dbus-x11 xserver-xorg-video-dummy \ - libcairo2 libxcb1 libxrandr2 libxv1 libopus0 libvpx6 \ - # - # needed for profile upload preStop hook - zip curl \ - # - # file chooser handler, clipboard, drop - xdotool xclip libgtk-3-0 \ - # - # gst - gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ - gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \ - gstreamer1.0-pulseaudio; - # libxcvt already installed - -# dev runtime dependencies -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - xfce4 xfce4-terminal firefox-esr sudo; - -# configure runtime -ARG USERNAME=neko -ARG USER_UID=1001 -ARG USER_GID=$USER_UID -RUN set -eux; \ - # - # create a non-root user - groupadd --gid $USER_GID $USERNAME; \ - useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \ - adduser $USERNAME audio; \ - adduser $USERNAME video; \ - adduser $USERNAME pulse; \ - # - # add sudo support - echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME; \ - chmod 0440 /etc/sudoers.d/$USERNAME; \ - # - # workaround for an X11 problem: http://blog.tigerteufel.de/?p=476 - mkdir /tmp/.X11-unix; \ - chmod 1777 /tmp/.X11-unix; \ - chown $USERNAME /tmp/.X11-unix/; \ - # - # make directories for neko - mkdir -p /etc/neko /var/www; \ - chown -R $USERNAME:$USERNAME /home/$USERNAME; \ - # - # install fonts - apt-get install -y --no-install-recommends \ - # Emojis - fonts-noto-color-emoji \ - # Chinese fonts - fonts-arphic-ukai fonts-arphic-uming \ - # Japanese fonts - fonts-ipafont-mincho fonts-ipafont-gothic \ - # Korean fonts - fonts-unfonts-core \ - # Indian fonts - fonts-indic; - -# copy dependencies from previous stage -COPY --from=xorg-deps /usr/local/lib/xorg/modules/drivers/dummy_drv.so /usr/lib/xorg/modules/drivers/dummy_drv.so -COPY --from=xorg-deps /usr/local/lib/xorg/modules/input/neko_drv.so /usr/lib/xorg/modules/input/neko_drv.so - -# copy runtime files -COPY runtime/dbus /usr/bin/dbus -COPY runtime/default.pa /etc/pulse/default.pa -COPY runtime/supervisord.conf /etc/neko/supervisord.conf -COPY runtime/xorg.conf /etc/neko/xorg.conf -COPY runtime/icon-theme /home/$USERNAME/.icons/default - -# copy dev runtime files -COPY dev/runtime/config.yml /etc/neko/neko.yml -COPY dev/runtime/supervisord.conf /etc/neko/supervisord/dev.conf - -# customized scripts -RUN chmod +x /usr/bin/dbus;\ - echo '#!/bin/sh\nsleep infinity' > /usr/bin/neko; \ - chmod +x /usr/bin/neko; \ - echo '#!/bin/sh\nsudo sh -c "export USER='$USERNAME'\nexport HOME=/home/'$USERNAME'\n/usr/bin/supervisord -c /etc/neko/supervisord.conf"' > /usr/bin/deps; \ - chmod +x /usr/bin/deps; \ - touch .env.development; - -# set default envs -ENV USER=$USERNAME -ENV DISPLAY=:99.0 -ENV PULSE_SERVER=unix:/tmp/pulseaudio.socket -ENV NEKO_SERVER_BIND=:3000 -ENV NEKO_WEBRTC_EPR=3001-3004 diff --git a/.devcontainer/README.md b/.devcontainer/README.md deleted file mode 100644 index 1ddcb7f8..00000000 --- a/.devcontainer/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# dev container - -You need to run all dependencies with `deps` command before you start debugging. - -Create `.env.development` in repository root. Make sure your local IP is correct. - -```sh -NEKO_WEBRTC_NAT1TO1=10.0.0.8 -``` - -# without container - -- Make sure `pulseaudio` contains correct configuration. -- Specify `DISPLAY` that is being used by xorg. - -```sh -DISPLAY=:0 -NEKO_WEBRTC_NAT1TO1=10.0.0.8 -NEKO_SERVER_BIND=:3000 -``` diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 69824f10..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,44 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.166.0/containers/go -{ - "name": "Go", - "build": { - "dockerfile": "Dockerfile", - "context": "../server/", - "args": { - // Update the VARIANT arg to pick a version of Go: 1, 1.16, 1.15 - "VARIANT": "1.20", - // Options - "INSTALL_NODE": "false", - "NODE_VERSION": "lts/*" - } - }, - "runArgs": [ "--cap-add=SYS_PTRACE", "--cap-add=SYS_ADMIN", "--shm-size=2G", "--security-opt", "seccomp=unconfined" ], - - "customizations": { - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "terminal.integrated.shell.linux": "/bin/bash", - "go.toolsManagement.checkForUpdates": "local", - "go.useLanguageServer": true, - "go.gopath": "/go", - "go.goroot": "/usr/local/go" - }, - - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "golang.Go" - ] - } - }, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - "appPort": ["3000:3000", "3001:3001/udp", "3002:3002/udp", "3003:3003/udp", "3004:3004/udp"], - - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "go version", - - // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "neko" -} diff --git a/.docker/README.md b/.docker/README.md index 879a522e..01c96f29 100644 --- a/.docker/README.md +++ b/.docker/README.md @@ -2,11 +2,26 @@ If you want to contribute, but do not want to install anything on your host system, we got you covered. You only need docker. Technically, it could be done using vs code development in container, but this is more fun:). +## Running server (while developing) + +Go to `../server/dev` and run: + +- `./build` - Build server binary. +- `./start` - Start server. +- `./rebuild` - Rebuild server binary and restart server while it is running. + +## Running client (while developing) + +Go to `../client/dev` and run: + +- `./npm install` - Install dependencies first. +- `./serve` - Start client with live reload. + +## Building a new image after changes + You need to copy `.env.default` to `.env` and customize values. -## Step 1: Building server - -- `./build` - You can use this command to build your specified `SERVER_TAG` along with base image. +- `./build` - You can use this command to build base image. It will be used for building other images. If you want, you can build other tags. `base` tag needs to be build first: @@ -15,26 +30,3 @@ If you want, you can build other tags. `base` tag needs to be build first: - `./build chromium` - `./build google-chrome` - etc... - -## Step 2: Starting server - -- `./start-server` - Starting server image you specified in `.env`. -- `./start-server -r` - Shortcut for rebuilding server binary and then starting. - -If you are changing something in the server code, you do not want to rebuild container each time. You can just rebuild your binary: - -- `./rebuild-server` - Rebuild only server binary. -- `./rebuild-server -f` - Force to rebuild whole Golang environment (you should do this only of you change some dependencies). - -## Step 3: Serving client - -- `./serve-client` - Serving vue.js client. -- `./serve-client -i` - Install all dependencies. - -## Debug - -You can navigate to `CLIENT_PORT` and see live client there. It will be connected to your local server on `SERVER_PORT`. - -If you are leaving client as is and not changing it, you don't need to start `./serve-client` and you can access server's GUI directly on `SERVER_PORT`. - -Feel free to open new PR. diff --git a/.docker/build b/.docker/build index ad5f206d..ff1082cb 100755 --- a/.docker/build +++ b/.docker/build @@ -2,8 +2,6 @@ set -ex cd "$(dirname "$0")" -BASE="${PWD}/../" - # BUILD_IMAGE from environment vairables has precedence if [ ! -z "${BUILD_IMAGE}" ] then @@ -35,18 +33,18 @@ fi build_client() { - docker build -t neko-dev-client -f base/Dockerfile --target client "${BASE}" + docker build -t neko-dev-client ../client docker run --rm \ --user "$(id -u):$(id -g)" \ - -v "${BASE}client/dist:/tmp/dist" \ + -v "${PWD}/../client/dist:/tmp/dist" \ neko-dev-client sh -c "rm -rf /tmp/dist/*; cp -r /src/dist/* /tmp/dist" } build_server() { - docker build -t neko-dev-server -f base/Dockerfile --target server "${BASE}" + docker build -t neko-dev-server ../server docker run --rm \ --user "$(id -u):$(id -g)" \ - -v "${BASE}server/bin:/tmp/bin" \ + -v "${PWD}/../server/bin:/tmp/bin" \ neko-dev-server sh -c "rm -rf /tmp/bin/neko; cp /src/bin/neko /tmp/bin" } @@ -54,7 +52,7 @@ build() { if [ "$1" = "base" ] then # build base - docker build -t "${BUILD_IMAGE}:base" -f base/Dockerfile "${BASE}" + BUILD_IMAGE=$BUILD_IMAGE ../build else # build image docker build -t "${BUILD_IMAGE}:$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:base" -f "$1/Dockerfile" "$1/" @@ -65,7 +63,7 @@ build_arm() { if [ "$1" = "base" ] then # build ARM base - docker build -t "${BUILD_IMAGE}:arm-base" -f base/Dockerfile.arm "${BASE}" + BUILD_IMAGE=$BUILD_IMAGE FLAVOUR=arm ../build elif [ -f "$1/Dockerfile.arm" ] then # build dedicated ARM image @@ -80,7 +78,7 @@ build_intel() { if [ "$1" = "base" ] then # build intel base - docker build -t "${BUILD_IMAGE}:intel-base" -f base/Dockerfile.intel "${BASE}" + BUILD_IMAGE=$BUILD_IMAGE FLAVOUR=intel ../build elif [ -f "$1/Dockerfile.intel" ] then # build dedicated intel image @@ -95,7 +93,7 @@ build_nvidia() { if [ "$1" = "base" ] then # build nvidia base - docker build -t "${BUILD_IMAGE}:nvidia-base" -f base/Dockerfile.nvidia "${BASE}" + BUILD_IMAGE=$BUILD_IMAGE FLAVOUR=nvidia ../build elif [ -f "$1/Dockerfile.nvidia" ] then # build dedicated nvidia image diff --git a/.gitignore b/.gitignore index 44d65cd8..50d503fc 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,13 @@ bin # Environment files *.env + +bin/ +.idea +.env.development + +runtime/fonts/* +!runtime/fonts/.gitkeep + +runtime/icon-theme/* +!runtime/icon-theme/.gitkeep diff --git a/build b/build new file mode 100755 index 00000000..2de68a75 --- /dev/null +++ b/build @@ -0,0 +1,72 @@ +#!/bin/bash +cd "$(dirname "$0")" + +# if build image is not specified, use default +if [ -z "$BUILD_IMAGE" ]; then + BUILD_IMAGE="m1k1o/neko" +fi + +echo "Using build image: $BUILD_IMAGE" +echo "Using flavour: $FLAVOUR" + +RUNTIME_IMAGE="neko-runtime" +# if flavour is specified, append it to the image name and Dockerfile +if [ "$FLAVOUR" != "" ]; then + RUNTIME_IMAGE="$RUNTIME_IMAGE-$FLAVOUR" + BASE_IMAGE="$BUILD_IMAGE:$FLAVOUR-base" +else + BASE_IMAGE="$BUILD_IMAGE:base" +fi + +# if -f is passed, force rebuild +if [ "$1" == "-f" ]; then + echo "Forcing rebuild, removing existing images" + docker rmi neko-xorg-deps neko-server neko-client neko-runtime $BASE_IMAGE +fi + +function docker_image_exists() { + [ "$(docker images -q $1 2> /dev/null)" != "" ] +} + +if ! docker_image_exists neko-xorg-deps; then + echo "Building neko-xorg-deps image" + docker build -t neko-xorg-deps runtime/xorg-deps/ +else + echo "neko-xorg-deps image already exists" +fi + +if ! docker_image_exists neko-server; then + echo "Building neko-server image" + docker build -t neko-server server/ +else + echo "neko-server image already exists" +fi + +if ! docker_image_exists neko-client; then + echo "Building neko-client image" + docker build -t neko-client client/ +else + echo "neko-client image already exists" +fi + +if ! docker_image_exists $RUNTIME_IMAGE; then + echo "Building $RUNTIME_IMAGE image" + docker build -t $RUNTIME_IMAGE -f runtime/Dockerfile.$FLAVOUR runtime/ +else + echo "$RUNTIME_IMAGE image already exists" +fi + +docker build -t $BASE_IMAGE -f - . < /dev/null)" == "" ]; then - echo "Image 'neko_server_build' not found. Run ./build first." +if [ "$(docker images -q neko_server 2> /dev/null)" == "" ]; then + echo "Image 'neko_server' not found. Run ./build first." exit 1 fi docker run -it --rm \ --entrypoint="go" \ -v "${PWD}/../:/src" \ - neko_server_build fmt ./... + neko_server fmt ./... diff --git a/server/dev/go b/server/dev/go index ae0acf12..29a62e91 100755 --- a/server/dev/go +++ b/server/dev/go @@ -1,8 +1,8 @@ #!/bin/bash cd "$(dirname "$0")" -if [ "$(docker images -q neko_server_build 2> /dev/null)" == "" ]; then - echo "Image 'neko_server_build' not found. Run ./build first." +if [ "$(docker images -q neko_server 2> /dev/null)" == "" ]; then + echo "Image 'neko_server' not found. Run ./build first." exit 1 fi @@ -10,7 +10,7 @@ docker run -it \ --name "neko_server_go" \ --entrypoint="go" \ -v "${PWD}/../:/src" \ - neko_server_build "$@"; + neko_server "$@"; # # copy package files docker cp neko_server_go:/src/go.mod "../go.mod" @@ -18,7 +18,7 @@ docker cp neko_server_go:/src/go.sum "../go.sum" # # commit changes to image -docker commit "neko_server_go" "neko_server_build" +docker commit "neko_server_go" "neko_server" # # remove contianer diff --git a/server/dev/lint b/server/dev/lint index 4124fda4..c0f0b5bb 100755 --- a/server/dev/lint +++ b/server/dev/lint @@ -1,8 +1,8 @@ #!/bin/bash cd "$(dirname "$0")" -if [ "$(docker images -q neko_server_build 2> /dev/null)" == "" ]; then - echo "Image 'neko_server_build' not found. Run ./build first." +if [ "$(docker images -q neko_server 2> /dev/null)" == "" ]; then + echo "Image 'neko_server' not found. Run ./build first." exit 1 fi @@ -11,4 +11,4 @@ fi docker run --rm -it \ -v "${PWD}/../:/src" \ --entrypoint="/bin/bash" \ - neko_server_build -c '[ -f ./bin/golangci-lint ] || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.31.0;./bin/golangci-lint run'; + neko_server -c '[ -f ./bin/golangci-lint ] || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.31.0;./bin/golangci-lint run'; diff --git a/server/dev/rebuild b/server/dev/rebuild index ffa57bf3..d2132fe7 100755 --- a/server/dev/rebuild +++ b/server/dev/rebuild @@ -10,7 +10,7 @@ set -e docker run --rm -it \ -v "${PWD}/../:/src" \ --entrypoint="/bin/bash" \ - neko_server_build "./build" "$@"; + neko_server "./build" "$@"; # # remove old plugins diff --git a/server/dev/rebuild.input b/server/dev/rebuild.input index 7f10523d..006ba9c8 100755 --- a/server/dev/rebuild.input +++ b/server/dev/rebuild.input @@ -1,6 +1,6 @@ #!/bin/bash cd "$(dirname "$0")" -cd ../xorg/xf86-input-neko +cd ../../runtime/xorg-deps/xf86-input-neko # # aborting if any command returns a non-zero value diff --git a/server/dev/runtime/Dockerfile b/server/dev/runtime/Dockerfile index c6c3b99b..0be6746f 100644 --- a/server/dev/runtime/Dockerfile +++ b/server/dev/runtime/Dockerfile @@ -1,4 +1,4 @@ -ARG BASE_IMAGE=neko_server_runtime:latest +ARG BASE_IMAGE=neko_server:base FROM $BASE_IMAGE ARG SRC_URL="https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US" diff --git a/server/dev/start b/server/dev/start index d5de2f8b..c5aa6829 100755 --- a/server/dev/start +++ b/server/dev/start @@ -1,8 +1,8 @@ #!/bin/bash cd "$(dirname "$0")" -if [ -z "$(docker images -q neko_server_app 2> /dev/null)" ]; then - echo "Image 'neko_server_app' not found. Running ./build first." +if [ -z "$(docker images -q neko_server:app 2> /dev/null)" ]; then + echo "Image 'neko_server:app' not found. Running ./build first." ./build fi @@ -66,4 +66,4 @@ docker run --rm -it \ --shm-size=2G \ --security-opt seccomp=unconfined \ $EXTRAOPTS \ - neko_server_app:latest; + neko_server:app;