From ffbc3da3eb7e0b02c739176d99b6d757ab84ba4e Mon Sep 17 00:00:00 2001 From: alexz Date: Mon, 15 Dec 2025 02:17:59 +0000 Subject: [PATCH] upload current sources --- apps/cistech-tunnel/source/Dockerfile | 0 apps/rego-tunnel/config.json | 69 + apps/rego-tunnel/docker-compose.json | 157 +++ apps/rego-tunnel/docker-compose.yml | 84 ++ apps/rego-tunnel/metadata/compose-schema.json | 1217 +++++++++++++++++ apps/rego-tunnel/metadata/description.md | 82 ++ apps/rego-tunnel/metadata/logo.jpg | Bin 0 -> 11080 bytes 7 files changed, 1609 insertions(+) mode change 100644 => 100755 apps/cistech-tunnel/source/Dockerfile create mode 100755 apps/rego-tunnel/config.json create mode 100755 apps/rego-tunnel/docker-compose.json create mode 100755 apps/rego-tunnel/docker-compose.yml create mode 100644 apps/rego-tunnel/metadata/compose-schema.json create mode 100755 apps/rego-tunnel/metadata/description.md create mode 100755 apps/rego-tunnel/metadata/logo.jpg diff --git a/apps/cistech-tunnel/source/Dockerfile b/apps/cistech-tunnel/source/Dockerfile old mode 100644 new mode 100755 diff --git a/apps/rego-tunnel/config.json b/apps/rego-tunnel/config.json new file mode 100755 index 0000000..306f621 --- /dev/null +++ b/apps/rego-tunnel/config.json @@ -0,0 +1,69 @@ +{ + "name": "Rego Tunnel", + "available": true, + "port": 8006, + "exposable": true, + "dynamic_config": true, + "id": "rego-tunnel", + "description": "VPN tunnel to access Rego environments securely.", + "tipi_version": 1, + "version": "latest", + "categories": ["utilities"], + "short_desc": "VPN tunnel to access Rego environments securely.", + "author": "dockurr", + "source": "https://github.com/dockur/windows/", + "form_fields": [ + { + "type": "number", + "label": "RAM", + "hint": "RAM to asign to the VM (in gigabytes)", + "placeholder": "4", + "required": true, + "env_variable": "WINDOWS_RAM_GB" + }, + { + "type": "number", + "label": "CPU Cores", + "hint": "CPU cores to asign to the VM", + "placeholder": "4", + "required": true, + "env_variable": "WINDOWS_CPU_CORES" + }, + { + "type": "number", + "label": "Disk Size", + "hint": "Disk size for the VM, it will be used dynamically (in gigabytes)", + "placeholder": "16", + "required": true, + "env_variable": "WINDOWS_DISK_SIZE_GB" + }, + { + "type": "text", + "label": "Windows Version", + "hint": "The windows version to use", + "required": true, + "options": [ + { "label": "Windows 10", "value": "win10" }, + { "label": "Windows 11", "value": "win11" }, + { "label": "Windows 10 LTSC", "value": "ltsc10" }, + { "label": "Windows 8.1", "value": "win81" }, + { "label": "Windows 7", "value": "win7" }, + { "label": "Windows Vista", "value": "vista" }, + { "label": "Windows XP", "value": "winxp" }, + { "label": "Windows Server 2022", "value": "2022" }, + { "label": "Windows Server 2019", "value": "2019" }, + { "label": "Windows Server 2016", "value": "2016" }, + { "label": "Windows Server 2012", "value": "2012" }, + { "label": "Windows Server 2008", "value": "2008" }, + { "label": "Windows Tiny 11 Core", "value": "core11" }, + { "label": "Windows Tiny 11", "value": "tiny11" }, + { "label": "Windows Tiny 10", "value": "tiny10" } + ], + "env_variable": "WINDOWS_VERSION" + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1763873319189, + "force_pull": false +} diff --git a/apps/rego-tunnel/docker-compose.json b/apps/rego-tunnel/docker-compose.json new file mode 100755 index 0000000..c6637c5 --- /dev/null +++ b/apps/rego-tunnel/docker-compose.json @@ -0,0 +1,157 @@ +{ + "schemaVersion": 2, + "services": [ + { + "name": "rego-tunnel", + "image": "dockurr/windows:5.14", + "environment": [ + { + "key": "RAM_SIZE", + "value": "${WINDOWS_RAM_GB}G" + }, + { + "key": "CPU_CORE", + "value": "${WINDOWS_CPU_CORES}" + }, + { + "key": "DISK_SIZE", + "value": "${WINDOWS_DISK_SIZE_GB}G" + }, + { + "key": "VERSION", + "value": "${WINDOWS_VERSION}" + } + ], + "internalPort": 8006, + "addPorts": [ + { + "containerPort": 3389, + "hostPort": 3389, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 3389, + "hostPort": 3389, + "tcp": false, + "udp": true, + "interface": "192.168.0.151" + }, + { + "containerPort": 21, + "hostPort": 21, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 22, + "hostPort": 22, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 23, + "hostPort": 23, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 449, + "hostPort": 449, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 446, + "hostPort": 446, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 448, + "hostPort": 448, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8470, + "hostPort": 8470, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8471, + "hostPort": 8471, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8472, + "hostPort": 8472, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8473, + "hostPort": 8473, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8474, + "hostPort": 8474, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8475, + "hostPort": 8475, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + }, + { + "containerPort": 8476, + "hostPort": 8476, + "tcp": true, + "udp": false, + "interface": "192.168.0.151" + } + ], + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/storage", + "containerPath": "/storage", + "readOnly": false, + "shared": false, + "private": false + } + ], + "stopGracePeriod": "2m", + "sysctls": {}, + "devices": [ + "/dev/kvm", + "/dev/net/tun" + ], + "capAdd": [ + "NET_ADMIN" + ], + "isMain": true, + "extraLabels": { + "runtipi.managed": true + } + } + ] +} \ No newline at end of file diff --git a/apps/rego-tunnel/docker-compose.yml b/apps/rego-tunnel/docker-compose.yml new file mode 100755 index 0000000..cf8c36a --- /dev/null +++ b/apps/rego-tunnel/docker-compose.yml @@ -0,0 +1,84 @@ +version: '3.9' + +services: + rego-tunnel: + container_name: rego-tunnel + image: dockurr/windows:5.14 + restart: unless-stopped + devices: + - /dev/kvm + - /dev/net/tun + cap_add: + - NET_ADMIN + stop_grace_period: 2m + + ports: + # Web console (Tipi APP_PORT -> 8006) + - "192.168.0.151:${APP_PORT}:8006/tcp" + + # RDP + - "192.168.0.151:3389:3389/tcp" + - "192.168.0.151:3389:3389/udp" + + # Optional admin + - "192.168.0.151:21:21/tcp" + - "192.168.0.151:22:22/tcp" + + # IBM i common + - "192.168.0.151:23:23/tcp" + - "192.168.0.151:449:449/tcp" + - "192.168.0.151:446:446/tcp" + - "192.168.0.151:448:448/tcp" + - "192.168.0.151:8470:8470/tcp" + - "192.168.0.151:8471:8471/tcp" + - "192.168.0.151:8472:8472/tcp" + - "192.168.0.151:8473:8473/tcp" + - "192.168.0.151:8474:8474/tcp" + - "192.168.0.151:8475:8475/tcp" + - "192.168.0.151:8476:8476/tcp" + + environment: + - RAM_SIZE=${WINDOWS_RAM_GB}G + - CPU_CORE=${WINDOWS_CPU_CORES} + - DISK_SIZE=${WINDOWS_DISK_SIZE_GB}G + - VERSION=${WINDOWS_VERSION} + + volumes: + - ${APP_DATA_DIR}/data/storage:/storage + + networks: + - tipi_main_network + + sysctls: + - net.ipv4.ip_forward=1 + + labels: + traefik.enable: true + traefik.http.middlewares.rego-tunnel-web-redirect.redirectscheme.scheme: https + traefik.http.services.rego-tunnel.loadbalancer.server.port: 8006 + + traefik.http.routers.rego-tunnel-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.rego-tunnel-insecure.entrypoints: web + traefik.http.routers.rego-tunnel-insecure.service: rego-tunnel + traefik.http.routers.rego-tunnel-insecure.middlewares: rego-tunnel-web-redirect + + traefik.http.routers.rego-tunnel.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.rego-tunnel.entrypoints: websecure + traefik.http.routers.rego-tunnel.service: rego-tunnel + traefik.http.routers.rego-tunnel.tls.certresolver: myresolver + + traefik.http.routers.rego-tunnel-local-insecure.rule: Host(`rego-tunnel.${LOCAL_DOMAIN}`) + traefik.http.routers.rego-tunnel-local-insecure.entrypoints: web + traefik.http.routers.rego-tunnel-local-insecure.service: rego-tunnel + traefik.http.routers.rego-tunnel-local-insecure.middlewares: rego-tunnel-web-redirect + + traefik.http.routers.rego-tunnel-local.rule: Host(`rego-tunnel.${LOCAL_DOMAIN}`) + traefik.http.routers.rego-tunnel-local.entrypoints: websecure + traefik.http.routers.rego-tunnel-local.service: rego-tunnel + traefik.http.routers.rego-tunnel-local.tls: true + + runtipi.managed: true + +networks: + tipi_main_network: + external: true diff --git a/apps/rego-tunnel/metadata/compose-schema.json b/apps/rego-tunnel/metadata/compose-schema.json new file mode 100644 index 0000000..e45055b --- /dev/null +++ b/apps/rego-tunnel/metadata/compose-schema.json @@ -0,0 +1,1217 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "schemaVersion": { + "const": 2 + }, + "services": { + "type": "array", + "message": "CUSTOM_APP_ERROR_SERVICES_MIN_LENGTH", + "minItems": 1, + "items": { + "type": "object", + "properties": { + "image": { + "type": "string", + "message": "CUSTOM_APP_ERROR_IMAGE_REQUIRED" + }, + "name": { + "type": "string", + "message": "CUSTOM_APP_ERROR_NAME_REQUIRED" + }, + "addPorts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "containerPort": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_CONTAINER_PORT_INVALID" + }, + { + "type": "integer", + "message": "CUSTOM_APP_ERROR_CONTAINER_PORT_INVALID", + "exclusiveMaximum": 65536, + "exclusiveMinimum": 0 + } + ], + "message": "CUSTOM_APP_ERROR_CONTAINER_PORT_INVALID" + }, + "hostPort": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_HOST_PORT_INVALID" + }, + { + "type": "integer", + "message": "CUSTOM_APP_ERROR_HOST_PORT_INVALID", + "exclusiveMaximum": 65536, + "exclusiveMinimum": 0 + } + ], + "message": "CUSTOM_APP_ERROR_HOST_PORT_INVALID" + }, + "interface": { + "type": "string" + }, + "tcp": { + "type": "boolean" + }, + "udp": { + "type": "boolean" + } + }, + "required": [ + "containerPort", + "hostPort" + ] + } + }, + "addToMainNetwork": { + "type": "boolean" + }, + "capAdd": { + "type": "array", + "message": "CUSTOM_APP_ERROR_CAP_ADD_INVALID", + "items": { + "type": "string" + } + }, + "capDrop": { + "type": "array", + "message": "CUSTOM_APP_ERROR_CAP_DROP_INVALID", + "items": { + "type": "string" + } + }, + "command": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_COMMAND_INVALID" + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_COMMAND_INVALID", + "items": { + "type": "string" + } + } + ], + "message": "CUSTOM_APP_ERROR_COMMAND_INVALID" + }, + "dependsOn": { + "anyOf": [ + { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "condition": { + "anyOf": [ + { + "const": "service_completed_successfully", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + }, + { + "const": "service_healthy", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + }, + { + "const": "service_started", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + } + ], + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + } + }, + "required": [ + "condition" + ] + } + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_SERVICE_INVALID", + "items": { + "type": "string" + } + } + ] + }, + "deploy": { + "type": "object", + "properties": { + "resources": { + "type": "object", + "properties": { + "limits": { + "type": "object", + "properties": { + "cpus": { + "type": "string" + }, + "memory": { + "type": "string" + }, + "pids": { + "type": "number", + "message": "CUSTOM_APP_ERROR_DEPLOY_PIDS_INVALID" + } + } + }, + "reservations": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "capabilities": { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEVICE_CAPABILITY_INVALID", + "items": { + "type": "string" + } + }, + "count": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_DEVICE_COUNT_INVALID" + }, + { + "const": "all", + "message": "CUSTOM_APP_ERROR_DEVICE_COUNT_INVALID" + } + ], + "message": "CUSTOM_APP_ERROR_DEVICE_COUNT_INVALID" + }, + "deviceIds": { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEVICE_ID_INVALID", + "items": { + "type": "string" + } + }, + "driver": { + "type": "string" + } + }, + "required": [ + "capabilities" + ] + } + }, + "cpus": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "required": [ + "devices" + ] + } + } + } + }, + "required": [ + "resources" + ] + }, + "devices": { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEVICE_INVALID", + "items": { + "type": "string" + } + }, + "dns": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_DNS_INVALID" + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_DNS_INVALID", + "items": { + "type": "string" + } + } + ], + "message": "CUSTOM_APP_ERROR_DNS_INVALID" + }, + "entrypoint": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_ENTRYPOINT_INVALID" + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_ENTRYPOINT_INVALID", + "items": { + "type": "string" + } + } + ], + "message": "CUSTOM_APP_ERROR_ENTRYPOINT_INVALID" + }, + "environment": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "message": "CUSTOM_APP_ERROR_ENV_KEY_REQUIRED", + "minLength": 1 + }, + "value": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ENV_VALUE_REQUIRED" + }, + { + "type": "string", + "message": "CUSTOM_APP_ERROR_ENV_VALUE_REQUIRED", + "minLength": 1 + }, + { + "type": "boolean" + } + ], + "message": "CUSTOM_APP_ERROR_ENV_VALUE_REQUIRED" + } + }, + "required": [ + "key", + "value" + ] + } + }, + "extraHosts": { + "type": "array", + "message": "CUSTOM_APP_ERROR_EXTRA_HOST_INVALID", + "items": { + "type": "string" + } + }, + "extraLabels": { + "type": "object", + "message": "CUSTOM_APP_ERROR_LABEL_KEY_INVALID", + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_LABEL_VALUE_INVALID" + }, + { + "type": "boolean" + } + ], + "message": "CUSTOM_APP_ERROR_LABEL_VALUE_INVALID" + } + }, + "healthCheck": { + "type": "object", + "properties": { + "test": { + "type": "string", + "message": "CUSTOM_APP_ERROR_HEALTH_CHECK_TEST_REQUIRED" + }, + "interval": { + "type": "string" + }, + "retries": { + "type": "number", + "message": "CUSTOM_APP_ERROR_HEALTH_CHECK_RETRIES_INVALID" + }, + "startInterval": { + "type": "string" + }, + "startPeriod": { + "type": "string" + }, + "timeout": { + "type": "string" + } + }, + "required": [ + "test" + ] + }, + "hostname": { + "type": "string" + }, + "internalPort": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_INTERNAL_PORT_INVALID" + }, + { + "type": "integer", + "message": "CUSTOM_APP_ERROR_INTERNAL_PORT_INVALID", + "exclusiveMaximum": 65536, + "exclusiveMinimum": 0 + } + ], + "message": "CUSTOM_APP_ERROR_INTERNAL_PORT_INVALID" + }, + "isMain": { + "type": "boolean" + }, + "logging": { + "type": "object", + "properties": { + "driver": { + "type": "string", + "message": "CUSTOM_APP_ERROR_LOGGING_DRIVER_REQUIRED" + }, + "options": { + "type": "object", + "message": "CUSTOM_APP_ERROR_LOGGING_OPTION_KEY_INVALID", + "additionalProperties": { + "type": "string", + "message": "CUSTOM_APP_ERROR_LOGGING_OPTION_VALUE_INVALID" + } + } + }, + "required": [ + "driver" + ] + }, + "networkMode": { + "type": "string" + }, + "pid": { + "type": "string" + }, + "privileged": { + "type": "boolean" + }, + "readOnly": { + "type": "boolean" + }, + "securityOpt": { + "type": "array", + "message": "CUSTOM_APP_ERROR_SECURITY_OPT_INVALID", + "items": { + "type": "string" + } + }, + "shmSize": { + "type": "string" + }, + "stdinOpen": { + "type": "boolean" + }, + "stopGracePeriod": { + "type": "string" + }, + "stopSignal": { + "type": "string" + }, + "sysctls": { + "type": "object", + "message": "CUSTOM_APP_ERROR_SYSCTL_KEY_INVALID", + "additionalProperties": { + "type": "number", + "message": "CUSTOM_APP_ERROR_SYSCTL_VALUE_INVALID" + } + }, + "tty": { + "type": "boolean" + }, + "ulimits": { + "type": "object", + "properties": { + "core": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_CORE_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + }, + "memlock": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_MEMLOCK_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + }, + "nofile": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_NOFILE_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + }, + "nproc": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_NPROC_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + } + } + }, + "user": { + "type": "string" + }, + "volumes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "containerPath": { + "type": "string", + "message": "CUSTOM_APP_ERROR_CONTAINER_PATH_REQUIRED" + }, + "hostPath": { + "type": "string", + "message": "CUSTOM_APP_ERROR_HOST_PATH_REQUIRED" + }, + "bind": { + "type": "object", + "properties": { + "propagation": { + "enum": [ + "private", + "rprivate", + "rshared", + "rslave", + "shared", + "slave" + ] + } + }, + "required": [ + "propagation" + ] + }, + "private": { + "type": "boolean" + }, + "readOnly": { + "type": "boolean" + }, + "shared": { + "type": "boolean" + } + }, + "required": [ + "containerPath", + "hostPath" + ] + } + }, + "workingDir": { + "type": "string" + } + }, + "required": [ + "image", + "name" + ] + } + }, + "overrides": { + "type": "array", + "items": { + "type": "object", + "properties": { + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addPorts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "containerPort": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_CONTAINER_PORT_INVALID" + }, + { + "type": "integer", + "message": "CUSTOM_APP_ERROR_CONTAINER_PORT_INVALID", + "exclusiveMaximum": 65536, + "exclusiveMinimum": 0 + } + ], + "message": "CUSTOM_APP_ERROR_CONTAINER_PORT_INVALID" + }, + "hostPort": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_HOST_PORT_INVALID" + }, + { + "type": "integer", + "message": "CUSTOM_APP_ERROR_HOST_PORT_INVALID", + "exclusiveMaximum": 65536, + "exclusiveMinimum": 0 + } + ], + "message": "CUSTOM_APP_ERROR_HOST_PORT_INVALID" + }, + "interface": { + "type": "string" + }, + "tcp": { + "type": "boolean" + }, + "udp": { + "type": "boolean" + } + }, + "required": [ + "containerPort", + "hostPort" + ] + } + }, + "addToMainNetwork": { + "type": "boolean" + }, + "capAdd": { + "type": "array", + "message": "CUSTOM_APP_ERROR_CAP_ADD_INVALID", + "items": { + "type": "string" + } + }, + "capDrop": { + "type": "array", + "message": "CUSTOM_APP_ERROR_CAP_DROP_INVALID", + "items": { + "type": "string" + } + }, + "command": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_COMMAND_INVALID" + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_COMMAND_INVALID", + "items": { + "type": "string" + } + } + ], + "message": "CUSTOM_APP_ERROR_COMMAND_INVALID" + }, + "dependsOn": { + "anyOf": [ + { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "condition": { + "anyOf": [ + { + "const": "service_completed_successfully", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + }, + { + "const": "service_healthy", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + }, + { + "const": "service_started", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + } + ], + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_CONDITION_INVALID" + } + }, + "required": [ + "condition" + ] + } + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEPENDS_ON_SERVICE_INVALID", + "items": { + "type": "string" + } + } + ] + }, + "deploy": { + "type": "object", + "properties": { + "resources": { + "type": "object", + "properties": { + "limits": { + "type": "object", + "properties": { + "cpus": { + "type": "string" + }, + "memory": { + "type": "string" + }, + "pids": { + "type": "number", + "message": "CUSTOM_APP_ERROR_DEPLOY_PIDS_INVALID" + } + } + }, + "reservations": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "capabilities": { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEVICE_CAPABILITY_INVALID", + "items": { + "type": "string" + } + }, + "count": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_DEVICE_COUNT_INVALID" + }, + { + "const": "all", + "message": "CUSTOM_APP_ERROR_DEVICE_COUNT_INVALID" + } + ], + "message": "CUSTOM_APP_ERROR_DEVICE_COUNT_INVALID" + }, + "deviceIds": { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEVICE_ID_INVALID", + "items": { + "type": "string" + } + }, + "driver": { + "type": "string" + } + }, + "required": [ + "capabilities" + ] + } + }, + "cpus": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "required": [ + "devices" + ] + } + } + } + }, + "required": [ + "resources" + ] + }, + "devices": { + "type": "array", + "message": "CUSTOM_APP_ERROR_DEVICE_INVALID", + "items": { + "type": "string" + } + }, + "dns": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_DNS_INVALID" + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_DNS_INVALID", + "items": { + "type": "string" + } + } + ], + "message": "CUSTOM_APP_ERROR_DNS_INVALID" + }, + "entrypoint": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_ENTRYPOINT_INVALID" + }, + { + "type": "array", + "message": "CUSTOM_APP_ERROR_ENTRYPOINT_INVALID", + "items": { + "type": "string" + } + } + ], + "message": "CUSTOM_APP_ERROR_ENTRYPOINT_INVALID" + }, + "environment": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "message": "CUSTOM_APP_ERROR_ENV_KEY_REQUIRED", + "minLength": 1 + }, + "value": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ENV_VALUE_REQUIRED" + }, + { + "type": "string", + "message": "CUSTOM_APP_ERROR_ENV_VALUE_REQUIRED", + "minLength": 1 + }, + { + "type": "boolean" + } + ], + "message": "CUSTOM_APP_ERROR_ENV_VALUE_REQUIRED" + } + }, + "required": [ + "key", + "value" + ] + } + }, + "extraHosts": { + "type": "array", + "message": "CUSTOM_APP_ERROR_EXTRA_HOST_INVALID", + "items": { + "type": "string" + } + }, + "extraLabels": { + "type": "object", + "message": "CUSTOM_APP_ERROR_LABEL_KEY_INVALID", + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_LABEL_VALUE_INVALID" + }, + { + "type": "boolean" + } + ], + "message": "CUSTOM_APP_ERROR_LABEL_VALUE_INVALID" + } + }, + "healthCheck": { + "type": "object", + "properties": { + "test": { + "type": "string", + "message": "CUSTOM_APP_ERROR_HEALTH_CHECK_TEST_REQUIRED" + }, + "interval": { + "type": "string" + }, + "retries": { + "type": "number", + "message": "CUSTOM_APP_ERROR_HEALTH_CHECK_RETRIES_INVALID" + }, + "startInterval": { + "type": "string" + }, + "startPeriod": { + "type": "string" + }, + "timeout": { + "type": "string" + } + }, + "required": [ + "test" + ] + }, + "hostname": { + "type": "string" + }, + "image": { + "type": "string", + "message": "CUSTOM_APP_ERROR_IMAGE_REQUIRED" + }, + "internalPort": { + "anyOf": [ + { + "type": "string", + "message": "CUSTOM_APP_ERROR_INTERNAL_PORT_INVALID" + }, + { + "type": "integer", + "message": "CUSTOM_APP_ERROR_INTERNAL_PORT_INVALID", + "exclusiveMaximum": 65536, + "exclusiveMinimum": 0 + } + ], + "message": "CUSTOM_APP_ERROR_INTERNAL_PORT_INVALID" + }, + "isMain": { + "type": "boolean" + }, + "logging": { + "type": "object", + "properties": { + "driver": { + "type": "string", + "message": "CUSTOM_APP_ERROR_LOGGING_DRIVER_REQUIRED" + }, + "options": { + "type": "object", + "message": "CUSTOM_APP_ERROR_LOGGING_OPTION_KEY_INVALID", + "additionalProperties": { + "type": "string", + "message": "CUSTOM_APP_ERROR_LOGGING_OPTION_VALUE_INVALID" + } + } + }, + "required": [ + "driver" + ] + }, + "name": { + "type": "string", + "message": "CUSTOM_APP_ERROR_NAME_REQUIRED" + }, + "networkMode": { + "type": "string" + }, + "pid": { + "type": "string" + }, + "privileged": { + "type": "boolean" + }, + "readOnly": { + "type": "boolean" + }, + "securityOpt": { + "type": "array", + "message": "CUSTOM_APP_ERROR_SECURITY_OPT_INVALID", + "items": { + "type": "string" + } + }, + "shmSize": { + "type": "string" + }, + "stdinOpen": { + "type": "boolean" + }, + "stopGracePeriod": { + "type": "string" + }, + "stopSignal": { + "type": "string" + }, + "sysctls": { + "type": "object", + "message": "CUSTOM_APP_ERROR_SYSCTL_KEY_INVALID", + "additionalProperties": { + "type": "number", + "message": "CUSTOM_APP_ERROR_SYSCTL_VALUE_INVALID" + } + }, + "tty": { + "type": "boolean" + }, + "ulimits": { + "type": "object", + "properties": { + "core": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_CORE_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + }, + "memlock": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_MEMLOCK_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + }, + "nofile": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_NOFILE_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + }, + "nproc": { + "anyOf": [ + { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_NPROC_INVALID" + }, + { + "type": "object", + "properties": { + "hard": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_HARD_INVALID" + }, + "soft": { + "type": "number", + "message": "CUSTOM_APP_ERROR_ULIMIT_SOFT_INVALID" + } + }, + "required": [ + "hard", + "soft" + ] + } + ] + } + } + }, + "user": { + "type": "string" + }, + "volumes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "containerPath": { + "type": "string", + "message": "CUSTOM_APP_ERROR_CONTAINER_PATH_REQUIRED" + }, + "hostPath": { + "type": "string", + "message": "CUSTOM_APP_ERROR_HOST_PATH_REQUIRED" + }, + "bind": { + "type": "object", + "properties": { + "propagation": { + "enum": [ + "private", + "rprivate", + "rshared", + "rslave", + "shared", + "slave" + ] + } + }, + "required": [ + "propagation" + ] + }, + "private": { + "type": "boolean" + }, + "readOnly": { + "type": "boolean" + }, + "shared": { + "type": "boolean" + } + }, + "required": [ + "containerPath", + "hostPath" + ] + } + }, + "workingDir": { + "type": "string" + } + } + } + }, + "architecture": { + "anyOf": [ + { + "const": "amd64", + "message": "CUSTOM_APP_ERROR_ARCHITECTURE_INVALID" + }, + { + "const": "arm64", + "message": "CUSTOM_APP_ERROR_ARCHITECTURE_INVALID" + } + ], + "message": "CUSTOM_APP_ERROR_ARCHITECTURE_INVALID" + } + }, + "required": [ + "services" + ] + } + } + }, + "required": [ + "schemaVersion", + "services" + ] +} \ No newline at end of file diff --git a/apps/rego-tunnel/metadata/description.md b/apps/rego-tunnel/metadata/description.md new file mode 100755 index 0000000..149ac53 --- /dev/null +++ b/apps/rego-tunnel/metadata/description.md @@ -0,0 +1,82 @@ +

Windows
+
+ +
+
+ +

+ +Windows in a Docker container. + +## Features + + - ISO downloader + - KVM acceleration + - Web-based viewer + +## FAQ + +* ### How do I use it? + + Very simple! These are the steps: + + - Start the container and connect to [port 8006](http://localhost:8006) using your web browser. + + - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. + + - Once you see the desktop, your Windows installation is ready for use. + + Enjoy your brand new machine, and don't forget to star this repo! + +* ### How do I select the Windows version? + + By default, Windows 11 will be installed. But you can change that in settings, in order to specify an alternative Windows version to be downloaded: + + Select from the values below: + + | **Value** | **Description** | **Source** | **Transfer** | **Size** | + |---|---|---|---|---| + | `win11` | Windows 11 Pro | Microsoft | Fast | 6.4 GB | + | `win10` | Windows 10 Pro | Microsoft | Fast | 5.8 GB | + | `ltsc10` | Windows 10 LTSC | Microsoft | Fast | 4.6 GB | + | `win81` | Windows 8.1 Pro | Microsoft | Fast | 4.2 GB | + | `win7` | Windows 7 SP1 | Bob Pony | Medium | 3.0 GB | + | `vista` | Windows Vista SP2 | Bob Pony | Medium | 3.6 GB | + | `winxp` | Windows XP SP3 | Bob Pony | Medium | 0.6 GB | + |||||| + | `2022` | Windows Server 2022 | Microsoft | Fast | 4.7 GB | + | `2019` | Windows Server 2019 | Microsoft | Fast | 5.3 GB | + | `2016` | Windows Server 2016 | Microsoft | Fast | 6.5 GB | + | `2012` | Windows Server 2012 R2 | Microsoft | Fast | 4.3 GB | + | `2008` | Windows Server 2008 R2 | Microsoft | Fast | 3.0 GB | + |||||| + | `core11` | Tiny 11 Core | Archive.org | Slow | 2.1 GB | + | `tiny11` | Tiny 11 | Archive.org | Slow | 3.8 GB | + | `tiny10` | Tiny 10 | Archive.org | Slow | 3.6 GB | + +* ### How do I connect using RDP? + + The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. + + So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `docker` and by leaving the password empty. + + There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store. One for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) is in the Apple Store. For Linux you can use [rdesktop](http://www.rdesktop.org/) and for Windows you don't need to install anything as it is already ships as part of the operating system. + +* ### How do I verify if my system supports KVM? + + To verify if your system supports KVM, run the following commands: + + ```bash + sudo apt install cpu-checker + sudo kvm-ok + ``` + + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + +* ### Is this project legal? + + Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. + +## Disclaimer + +The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation. \ No newline at end of file diff --git a/apps/rego-tunnel/metadata/logo.jpg b/apps/rego-tunnel/metadata/logo.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e284945929cf087d33d7117ef8915670bb7a6109 GIT binary patch literal 11080 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 literal 0 HcmV?d00001