Compare commits

..

2 Commits

105 changed files with 1499 additions and 3177 deletions

View File

@ -1,89 +0,0 @@
#!/usr/bin/env bash
set -e
function get_colors() {
COLOR_BLUE=$'\e[34m'
COLOR_GREEN=$'\e[32m'
COLOR_RED=$'\e[31m'
COLOR_RESET=$'\e[0m'
COLOR_YELLOW=$'\e[33m'
export COLOR_BLUE
export COLOR_GREEN
export COLOR_RED
export COLOR_RESET
export COLOR_YELLOW
}
function release_service() {
# ex. service_source_tag=onlyoffice/4testing-docspace-service-name:2.5.1.1473
local service_source_tag=${1}
echo ${service_source_tag}
# ex. service_release_tag=onlyoffice/docspace-service-name:2.5.1.1
# NOTE: latest tag also will be updated
local service_release_tag
service_release_tag=$(echo ${service_source_tag%:*} | sed 's/4testing-//')
# If specifyed tag look like 2.5.1.1 it will release like 3 different tags: 2.5.1 2.5.1.1 latest
# Make new image manigest and push it to stable images repository
docker buildx imagetools create --tag ${service_release_tag}:${RELEASE_VERSION%.*} \
--tag ${service_release_tag}:${RELEASE_VERSION} \
--tag ${service_release_tag}:latest \
${service_source_tag} || local STATUS=$?
# Make alert
if [[ ! ${STATUS} ]]; then
RELEASED_SERVICES+=("${service_release_tag}")
else
UNRELEASED_SERVICES+=("${service_release_tag}")
fi
}
function main() {
# Import all colors
get_colors
# Make released|unreleased array
RELEASED_SERVICES=()
UNRELEASED_SERVICES=()
# REPO mean hub.docker repo owner ex. onlyoffice
: "${REPO:?Should be set}"
# DOCKER_TAG mean tag from 4testing ex. 2.6.1.3123
: "${DOCKER_TAG:?Should be set}"
# RELEASED_VERSION mean tag for stable repo 2.6.1.1
: "${RELEASE_VERSION:?Should be set}"
# DOCKER_IMAGE_PREFIX mean tag prefix ex. 4testing-docspace
: "${DOCKER_IMAGE_PREFIX:?Should be set}"
cd ${GITHUB_WORKSPACE}/install/docker
SERVICES=($(docker buildx bake -f build.yml --print | jq -r '.target | .[] | .tags[]'))
echo ${SERVICES[@]}
for service in ${SERVICES[@]}; do
release_service ${service}
done
# Output Result
echo "Released services"
for service in ${RELEASED_SERVICES[@]}; do
echo "${COLOR_GREEN}${service}${COLOR_RESET}"
done
# PANIC IF SOME SERVICE WASNT RELEASE
if [[ -n ${UNRELEASED_SERVICES} ]]; then
for service in ${UNRELEASED_SERVICES[@]}; do
echo "${COLOR_RED}PANIC: Service ${service} wasn't relese!${COLOR_RED}"
done
exit 1
fi
}
main

127
.github/workflows/cache-control.yml vendored Normal file
View File

@ -0,0 +1,127 @@
name: Cache-Control Test
on:
workflow_dispatch:
jobs:
test-cache-control:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Create configuration files
run: |
cat <<EOF > install/docker/config/nginx/test_cache.conf
server {
listen 8092;
location / {
default_type text/plain;
content_by_lua_block {
local args = ngx.req.get_uri_args()
local cache_control = args["cache_control"]
if cache_control then
ngx.header["Cache-Control"] = cache_control
ngx.say("Cache-Control set to: ", cache_control)
else
ngx.say("Cache-Control not specified. Use ?cache_control=<value> to set one.")
end
}
}
}
EOF
cat <<EOF > install/docker/router.yml
services:
onlyoffice-router:
image: openresty/openresty:latest
container_name: onlyoffice-router
restart: always
ports:
- "8092:8092"
volumes:
- ./config/nginx/test_cache.conf:/etc/nginx/conf.d/default.conf
networks:
default:
name: \${NETWORK_NAME}
external: true
EOF
- name: Run Docker containers and script
run: |
docker network create onlyoffice
docker-compose -f install/docker/proxy.yml -f install/docker/router.yml up -d
- name: Wait for containers to become ready
run: |
timeout 30 bash -c 'until curl -s http://localhost:80; do sleep 1; done'
timeout 30 bash -c 'until curl -s http://localhost:8092; do sleep 1; done'
- name: Execute testing script
run: |
CACHE_CONTROLS_HITS=(
"max-age=60"
"s-maxage=60"
"max-age=3600"
"max-age=120,must-revalidate"
"public,max-age=60"
"immutable"
"public,s-maxage=60,max-age=30"
"immutable,max-age=3600"
"max-age=300,must-revalidate"
"proxy-revalidate,max-age=600"
"no-transform,max-age=900"
"must-revalidate,max-age=1200"
"proxy-revalidate,s-maxage=150"
"public,immutable,max-age=31536000"
"public,max-age=120,proxy-revalidate"
"public,no-transform,s-maxage=60,max-age=30"
"max-age=60,no-transform,must-revalidate"
)
CACHE_CONTROLS_MISSES=(
"no-cache"
"no-store"
"public"
"private"
"max-age=0"
"must-revalidate"
"proxy-revalidate"
"no-cache,no-store"
"private,max-age=120"
"no-cache,max-age=0"
"private,no-cache"
"public,no-transform"
"no-store,must-revalidate,max-age=0"
"public,max-age=0"
"private,s-maxage=60"
"no-cache,max-age=30"
"no-store,s-maxage=120"
"public,no-cache"
"private,no-store"
"no-cache,no-store,max-age=0"
"private,max-age=60,must-revalidate"
"no-store,no-cache,must-revalidate,max-age=0"
"private,immutable,s-maxage=43200"
)
for CC in "${CACHE_CONTROLS_HITS[@]}" "${CACHE_CONTROLS_MISSES[@]}"; do
curl -s -I "http://localhost/?cache_control=${CC}" > /dev/null
if $(curl -s -I "http://localhost/?cache_control=${CC}" | grep "X-Cache-Status" | grep -q "HIT"); then
if [[ " ${CACHE_CONTROLS_MISSES[@]} " =~ " $CC " ]]; then
echo "Error: HIT received for $CC"
exit 1
else
echo "- HIT - $CC"
fi
else
if [[ " ${CACHE_CONTROLS_HITS[@]} " =~ " $CC " ]]; then
echo "Error: HIT expected for $CC"
exit 1
else
echo "- MISS - $CC"
fi
fi
done

View File

@ -1,68 +0,0 @@
name: Install OneClickInstall Docker
on:
pull_request:
types: [opened, reopened, synchronize]
paths:
- '.github/workflows/ci-oci-docker-install.yml'
- 'install/OneClickInstall/install-Docker.sh'
workflow_dispatch:
inputs:
script-branch:
description: 'Branch for OCI script docker'
required: true
type: string
default: master
jobs:
Install-OneClickInstall-Docker:
runs-on: ubuntu-22.04
steps:
- name: Test OCI docker scripts
run: |
sudo docker image prune --all --force
BRANCH_NAME=$(
case "${{ github.event_name }}" in
pull_request) echo "${{ github.event.pull_request.head.ref }}";;
workflow_dispatch) echo "${{ github.event.inputs.script-branch }}";;
push) echo "${GITHUB_REF#refs/heads/}";;
esac
)
wget https://download.onlyoffice.com/docspace/docspace-install.sh
sed '/bash install-Docker.sh/i sed -i "1i set -x" install-Docker.sh' -i docspace-install.sh
sudo bash docspace-install.sh docker -skiphc true -noni true $([ $BRANCH_NAME != "master" ] && echo "-gb $BRANCH_NAME -s 4testing-") || exit $?
echo -n "Waiting for all containers to start..."
timeout 300 bash -c 'while docker ps | grep -q "starting"; do sleep 5; done' && echo "OK" || echo "container_status=timeout" >> $GITHUB_ENV
- name: Check container status
run: |
docker ps --all --format "{{.Names}}" | xargs -I {} sh -c '
status=$(docker inspect --format="{{if .State.Health}}{{.State.Health.Status}}{{else}}no healthcheck{{end}}" {});
case "$status" in
healthy) color="\033[0;32m" ;; # green
"no healthcheck") color="\033[0;33m" ;; # yellow
*) color="\033[0;31m"; echo "container_status=red" >> $GITHUB_ENV ;; # red
esac;
printf "%-30s ${color}%s\033[0m\n" "{}:" "$status";
'
- name: Print logs for crashed container
run: |
docker ps --all --format "{{.Names}}" | xargs -I {} sh -c '
status=$(docker inspect --format="{{if .State.Health}}{{.State.Health.Status}}{{else}}no healthcheck{{end}}" {});
case "$status" in
healthy | "no healthcheck") ;;
*)
echo "Logs for container {}:";
docker logs --tail 30 {} | sed "s/^/\t/g";
;;
esac;
'
case "${{ env.container_status }}" in
timeout) echo "Timeout reached. Not all containers are running."; exit 1 ;;
red) echo "One or more containers have status 'red'. Job will fail."; exit 1 ;;
esac

View File

@ -4,10 +4,7 @@ on:
pull_request:
types: [opened, reopened, synchronize]
paths:
- '.github/workflows/ci-oci-install.yml'
- 'install/OneClickInstall/**'
- '!install/OneClickInstall/install-Docker.sh'
- '!install/OneClickInstall/docspace-install.sh'
schedule:
- cron: '00 20 * * 6' # At 23:00 on Saturday.
@ -38,18 +35,6 @@ on:
type: boolean
description: 'Ubuntu 22.04'
default: true
ubuntu2404:
type: boolean
description: 'Ubuntu 24.04'
default: true
fedora39:
type: boolean
description: 'Fedora 39'
default: true
fedora40:
type: boolean
description: 'Fedora 40'
default: true
jobs:
prepare:
@ -68,10 +53,7 @@ jobs:
{"execute": '${{ github.event.inputs.debian11 || true }}', "name": "Debian11", "os": "debian11", "distr": "generic"},
{"execute": '${{ github.event.inputs.debian12 || true }}', "name": "Debian12", "os": "debian12", "distr": "generic"},
{"execute": '${{ github.event.inputs.ubuntu2004 || true }}', "name": "Ubuntu20.04", "os": "ubuntu2004", "distr": "generic"},
{"execute": '${{ github.event.inputs.ubuntu2204 || true }}', "name": "Ubuntu22.04", "os": "ubuntu2204", "distr": "generic"},
{"execute": '${{ github.event.inputs.ubuntu2204 || true }}', "name": "Ubuntu24.04", "os": "ubuntu-24.04", "distr": "bento"},
{"execute": '${{ github.event.inputs.fedora39 || true }}', "name": "Fedora39", "os": "39-cloud-base", "distr": "fedora"},
{"execute": '${{ github.event.inputs.fedora40 || true }}', "name": "Fedora40", "os": "fedora-40", "distr": "bento"}
{"execute": '${{ github.event.inputs.ubuntu2204 || true }}', "name": "Ubuntu22.04", "os": "ubuntu2204", "distr": "generic"}
]
}' | jq -c '{include: [.include[] | select(.execute == true)]}')
echo "matrix=${matrix}" >> $GITHUB_OUTPUT
@ -86,7 +68,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: Set up Python 3.
uses: actions/setup-python@v5
@ -99,17 +81,12 @@ jobs:
sudo apt update -y
sudo apt install vagrant virtualbox -y
- name: Free Disk Space
run: |
sudo rm -rf /usr/local/lib/android /opt/ghc
sudo docker image prune --all --force
- name: "Test production scripts with ${{matrix.name}}"
if: ${{ github.event_name == 'schedule' }}
uses: nick-fields/retry@v3
uses: nick-fields/retry@v2
with:
max_attempts: 2
timeout_minutes: 80
timeout_minutes: 40
retry_on: error
command: |
set -eux
@ -120,7 +97,7 @@ jobs:
DOWNLOAD_SCRIPT='-ds true' \
RAM='5100' \
CPU='3' \
ARGUMENTS="-arg '--skiphardwarecheck true'" \
ARGUMENTS="-arg '--skiphardwarecheck true --makeswap false'" \
vagrant up
on_retry_command: |
echo "RUN CLEAN UP: Destroy vagrant and one more try"
@ -130,10 +107,10 @@ jobs:
- name: "Test Local scripts with ${{matrix.name}}"
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: nick-fields/retry@v3
uses: nick-fields/retry@v2
with:
max_attempts: 2
timeout_minutes: 80
timeout_minutes: 40
retry_on: error
command: |
set -eux
@ -145,7 +122,7 @@ jobs:
CPU='3' \
DOWNLOAD_SCRIPT='-ds false' \
TEST_REPO='-tr true' \
ARGUMENTS="-arg '--skiphardwarecheck true --localscripts true'" \
ARGUMENTS="-arg '--skiphardwarecheck true --makeswap false --localscripts true'" \
vagrant up
on_retry_command: |
echo "RUN CLEAN UP: Destroy vagrant and one more try"

View File

@ -1,113 +0,0 @@
name: Update OneClickInstall DocSpace
run-name: >
Update DocSpace from older versions
on:
schedule:
- cron: '00 20 * * 6' # At 23:00 on Saturday.
workflow_dispatch:
inputs:
centos8s:
type: boolean
description: 'CentOS 8 Stream'
default: true
centos9s:
type: boolean
description: 'CentOS 9 Stream'
default: true
debian11:
type: boolean
description: 'Debian 11'
default: true
debian12:
type: boolean
description: 'Debian 12'
default: true
ubuntu2004:
type: boolean
description: 'Ubuntu 20.04'
default: true
ubuntu2204:
type: boolean
description: 'Ubuntu 22.04'
default: true
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Set matrix names
id: set-matrix
run: |
matrix=$(echo '{
"include": [
{"execute": '${{ github.event.inputs.centos8s || true }}', "name": "CentOS8S", "os": "centos8s", "distr": "onlyoffice"},
{"execute": '${{ github.event.inputs.centos9s || true }}', "name": "CentOS9S", "os": "centos9s", "distr": "onlyoffice"},
{"execute": '${{ github.event.inputs.debian11 || true }}', "name": "Debian11", "os": "debian11", "distr": "onlyoffice"},
{"execute": '${{ github.event.inputs.debian12 || true }}', "name": "Debian12", "os": "debian12", "distr": "onlyoffice"},
{"execute": '${{ github.event.inputs.ubuntu2004 || true }}', "name": "Ubuntu20.04", "os": "ubuntu2004", "distr": "onlyoffice"},
{"execute": '${{ github.event.inputs.ubuntu2204 || true }}', "name": "Ubuntu22.04", "os": "ubuntu2204", "distr": "onlyoffice"}
]
}' | jq -c '{include: [.include[] | select(.execute == true)]}')
echo "matrix=${matrix}" >> $GITHUB_OUTPUT
update-boxes:
name: "Update DocSpace on ${{ matrix.name}}"
runs-on: ubuntu-22.04
needs: prepare
strategy:
fail-fast: false
matrix: ${{fromJSON(needs.prepare.outputs.matrix)}}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Free Disk Space
run: |
sudo rm -rf /usr/local/lib/android /opt/ghc
sudo docker image prune --all --force
- name: Get update and install vagrant
run: |
set -eux
sudo apt update -y
sudo apt install vagrant virtualbox -y
- name: Testing with update ${{matrix.name}}
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
uses: nick-fields/retry@v3
with:
max_attempts: 1
timeout_minutes: 60
retry_on: error
command: |
cd ./tests/vagrant
set -eux
TEST_CASE='--local-install' \
DISTR='${{matrix.distr}}' \
RAM='5100' \
CPU='3' \
OS='docspace-${{ matrix.os }}' \
DOWNLOAD_SCRIPT='-ds false' \
TEST_REPO='-tr true' \
ARGUMENTS="-arg '--skiphardwarecheck true --makeswap false --localscripts true --update true'" \
vagrant up
sleep 10
vagrant destroy --force
on_retry_command: |
set -eux
echo "Clean-up and one more try"
cd ./tests/vagrant
vagrant destroy --force

View File

@ -28,9 +28,6 @@ jobs:
matching_branches=${matching_branches#,}
echo "json_output=[${matching_branches}]" >> $GITHUB_OUTPUT
last_branch=$(echo ${matching_branches} | awk -F, '{print $NF}' | sed 's/"//g')
echo "last_branch=${last_branch}" >> $GITHUB_OUTPUT
- name: Dispatch Action
run: |
echo "${{ steps.list-branches.outputs.json_output }}"
@ -41,17 +38,3 @@ jobs:
"https://api.github.com/repos/ONLYOFFICE/DocSpace-buildtools/dispatches" \
-H "Accept: application/vnd.github.everest-preview+json" \
--data '{"event_type": "cron-trigger-action", "client_payload": { "branches": ${{ steps.list-branches.outputs.json_output }}}}'
curl \
-X POST \
-u "${{ secrets.USERNAME}}:${{secrets.TOKEN}}" \
https://api.github.com/repos/ONLYOFFICE/DocSpace/actions/workflows/59268961/dispatches \
-H "Accept: application/vnd.github.everest-preview+json" \
--data '{
"ref": "${{ steps.list-branches.outputs.last_branch }}",
"inputs": {
"branch-buildtools": "${{ steps.list-branches.outputs.last_branch }}",
"branch-client": "${{ steps.list-branches.outputs.last_branch }}",
"branch-server": "${{ steps.list-branches.outputs.last_branch }}"
}
}'

View File

@ -55,20 +55,14 @@ jobs:
run: |
cd .${DOCKER_PATH}
if [ "${{ matrix.branch }}" = "develop" ]; then
PRODUCT_VERSION="develop"
DOCKER_TAG=${PRODUCT_VERSION}.${{ github.run_number }}
DOCKER_TAG="develop.${{ github.run_number }}"
else
PRODUCT_VERSION=$(echo "${{ matrix.branch }}" | sed '/^release\b\|^hotfix\b\|^feature\b/s/release.*\/\|hotfix.*\/\|feature.*\///; s/-git-action$//; s/^v//')
DOCKER_TAG=${PRODUCT_VERSION}.${{github.run_number}}
DOCKER_TAG=$(echo "${{ matrix.branch }}" | sed '/^release\b\|^hotfix\b\|^feature\b/s/release.*\/\|hotfix.*\/\|feature.*\///; s/-git-action$//; s/^v//').${{github.run_number}}
fi
export DOCKER_TAG
docker buildx bake -f build.yml \
--set *.args.GIT_BRANCH=${{ matrix.branch }} \
--set *.args.PRODUCT_VERSION=${PRODUCT_VERSION} \
--set *.args.BUILD_NUMBER=${BUILD_NUMBER} \
--set *.platform=linux/amd64 \
--set *.args.PRODUCT_VERSION=${PRODUCT_VERSION} \
--set *.args.BUILD_NUMBER=${{github.run_number}} \
--push
echo "version=${DOCKER_TAG}" >> "$GITHUB_OUTPUT"

View File

@ -1,75 +0,0 @@
name: Upload OneСlickInstall scripts on S3
on:
push:
branches:
- master
paths:
- 'install/docker/*.yml'
- 'install/docker/*.env'
- 'install/docker/config/**'
- 'install/OneClickInstall/**'
workflow_dispatch:
env:
PRODUCT: docspace
jobs:
release:
name: Scripts release
runs-on: ubuntu-latest
env:
DOCKER_DIR: "${{ github.workspace }}/install/docker"
SCRIPT_DIR: "${{ github.workspace }}/install/OneClickInstall"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Creating an enterprise script
run: |
cp ${{ env.SCRIPT_DIR }}/${{ env.PRODUCT }}-install.sh ${{ env.SCRIPT_DIR }}/${{ env.PRODUCT }}-enterprise-install.sh
sed -i 's/\(PARAMETERS -it\).*";/\1 ENTERPRISE";/' ${{ env.SCRIPT_DIR }}/${{ env.PRODUCT }}-enterprise-install.sh
- name: Create Docker Tarball
run: |
cd ${{ env.DOCKER_DIR }}
tar -czvf ${{ env.SCRIPT_DIR }}/docker.tar.gz --exclude='config/supervisor*' *.yml .env config/
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_OCI }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_OCI }}
aws-region: us-east-1
- name: Upload scripts
run: |
cd ${{ env.SCRIPT_DIR }}
aws s3 cp . ${{ secrets.AWS_BUCKET_URL_OCI }}/ \
--recursive \
--acl public-read \
--content-type application/x-sh \
--metadata-directive REPLACE \
--exclude '*' \
--include="${{ env.PRODUCT }}-install.sh" \
--include="${{ env.PRODUCT }}-enterprise-install.sh" \
--include="install-RedHat.sh" \
--include="install-RedHat/*" \
--include="install-Debian.sh" \
--include="install-Debian/*" \
--include="install-Docker.sh" \
--include="docker.tar.gz"
- name: Invalidate AWS CloudFront cache
run: |
aws cloudfront create-invalidation \
--distribution-id ${{ secrets.AWS_DISTRIBUTION_ID_OCI }} \
--paths \
"/${{ env.PRODUCT }}/${{ env.PRODUCT }}-install.sh" \
"/${{ env.PRODUCT }}/${{ env.PRODUCT }}-enterprise-install.sh" \
"/${{ env.PRODUCT }}/install-RedHat.sh" \
"/${{ env.PRODUCT }}/install-RedHat/*" \
"/${{ env.PRODUCT }}/install-Debian.sh" \
"/${{ env.PRODUCT }}/install-Debian/*" \
"/${{ env.PRODUCT }}/install-Docker.sh" \
"/${{ env.PRODUCT }}/docker.tar.gz"

View File

@ -1,123 +0,0 @@
name: Rebuild boxes
on:
workflow_dispatch:
inputs:
centos8s:
type: boolean
description: 'CentOS 8 Stream'
default: true
centos9s:
type: boolean
description: 'CentOS 9 Stream'
default: true
debian11:
type: boolean
description: 'Debian 11'
default: true
debian12:
type: boolean
description: 'Debian 12'
default: true
ubuntu2004:
type: boolean
description: 'Ubuntu 20.04'
default: true
ubuntu2204:
type: boolean
description: 'Ubuntu 22.04'
default: true
env:
VAGRANT_TOKEN: ${{ secrets.VAGRANT_TOKEN }}
VAGRANT_ACCOUNT: ${{ secrets.VAGRANT_ACCOUNT }}
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Set matrix names
id: set-matrix
run: |
matrix=$(echo '{
"include": [
{"execute": '${{ github.event.inputs.centos8s || true }}', "name": "CentOS8S", "os": "centos8s", "distr": "generic"},
{"execute": '${{ github.event.inputs.centos9s || true }}', "name": "CentOS9S", "os": "centos9s", "distr": "generic"},
{"execute": '${{ github.event.inputs.debian11 || true }}', "name": "Debian11", "os": "debian11", "distr": "generic"},
{"execute": '${{ github.event.inputs.debian12 || true }}', "name": "Debian12", "os": "debian12", "distr": "generic"},
{"execute": '${{ github.event.inputs.ubuntu2004 || true }}', "name": "Ubuntu20.04", "os": "ubuntu2004", "distr": "generic"},
{"execute": '${{ github.event.inputs.ubuntu2204 || true }}', "name": "Ubuntu22.04", "os": "ubuntu2204", "distr": "generic"}
]
}' | jq -c '{include: [.include[] | select(.execute == true)]}')
echo "matrix=${matrix}" >> $GITHUB_OUTPUT
rebuild-boxes:
name: "Rebuild boxes DocSpace on ${{ matrix.name}}"
runs-on: ubuntu-22.04
needs: prepare
strategy:
fail-fast: false
matrix: ${{fromJSON(needs.prepare.outputs.matrix)}}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Get update and install vagrant
run: |
set -eux
sudo apt update -y
sudo apt install vagrant virtualbox -y
- name: Login Vagrant cloud
run: vagrant cloud auth login --token ${VAGRANT_TOKEN}
- name: Free Disk Space
run: |
sudo rm -rf /usr/local/lib/android /opt/ghc
sudo docker image prune --all --force
- name: Rebuild boxes
uses: nick-fields/retry@v3
with:
max_attempts: 2
timeout_minutes: 90
retry_on: error
command: |
set -eux
cd tests/vagrant
export date=$(date +%F)
TEST_CASE='--production-install' \
DISTR='${{matrix.distr}}' \
OS='${{ matrix.os }}' \
DOWNLOAD_SCRIPT='-ds true' \
RAM='5100' \
CPU='3' \
ARGUMENTS="-arg '--skiphardwarecheck true --makeswap false'" \
vagrant up
sleep 300
vagrant package --output repacked_${{ matrix.os }}.box
vagrant cloud publish \
${VAGRANT_ACCOUNT}/docspace-${{ matrix.os }} \
$date virtualbox repacked_${{ matrix.os }}.box \
-d "Box with pre-installed DocSpace" \
--version-description "DocSpace <version>" \
--release --short-description "Boxes for update testing" \
--force \
--no-private
on_retry_command: |
set -eux
echo "RUN CLEAN UP: Remove repacked box and destroy"
cd tests/vagrant
rm -rf repacked_${{ matrix.os }}.box
vagrant destroy --force

View File

@ -1,31 +0,0 @@
name: Release DocSpace
run-name: "Release Docker-DocSpace ${{ github.event.inputs.release_version }}"
on:
workflow_dispatch:
inputs:
repo:
description: 'hub.docker repo owner (ex. onlyoffice)'
type: string
required: true
default: 'onlyoffice'
release_version:
type: string
description: 'Tag for stable release (ex. 2.5.1.1)'
required: true
source_version:
type: string
description: '4testing tag from which the release will be created (ex. 2.5.1.2678)'
required: true
jobs:
docker-release:
uses: ONLYOFFICE/DocSpace-buildtools/.github/workflows/reusable-docspace-release.yaml@master
with:
repo: ${{ github.event.inputs.repo }}
release_version: ${{ github.event.inputs.release_version }}
source_version: ${{ github.event.inputs.source_version }}
secrets:
docker-username: ${{ secrets.DOCKERHUB_USERNAME }}
docker-usertoken: ${{ secrets.DOCKERHUB_TOKEN }}

View File

@ -1,49 +0,0 @@
name: "<reusable> release Docker-DocSpace"
on:
workflow_call:
inputs:
repo:
type: string
required: true
description: 'hub.docker repo owner (ex. onlyoffice)'
release_version:
type: string
required: true
description: 'Tag for stable release (ex. 1.0.0.1)'
source_version:
type: string
required: true
description: '4testing tag from which the release will be created (ex. 2.5.1.5678)'
secrets:
docker-username:
required: true
description: "hub.docker username"
docker-usertoken:
description: "hub.docker token"
required: true
jobs:
Release:
name: "Release Docker-DocSpace"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: 'ONLYOFFICE/DocSpace-buildtools'
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.docker-username }}
password: ${{ secrets.docker-usertoken }}
- name: "Release Docker-DocSpace"
shell: bash
env:
REPO: ${{ inputs.repo }}
DOCKER_TAG: ${{ inputs.source_version }}
RELEASE_VERSION: ${{ inputs.release_version }}
DOCKER_IMAGE_PREFIX: "4testing-docspace"
run: |
${GITHUB_WORKSPACE}/.github/scripts/release-docspace.sh

View File

@ -20,19 +20,10 @@ def help():
print("d Run dnsmasq.")
print()
rd = os.path.dirname(os.path.abspath(__file__))
dir = os.path.abspath(os.path.join(rd, ".."))
dockerDir = os.path.join(dir, "buildtools", "install", "docker")
networks = socket.gethostbyname_ex(socket.gethostname())
local_ip = networks[-1][-1]
if local_ip == "127.0.0.1":
local_ip = networks[-1][0]
if local_ip == "127.0.0.1":
print("Error: Local IP is 127.0.0.1", networks)
sys.exit(1)
local_ip = socket.gethostbyname_ex(socket.gethostname())[-1][-1]
doceditor = f"{local_ip}:5013"
login = f"{local_ip}:5011"
@ -114,7 +105,7 @@ if arch_name == "x86_64" or arch_name == "AMD64":
subprocess.run(["docker", "compose", "-f", os.path.join(dockerDir, "db.yml"), "up", "-d"])
elif arch_name == "arm64":
print("CPU Type: arm64 -> run db.yml with arm64v8 image")
os.environ["MYSQL_IMAGE"] = "arm64v8/mysql:8.3.0-oracle"
os.environ["MYSQL_IMAGE"] = "arm64v8/mysql:8.0.32-oracle"
subprocess.run(["docker", "compose", "-f", os.path.join(dockerDir, "db.yml"), "up", "-d"])
else:
print("Error: Unknown CPU Type:", arch_name)
@ -188,8 +179,7 @@ os.environ["SRC_PATH"] = os.path.join(dir, "publish/services")
os.environ["DATA_DIR"] = os.path.join(dir, "data")
os.environ["APP_URL_PORTAL"] = portal_url
os.environ["MIGRATION_TYPE"] = migration_type
subprocess.run(["docker", "compose", "-f", os.path.join(dockerDir, "docspace.profiles.yml"), "-f", os.path.join(
dockerDir, "docspace.overcome.yml"), "--profile", "migration-runner", "--profile", "backend-local", "up", "-d"])
subprocess.run(["docker-compose", "-f", os.path.join(dockerDir, "docspace.profiles.yml"), "-f", os.path.join(dockerDir, "docspace.overcome.yml"), "--profile", "migration-runner", "--profile", "backend-local", "up", "-d"])
print()
print("Run script directory:", dir)

View File

@ -1,42 +0,0 @@
import os
from github import Github
import requests
import shutil
rd = os.path.dirname(os.path.abspath(__file__))
dir = os.path.abspath(os.path.join(rd, ".."))
publicDir = os.path.join(dir, "client/public")
g = Github()
repo = g.get_repo("ONLYOFFICE/ASC.Web.Campaigns")
repoFolder = "src/campaigns"
def download(c, out):
r = requests.get(c.download_url)
output_path = f'{out}/{c.path}'
os.makedirs(os.path.dirname(output_path), exist_ok=True)
with open(output_path, 'wb') as f:
f.write(r.content)
def download_folder(repo, folder, out, recursive):
contents = repo.get_contents(folder)
for c in contents:
if c.download_url is None:
if recursive:
download_folder(repo, c.path, out, recursive)
continue
download(c, out)
def move_folder():
srcPath = publicDir + "/src"
campaignsPath = srcPath + "/campaigns"
newPath = publicDir + "/campaigns"
if os.path.exists(newPath):
shutil.rmtree(newPath)
shutil.move(campaignsPath, newPath)
shutil.rmtree(srcPath)
download_folder(repo, repoFolder, publicDir, True)
move_folder()
print("It's OK")

View File

@ -30,13 +30,10 @@
"ios": ""
}
},
"hcaptcha" : {
"private-key" : ""
},
"auth" : {
"allowskip" : {
"default" : false,
"registerportal": false
"registerportal": true
}
},
"ConnectionStrings": {

View File

@ -2,7 +2,7 @@
"AllowedHosts": "*",
"core": {
"base-domain": "",
"cors": "*",
"cors": "",
"machinekey": "1123askdasjklasbnd",
"notify": {
"postman": "log"
@ -24,16 +24,10 @@
"hosting": {
"intervalCheckRegisterInstanceInSeconds": "1",
"timeUntilUnregisterInSeconds": "15",
"singletonMode": false,
"rateLimiterOptions": {
"enable": "false",
"knownNetworks": [],
"knownIPAddresses": ["127.0.0.1"]
},
"singletonMode": true,
"forwardedHeadersOptions": {
"knownNetworks": [],
"knownProxies": ["127.0.0.1"],
"allowedHosts": []
"knownProxies": ["127.0.0.1"]
}
},
"themelimit": "9",
@ -43,9 +37,6 @@
"server-root": "",
"username": {
"regex": "^[\\p{L}\\p{M}' \\-]+$"
},
"tenantname": {
"regex": "^\\D*$"
}
},
"license": {
@ -69,17 +60,249 @@
}
},
"files": {
"thirdparty": { "enable": ["box", "dropboxv2", "docusign", "google", "onedrive", "nextcloud", "owncloud", "webdav", "kdrive" ] },
"thirdparty": {
"enable": [
"box",
"dropboxv2",
"docusign",
"google",
"onedrive",
"sharepoint",
"nextcloud",
"owncloud",
"webdav",
"kdrive"
]
},
"docservice": {
"coauthor-docs": [ ".csv", ".docm", ".docx", ".docxf", ".dotm", ".dotx", ".oform", ".pdf", ".potm", ".potx", ".ppsm", ".pptm", ".ppsx", ".pptx", ".txt", ".xlsm", ".xlsx", ".xltm", ".xltx" ],
"commented-docs": [ ".docm", ".docx", ".docxf", ".dotm", ".dotx", ".potm", ".potx", ".ppsm", ".pptm", ".ppsx", ".pptx", ".xlsm", ".xlsx", ".xltm", ".xltx" ],
"convert-docs": [ ".doc", ".dot", ".dps", ".dpt", ".epub", ".et", ".ett", ".fb2", ".fodp", ".fods", ".fodt", ".htm", ".html", ".mht", ".mhtml", ".odp", ".ods", ".odt", ".otp", ".ots", ".ott", ".pot", ".pps", ".ppt", ".rtf", ".stw", ".sxc", ".sxi", ".sxw", ".wps", ".wpt", ".xls", ".xlsb", ".xlt", ".xml" ],
"edited-docs": [ ".csv", ".doc", ".docm", ".docx", ".docxf", ".dot", ".dotm", ".dotx", ".dps", ".dpt", ".epub", ".et", ".ett", ".fb2", ".fodp", ".fods", ".fodt", ".htm", ".html", ".mht", ".mhtml", ".odp", ".ods", ".odt", ".oform", ".otp", ".ots", ".ott", ".pdf", ".pot", ".potm", ".potx", ".pps", ".ppsm", ".ppsx", ".ppt", ".pptm", ".pptx", ".rtf", ".stw", ".sxc", ".sxi", ".sxw", ".txt", ".wps", ".wpt", ".xls", ".xlsb", ".xlsm", ".xlsx", ".xlt", ".xltm", ".xltx", ".xml" ],
"encrypted-docs": [ ".docm", ".docx", ".docxf", ".dotm", ".dotx", ".oform", ".potm", ".potx", ".ppsm", ".pptm", ".ppsx", ".pptx", ".xlsm", ".xlsx", ".xltm", ".xltx", ".pdf" ],
"formfilling-docs": [".pdf"],
"customfilter-docs": [ ".xlsm", ".xlsx", ".xltm", ".xltx" ],
"reviewed-docs": [ ".docm", ".docx", ".docxf", ".dotm", ".dotx" ],
"viewed-docs": [ ".csv", ".djvu", ".doc", ".docm", ".docx", ".docxf", ".dot", ".dotm", ".dotx", ".dps", ".dpt", ".epub", ".et", ".ett", ".fb2", ".fodp", ".fods", ".fodt", ".gdoc", ".gsheet", ".gslides", ".htm", ".html", ".mht", ".mhtml", ".odp", ".ods", ".odt", ".oform", ".otp", ".ots", ".ott", ".oxps", ".pdf", ".pot", ".potm", ".potx", ".pps", ".ppsm", ".ppsx", ".ppt", ".pptm", ".pptx", ".rtf", ".stw", ".sxc", ".sxi", ".sxw", ".txt", ".wps", ".wpt", ".xls", ".xlsb", ".xlsm", ".xlsx", ".xlt", ".xltm", ".xltx", ".xml", ".xps" ],
"coauthor-docs": [
".csv",
".docm",
".docx",
".docxf",
".dotm",
".dotx",
".oform",
".potm",
".potx",
".ppsm",
".pptm",
".ppsx",
".pptx",
".txt",
".xlsm",
".xlsx",
".xltm",
".xltx"
],
"commented-docs": [
".docm",
".docx",
".docxf",
".dotm",
".dotx",
".potm",
".potx",
".ppsm",
".pptm",
".ppsx",
".pptx",
".xlsm",
".xlsx",
".xltm",
".xltx"
],
"convert-docs": [
".doc",
".dot",
".dps",
".dpt",
".epub",
".et",
".ett",
".fb2",
".fodp",
".fods",
".fodt",
".htm",
".html",
".mht",
".mhtml",
".odp",
".ods",
".odt",
".otp",
".ots",
".ott",
".pot",
".pps",
".ppt",
".rtf",
".stw",
".sxc",
".sxi",
".sxw",
".wps",
".wpt",
".xls",
".xlsb",
".xlt",
".xml"
],
"edited-docs": [
".csv",
".doc",
".docm",
".docx",
".docxf",
".dot",
".dotm",
".dotx",
".dps",
".dpt",
".epub",
".et",
".ett",
".fb2",
".fodp",
".fods",
".fodt",
".htm",
".html",
".mht",
".mhtml",
".odp",
".ods",
".odt",
".oform",
".otp",
".ots",
".ott",
".pot",
".potm",
".potx",
".pps",
".ppsm",
".ppsx",
".ppt",
".pptm",
".pptx",
".rtf",
".stw",
".sxc",
".sxi",
".sxw",
".txt",
".wps",
".wpt",
".xls",
".xlsb",
".xlsm",
".xlsx",
".xlt",
".xltm",
".xltx",
".xml"
],
"encrypted-docs":
[
".docm",
".docx",
".docxf",
".dotm",
".dotx",
".oform",
".potm",
".potx",
".ppsm",
".pptm",
".ppsx",
".pptx",
".xlsm",
".xlsx",
".xltm",
".xltx",
".pdf"
],
"formfilling-docs": [".oform"],
"customfilter-docs":
[
".xlsm",
".xlsx",
".xltm",
".xltx"
],
"reviewed-docs":
[
".docm",
".docx",
".docxf",
".dotm",
".dotx"
],
"viewed-docs":
[
".csv",
".djvu",
".doc",
".docm",
".docx",
".docxf",
".dot",
".dotm",
".dotx",
".dps",
".dpt",
".epub",
".et",
".ett",
".fb2",
".fodp",
".fods",
".fodt",
".gdoc",
".gsheet",
".gslides",
".htm",
".html",
".mht",
".mhtml",
".odp",
".ods",
".odt",
".oform",
".otp",
".ots",
".ott",
".oxps",
".pdf",
".pot",
".potm",
".potx",
".pps",
".ppsm",
".ppsx",
".ppt",
".pptm",
".pptx",
".rtf",
".stw",
".sxc",
".sxi",
".sxw",
".txt",
".wps",
".wpt",
".xls",
".xlsb",
".xlsm",
".xlsx",
".xlt",
".xltm",
".xltx",
".xml",
".xps"
],
"secret": {
"value": "secret",
"header": "AuthorizationJwt"
@ -98,27 +321,51 @@
"chunk-size": 10485760,
"url": "/"
},
"viewed-images": [ ".svg", ".bmp", ".gif", ".jpeg", ".jpg", ".png", ".ico", ".tif", ".tiff", ".webp" ],
"viewed-media": [ ".aac", ".flac", ".m4a", ".mp3", ".oga", ".ogg", ".wav", ".f4v", ".m4v", ".mov", ".mp4", ".ogv", ".webm" ],
"index": [".pptx", ".xlsx", ".docx", ".pdf"],
"viewed-images": [
".svg",
".bmp",
".gif",
".jpeg",
".jpg",
".png",
".ico",
".tif",
".tiff",
".webp"
],
"viewed-media": [
".aac",
".flac",
".m4a",
".mp3",
".oga",
".ogg",
".wav",
".f4v",
".m4v",
".mov",
".mp4",
".ogv",
".webm"
],
"index": [".pptx", ".xlsx", ".docx"],
"oform": {
"domain": "https://cmsoforms.teamlab.info",
"path": "/api/oforms/",
"ext": ".pdf",
"ext": ".oform",
"upload": {
"domain": "https://oforms.teamlab.info",
"path": "/api/upload",
"ext": ".pdf",
"ext": ".docxf",
"dashboard": "/dashboard/api"
},
"signature": "ONLYOFFICEFORM"
}
}
},
"web": {
"api": "api/2.0",
"alias": {
"min": 3,
"max": 63
"max": 100
},
"api-system": "",
"api-cache": "",
@ -128,10 +375,7 @@
"url": "/socket.io",
"internal": "http://localhost:9899/"
},
"cultures": "az,cs,de,en-GB,en-US,es,fr,it,lv,nl,pl,pt-BR,pt,ro,sk,sl,fi,vi,tr,el-GR,bg,ru,sr-Cyrl-RS,sr-Latn-RS,uk-UA,hy-AM,ar-SA,si,lo-LA,zh-CN,ja-JP,ko-KR",
"logo": {
"custom-cultures": ["zh-CN"]
},
"cultures": "az,bg,cs,de,el-GR,en-GB,en-US,es,fi,fr,hy-AM,it,lv,nl,pl,pt,pt-BR,ro,ru,sk,sl,vi,tr,uk-UA,ar-SA,lo-LA,ja-JP,zh-CN,ko-KR",
"controlpanel": {
"url": ""
},
@ -145,7 +389,6 @@
"documentation-email": "documentation@onlyoffice.com",
"max-upload-size": 5242880,
"zendesk-key": "",
"tagmanager-id": "",
"samesite": "",
"sso": {
"saml": {
@ -160,10 +403,6 @@
"recaptcha": {
"public-key": "",
"private-key": ""
},
"hcaptcha" : {
"public-key": "",
"private-key": ""
}
},
"ConnectionStrings": {
@ -227,8 +466,47 @@
"thumbnail": {
"maxDegreeOfParallelism": 1,
"sizes": [
{ "height": 720, "width": 1280, "resizeMode": "Manual" },
{ "height": 2160, "width": 3840, "resizeMode": "Manual" }
{
"height": 156,
"width": 216
},
{
"height": 156,
"width": 240
},
{
"height": 156,
"width": 264
},
{
"height": 156,
"width": 288
},
{
"height": 156,
"width": 312
},
{
"height": 156,
"width": 336
},
{
"height": 156,
"width": 360
},
{
"height": 156,
"width": 400
},
{
"height": 156,
"width": 440
},
{
"height": 720,
"width": 1280,
"resizeMode": "Max"
}
]
},
"csp": {
@ -239,7 +517,7 @@
"img": ["'self'", "data:", "blob:"],
"frame": ["'self'"],
"fonts": ["'self'", "data:"],
"connect": ["'self'", "data:", "ws:"],
"connect": ["'self'", "data:"],
"media": ["'self'"]
},
"zendesk": {
@ -251,18 +529,11 @@
"firebase": {
"script": ["*.googleapis.com", "*.firebaseio.com"],
"frame": ["personal-teamlab-guru.firebaseapp.com"],
"img": ["personal-teamlab-guru.firebaseapp.com"],
"connect": ["personal-teamlab-guru.firebaseapp.com", "*.googleapis.com"]
},
"oform": {
"img": ["static-oforms.teamlab.info"],
"connect": ["cmsoforms.teamlab.info", "oforms.teamlab.info"]
},
"captcha": {
"script": ["*.google.com", "*.gstatic.com", "hcaptcha.com", "*.hcaptcha.com"],
"style": ["hcaptcha.com", "*.hcaptcha.com"],
"frame": ["*.google.com", "hcaptcha.com", "*.hcaptcha.com"],
"connect": ["hcaptcha.com", "*.hcaptcha.com"]
}
},
"logocolors": [
@ -304,35 +575,5 @@
"region": "us-east-1",
"tableName": ""
}
},
"webhooks": {
"blacklist": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.168.0.0/16",
"::/128",
"::1/128",
"fc00::/8",
"fd00::/8",
"fe80::/64"
]
},
"openApi": {
"enable": true,
"enableUI": true,
"endpoints": {
"asc.web.api": "/openapi/asc.web.api/common.yaml",
"asc.people": "/openapi/asc.people/common.yaml",
"asc.files": "/openapi/asc.files/common.yaml",
"asc.data.backup": "/openapi/asc.data.backup/common.yaml"
}
},
"urlShortener":{
"length": 15,
"alphabet": "5XzpDt6wZRdsTrJkSY_cgPyxN4j-fnb9WKBF8vh3GH72QqmLVCM"
}
}

View File

@ -146,7 +146,9 @@
"dropboxClientSecret": ""
},
"additional": {
"dropboxRedirectUrl" : "https://service.teamlab.info/oauth2.aspx"
"dropboxRedirectUrl" : "https://service.teamlab.info/oauth2.aspx",
"dropboxappkey" : "",
"dropboxappsecret" : ""
}
}
},

View File

@ -1,7 +1,7 @@
{
"elastic": {
"Scheme": "http",
"Host": "onlyoffice-opensearch",
"Host": "onlyoffice-elasticsearch",
"Port": "9200",
"Threads": "1"
}

3
config/kafka.json Normal file
View File

@ -0,0 +1,3 @@
{
"kafka": {}
}

5
config/kafka.test.json Normal file
View File

@ -0,0 +1,5 @@
{
"kafka": {
"BootstrapServers": "localhost:9092"
}
}

View File

@ -1,89 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/x-icon" href="/logo.ashx?logotype=3" />
<title>401 Error Page</title>
<style>
body,
html {
height: 100%;
margin: 0px;
font-family: "Open Sans", Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
background-color: #f0f0f0;
}
.error-container {
display: flex;
align-items: center;
flex-direction: column;
cursor: default;
width: auto;
height: 100vh;
overflow-x: hidden;
margin: 0px auto;
padding-top: 36px;
border: 0px;
box-sizing: border-box;
text-align: center;
}
.error-image {
max-width: 100%;
height: auto;
margin-bottom: 40px;
}
.error-header {
font-size: 23px;
line-height: 28px;
font-weight: 700;
color: #333333;
margin: 0px;
margin-bottom: 8px;
}
.error-text {
font-size: 12px;
line-height: 16px;
font-weight: 400;
color: #555f65;
margin: 0px;
margin-bottom: 24px;
}
@media (max-width: 600px) {
.error-container {
width: 343px;
}
.error-image {
width: 200px;
height: 200px;
}
.error-text {
max-width: 287px;
text-align: center;
}
}
</style>
</head>
<body>
<div class="error-container">
<img
src="/static/images/error401.svg"
alt="Error Character"
class="error-image"
/>
<h1 class="error-header">401 Error!</h1>
<p class="error-text">
Unauthorized request. To access this file, you must enter a password or
be a registered user.
</p>
</div>
</body>
</html>

View File

@ -1,88 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/x-icon" href="/logo.ashx?logotype=3" />
<title>403 Error Page</title>
<style>
body,
html {
height: 100%;
margin: 0px;
font-family: "Open Sans", Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
background-color: #f0f0f0;
}
.error-container {
display: flex;
align-items: center;
flex-direction: column;
cursor: default;
width: auto;
height: 100vh;
overflow-x: hidden;
margin: 0px auto;
padding-top: 36px;
border: 0px;
box-sizing: border-box;
text-align: center;
}
.error-image {
max-width: 100%;
height: auto;
margin-bottom: 40px;
}
.error-header {
font-size: 23px;
line-height: 28px;
font-weight: 700;
color: #333333;
margin: 0px;
margin-bottom: 8px;
}
.error-text {
font-size: 12px;
line-height: 16px;
font-weight: 400;
color: #555f65;
margin: 0px;
margin-bottom: 24px;
}
@media (max-width: 600px) {
.error-container {
width: 343px;
}
.error-image {
width: 200px;
height: 200px;
}
.error-text {
max-width: 287px;
text-align: center;
}
}
</style>
</head>
<body>
<div class="error-container">
<img
src="/static/images/error403.svg"
alt="Error Character"
class="error-image"
/>
<h1 class="error-header">403 Error!</h1>
<p class="error-text">
Forbidden. You don't have permissions to access the requested resource.
</p>
</div>
</body>
</html>

View File

@ -1,88 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/x-icon" href="/logo.ashx?logotype=3" />
<title>404 Error Page</title>
<style>
body,
html {
height: 100%;
margin: 0px;
font-family: "Open Sans", Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
background-color: #f0f0f0;
}
.error-container {
display: flex;
align-items: center;
flex-direction: column;
cursor: default;
width: auto;
height: 100vh;
overflow-x: hidden;
margin: 0px auto;
padding-top: 36px;
border: 0px;
box-sizing: border-box;
text-align: center;
}
.error-image {
max-width: 100%;
height: auto;
margin-bottom: 40px;
}
.error-header {
font-size: 23px;
line-height: 28px;
font-weight: 700;
color: #333333;
margin: 0px;
margin-bottom: 8px;
}
.error-text {
font-size: 12px;
line-height: 16px;
font-weight: 400;
color: #555f65;
margin: 0px;
margin-bottom: 24px;
}
@media (max-width: 600px) {
.error-container {
width: 343px;
}
.error-image {
width: 200px;
height: 200px;
}
.error-text {
max-width: 287px;
text-align: center;
}
}
</style>
</head>
<body>
<div class="error-container">
<img
src="/static/images/error404.svg"
alt="Error Character"
class="error-image"
/>
<h1 class="error-header">404 Error!</h1>
<p class="error-text">
Page not found. The server cannot find the requested resource.
</p>
</div>
</body>
</html>

View File

@ -1,88 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/x-icon" href="/logo.ashx?logotype=3" />
<title>500 Error Page</title>
<style>
body,
html {
height: 100%;
margin: 0px;
font-family: "Open Sans", Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
background-color: #f0f0f0;
}
.error-container {
display: flex;
align-items: center;
flex-direction: column;
cursor: default;
width: auto;
height: 100vh;
overflow-x: hidden;
margin: 0px auto;
padding-top: 36px;
border: 0px;
box-sizing: border-box;
text-align: center;
}
.error-image {
max-width: 100%;
height: auto;
margin-bottom: 40px;
}
.error-header {
font-size: 23px;
line-height: 28px;
font-weight: 700;
color: #333333;
margin: 0px;
margin-bottom: 8px;
}
.error-text {
font-size: 12px;
line-height: 16px;
font-weight: 400;
color: #555f65;
margin: 0px;
margin-bottom: 24px;
}
@media (max-width: 600px) {
.error-container {
width: 343px;
}
.error-image {
width: 200px;
height: 200px;
}
.error-text {
max-width: 287px;
text-align: center;
}
}
</style>
</head>
<body>
<div class="error-container">
<img
src="/static/images/error500.svg"
alt="Error Character"
class="error-image"
/>
<h1 class="error-header">500 Error!</h1>
<p class="error-text">
The server is currently unable to handle this request.
</p>
</div>
</body>
</html>

View File

@ -44,9 +44,9 @@ map $request_uri $header_x_frame_options {
map $request_uri $cache_control {
default "no-cache, no-store, no-transform";
~*\/(filehandler\.ashx\?action=(thumb|preview))|\/(storage\/room_logos\/root\/.*\?hash.*|storage\/userPhotos\/root\/.*\?hash.*|storage\/whitelabel\/root\/.*\?hash.*|storage\/static_partnerdata\/root\/.*\?hash.*) "must-revalidate, no-transform, immutable, max-age=31536000";
~*\/(api\/2\.0.*|storage|login\.ashx|filehandler\.ashx|ChunkedUploader.ashx|ThirdPartyAppHandler|apisystem|sh|remoteEntry\.js|debuginfo\.md|static\/scripts\/api\.js|static\/scripts\/sdk\/.*|static\/scripts\/api\.poly\.js) "no-cache, no-store, no-transform";
~*\/(static\/images\/.*)|\/(_next\/public\/images\/.*)|\.(js|woff|woff2|css)|(locales.*\.json) "must-revalidate, no-transform, immutable, max-age=31536000";
~*\/(filehandler\.ashx\?action=(thumb|preview))|\/(storage\/room_logos\/root\/|storage\/userPhotos\/root\/) "must-revalidate, no-transform, immutable, max-age=31536000";
~*\/(api\/2\.0.*|storage|login\.ashx|filehandler\.ashx|ChunkedUploader.ashx|ThirdPartyAppHandler|apisystem|sh|remoteEntry\.js|debuginfo\.md|static\/scripts\/api\.js|static\/scripts\/api\.poly\.js) "no-cache, no-store, no-transform";
~*\/(images|favicon.ico.*)|\.(js|woff|woff2|css)|(locales.*\.json) "must-revalidate, no-transform, immutable, max-age=31536000";
}
map $request_uri $content_security_policy {
@ -66,7 +66,10 @@ server {
add_header X-Frame-Options $header_x_frame_options;
add_header Cache-Control $cache_control;
add_header Permissions-Policy "autoplay=(), geolocation=(), camera=(), microphone=(), interest-cohort=()";
add_header Cross-Origin-Embedder-Policy "require-corp";
add_header X-XSS-Protection "1; mode=block";
add_header Cross-Origin-Opener-Policy "same-origin";
root $public_root;
etag on;
@ -102,8 +105,7 @@ server {
set $csp "";
access_by_lua '
local accept_header = ngx.req.get_headers()["Accept"]
if ngx.req.get_method() == "GET" and accept_header ~= nil and string.find(accept_header, "html") and not ngx.re.match(ngx.var.request_uri, "ds-vpath|/api/") then
if ngx.req.get_method() == "GET" and accept_header ~= nil and string.find(accept_header, "html") and not ngx.re.match(ngx.var.request_uri, "ds-vpath") then
local key = string.format("csp:%s",ngx.var.host)
local redis = require "resty.redis"
local red = redis:new()
@ -158,23 +160,10 @@ server {
}
location ^~ /dashboards/ {
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd_dashboards;
rewrite ^/dashboards(/.*)$ $1 break;
proxy_pass http://127.0.0.1:5601;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
}
location / {
proxy_pass http://127.0.0.1:5001;
proxy_redirect off;
location ~* /(manifest.json|sw.js|appIcon(.)*\.png|icon.svg|bg-error.png|debuginfo.md) {
location ~* /(manifest.json|sw.js|appIcon(.)*\.png|icon.svg|bg-error.png|favicon.ico|debuginfo.md) {
try_files /$basename /index.html =404;
}
@ -199,8 +188,8 @@ server {
try_files /locales/$content/$basename /index.html =404;
}
location ~* /static/scripts/(.*)$ {
try_files /scripts/$1 /index.html =404;
location ~* /static/scripts/ {
try_files /scripts/$basename /index.html =404;
}
location ~* /static/plugins/ {
@ -210,29 +199,44 @@ server {
location ~* /static/images/(.*)$ {
try_files /images/$1 /index.html =404;
}
location ~* /static/campaigns/(.*)$ {
try_files /campaigns/$1 /index.html =404;
}
}
location /doceditor {
proxy_pass http://127.0.0.1:5013;
proxy_redirect off;
location ~* /_next/public/images/(.*)$ {
location ~* /static/favicon.ico {
try_files /$basename /index.html =404;
}
location ~* /static/images/(.*)$ {
try_files /images/$1 /index.html =404;
}
location ~* /static/css/ {
try_files /css/$basename /index.html =404;
}
location ~* /static/fonts/(?<content>[^/]+) {
try_files /fonts/$content/$basename /index.html =404;
}
}
location /login {
proxy_pass http://127.0.0.1:5011;
proxy_redirect off;
location ~* /_next/public/images/(.*)$ {
location ~* /static/favicon.ico {
try_files /$basename /index.html =404;
}
location ~* /static/images/(.*)$ {
try_files /images/$1 /index.html =404;
}
location ~* /static/css/ {
try_files /css/$basename /index.html =404;
}
}
location /management {
@ -267,36 +271,16 @@ server {
proxy_pass http://127.0.0.1:5000;
}
location /openapi {
proxy_pass http://127.0.0.1:5003;
location ~*/asc.web.api {
proxy_pass http://127.0.0.1:5000;
}
location ~*/asc.people {
proxy_pass http://127.0.0.1:5004;
}
location ~*/asc.files {
proxy_pass http://127.0.0.1:5007;
}
location ~*/asc.data.backup {
proxy_pass http://127.0.0.1:5012;
}
}
location /api/2.0 {
location ~* /(files|privacyroom) {
proxy_pass http://127.0.0.1:5007;
}
location ~* /(people|group|accounts) {
location ~* /(people|group) {
proxy_pass http://127.0.0.1:5004;
}
location ~* /(authentication|modules|portal|security|settings|smtpsettings|capabilities|thirdparty|encryption|feed|migration) {
location ~* /(authentication|modules|portal|security|settings|smtpsettings|capabilities|thirdparty|encryption|feed) {
proxy_pass http://127.0.0.1:5000;
location ~* portal/(.*)(backup|restore)(.*) {
@ -315,12 +299,8 @@ server {
location ~* /backup {
proxy_pass http://127.0.0.1:5012;
}
location ~* /plugins {
proxy_pass http://127.0.0.1:5014;
}
location ~* /migration {
location ~* /migration {
proxy_pass http://127.0.0.1:5034;
}
}
@ -347,18 +327,10 @@ server {
proxy_pass http://127.0.0.1:5012;
}
location /migrationFileUpload.ashx {
proxy_pass http://127.0.0.1:5000;
}
location /logoUploader.ashx {
proxy_pass http://127.0.0.1:5000;
}
location /logo.ashx {
proxy_pass http://127.0.0.1:5000;
}
location /payment.ashx {
proxy_pass http://127.0.0.1:5000;
}
@ -389,28 +361,4 @@ server {
rewrite /healthchecks/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:5033;
}
error_page 401 /custom_401.html;
location = /custom_401.html {
root /etc/nginx/html;
internal;
}
error_page 403 /custom_403.html;
location = /custom_403.html {
root /etc/nginx/html;
internal;
}
error_page 404 /custom_404.html;
location = /custom_404.html {
root /etc/nginx/html;
internal;
}
error_page 500 502 503 504 /custom_50x.html;
location = /custom_50x.html {
root /etc/nginx/html;
internal;
}
}

View File

@ -6,17 +6,16 @@
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
<add assembly="NLog.AWS.Logger" />
<add assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<variable name="dir" value="..\Logs\"/>
<variable name="name" value="web"/>
<targets async="true">
<default-target-parameters type="File" maxArchiveDays="30" archiveNumbering="DateAndSequence" archiveEvery="Day" enableArchiveFileCompression="true" archiveAboveSize="52428800" archiveDateFormat="MM-dd" layout="${date:format=yyyy-MM-dd HH\:mm\:ss,fff}|${level:uppercase=true}|[${threadid}]|${logger} - ${message}|${exception:format=ToString}"/>
<default-target-parameters type="File" maxArchiveDays="30" archiveNumbering="DateAndSequence" archiveEvery="Day" enableArchiveFileCompression="true" archiveAboveSize="52428800" archiveDateFormat="MM-dd" layout="${date:format=yyyy-MM-dd HH\:mm\:ss,fff} ${level:uppercase=true} [${threadid}] ${logger} - ${message} ${exception:format=ToString}"/>
<target name="web" type="File" fileName="${var:dir}${var:name}.log" />
<target name="sql" type="File" fileName="${var:dir}${var:name}.sql.log" layout="${date:universalTime=true:format=yyyy-MM-dd HH\:mm\:ss,fff}|${threadid}|${event-properties:item=elapsed}|${replace:inner=${event-properties:item=commandText}:searchFor=\\r\\n|\\s:replaceWith= :regex=true}|${event-properties:item=parameters}"/>
<target name="ownFile-web" type="File" fileName="${var:dir}${var:name}.asp.log" layout="${date:format=yyyy-MM-dd HH\:mm\:ss,fff}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
<target name="ownFile-web" type="File" fileName="${var:dir}${var:name}.asp.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
<target name="lifetimeConsole" type="Console" layout="${MicrosoftConsoleLayout}" />
<target type="AWSTarget" name="aws" logGroup="/asc/docspace/cluster/cluster_name/general" region="us-east-1" LogStreamNamePrefix="${hostname} - ${application-context}">
@ -42,12 +41,8 @@
<attribute name="commandText" layout="${replace:inner=${event-properties:item=commandText}:searchFor=\\r\\n|\\s:replaceWith= :regex=true}" />
</layout>
</target>
<target name="elastic" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch" includeAllProperties="true" />
</target>
</targets>
<rules>
<logger name="ASC.Api.Core.Auth.CookieAuthHandler" maxlevel="Off" final="true" />
<logger name="ASC.SQL" minlevel="Debug" writeTo="sql" final="true" />
<logger name="ASC*" minlevel="Debug" writeTo="web">
<filters defaultAction="Log">
@ -59,7 +54,6 @@
<when condition="regex-matches('${scope-property:RequestPath}', '^/health/?$', 'ignorecase,singleline')" action="Ignore" />
</filters>
</logger>
<logger name="Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware" maxlevel="Information" writeTo="ownFile-web" final="true" />
<logger name="Microsoft.*" maxlevel="Off" final="true" />
<logger name="System.Net.Http.*" maxlevel="Info" final="true" />
</rules>

View File

@ -24,7 +24,6 @@
"data": "e67be73d-f9ae-4ce1-8fec-1880cb518cb4",
"type": "disc",
"path": "$STORAGE_ROOT\\Products\\Files",
"validatorType":"ASC.Files.Core.Security.FileValidator, ASC.Files.Core",
"expires": "0:16:0",
"domain": [
{
@ -87,8 +86,7 @@
"type": "disc",
"path": "$STORAGE_ROOT\\Studio\\{0}\\CoBranding",
"virtualpath": "~/studio/{0}/cobranding",
"public": true,
"contentAsAttachment": true
"public": true
},
{
"name": "static_partnerdata",
@ -115,22 +113,6 @@
"path": "$STORAGE_ROOT\\Studio\\{0}\\temp\\backup",
"expires": "0:10:0",
"disableEncryption": true
},
{
"name": "migration",
"visible": false,
"type": "disc",
"path": "$STORAGE_ROOT\\Studio\\{0}\\migration",
"expires": "0:10:0",
"disableEncryption": true
},
{
"name": "migration_log",
"visible": false,
"type": "disc",
"path": "$STORAGE_ROOT\\Studio\\{0}\\log\\migration",
"expires": "0:10:0",
"disableEncryption": true
},
{
"name": "customnavigation",

5
config/zookeeper.json Normal file
View File

@ -0,0 +1,5 @@
{
"Zookeeper": {
}
}

View File

@ -0,0 +1,6 @@
{
"Zookeeper": {
"host": "localhost",
"port": 2181
}
}

View File

@ -35,7 +35,6 @@ PARAMETERS="$PARAMETERS -it COMMUNITY";
DOCKER="";
LOCAL_SCRIPTS="false"
product="docspace"
product_sysname="onlyoffice";
FILE_NAME="$(basename "$0")"
while [ "$1" != "" ]; do
@ -105,7 +104,7 @@ install_curl () {
}
read_installation_method () {
echo "Select 'Y' to install ${product_sysname^^} $product using Docker (recommended). Select 'N' to install it using RPM/DEB packages.";
echo "Select 'Y' to install ONLYOFFICE $product using Docker (recommended). Select 'N' to install it using RPM/DEB packages.";
read -p "Install with Docker [Y/N/C]? " choice
case "$choice" in
y|Y )
@ -136,47 +135,39 @@ if ! command_exists curl ; then
install_curl;
fi
if command_exists docker &> /dev/null && docker ps -a --format '{{.Names}}' | grep -q "${product_sysname}-api"; then
DOCKER="true"
elif command_exists apt-get &> /dev/null && dpkg -s ${product}-api >/dev/null 2>&1; then
DOCKER="false"
elif command_exists yum &> /dev/null && rpm -q ${product}-api >/dev/null 2>&1; then
DOCKER="false"
fi
if [ -z "$DOCKER" ]; then
read_installation_method;
fi
if [ -z $GIT_BRANCH ]; then
DOWNLOAD_URL_PREFIX="https://download.${product_sysname}.com/${product}"
DOWNLOAD_URL_PREFIX="https://download.onlyoffice.com/${product}"
else
DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/${product_sysname^^}/${product}-buildtools/${GIT_BRANCH}/install/OneClickInstall"
DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}-buildtools/${GIT_BRANCH}/install/OneClickInstall"
fi
if [ "$DOCKER" == "true" ]; then
if [ "$LOCAL_SCRIPTS" == "true" ]; then
bash install-Docker.sh ${PARAMETERS} || EXIT_CODE=$?
bash install-Docker.sh ${PARAMETERS}
else
curl -s -O ${DOWNLOAD_URL_PREFIX}/install-Docker.sh
bash install-Docker.sh ${PARAMETERS} || EXIT_CODE=$?
bash install-Docker.sh ${PARAMETERS}
rm install-Docker.sh
fi
else
if [ -f /etc/redhat-release ] ; then
if [ "$LOCAL_SCRIPTS" == "true" ]; then
bash install-RedHat.sh ${PARAMETERS} || EXIT_CODE=$?
bash install-RedHat.sh ${PARAMETERS}
else
curl -s -O ${DOWNLOAD_URL_PREFIX}/install-RedHat.sh
bash install-RedHat.sh ${PARAMETERS} || EXIT_CODE=$?
bash install-RedHat.sh ${PARAMETERS}
rm install-RedHat.sh
fi
elif [ -f /etc/debian_version ] ; then
if [ "$LOCAL_SCRIPTS" == "true" ]; then
bash install-Debian.sh ${PARAMETERS} || EXIT_CODE=$?
bash install-Debian.sh ${PARAMETERS}
else
curl -s -O ${DOWNLOAD_URL_PREFIX}/install-Debian.sh
bash install-Debian.sh ${PARAMETERS} || EXIT_CODE=$?
bash install-Debian.sh ${PARAMETERS}
rm install-Debian.sh
fi
else
@ -184,5 +175,3 @@ else
exit 1;
fi
fi
exit ${EXIT_CODE:-0}

View File

@ -13,7 +13,6 @@ RES_APP_CHECK_PORTS="uses ports"
RES_CHECK_PORTS="please, make sure that the ports are free.";
RES_INSTALL_SUCCESS="Thank you for installing ONLYOFFICE ${product_name}.";
RES_QUESTIONS="In case you have any questions contact us via http://support.onlyoffice.com or visit our forum at http://forum.onlyoffice.com"
INSTALL_FLUENT_BIT="true"
while [ "$1" != "" ]; do
case $1 in
@ -54,27 +53,6 @@ while [ "$1" != "" ]; do
fi
;;
-ifb | --installfluentbit )
if [ "$2" != "" ]; then
INSTALL_FLUENT_BIT=$2
shift
fi
;;
-du | --dashboadrsusername )
if [ "$2" != "" ]; then
DASHBOARDS_USERNAME=$2
shift
fi
;;
-dp | --dashboadrspassword )
if [ "$2" != "" ]; then
DASHBOARDS_PASSWORD=$2
shift
fi
;;
-ls | --localscripts )
if [ "$2" != "" ]; then
LOCAL_SCRIPTS=$2
@ -111,9 +89,6 @@ while [ "$1" != "" ]; do
echo " -je, --jwtenabled specifies the enabling the JWT validation (true|false)"
echo " -jh, --jwtheader defines the http header that will be used to send the JWT"
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -ifb, --installfluentbit install or update fluent-bit (true|false)"
echo " -du, --dashboadrsusername login for authorization in /dashboards/"
echo " -dp, --dashboadrspassword password for authorization in /dashboards/"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -skiphc, --skiphardwarecheck use to skip hardware check (true|false)"
echo " -ms, --makeswap make swap file (true|false)"

View File

@ -79,7 +79,7 @@ elif [ "$UPDATE" = "true" ] && [ "$PRODUCT_INSTALLED" = "true" ]; then
CURRENT_VERSION=$(dpkg-query -W -f='${Version}' ${product} 2>/dev/null)
AVAILABLE_VERSIONS=$(apt show ${product} 2>/dev/null | grep -E '^Version:' | awk '{print $2}')
if [[ "$AVAILABLE_VERSIONS" != *"$CURRENT_VERSION"* ]]; then
apt-get install -o DPkg::options::="--force-confnew" -y --only-upgrade ${product} opensearch=${ELASTIC_VERSION}
apt-get install -o DPkg::options::="--force-confnew" -y --only-upgrade ${product} elasticsearch=${ELASTIC_VERSION}
elif [ "${RECONFIGURE_PRODUCT}" = "true" ]; then
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure ${product}
fi

View File

@ -10,8 +10,6 @@ cat<<EOF
EOF
hold_package_version
if [ "$DIST" = "debian" ] && [ $(apt-cache search ttf-mscorefonts-installer | wc -l) -eq 0 ]; then
echo "deb http://ftp.uk.debian.org/debian/ $DISTRIB_CODENAME main contrib" >> /etc/apt/sources.list
echo "deb-src http://ftp.uk.debian.org/debian/ $DISTRIB_CODENAME main contrib" >> /etc/apt/sources.list
@ -33,30 +31,23 @@ fi
locale-gen en_US.UTF-8
# add opensearch repo
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" > /etc/apt/sources.list.d/opensearch-2.x.list
ELASTIC_VERSION="2.11.1"
#add opensearch dashboards repo
if [ ${INSTALL_FLUENT_BIT} == "true" ]; then
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/apt stable main" > /etc/apt/sources.list.d/opensearch-dashboards-2.x.list
DASHBOARDS_VERSION="2.11.1"
fi
# add elasticsearch repo
ELASTIC_VERSION="7.16.3"
ELASTIC_DIST=$(echo $ELASTIC_VERSION | awk '{ print int($1) }')
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/elastic-${ELASTIC_DIST}.x.gpg --import
echo "deb [signed-by=/usr/share/keyrings/elastic-${ELASTIC_DIST}.x.gpg] https://artifacts.elastic.co/packages/${ELASTIC_DIST}.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-${ELASTIC_DIST}.x.list
chmod 644 /usr/share/keyrings/elastic-${ELASTIC_DIST}.x.gpg
# add nodejs repo
NODE_VERSION="18"
curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash -
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import
chmod 644 /usr/share/keyrings/nodesource.gpg
#add dotnet repo
if [ "$DIST" = "debian" ] || [ "$DISTRIB_CODENAME" = "focal" ]; then
curl https://packages.microsoft.com/config/$DIST/$REV/packages-microsoft-prod.deb -O
echo -e "Package: *\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 1002" | tee /etc/apt/preferences.d/99microsoft-prod.pref
dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb
elif dpkg -l | grep -q packages-microsoft-prod; then
apt-get purge -y packages-microsoft-prod
fi
curl https://packages.microsoft.com/config/$DIST/$REV/packages-microsoft-prod.deb -O
echo -e "Package: *\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 1002" | tee /etc/apt/preferences.d/99microsoft-prod.pref
dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb
MYSQL_REPO_VERSION="$(curl https://repo.mysql.com | grep -oP 'mysql-apt-config_\K.*' | grep -o '^[^_]*' | sort --version-sort --field-separator=. | tail -n1)"
MYSQL_PACKAGE_NAME="mysql-apt-config_${MYSQL_REPO_VERSION}_all.deb"
@ -67,19 +58,19 @@ if ! dpkg -l | grep -q "mysql-server"; then
MYSQL_SERVER_USER=${MYSQL_SERVER_USER:-"root"}
MYSQL_SERVER_PASS=${MYSQL_SERVER_PASS:-"$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12)"}
# setup mysql 8.4 package
# setup mysql 8.0 package
curl -OL http://repo.mysql.com/${MYSQL_PACKAGE_NAME}
echo "mysql-apt-config mysql-apt-config/repo-codename select $DISTRIB_CODENAME" | debconf-set-selections
echo "mysql-apt-config mysql-apt-config/repo-distro select $DIST" | debconf-set-selections
echo "mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts" | debconf-set-selections
echo "mysql-apt-config mysql-apt-config/select-server select mysql-8.0" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive dpkg -i ${MYSQL_PACKAGE_NAME}
rm -f ${MYSQL_PACKAGE_NAME}
echo mysql-community-server mysql-community-server/root-pass password ${MYSQL_SERVER_PASS} | debconf-set-selections
echo mysql-community-server mysql-community-server/re-root-pass password ${MYSQL_SERVER_PASS} | debconf-set-selections
echo mysql-community-server mysql-server/default-auth-override select "Use Strong Password Encryption (RECOMMENDED)" | debconf-set-selections
echo mysql-server mysql-server/root_password password ${MYSQL_SERVER_PASS} | debconf-set-selections
echo mysql-server mysql-server/root_password_again password ${MYSQL_SERVER_PASS} | debconf-set-selections
echo mysql-server-8.0 mysql-server/root_password password ${MYSQL_SERVER_PASS} | debconf-set-selections
echo mysql-server-8.0 mysql-server/root_password_again password ${MYSQL_SERVER_PASS} | debconf-set-selections
elif dpkg -l | grep -q "mysql-apt-config" && [ "$(apt-cache policy mysql-apt-config | awk 'NR==2{print $2}')" != "${MYSQL_REPO_VERSION}" ]; then
curl -OL http://repo.mysql.com/${MYSQL_PACKAGE_NAME}
@ -87,27 +78,23 @@ elif dpkg -l | grep -q "mysql-apt-config" && [ "$(apt-cache policy mysql-apt-con
rm -f ${MYSQL_PACKAGE_NAME}
fi
# add redis repo --- temporary fix for complete installation on Ubuntu 24.04. REDIS_DIST_CODENAME change to DISTRIB_CODENAME
# add redis repo
if [ "$DIST" = "ubuntu" ]; then
[[ "$DISTRIB_CODENAME" =~ noble ]] && REDIS_DIST_CODENAME="jammy" || REDIS_DIST_CODENAME="${DISTRIB_CODENAME}"
curl -fsSL https://packages.redis.io/gpg | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/redis.gpg --import
echo "deb [signed-by=/usr/share/keyrings/redis.gpg] https://packages.redis.io/deb $REDIS_DIST_CODENAME main" | tee /etc/apt/sources.list.d/redis.list
echo "deb [signed-by=/usr/share/keyrings/redis.gpg] https://packages.redis.io/deb $DISTRIB_CODENAME main" | tee /etc/apt/sources.list.d/redis.list
chmod 644 /usr/share/keyrings/redis.gpg
fi
#add nginx repo
if [[ "$DISTRIB_CODENAME" != noble ]]; then
curl -s http://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nginx.gpg --import
echo "deb [signed-by=/usr/share/keyrings/nginx.gpg] http://nginx.org/packages/$DIST/ $DISTRIB_CODENAME nginx" | tee /etc/apt/sources.list.d/nginx.list
chmod 644 /usr/share/keyrings/nginx.gpg
fi
# Fix for missing nginx repository for debian bookworm
curl -s http://nginx.org/keys/nginx_signing.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nginx.gpg --import
echo "deb [signed-by=/usr/share/keyrings/nginx.gpg] http://nginx.org/packages/$DIST/ $DISTRIB_CODENAME nginx" | tee /etc/apt/sources.list.d/nginx.list
chmod 644 /usr/share/keyrings/nginx.gpg
#f for missing nginx repository for debian bookworm
[ "$DISTRIB_CODENAME" = "bookworm" ] && sed -i "s/$DISTRIB_CODENAME/buster/g" /etc/apt/sources.list.d/nginx.list
#add openresty repo --- temporary fix for complete installation on Ubuntu 24.04: OPENRESTY_DIST_CODENAME change to DISTRIB_CODENAME
[[ "$DISTRIB_CODENAME" =~ noble ]] && OPENRESTY_DIST_CODENAME="jammy" || OPENRESTY_DIST_CODENAME="${DISTRIB_CODENAME}"
#add openresty repo
curl -fsSL https://openresty.org/package/pubkey.gpg | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/openresty.gpg --import
echo "deb [signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/$DIST $OPENRESTY_DIST_CODENAME $([ "$DIST" = "ubuntu" ] && echo "main" || echo "openresty" )" | tee /etc/apt/sources.list.d/openresty.list
echo "deb [signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/$DIST $DISTRIB_CODENAME $([ "$DIST" = "ubuntu" ] && echo "main" || echo "openresty" )" | tee /etc/apt/sources.list.d/openresty.list
chmod 644 /usr/share/keyrings/openresty.gpg
# setup msttcorefonts
@ -129,16 +116,8 @@ apt-get install -o DPkg::options::="--force-confnew" -yq \
rabbitmq-server \
ffmpeg
if ! dpkg -l | grep -q "opensearch"; then
apt-get install -yq opensearch=${ELASTIC_VERSION}
fi
if [ ${INSTALL_FLUENT_BIT} == "true" ]; then
[[ "$DISTRIB_CODENAME" =~ noble ]] && FLUENTBIT_DIST_CODENAME="jammy" || FLUENTBIT_DIST_CODENAME="${DISTRIB_CODENAME}"
curl https://packages.fluentbit.io/fluentbit.key | gpg --dearmor > /usr/share/keyrings/fluentbit-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/fluentbit-keyring.gpg] https://packages.fluentbit.io/$DIST/$FLUENTBIT_DIST_CODENAME $FLUENTBIT_DIST_CODENAME main" | tee /etc/apt/sources.list.d/fluent-bit.list
apt update
apt-get install -yq opensearch-dashboards=${DASHBOARDS_VERSION} fluent-bit
if ! dpkg -l | grep -q "elasticsearch"; then
apt-get install -yq elasticsearch=${ELASTIC_VERSION}
fi
# disable apparmor for mysql

View File

@ -4,11 +4,11 @@ set -e
make_swap () {
DISK_REQUIREMENTS=6144; #6Gb free space
MEMORY_REQUIREMENTS=12000; #RAM ~12Gb
SWAPFILE="/${product}_swapfile";
MEMORY_REQUIREMENTS=11000; #RAM ~12Gb
SWAPFILE="/${PRODUCT}_swapfile";
AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
EXIST=$(swapon -s | awk '{ print $1 }' | { grep -x ${SWAPFILE} || true; });
if [[ -z $EXIST ]] && [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ] && [ ${AVAILABLE_DISK_SPACE} -gt ${DISK_REQUIREMENTS} ]; then
@ -24,30 +24,9 @@ command_exists () {
type "$1" &> /dev/null;
}
# Function to prevent package auto-update
hold_package_version() {
packages=("dotnet-*" "aspnetcore-*" opensearch redis-server rabbitmq-server opensearch-dashboards fluent-bit)
for package in "${packages[@]}"; do
command -v apt-mark >/dev/null 2>&1 && apt-mark showhold | grep -q "^$package" && apt-mark unhold "$package"
done
UNATTENDED_UPGRADES_FILE="/etc/apt/apt.conf.d/50unattended-upgrades"
if [ -f ${UNATTENDED_UPGRADES_FILE} ] && grep -q "Package-Blacklist" ${UNATTENDED_UPGRADES_FILE}; then
for package in "${packages[@]}"; do
if ! grep -q "$package" ${UNATTENDED_UPGRADES_FILE}; then
sed -i "/Package-Blacklist/a \\\t\"$package\";" ${UNATTENDED_UPGRADES_FILE}
fi
done
if systemctl list-units --type=service --state=running | grep -q "unattended-upgrades"; then
systemctl restart unattended-upgrades
fi
fi
}
check_hardware () {
DISK_REQUIREMENTS=40960;
MEMORY_REQUIREMENTS=8000;
MEMORY_REQUIREMENTS=8192;
CORE_REQUIREMENTS=4;
AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
@ -57,7 +36,7 @@ check_hardware () {
exit 1;
fi
TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
if [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ]; then
echo "Minimal requirements are not met: need at least $MEMORY_REQUIREMENTS MB of RAM"

View File

@ -48,7 +48,7 @@ SWAPFILE="/${PRODUCT}_swapfile";
MAKESWAP="true";
DISK_REQUIREMENTS=40960;
MEMORY_REQUIREMENTS=8000;
MEMORY_REQUIREMENTS=8192;
CORE_REQUIREMENTS=4;
DIST="";
@ -60,7 +60,6 @@ INSTALL_RABBITMQ="true";
INSTALL_MYSQL_SERVER="true";
INSTALL_DOCUMENT_SERVER="true";
INSTALL_ELASTICSEARCH="true";
INSTALL_FLUENT_BIT="true";
INSTALL_PRODUCT="true";
UPDATE="false";
@ -373,13 +372,6 @@ while [ "$1" != "" ]; do
fi
;;
-ifb | --installfluentbit )
if [ "$2" != "" ]; then
INSTALL_FLUENT_BIT=$2
shift
fi
;;
-rdsh | --redishost )
if [ "$2" != "" ]; then
REDIS_HOST=$2
@ -471,27 +463,6 @@ while [ "$1" != "" ]; do
fi
;;
-du | --dashboadrsusername )
if [ "$2" != "" ]; then
DASHBOARDS_USERNAME=$2
shift
fi
;;
-dp | --dashboadrspassword )
if [ "$2" != "" ]; then
DASHBOARDS_PASSWORD=$2
shift
fi
;;
-noni | --noninteractive )
if [ "$2" != "" ]; then
NON_INTERACTIVE=$2
shift
fi
;;
-? | -h | --help )
echo " Usage: bash $HELP_TARGET [PARAMETER] [[PARAMETER], ...]"
echo
@ -518,9 +489,6 @@ while [ "$1" != "" ]; do
echo " -irds, --installredis install or update redis (true|false)"
echo " -imysql, --installmysql install or update mysql (true|false)"
echo " -ies, --installelastic install or update elasticsearch (true|false)"
echo " -ifb, --installfluentbit install or update fluent-bit (true|false)"
echo " -du, --dashboadrsusername login for authorization in /dashboards/"
echo " -dp, --dashboadrspassword password for authorization in /dashboards/"
echo " -espr, --elasticprotocol the protocol for the connection to elasticsearch (default value http)"
echo " -esh, --elastichost the IP address or hostname of the elasticsearch"
echo " -esp, --elasticport elasticsearch port number (default value 9200)"
@ -543,7 +511,6 @@ while [ "$1" != "" ]; do
echo " -lem, --letsencryptmail defines the domain administator mail address for Let's Encrypt certificate"
echo " -cf, --certfile path to the certificate file for the domain"
echo " -ckf, --certkeyfile path to the private key file for the certificate"
echo " -noni, --noninteractive auto confirm all questions (true|false)"
echo " -dbm, --databasemigration database migration (true|false)"
echo " -ms, --makeswap make swap file (true|false)"
echo " -?, -h, --help this help"
@ -675,8 +642,8 @@ get_os_info () {
fi
fi
DIST=$(trim $DIST);
REV=$(trim $REV);
DIST=$(trim "$DIST")
fi
}
@ -723,7 +690,7 @@ check_hardware () {
exit 1;
fi
TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
if [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ]; then
echo "Minimal requirements are not met: need at least $MEMORY_REQUIREMENTS MB of RAM"
@ -863,22 +830,13 @@ install_docker () {
systemctl start docker
systemctl enable docker
elif [[ "${DIST}" == Red\ Hat\ Enterprise\ Linux* ]]; then
elif [ "${DIST}" == "Red Hat Enterprise Linux Server" ]; then
if [[ "${REV}" -gt "7" ]]; then
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc > null
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
systemctl start docker
systemctl enable docker
else
echo ""
echo "Your operating system does not allow Docker CE installation."
echo "You can install Docker EE using the manual here - https://docs.docker.com/engine/installation/linux/rhel/"
echo ""
exit 1;
fi
echo ""
echo "Your operating system does not allow Docker CE installation."
echo "You can install Docker EE using the manual here - https://docs.docker.com/engine/installation/linux/rhel/"
echo ""
exit 1;
elif [ "${DIST}" == "SuSe" ]; then
@ -926,10 +884,6 @@ create_network () {
}
read_continue_installation () {
if [[ "${NON_INTERACTIVE}" = "true" ]]; then
return 0
fi
read -p "Continue installation [Y/N]? " CHOICE_INSTALLATION
case "$CHOICE_INSTALLATION" in
y|Y )
@ -1155,7 +1109,6 @@ set_docspace_params() {
APP_CORE_BASE_DOMAIN=${APP_CORE_BASE_DOMAIN:-$(get_env_parameter "APP_CORE_BASE_DOMAIN" "${CONTAINER_NAME}")};
EXTERNAL_PORT=${EXTERNAL_PORT:-$(get_env_parameter "EXTERNAL_PORT" "${CONTAINER_NAME}")};
PREVIOUS_ELK_VERSION=$(get_env_parameter "ELK_VERSION");
ELK_SHEME=${ELK_SHEME:-$(get_env_parameter "ELK_SHEME" "${CONTAINER_NAME}")};
ELK_HOST=${ELK_HOST:-$(get_env_parameter "ELK_HOST" "${CONTAINER_NAME}")};
ELK_PORT=${ELK_PORT:-$(get_env_parameter "ELK_PORT" "${CONTAINER_NAME}")};
@ -1171,9 +1124,6 @@ set_docspace_params() {
RABBIT_PASSWORD=${RABBIT_PASSWORD:-$(get_env_parameter "RABBIT_PASSWORD" "${CONTAINER_NAME}")};
RABBIT_VIRTUAL_HOST=${RABBIT_VIRTUAL_HOST:-$(get_env_parameter "RABBIT_VIRTUAL_HOST" "${CONTAINER_NAME}")};
DASHBOARDS_USERNAME=${DASHBOARDS_USERNAME:-$(get_env_parameter "DASHBOARDS_USERNAME" "${CONTAINER_NAME}")};
DASHBOARDS_PASSWORD=${DASHBOARDS_PASSWORD:-$(get_env_parameter "DASHBOARDS_PASSWORD" "${CONTAINER_NAME}")};
CERTIFICATE_PATH=${CERTIFICATE_PATH:-$(get_env_parameter "CERTIFICATE_PATH")};
CERTIFICATE_KEY_PATH=${CERTIFICATE_KEY_PATH:-$(get_env_parameter "CERTIFICATE_KEY_PATH")};
DHPARAM_PATH=${DHPARAM_PATH:-$(get_env_parameter "DHPARAM_PATH")};
@ -1245,12 +1195,10 @@ install_mysql_server () {
reconfigure MYSQL_USER ${MYSQL_USER}
reconfigure MYSQL_PASSWORD ${MYSQL_PASSWORD}
reconfigure MYSQL_ROOT_PASSWORD ${MYSQL_ROOT_PASSWORD}
reconfigure MYSQL_VERSION ${MYSQL_VERSION}
if [[ -z ${MYSQL_HOST} ]] && [ "$INSTALL_MYSQL_SERVER" == "true" ]; then
if [[ -z ${MYSQL_HOST} ]] && [ "$INSTALL_MYSQL_SERVER" == "true" ]; then
reconfigure MYSQL_VERSION ${MYSQL_VERSION}
docker-compose -f $BASE_DIR/db.yml up -d
elif [ "$INSTALL_MYSQL_SERVER" == "pull" ]; then
docker-compose -f $BASE_DIR/db.yml pull
elif [ ! -z "$MYSQL_HOST" ]; then
establish_conn ${MYSQL_HOST} "${MYSQL_PORT:-"3306"}" "MySQL"
reconfigure MYSQL_HOST ${MYSQL_HOST}
@ -1261,11 +1209,9 @@ install_mysql_server () {
install_document_server () {
reconfigure DOCUMENT_SERVER_JWT_HEADER ${DOCUMENT_SERVER_JWT_HEADER}
reconfigure DOCUMENT_SERVER_JWT_SECRET ${DOCUMENT_SERVER_JWT_SECRET}
reconfigure DOCUMENT_SERVER_IMAGE_NAME "${DOCUMENT_SERVER_IMAGE_NAME}:${DOCUMENT_SERVER_VERSION:-$(get_available_version "$DOCUMENT_SERVER_IMAGE_NAME")}"
if [[ -z ${DOCUMENT_SERVER_HOST} ]] && [ "$INSTALL_DOCUMENT_SERVER" == "true" ]; then
reconfigure DOCUMENT_SERVER_IMAGE_NAME "${DOCUMENT_SERVER_IMAGE_NAME}:${DOCUMENT_SERVER_VERSION:-$(get_available_version "$DOCUMENT_SERVER_IMAGE_NAME")}"
docker-compose -f $BASE_DIR/ds.yml up -d
elif [ "$INSTALL_DOCUMENT_SERVER" == "pull" ]; then
docker-compose -f $BASE_DIR/ds.yml pull
elif [ ! -z "$DOCUMENT_SERVER_HOST" ]; then
APP_URL_PORTAL=${APP_URL_PORTAL:-"http://$(curl -s ifconfig.me):${EXTERNAL_PORT}"}
establish_conn ${DOCUMENT_SERVER_HOST} ${DOCUMENT_SERVER_PORT} "${PACKAGE_SYSNAME^^} Docs"
@ -1277,8 +1223,6 @@ install_document_server () {
install_rabbitmq () {
if [[ -z ${RABBIT_HOST} ]] && [ "$INSTALL_RABBITMQ" == "true" ]; then
docker-compose -f $BASE_DIR/rabbitmq.yml up -d
elif [ "$INSTALL_RABBITMQ" == "pull" ]; then
docker-compose -f $BASE_DIR/rabbitmq.yml pull
elif [ ! -z "$RABBIT_HOST" ]; then
establish_conn ${RABBIT_HOST} "${RABBIT_PORT:-"5672"}" "RabbitMQ"
reconfigure RABBIT_HOST ${RABBIT_HOST}
@ -1292,8 +1236,6 @@ install_rabbitmq () {
install_redis () {
if [[ -z ${REDIS_HOST} ]] && [ "$INSTALL_REDIS" == "true" ]; then
docker-compose -f $BASE_DIR/redis.yml up -d
elif [ "$INSTALL_REDIS" == "pull" ]; then
docker-compose -f $BASE_DIR/redis.yml pull
elif [ ! -z "$REDIS_HOST" ]; then
establish_conn ${REDIS_HOST} "${REDIS_PORT:-"6379"}" "Redis"
reconfigure REDIS_HOST ${REDIS_HOST}
@ -1304,112 +1246,59 @@ install_redis () {
}
install_elasticsearch () {
reconfigure ELK_VERSION ${ELK_VERSION}
if [[ -z ${ELK_HOST} ]] && [ "$INSTALL_ELASTICSEARCH" == "true" ]; then
if [ $(free --mega | grep -oP '\d+' | head -n 1) -gt "12000" ]; then #RAM ~12Gb
sed -i 's/Xms[0-9]g/Xms4g/g; s/Xmx[0-9]g/Xmx4g/g' $BASE_DIR/opensearch.yml
if [ $(free -m | grep -oP '\d+' | head -n 1) -gt "12228" ]; then #RAM ~12Gb
sed -i 's/Xms[0-9]g/Xms4g/g; s/Xmx[0-9]g/Xmx4g/g' $BASE_DIR/elasticsearch.yml
else
sed -i 's/Xms[0-9]g/Xms1g/g; s/Xmx[0-9]g/Xmx1g/g' $BASE_DIR/opensearch.yml
sed -i 's/Xms[0-9]g/Xms1g/g; s/Xmx[0-9]g/Xmx1g/g' $BASE_DIR/elasticsearch.yml
fi
docker-compose -f $BASE_DIR/opensearch.yml up -d
elif [ "$INSTALL_ELASTICSEARCH" == "pull" ]; then
docker-compose -f $BASE_DIR/opensearch.yml pull
reconfigure ELK_VERSION ${ELK_VERSION}
docker-compose -f $BASE_DIR/elasticsearch.yml up -d
elif [ ! -z "$ELK_HOST" ]; then
establish_conn ${ELK_HOST} "${ELK_PORT:-"9200"}" "search engine"
establish_conn ${ELK_HOST} "${ELK_PORT:-"9200"}" "Elasticsearch"
reconfigure ELK_SHEME "${ELK_SHEME:-"http"}"
reconfigure ELK_HOST ${ELK_HOST}
reconfigure ELK_PORT "${ELK_PORT:-"9200"}"
fi
}
install_fluent_bit () {
if [ "$INSTALL_FLUENT_BIT" == "true" ]; then
if ! command_exists crontab; then
if command_exists apt-get; then
install_service crontab cron
elif command_exists yum; then
install_service crontab cronie
fi
fi
[ ! -z "$ELK_HOST" ] && sed -i "s/ELK_CONTAINER_NAME/ELK_HOST/g" $BASE_DIR/fluent.yml ${BASE_DIR}/dashboards.yml
OPENSEARCH_INDEX="${OPENSEARCH_INDEX:-"${PACKAGE_SYSNAME}-fluent-bit"}"
if crontab -l | grep -q "${OPENSEARCH_INDEX}"; then
crontab < <(crontab -l | grep -v "${OPENSEARCH_INDEX}")
fi
(crontab -l 2>/dev/null; echo "0 0 */1 * * curl -s -X POST "$(get_env_parameter 'ELK_SHEME')"://${ELK_HOST:-127.0.0.1}:$(get_env_parameter 'ELK_PORT')/${OPENSEARCH_INDEX}/_delete_by_query -H 'Content-Type: application/json' -d '{\"query\": {\"range\": {\"@timestamp\": {\"lt\": \"now-30d\"}}}}'") | crontab -
sed -i "s/OPENSEARCH_HOST/${ELK_HOST:-"${PACKAGE_SYSNAME}-opensearch"}/g" "${BASE_DIR}/config/fluent-bit.conf"
sed -i "s/OPENSEARCH_PORT/$(get_env_parameter "ELK_PORT")/g" ${BASE_DIR}/config/fluent-bit.conf
sed -i "s/OPENSEARCH_INDEX/${OPENSEARCH_INDEX}/g" ${BASE_DIR}/config/fluent-bit.conf
reconfigure DASHBOARDS_USERNAME "${DASHBOARDS_USERNAME:-"${PACKAGE_SYSNAME}"}"
reconfigure DASHBOARDS_PASSWORD "${DASHBOARDS_PASSWORD:-$(get_random_str 20)}"
docker-compose -f ${BASE_DIR}/fluent.yml -f ${BASE_DIR}/dashboards.yml up -d
elif [ "$INSTALL_FLUENT_BIT" == "pull" ]; then
docker-compose -f ${BASE_DIR}/fluent.yml -f ${BASE_DIR}/dashboards.yml pull
fi
}
install_product () {
DOCKER_TAG="${DOCKER_TAG:-$(get_available_version ${IMAGE_NAME})}"
reconfigure DOCKER_TAG ${DOCKER_TAG}
if [ "$INSTALL_PRODUCT" == "true" ]; then
[ "${UPDATE}" = "true" ] && LOCAL_CONTAINER_TAG="$(docker inspect --format='{{index .Config.Image}}' ${CONTAINER_NAME} | awk -F':' '{print $2}')"
if [ "${UPDATE}" = "true" ] && [ "${LOCAL_CONTAINER_TAG}" != "${DOCKER_TAG}" ]; then
docker-compose -f $BASE_DIR/build.yml pull
docker-compose -f $BASE_DIR/migration-runner.yml -f $BASE_DIR/notify.yml -f $BASE_DIR/healthchecks.yml -f ${PROXY_YML} down
docker-compose -f $BASE_DIR/${PRODUCT}.yml down --volumes
fi
[ "${UPDATE}" = "true" ] && LOCAL_CONTAINER_TAG="$(docker inspect --format='{{index .Config.Image}}' ${CONTAINER_NAME} | awk -F':' '{print $2}')"
reconfigure ENV_EXTENSION ${ENV_EXTENSION}
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
reconfigure APP_URL_PORTAL "${APP_URL_PORTAL:-"http://${PACKAGE_SYSNAME}-router:8092"}"
reconfigure EXTERNAL_PORT ${EXTERNAL_PORT}
if [ "${UPDATE}" = "true" ] && [ "${LOCAL_CONTAINER_TAG}" != "${DOCKER_TAG}" ]; then
docker-compose -f $BASE_DIR/build.yml pull
docker-compose -f $BASE_DIR/migration-runner.yml -f $BASE_DIR/notify.yml -f $BASE_DIR/healthchecks.yml -f ${PROXY_YML} down
docker-compose -f $BASE_DIR/${PRODUCT}.yml down --volumes
fi
if [[ -z ${MYSQL_HOST} ]] && [ "$INSTALL_MYSQL_SERVER" == "true" ]; then
echo -n "Waiting for MySQL container to become healthy..."
(timeout 30 bash -c "while ! docker inspect --format '{{json .State.Health.Status }}' ${PACKAGE_SYSNAME}-mysql-server | grep -q 'healthy'; do sleep 1; done") && echo "OK" || (echo "FAILED")
fi
reconfigure ENV_EXTENSION ${ENV_EXTENSION}
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
reconfigure APP_URL_PORTAL "${APP_URL_PORTAL:-"http://${PACKAGE_SYSNAME}-router:8092"}"
reconfigure EXTERNAL_PORT ${EXTERNAL_PORT}
docker-compose -f $BASE_DIR/migration-runner.yml up -d
echo -n "Waiting for database migration to complete..." && docker wait ${PACKAGE_SYSNAME}-migration-runner && echo "OK"
docker-compose -f $BASE_DIR/${PRODUCT}.yml up -d
docker-compose -f ${PROXY_YML} up -d
docker-compose -f $BASE_DIR/notify.yml up -d
docker-compose -f $BASE_DIR/healthchecks.yml up -d
docker-compose -f $BASE_DIR/migration-runner.yml up -d
docker-compose -f $BASE_DIR/${PRODUCT}.yml up -d
docker-compose -f ${PROXY_YML} up -d
docker-compose -f $BASE_DIR/notify.yml up -d
docker-compose -f $BASE_DIR/healthchecks.yml up -d
if [[ -n "${PREVIOUS_ELK_VERSION}" && "$(get_env_parameter "ELK_VERSION")" != "${PREVIOUS_ELK_VERSION}" ]]; then
docker ps -q -f name=${PACKAGE_SYSNAME}-elasticsearch | xargs -r docker stop
MYSQL_TAG=$(docker images --format "{{.Tag}}" mysql | head -n1)
MYSQL_CONTAINER_NAME=$(get_env_parameter "MYSQL_CONTAINER_NAME" | sed "s/\${CONTAINER_PREFIX}/${PACKAGE_SYSNAME}-/g")
docker run --rm --network="$(get_env_parameter "NETWORK_NAME")" mysql:${MYSQL_TAG:-latest} mysql -h "${MYSQL_HOST:-${MYSQL_CONTAINER_NAME}}" -P "${MYSQL_PORT:-3306}" -u "${MYSQL_USER}" -p"${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" -e "TRUNCATE webstudio_index;"
fi
if [ ! -z "${CERTIFICATE_PATH}" ] && [ ! -z "${CERTIFICATE_KEY_PATH}" ] && [[ ! -z "${APP_DOMAIN_PORTAL}" ]]; then
bash $BASE_DIR/config/${PRODUCT}-ssl-setup -f "${APP_DOMAIN_PORTAL}" "${CERTIFICATE_PATH}" "${CERTIFICATE_KEY_PATH}"
elif [ ! -z "${LETS_ENCRYPT_DOMAIN}" ] && [ ! -z "${LETS_ENCRYPT_MAIL}" ]; then
bash $BASE_DIR/config/${PRODUCT}-ssl-setup "${LETS_ENCRYPT_MAIL}" "${LETS_ENCRYPT_DOMAIN}"
fi
elif [ "$INSTALL_PRODUCT" == "pull" ]; then
docker-compose -f $BASE_DIR/migration-runner.yml pull
docker-compose -f $BASE_DIR/${PRODUCT}.yml pull
docker-compose -f ${PROXY_YML} pull
docker-compose -f $BASE_DIR/notify.yml pull
docker-compose -f $BASE_DIR/healthchecks.yml pull
if [ ! -z "${CERTIFICATE_PATH}" ] && [ ! -z "${CERTIFICATE_KEY_PATH}" ] && [[ ! -z "${APP_DOMAIN_PORTAL}" ]]; then
bash $BASE_DIR/config/${PRODUCT}-ssl-setup -f "${APP_DOMAIN_PORTAL}" "${CERTIFICATE_PATH}" "${CERTIFICATE_KEY_PATH}"
elif [ ! -z "${LETS_ENCRYPT_DOMAIN}" ] && [ ! -z "${LETS_ENCRYPT_MAIL}" ]; then
bash $BASE_DIR/config/${PRODUCT}-ssl-setup "${LETS_ENCRYPT_MAIL}" "${LETS_ENCRYPT_DOMAIN}"
fi
}
make_swap () {
DISK_REQUIREMENTS=6144; #6Gb free space
MEMORY_REQUIREMENTS=12000; #RAM ~12Gb
MEMORY_REQUIREMENTS=11000; #RAM ~12Gb
AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
EXIST=$(swapon -s | awk '{ print $1 }' | { grep -x ${SWAPFILE} || true; });
if [[ -z $EXIST ]] && [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ] && [ ${AVAILABLE_DISK_SPACE} -gt ${DISK_REQUIREMENTS} ]; then
@ -1476,19 +1365,19 @@ start_installation () {
download_files
install_elasticsearch
install_fluent_bit
install_mysql_server
install_document_server
install_rabbitmq
install_redis
install_document_server
install_elasticsearch
install_product
if [ "$INSTALL_PRODUCT" == "true" ]; then
install_product
fi
echo ""
echo "Thank you for installing ${PACKAGE_SYSNAME^^} ${PRODUCT_NAME}."

View File

@ -14,7 +14,6 @@ RES_CHECK_PORTS="please, make sure that the ports are free.";
RES_INSTALL_SUCCESS="Thank you for installing ONLYOFFICE ${product_name}.";
RES_QUESTIONS="In case you have any questions contact us via http://support.onlyoffice.com or visit our forum at http://forum.onlyoffice.com"
RES_MARIADB="To continue the installation, you need to remove MariaDB"
INSTALL_FLUENT_BIT="true"
res_unsupported_version () {
RES_CHOICE="Please, enter Y or N"
@ -63,27 +62,6 @@ while [ "$1" != "" ]; do
fi
;;
-ifb | --installfluentbit )
if [ "$2" != "" ]; then
INSTALL_FLUENT_BIT=$2
shift
fi
;;
-du | --dashboadrsusername )
if [ "$2" != "" ]; then
DASHBOARDS_USERNAME=$2
shift
fi
;;
-dp | --dashboadrspassword )
if [ "$2" != "" ]; then
DASHBOARDS_PASSWORD=$2
shift
fi
;;
-ls | --localscripts )
if [ "$2" != "" ]; then
LOCAL_SCRIPTS=$2
@ -120,9 +98,6 @@ while [ "$1" != "" ]; do
echo " -je, --jwtenabled specifies the enabling the JWT validation (true|false)"
echo " -jh, --jwtheader defines the http header that will be used to send the JWT"
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -ifb, --installfluentbit install or update fluent-bit (true|false)"
echo " -du, --dashboadrsusername login for authorization in /dashboards/"
echo " -dp, --dashboadrspassword password for authorization in /dashboards/"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -skiphc, --skiphardwarecheck use to skip hardware check (true|false)"
echo " -ms, --makeswap make swap file (true|false)"

View File

@ -33,43 +33,47 @@ if rpm -qa | grep mariadb.*config >/dev/null 2>&1; then
fi
#Add repositories: EPEL, REMI and RPMFUSION
[ "$DIST" != "fedora" ] && { rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-$REV.noarch.rpm || true; }
rpm -ivh https://rpms.remirepo.net/$REMI_DISTR_NAME/remi-release-$REV.rpm || true
yum localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/$RPMFUSION_DISTR_NAME/rpmfusion-free-release-$REV.noarch.rpm
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-$REV.noarch.rpm || true
rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-$REV.rpm || true
yum localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$REV.noarch.rpm
[ "$REV" = "9" ] && update-crypto-policies --set DEFAULT:SHA1 && ${package_manager} -y install xorg-x11-font-utils
[ "$DIST" = "centos" ] && TESTING_REPO="--enablerepo=$( [ "$REV" = "9" ] && echo "crb" || echo "powertools" )"
[ "$DIST" = "redhat" ] && /usr/bin/crb enable
[ "$REV" = "9" ] && update-crypto-policies --set DEFAULT:SHA1
[ "$DIST" != "redhat" ] && { [ "$REV" = "9" ] && TESTING_REPO="--enablerepo=crb" || POWERTOOLS_REPO="--enablerepo=powertools"; } || /usr/bin/crb enable
#add rabbitmq & erlang repo
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | os=centos dist=$REV bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | os=centos dist=$REV bash
#add nodejs repo
NODE_VERSION="18"
curl -fsSL https://rpm.nodesource.com/setup_${NODE_VERSION}.x | sed '/update -y/d' | bash - || true
[ "$REV" = "8" ] && NODEJS_OPTION="--setopt=nodesource-nodejs.module_hotfixes=1"
yum install -y https://rpm.nodesource.com/pub_${NODE_VERSION}.x/nodistro/repo/nodesource-release-nodistro-1.noarch.rpm || true
#add mysql repo
dnf remove -y @mysql && dnf module -y reset mysql && dnf module -y disable mysql
MYSQL_REPO_VERSION="$(curl https://repo.mysql.com | grep -oP "mysql84-community-release-${MYSQL_DISTR_NAME}${REV}-\K.*" | grep -o '^[^.]*' | sort | tail -n1)"
yum localinstall -y https://repo.mysql.com/mysql84-community-release-${MYSQL_DISTR_NAME}${REV}-${MYSQL_REPO_VERSION}.noarch.rpm || true
MYSQL_REPO_VERSION="$(curl https://repo.mysql.com | grep -oP "mysql80-community-release-el${REV}-\K.*" | grep -o '^[^.]*' | sort | tail -n1)"
yum localinstall -y https://repo.mysql.com/mysql80-community-release-el${REV}-${MYSQL_REPO_VERSION}.noarch.rpm || true
if ! rpm -q mysql-community-server; then
MYSQL_FIRST_TIME_INSTALL="true";
fi
#add opensearch repo
curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/opensearch-2.x.repo -o /etc/yum.repos.d/opensearch-2.x.repo
ELASTIC_VERSION="2.11.1"
#add elasticsearch repo
ELASTIC_VERSION="7.16.3"
ELASTIC_DIST=$(echo $ELASTIC_VERSION | awk '{ print int($1) }')
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/elasticsearch.repo <<END
[elasticsearch]
name=Elasticsearch repository for ${ELASTIC_DIST}.x packages
baseurl=https://artifacts.elastic.co/packages/${ELASTIC_DIST}.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
END
#add opensearch dashboards repo
if [ ${INSTALL_FLUENT_BIT} == "true" ]; then
curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/opensearch-dashboards-2.x.repo -o /etc/yum.repos.d/opensearch-dashboards-2.x.repo
DASHBOARDS_VERSION="2.11.1"
fi
# add nginx repo, Fedora doesn't need it
if [ "$DIST" != "fedora" ]; then
# add nginx repo
cat > /etc/yum.repos.d/nginx.repo <<END
[nginx-stable]
name=nginx stable repo
@ -79,19 +83,17 @@ enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
END
fi
rpm --import https://openresty.org/package/pubkey.gpg
OPENRESTY_REPO_FILE=$( [[ "$REV" -ge 9 && "$DIST" != "fedora" ]] && echo "openresty2.repo" || echo "openresty.repo" )
curl -o /etc/yum.repos.d/openresty.repo "https://openresty.org/package/${OPENRESTY_DISTR_NAME}/${OPENRESTY_REPO_FILE}"
[ "$DIST" == "fedora" ] && sed -i "s/\$releasever/$OPENRESTY_REV/g" /etc/yum.repos.d/openresty.repo
OPENRESTY_REPO_FILE=$( [[ "$REV" -ge 9 ]] && echo "openresty2.repo" || echo "openresty.repo" )
curl -o /etc/yum.repos.d/openresty.repo "https://openresty.org/package/centos/${OPENRESTY_REPO_FILE}"
${package_manager} -y install $([ $DIST != "fedora" ] && echo "epel-release") \
${package_manager} -y install epel-release \
python3 \
nodejs ${NODEJS_OPTION} \
dotnet-sdk-8.0 \
opensearch-${ELASTIC_VERSION} --enablerepo=opensearch-2.x \
mysql-community-server \
elasticsearch-${ELASTIC_VERSION} --enablerepo=elasticsearch \
mysql-server \
postgresql \
postgresql-server \
rabbitmq-server$rabbitmq_version \
@ -100,12 +102,6 @@ ${package_manager} -y install $([ $DIST != "fedora" ] && echo "epel-release") \
expect \
ffmpeg $TESTING_REPO
#add repo, install fluent-bit
if [ ${INSTALL_FLUENT_BIT} == "true" ]; then
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | bash
${package_manager} -y install opensearch-dashboards-${DASHBOARDS_VERSION} --enablerepo=opensearch-dashboards-2.x
fi
if [[ $PSQLExitCode -eq $UPDATE_AVAILABLE_CODE ]]; then
yum -y install postgresql-upgrade
postgresql-setup --upgrade || true

View File

@ -4,30 +4,25 @@ set -e
function make_swap () {
local DISK_REQUIREMENTS=6144; #6Gb free space
local MEMORY_REQUIREMENTS=12000; #RAM ~12Gb
SWAPFILE="/${product}_swapfile";
local MEMORY_REQUIREMENTS=11000; #RAM ~12Gb
SWAPFILE="/${PRODUCT}_swapfile";
local AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
local TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
local TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
local EXIST=$(swapon -s | awk '{ print $1 }' | { grep -x ${SWAPFILE} || true; });
if [[ -z $EXIST ]] && [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ] && [ ${AVAILABLE_DISK_SPACE} -gt ${DISK_REQUIREMENTS} ]; then
touch "$SWAPFILE"
# No Copy-on-Write - no compression
[[ "$DIST" == "fedora" ]] && chattr +C "$SWAPFILE"
# Allocate 6 GB, much faster than: dd if=/dev/zero of=${SWAPFILE} count=6144 bs=1MiB
fallocate -l 6G "$SWAPFILE"
chmod 600 "$SWAPFILE"
mkswap "$SWAPFILE"
# Activate, enable upon system boot
swapon "$SWAPFILE"
dd if=/dev/zero of=${SWAPFILE} count=6144 bs=1MiB
chmod 600 ${SWAPFILE}
mkswap ${SWAPFILE}
swapon ${SWAPFILE}
echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
fi
}
check_hardware () {
DISK_REQUIREMENTS=40960;
MEMORY_REQUIREMENTS=8000;
MEMORY_REQUIREMENTS=8192;
CORE_REQUIREMENTS=4;
AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
@ -37,7 +32,7 @@ check_hardware () {
exit 1;
fi
TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
if [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ]; then
echo "Minimal requirements are not met: need at least $MEMORY_REQUIREMENTS MB of RAM"
@ -71,30 +66,15 @@ read_unsupported_installation () {
esac
}
DIST=$(rpm -q --queryformat '%{NAME}' centos-release redhat-release fedora-release | awk -F'[- ]|package' '{print tolower($1)}' | tr -cd '[:alpha:]')
[ -z $DIST ] && DIST=$(cat /etc/redhat-release | awk -F 'Linux|release| ' '{print tolower($1)}')
DIST=$(rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release)
DIST=$(echo "${DIST}" | sed -n '/-.*/s///p')
DIST_LOWER=$(echo "${DIST}" | tr '[:upper:]' '[:lower:]')
REV=$(sed -n 's/.*release\ \([0-9]*\).*/\1/p' /etc/redhat-release)
REV=${REV:-"7"}
REMI_DISTR_NAME="enterprise"
RPMFUSION_DISTR_NAME="el"
MYSQL_DISTR_NAME="el"
OPENRESTY_DISTR_NAME="centos"
SUPPORTED_FEDORA_FLAG="true"
if [ "$DIST" == "fedora" ]; then
REMI_DISTR_NAME="fedora"
OPENRESTY_DISTR_NAME="fedora"
RPMFUSION_DISTR_NAME="fedora"
MYSQL_DISTR_NAME="fc"
OPENRESTY_REV=$([ "$REV" -ge 37 ] && echo 36 || echo "$REV")
FEDORA_SUPP=$(curl https://docs.fedoraproject.org/en-US/releases/ | awk '/Supported Releases/,/EOL Releases/' | grep -oP 'F\d+' | tr -d 'F')
[ ! "$(echo "$FEDORA_SUPP" | grep "$REV")" ] && SUPPORTED_FEDORA_FLAG="false"
fi
# Check if it's Centos less than 8 or Fedora release is out of service
if [ "${REV}" -lt 8 ] || [ "$SUPPORTED_FEDORA_FLAG" == "false" ]; then
# Check if it's Centos less than 8
if [ "${REV}" -lt 8 ]; then
echo "Your ${DIST} ${REV} operating system has reached the end of its service life."
echo "Please consider upgrading your operating system or using a Docker installation."
exit 1

View File

@ -55,6 +55,5 @@ services_name_backend_nodejs+=(ASC.SsoAuth)
# Build backend services (Nodejs)
for i in ${!services_name_backend_nodejs[@]}; do
echo "== Build ${services_name_backend_nodejs[$i]} project =="
cd ${SRC_PATH}/server/common/${services_name_backend_nodejs[$i]}
yarn install --frozen-lockfile
yarn install --cwd ${SRC_PATH}/server/common/${services_name_backend_nodejs[$i]} --frozen-lockfile
done

View File

@ -0,0 +1,16 @@
/var/log/onlyoffice/docspace/*.log {
daily
missingok
rotate 30
compress
dateext
delaycompress
notifempty
nocreate
sharedscripts
postrotate
if pgrep -x ""systemd"" >/dev/null; then
systemctl restart docspace* > /dev/null
fi
endscript
}

View File

@ -26,7 +26,6 @@ APP_PORT="80"
ELK_SHEME="http"
ELK_HOST="localhost"
ELK_PORT="9200"
OPENSEARCH_INDEX="${PACKAGE_SYSNAME}-fluent-bit"
RABBITMQ_HOST="localhost"
RABBITMQ_USER="guest"
@ -180,20 +179,6 @@ while [ "$1" != "" ]; do
fi
;;
-du | --dashboadrsusername )
if [ "$2" != "" ]; then
DASHBOARDS_USERNAME=$2
shift
fi
;;
-dp | --dashboadrspassword )
if [ "$2" != "" ]; then
DASHBOARDS_PASSWORD=$2
shift
fi
;;
-docsurl | --docsurl )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_URL_EXTERNAL=$2
@ -249,9 +234,9 @@ set_core_machinekey () {
fi
save_undefined_param "${USER_CONF}" "core.machinekey" "${CORE_MACHINEKEY}"
save_undefined_param "${USER_CONF}" "core['base-domain']" "${APP_HOST}" "rewrite"
save_undefined_param "${USER_CONF}" "core['base-domain']" "${APP_HOST}"
save_undefined_param "${APP_DIR}/apisystem.${ENVIRONMENT}.json" "core.machinekey" "${CORE_MACHINEKEY}"
save_undefined_param "${APP_DIR}/apisystem.${ENVIRONMENT}.json" "core['base-domain']" "${APP_HOST}" "rewrite"
save_undefined_param "${APP_DIR}/apisystem.${ENVIRONMENT}.json" "core['base-domain']" "${CORE_MACHINEKEY}"
sed "s^\(machine_key\)\s*=.*^\1 = ${CORE_MACHINEKEY}^g" -i $APP_DIR/radicale.config
}
@ -295,7 +280,7 @@ restart_services() {
echo -n "Restarting services... "
for SVC in login api socket studio-notify notify \
people-server files files-services studio backup api-system \
people-server files files-services studio backup \
clear-events backup-background ssoauth doceditor healthchecks
do
systemctl enable ${PRODUCT}-$SVC >/dev/null 2>&1
@ -346,7 +331,7 @@ establish_mysql_conn(){
$MYSQL -e ";" >/dev/null 2>&1
ERRCODE=$?
if [ $ERRCODE -ne 0 ]; then
systemctl start ${MYSQL_PACKAGE} >/dev/null 2>&1
systemctl ${MYSQL_PACKAGE} start >/dev/null 2>&1
$MYSQL -e ";" >/dev/null 2>&1 || { echo "FAILURE"; exit 1; }
fi
@ -446,9 +431,14 @@ change_mysql_config(){
else
sed "s/collation_server.*/collation_server = utf8_general_ci/" -i ${CNF_PATH} || true # ignore errors
fi
MYSQL_AUTHENTICATION_PLUGIN=$($MYSQL -e "SHOW VARIABLES LIKE 'default_authentication_plugin';" -s | awk '{print $2}' >/dev/null 2>&1)
MYSQL_AUTHENTICATION_PLUGIN=${MYSQL_AUTHENTICATION_PLUGIN:-caching_sha2_password}
if grep -q "^default-authentication-plugin" ${CNF_PATH}; then
sed "/^default-authentication-plugin/d" -i "${CNF_PATH}" || true # ignore errors
if ! grep -q "^default-authentication-plugin" ${CNF_PATH}; then
sed "/\[mysqld\]/a default-authentication-plugin = ${MYSQL_AUTHENTICATION_PLUGIN}" -i ${CNF_PATH}
else
sed "s/default-authentication-plugin.*/default-authentication-plugin = ${MYSQL_AUTHENTICATION_PLUGIN}/" -i ${CNF_PATH} || true # ignore errors
fi
if [ -e ${CNF_SERVICE_PATH} ]; then
@ -502,14 +492,6 @@ setup_openresty(){
fi
if [ "$DIST" = "RedHat" ]; then
# Remove default nginx settings [error] port 80 is already in use
if [ -f /etc/nginx/nginx.conf ]; then
if grep -q "server {" /etc/nginx/nginx.conf ; then
sed -e '$a}' -e '/server {/,$d' -i /etc/nginx/nginx.conf
systemctl reload nginx
fi
fi
shopt -s nocasematch
PORTS=()
if command -v getenforce &> /dev/null; then
@ -548,12 +530,10 @@ setup_openresty(){
done
fi
if $PACKAGE_MANAGER firewalld >/dev/null 2>&1; then
if [ $(systemctl is-active firewalld.service) == active ]; then
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
systemctl restart firewalld.service
fi
if rpm -q "firewalld"; then
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
systemctl restart firewalld.service
fi
elif [ "$DIST" = "Debian" ]; then
if ! id "nginx" &>/dev/null; then
@ -621,25 +601,15 @@ setup_enterprise() {
change_elasticsearch_config(){
systemctl stop opensearch
if $PACKAGE_MANAGER elasticsearch >/dev/null 2>&1; then
systemctl disable elasticsearch >/dev/null 2>&1
systemctl stop elasticsearch >/dev/null 2>&1
fi
systemctl stop elasticsearch
sed -i '/^plugins\.security/d' /etc/opensearch/opensearch.yml
sed -i '/CN=kirk,OU=client,O=client,L=test, C=de/d' /etc/opensearch/opensearch.yml
if /usr/share/opensearch/bin/opensearch-plugin list | grep -x "opensearch-security" > /dev/null 2>&1 ; then
/usr/share/opensearch/bin/opensearch-plugin remove opensearch-security > /dev/null 2>&1
fi
local ELASTIC_SEARCH_CONF_PATH="/etc/elasticsearch/elasticsearch.yml"
local ELASTIC_SEARCH_JAVA_CONF_PATH="/etc/elasticsearch/jvm.options";
local ELASTIC_SEARCH_CONF_PATH="/etc/opensearch/opensearch.yml"
local ELASTIC_SEARCH_JAVA_CONF_PATH="/etc/opensearch/jvm.options";
if /usr/share/opensearch/bin/opensearch-plugin list | grep -q "ingest-attachment"; then
/usr/share/opensearch/bin/opensearch-plugin remove -s ingest-attachment
if /usr/share/elasticsearch/bin/elasticsearch-plugin list | grep -q "ingest-attachment"; then
/usr/share/elasticsearch/bin/elasticsearch-plugin remove -s ingest-attachment
fi
/usr/share/opensearch/bin/opensearch-plugin install -s -b ingest-attachment
/usr/share/elasticsearch/bin/elasticsearch-plugin install -s -b ingest-attachment
if [ -f ${ELASTIC_SEARCH_CONF_PATH}.rpmnew ]; then
cp -rf ${ELASTIC_SEARCH_CONF_PATH}.rpmnew ${ELASTIC_SEARCH_CONF_PATH};
@ -671,34 +641,45 @@ change_elasticsearch_config(){
sed -i "s/Dlog4j2.formatMsgNoLookups.*/Dlog4j2.formatMsgNoLookups=true/" ${ELASTIC_SEARCH_JAVA_CONF_PATH}
fi
local TOTAL_MEMORY=$(free --mega | grep -oP '\d+' | head -n 1);
local MEMORY_REQUIREMENTS=12000; #RAM ~12Gb
if ! grep -q "ingest.geoip.downloader.enabled" ${ELASTIC_SEARCH_CONF_PATH}; then
echo "ingest.geoip.downloader.enabled: false" >> ${ELASTIC_SEARCH_CONF_PATH}
else
sed -i "s/ingest.geoip.downloader.enabled.*/ingest.geoip.downloader.enabled: false/" ${ELASTIC_SEARCH_CONF_PATH}
fi
ELASTIC_SYSTEMD_DIR="${SYSTEMD_DIR}/elasticsearch.service.d"
mkdir -p "${ELASTIC_SYSTEMD_DIR}"
if [ ! -e "${ELASTIC_SYSTEMD_DIR}/overwrite.conf" ]; then
echo "[Service]" > "${ELASTIC_SYSTEMD_DIR}/overwrite.conf"
echo "TimeoutStartSec=600" >> "${ELASTIC_SYSTEMD_DIR}/overwrite.conf"
systemctl daemon-reload >/dev/null 2>&1
fi
local TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
local MEMORY_REQUIREMENTS=12228; #RAM ~4*3Gb
if [ ${TOTAL_MEMORY} -gt ${MEMORY_REQUIREMENTS} ]; then
ELASTICSEATCH_MEMORY="4g"
else
ELASTICSEATCH_MEMORY="1g"
if ! grep -q "[-]Xms1g" ${ELASTIC_SEARCH_JAVA_CONF_PATH}; then
echo "-Xms4g" >> ${ELASTIC_SEARCH_JAVA_CONF_PATH}
else
sed -i "s/-Xms1g/-Xms4g/" ${ELASTIC_SEARCH_JAVA_CONF_PATH}
fi
if ! grep -q "[-]Xmx1g" ${ELASTIC_SEARCH_JAVA_CONF_PATH}; then
echo "-Xmx4g" >> ${ELASTIC_SEARCH_JAVA_CONF_PATH}
else
sed -i "s/-Xmx1g/-Xmx4g/" ${ELASTIC_SEARCH_JAVA_CONF_PATH}
fi
fi
if grep -qE "^[^#]*-Xms[0-9]g" "${ELASTIC_SEARCH_JAVA_CONF_PATH}"; then
sed -i "s/-Xms[0-9]g/-Xms${ELASTICSEATCH_MEMORY}/" "${ELASTIC_SEARCH_JAVA_CONF_PATH}"
else
echo "-Xms${ELASTICSEATCH_MEMORY}" >> "${ELASTIC_SEARCH_JAVA_CONF_PATH}"
fi
if grep -qE "^[^#]*-Xmx[0-9]g" "${ELASTIC_SEARCH_JAVA_CONF_PATH}"; then
sed -i "s/-Xmx[0-9]g/-Xmx${ELASTICSEATCH_MEMORY}/" "${ELASTIC_SEARCH_JAVA_CONF_PATH}"
else
echo "-Xmx${ELASTICSEATCH_MEMORY}" >> "${ELASTIC_SEARCH_JAVA_CONF_PATH}"
fi
if [ -d /etc/opensearch/ ]; then
chmod g+ws /etc/opensearch/
if [ -d /etc/elasticsearch/ ]; then
chmod g+ws /etc/elasticsearch/
fi
}
setup_elasticsearch() {
echo -n "Configuring opensearch... "
echo -n "Configuring elasticsearch... "
#Save elasticsearch parameters in .json
[[ $1 == "EXTERNAL_ELASTIC_SERVER" ]] && local EXTERNAL_ELASTIC_FLAG="rewrite"
@ -710,58 +691,12 @@ setup_elasticsearch() {
if [ $1 == "LOCAL_ELASTIC_SERVER" ]; then
change_elasticsearch_config
systemctl enable opensearch >/dev/null 2>&1
systemctl restart opensearch
systemctl enable elasticsearch >/dev/null 2>&1
systemctl restart elasticsearch
fi
echo "OK"
}
setup_dashboards() {
echo -n "Configuring dashboards... "
DASHBOARDS_CONF_PATH="/etc/opensearch-dashboards/opensearch_dashboards.yml"
if [[ -n ${DASHBOARDS_PASSWORD} ]]; then
echo "${DASHBOARDS_PASSWORD}" > ${APP_DIR}/.private/dashboards-password
elif [[ -f ${APP_DIR}/.private/dashboards-password ]]; then
DASHBOARDS_PASSWORD=$(cat ${APP_DIR}/.private/dashboards-password);
else
DASHBOARDS_PASSWORD=$(echo "$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 20)" | tee ${APP_DIR}/.private/dashboards-password)
fi
chmod o-rwx $APP_DIR/.private/dashboards-password
# configure login&pass for Dashboards, used by Nginx HTTP Basic Authentication
echo "${DASHBOARDS_USERNAME:-"onlyoffice"}:$(openssl passwd -6 -stdin <<< "${DASHBOARDS_PASSWORD}")" > /etc/openresty/.htpasswd_dashboards
chown nginx:nginx /etc/openresty/.htpasswd_dashboards
# enable connection with opensearch
sed -i 's~\(opensearch\.hosts:\).*~\1 \[http://localhost:9200\]~' ${DASHBOARDS_CONF_PATH}
sed -i '/^opensearch\_security/d' ${DASHBOARDS_CONF_PATH}
if /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin list --allow-root | grep "securityDashboards*" > /dev/null 2>&1 ; then
/usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin remove securityDashboards --allow-root > /dev/null 2>&1
fi
# set basePath variable to get access to Dashboards from a remote host
sed 's_.*\(server.basePath:\).*_\1 "/dashboards"_' -i ${DASHBOARDS_CONF_PATH}
systemctl enable opensearch-dashboards
systemctl restart opensearch-dashboards
echo "OK"
}
setup_fluentbit() {
echo -n "Configuring fluent-bit... "
# Replace variables in fluent-bit config file template, force copy to conf directory
sed -i "s/OPENSEARCH_HOST/$ELK_HOST/g; s/OPENSEARCH_PORT/$ELK_PORT/g; s/OPENSEARCH_INDEX/$OPENSEARCH_INDEX/g; s/OPENSEARCH_SCHEME/$ELK_SHEME/g" ${APP_DIR}/fluent-bit.conf
cp -f ${APP_DIR}/fluent-bit.conf /etc/fluent-bit/fluent-bit.conf
systemctl enable fluent-bit
systemctl restart fluent-bit
echo "OK"
}
setup_redis() {
echo -n "Configuring redis... "
@ -874,18 +809,10 @@ fi
if [[ ! -z $EXTERNAL_ELK_FLAG ]]; then
check_connection_external_services "$ELK_HOST" "$ELK_PORT" "Elasticsearch"
setup_elasticsearch "EXTERNAL_ELASTIC_SERVER"
elif $PACKAGE_MANAGER opensearch >/dev/null 2>&1; then
elif $PACKAGE_MANAGER elasticsearch >/dev/null 2>&1; then
setup_elasticsearch "LOCAL_ELASTIC_SERVER"
fi
if $PACKAGE_MANAGER opensearch-dashboards >/dev/null 2>&1; then
setup_dashboards
fi
if $PACKAGE_MANAGER fluent-bit >/dev/null 2>&1; then
setup_fluentbit
fi
if [[ ! -z $EXTERNAL_REDIS_FLAG ]]; then
check_connection_external_services "$REDIS_HOST" "$REDIS_PORT" "Redis"
setup_redis "EXTERNAL_REDIS_SERVER"
@ -901,11 +828,3 @@ elif $PACKAGE_MANAGER rabbitmq-server >/dev/null 2>&1; then
fi
restart_services
# Truncate MySQL DB to make opensearch work with updated app. Strictly after restart_services ()
if $PACKAGE_MANAGER opensearch >/dev/null 2>&1; then
ELASTIC_VERSION=$(awk '/build:/{f=1} f&&/version:/{gsub(/"/,"",$2);print $2; exit}' /usr/share/opensearch/manifest.yml 2>/dev/null || echo "2.11.1")
[[ ! -f "$APP_DIR/.private/opensearch-version" || $(cat "$APP_DIR/.private/opensearch-version") != *"$ELASTIC_VERSION"* ]] && $MYSQL "$DB_NAME" -e "TRUNCATE webstudio_index";
echo "$ELASTIC_VERSION" > $APP_DIR/.private/opensearch-version
chmod o-rwx $APP_DIR/.private/opensearch-version
fi

View File

@ -8,8 +8,6 @@ LETSENCRYPT="/etc/letsencrypt/live";
OPENRESTY="/etc/openresty/conf.d"
DHPARAM_FILE="/etc/ssl/certs/dhparam.pem"
WEBROOT_PATH="/var/www/${PRODUCT}"
CONFIG_DIR="/etc/onlyoffice/${PRODUCT}"
SYSTEMD_DIR=$(dirname $($(command -v dpkg-query &> /dev/null && echo "dpkg-query -L" || echo "rpm -ql") ${PRODUCT}-api | grep systemd/system/))
# Check if configuration files are present
if [ ! -f "${OPENRESTY}/onlyoffice-proxy-ssl.conf.template" -a ! -f "${OPENRESTY}/onlyoffice-proxy.conf.template" ]; then
@ -25,12 +23,10 @@ help(){
echo " Use comma to register multiple emails, ex:"
echo " u1@example.com,u2@example.com."
echo " DOMAIN Domain name to apply"
echo " Use comma to register multiple domains, ex:"
echo " example.com,s1.example.com,s2.example.com."
echo ""
echo "Using your own certificates via the -f or --file parameter:"
echo " docspace-ssl-setup --file DOMAIN CERTIFICATE PRIVATEKEY"
echo " DOMAIN Main domain name to apply."
echo " DOMAIN Domain name to apply."
echo " CERTIFICATE Path to the certificate file for the domain."
echo " PRIVATEKEY Path to the private key file for the certificate."
echo ""
@ -48,8 +44,6 @@ case $1 in
DOMAIN=$2
CERTIFICATE_FILE=$3
PRIVATEKEY_FILE=$4
[[ $DOMAIN =~ ^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$ ]] || { echo "Error: domain name '$DOMAIN' is incorrect." >&2; exit 1; }
else
help
fi
@ -62,14 +56,6 @@ case $1 in
sed "s!\(worker_connections\).*;!\1 $(ulimit -n);!" -i "${OPENRESTY}/onlyoffice-proxy.conf"
[[ -f "${DIR}/${PRODUCT}-renew-letsencrypt" ]] && rm -rf "${DIR}/${PRODUCT}-renew-letsencrypt"
[ $(pgrep -x ""systemd"" | wc -l) -gt 0 ] && systemctl reload openresty || service openresty reload
sed -i "s/\(\"portal\":\).*/\1 \"http:\/\/localhost:80\"/" ${CONFIG_DIR}/appsettings.$(grep -oP 'ENVIRONMENT=\K.*' ${SYSTEMD_DIR}/${PRODUCT}-api.service).json
SYSTEMD_NODE_FILES=$(grep -l "NODE_EXTRA_CA_CERTS" ${SYSTEMD_DIR}/${PRODUCT}-*.service ${SYSTEMD_DIR}/ds-*.service || true)
if [ -n "$SYSTEMD_NODE_FILES" ]; then
sed -i '/NODE_EXTRA_CA_CERTS/d' ${SYSTEMD_NODE_FILES}
systemctl daemon-reload
echo "${SYSTEMD_NODE_FILES[@]}" | xargs -I % basename % | xargs systemctl restart
fi
echo "OK"
exit 0
;;
@ -77,8 +63,7 @@ case $1 in
* )
if [ "$#" -ge "2" ]; then
MAIL=$1
DOMAINS=$2
DOMAIN=$(cut -d ',' -f 1 <<< "$DOMAINS")
DOMAIN=$2
LETSENCRYPT_ENABLE="true"
# Install certbot if not already installed
@ -94,8 +79,8 @@ case $1 in
echo "Generating Let's Encrypt SSL Certificates..."
# Request and generate Let's Encrypt SSL certificate
echo certbot certonly --expand --webroot -w ${WEBROOT_PATH} --key-type rsa --cert-name ${PRODUCT} --noninteractive --agree-tos --email ${MAIL} -d ${DOMAINS[@]} > /var/log/le-start.log
certbot certonly --expand --webroot -w ${WEBROOT_PATH} --key-type rsa --cert-name ${PRODUCT} --noninteractive --agree-tos --email ${MAIL} -d ${DOMAINS[@]} > /var/log/le-new.log
echo certbot certonly --expand --webroot -w ${WEBROOT_PATH} --cert-name ${PRODUCT} --noninteractive --agree-tos --email ${MAIL} -d ${DOMAIN} > /var/log/le-start.log
certbot certonly --expand --webroot -w ${WEBROOT_PATH} --cert-name ${PRODUCT} --noninteractive --agree-tos --email ${MAIL} -d ${DOMAIN} > /var/log/le-new.log
else
help
fi
@ -109,7 +94,10 @@ PRIVATEKEY_FILE="${PRIVATEKEY_FILE:-"${LETSENCRYPT}/${PRODUCT}/privkey.pem"}"
if [ -f "${CERTIFICATE_FILE}" ]; then
if [ -f "${PRIVATEKEY_FILE}" ]; then
cp -f ${OPENRESTY}/onlyoffice-proxy-ssl.conf.template ${OPENRESTY}/onlyoffice-proxy.conf
sed -i "s/\(\"portal\":\).*/\1 \"https:\/\/${DOMAIN}\"/" ${CONFIG_DIR}/appsettings.$(grep -oP 'ENVIRONMENT=\K.*' ${SYSTEMD_DIR}/${PRODUCT}-api.service).json
PACKAGE_FILE_CHECKER=$(command -v dpkg-query &> /dev/null && echo "dpkg-query -L" || echo "rpm -ql")
ENVIRONMENT=$(grep -oP 'ENVIRONMENT=\K.*' $(dirname $(${PACKAGE_FILE_CHECKER} ${PRODUCT}-api | grep systemd/system/))/${PRODUCT}-api.service)
sed -i "s/\(\"portal\":\).*/\1 \"https:\/\/${DOMAIN}\"/" /etc/onlyoffice/docspace/appsettings.$ENVIRONMENT.json
sed -i "s~\(ssl_certificate \).*;~\1${CERTIFICATE_FILE};~g" ${OPENRESTY}/onlyoffice-proxy.conf
sed -i "s~\(ssl_certificate_key \).*;~\1${PRIVATEKEY_FILE};~g" ${OPENRESTY}/onlyoffice-proxy.conf
sed -i "s~\(ssl_dhparam \).*;~\1${DHPARAM_FILE};~g" ${OPENRESTY}/onlyoffice-proxy.conf
@ -130,21 +118,6 @@ if [ -f "${CERTIFICATE_FILE}" ]; then
if [ -d /etc/cron.d ]; then
echo -e "@weekly root ${DIR}/${PRODUCT}-renew-letsencrypt" | tee /etc/cron.d/${PRODUCT}-letsencrypt
fi
else
CERTIFICATE_SUBJECT=$(openssl x509 -subject -noout -in "${CERTIFICATE_FILE}" | sed 's/subject=//')
CERTIFICATE_ISSUER=$(openssl x509 -issuer -noout -in "${CERTIFICATE_FILE}" | sed 's/issuer=//')
#Checking whether the certificate is self-signed
if [[ -n "$CERTIFICATE_SUBJECT" && -n "$CERTIFICATE_ISSUER" && "$CERTIFICATE_SUBJECT" == "$CERTIFICATE_ISSUER" ]]; then
SYSTEMD_NODE_FILES=$(grep -l "ExecStart=/usr/bin/node" ${SYSTEMD_DIR}/${PRODUCT}-*.service; ls ${SYSTEMD_DIR}/ds-*.service 2>/dev/null | grep -v "ds-example" || true)
for SYSTEMD_NODE_FILE in ${SYSTEMD_NODE_FILES}; do
if ! grep -q "NODE_EXTRA_CA_CERTS" "${SYSTEMD_NODE_FILE}"; then
sed -i "/ExecStart=/i Environment=NODE_EXTRA_CA_CERTS=${CERTIFICATE_FILE}" "${SYSTEMD_NODE_FILE}"
fi
done
systemctl daemon-reload
echo "${SYSTEMD_NODE_FILES[@]}" | xargs -I % basename % | xargs systemctl restart
fi
fi
[ $(pgrep -x ""systemd"" | wc -l) -gt 0 ] && systemctl reload openresty || service openresty reload

View File

@ -120,7 +120,7 @@ reassign_values (){
WORK_DIR="${BASE_DIR}/products/ASC.Files/service/"
EXEC_FILE="ASC.Files.Service.dll"
CORE_EVENT_BUS=" --core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue"
DEPENDENCY_LIST="${DEPENDENCY_LIST} opensearch.service"
DEPENDENCY_LIST="${DEPENDENCY_LIST} elasticsearch.service"
;;
studio )
SERVICE_PORT="5003"

View File

@ -11,7 +11,7 @@ Multi-Arch: foreign
Package: {{product}}
Architecture: all
Multi-Arch: foreign
Depends: debconf, openssl,
Depends: debconf,
${misc:Depends}, ${shlibs:Depends},
{{product}}-api (= {{package_header_tag_version}}),
{{product}}-api-system (= {{package_header_tag_version}}),
@ -40,7 +40,7 @@ Description: {{product}}
Package: {{product}}-common
Architecture: all
Multi-Arch: foreign
Depends: adduser, ${misc:Depends}, ${shlibs:Depends}
Depends: adduser, logrotate, ${misc:Depends}, ${shlibs:Depends}
Recommends: default-mysql-client
Description: {{product}}-common
A package containing configs and scripts
@ -56,7 +56,7 @@ Package: {{product}}-files
Architecture: all
Multi-Arch: foreign
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-8.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: opensearch (= 2.11.1)
Recommends: elasticsearch (= 7.16.3)
Description: {{product}}-files
The service which handles API requests related to
documents and launches the OFormService service
@ -65,7 +65,7 @@ Package: {{product}}-files-services
Architecture: all
Multi-Arch: foreign
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-8.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: ffmpeg, opensearch (= 2.11.1)
Recommends: ffmpeg, elasticsearch (= 7.16.3)
Description: {{product}}-files-services
The service which launches additional services related to file management:
- ElasticSearchIndexService - indexes documents using elasticsearch;
@ -79,7 +79,7 @@ Package: {{product}}-notify
Architecture: all
Multi-Arch: foreign
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-8.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: ffmpeg, opensearch (= 2.11.1)
Recommends: ffmpeg, elasticsearch (= 7.16.3)
Description: {{product}}-notify
The service which launches additional services
related to notifications about DocSpace events:

View File

@ -1,4 +1,4 @@
debian/build/buildtools/config/*.json etc/onlyoffice/{{product}}
debian/build/buildtools/config/*.config etc/onlyoffice/{{product}}
debian/build/buildtools/install/common/{{product}}-configuration usr/bin
debian/build/buildtools/install/docker/config/fluent-bit.conf etc/onlyoffice/{{product}}
debian/build/buildtools/install/common/logrotate/{{product}}-common etc/logrotate.d

View File

@ -1,12 +1,9 @@
## COPY PUBLIC ##
debian/build/buildtools/install/common/{{product}}-ssl-setup usr/bin
debian/build/buildtools/install/docker/config/nginx/templates/*.template etc/onlyoffice/{{product}}/openresty
debian/build/buildtools/config/nginx/html/*.html etc/openresty/html
debian/build/buildtools/install/docker/config/nginx/onlyoffice* etc/openresty/conf.d
debian/build/buildtools/config/nginx/onlyoffice*.conf etc/openresty/conf.d
debian/build/buildtools/install/docker/config/nginx/letsencrypt* etc/openresty/includes
debian/build/buildtools/config/nginx/includes/onlyoffice*.conf etc/openresty/includes
debian/build/publish/web/public/* var/www/{{product}}/public
debian/build/campaigns/src/campaigns/* var/www/{{product}}/public/campaigns
debian/build/publish/web/client/* var/www/{{product}}/client
debian/build/publish/web/management/* var/www/{{product}}/management

View File

@ -46,7 +46,6 @@ check_archives:
@$(call extract_archive,${SOURCE_PATH}/client.tar.gz,client,-C ${BUILD_PATH})
@$(call extract_archive,${SOURCE_PATH}/dictionaries.tar.gz,dictionaries,-C ${CLENT_PATH}/common/Tests/Frontend.Translations.Tests)
@$(call extract_archive,${SOURCE_PATH}/DocStore.tar.gz,DocStore,-C ${SERVER_PATH}/products/ASC.Files/Server)
@$(call extract_archive,${SOURCE_PATH}/campaigns.tar.gz,campaigns,-C ${BUILD_PATH})
@echo "Source archives check passed."
override_dh_auto_build: check_archives
@ -76,20 +75,13 @@ override_dh_auto_build: check_archives
sed -e 's_etc/nginx_etc/openresty_g' -e 's/listen\s\+\([0-9]\+\);/listen 127.0.0.1:\1;/g' -i ${BUILDTOOLS_PATH}/config/nginx/*.conf
sed -i "s#\$$public_root#/var/www/${PRODUCT}/public/#g" ${BUILDTOOLS_PATH}/config/nginx/onlyoffice.conf
sed -E 's_(http://)[^:]+(:5601)_\1localhost\2_g' -i ${BUILDTOOLS_PATH}/config/nginx/onlyoffice.conf
sed 's/teamlab.info/onlyoffice.com/g' -i ${BUILDTOOLS_PATH}/config/autofac.consumers.json
json -I -f ${CLENT_PATH}/public/scripts/config.json -e "this.wrongPortalNameUrl=\"\""
sed -e 's/$$router_host/127.0.0.1/g' -e 's/this_host\|proxy_x_forwarded_host/host/g' -e 's/proxy_x_forwarded_proto/scheme/g' -e 's/proxy_x_forwarded_port/server_port/g' -e 's_includes_/etc/openresty/includes_g' -e '/quic\|alt-svc/Id' -i ${BUILDTOOLS_PATH}/install/docker/config/nginx/onlyoffice-proxy*.conf
sed -e 's/$$router_host/127.0.0.1/g' -e 's/the_host/host/g' -e 's/the_scheme/scheme/g' -e 's_includes_/etc/openresty/includes_g' -i ${BUILDTOOLS_PATH}/install/docker/config/nginx/onlyoffice-proxy*.conf
sed "s_\(.*root\).*;_\1 \"/var/www/${PRODUCT}\";_g" -i ${BUILDTOOLS_PATH}/install/docker/config/nginx/letsencrypt.conf
sed -e '/.pid/d' -e '/temp_path/d' -e 's_etc/nginx_etc/openresty_g' -e 's/\.log/-openresty.log/g' -i ${BUILDTOOLS_PATH}/install/docker/config/nginx/templates/nginx.conf.template
mv -f ${BUILDTOOLS_PATH}/install/docker/config/nginx/onlyoffice-proxy-ssl.conf ${BUILDTOOLS_PATH}/install/docker/config/nginx/onlyoffice-proxy-ssl.conf.template
cp -rf ${BUILDTOOLS_PATH}/install/docker/config/nginx/onlyoffice-proxy.conf ${BUILDTOOLS_PATH}/install/docker/config/nginx/onlyoffice-proxy.conf.template
sed -i "s#\(/var/log/onlyoffice/\)#\1${PRODUCT}/#" ${BUILDTOOLS_PATH}/install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\[INPUT]' ${BUILDTOOLS_PATH}/install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\ Name exec' ${BUILDTOOLS_PATH}/install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\ Interval_Sec 86400' ${BUILDTOOLS_PATH}/install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\ Command curl -s -X POST OPENSEARCH_SCHEME://OPENSEARCH_HOST:OPENSEARCH_PORT/OPENSEARCH_INDEX/_delete_by_query -H '\''Content-Type: application/json'\'' -d '\''{"query": {"range": {"@timestamp": {"lt": "now-30d"}}}}'\''' ${BUILDTOOLS_PATH}/install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\\' ${BUILDTOOLS_PATH}/install/docker/config/fluent-bit.conf
for i in ${PRODUCT} $$(ls ${CURDIR}/debian/*.install | grep -oP 'debian/\K.*' | grep -o '^[^.]*'); do \
cp ${CURDIR}/debian/source/lintian-overrides ${CURDIR}/debian/$$i.lintian-overrides; \

View File

@ -1,15 +1,13 @@
# Ignoring node_modules errors due to lack of ability to influence them
embedded-javascript-library var/www/{{product}}/*/node_modules/*
embedded-javascript-library var/www/{{product}}/services/*/node_modules/*
# Ignoring node_modules errors due to lack of ability to influence them
executable-not-elf-or-script var/www/{{product}}/*/node_modules/*
executable-not-elf-or-script var/www/{{product}}/services/*/node_modules/*
# Ignoring node_modules errors due to lack of ability to influence them
privacy-breach-generic var/www/{{product}}/*/node_modules/*
privacy-breach-generic var/www/{{product}}/services/*/node_modules/*
# Ignoring node_modules errors due to lack of ability to influence them
script-not-executable var/www/{{product}}/*/node_modules/*
script-not-executable var/www/{{product}}/services/*/node_modules/*
# Ignoring node_modules errors due to lack of ability to influence them
unusual-interpreter */node_modules/*
# Ignoring node_modules errors due to lack of ability to influence them
statically-linked-binary var/www/{{product}}/*/node_modules/*
# The use of the /var/www directory is caused by its past history as the default document root
dir-or-file-in-var-www

View File

@ -6,26 +6,35 @@
DOCKER_IMAGE_PREFIX=${STATUS}docspace
DOCKER_TAG=latest
CONTAINER_PREFIX=${PRODUCT}-
MYSQL_VERSION=8.3.0
MYSQL_VERSION=8.0.32
MYSQL_IMAGE=mysql:${MYSQL_VERSION}
ELK_VERSION=7.16.3
SERVICE_PORT=5050
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/4testing-documentserver-ee:latest
DOCKERFILE=Dockerfile.app
APP_DOTNET_ENV=""
EXTERNAL_PORT="80"
# opensearch stack #
ELK_VERSION=2.11.1
ELK_CONTAINER_NAME=${CONTAINER_PREFIX}opensearch
# zookeeper #
ZOO_PORT=2181
ZOO_HOST=${CONTAINER_PREFIX}zookeeper
ZOO_SERVER=server.1=${ZOO_HOST}:2888:3888
# kafka #
KAFKA_HOST=${CONTAINER_PREFIX}kafka
KAFKA_ADVERTISED_LISTENERS=LISTENER_DOCKER_INTERNAL://${KAFKA_HOST}:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME=LISTENER_DOCKER_INTERNAL
KAFKA_ZOOKEEPER_CONNECT=${ZOO_HOST}:2181
KAFKA_BROKER_ID=1
KAFKA_LOG4J_LOGGERS=kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
# elasticsearch #
ELK_CONTAINER_NAME=${CONTAINER_PREFIX}elasticsearch
ELK_SHEME=http
ELK_HOST=""
ELK_PORT=9200
DASHBOARDS_VERSION=2.11.1
DASHBOARDS_CONTAINER_NAME=${CONTAINER_PREFIX}opensearch-dashboards
DASHBOARDS_USERNAME=onlyoffice
DASHBOARDS_PASSWORD=onlyoffice
FLUENT_BIT_VERSION=3.0.2
FLUENT_BIT_CONTAINER_NAME=${CONTAINER_PREFIX}fluent-bit
# app service environment #
ENV_EXTENSION=none
@ -98,7 +107,6 @@
ROUTER_HOST=${CONTAINER_PREFIX}router
DOCEDITOR_HOST=${CONTAINER_PREFIX}doceditor
LOGIN_HOST=${CONTAINER_PREFIX}login
MANAGEMENT_HOST={CONTAINER_PREFIX}management
HELTHCHECKS_HOST=${CONTAINER_PREFIX}healthchecks
# router upstream environment #
@ -119,7 +127,6 @@
SERVICE_TELEGRAMREPORTS=${TELEGRAMREPORTS_HOST}:${SERVICE_PORT}
SERVICE_DOCEDITOR=${DOCEDITOR_HOST}:5013
SERVICE_LOGIN=${LOGIN_HOST}:5011
SERVICE_MANAGEMENT={MANAGEMENT_HOST}:${SERVICE_PORT}
SERVICE_HELTHCHECKS=${HELTHCHECKS_HOST}:${SERVICE_PORT}
NETWORK_NAME=${PRODUCT}

View File

@ -112,7 +112,7 @@ COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onl
EXPOSE 5050
ENTRYPOINT ["python3", "docker-entrypoint.py"]
FROM node:20.11.0-slim as noderun
FROM node:18.12.1-slim as noderun
ARG BUILD_PATH
ARG SRC_PATH
ENV BUILD_PATH=${BUILD_PATH}
@ -131,7 +131,7 @@ RUN mkdir -p /var/log/onlyoffice && \
curl \
vim \
python3-pip && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces --break-system-packages && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
rm -rf /var/lib/apt/lists/*
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/

View File

@ -32,18 +32,17 @@ RUN apt-get -y update && \
npm && \
locale-gen en_US.UTF-8 && \
npm install --global yarn && \
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import && \
chmod 644 /usr/share/keyrings/nodesource.gpg && \
apt-get -y update && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
ADD https://api.github.com/repos/ONLYOFFICE/DocSpace-buildtools/git/refs/heads/${GIT_BRANCH} version.json
ADD https://api.github.com/repos/ONLYOFFICE/DocSpace/git/refs/heads/${GIT_BRANCH} version.json
RUN git clone -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-buildtools.git ${SRC_PATH}/buildtools && \
git clone --recurse-submodules -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-Server.git ${SRC_PATH}/server && \
git clone -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-Client.git ${SRC_PATH}/client && \
git clone -b "master" --depth 1 https://github.com/ONLYOFFICE/ASC.Web.Campaigns.git ${SRC_PATH}/campaigns
git clone -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-Client.git ${SRC_PATH}/client
RUN cd ${SRC_PATH} && \
mkdir -p /app/onlyoffice/config/ && \
@ -100,7 +99,7 @@ COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onl
EXPOSE 5050
ENTRYPOINT ["python3", "docker-entrypoint.py"]
FROM node:20-slim as noderun
FROM node:18-slim as noderun
ARG BUILD_PATH
ARG SRC_PATH
ENV BUILD_PATH=${BUILD_PATH}
@ -149,12 +148,9 @@ COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
COPY --from=base /etc/nginx/includes /etc/nginx/includes
COPY --from=base ${SRC_PATH}/publish/web/client ${BUILD_PATH}/client
COPY --from=base ${SRC_PATH}/publish/web/public ${BUILD_PATH}/public
COPY --from=base ${SRC_PATH}/campaigns/src/campaigns ${BUILD_PATH}/public/campaigns
COPY --from=base ${SRC_PATH}/publish/web/management ${BUILD_PATH}/management
COPY --from=base ${SRC_PATH}/buildtools/install/docker/config/nginx/docker-entrypoint.d /docker-entrypoint.d
COPY --from=base ${SRC_PATH}/buildtools/install/docker/config/nginx/templates/upstream.conf.template /etc/nginx/templates/upstream.conf.template
COPY --from=base ${SRC_PATH}/buildtools/install/docker/config/nginx/templates/nginx.conf.template /etc/nginx/nginx.conf.template
COPY --from=base ${SRC_PATH}/buildtools/config/nginx/html /etc/nginx/html
COPY --from=base ${SRC_PATH}/buildtools/install/docker/prepare-nginx-router.sh /docker-entrypoint.d/prepare-nginx-router.sh
COPY --from=base ${SRC_PATH}/buildtools/install/docker/config/nginx/docker-entrypoint.sh /docker-entrypoint.sh
@ -170,10 +166,7 @@ RUN sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice.
sed -i 's/127.0.0.1:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \
sed -i 's/127.0.0.1:5013/$service_doceditor/' /etc/nginx/conf.d/onlyoffice.conf && \
sed -i 's/127.0.0.1:5011/$service_login/' /etc/nginx/conf.d/onlyoffice.conf && \
if [[ -z "${SERVICE_CLIENT}" ]] ; then sed -i 's/127.0.0.1:5001/$service_client/' /etc/nginx/conf.d/onlyoffice.conf; fi && \
if [[ -z "${SERVICE_MANAGEMENT}" ]] ; then sed -i 's/127.0.0.1:5015/$service_management/' /etc/nginx/conf.d/onlyoffice.conf; fi && \
sed -i 's/127.0.0.1:5033/$service_healthchecks/' /etc/nginx/conf.d/onlyoffice.conf && \
sed -i 's/127.0.0.1:5601/$dashboards_host:5601/' /etc/nginx/conf.d/onlyoffice.conf && \
sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \
sed -i 's/http:\/\/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf && \
sed -i '/client_body_temp_path/ i \ \ \ \ $MAP_HASH_BUCKET_SIZE' /etc/nginx/nginx.conf.template && \
@ -252,13 +245,6 @@ FROM dotnetrun AS files_services
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
WORKDIR ${BUILD_PATH}/products/ASC.Files/service/
RUN echo "deb http://security.ubuntu.com/ubuntu focal-security main" | tee /etc/apt/sources.list && \
apt-key adv --keyserver keys.gnupg.net --recv-keys 3B4FE6ACC0B21F32 && \
apt-key adv --keyserver keys.gnupg.net --recv-keys 871920D1991BC93C && \
apt-get -y update && \
apt-get install -yq libssl1.1 && \
rm -rf /var/lib/apt/lists/*
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files.Service/service/ .
COPY --from=onlyoffice/ffvideo:6.0 --chown=onlyoffice:onlyoffice /usr/local /usr/local/

View File

@ -15,7 +15,6 @@ RUN find config/ -maxdepth 1 -name "*.json" | grep -v test | grep -v dev | xargs
tar -C "/app/onlyoffice/" -xvf config.tar && \
cp config/*.config /app/onlyoffice/config/ && \
mkdir -p /etc/nginx/conf.d && cp -f config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \
mkdir -p /etc/nginx/html && cp -f config/nginx/html/* /etc/nginx/html/ && \
mkdir -p /etc/nginx/includes/ && cp -f config/nginx/includes/onlyoffice*.conf /etc/nginx/includes/ && \
sed -i "s/\"number\".*,/\"number\": \"${PRODUCT_VERSION}.${BUILD_NUMBER}\",/g" /app/onlyoffice/config/appsettings.json && \
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf
@ -49,7 +48,7 @@ COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onl
EXPOSE 5050
ENTRYPOINT ["python3", "docker-entrypoint.py"]
FROM node:20.11.0-slim as noderun
FROM node:18.12.1-slim as noderun
ARG BUILD_PATH
ARG SRC_PATH
ENV BUILD_PATH=${BUILD_PATH}
@ -68,7 +67,7 @@ RUN mkdir -p /var/log/onlyoffice && \
curl \
vim \
python3-pip && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces --break-system-packages && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
rm -rf /var/lib/apt/lists/*
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
@ -93,7 +92,6 @@ RUN apt-get -y update && \
# copy static services files and config values
COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
COPY --from=base /etc/nginx/html /etc/nginx/html
COPY /buildtools/install/docker/config/nginx/docker-entrypoint.sh /docker-entrypoint.sh
COPY /buildtools/install/docker/config/nginx/docker-entrypoint.d /docker-entrypoint.d

View File

@ -1,3 +1,5 @@
version: "3.8"
services:
onlyoffice-backup-background-tasks:
build:

View File

@ -0,0 +1,33 @@
#!/bin/bash
set -e
PRODUCT="docspace"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
DOCKERCOMPOSE=$(dirname "$DIR")
if [ -f "${DOCKERCOMPOSE}/docspace.yml" ]; then
:
elif [ -f "/app/onlyoffice/${PRODUCT}.yml" ]; then
DOCKERCOMPOSE="/app/onlyoffice"
else
echo "Error: yml files not found." && exit 1
fi
FILES=("${PRODUCT}" "notify" "healthchecks" "proxy" "ds" "rabbitmq" "redis" "elasticsearch" "db")
LOG_DIR="${DOCKERCOMPOSE}/logs"
mkdir -p ${LOG_DIR}
echo "Creating ${PRODUCT} logs to a directory ${LOG_DIR}..."
for FILE in "${FILES[@]}"; do
SERVICE_NAMES=($(docker-compose -f ${DOCKERCOMPOSE}/${FILE}.yml config --services))
for SERVICE_NAME in "${SERVICE_NAMES[@]}"; do
if [[ $(docker-compose -f ${DOCKERCOMPOSE}/${FILE}.yml ps -q ${SERVICE_NAME} | wc -l) -eq 1 ]]; then
docker-compose -f ${DOCKERCOMPOSE}/${FILE}.yml logs ${SERVICE_NAME} > ${LOG_DIR}/${SERVICE_NAME}.log
else
echo "The ${SERVICE_NAME} service is not running"
fi
done
done
echo "OK"

View File

@ -28,12 +28,10 @@ help(){
echo " Use comma to register multiple emails, ex:"
echo " u1@example.com,u2@example.com."
echo " DOMAIN Domain name to apply"
echo " Use comma to register multiple domains, ex:"
echo " example.com,s1.example.com,s2.example.com."
echo ""
echo "Using your own certificates via the -f or --file parameter:"
echo " docspace-ssl-setup --file DOMAIN CERTIFICATE PRIVATEKEY"
echo " DOMAIN Main domain name to apply."
echo " DOMAIN Domain name to apply."
echo " CERTIFICATE Path to the certificate file for the domain."
echo " PRIVATEKEY Path to the private key file for the certificate."
echo ""
@ -71,15 +69,8 @@ case $1 in
fi
fi
if grep -q '${CERTIFICATE_PATH}:' ${DOCKERCOMPOSE}/docspace.yml; then
sed -i '/USE_UNAUTHORIZED_STORAGE/d' ${DOCKERCOMPOSE}/ds.yml
sed -i '/${CERTIFICATE_PATH}:/d' ${DOCKERCOMPOSE}/docspace.yml ${DOCKERCOMPOSE}/ds.yml
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml up --force-recreate -d onlyoffice-doceditor onlyoffice-login onlyoffice-socket onlyoffice-ssoauth
docker-compose -f ${DOCKERCOMPOSE}/ds.yml up --force-recreate -d
fi
docker-compose -f ${DOCKERCOMPOSE}/proxy.yml up --force-recreate -d
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml up --force-recreate -d onlyoffice-files
docker-compose -f ${DOCKERCOMPOSE}/proxy.yml up -d
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml restart onlyoffice-files
echo "OK"
exit 0
@ -88,8 +79,7 @@ case $1 in
* )
if [ "$#" -ge "2" ]; then
MAIL=$1
DOMAINS=$2
DOMAIN=$(cut -d ',' -f 1 <<< "$DOMAINS")
DOMAIN=$2
LETSENCRYPT_ENABLE="true"
if ! docker volume inspect "onlyoffice_webroot_path" &> /dev/null; then
@ -109,8 +99,8 @@ case $1 in
-v /var/log:/var/log \
-v onlyoffice_webroot_path:${WEBROOT_PATH} \
certbot/certbot certonly \
--expand --webroot -w ${WEBROOT_PATH} --key-type rsa \
--cert-name ${PRODUCT} --non-interactive --agree-tos --email ${MAIL} -d ${DOMAINS[@]}
--expand --webroot -w ${WEBROOT_PATH} \
--cert-name ${PRODUCT} --non-interactive --agree-tos --email ${MAIL} -d ${DOMAIN}
else
help
fi
@ -123,6 +113,9 @@ PRIVATEKEY_FILE="${PRIVATEKEY_FILE:-"${LETSENCRYPT}/${PRODUCT}/privkey.pem"}"
if [ -f "${CERTIFICATE_FILE}" ]; then
if [ -f "${PRIVATEKEY_FILE}" ]; then
docker-compose -f ${DOCKERCOMPOSE}/proxy.yml down
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml stop onlyoffice-files
sed -i "s~\(APP_URL_PORTAL=\).*~\1\"https://${DOMAIN}\"~g" ${DOCKERCOMPOSE}/.env
sed -i "s~\(CERTIFICATE_PATH=\).*~\1\"${CERTIFICATE_FILE}\"~g" ${DOCKERCOMPOSE}/.env
sed -i "s~\(CERTIFICATE_KEY_PATH=\).*~\1\"${PRIVATEKEY_FILE}\"~g" ${DOCKERCOMPOSE}/.env
@ -144,21 +137,10 @@ if [ -f "${CERTIFICATE_FILE}" ]; then
if [ -d /etc/cron.d ]; then
echo -e "@weekly root ${DIR}/${PRODUCT}-renew-letsencrypt" | tee /etc/cron.d/${PRODUCT}-letsencrypt
fi
else
CERTIFICATE_SUBJECT=$(openssl x509 -subject -noout -in "${CERTIFICATE_FILE}" | sed -n 's/^.*CN *= *\([^,]*\).*$/\1/p' | awk -F. '{print $(NF-1)"."$NF}')
CERTIFICATE_ISSUER=$(openssl x509 -issuer -noout -in "${CERTIFICATE_FILE}" | sed -n 's/^.*CN *= *\([^,]*\).*$/\1/p' | awk -F. '{print $(NF-1)"."$NF}')
#Checking whether the certificate is self-signed
if [[ -n "$CERTIFICATE_SUBJECT" && -n "$CERTIFICATE_ISSUER" && "$CERTIFICATE_SUBJECT" == "$CERTIFICATE_ISSUER" ]]; then
sed -i '/app_data:\/.*/a \ - ${CERTIFICATE_PATH}:${CERTIFICATE_PATH}' ${DOCKERCOMPOSE}/docspace.yml
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml up --force-recreate -d onlyoffice-doceditor onlyoffice-login onlyoffice-socket onlyoffice-ssoauth
sed -i '/app_data:\/.*/a \ - ${CERTIFICATE_PATH}:/var/www/onlyoffice/Data/certs/extra-ca-certs.pem' ${DOCKERCOMPOSE}/ds.yml
docker-compose -f ${DOCKERCOMPOSE}/ds.yml up --force-recreate -d
fi
fi
docker-compose -f ${DOCKERCOMPOSE}/proxy-ssl.yml up --force-recreate -d
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml up --force-recreate -d onlyoffice-files
docker-compose -f ${DOCKERCOMPOSE}/proxy-ssl.yml up -d
docker-compose -f ${DOCKERCOMPOSE}/docspace.yml up -d onlyoffice-files
echo "OK"
else

View File

@ -1,26 +0,0 @@
[SERVICE]
Flush 1
Log_Level info
Daemon off
[INPUT]
Name tail
Path /var/log/onlyoffice/*.log, /var/log/onlyoffice/**/**/*.log
Exclude_Path /var/log/onlyoffice/*.sql.log
Path_Key filename
Mem_Buf_Limit 500MB
Refresh_Interval 60
Ignore_Older 30d
Skip_Empty_Lines true
[OUTPUT]
Name opensearch
Match *
Host OPENSEARCH_HOST
Port OPENSEARCH_PORT
Replace_Dots On
Suppress_Type_Name On
Compress gzip
Time_Key @timestamp
Type _doc
Index OPENSEARCH_INDEX

View File

@ -1,14 +1,11 @@
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header Host $this_host;
proxy_set_header X-Forwarded-Host $proxy_x_forwarded_host;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header Host $the_host;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header 'Server';
proxy_hide_header 'X-Powered-By';
access_log /var/log/nginx/access-proxy.log;
error_log /var/log/nginx/error-proxy.log;
more_clear_headers 'Server';
more_clear_headers 'X-Powered-By';
## HTTP host
server {
@ -35,14 +32,8 @@ server {
## HTTPS host
server {
# Enable HTTP/2
listen 0.0.0.0:443 ssl;
listen [::]:443 ssl default_server;
# Enable QUIC and HTTP/3.
listen 0.0.0.0:443 quic reuseport;
listen [::]:443 quic reuseport;
root /usr/share/nginx/html;
client_max_body_size 4G;
@ -57,7 +48,7 @@ server {
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_protocols TLSv1.2;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_prefer_server_ciphers on;
@ -65,7 +56,6 @@ server {
add_header Strict-Transport-Security max-age=31536000;
# add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header alt-svc 'h3=":443"; ma=86400';
## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL.
## Replace with your ssl_trusted_certificate. For more info see:

View File

@ -1,14 +1,21 @@
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header Host $this_host;
proxy_set_header X-Forwarded-Host $proxy_x_forwarded_host:$proxy_x_forwarded_port;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header Host $the_host;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header 'Server';
proxy_hide_header 'X-Powered-By';
more_clear_headers 'Server';
more_clear_headers 'X-Powered-By';
access_log /var/log/nginx/access-proxy.log;
error_log /var/log/nginx/error-proxy.log;
proxy_cache_path /var/cache/openresty levels=1:2 keys_zone=cache_proxy:10m max_size=1g inactive=24h use_temp_path=off;
map $upstream_http_cache_control $cache_condition {
~*max-age=0|~*s-maxage=0 1;
~*private|~*no-store 1;
~*max-age=(\d+)|~*s-maxage=(\d+) 0;
~*immutable 0;
default 1;
}
server {
listen 0.0.0.0:80;
@ -18,6 +25,15 @@ server {
location / {
proxy_pass http://$router_host:8092;
proxy_cache cache_proxy;
proxy_cache_revalidate on;
proxy_no_cache $cache_condition;
proxy_cache_valid 200 206 301 120m;
proxy_cache_valid 302 303 20m;
proxy_cache_valid 404 410 3m;
add_header X-Cache-Status $upstream_cache_status;
}
include includes/letsencrypt.conf;

View File

@ -5,19 +5,19 @@ map $http_host $this_host {
default $http_host;
}
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
map $http_x_forwarded_proto $the_scheme {
default $http_x_forwarded_proto;
"" $scheme;
}
map $http_x_forwarded_host $proxy_x_forwarded_host {
map $http_x_forwarded_host $the_host {
default $http_x_forwarded_host;
"" $this_host;
"" $host;
}
map $http_x_forwarded_port $proxy_x_forwarded_port {
default $EXTERNAL_PORT;
~^(.*)$ $1;
default $http_x_forwarded_port;
'' $server_port;
}
map $http_upgrade $proxy_connection {

View File

@ -83,9 +83,3 @@ map $SERVICE_CLIENT $service_client {
"" 127.0.0.1:5001;
default $SERVICE_CLIENT;
}
map $DASHBOARDS_CONTAINER_NAME $dashboards_host {
volatile;
default onlyoffice-opensearch-dashboards;
~^(.*)$ $1;
}

View File

@ -1,16 +0,0 @@
services:
onlyoffice-opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:${DASHBOARDS_VERSION}
container_name: ${DASHBOARDS_CONTAINER_NAME}
restart: always
environment:
- OPENSEARCH_HOSTS=${ELK_SHEME}://${ELK_CONTAINER_NAME}:${ELK_PORT}
- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=true"
- "SERVER_BASEPATH=/dashboards"
expose:
- "5601"
networks:
default:
name: ${NETWORK_NAME}
external: true

View File

@ -1,6 +1,9 @@
version: "3.8"
services:
onlyoffice-mysql-server:
image: ${MYSQL_IMAGE}
command: --default-authentication-plugin=caching_sha2_password
cap_add:
- SYS_NICE
container_name: ${MYSQL_CONTAINER_NAME}
@ -16,11 +19,6 @@ services:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping --silent"]
interval: 10s
timeout: 5s
retries: 3
volumes:
- mysql_data:/var/lib/mysql
- ./config/mysql/conf.d/:/etc/mysql/conf.d

View File

@ -1,3 +1,4 @@
version: "3.8"
services:
dnsmasq:
image: jpillora/dnsmasq

View File

@ -39,9 +39,6 @@ LOG_LEVEL = os.environ["LOG_LEVEL"].lower() if environ.get("LOG_LEVEL") else Non
DEBUG_INFO = os.environ["DEBUG_INFO"] if environ.get("DEBUG_INFO") else "false"
SAMESITE = os.environ["SAMESITE"] if environ.get("SAMESITE") else "None"
CERTIFICATE_PATH = os.environ.get("CERTIFICATE_PATH")
CERTIFICATE_PARAM = "NODE_EXTRA_CA_CERTS=" + CERTIFICATE_PATH + " " if CERTIFICATE_PATH and os.path.exists(CERTIFICATE_PATH) else ""
DOCUMENT_CONTAINER_NAME = os.environ["DOCUMENT_CONTAINER_NAME"] if environ.get("DOCUMENT_CONTAINER_NAME") else "onlyoffice-document-server"
DOCUMENT_SERVER_JWT_SECRET = os.environ["DOCUMENT_SERVER_JWT_SECRET"] if environ.get("DOCUMENT_SERVER_JWT_SECRET") else "your_jwt_secret"
DOCUMENT_SERVER_JWT_HEADER = os.environ["DOCUMENT_SERVER_JWT_HEADER"] if environ.get("DOCUMENT_SERVER_JWT_HEADER") else "AuthorizationJwt"
@ -50,13 +47,14 @@ DOCUMENT_SERVER_URL_EXTERNAL = os.environ["DOCUMENT_SERVER_URL_EXTERNAL"] if env
DOCUMENT_SERVER_URL_PUBLIC = DOCUMENT_SERVER_URL_EXTERNAL if DOCUMENT_SERVER_URL_EXTERNAL else os.environ["DOCUMENT_SERVER_URL_PUBLIC"] if environ.get("DOCUMENT_SERVER_URL_PUBLIC") else "/ds-vpath/"
DOCUMENT_SERVER_CONNECTION_HOST = DOCUMENT_SERVER_URL_EXTERNAL if DOCUMENT_SERVER_URL_EXTERNAL else DOCUMENT_SERVER_URL_INTERNAL
ELK_CONTAINER_NAME = os.environ["ELK_CONTAINER_NAME"] if environ.get("ELK_CONTAINER_NAME") else "onlyoffice-opensearch"
ELK_CONTAINER_NAME = os.environ["ELK_CONTAINER_NAME"] if environ.get("ELK_CONTAINER_NAME") else "onlyoffice-elasticsearch"
ELK_SHEME = os.environ["ELK_SHEME"] if environ.get("ELK_SHEME") else "http"
ELK_HOST = os.environ["ELK_HOST"] if environ.get("ELK_HOST") else None
ELK_PORT = os.environ["ELK_PORT"] if environ.get("ELK_PORT") else "9200"
ELK_THREADS = os.environ["ELK_THREADS"] if environ.get("ELK_THREADS") else "1"
ELK_CONNECTION_HOST = ELK_HOST if ELK_HOST else ELK_CONTAINER_NAME
KAFKA_HOST = os.environ["KAFKA_HOST"] if environ.get("KAFKA_HOST") else "kafka:9092"
RUN_FILE = sys.argv[1] if (len(sys.argv) > 1) else "none"
LOG_FILE = sys.argv[2] if (len(sys.argv) > 2) else "none"
CORE_EVENT_BUS = sys.argv[3] if (len(sys.argv) > 3) else ""
@ -83,7 +81,7 @@ class RunServices:
self.PATH_TO_CONF = PATH_TO_CONF
@dispatch(str)
def RunService(self, RUN_FILE):
os.system(CERTIFICATE_PARAM + "node " + RUN_FILE + " --app.port=" + self.SERVICE_PORT +\
os.system("node " + RUN_FILE + " --app.port=" + self.SERVICE_PORT +\
" --app.appsettings=" + self.PATH_TO_CONF)
return 1
@ -91,7 +89,7 @@ class RunServices:
def RunService(self, RUN_FILE, ENV_EXTENSION):
if ENV_EXTENSION == "none":
self.RunService(RUN_FILE)
os.system(CERTIFICATE_PARAM + "node " + RUN_FILE + " --app.port=" + self.SERVICE_PORT +\
os.system("node " + RUN_FILE + " --app.port=" + self.SERVICE_PORT +\
" --app.appsettings=" + self.PATH_TO_CONF +\
" --app.environment=" + ENV_EXTENSION)
return 1
@ -200,7 +198,6 @@ writeJsonFile(filePath, jsonData)
filePath = "/app/onlyoffice/config/appsettings.services.json"
jsonData = openJsonFile(filePath)
updateJsonData(jsonData,"$.logPath", LOG_DIR)
updateJsonData(jsonData,"$.logLevel", LOG_LEVEL)
writeJsonFile(filePath, jsonData)
@ -216,14 +213,18 @@ if OAUTH_REDIRECT_URL:
writeJsonFile(filePath, jsonData)
if ENV_EXTENSION != "dev":
filePath = "/app/onlyoffice/config/elastic.json"
jsonData = openJsonFile(filePath)
jsonData["elastic"]["Scheme"] = ELK_SHEME
jsonData["elastic"]["Host"] = ELK_CONNECTION_HOST
jsonData["elastic"]["Port"] = ELK_PORT
jsonData["elastic"]["Threads"] = ELK_THREADS
writeJsonFile(filePath, jsonData)
filePath = "/app/onlyoffice/config/elastic.json"
jsonData = openJsonFile(filePath)
jsonData["elastic"]["Scheme"] = ELK_SHEME
jsonData["elastic"]["Host"] = ELK_CONNECTION_HOST
jsonData["elastic"]["Port"] = ELK_PORT
jsonData["elastic"]["Threads"] = ELK_THREADS
writeJsonFile(filePath, jsonData)
filePath = "/app/onlyoffice/config/kafka.json"
jsonData = openJsonFile(filePath)
jsonData.update({"kafka": {"BootstrapServers": KAFKA_HOST}})
writeJsonFile(filePath, jsonData)
filePath = "/app/onlyoffice/config/socket.json"
jsonData = openJsonFile(filePath)

View File

@ -50,7 +50,7 @@ DOCUMENT_SERVER_URL_PUBLIC=${DOCUMENT_SERVER_URL_PUBLIC:-"/ds-vpath/"}
DOCUMENT_SERVER_URL_INTERNAL=${DOCUMENT_SERVER_URL_INTERNAL:-"${SHEME}://${PRODUCT}-document-server/"}
ELK_SHEME=${ELK_SHEME:-"http"}
ELK_HOST=${ELK_HOST:-"${PRODUCT}-opensearch"}
ELK_HOST=${ELK_HOST:-"${PRODUCT}-elasticsearch"}
ELK_PORT=${ELK_PORT:-"9200"}
ELK_THREADS=${ELK_THREADS:-"1"}

View File

@ -1,3 +1,4 @@
version: "3.8"
x-profiles-local: &x-profiles-local
profiles: ["backend-local"]
environment:

View File

@ -1,3 +1,4 @@
version: "3.8"
x-healthcheck: &x-healthcheck
test: curl --fail http://127.0.0.1 || exit 1
interval: 60s
@ -63,31 +64,30 @@ x-service: &x-service-base
- people_data:/var/www/products/ASC.People/server/
services:
onlyoffice-opensearch:
onlyoffice-elasticsearch:
<<: [*x-profiles-extra-services]
image: onlyoffice/opensearch:${ELK_VERSION}
container_name: ${ELK_CONTAINER_NAME}
image: onlyoffice/elasticsearch:${ELK_VERSION}
container_name: ${ELK_HOST}
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
- "ES_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
- "indices.fielddata.cache.size=30%"
- "indices.memory.index_buffer_size=30%"
- "DISABLE_INSTALL_DEMO_CONFIG=true"
- "DISABLE_SECURITY_PLUGIN=true"
- "ingest.geoip.downloader.enabled=false"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536 # maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems
hard: 65536
soft: 65535
hard: 65535
volumes:
- os_data:/usr/share/opensearch/data
- es_data:/usr/share/elasticsearch/data
expose:
- "9200"
- "9600" # required for Performance Analyzer
- "9300"
onlyoffice-rabbitmq:
<<: [*x-profiles-extra-services]
@ -279,7 +279,6 @@ services:
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- SERVICE_PORT=${SERVICE_PORT}
- DASHBOARDS_CONTAINER_NAME=${DASHBOARDS_CONTAINER_NAME}
volumes:
- router_log:/var/log/nginx
@ -302,7 +301,7 @@ networks:
external: true
volumes:
os_data:
es_data:
router_log:
app_data:
files_data:

View File

@ -1,3 +1,4 @@
version: "3.8"
x-healthcheck:
&x-healthcheck
test: curl --fail http://127.0.0.1 || exit 1
@ -32,6 +33,7 @@ x-service: &x-service-base
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
DOCUMENT_CONTAINER_NAME: ${DOCUMENT_CONTAINER_NAME}
DOCUMENT_SERVER_URL_EXTERNAL: ${DOCUMENT_SERVER_URL_EXTERNAL}
KAFKA_HOST: ${KAFKA_HOST}
ELK_CONTAINER_NAME: ${ELK_CONTAINER_NAME}
ELK_SHEME: ${ELK_SHEME}
ELK_HOST: ${ELK_HOST}
@ -50,10 +52,8 @@ x-service: &x-service-base
ROUTER_HOST: ${ROUTER_HOST}
LOG_LEVEL: ${LOG_LEVEL}
DEBUG_INFO: ${DEBUG_INFO}
CERTIFICATE_PATH: ${CERTIFICATE_PATH}
volumes:
#- /app/onlyoffice/CommunityServer/data:/app/onlyoffice/data
- log_data:/var/log/onlyoffice
- app_data:/app/onlyoffice/data
- files_data:/var/www/products/ASC.Files/server/
- people_data:/var/www/products/ASC.People/server/
@ -162,7 +162,7 @@ services:
- "5013"
healthcheck:
<<: *x-healthcheck
test: curl --fail http://${SERVICE_DOCEDITOR}/doceditor/health || exit 1
test: curl --fail http://${SERVICE_DOCEDITOR}/health || exit 1
onlyoffice-login:
<<: *x-service-base
@ -172,7 +172,7 @@ services:
- "5011"
healthcheck:
<<: *x-healthcheck
test: curl --fail http://${SERVICE_LOGIN}/login/health || exit 1
test: curl --fail http://${SERVICE_LOGIN}/health || exit 1
onlyoffice-router:
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-router:${DOCKER_TAG}"
@ -224,11 +224,8 @@ services:
- REDIS_PORT=${REDIS_PORT}
- REDIS_PASSWORD=${REDIS_PASSWORD}
- SERVICE_PORT=${SERVICE_PORT}
- DASHBOARDS_CONTAINER_NAME=${DASHBOARDS_CONTAINER_NAME}
- DASHBOARDS_USERNAME=${DASHBOARDS_USERNAME}
- DASHBOARDS_PASSWORD=${DASHBOARDS_PASSWORD}
volumes:
- log_data:/var/log/nginx
- router_log:/var/log/nginx
networks:
default:
@ -236,7 +233,7 @@ networks:
external: true
volumes:
log_data:
router_log:
app_data:
files_data:
people_data:

View File

@ -1,3 +1,4 @@
version: '3.6'
services:
onlyoffice-document-server:
image: "${DOCUMENT_SERVER_IMAGE_NAME}"
@ -9,7 +10,6 @@ services:
- JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER}
- JWT_IN_BODY=true
volumes:
- log_data:/var/log/onlyoffice
- app_data:/var/www/onlyoffice/Data
expose:
- '80'
@ -23,5 +23,4 @@ networks:
external: true
volumes:
log_data:
app_data:

View File

@ -0,0 +1,32 @@
version: "3"
services:
onlyoffice-elasticsearch:
image: onlyoffice/elasticsearch:${ELK_VERSION}
container_name: ${ELK_CONTAINER_NAME}
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
- "indices.fielddata.cache.size=30%"
- "indices.memory.index_buffer_size=30%"
- "ingest.geoip.downloader.enabled=false"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65535
hard: 65535
volumes:
- es_data:/usr/share/elasticsearch/data
expose:
- "9200"
- "9300"
networks:
default:
name: ${NETWORK_NAME}
external: true
volumes:
es_data:

View File

@ -1,19 +0,0 @@
services:
fluent-bit:
image: fluent/fluent-bit:${FLUENT_BIT_VERSION}
container_name: ${FLUENT_BIT_CONTAINER_NAME}
restart: always
environment:
- HOST=${ELK_CONTAINER_NAME}
- PORT=${ELK_PORT}
volumes:
- log_data:/var/log/onlyoffice
- ./config/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
networks:
default:
name: ${NETWORK_NAME}
external: true
volumes:
log_data:

View File

@ -1,3 +1,4 @@
version: "3.8"
x-service:
&x-service-base
container_name: base

43
install/docker/kafka.yml Normal file
View File

@ -0,0 +1,43 @@
version: "3.6"
services:
onlyoffice-zookeeper:
image: zookeeper:latest
container_name: ${ZOO_HOST}
restart: always
expose:
- "2181"
environment:
ZOO_MY_ID: 1
ZOO_PORT: ${ZOO_PORT:-2181}
ZOO_SERVER: ${ZOO_SERVER}
volumes:
- /app/onlyoffice/data/zookeeper/zoo_data:/data
- /app/onlyoffice/data/zookeeper/zoo_log:/datalog
onlyoffice-kafka:
image: confluentinc/cp-kafka:latest
container_name: ${KAFKA_HOST}
restart: always
expose:
- "9092"
depends_on:
- onlyoffice-zookeeper
environment:
KAFKA_ADVERTISED_LISTENERS: ${KAFKA_ADVERTISED_LISTENERS}
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: ${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP}
KAFKA_INTER_BROKER_LISTENER_NAME: ${KAFKA_INTER_BROKER_LISTENER_NAME}
KAFKA_ZOOKEEPER_CONNECT: ${KAFKA_ZOOKEEPER_CONNECT}
KAFKA_BROKER_ID: ${KAFKA_BROKER_ID}
KAFKA_LOG4J_LOGGERS: ${KAFKA_LOG4J_LOGGERS}
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: ${KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR}
volumes:
#- /app/onlyoffice/data/kafka_data:/var/lib/kafka/data
- kafka_data:/var/lib/kafka/data
volumes:
kafka_data:
networks:
default:
name: ${NETWORK_NAME}
external: true

View File

@ -1,3 +1,5 @@
version: "3.8"
services:
onlyoffice-migration-runner:
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}"

View File

@ -1,3 +1,4 @@
version: "3.8"
x-healthcheck:
&x-healthcheck
test: curl --fail http://127.0.0.1 || exit 1
@ -33,6 +34,7 @@ x-service:
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
DOCUMENT_CONTAINER_NAME: ${DOCUMENT_CONTAINER_NAME}
DOCUMENT_SERVER_URL_EXTERNAL: ${DOCUMENT_SERVER_URL_EXTERNAL}
KAFKA_HOST: ${KAFKA_HOST}
ELK_CONTAINER_NAME: ${ELK_CONTAINER_NAME}
ELK_SHEME: ${ELK_SHEME}
ELK_HOST: ${ELK_HOST}
@ -53,7 +55,6 @@ x-service:
DEBUG_INFO: ${DEBUG_INFO}
volumes:
#- /app/onlyoffice/CommunityServer/data:/app/onlyoffice/data
- log_data:/var/log/onlyoffice
- app_data:/app/onlyoffice/data
- files_data:/var/www/products/ASC.Files/server/
- people_data:/var/www/products/ASC.People/server/
@ -73,7 +74,6 @@ networks:
external: true
volumes:
log_data:
app_data:
files_data:
people_data:

View File

@ -1,35 +0,0 @@
services:
onlyoffice-opensearch:
image: onlyoffice/opensearch:${ELK_VERSION}
container_name: ${ELK_CONTAINER_NAME}
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
- "indices.fielddata.cache.size=30%"
- "indices.memory.index_buffer_size=30%"
- "DISABLE_INSTALL_DEMO_CONFIG=true"
- "DISABLE_SECURITY_PLUGIN=true"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536 # maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems
hard: 65536
volumes:
- os_data:/usr/share/opensearch/data
expose:
- "9200"
- "9600" # required for Performance Analyzer
ports:
- 127.0.0.1:9200:9200
networks:
default:
name: ${NETWORK_NAME}
external: true
volumes:
os_data:

View File

@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/sh
WRONG_PORTAL_NAME_URL=${WRONG_PORTAL_NAME_URL:-""}
REDIS_HOST=${REDIS_HOST:-"${REDIS_CONTAINER_NAME}"}
REDIS_PORT=${REDIS_PORT:-"6379"}
@ -9,4 +9,3 @@ sed -i "s~\(redis_host =\).*~\1 \"$REDIS_HOST\"~" /etc/nginx/conf.d/onlyoffice.c
sed -i "s~\(redis_port =\).*~\1 $REDIS_PORT~" /etc/nginx/conf.d/onlyoffice.conf
sed -i "s~\(redis_pass =\).*~\1 \"$REDIS_PASSWORD\"~" /etc/nginx/conf.d/onlyoffice.conf
sed -i "s~\(\"wrongPortalNameUrl\":\).*,~\1 \"${WRONG_PORTAL_NAME_URL}\",~g" /var/www/public/scripts/config.json
echo "${DASHBOARDS_USERNAME:-onlyoffice}:$(openssl passwd -6 -stdin <<< "${DASHBOARDS_PASSWORD:-onlyoffice}")" > /etc/nginx/.htpasswd_dashboards

View File

@ -1,3 +1,4 @@
version: "3.8"
x-healthcheck:
&x-healthcheck
test: curl --fail http://127.0.0.1 || exit 1
@ -16,14 +17,12 @@ services:
test: nginx -t || exit 1
ports:
- 80:80
- 443:443/tcp
- 443:443/udp
- 443:443
environment:
- ROUTER_HOST=${ROUTER_HOST}
- EXTERNAL_PORT=${EXTERNAL_PORT}
volumes:
- webroot_path:/letsencrypt
- log_data:/var/log/nginx
- proxy_log:/var/log/nginx
- ./config/nginx/templates/nginx.conf.template:/etc/nginx/nginx.conf
- ./config/nginx/letsencrypt.conf:/etc/nginx/includes/letsencrypt.conf
- ./config/nginx/templates/proxy.upstream.conf.template:/etc/nginx/templates/proxy.upstream.conf.template:ro
@ -38,5 +37,5 @@ networks:
external: true
volumes:
log_data:
proxy_log:
webroot_path:

View File

@ -1,3 +1,4 @@
version: "3.8"
x-healthcheck:
&x-healthcheck
test: curl --fail http://127.0.0.1 || exit 1
@ -18,10 +19,9 @@ services:
- ${EXTERNAL_PORT}:80
environment:
- ROUTER_HOST=${ROUTER_HOST}
- EXTERNAL_PORT=${EXTERNAL_PORT}
volumes:
- webroot_path:/letsencrypt
- log_data:/var/log/nginx
- proxy_log:/var/log/nginx
- ./config/nginx/templates/nginx.conf.template:/etc/nginx/nginx.conf
- ./config/nginx/letsencrypt.conf:/etc/nginx/includes/letsencrypt.conf
- ./config/nginx/templates/proxy.upstream.conf.template:/etc/nginx/templates/proxy.upstream.conf.template:ro
@ -33,5 +33,5 @@ networks:
external: true
volumes:
log_data:
proxy_log:
webroot_path:

View File

@ -1,3 +1,4 @@
version: "3"
services:
onlyoffice-rabbitmq:
image: rabbitmq:3

View File

@ -1,3 +1,4 @@
version: "3"
services:
onlyoffice-redis:
image: redis:7

View File

@ -1,7 +1,5 @@
@echo off
chcp 65001 > nul
PUSHD %~dp0..
call runasadmin.bat "%~dpnx0"

View File

@ -26,16 +26,9 @@ sed 's/teamlab.info/onlyoffice.com/g' -i config/autofac.consumers.json
sed -e 's_etc/nginx_etc/openresty_g' -e 's/listen\s\+\([0-9]\+\);/listen 127.0.0.1:\1;/g' -i config/nginx/*.conf
sed -i "s#\$public_root#/var/www/%{product}/public/#g" config/nginx/onlyoffice.conf
sed -E 's_(http://)[^:]+(:5601)_\1localhost\2_g' -i config/nginx/onlyoffice.conf
sed -e 's/$router_host/127.0.0.1/g' -e 's/this_host\|proxy_x_forwarded_host/host/g' -e 's/proxy_x_forwarded_proto/scheme/g' -e 's/proxy_x_forwarded_port/server_port/g' -e 's_includes_/etc/openresty/includes_g' -e '/quic\|alt-svc/Id' -i install/docker/config/nginx/onlyoffice-proxy*.conf
sed -e 's/$router_host/127.0.0.1/g' -e 's/the_host/host/g' -e 's/the_scheme/scheme/g' -e 's_includes_/etc/openresty/includes_g' -i install/docker/config/nginx/onlyoffice-proxy*.conf
sed -e '/.pid/d' -e '/temp_path/d' -e 's_etc/nginx_etc/openresty_g' -e 's/\.log/-openresty.log/g' -i install/docker/config/nginx/templates/nginx.conf.template
sed -i "s_\(.*root\).*;_\1 \"/var/www/%{product}\";_g" -i install/docker/config/nginx/letsencrypt.conf
sed -i "s#\(/var/log/onlyoffice/\)#\1%{product}#" install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\[INPUT]' install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\ Name exec' install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\ Interval_Sec 86400' install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\ Command curl -s -X POST OPENSEARCH_SCHEME://OPENSEARCH_HOST:OPENSEARCH_PORT/OPENSEARCH_INDEX/_delete_by_query -H '\''Content-Type: application/json'\'' -d '\''{"query": {"range": {"@timestamp": {"lt": "now-30d"}}}}'\''' install/docker/config/fluent-bit.conf
sed -i '/^\[OUTPUT\]/i\\' install/docker/config/fluent-bit.conf
find %{_builddir}/server/publish/ \
%{_builddir}/server/ASC.Migration.Runner \

View File

@ -34,6 +34,7 @@
%exclude %{_sysconfdir}/onlyoffice/%{product}/openresty
%exclude %{_sysconfdir}/onlyoffice/%{product}/nginx
%{_docdir}/%{name}-%{version}-%{release}/
%config %{_sysconfdir}/logrotate.d/%{product}-common
%{_var}/log/onlyoffice/%{product}/
%dir %{_sysconfdir}/onlyoffice/
%dir %{_sysconfdir}/onlyoffice/%{product}/
@ -75,7 +76,6 @@
%defattr(-, onlyoffice, onlyoffice, -)
%config %{_sysconfdir}/openresty/includes/*
%config %{_sysconfdir}/openresty/conf.d/*
%config %{_sysconfdir}/openresty/html/*
%attr(744, root, root) %{_bindir}/%{product}-ssl-setup
%config %{_sysconfdir}/onlyoffice/%{product}/openresty/nginx.conf.template
%dir %{_sysconfdir}/onlyoffice/
@ -83,7 +83,6 @@
%dir %{_sysconfdir}/onlyoffice/%{product}/openresty/
%{buildpath}/public/
%{buildpath}/client/
%{buildpath}/management/
%files studio-notify
%defattr(-, onlyoffice, onlyoffice, -)

View File

@ -16,37 +16,26 @@ mkdir -p "%{buildroot}%{buildpath}/services/ASC.Data.Backup.BackgroundTasks/"
mkdir -p "%{buildroot}%{buildpath}/services/ASC.ClearEvents/"
mkdir -p "%{buildroot}%{buildpath}/services/ASC.ApiSystem/"
mkdir -p "%{buildroot}%{buildpath}/public/"
mkdir -p "%{buildroot}%{buildpath}/public/campaigns/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.People/server/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.People/client/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Login/login/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/service/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/server/DocStore/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/editor/"
# Hidden folders are not copied when applying a mask * (only in RPM), so we explicitly copy .next directory in this way
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/editor/.next/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Login/login/.next/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/client/"
mkdir -p "%{buildroot}%{buildpath}/client/"
mkdir -p "%{buildroot}%{buildpath}/management/"
mkdir -p "%{buildroot}%{_var}/log/onlyoffice/%{product}/"
mkdir -p "%{buildroot}%{_sysconfdir}/openresty/includes/"
mkdir -p "%{buildroot}%{_sysconfdir}/openresty/conf.d/"
mkdir -p "%{buildroot}%{_sysconfdir}/openresty/html/"
mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/openresty"
mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/.private/"
mkdir -p "%{buildroot}%{_sysconfdir}/fluent-bit/"
mkdir -p "%{buildroot}%{_sysconfdir}/logrotate.d"
mkdir -p "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/"
mkdir -p "%{buildroot}%{_bindir}/"
cp -rf %{_builddir}/publish/web/public/* "%{buildroot}%{buildpath}/public/"
cp -rf %{_builddir}/campaigns/src/campaigns/* "%{buildroot}%{buildpath}/public/campaigns"
cp -rf %{_builddir}/publish/web/login/* "%{buildroot}%{buildpath}/products/ASC.Login/login/"
cp -rf %{_builddir}/publish/web/login/.next/* "%{buildroot}%{buildpath}/products/ASC.Login/login/.next/"
cp -rf %{_builddir}/publish/web/editor/* "%{buildroot}%{buildpath}/products/ASC.Files/editor/"
cp -rf %{_builddir}/publish/web/editor/.next/* "%{buildroot}%{buildpath}/products/ASC.Files/editor/.next/"
cp -rf %{_builddir}/server/products/ASC.Files/Server/DocStore/* "%{buildroot}%{buildpath}/products/ASC.Files/server/DocStore/"
cp -rf %{_builddir}/publish/web/client/* "%{buildroot}%{buildpath}/client/"
cp -rf %{_builddir}/publish/web/management/* "%{buildroot}%{buildpath}/management/"
cp -rf %{_builddir}/server/publish/services/ASC.Web.Studio/service/* "%{buildroot}%{buildpath}/studio/ASC.Web.Studio/"
cp -rf %{_builddir}/server/publish/services/ASC.Web.HealthChecks.UI/service/* "%{buildroot}%{buildpath}/services/ASC.Web.HealthChecks.UI/"
cp -rf %{_builddir}/server/publish/services/ASC.Web.Api/service/* "%{buildroot}%{buildpath}/studio/ASC.Web.Api/"
@ -70,10 +59,9 @@ cp -rf %{_builddir}/buildtools/install/docker/config/nginx/onlyoffice-proxy.conf
cp -rf %{_builddir}/buildtools/install/docker/config/nginx/onlyoffice-proxy-ssl.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/onlyoffice-proxy-ssl.conf.template"
cp -rf %{_builddir}/buildtools/install/docker/config/nginx/letsencrypt.conf "%{buildroot}%{_sysconfdir}/openresty/includes/letsencrypt.conf"
cp -rf %{_builddir}/buildtools/install/common/systemd/modules/* "%{buildroot}/usr/lib/systemd/system/"
cp -rf %{_builddir}/buildtools/install/common/logrotate/product-common "%{buildroot}%{_sysconfdir}/logrotate.d/%{product}-common"
cp -rf %{_builddir}/buildtools/install/common/%{product}-ssl-setup "%{buildroot}%{_bindir}/%{product}-ssl-setup"
cp -rf %{_builddir}/buildtools/install/common/%{product}-configuration "%{buildroot}%{_bindir}/%{product}-configuration"
cp -rf %{_builddir}/buildtools/config/nginx/onlyoffice*.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/"
cp -rf %{_builddir}/buildtools/config/nginx/includes/onlyoffice*.conf "%{buildroot}%{_sysconfdir}/openresty/includes/"
cp -rf %{_builddir}/buildtools/config/nginx/html/*.html "%{buildroot}%{_sysconfdir}/openresty/html/"
cp -rf %{_builddir}/buildtools/config/* "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/"
cp -rf %{_builddir}/buildtools/install/docker/config/fluent-bit.conf "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/"

View File

@ -13,6 +13,7 @@ The service which handles API requests related to backup
Packager: %{packager}
Summary: Common
Group: Applications/Internet
Requires: logrotate
BuildArch: noarch
%description common
A package containing configure and scripts

View File

@ -25,8 +25,7 @@ Source1: https://github.com/ONLYOFFICE/%{product}-client/archive/master.t
Source2: https://github.com/ONLYOFFICE/%{product}-server/archive/master.tar.gz#/server.tar.gz
Source3: https://github.com/ONLYOFFICE/document-templates/archive/main/community-server.tar.gz#/DocStore.tar.gz
Source4: https://github.com/ONLYOFFICE/dictionaries/archive/master.tar.gz#/dictionaries.tar.gz
Source5: https://github.com/ONLYOFFICE/ASC.Web.Campaigns/archive/master.tar.gz#/campaigns.tar.gz
Source6: %{product}.rpmlintrc
Source5: %{product}.rpmlintrc
BuildRequires: nodejs >= 18.0
BuildRequires: yarn
@ -53,7 +52,6 @@ Requires: %name-socket = %version-%release
Requires: %name-ssoauth = %version-%release
Requires: %name-studio = %version-%release
Requires: %name-studio-notify = %version-%release
Requires: openssl
%description
ONLYOFFICE DocSpace is a new way to collaborate on documents with teams,
@ -68,10 +66,9 @@ rm -rf %{_rpmdir}/%{_arch}/%{name}-* %{_builddir}/*
tar -xf %{SOURCE0} --transform='s,^[^/]\+,buildtools,' -C %{_builddir}
tar -xf %{SOURCE1} --transform='s,^[^/]\+,client,' -C %{_builddir}
tar -xf %{SOURCE2} --transform='s,^[^/]\+,server,' -C %{_builddir}
tar -xf %{SOURCE3} --transform='s,^[^/]\+,DocStore,' -C %{_builddir}/server/products/ASC.Files/Server
tar -xf %{SOURCE4} --transform='s,^[^/]\+,dictionaries,' -C %{_builddir}/client/common/Tests/Frontend.Translations.Tests
tar -xf %{SOURCE5} --transform='s,^[^/]\+,campaigns,' -C %{_builddir}
cp %{SOURCE6} .
tar -xf %{SOURCE3} --transform='s,^[^/]\+,dictionaries,' -C %{_builddir}/client/common/Tests/Frontend.Translations.Tests
tar -xf %{SOURCE4} --transform='s,^[^/]\+,DocStore,' -C %{_builddir}/server/products/ASC.Files/Server
cp %{SOURCE5} .
%include build.spec

View File

@ -23,17 +23,16 @@
<ROW Property="APP_URLS" Value="http://0.0.0.0"/>
<ROW Property="ARPCOMMENTS" Value="[|PRODUCT_NAME] is a platform based on .NET Core and React engines which comprises document management features and makes it possible to implement advanced folder management." ValueLocId="*"/>
<ROW Property="ARPCONTACT" Value="20A-6, Ernesta Birznieka-Upisha str., Riga, LV-1050"/>
<ROW Property="ARPHELPLINK" Value="https://forum.onlyoffice.com"/>
<ROW Property="ARPHELPLINK" Value="http://dev.onlyoffice.org/"/>
<ROW Property="ARPHELPTELEPHONE" Value="+371 66016425"/>
<ROW Property="ARPNOMODIFY" MultiBuildValue="DefaultBuild:1"/>
<ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="DefaultBuild:1#ExeBuild:1"/>
<ROW Property="ARPPRODUCTICON" Value="icon.exe" Type="8"/>
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
<ROW Property="ARPURLINFOABOUT" Value="https://helpdesk.onlyoffice.com"/>
<ROW Property="ARPURLUPDATEINFO" Value="https://www.onlyoffice.com/download-docspace.aspx"/>
<ROW Property="ARPURLINFOABOUT" Value="http://www.onlyoffice.com"/>
<ROW Property="ARPURLUPDATEINFO" Value="http://www.onlyoffice.com/download.aspx"/>
<ROW Property="BASE_DOMAIN" Value="localhost"/>
<ROW Property="COMMON_SHORTCUT_NAME" Value="ONLYOFFICE"/>
<ROW Property="DASHBOARDS_PWD" Value=" "/>
<ROW Property="DATABASE_MIGRATION" Value="true"/>
<ROW Property="DB_HOST" Value="localhost"/>
<ROW Property="DB_NAME" Value="onlyoffice"/>
@ -42,6 +41,10 @@
<ROW Property="DB_USER" Value="root"/>
<ROW Property="DOCUMENT_SERVER_HOST" Value="localhost"/>
<ROW Property="DOCUMENT_SERVER_PORT" Value="8083"/>
<ROW Property="ELASTICSEARCH_HOST" Value="localhost" ValueLocId="-"/>
<ROW Property="ELASTICSEARCH_MSG" Value="Unable to connect to remote Elasticsearch server at "/>
<ROW Property="ELASTICSEARCH_PORT" Value="9200" ValueLocId="-"/>
<ROW Property="ELASTICSEARCH_SCHEME" Value="http" ValueLocId="-"/>
<ROW Property="ENVIRONMENT" Value="PRODUCT.ENVIRONMENT.SUB"/>
<ROW Property="Editor_Port" Value="5013"/>
<ROW Property="INSTALL_ROOT_FOLDER_NAME" Value="[|Manufacturer]"/>
@ -54,12 +57,7 @@
<ROW Property="MYSQLODBCDRIVER" Value="MySQL ODBC 8.0 Unicode Driver"/>
<ROW Property="Manufacturer" Value="Ascensio System SIA"/>
<ROW Property="MySQLConnector" Value="MySQL Connector/ODBC 8.0.21 x86"/>
<ROW Property="NEED_REINDEX_OPENSEARCH" Value="FALSE" ValueLocId="-"/>
<ROW Property="OPENSEARCH_HOST" Value="localhost" ValueLocId="-"/>
<ROW Property="OPENSEARCH_INDEX" Value="onlyoffice-fluent-bit" ValueLocId="-"/>
<ROW Property="OPENSEARCH_MSG" Value="Unable to connect to remote OpenSearch server at "/>
<ROW Property="OPENSEARCH_PORT" Value="9200" ValueLocId="-"/>
<ROW Property="OPENSEARCH_SCHEME" Value="http" ValueLocId="-"/>
<ROW Property="NEED_REINDEX_ELASTICSEARCH" Value="FALSE" ValueLocId="-"/>
<ROW Property="OPEN_INSTALL_CANCEL_URL" Value="1"/>
<ROW Property="PACKAGE_NAME" Value="ONLYOFFICE_DocSpace_Community_Win-install.v[|ProductVersion]" MultiBuildValue="ExeBuild:ONLYOFFICE_DocSpace_Enterprise_Win-install.v[|ProductVersion]"/>
<ROW Property="PRODUCT_NAME" Value="ONLYOFFICE DocSpace Community" MultiBuildValue="ExeBuild:ONLYOFFICE DocSpace Enterprise"/>
@ -113,68 +111,68 @@
<ROW Property="WindowsTypeNTDisplay" MultiBuildValue="DefaultBuild:32-bit Windows versions#ExeBuild:32-bit Windows versions" ValueLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1" DirectoryOptions="15"/>
<ROW Directory="ASC.ApiSystem_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.API|ASC.ApiSystem" DirectoryOptions="15"/>
<ROW Directory="ASC.ClearEvents_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.CLE|ASC.ClearEvents" DirectoryOptions="15"/>
<ROW Directory="ASC.Data.Backup.BackgroundTasks_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~2.BAC|ASC.Data.Backup.BackgroundTasks" DirectoryOptions="15"/>
<ROW Directory="ASC.Data.Backup_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~1.BAC|ASC.Data.Backup" DirectoryOptions="15"/>
<ROW Directory="ASC.Files.Service_Dir" Directory_Parent="services_Dir" DefaultDir="ASCFIL~1.SER|ASC.Files.Service" DirectoryOptions="15"/>
<ROW Directory="ASC.Files_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.FIL|ASC.Files" DirectoryOptions="15"/>
<ROW Directory="ASC.Login_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.LOG|ASC.Login" DirectoryOptions="15"/>
<ROW Directory="ASC.Migration.Runner_Dir" Directory_Parent="services_Dir" DefaultDir="ASCMIG~1.RUN|ASC.Migration.Runner" DirectoryOptions="15"/>
<ROW Directory="ASC.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.NOT|ASC.Notify" DirectoryOptions="15"/>
<ROW Directory="ASC.People_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.PEO|ASC.People" DirectoryOptions="15"/>
<ROW Directory="ASC.Socket.IO_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSOC~1.IO|ASC.Socket.IO" DirectoryOptions="15"/>
<ROW Directory="ASC.SsoAuth_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.SSO|ASC.SsoAuth" DirectoryOptions="15"/>
<ROW Directory="ASC.Studio.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSTU~1.NOT|ASC.Studio.Notify" DirectoryOptions="15"/>
<ROW Directory="ASC.Web.Api_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.API|ASC.Web.Api" DirectoryOptions="15"/>
<ROW Directory="ASC.Web.HealthChecks.UI_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.UI|ASC.Web.HealthChecks.UI" DirectoryOptions="15"/>
<ROW Directory="ASC.Web.Studio_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.STU|ASC.Web.Studio" DirectoryOptions="15"/>
<ROW Directory="Data_Dir" Directory_Parent="APPDIR" DefaultDir="Data" DirectoryOptions="15"/>
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1" DirectoryOptions="12"/>
<ROW Directory="ASC.ApiSystem_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.API|ASC.ApiSystem" DirectoryOptions="12"/>
<ROW Directory="ASC.ClearEvents_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.CLE|ASC.ClearEvents" DirectoryOptions="12"/>
<ROW Directory="ASC.Data.Backup.BackgroundTasks_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~2.BAC|ASC.Data.Backup.BackgroundTasks" DirectoryOptions="12"/>
<ROW Directory="ASC.Data.Backup_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~1.BAC|ASC.Data.Backup" DirectoryOptions="12"/>
<ROW Directory="ASC.Files.Service_Dir" Directory_Parent="services_Dir" DefaultDir="ASCFIL~1.SER|ASC.Files.Service" DirectoryOptions="12"/>
<ROW Directory="ASC.Files_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.FIL|ASC.Files" DirectoryOptions="12"/>
<ROW Directory="ASC.Login_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.LOG|ASC.Login" DirectoryOptions="12"/>
<ROW Directory="ASC.Migration.Runner_Dir" Directory_Parent="services_Dir" DefaultDir="ASCMIG~1.RUN|ASC.Migration.Runner" DirectoryOptions="12"/>
<ROW Directory="ASC.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.NOT|ASC.Notify" DirectoryOptions="12"/>
<ROW Directory="ASC.People_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.PEO|ASC.People" DirectoryOptions="12"/>
<ROW Directory="ASC.Socket.IO_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSOC~1.IO|ASC.Socket.IO" DirectoryOptions="12"/>
<ROW Directory="ASC.SsoAuth_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.SSO|ASC.SsoAuth" DirectoryOptions="12"/>
<ROW Directory="ASC.Studio.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSTU~1.NOT|ASC.Studio.Notify" DirectoryOptions="12"/>
<ROW Directory="ASC.Web.Api_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.API|ASC.Web.Api" DirectoryOptions="12"/>
<ROW Directory="ASC.Web.HealthChecks.UI_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.UI|ASC.Web.HealthChecks.UI" DirectoryOptions="12"/>
<ROW Directory="ASC.Web.Studio_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.STU|ASC.Web.Studio" DirectoryOptions="12"/>
<ROW Directory="Data_Dir" Directory_Parent="APPDIR" DefaultDir="Data" DirectoryOptions="12"/>
<ROW Directory="DesktopFolder" Directory_Parent="TARGETDIR" DefaultDir="DESKTO~1|DesktopFolder" IsPseudoRoot="1"/>
<ROW Directory="Logs_Dir" Directory_Parent="APPDIR" DefaultDir="Logs" DirectoryOptions="15"/>
<ROW Directory="NewFolder_1_Dir" Directory_Parent="service_1_Dir" DefaultDir="config" DirectoryOptions="15"/>
<ROW Directory="Logs_Dir" Directory_Parent="APPDIR" DefaultDir="Logs" DirectoryOptions="12"/>
<ROW Directory="NewFolder_1_Dir" Directory_Parent="service_1_Dir" DefaultDir="config" DirectoryOptions="12"/>
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
<ROW Directory="conf_Dir" Directory_Parent="nginx_Dir" DefaultDir="conf" DirectoryOptions="15"/>
<ROW Directory="config_2_Dir" Directory_Parent="service_5_Dir" DefaultDir="config" DirectoryOptions="15"/>
<ROW Directory="config_Dir" Directory_Parent="APPDIR" DefaultDir="config" DirectoryOptions="15"/>
<ROW Directory="editor_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="editor" DirectoryOptions="15"/>
<ROW Directory="includes_Dir" Directory_Parent="conf_Dir" DefaultDir="includes" DirectoryOptions="15"/>
<ROW Directory="login_Dir" Directory_Parent="ASC.Login_Dir" DefaultDir="login" DirectoryOptions="15"/>
<ROW Directory="logs_Dir" Directory_Parent="nginx_Dir" DefaultDir="logs" DirectoryOptions="15"/>
<ROW Directory="nginx_Dir" Directory_Parent="APPDIR" DefaultDir="nginx" DirectoryOptions="15"/>
<ROW Directory="products_Dir" Directory_Parent="APPDIR" DefaultDir="products" DirectoryOptions="15"/>
<ROW Directory="server_2_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="server" DirectoryOptions="15"/>
<ROW Directory="server_5_Dir" Directory_Parent="ASC.People_Dir" DefaultDir="server" DirectoryOptions="15"/>
<ROW Directory="service_11_Dir" Directory_Parent="ASC.Studio.Notify_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_15_Dir" Directory_Parent="ASC.Web.Api_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_16_Dir" Directory_Parent="ASC.Web.Studio_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_17_Dir" Directory_Parent="ASC.ApiSystem_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_1_Dir" Directory_Parent="ASC.Socket.IO_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_2_Dir" Directory_Parent="ASC.Data.Backup_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_3_Dir" Directory_Parent="ASC.Data.Backup.BackgroundTasks_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_4_Dir" Directory_Parent="ASC.Web.HealthChecks.UI_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_5_Dir" Directory_Parent="ASC.SsoAuth_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_6_Dir" Directory_Parent="ASC.Migration.Runner_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_7_Dir" Directory_Parent="ASC.Files.Service_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_9_Dir" Directory_Parent="ASC.Notify_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="service_Dir" Directory_Parent="ASC.ClearEvents_Dir" DefaultDir="service" DirectoryOptions="15"/>
<ROW Directory="services_Dir" Directory_Parent="APPDIR" DefaultDir="services" DirectoryOptions="15"/>
<ROW Directory="temp_10_Dir" Directory_Parent="service_16_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_13_Dir" Directory_Parent="server_2_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_14_Dir" Directory_Parent="server_5_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_16_Dir" Directory_Parent="service_17_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_1_Dir" Directory_Parent="service_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_2_Dir" Directory_Parent="service_3_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_3_Dir" Directory_Parent="service_7_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_4_Dir" Directory_Parent="service_2_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_5_Dir" Directory_Parent="service_4_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_6_Dir" Directory_Parent="service_6_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_7_Dir" Directory_Parent="service_9_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_8_Dir" Directory_Parent="service_11_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_9_Dir" Directory_Parent="service_15_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="temp_Dir" Directory_Parent="nginx_Dir" DefaultDir="temp" DirectoryOptions="15"/>
<ROW Directory="tools_Dir" Directory_Parent="APPDIR" DefaultDir="tools" DirectoryOptions="15"/>
<ROW Directory="conf_Dir" Directory_Parent="nginx_Dir" DefaultDir="conf" DirectoryOptions="12"/>
<ROW Directory="config_2_Dir" Directory_Parent="service_5_Dir" DefaultDir="config" DirectoryOptions="12"/>
<ROW Directory="config_Dir" Directory_Parent="APPDIR" DefaultDir="config" DirectoryOptions="12"/>
<ROW Directory="editor_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="editor" DirectoryOptions="12"/>
<ROW Directory="includes_Dir" Directory_Parent="conf_Dir" DefaultDir="includes" DirectoryOptions="12"/>
<ROW Directory="login_Dir" Directory_Parent="ASC.Login_Dir" DefaultDir="login" DirectoryOptions="12"/>
<ROW Directory="logs_Dir" Directory_Parent="nginx_Dir" DefaultDir="logs" DirectoryOptions="12"/>
<ROW Directory="nginx_Dir" Directory_Parent="APPDIR" DefaultDir="nginx" DirectoryOptions="12"/>
<ROW Directory="products_Dir" Directory_Parent="APPDIR" DefaultDir="products" DirectoryOptions="12"/>
<ROW Directory="server_2_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="server" DirectoryOptions="12"/>
<ROW Directory="server_5_Dir" Directory_Parent="ASC.People_Dir" DefaultDir="server" DirectoryOptions="12"/>
<ROW Directory="service_11_Dir" Directory_Parent="ASC.Studio.Notify_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_15_Dir" Directory_Parent="ASC.Web.Api_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_16_Dir" Directory_Parent="ASC.Web.Studio_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_17_Dir" Directory_Parent="ASC.ApiSystem_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_1_Dir" Directory_Parent="ASC.Socket.IO_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_2_Dir" Directory_Parent="ASC.Data.Backup_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_3_Dir" Directory_Parent="ASC.Data.Backup.BackgroundTasks_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_4_Dir" Directory_Parent="ASC.Web.HealthChecks.UI_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_5_Dir" Directory_Parent="ASC.SsoAuth_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_6_Dir" Directory_Parent="ASC.Migration.Runner_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_7_Dir" Directory_Parent="ASC.Files.Service_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_9_Dir" Directory_Parent="ASC.Notify_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="service_Dir" Directory_Parent="ASC.ClearEvents_Dir" DefaultDir="service" DirectoryOptions="12"/>
<ROW Directory="services_Dir" Directory_Parent="APPDIR" DefaultDir="services" DirectoryOptions="12"/>
<ROW Directory="temp_10_Dir" Directory_Parent="service_16_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_13_Dir" Directory_Parent="server_2_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_14_Dir" Directory_Parent="server_5_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_16_Dir" Directory_Parent="service_17_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_1_Dir" Directory_Parent="service_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_2_Dir" Directory_Parent="service_3_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_3_Dir" Directory_Parent="service_7_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_4_Dir" Directory_Parent="service_2_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_5_Dir" Directory_Parent="service_4_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_6_Dir" Directory_Parent="service_6_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_7_Dir" Directory_Parent="service_9_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_8_Dir" Directory_Parent="service_11_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_9_Dir" Directory_Parent="service_15_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="temp_Dir" Directory_Parent="nginx_Dir" DefaultDir="temp" DirectoryOptions="12"/>
<ROW Directory="tools_Dir" Directory_Parent="APPDIR" DefaultDir="tools" DirectoryOptions="12"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
<ROW Component="AI_CustomARPName" ComponentId="{5283455D-3786-42EC-9887-FCF453E2FBF9}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
@ -263,7 +261,7 @@
<ROW Component="tools" ComponentId="{3BE057FE-EC94-4514-8961-A8660D9E6EB4}" Directory_="tools_Dir" Attributes="0"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="ApiSystem" Feature_Parent="DotnetServices" Title=".NET ApiSystem Service" Description="Feature contains .NET ApiSystem service" Display="31" Level="1" Directory_="APPDIR" Attributes="16"/>
<ROW Feature="ApiSystem" Feature_Parent="DotnetServices" Title=".NET ApiSystem Service" Description="Feature contains .NET ApiSystem service" Display="31" Level="4" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="BackgroundTasks" Feature_Parent="DotnetServices" Title=".NET BackgroundTasks Service" Description="Feature contains .NET BackgroundTasks service" Display="25" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="ClearEvents" Feature_Parent="DotnetServices" Title=".NET ClearEvents Service" Description="Feature contains .NET ClearEvents service" Display="29" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="DataBackup" Feature_Parent="DotnetServices" Title=".NET DataBackup Service" Description="Feature contains .NET DataBackup service" Display="27" Level="1" Directory_="APPDIR" Attributes="0"/>
@ -289,25 +287,25 @@
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
<ROW File="ASC.Files.exe" Component_="ASC.Files.exe" FileName="ASCFIL~1.EXE|ASC.Files.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\products\ASC.Files\server\ASC.Files.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.People.exe" Component_="ASC.People.exe" FileName="ASCPEO~1.EXE|ASC.People.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\products\ASC.People\server\ASC.People.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.ApiSystem.exe" Component_="ASC.ApiSystem.exe" FileName="ASCAPI~1.EXE|ASC.ApiSystem.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.ApiSystem\service\ASC.ApiSystem.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Data.Backup.exe" Component_="ASC.Data.Backup.exe" FileName="ASCDAT~1.EXE|ASC.Data.Backup.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Data.Backup\service\ASC.Data.Backup.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Files.Service.exe" Component_="ASC.Files.Service.exe" FileName="ASCFIL~1.EXE|ASC.Files.Service.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Files.Service\service\ASC.Files.Service.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Notify.exe" Component_="ASC.Notify.exe" FileName="ASCNOT~1.EXE|ASC.Notify.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Notify\service\ASC.Notify.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Studio.Notify.exe" Component_="ASC.Studio.Notify.exe" FileName="ASCSTU~1.EXE|ASC.Studio.Notify.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Studio.Notify\service\ASC.Studio.Notify.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Web.Studio.exe" Component_="ASC.Web.Studio.exe" FileName="ASCWEB~1.EXE|ASC.Web.Studio.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Web.Studio\service\ASC.Web.Studio.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Web.Api.exe" Component_="ASC.Web.Api.exe" FileName="ASCWEB~1.EXE|ASC.Web.Api.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Web.Api\service\ASC.Web.Api.exe" SelfReg="false" DigSign="true"/>
<ROW File="Proxy.exe" Component_="Proxy.exe" FileName="Proxy.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\tools\Proxy.exe" SelfReg="false" DigSign="true"/>
<ROW File="Socket.IO.exe" Component_="Socket.IO.exe" FileName="SOCKET~1.EXE|Socket.IO.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\tools\Socket.IO.exe" SelfReg="false" DigSign="true"/>
<ROW File="SsoAuth.exe" Component_="SsoAuth.exe" FileName="SsoAuth.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\tools\SsoAuth.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.ClearEvents.exe" Component_="ASC.ClearEvents.exe" FileName="ASCCLE~1.EXE|ASC.ClearEvents.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.ClearEvents\service\ASC.ClearEvents.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Data.Backup.BackgroundTasks.exe" Component_="ASC.Data.Backup.BackgroundTasks.exe" FileName="ASCDAT~1.EXE|ASC.Data.Backup.BackgroundTasks.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Data.Backup.BackgroundTasks\service\ASC.Data.Backup.BackgroundTasks.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Migration.Runner.exe" Component_="ASC.Migration.Runner.exe" FileName="ASCMIG~2.EXE|ASC.Migration.Runner.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe" SelfReg="false" DigSign="true"/>
<ROW File="DocEditor.exe" Component_="DocEditor.exe" FileName="DOCEDI~1.EXE|DocEditor.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\tools\DocEditor.exe" SelfReg="false" DigSign="true"/>
<ROW File="Login.exe" Component_="Login.exe" FileName="LOGIN~1.EXE|Login.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\tools\Login.exe" SelfReg="false" DigSign="true"/>
<ROW File="icon.ico" Component_="icon.ico" FileName="icon.ico" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Resources\icon.ico" SelfReg="false"/>
<ROW File="ASC.Web.HealthChecks.UI.exe" Component_="ASC.Web.HealthChecks.UI.exe" FileName="ASCWEB~1.EXE|ASC.Web.HealthChecks.UI.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="Files\services\ASC.Web.HealthChecks.UI\service\ASC.Web.HealthChecks.UI.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Files.exe" Component_="ASC.Files.exe" FileName="ASCFIL~1.EXE|ASC.Files.exe" Attributes="0" SourcePath="Files\products\ASC.Files\server\ASC.Files.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.People.exe" Component_="ASC.People.exe" FileName="ASCPEO~1.EXE|ASC.People.exe" Attributes="0" SourcePath="Files\products\ASC.People\server\ASC.People.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.ApiSystem.exe" Component_="ASC.ApiSystem.exe" FileName="ASCAPI~1.EXE|ASC.ApiSystem.exe" Attributes="0" SourcePath="Files\services\ASC.ApiSystem\service\ASC.ApiSystem.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Data.Backup.exe" Component_="ASC.Data.Backup.exe" FileName="ASCDAT~1.EXE|ASC.Data.Backup.exe" Attributes="0" SourcePath="Files\services\ASC.Data.Backup\service\ASC.Data.Backup.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Files.Service.exe" Component_="ASC.Files.Service.exe" FileName="ASCFIL~1.EXE|ASC.Files.Service.exe" Attributes="0" SourcePath="Files\services\ASC.Files.Service\service\ASC.Files.Service.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Notify.exe" Component_="ASC.Notify.exe" FileName="ASCNOT~1.EXE|ASC.Notify.exe" Attributes="0" SourcePath="Files\services\ASC.Notify\service\ASC.Notify.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Studio.Notify.exe" Component_="ASC.Studio.Notify.exe" FileName="ASCSTU~1.EXE|ASC.Studio.Notify.exe" Attributes="0" SourcePath="Files\services\ASC.Studio.Notify\service\ASC.Studio.Notify.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Web.Studio.exe" Component_="ASC.Web.Studio.exe" FileName="ASCWEB~1.EXE|ASC.Web.Studio.exe" Attributes="0" SourcePath="Files\services\ASC.Web.Studio\service\ASC.Web.Studio.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Web.Api.exe" Component_="ASC.Web.Api.exe" FileName="ASCWEB~1.EXE|ASC.Web.Api.exe" Attributes="0" SourcePath="Files\services\ASC.Web.Api\service\ASC.Web.Api.exe" SelfReg="false" DigSign="true"/>
<ROW File="Proxy.exe" Component_="Proxy.exe" FileName="Proxy.exe" Attributes="0" SourcePath="Files\tools\Proxy.exe" SelfReg="false" DigSign="true"/>
<ROW File="Socket.IO.exe" Component_="Socket.IO.exe" FileName="SOCKET~1.EXE|Socket.IO.exe" Attributes="0" SourcePath="Files\tools\Socket.IO.exe" SelfReg="false" DigSign="true"/>
<ROW File="SsoAuth.exe" Component_="SsoAuth.exe" FileName="SsoAuth.exe" Attributes="0" SourcePath="Files\tools\SsoAuth.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.ClearEvents.exe" Component_="ASC.ClearEvents.exe" FileName="ASCCLE~1.EXE|ASC.ClearEvents.exe" Attributes="0" SourcePath="Files\services\ASC.ClearEvents\service\ASC.ClearEvents.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Data.Backup.BackgroundTasks.exe" Component_="ASC.Data.Backup.BackgroundTasks.exe" FileName="ASCDAT~1.EXE|ASC.Data.Backup.BackgroundTasks.exe" Attributes="0" SourcePath="Files\services\ASC.Data.Backup.BackgroundTasks\service\ASC.Data.Backup.BackgroundTasks.exe" SelfReg="false" DigSign="true"/>
<ROW File="ASC.Migration.Runner.exe" Component_="ASC.Migration.Runner.exe" FileName="ASCMIG~2.EXE|ASC.Migration.Runner.exe" Attributes="0" SourcePath="Files\services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe" SelfReg="false" DigSign="true"/>
<ROW File="DocEditor.exe" Component_="DocEditor.exe" FileName="DOCEDI~1.EXE|DocEditor.exe" Attributes="0" SourcePath="Files\tools\DocEditor.exe" SelfReg="false" DigSign="true"/>
<ROW File="Login.exe" Component_="Login.exe" FileName="LOGIN~1.EXE|Login.exe" Attributes="0" SourcePath="Files\tools\Login.exe" SelfReg="false" DigSign="true"/>
<ROW File="icon.ico" Component_="icon.ico" FileName="icon.ico" Attributes="0" SourcePath="Resources\icon.ico" SelfReg="false"/>
<ROW File="ASC.Web.HealthChecks.UI.exe" Component_="ASC.Web.HealthChecks.UI.exe" FileName="ASCWEB~1.EXE|ASC.Web.HealthChecks.UI.exe" Attributes="0" SourcePath="Files\services\ASC.Web.HealthChecks.UI\service\ASC.Web.HealthChecks.UI.exe" SelfReg="false" DigSign="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
@ -366,17 +364,16 @@
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.JsonPropertyComponent">
<ROW JsonProperty="ConnectionString" Parent="__1" Name="ConnectionString" Condition="1" Order="0" Flags="57" Value="Server=[DB_HOST];Database=[DB_NAME];User ID=[DB_USER];Password=[DB_PWD]"/>
<ROW JsonProperty="ConnectionString_1" Parent="__2" Name="ConnectionString" Condition="1" Order="0" Flags="57" Value="Server=[DB_HOST];Database=[DB_NAME];User ID=[DB_USER];Password=[DB_PWD]"/>
<ROW JsonProperty="ConnectionStrings" Parent="Root_12" Name="ConnectionStrings" Condition="1" Order="1" Flags="60"/>
<ROW JsonProperty="ConnectionStrings_1" Parent="Root_1" Name="ConnectionStrings" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="Host" Parent="elastic" Name="Host" Condition="1" Order="0" Flags="57" Value="[OPENSEARCH_HOST]"/>
<ROW JsonProperty="Host" Parent="elastic" Name="Host" Condition="1" Order="0" Flags="57" Value="[ELASTICSEARCH_HOST]"/>
<ROW JsonProperty="Host_1" Parent="_" Name="Host" Condition="1" Order="0" Flags="57" Value="[REDIS_HOST]"/>
<ROW JsonProperty="Hostname" Parent="RabbitMQ" Name="Hostname" Condition="1" Order="0" Flags="57" Value="[AMQP_HOST]"/>
<ROW JsonProperty="Hosts" Parent="Redis" Name="Hosts" Condition="1" Order="0" Flags="61"/>
<ROW JsonProperty="PORT" Parent="Root_9" Name="PORT" Condition="1" Order="1" Flags="57" Value="[Login_Port]"/>
<ROW JsonProperty="PORT_1" Parent="Root_10" Name="PORT" Condition="1" Order="1" Flags="57" Value="[Editor_Port]"/>
<ROW JsonProperty="Password" Parent="RabbitMQ" Name="Password" Condition="1" Order="2" Flags="57" Value="[AMQP_PWD]"/>
<ROW JsonProperty="Port" Parent="elastic" Name="Port" Condition="1" Order="2" Flags="57" Value="[OPENSEARCH_PORT]"/>
<ROW JsonProperty="Port" Parent="elastic" Name="Port" Condition="1" Order="2" Flags="57" Value="[ELASTICSEARCH_PORT]"/>
<ROW JsonProperty="Port_1" Parent="RabbitMQ" Name="Port" Condition="1" Order="3" Flags="59" Value="[AMQP_PORT]"/>
<ROW JsonProperty="Port_2" Parent="_" Name="Port" Condition="1" Order="1" Flags="57" Value="[REDIS_PORT]"/>
<ROW JsonProperty="Providers" Parent="options" Name="Providers" Condition="1" Order="0" Flags="61"/>
@ -393,13 +390,11 @@
<ROW JsonProperty="Root_6" Name="Root" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="Root_7" Name="Root" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="Root_9" Name="Root" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="Scheme" Parent="elastic" Name="Scheme" Condition="1" Order="1" Flags="57" Value="[OPENSEARCH_SCHEME]"/>
<ROW JsonProperty="TeamlabsiteProviders" Parent="options" Name="TeamlabsiteProviders" Condition="1" Order="1" Flags="61"/>
<ROW JsonProperty="Scheme" Parent="elastic" Name="Scheme" Condition="1" Order="1" Flags="57" Value="[ELASTICSEARCH_SCHEME]"/>
<ROW JsonProperty="UserName" Parent="RabbitMQ" Name="UserName" Condition="1" Order="1" Flags="57" Value="[AMQP_USER]"/>
<ROW JsonProperty="VirtualHost" Parent="RabbitMQ" Name="VirtualHost" Condition="1" Order="4" Flags="57" Value="[AMQP_VHOST]"/>
<ROW JsonProperty="_" Parent="Hosts" Name="0" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="__1" Parent="Providers" Name="0" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="__2" Parent="TeamlabsiteProviders" Name="0" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="app" Parent="Root_6" Name="app" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="app_1" Parent="Root_7" Name="app" Condition="1" Order="0" Flags="60"/>
<ROW JsonProperty="app_3" Parent="Root_9" Name="app" Condition="1" Order="0" Flags="60"/>
@ -473,12 +468,6 @@
<ROW Action="AI_JsonRollback" Description="Rolling back JSON file configurations." DescriptionLocId="ActionText.Description.AI_JsonRollback" Template="Rolling back JSON file configurations." TemplateLocId="ActionText.Template.AI_JsonRollback"/>
<ROW Action="AI_JsonUninstall" Description="Generating actions to configure JSON files" DescriptionLocId="ActionText.Description.AI_JsonUninstall"/>
<ROW Action="AI_ProcessFailActions" Description="Generating actions to configure service failure actions" DescriptionLocId="ActionText.Description.AI_ProcessFailActions" Template="Service: [1]" TemplateLocId="ActionText.Template.AI_ProcessFailActions"/>
<ROW Action="AI_SqlConfig" Description="Executing install SQL scripts" DescriptionLocId="ActionText.Description.AI_SqlConfig" Template="Connection: [1] Script: [2]" TemplateLocId="ActionText.Template.AI_SqlConfig"/>
<ROW Action="AI_SqlInstall" Description="Generating actions to configure databases for install SQL script execution" DescriptionLocId="ActionText.Description.AI_SqlInstall"/>
<ROW Action="AI_SqlMaint" Description="Executing maintenance SQL scripts" DescriptionLocId="ActionText.Description.AI_SqlMaint" Template="Connection: [1] Script: [2]" TemplateLocId="ActionText.Template.AI_SqlMaint"/>
<ROW Action="AI_SqlRemove" Description="Executing uninstall SQL scripts" DescriptionLocId="ActionText.Description.AI_SqlRemove" Template="Connection: [1] Script: [2]" TemplateLocId="ActionText.Template.AI_SqlRemove"/>
<ROW Action="AI_SqlRollback" Description="Executing rollback SQL scripts" DescriptionLocId="ActionText.Description.AI_SqlRollback" Template="Connection: [1] Script: [2]" TemplateLocId="ActionText.Template.AI_SqlRollback"/>
<ROW Action="AI_SqlUninstall" Description="Generating actions to configure databases for uninstall SQL script execution" DescriptionLocId="ActionText.Description.AI_SqlUninstall"/>
<ROW Action="AI_TxtUpdaterCommit" Description="Commit text file changes." DescriptionLocId="ActionText.Description.AI_TxtUpdaterCommit" Template="Commit text file changes." TemplateLocId="ActionText.Template.AI_TxtUpdaterCommit"/>
<ROW Action="AI_TxtUpdaterConfig" Description="Executing text file updates" DescriptionLocId="ActionText.Description.AI_TxtUpdaterConfig" Template="Updating text file: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_TxtUpdaterConfig"/>
<ROW Action="AI_TxtUpdaterInstall" Description="Generating actions to configure text files updates" DescriptionLocId="ActionText.Description.AI_TxtUpdaterInstall"/>
@ -502,9 +491,9 @@
<ROW Property="PS_DB_PORT" Signature_="AppSearchSign_5"/>
<ROW Property="PS_DB_NAME" Signature_="AppSearchSign_6"/>
<ROW Property="PS_DB_HOST" Signature_="AppSearchSign_7"/>
<ROW Property="OPENSEARCH_SCHEME" Signature_="AppSearchSign_8"/>
<ROW Property="OPENSEARCH_PORT" Signature_="AppSearchSign_9"/>
<ROW Property="OPENSEARCH_HOST" Signature_="AppSearchSign_10"/>
<ROW Property="ELASTICSEARCH_SCHEME" Signature_="AppSearchSign_8"/>
<ROW Property="ELASTICSEARCH_PORT" Signature_="AppSearchSign_9"/>
<ROW Property="ELASTICSEARCH_HOST" Signature_="AppSearchSign_10"/>
<ROW Property="DB_USER" Signature_="AppSearchSign_11"/>
<ROW Property="DB_PWD" Signature_="AppSearchSign_12"/>
<ROW Property="DB_PORT" Signature_="AppSearchSign_13"/>
@ -520,7 +509,6 @@
<ROW Property="DOCUMENT_SERVER_JWT_SECRET" Signature_="AppSearchSign_23"/>
<ROW Property="DOCUMENT_SERVER_PORT" Signature_="AppSearchSign_24"/>
<ROW Property="MACHINE_KEY" Signature_="AppSearchSign_25"/>
<ROW Property="DASHBOARDS_PWD" Signature_="AppSearchSign_26"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
<ROW Name="NetFirewall.dll" SourcePath="&lt;AI_CUSTACTS&gt;NetFirewall.dll"/>
@ -535,13 +523,13 @@
<ROW Name="file_deleter.ps1" SourcePath="&lt;AI_SCRIPTS&gt;file_deleter.ps1"/>
<ROW Name="jsonCfg.dll" SourcePath="&lt;AI_CUSTACTS&gt;jsonCfg.dll"/>
<ROW Name="lzmaextractor.dll" SourcePath="&lt;AI_CUSTACTS&gt;lzmaextractor.dll"/>
<ROW Name="sql.dll" SourcePath="&lt;AI_CUSTACTS&gt;sql.dll"/>
<ROW Name="userAccounts.dll" SourcePath="&lt;AI_CUSTACTS&gt;userAccounts.dll"/>
<ROW Name="utils.vbs" SourcePath="utils.vbs"/>
<ROW Name="viewer.exe" SourcePath="&lt;AI_CUSTACTS&gt;viewer.exe" DigSign="true"/>
<ROW Name="xmlCfg.dll" SourcePath="&lt;AI_CUSTACTS&gt;xmlCfg.dll"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiConditionComponent">
<ROW Feature_="ApiSystem" Level="1" Condition="API_SYSTEM_SERVICE = 1"/>
<ROW Feature_="DocumentServer" Level="4" Condition="DOCUMENT_SERVER_INSTALL_NONE = 1"/>
<ROW Feature_="ClearEvents" Level="4" Condition="CLEAR_EVENTS_SERVICE = 0"/>
<ROW Feature_="DataBackup" Level="4" Condition="DATA_BACKUP_SERVICE = 0"/>
@ -613,6 +601,20 @@
<ROW Dialog_="DiskCostDlg" Control="Text" Type="Text" X="20" Y="53" Width="330" Height="40" Attributes="3" Text="The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s)." Order="600" TextLocId="Control.Text.DiskCostDlg#Text" MsiKey="DiskCostDlg#Text"/>
<ROW Dialog_="DiskCostDlg" Control="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Attributes="196611" Text="The disk space required for the installation of the selected features." Order="700" TextLocId="Control.Text.DiskCostDlg#Description" MsiKey="DiskCostDlg#Description"/>
<ROW Dialog_="DiskCostDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="800" MsiKey="DiskCostDlg#BannerLine"/>
<ROW Dialog_="ELKConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
<ROW Dialog_="ELKConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
<ROW Dialog_="ELKConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
<ROW Dialog_="ELKConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
<ROW Dialog_="ELKConnectionDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
<ROW Dialog_="ELKConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
<ROW Dialog_="ELKConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Configure Elasticsearch Connection..." Order="700"/>
<ROW Dialog_="ELKConnectionDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Elasticsearch connection settings" TextStyle="[DlgTitleFont]" Order="800"/>
<ROW Dialog_="ELKConnectionDlg" Control="ProtocolLabel" Type="Text" X="25" Y="65" Width="67" Height="11" Attributes="65539" Text="Protocol" Order="900"/>
<ROW Dialog_="ELKConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="92" Width="67" Height="11" Attributes="65539" Text="Server:" Order="1000"/>
<ROW Dialog_="ELKConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="119" Width="67" Height="11" Attributes="65539" Text="Port:" Order="1100"/>
<ROW Dialog_="ELKConnectionDlg" Control="ProtocolEdit" Type="Edit" X="98" Y="61" Width="253" Height="18" Attributes="3" Property="ELASTICSEARCH_SCHEME" Text="{5}" Order="1200"/>
<ROW Dialog_="ELKConnectionDlg" Control="ServerEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="3" Property="ELASTICSEARCH_HOST" Text="[ComputerName]" Order="1300"/>
<ROW Dialog_="ELKConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="116" Width="253" Height="18" Attributes="19" Property="ELASTICSEARCH_PORT" Text="{7}" Order="1400"/>
<ROW Dialog_="ExitDialog" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="ExitDialog#Bitmap"/>
<ROW Dialog_="ExitDialog" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="ExitDialog#Back" Options="1"/>
<ROW Dialog_="FatalError" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="FatalError#Bitmap"/>
@ -648,20 +650,6 @@
<ROW Dialog_="MaintenanceWelcomeDlg" Control="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" Attributes="1048577" Text="dialog.bmp" Order="300" MsiKey="MaintenanceWelcomeDlg#Bitmap"/>
<ROW Dialog_="MaintenanceWelcomeDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="1" Text="[ButtonText_Back]" Order="400" TextLocId="-" MsiKey="MaintenanceWelcomeDlg#Back" Options="1"/>
<ROW Dialog_="MsiRMFilesInUse" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="300" MsiKey="MsiRMFilesInUse#BannerBitmap"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Next]" Order="100" Options="1"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Cancel]" Order="200" Options="1"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_Back]" Order="300" Options="1"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="400"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="BannerLine" Type="Line" X="0" Y="44" Width="372" Height="0" Attributes="1" Order="500"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="BottomLine" Type="Line" X="5" Y="234" Width="368" Height="0" Attributes="1" Order="600"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Attributes="196611" Text="Configure OpenSearch Connection..." Order="700"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="OpenSearch connection settings" TextStyle="[DlgTitleFont]" Order="800"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="ProtocolLabel" Type="Text" X="25" Y="65" Width="67" Height="11" Attributes="65539" Text="Protocol" Order="900"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="ServerLabel" Type="Text" X="25" Y="92" Width="67" Height="11" Attributes="65539" Text="Server:" Order="1000"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="PortLabel" Type="Text" X="25" Y="119" Width="67" Height="11" Attributes="65539" Text="Port:" Order="1100"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="ProtocolEdit" Type="Edit" X="98" Y="61" Width="253" Height="18" Attributes="3" Property="OPENSEARCH_SCHEME" Text="{5}" Order="1200"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="ServerEdit" Type="Edit" X="98" Y="89" Width="253" Height="18" Attributes="3" Property="OPENSEARCH_HOST" Text="[ComputerName]" Order="1300"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control="PortEdit" Type="Edit" X="98" Y="116" Width="253" Height="18" Attributes="19" Property="OPENSEARCH_PORT" Text="{7}" Order="1400"/>
<ROW Dialog_="OutOfDiskDlg" Control="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Attributes="1048577" Text="banner.bmp" Order="200" MsiKey="OutOfDiskDlg#BannerBitmap"/>
<ROW Dialog_="OutOfDiskDlg" Control="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Attributes="393223" Text="{120}{70}{70}{70}{70}" Order="400" TextLocId="Control.Text.OutOfDiskDlg#VolumeList" MsiKey="OutOfDiskDlg#VolumeList"/>
<ROW Dialog_="OutOfDiskDlg" Control="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Attributes="196611" Text="Out of Disk Space" TextStyle="[DlgTitleFont]" Order="500" TextLocId="Control.Text.OutOfDiskDlg#Title" MsiKey="OutOfDiskDlg#Title"/>
@ -849,38 +837,38 @@
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[ButtonText_Next]" Argument="[[AI_CommitButton]]" Condition="AI_INSTALL AND ( OLDPRODUCTS=&quot;&quot; AND SQLConnectionDlg_Cond )" Ordering="2"/>
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[AI_Text_Next_Orig]" Argument="[Text_Next]" Condition="AI_INSTALL AND ( OLDPRODUCTS=&quot;&quot; AND SQLConnectionDlg_Cond )" Ordering="1"/>
<ROW Dialog_="SQLConnectionDlg" Control_="SQLConnectionDlgDialogInitializer" Event="[Text_Next]" Argument="[Text_Install]" Condition="AI_INSTALL AND ( OLDPRODUCTS=&quot;&quot; AND SQLConnectionDlg_Cond )" Ordering="0"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="OpenSearchConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="2"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestSqlConnection" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError &lt;&gt; &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="20"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="25"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="25"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestSqlConnection" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="222"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="222"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestSqlConnection" Condition="AI_INSTALL" Ordering="3"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="201"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="202"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="5"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="3"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Back" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="5"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="DoAction" Argument="TestOpenSearchConnection" Condition="AI_INSTALL" Ordering="2"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="DoAction" Argument="TestOpenSearchConnectionMsgBox" Condition="AI_INSTALL AND ( OPENSEARCH_CONNECTION = &quot;False&quot; )" Ordering="4"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER" Condition="AI_INSTALL AND ( OPENSEARCH_CONNECTION = &quot;False&quot; )" Ordering="3"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="5"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="3"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="SQLConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="5"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnection" Condition="AI_INSTALL" Ordering="2"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnectionMsgBox" Condition="AI_INSTALL AND ( ELK_CONNECTION = &quot;False&quot; )" Ordering="4"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER" Condition="AI_INSTALL AND ( ELK_CONNECTION = &quot;False&quot; )" Ordering="3"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="3"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="4"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestOpenSearchConnection" Condition="AI_INSTALL" Ordering="16"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="4"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnection" Condition="AI_INSTALL" Ordering="16"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL" Ordering="15"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="OpenSearchConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;False&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="22"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;False&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="22"/>
<ROW Dialog_="CancelDlg" Control_="Yes" Event="DoAction" Argument="OpenCancelUrl" Condition="OPEN_INSTALL_CANCEL_URL = &quot;1&quot;" Ordering="101"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestOpenSearchConnection" Condition="AI_INSTALL AND ( SqlConnectionError=&quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; )" Ordering="212"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestElasticsearchConnection" Condition="AI_INSTALL AND ( SqlConnectionError=&quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; )" Ordering="212"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_1" Condition="AI_INSTALL AND ( SqlConnectionError=&quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; )" Ordering="211"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="OpenSearchConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;False&quot; )" Ordering="218"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;False&quot; )" Ordering="218"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="11"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Back" Event="NewDialog" Argument="OpenSearchConnectionDlg" Condition="AI_INSTALL AND ( OPENSEARCH_CONNECTION = &quot;False&quot; )" Ordering="3"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="11"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Back" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( ELK_CONNECTION = &quot;False&quot; )" Ordering="3"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Cancel" Event="SpawnDialog" Argument="CancelDlg" Condition="1" Ordering="100"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="5"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="5"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Back" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( RabbitMQServerConnectionError = &quot;&quot; )" Ordering="3"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="2"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="2"/>
@ -888,20 +876,20 @@
<ROW Dialog_="RedisServerConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="1"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQServerConnection" Condition="AI_INSTALL" Ordering="17"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL" Ordering="18"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;False&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="23"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;False&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="24"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="219"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="221"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQServerConnection" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="213"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="214"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="10"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="11"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="12"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="10"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;False&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="23"/>
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;False&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="24"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="219"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="221"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQServerConnection" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="213"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="214"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="RabbitMQConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="10"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="11"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="12"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="NewDialog" Argument="RedisServerConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="10"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRabbitMQConnectionMsgBox" Condition="AI_INSTALL AND ( RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="10"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_18" Condition="AI_INSTALL AND ( RabbitMQServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="9"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="12"/>
<ROW Dialog_="RabbitMQConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="12"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnection" Condition="AI_INSTALL" Ordering="2"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="DoAction" Argument="TestRedisServerConnectionMsgBox" Condition="AI_INSTALL AND ( RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="4"/>
<ROW Dialog_="RedisServerConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_17" Condition="AI_INSTALL AND ( RedisServerConnectionError &lt;&gt; &quot;&quot; )" Ordering="3"/>
@ -913,7 +901,7 @@
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestPostgreSqlConnection" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="DoAction" Argument="TestPostgreSqlConnectionMsgBox" Condition="AI_INSTALL AND ( PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="3"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="DoAction" Argument="AI_DATA_SETTER_20" Condition="AI_INSTALL AND ( PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="2"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="OpenSearchConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;False&quot; )" Ordering="9"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;False&quot; )" Ordering="9"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS = &quot;&quot; )" Ordering="1"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL AND ( OLDPRODUCTS &lt;&gt; &quot;&quot; )" Ordering="2"/>
<ROW Dialog_="CancelDlg" Control_="No" Event="EndDialog" Argument="Return" Condition="1" Ordering="100" MsiKey="CancelDlg#No#EndDialog#Return#1"/>
@ -925,10 +913,10 @@
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="[PostgreSQLConnectionDlg_Cond]" Argument="1" Condition="((&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3))" Ordering="2"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="[PostgreSQLConnectionDlg_Cond]" Argument="{}" Condition="1" Ordering="1"/>
<ROW Dialog_="SQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="8"/>
<ROW Dialog_="OpenSearchConnectionDlg" Control_="Back" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="OpenSearchConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;False&quot; )" Ordering="5"/>
<ROW Dialog_="ELKConnectionDlg" Control_="Back" Event="NewDialog" Argument="PostgreSQLConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( PostgreSqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="ELKConnectionDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;False&quot; )" Ordering="5"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Back" Event="NewDialog" Argument="SQLConnectionDlg" Condition="PostgreSQLConnectionDlg_Cond AND AI_INSTALL AND ( SqlConnectionError &lt;&gt; &quot;&quot; )" Ordering="3"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND OPENSEARCH_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="PostgreSQLConnectionDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL AND PostgreSQLConnectionDlg_Cond AND ( SqlConnectionError = &quot;&quot; AND PostgreSqlConnectionError = &quot;&quot; AND ELK_CONNECTION = &quot;True&quot; AND RabbitMQServerConnectionError = &quot;&quot; AND RedisServerConnectionError = &quot;&quot; )" Ordering="6"/>
<ROW Dialog_="LicenseAgreementDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="LicenseAgreementDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
</COMPONENT>
@ -942,12 +930,12 @@
<ROW Action="AI_ConfigFailActions" Type="11265" Source="aicustact.dll" Target="ConfigureServFailActions" WithoutSeq="true"/>
<ROW Action="AI_ConfigPermissions" Type="1" Source="userAccounts.dll" Target="OnConfigPermissions" AdditionalSeq="AI_DATA_SETTER_4"/>
<ROW Action="AI_ConfigureChainer" Type="1" Source="Prereq.dll" Target="ConfigurePrereqLauncher"/>
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[OPENSEARCH_MSG]&#13;\n[OPENSEARCH_SCHEME]://[OPENSEARCH_HOST]:[OPENSEARCH_PORT] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="HOST=[OPENSEARCH_HOST];PORT=[OPENSEARCH_PORT];OUTPUT=OPENSEARCH_CONNECTION"/>
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[ELASTICSEARCH_MSG]&#13;\n[ELASTICSEARCH_SCHEME]://[ELASTICSEARCH_HOST]:[ELASTICSEARCH_PORT] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="HOST=[ELASTICSEARCH_HOST];PORT=[ELASTICSEARCH_PORT];OUTPUT=ELK_CONNECTION"/>
<ROW Action="AI_DATA_SETTER_10" Type="51" Source="CustomActionData" Target="MySQL80"/>
<ROW Action="AI_DATA_SETTER_11" Type="51" Source="CustomActionData" Target="MySQL80"/>
<ROW Action="AI_DATA_SETTER_12" Type="51" Source="CustomActionData" Target="OpenSearch"/>
<ROW Action="AI_DATA_SETTER_13" Type="51" Source="StartOpenSearchService" Target="OpenSearch"/>
<ROW Action="AI_DATA_SETTER_12" Type="51" Source="CustomActionData" Target="Elasticsearch"/>
<ROW Action="AI_DATA_SETTER_13" Type="51" Source="StartElasticSearchService" Target="Elasticsearch"/>
<ROW Action="AI_DATA_SETTER_14" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_15" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_16" Type="51" Source="StopRedisService" Target="Redis"/>
@ -960,13 +948,7 @@
<ROW Action="AI_DATA_SETTER_22" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_23" Type="51" Source="CustomActionData" Target="OpenResty"/>
<ROW Action="AI_DATA_SETTER_24" Type="51" Source="CustomActionData" Target="OpenResty"/>
<ROW Action="AI_DATA_SETTER_25" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_26" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_27" Type="51" Source="StartOpenSearchDashboardsService" Target="OpenSearchDashboards"/>
<ROW Action="AI_DATA_SETTER_28" Type="51" Source="CustomActionData" Target="OpenSearchDashboards"/>
<ROW Action="AI_DATA_SETTER_29" Type="51" Source="CustomActionData" Target="Fluent-Bit"/>
<ROW Action="AI_DATA_SETTER_3" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_30" Type="51" Source="CustomActionData" Target="Fluent-Bit"/>
<ROW Action="AI_DATA_SETTER_4" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_5" Type="51" Source="CustomActionData" Target="[SqlConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
<ROW Action="AI_DATA_SETTER_6" Type="51" Source="CustomActionData" Target="[APPDIR_FORWARD_SLASH]"/>
@ -1016,12 +998,6 @@
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
<ROW Action="AI_SetPermissions" Type="11265" Source="userAccounts.dll" Target="OnSetPermissions" WithoutSeq="true"/>
<ROW Action="AI_SqlConfig" Type="9217" Source="sql.dll" Target="OnSqlConfig" WithoutSeq="true"/>
<ROW Action="AI_SqlInstall" Type="1" Source="sql.dll" Target="OnSqlInstall" AdditionalSeq="AI_DATA_SETTER_25"/>
<ROW Action="AI_SqlMaint" Type="9217" Source="sql.dll" Target="OnSqlMaint" WithoutSeq="true"/>
<ROW Action="AI_SqlRemove" Type="9217" Source="sql.dll" Target="OnSqlRemove" WithoutSeq="true"/>
<ROW Action="AI_SqlRollback" Type="9473" Source="sql.dll" Target="OnSqlRollback" WithoutSeq="true"/>
<ROW Action="AI_SqlUninstall" Type="1" Source="sql.dll" Target="OnSqlUninstall" AdditionalSeq="AI_DATA_SETTER_26"/>
<ROW Action="AI_TxtUpdaterCommit" Type="11777" Source="TxtUpdater.dll" Target="OnTxtUpdaterCommit" WithoutSeq="true"/>
<ROW Action="AI_TxtUpdaterConfig" Type="11265" Source="TxtUpdater.dll" Target="OnTxtUpdaterConfig" WithoutSeq="true"/>
<ROW Action="AI_TxtUpdaterInstall" Type="1" Source="TxtUpdater.dll" Target="OnTxtUpdaterInstall"/>
@ -1034,16 +1010,16 @@
<ROW Action="AI_XmlRollback" Type="11521" Source="xmlCfg.dll" Target="OnXmlRollback" WithoutSeq="true"/>
<ROW Action="AI_XmlUninstall" Type="1" Source="xmlCfg.dll" Target="OnXmlUninstall" AdditionalSeq="AI_DATA_SETTER_15"/>
<ROW Action="DetectMySQLService" Type="1" Source="aicustact.dll" Target="DetectProcess" Options="3" AdditionalSeq="AI_DATA_SETTER_9"/>
<ROW Action="MoveConfigs" Type="4102" Source="utils.vbs" Target="MoveConfigs"/>
<ROW Action="MySQLConfigure" Type="4358" Source="utils.vbs" Target="MySQLConfigure"/>
<ROW Action="ElasticSearchInstallPlugin" Type="1030" Source="utils.vbs" Target="ElasticSearchInstallPlugin"/>
<ROW Action="ElasticSearchSetup" Type="6" Source="utils.vbs" Target="ElasticSearchSetup"/>
<ROW Action="MoveNginxConfigs" Type="4102" Source="utils.vbs" Target="MoveNginxConfigs"/>
<ROW Action="MySQLConfigure" Type="262" Source="utils.vbs" Target="MySQLConfigure"/>
<ROW Action="OpenCancelUrl" Type="194" Source="viewer.exe" Target="http://www.onlyoffice.com/install-canceled.aspx" WithoutSeq="true" Options="1"/>
<ROW Action="OpenSearchSetup" Type="6" Source="utils.vbs" Target="OpenSearchSetup"/>
<ROW Action="PostgreSQLConfigure" Type="4102" Source="utils.vbs" Target="PostgreSqlConfigure"/>
<ROW Action="RedisSearchSetup" Type="6" Source="utils.vbs" Target="RedisSetup"/>
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[ProgramFilesFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace#ExeBuild:[ProgramFilesFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]" MultiBuildTarget="DefaultBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace#ExeBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
<ROW Action="SetDashboardsPwd" Type="6" Source="utils.vbs" Target="SetDashboardsPwd"/>
<ROW Action="SetDocumentServerJWTSecretProp" Type="6" Source="utils.vbs" Target="SetDocumentServerJWTSecretProp"/>
<ROW Action="SetMACHINEKEY" Type="262" Source="utils.vbs" Target="SetMACHINEKEY"/>
<ROW Action="SetSERVERNAME" Type="51" Source="SERVER_NAME" Target="[ComputerName]"/>
@ -1052,21 +1028,17 @@
<ROW Action="Set_DS_JWT_HEADER" Type="51" Source="DOCUMENT_SERVER_JWT_HEADER" Target="[JWT_HEADER]"/>
<ROW Action="Set_DS_JWT_SECRET" Type="51" Source="DOCUMENT_SERVER_JWT_SECRET" Target="[JWT_SECRET]"/>
<ROW Action="Set_LICENSE_PATH" Type="51" Source="LICENSE_PATH" Target="[APPDIR]\Data\license.lic"/>
<ROW Action="StartFluentBitService" Type="1" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_30"/>
<ROW Action="StartElasticSearchService" Type="3073" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_13"/>
<ROW Action="StartMigrationRunner" Type="3074" Source="viewer.exe" Target="/EnforcedRunAsAdmin /RunAsAdmin /HideWindow /dir &quot;[APPDIR]services\ASC.Migration.Runner\service&quot; &quot;[APPDIR]services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe&quot; standalone=true" Options="1"/>
<ROW Action="StartMySQLService" Type="1" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_11"/>
<ROW Action="StartOpenResty" Type="1" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_24"/>
<ROW Action="StartOpenSearchDashboardsService" Type="3073" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_27"/>
<ROW Action="StartOpenSearchService" Type="3073" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_13"/>
<ROW Action="StartService" Type="3073" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_19"/>
<ROW Action="StopFluentBitService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_29"/>
<ROW Action="StopElasticSearchService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_12"/>
<ROW Action="StopMySQLService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_10"/>
<ROW Action="StopOpenResty" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_23"/>
<ROW Action="StopOpenSearchDashboardsService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_28"/>
<ROW Action="StopOpenSearchService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_12"/>
<ROW Action="StopRedisService" Type="3073" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_16"/>
<ROW Action="TestOpenSearchConnection" Type="1" Source="Utils.CA.dll" Target="CheckTCPAvailability" WithoutSeq="true" AdditionalSeq="AI_DATA_SETTER_1"/>
<ROW Action="TestOpenSearchConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER"/>
<ROW Action="TestElasticsearchConnection" Type="1" Source="Utils.CA.dll" Target="CheckTCPAvailability" WithoutSeq="true" AdditionalSeq="AI_DATA_SETTER_1"/>
<ROW Action="TestElasticsearchConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER"/>
<ROW Action="TestPostgreSqlConnection" Type="4102" Source="utils.vbs" Target="TestPostgreSqlConnection" WithoutSeq="true"/>
<ROW Action="TestPostgreSqlConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" Options="1" AdditionalSeq="AI_DATA_SETTER_20"/>
<ROW Action="TestRabbitMQConnectionMsgBox" Type="1" Source="aicustact.dll" Target="MsgBox" WithoutSeq="true" AdditionalSeq="AI_DATA_SETTER_18"/>
@ -1077,7 +1049,7 @@
<ROW Action="TestSqlConnection" Type="6" Source="utils.vbs" Target="TestSqlConnection" WithoutSeq="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiDialogComponent">
<ROW Dialog="OpenSearchConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
<ROW Dialog="ELKConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
<ROW Dialog="PostgreSQLConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
<ROW Dialog="PrereqLicenseAgreementDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel" TitleLocId="-"/>
<ROW Dialog="RabbitMQConnectionDlg" HCentering="50" VCentering="50" Width="370" Height="270" Attributes="3" Title="[ProductName] [Setup]" Control_Default="Next" Control_Cancel="Cancel"/>
@ -1210,15 +1182,16 @@
<ROW Action="AI_DATA_SETTER_8" Condition="(REMOVE)" Sequence="3103"/>
<ROW Action="StopMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE &lt;&gt; &quot;Not Found&quot; )" Sequence="1611"/>
<ROW Action="AI_DATA_SETTER_10" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE &lt;&gt; &quot;Not Found&quot; )" Sequence="1610"/>
<ROW Action="Set_APPDIR_FORWARD_SLASH" Condition="( NOT Installed )" Sequence="1632"/>
<ROW Action="AI_DATA_SETTER_6" Condition="( NOT Installed )" Sequence="1627"/>
<ROW Action="Set_APPDIR_FORWARD_SLASH" Condition="( NOT Installed )" Sequence="1626"/>
<ROW Action="AI_DATA_SETTER_6" Condition="( NOT Installed )" Sequence="1621"/>
<ROW Action="DetectMySQLService" Condition="( ( NOT Installed AND NOT OLDPRODUCTS ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) )" Sequence="1609"/>
<ROW Action="AI_DATA_SETTER_9" Condition="( ( NOT Installed AND NOT OLDPRODUCTS ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) )" Sequence="1608"/>
<ROW Action="OpenSearchSetup" Condition="( NOT Installed )" Sequence="1621"/>
<ROW Action="StopOpenSearchService" Condition="( NOT Installed )" Sequence="1617"/>
<ROW Action="AI_DATA_SETTER_12" Condition="( NOT Installed )" Sequence="1616"/>
<ROW Action="StartOpenSearchService" Condition="( NOT Installed )" Sequence="1623"/>
<ROW Action="AI_DATA_SETTER_13" Condition="( NOT Installed )" Sequence="1622"/>
<ROW Action="ElasticSearchSetup" Condition="( NOT Installed )" Sequence="1617"/>
<ROW Action="StopElasticSearchService" Condition="( NOT Installed )" Sequence="1615"/>
<ROW Action="AI_DATA_SETTER_12" Condition="( NOT Installed )" Sequence="1614"/>
<ROW Action="ElasticSearchInstallPlugin" Condition="( NOT Installed )" Sequence="1616"/>
<ROW Action="StartElasticSearchService" Condition="( NOT Installed )" Sequence="1619"/>
<ROW Action="AI_DATA_SETTER_13" Condition="( NOT Installed )" Sequence="1618"/>
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
<ROW Action="StartMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE &lt;&gt; &quot;Not Found&quot; )" Sequence="1613"/>
<ROW Action="AI_DATA_SETTER_11" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE &lt;&gt; &quot;Not Found&quot; )" Sequence="1612"/>
@ -1235,36 +1208,24 @@
<ROW Action="AI_DATA_SETTER_15" Condition="(REMOVE)" Sequence="3101"/>
<ROW Action="AI_ConfigPermissions" Condition="REMOVE &lt;&gt; &quot;ALL&quot;" Sequence="5852"/>
<ROW Action="AI_DATA_SETTER_4" Condition="REMOVE &lt;&gt; &quot;ALL&quot;" Sequence="5851"/>
<ROW Action="MsiUnpublishAssemblies" Condition="Installed" Sequence="1635" SeqType="0" MsiKey="MsiUnpublishAssemblies"/>
<ROW Action="RedisSearchSetup" Condition="( NOT Installed )" Sequence="1626"/>
<ROW Action="StopRedisService" Condition="( NOT Installed )" Sequence="1629"/>
<ROW Action="AI_DATA_SETTER_16" Condition="( NOT Installed )" Sequence="1628"/>
<ROW Action="StartService" Condition="( NOT Installed )" Sequence="1631"/>
<ROW Action="AI_DATA_SETTER_19" Condition="( NOT Installed )" Sequence="1630"/>
<ROW Action="MsiUnpublishAssemblies" Condition="Installed" Sequence="1628" SeqType="0" MsiKey="MsiUnpublishAssemblies"/>
<ROW Action="RedisSearchSetup" Condition="( NOT Installed )" Sequence="1620"/>
<ROW Action="StopRedisService" Condition="( NOT Installed )" Sequence="1623"/>
<ROW Action="AI_DATA_SETTER_16" Condition="( NOT Installed )" Sequence="1622"/>
<ROW Action="StartService" Condition="( NOT Installed )" Sequence="1625"/>
<ROW Action="AI_DATA_SETTER_19" Condition="( NOT Installed )" Sequence="1624"/>
<ROW Action="PostgreSQLConfigure" Condition="( NOT Installed )" Sequence="1607"/>
<ROW Action="AI_FwInstall" Condition="(VersionNT &gt;= 501) AND (REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5802"/>
<ROW Action="AI_DATA_SETTER_21" Condition="(VersionNT &gt;= 501) AND (REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5801"/>
<ROW Action="AI_FwUninstall" Condition="(VersionNT &gt;= 501) AND (REMOVE=&quot;ALL&quot;)" Sequence="1702"/>
<ROW Action="AI_DATA_SETTER_22" Condition="(VersionNT &gt;= 501) AND (REMOVE=&quot;ALL&quot;)" Sequence="1701"/>
<ROW Action="SetSERVERNAME" Condition="( NOT Installed )" Sequence="1604"/>
<ROW Action="MoveConfigs" Condition="( NOT Installed )" Sequence="6601"/>
<ROW Action="StopOpenResty" Condition="( NOT Installed )" Sequence="6605"/>
<ROW Action="AI_DATA_SETTER_23" Condition="( NOT Installed )" Sequence="6604"/>
<ROW Action="StartOpenResty" Condition="( NOT Installed )" Sequence="6607"/>
<ROW Action="AI_DATA_SETTER_24" Condition="( NOT Installed )" Sequence="6606"/>
<ROW Action="MoveNginxConfigs" Condition="( NOT Installed )" Sequence="6601"/>
<ROW Action="StopOpenResty" Condition="( NOT Installed )" Sequence="6603"/>
<ROW Action="AI_DATA_SETTER_23" Condition="( NOT Installed )" Sequence="6602"/>
<ROW Action="StartOpenResty" Condition="( NOT Installed )" Sequence="6605"/>
<ROW Action="AI_DATA_SETTER_24" Condition="( NOT Installed )" Sequence="6604"/>
<ROW Action="Set_LICENSE_PATH" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) OR ( Installed AND ( REMOVE = &quot;ALL&quot; OR AI_INSTALL_MODE = &quot;Remove&quot; ) AND UPGRADINGPRODUCTCODE ) )" Sequence="201"/>
<ROW Action="AI_SqlInstall" Condition="(VersionNT &gt;= 500) AND (REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5502"/>
<ROW Action="AI_DATA_SETTER_25" Condition="(VersionNT &gt;= 500) AND (REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5501"/>
<ROW Action="AI_SqlUninstall" Condition="(VersionNT &gt;= 500) AND (REMOVE=&quot;ALL&quot;)" Sequence="1704"/>
<ROW Action="AI_DATA_SETTER_26" Condition="(VersionNT &gt;= 500) AND (REMOVE=&quot;ALL&quot;)" Sequence="1703"/>
<ROW Action="StopOpenSearchDashboardsService" Condition="( NOT Installed )" Sequence="1619"/>
<ROW Action="AI_DATA_SETTER_28" Condition="( NOT Installed )" Sequence="1618"/>
<ROW Action="StopFluentBitService" Condition="( NOT Installed )" Sequence="1615"/>
<ROW Action="AI_DATA_SETTER_29" Condition="( NOT Installed )" Sequence="1614"/>
<ROW Action="StartFluentBitService" Condition="( NOT Installed )" Sequence="6603"/>
<ROW Action="AI_DATA_SETTER_30" Condition="( NOT Installed )" Sequence="6602"/>
<ROW Action="StartOpenSearchDashboardsService" Condition="( NOT Installed )" Sequence="1625"/>
<ROW Action="AI_DATA_SETTER_27" Condition="( NOT Installed )" Sequence="1624"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
@ -1290,7 +1251,6 @@
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
<ROW Action="AI_RestartElevated" Sequence="51" Builds="ExeBuild"/>
<ROW Action="SetMACHINEKEY" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( MACHINE_KEY = &quot; &quot; )" Sequence="1107"/>
<ROW Action="SetDashboardsPwd" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( DASHBOARDS_PWD = &quot; &quot; )" Sequence="1108"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 &lt;&gt; 600) OR (MsiNTProductType &lt;&gt; 1)) AND ((VersionNT64 &lt;&gt; 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 &lt;&gt; 601) OR (MsiNTProductType &lt;&gt; 1)) AND ((VersionNT64 &lt;&gt; 601) OR (MsiNTProductType = 1)) AND ((VersionNT64 &lt;&gt; 602) OR (MsiNTProductType &lt;&gt; 1)) AND ((VersionNT64 &lt;&gt; 602) OR (MsiNTProductType = 1)) AND ((VersionNT64 &lt;&gt; 603) OR (MsiNTProductType &lt;&gt; 1)) AND ((VersionNT64 &lt;&gt; 603) OR (MsiNTProductType = 1)) AND ((VersionNT64 &lt;&gt; 1000) OR (MsiNTProductType &lt;&gt; 1)) AND ((VersionNT64 &lt;&gt; 1100) OR (MsiNTProductType &lt;&gt; 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
@ -1312,7 +1272,7 @@
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
<ROW Signature_="AppSearchSign" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="REDIS_PWD" Type="2"/>
<ROW Signature_="AppSearchSign_1" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="REDIS_PORT" Type="2"/>
<ROW Signature_="AppSearchSign_10" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="OPENSEARCH_HOST" Type="2"/>
<ROW Signature_="AppSearchSign_10" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="ELASTICSEARCH_HOST" Type="2"/>
<ROW Signature_="AppSearchSign_11" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="DB_USER" Type="2"/>
<ROW Signature_="AppSearchSign_12" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="DB_PWD" Type="2"/>
<ROW Signature_="AppSearchSign_13" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="DB_PORT" Type="2"/>
@ -1329,14 +1289,13 @@
<ROW Signature_="AppSearchSign_23" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="DOCUMENT_SERVER_JWT_SECRET" Type="2"/>
<ROW Signature_="AppSearchSign_24" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="DOCUMENT_SERVER_PORT" Type="2"/>
<ROW Signature_="AppSearchSign_25" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="MACHINE_KEY" Type="2"/>
<ROW Signature_="AppSearchSign_26" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="DASHBOARDS_PWD" Type="2"/>
<ROW Signature_="AppSearchSign_3" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_USER" Type="2"/>
<ROW Signature_="AppSearchSign_4" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_PWD" Type="2"/>
<ROW Signature_="AppSearchSign_5" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_PORT" Type="2"/>
<ROW Signature_="AppSearchSign_6" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_NAME" Type="2"/>
<ROW Signature_="AppSearchSign_7" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_HOST" Type="2"/>
<ROW Signature_="AppSearchSign_8" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="OPENSEARCH_SCHEME" Type="2"/>
<ROW Signature_="AppSearchSign_9" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="OPENSEARCH_PORT" Type="2"/>
<ROW Signature_="AppSearchSign_8" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="ELASTICSEARCH_SCHEME" Type="2"/>
<ROW Signature_="AppSearchSign_9" Root="2" Key="Software\[Manufacturer]\[ShortProductName]" Name="ELASTICSEARCH_PORT" Type="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="AI_ExePath"/>
@ -1350,7 +1309,6 @@
<ROW Registry="Comments" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Comments" Value="[ARPCOMMENTS]" Component_="AI_CustomARPName"/>
<ROW Registry="Contact" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Contact" Value="[ARPCONTACT]" Component_="AI_CustomARPName"/>
<ROW Registry="CurrentVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion" Name="\"/>
<ROW Registry="DASHBOARDS_PWD" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="DASHBOARDS_PWD" Value="[DASHBOARDS_PWD]" Component_="APPDIR"/>
<ROW Registry="DB_HOST" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="DB_HOST" Value="[DB_HOST]" Component_="APPDIR"/>
<ROW Registry="DB_NAME" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="DB_NAME" Value="[DB_NAME]" Component_="APPDIR"/>
<ROW Registry="DB_PORT" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="DB_PORT" Value="[DB_PORT]" Component_="APPDIR"/>
@ -1369,6 +1327,9 @@
<ROW Registry="HelpTelephone" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpTelephone" Value="[ARPHELPTELEPHONE]" Component_="AI_CustomARPName"/>
<ROW Registry="InstallLocation" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="InstallLocation" Value="[APPDIR]" Component_="AI_CustomARPName"/>
<ROW Registry="DOCUMENT_SERVER_PORT" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="DOCUMENT_SERVER_PORT" Value="[DOCUMENT_SERVER_PORT]" Component_="APPDIR"/>
<ROW Registry="ELASTICSEARCH_HOST" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="ELASTICSEARCH_HOST" Value="[ELASTICSEARCH_HOST]" Component_="APPDIR"/>
<ROW Registry="ELASTICSEARCH_PORT" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="ELASTICSEARCH_PORT" Value="[ELASTICSEARCH_PORT]" Component_="APPDIR"/>
<ROW Registry="ELASTICSEARCH_SCHEME" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="ELASTICSEARCH_SCHEME" Value="[ELASTICSEARCH_SCHEME]" Component_="APPDIR"/>
<ROW Registry="LZMA" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA" Name="\"/>
<ROW Registry="MACHINE_KEY" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="MACHINE_KEY" Value="[MACHINE_KEY]" Component_="MACHINE_KEY"/>
<ROW Registry="Manufacturer_2" Root="2" Key="Software\[Manufacturer]" Name="\"/>
@ -1376,9 +1337,6 @@
<ROW Registry="ModifyPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="ModifyPath" Value="[AI_UNINSTALLER] /i [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
<ROW Registry="NoModify" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoModify" Value="#1" Component_="AI_DisableModify" VirtualValue="#"/>
<ROW Registry="NoRepair" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoRepair" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
<ROW Registry="OPENSEARCH_HOST" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="OPENSEARCH_HOST" Value="[OPENSEARCH_HOST]" Component_="APPDIR"/>
<ROW Registry="OPENSEARCH_PORT" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="OPENSEARCH_PORT" Value="[OPENSEARCH_PORT]" Component_="APPDIR"/>
<ROW Registry="OPENSEARCH_SCHEME" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="OPENSEARCH_SCHEME" Value="[OPENSEARCH_SCHEME]" Component_="APPDIR"/>
<ROW Registry="PS_DB_HOST" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_HOST" Value="[PS_DB_HOST]" Component_="APPDIR"/>
<ROW Registry="PS_DB_NAME" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_NAME" Value="[PS_DB_NAME]" Component_="APPDIR"/>
<ROW Registry="PS_DB_PORT" Root="-1" Key="Software\[Manufacturer]\[ShortProductName]" Name="PS_DB_PORT" Value="[PS_DB_PORT]" Component_="APPDIR"/>
@ -1465,7 +1423,7 @@
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
<ROW ServiceInstall="ServiceName_WebHealthChecksUI" Name="[ServiceName_WebHealthChecksUI]" DisplayName="[ShortProductName] Web.HealthChecks.UI" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5033 --ENVIRONMENT=[ENVIRONMENT] --pathToConf=&quot;[APPDIR]config&quot; --$STORAGE_ROOT=&quot;[APPDIR]Data&quot; --log:dir=&quot;[APPDIR]Logs&quot; --log:name=[ServiceName_WebHealthChecksUI]" Component_="ASC.Web.HealthChecks.UI.exe" Description="[ShortProductName] Web.HealthChecks.UI"/>
<ROW ServiceInstall="ServiceName_ApiSystemService" Name="[ServiceName_ApiSystemService]" DisplayName="[ShortProductName] ApiSystem" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5010 --ENVIRONMENT=[ENVIRONMENT] --pathToConf=&quot;[APPDIR]config&quot; --$STORAGE_ROOT=&quot;[APPDIR]Data&quot; --log:dir=&quot;[APPDIR]Logs&quot; --log:name=[ServiceName_ApiSystemService] --core:products:folder=&quot;[APPDIR]products&quot; [SUBFOLDER_SERVER]" Component_="ASC.ApiSystem.exe" Description="[ShortProductName] ApiSystem"/>
<ROW ServiceInstall="ServiceName_ApiSystemService" Name="[ServiceName_ApiSystemService]" DisplayName="[ShortProductName] ApiSystem" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5010 --ENVIRONMENT=[ENVIRONMENT] --pathToConf=&quot;[APPDIR]config&quot; --$STORAGE_ROOT=&quot;[APPDIR]Data&quot; --log:dir=&quot;[APPDIR]Logs&quot; --log:name=[ServiceName_ApiSystemService]" Component_="ASC.ApiSystem.exe" Description="[ShortProductName] ApiSystem"/>
<ROW ServiceInstall="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" DisplayName="[ShortProductName] Data.Backup.BackgroundTasks" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5032 --ENVIRONMENT=[ENVIRONMENT] --pathToConf=&quot;[APPDIR]config&quot; --$STORAGE_ROOT=&quot;[APPDIR]Data&quot; --log:dir=&quot;[APPDIR]Logs&quot; --log:name=[ServiceName_BackgroundTasks] --core:products:folder=&quot;[APPDIR]products&quot; [SUBFOLDER_SERVER] --core:eventBus:subscriptionClientName=asc_event_bus_backup_queue" Component_="ASC.Data.Backup.BackgroundTasks.exe" Description="[ShortProductName] Data.Backup.BackgroundTasks"/>
<ROW ServiceInstall="ServiceName_BackupService" Name="[ServiceName_BackupService]" DisplayName="[ShortProductName] BackupService" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5012 --ENVIRONMENT=[ENVIRONMENT] --pathToConf=&quot;[APPDIR]config&quot; --$STORAGE_ROOT=&quot;[APPDIR]Data&quot; --log:dir=&quot;[APPDIR]Logs&quot; --log:name=[ServiceName_BackupService] --core:products:folder=&quot;[APPDIR]products&quot; [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.exe" Description="[ShortProductName] BackupService"/>
<ROW ServiceInstall="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" DisplayName="[ShortProductName] ClearEvents" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5027 --ENVIRONMENT=[ENVIRONMENT] --pathToConf=&quot;[APPDIR]config&quot; --$STORAGE_ROOT=&quot;[APPDIR]Data&quot; --log:dir=&quot;[APPDIR]Logs&quot; --log:name=[ServiceName_ClearEvents] --core:products:folder=&quot;[APPDIR]products&quot; [SUBFOLDER_SERVER]" Component_="ASC.ClearEvents.exe" Description="[ShortProductName] ClearEvents"/>
@ -1496,36 +1454,36 @@
<ROW PrereqKey="Certbot" DisplayName="Certbot v2.6.0" VersionMin="2.6.0" SetupFileUrl="https://github.com/certbot/certbot/releases/download/v2.6.0/certbot-beta-installer-win_amd64_signed.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yxm" TargetName="Certbot" Builds="DefaultBuild"/>
<ROW PrereqKey="DocumentServer" DisplayName="DocumentServer" SetupFileUrl="onlyoffice-documentserver.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" NoUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" Options="fi=" TargetName="onlyoffice-documentserver.exe" Builds="DefaultBuild" Feature="DocumentServer" RepairComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG"/>
<ROW PrereqKey="DocumentServer.EE" DisplayName="DocumentServer-EE" SetupFileUrl="onlyoffice-documentserver-ee.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LICENSE_PATH=&quot;[APPDIR]Data\license.lic&quot; /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LICENSE_PATH=&quot;[APPDIR]Data\license.lic&quot; /LOG" NoUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LICENSE_PATH=&quot;[APPDIR]Data\license.lic&quot; /LOG" Options="fi=" TargetName="onlyoffice-documentserver-ee.exe" Builds="ExeBuild" Feature="DocumentServer.EE" RepairComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LICENSE_PATH=&quot;[APPDIR]Data\license.lic&quot; /LOG"/>
<ROW PrereqKey="EA5B60A5CAD4115A8386D017CC889B9" DisplayName="ASP.NET Core Runtime 8.0.2 x64" VersionMin="8.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/34d3e426-9f3c-45a6-8496-f21b3adbbf5f/475aec17378cc8ab0fcfe535e84698f9/aspnetcore-runtime-8.0.2-win-x64.exe" Location="1" ExactSize="10416064" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" MD5="6928ea97bdbb2dbfd7da1d3ae9eaaf9f" TargetName="ASP.NET Core 8.0" Builds="DefaultBuild"/>
<ROW PrereqKey="EA5B60A5CAD4115A8386D017CC889B9" DisplayName="ASP.NET Core Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/d37efccc-2ba1-4fc9-a1ef-a8e1e77fb681/b9a20fc29ff05f18d81620ec88ade699/aspnetcore-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="9562088" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" MD5="a87c53a62579d43c6e20683ad686c991" TargetName="ASP.NET Core 7.0" Builds="DefaultBuild"/>
<ROW PrereqKey="Elasticsearch7.16.3" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="redist\elasticsearch-7.16.3.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch 7.16.3\elasticsearch-7.16.3.msi" Builds="ExeBuild"/>
<ROW PrereqKey="ErlangOTP" DisplayName="Erlang v26.0.2 x64" VersionMin="26.0.2" SetupFileUrl="redist\otp_win64_26.0.2.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="ym" TargetName="ErlangOTP\otp_win64_26.0.2.exe" Builds="ExeBuild"/>
<ROW PrereqKey="Erlangv26.0x64" DisplayName="Erlang v26.0.2 x64" VersionMin="26.0.2" SetupFileUrl="https://github.com/erlang/otp/releases/download/OTP-26.0.2/otp_win64_26.0.2.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="ym" TargetName="Erlang v26.0 x64" Builds="DefaultBuild"/>
<ROW PrereqKey="F3520F64DA5998338D97129FAD2" DisplayName=".NET Runtime 8.0.2 x64" VersionMin="8.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/a4bc7333-6e30-4e2d-b300-0b4f23537e5b/4b81af6d46a02fba5d9ce030af438c67/dotnet-runtime-8.0.2-win-x64.exe" Location="1" ExactSize="28409632" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="511beb27f4390b07c4c93d6d27fe9446" TargetName=".NET 8.0" Builds="DefaultBuild"/>
<ROW PrereqKey="F3520F64DA5998338D97129FAD2" DisplayName=".NET Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/c69813b7-2ece-4c2e-8c45-e33006985e18/61cc8fe4693a662b2da55ad932a46446/dotnet-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="28223424" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="c9d6796b57a1630d4f004302262c241e" TargetName=".NET 7.0" Builds="DefaultBuild"/>
<ROW PrereqKey="FFmpegEssentials" DisplayName="FFmpeg v6.0 x64" VersionMin="6.0.0" SetupFileUrl="redist\FFmpeg_Essentials.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="FFmpeg Essentials\FFmpeg_Essentials.msi" Builds="ExeBuild"/>
<ROW PrereqKey="FFmpegx64" DisplayName="FFmpeg v6.0 x64" VersionMin="6.0.0" SetupFileUrl="https://github.com/icedterminal/ffmpeg-installer/releases/download/6.0.0.20230306/FFmpeg_Essentials.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="FFmpeg x64" Builds="DefaultBuild"/>
<ROW PrereqKey="Microsoft.NETFrame" DisplayName=".NET Framework 4.8" VersionMin="4.8" SetupFileUrl="redist\.net_framework_4.8.exe" Location="0" ExactSize="0" Operator="1" ComLine="/q /promptrestart" BasicUiComLine="/q /promptrestart" NoUiComLine="/q /promptrestart" Options="ym" TargetName="Microsoft .NET Framework 4.8\.net_framework_4.8.exe" Builds="ExeBuild"/>
<ROW PrereqKey="Microsoft.NETRunti" DisplayName=".NET Runtime - 8.0.2" VersionMin="8.0" SetupFileUrl="redist\dotnet-runtime-8.0.2-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Microsoft .NET Runtime - 8.0.2 (x64)\dotnet-runtime-8.0.2-win-x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="MicrosoftASP.NETCo" DisplayName="ASP.NET Core Runtime 8.0.2 x64" VersionMin="8.0" SetupFileUrl="redist\aspnetcore-runtime-8.0.2-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="yxm" TargetName="Microsoft ASP.NET Core 8.0.2 - Shared Framework (x64)\aspnetcore-runtime-8.0.2-win-x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="Microsoft.NETRunti" DisplayName=".NET Runtime - 7.0.4" VersionMin="7.0" SetupFileUrl="redist\dotnet-runtime-7.0.4-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Microsoft .NET Runtime - 7.0.4 (x64)\dotnet-runtime-7.0.4-win-x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="MicrosoftASP.NETCo" DisplayName="ASP.NET Core Runtime 7.0.4 x64" VersionMin="7.0" SetupFileUrl="redist\aspnetcore-runtime-7.0.4-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="yxm" TargetName="Microsoft ASP.NET Core 7.0.4 - Shared Framework (x64)\aspnetcore-runtime-7.0.4-win-x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="MicrosoftVisualC" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x64" VersionMin="12.0" SetupFileUrl="redist\vcredist_2013u5_x64.exe" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="Microsoft Visual C++ 2013 Redistributable (x64) - 12.0.40649\vcredist_2013u5_x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="MicrosoftVisualC_1" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x86" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x86.exe" Location="0" ExactSize="0" Operator="0" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.26.28720\VC_redist.x86.exe" Builds="ExeBuild"/>
<ROW PrereqKey="MicrosoftVisualC_2" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x64" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="yxm" TargetName="Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.26.28720\VC_redist.x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="MySQLConnectorODBC" DisplayName="MySQL Connector/ODBC 8.0.37 x86" VersionMin="8.0.33" SetupFileUrl="redist\mysql-connector-odbc-8.0.37-win32.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL ConnectorODBC 8.0 (32-bit)\mysql-connector-odbc-8.0.37-win32.msi" Builds="ExeBuild"/>
<ROW PrereqKey="MySQLInstallerCo" DisplayName="MySQL Installer Community 8.0.37 x86" VersionMin="1.6.6.0" SetupFileUrl="redist\mysql-installer-community-8.0.37.0.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer - Community\mysql-installer-community-8.0.37.0.msi" Builds="ExeBuild"/>
<ROW PrereqKey="MySQLInstallerRunn" DisplayName="MySQL Installer Community 8.0.37 x86 Runner" SetupFileUrl="MySQL Installer Runner.exe" Location="0" ExactSize="0" Operator="1" ComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.37&quot;" BasicUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.37&quot;" NoUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.37&quot;" Options="yx" TargetName="MySQL Installer Runner \MySQL Installer Runner.exe" ParentPrereq="RequiredApplication_2"/>
<ROW PrereqKey="Node.js" DisplayName="Node.js 20.11.1" VersionMin="20.11.1" SetupFileUrl="redist\node-v20.11.1-x64.msi" Location="0" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="Node.js\node-v20.11.1-x64.msi" Builds="ExeBuild"/>
<ROW PrereqKey="MySQLConnectorODBC" DisplayName="MySQL Connector/ODBC 8.0.33 x86" VersionMin="8.0.33" SetupFileUrl="redist\mysql-connector-odbc-8.0.33-win32.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL ConnectorODBC 8.0 (32-bit)\mysql-connector-odbc-8.0.33-win32.msi" Builds="ExeBuild"/>
<ROW PrereqKey="MySQLInstallerCo" DisplayName="MySQL Installer Community 8.0.33 x86" VersionMin="1.6.6.0" SetupFileUrl="redist\mysql-installer-community-8.0.33.0.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer - Community\mysql-installer-community-8.0.33.0.msi" Builds="ExeBuild"/>
<ROW PrereqKey="MySQLInstallerRunn" DisplayName="MySQL Installer Community 8.0.33 x86 Runner" SetupFileUrl="MySQL Installer Runner.exe" Location="0" ExactSize="0" Operator="1" ComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.33&quot;" BasicUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.33&quot;" NoUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.33&quot;" Options="y" TargetName="MySQL Installer Runner \MySQL Installer Runner.exe" ParentPrereq="RequiredApplication_2"/>
<ROW PrereqKey="Node.js" DisplayName="Node.js 18.16.1" VersionMin="18.16.0" SetupFileUrl="redist\node-v18.16.1-x64.msi" Location="0" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="Node.js\node-v18.16.1-x64.msi" Builds="ExeBuild"/>
<ROW PrereqKey="OpenResty" DisplayName="OpenResty v1.21.4" VersionMin="1.21.4.2" SetupFileUrl="publish\OpenResty.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="yxm" TargetName="OpenResty\OpenResty.msi"/>
<ROW PrereqKey="OpenSearch2.11.1" DisplayName="OpenSearch v2.11.1 x64" VersionMin="2.11.1" SetupFileUrl="publish\OpenSearch-2.11.1.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/exenoui /qn" BasicUiComLine="/exenoui /qn" NoUiComLine="/exenoui /qn" Options="y" TargetName="OpenSearch 2.11.1\OpenSearch-2.11.1.exe"/>
<ROW PrereqKey="OpenSearchStack" DisplayName="OpenSearchStack v1.0.0 x64" VersionMin="1.0.0" SetupFileUrl="publish\OpenSearchStack.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="OpenSearchStack\OpenSearchStack.msi"/>
<ROW PrereqKey="PostgreSQL_ODBC" DisplayName="PostgreSQL ODBC Driver v15.0 x64" SetupFileUrl="psqlodbc_15_x64.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="myx" TargetName="psqlodbc_x64.msi"/>
<ROW PrereqKey="PostgresSQL" DisplayName="PostgreSQL v14.0 x64" VersionMin="14.0" SetupFileUrl="postgresql-14.0-1-windows-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" BasicUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" NoUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" Options="xy" TargetName="postgresql-14.0-1-windows-x64.exe"/>
<ROW PrereqKey="RabbitMQServer" DisplayName="RabbitMQ v3.12.1 x64" VersionMin="3.12" SetupFileUrl="redist\rabbitmq-server-3.12.1.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ Server\rabbitmq-server-3.12.1.exe" Builds="ExeBuild"/>
<ROW PrereqKey="RedisonWindows" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="redist\Redis-x64-5.0.10.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis on Windows\Redis-x64-5.0.10.msi" Builds="ExeBuild"/>
<ROW PrereqKey="RequiredApplication" DisplayName="MySQL Connector/ODBC 8.0.37 x86" VersionMin="8.0.33" SetupFileUrl="https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.37-win32.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL Connector ODBC 8.0.37 x86" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_1" DisplayName="Node.js 20.11.1" VersionMin="20.11.1" SetupFileUrl="https://nodejs.org/dist/v20.11.1/node-v20.11.1-x64.msi" Location="1" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="my" TargetName="Node.js v20.11.1 x64" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_2" DisplayName="MySQL Installer Community 8.0.37 x86" VersionMin="1.6.6.0" SetupFileUrl="https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.37.0.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer Community 8.0.37 x86" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication" DisplayName="MySQL Connector/ODBC 8.0.33 x86" VersionMin="8.0.33" SetupFileUrl="https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.33-win32.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL Connector ODBC 8.0.33 x86" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_1" DisplayName="Node.js 18.16.1" VersionMin="18.16.0" SetupFileUrl="https://nodejs.org/dist/v18.16.1/node-v18.16.1-x64.msi" Location="1" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="my" TargetName="Node.js v18.16.1 x64" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_2" DisplayName="MySQL Installer Community 8.0.33 x86" VersionMin="1.6.6.0" SetupFileUrl="https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.33.0.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer Community 8.0.33 x86" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_3" DisplayName="Certbot v2.6.0" VersionMin="2.6.0" SetupFileUrl="redist\certbot-2.6.0.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yxm" TargetName="Required Application\certbot-2.6.0.exe" Builds="ExeBuild"/>
<ROW PrereqKey="RequiredApplication_4" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch v7.16.3 x64" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_5" DisplayName="RabbitMQ v3.12.1 x64" VersionMin="3.12" SetupFileUrl="https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.1/rabbitmq-server-3.12.1.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ v3.12.1 x64" Builds="DefaultBuild"/>
<ROW PrereqKey="RequiredApplication_6" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="http://download.onlyoffice.com/install/windows/redist/Redis-x64-5.0.10.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis 5.0.10 x64" Builds="DefaultBuild"/>
<ATTRIBUTE name="PrereqsOrder" value="B96F93FA27E74B02866727AAE83982D0 Microsoft.NETFrame F3520F64DA5998338D97129FAD2 Microsoft.NETRunti EA5B60A5CAD4115A8386D017CC889B9 MicrosoftASP.NETCo CA62D813A4E74FA2AAE86A7D7B7B1493 MicrosoftVisualC A918597FE054CCCB65ABDBA0AD8F63C MicrosoftVisualC_1 C4FE6FD5B7C4D07B3A313E754A9A6A8 MicrosoftVisualC_2 RequiredApplication MySQLConnectorODBC RequiredApplication_2 MySQLInstallerCo MySQLInstallerRunn RequiredApplication_1 Node.js OpenSearch2.11.1 Erlangv26.0x64 ErlangOTP RequiredApplication_5 RabbitMQServer RequiredApplication_6 RedisonWindows FFmpegx64 FFmpegEssentials Certbot RequiredApplication_3 PostgreSQL_ODBC PostgresSQL OpenResty OpenSearchStack DocumentServer DocumentServer.EE"/>
<ATTRIBUTE name="PrereqsOrder" value="B96F93FA27E74B02866727AAE83982D0 Microsoft.NETFrame F3520F64DA5998338D97129FAD2 Microsoft.NETRunti EA5B60A5CAD4115A8386D017CC889B9 MicrosoftASP.NETCo CA62D813A4E74FA2AAE86A7D7B7B1493 MicrosoftVisualC A918597FE054CCCB65ABDBA0AD8F63C MicrosoftVisualC_1 C4FE6FD5B7C4D07B3A313E754A9A6A8 MicrosoftVisualC_2 RequiredApplication MySQLConnectorODBC RequiredApplication_2 MySQLInstallerCo MySQLInstallerRunn RequiredApplication_1 Node.js RequiredApplication_4 Elasticsearch7.16.3 Erlangv26.0x64 ErlangOTP RequiredApplication_5 RabbitMQServer RequiredApplication_6 RedisonWindows FFmpegx64 FFmpegEssentials Certbot RequiredApplication_3 PostgreSQL_ODBC PostgresSQL OpenResty DocumentServer DocumentServer.EE"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
<ROW SearchKey="A918597FE054CCCB65ABDBA0AD8F63CSyst" Prereq="A918597FE054CCCB65ABDBA0AD8F63C" SearchType="0" SearchString="[SystemFolder]vcruntime140.dll" VerMin="14.26.28720" Order="2" Property="PreReqSearch_A918597FE054CCCB65ABDB"/>
@ -1533,13 +1491,13 @@
<ROW SearchKey="B96F93FA27E74B02866727AAE83982D0Rel" Prereq="B96F93FA27E74B02866727AAE83982D0" SearchType="9" SearchString="HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release" RefContent="G528048" Order="1" Property="PreReqSearch_B96F93FA27E74B02866727"/>
<ROW SearchKey="C4FE6FD5B7C4D07B3A313E754A9A6A8Vers" Prereq="C4FE6FD5B7C4D07B3A313E754A9A6A8" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum\Version" VerMin="14.26.28720" Order="1" Property="PreReqSearch_C4FE6FD5B7C4D07B3A313E"/>
<ROW SearchKey="CA62D813A4E74FA2AAE86A7D7B7B1493Ver" Prereq="CA62D813A4E74FA2AAE86A7D7B7B1493" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\12.0\RuntimeMinimum\Version" VerMin="12.0.40649" Order="1" Property="PreReqSearch_CA62D813A4E74FA2AAE86A"/>
<ROW SearchKey="EA5B60A5CAD4115A8386D017CC889B9ASP.N" Prereq="EA5B60A5CAD4115A8386D017CC889B9" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v8.0" VerMin="8.0.0" Order="1" Property="PreReqSearch_EA5B60A5CAD4115A8386D0"/>
<ROW SearchKey="F3520F64DA5998338D97129FAD2Mic" Prereq="F3520F64DA5998338D97129FAD2" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App" VerMin="8.0.0" Order="1" Property="PreReqSearch_F3520F64DA5998338D9712"/>
<ROW SearchKey="EA5B60A5CAD4115A8386D017CC889B9ASP.N" Prereq="EA5B60A5CAD4115A8386D017CC889B9" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v7.0" VerMin="7.0.0" Order="1" Property="PreReqSearch_EA5B60A5CAD4115A8386D0"/>
<ROW SearchKey="F3520F64DA5998338D97129FAD2Mic" Prereq="F3520F64DA5998338D97129FAD2" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App" VerMin="7.0.0" Order="1" Property="PreReqSearch_F3520F64DA5998338D9712"/>
<ROW SearchKey="FFmpeg" Prereq="FFmpegx64" SearchType="4" SearchString="{384A74EC-865A-4907-8561-9DE765EE6E14}" Order="1" Property="PreReqSearch_3"/>
<ROW SearchKey="ONLYOFFICEDocumentServer_is1" Prereq="DocumentServer" SearchType="5" SearchString="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ONLYOFFICE DocumentServer_is1" Order="1" Property="PreReqSearch_1_1" Platform="1"/>
<ROW SearchKey="RabbitMQ_1" Prereq="RequiredApplication_5" SearchType="2" SearchString="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\RabbitMQ\DisplayVersion" VerMin="3.12.1" Order="2" Property="PreReqSearch_9"/>
<ROW SearchKey="SystemFolderfile.dll" Prereq="RequiredApplication" SearchType="4" SearchString="{7AEDB3F3-7B9D-4FE2-8D8F-3CE3DE6F5B6B}" VerMin="8.0.33" Order="1" Property="PreReqSearch"/>
<ROW SearchKey="SystemFolderfile.dll_1" Prereq="RequiredApplication_1" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="20.11.1" Order="1" Property="PreReqSearch_1"/>
<ROW SearchKey="SystemFolderfile.dll_1" Prereq="RequiredApplication_1" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="18.16.0" Order="1" Property="PreReqSearch_1"/>
<ROW SearchKey="SystemFolderfile.dll_10" Prereq="MicrosoftVisualC_2" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum\Version" VerMin="14.26.28720" Order="1" Property="PreReqSearch_20"/>
<ROW SearchKey="SystemFolderfile.dll_11" Prereq="ErlangOTP" SearchType="5" SearchString="HKLM\SOFTWARE\Wow6432Node\Ericsson\Erlang\14.0.2" Order="1" Property="PreReqSearch_24"/>
<ROW SearchKey="SystemFolderfile.dll_12" Prereq="RabbitMQServer" SearchType="2" SearchString="HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\RabbitMQ\DisplayVersion" VerMin="3.12.1" Order="1" Property="PreReqSearch_25"/>
@ -1549,32 +1507,27 @@
<ROW SearchKey="SystemFolderfile.dll_3" Prereq="OpenResty" SearchType="4" SearchString="{264FA774-91E5-4854-8010-4AB58CA830BD}" VerMin="1.21.4.2" Order="1" Property="PreReqSearch_8"/>
<ROW SearchKey="SystemFolderfile.dll_4" Prereq="Certbot" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Certbot\DisplayVersion" VerMin="2.6.0" Order="1" Property="PreReqSearch_10"/>
<ROW SearchKey="SystemFolderfile.dll_5" Prereq="Microsoft.NETFrame" SearchType="9" SearchString="HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release" RefContent="G528048" Order="1" Property="PreReqSearch_13"/>
<ROW SearchKey="SystemFolderfile.dll_6" Prereq="Microsoft.NETRunti" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App" VerMin="8.0.0" Order="1" Property="PreReqSearch_15"/>
<ROW SearchKey="SystemFolderfile.dll_7" Prereq="MicrosoftASP.NETCo" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v8.0" VerMin="8.0.0" Order="1" Property="PreReqSearch_16"/>
<ROW SearchKey="SystemFolderfile.dll_6" Prereq="Microsoft.NETRunti" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App" VerMin="7.0.0" Order="1" Property="PreReqSearch_15"/>
<ROW SearchKey="SystemFolderfile.dll_7" Prereq="MicrosoftASP.NETCo" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v7.0" VerMin="7.0.0" Order="1" Property="PreReqSearch_16"/>
<ROW SearchKey="SystemFolderfile.dll_8" Prereq="MicrosoftVisualC" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\12.0\RuntimeMinimum\Version" VerMin="12.0.40649" Order="1" Property="PreReqSearch_17"/>
<ROW SearchKey="SystemFolderfile.dll_9" Prereq="MicrosoftVisualC_1" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\14.0\RuntimeMinimum\Version" VerMin="14.26.28720" Order="1" Property="PreReqSearch_18"/>
<ROW SearchKey="SystemFoldervcruntime140.dll" Prereq="MicrosoftVisualC_1" SearchType="0" SearchString="[SystemFolder]vcruntime140.dll" VerMin="14.26.28720" Order="2" Property="PreReqSearch_19"/>
<ROW SearchKey="UpgradeCode" Prereq="PostgreSQL_ODBC" SearchType="4" SearchString="{BBD29DF5-89F6-4B8B-BDC9-C3EA3A4AFDBB}" VerMin="15.0" Order="1" Property="PreReqSearch_14"/>
<ROW SearchKey="UpgradeCode_1" Prereq="OpenSearchStack" SearchType="4" SearchString="{93CD82F0-18A5-4803-AC50-9A0021E92A56}" VerMin="1.0.0" Order="1" Property="PreReqSearch_7"/>
<ROW SearchKey="UpgradeCode_1" Prereq="RequiredApplication_4" SearchType="4" SearchString="{DAAA2CBA-A1ED-4F29-AFBF-5478617B00F6}" VerMin="7.16.3" Order="2" Property="PreReqSearch_7"/>
<ROW SearchKey="UpgradeCode_2" Prereq="MySQLConnectorODBC" SearchType="4" SearchString="{7AEDB3F3-7B9D-4FE2-8D8F-3CE3DE6F5B6B}" VerMin="8.0.33" Order="1" Property="PreReqSearch_21"/>
<ROW SearchKey="UpgradeCode_3" Prereq="RequiredApplication_6" SearchType="4" SearchString="{05410198-7212-4FC4-B7C8-AFEFC3DA0FBC}" VerMin="5.0.10" Order="2" Property="PreReqSearch_12"/>
<ROW SearchKey="UpgradeCode_4" Prereq="MySQLInstallerCo" SearchType="4" SearchString="{18B94B70-06F1-4AC0-B308-37280DB868C2}" VerMin="1.6.6.0" Order="1" Property="PreReqSearch_22"/>
<ROW SearchKey="UpgradeCode_5" Prereq="Node.js" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="20.11.1" Order="1" Property="PreReqSearch_23"/>
<ROW SearchKey="UpgradeCode_5" Prereq="Node.js" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="18.16.0" Order="1" Property="PreReqSearch_23"/>
<ROW SearchKey="UpgradeCode_6" Prereq="RedisonWindows" SearchType="4" SearchString="{05410198-7212-4FC4-B7C8-AFEFC3DA0FBC}" VerMin="5.0.10" Order="1" Property="PreReqSearch_26"/>
<ROW SearchKey="UpgradeCode_7" Prereq="FFmpegEssentials" SearchType="4" SearchString="{384A74EC-865A-4907-8561-9DE765EE6E14}" Order="1" Property="PreReqSearch_27"/>
<ROW SearchKey="UpgradeCode_8" Prereq="OpenSearch2.11.1" SearchType="4" SearchString="{F8561DF7-6238-4927-8DAC-AD0EBC117F6C}" VerMin="2.11.1" Order="1" Property="PreReqSearch_29"/>
<ROW SearchKey="UpgradeCode_8" Prereq="Elasticsearch7.16.3" SearchType="4" SearchString="{DAAA2CBA-A1ED-4F29-AFBF-5478617B00F6}" VerMin="7.16.3" Order="1" Property="PreReqSearch_29"/>
<ROW SearchKey="Version" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 5.7\Version" Order="1" Property="PreReqSearch_4"/>
<ROW SearchKey="Version_1" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 8.0\Version" Order="2" Property="PreReqSearch_5"/>
<ROW SearchKey="Version_2" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 5.5\Version" VerMin="5.5" Order="0" Property="PreReqSearch_6"/>
<ROW SearchKey="Version_3" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\Wow6432Node\MySQL AB\MySQL Server 8.0\Version" Order="4" Property="PreReqSearch_31"/>
<ROW SearchKey="__1" Prereq="Erlangv26.0x64" SearchType="5" SearchString="HKLM\SOFTWARE\Wow6432Node\Ericsson\Erlang\14.0.2" Order="2" Property="PreReqSearch_11"/>
<ROW SearchKey="postgresqlx649.5" Prereq="PostgresSQL" SearchType="5" SearchString="HKLM\SOFTWARE\PostgreSQL\Installations\postgresql-x64-14" Order="1" Property="PreReqSearch_2_1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SqlConnectionComponent">
<ROW ConnectionName="MySql.Conection" Condition="1" Dbms="1" Flags="4" Order="0" LoginTimeout="60" ConnectionString="Driver={[MYSQLODBCDRIVER]};Server=[DB_HOST];Port=[DB_PORT];Database=[DB_NAME];User=[DB_USER];Password=[DB_PWD];charset=UTF8;GET_SERVER_PUBLIC_KEY=1;"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SqlScriptComponent">
<ROW ScriptName="SQL_SCRIPT_REINDEX_OPENSEARCH" ConnectionName="MySql.Conection" Condition="NEED_REINDEX_OPENSEARCH = &quot;TRUE&quot; AND OLDPRODUCTS &lt;&gt; &quot;&quot;" Separator=";" ScriptInline="TRUNCATE webstudio_index;&#13;&#10;" Flags="18" Order="0"/>
<ATTRIBUTE name="ImpersonateUser" value="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SynchronizedFolderComponent">
@ -1587,25 +1540,17 @@
<ROW Name="ReplaceInclude" TxtUpdateSet="YourFile.txt" FindPattern="/etc/nginx/includes" ReplacePattern="includes" Options="2" Order="0" FileEncoding="-1"/>
<ROW Name="ReplaceRoot" TxtUpdateSet="YourFile.txt_1" FindPattern="/var/www/client" ReplacePattern="&quot;[APPDIR]client&quot;" Options="2" Order="0" FileEncoding="-1"/>
<ROW Name="ReplaceRoot" TxtUpdateSet="YourFile.txt_2" FindPattern="/var/www/public/" ReplacePattern="&quot;[APPDIR]public/&quot;" Options="2" Order="0" FileEncoding="-1"/>
<ROW Name="ReplaceRoot" TxtUpdateSet="YourFile.txt_6" FindPattern="/var/www/management" ReplacePattern="&quot;[APPDIR]management&quot;" Options="2" Order="0" FileEncoding="-1"/>
<ROW Name="ReplaceDsProxyPass" TxtUpdateSet="YourFile.txt" FindPattern="proxy_pass .*;" ReplacePattern="proxy_pass http://[DOCUMENT_SERVER_HOST]:[DOCUMENT_SERVER_PORT];" Options="19" Order="1" FileEncoding="-1"/>
<ROW Name="ReplaceRouter" TxtUpdateSet="YourFile.txt_3" FindPattern="$router_host" ReplacePattern="127.0.0.1" Options="2" Order="0" FileEncoding="-1"/>
<ROW Name="Replace" TxtUpdateSet="fluentbit.conf" FindPattern="{APPDIR}" ReplacePattern="[APPDIR]" Options="2" Order="0" FileEncoding="-1"/>
<ROW Name="ReplaceHost" TxtUpdateSet="fluentbit.conf" FindPattern="OPENSEARCH_HOST" ReplacePattern="[OPENSEARCH_HOST]" Options="2" Order="1" FileEncoding="-1"/>
<ROW Name="ReplacePort" TxtUpdateSet="fluentbit.conf" FindPattern="OPENSEARCH_PORT" ReplacePattern="[OPENSEARCH_PORT]" Options="2" Order="2" FileEncoding="-1"/>
<ROW Name="ReplaceScheme" TxtUpdateSet="fluentbit.conf" FindPattern="OPENSEARCH_SCHEME" ReplacePattern="[OPENSEARCH_SCHEME]" Options="2" Order="3" FileEncoding="-1"/>
<ROW Name="ReplaceIndex" TxtUpdateSet="fluentbit.conf" FindPattern="OPENSEARCH_INDEX" ReplacePattern="[OPENSEARCH_INDEX]" Options="2" Order="4" FileEncoding="-1"/>
<ROW Name="Append/Create" TxtUpdateSet="htpasswd_dashboards" FindPattern="onlyoffice:[DASHBOARDS_PWD]" Options="160" Order="0" FileEncoding="0"/>
<ROW Name="ReplaceRouter1" TxtUpdateSet="YourFile.txt_4" FindPattern="$router_host" ReplacePattern="127.0.0.1" Options="2" Order="0" FileEncoding="-1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateSetComponent">
<ROW Key="YourFile.txt" Component="conf" FileName="onlyoffice.conf" Directory="conf_Dir" Options="17"/>
<ROW Key="YourFile.txt_1" Component="conf" FileName="onlyoffice-client.conf" Directory="conf_Dir" Options="17"/>
<ROW Key="YourFile.txt_2" Component="includes" FileName="onlyoffice-public.conf" Directory="includes_Dir" Options="17"/>
<ROW Key="YourFile.txt_3" Component="conf" FileName="onlyoffice-proxy*" Directory="conf_Dir" Options="17"/>
<ROW Key="YourFile.txt_3" Component="conf" FileName="onlyoffice-proxy.conf" Directory="conf_Dir" Options="17"/>
<ROW Key="YourFile.txt_4" Component="conf" FileName="onlyoffice-proxy-ssl.conf.tmpl" Directory="conf_Dir" Options="17"/>
<ROW Key="YourFile.txt_5" Component="includes" FileName="letsencrypt.conf" Directory="includes_Dir" Options="17"/>
<ROW Key="YourFile.txt_6" Component="conf" FileName="onlyoffice-management.conf" Directory="conf_Dir" Options="17"/>
<ROW Key="fluentbit.conf" Component="config" FileName="fluent-bit.conf" Directory="config_Dir" Options="17"/>
<ROW Key="htpasswd_dashboards" Component="conf" FileName=".htpasswd_dashboards" Directory="conf_Dir" Options="17"/>
<ROW Key="xml" Component="tools" FileName="*.xml" Directory="tools_Dir" Options="17"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.XmlAttributeComponent">

View File

@ -1,232 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DOCUMENT Type="Advanced Installer" CreateVersion="20.7.1" version="20.7.1" Modules="enterprise" RootPath="." Language="en" Id="{68315B90-D4BE-45B1-96B9-DE7BC2F7AA93}">
<COMPONENT cid="caphyon.advinst.msicomp.ProjectOptionsComponent">
<ROW Name="HiddenItems" Value="AppXProductDetailsComponent;AppXDependenciesComponent;AppXAppDetailsComponent;AppXVisualAssetsComponent;AppXCapabilitiesComponent;AppXAppDeclarationsComponent;AppXUriRulesComponent;SccmComponent;ActSyncAppComponent;CPLAppletComponent;AutorunComponent;GameUxComponent;SilverlightSlnComponent;SharePointSlnComponent;FixupComponent;MsiXDiffComponent;MsixManifestEditorComponent"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
<ROW Property="ALLUSERS" Value="1"/>
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/>
<ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1"/>
<ROW Property="Manufacturer" Value="Ascensio System SIA"/>
<ROW Property="PACKAGE_NAME" Value="[|ProductName]-[|ProductVersion]"/>
<ROW Property="ProductCode" Value="1033:{5D3E60C0-55B7-4680-97C2-B52C4509753F} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="OpenSearch"/>
<ROW Property="ProductVersion" Value="2.11.1" Options="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="ServiceName_OpenSearch" Value="OpenSearch"/>
<ROW Property="UpgradeCode" Value="{F8561DF7-6238-4927-8DAC-AD0EBC117F6C}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
<ROW Directory="tools_Dir" Directory_Parent="APPDIR" DefaultDir="tools"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
<ROW Component="AI_ExePath" ComponentId="{85BC318D-6C05-454F-9A89-4B2AB8BD4C53}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
<ROW Component="APPDIR" ComponentId="{D87E51BE-6C42-47EC-A172-D74909714645}" Directory_="APPDIR" Attributes="0"/>
<ROW Component="OpenSearch.exe" ComponentId="{AA41040E-4700-4321-A395-E927BC227A47}" Directory_="tools_Dir" Attributes="256" KeyPath="OpenSearch.exe"/>
<ROW Component="OpenSearch.xml" ComponentId="{B61018A1-737F-4055-84D1-FC44D5C677A0}" Directory_="tools_Dir" Attributes="0" KeyPath="OpenSearch.xml" Type="0"/>
<ROW Component="ProductInformation" ComponentId="{4C89C7F7-A1EE-44C3-B4A9-A4AC20C0F672}" Directory_="APPDIR" Attributes="260" KeyPath="Version"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
<ROW File="OpenSearch.xml" Component_="OpenSearch.xml" FileName="OPENSE~1.XML|OpenSearch.xml" Attributes="0" SourcePath="tools\OpenSearch.xml" SelfReg="false"/>
<ROW File="OpenSearch.exe" Component_="OpenSearch.exe" FileName="WINSW-~1.EXE|OpenSearch.exe" Attributes="0" SourcePath="tools\OpenSearch.exe" SelfReg="false" DigSign="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="publish" PackageFileName="[|PACKAGE_NAME]" Languages="en" InstallationType="2" CabsLocation="1" CompressCabs="false" UseLzma="true" LzmaMethod="2" LzmaCompressionLevel="4" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" UseLargeSchema="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_en.ail"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
<ROW Fragment="CommonUI.aip" Path="&lt;AI_FRAGS&gt;CommonUI.aip"/>
<ROW Fragment="FolderDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\FolderDlg.aip"/>
<ROW Fragment="MaintenanceTypeDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\MaintenanceTypeDlg.aip"/>
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\MaintenanceWelcomeDlg.aip"/>
<ROW Fragment="SequenceDialogs.aip" Path="&lt;AI_THEMES&gt;classic\fragments\SequenceDialogs.aip"/>
<ROW Fragment="Sequences.aip" Path="&lt;AI_FRAGS&gt;Sequences.aip"/>
<ROW Fragment="StaticUIStrings.aip" Path="&lt;AI_FRAGS&gt;StaticUIStrings.aip"/>
<ROW Fragment="Themes.aip" Path="&lt;AI_FRAGS&gt;Themes.aip"/>
<ROW Fragment="UI.aip" Path="&lt;AI_THEMES&gt;classic\fragments\UI.aip"/>
<ROW Fragment="Validation.aip" Path="&lt;AI_FRAGS&gt;Validation.aip"/>
<ROW Fragment="VerifyRemoveDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\VerifyRemoveDlg.aip"/>
<ROW Fragment="VerifyRepairDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\VerifyRepairDlg.aip"/>
<ROW Fragment="WelcomeDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\WelcomeDlg.aip"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
<ROW Action="AI_ConfigFailActions" Description="Configure service failure actions" DescriptionLocId="ActionText.Description.AI_ConfigFailActions" Template="Service: [1]" TemplateLocId="ActionText.Template.AI_ConfigFailActions"/>
<ROW Action="AI_DeleteLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
<ROW Action="AI_DeleteRLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
<ROW Action="AI_ExtractFiles" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
<ROW Action="AI_ExtractLzma" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
<ROW Action="AI_ProcessFailActions" Description="Generating actions to configure service failure actions" DescriptionLocId="ActionText.Description.AI_ProcessFailActions" Template="Service: [1]" TemplateLocId="ActionText.Template.AI_ProcessFailActions"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiAppSearchComponent">
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="DefaultBuild"/>
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
<ROW Name="Prereq.dll" SourcePath="&lt;AI_CUSTACTS&gt;Prereq.dll"/>
<ROW Name="aicustact.dll" SourcePath="&lt;AI_CUSTACTS&gt;aicustact.dll"/>
<ROW Name="lzmaextractor.dll" SourcePath="&lt;AI_CUSTACTS&gt;lzmaextractor.dll"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="FolderDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="202"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="1"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="399" Options="1"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="299" Options="1"/>
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="203"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_ConfigFailActions" Type="11265" Source="aicustact.dll" Target="ConfigureServFailActions" WithoutSeq="true"/>
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[~]"/>
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
<ROW Action="AI_DeleteCadLzma" Type="51" Source="AI_DeleteLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
<ROW Action="AI_ExtractCadLzma" Type="51" Source="AI_ExtractLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_ExtractFiles" Type="1" Source="Prereq.dll" Target="ExtractSourceFiles" AdditionalSeq="AI_DATA_SETTER_1"/>
<ROW Action="AI_ExtractLzma" Type="1025" Source="lzmaextractor.dll" Target="ExtractLZMAFiles"/>
<ROW Action="AI_FindExeLzma" Type="1" Source="lzmaextractor.dll" Target="FindEXE"/>
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Type="65" Source="aicustact.dll" Target="PreserveInstallType"/>
<ROW Action="AI_ProcessFailActions" Type="1" Source="aicustact.dll" Target="ProcessFailActions" AdditionalSeq="AI_DATA_SETTER"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
<ROW Action="DisableElasticsearch" Type="38" Target="Script Text" TargetUnformatted="Set objShell = CreateObject(&quot;WScript.Shell&quot;)&#13;&#10;Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)&#13;&#10;&#13;&#10;tempFolderPath = objShell.ExpandEnvironmentStrings(&quot;%TEMP%&quot;)&#13;&#10;&#13;&#10;outputFilePath = tempFolderPath &amp; &quot;\ElasticsearchQueryOutput.txt&quot;&#13;&#10;objShell.Run &quot;cmd /c sc query Elasticsearch &gt; &quot; &amp; outputFilePath, 0, True&#13;&#10;&#13;&#10;strOutput = objFSO.OpenTextFile(outputFilePath).ReadAll()&#13;&#10;objFSO.DeleteFile(outputFilePath)&#13;&#10;&#13;&#10;If InStr(strOutput, &quot;SERVICE_NAME: Elasticsearch&quot;) &gt; 0 Then&#13;&#10; objShell.Run &quot;cmd /c sc stop Elasticsearch&quot;, 0, True&#13;&#10; objShell.Run &quot;cmd /c sc config Elasticsearch start=disabled&quot;, 0, True&#13;&#10;End If"/>
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[WindowsVolume]\[ProductName]"/>
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
<ROW Feature_="MainFeature" Component_="APPDIR"/>
<ROW Feature_="MainFeature" Component_="ProductInformation"/>
<ROW Feature_="MainFeature" Component_="OpenSearch.xml"/>
<ROW Feature_="MainFeature" Component_="OpenSearch.exe"/>
<ROW Feature_="MainFeature" Component_="AI_ExePath"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel &lt;&gt; 5)" Sequence="210"/>
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE=&quot;No&quot; AND (Not Installed)" Sequence="1397"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
<ROW Action="AI_ProcessFailActions" Sequence="5848"/>
<ROW Action="AI_DATA_SETTER" Sequence="5847"/>
<ROW Action="DisableElasticsearch" Condition="( NOT Installed AND NOT OLDPRODUCTS )" Sequence="6401"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="199" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="198" Builds="DefaultBuild"/>
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="197" Builds="DefaultBuild"/>
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="196" Builds="DefaultBuild"/>
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="1549" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="1548" Builds="DefaultBuild"/>
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="6599" Builds="DefaultBuild"/>
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="DefaultBuild"/>
<ROW Action="AI_DATA_SETTER_1" Sequence="1398"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="53"/>
<ROW Action="AI_DpiContentScale" Sequence="52"/>
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
<ROW Condition="((VersionNT &lt;&gt; 501) AND (VersionNT &lt;&gt; 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="(VersionNT &lt;&gt; 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="(VersionNT &lt;&gt; 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="AI_ExePath"/>
<ROW Registry="AdvancedInstaller" Root="-1" Key="Software\Caphyon\Advanced Installer" Name="\"/>
<ROW Registry="Caphyon" Root="-1" Key="Software\Caphyon" Name="\"/>
<ROW Registry="LZMA" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA" Name="\"/>
<ROW Registry="Manufacturer" Root="-1" Key="Software\[Manufacturer]" Name="\"/>
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
<ROW Registry="ProductCode" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]" Name="\"/>
<ROW Registry="ProductName" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="\"/>
<ROW Registry="ProductVersion" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="\"/>
<ROW Registry="Software" Root="-1" Key="Software" Name="\"/>
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServConfigComponent">
<ROW MsiServiceConfig="ServiceName_OpenSearch" Name="[ServiceName_OpenSearch]" Event="1" ConfigType="3" Argument="1" Component_="OpenSearch.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServConfigFailureActionsComponent">
<ROW MsiServiceConfigFailureActions="ServiceName_OpenSearch" Name="[ServiceName_OpenSearch]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="OpenSearch.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServCtrlComponent">
<ROW ServiceControl="ServiceName_OpenSearch" Name="[ServiceName_OpenSearch]" Event="161" Wait="0" Component_="OpenSearch.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
<ROW ServiceInstall="ServiceName_OpenSearch" Name="[ServiceName_OpenSearch]" DisplayName="[ServiceName_OpenSearch]" ServiceType="16" StartType="2" ErrorControl="1" Component_="OpenSearch.exe" Description="[ServiceName_OpenSearch]"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
<ATTRIBUTE name="UsedTheme" value="classic"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SynchronizedFolderComponent">
<ROW Directory_="APPDIR" SourcePath="OpenSearch" Feature="MainFeature" ExcludePattern="*~|#*#|%*%|._|CVS|.cvsignore|SCCS|vssver.scc|mssccprj.scc|vssver2.scc|.svn|.DS_Store" ExcludeFlags="6" FileAddOptions="4"/>
</COMPONENT>
</DOCUMENT>

View File

@ -1,234 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DOCUMENT Type="Advanced Installer" CreateVersion="20.7.1" version="20.7.1" Modules="enterprise" RootPath="." Language="en" Id="{8675EE16-F689-45A4-A9B4-47F4B5A57C14}">
<COMPONENT cid="caphyon.advinst.msicomp.ProjectOptionsComponent">
<ROW Name="HiddenItems" Value="AppXProductDetailsComponent;AppXDependenciesComponent;AppXAppDetailsComponent;AppXVisualAssetsComponent;AppXCapabilitiesComponent;AppXAppDeclarationsComponent;AppXUriRulesComponent;SccmComponent;ActSyncAppComponent;CPLAppletComponent;AutorunComponent;GameUxComponent;SilverlightSlnComponent;SharePointSlnComponent;FixupComponent;MsiXDiffComponent;MsixManifestEditorComponent"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
<ROW Property="ALLUSERS" Value="1"/>
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/>
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:3"/>
<ROW Property="Manufacturer" Value="Ascensio System SIA"/>
<ROW Property="MsiLogging" MultiBuildValue="DefaultBuild:vp"/>
<ROW Property="ProductCode" Value="1033:{9705A0E0-DF9C-4B0B-B6D9-7A2FB97C4DA9} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="OpenSearchStack"/>
<ROW Property="ProductVersion" Value="1.0.0" Options="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND"/>
<ROW Property="UpgradeCode" Value="{93CD82F0-18A5-4803-AC50-9A0021E92A56}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
<ROW Component="APPDIR" ComponentId="{A9D710AE-1F08-48CB-BE89-3C028ECC4714}" Directory_="APPDIR" Attributes="0"/>
<ROW Component="ProductInformation" ComponentId="{66125B7F-2A78-4EA0-906F-ACB892BC3BC8}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.AiRemoveFileComponent">
<ROW RemoveFile="_" Options="3"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="publish" Languages="en" InstallationType="4" UseLargeSchema="true" UACExecutionLevel="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_en.ail"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.ExpandArchiveComponent">
<ROW ExpandArchive="ExpandArchive" DestFolder="APPDIR" SourcePath="[APPDIR]opensearch-dashboards-2.11.1-windows-x64.zip" Flags="57"/>
<ROW ExpandArchive="ExpandArchive_1" DestFolder="APPDIR" SourcePath="[APPDIR]fluent-bit-2.2.2-win64.zip" Flags="57"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.FileDownloadComponent">
<ROW FileDownload="fluentbit2.2.2win64.zip" FileName="FLUENT~1.ZIP|fluent-bit-2.2.2-win64.zip" DirProperty="APPDIR" Source="https://packages.fluentbit.io/windows/fluent-bit-2.2.2-win64.zip" ExactSize="30001957" MD5="6c5b495aa2f55f41182841792a4cfa28" Flags="57"/>
<ROW FileDownload="opensearchdashboards2.11.1windowsx6" FileName="OPENSE~1.ZIP|opensearch-dashboards-2.11.1-windows-x64.zip" DirProperty="APPDIR" Source="https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.11.1/opensearch-dashboards-2.11.1-windows-x64.zip" ExactSize="370856962" MD5="ea88b808fce5154e76b0b082bca97833" Flags="41"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
<ROW Fragment="CommonUI.aip" Path="&lt;AI_FRAGS&gt;CommonUI.aip"/>
<ROW Fragment="FolderDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\FolderDlg.aip"/>
<ROW Fragment="MaintenanceTypeDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\MaintenanceTypeDlg.aip"/>
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\MaintenanceWelcomeDlg.aip"/>
<ROW Fragment="SequenceDialogs.aip" Path="&lt;AI_THEMES&gt;classic\fragments\SequenceDialogs.aip"/>
<ROW Fragment="Sequences.aip" Path="&lt;AI_FRAGS&gt;Sequences.aip"/>
<ROW Fragment="StaticUIStrings.aip" Path="&lt;AI_FRAGS&gt;StaticUIStrings.aip"/>
<ROW Fragment="Themes.aip" Path="&lt;AI_FRAGS&gt;Themes.aip"/>
<ROW Fragment="UI.aip" Path="&lt;AI_THEMES&gt;classic\fragments\UI.aip"/>
<ROW Fragment="Validation.aip" Path="&lt;AI_FRAGS&gt;Validation.aip"/>
<ROW Fragment="VerifyRemoveDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\VerifyRemoveDlg.aip"/>
<ROW Fragment="VerifyRepairDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\VerifyRepairDlg.aip"/>
<ROW Fragment="WelcomeDlg.aip" Path="&lt;AI_THEMES&gt;classic\fragments\WelcomeDlg.aip"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
<ROW Action="AI_AiRemoveFilesCommit" Description="Executing file removal operations" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesCommit" Template="Executing file removal: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesCommit"/>
<ROW Action="AI_AiRemoveFilesCommit_Impersonate" Description="Executing file removal operations" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesCommit" Template="Executing file removal: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesCommit"/>
<ROW Action="AI_AiRemoveFilesDeferred_Permanent" Description="Preparing files for removal" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesDeferred_Permanent" Template="Preparing file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesDeferred_Permanent"/>
<ROW Action="AI_AiRemoveFilesDeferred_Permanent_Impersonate" Description="Preparing files for removal" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesDeferred_Permanent" Template="Preparing file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesDeferred_Permanent"/>
<ROW Action="AI_AiRemoveFilesDeferred_Undoable" Description="Preparing files for removal" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesDeferred_Undoable" Template="Preparing file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesDeferred_Undoable"/>
<ROW Action="AI_AiRemoveFilesDeferred_Undoable_Impersonate" Description="Preparing files for removal" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesDeferred_Undoable" Template="Preparing file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesDeferred_Undoable"/>
<ROW Action="AI_AiRemoveFilesImmediate" Description="Preparing files for removal" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesImmediate" Template="Preparing file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesImmediate"/>
<ROW Action="AI_AiRemoveFilesRebootDeferred" Description="ActionText.Description.AI_AiRemoveFilesRebootDeferred" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesRebootDeferred"/>
<ROW Action="AI_AiRemoveFilesRebootImmediate" Description="ActionText.Description.AI_AiRemoveFilesRebootImmediate" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesRebootImmediate"/>
<ROW Action="AI_AiRemoveFilesRebootRollback" Description="ActionText.Description.AI_AiRemoveFilesRebootRollback" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesRebootRollback"/>
<ROW Action="AI_AiRemoveFilesRollback" Description="Restoring removed files" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesRollback" Template="Restoring file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesRollback"/>
<ROW Action="AI_AiRemoveFilesRollback_Impersonate" Description="Restoring removed files" DescriptionLocId="ActionText.Description.AI_AiRemoveFilesRollback" Template="Restoring file: [1]" TemplateLocId="ActionText.Template.AI_AiRemoveFilesRollback"/>
<ROW Action="AI_ExpandArchConfig" Description="Extracting archives" DescriptionLocId="ActionText.Description.AI_ExpandArchConfig" Template="Extracting archive: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_ExpandArchConfig"/>
<ROW Action="AI_ExpandArchInstall" Description="Generating actions for extracting archives" DescriptionLocId="ActionText.Description.AI_ExpandArchInstall"/>
<ROW Action="AI_ExpandArchRemove" Description="Cleanup extracted files" DescriptionLocId="ActionText.Description.AI_ExpandArchRemove" Template="Removing contents of extracted archive: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_ExpandArchRemove"/>
<ROW Action="AI_ExpandArchRollback" Description="Rolling back extracted files" DescriptionLocId="ActionText.Description.AI_ExpandArchRollback" Template="Rolling back contents of extracted archive: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_ExpandArchRollback"/>
<ROW Action="AI_ExpandArchUninstall" Description="Generating actions for extracting archives" DescriptionLocId="ActionText.Description.AI_ExpandArchUninstall"/>
<ROW Action="AI_FdConfig" Description="Downloading files" DescriptionLocId="ActionText.Description.AI_FdConfig" Template="Downloading file: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_FdConfig"/>
<ROW Action="AI_FdInstall" Description="Generating actions for file download operations" DescriptionLocId="ActionText.Description.AI_FdInstall"/>
<ROW Action="AI_FdRemove" Description="Cleanup downloaded files" DescriptionLocId="ActionText.Description.AI_FdRemove" Template="Removing downloaded file: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_FdRemove"/>
<ROW Action="AI_FdRollback" Description="Rolling back downloaded files" DescriptionLocId="ActionText.Description.AI_FdRollback" Template="Rolling back downloaded file: &quot;[1]&quot;" TemplateLocId="ActionText.Template.AI_FdRollback"/>
<ROW Action="AI_FdUninstall" Description="Generating actions for file download operations" DescriptionLocId="ActionText.Description.AI_FdUninstall"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
<ROW Name="FileOperations.dll" SourcePath="&lt;AI_CUSTACTS&gt;FileOperations.dll"/>
<ROW Name="ResourceCleaner.dll" SourcePath="&lt;AI_CUSTACTS&gt;ResourceCleaner.dll"/>
<ROW Name="aicustact.dll" SourcePath="&lt;AI_CUSTACTS&gt;aicustact.dll"/>
<ROW Name="utils.vbs" SourcePath="utils.vbs"/>
<ROW Name="viewer.exe" SourcePath="&lt;AI_CUSTACTS&gt;viewer.exe" DigSign="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="FolderDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="202"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="1"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="399" Options="1"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="299" Options="1"/>
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="203"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
<ROW Action="AI_AiRemoveFilesCommit" Type="11777" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesCommit" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesCommit_Impersonate" Type="9729" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesCommitImpersonate" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesDeferred_Permanent" Type="11265" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesPermanent" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesDeferred_Permanent_Impersonate" Type="9217" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesPermanentImpersonate" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesDeferred_Undoable" Type="11265" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesUndoable" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesDeferred_Undoable_Impersonate" Type="9217" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesUndoableImpersonate" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesImmediate" Type="1" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesImmediate"/>
<ROW Action="AI_AiRemoveFilesRebootDeferred" Type="11265" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesRebootDeferred" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesRebootImmediate" Type="1" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesRebootImmediate"/>
<ROW Action="AI_AiRemoveFilesRebootRollback" Type="11521" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesRebootRollback" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesRollback" Type="11521" Source="ResourceCleaner.dll" Target="OnAiUndoRemoveFiles" WithoutSeq="true"/>
<ROW Action="AI_AiRemoveFilesRollback_Impersonate" Type="9473" Source="ResourceCleaner.dll" Target="OnAiUndoRemoveFilesImpersonate" WithoutSeq="true"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
<ROW Action="AI_ExpandArchConfig" Type="11265" Source="FileOperations.dll" Target="OnExpandArchConfig" WithoutSeq="true"/>
<ROW Action="AI_ExpandArchInstall" Type="1" Source="FileOperations.dll" Target="OnExpandArchInstall"/>
<ROW Action="AI_ExpandArchRemove" Type="11265" Source="FileOperations.dll" Target="OnExpandArchRemove" WithoutSeq="true"/>
<ROW Action="AI_ExpandArchRollback" Type="11521" Source="FileOperations.dll" Target="OnExpandArchRollback" WithoutSeq="true"/>
<ROW Action="AI_ExpandArchUninstall" Type="1" Source="FileOperations.dll" Target="OnExpandArchUninstall"/>
<ROW Action="AI_FdConfig" Type="11265" Source="FileOperations.dll" Target="OnFdConfig" WithoutSeq="true"/>
<ROW Action="AI_FdInstall" Type="1" Source="FileOperations.dll" Target="OnFdInstall"/>
<ROW Action="AI_FdRemove" Type="11265" Source="FileOperations.dll" Target="OnFdRemove" WithoutSeq="true"/>
<ROW Action="AI_FdRollback" Type="11521" Source="FileOperations.dll" Target="OnFdRollback" WithoutSeq="true"/>
<ROW Action="AI_FdUninstall" Type="1" Source="FileOperations.dll" Target="OnFdUninstall"/>
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Type="65" Source="aicustact.dll" Target="PreserveInstallType"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
<ROW Action="AI_RestartElevated" Type="1" Source="aicustact.dll" Target="RestartElevated"/>
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
<ROW Action="OpenSearchStackSetup" Type="4102" Source="utils.vbs" Target="OpenSearchStackSetup"/>
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[WindowsVolume]\[ProductName]"/>
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
<ROW Feature_="MainFeature" Component_="APPDIR"/>
<ROW Feature_="MainFeature" Component_="ProductInformation"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel &lt;&gt; 5)" Sequence="210"/>
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE=&quot;No&quot; AND (Not Installed)" Sequence="1397"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
<ROW Action="AI_FdInstall" Condition="(VersionNT &gt;= 501) AND (REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5799"/>
<ROW Action="AI_FdUninstall" Condition="(VersionNT &gt;= 501) AND (REMOVE=&quot;ALL&quot;)" Sequence="1702"/>
<ROW Action="AI_ExpandArchInstall" Condition="(VersionNT &gt;= 501) AND (REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5851"/>
<ROW Action="AI_ExpandArchUninstall" Condition="(VersionNT &gt;= 501) AND (REMOVE=&quot;ALL&quot;)" Sequence="1701"/>
<ROW Action="OpenSearchStackSetup" Condition="( NOT Installed )" Sequence="6601"/>
<ROW Action="AI_AiRemoveFilesImmediate" Sequence="3498"/>
<ROW Action="AI_AiRemoveFilesRebootImmediate" Sequence="3499"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
<ROW Action="AI_DpiContentScale" Sequence="53"/>
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101"/>
<ROW Action="AI_RestartElevated" Sequence="51" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
<ROW Condition="((VersionNT &lt;&gt; 501) AND (VersionNT &lt;&gt; 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="(VersionNT &lt;&gt; 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="(VersionNT &lt;&gt; 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
<ROW Registry="Manufacturer" Root="-1" Key="Software\[Manufacturer]" Name="\"/>
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
<ROW Registry="ProductName" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="\"/>
<ROW Registry="Software" Root="-1" Key="Software" Name="\"/>
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRemoveFileComponent">
<ROW FileKey="_" Component_="APPDIR" DirProperty="APPDIR" InstallMode="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServCtrlComponent">
<ROW ServiceControl="ServiceName" Name="OpenSearchDashboards" Event="160" Wait="1" Component_="APPDIR"/>
<ROW ServiceControl="ServiceName_1" Name="Fluent-Bit" Event="160" Wait="1" Component_="APPDIR"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
<ATTRIBUTE name="UsedTheme" value="classic"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SynchronizedFolderComponent">
<ROW Directory_="APPDIR" SourcePath="OpenSearchStack" Feature="MainFeature" ExcludePattern="*~|#*#|%*%|._|CVS|.cvsignore|SCCS|vssver.scc|mssccprj.scc|vssver2.scc|.svn|.DS_Store" ExcludeFlags="6" FileAddOptions="4"/>
</COMPONENT>
</DOCUMENT>

View File

@ -5,6 +5,7 @@
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720\sa200\sl276\slmult1 .NET/C# RabbitMQ client library. It is distributed dual-licensed under the Apache License v2 and the Mozilla Public License v1.1 that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs20 {{\field{\*\fldinst{HYPERLINK https://www.rabbitmq.com/mpl.html }}{\fldrslt{https://www.rabbitmq.com/mpl.html\ul0\cf0}}}}\f0\fs20\par
{\pntext\f1\'B7\tab}Certbot. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://github.com/certbot/certbot/blob/master/LICENSE.txt }}{\fldrslt{https://github.com/certbot/certbot/blob/master/LICENSE.txt\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Elasticsearch. It is distributed under the Apache License v2 license that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Erlang. It is distributed under the ERLANG PUBLIC LICENSE Version 1.1 license that can be found here: {{\field{\*\fldinst{HYPERLINK https://www.erlang.org/EPLICENSE }}{\fldrslt{https://www.erlang.org/EPLICENSE\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}FFmpeg. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://github.com/rvs/ffmpeg/blob/master/LICENSE }}{\fldrslt{https://github.com/rvs/ffmpeg/blob/master/LICENSE\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Java SE Runtime Environment 8u171. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://www.oracle.com/technetwork/java/javase/terms/license/index.html }}{\fldrslt{https://www.oracle.com/technetwork/java/javase/terms/license/index.html\ul0\cf0}}}}\f0\fs20 .\par
@ -13,7 +14,6 @@
{\pntext\f1\'B7\tab}MySQL Connector / ODBC. It is distributed under the GNU GPL license v. 2.0. You may use it free of charge due to FOSS License Exception {{\field{\*\fldinst{HYPERLINK http://www.mysql.com/about/legal/licensing/foss-exception/ }}{\fldrslt{http://www.mysql.com/about/legal/licensing/foss-exception/\ul0\cf0}}}}\f0\fs20 The text of the GNU GPL license v. 2.0 can be found here: {{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/old-licenses/gpl-2.0.html }}{\fldrslt{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Node.js. It is distributed under the MIT license that can be found here: {{\field{\*\fldinst{HYPERLINK https://github.com/nodejs/node/blob/v18.x/LICENSE }}{\fldrslt{https://github.com/nodejs/node/blob/v18.x/LICENSE\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}OpenResty. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://github.com/openresty/openresty/blob/master/COPYRIGHT }}{\fldrslt{https://github.com/openresty/openresty/blob/master/COPYRIGHT\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}OpenSearch. It is distributed under the Apache License v2 license that can be found here: {{\field{\*\fldinst{HYPERLINK https://github.com/opensearch-project/OpenSearch/blob/main/LICENSE.txt }}{\fldrslt{https://github.com/opensearch-project/OpenSearch/blob/main/LICENSE.txt\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}PostgresSQL. It is distributed under the PostgreSQL License that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.opensource.org/licenses/postgresql }}{\fldrslt{http://www.opensource.org/licenses/postgresql\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}PostgreSQL ODBC driver. It is distributed under the LGPL License that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.opensource.org/licenses/lgpl-license.php }}{\fldrslt{http://www.opensource.org/licenses/lgpl-license.php\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}RabbitMQ. It is distributed under the Mozilla Public License 1.1 that can be found here: {{\field{\*\fldinst{HYPERLINK https://www.rabbitmq.com/mpl.html }}{\fldrslt{https://www.rabbitmq.com/mpl.html\ul0\cf0}}}}\f0\fs20 .\par

View File

@ -5,6 +5,7 @@
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720\sa200\sl276\slmult1 .NET/C# RabbitMQ client library. It is distributed dual-licensed under the Apache License v2 and the Mozilla Public License v1.1 that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs20 {{\field{\*\fldinst{HYPERLINK https://www.rabbitmq.com/mpl.html }}{\fldrslt{https://www.rabbitmq.com/mpl.html\ul0\cf0}}}}\f0\fs20\par
{\pntext\f1\'B7\tab}Certbot. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://github.com/certbot/certbot/blob/master/LICENSE.txt }}{\fldrslt{https://github.com/certbot/certbot/blob/master/LICENSE.txt\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Elasticsearch. It is distributed under the Apache License v2 license that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Erlang. It is distributed under the ERLANG PUBLIC LICENSE Version 1.1 license that can be found here: {{\field{\*\fldinst{HYPERLINK https://www.erlang.org/EPLICENSE }}{\fldrslt{https://www.erlang.org/EPLICENSE\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}FFmpeg. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://github.com/rvs/ffmpeg/blob/master/LICENSE }}{\fldrslt{https://github.com/rvs/ffmpeg/blob/master/LICENSE\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Java SE Runtime Environment 8u171. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://www.oracle.com/technetwork/java/javase/terms/license/index.html }}{\fldrslt{https://www.oracle.com/technetwork/java/javase/terms/license/index.html\ul0\cf0}}}}\f0\fs20 .\par
@ -13,7 +14,6 @@
{\pntext\f1\'B7\tab}MySQL Connector / ODBC. It is distributed under the GNU GPL license v. 2.0. You may use it free of charge due to FOSS License Exception {{\field{\*\fldinst{HYPERLINK http://www.mysql.com/about/legal/licensing/foss-exception/ }}{\fldrslt{http://www.mysql.com/about/legal/licensing/foss-exception/\ul0\cf0}}}}\f0\fs20 The text of the GNU GPL license v. 2.0 can be found here: {{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/old-licenses/gpl-2.0.html }}{\fldrslt{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}Node.js. It is distributed under the MIT license that can be found here: {{\field{\*\fldinst{HYPERLINK https://github.com/nodejs/node/blob/v18.x/LICENSE }}{\fldrslt{https://github.com/nodejs/node/blob/v18.x/LICENSE\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}OpenResty. It is distributed under the following license: {{\field{\*\fldinst{HYPERLINK https://github.com/openresty/openresty/blob/master/COPYRIGHT }}{\fldrslt{https://github.com/openresty/openresty/blob/master/COPYRIGHT\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}OpenSearch. It is distributed under the Apache License v2 license that can be found here: {{\field{\*\fldinst{HYPERLINK https://github.com/opensearch-project/OpenSearch/blob/main/LICENSE.txt }}{\fldrslt{https://github.com/opensearch-project/OpenSearch/blob/main/LICENSE.txt\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}PostgresSQL. It is distributed under the PostgreSQL License that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.opensource.org/licenses/postgresql }}{\fldrslt{http://www.opensource.org/licenses/postgresql\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}PostgreSQL ODBC driver. It is distributed under the LGPL License that can be found here: {{\field{\*\fldinst{HYPERLINK http://www.opensource.org/licenses/lgpl-license.php }}{\fldrslt{http://www.opensource.org/licenses/lgpl-license.php\ul0\cf0}}}}\f0\fs20 .\par
{\pntext\f1\'B7\tab}RabbitMQ. It is distributed under the Mozilla Public License 1.1 that can be found here: {{\field{\*\fldinst{HYPERLINK https://www.rabbitmq.com/mpl.html }}{\fldrslt{https://www.rabbitmq.com/mpl.html\ul0\cf0}}}}\f0\fs20 .\par

View File

@ -2,20 +2,9 @@ REM echo ######## Set variables ########
set "publisher="Ascensio System SIA""
set "nuget="%cd%\server\thirdparty\SimpleRestServices\src\.nuget\NuGet.exe""
set "environment=production"
set "opensearch_version=2.11.1"
REM echo ######## Extracting and preparing files to build ########
%sevenzip% x buildtools\install\win\opensearch-%opensearch_version%.zip -o"buildtools\install\win" -y
%sevenzip% x buildtools\install\win\ingest-attachment-%opensearch_version%.zip -o"buildtools\install\win\OpenSearch\plugins\ingest-attachment" -y
xcopy "buildtools\install\win\opensearch-%opensearch_version%\plugins\opensearch-security" "buildtools\install\win\OpenSearch\plugins\opensearch-security" /s /y /b /i
xcopy "buildtools\install\win\opensearch-%opensearch_version%\plugins\opensearch-job-scheduler" "buildtools\install\win\OpenSearch\plugins\opensearch-job-scheduler" /s /y /b /i
xcopy "buildtools\install\win\opensearch-%opensearch_version%\plugins\opensearch-index-management" "buildtools\install\win\OpenSearch\plugins\opensearch-index-management" /s /y /b /i
rmdir buildtools\install\win\opensearch-%opensearch_version%\plugins /s /q
xcopy "buildtools\install\win\opensearch-%opensearch_version%" "buildtools\install\win\OpenSearch" /s /y /b /i
rmdir buildtools\install\win\opensearch-%opensearch_version% /s /q
md buildtools\install\win\OpenSearch\tools
md buildtools\install\win\OpenResty\tools
md buildtools\install\win\OpenSearchStack\tools
md buildtools\install\win\Files\tools
md buildtools\install\win\Files\Logs
md buildtools\install\win\Files\Data
@ -41,38 +30,18 @@ copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\Files\tools\D
copy buildtools\install\win\tools\DocEditor.xml "buildtools\install\win\Files\tools\DocEditor.xml" /y
copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\Files\tools\Login.exe" /y
copy buildtools\install\win\tools\Login.xml "buildtools\install\win\Files\tools\Login.xml" /y
copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\OpenSearch\tools\OpenSearch.exe" /y
copy buildtools\install\win\tools\OpenSearch.xml "buildtools\install\win\OpenSearch\tools\OpenSearch.xml" /y
copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\OpenSearchStack\tools\OpenSearchDashboards.exe" /y
copy buildtools\install\win\tools\OpenSearchDashboards.xml "buildtools\install\win\OpenSearchStack\tools\OpenSearchDashboards.xml" /y
copy "buildtools\install\win\nginx.conf" "buildtools\install\win\Files\nginx\conf\nginx.conf" /y
copy "buildtools\install\docker\config\nginx\onlyoffice-proxy.conf" "buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf" /y
copy "buildtools\install\docker\config\nginx\onlyoffice-proxy.conf" "buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf.tmpl" /y
copy "buildtools\install\docker\config\nginx\onlyoffice-proxy-ssl.conf" "buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl" /y
copy "buildtools\install\docker\config\nginx\letsencrypt.conf" "buildtools\install\win\Files\nginx\conf\includes\letsencrypt.conf" /y
copy "buildtools\install\win\sbin\docspace-ssl-setup.ps1" "buildtools\install\win\Files\sbin\docspace-ssl-setup.ps1" /y
copy "buildtools\install\docker\config\fluent-bit.conf" "buildtools\install\win\Files\config\fluent-bit.conf" /y
rmdir buildtools\install\win\publish /s /q
REM echo ######## SSL configs ########
%sed% -i "s/this_host\|proxy_x_forwarded_host/host/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf.tmpl buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "s/proxy_x_forwarded_port/server_port/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf.tmpl
%sed% -i "s/proxy_x_forwarded_proto/scheme/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf.tmpl buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "s/the_host/host/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "s/the_scheme/scheme/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "s/ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;/#ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;/" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "/quic\|alt-svc/Id" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "s_\(.*root\).*;_\1 \"{APPDIR}letsencrypt\";_g" -i buildtools\install\win\Files\nginx\conf\includes\letsencrypt.conf
%sed% -i "s#/var/log/nginx/#logs/#g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf.tmpl buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl
%sed% -i "s#/etc/nginx/html#conf/html#g" buildtools\install\win\Files\nginx\conf\onlyoffice.conf
%sed% -i "s/\/etc\/nginx\/\.htpasswd_dashboards/\.htpasswd_dashboards/g" buildtools\install\win\Files\nginx\conf\onlyoffice.conf
REM echo ######## Configure fluent-bit config for windows ########
%sed% -i -e "s|/var/log/onlyoffice/|{APPDIR}Logs\\|g" -e "s|\*\*/|\*\*\\|g" -e "s#DocSpace\Logs\**\#DocumentServer\Log\#g" buildtools\install\win\Files\config\fluent-bit.conf
%sed% -i "/^\[OUTPUT\]/i\[INPUT]" buildtools\install\win\Files\config\fluent-bit.conf
%sed% -i "/^\[OUTPUT\]/i\ Name exec" buildtools\install\win\Files\config\fluent-bit.conf
%sed% -i "/^\[OUTPUT\]/i\ Interval_Sec 86400" buildtools\install\win\Files\config\fluent-bit.conf
%sed% -i "/^\[OUTPUT\]/i\ Command curl -s -X POST OPENSEARCH_SCHEME://OPENSEARCH_HOST:OPENSEARCH_PORT/OPENSEARCH_INDEX/_delete_by_query -H 'Content-Type: application/json' -d '{\"query\": {\"range\": {\"@timestamp\": {\"lt\": \"now-30d\"}}}}'" buildtools\install\win\Files\config\fluent-bit.conf
%sed% -i -e "s/\"/\\\\\"/g" -e "s/'/\"/g" buildtools\install\win\Files\config\fluent-bit.conf
%sed% -i "/\[OUTPUT\]/i\\n" buildtools\install\win\Files\config\fluent-bit.conf
REM echo ######## Delete test and dev configs ########
del /f /q buildtools\install\win\Files\config\*.test.json
@ -128,20 +97,6 @@ IF "%SignBuild%"=="true" (
)
%AdvancedInstaller% /rebuild buildtools\install\win\OpenResty.aip
REM echo ######## Build OpenSearch ########
IF "%SignBuild%"=="true" (
%AdvancedInstaller% /edit buildtools\install\win\OpenSearch.aip /SetSig
%AdvancedInstaller% /edit buildtools\install\win\OpenSearch.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%"
)
%AdvancedInstaller% /rebuild buildtools\install\win\OpenSearch.aip
REM echo ######## Build OpenSearchStack ########
IF "%SignBuild%"=="true" (
%AdvancedInstaller% /edit buildtools\install\win\OpenSearchStack.aip /SetSig
%AdvancedInstaller% /edit buildtools\install\win\OpenSearchStack.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%"
)
%AdvancedInstaller% /rebuild buildtools\install\win\OpenSearchStack.aip
REM echo ######## Build DocSpace package ########
%AdvancedInstaller% /edit buildtools\install\win\DocSpace.aip /SetVersion %BUILD_VERSION%.%BUILD_NUMBER%

View File

@ -52,21 +52,7 @@ $psql_version = '14.0'
$path_prereq = "${pwd}\buildtools\install\win\"
$opensearch_version = '2.11.1'
$prerequisites = @(
@{
download_allways = $false;
name = "opensearch-${opensearch_version}.zip";
link = "https://artifacts.opensearch.org/releases/bundle/opensearch/${opensearch_version}/opensearch-${opensearch_version}-windows-x64.zip";
}
@{
download_allways = $false;
name = "ingest-attachment-${opensearch_version}.zip";
link = "https://artifacts.opensearch.org/releases/plugins/ingest-attachment/${opensearch_version}/ingest-attachment-${opensearch_version}.zip";
}
@{
download_allways = $false;
name = "WinSW.NET4new.exe";
@ -121,14 +107,14 @@ $enterprise_prerequisites = @(
@{
download_allways = $false;
name = "aspnetcore-runtime-8.0.2-win-x64.exe";
link = "https://download.visualstudio.microsoft.com/download/pr/34d3e426-9f3c-45a6-8496-f21b3adbbf5f/475aec17378cc8ab0fcfe535e84698f9/aspnetcore-runtime-8.0.2-win-x64.exe";
name = "aspnetcore-runtime-7.0.4-win-x64.exe";
link = "https://download.visualstudio.microsoft.com/download/pr/1c260404-69d2-4c07-979c-644846ba1f46/7d27639ac67f1e502b83a738406da0ee/aspnetcore-runtime-7.0.4-win-x64.exe";
}
@{
download_allways = $false;
name = "dotnet-runtime-8.0.2-win-x64.exe";
link = "https://download.visualstudio.microsoft.com/download/pr/a4bc7333-6e30-4e2d-b300-0b4f23537e5b/4b81af6d46a02fba5d9ce030af438c67/dotnet-runtime-8.0.2-win-x64.exe";
name = "dotnet-runtime-7.0.4-win-x64.exe";
link = "https://download.visualstudio.microsoft.com/download/pr/7e842a78-9877-4b82-8450-f3311b406a6f/83352282a0bdf1e5f9dfc5fcc88dc83f/dotnet-runtime-7.0.4-win-x64.exe";
}
@{
@ -151,20 +137,20 @@ $enterprise_prerequisites = @(
@{
download_allways = $false;
name = "mysql-connector-odbc-8.0.37-win32.msi";
link = "https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.37-win32.msi";
name = "mysql-connector-odbc-8.0.33-win32.msi";
link = "https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.33-win32.msi";
}
@{
download_allways = $false;
name = "mysql-installer-community-8.0.37.0.msi";
link = "https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.37.0.msi";
name = "mysql-installer-community-8.0.33.0.msi";
link = "https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.33.0.msi";
}
@{
download_allways = $false;
name = "node-v20.11.1-x64.msi";
link = "https://nodejs.org/dist/v20.11.1/node-v20.11.1-x64.msi";
name = "node-v18.16.1-x64.msi";
link = "https://nodejs.org/dist/v18.16.1/node-v18.16.1-x64.msi";
}
@{

View File

@ -17,8 +17,6 @@ if defined SecondArg (
)
xcopy "%PathToRepository%\publish\web\public" "%PathToAppFolder%\public" /s /y /b /i
xcopy "%PathToRepository%\campaigns\src\campaigns" "%PathToAppFolder%\public\campaigns" /s /y /b /i
xcopy "%PathToRepository%\publish\web\management" "%PathToAppFolder%\management" /s /y /b /i
xcopy "%PathToRepository%\publish\web\client" "%PathToAppFolder%\client" /s /y /b /i
xcopy "%PathToRepository%\buildtools\config\nginx" "%PathToAppFolder%\nginx\conf" /s /y /b /i
xcopy "%PathToRepository%\buildtools\config\*" "%PathToAppFolder%\config" /y /b /i

View File

@ -28,18 +28,16 @@ if ( -not $certbot_path )
exit
}
$product = "docspace"
$letsencrypt_root_dir = "$env:SystemDrive\Certbot\live"
$app = Resolve-Path -Path ".\..\"
$root_dir = "${app}\letsencrypt"
$nginx_conf_dir = "$env:SystemDrive\OpenResty\conf"
$nginx_conf = "onlyoffice-proxy.conf"
$nginx_conf_tmpl = "onlyoffice-proxy.conf.tmpl"
$nginx_ssl_tmpl = "onlyoffice-proxy-ssl.conf.tmpl"
$proxy_service = "OpenResty"
if ( $args.Count -ge 2 )
{
$letsencrypt_root_dir = "$env:SystemDrive\Certbot\live"
$app = Resolve-Path -Path ".\..\"
$root_dir = "${app}\letsencrypt"
$nginx_conf_dir = "$env:SystemDrive\OpenResty\conf"
$nginx_conf = "onlyoffice-proxy.conf"
$nginx_tmpl = "onlyoffice-proxy-ssl.conf.tmpl"
$proxy_service = "OpenResty"
$appsettings_config_path = "${app}\config\appsettings.production.json"
if ($args[0] -eq "-f") {
$ssl_cert = $args[1]
@ -47,29 +45,29 @@ if ( $args.Count -ge 2 )
}
else {
$letsencrypt_mail = $args[0] -JOIN ","
$letsencrypt_domain = $args[1] -JOIN ","
$letsencrypt_mail = $args[0]
$letsencrypt_domain = $args[1]
[void](New-Item -ItemType "directory" -Path "${root_dir}\Logs" -Force)
"certbot certonly --expand --webroot -w `"${root_dir}`" --key-type rsa --cert-name ${product} --noninteractive --agree-tos --email ${letsencrypt_mail} -d ${letsencrypt_domain}" > "${app}\letsencrypt\Logs\le-start.log"
cmd.exe /c "certbot certonly --expand --webroot -w `"${root_dir}`" --key-type rsa --cert-name ${product} --noninteractive --agree-tos --email ${letsencrypt_mail} -d ${letsencrypt_domain}" > "${app}\letsencrypt\Logs\le-new.log"
"certbot certonly --expand --webroot -w `"${root_dir}`" --noninteractive --agree-tos --email ${letsencrypt_mail} -d ${letsencrypt_domain}" > "${app}\letsencrypt\Logs\le-start.log"
cmd.exe /c "certbot certonly --expand --webroot -w `"${root_dir}`" --noninteractive --agree-tos --email ${letsencrypt_mail} -d ${letsencrypt_domain}" > "${app}\letsencrypt\Logs\le-new.log"
pushd "${letsencrypt_root_dir}\${product}"
$ssl_cert = (Resolve-Path -Path (Get-Item "${letsencrypt_root_dir}\${product}\fullchain.pem").Target).ToString().Replace('\', '/')
$ssl_key = (Resolve-Path -Path (Get-Item "${letsencrypt_root_dir}\${product}\privkey.pem").Target).ToString().Replace('\', '/')
pushd "${letsencrypt_root_dir}\${letsencrypt_domain}"
$ssl_cert = (Resolve-Path -Path (Get-Item "${letsencrypt_root_dir}\${letsencrypt_domain}\fullchain.pem").Target).ToString().Replace('\', '/')
$ssl_key = (Resolve-Path -Path (Get-Item "${letsencrypt_root_dir}\${letsencrypt_domain}\privkey.pem").Target).ToString().Replace('\', '/')
popd
}
if ( [System.IO.File]::Exists($ssl_cert) -and [System.IO.File]::Exists($ssl_key) -and [System.IO.File]::Exists("${nginx_conf_dir}\${nginx_ssl_tmpl}"))
if ( [System.IO.File]::Exists($ssl_cert) -and [System.IO.File]::Exists($ssl_key) -and [System.IO.File]::Exists("${nginx_conf_dir}\${nginx_tmpl}"))
{
Copy-Item "${nginx_conf_dir}\${nginx_ssl_tmpl}" -Destination "${nginx_conf_dir}\${nginx_conf}"
Copy-Item "${nginx_conf_dir}\${nginx_tmpl}" -Destination "${nginx_conf_dir}\${nginx_conf}"
((Get-Content -Path "${nginx_conf_dir}\${nginx_conf}" -Raw) -replace '/usr/local/share/ca-certificates/tls.crt', $ssl_cert) | Set-Content -Path "${nginx_conf_dir}\${nginx_conf}"
((Get-Content -Path "${nginx_conf_dir}\${nginx_conf}" -Raw) -replace '/etc/ssl/private/tls.key', $ssl_key) | Set-Content -Path "${nginx_conf_dir}\${nginx_conf}"
if ($letsencrypt_domain)
{
$acl = Get-Acl -Path "$env:SystemDrive\Certbot\archive\${product}"
$acl = Get-Acl -Path "$env:SystemDrive\Certbot\archive\${letsencrypt_domain}"
$acl.SetSecurityDescriptorSddlForm('O:LAG:S-1-5-21-4011186057-2202358572-2315966083-513D:PAI(A;;0x1200a9;;;WD)(A;;FA;;;SY)(A;OI;0x1200a9;;;LS)(A;;FA;;;BA)(A;;FA;;;LA)')
Set-Acl -Path $acl.path -ACLObject $acl
}
@ -77,28 +75,14 @@ if ( $args.Count -ge 2 )
Restart-Service -Name $proxy_service
@(
"certbot renew >> `"${app}\letsencrypt\Logs\le-renew.log`"",
"net stop $proxy_service",
"net start $proxy_service"
) | Set-Content -Path "${app}\letsencrypt\letsencrypt_cron.bat" -Encoding ascii
"certbot renew >> `"${app}\letsencrypt\Logs\le-renew.log`"" > "${app}\letsencrypt\letsencrypt_cron.bat"
"net stop $proxy_service" >> "${app}\letsencrypt\letsencrypt_cron.bat"
"net start $proxy_service" >> "${app}\letsencrypt\letsencrypt_cron.bat"
$day = (Get-Date -Format "dddd").ToUpper().SubString(0, 3)
$time = Get-Date -Format "HH:mm"
$taskName = "Certbot renew"
$action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c `"${app}\letsencrypt\letsencrypt_cron.bat`""
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek $day -At $time
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Force
cmd.exe /c "SCHTASKS /F /CREATE /SC WEEKLY /D $day /TN `"Certbot renew`" /TR `"${app}\letsencrypt\letsencrypt_cron.bat`" /ST $time"
}
elseif ($args[0] -eq "-d" -or $args[0] -eq "--default") {
Copy-Item "${nginx_conf_dir}\${nginx_conf_tmpl}" -Destination "${nginx_conf_dir}\${nginx_conf}"
Restart-Service -Name $proxy_service
Remove-Item -Path "${app}\letsencrypt\letsencrypt_cron.bat" -Force
Write-Host "Returned to the default proxy configuration."
}
else
{
Write-Output " This script provided to automatically get Let's Encrypt SSL Certificates for DocSpace "
@ -108,15 +92,10 @@ else
Write-Output " comma to register multiple emails, ex: "
Write-Output " u1@example.com,u2@example.com. "
Write-Output " DOMAIN Domain name to apply "
Write-Output " Use comma to register multiple domains, ex: "
Write-Output " example.com,s1.example.com,s2.example.com. "
Write-Output " "
Write-Output " Using your own certificates via the -f parameter: "
Write-Output " usage: "
Write-Output " docspace-ssl-setup.ps1 -f CERTIFICATE PRIVATEKEY "
Write-Output " CERTIFICATE Path to the certificate file for the domain."
Write-Output " PRIVATEKEY Path to the private key file for the certificate."
Write-Output " "
Write-Output " Return to the default proxy configuration using the -d or --default parameter: "
Write-Output " docspace-ssl-setup.ps1 -d | docspace-ssl-setup.ps1 --default "
}

View File

@ -1,16 +0,0 @@
<service>
<id>OpenSearch</id>
<name>OpenSearch</name>
<description>OpenSearch</description>
<priority>RealTime</priority>
<startmode>Automatic</startmode>
<delayedAutoStart>true</delayedAutoStart>
<onfailure action="restart" delay="1 sec"/>
<logpath>%BASE%\..\Log\</logpath>
<workingdirectory>%BASE%\..\</workingdirectory>
<executable>%BASE%\..\opensearch-windows-install.bat</executable>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
</service>

View File

@ -1,16 +0,0 @@
<service>
<id>OpenSearchDashboards</id>
<name>OpenSearchDashboards</name>
<description>OpenSearchDashboards</description>
<priority>RealTime</priority>
<startmode>Automatic</startmode>
<delayedAutoStart>true</delayedAutoStart>
<onfailure action="restart" delay="1 sec"/>
<logpath>%BASE%\..\Log\</logpath>
<workingdirectory>%BASE%\..\</workingdirectory>
<executable>%BASE%\..\bin\opensearch-dashboards.bat</executable>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
</service>

View File

@ -118,13 +118,6 @@ Function SetDocumentServerJWTSecretProp
End Function
Function SetDashboardsPwd
On Error Resume Next
Session.Property("DASHBOARDS_PWD") = RandomString( 20 )
End Function
Function SetMACHINEKEY
On Error Resume Next
@ -202,8 +195,8 @@ Function MySQLConfigure
If Err.Number <> 0 Then
Err.Clear
installDir = shell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB\MySQL Server 8.0\Location")
dataDir = shell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB\MySQL Server 8.0\DataLocation")
installDir = shell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\MySQL AB\MySQL Server 8.0\Location")
dataDir = shell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\MySQL AB\MySQL Server 8.0\DataLocation")
End If
Call WriteToLog("MySQLConfigure: installDir " & installDir)
@ -249,11 +242,11 @@ Function WriteToLog(ByVal var)
End Function
Function OpenSearchSetup
Function ElasticSearchSetup
On Error Resume Next
Dim ShellCommand
Dim APP_INDEX_DIR, OPENSEARCH_DASHBOARDS_YML
Dim APP_INDEX_DIR
Const ForReading = 1
Const ForWriting = 2
@ -261,18 +254,16 @@ Function OpenSearchSetup
Set Shell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
APP_INDEX_DIR = Session.Property("APPDIR") & "Data\Index\v2.11.1\"
OPENSEARCH_DASHBOARDS_YML = "C:\OpenSearchStack\opensearch-dashboards-2.11.1\config\opensearch_dashboards.yml"
APP_INDEX_DIR = Session.Property("APPDIR") & "Data\Index\v7.16.3\"
If Not fso.FolderExists(APP_INDEX_DIR) Then
Session.Property("NEED_REINDEX_OPENSEARCH") = "TRUE"
Session.Property("NEED_REINDEX_ELASTICSEARCH") = "TRUE"
End If
Call Shell.Run("%COMSPEC% /c mkdir """ & Session.Property("APPDIR") & "Data\Index\v2.11.1\""",0,true)
Call Shell.Run("%COMSPEC% /c mkdir """ & Session.Property("APPDIR") & "Data\Index\v7.16.3\""",0,true)
Call Shell.Run("%COMSPEC% /c mkdir """ & Session.Property("APPDIR") & "Logs\""",0,true)
Set objFile = objFSO.OpenTextFile("C:\OpenSearch\config\opensearch.yml", ForReading)
Set objFile = objFSO.OpenTextFile(Session.Property("CommonAppDataFolder") & "Elastic\Elasticsearch\config\elasticsearch.yml", ForReading)
fileContent = objFile.ReadAll
@ -294,7 +285,7 @@ Function OpenSearchSetup
oRE.Pattern = "indices.memory.index_buffer_size:.*"
fileContent = oRE.Replace(fileContent, "indices.memory.index_buffer_size: 30%")
End if
If InStrRev(fileContent, "http.max_content_length") <> 0 Then
oRE.Pattern = "http.max_content_length:.*"
fileContent = oRE.Replace(fileContent, " ")
@ -320,29 +311,29 @@ Function OpenSearchSetup
fileContent = oRE.Replace(fileContent, " ")
End if
oRE.Pattern = "#path.data:.*"
fileContent = oRE.Replace(fileContent, "path.data: " & Session.Property("APPDIR") & "Data\Index\v2.11.1\")
oRE.Pattern = "path.data:.*"
fileContent = oRE.Replace(fileContent, "path.data: " & Session.Property("APPDIR") & "Data\Index\v7.16.3\")
oRE.Pattern = "#path.logs:.*"
oRE.Pattern = "path.logs:.*"
fileContent = oRE.Replace(fileContent, "path.logs: " & Session.Property("APPDIR") & "Logs\")
If InStrRev(fileContent, "plugins.security.disabled") = 0 Then
fileContent = fileContent & Chr(13) & Chr(10) & "plugins.security.disabled: true"
If InStrRev(fileContent, "ingest.geoip.downloader.enabled") = 0 Then
fileContent = fileContent & Chr(13) & Chr(10) & "ingest.geoip.downloader.enabled: false"
Else
oRE.Pattern = "plugins.security.disabled:.*"
fileContent = oRE.Replace(fileContent, "plugins.security.disabled: true")
oRE.Pattern = "ingest.geoip.downloader.enabled.*"
fileContent = oRE.Replace(fileContent, "ingest.geoip.downloader.enabled: false")
End if
Call WriteToLog("OpenSearchSetup: New config:" & fileContent)
Call WriteToLog("OpenSearchSetup: CommonAppDataFolder :" & "C:\OpenSearch\data")
Call WriteToLog("ElasticSearchSetup: New config:" & fileContent)
Call WriteToLog("ElasticSearchSetup: CommonAppDataFolder :" & Session.Property("CommonAppDataFolder") & "Elastic\Elasticsearch\data")
Set objFile = objFSO.OpenTextFile("C:\OpenSearch\config\opensearch.yml", ForWriting)
Set objFile = objFSO.OpenTextFile(Session.Property("CommonAppDataFolder") & "Elastic\Elasticsearch\config\elasticsearch.yml", ForWriting)
objFile.WriteLine fileContent
objFile.Close
Set objFile = objFSO.OpenTextFile("C:\OpenSearch\config\jvm.options", ForReading)
Set objFile = objFSO.OpenTextFile(Session.Property("CommonAppDataFolder") & "Elastic\Elasticsearch\config\jvm.options", ForReading)
fileContent = objFile.ReadAll
@ -374,66 +365,25 @@ Function OpenSearchSetup
fileContent = oRE.Replace(fileContent, "-Dlog4j2.formatMsgNoLookups=true")
End if
Set objFile = objFSO.OpenTextFile("C:\OpenSearch\config\jvm.options", ForWriting)
Set objFile = objFSO.OpenTextFile(Session.Property("CommonAppDataFolder") & "Elastic\Elasticsearch\config\jvm.options", ForWriting)
objFile.WriteLine fileContent
objFile.Close
If objFSO.FileExists(OPENSEARCH_DASHBOARDS_YML) Then
Set objFile = objFSO.OpenTextFile(OPENSEARCH_DASHBOARDS_YML, ForWriting)
objFile.WriteLine ""
objFile.Close
Else
WScript.Echo "File doesn't exist: " & OPENSEARCH_DASHBOARDS_YML
End If
Set objFile = objFSO.OpenTextFile(OPENSEARCH_DASHBOARDS_YML, ForReading)
fileContent = objFile.ReadAll
objFile.Close
If InStrRev(fileContent, "opensearch.hosts") = 0 Then
fileContent = fileContent & Chr(13) & Chr(10) & "opensearch.hosts: [http://localhost:9200]"
Else
oRE.Pattern = "opensearch.hosts:.*"
fileContent = oRE.Replace(fileContent, "opensearch.hosts: [http://localhost:9200]")
End if
If InStrRev(fileContent, "server.host") = 0 Then
fileContent = fileContent & Chr(13) & Chr(10) & "server.host: 127.0.0.1"
Else
oRE.Pattern = "server.host:.*"
fileContent = oRE.Replace(fileContent, "server.host: 127.0.0.1")
End if
If InStrRev(fileContent, "server.basePath") = 0 Then
fileContent = fileContent & Chr(13) & Chr(10) & "server.basePath: /dashboards"
Else
oRE.Pattern = "server.basePath:.*"
fileContent = oRE.Replace(fileContent, "server.basePath: /dashboards")
End if
Set objFile = objFSO.OpenTextFile(OPENSEARCH_DASHBOARDS_YML, ForWriting)
objFile.WriteLine fileContent
objFile.Close
Set Shell = Nothing
End Function
Function OpenSearchInstallPlugin
Function ElasticSearchInstallPlugin
On Error Resume Next
Dim Shell
Set Shell = CreateObject("WScript.Shell")
ShellInstallCommand = """C:\OpenSearch\bin\opensearch-plugin""" & " install -b -s ingest-attachment"""
ShellRemoveCommand = """C:\OpenSearch\bin\opensearch-plugin""" & " remove -s ingest-attachment"""
ShellInstallCommand = """C:\Program Files\Elastic\Elasticsearch\7.16.3\bin\elasticsearch-plugin""" & " install -b -s ingest-attachment"""
ShellRemoveCommand = """C:\Program Files\Elastic\Elasticsearch\7.16.3\bin\elasticsearch-plugin""" & " remove -s ingest-attachment"""
Call Shell.Run("cmd /C " & """" & ShellRemoveCommand & """",0,true)
Call Shell.Run("cmd /C " & """" & ShellInstallCommand & """",0,true)
@ -525,40 +475,10 @@ Function OpenRestySetup
End Function
Function OpenSearchStackSetup
Function MoveNginxConfigs
On Error Resume Next
Dim ToolsFolder, OpenSearchDashboardsDir, OpenSearchDashboardsService, OpenSearchDashboardsPlugin, RemoveOSDSecurity, FluentBitDir, FluentBitService
Set objShell = CreateObject("WScript.Shell")
ToolsFolder = Session.Property("APPDIR") & "tools\"
OpenSearchDashboardsDir = Session.Property("APPDIR") & "opensearch-dashboards-2.11.1\"
OpenSearchDashboardsService = OpenSearchDashboardsDir & "winsw\OpenSearchDashboards.exe"
OpenSearchDashboardsPlugin = OpenSearchDashboardsDir & "bin\opensearch-dashboards-plugin.bat"
FluentBitDir = Session.Property("APPDIR") & "fluent-bit-2.2.2-win64\"
FluentBitService = "sc.exe create Fluent-Bit binpath= """ & "\""" & FluentBitDir & "bin\fluent-bit.exe\"" -c \""" & FluentBitDir & "conf\fluent-bit.conf\""""" & " start=delayed-auto"
Call objShell.Run("cmd /C " & """" & FluentBitService & """",0,true)
RemoveOSDSecurity = """" & OpenSearchDashboardsPlugin & """ remove securityDashboards"
Call objShell.Run("cmd /C " & """" & RemoveOSDSecurity & """",0,true)
objShell.Run "xcopy """ & ToolsFolder & "\OpenSearchDashboards*"" """ & OpenSearchDashboardsDir & "winsw\"" /E /I /Y", 0, True
objShell.Run """" & OpenSearchDashboardsService & """ install", 0, True
objShell.Run """" & OpenSearchDashboardsService & """ start", 0, True
objShell.Run "cmd /c RMDIR /S /Q """ & ToolsFolder & """", 0, True
Set objShell = Nothing
End Function
Function MoveConfigs
On Error Resume Next
Dim objFSO, objShell, sourceFolder, targetFolder, nginxFolder, configFile, configSslFile, sslScriptPath, sslCertPath, sslCertKeyPath, psCommand, FluentBitSourceFile, FluentBitDstFolder
Dim objFSO, objShell, sourceFolder, targetFolder, nginxFolder, configFile, configSslFile, sslScriptPath, sslCertPath, sslCertKeyPath, psCommand
' Define source and target paths
Set objFSO = CreateObject("Scripting.FileSystemObject")
@ -569,8 +489,6 @@ Function MoveConfigs
configSslFile = targetFolder & "\onlyoffice-proxy-ssl.conf.tmpl"
configFile = targetFolder & "\onlyoffice-proxy.conf"
sslScriptPath = Session.Property("APPDIR") & "sbin\docspace-ssl-setup.ps1"
FluentBitSourceFile = Session.Property("APPDIR") & "config\fluent-bit.conf"
FluentBitDstFolder = "C:\OpenSearchStack\fluent-bit-2.2.2-win64\conf\"
' Read content and extract SSL certificate and key paths if it exists
If objFSO.FileExists(configFile) Then
@ -607,14 +525,6 @@ Function MoveConfigs
WScript.Echo "Source file not found."
End If
' Delete
If objFSO.FileExists(FluentBitDstFolder & "fluent-bit.conf") Then
objFSO.DeleteFile FluentBitDstFolder & "fluent-bit.conf", True
If objFSO.FileExists(FluentBitSourceFile) Then
objFSO.MoveFile FluentBitSourceFile, FluentBitDstFolder
End If
End If
Set objFSO = Nothing
Set objShell = Nothing
End Function

View File

@ -1,4 +1,3 @@
gitdb==4.0.11
GitPython==3.1.40
smmap==5.0.1
PyGithub==2.2.0

View File

@ -1,5 +1,4 @@
PUSHD %~dp0\..
set dir=%cd%
echo %dir%
dotnet test %dir%\client\common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --environment "BASE_DIR=%dir%\client" --results-directory "%dir%\TestsResults"
pause
PUSHD %~dp0\..
set dir="%cd%"
echo %dir%
dotnet test %dir%\client\common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%\TestsResults"

Some files were not shown because too many files have changed in this diff Show More