diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 463bdd1..c29c0d6 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,129 +1,157 @@ -FROM golang:stretch +FROM nurdism/neko -# This Dockerfile adds a non-root user with sudo access. Use the "remoteUser" -# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs -# will be updated to match your local UID/GID (when using the dockerFile property). -# See https://aka.ms/vscode-remote/containers/non-root-user for details. -ARG USERNAME=vscode +ARG USERNAME=neko ARG USER_UID=1000 ARG USER_GID=$USER_UID -# Avoid warnings by switching to noninteractive -ENV DEBIAN_FRONTEND=noninteractive +# Set to false to skip installing zsh and Oh My ZSH! +ARG INSTALL_ZSH="true" -# Runtime for testing and compileing -RUN apt-get update \ - && apt-get -y install supervisor openbox dbus-x11 ttf-freefont xvfb pulseaudio consolekit firefox-esr x11vnc \ - && apt-get -y install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good gstreamer1.0-pulseaudio \ - && apt-get -y install gcc libc6-dev \ - && apt-get -y install libx11-dev xorg-dev libxtst-dev libpng++-dev \ - && apt-get -y install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev \ - && apt-get -y install libxkbcommon-dev \ - && apt-get -y install xsel xclip +# Location and expected SHA for common setup script - SHA generated on release +ARG COMMON_SCRIPT_SOURCE="https://raw.githubusercontent.com/microsoft/vscode-dev-containers/master/script-library/common-alpine.sh" +ARG COMMON_SCRIPT_SHA="dev-mode" -# Configure apt, install packages and tools -RUN apt-get update \ - && apt-get -y install --no-install-recommends apt-utils apt-transport-https dialog 2>&1 \ - # - # Verify git, process tools, lsb-release (common in install instructions for CLIs) installed - && apt-get -y install git iproute2 procps lsb-release xz-utils \ - # - # Install Docker CE CLI - && apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common lsb-release \ - && curl -fsSL https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/gpg | (OUT=$(apt-key add - 2>&1) || echo $OUT) \ - && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable" \ - && apt-get update \ - && apt-get install -y docker-ce-cli \ - # - # Install Docker Compose - && curl -sSL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ - && chmod +x /usr/local/bin/docker-compose \ - # - # Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/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 for the non-root user - && apt-get install -y sudo \ - && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ - && chmod 0440 /etc/sudoers.d/$USERNAME +# Install git, bash, dependencies, and add a non-root user +RUN apk update \ + && apk add --no-cache wget coreutils ca-certificates \ + && apk add --no-cache wget openssl docker libxtst-dev xclip x11vnc glib-dev gobject-introspection \ + # + # Verify git, common tools / libs installed, add/modify non-root user, optionally install zsh + && wget -q -O /tmp/common-setup.sh $COMMON_SCRIPT_SOURCE \ + && if [ "$COMMON_SCRIPT_SHA" != "dev-mode" ]; then echo "$COMMON_SCRIPT_SHA /tmp/common-setup.sh" | sha256sum -c - ; fi \ + && /bin/ash /tmp/common-setup.sh "$INSTALL_ZSH" "$USERNAME" "$USER_UID" "$USER_GID" \ + && rm /tmp/common-setup.sh -ENV NODE_VERSION 12.14.1 +ENV NODE_VERSION 13.7.0 +RUN apk add --no-cache curl libstdc++ \ + && ARCH= && alpineArch="$(apk --print-arch)" \ + && case "${alpineArch##*-}" in \ + x86_64) \ + ARCH='x64' \ + CHECKSUM="4c153345a08d2eeb40dfbb62f1ef6ade7ec369630f9cf9f061bf9d52b10acafc" \ + ;; \ + *) ;; \ + esac \ + && if [ -n "${CHECKSUM}" ]; then \ + set -eu; \ + curl -fsSLO --compressed "https://unofficial-builds.nodejs.org/download/release/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz"; \ + echo "$CHECKSUM node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz" | sha256sum -c - \ + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs; \ + else \ + echo "Building from source" \ + # backup build + && apk add --no-cache binutils-gold g++ gcc gnupg libgcc linux-headers make python \ + # gpg keys listed at https://github.com/nodejs/node#release-keys + && for key in \ + 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ + FD3A5288F042B6850C66B31F09FE44734EB7990E \ + 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ + DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ + C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ + B9AE9905FFD7803F25714661B63B535A4C206CA9 \ + 77984A986EBC2AA786BC0F66B01FBB92821C587A \ + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ + 4ED778F539E3634C779C87C6D7062848A1AB005C \ + A48C2BEE680E841632CD4E44F07496B3EB3C1762 \ + B9E2F5981AA6E0CD28160D9FF13993A75599653C \ + ; do \ + gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xf "node-v$NODE_VERSION.tar.xz" \ + && cd "node-v$NODE_VERSION" \ + && ./configure \ + && make -j$(getconf _NPROCESSORS_ONLN) V= \ + && make install \ + && cd .. \ + && rm -Rf "node-v$NODE_VERSION" \ + && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt; \ + fi \ + && rm -f "node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz" -RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \ - && case "${dpkgArch##*-}" in \ - amd64) ARCH='x64';; \ - ppc64el) ARCH='ppc64le';; \ - s390x) ARCH='s390x';; \ - arm64) ARCH='arm64';; \ - armhf) ARCH='armv7l';; \ - i386) ARCH='x86';; \ - *) echo "unsupported architecture"; exit 1 ;; \ - esac \ - # gpg keys listed at https://github.com/nodejs/node#release-keys - && set -ex \ - && for key in \ - 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ - FD3A5288F042B6850C66B31F09FE44734EB7990E \ - 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ - DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ - C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ - B9AE9905FFD7803F25714661B63B535A4C206CA9 \ - 77984A986EBC2AA786BC0F66B01FBB92821C587A \ - 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ - 4ED778F539E3634C779C87C6D7062848A1AB005C \ - A48C2BEE680E841632CD4E44F07496B3EB3C1762 \ - B9E2F5981AA6E0CD28160D9FF13993A75599653C \ - ; do \ - gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ - gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ - gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ - done \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ - && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +ENV GOLANG_VERSION 1.13.6 +RUN set -eux \ + && apk add --no-cache bash gcc musl-dev openssl go \ + && export \ +# set GOROOT_BOOTSTRAP such that we can actually build Go + GOROOT_BOOTSTRAP="$(go env GOROOT)" \ +# ... and set "cross-building" related vars to the installed system's values so that we create a build targeting the proper arch +# (for example, if our build host is GOARCH=amd64, but our build env/image is GOARCH=386, our build needs GOARCH=386) + GOOS="$(go env GOOS)" \ + GOARCH="$(go env GOARCH)" \ + GOHOSTOS="$(go env GOHOSTOS)" \ + GOHOSTARCH="$(go env GOHOSTARCH)" \ + ; \ +# also explicitly set GO386 and GOARM if appropriate +# https://github.com/docker-library/golang/issues/184 + apkArch="$(apk --print-arch)"; \ + case "$apkArch" in \ + armhf) export GOARM='6' ;; \ + armv7) export GOARM='7' ;; \ + x86) export GO386='387' ;; \ + esac; \ + wget -O go.tgz "https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz"; \ + echo 'aae5be954bdc40bcf8006eb77e8d8a5dde412722bc8effcdaf9772620d06420c *go.tgz' | sha256sum -c -; \ + tar -C /usr/local -xzf go.tgz; \ + rm go.tgz; \ + cd /usr/local/go/src; \ + ./make.bash; \ + rm -rf \ +# https://github.com/golang/go/blob/0b30cf534a03618162d3015c8705dd2231e34703/src/cmd/dist/buildtool.go#L121-L125 + /usr/local/go/pkg/bootstrap \ +# https://golang.org/cl/82095 +# https://github.com/golang/build/blob/e3fe1605c30f6a3fd136b561569933312ede8782/cmd/release/releaselet.go#L56 + /usr/local/go/pkg/obj \ + && export PATH="/usr/local/go/bin:$PATH" \ + && go version -USER $USERNAME +ENV GOPATH /go +ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH -# Install packages and tools -RUN go get -x -d github.com/stamblerre/gocode 2>&1 \ +# +# Install Go tools w/module support +RUN mkdir -p /tmp/gotools \ + && cd /tmp/gotools \ + && GO111MODULE=on go get -v golang.org/x/tools/gopls@latest 2>&1 \ + && GO111MODULE=on go get -v \ + honnef.co/go/tools/...@latest \ + golang.org/x/tools/cmd/gorename@latest \ + golang.org/x/tools/cmd/goimports@latest \ + golang.org/x/tools/cmd/guru@latest \ + golang.org/x/lint/golint@latest \ + github.com/mdempsky/gocode@latest \ + github.com/cweill/gotests/...@latest \ + github.com/haya14busa/goplay/cmd/goplay@latest \ + github.com/sqs/goreturns@latest \ + github.com/josharian/impl@latest \ + github.com/davidrjenni/reftools/cmd/fillstruct@latest \ + github.com/uudashr/gopkgs/cmd/gopkgs@latest \ + github.com/ramya-rao-a/go-outline@latest \ + github.com/acroca/go-symbols@latest \ + github.com/godoctor/godoctor@latest \ + github.com/rogpeppe/godef@latest \ + github.com/zmb3/gogetdoc@latest \ + github.com/fatih/gomodifytags@latest \ + github.com/mgechev/revive@latest \ + github.com/go-delve/delve/cmd/dlv@latest 2>&1 \ + # + # Install Go tools w/o module support + && go get -v github.com/alecthomas/gometalinter 2>&1 \ + # + # Install gocode-gomod + && go get -x -d github.com/stamblerre/gocode 2>&1 \ && go build -o gocode-gomod github.com/stamblerre/gocode \ && mv gocode-gomod $GOPATH/bin/ \ # - # Install Go tools - && go get -u -v \ - github.com/mdempsky/gocode \ - github.com/uudashr/gopkgs/cmd/gopkgs \ - github.com/ramya-rao-a/go-outline \ - github.com/acroca/go-symbols \ - github.com/godoctor/godoctor \ - golang.org/x/tools/cmd/guru \ - golang.org/x/tools/cmd/gorename \ - github.com/rogpeppe/godef \ - github.com/zmb3/gogetdoc \ - github.com/haya14busa/goplay/cmd/goplay \ - github.com/sqs/goreturns \ - github.com/josharian/impl \ - github.com/davidrjenni/reftools/cmd/fillstruct \ - github.com/fatih/gomodifytags \ - github.com/cweill/gotests/... \ - golang.org/x/tools/cmd/goimports \ - golang.org/x/lint/golint \ - golang.org/x/tools/gopls \ - github.com/alecthomas/gometalinter \ - honnef.co/go/tools/... \ - github.com/golangci/golangci-lint/cmd/golangci-lint \ - github.com/mgechev/revive \ - github.com/derekparker/delve/cmd/dlv 2>&1 + # Install golangci-lint + && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin 2>&1 -ENV GO111MODULE=on - -# Switch back to dialog for any ad-hoc use of apt-get -ENV DEBIAN_FRONTEND=dialog +RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" "$GOPATH/pkg/mod" && chmod -R 777 "$GOPATH" +ENV GO111MODULE=on \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0076d05..7e3e50e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,9 +3,9 @@ "service": "neko", "dockerComposeFile": "docker-compose.yaml", "workspaceFolder": "/workspace", - "remoteUser": "vscode", + "remoteUser": "neko", "settings": { - "terminal.integrated.shell.linux": "/bin/bash", + "terminal.integrated.shell.linux": "/bin/ash", "go.gopath": "/go" }, "extensions": [ diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 7b3062e..31207e9 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -1,4 +1,4 @@ -version: '3.6' +version: '2.0' services: neko: network_mode: host @@ -11,6 +11,7 @@ services: security_opt: - seccomp:unconfined volumes: - - /home/neko/src:/workspace + - /home/nurd/neko:/workspace - /var/run/docker.sock:/var/run/docker.sock - command: "/bin/sh -c \"while sleep 1000; do :; done\"" + + command: "/bin/sh -c \"while sleep 1000; do :; done\"" \ No newline at end of file diff --git a/.docker/entrypoint.sh b/.docker/entrypoint.sh deleted file mode 100755 index 92d1361..0000000 --- a/.docker/entrypoint.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -sudo /etc/init.d/dbus start - -echo "Starting supervisord" -/usr/bin/supervisord -c /etc/neko/supervisord.conf \ No newline at end of file diff --git a/.docker/files/dbus b/.docker/files/dbus new file mode 100755 index 0000000..38c8474 --- /dev/null +++ b/.docker/files/dbus @@ -0,0 +1,4 @@ +#!/bin/sh + +rm -rf /var/run/dbus.pid +/usr/bin/dbus-daemon --nofork --print-pid --config-file=/usr/share/dbus-1/system.conf \ No newline at end of file diff --git a/.docker/default.pa b/.docker/files/default.pa similarity index 100% rename from .docker/default.pa rename to .docker/files/default.pa diff --git a/.docker/firefox/autoconfig.js b/.docker/files/firefox/autoconfig.js similarity index 100% rename from .docker/firefox/autoconfig.js rename to .docker/files/firefox/autoconfig.js diff --git a/.docker/firefox/neko.js b/.docker/files/firefox/neko.js similarity index 100% rename from .docker/firefox/neko.js rename to .docker/files/firefox/neko.js diff --git a/.docker/firefox/policies.json b/.docker/files/firefox/policies.json similarity index 99% rename from .docker/firefox/policies.json rename to .docker/files/firefox/policies.json index d062762..dd42fa6 100644 --- a/.docker/firefox/policies.json +++ b/.docker/files/firefox/policies.json @@ -28,7 +28,7 @@ }, { "Title": "9Anime", - "URL": "https://9anime.to/", + "URL": "https://9anime.xyz/", "Favicon": "https://staticf.akacdn.ru/assets/favicons/favicon.png", "Folder": "Media", "Placement": "toolbar" diff --git a/.docker/openbox.xml b/.docker/files/openbox.xml similarity index 99% rename from .docker/openbox.xml rename to .docker/files/openbox.xml index 9410a01..af6f12d 100644 --- a/.docker/openbox.xml +++ b/.docker/files/openbox.xml @@ -640,7 +640,7 @@ - /var/lib/openbox/debian-menu.xml + menu.xml 200