Add files via upload
This commit is contained in:
158
mediaelch/Dockerfile
Normal file
158
mediaelch/Dockerfile
Normal file
@@ -0,0 +1,158 @@
|
||||
ARG BUILD_FROM
|
||||
ARG BUILD_ARCH
|
||||
|
||||
#
|
||||
# baseimage-gui Dockerfile
|
||||
#
|
||||
# https://github.com/jlesage/docker-baseimage-gui
|
||||
#
|
||||
|
||||
# Get Dockerfile cross-compilation helpers.
|
||||
FROM --platform=$BUILD_ARCH tonistiigi/xx AS xx
|
||||
|
||||
# Build Nginx.
|
||||
FROM --platform=$BUILD_ARCH ${BUILD_FROM} AS nginx
|
||||
ARG TARGETPLATFORM
|
||||
COPY --from=xx / /
|
||||
COPY src/nginx/build.sh /tmp/build-nginx.sh
|
||||
RUN chmod -R 755 /tmp/build-nginx.sh
|
||||
RUN /tmp/build-nginx.sh
|
||||
RUN xx-verify --static /tmp/nginx-install/sbin/nginx
|
||||
# NOTE: Extended attributes are kept by buildx when using the COPY command.
|
||||
# See https://wildwolf.name/multi-stage-docker-builds-and-xattrs/.
|
||||
RUN apk --no-cache add libcap && setcap cap_net_bind_service=ep /tmp/nginx-install/sbin/nginx
|
||||
|
||||
# Build noVNC.
|
||||
FROM --platform=$BUILD_ARCH ${BUILD_FROM} AS noVNC
|
||||
ARG NOVNC_VERSION=1.3.0
|
||||
ARG BOOTSTRAP_VERSION=5.1.3
|
||||
ARG BOOTSTRAP_NIGHTSHADE_VERSION=1.1.3
|
||||
ARG FONTAWESOME_VERSION=4.7.0
|
||||
ARG NOVNC_URL=https://github.com/novnc/noVNC/archive/refs/tags/v${NOVNC_VERSION}.tar.gz
|
||||
ARG BOOTSTRAP_URL=https://github.com/twbs/bootstrap/releases/download/v${BOOTSTRAP_VERSION}/bootstrap-${BOOTSTRAP_VERSION}-dist.zip
|
||||
ARG BOOTSTRAP_NIGHTSHADE_URL=https://github.com/vinorodrigues/bootstrap-dark-5/archive/refs/tags/v${BOOTSTRAP_NIGHTSHADE_VERSION}.tar.gz
|
||||
ARG FONTAWESOME_URL=https://fontawesome.com/v${FONTAWESOME_VERSION}/assets/font-awesome-${FONTAWESOME_VERSION}.zip
|
||||
WORKDIR /tmp
|
||||
COPY rootfs/opt/noVNC/index.html /opt/noVNC/index.html
|
||||
RUN \
|
||||
# Install required tools.
|
||||
apk --no-cache add \
|
||||
curl \
|
||||
sed \
|
||||
jq \
|
||||
npm \
|
||||
&& \
|
||||
npm install clean-css-cli -g
|
||||
RUN \
|
||||
# Create required directories.
|
||||
mkdir -p \
|
||||
/opt/noVNC/app/styles \
|
||||
/opt/noVNC/app/fonts
|
||||
RUN \
|
||||
# Install noVNC.
|
||||
mkdir /tmp/noVNC && \
|
||||
curl -# -L ${NOVNC_URL} | tar -xz --strip 1 -C /tmp/noVNC && \
|
||||
cp -vr /tmp/noVNC/core /opt/noVNC/ && \
|
||||
cp -vr /tmp/noVNC/vendor /opt/noVNC/
|
||||
RUN \
|
||||
# Install Bootstrap.
|
||||
# NOTE: Only copy the JS bundle, since the CSS is taken from Bootstrap
|
||||
# Nightshade.
|
||||
curl -sS -L -O ${BOOTSTRAP_URL} && \
|
||||
unzip bootstrap-${BOOTSTRAP_VERSION}-dist.zip && \
|
||||
#cp -v bootstrap-${BOOTSTRAP_VERSION}-dist/css/bootstrap.min.css /opt/noVNC/app/styles/ && \
|
||||
cp -v bootstrap-${BOOTSTRAP_VERSION}-dist/js/bootstrap.bundle.min.js* /opt/noVNC/app/
|
||||
RUN \
|
||||
# Install Bootstrap Nightshade.
|
||||
mkdir /tmp/bootstrap-nightshade && \
|
||||
curl -# -L ${BOOTSTRAP_NIGHTSHADE_URL} | tar -xz --strip 1 -C /tmp/bootstrap-nightshade && \
|
||||
cleancss \
|
||||
-O1 \
|
||||
--format breakWith=lf \
|
||||
--output /opt/noVNC/app/styles/bootstrap-nightshade.min.css \
|
||||
/tmp/bootstrap-nightshade/dist/css/bootstrap-nightshade.css
|
||||
RUN \
|
||||
# Install Font Awesome.
|
||||
curl -sS -L -O ${FONTAWESOME_URL} && \
|
||||
unzip font-awesome-${FONTAWESOME_VERSION}.zip && \
|
||||
cp -v font-awesome-${FONTAWESOME_VERSION}/fonts/fontawesome-webfont.* /opt/noVNC/app/fonts/ && \
|
||||
cp -v font-awesome-${FONTAWESOME_VERSION}/css/font-awesome.min.css /opt/noVNC/app/styles/
|
||||
RUN \
|
||||
# Set version of CSS and JavaScript file URLs.
|
||||
sed "s/UNIQUE_VERSION/$(date | md5sum | cut -c1-10)/g" -i /opt/noVNC/index.html
|
||||
|
||||
# Pull base image.
|
||||
FROM ${BUILD_FROM} AS MediaElchBuild
|
||||
WORKDIR /tmp
|
||||
|
||||
# Define software versions.
|
||||
ARG REPO_TAG=v2.10.0
|
||||
# Define software download URLs.
|
||||
ARG REPO_URL=https://github.com/Komet/MediaElch
|
||||
|
||||
RUN \
|
||||
apk add --update \
|
||||
git \
|
||||
build-base \
|
||||
qtchooser \
|
||||
qt5-qtbase-dev \
|
||||
qt5-qtquickcontrols2-dev \
|
||||
qt5-qtsvg-dev \
|
||||
qt5-qtmultimedia-dev \
|
||||
qt5-qttools-dev \
|
||||
qt5-qtdeclarative-dev \
|
||||
libmediainfo-dev
|
||||
|
||||
# Download MediaElch
|
||||
RUN \
|
||||
REPO_DIR=/tmp/$(basename $REPO_URL .git) && \
|
||||
cd /tmp && \
|
||||
git clone --single-branch $REPO_URL && \
|
||||
git --work-tree=$REPO_DIR --git-dir=$REPO_DIR/.git checkout tags/$REPO_TAG
|
||||
|
||||
RUN \
|
||||
cd /tmp/MediaElch && \
|
||||
git submodule update --init && \
|
||||
mkdir build && cd build && \
|
||||
qmake .. CONFIG+=release && \
|
||||
make install -j$(nproc)
|
||||
|
||||
# Pull base image.
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
#zenity
|
||||
ARG VNC_PKGS="ttf-dejavu tigervnc openbox"
|
||||
ARG RUNTIME_PKG="qtchooser qt5-qtbase qt5-qtquickcontrols2 qt5-qtsvg qt5-qtmultimedia qt5-qttools qt5-qtbase-sqlite libmediainfo"
|
||||
|
||||
# Add files.
|
||||
COPY rootfs/ /
|
||||
COPY --from=nginx /tmp/nginx-install /opt/base/
|
||||
COPY --from=noVNC /opt/noVNC /opt/noVNC
|
||||
COPY --from=MediaElchBuild /usr/bin/MediaElch /app/
|
||||
COPY --from=MediaElchBuild /usr/share/pixmaps/MediaElch.png /opt/noVNC/app/images/icons/master_icon.png
|
||||
|
||||
# Install dependencies.
|
||||
RUN \
|
||||
apk add --update \
|
||||
${VNC_PKGS} \
|
||||
${RUNTIME_PKG}
|
||||
|
||||
# Add files.
|
||||
COPY rootfs/ /
|
||||
|
||||
# Set environment variables.
|
||||
ENV APP_NAME="MediaElch" \
|
||||
S6_KILL_GRACETIME=8000 \
|
||||
USER_ID=0 \
|
||||
GROUP_ID=0
|
||||
|
||||
# Corrects permissions for s6 v3
|
||||
RUN if [ -d /etc/cont-init.d ]; then chmod -R 755 /etc/cont-init.d; fi && \
|
||||
if [ -d /etc/services.d ]; then chmod -R 755 /etc/services.d; fi
|
||||
|
||||
WORKDIR /data
|
||||
|
||||
# Metadata.
|
||||
LABEL \
|
||||
org.label-schema.name="MediaElch" \
|
||||
org.label-schema.description="Docker container for MediaElch"
|
||||
22
mediaelch/LICENSE
Normal file
22
mediaelch/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Cyrill Kulka
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
28
mediaelch/README.md
Normal file
28
mediaelch/README.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# List of available Languages
|
||||
|
||||
| Code | language name | progress |
|
||||
|:------ |:------ | ------:|
|
||||
| bg | Bulgarian | 67% |
|
||||
| cs-CZ | Czech (Czech Republic) | 64% |
|
||||
| da | Danish | 2% |
|
||||
| de | German | 100% |
|
||||
| en | English | 100% |
|
||||
| en-US | English (United States) | 86% |
|
||||
| es-ES | Spanish (Spain) | 76% |
|
||||
| et | Estonian | 90% |
|
||||
| fi | Finnish | 86% |
|
||||
| fr | French | 97% |
|
||||
| it | Italian | 100% |
|
||||
| ja | Japanese | 10% |
|
||||
| ko | Korean | 62% |
|
||||
| nl-NL | Dutch (Netherlands) | 79% |
|
||||
| no | Norwegian | 72% |
|
||||
| pl | Polish | 78% |
|
||||
| pt-BR | Portuguese (Brazil) | 100% |
|
||||
| pt-PT | Portuguese (Portugal) | 79% |
|
||||
| ru | Russian | 100% |
|
||||
| sv | Swedish | 73% |
|
||||
| zh-CN | Chinese (China) | 97% |
|
||||
|
||||
Here you can see the progress of the translation and eventually help.
|
||||
https://explore.transifex.com/komet/mediaelch/
|
||||
7
mediaelch/build.yaml
Normal file
7
mediaelch/build.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
build_from:
|
||||
armhf: ghcr.io/home-assistant/armhf-base:3.16
|
||||
armv7: ghcr.io/home-assistant/armv7-base:3.16
|
||||
aarch64: ghcr.io/home-assistant/aarch64-base:3.16
|
||||
amd64: ghcr.io/home-assistant/amd64-base:3.16
|
||||
i386: ghcr.io/home-assistant/i386-base:3.16
|
||||
27
mediaelch/config.yaml
Normal file
27
mediaelch/config.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: MediaElch
|
||||
slug: mediaelch
|
||||
version: 2.10.0
|
||||
stage: experimental
|
||||
description: MediaElch is a MediaManager for Kodi. Information about Movies, TV Shows, Concerts and Music are stored as NFO files. Fanarts are downloaded automatically from fanart.tv.
|
||||
url: https://github.com/d-two/hassio-addons
|
||||
startup: application
|
||||
init: false
|
||||
panel_icon: mdi:multimedia
|
||||
ingress: true
|
||||
ingress_port: 5800
|
||||
webui: "http://[HOST]:[PORT:5800]"
|
||||
arch:
|
||||
- aarch64
|
||||
- amd64
|
||||
- armhf
|
||||
- i386
|
||||
boot: auto
|
||||
map:
|
||||
- media:rw
|
||||
schema:
|
||||
app_lang: list(bg|cs-CZ|da|de|en|en-US|es-ES|et|fi|fr|it|ja|ko|nl-NL|no|pl|pt-BR|pt-PT|ru|sv|zh-CN)?
|
||||
#ports:
|
||||
# 5800/tcp: 5800
|
||||
#ports_description:
|
||||
# 5800/tcp: Web UI port
|
||||
BIN
mediaelch/icon.png
Normal file
BIN
mediaelch/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.9 KiB |
BIN
mediaelch/logo.png
Normal file
BIN
mediaelch/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.9 KiB |
15
mediaelch/rootfs/app/advancedsettings.xml
Normal file
15
mediaelch/rootfs/app/advancedsettings.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This XML contains advanced settings for MediaElch (http://mediaelch.de/).
|
||||
All tags contain MediaElch's default values unless stated otherwise.
|
||||
-->
|
||||
<advancedsettings>
|
||||
<!--
|
||||
Set the interface language. If it is set to "system", your system's
|
||||
language will be used. Use the format "lang-COUNTRY" to specify your
|
||||
language. Examples: "de-DE", "en-US", "pt-PT", "pt-BR"
|
||||
If <locale> is not valid, your system's locale will be used.
|
||||
If <locale> exists, but is not supported by MediaElch, English will be used.
|
||||
-->
|
||||
<locale>%%app_lang%%</locale>
|
||||
</advancedsettings>
|
||||
21
mediaelch/rootfs/etc/cont-init.d/10-nginx.sh
Normal file
21
mediaelch/rootfs/etc/cont-init.d/10-nginx.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status.
|
||||
set -u # Treat unset variables as an error.
|
||||
|
||||
#
|
||||
# Adjust nginx virtual server configuration.
|
||||
#
|
||||
|
||||
NGINX_DIRS="\
|
||||
/var/run/nginx \
|
||||
/var/tmp/nginx \
|
||||
/var/lib/nginx/logs
|
||||
"
|
||||
|
||||
# Make sure required directories exist.
|
||||
for DIR in $NGINX_DIRS; do
|
||||
mkdir -p "$DIR"
|
||||
done
|
||||
|
||||
# vim:ft=sh:ts=4:sw=4:et:sts=4
|
||||
13
mediaelch/rootfs/etc/cont-init.d/10-setup-lang.sh
Normal file
13
mediaelch/rootfs/etc/cont-init.d/10-setup-lang.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: MediaElch
|
||||
# Setup the application language
|
||||
# ==============================================================================
|
||||
|
||||
declare app_lang="system"
|
||||
|
||||
if bashio::config.has_value 'app_lang'; then
|
||||
app_lang=$(bashio::config 'app_lang')
|
||||
fi
|
||||
|
||||
sed -i "s#%%app_lang%%#${app_lang}#g" /app/advancedsettings.xml
|
||||
57
mediaelch/rootfs/etc/cont-init.d/10-web-data.sh
Normal file
57
mediaelch/rootfs/etc/cont-init.d/10-web-data.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status.
|
||||
set -u # Treat unset variables as an error.
|
||||
|
||||
is_number() {
|
||||
case "${1:-}" in
|
||||
''|*[!0-9]*) return 1 ;;
|
||||
*) return 0 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
WEB_DATA_FILE="/opt/noVNC/app/webdata.js"
|
||||
|
||||
rm -f "$WEB_DATA_FILE"
|
||||
|
||||
# Beginning of the JavaScript file.
|
||||
printf 'const WebData = {\n' >> "$WEB_DATA_FILE"
|
||||
|
||||
# Add application name.
|
||||
printf ' applicationName: "%s"' "MediaElch" >> "$WEB_DATA_FILE"
|
||||
|
||||
# Add application version.
|
||||
if [ -n "${APP_VERSION:-}" ]; then
|
||||
printf ',\n applicationVersion: "%s"' "$APP_VERSION" >> "$WEB_DATA_FILE"
|
||||
fi
|
||||
|
||||
# Add Docker image version.
|
||||
if [ -n "${DOCKER_IMAGE_VERSION:-}" ]; then
|
||||
printf ',\n dockerImageVersion: "%s"' "$DOCKER_IMAGE_VERSION" >> "$WEB_DATA_FILE"
|
||||
fi
|
||||
|
||||
# Add dark mode.
|
||||
#if is-bool-val-true "${DARK_MODE:-0}"; then
|
||||
printf ',\n darkMode: true' >> "$WEB_DATA_FILE"
|
||||
#else
|
||||
# printf ',\n darkMode: false' >> "$WEB_DATA_FILE"
|
||||
#fi
|
||||
|
||||
# Add application's window width.
|
||||
if is_number "${DISPLAY_WIDTH:-}"; then
|
||||
printf ',\n applicationWindowWidth: %s' "$DISPLAY_WIDTH" >> "$WEB_DATA_FILE"
|
||||
fi
|
||||
|
||||
# Add application's window height.
|
||||
if is_number "${DISPLAY_HEIGHT:-}"; then
|
||||
printf ',\n applicationWindowHeight: %s' "$DISPLAY_HEIGHT" >> "$WEB_DATA_FILE"
|
||||
fi
|
||||
|
||||
# End of the JavaScript file.
|
||||
printf '\n};\n' >> "$WEB_DATA_FILE"
|
||||
printf 'export default WebData;\n' >> "$WEB_DATA_FILE"
|
||||
|
||||
# Make sure the file has the right permissions.
|
||||
chmod 444 "$WEB_DATA_FILE"
|
||||
|
||||
# vim:ft=sh:ts=4:sw=4:et:sts=4
|
||||
17
mediaelch/rootfs/etc/nginx/includes/default_stream.conf
Normal file
17
mediaelch/rootfs/etc/nginx/includes/default_stream.conf
Normal file
@@ -0,0 +1,17 @@
|
||||
# This is the default stream configuration. This is used to terminate the SSL
|
||||
# connection for the VNC session.
|
||||
|
||||
server {
|
||||
listen 5900 ssl;
|
||||
proxy_pass unix:/tmp/vnc.sock;
|
||||
|
||||
# Path to certificate files.
|
||||
ssl_certificate /config/certs/vnc-fullchain.pem;
|
||||
ssl_certificate_key /config/certs/vnc-privkey.pem;
|
||||
|
||||
# Path of the file with Diffie-Hellman parameters for EDH ciphers.
|
||||
ssl_dhparam /config/certs/dhparam.pem;
|
||||
|
||||
# SSL handshake timeout.
|
||||
ssl_handshake_timeout 10s;
|
||||
}
|
||||
96
mediaelch/rootfs/etc/nginx/includes/mime.types
Normal file
96
mediaelch/rootfs/etc/nginx/includes/mime.types
Normal file
@@ -0,0 +1,96 @@
|
||||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
text/xml xml;
|
||||
image/gif gif;
|
||||
image/jpeg jpeg jpg;
|
||||
application/javascript js;
|
||||
application/atom+xml atom;
|
||||
application/rss+xml rss;
|
||||
|
||||
text/mathml mml;
|
||||
text/plain txt;
|
||||
text/vnd.sun.j2me.app-descriptor jad;
|
||||
text/vnd.wap.wml wml;
|
||||
text/x-component htc;
|
||||
|
||||
image/png png;
|
||||
image/svg+xml svg svgz;
|
||||
image/tiff tif tiff;
|
||||
image/vnd.wap.wbmp wbmp;
|
||||
image/webp webp;
|
||||
image/x-icon ico;
|
||||
image/x-jng jng;
|
||||
image/x-ms-bmp bmp;
|
||||
|
||||
font/woff woff;
|
||||
font/woff2 woff2;
|
||||
|
||||
application/java-archive jar war ear;
|
||||
application/json json;
|
||||
application/mac-binhex40 hqx;
|
||||
application/msword doc;
|
||||
application/pdf pdf;
|
||||
application/postscript ps eps ai;
|
||||
application/rtf rtf;
|
||||
application/vnd.apple.mpegurl m3u8;
|
||||
application/vnd.google-earth.kml+xml kml;
|
||||
application/vnd.google-earth.kmz kmz;
|
||||
application/vnd.ms-excel xls;
|
||||
application/vnd.ms-fontobject eot;
|
||||
application/vnd.ms-powerpoint ppt;
|
||||
application/vnd.oasis.opendocument.graphics odg;
|
||||
application/vnd.oasis.opendocument.presentation odp;
|
||||
application/vnd.oasis.opendocument.spreadsheet ods;
|
||||
application/vnd.oasis.opendocument.text odt;
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
pptx;
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
xlsx;
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
docx;
|
||||
application/vnd.wap.wmlc wmlc;
|
||||
application/x-7z-compressed 7z;
|
||||
application/x-cocoa cco;
|
||||
application/x-java-archive-diff jardiff;
|
||||
application/x-java-jnlp-file jnlp;
|
||||
application/x-makeself run;
|
||||
application/x-perl pl pm;
|
||||
application/x-pilot prc pdb;
|
||||
application/x-rar-compressed rar;
|
||||
application/x-redhat-package-manager rpm;
|
||||
application/x-sea sea;
|
||||
application/x-shockwave-flash swf;
|
||||
application/x-stuffit sit;
|
||||
application/x-tcl tcl tk;
|
||||
application/x-x509-ca-cert der pem crt;
|
||||
application/x-xpinstall xpi;
|
||||
application/xhtml+xml xhtml;
|
||||
application/xspf+xml xspf;
|
||||
application/zip zip;
|
||||
|
||||
application/octet-stream bin exe dll;
|
||||
application/octet-stream deb;
|
||||
application/octet-stream dmg;
|
||||
application/octet-stream iso img;
|
||||
application/octet-stream msi msp msm;
|
||||
|
||||
audio/midi mid midi kar;
|
||||
audio/mpeg mp3;
|
||||
audio/ogg ogg;
|
||||
audio/x-m4a m4a;
|
||||
audio/x-realaudio ra;
|
||||
|
||||
video/3gpp 3gpp 3gp;
|
||||
video/mp2t ts;
|
||||
video/mp4 mp4;
|
||||
video/mpeg mpeg mpg;
|
||||
video/quicktime mov;
|
||||
video/webm webm;
|
||||
video/x-flv flv;
|
||||
video/x-m4v m4v;
|
||||
video/x-mng mng;
|
||||
video/x-ms-asf asx asf;
|
||||
video/x-ms-wmv wmv;
|
||||
video/x-msvideo avi;
|
||||
}
|
||||
15
mediaelch/rootfs/etc/nginx/includes/proxy_params.conf
Normal file
15
mediaelch/rootfs/etc/nginx/includes/proxy_params.conf
Normal file
@@ -0,0 +1,15 @@
|
||||
proxy_http_version 1.1;
|
||||
proxy_ignore_client_abort off;
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_redirect off;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_max_temp_file_size 0;
|
||||
|
||||
proxy_set_header Accept-Encoding "";
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-NginX-Proxy true;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
7
mediaelch/rootfs/etc/nginx/includes/server_params.conf
Normal file
7
mediaelch/rootfs/etc/nginx/includes/server_params.conf
Normal file
@@ -0,0 +1,7 @@
|
||||
root /opt/noVNC;
|
||||
index index.html;
|
||||
server_name $hostname;
|
||||
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header X-Robots-Tag none;
|
||||
9
mediaelch/rootfs/etc/nginx/includes/ssl_params.conf
Normal file
9
mediaelch/rootfs/etc/nginx/includes/ssl_params.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
ssl_protocols TLSv1.2;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
|
||||
ssl_ecdh_curve secp384r1;
|
||||
ssl_session_timeout 10m;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_tickets off;
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
102
mediaelch/rootfs/etc/nginx/nginx.conf
Normal file
102
mediaelch/rootfs/etc/nginx/nginx.conf
Normal file
@@ -0,0 +1,102 @@
|
||||
# Run nginx in foreground.
|
||||
daemon off;
|
||||
|
||||
# This is run inside Docker.
|
||||
user root;
|
||||
|
||||
# Pid storage location.
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
# Set number of worker processes.
|
||||
worker_processes 1;
|
||||
|
||||
# Enables the use of JIT for regular expressions to speed-up their processing.
|
||||
pcre_jit on;
|
||||
|
||||
# Write error log to the add-on log.
|
||||
error_log /proc/1/fd/1 error;
|
||||
|
||||
# Max num of simultaneous connections by a worker process.
|
||||
events {
|
||||
worker_connections 512;
|
||||
}
|
||||
|
||||
http {
|
||||
# Includes mapping of file name extensions to MIME types of responses
|
||||
# and defines the default type.
|
||||
include /etc/nginx/includes/mime.types;
|
||||
|
||||
log_format homeassistant '[$time_local] $status '
|
||||
'$http_x_forwarded_for($remote_addr) '
|
||||
'$request ($http_user_agent)';
|
||||
|
||||
access_log /proc/1/fd/1 homeassistant;
|
||||
default_type application/octet-stream;
|
||||
|
||||
# Name servers used to resolve names of upstream servers into addresses.
|
||||
# It's also needed when using tcpsocket and udpsocket in Lua modules.
|
||||
#resolver 208.67.222.222 208.67.220.220;
|
||||
|
||||
# Don't tell nginx version to clients.
|
||||
server_tokens off;
|
||||
|
||||
# Specifies the maximum accepted body size of a client request, as
|
||||
# indicated by the request header Content-Length. If the stated content
|
||||
# length is greater than this size, then the client receives the HTTP
|
||||
# error code 413. Set to 0 to disable.
|
||||
client_max_body_size 1m;
|
||||
|
||||
# Timeout for keep-alive connections. Server will close connections after
|
||||
# this time.
|
||||
keepalive_timeout 65;
|
||||
|
||||
# Sendfile copies data between one FD and other from within the kernel,
|
||||
# which is more efficient than read() + write().
|
||||
sendfile on;
|
||||
|
||||
# Don't buffer data-sends (disable Nagle algorithm).
|
||||
# Good for sending frequent small bursts of data in real time.
|
||||
tcp_nodelay on;
|
||||
|
||||
# Causes nginx to attempt to send its HTTP response head in one packet,
|
||||
# instead of using partial frames.
|
||||
#tcp_nopush on;
|
||||
|
||||
# # Specifies that our cipher suits should be preferred over client ciphers.
|
||||
# ssl_prefer_server_ciphers on;
|
||||
#
|
||||
# # Protocol and ciphers.
|
||||
# # This is what Mozilla calls "Modern configuration".
|
||||
# ssl_protocols TLSv1.2;
|
||||
# ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
|
||||
#
|
||||
# # Enables a shared SSL cache with size that can hold around 8000 sessions.
|
||||
# ssl_session_cache shared:SSL:2m;
|
||||
|
||||
# Enable checking the existence of precompressed files.
|
||||
#gzip_static on;
|
||||
|
||||
# # Specifies the main log format.
|
||||
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
# '$status $body_bytes_sent "$http_referer" '
|
||||
# '"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
# # Sets the path, format, and configuration for a buffered log write.
|
||||
# access_log /config/log/nginx/access.log main;
|
||||
|
||||
## include /etc/nginx/includes/resolver.conf;
|
||||
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
# Includes virtual host config.
|
||||
include /etc/nginx/servers/*.conf;
|
||||
}
|
||||
|
||||
#stream {
|
||||
# # Include optional stream to handle encrypted VNC connection.
|
||||
# include /etc/nginx/includes/default_stream.conf;
|
||||
#}
|
||||
|
||||
35
mediaelch/rootfs/etc/nginx/servers/direct-ssl.disabled
Normal file
35
mediaelch/rootfs/etc/nginx/servers/direct-ssl.disabled
Normal file
@@ -0,0 +1,35 @@
|
||||
# This is a default site configuration.
|
||||
|
||||
server {
|
||||
listen 5800 ssl default_server;
|
||||
listen [::]:5800 ssl default_server;
|
||||
|
||||
include /etc/nginx/includes/ssl_params.conf;
|
||||
include /etc/nginx/includes/server_params.conf;
|
||||
include /etc/nginx/includes/proxy_params.conf;
|
||||
|
||||
ssl on;
|
||||
ssl_certificate /ssl/%%certfile%%;
|
||||
ssl_certificate_key /ssl/%%keyfile%%;
|
||||
|
||||
# Redirect HTTP traffic.
|
||||
# https://serverfault.com/a/664936
|
||||
error_page 497 301 =307 https://$http_host$request_uri;
|
||||
|
||||
# https://github.com/novnc/noVNC/blob/master/docs/EMBEDDING.md#browser-cache-issue
|
||||
add_header Cache-Control no-cache;
|
||||
|
||||
location /websockify {
|
||||
websockify_pass unix:/tmp/vnc.sock;
|
||||
websockify_read_timeout 5d;
|
||||
websockify_send_timeout 5d;
|
||||
}
|
||||
|
||||
# Access to favicons.
|
||||
location ~* ^/(browserconfig.xml|site.webmanifest|safari-pinned-tab.svg|((favicon|apple-touch-icon|android-chrome|mstile)(.*)\.(ico|png)))$ {
|
||||
root /opt/noVNC/app/images/icons;
|
||||
# Uncomment if access to favicon.ico generates too many logs.
|
||||
#log_not_found off;
|
||||
#access_log off;
|
||||
}
|
||||
}
|
||||
30
mediaelch/rootfs/etc/nginx/servers/direct.conf
Normal file
30
mediaelch/rootfs/etc/nginx/servers/direct.conf
Normal file
@@ -0,0 +1,30 @@
|
||||
# This is a default site configuration.
|
||||
|
||||
server {
|
||||
listen 5800 default_server;
|
||||
listen [::]:5800 default_server;
|
||||
|
||||
include /etc/nginx/includes/server_params.conf;
|
||||
include /etc/nginx/includes/proxy_params.conf;
|
||||
|
||||
# Redirect HTTP traffic.
|
||||
# https://serverfault.com/a/664936
|
||||
error_page 497 301 =307 https://$http_host$request_uri;
|
||||
|
||||
# https://github.com/novnc/noVNC/blob/master/docs/EMBEDDING.md#browser-cache-issue
|
||||
add_header Cache-Control no-cache;
|
||||
|
||||
location /websockify {
|
||||
websockify_pass unix:/tmp/vnc.sock;
|
||||
websockify_read_timeout 5d;
|
||||
websockify_send_timeout 5d;
|
||||
}
|
||||
|
||||
# Access to favicons.
|
||||
location ~* ^/(browserconfig.xml|site.webmanifest|safari-pinned-tab.svg|((favicon|apple-touch-icon|android-chrome|mstile)(.*)\.(ico|png)))$ {
|
||||
root /opt/noVNC/app/images/icons;
|
||||
# Uncomment if access to favicon.ico generates too many logs.
|
||||
#log_not_found off;
|
||||
#access_log off;
|
||||
}
|
||||
}
|
||||
4
mediaelch/rootfs/etc/services.d/nginx/run
Normal file
4
mediaelch/rootfs/etc/services.d/nginx/run
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/command/with-contenv bashio
|
||||
|
||||
bashio::log.info "Starting Nginx...."
|
||||
exec /opt/base/sbin/nginx
|
||||
16
mediaelch/rootfs/etc/services.d/openbox/run
Normal file
16
mediaelch/rootfs/etc/services.d/openbox/run
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/command/with-contenv bashio
|
||||
|
||||
export DISPLAY=":0"
|
||||
export XDG_DATA_HOME="/data/xdg/data"
|
||||
export XDG_CONFIG_HOME="/data/xdg/config"
|
||||
export XDG_CACHE_HOME="/data/xdg/cache"
|
||||
export XDG_STATE_HOME="/data/xdg/state"
|
||||
export XDG_RUNTIME_DIR="/data/runtime-root"
|
||||
export HOME="/data/home"
|
||||
|
||||
mkdir -p ${XDG_DATA_HOME} ${XDG_CONFIG_HOME} ${XDG_CACHE_HOME} ${XDG_STATE_HOME} ${XDG_RUNTIME_DIR} ${HOME}
|
||||
|
||||
# Fix permissions
|
||||
chmod 0700 ${XDG_RUNTIME_DIR}
|
||||
bashio::log.info "Starting OpenBox...."
|
||||
exec /usr/bin/openbox-session
|
||||
4
mediaelch/rootfs/etc/services.d/xvnc/run
Normal file
4
mediaelch/rootfs/etc/services.d/xvnc/run
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/command/with-contenv bashio
|
||||
|
||||
bashio::log.info "Starting Xvnc...."
|
||||
exec /usr/bin/Xvnc -nolisten tcp -nolisten local -listen unix -geometry 1024x768 -depth 24 -rfbunixpath=/tmp/vnc.sock -SecurityTypes=None -desktop="MediaElch" :0
|
||||
1
mediaelch/rootfs/etc/xdg/openbox/autostart
Normal file
1
mediaelch/rootfs/etc/xdg/openbox/autostart
Normal file
@@ -0,0 +1 @@
|
||||
/app/MediaElch &
|
||||
3
mediaelch/rootfs/etc/xdg/openbox/menu.xml
Normal file
3
mediaelch/rootfs/etc/xdg/openbox/menu.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openbox_menu xmlns="http://openbox.org/3.4/menu">
|
||||
</openbox_menu>
|
||||
15
mediaelch/rootfs/etc/xdg/openbox/rc.xml
Normal file
15
mediaelch/rootfs/etc/xdg/openbox/rc.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<!--
|
||||
<theme>
|
||||
<titleLayout>NLC</titleLayout>
|
||||
</theme>
|
||||
-->
|
||||
<applications>
|
||||
<application type="normal" title="MediaElch">
|
||||
<decor>no</decor>
|
||||
<maximized>true</maximized>
|
||||
<layer>below</layer>
|
||||
</application>
|
||||
</applications>
|
||||
</openbox_config>
|
||||
66
mediaelch/rootfs/opt/noVNC/app/error-handler.js
Normal file
66
mediaelch/rootfs/opt/noVNC/app/error-handler.js
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* noVNC: HTML5 VNC client
|
||||
* Copyright (C) 2019 The noVNC Authors
|
||||
* Licensed under MPL 2.0 (see LICENSE.txt)
|
||||
*
|
||||
* See README.md for usage and integration instructions.
|
||||
*/
|
||||
|
||||
// NB: this should *not* be included as a module until we have
|
||||
// native support in the browsers, so that our error handler
|
||||
// can catch script-loading errors.
|
||||
|
||||
// No ES6 can be used in this file since it's used for the translation
|
||||
/* eslint-disable prefer-arrow-callback */
|
||||
|
||||
(function _scope() {
|
||||
"use strict";
|
||||
|
||||
// Fallback for all uncought errors
|
||||
function handleError(event, err) {
|
||||
try {
|
||||
const msg = document.getElementById('noVNC_fallback_errormsg');
|
||||
|
||||
// Only show the initial error
|
||||
if (msg.hasChildNodes()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let div = document.createElement("div");
|
||||
div.classList.add('noVNC_message');
|
||||
div.appendChild(document.createTextNode(event.message));
|
||||
msg.appendChild(div);
|
||||
|
||||
if (event.filename) {
|
||||
div = document.createElement("div");
|
||||
div.className = 'noVNC_location';
|
||||
let text = event.filename;
|
||||
if (event.lineno !== undefined) {
|
||||
text += ":" + event.lineno;
|
||||
if (event.colno !== undefined) {
|
||||
text += ":" + event.colno;
|
||||
}
|
||||
}
|
||||
div.appendChild(document.createTextNode(text));
|
||||
msg.appendChild(div);
|
||||
}
|
||||
|
||||
if (err && err.stack) {
|
||||
div = document.createElement("div");
|
||||
div.className = 'noVNC_stack';
|
||||
div.appendChild(document.createTextNode(err.stack));
|
||||
msg.appendChild(div);
|
||||
}
|
||||
|
||||
document.getElementById('noVNC_fallback_error')
|
||||
.classList.add("noVNC_open");
|
||||
} catch (exc) {
|
||||
document.write("Unexpected error encountered.");
|
||||
}
|
||||
// Don't return true since this would prevent the error
|
||||
// from being printed to the browser console.
|
||||
return false;
|
||||
}
|
||||
window.addEventListener('error', function onerror(evt) { handleError(evt, evt.error); });
|
||||
window.addEventListener('unhandledrejection', function onreject(evt) { handleError(evt.reason, evt.reason); });
|
||||
})();
|
||||
81
mediaelch/rootfs/opt/noVNC/app/images/error.svg
Normal file
81
mediaelch/rootfs/opt/noVNC/app/images/error.svg
Normal file
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="25"
|
||||
height="25"
|
||||
viewBox="0 0 25 25"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="error.svg"
|
||||
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#959595"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="14.00357"
|
||||
inkscape:cy="12.443398"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
showguides="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1136"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4136" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1027.3622)">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 7 3 C 4.7839905 3 3 4.7839905 3 7 L 3 18 C 3 20.21601 4.7839905 22 7 22 L 18 22 C 20.21601 22 22 20.21601 22 18 L 22 7 C 22 4.7839905 20.21601 3 18 3 L 7 3 z M 7.6992188 6 A 1.6916875 1.6924297 0 0 1 8.9121094 6.5117188 L 12.5 10.101562 L 16.087891 6.5117188 A 1.6916875 1.6924297 0 0 1 17.251953 6 A 1.6916875 1.6924297 0 0 1 18.480469 8.90625 L 14.892578 12.496094 L 18.480469 16.085938 A 1.6916875 1.6924297 0 1 1 16.087891 18.478516 L 12.5 14.888672 L 8.9121094 18.478516 A 1.6916875 1.6924297 0 1 1 6.5214844 16.085938 L 10.109375 12.496094 L 6.5214844 8.90625 A 1.6916875 1.6924297 0 0 1 7.6992188 6 z "
|
||||
transform="translate(0,1027.3622)"
|
||||
id="rect4135" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
81
mediaelch/rootfs/opt/noVNC/app/images/info.svg
Normal file
81
mediaelch/rootfs/opt/noVNC/app/images/info.svg
Normal file
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="25"
|
||||
height="25"
|
||||
viewBox="0 0 25 25"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="info.svg"
|
||||
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#959595"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="15.720838"
|
||||
inkscape:cy="8.9111233"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1136"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4136" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1027.3622)">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 12.5 3 A 9.5 9.4999914 0 0 0 3 12.5 A 9.5 9.4999914 0 0 0 12.5 22 A 9.5 9.4999914 0 0 0 22 12.5 A 9.5 9.4999914 0 0 0 12.5 3 z M 12.5 5 A 1.5 1.5000087 0 0 1 14 6.5 A 1.5 1.5000087 0 0 1 12.5 8 A 1.5 1.5000087 0 0 1 11 6.5 A 1.5 1.5000087 0 0 1 12.5 5 z M 10.521484 8.9785156 L 12.521484 8.9785156 A 1.50015 1.50015 0 0 1 14.021484 10.478516 L 14.021484 15.972656 A 1.50015 1.50015 0 0 1 14.498047 18.894531 C 14.498047 18.894531 13.74301 19.228309 12.789062 18.912109 C 12.312092 18.754109 11.776235 18.366625 11.458984 17.828125 C 11.141734 17.289525 11.021484 16.668469 11.021484 15.980469 L 11.021484 11.980469 L 10.521484 11.980469 A 1.50015 1.50015 0 1 1 10.521484 8.9804688 L 10.521484 8.9785156 z "
|
||||
transform="translate(0,1027.3622)"
|
||||
id="path4136" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
81
mediaelch/rootfs/opt/noVNC/app/images/warning.svg
Normal file
81
mediaelch/rootfs/opt/noVNC/app/images/warning.svg
Normal file
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="25"
|
||||
height="25"
|
||||
viewBox="0 0 25 25"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="warning.svg"
|
||||
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#959595"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="16.457343"
|
||||
inkscape:cy="12.179552"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1136"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4136" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1027.3622)">
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="M 12.513672 3.0019531 C 11.751609 2.9919531 11.052563 3.4242687 10.710938 4.1054688 L 3.2109375 19.105469 C 2.5461937 20.435369 3.5132277 21.9999 5 22 L 20 22 C 21.486772 21.9999 22.453806 20.435369 21.789062 19.105469 L 14.289062 4.1054688 C 13.951849 3.4330688 13.265888 3.0066531 12.513672 3.0019531 z M 12.478516 6.9804688 A 1.50015 1.50015 0 0 1 14 8.5 L 14 14.5 A 1.50015 1.50015 0 1 1 11 14.5 L 11 8.5 A 1.50015 1.50015 0 0 1 12.478516 6.9804688 z M 12.5 17 A 1.5 1.5 0 0 1 14 18.5 A 1.5 1.5 0 0 1 12.5 20 A 1.5 1.5 0 0 1 11 18.5 A 1.5 1.5 0 0 1 12.5 17 z "
|
||||
transform="translate(0,1027.3622)"
|
||||
id="path4208" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
548
mediaelch/rootfs/opt/noVNC/app/styles/base.css
Normal file
548
mediaelch/rootfs/opt/noVNC/app/styles/base.css
Normal file
@@ -0,0 +1,548 @@
|
||||
/*
|
||||
* noVNC base CSS
|
||||
* Copyright (C) 2019 The noVNC Authors
|
||||
* noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
||||
* This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
||||
*/
|
||||
|
||||
/*
|
||||
* Z index layers:
|
||||
*
|
||||
* 0: Main screen
|
||||
* 10: Control bar
|
||||
* 50: Transition blocker
|
||||
* 60: Connection popups
|
||||
* 100: Status bar
|
||||
* ...
|
||||
* 1000: Javascript crash
|
||||
* ...
|
||||
* 10000: Max (used for polyfills)
|
||||
*/
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #313131;
|
||||
height: 100%;
|
||||
touch-action: none;
|
||||
}
|
||||
|
||||
.noVNC_only_touch.noVNC_hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Spinner
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
.noVNC_spinner {
|
||||
position: relative;
|
||||
}
|
||||
.noVNC_spinner, .noVNC_spinner::before, .noVNC_spinner::after {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 2px;
|
||||
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
|
||||
animation: noVNC_spinner 1.0s linear infinite;
|
||||
}
|
||||
.noVNC_spinner::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
animation-delay: -0.1s;
|
||||
}
|
||||
.noVNC_spinner::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
@keyframes noVNC_spinner {
|
||||
0% { box-shadow: -60px 10px 0 rgba(255, 255, 255, 0); width: 20px; }
|
||||
25% { box-shadow: 20px 10px 0 rgba(255, 255, 255, 1); width: 10px; }
|
||||
50% { box-shadow: 60px 10px 0 rgba(255, 255, 255, 0); width: 10px; }
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* WebKit centering hacks
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
.noVNC_center {
|
||||
/*
|
||||
* This is a workaround because webkit misrenders transforms and
|
||||
* uses non-integer coordinates, resulting in blurry content.
|
||||
* Ideally we'd use "top: 50%; transform: translateY(-50%);" on
|
||||
* the objects instead.
|
||||
*/
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
.noVNC_center > * {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.noVNC_vcenter {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
.noVNC_vcenter > * {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Layering
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
.noVNC_connect_layer {
|
||||
z-index: 60;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Fallback error
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
#noVNC_fallback_error {
|
||||
z-index: 1000;
|
||||
visibility: hidden;
|
||||
}
|
||||
#noVNC_fallback_error.noVNC_open {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
#noVNC_fallback_error > div {
|
||||
max-width: 90%;
|
||||
padding: 15px;
|
||||
|
||||
transition: 0.5s ease-in-out;
|
||||
|
||||
transform: translateY(-50px);
|
||||
opacity: 0;
|
||||
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
|
||||
border-radius: 10px;
|
||||
box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.5);
|
||||
background: rgba(200,55,55,0.8);
|
||||
}
|
||||
#noVNC_fallback_error.noVNC_open > div {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#noVNC_fallback_errormsg {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#noVNC_fallback_errormsg .noVNC_message {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
font-family: monospace;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
#noVNC_fallback_error .noVNC_location {
|
||||
font-style: italic;
|
||||
font-size: 0.8em;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
#noVNC_fallback_error .noVNC_stack {
|
||||
max-height: 50vh;
|
||||
padding: 10px;
|
||||
margin: 10px;
|
||||
font-size: 0.8em;
|
||||
text-align: left;
|
||||
font-family: monospace;
|
||||
white-space: pre;
|
||||
border: 1px solid rgba(0, 0, 0, 0.5);
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Control Bar
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
#noVNC_control_bar_anchor {
|
||||
/* The anchor is needed to get z-stacking to work */
|
||||
position: fixed;
|
||||
z-index: 10;
|
||||
|
||||
transition: 0.5s ease-in-out;
|
||||
|
||||
/* Edge misrenders animations without this */
|
||||
transform: translateX(0);
|
||||
}
|
||||
#noVNC_control_bar_anchor.noVNC_right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
:root.noVNC_connected #noVNC_control_bar_anchor.noVNC_idle {
|
||||
/* reduce opacity of the control bar when idle */
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
#noVNC_control_bar {
|
||||
position: relative;
|
||||
left: calc(-100% + 15px);
|
||||
right: auto;
|
||||
|
||||
transition: 0.5s ease-in-out;
|
||||
}
|
||||
#noVNC_control_bar.noVNC_open {
|
||||
left: 0;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.noVNC_right #noVNC_control_bar {
|
||||
left: auto;
|
||||
right: calc(-100% + 15px);
|
||||
}
|
||||
|
||||
.noVNC_right #noVNC_control_bar.noVNC_open {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#noVNC_control_bar .noVNC_scroll {
|
||||
max-height: 90vh;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/* Control bar content */
|
||||
|
||||
/* noVNC Touch Device only buttons */
|
||||
:root:not(.noVNC_touch) #noVNC_keyboard_button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Control bar hint */
|
||||
#noVNC_control_bar_hint {
|
||||
position: fixed;
|
||||
left: calc(100vw - 50px);
|
||||
right: auto;
|
||||
top: 50%;
|
||||
transform: translateY(-50%) scale(0);
|
||||
width: 100px;
|
||||
height: 50%;
|
||||
max-height: 600px;
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
transition: 0.2s ease-in-out;
|
||||
background: transparent;
|
||||
box-shadow: 0 0 10px black, inset 0 0 10px 10px rgba(110, 132, 163, 0.8);
|
||||
border-radius: 10px;
|
||||
transition-delay: 0s;
|
||||
}
|
||||
#noVNC_control_bar_anchor.noVNC_right #noVNC_control_bar_hint{
|
||||
left: auto;
|
||||
right: calc(100vw - 50px);
|
||||
}
|
||||
#noVNC_control_bar_hint.noVNC_active {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transition-delay: 0.2s;
|
||||
transform: translateY(-50%) scale(1);
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Status Dialog
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
#noVNC_status {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
z-index: 100;
|
||||
transform: translateY(-100%);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
transition: 0.5s ease-in-out;
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
padding: 5px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
|
||||
line-height: 25px;
|
||||
word-wrap: break-word;
|
||||
color: #fff;
|
||||
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.9);
|
||||
}
|
||||
#noVNC_status.noVNC_open {
|
||||
transform: translateY(0);
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#noVNC_status::before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
#noVNC_status.noVNC_status_normal {
|
||||
background: rgba(128,128,128,0.9);
|
||||
}
|
||||
#noVNC_status.noVNC_status_normal::before {
|
||||
content: url("../images/info.svg") " ";
|
||||
}
|
||||
#noVNC_status.noVNC_status_error {
|
||||
background: rgba(200,55,55,0.9);
|
||||
}
|
||||
#noVNC_status.noVNC_status_error::before {
|
||||
content: url("../images/error.svg") " ";
|
||||
}
|
||||
#noVNC_status.noVNC_status_warn {
|
||||
/*background: rgba(180,180,30,0.9);*/
|
||||
background: rgba(255,193,7,0.9);
|
||||
}
|
||||
#noVNC_status.noVNC_status_warn::before {
|
||||
content: url("../images/warning.svg") " ";
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Password Dialog
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
#noVNC_credentials_dlg {
|
||||
position: relative;
|
||||
|
||||
transform: translateY(-50px);
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
transition: 0.5s ease-in-out;
|
||||
}
|
||||
#noVNC_credentials_dlg.noVNC_open {
|
||||
transform: translateY(0);
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
.noVNC_hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Main Area
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
/* Transition screen */
|
||||
#noVNC_transition {
|
||||
display: none;
|
||||
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
|
||||
color: white;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
z-index: 50;
|
||||
|
||||
/*display: flex;*/
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
:root.noVNC_loading #noVNC_transition,
|
||||
:root.noVNC_connecting #noVNC_transition,
|
||||
:root.noVNC_disconnecting #noVNC_transition,
|
||||
#noVNC_transition_text {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
/* Main container */
|
||||
#noVNC_container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#noVNC_keyboardinput {
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
background-color: #fff;
|
||||
color: #fff;
|
||||
border: 0;
|
||||
position: absolute;
|
||||
left: -40px;
|
||||
z-index: -1;
|
||||
ime-mode: disabled;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Action Button
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
.btn.noVNC_selected {
|
||||
background: #E9ECEF;
|
||||
border: 1px solid;
|
||||
border-color: #CED4DA;
|
||||
}
|
||||
|
||||
html.dark .btn.noVNC_selected {
|
||||
background: #3B3B3B;
|
||||
border: 1px solid;
|
||||
border-color: #525151;
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Accordion Button
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
.custom-accordion-button {
|
||||
display: flex;
|
||||
cursor: pointer;
|
||||
}
|
||||
.custom-accordion-button::after {
|
||||
content: "\276F";
|
||||
margin-left: 0.5rem;
|
||||
transition: transform 0.2s ease-in-out;
|
||||
}
|
||||
.custom-accordion-button:not(.collapsed)::after {
|
||||
content: "\276F";
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
/* ----------------------------------------
|
||||
* Control Bar Handle
|
||||
* ----------------------------------------
|
||||
*/
|
||||
|
||||
:root {
|
||||
--control-bar-handle-color: #E9ECEF;
|
||||
--control-bar-handle-border-color: #CED4DA;
|
||||
--control-bar-handle-height: 50px;
|
||||
--control-bar-handle-width: 15px;
|
||||
--control-bar-handle-dot-size: 4px;
|
||||
--control-bar-handle-dot-color: #6C757D;
|
||||
}
|
||||
|
||||
.handle {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: var(--control-bar-handle-width);
|
||||
height: var(--control-bar-handle-height);
|
||||
background: var(--control-bar-handle-color);
|
||||
border: 1px solid;
|
||||
border-left: 0px none;
|
||||
border-color: var(--control-bar-handle-border-color);
|
||||
border-radius: 0px 5px 5px 0px;
|
||||
cursor: pointer;
|
||||
|
||||
transform: translateY(35px); /* position the handle 35px from the top of the control bar */
|
||||
/*width: calc(100% + 15px);*/
|
||||
/* left: 100%;*/
|
||||
|
||||
|
||||
/*box-shadow: 5px 5px 8px 0px rgba(0,0,0,0.15);*/
|
||||
/*outline: 1px solid;*/
|
||||
/* uncomment this when moving the whole handle:
|
||||
transition: all 0.1s ease-in-out;*/
|
||||
}
|
||||
|
||||
.noVNC_right .handle {
|
||||
border: 1px solid;
|
||||
border-right: 0px none;
|
||||
border-color: var(--control-bar-handle-border-color);
|
||||
border-radius: 5px 0px 0px 5px;
|
||||
}
|
||||
|
||||
.handle:hover {
|
||||
filter: brightness(0.95);
|
||||
}
|
||||
|
||||
/* This create the main/middle dot */
|
||||
.handle .dots {
|
||||
position: absolute;
|
||||
top: calc(50% - calc(var(--control-bar-handle-dot-size) / 2));
|
||||
left: calc(50% - calc(var(--control-bar-handle-dot-size) / 2));
|
||||
display: block;
|
||||
width: var(--control-bar-handle-dot-size);
|
||||
height: var(--control-bar-handle-dot-size);
|
||||
border-radius: calc(var(--control-bar-handle-dot-size) / 2);
|
||||
background-color: var(--control-bar-handle-dot-color);
|
||||
/* not needed since the middle dot doesn't move
|
||||
transition: all 0.1s ease-in-out;*/
|
||||
}
|
||||
|
||||
/* This creates 2 additional dots: top and bottom. */
|
||||
.handle .dots::before, .handle .dots::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: var(--control-bar-handle-dot-size);
|
||||
height: var(--control-bar-handle-dot-size);
|
||||
border-radius: calc(var(--control-bar-handle-dot-size) / 2);
|
||||
background-color: var(--control-bar-handle-dot-color);
|
||||
transition: all 0.1s ease-in-out;
|
||||
}
|
||||
|
||||
/* Move the bottom dot to its place */
|
||||
.handle .dots::before {
|
||||
transform: translateY(calc(var(--control-bar-handle-dot-size) * 2));
|
||||
}
|
||||
|
||||
/* Move the top dot to its place*/
|
||||
.handle .dots::after {
|
||||
transform: translateY(calc(var(--control-bar-handle-dot-size) * -2));
|
||||
}
|
||||
|
||||
/* Transform the bottom dot to a line and rotate it to form one side of an 'X' */
|
||||
#noVNC_control_bar.noVNC_open .handle .dots::before {
|
||||
width: var(--control-bar-handle-width);
|
||||
/* Previous transform is cancelled so we are starting with a dot in the middle. */
|
||||
transform: translateX(calc(var(--control-bar-handle-width) / -2 + calc(var(--control-bar-handle-dot-size) / 2))) rotate(-45deg);
|
||||
}
|
||||
|
||||
/* Transform the top dot to a line and rotate it to form the other side of an 'X' */
|
||||
#noVNC_control_bar.noVNC_open .handle .dots::after {
|
||||
width: var(--control-bar-handle-width);
|
||||
/* Previous transform is cancelled so we are starting with a dot in the middle. */
|
||||
transform: translateX(calc(var(--control-bar-handle-width) / -2 + calc(var(--control-bar-handle-dot-size) / 2))) rotate(45deg);
|
||||
}
|
||||
|
||||
|
||||
1005
mediaelch/rootfs/opt/noVNC/app/styles/base.css.orig
Normal file
1005
mediaelch/rootfs/opt/noVNC/app/styles/base.css.orig
Normal file
File diff suppressed because it is too large
Load Diff
1397
mediaelch/rootfs/opt/noVNC/app/ui.js
Normal file
1397
mediaelch/rootfs/opt/noVNC/app/ui.js
Normal file
File diff suppressed because it is too large
Load Diff
186
mediaelch/rootfs/opt/noVNC/app/webutil.js
Normal file
186
mediaelch/rootfs/opt/noVNC/app/webutil.js
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* noVNC: HTML5 VNC client
|
||||
* Copyright (C) 2019 The noVNC Authors
|
||||
* Licensed under MPL 2.0 (see LICENSE.txt)
|
||||
*
|
||||
* See README.md for usage and integration instructions.
|
||||
*/
|
||||
|
||||
import { initLogging as mainInitLogging } from '../core/util/logging.js';
|
||||
|
||||
// init log level reading the logging HTTP param
|
||||
export function initLogging(level) {
|
||||
"use strict";
|
||||
if (typeof level !== "undefined") {
|
||||
mainInitLogging(level);
|
||||
} else {
|
||||
const param = document.location.href.match(/logging=([A-Za-z0-9._-]*)/);
|
||||
mainInitLogging(param || undefined);
|
||||
}
|
||||
}
|
||||
|
||||
// Read a query string variable
|
||||
// A URL with a query parameter can look like this (But will most probably get logged on the http server):
|
||||
// https://www.example.com?myqueryparam=myvalue
|
||||
//
|
||||
// For privacy (Using a hastag #, the parameters will not be sent to the server)
|
||||
// the url can be requested in the following way:
|
||||
// https://www.example.com#myqueryparam=myvalue&password=secreatvalue
|
||||
//
|
||||
// Even Mixing public and non public parameters will work:
|
||||
// https://www.example.com?nonsecretparam=example.com#password=secreatvalue
|
||||
export function getQueryVar(name, defVal) {
|
||||
"use strict";
|
||||
const re = new RegExp('.*[?&]' + name + '=([^&#]*)'),
|
||||
match = ''.concat(document.location.href, window.location.hash).match(re);
|
||||
if (typeof defVal === 'undefined') { defVal = null; }
|
||||
|
||||
if (match) {
|
||||
return decodeURIComponent(match[1]);
|
||||
}
|
||||
|
||||
return defVal;
|
||||
}
|
||||
|
||||
// Read a hash fragment variable
|
||||
export function getHashVar(name, defVal) {
|
||||
"use strict";
|
||||
const re = new RegExp('.*[&#]' + name + '=([^&]*)'),
|
||||
match = document.location.hash.match(re);
|
||||
if (typeof defVal === 'undefined') { defVal = null; }
|
||||
|
||||
if (match) {
|
||||
return decodeURIComponent(match[1]);
|
||||
}
|
||||
|
||||
return defVal;
|
||||
}
|
||||
|
||||
// Read a variable from the fragment or the query string
|
||||
// Fragment takes precedence
|
||||
export function getConfigVar(name, defVal) {
|
||||
"use strict";
|
||||
const val = getHashVar(name);
|
||||
|
||||
if (val === null) {
|
||||
return getQueryVar(name, defVal);
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cookie handling. Dervied from: http://www.quirksmode.org/js/cookies.html
|
||||
*/
|
||||
|
||||
// No days means only for this browser session
|
||||
export function createCookie(name, value, days) {
|
||||
"use strict";
|
||||
let date, expires;
|
||||
if (days) {
|
||||
date = new Date();
|
||||
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
||||
expires = "; expires=" + date.toGMTString();
|
||||
} else {
|
||||
expires = "";
|
||||
}
|
||||
|
||||
let secure;
|
||||
if (document.location.protocol === "https:") {
|
||||
secure = "; secure";
|
||||
} else {
|
||||
secure = "";
|
||||
}
|
||||
document.cookie = name + "=" + value + expires + "; path=/" + secure;
|
||||
}
|
||||
|
||||
export function readCookie(name, defaultValue) {
|
||||
"use strict";
|
||||
const nameEQ = name + "=";
|
||||
const ca = document.cookie.split(';');
|
||||
|
||||
for (let i = 0; i < ca.length; i += 1) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) === ' ') {
|
||||
c = c.substring(1, c.length);
|
||||
}
|
||||
if (c.indexOf(nameEQ) === 0) {
|
||||
return c.substring(nameEQ.length, c.length);
|
||||
}
|
||||
}
|
||||
|
||||
return (typeof defaultValue !== 'undefined') ? defaultValue : null;
|
||||
}
|
||||
|
||||
export function eraseCookie(name) {
|
||||
"use strict";
|
||||
createCookie(name, "", -1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setting handling.
|
||||
*/
|
||||
|
||||
let settings = {};
|
||||
|
||||
export function initSettings() {
|
||||
if (!window.chrome || !window.chrome.storage) {
|
||||
settings = {};
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return new Promise(resolve => window.chrome.storage.sync.get(resolve))
|
||||
.then((cfg) => { settings = cfg; });
|
||||
}
|
||||
|
||||
// Update the settings cache, but do not write to permanent storage
|
||||
export function setSetting(name, value) {
|
||||
settings[name] = value;
|
||||
}
|
||||
|
||||
// No days means only for this browser session
|
||||
export function writeSetting(name, value) {
|
||||
"use strict";
|
||||
if (settings[name] === value) return;
|
||||
settings[name] = value;
|
||||
if (window.chrome && window.chrome.storage) {
|
||||
window.chrome.storage.sync.set(settings);
|
||||
} else {
|
||||
localStorage.setItem(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
export function readSetting(name, defaultValue) {
|
||||
"use strict";
|
||||
let value;
|
||||
if ((name in settings) || (window.chrome && window.chrome.storage)) {
|
||||
value = settings[name];
|
||||
} else {
|
||||
value = localStorage.getItem(name);
|
||||
settings[name] = value;
|
||||
}
|
||||
if (typeof value === "undefined") {
|
||||
value = null;
|
||||
}
|
||||
|
||||
if (value === null && typeof defaultValue !== "undefined") {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
export function eraseSetting(name) {
|
||||
"use strict";
|
||||
// Deleting here means that next time the setting is read when using local
|
||||
// storage, it will be pulled from local storage again.
|
||||
// If the setting in local storage is changed (e.g. in another tab)
|
||||
// between this delete and the next read, it could lead to an unexpected
|
||||
// value change.
|
||||
delete settings[name];
|
||||
if (window.chrome && window.chrome.storage) {
|
||||
window.chrome.storage.sync.remove(name);
|
||||
} else {
|
||||
localStorage.removeItem(name);
|
||||
}
|
||||
}
|
||||
182
mediaelch/rootfs/opt/noVNC/index.html
Normal file
182
mediaelch/rootfs/opt/noVNC/index.html
Normal file
@@ -0,0 +1,182 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="noVNC_loading">
|
||||
<head>
|
||||
|
||||
<!--
|
||||
noVNC example: simple example using default UI
|
||||
Copyright (C) 2019 The noVNC Authors
|
||||
noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
||||
This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
||||
-->
|
||||
|
||||
<title></title>
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- BEGIN Favicons -->
|
||||
<!-- END Favicons -->
|
||||
|
||||
<!-- Always force latest IE rendering engine -->
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
|
||||
<!-- Apple iOS Safari settings -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link rel="stylesheet" href="app/styles/font-awesome.min.css?v=UNIQUE_VERSION">
|
||||
<link rel="stylesheet" href="app/styles/bootstrap-nightshade.min.css?v=UNIQUE_VERSION">
|
||||
<link rel="stylesheet" href="app/styles/base.css?v=UNIQUE_VERSION">
|
||||
|
||||
<!-- Images that will later appear via CSS -->
|
||||
<link rel="preload" as="image" href="app/images/info.svg">
|
||||
<link rel="preload" as="image" href="app/images/error.svg">
|
||||
<link rel="preload" as="image" href="app/images/warning.svg">
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="app/bootstrap.bundle.min.js?v=UNIQUE_VERSION"></script>
|
||||
<script src="app/error-handler.js?v=UNIQUE_VERSION"></script>
|
||||
<script type="module" crossorigin="anonymous" src="app/ui.js?v=UNIQUE_VERSION"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Fatal error message box -->
|
||||
<div id="noVNC_fallback_error" class="noVNC_center">
|
||||
<div>
|
||||
<div>Unexpected error encountered:</div>
|
||||
<br>
|
||||
<div id="noVNC_fallback_errormsg"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Control Bar -->
|
||||
<div id="noVNC_control_bar_anchor" class="noVNC_vcenter noVNC_hidden">
|
||||
<div id="noVNC_control_bar" class="d-flex flex-row">
|
||||
<!-- Control bar content. -->
|
||||
<div class="card noVNC_scroll" style="width: 21rem; font-size: 14px;">
|
||||
<!-- Control bar header -->
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<img class="pe-2" style="height: 25px;" src="app/images/icons/master_icon.png?v=UNIQUE_VERSION" id="noVNC_app_logo">
|
||||
<h5 class="m-0" name="noVNC_app_name">DockerApp</h5>
|
||||
<div class="ms-auto"><!--<i class="fa fa-unlock-alt fs-4"></i>--></div>
|
||||
</div>
|
||||
<!-- Control bar body -->
|
||||
<ul class="list-group list-group-flush">
|
||||
<!-- Action icons -->
|
||||
<li class="list-group-item" id="noVNC_action_icons_section">
|
||||
<div class="d-flex justify-content-around align-items-center">
|
||||
<a class="btn shadow-none p-0" href="#" title="Show Keyboard" id="noVNC_keyboard_button"><i class="fa fa-keyboard-o fa-fw fs-4"></i></a>
|
||||
<a class="btn shadow-none p-0 noVNC_hidden" href="#" title="Fullscreen" id="noVNC_fullscreen_button"><i class="fa fa-arrows-alt fa-fw fs-4"></i></a>
|
||||
<a class="btn shadow-none p-0 noVNC_hidden" href="#" title="Move/Drag Viewport" id="noVNC_view_drag_button"><i class="fa fa-hand-rock-o fa-fw fs-4"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
<!-- Clipboard -->
|
||||
<li class="list-group-item">
|
||||
<!-- <label for="noVNC_clipboard_text" class="custom-accordion-button text-nowrap" data-bs-toggle="collapse" data-bs-target="#clipboardCollapse">Clipboard</label>-->
|
||||
<label class="custom-accordion-button text-nowrap" data-bs-toggle="collapse" data-bs-target="#clipboardCollapse">Clipboard</label>
|
||||
<div class="input-group input-group-sm collapse show" id="clipboardCollapse">
|
||||
<textarea class="form-control" wrap="off" rows="3" id="noVNC_clipboard_text"></textarea>
|
||||
<button class="btn btn-outline-secondary" type="button" id="noVNC_clipboard_clear_button">Clear</button>
|
||||
</div>
|
||||
</li>
|
||||
<!-- Settings -->
|
||||
<li class="list-group-item">
|
||||
<label class="custom-accordion-button text-nowrap" data-bs-toggle="collapse" data-bs-target="#settingsCollapse">Settings</label>
|
||||
<div class="collapse show" id="settingsCollapse">
|
||||
<!-- Clip to window -->
|
||||
<div class="form-check form-switch mb-2">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="noVNC_setting_view_clip">
|
||||
<label class="form-check-label text-nowrap" for="noVNC_setting_view_clip">Clip to Window</label>
|
||||
</div>
|
||||
<!-- Scaling mode -->
|
||||
<div class="input-group input-group-sm mb-2">
|
||||
<label class="input-group-text" for="noVNC_setting_resize">Scaling Mode</label>
|
||||
<select class="form-select" id="noVNC_setting_resize">
|
||||
<option value="off">None</option>
|
||||
<option value="scale">Local Scaling</option>
|
||||
<option value="remote">Remote Resizing</option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- Quality -->
|
||||
<div>
|
||||
<label for="noVNC_setting_quality" class="text-nowrap">Quality</label>
|
||||
<input type="range" min="0" max="9" value="6" class="form-range" id="noVNC_setting_quality">
|
||||
</div>
|
||||
<!-- Compression level -->
|
||||
<div class="mb-1">
|
||||
<label for="noVNC_setting_compression" class="text-nowrap">Compression Level</label>
|
||||
<input type="range" min="0" max="9" value="2" class="form-range" id="noVNC_setting_compression">
|
||||
</div>
|
||||
<!-- Logging -->
|
||||
<div class="input-group input-group-sm">
|
||||
<label class="input-group-text" for="noVNC_setting_logging">Logging</label>
|
||||
<select class="form-select" id="noVNC_setting_logging">
|
||||
<option value="error">Error</option>
|
||||
<option value="warn">Warning</option>
|
||||
<option value="info">Info</option>
|
||||
<option value="debug">Debug</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- Control bar footer -->
|
||||
<div id="noVNC_version_footer" class="card-footer noVNC_hidden">
|
||||
<div id="noVNC_version_app" class="noVNC_hidden"><small class="text-muted text-nowrap">Application vX.Y.Z</small></div>
|
||||
<div id="noVNC_version_docker_image" class="noVNC_hidden"><small class="text-muted text-nowrap">Docker Image vX.Y.Z</small></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Control bar handle -->
|
||||
<div id="noVNC_control_bar_handle" class="handle">
|
||||
<div class="dots"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Control bar hint -->
|
||||
<div id="noVNC_control_bar_hint"></div>
|
||||
</div> <!-- End of Control Bar -->
|
||||
|
||||
<!-- Status Dialog -->
|
||||
<div id="noVNC_status"></div>
|
||||
|
||||
<!-- Password Dialog -->
|
||||
<div class="noVNC_center noVNC_connect_layer">
|
||||
<div id="noVNC_credentials_dlg">
|
||||
<div class="card">
|
||||
<div class="card-header" name="noVNC_app_name">DockerApp</div>
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Credentials needed</h5>
|
||||
<p class="card-text">Please enter the credentials to connect.</p>
|
||||
<form>
|
||||
<div id="noVNC_username_block" mclass="mb-3">
|
||||
<input type="text" class="form-control" placeholder="Username" id="noVNC_username_input">
|
||||
</div>
|
||||
<div id="noVNC_password_block" class="mb-3">
|
||||
<input type="password" class="form-control" placeholder="Password" id="noVNC_password_input">
|
||||
</div>
|
||||
<button type="submit" id="noVNC_credentials_button" class="btn btn-primary">Submit</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Transition Screens -->
|
||||
<div id="noVNC_transition">
|
||||
<div id="noVNC_transition_text"></div>
|
||||
<div class="noVNC_spinner"></div>
|
||||
</div>
|
||||
|
||||
<!-- This is where the RFB elements will attach -->
|
||||
<div id="noVNC_container">
|
||||
<!-- Note that Google Chrome on Android doesn't respect any of these,
|
||||
html attributes which attempt to disable text suggestions on the
|
||||
on-screen keyboard. Let's hope Chrome implements the ime-mode
|
||||
style for example -->
|
||||
<textarea id="noVNC_keyboardinput" autocapitalize="off"
|
||||
autocomplete="off" spellcheck="false" tabindex="-1"></textarea>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
1
mediaelch/rootfs/opt/noVNC/web_data.json
Normal file
1
mediaelch/rootfs/opt/noVNC/web_data.json
Normal file
@@ -0,0 +1 @@
|
||||
/tmp/.web_data.json
|
||||
135
mediaelch/src/nginx/build.sh
Normal file
135
mediaelch/src/nginx/build.sh
Normal file
@@ -0,0 +1,135 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Helper script that builds the TigerVNC server as a static binary.
|
||||
#
|
||||
# NOTE: This script is expected to be run under Alpine Linux.
|
||||
#
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status.
|
||||
set -u # Treat unset variables as an error.
|
||||
|
||||
# Define software versions.
|
||||
NGINX_VERSION=1.20.1
|
||||
NGINXWEBSOCKIFYMOD_VERSION=0.0.3
|
||||
|
||||
# Define software download URLs.
|
||||
NGINX_URL=http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
|
||||
NGINXWEBSOCKIFYMOD_URL=https://github.com/tg123/websockify-nginx-module/archive/v${NGINXWEBSOCKIFYMOD_VERSION}.tar.gz
|
||||
|
||||
function log {
|
||||
echo ">>> $*"
|
||||
}
|
||||
|
||||
#
|
||||
# Install required packages.
|
||||
#
|
||||
log "Installing required Alpine packages..."
|
||||
apk --no-cache add \
|
||||
build-base \
|
||||
curl \
|
||||
clang \
|
||||
|
||||
xx-apk --no-cache --no-scripts add \
|
||||
gcc \
|
||||
musl-dev \
|
||||
linux-headers \
|
||||
openssl-dev \
|
||||
openssl-libs-static \
|
||||
pcre-dev \
|
||||
|
||||
mkdir /tmp/nginx
|
||||
log "Downloading Nginx..."
|
||||
curl -# -L ${NGINX_URL} | tar -xz --strip 1 -C /tmp/nginx
|
||||
|
||||
log "Downloading WebSockify Nginx module..."
|
||||
mkdir /tmp/websockify-nginx-module
|
||||
curl -# -L ${NGINXWEBSOCKIFYMOD_URL} | tar xz --strip 1 -C /tmp/websockify-nginx-module
|
||||
|
||||
# See the Yocto Nginx recipe: https://github.com/openembedded/meta-openembedded/tree/master/meta-webserver/recipes-httpd/nginx
|
||||
echo "Patching Nginx for cross-compile support..."
|
||||
curl -# -L https://github.com/openembedded/meta-openembedded/raw/master/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch | patch -p1 -d /tmp/nginx
|
||||
curl -# -L https://github.com/openembedded/meta-openembedded/raw/master/meta-webserver/recipes-httpd/nginx/files/0001-Allow-the-overriding-of-the-endianness-via-the-confi.patch | patch -p1 -d /tmp/nginx
|
||||
|
||||
case "$(xx-info arch)" in
|
||||
x86_64|aarch64) PTRSIZE=8 ;;
|
||||
*) PTRSIZE=4 ;;
|
||||
esac
|
||||
|
||||
log "Configuring Nginx..."
|
||||
(
|
||||
cd /tmp/nginx && ./configure \
|
||||
--crossbuild=Linux:$(xx-info arch) \
|
||||
--with-cc="xx-clang" \
|
||||
--with-cc-opt="-Os -fomit-frame-pointer -Wno-sign-compare" \
|
||||
--with-ld-opt="-Wl,--as-needed -static -Wl,--strip-all" \
|
||||
--prefix=/var/lib/nginx \
|
||||
--sbin-path=/sbin/nginx \
|
||||
--modules-path=/usr/lib/nginx/modules \
|
||||
--conf-path=/etc/nginx/nginx.conf \
|
||||
--pid-path=/var/run/nginx/nginx.pid \
|
||||
--lock-path=/var/run/nginx/nginx.lock \
|
||||
\
|
||||
--with-int=4 \
|
||||
--with-long=${PTRSIZE} \
|
||||
--with-long-long=8 \
|
||||
--with-ptr-size=${PTRSIZE} \
|
||||
--with-sig-atomic-t=${PTRSIZE} \
|
||||
--with-size-t=${PTRSIZE} \
|
||||
--with-off-t=8 \
|
||||
--with-time-t=${PTRSIZE} \
|
||||
--with-sys-nerr=132 \
|
||||
\
|
||||
--http-client-body-temp-path=/var/tmp/nginx/client_body \
|
||||
--http-proxy-temp-path=/var/tmp/nginx/proxy \
|
||||
\
|
||||
--user=app \
|
||||
--group=app \
|
||||
\
|
||||
--with-threads \
|
||||
--with-file-aio \
|
||||
--with-http_ssl_module \
|
||||
--with-pcre \
|
||||
--with-pcre-jit \
|
||||
\
|
||||
--without-http_charset_module \
|
||||
--without-http_gzip_module \
|
||||
--without-http_ssi_module \
|
||||
--without-http_userid_module \
|
||||
--without-http_access_module \
|
||||
--without-http_auth_basic_module \
|
||||
--without-http_mirror_module \
|
||||
--without-http_autoindex_module \
|
||||
--without-http_geo_module \
|
||||
--without-http_split_clients_module \
|
||||
--without-http_referer_module \
|
||||
--without-http_rewrite_module \
|
||||
--without-http_fastcgi_module \
|
||||
--without-http_uwsgi_module \
|
||||
--without-http_scgi_module \
|
||||
--without-http_grpc_module \
|
||||
--without-http_memcached_module \
|
||||
--without-http_limit_conn_module \
|
||||
--without-http_limit_req_module \
|
||||
--without-http_empty_gif_module \
|
||||
--without-http_browser_module \
|
||||
--without-http_upstream_hash_module \
|
||||
--without-http_upstream_ip_hash_module \
|
||||
--without-http_upstream_least_conn_module \
|
||||
--without-http_upstream_keepalive_module \
|
||||
--without-http_upstream_zone_module \
|
||||
\
|
||||
--with-stream \
|
||||
--with-stream_ssl_module \
|
||||
\
|
||||
--add-module=/tmp/websockify-nginx-module \
|
||||
)
|
||||
|
||||
log "Compiling Nginx..."
|
||||
make -C /tmp/nginx -j$(nproc) && \
|
||||
|
||||
log "Installing Nginx..."
|
||||
make DESTDIR=/tmp/nginx-install -C /tmp/nginx install
|
||||
find /tmp/nginx-install/etc/nginx ! -name "mime.types" -type f -exec rm -v {} ';'
|
||||
rm -r \
|
||||
/tmp/nginx-install/var
|
||||
|
||||
Reference in New Issue
Block a user