Compare commits

...

14 Commits

Author SHA1 Message Date
LinuxServer-CI
6bd0ebb31e
Bot Updating Package Versions 2025-06-03 21:44:23 +00:00
LinuxServer-CI
9d95aadf89
Bot Updating Templated Files 2025-06-03 13:43:26 +00:00
Roxedus
8c14b46231
Merge pull request #200 from ajain-93/add-pwa-name 2025-06-03 15:41:54 +02:00
Arnav Jain
8c12be9378
Update readme-vars.yml 2025-06-03 15:27:13 +02:00
Arnav Jain
a0a1ba58ee
add support for changing PWA name
if environment variable `PWA_APPNAME` is set, then this value is used for the name of the PWA app.
2025-06-03 15:22:45 +02:00
LinuxServer-CI
f58e3ebccc
Bot Updating Package Versions 2025-05-31 20:22:57 +00:00
LinuxServer-CI
eeb8afd54d
Bot Updating Package Versions
Some checks failed
Mark stale issues and pull requests / stale (push) Has been cancelled
External Trigger Scheduler / external-trigger-scheduler (push) Has been cancelled
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-05-24 20:26:55 +00:00
LinuxServer-CI
c0b66f3246
Bot Updating Templated Files
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-05-17 20:21:28 +00:00
LinuxServer-CI
9f8ec8013e
Bot Updating Package Versions
Some checks failed
Package Trigger Scheduler / package-trigger-scheduler (push) Has been cancelled
2025-05-15 23:44:54 +00:00
LinuxServer-CI
2a36656096
Bot Updating Package Versions 2025-05-14 18:52:15 +00:00
LinuxServer-CI
e92931416b
Bot Updating Package Versions 2025-05-12 18:53:12 +00:00
Adam
6b64e1e967
Merge pull request #199 from linuxserver/ro-non-root 2025-05-12 17:04:31 +01:00
thespad
a7294dfb09
Don't try and enable sudo if ro/non-root even if set 2025-05-11 14:36:04 +01:00
thespad
a7e2b20ca2
Support ro/non-root 2025-05-11 14:33:51 +01:00
16 changed files with 106 additions and 48 deletions

0
.editorconfig Executable file → Normal file
View File

0
.github/CONTRIBUTING.md vendored Executable file → Normal file
View File

0
.github/FUNDING.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/config.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/issue.bug.yml vendored Executable file → Normal file
View File

0
.github/ISSUE_TEMPLATE/issue.feature.yml vendored Executable file → Normal file
View File

0
.github/workflows/call_issue_pr_tracker.yml vendored Executable file → Normal file
View File

0
.github/workflows/call_issues_cron.yml vendored Executable file → Normal file
View File

0
.github/workflows/greetings.yml vendored Executable file → Normal file
View File

0
.github/workflows/permissions.yml vendored Executable file → Normal file
View File

0
LICENSE Executable file → Normal file
View File

View File

@ -78,6 +78,23 @@ git config --global user.email "email address"
How to create the [hashed password](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#can-i-store-my-password-hashed). How to create the [hashed password](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#can-i-store-my-password-hashed).
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
### Caveats
* `/tmp` must be mounted to tmpfs
* `sudo` will not be available
## Non-Root Operation
This image can be run with a non-root user. For details please [read the docs](https://docs.linuxserver.io/misc/non-root/).
### Caveats
* `sudo` will not be available
## Usage ## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli. To help you get started creating a container from this image you can either use docker-compose or the docker cli.
@ -103,6 +120,7 @@ services:
- SUDO_PASSWORD_HASH= #optional - SUDO_PASSWORD_HASH= #optional
- PROXY_DOMAIN=code-server.my.domain #optional - PROXY_DOMAIN=code-server.my.domain #optional
- DEFAULT_WORKSPACE=/config/workspace #optional - DEFAULT_WORKSPACE=/config/workspace #optional
- PWA_APPNAME=code-server #optional
volumes: volumes:
- /path/to/code-server/config:/config - /path/to/code-server/config:/config
ports: ports:
@ -124,6 +142,7 @@ docker run -d \
-e SUDO_PASSWORD_HASH= `#optional` \ -e SUDO_PASSWORD_HASH= `#optional` \
-e PROXY_DOMAIN=code-server.my.domain `#optional` \ -e PROXY_DOMAIN=code-server.my.domain `#optional` \
-e DEFAULT_WORKSPACE=/config/workspace `#optional` \ -e DEFAULT_WORKSPACE=/config/workspace `#optional` \
-e PWA_APPNAME=code-server `#optional` \
-p 8443:8443 \ -p 8443:8443 \
-v /path/to/code-server/config:/config \ -v /path/to/code-server/config:/config \
--restart unless-stopped \ --restart unless-stopped \
@ -146,7 +165,10 @@ Containers are configured using parameters passed at runtime (such as those abov
| `-e SUDO_PASSWORD_HASH=` | Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`. | | `-e SUDO_PASSWORD_HASH=` | Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`. |
| `-e PROXY_DOMAIN=code-server.my.domain` | If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/coder/code-server/blob/main/docs/guide.md#using-a-subdomain) | | `-e PROXY_DOMAIN=code-server.my.domain` | If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/coder/code-server/blob/main/docs/guide.md#using-a-subdomain) |
| `-e DEFAULT_WORKSPACE=/config/workspace` | If this optional variable is set, code-server will open this directory by default | | `-e DEFAULT_WORKSPACE=/config/workspace` | If this optional variable is set, code-server will open this directory by default |
| `-e PWA_APPNAME=code-server` | If this optional variable is set, the PWA app will the specified name. |
| `-v /config` | Contains all relevant configuration files. | | `-v /config` | Contains all relevant configuration files. |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@ -310,6 +332,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **03.06.25:** - Allow setting PWA name using env var `PWA_APPNAME`.
* **13.10.24:** - Only chown config folder when change to ownership or new install is detected. * **13.10.24:** - Only chown config folder when change to ownership or new install is detected.
* **09.10.24:** - Manage permissions in /config/.ssh according to file type * **09.10.24:** - Manage permissions in /config/.ssh according to file type
* **19.08.24:** - Rebase to Ubuntu Noble. * **19.08.24:** - Rebase to Ubuntu Noble.

View File

@ -1,6 +1,5 @@
NAME VERSION TYPE NAME VERSION TYPE
@babel/runtime 7.27.0 npm @babel/runtime 7.27.0 npm
@c4312/eventsource-umd 3.0.5 npm
@coder/logger 3.0.1 npm @coder/logger 3.0.1 npm
@mapbox/node-pre-gyp 1.0.11 npm @mapbox/node-pre-gyp 1.0.11 npm
@microsoft/1ds-core-js 3.2.13 npm @microsoft/1ds-core-js 3.2.13 npm
@ -23,16 +22,17 @@ NAME VERSION TYPE
@vscode/vscode-languagedetection 1.0.21 npm @vscode/vscode-languagedetection 1.0.21 npm
@vscode/windows-process-tree 0.6.0 npm @vscode/windows-process-tree 0.6.0 npm
@vscode/windows-registry 1.1.0 npm @vscode/windows-registry 1.1.0 npm
@xterm/addon-clipboard 0.2.0-beta.82 npm @xterm/addon-clipboard 0.2.0-beta.84 npm
@xterm/addon-image 0.9.0-beta.99 npm @xterm/addon-image 0.9.0-beta.101 npm
@xterm/addon-ligatures 0.10.0-beta.99 npm @xterm/addon-ligatures 0.10.0-beta.101 npm
@xterm/addon-progress 0.2.0-beta.5 npm @xterm/addon-progress 0.2.0-beta.7 npm
@xterm/addon-search 0.16.0-beta.99 npm @xterm/addon-search 0.16.0-beta.101 npm
@xterm/addon-serialize 0.14.0-beta.99 npm @xterm/addon-serialize 0.14.0-beta.101 npm
@xterm/addon-unicode11 0.9.0-beta.99 npm @xterm/addon-unicode11 0.9.0-beta.101 npm
@xterm/addon-webgl 0.19.0-beta.99 npm @xterm/addon-webgl 0.19.0-beta.101 npm
@xterm/headless 5.6.0-beta.99 npm @xterm/headless 5.6.0-beta.101 npm
@xterm/xterm 5.6.0-beta.99 npm @xterm/xterm 5.6.0-beta.101 npm
OpenConsole.exe 1.22.250204002 binary (+1 duplicate)
abbrev 1.1.1 npm abbrev 1.1.1 npm
accepts 2.0.0 npm accepts 2.0.0 npm
adduser 3.137ubuntu1 deb adduser 3.137ubuntu1 deb
@ -76,14 +76,15 @@ charenc 0.0.2 npm
chownr 1.1.4 npm chownr 1.1.4 npm
chownr 2.0.0 npm chownr 2.0.0 npm
clojure 1.0.0 npm clojure 1.0.0 npm
code-server 1.99.3 npm code-server 1.100.3 npm
code-server 4.99.4 npm code-server 4.100.3 npm
coffeescript 1.0.0 npm coffeescript 1.0.0 npm
color-support 1.1.3 npm color-support 1.1.3 npm
compressible 2.0.18 npm compressible 2.0.18 npm
compression 1.8.0 npm compression 1.8.0 npm
concat-map 0.0.1 npm concat-map 0.0.1 npm
configuration-editing 1.0.0 npm configuration-editing 1.0.0 npm
conpty.dll 1.22.250204002 binary (+1 duplicate)
console-control-strings 1.1.0 npm console-control-strings 1.1.0 npm
content-disposition 1.0.0 npm content-disposition 1.0.0 npm
content-type 1.0.5 npm content-type 1.0.5 npm
@ -145,7 +146,6 @@ estraverse 5.3.0 npm
esutils 2.0.3 npm esutils 2.0.3 npm
etag 1.8.1 npm etag 1.8.1 npm
eventemitter3 4.0.7 npm eventemitter3 4.0.7 npm
eventsource-parser 3.0.0 npm
expand-template 2.0.3 npm expand-template 2.0.3 npm
express 5.0.1 npm express 5.0.1 npm
extension-editing 1.0.0 npm extension-editing 1.0.0 npm
@ -237,7 +237,7 @@ java 1.0.0 npm
javascript 1.0.0 npm javascript 1.0.0 npm
jq 1.7.1-3build1 deb jq 1.7.1-3build1 deb
js-base64 3.7.7 npm js-base64 3.7.7 npm
js-debug 1.97.1 npm js-debug 1.100.1 npm
js-debug-companion 1.1.3 npm js-debug-companion 1.1.3 npm
js-yaml 4.1.0 npm js-yaml 4.1.0 npm
jsbn 1.1.0 npm (+1 duplicate) jsbn 1.1.0 npm (+1 duplicate)
@ -329,7 +329,7 @@ libsemanage-common 3.5-1build5 deb
libsemanage2 3.5-1build5 deb libsemanage2 3.5-1build5 deb
libsepol2 3.5-2build1 deb libsepol2 3.5-2build1 deb
libsmartcols1 2.39.3-9ubuntu6.2 deb libsmartcols1 2.39.3-9ubuntu6.2 deb
libsqlite3-0 3.45.1-1ubuntu2.1 deb libsqlite3-0 3.45.1-1ubuntu2.3 deb
libss2 1.47.0-2.4~exp1ubuntu4.1 deb libss2 1.47.0-2.4~exp1ubuntu4.1 deb
libssh-4 0.10.6-2build2 deb libssh-4 0.10.6-2build2 deb
libssl3t64 3.0.13-0ubuntu3.5 deb libssl3t64 3.0.13-0ubuntu3.5 deb
@ -395,11 +395,11 @@ ncurses-base 6.4+20240113-1ubuntu2 deb
ncurses-bin 6.4+20240113-1ubuntu2 deb ncurses-bin 6.4+20240113-1ubuntu2 deb
negotiator 0.6.4 npm negotiator 0.6.4 npm
negotiator 1.0.0 npm negotiator 1.0.0 npm
net-tools 2.10-0.1ubuntu4 deb net-tools 2.10-0.1ubuntu4.4 deb
netbase 6.4 deb netbase 6.4 deb
netcat-openbsd 1.226-1ubuntu2 deb netcat-openbsd 1.226-1ubuntu2 deb
netmask 2.0.2 npm netmask 2.0.2 npm
node 20.18.3 binary node 20.19.0 binary
node-abi 3.8.0 npm node-abi 3.8.0 npm
node-addon-api 7.1.0 npm node-addon-api 7.1.0 npm
node-addon-api 7.1.1 npm node-addon-api 7.1.1 npm
@ -440,6 +440,7 @@ powershell 1.0.0 npm
prebuild-install 7.1.2 npm prebuild-install 7.1.2 npm
procps 2:4.0.4-4ubuntu3.2 deb procps 2:4.0.4-4ubuntu3.2 deb
promise-stream-reader 1.0.1 npm promise-stream-reader 1.0.1 npm
prompt 1.0.0 npm
proxy-addr 2.0.7 npm proxy-addr 2.0.7 npm
proxy-agent 6.5.0 npm proxy-agent 6.5.0 npm
proxy-from-env 1.1.0 npm (+1 duplicate) proxy-from-env 1.1.0 npm (+1 duplicate)
@ -509,7 +510,7 @@ systemd-standalone-sysusers 255.4-1ubuntu8.6 deb
sysvinit-utils 3.08-6ubuntu3 deb sysvinit-utils 3.08-6ubuntu3 deb
tar 1.35+dfsg-3build1 deb tar 1.35+dfsg-3build1 deb
tar 6.2.1 npm tar 6.2.1 npm
tar-fs 2.1.1 npm tar-fs 2.1.2 npm
tar-stream 2.2.0 npm tar-stream 2.2.0 npm
tas-client-umd 0.2.0 npm tas-client-umd 0.2.0 npm
terminal-suggest 1.0.1 npm terminal-suggest 1.0.1 npm
@ -533,7 +534,7 @@ tunnel-agent 0.6.0 npm
tunnel-forwarding 1.0.0 npm tunnel-forwarding 1.0.0 npm
type-is 2.0.0 npm type-is 2.0.0 npm
typescript 1.0.0 npm typescript 1.0.0 npm
typescript 5.8.2 npm typescript 5.8.3 npm
typescript-language-features 1.0.0 npm typescript-language-features 1.0.0 npm
tzdata 2025b-0ubuntu0.24.04 deb tzdata 2025b-0ubuntu0.24.04 deb
ubuntu-keyring 2023.11.28.1 deb ubuntu-keyring 2023.11.28.1 deb

View File

@ -36,6 +36,14 @@ opt_param_env_vars:
- {env_var: "SUDO_PASSWORD_HASH", env_value: "", desc: "Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`."} - {env_var: "SUDO_PASSWORD_HASH", env_value: "", desc: "Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`."}
- {env_var: "PROXY_DOMAIN", env_value: "code-server.my.domain", desc: "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/coder/code-server/blob/main/docs/guide.md#using-a-subdomain)"} - {env_var: "PROXY_DOMAIN", env_value: "code-server.my.domain", desc: "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/coder/code-server/blob/main/docs/guide.md#using-a-subdomain)"}
- {env_var: "DEFAULT_WORKSPACE", env_value: "/config/workspace", desc: "If this optional variable is set, code-server will open this directory by default"} - {env_var: "DEFAULT_WORKSPACE", env_value: "/config/workspace", desc: "If this optional variable is set, code-server will open this directory by default"}
- {env_var: "PWA_APPNAME", env_value: "code-server", desc: "If this optional variable is set, the PWA app will the specified name."}
readonly_supported: true
readonly_message: |
* `/tmp` must be mounted to tmpfs
* `sudo` will not be available
nonroot_supported: true
nonroot_message: |
* `sudo` will not be available
# application setup block # application setup block
app_setup_block_enabled: true app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
@ -73,12 +81,14 @@ init_diagram: |
init-crontab-config -> init-config-end init-crontab-config -> init-config-end
init-config -> init-crontab-config init-config -> init-crontab-config
init-mods-end -> init-custom-files init-mods-end -> init-custom-files
init-adduser -> init-device-perms
base -> init-envfile base -> init-envfile
base -> init-migrations base -> init-migrations
init-config-end -> init-mods init-config-end -> init-mods
init-mods-package-install -> init-mods-end init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install init-mods -> init-mods-package-install
init-adduser -> init-os-end init-adduser -> init-os-end
init-device-perms -> init-os-end
init-envfile -> init-os-end init-envfile -> init-os-end
init-custom-files -> init-services init-custom-files -> init-services
init-services -> svc-code-server init-services -> svc-code-server
@ -92,6 +102,7 @@ init_diagram: |
"code-server:latest" <- Base Images "code-server:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- {date: "03.06.25:", desc: "Allow setting PWA name using env var `PWA_APPNAME`."}
- {date: "13.10.24:", desc: "Only chown config folder when change to ownership or new install is detected."} - {date: "13.10.24:", desc: "Only chown config folder when change to ownership or new install is detected."}
- {date: "09.10.24:", desc: "Manage permissions in /config/.ssh according to file type"} - {date: "09.10.24:", desc: "Manage permissions in /config/.ssh according to file type"}
- {date: "19.08.24:", desc: "Rebase to Ubuntu Noble."} - {date: "19.08.24:", desc: "Rebase to Ubuntu Noble."}

View File

@ -3,7 +3,8 @@
mkdir -p /config/{extensions,data,workspace,.ssh} mkdir -p /config/{extensions,data,workspace,.ssh}
if [[ -n "${SUDO_PASSWORD}" ]] || [[ -n "${SUDO_PASSWORD_HASH}" ]]; then if [[ -z ${LSIO_NON_ROOT_USER} ]] && [[ -z ${LSIO_READ_ONLY_FS} ]]; then
if [[ -n "${SUDO_PASSWORD}" ]] || [[ -n "${SUDO_PASSWORD_HASH}" ]]; then
echo "setting up sudo access" echo "setting up sudo access"
if ! grep -q 'abc' /etc/sudoers; then if ! grep -q 'abc' /etc/sudoers; then
echo "adding abc to sudoers" echo "adding abc to sudoers"
@ -16,6 +17,7 @@ if [[ -n "${SUDO_PASSWORD}" ]] || [[ -n "${SUDO_PASSWORD_HASH}" ]]; then
echo "setting sudo password using SUDO_PASSWORD env var" echo "setting sudo password using SUDO_PASSWORD env var"
echo -e "${SUDO_PASSWORD}\n${SUDO_PASSWORD}" | passwd abc echo -e "${SUDO_PASSWORD}\n${SUDO_PASSWORD}" | passwd abc
fi fi
fi
fi fi
if [[ ! -f /config/.bashrc ]]; then if [[ ! -f /config/.bashrc ]]; then
@ -26,17 +28,19 @@ if [[ ! -f /config/.profile ]]; then
cp /root/.profile /config/.profile cp /root/.profile /config/.profile
fi fi
# fix permissions (ignore contents of workspace) if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
PUID=${PUID:-911} # fix permissions (ignore contents of workspace)
if [[ ! "$(stat -c %u /config/.profile)" == "${PUID}" ]]; then PUID=${PUID:-911}
if [[ ! "$(stat -c %u /config/.profile)" == "${PUID}" ]]; then
echo "Change in ownership or new install detected, please be patient while we chown existing files" echo "Change in ownership or new install detected, please be patient while we chown existing files"
echo "This could take some time" echo "This could take some time"
find /config -path "/config/workspace" -prune -o -exec lsiown abc:abc {} + find /config -path "/config/workspace" -prune -o -exec lsiown abc:abc {} +
lsiown abc:abc /config/workspace lsiown abc:abc /config/workspace
fi fi
chmod 700 /config/.ssh chmod 700 /config/.ssh
if [[ -n "$(ls -A /config/.ssh)" ]]; then if [[ -n "$(ls -A /config/.ssh)" ]]; then
find /config/.ssh/ -type d -exec chmod 700 '{}' \; find /config/.ssh/ -type d -exec chmod 700 '{}' \;
find /config/.ssh/ -type f -exec chmod 600 '{}' \; find /config/.ssh/ -type f -exec chmod 600 '{}' \;
find /config/.ssh/ -type f -iname '*.pub' -exec chmod 644 '{}' \; find /config/.ssh/ -type f -iname '*.pub' -exec chmod 644 '{}' \;
fi
fi fi

View File

@ -14,7 +14,12 @@ else
PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}" PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}"
fi fi
exec \ if [[ -z ${PWA_APPNAME} ]]; then
PWA_APPNAME="code-server"
fi
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \ s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \
s6-setuidgid abc \ s6-setuidgid abc \
/app/code-server/bin/code-server \ /app/code-server/bin/code-server \
@ -23,5 +28,19 @@ exec \
--extensions-dir /config/extensions \ --extensions-dir /config/extensions \
--disable-telemetry \ --disable-telemetry \
--auth "${AUTH}" \ --auth "${AUTH}" \
--app-name "${PWA_APPNAME}" \
"${PROXY_DOMAIN_ARG}" \ "${PROXY_DOMAIN_ARG}" \
"${DEFAULT_WORKSPACE:-/config/workspace}" "${DEFAULT_WORKSPACE:-/config/workspace}"
else
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \
/app/code-server/bin/code-server \
--bind-addr 0.0.0.0:8443 \
--user-data-dir /config/data \
--extensions-dir /config/extensions \
--disable-telemetry \
--auth "${AUTH}" \
--app-name "${PWA_APPNAME}" \
"${PROXY_DOMAIN_ARG}" \
"${DEFAULT_WORKSPACE:-/config/workspace}"
fi