Skip to content

Commit

Permalink
Release 23.07
Browse files Browse the repository at this point in the history
  • Loading branch information
accetto committed Jul 21, 2023
1 parent 99a5d03 commit 0bc7f98
Show file tree
Hide file tree
Showing 15 changed files with 161 additions and 71 deletions.
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,26 @@

***

### Release 23.07

This release introduces a new feature `FEATURES_OVERRIDING_ENVV`, which controls the overriding or adding of environment variables at the container startup-time.
Meaning, after the container has already been created.

The feature is enabled by default.
It can be disabled by setting the variable `FEATURES_OVERRIDING_ENVV` to zero when the container is created or the image is built.
Be aware that any other value than zero, even if unset or empty, enables the feature.

If `FEATURES_OVERRIDING_ENVV=1`, then the container startup script will look for the file `$HOME/.override/.override_envv.rc` and source all the lines that begin with the string 'export ' at the first position and contain the '=' character.

The overriding file can be provided from outside the container using *bind mounts* or *volumes*.

The lines that have been actually sourced can be reported into the container's log if the startup parameter `--verbose` or `--debug` is provided.

This feature is an enhanced implementation of the previously available functionality known as **Overriding VNC/noVNC parameters at the container startup-time**.

Therefore this is a **breaking change** for the users that already use the VNC/noVNC overriding.
They need to move the content from the previous file `$HOME"/.vnc_override.rc` into the new file `$HOME/.override/.override_envv.rc`.

### Release 23.03.2

This release mitigates the problems with the edge use case, when users bind the whole `$HOME` directory to an external folder on the host computer.
Expand Down
3 changes: 2 additions & 1 deletion docker/Dockerfile.xfce.20-04
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,6 @@ COPY ./xfce-firefox/src/home/Desktop "${HOME}"/Desktop/
### ##################

FROM stage_firefox as stage_firefox_plus
ARG ARG_HEADLESS_USER_ID

ENV FEATURES_FIREFOX_PLUS=1

Expand All @@ -339,9 +338,11 @@ FROM ${ARG_MERGE_STAGE_BROWSER_BASE} as merge_stage_browser
###############

FROM ${ARG_FINAL_STAGE_BASE} as stage_final
ARG ARG_FEATURES_OVERRIDING_ENVV
ARG ARG_SUDO_INITIAL_PW

ENV \
FEATURES_OVERRIDING_ENVV="${ARG_FEATURES_OVERRIDING_ENVV:+1}" \
FEATURES_VERSION_STICKER=1 \
STARTUPDIR="/dockerstartup"

Expand Down
2 changes: 2 additions & 0 deletions docker/Dockerfile.xfce.22-04
Original file line number Diff line number Diff line change
Expand Up @@ -359,9 +359,11 @@ FROM ${ARG_MERGE_STAGE_BROWSER_BASE} as merge_stage_browser
###############

FROM ${ARG_FINAL_STAGE_BASE} as stage_final
ARG ARG_FEATURES_OVERRIDING_ENVV
ARG ARG_SUDO_INITIAL_PW

ENV \
FEATURES_OVERRIDING_ENVV="${ARG_FEATURES_OVERRIDING_ENVV:+1}" \
FEATURES_VERSION_STICKER=1 \
STARTUPDIR="/dockerstartup"

Expand Down
1 change: 1 addition & 0 deletions docker/hooks/build
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ main() {
--build-arg ARG_VCS_REF="$(git rev-parse --short HEAD)" \
\
${FEATURES_BUILD_SLIM:+--build-arg ARG_APT_NO_RECOMMENDS=1} \
${FEATURES_OVERRIDING_ENVV:+--build-arg ARG_FEATURES_OVERRIDING_ENVV=1} \
${FEATURES_SCREENSHOOTING:+--build-arg ARG_FEATURES_SCREENSHOOTING=1} \
${FEATURES_THUMBNAILING:+--build-arg ARG_FEATURES_THUMBNAILING=1} \
\
Expand Down
6 changes: 6 additions & 0 deletions docker/hooks/env.rc
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,11 @@ if [[ $# -ge 2 ]] ; then shift 2 ; fi
### FEATURES_NOVNC: if 'noVNC' and 'websockify' should be included
### FEATURES_SCREENSHOOTING: if 'xfce4-screenshooter' and 'ristretto' should be included
### FEATURES_THUMBNAILING: if 'tumbler' should be included
### FEATURES_OVERRIDING_ENVV: if overriding environment variables at container startup time should be enabled
### Remark: There are also 'FEATURES_*' variables that are always set, e.g. 'FEATURES_VERSION_STICKER=1'.

### These features influence the content of almost all stages:
### Warning! Anything except '0' means '1', even unset or emty.
if [[ "${FEATURES_BUILD_SLIM}" == "0" ]] ; then FEATURES_BUILD_SLIM="" ; else FEATURES_BUILD_SLIM=1 ; fi

### These features influence the content of the related stages:
Expand All @@ -86,6 +88,10 @@ if [[ "${FEATURES_THUMBNAILING}" == "1" ]] ; then FEATURES_THUMBNAILING=1 ; else
if [[ "${FEATURES_CHROMIUM}" == "1" ]] ; then FEATURES_CHROMIUM=1 ; else FEATURES_CHROMIUM="" ; fi
if [[ "${FEATURES_FIREFOX}" == "1" ]] ; then FEATURES_FIREFOX=1 ; else FEATURES_FIREFOX="" ; fi

### These features influence container behaviour at startup time
### Warning! Anything except '0' means '1', even unset or emty.
if [[ "${FEATURES_OVERRIDING_ENVV}" == "0" ]] ; then FEATURES_OVERRIDING_ENVV="" ; else FEATURES_OVERRIDING_ENVV=1 ; fi

### These features are always enabled and cannot be disabled via environment variables
FEATURES_VNC=1

Expand Down
1 change: 1 addition & 0 deletions docker/hooks/pre_build
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ main() {
--build-arg BASETAG="${BASETAG}" \
\
${FEATURES_BUILD_SLIM:+--build-arg ARG_APT_NO_RECOMMENDS=1} \
${FEATURES_OVERRIDING_ENVV:+--build-arg ARG_FEATURES_OVERRIDING_ENVV=1} \
${FEATURES_SCREENSHOOTING:+--build-arg ARG_FEATURES_SCREENSHOOTING=1} \
${FEATURES_THUMBNAILING:+--build-arg ARG_FEATURES_THUMBNAILING=1} \
\
Expand Down
36 changes: 36 additions & 0 deletions docker/src/xfce-startup/startup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,31 @@ execute_command() {
fi
}

envv_override() {

local envv_override_file="${HOME}"/.override/.override_envv.rc
local tmp=""

### only if the file is not empty
if [[ -s "${envv_override_file}" ]] ; then

tmp=$( mktemp )

### only lines that begin with 'export ' and contain '='
( grep -E '^export\s[^=]+[=]{1}' "${envv_override_file}" 2>/dev/null 1>"${tmp}" )

if [[ "${_verbose}" == "1" ]] ; then

echo "Sourcing from file '${envv_override_file}'"
cat "${tmp}"
echo "End of file '${envv_override_file}'"
fi

source "${tmp}"
rm -f "${tmp}"
fi
}

main() {

### option interdependencies
Expand All @@ -74,6 +99,11 @@ main() {
_arg_skip_novnc="on"
fi

if [[ "${_verbose}" == "1" ]] ; then

echo -e "\nContainer '$(hostname)' started @$(date -u +'%Y-%m-%d_%H-%M-%S')"
fi

### option "--debug"
if [[ "${_arg_debug}" == "on" ]] ; then

Expand All @@ -87,6 +117,12 @@ main() {
echo "ls -la ." ; ls -la .
fi

### override environment variables only if enabled
if [[ "${FEATURES_OVERRIDING_ENVV}" == "1" ]] ; then

envv_override
fi

### create container user
if [[ -s "${STARTUPDIR}"/.initial_sudo_password ]] ; then

Expand Down
17 changes: 1 addition & 16 deletions docker/src/xfce-startup/vnc_startup.rc
Original file line number Diff line number Diff line change
@@ -1,18 +1,3 @@
declare _tmp
declare _vnc_override_file

_vnc_override_file="${HOME}"/.vnc_override.rc

### if the vnc-override file exists, then import and source
### only the lines beginning with 'export ' (at position 1)
if [[ -f "${_vnc_override_file}" ]] ; then

_tmp=$( mktemp )
( grep -E '^export\s+' "${_vnc_override_file}" 2>/dev/null 1>"${_tmp}" )
source "${_tmp}"
rm -f "${_tmp}"
fi

start_vnc () {
local vnc_ip
local passwd_path
Expand Down Expand Up @@ -69,7 +54,7 @@ start_vnc () {
echo $(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 20) | vncpasswd -f > "${passwd_path}"
fi

echo "${VNC_PW}" | vncpasswd -f >> "${passwd_path}"
echo "${VNC_PW}" | vncpasswd -f > "${passwd_path}"
chmod 600 "${passwd_path}"

### create VNC configuration file
Expand Down
38 changes: 25 additions & 13 deletions docker/xfce-chromium/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
- [Volumes](#volumes)
- [Version sticker](#version-sticker)
- [Using headless containers](#using-headless-containers)
- [Overriding environment variables](#overriding-environment-variables)
- [Overriding VNC/noVNC parameters](#overriding-vncnovnc-parameters)
- [Container user account](#container-user-account)
- [Overriding container user parameters](#overriding-container-user-parameters)
Expand Down Expand Up @@ -240,6 +241,21 @@ It is also possible to provide the password through the links:
- `http://mynas:26901/vnc_lite.html?password=headless`
- `http://mynas:26901/vnc.html?password=headless`

### Overriding environment variables

If the environment variable `FEATURES_OVERRIDING_ENVV=1`, which is the case by default, then the container startup script will look for the file `$HOME/.override/.override_envv.rc` and source all the lines that begin with the string 'export ' at the first position and contain the '=' character.

You can provide the overriding file from outside the container using *bind mounts* or *volumes*.

This feature allows overriding or adding environment variables at the **container startup-time**.
It means, even after the container has already been created.

You can disable this behavior by setting the variable `FEATURES_OVERRIDING_ENVV` to zero when the container is created or the image is built.

The lines that have been actually sourced can be reported into the container's log if the startup parameter `--verbose` or `--debug` is provided.

Look below for the example how to override the VNC/noVNC parameters at the container startup-time.

### Overriding VNC/noVNC parameters

The VNC/noVNC parameters are controlled by related environment variables embedded into the image.
Expand Down Expand Up @@ -274,37 +290,33 @@ For example:
docker build --build-arg DISPLAY=:2 --build-arg ARG_VNC_PORT=6902 ...
```

**At container startup-time** you can override the environment variable values by using the `docker run -e` option. Please note that in this case you have to use the actual environment variable names, not the build argument names (e.g. `VNC_PORT` instead of `ARG_VNC_PORT`).
**At container creation-time** you can override the environment variable values by using the `docker run -e` option. Please note that in this case you have to use the actual environment variable names, not the build argument names (e.g. `VNC_PORT` instead of `ARG_VNC_PORT`).

For example:

```shell
docker run -e VNC_PORT=6902 ...
```

**At VNC/noVNC startup-time** you can override the environment variable values by binding an external file exporting the variables to the dedicated mounting point `${HOME}/.vnc_override.rc` (a single file, not a directory).
**At container startup-time** you can override the VNC/noVNC variables using the feature `FEATURES_OVERRIDING_ENVV' described above.

For example, the following command would bind the file `my_own_vnc_parameters.rc` from the directory `/home/joe` to the container:

```shell
docker run -v /home/joe/my_own_vnc_parameters.rc:/home/headless/.vnc_override.rc
docker run -v /home/joe/my_own_vnc_parameters.rc:/home/headless/.override/.override_envv.rc
```

The content of the file should be similar to the provided example file `example-vnc-override.rc`:
The content of the file should be similar to the provided example file `example-override-envv.rc`:

```shell
### only lines beginning with 'export ' (at position 1) will be imported and sourced
;export VNC_COL_DEPTH=32
;export VNC_VIEW_ONLY=true
;export VNC_PW=secret
### only the lines beginning with 'export ' at the first position and containing '=' will be sourced
export VNC_RESOLUTION=1024x768
export DISPLAY=:2
export VNC_PORT=5902
export NOVNC_PORT=6902
;export NOVNC_HEARTBEAT=25
export VNC_PW=secret
#export DISPLAY=:2
#export VNC_COL_DEPTH=32
```

Please note that only the lines beginning with `export` at the first position will be imported.
Please note that only the lines beginning with the string 'export ' at the first position and containing the '=' character will be imported.

By providing the variable values the following rules apply:

Expand Down
38 changes: 25 additions & 13 deletions docker/xfce-firefox/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
- [Volumes](#volumes)
- [Version sticker](#version-sticker)
- [Using headless containers](#using-headless-containers)
- [Overriding environment variables](#overriding-environment-variables)
- [Overriding VNC/noVNC parameters](#overriding-vncnovnc-parameters)
- [Container user account](#container-user-account)
- [Overriding container user parameters](#overriding-container-user-parameters)
Expand Down Expand Up @@ -243,6 +244,21 @@ It is also possible to provide the password through the links:
- `http://mynas:26901/vnc_lite.html?password=headless`
- `http://mynas:26901/vnc.html?password=headless`

### Overriding environment variables

If the environment variable `FEATURES_OVERRIDING_ENVV=1`, which is the case by default, then the container startup script will look for the file `$HOME/.override/.override_envv.rc` and source all the lines that begin with the string 'export ' at the first position and contain the '=' character.

You can provide the overriding file from outside the container using *bind mounts* or *volumes*.

This feature allows overriding or adding environment variables at the **container startup-time**.
It means, even after the container has already been created.

You can disable this behavior by setting the variable `FEATURES_OVERRIDING_ENVV` to zero when the container is created or the image is built.

The lines that have been actually sourced can be reported into the container's log if the startup parameter `--verbose` or `--debug` is provided.

Look below for the example how to override the VNC/noVNC parameters at the container startup-time.

### Overriding VNC/noVNC parameters

The VNC/noVNC parameters are controlled by related environment variables embedded into the image.
Expand Down Expand Up @@ -277,37 +293,33 @@ For example:
docker build --build-arg DISPLAY=:2 --build-arg ARG_VNC_PORT=6902 ...
```

**At container startup-time** you can override the environment variable values by using the `docker run -e` option. Please note that in this case you have to use the actual environment variable names, not the build argument names (e.g. `VNC_PORT` instead of `ARG_VNC_PORT`).
**At container creation-time** you can override the environment variable values by using the `docker run -e` option. Please note that in this case you have to use the actual environment variable names, not the build argument names (e.g. `VNC_PORT` instead of `ARG_VNC_PORT`).

For example:

```shell
docker run -e VNC_PORT=6902 ...
```

**At VNC/noVNC startup-time** you can override the environment variable values by binding an external file exporting the variables to the dedicated mounting point `${HOME}/.vnc_override.rc` (a single file, not a directory).
**At container startup-time** you can override the VNC/noVNC variables using the feature `FEATURES_OVERRIDING_ENVV' described above.

For example, the following command would bind the file `my_own_vnc_parameters.rc` from the directory `/home/joe` to the container:

```shell
docker run -v /home/joe/my_own_vnc_parameters.rc:/home/headless/.vnc_override.rc
docker run -v /home/joe/my_own_vnc_parameters.rc:/home/headless/.override/.override_envv.rc
```

The content of the file should be similar to the provided example file `example-vnc-override.rc`:
The content of the file should be similar to the provided example file `example-override-envv.rc`:

```shell
### only lines beginning with 'export ' (at position 1) will be imported and sourced
;export VNC_COL_DEPTH=32
;export VNC_VIEW_ONLY=true
;export VNC_PW=secret
### only the lines beginning with 'export ' at the first position and containing '=' will be sourced
export VNC_RESOLUTION=1024x768
export DISPLAY=:2
export VNC_PORT=5902
export NOVNC_PORT=6902
;export NOVNC_HEARTBEAT=25
export VNC_PW=secret
#export DISPLAY=:2
#export VNC_COL_DEPTH=32
```

Please note that only the lines beginning with `export` at the first position will be imported.
Please note that only the lines beginning with the string 'export ' at the first position and containing the '=' character will be imported.

By providing the variable values the following rules apply:

Expand Down
Loading

0 comments on commit 0bc7f98

Please sign in to comment.