diff --git a/CHANGELOG.md b/CHANGELOG.md index 27ee3d1..7be8503 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## 24.04.4-4.1 2024-07-10 + + ### Added + - Add ENABLE_OVERWRITE_MODE environment variable + - Add HELP_URL environment variable + - Add ENABLE_WASM and FORCE_WASM support + + ### Changed + - Rework TLS configuration due to changes in upstream configuration requirements + - Change INTERFACE environment defaults from notebookbar to tabbed + + ## 24.04.4-4 2024-07-10 ### Added diff --git a/Dockerfile.alpine b/Dockerfile.alpine deleted file mode 100644 index 1f196eb..0000000 --- a/Dockerfile.alpine +++ /dev/null @@ -1,173 +0,0 @@ -FROM tiredofit/alpine:3.18 as builder -LABEL maintainer="Dave Conroy (dave at tiredofit dot ca)" -LABEL org.opencontainers.image.source="https://github.com/tiredofit/docker-collabora-online" - -### Buildtime arguments -ARG COLLABORA_ONLINE_VERSION -ARG COLLABORA_ONLINE_REPO_URL -ARG LIBREOFFICE_VERSION -ARG LIBREOFFICE_REPO_URL -ARG MAX_CONNECTIONS -ARG MAX_DOCUMENTS -ARG APP_NAME -ARG APP_BRAND - -### Environment Variables -ENV COLLABORA_ONLINE_VERSION=${COLLABORA_ONLINE_VERSION:-"cp-23.05.0-2"} \ - COLLABORA_ONLINE_REPO_URL=${COLLABORA_ONLINE_REPO_URL:-"https://github.com/CollaboraOnline/online"} \ - # - LIBREOFFICE_VERSION=${LIBREOFFICE_VERSION:-"cp-23.05.0-2"} \ - LIBREOFFICE_REPO_URL=${LIBREOFFICE_REPO_URL:-"https://github.com/LibreOffice/core"} \ - # - APP_NAME=${APP_NAME:-"Document Editor"} \ - APP_BRAND=${APP_BRAND:-"unbranded"} \ - # - POCO_VERSION=${POCO_VERSION:-"poco-1.12.4-release.tar.gz"} \ - POCO_URL=${POCO_URL:-"https://github.com/pocoproject/poco/archive/"} \ - # - MAX_CONNECTIONS=${MAX_CONNECTIONS:-"100000"} \ - ## Uses Approximately 20mb per document open - MAX_DOCUMENTS=${MAX_DOCUMENTS:-"100000"} - -COPY build-assets /build-assets - -RUN source /assets/functions/00-container && \ - set -x && \ - package update && \ - package upgrade && \ - package install .container-build-deps \ - build-base \ - git \ - && \ - - package install .collabora-office-build-deps \ - abseil-cpp-dev \ - apache-ant \ - autoconf \ - automake \ - bison \ - bluez-dev \ - boost-dev \ - box2d-dev \ - clang \ - clucene-dev \ - coreutils \ - cppunit-dev \ - cups-dev \ - doxygen \ - findutils \ - flex \ - freetype-dev \ - glew-dev \ - glm-dev \ - glu-dev \ - gperf \ - gpgme-dev \ - gst-plugins-base-dev \ - gstreamer-dev \ - gtk+3.0-dev \ - gtk4.0-dev \ - harfbuzz-dev \ - hunspell-dev \ - hyphen-dev \ - icu-dev \ - junit \ - kconfig-dev \ - lcms2-dev \ - libabw-dev \ - libcdr-dev \ - libe-book-dev \ - libepubgen-dev \ - libetonyek-dev \ - libexttextcat-dev \ - libfreehand-dev \ - libjpeg-turbo-dev \ - libmspub-dev \ - libmwaw-dev \ - libnumbertext-dev \ - libodfgen-dev \ - liborcus-dev \ - libpagemaker-dev \ - libpq-dev \ - libqxp-dev \ - libstaroffice-dev \ - libvisio-dev \ - libwebp-dev \ - libwpd-dev \ - libwpg-dev \ - libwps-dev \ - libxml2-utils \ - libxrandr-dev \ - libxrender-dev \ - libxslt-dev \ - libzmf-dev \ - llvm-dev \ - mariadb-dev \ - mdds-dev \ - mythes-dev \ - neon-dev \ - nss-dev \ - openjpeg-dev \ - openldap-dev \ - openssl-dev \ - perl \ - perl-archive-zip \ - plasma-framework-dev \ - poppler-dev \ - py3-setuptools \ - python3-dev \ - qt5-qtbase-dev \ - qt5-qttools-dev \ - qt6-qtbase-dev \ - qt6-qttools-dev \ - redland-dev \ - sed \ - tar \ - unixodbc-dev \ - vigra-dev \ - xmlsec-dev \ - xz \ - zip \ - && \ - \ -### Build Poco - mkdir -p /usr/src/poco && \ - curl -sSL ${POCO_URL}${POCO_VERSION} | tar xvfz - --strip 1 -C /usr/src/poco && \ - cd /usr/src/poco && \ - ./configure \ - --static \ - --no-tests \ - --no-samples \ - --no-sharedlibs \ - --cflags="-fPIC" \ - --omit=Zip,Data,Data/SQLite,Data/ODBC,Data/MySQL,MongoDB,PDF,CppParser,PageCompiler,Redis,Encodings \ - --prefix=/opt/poco \ - && \ - make -j$(nproc) && \ - make install && \ - \ -### Build Fetch LibreOffice - This will take a while.. - clone_git_repo ${LIBREOFFICE_REPO_URL} ${LIBREOFFICE_VERSION} ${GIT_REPO_SRC_CORE} - -RUN source /assets/functions/00-container && \ - set -x && \ - GIT_REPO_SRC_CORE=/usr/src/core && \ - adduser -D -S -h /dev/null -s /sbin/nologin -u 1000 cool && \ - cd /usr/src/core && \ - if [ -d "/build-assets/core/src" ] && [ -n "$(ls -A "/build-assets/core/src" 2>/dev/null)" ]; then cp -R /build-assets/core/src/* / ; fi; \ - if [ -d "/build-assets/core/scripts" ] && [ -n "$(ls -A "/build-assets/core/scripts" 2>/dev/null)" ]; then for script in /build-assets/core/scripts/*.sh; do echo "** Applying $script"; bash $script; done && \ ; fi ; \ - sed -i "s|--enable-symbols|--disable-symbols|g" ${GIT_REPO_SRC_CORE}/distro-configs/CPLinux-LOKit.conf && \ - \ - echo "--prefix=/opt/libreoffice" >> ${GIT_REPO_SRC_CORE}/distro-configs/CPLinux-LOKit.conf && \ - ./autogen.sh \ - --with-distro="CPLinux-LOKit" \ - --disable-epm \ - --without-package-format && \ - chown -R cool ${GIT_REPO_SRC_CORE} && \ - sudo -u cool make fetch - RUN source /assets/functions/00-container && \ - set -x && \ - sudo -u cool make -j$(nproc) build && \ - mkdir -p /opt/libreoffice && \ - chown -R cool /opt/libreoffice && \ - cp -R ${GIT_REPO_SRC_CORE}/instdir/* /opt/libreoffice/ \ No newline at end of file diff --git a/README.md b/README.md index fcc3615..505a4a6 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ This will build a Docker image for [Collabora Online](https://www.collaboraoffic - [General Usage](#general-usage) - [Administration](#administration) - [Logging](#logging) - - [Language](#languages-for-writing-aids-spell-checker-grammar-checker-thesaurus-hyphenation) + - [Languages for writing aids (spell checker, grammar checker, thesaurus, hyphenation)](#languages-for-writing-aids-spell-checker-grammar-checker-thesaurus-hyphenation) - [Spell Check](#spell-check) - [TLS Settings](#tls-settings) - [Performance and Limits](#performance-and-limits) @@ -133,20 +133,22 @@ Be sure to view the following repositories to understand all the customizable op | [OS Base](https://github.com/tiredofit/docker-debian/) | Customized Image based on Debian Linux | #### General Usage -| Parameter | Description | Default | -| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `SETUP_TYPE` | Automatically generate configuration with defaults. Set to `MANUAL` and map the configuration file to use your own | `AUTO` | -| `ALLOWED_HOSTS` | Set which domains which can access service Seperate Multiple with `,` - Example: `https://www.example\.org` (no wildcards) | `` | -| `EXTRA_OPTIONS` | If you want to pass additional arguments upon startup, add it here | `` | -| `INTERFACE` | Web interface type `classic` or `notebookbar` | `notebookbar` | -| `GROUP_DOWNLOAD_AS` | Group Download as Icons into dropdown in notebookbar view | `TRUE` | -| `WATERMARK_OPACITY` | Watermark Opacity | `0.2` | -| `WATERMARK_TEXT` | Text to display for watermark | `` | -| `ENABLE_MACROS` | Enable Macros | `FALSE` | -| `MACRO_SECURITY_LEVEL` | Macro Security Level `1` Medium `0` Low | `1` | -| `ENABLE_METRICS_UNAUTHENTICATED` | Enable Unauthenticated Metrics | `FALSE` | -| `ENABLE_HOME_MODE` | Enable more features with home mode | `FALSE` | - +| Parameter | Description | Default | +| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------- | +| `SETUP_TYPE` | Automatically generate configuration with defaults. Set to `MANUAL` and map the configuration file to use your own | `AUTO` | +| `ALLOWED_HOSTS` | Set which domains which can access service Seperate Multiple with `,` - Example: `https://www.example\.org` (no wildcards) | `` | +| `EXTRA_OPTIONS` | If you want to pass additional arguments upon startup, add it here | `` | +| `INTERFACE` | Web interface type `compact` `tabbed` | `tabbed` | +| `GROUP_DOWNLOAD_AS` | Group Download as Icons into dropdown in notebookbar view | `TRUE` | +| `WATERMARK_OPACITY` | Watermark Opacity | `0.2` | +| `WATERMARK_TEXT` | Text to display for watermark | `` | +| `ENABLE_MACROS` | Enable Macros | `FALSE` | +| `MACRO_SECURITY_LEVEL` | Macro Security Level `1` Medium `0` Low | `1` | +| `ENABLE_METRICS_UNAUTHENTICATED` | Enable Unauthenticated Metrics | `FALSE` | +| `ENABLE_HOME_MODE` | Enable more features with home mode | `FALSE` | +| `ENABLE_OVERWRITE_MODE` | Enable overwrite mode (user can use the insert key) | `TRUE` | +| `ENABLE_WASM` | Enable WASM support | `TRUE` | +| `FORCE_WASM` | Force all requests to WASM | `FALSE` | #### Administration | Parameter | Description | Default | `_FILE` | @@ -181,11 +183,11 @@ Be sure to view the following repositories to understand all the customizable op The image comes with English (US, GB variants) baked into the image, however upon container startup you can add more languages via environment variables. Add multiple languages by seperating with a space. -| Parameter | Value | Description | -| -------------- | ------- | -------------------------- | -| `LANGUAGE` | `en_GB` | English (Great Britain) | -| | `en_US` | English (US) | -| | `fr_FR` | French (France) | +| Parameter | Value | Description | +| ---------- | ------- | ----------------------- | +| `LANGUAGE` | `en_GB` | English (Great Britain) | +| | `en_US` | English (US) | +| | `fr_FR` | French (France) | The above table is just a sample of valid values. diff --git a/install/assets/defaults/10-coolwsd b/install/assets/defaults/10-coolwsd index e6de1e0..ac74db8 100755 --- a/install/assets/defaults/10-coolwsd +++ b/install/assets/defaults/10-coolwsd @@ -26,26 +26,30 @@ ENABLE_LANGUAGE_TOOL=${ENABLE_LANGUAGE_TOOL:-"FALSE"} ENABLE_MACROS=${ENABLE_MACROS:-"FALSE"} ENABLE_METRICS_UNAUTHENTICATED=${ENABLE_METRICS_UNAUTHENTICATED:-"FALSE"} ENABLE_MOUNT_JAIL=${ENABLE_MOUNT_JAIL:-"true"} +ENABLE_OVERWRITE_MODE=${ENABLE_OVERWRITE_MODE:-"TRUE"} ENABLE_SECCOMP=${ENABLE_SECCOMP:-"true"} ENABLE_TILES_CACHE=${ENABLE_TILES_CACHE:-"TRUE"} ENABLE_TLS=${ENABLE_TLS:-"FALSE"} ENABLE_TLS_CERT_GENERATE=${ENABLE_TLS_CERT_GENERATE:-"TRUE"} ENABLE_TLS_REVERSE_PROXY=${ENABLE_TLS_REVERSE_PROXY:-"TRUE"} ENABLE_USER_STATISTICS=${ENABLE_USER_STATISTICS:-"FALSE"} +ENABLE_WASM=${ENABLE_WASM:-"TRUE"} ENABLE_ZOTERO=${ENABLE_ZOTERO:-"TRUE"} FILES_QUARANTINE_DIRECTORY_SIZE_LIMIT=${FILES_QUARANTINE_DIRECTORY_SIZE_LIMIT:-"250"} -FILES_QUARANTINE_EXPIRY=${FILES_QUARANTINE_EXPIRY:-"30"} -FILES_QUARANTINE_MAX_VERSIONS=${FILES_QUARANTINE_MAX_VERSIONS:-"2"} +FILES_QUARANTINE_EXPIRY=${FILES_QUARANTINE_EXPIRY:-"3000"} +FILES_QUARANTINE_MAX_VERSIONS=${FILES_QUARANTINE_MAX_VERSIONS:-"5"} FILES_QUARANTINE_PATH=${FILES_QUARANTINE_PATH:-"quarantine"} FILE_SERVER_ROOT_PATH=${FILE_SERVER_ROOT_PATH:-"browser/../"} FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-0} FONTS_MISSING_ACTION=${FONTS_MISSING_ACTION:-"log"} +FORCE_WASM=${FORCE_WASM:-"FALSE"} GROUP_DOWNLOAD_AS=${GROUP_DOWNLOAD_AS:-"TRUE"} +HELP_URL=${HELP_URL:-"https://help.collaboraoffice.com/help.html?"} HEXIFY_EMBEDDED_URLS=${HEXIFY_EMBEDDED_URLS:-"FALSE"} IDLE_SAVE=${IDLE_SAVE:-30} IDLE_UNLOAD_TIMEOUT=${IDLE_UNLOAD_TIMEOUT:-3600} INDIRECTION_ENDPOINT=${INDIRECTION_ENDPOINT:-""} -INTERFACE=${INTERFACE:-"notebookbar"} +INTERFACE=${INTERFACE:-"tabbed"} LANGUAGE=${LANGUAGE:-'en_GB en_US'} LANGUAGE_TOOL_API_KEY=${LANGUAGE_TOOL_API_KEY:-""} LANGUAGE_TOOL_BASE_URL=${LANGUAGE_TOOL_BASE_URL:-""} diff --git a/install/etc/cont-init.d/10-coolwsd b/install/etc/cont-init.d/10-coolwsd index 081ba21..fbbff7e 100755 --- a/install/etc/cont-init.d/10-coolwsd +++ b/install/etc/cont-init.d/10-coolwsd @@ -83,42 +83,50 @@ if [ -d /assets/custom-fonts/ ] ; then silent sudo -u cool /opt/cool/bin/coolwsd-systemplate-setup /opt/cool/systemplate /opt/libreoffice fi + + + sed -i \ + -e "s|.*<\/ca_file_path>|${TLS_CERT_PATH}/${TLS_CA_FILENAME}<\/ca_file_path>|" \ + -e "s|.*<\/cert_file_path>|${TLS_CERT_PATH}/${TLS_CERT_FILENAME}<\/cert_file_path>|" \ + -e "s|.*<\/key_file_path>|${TLS_CERT_PATH}/${TLS_KEY_FILENAME}<\/key_file_path>|" \ + /etc/coolwsd/coolwsd.xml + if var_true "${ENABLE_TLS}" ; then print_debug "TLS Enabled" - if [ ! -d "${TLS_CERT_PATH}" ] || [ ! -f "${TLS_KEY_FILENAME}" ] || [ ! -f "${TLS_CA_FILENAME}" ] || [ ! -f "${TLS_CERT_FILENAME}" ] ; then - print_debug "No TLS Certificates found" - if var_true "${ENABLE_TLS_CERT_GENERATE}" ; then - print_debug "TLS Certificate Autogeneration" - mkdir -p "$TLS_CERT_PATH" - # Generate new SSL certificate instead of using the default - print_notice "Auto Generating Self Signed Certificates" - mkdir -p /tmp/ssl/ - cd /tmp/ssl/ - mkdir -p certs/ca - silent openssl genrsa -out certs/ca/root.key.pem 2048 - silent openssl req -x509 -new -nodes -key certs/ca/root.key.pem -days 9131 -out certs/ca/root.crt.pem -subj "/C=XX/ST=XX/L=XX/O=Dummy - Authority/CN=Dummy Authority" - mkdir -p certs/{servers,tmp} - mkdir -p "certs/servers/localhost" - silent openssl genrsa -out "certs/servers/localhost/privkey.pem" 2048 - if test "${cert_domain-set}" == set; then - silent openssl req -key "certs/servers/localhost/privkey.pem" -new -sha256 -out "certs/tmp/localhost.csr.pem" -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=localhost" - else - silent openssl req -key "certs/servers/localhost/privkey.pem" -new -sha256 -out "certs/tmp/localhost.csr.pem" -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=${cert_domain}" - fi - silent openssl x509 -req -in "certs/tmp/localhost.csr.pem" -CA "certs/ca/root.crt.pem" -CAkey "certs/ca/root.key.pem" -CAcreateserial -out "certs/servers/localhost/cert.pem" -days 9131 - cp -R certs/servers/localhost/privkey.pem "${TLS_CERT_PATH}"/"${TLS_KEY_FILENAME}" - cp -R certs/servers/localhost/cert.pem "${TLS_CERT_PATH}"/"${TLS_CERT_FILENAME}" - cp -R certs/ca/root.crt.pem "${TLS_CERT_PATH}"/"${TLS_CA_FILENAME}" - rm -rf /tmp/ssl - chown -R cool "${TLS_CERT_PATH}" - else - if [ ! -f "${TLS_CERT_PATH}"/"${TLS_KEY_FILENAME}" ] || [ ! -f "${TLS_CERT_PATH}"/"${TLS_CA_FILENAME}" ] || [ ! -f "${TLS_CERT_PATH}"/"${TLS_CERT_FILENAME}" ] ; then - print_error "TLS Certificates missing... Please switch to autogenerate mode, or place your certifcates in the correct location." - exit 1 - fi - fi + if [ ! -f "${TLS_CERT_PATH}"/"${TLS_KEY_FILENAME}" ] && [ ! -f "${TLS_CERT_PATH}"/"${TLS_CA_FILENAME}" ] && [ ! -f "${TLS_CERT_PATH}"/"${TLS_CERT_FILENAME}" ] ; then + if var_true "${ENABLE_TLS_CERT_GENERATE}"; then + print_debug "No TLS Certificates found - TLS Certificate Autogeneration" + mkdir -p "${TLS_CERT_PATH}" + print_notice "Auto Generating Self Signed Certificates" + tmp_ssl_path=$(mktemp -d) + cd "${tmp_ssl_path}" + mkdir -p certs/ca + silent openssl genrsa -out certs/ca/root.key.pem 2048 + silent openssl req -x509 -new -nodes -key certs/ca/root.key.pem -days 9131 -out certs/ca/root.crt.pem -subj "/C=XX/ST=XX/L=XX/O=Dummy + Authority/CN=Dummy Authority" + mkdir -p certs/{servers,tmp} + mkdir -p "certs/servers/localhost" + silent openssl genrsa -out "certs/servers/localhost/privkey.pem" 2048 + if test "${cert_domain-set}" == set; then + silent openssl req -key "certs/servers/localhost/privkey.pem" -new -sha256 -out "certs/tmp/localhost.csr.pem" -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=localhost" + else + silent openssl req -key "certs/servers/localhost/privkey.pem" -new -sha256 -out "certs/tmp/localhost.csr.pem" -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=${cert_domain}" + fi + silent openssl x509 -req -in "certs/tmp/localhost.csr.pem" -CA "certs/ca/root.crt.pem" -CAkey "certs/ca/root.key.pem" -CAcreateserial -out "certs/servers/localhost/cert.pem" -days 9131 + cp -R certs/servers/localhost/privkey.pem "${TLS_CERT_PATH}"/"${TLS_KEY_FILENAME}" + cp -R certs/servers/localhost/cert.pem "${TLS_CERT_PATH}"/"${TLS_CERT_FILENAME}" + cp -R certs/ca/root.crt.pem "${TLS_CERT_PATH}"/"${TLS_CA_FILENAME}" + cd / + rm -rf "${tmp_ssl_path}" + chown -R cool "${TLS_CERT_PATH}" + else + print_error "TLS Certificates missing... Please switch to autogenerate mode, or place your certifcates in the correct location." + exit 1 + fi fi + tls_ca_pathfile="${TLS_CERT_PATH}"/"${TLS_CA_FILENAME}" + tls_cert_pathfile="${TLS_CERT_PATH}"/"${TLS_CERT_FILENAME}" + tls_key_pathfile="${TLS_CERT_PATH}"/"${TLS_KEY_FILENAME}" fi if [ "${SETUP_TYPE,,}" = "auto" ]; then @@ -253,9 +261,9 @@ if [ "${SETUP_TYPE,,}" = "auto" ]; then fi sed -i \ - -e "s|.*<\/ca_file_path>|${TLS_CERT_PATH}/${TLS_CA_FILENAME}<\/ca_file_path>|" \ - -e "s|.*<\/cert_file_path>|${TLS_CERT_PATH}/${TLS_CERT_FILENAME}<\/cert_file_path>|" \ - -e "s|.*<\/key_file_path>|${TLS_CERT_PATH}/${TLS_KEY_FILENAME}<\/key_file_path>|" \ + -e "s|.*<\/ca_file_path>|${tls_ca_pathfile}<\/ca_file_path>|" \ + -e "s|.*<\/cert_file_path>|${tls_cert_pathfile}<\/cert_file_path>|" \ + -e "s|.*<\/key_file_path>|${tls_key_pathfile}<\/key_file_path>|" \ /etc/coolwsd/coolwsd.xml ## Security @@ -314,7 +322,20 @@ if [ "${SETUP_TYPE,,}" = "auto" ]; then sed -i -e "s|.*<\/url>|${INDIRECTION_ENDPOINT}<\/url>|" /etc/coolwsd/coolwsd.xml ## Zotero - sed -i -e "s|.*<\/url>|${ENABLE_ZOTERO}<\/enable>|" /etc/coolwsd/coolwsd.xml + sed -i -e "s|.*<\/enable>|${ENABLE_ZOTERO}<\/enable>|" /etc/coolwsd/coolwsd.xml + + ## HelpURL + sed -i -e "s|.*<\/help_url>|${HELP_URL}<\/help_url>|" /etc/coolwsd/coolwsd.xml + + ## Overwrite Mode + sed -i -e "s|.*<\/enable>|${ENABLE_OVERWRITE_MODE}<\/enable>|" /etc/coolwsd/coolwsd.xml + + ## WASM + sed -i \ + -e "s|.*<\/enable>|${ENABLE_WASM}<\/enable>|" \ + -e "s|.*<\/force>|${FORCE_WASM}<\/force>|" \ + /etc/coolwsd/coolwsd.xml + fi # Generate WOPI proof key