├── lab └── kubernetes │ ├── k3s │ ├── k3s_install.sh │ ├── edit_traefik.sh │ ├── dashboard │ │ ├── remove.sh │ │ ├── deploy.sh │ │ ├── get_token.sh │ │ ├── dashboard.admin-user.yml │ │ ├── dashboard.admin-user-role.yml │ │ └── install.sh │ └── k3s_fix_pvc_perm.sh │ └── domino │ ├── api │ ├── create_service_account.sh │ ├── role.yml │ ├── role_binding.yml │ ├── pvc.json │ └── kapi.sh │ ├── pvc_storage.yml │ ├── service_nrpc.yml │ ├── service_http.yml │ ├── service_https.yml │ ├── ingress_http.yml │ ├── create_registry_secret.sh │ ├── domino12_auto_config.yml │ └── domino12.yml ├── testing ├── .env ├── build.sh ├── custom_tests.sh ├── makefile └── README.md ├── docs ├── favicon.ico ├── _includes │ ├── nav_footer_custom.html │ └── yewtube.html ├── architecture.md ├── assets │ └── images │ │ ├── png │ │ ├── qnap-app-center.png │ │ ├── qnap-docker-images.png │ │ ├── qnap-createcontainer-1.png │ │ ├── qnap-createcontainer-2.png │ │ ├── qnap-createcontainer-3.png │ │ ├── qnap-createcontainer-4.png │ │ ├── qnap-createcontainer-5.png │ │ ├── qnap-filestation-folders.png │ │ └── qnap-createcontainer-volumes.png │ │ └── svg │ │ ├── DominoIcon.svg │ │ └── Domino.svg ├── howto.md ├── reference.md ├── run.md ├── build_capi.sh ├── concept_license.md ├── plantuml │ ├── projectstructure.plantuml │ ├── containerstartscript.plantuml │ └── repository-setup.plantuml ├── reference_startscript.md ├── dominoleap.md ├── howto_docker-linux.md ├── howto_download-software.md ├── reference_environment-vars.md ├── reference_custom_roots.md ├── howto_github.md ├── reference_custom_mirror.md ├── run_dominoctl.md ├── howto_docker-run.md ├── run_docker.md ├── resources.md ├── architecture_concept.md ├── run_ots.md ├── howto_use_externally.md ├── concept_benefits.md ├── concept_autotesting.md ├── _config.yml ├── architecture_startup-cfg-flow.md ├── howto_docker-wsl.md ├── index.md ├── architecture_components.md └── quickstart.md ├── dockerfiles ├── install_dir_domino │ ├── domsetup │ │ └── domsetup-webroot │ │ │ ├── index.html │ │ │ ├── favicon.ico │ │ │ ├── completed.html │ │ │ ├── domino-ots-setup.html │ │ │ └── assets │ │ │ └── domsetup-logo.svg │ ├── makefile │ ├── startscript │ │ ├── systemdbs.ind │ │ ├── install_borg │ │ ├── domino.cfg │ │ ├── OneTouchSetup │ │ │ ├── first_server.env │ │ │ └── additional_server.env │ │ └── domino.service │ ├── domino_install.properties │ ├── installer_traveler_domino1201.properties │ ├── installer_traveler_domino1202.properties │ ├── installer_traveler_domino140.properties │ ├── installer_traveler_hcl.properties │ ├── installer_traveler_domino12.properties │ ├── linux_repositories │ │ ├── debian_bookworm.sources_hetzner │ │ ├── ubuntu_noble.sources_hetzner │ │ └── README.md │ ├── domino14_install.properties │ ├── domino14_ontime_install.properties │ ├── domino14_full_install.properties │ ├── create_keyring.sh │ ├── custom │ │ └── README.md │ └── nuid2pw.c ├── README.md ├── install_dir_traveler │ ├── installer_domino1201.properties │ ├── installer_hcl.properties │ └── installer_domino12.properties ├── dockerfile_alpine_build_environment ├── install_dir_squid │ ├── entrypoint.sh │ └── install.sh ├── install_dir_nginx │ ├── entrypoint.sh │ ├── install.sh │ └── nginx.conf ├── dockerfile_nginx ├── dockerfile_squid ├── dockerfile_leap ├── dockerfile_volt ├── dockerfile_safelinx ├── dockerfile_traveler ├── dockerfile_hcl ├── dockerfile_init ├── dockerfile ├── install_dir_safelinx │ ├── install_linux.sh │ ├── install.sh │ └── healthcheck.sh ├── install_dir_leap │ └── install.sh ├── install_dir_volt │ └── install.sh └── install_dir_common │ └── healthcheck.sh ├── .gitignore ├── software ├── readme.txt ├── current_version.txt ├── update_software_file ├── README.md └── software-repo.sh ├── CONTRIBUTING.md ├── examples ├── domino │ ├── docker-compose.yml │ └── README.md └── safelinx │ ├── docker-compose_mysql.yml │ ├── docker-compose.yml │ ├── .env │ └── nginx.conf ├── start_script └── we_have_moved.txt ├── compile.sh ├── CODE_OF_CONDUCT.md └── README.md /lab/kubernetes/k3s/k3s_install.sh: -------------------------------------------------------------------------------- 1 | curl -sfL https://get.k3s.io | sh - 2 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/edit_traefik.sh: -------------------------------------------------------------------------------- 1 | 2 | kubectl edit svc traefik -n kube-system 3 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/dashboard/remove.sh: -------------------------------------------------------------------------------- 1 | 2 | kubectl delete ns kubernetes-dashboard 3 | -------------------------------------------------------------------------------- /testing/.env: -------------------------------------------------------------------------------- 1 | 2 | # Specify environment variables passed to the test container 3 | 4 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/favicon.ico -------------------------------------------------------------------------------- /docs/_includes/nav_footer_custom.html: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/dashboard/deploy.sh: -------------------------------------------------------------------------------- 1 | kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml 2 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/api/create_service_account.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | kubectl create serviceaccount domino-admin 4 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/dashboard/get_token.sh: -------------------------------------------------------------------------------- 1 | 2 | kubectl -n kubernetes-dashboard create token admin-user --duration=1h 3 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/domsetup/domsetup-webroot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /docs/architecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Architecture" 4 | nav_order: 4 5 | description: "Architecture" 6 | has_children: true 7 | --- 8 | -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-app-center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-app-center.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-docker-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-docker-images.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-createcontainer-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-createcontainer-1.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-createcontainer-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-createcontainer-2.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-createcontainer-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-createcontainer-3.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-createcontainer-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-createcontainer-4.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-createcontainer-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-createcontainer-5.png -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-filestation-folders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-filestation-folders.png -------------------------------------------------------------------------------- /lab/kubernetes/k3s/dashboard/dashboard.admin-user.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: admin-user 5 | namespace: kubernetes-dashboard 6 | -------------------------------------------------------------------------------- /docs/assets/images/png/qnap-createcontainer-volumes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/docs/assets/images/png/qnap-createcontainer-volumes.png -------------------------------------------------------------------------------- /docs/howto.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Howto" 4 | nav_order: 6 5 | description: "Howto Guides" 6 | has_children: true 7 | --- 8 | 9 | # Howto Guides 10 | 11 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/makefile: -------------------------------------------------------------------------------- 1 | 2 | NAME=nuid2pw 3 | 4 | $(NAME): $(NAME).o 5 | gcc -o $(NAME) $(NAME).o 6 | 7 | $(NAME).o: $(NAME).c 8 | gcc -c -m64 $(NAME).c 9 | 10 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/startscript/systemdbs.ind: -------------------------------------------------------------------------------- 1 | names.nsf 2 | events4.nsf 3 | admin4.nsf 4 | ddm.nsf 5 | certstore.nsf 6 | cscancfg.nsf 7 | cscanlog.nsf 8 | cscanquarantine.nsf 9 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/domsetup/domsetup-webroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HCL-TECH-SOFTWARE/domino-container/HEAD/dockerfiles/install_dir_domino/domsetup/domsetup-webroot/favicon.ico -------------------------------------------------------------------------------- /docs/reference.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Reference" 4 | nav_order: 4 5 | description: "Reference" 6 | has_children: true 7 | --- 8 | 9 | 10 | # Reference Information Domino Containers 11 | 12 | -------------------------------------------------------------------------------- /docs/run.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Run Image" 4 | nav_order: 3 5 | description: "Run Image on different platforms" 6 | has_children: true 7 | --- 8 | 9 | # Run Images on different Platforms 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/domino_install.properties: -------------------------------------------------------------------------------- 1 | USER_INSTALL_DIR=/opt/hcl/domino 2 | IA_IS_PARTITION=0 3 | USER_INSTALL_DATA_DIR=/local/notesdata 4 | IA_USERNAME=notes 5 | IA_GROUPNAME=notes 6 | USER_MAGIC_FOLDER_1=/local/notesdata 7 | CHOSEN_INSTALL_SET=Enterprise 8 | 9 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/pvc_storage.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | 4 | metadata: 5 | name: local-path-pvc 6 | namespace: default 7 | 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 4Gi 14 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/service_nrpc.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: domino-nrpc 5 | 6 | spec: 7 | selector: 8 | app: hcl-domino 9 | ports: 10 | - name: nrpc 11 | protocol: TCP 12 | port: 1352 13 | externalIPs: 14 | - 1.2.3.4 15 | -------------------------------------------------------------------------------- /testing/build.sh: -------------------------------------------------------------------------------- 1 | docker run -it --rm -w /build --entrypoint= -v $(pwd):/build -u 0 -e LOTUS=/opt/hcl/domino -e Notes_ExecDirectory=/opt/hcl/domino/notes/latest/linux -e LD_LIBRARY_PATH=/opt/hcl/domino/notes/latest/linux -e INCLUDE=/opt/hcl/domino/notesapi/include hclcom/domino:build make 2 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/service_http.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | 4 | metadata: 5 | name: domino-http 6 | namespace: default 7 | 8 | spec: 9 | selector: 10 | app: hcl-domino 11 | ports: 12 | - protocol: TCP 13 | port: 80 14 | targetPort: 80 15 | 16 | -------------------------------------------------------------------------------- /dockerfiles/README.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | This directory contains Docker build scripts and tools required to successfully build a Docker image with Domino 12 or later. 4 | 5 | Please use the main build.sh script and description for details. 6 | This directory contains the internal build script and install routines used by the main build script. 7 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_traveler/installer_domino1201.properties: -------------------------------------------------------------------------------- 1 | ACCEPT_LICENSE=true 2 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 3 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 4 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 5 | NTS_WEBSITE_HOME=0 6 | INSTALLED_DOMINO_VERSION=12.0.1 7 | BYPASS_DOMINO_VERSION_CHECK=true 8 | 9 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_traveler/installer_hcl.properties: -------------------------------------------------------------------------------- 1 | 2 | ACCEPT_LICENSE=true 3 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 4 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 5 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 6 | NTS_WEBSITE_HOME=0 7 | OVERRIDE_BACKREV=false 8 | BYPASS_DOMINO_VERSION_CHECK=true 9 | 10 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/api/role.yml: -------------------------------------------------------------------------------- 1 | kind: Role 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | 4 | metadata: 5 | name: domino-admin-role 6 | namespace: default 7 | 8 | rules: 9 | 10 | - apiGroups: [""] 11 | resources: ["pods", "persistentvolumeclaims" ] 12 | verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] 13 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/installer_traveler_domino1201.properties: -------------------------------------------------------------------------------- 1 | ACCEPT_LICENSE=true 2 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 3 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 4 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 5 | NTS_WEBSITE_HOME=0 6 | INSTALLED_DOMINO_VERSION=12.0.1 7 | BYPASS_DOMINO_VERSION_CHECK=true 8 | 9 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/installer_traveler_domino1202.properties: -------------------------------------------------------------------------------- 1 | ACCEPT_LICENSE=true 2 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 3 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 4 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 5 | NTS_WEBSITE_HOME=0 6 | INSTALLED_DOMINO_VERSION=12.0.2 7 | BYPASS_DOMINO_VERSION_CHECK=true 8 | 9 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/installer_traveler_domino140.properties: -------------------------------------------------------------------------------- 1 | ACCEPT_LICENSE=true 2 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 3 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 4 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 5 | NTS_WEBSITE_HOME=0 6 | INSTALLED_DOMINO_VERSION=14.0 7 | BYPASS_DOMINO_VERSION_CHECK=true 8 | 9 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/installer_traveler_hcl.properties: -------------------------------------------------------------------------------- 1 | 2 | ACCEPT_LICENSE=true 3 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 4 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 5 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 6 | NTS_WEBSITE_HOME=0 7 | OVERRIDE_BACKREV=false 8 | BYPASS_DOMINO_VERSION_CHECK=true 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | software/*.tar 2 | software/*.tgz 3 | software/*.gz 4 | software/*.zip 5 | !*.md 6 | /dockerfiles/volt/install_dir/demopack.zip 7 | /dockerfiles/install_dir_domino/custom/*.sources 8 | /dockerfiles/install_dir_domino/custom/*.pem 9 | /dockerfiles/install_dir_domino/custom/*.svg 10 | /dockerfiles/install_dir_domino/custom/*.policy 11 | .DominoContainer 12 | -------------------------------------------------------------------------------- /testing/custom_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Example custom test command 4 | 5 | ERROR_MSG= 6 | 7 | header "Custom test command" 8 | echo "Container CMD : $CONTAINER_CMD" 9 | echo "Domino Volume : $DOMINO_VOLUME" 10 | 11 | #ERROR_MSG="Just setting an error text will make the test fail" 12 | 13 | test_result "custom.check" "Custom Check" "" "$ERROR_MSG" 14 | 15 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_traveler/installer_domino12.properties: -------------------------------------------------------------------------------- 1 | ACCEPT_LICENSE=true 2 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 3 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 4 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 5 | NTS_WEBSITE_HOME=0 6 | OVERRIDE_BACKREV=false 7 | INSTALLED_DOMINO_VERSION=12.0.0 8 | BYPASS_DOMINO_VERSION_CHECK=true 9 | 10 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/service_https.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | 4 | metadata: 5 | name: domino-https 6 | namespace: default 7 | 8 | spec: 9 | 10 | type: ClusterIP 11 | selector: 12 | app: hcl-domino 13 | 14 | ports: 15 | - name: https 16 | protocol: TCP 17 | port: 443 18 | targetPort: 443 19 | 20 | externalIPs: 21 | - 1.2.3.4 22 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/dashboard/dashboard.admin-user-role.yml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | name: admin-user 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: ClusterRole 8 | name: cluster-admin 9 | subjects: 10 | - kind: ServiceAccount 11 | name: admin-user 12 | namespace: kubernetes-dashboard 13 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/installer_traveler_domino12.properties: -------------------------------------------------------------------------------- 1 | ACCEPT_LICENSE=true 2 | DOMINO_PROGRAM_DIRECTORY=/opt/hcl/domino/notes/latest/linux 3 | DOMINO_DATA_DIRECTORY_1=/local/notesdata 4 | DOMINO_NOTESINI_DIRECTORY_1=/local/notesdata 5 | NTS_WEBSITE_HOME=0 6 | OVERRIDE_BACKREV=false 7 | INSTALLED_DOMINO_VERSION=12.0.0 8 | BYPASS_DOMINO_VERSION_CHECK=true 9 | 10 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/api/role_binding.yml: -------------------------------------------------------------------------------- 1 | kind: RoleBinding 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | 4 | metadata: 5 | name: domino-admin-role-binding 6 | namespace: default 7 | 8 | subjects: 9 | - kind: ServiceAccount 10 | name: domino-admin 11 | namespace: default 12 | 13 | roleRef: 14 | kind: Role 15 | name: domino-admin-role 16 | apiGroup: rbac.authorization.k8s.io 17 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/api/pvc.json: -------------------------------------------------------------------------------- 1 | { 2 | "apiVersion": "v1", 3 | "kind": "PersistentVolumeClaim", 4 | "metadata": { 5 | "name": "local-path-pvc-api-created", 6 | "namespace": "default" 7 | }, 8 | "spec": { 9 | "accessModes": [ 10 | "ReadWriteOnce" 11 | ], 12 | "resources": { 13 | "requests": { 14 | "storage": "4Gi" 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /software/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | This directory is supposed to contain the original downloaded files from [My HCLSoftware Portal](https://my.hcltechsw.com/). 3 | Make sure to keep the file name unchanged otherwise build scripts will not work. 4 | The build script shows missing download packages and points you to the right download location. 5 | And it also contains configuration to use a different folder or a remote HTTP(S) download location. 6 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/dashboard/install.sh: -------------------------------------------------------------------------------- 1 | 2 | GITHUB_URL=https://github.com/kubernetes/dashboard/releases 3 | VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||') 4 | 5 | echo 6 | echo "Installing Dashboard $VERSION_KUBE_DASHBOARD" 7 | echo 8 | 9 | kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml 10 | 11 | 12 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_alpine_build_environment: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2025 - APACHE 2.0 see LICENSE 3 | ############################################################################ 4 | 5 | FROM alpine:latest 6 | 7 | USER root 8 | 9 | RUN apk add --no-cache g++ make musl-dev rapidjson-dev curl-dev openssl-dev openssl-libs-static 10 | 11 | WORKDIR /src 12 | 13 | USER 1000 14 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/linux_repositories/debian_bookworm.sources_hetzner: -------------------------------------------------------------------------------- 1 | # Hetzner Debian 12 (Bookworm) repositories 2 | 3 | Types: deb 4 | URIs: https://mirror.hetzner.com/debian/packages 5 | Suites: bookworm bookworm-updates 6 | Components: main 7 | Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg 8 | 9 | Types: deb 10 | URIs: https://mirror.hetzner.com/debian/packages 11 | Suites: bookworm-security 12 | Components: main 13 | Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg 14 | 15 | -------------------------------------------------------------------------------- /docs/build_capi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$1" ]; then 4 | COMMAND=make 5 | else 6 | COMMAND="$@" 7 | fi 8 | 9 | if [ -z "$CONTAINER_IMAGE_DOMINO_CAPI" ]; then 10 | CONTAINER_IMAGE_DOMINO_CAPI=hclcom/domino:latest 11 | fi 12 | 13 | docker run -it --rm -w /build --entrypoint= -v $(pwd):/build -u 0 -e LOTUS=/opt/hcl/domino -e Notes_ExecDirectory=/opt/hcl/domino/notes/latest/linux -e LD_LIBRARY_PATH=/opt/hcl/domino/notes/latest/linux -e INCLUDE=/opt/hcl/domino/notesapi/include "$CONTAINER_IMAGE_DOMINO_CAPI" $COMMAND 14 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/startscript/install_borg: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Domino Borg Backup script installation 3 | 4 | SCRIPT_NAME=$0 5 | PARAM1=$1 6 | SCRIPT_DIR=$(dirname $SCRIPT_NAME) 7 | 8 | LOTUS=/opt/hcl/domino 9 | BORG_SCRIPT_DIR=$SCRIPT_DIR/extra/backup/borg 10 | BORG_DOMINO_DIR=$LOTUS/backup/borg 11 | 12 | mkdir -p $BORG_DOMINO_DIR 13 | cp $BORG_SCRIPT_DIR/*.sh $BORG_DOMINO_DIR 14 | chmod 755 $BORG_DOMINO_DIR/*.sh 15 | 16 | cp $BORG_SCRIPT_DIR/*.dxl $BORG_DOMINO_DIR 17 | chmod 644 $BORG_DOMINO_DIR/*.dxl 18 | 19 | exit 0 20 | -------------------------------------------------------------------------------- /software/current_version.txt: -------------------------------------------------------------------------------- 1 | domino|14.5|FP1 2 | domino-14.5.1|14.5.1EA1 3 | domino-14.0|14.0|FP5 4 | domino-12.0.2|12.0.2|FP7|IF1 5 | domiq|14.5 6 | domiq-14.5.1|14.5.1EA1 7 | traveler-14.5.1|14.5.1EA1 8 | traveler|14.5 9 | volt|1.0.5.15 10 | leap|1.1.9 11 | verse|3.2.6 12 | capi|14.5 13 | safelinx|1.4.3 14 | nomadweb|1.0.18 15 | nomad|1.0.18 16 | domrestapi|1.1.6 17 | tika|3.2.3 18 | borg|1.4.1 19 | domborg|0.9.7 20 | node_exporter|1.9.1 21 | domprom|0.9.2 22 | iqsuite|28.1 23 | mysql-jdbc|9.4.0 24 | postgresql-jdbc|42.7.8 25 | nshmailx|1.1.0 26 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/ingress_http.yml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | 4 | metadata: 5 | name: domino-http 6 | namespace: default 7 | 8 | annotations: 9 | nginx.ingress.kubernetes.io/rewrite-target: /$1 10 | 11 | spec: 12 | rules: 13 | - host: master.domino-lab.net 14 | http: 15 | paths: 16 | - path: / 17 | pathType: Prefix 18 | backend: 19 | service: 20 | name: domino-http 21 | port: 22 | number: 80 23 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/linux_repositories/ubuntu_noble.sources_hetzner: -------------------------------------------------------------------------------- 1 | # Hetzner Ubuntu 24.04 LTS (Noble) repositories 2 | 3 | Types: deb 4 | URIs: http://mirror.hetzner.com/ubuntu/packages 5 | Suites: noble noble-updates noble-backports 6 | Components: main universe restricted multiverse 7 | Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg 8 | 9 | Types: deb 10 | URIs: http://mirror.hetzner.com/ubuntu/security 11 | Suites: noble-security 12 | Components: main universe restricted multiverse 13 | Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg 14 | 15 | -------------------------------------------------------------------------------- /docs/_includes/yewtube.html: -------------------------------------------------------------------------------- 1 |
6 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/domino14_install.properties: -------------------------------------------------------------------------------- 1 | USER_INSTALL_DIR=/opt/hcl/domino 2 | IA_IS_PARTITION=0 3 | USER_INSTALL_DATA_DIR=/local/notesdata 4 | IA_USERNAME=notes 5 | IA_GROUPNAME=notes 6 | IA_NUMBER_PARTITION=1 7 | USER_MAGIC_FOLDER_1=/local/notesdata 8 | 9 | USER_INPUT_CONSOLE_RESULTS=\"Manual\",\"\",\"\" 10 | USER_INPUT_RESULT_1=\"NO\" 11 | 12 | CHOSEN_FEATURE_LIST=Domino,Help 13 | CHOSEN_INSTALL_FEATURE_LIST=Domino,Help 14 | CHOSEN_INSTALL_SET= 15 | 16 | -fileOverwrite_/opt/hcl/domino/notes/14000000/linux/_HCL Domino_installation/Change HCL Domino Installation.lax=Yes 17 | 18 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/domino14_ontime_install.properties: -------------------------------------------------------------------------------- 1 | USER_INSTALL_DIR=/opt/hcl/domino 2 | IA_IS_PARTITION=0 3 | USER_INSTALL_DATA_DIR=/local/notesdata 4 | IA_USERNAME=notes 5 | IA_GROUPNAME=notes 6 | IA_NUMBER_PARTITION=1 7 | USER_MAGIC_FOLDER_1=/local/notesdata 8 | 9 | USER_INPUT_CONSOLE_RESULTS=\"Manual\",\"\",\"\" 10 | USER_INPUT_RESULT_1=\"NO\" 11 | 12 | CHOSEN_FEATURE_LIST=Domino,OnTime,Help 13 | CHOSEN_INSTALL_FEATURE_LIST=Domino,OnTime,Help 14 | CHOSEN_INSTALL_SET= 15 | 16 | -fileOverwrite_/opt/hcl/domino/notes/14000000/linux/_HCL Domino_installation/Change HCL Domino Installation.lax=Yes 17 | 18 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/create_registry_secret.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | log_error_exit() 4 | { 5 | echo $@ 6 | exit 1 7 | } 8 | 9 | if [ -z "$LAB_REGISTRY_HOST" ]; then 10 | log_error_exit "No registry host specified" 11 | fi 12 | 13 | if [ -z "$LAB_REGISTRY_USER" ]; then 14 | log_error_exit "No registry user specified" 15 | fi 16 | 17 | if [ -z "$LAB_REGISTRY_PASSWORD" ]; then 18 | log_error_exit "No registry password specified" 19 | fi 20 | 21 | kubectl create secret docker-registry --namespace default regcred --docker-server=$LAB_REGISTRY_HOST --docker-username=$LAB_REGISTRY_USER --docker-password=$LAB_REGISTRY_PASSWORD 22 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/domino14_full_install.properties: -------------------------------------------------------------------------------- 1 | USER_INSTALL_DIR=/opt/hcl/domino 2 | IA_IS_PARTITION=0 3 | USER_INSTALL_DATA_DIR=/local/notesdata 4 | IA_USERNAME=notes 5 | IA_GROUPNAME=notes 6 | IA_NUMBER_PARTITION=1 7 | USER_MAGIC_FOLDER_1=/local/notesdata 8 | 9 | USER_INPUT_CONSOLE_RESULTS=\"Manual\",\"\",\"\" 10 | USER_INPUT_RESULT_1=\"NO\" 11 | 12 | CHOSEN_FEATURE_LIST=Domino,Nomad,Verse,OnTime,Help 13 | CHOSEN_INSTALL_FEATURE_LIST=Domino,Nomad,Verse,OnTime,Help 14 | CHOSEN_INSTALL_SET= 15 | 16 | -fileOverwrite_/opt/hcl/domino/notes/14000000/linux/_HCL Domino_installation/Change HCL Domino Installation.lax=Yes 17 | 18 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_squid/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################################################ 4 | # Copyright Nash!Com, Daniel Nashed 2023 - APACHE 2.0 see LICENSE 5 | ############################################################################ 6 | 7 | # This script is the main entry point for the SQUID container. 8 | # The entry point is invoked by the container run-time to start SQUID. 9 | 10 | # Set more paranoid umask to ensure files can be only read by user 11 | umask 0077 12 | 13 | 14 | echo 15 | echo 16 | echo Squid Server 17 | echo ------------------------------------------ 18 | squid --version 19 | echo ------------------------------------------ 20 | echo 21 | echo 22 | 23 | squid -N 24 | 25 | exit 0 26 | 27 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/startscript/domino.cfg: -------------------------------------------------------------------------------- 1 | { 2 | "index": { 3 | "cfg": [ 4 | { 5 | "name": ".", 6 | "index": "/onetouch", 7 | "URL": "" 8 | } 9 | ] 10 | }, 11 | 12 | "onetouch": { 13 | "cfg": [ 14 | { 15 | "name": "First server JSON", 16 | "oneTouchJSON": "/opt/nashcom/startscript/OneTouchSetup/first_server.json", 17 | "oneTouchENV": "/opt/nashcom/startscript/OneTouchSetup/first_server.env" 18 | }, 19 | { 20 | "name": "Additional server JSON", 21 | "oneTouchJSON": "/opt/nashcom/startscript/OneTouchSetup/additional_server.json", 22 | "oneTouchENV": "/opt/nashcom/startscript/OneTouchSetup/additional_server.env" 23 | } 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /docs/concept_license.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Software Licenses" 4 | nav_order: 9 5 | parent: "Concept & Overview" 6 | description: "Software Licenses" 7 | has_children: false 8 | --- 9 | 10 | ## GitHub Project License 11 | 12 | The Dockerfiles and associated scripts are licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html). 13 | 14 | ## HCL Software License 15 | 16 | HCL Domino and add-on products are commercial software - The software licenses agreement does not permit further distribution of the docker image that was built using this script! 17 | Refer to the [HCL license home page](https://www.hcl-software.com/resources/license-agreements) for detailed information about the HCL Domino and add-on product license terms. 18 | 19 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 2 | Source code contributions are currently not accepted to this repository. 3 | 4 | ## Generate requirements 5 | 6 | - Never store credentials in the source code, always pass in as environment variables. 7 | 8 | 9 | ## Shell script code 10 | 11 | - Use two spaces for indentation 12 | - Try to use similar style used in existing scripts 13 | 14 | ### Reporting a bug 15 | 16 | Please raise any bug reports on the project's [issue tracker](https://github.com/HCL-TECH-SOFTWARE/domino-container/issues). 17 | Be sure to search the list to see if your issue has already been raised. 18 | 19 | A good bug report is one that make it easy for us to understand what you were trying to do and what went wrong. 20 | Also, provide as much context as possible so we can try to recreate the issue. 21 | 22 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/startscript/OneTouchSetup/first_server.env: -------------------------------------------------------------------------------- 1 | 2 | # Domino first server setup 3 | SERVERSETUP_SERVER_TYPE=first 4 | SERVERSETUP_ADMIN_FIRSTNAME=John 5 | SERVERSETUP_ADMIN_LASTNAME=Doe 6 | SERVERSETUP_ADMIN_PASSWORD=my-secure-admin-password 7 | SERVERSETUP_ADMIN_IDFILEPATH=/local/notesdata/admin.id 8 | SERVERSETUP_SERVER_TITLE="Domino AdminServer" 9 | SERVERSETUP_SERVER_NAME=my-domino-server 10 | SERVERSETUP_NETWORK_HOSTNAME=my-domino-server.acme.com 11 | SERVERSETUP_ORG_CERTIFIERPASSWORD=my-secure-certifier-password 12 | SERVERSETUP_SERVER_DOMAINNAME=Acme 13 | SERVERSETUP_ORG_ORGNAME=Acme 14 | 15 | # Configuration 16 | SERVERSETUP_NOTESINI_SERVERTASKS=replica,router,update,amgr,adminp,http,certmgr 17 | SERVERSETUP_SECURITY_ACL_PROHIBITANONYMOUSACCESS=true 18 | SERVERSETUP_SECURITY_ACL_ADDLOCALDOMAINADMINS=true 19 | 20 | -------------------------------------------------------------------------------- /lab/kubernetes/k3s/k3s_fix_pvc_perm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # The permissions the local provisioner sets are more restictive in the current versions. 4 | # The root of the volumes are always owned by root and only root as the owner has permissions. 5 | # Usually a provisioner allows to use fgroup to specify the group owning the mounted volume. 6 | # But this isn't inplemented in the simple local storage driver k3s uses. 7 | 8 | # An alternate way would be an init container to change the permissions. 9 | 10 | 11 | # Patch provioner's config map 12 | kubectl get -n kube-system cm/local-path-config -o yaml | sed 's/mkdir -m 0700/mkdir -m 0777/g' | kubectl apply -f - 13 | 14 | # Restart provisioner and get status 15 | kubectl rollout restart deploy/local-path-provisioner -n kube-system 16 | kubectl rollout status deploy/local-path-provisioner -n kube-system 17 | 18 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/startscript/OneTouchSetup/additional_server.env: -------------------------------------------------------------------------------- 1 | 2 | # Domino additional server setup 3 | SERVERSETUP_SERVER_TYPE=additional 4 | SERVERSETUP_ADMIN_CN="John Doe" 5 | SERVERSETUP_SERVER_IDFILEPATH=server.id 6 | SERVERSETUP_SERVER_TITLE="Domino 2nd server" 7 | SERVERSETUP_SERVER_NAME=my-2nd-domino-server 8 | SERVERSETUP_NETWORK_HOSTNAME=my-2nd-domino-servername.acme.com 9 | SERVERSETUP_SERVER_DOMAINNAME=Acme 10 | SERVERSETUP_ORG_ORGNAME=Acme 11 | SERVERSETUP_SECURITY_ACL_PROHIBITANONYMOUSACCESS=true 12 | SERVERSETUP_SECURITY_ACL_ADDLOCALDOMAINADMINS=true 13 | 14 | # Existing server to connect to during setup 15 | SERVERSETUP_EXISTINGSERVER_CN=my-domino-server 16 | SERVERSETUP_EXISTINGSERVER_HOSTNAMEORIP=my-domino-server.acme.com 17 | 18 | # Configuration 19 | SERVERSETUP_NOTESINI_SERVERTASKS=replica,router,update,amgr,adminp,http,certmgr 20 | 21 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_nginx/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################################################ 4 | # Copyright Nash!Com, Daniel Nashed 2022 - APACHE 2.0 see LICENSE 5 | ############################################################################ 6 | 7 | # This script is the main entry point for the NGINX container. 8 | # The entry point is invoked by the container run-time to start NGINX. 9 | 10 | # Set more paranoid umask to ensure files can be only read by user 11 | umask 0077 12 | 13 | # Create log directory with owner nginx 14 | mkdir /tmp/nginx 15 | chown nginx:nginx /tmp/nginx 16 | 17 | echo 18 | echo 19 | echo NGINX Server 20 | echo ------------------------------------------ 21 | nginx -V 22 | echo ------------------------------------------ 23 | echo 24 | echo 25 | 26 | nginx -g 'daemon off;' 27 | 28 | exit 0 29 | 30 | -------------------------------------------------------------------------------- /docs/plantuml/projectstructure.plantuml: -------------------------------------------------------------------------------- 1 | @startwbs ProjectTree 2 | * **Domino Docker Container Project** 3 | ** <&globe> **Root** directory\nMain entry scripts 4 | *** **build.sh**\nmain build script 5 | *** **build.cfg**\ntemplate for build configration 6 | ** **dockerfiles**\nindiivdual docker files per product 7 | ***< **install_dir_common**\nCode used by all flavours 8 | *** **install_dir_domino**\nDomino **Base** image 9 | *** **install_dir_traveler**\nTraveler **AddOn** image 10 | *** **install_dir_volt**\nDomino Volt **AddOn** image 11 | ** **software**\nInventory of\navailable software 12 | ** **docs**\nProject documentation\nin GitHub markdown 13 | ** **lab**\nTutorials for practise 14 | ***< **setup**\nLab install scripts 15 | *** **docker**\nDocker workshop 16 | *** **kubernetes**\nKubernes lab 17 | ** **examples**\nSample configrations\nto get you going 18 | @endwbs 19 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_nginx: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2022 - APACHE 2.0 see LICENSE 3 | ############################################################################ 4 | 5 | ARG NGINX_BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal 6 | FROM $NGINX_BASE_IMAGE 7 | 8 | # External arguments with a default value 9 | ARG LinuxYumUpdate= 10 | ARG LocalInstallDir=/tmp/install 11 | 12 | USER root 13 | 14 | # Copy Install Files to container 15 | COPY install_dir_common $LocalInstallDir 16 | COPY install_dir_nginx $LocalInstallDir 17 | 18 | # Prepare environment 19 | # Update, Install required packages and run separate install script 20 | 21 | RUN $LocalInstallDir/install.sh && \ 22 | rm -rf $LocalInstallDir 23 | 24 | # Expose Ports HTTP HTTPS 25 | EXPOSE 80 443 26 | 27 | ENTRYPOINT ["/entrypoint.sh"] 28 | 29 | USER 1000 30 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_squid: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2023 - APACHE 2.0 see LICENSE 3 | ############################################################################ 4 | 5 | ARG SQUID_BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal 6 | FROM $SQUID_BASE_IMAGE 7 | 8 | # External arguments with a default value 9 | ARG LinuxYumUpdate= 10 | ARG LocalInstallDir=/tmp/install 11 | 12 | USER root 13 | 14 | # Copy Install Files to container 15 | COPY install_dir_common $LocalInstallDir 16 | COPY install_dir_squid $LocalInstallDir 17 | 18 | # Prepare environment 19 | # Update, Install required packages and run separate install script 20 | 21 | RUN $LocalInstallDir/install.sh && \ 22 | rm -rf $LocalInstallDir 23 | 24 | # Expose Ports HTTP HTTPS 25 | EXPOSE 3128 26 | 27 | ENTRYPOINT ["/entrypoint.sh"] 28 | 29 | USER 1000 30 | -------------------------------------------------------------------------------- /software/update_software_file: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################################################ 4 | # Copyright Nash!Com, Daniel Nashed 2019, 2020 - APACHE 2.0 see LICENSE 5 | # Copyright IBM Corporation 2015, 2019 - APACHE 2.0 see LICENSE 6 | ############################################################################ 7 | 8 | SCRIPT_NAME=$0 9 | PARAM1=$1 10 | 11 | update_file() 12 | { 13 | SOURCE_FILE=$1 14 | TARGET_FILE=$2 15 | 16 | if [ ! -r "$SOURCE_FILE" ]; then 17 | echo "source file does not exist or is not readable" 18 | return 0 19 | fi 20 | 21 | if [ -e "$TARGET_FILE" ]; then 22 | cmp -s "$SOURCE_FILE" "$TARGET_FILE" 23 | if [ $? -eq 0 ]; then 24 | return 0 25 | fi 26 | fi 27 | 28 | echo "Updating [$TARGET_FILE]" 29 | cp -f "$SOURCE_FILE" "$TARGET_FILE" 30 | 31 | return 0 32 | } 33 | 34 | update_file software.txt ../dockerfiles/install_dir_common/software.txt 35 | 36 | 37 | -------------------------------------------------------------------------------- /docs/assets/images/svg/DominoIcon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /testing/makefile: -------------------------------------------------------------------------------- 1 | TARGET = nshver 2 | SOURCE= $(TARGET).cpp 3 | OBJECT = $(TARGET).o 4 | 5 | CC = g++ 6 | CCOPTS = -c -m64 7 | NOTESDIR = $(Notes_ExecDirectory) 8 | LINKOPTS = -o $(TARGET) 9 | 10 | INCDIR = $(LOTUS)/notesapi/include 11 | LIBS = -lnotes -lm -lpthread -lc -ldl -lresolv 12 | 13 | DEFINES = -DGCC3 -DGCC4 -fno-strict-aliasing -DGCC_LBLB_NOT_SUPPORTED -Wformat -Wall -Wcast-align -Wconversion -DUNIX -DLINUX -DLINUX86 -DND64 -DLINUX64 -DW -DLINUX86_64 -DDTRACE -DPTHREAD_KERNEL -D_REENTRANT -DUSE_THREADSAFE_INTERFACES -D_POSIX_THREAD_SAFE_FUNCTIONS -DHANDLE_IS_32BITS -DHAS_IOCP -DHAS_BOOL -DHAS_DLOPEN -DUSE_PTHREAD_INTERFACES -DLARGE64_FILES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNDUNIX64 -DLONGIS64BIT -DPRODUCTION_VERSION -DOVERRIDEDEBUG -fPIC -Wno-write-strings 14 | 15 | 16 | $(TARGET): $(OBJECT) 17 | $(CC) $(LINKOPTS) $(OBJECT) -L$(NOTESDIR) -Wl,-rpath-link $(NOTESDIR) $(LIBS) 18 | 19 | $(OBJECT): $(SOURCE) 20 | $(CC) $(CCOPTS) $(DEFINES) -I$(INCDIR) $(SOURCE) 21 | 22 | clean: 23 | rm -f *.o 24 | rm -f ./$(TARGET) 25 | 26 | test: $(TARGET) 27 | ./$(TARGET) =/local/notesdata/notes.ini 28 | 29 | -------------------------------------------------------------------------------- /examples/domino/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | services: 3 | 4 | domino: 5 | 6 | image: hclcom/domino:latest 7 | container_name: domino-acme-01 8 | hostname: domino-acme-v12.acme.com 9 | stop_grace_period: 60s 10 | 11 | environment: 12 | SetupAutoConfigure: 1 13 | SERVERSETUP_SERVER_TYPE: first 14 | SERVERSETUP_ADMIN_FIRSTNAME: John 15 | SERVERSETUP_ADMIN_LASTNAME: Doe 16 | SERVERSETUP_ADMIN_PASSWORD: domino4ever 17 | SERVERSETUP_ADMIN_IDFILEPATH: admin.id 18 | SERVERSETUP_ORG_CERTIFIERPASSWORD: domino4ever 19 | SERVERSETUP_SERVER_DOMAINNAME: DominoDemo 20 | SERVERSETUP_ORG_ORGNAME: Domino-Demo 21 | SERVERSETUP_SERVER_NAME: domino-demo-v12 22 | SERVERSETUP_NETWORK_HOSTNAME: domino-acme-v12.acme.com 23 | LANG: en_US.UTF-8 24 | 25 | cap_add: 26 | - SYS_PTRACE 27 | 28 | ports: 29 | - 1352:1352 30 | - 80:80 31 | - 443:443 32 | 33 | volumes: 34 | - domino_vol:/local/notesdata 35 | 36 | volumes: 37 | 38 | domino_vol: 39 | name: domino_acme_01_notesdata 40 | external: false 41 | 42 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_squid/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################################################ 4 | # Copyright Nash!Com, Daniel Nashed 2022 - APACHE 2.0 see LICENSE 5 | ############################################################################ 6 | 7 | INSTALL_DIR=$(dirname $0) 8 | 9 | # Include helper functions 10 | 11 | . $INSTALL_DIR/script_lib.sh 12 | 13 | # --- Main Install Logic --- 14 | 15 | cd $INSTALL_DIR 16 | 17 | check_linux_update 18 | 19 | header "Installing required packages and adding user squid" 20 | 21 | if [ -e /etc/photon-release ]; then 22 | install_packages shadow 23 | else 24 | install_package shadow-utils 25 | fi 26 | 27 | useradd squid -U 28 | 29 | header "Installing Squid ..." 30 | 31 | install_package squid 32 | 33 | #cp squid.conf /etc/squid/squid.conf 34 | chmod 444 /etc/squid/squid.conf 35 | 36 | cp entrypoint.sh /entrypoint.sh 37 | chmod 555 /entrypoint.sh 38 | 39 | chown squid:squid /var/log/squid 40 | chown squid:squid /run 41 | 42 | cd / 43 | 44 | # Cleanup repository cache to save space 45 | clean_linux_repo_cache 46 | 47 | header "Successfully completed installation!" 48 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_nginx/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################################################ 4 | # Copyright Nash!Com, Daniel Nashed 2022 - APACHE 2.0 see LICENSE 5 | ############################################################################ 6 | 7 | INSTALL_DIR=$(dirname $0) 8 | 9 | # Include helper functions 10 | 11 | . $INSTALL_DIR/script_lib.sh 12 | 13 | # --- Main Install Logic --- 14 | 15 | cd $INSTALL_DIR 16 | 17 | check_linux_update 18 | 19 | header "Installing required packages and adding user nginx" 20 | 21 | if [ -e /etc/photon-release ]; then 22 | install_packages shadow 23 | else 24 | install_package shadow-utils 25 | fi 26 | 27 | useradd nginx -U 28 | 29 | header "Installing NGINX ..." 30 | 31 | install_package nginx 32 | 33 | cp nginx.conf /etc/nginx/nginx.conf 34 | chmod 444 /etc/nginx/nginx.conf 35 | setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx 36 | 37 | cp entrypoint.sh /entrypoint.sh 38 | chmod 555 /entrypoint.sh 39 | 40 | chown nginx:nginx /var/log/nginx 41 | 42 | cd / 43 | 44 | # Cleanup repository cache to save space 45 | clean_linux_repo_cache 46 | 47 | header "Successfully completed installation!" 48 | -------------------------------------------------------------------------------- /start_script/we_have_moved.txt: -------------------------------------------------------------------------------- 1 | 2 | We've moved 3 | ----------- 4 | 5 | The Nash!Com Domino Start script has moved sources to a separate GitHub project. 6 | Those sources have been in the project for convenience and have never been actively used. 7 | 8 | The container project uses a tar file containing the start script as part of the deployment. 9 | With the current build script the start script is now pluggable and can be downloaded separately like any other install software. 10 | It is part of the software.txt directory and can be switched once new versions are released. 11 | 12 | You find the new git repository, the new documentation and the download here: 13 | 14 | 15 | GitHub Repository 16 | ----------------- 17 | 18 | https://github.com/nashcom/domino-startscript 19 | 20 | 21 | To clone the repository you can use the following git command in a directory outside this repo (e.g. cd ..) 22 | 23 | git clone https://github.com/nashcom/domino-startscript.git 24 | 25 | 26 | Documentation 27 | ------------- 28 | 29 | https://nashcom.github.io/domino-startscript/ 30 | 31 | 32 | Release Download 33 | ---------------- 34 | 35 | https://github.com/nashcom/domino-startscript/releases 36 | 37 | 38 | -------------------------------------------------------------------------------- /examples/domino/README.md: -------------------------------------------------------------------------------- 1 | # Docker-Compose Examples 2 | 3 | Docker Compose is a separate component (not shipped wth Docker CE). Docker Compose is a conventient way to define one or multiple containers. Start and stop, creation of required components like volumes or networks etc. are automatically performed by Docker Compose. 4 | 5 | It is also a good practice to use Docker Compose to be prepared for Kubernetes (K8s) which is also leveraging yml files to describe "pod" created in "services". 6 | 7 | See details and installation instructions here https://docs.docker.com/compose/. 8 | 9 | This dicrectroy contains examples for docker compose files for images built with this project. 10 | 11 | 12 | ## How to use the examples 13 | 14 | The default docker-compose.yml file can be just started via the "up" command. 15 | To run the server in background, add the -d option. 16 | 17 | ```bash 18 | docker-compose up -d 19 | ``` 20 | 21 | Other examples can be started specifying the yml file explicitly. 22 | 23 | ```bash 24 | docker-compose -f myimage.yml up -d 25 | ``` 26 | 27 | To stop a service you specify the corresponding "down" command. 28 | 29 | ```bash 30 | docker-compose -f myimage.yml down 31 | ``` 32 | 33 | 34 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | 2 | worker_processes auto; 3 | error_log /tmp/nginx/error.log; 4 | pid /tmp/nginx/nginx.pid; 5 | 6 | events { 7 | worker_connections 1024; 8 | } 9 | 10 | http { 11 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 12 | '$status $body_bytes_sent "$http_referer" ' 13 | '"$http_user_agent" "$http_x_forwarded_for"'; 14 | 15 | access_log /tmp/nginx/access.log main; 16 | client_body_temp_path /tmp/nginx/client_body; 17 | proxy_temp_path /tmp/nginx; 18 | fastcgi_temp_path /tmp/nginx/fastcgi; 19 | uwsgi_temp_path /tmp/nginx/uwsgi; 20 | scgi_temp_path /tmp/nginx/scgi_tmp; 21 | 22 | sendfile on; 23 | tcp_nopush on; 24 | tcp_nodelay on; 25 | keepalive_timeout 65; 26 | types_hash_max_size 4096; 27 | 28 | include /etc/nginx/mime.types; 29 | default_type application/octet-stream; 30 | 31 | server { 32 | listen 80; 33 | listen [::]:80; 34 | server_name _; 35 | root /usr/share/nginx/html; 36 | } 37 | 38 | include /etc/nginx/conf.d/*.conf; 39 | } 40 | 41 | -------------------------------------------------------------------------------- /docs/reference_startscript.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Domino Start Script" 4 | nav_order: 3 5 | parent: "Reference" 6 | description: "Domino Start Script" 7 | has_children: false 8 | --- 9 | 10 | # Domino Start Script for Docker Containers 11 | 12 | ## Introduction 13 | 14 | This project leverages the Nash!Com Domino starts script inside the container to run and maintain the container. 15 | 16 | The start script is separate [GitHub project](https://github.com/nashcom/domino-startscript) 17 | with it's own [documentation](https://nashcom.github.io/domino-startscript/). 18 | 19 | ## How the start script is used 20 | 21 | The `entrypoint.sh` script is started when the container is launched. 22 | This script takes care of managing the lifetime of the container and invokes the start script to run the Domino server. 23 | 24 | Once the Domino server is started with the start script, you can leverage the `domino` command inside the container to interact with the Domino server. 25 | 26 | One very important and popular command is the `domino console` command, providing a live console to a Domino server. 27 | 28 | For a complete reference check [Domino Start Script Commands](https://nashcom.github.io/domino-startscript/startscript/commands/) -------------------------------------------------------------------------------- /dockerfiles/dockerfile_leap: -------------------------------------------------------------------------------- 1 | 2 | ############################################################################ 3 | # Copyright Nash!Com, Daniel Nashed 2019, 2022 - APACHE 2.0 see LICENSE 4 | ############################################################################ 5 | 6 | ARG BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest 7 | FROM $BASE_IMAGE 8 | 9 | # External arguments with a default value 10 | ARG LinuxYumUpdate= 11 | ARG DownloadFrom= 12 | ARG SOFTWARE_REPO_IP= 13 | ARG PROD_NAME= 14 | ARG PROD_VER= 15 | ARG PROD_DOWNLOAD_FILE= 16 | ARG LocalInstallDir=/tmp/install 17 | ARG SPECIAL_CURL_ARGS= 18 | 19 | USER root 20 | 21 | # Copy Install Files to container 22 | COPY install_dir_common $LocalInstallDir 23 | COPY install_dir_leap $LocalInstallDir 24 | 25 | # Prepare environment for Domino 26 | # Update, Install required packages and run separate install script 27 | 28 | RUN $LocalInstallDir/install.sh && \ 29 | rm -rf $LocalInstallDir 30 | 31 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 32 | 33 | # Expose Ports NRPC SMTP HTTP POP3 IMAP LDAP HTTPS LDAPS IMAPS POP3S DIIOP DIIOPS 34 | EXPOSE 1352 25 80 110 143 389 443 636 993 995 2050 63148 63149 35 | 36 | ENTRYPOINT ["/entrypoint.sh"] 37 | 38 | USER 1000 39 | 40 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_volt: -------------------------------------------------------------------------------- 1 | 2 | ############################################################################ 3 | # Copyright Nash!Com, Daniel Nashed 2019, 2022 - APACHE 2.0 see LICENSE 4 | ############################################################################ 5 | 6 | ARG BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest 7 | FROM $BASE_IMAGE 8 | 9 | # External arguments with a default value 10 | ARG LinuxYumUpdate= 11 | ARG DownloadFrom= 12 | ARG SOFTWARE_REPO_IP= 13 | ARG PROD_NAME= 14 | ARG PROD_VER= 15 | ARG PROD_DOWNLOAD_FILE= 16 | ARG LocalInstallDir=/tmp/install 17 | ARG SPECIAL_CURL_ARGS= 18 | 19 | USER root 20 | 21 | # Copy Install Files to container 22 | COPY install_dir_common $LocalInstallDir 23 | COPY install_dir_volt $LocalInstallDir 24 | 25 | # Prepare environment for Domino 26 | # Update, Install required packages and run separate install script 27 | 28 | RUN $LocalInstallDir/install.sh && \ 29 | rm -rf $LocalInstallDir 30 | 31 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 32 | 33 | # Expose Ports NRPC SMTP HTTP POP3 IMAP LDAP HTTPS LDAPS IMAPS POP3S DIIOP DIIOPS 34 | EXPOSE 1352 25 80 110 143 389 443 636 993 995 2050 63148 63149 35 | 36 | ENTRYPOINT ["/entrypoint.sh"] 37 | 38 | USER 1000 39 | 40 | -------------------------------------------------------------------------------- /docs/dominoleap.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Domino Leap" 4 | nav_order: 5 5 | parent: "Concept & Overview" 6 | description: "Domino Leap" 7 | has_children: false 8 | --- 9 | 10 | # Domino Leap 11 | 12 | [HCL Domino Leap](https://www.hcl-software.com/domino/offerings/domino-leap) is a no-code capability that makes it easy to develop powerful, secure, and enterprise-grade workflow-based applications. While it runs on Domino, you don’t need any specialized Domino or IT skills. 13 | 14 | 15 | Domino Leap used to be a separate image build on top the Domino image. 16 | Beginning with Domino 14, it is now available as an build options for the standard Domino image and can be combined with other add-ons like Traveler or the REST API. 17 | 18 | The separate add-on image build remains to be available for now. 19 | 20 | To build an image including Domino Leap, just specify the `-leap` build option. 21 | 22 | ``` 23 | ./build domino -leap 24 | ``` 25 | 26 | The build script automatically determines the latest version. 27 | An earlier version can be specified explicitly via e.g. `--leap=1.1.2` 28 | 29 | 30 | For details Domino Leap administration refer to the [Domino Leap documentation](https://help.hcltechsw.com/domino-leap/welcome/index.html). 31 | 32 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_safelinx: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2022 - APACHE 2.0 see LICENSE 3 | ############################################################################ 4 | 5 | ARG BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest 6 | FROM $BASE_IMAGE 7 | 8 | # External arguments with a default value 9 | ARG LinuxYumUpdate= 10 | ARG DownloadFrom= 11 | ARG SOFTWARE_REPO_IP= 12 | ARG PROD_NAME= 13 | ARG PROD_VER= 14 | ARG PROD_DOWNLOAD_FILE= 15 | ARG NOMADWEB_VERSION= 16 | ARG MYSQL_INSTALL= 17 | ARG MSSQL_INSTALL= 18 | ARG LocalInstallDir=/tmp/install 19 | ARG SPECIAL_CURL_ARGS= 20 | 21 | USER root 22 | 23 | # Copy Install Files to container 24 | COPY install_dir_common $LocalInstallDir 25 | COPY install_dir_safelinx $LocalInstallDir 26 | 27 | # Prepare environment for Domino 28 | # Update, Install required packages and run separate install script 29 | 30 | RUN $LocalInstallDir/install_linux.sh && \ 31 | $LocalInstallDir/install.sh && \ 32 | rm -rf $LocalInstallDir 33 | 34 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 35 | 36 | # Expose Ports HTTP HTTPS SafeLinx Admin/AdminSSL/Monitoring? 37 | EXPOSE 80 443 9555 9559 9557 8889 38 | 39 | ENTRYPOINT ["/entrypoint.sh"] 40 | 41 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/linux_repositories/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Use a custom mirror for Ubuntu and Debian packages 3 | 4 | In case you or your provider has an Ubuntu APT mirror, this file allows to pass the repository to the build container. 5 | The build container replaces the repository, before installing the packages. 6 | Those repositories are only supported for certain platforms and code streams, because they need to be tested. 7 | 8 | The functionality should work for corporate mirrors and also for provider mirrors. 9 | Below you find the Ubnuntu and Debian mirrors from Hetzner which only work when building on Hetzner infrastructure. 10 | They are a good example how a mirror file should look like. 11 | 12 | 13 | ## Hetzner Ubuntu 24.04 (Noble) 14 | 15 | When running container builds on Hetzner servers, copy the following file to `ubuntu_noble.sources` in the custom directory one level up. 16 | The file contains Ubuntu Noble APT repositories as a HTTP resource. 17 | 18 | ``` 19 | ubuntu_noble.sources_hetzner 20 | ``` 21 | 22 | 23 | ## Debian 12 (Bookworm) 24 | 25 | When running container builds on Hetzner servers, copy the following file to `debian_bookworm.sources`. 26 | The file contains Debian 12 Bookworm APT repositories as a HTTP resource. 27 | 28 | ``` 29 | debian_bookworm.sources_hetzner 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_traveler: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2019, 2022 - APACHE 2.0 see LICENSE 3 | # Copyright IBM Corporation 2015, 2019 - APACHE 2.0 see LICENSE 4 | ############################################################################ 5 | 6 | ARG BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest 7 | FROM $BASE_IMAGE 8 | 9 | # External arguments with a default value 10 | ARG LinuxYumUpdate= 11 | ARG DownloadFrom= 12 | ARG SOFTWARE_REPO_IP= 13 | ARG PROD_NAME= 14 | ARG PROD_VER= 15 | ARG PROD_DOWNLOAD_FILE= 16 | ARG LocalInstallDir=/tmp/install 17 | ARG SPECIAL_CURL_ARGS= 18 | 19 | USER root 20 | 21 | # Copy Install Files to container 22 | COPY install_dir_common $LocalInstallDir 23 | COPY install_dir_traveler $LocalInstallDir 24 | 25 | # Prepare environment for Domino 26 | # Update, Install required packages and run separate install script 27 | 28 | RUN $LocalInstallDir/install.sh && \ 29 | rm -rf $LocalInstallDir 30 | 31 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 32 | 33 | # Expose Ports NRPC SMTP HTTP POP3 IMAP LDAP HTTPS LDAPS IMAPS POP3S Traveler-HA DIIOP DIIOPS 34 | EXPOSE 1352 25 80 110 143 389 443 636 993 995 2050 50125 50126 63148 63149 35 | 36 | ENTRYPOINT ["/entrypoint.sh"] 37 | 38 | USER 1000 39 | 40 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/api/kapi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CURL_OPTIONS=-ks 4 | 5 | if [ -z "$NAMESPACE" ]; then 6 | NAMESPACE=default 7 | fi 8 | 9 | if [ -z "$SERVICE_ACCOUNT" ]; then 10 | SERVICE_ACCOUNT=domino-admin 11 | fi 12 | 13 | if [ -z "$APISERVER" ]; then 14 | APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}') 15 | fi 16 | 17 | if [ -z "$TOKEN" ]; then 18 | TOKEN=$(cat $SERVICE_ACCOUNT.jwt) 19 | fi 20 | 21 | echo "API Server: $APISERVER" 22 | 23 | echo 24 | echo "------------------------------------------------------------------------------------------" 25 | curl $CURL_OPTIONS $APISERVER/api --header "Authorization: Bearer $TOKEN" 26 | echo 27 | echo "------------------------------------------------------------------------------------------" 28 | echo 29 | 30 | curl $CURL_OPTIONS --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/namespaces/$NAMESPACE/pods/domino12 > api_domino12.log 31 | 32 | curl $CURL_OPTIONS --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/namespaces/$NAMESPACE/persistentvolumeclaims > api_pvc.log 33 | 34 | curl "$CURL_OPTIONS" -H "Authorization: Bearer ${TOKEN}" -H 'Accept: application/json' -H 'Content-Type: application/json' -X POST ${APISERVER}/api/v1/namespaces/$NAMESPACE/persistentvolumeclaims -d @pvc.json > api_pvc_create.log 35 | 36 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/create_keyring.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############################################################################ 4 | # Copyright Nash!Com, Daniel Nashed 2019, 2020 - APACHE 2.0 see LICENSE 5 | # Copyright IBM Corporation 2015, 2019 - APACHE 2.0 see LICENSE 6 | ############################################################################ 7 | 8 | # Create keyring file and import certificates 9 | # $1 = PEM File 10 | # $2 = keyring file (default: keyfile.kyr) 11 | # $3 = keyring password (default: random) 12 | 13 | if [ -z "$1" ]; then 14 | echo 15 | echo "No PEM file specified!" 16 | echo 17 | exit 1 18 | fi 19 | 20 | LOTUS=/opt/hcl/domino 21 | PEM_FILE=$(readlink -f "$1") 22 | KEYRING_FILE="$2" 23 | KEYRING_PASSWORD="$3" 24 | 25 | cd /local/notesdata 26 | 27 | if [ -z "$KEYRING_FILE" ]; then 28 | KEYRING_FILE=keyfile.kyr 29 | fi 30 | 31 | if [ -e "$KEYRING_FILE" ]; then 32 | echo "Removing existing keyring [$KEYRING_FILE]" 33 | rm -f "$KEYRING_FILE" 34 | fi 35 | 36 | if [ -z "$KEYRING_PASSWORD" ]; then 37 | echo "Generating random keyring-file password" 38 | KEYRING_PASSWORD=$(sha1sum /local/notesdata/notes.ini) 39 | fi 40 | 41 | $LOTUS/bin/kyrtool create -k "$KEYRING_FILE" -p "$KEYRING_PASSWORD" 42 | $LOTUS/bin/kyrtool import all -k "$KEYRING_FILE" -i "$PEM_FILE" 43 | 44 | echo 45 | echo "Successfully created/updated [$KEYRING_FILE] with [$PEM_FILE]" 46 | echo 47 | 48 | -------------------------------------------------------------------------------- /docs/plantuml/containerstartscript.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | state "**Admin**" as Admin 3 | Admin : bash 4 | 5 | state "**domino_container**" as DominoContainerScript 6 | 7 | DominoContainerScript: dir: /opt/nashcom/start_script 8 | 9 | state "**domino_container (cfg)**" as DominoContainerCfg 10 | DominoContainerCfg: /etc/sysconfig/ 11 | 12 | state "**Docker Daemon**" as DockerDaemon 13 | DockerDaemon : ( or Podman etc. ) 14 | 15 | state "**Docker Container**" as Container { 16 | 17 | state "**entrypoint.sh**" as Entrypoint 18 | 19 | state "**docker_prestart.sh**" as DockerPrestartSh 20 | state "**domino_install_data_copy.sh**" as DominoInstallDataCopySh 21 | 22 | state "**Bash**" as ContainerBash 23 | 24 | state "**rc_domino_script**" as RcDominoScript 25 | RcDominoScript : dir: /opt/nashcom/startscript 26 | 27 | state "**rc_domino_config**" as RcDominoConfig 28 | RcDominoConfig : dir: /etc/sysconfig 29 | 30 | state "**Domino Server**" as DominoServer 31 | DominoServer : /local/notesdata\nnotes.ini\nNSF... 32 | 33 | } 34 | 35 | Admin --> DominoContainerScript : Invoke 36 | DominoContainerScript --> DockerDaemon : Start/Stop/Cmd 37 | DominoContainerCfg -> DominoContainerScript : Read 38 | DockerDaemon --> Entrypoint : Start/Stop 39 | DockerDaemon --> ContainerBash : Exec 40 | 41 | Entrypoint --> RcDominoScript : Start/Stop 42 | Entrypoint --> DockerPrestartSh : Setup 43 | Entrypoint --> DominoInstallDataCopySh : Setup/Update(Run) 44 | RcDominoConfig -> RcDominoScript : Read 45 | RcDominoScript --> DominoServer : Start/Console 46 | ContainerBash --> RcDominoScript : Invoke 47 | @enduml -------------------------------------------------------------------------------- /software/README.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | This directory is used to host the installation packages that will be used inside of a Docker image. 4 | 5 | All packages required for building the corresponding image should be located in this folder without using any sub folders. You must download the software before building the image(s). File names are important so please keep the default file names. 6 | 7 | ## Software Repository Server 8 | The software repository server is used by the build scripts to download IBM software packages rather than adding them to the image. It is not required to start or stop this repository server manually, all actions are taken care of in the build scripts. However, we are providing the script ```software-repo.sh``` for manual handling in case its required. 9 | 10 | ### Hosting this software repository 11 | 12 | To build the Docker images an NGINX server will be serving this folder so that it can be used as a source for automated software downloads. It is possible to host this repository elsewhere in your corporate environment as long as it is accessible via HTTP and the folder structure and file names remain the same. 13 | 14 | ### Using the Software Repository Server 15 | 16 | Use the script ```software-repo.sh``` to start or stop an NGINX container which will host this directory for HTTP access. The script also allows to obtain the IP address of the container using the command ```software-repo.sh ip``` 17 | 18 | When the software repository server is no longer needed you can shut down and remove the container using the command ```software-repo.sh stopremove``` 19 | 20 | ## What to download 21 | 22 | This directory is supposed to contain the original downloaded files from [My HCLSoftware Portal](https://my.hcltechsw.com/). 23 | Make sure to keep the file name unchanged otherwise build scripts will not work. 24 | The build script shows missing download packages and points you to the right download location. 25 | 26 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_hcl: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2019, 2025 - APACHE 2.0 see LICENSE 3 | # Copyright IBM Corporation 2015, 2019 - APACHE 2.0 see LICENSE 4 | ############################################################################ 5 | 6 | # Build a base image for Linux with all required packages 7 | FROM registry.access.redhat.com/ubi10/ubi:10.0 AS linux_image 8 | 9 | # External arguments with a default value 10 | ARG LinuxYumUpdate= 11 | ARG DownloadFrom= 12 | ARG SOFTWARE_REPO_IP= 13 | ARG PROD_NAME= 14 | ARG PROD_VER= 15 | ARG PROD_FP= 16 | ARG PROD_HF= 17 | ARG PROD_DOWNLOAD_FILE= 18 | ARG PROD_FP_DOWNLOAD_FILE= 19 | ARG PROD_HF_DOWNLOAD_FILE= 20 | ARG DominoResponseFile=domino14_full_install.properties 21 | ARG LocalInstallDir=/tmp/install 22 | ARG DominoUserID= 23 | ARG DOMINO_LANG= 24 | ARG DOCKER_TZ= 25 | ARG SPECIAL_CURL_ARGS= 26 | ARG BUILD_SCRIPT_OPTIONS= 27 | ARG VERSE_VERSION= 28 | ARG CAPI_VERSION= 29 | ARG STARTSCRIPT_VER= 30 | ARG K8S_RUNAS_USER_SUPPORT= 31 | ARG CONTAINER_INSTALLER=hcl 32 | 33 | USER root 34 | 35 | # Copy install files to container 36 | COPY install_dir_common $LocalInstallDir 37 | COPY install_dir_domino $LocalInstallDir 38 | 39 | # Run install script and cleanup. Linux packages installed in separate layer first. 40 | RUN $LocalInstallDir/install_linux.sh 41 | 42 | # Create final Domino image from prepared Linux image 43 | FROM linux_image AS domino_image 44 | 45 | # Install Domino in a layer separate from Linux packages and updates 46 | RUN $LocalInstallDir/install_domino.sh && \ 47 | rm -rf $LocalInstallDir 48 | 49 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 50 | 51 | # Expose Ports NRPC SMTP HTTP POP3 IMAP LDAP HTTPS LDAPS IMAPS POP3S DOMINO-REMOTE-SETUP DIIOP DIIOPS 52 | EXPOSE 1352 25 80 110 143 389 443 636 993 995 2050 8585 63148 63149 53 | 54 | ENTRYPOINT ["/entrypoint.sh"] 55 | 56 | USER 1000 57 | 58 | -------------------------------------------------------------------------------- /dockerfiles/install_dir_domino/custom/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Custom resources for Linux 3 | 4 | 5 | This directory contains 6 | 7 | ## Custom repository mirror configuration 8 | 9 | 10 | To customize the mirror list for current Ubuntu and Debian, you can specify a custom repository file. 11 | 12 | 13 | ### Ubuntu 24.04 (Noble) 14 | 15 | ``` 16 | ubuntu_noble.sources 17 | ``` 18 | 19 | ### Debian 12 (Bookworm) 20 | 21 | ``` 22 | debian_bookworm.sources 23 | ``` 24 | 25 | 26 | ## Custom Linux tusted root certificate 27 | 28 | Linux comes with a pre-defined list of trusted root certificates. 29 | To allow to use corporate trusted root, add a PEM formatted certificate file with the following name. 30 | The container image built adds the root certificate to the container images trusted roots. 31 | The root is used for example for OpenSSL and curl. 32 | 33 | ``` 34 | trusted_root.pem 35 | ``` 36 | 37 | 38 | # Custom Domino tusted root certificate 39 | 40 | Domino uses multiple trust stores: 41 | 42 | - **/local/notesdata/cacert.pem** used for HTTP Requests in Lotus Script and other backend code using curl 43 | - **Domino JVM trust store** used by Java 44 | - Domino Directory Trusted roots 45 | - certstore.nsf Trusted roots 46 | 47 | 48 | names.nsf and certstore.nsf can be managed in Domino and is replicated within the domain. 49 | The PEM file and JVM trusted roots can be updated by providing a PEM file with the following name: 50 | 51 | ``` 52 | trusted_domino_root.pem 53 | ``` 54 | 55 | 56 | # Append entries to java.policy 57 | 58 | 59 | If the file java.policy is present, append the entries to the existing java.policy in the existing Java policy file 60 | 61 | ``` 62 | java.policy 63 | ``` 64 | 65 | 66 | 67 | # Custom Domino Setup Logo 68 | 69 | To replace the Domino Setup logo place a SVG file into the custom directory. 70 | The standard Domino logo is placed into the domsetup web root. 71 | 72 | ``` 73 | domsetup-logo.svg 74 | ``` 75 | 76 | 77 | -------------------------------------------------------------------------------- /docs/plantuml/repository-setup.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | state "Community submission" as ComSubmit 3 | state "HCL submission" as HclSubmit 4 | state "Nash!Com Start Script" as StartScript 5 | 6 | state "**Community repository**" as ComRepo { 7 | state "**Develop**" as ComDevRepo 8 | state "**Main**" as ComMainRepo 9 | 10 | ComDevRepo: Active develop branch 11 | ComMainRepo: Stable main branch 12 | } 13 | 14 | state "**Customer environment**" as CustomerEnv { 15 | state "**Local Repo**" as LocalRepo 16 | state "HCL WebKit" as HclWebKit 17 | HclWebKit: MHS download 18 | state "**Community image**" as ComImage 19 | state "**Main**" as ComMainRepo 20 | } 21 | 22 | state "**HCL environment**" as HCLEnv { 23 | 24 | state "**HCL repository**" as HclRepo { 25 | state "**community-main**" as HclDevRepo 26 | state "**Main**" as HclMainRepo 27 | HclMainRepo: + hcl-local / jenkins files 28 | } 29 | 30 | state "**HCL pull request**" as HclPull { 31 | HclPull: e.g hcl-local change 32 | } 33 | 34 | state "**HCL official HCL image**" as HclImage 35 | state "HCL WebKit daily" as HclDailyWebKit 36 | state "**HCL daily image**" as HCLDailyImage 37 | state "HCL WebKit(Gold)" as HclWebKitGold 38 | } 39 | 40 | StartScript --> ComDevRepo : Nash!Com contribution 41 | 42 | ComSubmit --> ComDevRepo : Approved by community team 43 | ComDevRepo --> ComMainRepo : Merged by community team 44 | 45 | ComMainRepo --> HclDevRepo : Synced by HCL 46 | HclDevRepo --> HclMainRepo : Merged by CFIUS approver 47 | HclSubmit --> ComDevRepo : HCL contribution 48 | HclMainRepo --> HclImage : Build by build room 49 | HclWebKit --> ComImage : Used to build image 50 | 51 | HclMainRepo -> HCLDailyImage : Build by build room 52 | HclDailyWebKit --> HCLDailyImage : Used to build image 53 | HclWebKitGold -> HclImage : Used to build image 54 | 55 | ComMainRepo --> LocalRepo : Cloned/forked by customer 56 | LocalRepo --> ComImage 57 | HclPull ---> HclMainRepo 58 | @enduml 59 | 60 | -------------------------------------------------------------------------------- /examples/safelinx/docker-compose_mysql.yml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | services: 3 | 4 | safelinx: 5 | 6 | image: ${CONTAINER_IMAGE} 7 | container_name: ${CONTAINER_NAME} 8 | hostname: ${CONTAINER_HOSTNAME} 9 | stop_grace_period: 60s 10 | 11 | environment: 12 | DOMINO_ORG: ${DOMINO_ORG} 13 | LDAP_HOST: ${LDAP_HOST} 14 | LDAP_PORT: ${LDAP_PORT} 15 | LDAP_SSL: ${LDAP_SSL} 16 | LDAP_USER: ${LDAP_USER} 17 | LDAP_PASSWORD: ${LDAP_PASSWORD} 18 | LDAP_UNTRUSTED: ${LDAP_UNTRUSTED} 19 | MYSQL_HOST: mysql-sl 20 | MYSQL_DATABASE: wgdata 21 | MYSQL_USER: wgdb 22 | MYSQL_PASSWORD: ${MYSQL_PASSWORD} 23 | CERTMGR_HOST: ${CERTMGR_HOST} 24 | CERTMGR_CHECK_INTERVAL: ${CERTMGR_CHECK_INTERVAL} 25 | 26 | cap_add: 27 | - SYS_PTRACE 28 | 29 | networks: 30 | safelinx_net: 31 | ipv4_address: 172.30.0.2 32 | 33 | ports: 34 | - ${CONTAINER_HTTPS_PORT}:443 35 | 36 | volumes: 37 | - safelinx_vol:/opt/hcl/SafeLinx/datastore 38 | - ./cert-mount:/cert-mount 39 | 40 | 41 | mysql: 42 | 43 | image: mysql 44 | container_name: mysql-sl 45 | hostname: mysql-sl.local 46 | stop_grace_period: 60s 47 | 48 | environment: 49 | MYSQL_DATABASE: wgdata 50 | MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} 51 | MYSQL_USER: wgdb 52 | MYSQL_PASSWORD: ${MYSQL_PASSWORD} 53 | 54 | networks: 55 | safelinx_net: 56 | ipv4_address: 172.30.0.3 57 | 58 | volumes: 59 | - mysql_vol:/var/lib/mysql 60 | 61 | volumes: 62 | 63 | safelinx_vol: 64 | name: ${CONTAINER_VOLUME} 65 | external: false 66 | 67 | mysql_vol: 68 | name: mysql_safelinx 69 | external: false 70 | 71 | networks: 72 | 73 | safelinx_net: 74 | driver: bridge 75 | ipam: 76 | driver: default 77 | config: 78 | - subnet: 172.30.0.0/24 79 | 80 | -------------------------------------------------------------------------------- /compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ############################################################################ 3 | # Copyright Nash!Com, Daniel Nashed 2025 - APACHE 2.0 see LICENSE 4 | # Copyright IBM Corporation 2015, 2020 - APACHE 2.0 see LICENSE 5 | ############################################################################ 6 | 7 | SCRIPT_NAME=$(readlink -f $0) 8 | SCRIPT_DIR=$(dirname $SCRIPT_NAME) 9 | 10 | log_error_exit() 11 | { 12 | echo 13 | echo "ERROR: $@" 14 | echo 15 | exit 1 16 | } 17 | 18 | 19 | usage () 20 | { 21 | 22 | echo 23 | echo 24 | echo "Alpine based compile for C/C++ applications" 25 | echo "-------------------------------------------" 26 | echo 27 | echo "Builds statically linked binaries in Alpine Linux which run glibc version independent." 28 | echo "Supports: OpenSSL, LibCurl and RapidJSON." 29 | echo 30 | echo "Usage: $(basename $SCRIPT_NAME) source-dir [Options]" 31 | echo 32 | echo Options: 33 | echo 34 | echo "clean clean binaries and objects" 35 | echo "-clean run clean before building" 36 | echo 37 | 38 | return 0 39 | } 40 | 41 | 42 | for a in "$@"; do 43 | 44 | p=$(echo "$a" | awk '{print tolower($0)}') 45 | 46 | case "$p" in 47 | clean) 48 | BUILD_ACTION_CLEAN=1 49 | ;; 50 | 51 | -clean) 52 | BUILD_ACTION_CLEAN=2 53 | ;; 54 | 55 | -h|/h|-?|/?|-help|--help|help|usage) 56 | usage 57 | exit 0 58 | ;; 59 | 60 | -*) 61 | log_error_exit "Invalid parameter [$a]" 62 | ;; 63 | 64 | *) 65 | SRC_DIR=$a 66 | 67 | esac 68 | done 69 | 70 | 71 | if [ -z "$SRC_DIR" ]; then 72 | log_error_exit "No source directory specified" 73 | fi 74 | 75 | if [ -n "$BUILD_ACTION_CLEAN" ]; then 76 | 77 | CURRENT_DIR=$(pwd) 78 | cd "$SRC_DIR" 79 | make clean 80 | cd "$CURRENT_DIR" 81 | 82 | if [ "$BUILD_ACTION_CLEAN" = "1" ]; then 83 | exit 0 84 | fi 85 | 86 | fi 87 | 88 | 89 | docker run --rm -v $SRC_DIR:/src -w /src -u 0 nashcom/alpine_build_environment:latest sh -c 'SPECIAL_LINK_OPTIONS=-static make' 90 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile_init: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2019, 2024 - APACHE 2.0 see LICENSE 3 | ############################################################################ 4 | 5 | FROM registry.access.redhat.com/ubi9-init:latest 6 | 7 | # External arguments with a default value 8 | ARG LinuxYumUpdate= 9 | ARG DownloadFrom= 10 | ARG SOFTWARE_REPO_IP= 11 | ARG PROD_NAME= 12 | ARG PROD_VER= 13 | ARG PROD_FP= 14 | ARG PROD_HF= 15 | ARG DOMLP_VER= 16 | ARG DOMRESTAPI_VER= 17 | ARG PROD_DOWNLOAD_FILE= 18 | ARG PROD_FP_DOWNLOAD_FILE= 19 | ARG PROD_HF_DOWNLOAD_FILE= 20 | ARG DominoResponseFile= 21 | ARG LocalInstallDir=/tmp/install 22 | ARG DominoUserID= 23 | ARG DOMINO_LANG= 24 | ARG LINUX_LANG= 25 | ARG DOCKER_TZ= 26 | ARG OPENSSL_INSTALL= 27 | ARG BORG_VERSION= 28 | ARG DOMBORG_VERSION= 29 | ARG TIKA_VERSION= 30 | ARG IQSUITE_VERSION= 31 | ARG SPECIAL_CURL_ARGS= 32 | ARG BUILD_SCRIPT_OPTIONS= 33 | ARG VERSE_VERSION= 34 | ARG NOMAD_VERSION= 35 | ARG TRAVELER_VERSION= 36 | ARG LEAP_VERSION= 37 | ARG CAPI_VERSION= 38 | ARG DOMIQ_VERSION= 39 | ARG NSHMAILX_VERSION= 40 | ARG MYSQL_INSTALL= 41 | ARG MSSQL_INSTALL= 42 | ARG LINUX_PKG_ADD= 43 | ARG LINUX_PKG_REMOVE= 44 | ARG LINUX_PKG_SKIP= 45 | ARG STARTSCRIPT_VER= 46 | ARG CUSTOM_ADD_ONS= 47 | ARG K8S_RUNAS_USER_SUPPORT= 48 | ARG EXPOSED_PORTS="1352 25 80 110 143 389 443 636 993 995 2050 63148 63149" 49 | 50 | USER root 51 | 52 | # Copy install files to container 53 | COPY install_dir_common $LocalInstallDir 54 | COPY install_dir_domino $LocalInstallDir 55 | 56 | # Enforce using Systemd 57 | ENV CONTAINER_USE_SYSTEMD=yes 58 | 59 | # Run install script and cleanup. Linux packages installed in separate layer first. 60 | RUN $LocalInstallDir/install_linux.sh 61 | 62 | # Install Domino in a layer separate from Linux packages and updates 63 | RUN $LocalInstallDir/install_domino.sh && \ 64 | rm -rf $LocalInstallDir 65 | 66 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 67 | 68 | # Expose Ports NRPC SMTP HTTP POP3 IMAP LDAP HTTPS LDAPS IMAPS POP3S DIIOP DIIOPS 69 | EXPOSE $EXPOSED_PORTS 70 | 71 | -------------------------------------------------------------------------------- /docs/howto_docker-linux.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Docker on Linux" 4 | nav_order: 3 5 | description: "Docker on Linux" 6 | parent: "Howto" 7 | has_children: false 8 | --- 9 | 10 | # Install Docker on Linux 11 | 12 | Docker installations depend on the platform your are running. 13 | 14 | Some platforms like Redhat have moved to [Podman](https://podman.io/) as their primary container build and run-time environment. 15 | The Domino Container project works with both platforms and auto detects, which container run-time is installed. 16 | 17 | ## Ensure only one container environment is installed. 18 | 19 | Even the container project could handle both container environments to be installed, it is highly recommended to have only one run-time installed. 20 | If Podman is installed, it is used by default. There is a switch to use Docker instead. 21 | Either `export USE_DOCKER=yes` or configure it via `./build.sh cfg`. 22 | 23 | ## Official Docker installation 24 | 25 | To install Docker use the official Docker documentation to ensure to get a recent version. 26 | Docker provides repositories for most distributions. 27 | Follow the steps for [Install Docker Engine](https://docs.docker.com/engine/install/). 28 | 29 | An alternate way to install is to use the Docker convenience script provided by Docker. 30 | It can be automatically downloaded and executed. 31 | 32 | ``` 33 | curl -fsSL https://get.docker.com | bash - 34 | ``` 35 | 36 | ## Nash!Com Convenience script to install the complete environment 37 | 38 | The Domino Start Script project provides a 39 | [Container build environment convenicence script](https://nashcom.github.io/domino-startscript/install_container_env/) 40 | to install the whole environment including GitHub repositories and leverages the Docker install convenience script as part of the installation. 41 | 42 | 43 | ## Check the Docker Client and Server Version 44 | 45 | Once installed, check the server and client version running. 46 | 47 | ``` 48 | docker version 49 | ``` 50 | 51 | ## Next Steps 52 | 53 | This completes the setup for your Docker environment. 54 | 55 | Continue with [Quickstart](quickstart.md) to build and run your first container. 56 | -------------------------------------------------------------------------------- /docs/howto_download-software.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Download Software" 4 | nav_order: 2 5 | description: "Howto Download Software from My HCLSoftware Portal" 6 | parent: "Howto" 7 | has_children: false 8 | --- 9 | 10 | 11 | # Automatic download from My HCLSoftware Portal (MHS) 12 | 13 | The container image build supports automatic downloads leveraging the [Domino Download Script](https://nashcom.github.io/domino-startscript/domdownload/) which is part of the OpenSource Nash!Com Start Script project. 14 | 15 | Once installed the build.sh script automatically detects the `domdownload` script to download missing software before starting the build process. 16 | This new option leverages the download API provided by MHS. 17 | 18 | 19 | # Manual download from My HCLSoftware Portal 20 | 21 | 1. Log into the [My HCLSoftware Portal](https://my.hcltechsw.com/) with your account 22 | 2. Copy the download URL with a right click action in your browser 23 | 3. If not direct download is possible, transfer the manually downloaded file to the software folder 24 | 4. In case the build machine has direct access to the internet, [Curl](https://curl.se/) can be used to directly from this pre-authenticated temporary download link. 25 | 26 | 27 | ## Additional notes 28 | 29 | - Specify the exact file name via `-o` option 30 | - Add single quotes around the download URL, because it contains bash specific special chars 31 | - The download URL will be valid for 60 minutes 32 | - Running the `build.sh domino` once the software is downloaded, will start the build process launching a NGINX software container to provide a build process web-kit download 33 | - You can use the `-checkonly` option to only check the software 34 | - The build process verifies the SHA256 download hash. There is no need to verify it manually 35 | - But there is also a `-verifyonly` option available to verify the software download 36 | 37 | 38 | # Direct download from remote server 39 | 40 | In case you have all the install packages located on a central server, you can point build process directly to the download location. 41 | The option `DOWNLOAD_FROM=https://mylocalsoftware.com` can be configured in build configuration. 42 | -------------------------------------------------------------------------------- /docs/reference_environment-vars.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Runtime Variables" 4 | nav_order: 2 5 | parent: "Reference" 6 | description: "Container environment variables" 7 | has_children: false 8 | --- 9 | 10 | # Introduction 11 | 12 | Starting with Domino 12 the Community image uses Domino One-Touch variables instead of the legacy PDS file configuration. 13 | The variables used have been aligned with Domino One-Touch setup. 14 | 15 | For details refer to the [HCL product documentation](https://help.hcltechsw.com/domino/12.0.0/admin/inst_onetouch.html) 16 | 17 | 18 | ## One-Touch parameters with additional functionality 19 | 20 | ### Download files 21 | 22 | The following variables download files from remote files with http:// and https:// syntax. 23 | Files are downloaded and the name of the file will be used as the file name. 24 | The variable is replaced with the download file location on disk. 25 | After download the variable is replaced with the password downloaded or read from file. 26 | 27 | ``` 28 | - SERVERSETUP_ORG_CERTIFIERIDFILEPATH 29 | - SERVERSETUP_ORG_ORGUNITIDFILEPATH 30 | - SERVERSETUP_SERVER_IDFILEPATH 31 | - SERVERSETUP_ADMIN_IDFILEPATH 32 | - SERVERSETUP_SECURITY_TLSSETUP_IMPORTFILEPATH 33 | ``` 34 | 35 | ### Remote password download 36 | 37 | The following variables retrieve passwords from files or from remote http:// and https:// locations. 38 | After download the variable is replaced with the password downloaded or read from file. 39 | 40 | ``` 41 | - SERVERSETUP_ADMIN_PASSWORD 42 | - SERVERSETUP_SERVER_PASSWORD 43 | - SERVERSETUP_ORG_CERTIFIERPASSWORD 44 | - SERVERSETUP_ORG_ORGUNITPASSWORD 45 | - SERVERSETUP_SECURITY_TLSSETUP_IMPORTFILEPASSWORD 46 | - SERVERSETUP_SECURITY_TLSSETUP_EXPORTPASSWORD 47 | ``` 48 | 49 | ## Additional parameters 50 | 51 | The following variables are complementing the One-Touch functionality 52 | 53 | ### SetupAutoConfigureParams 54 | 55 | Download a JSON One-Touch file 56 | 57 | ### CustomNotesdataZip 58 | 59 | Path and filename of a zip file containing files that will be extracted into the Domino Data directory. 60 | Values starting with 'http' will be handled as URL. The file will be downloaded from this URL. 61 | 62 | -------------------------------------------------------------------------------- /docs/reference_custom_roots.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Custom Trusted Roots" 4 | nav_order: 5 5 | parent: "Reference" 6 | description: "Custom Trusted Roots" 7 | has_children: false 8 | --- 9 | 10 | # Custom Linux trusted root certificate 11 | 12 | Depending on the required configuration, the might be a need for adding custom trusted roots to Linux and/or Domino. 13 | Specially on Linux level root certificates might be needed to verify corporate certificates, which are not trusted out of the box. 14 | 15 | It is important to add a trusted root to the Linux trust store early in the build process to ensure all Linux based build functionality can leverage it. 16 | The build script understands the logic to include for the most common Linux base images (Redhat, SUSE, Debian, Debian). 17 | 18 | 19 | ## How to add a trusted root 20 | 21 | Linux comes with a pre-defined list of trusted root certificates. 22 | To allow to use corporate trusted root, add a PEM formatted certificate file with the following name. 23 | The container image built adds the root certificate to the container images trusted roots. 24 | The root is used for example for OpenSSL and curl. 25 | 26 | The Linux trusted root can by providing a PEM file with the following name to [dockerfiles/install_dir_domino/custom](https://github.com/HCL-TECH-SOFTWARE/domino-container/tree/main/dockerfiles/install_dir_domino/custom): 27 | 28 | ``` 29 | trusted_root.pem 30 | ``` 31 | 32 | 33 | # Custom Domino trusted root certificate 34 | 35 | A second root certficate (or the same) can also be imported into Domino trust stores later in the image build logic when Domino is installed. 36 | 37 | Domino uses multiple trust stores: 38 | 39 | - **/local/notesdata/cacert.pem** used for HTTP Requests in Lotus Script and other backend code using curl 40 | - **Domino JVM trust store** used by Java 41 | - Domino Directory Trusted roots 42 | - certstore.nsf Trusted roots 43 | 44 | names.nsf and certstore.nsf can by managed in Domino and is replicated within the domain. 45 | 46 | 47 | ## How to add a trusted root 48 | 49 | The PEM file and JVM trusted roots can be updated by providing a PEM file with the following name to `dockerfiles/install_dir_domino/custom`: 50 | 51 | ``` 52 | trusted_domino_root.pem 53 | ``` 54 | 55 | -------------------------------------------------------------------------------- /docs/howto_github.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Get GitHub project" 4 | nav_order: 1 5 | description: "How to Get Domino Container GitHub Project" 6 | parent: "Howto" 7 | has_children: false 8 | --- 9 | 10 | ## How to download the Domino Container GitHub Project 11 | 12 | If you are directly connected to the GitHub server the recommended method to download this project is to use a git client, which is part of any Linux distribution. 13 | 14 | Example: Install for Redhat/CentOS based platforms via yum 15 | 16 | ``` 17 | yum install git -y 18 | ``` 19 | 20 | Example: Install for Ubuntu/Debian based platforms via apt 21 | 22 | ``` 23 | apt install git -y 24 | ``` 25 | 26 | Create a directory where to download Git projects and switch to it. 27 | 28 | Example: 29 | 30 | ``` 31 | mkdir -p /local/github 32 | cd /local/github 33 | ``` 34 | 35 | Clone the repository and switch to the directory 36 | 37 | ``` 38 | git clone https://github.com/HCL-TECH-SOFTWARE/domino-container.git 39 | cd domino-container 40 | ``` 41 | 42 | ### Download as a tar file 43 | 44 | When downloading the GitHub repository avoid the ZIP download link. 45 | because the ZIP format does not preserve file permissions. 46 | 47 | A better way is to download the GitHub repository as a so called **tarball**. 48 | The resulting tar file can be extracted preserving file system permissions. 49 | 50 | When downloading via browser, Git generates a file name for you. The URL would look like this: 51 | 52 | https://github.com/HCL-TECH-SOFTWARE/domino-container/tarball/main 53 | 54 | For a command-line download curl is the recommended way as listed below. 55 | 56 | ``` 57 | curl -sL https://github.com/HCL-TECH-SOFTWARE/domino-container/tarball/main -o domino-container.tar.gz 58 | ``` 59 | 60 | 61 | ### Downloading behind a proxy 62 | 63 | In a corporate environment a direct connection to the internet might not be an option. 64 | The Git client uses the standard Linux proxy settings when connecting to the internet. 65 | 66 | 67 | Note: 68 | Leveraging Git repositories directly allows to update the repository via `git pull`. 69 | Git also allows to switch between different branches of the project. 70 | The project uses a main and a develop branch. The develop branch should be only used by experienced administrators. 71 | -------------------------------------------------------------------------------- /examples/safelinx/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | services: 3 | 4 | safelinx: 5 | 6 | image: ${CONTAINER_IMAGE} 7 | container_name: ${CONTAINER_NAME} 8 | hostname: ${CONTAINER_HOSTNAME} 9 | stop_grace_period: 60s 10 | privileged: true 11 | 12 | environment: 13 | DOMINO_ORG: ${DOMINO_ORG} 14 | LDAP_HOST: ${LDAP_HOST} 15 | LDAP_PORT: ${LDAP_PORT} 16 | LDAP_SSL: ${LDAP_SSL} 17 | LDAP_USER: ${LDAP_USER} 18 | LDAP_PASSWORD: ${LDAP_PASSWORD} 19 | 20 | ENABLE_NOMAD: ${ENABLE_NOMAD} 21 | ENABLE_VERSEHA: ${ENABLE_VERSEHA} 22 | ENABLE_VPN: ${ENABLE_VPN} 23 | ENABLE_TRAVELER: ${ENABLE_TRAVELER} 24 | 25 | VERSE_DOMINO_HOST: ${VERSE_DOMINO_HOST} 26 | 27 | VPN_HOST_ADDRESS: ${VPN_HOST_ADDRESS} 28 | VPN_SUBNET_MASK: ${VPN_SUBNET_MASK} 29 | VPN_ENABLE_ROUTING: ${VPN_ENABLE_ROUTING} 30 | VPN_ROUTE: ${VPN_ROUTE} 31 | VPN_TARGET_ADAPTER: ${VPN_TARGET_ADAPTER} 32 | VPN_MULTI_SIGNON: ${VPN_MULTI_SIGNON} 33 | VPN_ENABLE_DNS: ${VPN_ENABLE_DNS} 34 | VPN_PRIMARY_DNS_SERVER: ${VPN_PRIMARY_DNS_SERVER} 35 | VPN_SECONDARY_DNS_SERVER: ${VPN_SECONDARY_DNS_SERVER} 36 | 37 | TRAVELER_DOMINO_HOST: ${TRAVELER_DOMINO_HOST} 38 | TRAVELER_PATH: ${TRAVELER_PATH} 39 | TRAVELER_HEARTBEAT: ${TRAVELER_HEARTBEAT} 40 | TRAVELER_SCHEDULE: ${TRAVELER_SCHEDULE} 41 | 42 | CERTMGR_HOST: ${CERTMGR_HOST} 43 | CERTMGR_CHECK_INTERVAL: ${CERTMGR_CHECK_INTERVAL} 44 | 45 | cap_add: 46 | - SYS_PTRACE 47 | 48 | networks: 49 | safelinx_net: 50 | ipv4_address: 172.30.0.2 51 | 52 | ports: 53 | - ${CONTAINER_HTTPS_PORT}:443 54 | 55 | volumes: 56 | - safelinx_vol:/opt/hcl/SafeLinx/datastore 57 | - ./cert-mount:/cert-mount 58 | 59 | devices: 60 | - /dev/net/tun 61 | 62 | volumes: 63 | 64 | safelinx_vol: 65 | name: ${CONTAINER_VOLUME} 66 | external: false 67 | 68 | 69 | networks: 70 | 71 | safelinx_net: 72 | driver: bridge 73 | ipam: 74 | driver: default 75 | config: 76 | - subnet: 172.30.0.0/24 77 | 78 | -------------------------------------------------------------------------------- /dockerfiles/dockerfile: -------------------------------------------------------------------------------- 1 | ############################################################################ 2 | # Copyright Nash!Com, Daniel Nashed 2019, 2024 - APACHE 2.0 see LICENSE 3 | # Copyright IBM Corporation 2015, 2019 - APACHE 2.0 see LICENSE 4 | ############################################################################ 5 | 6 | ARG BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest 7 | FROM $BASE_IMAGE 8 | 9 | # External arguments with a default value 10 | ARG LinuxYumUpdate= 11 | ARG DownloadFrom= 12 | ARG SOFTWARE_REPO_IP= 13 | ARG PROD_NAME= 14 | ARG PROD_VER= 15 | ARG PROD_FP= 16 | ARG PROD_HF= 17 | ARG DOMLP_VER= 18 | ARG DOMRESTAPI_VER= 19 | ARG PROD_DOWNLOAD_FILE= 20 | ARG PROD_FP_DOWNLOAD_FILE= 21 | ARG PROD_HF_DOWNLOAD_FILE= 22 | ARG TRAVELER_DOWNLOAD_FILE= 23 | ARG RESTAPI_DOWNLOAD_FILE= 24 | ARG DominoResponseFile= 25 | ARG LocalInstallDir=/tmp/install 26 | ARG DominoUserID= 27 | ARG DOMINO_LANG= 28 | ARG LINUX_LANG= 29 | ARG DOCKER_TZ= 30 | ARG OPENSSL_INSTALL= 31 | ARG SSH_INSTALL= 32 | ARG BORG_VERSION= 33 | ARG DOMBORG_VERSION= 34 | ARG TIKA_VERSION= 35 | ARG IQSUITE_VERSION= 36 | ARG NODE_EXPORTER_VERSION= 37 | ARG DOMPROM_VERSION= 38 | ARG SPECIAL_CURL_ARGS= 39 | ARG BUILD_SCRIPT_OPTIONS= 40 | ARG VERSE_VERSION= 41 | ARG NOMAD_VERSION= 42 | ARG TRAVELER_VERSION= 43 | ARG LEAP_VERSION= 44 | ARG CAPI_VERSION= 45 | ARG DOMIQ_VERSION= 46 | ARG NSHMAILX_VERSION= 47 | ARG MYSQL_INSTALL= 48 | ARG MSSQL_INSTALL= 49 | ARG MYSQL_JDBC_VERSION= 50 | ARG POSTGRESQL_JDBC_VERSION= 51 | ARG LINUX_PKG_ADD= 52 | ARG LINUX_PKG_REMOVE= 53 | ARG LINUX_PKG_SKIP= 54 | ARG LINUX_HOMEDIR= 55 | ARG STARTSCRIPT_VER= 56 | ARG CUSTOM_ADD_ONS= 57 | ARG K8S_RUNAS_USER_SUPPORT= 58 | ARG EXPOSED_PORTS="1352 25 80 110 143 389 443 636 993 995 2050 63148 63149" 59 | 60 | USER root 61 | 62 | # Copy install files to container 63 | COPY install_dir_common $LocalInstallDir 64 | COPY install_dir_domino $LocalInstallDir 65 | 66 | # Run install script and cleanup. Linux packages installed in separate layer first. 67 | RUN $LocalInstallDir/install_linux.sh 68 | 69 | # Install Domino in a layer separate from Linux packages and updates 70 | RUN $LocalInstallDir/install_domino.sh && \ 71 | rm -rf $LocalInstallDir 72 | 73 | HEALTHCHECK --interval=60s --timeout=10s CMD /healthcheck.sh 74 | 75 | # Expose Ports NRPC SMTP HTTP POP3 IMAP LDAP HTTPS LDAPS IMAPS POP3S DIIOP DIIOPS 76 | EXPOSE $EXPOSED_PORTS 77 | 78 | ENTRYPOINT ["/entrypoint.sh"] 79 | 80 | USER 1000 81 | -------------------------------------------------------------------------------- /docs/reference_custom_mirror.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Custom Repositories" 4 | nav_order: 4 5 | parent: "Reference" 6 | description: "Custom Repositories" 7 | has_children: false 8 | --- 9 | 10 | # Custom Linux repository mirror configuration 11 | 12 | Specially in corporate enviroments source/mirror repositories might need to be customized to update and install Linux packages from a locally trusted location instead downloading them from public sources. 13 | In larger deployments a corporate image with the right adjusted repositories would make sense. 14 | The Domino Container would then just be derived from the company container base image and inherit Linux packet sources, custom trusted roots and for example proxy configurations. 15 | 16 | But for smaller environments or if Domino is the only impage the following functionality allows image customization at build time. 17 | 18 | 19 | ## Custom repository mirror configuration for Ubuntu/Debian 20 | 21 | The following description expects custom files in [dockerfiles/install_dir_domino/custom](https://github.com/HCL-TECH-SOFTWARE/domino-container/tree/main/dockerfiles/install_dir_domino/custom). 22 | 23 | To customize the mirror list for current Ubuntu and Debian, you can specify a custom repository file. 24 | The following configuration has been only tested for Ubuntu 24.04 and Debian 12 and is only available for those two platforms today. 25 | 26 | Hetzner for example provides a mirror for all their customers. 27 | The project contains the source repository files, which can be copied into `dockerfiles/install_dir_domino/custom`. 28 | 29 | Files need to have the following. You just need to copy the files into the right location. 30 | The build process picks up the repository before starting to install Linux packages. 31 | 32 | The directory [dockerfiles/install_dir_domino/linux_repositories](https://github.com/HCL-TECH-SOFTWARE/domino-container/tree/main/dockerfiles/install_dir_domino/linux_repositories) contains example reposity files for Hetzner, which are a good example and are ready to use on Hetzner servers. 33 | 34 | 35 | ### Ubuntu 24.04 (Noble) 36 | 37 | ``` 38 | ubuntu_noble.sources 39 | ``` 40 | 41 | ### Debian 12 (Bookworm) 42 | 43 | ``` 44 | debian_bookworm.sources 45 | ``` 46 | 47 | For Hetzner servers just copy the corresponding file to `dockerfiles/install_dir_domino/custom` with the corresponding name (`ubuntu_noble.sources`, `debian_bookworm.sources`) 48 | 49 | 50 | -------------------------------------------------------------------------------- /lab/kubernetes/domino/domino12_auto_config.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | 4 | metadata: 5 | name: domino12 6 | namespace: default 7 | 8 | labels: 9 | app: hcl-domino 10 | 11 | spec: 12 | imagePullSecrets: 13 | - name: regcred 14 | 15 | securityContext: 16 | runAsNonRoot: true 17 | runAsUser: 1000 18 | fsGroup: 1000 19 | fsGroupChangePolicy: "OnRootMismatch" 20 | 21 | containers: 22 | 23 | - env: 24 | - name: LANG 25 | value: "en_US.UTF-8" 26 | 27 | - name: SetupAutoConfigure 28 | value: "1" 29 | 30 | - name: SetupAutoConfigureParams 31 | value: "/etc/domino-cfg/auto_config.json" 32 | 33 | - name: DominoConfigRestartWaitTime 34 | value: "30" 35 | 36 | - name: DominoConfigRestartWaitString 37 | value: "Server started on physical node" 38 | 39 | name: domino12 40 | image: registry.domino.lab/hclcom/domino:latest 41 | 42 | securityContext: 43 | capabilities: 44 | add: ["SYS_PTRACE"] 45 | runAsNonRoot: true 46 | runAsUser: 1000 47 | 48 | volumeMounts: 49 | - name: domino-data 50 | mountPath: /local 51 | 52 | - name: domino-cfg 53 | mountPath: /etc/domino-cfg 54 | 55 | ports: 56 | - containerPort: 1352 57 | protocol: TCP 58 | - containerPort: 80 59 | protocol: TCP 60 | - containerPort: 443 61 | protocol: TCP 62 | 63 | livenessProbe: 64 | exec: 65 | command: 66 | - /healthcheck.sh 67 | 68 | initialDelaySeconds: 60 69 | periodSeconds: 20 70 | 71 | readinessProbe: 72 | exec: 73 | command: 74 | - /healthcheck.sh 75 | - ready 76 | 77 | initialDelaySeconds: 60 78 | periodSeconds: 20 79 | 80 | 81 | # this init container is a work-around to change file-system permissions for some local storage providers 82 | initContainers: 83 | - name: domino-startup 84 | image: busybox:latest 85 | 86 | command: [ 'sh', '-c', 'chmod 777 /local' ] 87 | 88 | securityContext: 89 | runAsNonRoot: false 90 | runAsUser: 0 91 | 92 | volumeMounts: 93 | - name: domino-data 94 | mountPath: /local 95 | 96 | volumes: 97 | - name: domino-data 98 | persistentVolumeClaim: 99 | claimName: local-path-pvc 100 | 101 | - name: domino-cfg 102 | configMap: 103 | name: domino12-cfg 104 | 105 | -------------------------------------------------------------------------------- /docs/run_dominoctl.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Run via dominoctl" 4 | nav_order: 2 5 | description: "Howto run a container via dominoctl" 6 | parent: "Run Image" 7 | has_children: false 8 | --- 9 | 10 | ## About dominoctl 11 | 12 | [Dominoctl](https://nashcom.github.io/domino-startscript/dominoctl/) is not part of the Domino Container project. 13 | It is part of the Nash!Com start script project, which is used for the HCL Domino container project. 14 | 15 | Similar to the Domino Start Script the **dominoctl** is intended to simplify configuration, start, stop and all other container operations. 16 | If you are running a Domino container on Docker or Podman this script is a very good choice. 17 | Please refer to the Nash!Com start script project for detailed information. 18 | 19 | ## How to configure and start a container 20 | 21 | First install **dominoctl** as documented [here]([Dominoctl](https://nashcom.github.io/domino-startscript/dominoctl/)). 22 | 23 | Once installed all container operations can be performed using **dominoctl**. 24 | 25 | ### Configure the container 26 | 27 | The default container configuration should work for most first setups. 28 | But opening the configuration might help understanding the settings. 29 | 30 | By default the configuration scripts use `vi`. 31 | The editor can be changed in the configuration via `EDIT_COMMAND` variable or exporting `export EDIT_COMMAND=nano` for example. 32 | 33 | ``` 34 | dominoctl cfg 35 | ``` 36 | 37 | ### Configure the Domino server 38 | 39 | The Container image supports Domino OTS in multiple ways. 40 | You can mount a OTS JSON file, download the file from remote. 41 | The file can be a so called OTS template with placeholders for OTS setup variables. 42 | 43 | **dominoctl** supports to interactively replace the variables. 44 | Each variable is prompted with a default value. 45 | 46 | ``` 47 | dominoctl setup 48 | ``` 49 | 50 | To edit the generated OTS JSON file, invoke the command again. 51 | 52 | 53 | ### Start the Domino server 54 | 55 | Now the server can be started using the start command. 56 | The command issues a `docker run` command to create and start a new container and waits for the container to be started to issue a`docker cp` command to inject the OTS JSON file. 57 | The container image is prepared to wait a couple of seconds for OTS files to be available before switching to listening mode for remote setup if no configuration is provided. 58 | 59 | 60 | ``` 61 | dominoctl start 62 | ``` 63 | 64 | ### Jump into the running container 65 | 66 | ``` 67 | dominoctl bash 68 | ``` 69 | 70 | -------------------------------------------------------------------------------- /examples/safelinx/.env: -------------------------------------------------------------------------------- 1 | 2 | # SafeLinx & Nomad Web Container 3 | 4 | # -------------------- 5 | 6 | # Mandatory configuration 7 | 8 | CONTAINER_HOSTNAME=nomad.acme.com 9 | DOMINO_ORG=acme 10 | LDAP_HOST=ldap.acme.com 11 | 12 | # -------------------- 13 | 14 | LDAP_USER= 15 | LDAP_PASSWORD= 16 | LDAP_PORT=389 17 | LDAP_SSL=auto 18 | LDAP_UNTRUSTED=FALSE 19 | 20 | # Important: For anonymous LDAP add following fields for anonymous queries in default config doc 21 | 22 | # - dominoPerson / MailServer 23 | # - dominoServer / SMTPFullHostDomain 24 | 25 | # -------------------- 26 | 27 | # Domino CertMgr Host for automatic certificate updates 28 | 29 | CERTMGR_HOST= 30 | #CERTMGR_HOST=certmgr.acme.com 31 | CERTMGR_CHECK_INTERVAL=300 32 | 33 | # -------------------- 34 | 35 | # Only overwrite if required 36 | 37 | CONTAINER_HTTPS_PORT=443 38 | CONTAINER_IMAGE=hclcom/safelinx:latest 39 | CONTAINER_NAME=safelinx 40 | CONTAINER_VOLUME=safelinx_data 41 | 42 | # MySQL 43 | 44 | # Only available if container is build with 'mysql' option and includes the client driver. 45 | # All addtitional parameters are defined in docker-compose-mysql.yml. 46 | # If you intended to use a different MySQL target, modify docker-compose-mysql.yml directly. 47 | # This deployment option would just launch a MySQL server automatically for your SafeLinx container. 48 | # Specifying the password triggers MySQL mode. 49 | 50 | #MYSQL_PASSWORD=my-secure-mysql-password 51 | 52 | 53 | #HCL Safelinx VPN configuration 54 | 55 | ENABLE_VPN=1 56 | VPN_HOST_ADDRESS=172.20.0.1 57 | VPN_SUBNET_MASK=255.255.0.0 58 | VPN_ENABLE_ROUTING=1 59 | VPN_ROUTE=10.0.0.0+255.255.0.0,172.17.0.0+255.255.0.0 60 | VPN_MULTI_SIGNON=TRUE 61 | VPN_TARGET_ADAPTER=eth0 62 | VPN_ENABLE_DNS=0 63 | VPN_PRIMARY_DNS_SERVER= 64 | VPN_SECONDARY_DNS_SERVER= 65 | 66 | 67 | # HCL Nomad configuration 68 | ENABLE_NOMAD=1 69 | # To connect to domino server nomad content, enable below lines appropriately. 70 | # NOMAD_DOMINO_CFG="NOMAD CN=domino-acme-01 nrpc://domino-acme-01.acme.com" 71 | 72 | 73 | # HCL Verse HA configuration 74 | ENABLE_VERSEHA=0 75 | # We can have comma separated list to mention multiple traveler hosts 76 | VERSE_DOMINO_HOST=https://linus.lab.dnug.eu 77 | 78 | 79 | # HCL Traveler configuration 80 | ENABLE_TRAVELER=0 81 | # We can have comma separated list to mention multiple traveler hosts 82 | TRAVELER_DOMINO_HOST=https://linus.lab.dnug.eu 83 | TRAVELER_PATH="/servlet/traveler /traveler /Microsoft-Server-ActiveSync /api/traveler /api/mail /api/freebusy" 84 | TRAVELER_HEARTBEAT=0 85 | # Supported SCHEDULEs are "BALANCED", "RROBIN", "STANDBY" 86 | TRAVELER_SCHEDULE="BALANCED" 87 | -------------------------------------------------------------------------------- /docs/howto_docker-run.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Run Image on Docker" 4 | nav_order: 3 5 | description: "Howto run Domino Container Images on Docker" 6 | parent: "Howto" 7 | has_children: false 8 | --- 9 | 10 | ## How to use this image 11 | 12 | When a new container is created from the HCL Domino Docker image, it takes [environment variables](reference_environment-vars.md) into account for auto-configuring the Domino server. 13 | Details on how to use those variables can be found [here](reference_environment-vars.md) 14 | 15 | The Domino data directory needs to be a persistent volume. On Docker it will be automatically created. 16 | You can also use an existing volume. All volume types your container infrastructure supports can be used. 17 | 18 | ### Creating a new container from an image manually 19 | 20 | Run a new Domino server with the configuration details of your choice. 21 | Make sure to specify the base image name at the very end of this command. 22 | 23 | Note: For values containing blanks use quotes around the whole env parameter! 24 | 25 | ```bash 26 | docker run -it -d \ 27 | -e SetupAutoConfigure=1 \ 28 | -e SERVERSETUP_SERVER_TYPE=first \ 29 | -e SERVERSETUP_ADMIN_FIRSTNAME=John \ 30 | -e SERVERSETUP_ADMIN_LASTNAME=Doe \ 31 | -e SERVERSETUP_ADMIN_PASSWORD=domino4ever \ 32 | -e SERVERSETUP_ADMIN_IDFILEPATH=admin.id \ 33 | -e SERVERSETUP_ORG_CERTIFIERPASSWORD=domino4ever \ 34 | -e SERVERSETUP_SERVER_DOMAINNAME=DominoDemo \ 35 | -e SERVERSETUP_ORG_ORGNAME=Domino-Demo \ 36 | -e SERVERSETUP_SERVER_NAME=domino-demo-v12 \ 37 | -e SERVERSETUP_NETWORK_HOSTNAME=domino.acme.com \ 38 | -h domino.acme.com \ 39 | -p 80:80 \ 40 | -p 1352:1352 \ 41 | -v dominodata_demo:/local/notesdata \ 42 | --stop-timeout=60 \ 43 | --cap-add=SYS_PTRACE \ 44 | --cap-add=NET_BIND_SERVICE \ 45 | --name domino12 \ 46 | hclcom/domino:latest 47 | ``` 48 | 49 | ## Runtime configuration 50 | 51 | During ```docker run``` you can setup a volume that mounts property files into `/local/notesdata` 52 | 53 | ### Stopping the Application Server gracefully 54 | 55 | Stopping a Domino server takes longer than the time a Docker server would expect by default (**10 seconds**), the recommended way is to add the parameter `--stop-timeout` already when starting the container. 56 | If the container was started with the parameter ```--stop-timeout=``` then you may stop the container using the following command: 57 | 58 | ```docker stopUpload a Domino server OTS JSON configuration file.
45 |Or perform a form based first server Domino setup.
46 |