For Ubuntu: 20.04LTS / 22.04LTS
Instruction:
Just copy past the script and execute it in your server.
Special Note:
If you encounter an error during "PGPASSWORD=$DB_ADM_PWD carbonio-message-dispatcher-migration carbonio_adm 127.78.0.10 20000," wait a few minutes and retry. In addition, restart service-discover and Postgresql from another terminal.
Official script for Ubuntu:
#!/bin/bash #PRE-INSTALL STEPS source /etc/os-release HOST=$(hostname -f); DOMAIN=$(hostname -d); IP=$(hostname -i); echo "Carbonio will be installed on ${HOST}, using ${DOMAIN} as default domain and ${IP} as public IP" apt update -y #INSTALL STEPS package_name="carbonio-core" if apt-cache search "$package_name" | grep -q "$package_name"; then echo "Start Carbonio installation" #echo "deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list; #wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - ; sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget -O- "https://www.postgresql.org/media/keys/ACCC4CF8.asc" | gpg --dearmor | sudo tee /usr/share/keyrings/postgres.gpg > /dev/null chmod 644 /usr/share/keyrings/postgres.gpg sed -i 's/deb/deb [signed-by=\/usr\/share\/keyrings\/postgres.gpg] /' /etc/apt/sources.list.d/pgdg.list PACKAGES="postgresql-16 service-discover-server carbonio-directory-server carbonio-proxy carbonio-webui carbonio-files-ui carbonio-mta carbonio-mailbox-db carbonio-appserver carbonio-user-management carbonio-files-ce carbonio-files-public-folder-ui carbonio-files-db carbonio-tasks-ce carbonio-tasks-db carbonio-tasks-ui carbonio-storages-ce carbonio-preview-ce carbonio-docs-connector-ce carbonio-docs-connector-db carbonio-docs-editor carbonio-prometheus carbonio-message-broker carbonio-ws-collaboration-ce carbonio-ws-collaboration-db carbonio-ws-collaboration-ui" echo '' > config.conf apt update -y -q apt upgrade -y -q apt install -y $PACKAGES carbonio-bootstrap -c ./config.conf CONSUL_SECRET="$(openssl rand -base64 14)" POSTGRES_SECRET="$(openssl rand -base64 14)" service-discover setup $(hostname -i) --password=$CONSUL_SECRET export CONSUL_HTTP_TOKEN=$(echo $CONSUL_SECRET | gpg --batch --yes --passphrase-fd 0 -qdo - /etc/zextras/service-discover/cluster-credentials.tar.gpg | tar xOf - consul-acl-secret.json | jq .SecretID -r); export SETUP_CONSUL_TOKEN=$CONSUL_HTTP_TOKEN pending-setups --execute-all su - postgres -c "psql --command=\"CREATE ROLE carbonio_adm WITH LOGIN SUPERUSER encrypted password '$POSTGRES_SECRET';\"" su - postgres -c "psql --command=\"CREATE DATABASE carbonio_adm OWNER carbonio_adm;\"" PGPASSWORD=$POSTGRES_SECRET carbonio-files-db-bootstrap carbonio_adm 127.0.0.1 PGPASSWORD=$POSTGRES_SECRET carbonio-mailbox-db-bootstrap carbonio_adm 127.0.0.1 PGPASSWORD=$POSTGRES_SECRET carbonio-docs-connector-db-bootstrap carbonio_adm 127.0.0.1 PGPASSWORD=$POSTGRES_SECRET carbonio-tasks-db-bootstrap carbonio_adm 127.0.0.1 PGPASSWORD=$POSTGRES_SECRET carbonio-ws-collaboration-db-bootstrap carbonio_adm 127.0.0.1 PACKAGES="carbonio-message-dispatcher-db " apt install -y $PACKAGES pending-setups --execute-all PGPASSWORD=$POSTGRES_SECRET carbonio-message-dispatcher-db-bootstrap carbonio_adm 127.0.0.1 PACKAGES="carbonio-message-dispatcher" apt install -y $PACKAGES PGPASSWORD=$POSTGRES_SECRET carbonio-message-dispatcher-migration carbonio_adm 127.0.0.1 PACKAGES="carbonio-videoserver-ce" apt install -y $PACKAGES pending-setups --execute-all sudo -iu zextras -- bash <<EOF carbonio prov mcf zimbraDefaultDomainName \$(hostname -d) carbonio prov md \$(hostname -d) zimbraVirtualHostname \$(hostname -d) carbonio prov mc default carbonioFeatureChatsEnabled TRUE EOF #echo service discover and postgresql passwords echo -e "The service-discover password is: \e[1m $CONSUL_SECRET \e[0m" echo -e "You can find it in file \e[3m/var/lib/service-discover/password\e[0m." echo "" echo -e "The PostgreSQL passowrd (DB_ADM_PWD) is: \e[1m$POSTGRES_SECRET\e[0m" echo "Please store it in a safe place, otherwise you will need to reset it!" else echo "###### Carbonio repo are not configured. ######" fi
Fan Made Script:
#!/bin/bash # Check if the script is run as root if [ "$(id -u)" -ne 0 ]; then echo "This script must be run as root" 1>&2 exit 1 fi echo "================================================================================" echo "| Important Notification for Users |" echo "|------------------------------------------------------------------------------|" echo "| As part of the installation process for Carbonio CE, steps 13 to 19 focus on |" echo "| setting up Workstream Collaboration components. If Workstream Collaboration |" echo "| is not a required component for your deployment, you have the option to |" echo "| skip these steps (13 to 19) during the installation process. |" echo "| |" echo "| After completing the installation process and rebooting your system, it's |" echo "| crucial to ensure that all services are running optimally. For users who |" echo "| choose to skip Workstream Collaboration components, the only additional |" echo "| action required is to restart the 'carbonio-tasks' service by executing: |" echo "| |" echo "| su - zextras -c "zmcontrol restart" |" echo "| systemctl restart carbonio-tasks |" echo "| |" echo "| This step ensures that all task-related functionalities are fully operational|" echo "| and align with your system's current configuration. |" echo "| |" echo "| Thank you for choosing Carbonio CE. For any questions or further assistance, |" echo "| please do not hesitate to reach out to our forum. |" echo "================================================================================" sleep 5 # Your script's content goes here # Define ANSI color codes for colored output RED='\033[0;31m' # Failed - Red GREEN='\033[0;32m' # Done - Green YELLOW='\033[0;33m' # Pending - Yellow LIGHT_GRAY='\033[0;37m' # Next - Light Gray (off-white) NC='\033[0m' # No Color - Reset # Define a list of activities activities=("Set hostname" "Configure /etc/hosts" "Set Timezone" "Add Zextras Repository" "Manage APT Repositories" "Install PostgreSQL DB" "Add PostgreSQL Role and Database" "Install Carbonio CE Packages" "Configure Carbonio CE Bootstrap" "Configure Service Discovery" "Configure Pending Setups" "Bootstrap Files and Tasks DB" "Install Carbonio Message Dispatcher DB" "Install Carbonio Message Dispatcher" "Install Carbonio Message Broker" "Install Carbonio WS Collaboration DB" "Install Carbonio WS Collaboration CE" "Install Carbonio Video Server CE" "Install Carbonio WS Collaboration UI" "Change Admin User Password" "Interactive Create Test Users" "Modify MTA for Trusted Network" "Restart Carbonio Services" "Check Carbonio CE Service Status" "Check Consul Status" "Check Carbonio CE System Unit Status" "Check Consul Service Status via HTTP API" "Reboot System Now" "Quit") status=("Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending" "Pending") # List of predefined hostnames hostnames=("mail.zextras.xyz" "mail.latestserver.xyz" "mail.sampleserver.xyz" "mail.oldserver.xyz" "mail.sampleservers.xyz" "mail.corporatemailbox.xyz" "mail.enterprisemailpro.xyz" "Enter custom hostname") display_menu() { echo "Available Tasks:" printf "%-3s | %-50s | %-10s\n" "No" "Task" "Status" echo "-----------------------------------------------------------------" local next_task_set=false for i in "${!activities[@]}"; do case "${status[$i]}" in "Done") color=$GREEN ;; "Failed") color=$RED ;; "Pending") if [ "$next_task_set" = false ]; then color=$LIGHT_GRAY status[$i]="Next" next_task_set=true # Display the "Next" task in a box echo "-----------------------------------------------------------------" printf "| %-3d | %-50s | ${color}%-10s${NC} |\n" $((i+1)) "${activities[$i]}" "Next" echo "-----------------------------------------------------------------" continue # Skip the regular print for this task else color=$YELLOW fi ;; *) color=$NC ;; esac printf "%-3d | %-50s | ${color}%-10s${NC}\n" $((i+1)) "${activities[$i]}" "${status[$i]}" done echo # Add an empty line for better readability } # Function to set the hostname set_hostname() { echo "Select a hostname from the list or enter a custom one:" for i in "${!hostnames[@]}"; do printf "%d. %s\n" $((i+1)) "${hostnames[$i]}" done local choice local new_hostname while true; do read -p "Enter your choice (1-${#hostnames[@]}): " choice if [[ $choice -ge 1 && $choice -le ${#hostnames[@]} ]]; then if [ "$choice" -eq "${#hostnames[@]}" ]; then echo "Enter custom hostname: " read new_hostname if [[ -n "$new_hostname" ]]; then break else echo "Invalid hostname. Please try again." fi else new_hostname=${hostnames[$((choice-1))]} break fi else echo "Invalid selection. Please try again." fi done if sudo hostnamectl set-hostname "$new_hostname"; then echo "Hostname was successfully changed to $new_hostname." status[0]="Done" else echo "Failed to change the hostname." status[0]="Failed" fi } # Function to configure /etc/hosts set_hostname() { echo "Select a hostname from the list or enter a custom one:" for i in "${!hostnames[@]}"; do printf "%d. %s\n" $((i+1)) "${hostnames[$i]}" done local choice local new_hostname while true; do read -p "Enter your choice (1-${#hostnames[@]}): " choice if [[ $choice -ge 1 && $choice -le ${#hostnames[@]} ]]; then if [ "$choice" -eq "${#hostnames[@]}" ]; then echo "Enter custom hostname: " read new_hostname if [[ -n "$new_hostname" ]]; then break else echo "Invalid hostname. Please try again." fi else new_hostname=${hostnames[$((choice-1))]} break fi else echo "Invalid selection. Please try again." fi done if sudo hostnamectl set-hostname "$new_hostname"; then echo "Hostname was successfully changed to $new_hostname." status[0]="Done" else echo "Failed to change the hostname." status[0]="Failed" fi } # Function to configure /etc/hosts configure_hosts() { echo "Configuring /etc/hosts..." # Check and add localhost if not present > /etc/hosts echo "127.0.0.1 localhost" >> /etc/hosts # Determine if the interface IP is public or private echo "Determining if the interface IP is public or private..." interface_ip=$(ip addr show | awk '/inet / && $2 !~ /^127\./ {print $2}' | cut -d '/' -f 1) if [[ $interface_ip =~ ^10\.|^172\.(1[6-9]|2[0-9]|3[0-1])\.|^192\.168\. ]]; then echo -en '\n' sleep 2 echo ip_type="Private" echo -en '\n' else echo -en '\n' sleep 2 echo ip_type="Public" echo -en '\n' fi # Prompt for user choice echo "Choose an option:" echo "1. Add Interface IP" echo "2. Add Public IP Resolved by DNS" read -p "Enter your choice: " choice case $choice in 1) echo "$interface_ip $(hostname -f) $(hostname -s)" >> /etc/hosts echo "Interface IP added to /etc/hosts. IP type: $ip_type" ;; 2) read -p "Enter the public hostname: " public_hostname echo "$(hostname -i) $(Hostname -f) $(hostname -s)" >> /etc/hosts echo "Public hostname added to /etc/hosts." ;; *) echo "Invalid choice. Exiting." return 1 ;; esac echo "/etc/hosts has been updated as follows:" echo -en '\n' cat /etc/hosts echo -en '\n' status[1]="Done" } # Function to set the timezone set_timezone() { # Retrieve and display available timezones echo "Available Timezones:" timedatectl list-timezones # Prompt the user for their preferred timezone echo "Enter your preferred timezone (e.g., Asia/Dhaka):" while read user_timezone; do # Check if the entered timezone is valid by looking for it in the list of timezones if timedatectl list-timezones | grep -qx "$user_timezone"; then # If valid, set the timezone echo "Setting timezone to $user_timezone..." if sudo timedatectl set-timezone "$user_timezone"; then echo "Timezone has been set to $user_timezone." status[2]="Done" break else echo "Failed to set the timezone to $user_timezone." status[2]="Failed" break fi else # If the entered timezone is not valid, prompt the user again echo "Invalid timezone: $user_timezone. Please enter a valid timezone:" fi done } # Function to add Zextras repository add_zextras_repo() { # Check and remove the zextras.list file if it exists if [ -f "/etc/apt/sources.list.d/zextras.list" ]; then echo "Existing Zextras repository configuration found. Removing..." sudo rm "/etc/apt/sources.list.d/zextras.list" fi echo "Select the type of Zextras repository to add:" echo "1. Public" read repo_choice # Detect OS Version . /etc/os-release OS_VERSION=$VERSION_CODENAME case $repo_choice in 1) echo "Adding Public Zextras repository..." if [[ "$OS_VERSION" == "focal" ]]; then wget -c https://repo.zextras.io/inst_repo_ubuntu.sh && bash inst_repo_ubuntu.sh echo "Public Zextras repository added for Ubuntu 20.04LTS (Focal)." elif [[ "$OS_VERSION" == "jammy" ]]; then wget -c https://repo.zextras.io/inst_repo_ubuntu.sh && bash inst_repo_ubuntu.sh echo "Public Zextras repository added for Ubuntu 22.04LTS (Jemmy)." else echo "Warning: Unsupported Ubuntu version ($OS_VERSION) for the Public repository." fi ;; esac status[3]="Done" } # Function to clean, update, and upgrade APT repositories manage_apt_repos() { echo "Cleaning APT repositories..." if sudo apt clean all; then echo "APT repositories cleaned successfully." else echo "Failed to clean APT repositories." status[4]="Failed" return fi echo "Updating APT repositories..." if sudo apt update; then echo "APT repositories updated successfully." else echo "Failed to update APT repositories." status[4]="Failed" return fi echo "Upgrading APT packages..." if sudo apt upgrade -y; then echo "APT packages upgraded successfully." status[4]="Done" else echo "Failed to upgrade APT packages." status[4]="Failed" return fi echo "APT repositories have been managed." } # Function to install PostgreSQL DB install_postgresql_db() { echo "Select the PostgreSQL version to install:" echo "12. postgresql-12" echo "16. postgreSQL-16" read pgsql_version_choice case $pgsql_version_choice in 12|16) local pgsql_version="postgresql-${pgsql_version_choice}" echo "Installing ${pgsql_version}..." sudo sh -c "echo 'deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main' > /etc/apt/sources.list.d/pgdg.list" if wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -; then echo "PostgreSQL repository key added successfully." else echo "Failed to add PostgreSQL repository key." status[5]="Failed" return fi if sudo apt update; then echo "Package lists updated successfully." else echo "Failed to update package lists." status[5]="Failed" return fi if sudo apt -y install "${pgsql_version}"; then echo "${pgsql_version} installed successfully." status[5]="Done" else echo "Failed to install ${pgsql_version}." status[5]="Failed" return fi ;; *) echo "Invalid selection. Returning to main menu." status[5]="Failed" ;; esac } # Function to add or update PostgreSQL role and database add_postgresql_role_and_db() { echo "Adding PostgreSQL role and database..." read -s -p "Password for carbonio_adm role: " DB_ADM_PWD echo # Move to a new line for cleaner output # Creating the PostgreSQL role if sudo su - postgres -c "psql --command=\"CREATE ROLE carbonio_adm WITH LOGIN SUPERUSER ENCRYPTED PASSWORD '${DB_ADM_PWD}';\""; then echo "PostgreSQL role 'carbonio_adm' created successfully." else echo "Failed to create PostgreSQL role 'carbonio_adm'." status[6]="Failed" return fi # Creating the PostgreSQL database if sudo su - postgres -c "psql --command=\"CREATE DATABASE carbonio_adm OWNER carbonio_adm;\""; then echo "PostgreSQL database 'carbonio_adm' created successfully." else echo "Failed to create PostgreSQL database 'carbonio_adm'." status[6]="Failed" return fi # Restarting the PostgreSQL service if sudo systemctl restart postgresql; then echo "PostgreSQL service restarted successfully." status[6]="Done" else echo "Failed to restart PostgreSQL service." status[6]="Failed" return fi echo "PostgreSQL role and database added and service restarted." } # Function to install Carbonio CE packages install_carbonio_ce_packages() { echo "Installing Carbonio CE packages..." # Define all packages in an array for easier management packages=( service-discover-server carbonio-directory-server carbonio-files-db carbonio-mailbox-db carbonio-docs-connector-db carbonio-tasks-db carbonio-proxy carbonio-webui carbonio-files-ui carbonio-tasks-ui carbonio-files-public-folder-ui carbonio-user-management carbonio-mta carbonio-appserver carbonio-storages-ce carbonio-files-ce carbonio-preview-ce carbonio-docs-connector-ce carbonio-tasks-ce carbonio-docs-editor carbonio-prometheus ) # Attempt to install each package individually for pkg in "${packages[@]}"; do if ! sudo apt install "$pkg" -y; then echo "Failed to install $pkg. Halting installation process." status[7]="Failed" return fi done echo "All Carbonio CE packages installed successfully." echo "Listing installed Carbonio CE packages and their versions:" for pkg in "${packages[@]}"; do dpkg-query -W -f='${binary:Package} ${Version}\n' "$pkg" done | sort status[7]="Done" } # Function to configure Carbonio CE Bootstrap configure_carbonio_ce_bootstrap() { echo "Configuring Carbonio CE Bootstrap..." if sudo carbonio-bootstrap; then echo "Carbonio CE Bootstrap configuration completed." status[8]="Done" else echo "Failed to configure Carbonio CE Bootstrap." status[8]="Failed" fi } # Function to configure Service Discovery configure_service_discovery() { echo "About to configure Service Discovery. Do you want to proceed? (yes/no)" read -p "Enter your choice: " user_choice case $user_choice in [Yy]* ) echo "Configuring Service Discovery..." if sudo service-discover setup-wizard; then echo "Service Discovery configuration completed." status[9]="Done" else echo "Failed to configure Service Discovery." status[9]="Failed" fi ;; [Nn]* ) echo "Service Discovery configuration aborted by the user." status[9]="Aborted" ;; * ) echo "Invalid input. Please answer yes or no." ;; esac } # Function to configure Pending Setups configure_pending_setups() { echo "Configuring pending setups..." if sudo pending-setups -a; then echo "Pending setups configuration completed." status[10]="Done" else echo "Failed to configure pending setups." status[10]="Failed" fi } # Function to bootstrap files and tasks DB bootstrap_files_and_tasks_db() { if [ -z "$DB_ADM_PWD" ]; then read -s -p "Enter password for carbonio_adm PostgreSQL role: " DB_ADM_PWD echo # Move to a new line for cleaner output fi echo "Bootstrapping Files database..." if PGPASSWORD=$DB_ADM_PWD carbonio-files-db-bootstrap carbonio_adm 127.0.0.1; then echo "Files database bootstrapped successfully." else echo "Failed to bootstrap Files database." status[11]="Failed" return fi echo "Bootstrapping Tasks database..." if PGPASSWORD=$DB_ADM_PWD carbonio-tasks-db-bootstrap carbonio_adm 127.0.0.1; then echo "Tasks database bootstrapped successfully." status[11]="Done" else echo "Failed to bootstrap Tasks database." status[11]="Failed" return fi } # Function to ask about skipping Workstream Collaboration components ask_skip_ws_collaboration() { echo -en '\n' sleep 2 echo "Do you want to skip Workstream Collaboration setup? (yes/no):" read skip_ws_collaboration if [[ "$skip_ws_collaboration" =~ ^[Yy][Ee][Ss]$ ]]; then for i in {12..18}; do status[$i]="Skipped" done echo "Workstream Collaboration setup will be skipped." else echo "Proceeding with Workstream Collaboration setup." fi } # Function to configure Pending Setups install_carbonio_message_dispatcher_db() { if [ -z "$DB_ADM_PWD" ]; then read -s -p "Enter password for carbonio_adm PostgreSQL role: " DB_ADM_PWD echo # Move to a new line for better readability fi echo "Installing Carbonio Message Dispatcher DB..." if ! sudo apt install carbonio-message-dispatcher-db -y; then echo "Failed to install Carbonio Message Dispatcher DB." status[12]="Failed" return fi echo "Running pending setups..." if ! sudo pending-setups -a; then echo "Failed to run pending setups." status[12]="Failed" return fi # Restarting PostgreSQL service echo "Restarting PostgreSQL service..." if ! sudo systemctl restart postgresql@16-main.service; then echo "Failed to restart PostgreSQL service." status[12]="Failed" return fi echo "PostgreSQL service restarted successfully." if [ -z "$DB_ADM_PWD" ]; then read -s -p "Enter password for carbonio_adm PostgreSQL role: " DB_ADM_PWD echo # Move to a new line for cleaner output fi echo "Bootstrapping Carbonio Message Dispatcher DB..." if ! PGPASSWORD=$DB_ADM_PWD carbonio-message-dispatcher-db-bootstrap carbonio_adm 127.0.0.1; then echo "Failed to bootstrap Carbonio Message Dispatcher DB." status[12]="Failed" return fi echo "Installed Carbonio Message Dispatcher DB package version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-message-dispatcher-db | sort status[12]="Done" } # Function to Install Carbonio Message Dispatcher with Enhanced Migration Retry install_carbonio_message_dispatcher() { echo "Installing Carbonio Message Dispatcher..." if ! apt install carbonio-message-dispatcher -y; then echo "Failed to install Carbonio Message Dispatcher." status[13]="Failed" return fi if ! pending-setups -a; then echo "Failed to complete pending setups after installing Carbonio Message Dispatcher." status[13]="Failed" return fi if [ -z "$DB_ADM_PWD" ]; then read -s -p "Enter password for carbonio_adm PostgreSQL role: " DB_ADM_PWD echo # Move to a new line for cleaner output fi # Restart service-discover and postgresql initially systemctl restart service-discover sleep 5 systemctl restart postgresql@16-main.service sleep 5 systemctl restart carbonio-message-dispatcher-db-sidecar.service sleep 5 # Enhanced migration attempt with recovery step migration_success=false while ! $migration_success; do if PGPASSWORD=$DB_ADM_PWD carbonio-message-dispatcher-migration carbonio_adm 127.78.0.10 20000; then echo "Migration of Carbonio Message Dispatcher succeeded." migration_success=true status[13]="Done" else echo "Failed to run Carbonio Message Dispatcher migration. Restarting PostgreSQL and retrying..." # Restart PostgreSQL as a recovery step before retrying systemctl restart postgresql@16-main.service systemctl restart carbonio-message-dispatcher-db-sidecar.service sleep 5 # Adjust sleep time as needed for the service to fully restart fi done echo "Installed Carbonio Message Dispatcher package and its version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-message-dispatcher | sort } # Function to Install Carbonio Message Broker install_carbonio_message_broker() { echo "Installing Carbonio Message Broker..." if ! apt install carbonio-message-broker -y; then echo "Failed to install Carbonio Message Broker." status[14]="Failed" return fi if ! pending-setups -a; then echo "Failed to complete pending setups after installing Carbonio Message Broker." status[14]="Failed" return fi echo "Installed Carbonio Message Broker package and its version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-message-broker | sort status[14]="Done" } # Function to Install Carbonio WS Collaboration DB install_carbonio_ws_collaboration_db() { echo "Installing Carbonio WS Collaboration DB..." if ! apt install carbonio-ws-collaboration-db -y; then echo "Failed to install Carbonio WS Collaboration DB." status[15]="Failed" return fi if ! pending-setups -a; then echo "Failed to complete pending setups after installing Carbonio WS Collaboration DB." status[15]="Failed" return fi if ! PGPASSWORD=$DB_ADM_PWD carbonio-ws-collaboration-db-bootstrap carbonio_adm 127.0.0.1; then echo "Failed to bootstrap Carbonio WS Collaboration DB." status[15]="Failed" return fi echo "Installed Carbonio WS Collaboration DB package and its version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-ws-collaboration-db | sort status[15]="Done" } # Function to Install Carbonio WS Collaboration CE install_carbonio_ws_collaboration_ce() { echo "Installing Carbonio WS Collaboration CE..." if ! apt install carbonio-ws-collaboration-ce -y; then echo "Failed to install Carbonio WS Collaboration CE." status[16]="Failed" return fi if ! pending-setups -a; then echo "Failed to complete pending setups after installing Carbonio WS Collaboration CE." status[16]="Failed" return fi echo "Installed Carbonio WS Collaboration CE package and its version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-ws-collaboration-ce | sort status[16]="Done" } # Function to Install Carbonio Video Server CE install_carbonio_video_server_ce() { echo "Installing Carbonio Video Server CE..." if ! apt install carbonio-videoserver-ce -y; then echo "Failed to install Carbonio Video Server CE." status[17]="Failed" return fi if ! sudo pending-setups -a; then echo "Failed to complete pending setups after installing Carbonio Video Server CE." status[17]="Failed" return fi echo "Installed Carbonio Video Server CE package and its version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-videoserver-ce | sort status[17]="Done" } # Function to Install Carbonio WS Collaboration UI install_carbonio_ws_collaboration_ui() { echo "Installing Carbonio WS Collaboration UI..." if ! apt install carbonio-ws-collaboration-ui -y; then echo "Failed to install Carbonio WS Collaboration UI." status[18]="Failed" return fi echo "Enabling Carbonio WS Collaboration features..." if ! su - zextras -c "carbonio prov mc default carbonioFeatureChatsEnabled TRUE"; then echo "Failed to enable Carbonio WS Collaboration features." status[18]="Failed" return fi echo "Installed Carbonio WS Collaboration UI package and its version:" dpkg-query -W -f='${binary:Package} ${Version}\n' carbonio-ws-collaboration-ui | sort status[18]="Done" } # Function to Change Admin User Password change_admin_user_password() { echo "Changing admin user (zextras@$(hostname -d)) password..." read -s -p "Enter new admin password: " ADMIN_PWD echo # Move to a new line for clean output if su - zextras -c "carbonio prov sp zextras@$(hostname -d) $ADMIN_PWD"; then echo "Admin user password changed successfully." status[19]="Done" else echo "Failed to change admin user password." status[19]="Failed" fi } # Function to Interactively Create Test Users with Skip Option interactive_create_test_users() { echo "Would you like to create test users? (yes/no): " read proceed if [[ "$proceed" != "yes" ]]; then echo "Skipping user creation." status[20]="Skipped" return fi echo "Enter the number of users you want to create: " read num_users # Ensure input is a number and greater than 0 if ! [[ "$num_users" =~ ^[0-9]+$ ]] || [ "$num_users" -le 0 ]; then echo "Invalid number of users. Exiting..." status[20]="Failed" return fi for ((i=1; i<=num_users; i++)); do echo "Enter username for user $i: " read username # Simple check for non-empty username if [[ -z "$username" ]]; then echo "Username cannot be empty. Exiting..." status[20]="Failed" return fi echo "Enter password for $username: " read -s password # Simple check for non-empty password if [[ -z "$password" ]]; then echo "Password cannot be empty. Exiting..." status[20]="Failed" return fi if su - zextras -c "carbonio prov ca $username@$(hostname -d) $password displayName \"$username\""; then echo "User $username created successfully." else echo "Failed to create user $username." status[20]="Failed" # Decide whether to exit or continue in case of failure echo "Continue creating next user? (yes/no):" read continueCreating if [[ "$continueCreating" != "yes" ]]; then return fi fi done status[20]="Done" } # Function to Modify MTA for Trusted Network modify_mta_for_trusted_network() { echo "Modifying MTA for Trusted Network..." if su - zextras -c "carbonio prov ms $(hostname -f) zimbraMtaMyNetworks '127.0.0.0/8 $(hostname -i)/32'" && su - zextras -c "zmmtactl restart"; then echo "MTA configuration updated and service restarted successfully." status[21]="Done" else echo "Failed to update MTA configuration or restart the service." status[21]="Failed" fi } # Function to Restart Carbonio Services restart_carbonio_services() { echo "Restarting Carbonio Services..." if su - zextras -c "zmcontrol restart"; then echo "Carbonio services restarted successfully." status[22]="Done" else echo "Failed to restart Carbonio services." status[22]="Failed" fi } # Function to Check Carbonio CE Service Status check_carbonio_ce_service_status() { echo "Checking Carbonio CE Service Version..." if ! su - zextras -c "zmcontrol -v"; then echo "Failed to check Carbonio CE service version." status[23]="Failed" return fi echo "Checking Carbonio CE Service Status..." if su - zextras -c "zmcontrol status"; then echo "Carbonio CE service status check completed successfully." status[23]="Done" else echo "Failed to check Carbonio CE service status." status[23]="Failed" fi } # Function to Check Consul Status check_consul_status() { echo "Checking Consul Status..." if consul members; then echo "Consul status check completed successfully." status[24]="Done" else echo "Failed to check Consul status." status[24]="Failed" fi } # Function to Check Carbonio CE System Unit Status check_carbonio_ce_system_unit_status() { echo "Checking Carbonio CE System Unit Status..." if systemctl list-units carbonio*; then echo "Carbonio CE system unit status check completed successfully." status[25]="Done" else echo "Failed to check Carbonio CE system unit status." status[25]="Failed" fi } # Function to Check Consul Service Status via HTTP API check_consul_service_status_http_api() { echo "Checking Consul Service Status via HTTP API..." if curl_output=$(curl -s -v http://127.78.0.4:10000/health); then echo "$curl_output" | jq echo "Consul service status check via HTTP API completed." status[26]="Done" else echo "Failed to retrieve Consul service status via HTTP API." status[26]="Failed" fi } # System Reboot and advisory reboot_system_now() { echo "Advisory for System Administrators:" echo "After rebooting the system, consider restarting the following Carbonio services to apply any recent changes:" echo -en " su - zextras -c 'zmcontrol restart' systemctl restart carbonio-tasks systemctl restart carbonio-message-broker systemctl restart carbonio-message-dispatcher systemctl restart carbonio-ws-collaboration systemctl restart carbonio-videoserver if any attempt of initiating video call fails then clear the video call with PGPASSWORD=<postgresql_password> carbonio-ws-collaboration-meeting-cleanup carbonio_adm 127.0.0.1 5432 #PGPASSWORD=q carbonio-ws-collaboration-meeting-cleanup carbonio_adm 127.0.0.1 5432 also reboot systemctl restart carbonio-videoserver systemctl restart carbonio-ws-collaboration " sudo reboot now } # Main loop while true; do display_menu echo "Select an activity by number (or type 'Quit' to exit):" read choice case $choice in 1) set_hostname ;; 2) configure_hosts ;; 3) set_timezone ;; 4) add_zextras_repo ;; 5) manage_apt_repos ;; 6) install_postgresql_db ;; 7) add_postgresql_role_and_db ;; 8) install_carbonio_ce_packages ;; 9) configure_carbonio_ce_bootstrap ;; 10) configure_service_discovery ;; 11) configure_pending_setups ;; 12) bootstrap_files_and_tasks_db ask_skip_ws_collaboration ;; 13) install_carbonio_message_dispatcher_db ;; 14) install_carbonio_message_dispatcher ;; 15) install_carbonio_message_broker ;; 16) install_carbonio_ws_collaboration_db ;; 17) install_carbonio_ws_collaboration_ce ;; 18) install_carbonio_video_server_ce ;; 19) install_carbonio_ws_collaboration_ui ;; 20) change_admin_user_password ;; 21) interactive_create_test_users ;; 22) modify_mta_for_trusted_network ;; 23) restart_carbonio_services ;; 24) check_carbonio_ce_service_status ;; 25) check_consul_status ;; 26) check_carbonio_ce_system_unit_status ;; 27) check_consul_service_status_http_api ;; 28) reboot_system_now ;; 29|"Quit") echo "Exiting..." break ;; *) echo "Invalid option. Please enter a number from the list." ;; esac done
Oh damn!
that looks awesome!
I'll give it a try.... ty for sharing =)
Hi,
Thank you for your interest.
Please feel free to modify it to make it more precise.
😊
Regards,
Sharif
does i need backup before ? curently my server its fully functional except videocalls
Hi,
I am sorry, I could not understand your post.
This script is for fresh installation of CE in Ubuntu 20 and 22. Therefore it does not deal with backup or upgradation.
Regards,
Sharif
please answer my thread https://community.zextras.com/forum/postid/7521/ , or how i can contact you? i cant send messages , cant edit post and cant upload image
On Source Server: (Zimbra OSE)
1. Collect all distribution list
zimbra@mail:/opt/backups/zmigrate$ zmprov gadl > distributionlist.txt
2. Collect members of all distribution list
zimbra@mail:~$ mkdir /opt/backups/zmigrate/distributionlist_members
zimbra@mail:/opt/backups/zmigrate$ for i in `cat /opt/backups/zmigrate/distributionlist.txt`; do zmprov gdlm $i > /opt/backups/zmigrate/distributionlist_members/$i.txt ;echo "$i"; done
Transfer these data to from source server to destination server using scp or Rsync. also fix their permissions.
On Destination Server: (Carbonio CE)
1. Create all distribution list in the Carbonio Server
zextras@mail:/opt/backups/zmigrate$ for i in `cat distributionlist.txt`; do carbonio prov cdl $i ; echo "$i -- done " ; done
2. Add members to the respective distribution list using the script.
zextras@mail:/opt/backups/zmigrate$
#!/bin/bash
# add all members to each of these distribution lists
for i in `cat distributionlist.txt`
do
for j in `grep -v '#' distributionlist_members/$i.txt |grep '@'`
do
carbonio prov adlm $i $j
echo " $j member has been added to list $i"
done
done
Hi, all.
I've just installed a new "Carbonio-ce" server (v. 24.3.0) on Ubuntu 22.04.4 LTS both following the step-by-step procedure in the docs both usign the installation scritp for a single server setup.
I can't get any QRcode for Mobile Apps nor Exchange ActiveSync password, desktop Apps or OTP Auth.
In "/opt/zextras/log/mailbox.log" I got this messages after requesting a credential:
2024-03-31 22:49:03,584 WARN [qtp37841489-134] [name=zextras@domain.my;mid=2;ip=192.168.100.191;oip=192.168.150.20;port=43906;soapId=64a9f064;] SoapEngine - cannot dispatch request
com.zimbra.common.service.ServiceException: unknown document: ListCredentialsRequest
at com.zimbra.common.service.ServiceException.UNKNOWN_DOCUMENT(ServiceException.java:314) ~[zimbracommon.jar:?]
at com.zimbra.soap.SoapEngine.dispatchRequest(SoapEngine.java:597) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapEngine.dispatch(SoapEngine.java:508) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapEngine.dispatch(SoapEngine.java:278) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapServlet.doWork(SoapServlet.java:338) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapServlet.doPost(SoapServlet.java:239) ~[zimbrastore.jar:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) ~[servlet-api-3.1.jar:3.1.0]
at com.zimbra.cs.servlet.ZimbraServlet.service(ZimbraServlet.java:208) ~[zimbrastore.jar:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[servlet-api-3.1.jar:3.1.0]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:292) ~[websocket-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.CsrfFilter.doFilter(CsrfFilter.java:152) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.RequestStringFilter.doFilter(RequestStringFilter.java:43) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.SetHeaderFilter.doFilter(SetHeaderFilter.java:48) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ETagHeaderFilter.doFilter(ETagHeaderFilter.java:36) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ContextPathBasedThreadPoolBalancerFilter.doFilter(ContextPathBasedThreadPoolBalancerFilter.java:95) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ZimbraQoSFilter.doFilter(ZimbraQoSFilter.java:113) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ZimbraInvalidLoginFilter.doFilter(ZimbraInvalidLoginFilter.java:119) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlets.DoSFilter.doFilterChain(DoSFilter.java:487) ~[jetty-servlets-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlets.DoSFilter.doFilter(DoSFilter.java:336) ~[jetty-servlets-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlets.DoSFilter.doFilter(DoSFilter.java:301) ~[jetty-servlets-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:89) ~[guice-servlet-5.0.1.jar:?]
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121) ~[guice-servlet-5.0.1.jar:?]
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133) ~[guice-servlet-5.0.1.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) ~[jetty-security-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322) ~[jetty-rewrite-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) [jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at java.lang.Thread.run(Thread.java:840) [?:?]
2024-03-31 22:49:03,585 INFO [qtp37841489-134] [name=zextras@domain.my;mid=2;ip=192.168.100.191;oip=192.168.150.20;port=43906;soapId=64a9f064;] soap - ListCredentialsRequest elapsed=1
2024-03-31 22:49:15,111 WARN [qtp37841489-23] [name=zextras@domain.my;mid=2;ip=192.168.100.191;oip=192.168.150.20;port=34286;soapId=64a9f065;] SoapEngine - cannot dispatch request
com.zimbra.common.service.ServiceException: unknown document: AddCredentialRequest
at com.zimbra.common.service.ServiceException.UNKNOWN_DOCUMENT(ServiceException.java:314) ~[zimbracommon.jar:?]
at com.zimbra.soap.SoapEngine.dispatchRequest(SoapEngine.java:597) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapEngine.dispatch(SoapEngine.java:508) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapEngine.dispatch(SoapEngine.java:278) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapServlet.doWork(SoapServlet.java:338) ~[zimbrastore.jar:?]
at com.zimbra.soap.SoapServlet.doPost(SoapServlet.java:239) ~[zimbrastore.jar:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) ~[servlet-api-3.1.jar:3.1.0]
at com.zimbra.cs.servlet.ZimbraServlet.service(ZimbraServlet.java:208) ~[zimbrastore.jar:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[servlet-api-3.1.jar:3.1.0]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:292) ~[websocket-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.CsrfFilter.doFilter(CsrfFilter.java:152) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.RequestStringFilter.doFilter(RequestStringFilter.java:43) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.SetHeaderFilter.doFilter(SetHeaderFilter.java:48) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ETagHeaderFilter.doFilter(ETagHeaderFilter.java:36) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ContextPathBasedThreadPoolBalancerFilter.doFilter(ContextPathBasedThreadPoolBalancerFilter.java:95) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ZimbraQoSFilter.doFilter(ZimbraQoSFilter.java:113) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.zimbra.cs.servlet.ZimbraInvalidLoginFilter.doFilter(ZimbraInvalidLoginFilter.java:119) ~[zimbrastore.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlets.DoSFilter.doFilterChain(DoSFilter.java:487) ~[jetty-servlets-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlets.DoSFilter.doFilter(DoSFilter.java:336) ~[jetty-servlets-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlets.DoSFilter.doFilter(DoSFilter.java:301) ~[jetty-servlets-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:89) ~[guice-servlet-5.0.1.jar:?]
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121) ~[guice-servlet-5.0.1.jar:?]
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133) ~[guice-servlet-5.0.1.jar:?]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) ~[jetty-security-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322) ~[jetty-rewrite-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) [jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
at java.lang.Thread.run(Thread.java:840) [?:?]
Any suggestions to get QRCode generation wortking?
Official script for Ubuntu:
Hi, I installed some days ago carbonio-ce 24.3.0, both on Ubuntu 22.4 LTS and Ubuntu 20.04 LTS.
I tried to setup Carbonio-CE either using this script either manually follow the instructions provided in docs. I always got a working install but in no case did I succeed the get the QRCode generation working on "Auth" section.
In each situation the dialog box for a new credential appear, I can insert the credential name but after click to confirm I get this messages in the mailbox.log:
2024-04-03 07:58:16,207 WARN [qtp949673757-108] [] extensions - unable to find handler for extension: system failure: Extension HTTP handler not found at /metrics/auth
2024-04-03 07:58:23,680 WARN [qtp949673757-2527] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=44098;soapId=e2f384f;] SoapEngine - cannot dispatch request
com.zimbra.common.service.ServiceException: unknown document: AddCredentialRequest
at com.zimbra.common.service.ServiceException.UNKNOWN_DOCUMENT(ServiceException.java:314) ~[zimbracommon.jar:?]
at com.zimbra.soap.SoapEngine.dispatchRequest(SoapEngine.java:597) ~[zimbrastore.jar:?]
[...]
2024-04-03 07:58:23,682 INFO [qtp949673757-2527] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=44098;soapId=e2f384f;] soap - AddCredentialRequest elapsed=1
2024-04-03 08:00:23,499 WARN [qtp949673757-2527] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=41674;soapId=e2f3851;] SoapEngine - cannot dispatch request
com.zimbra.common.service.ServiceException: unknown document: AddCredentialRequest
at com.zimbra.common.service.ServiceException.UNKNOWN_DOCUMENT(ServiceException.java:314) ~[zimbracommon.jar:?]
at com.zimbra.soap.SoapEngine.dispatchRequest(SoapEngine.java:597) ~[zimbrastore.jar:?]
[...]
at java.lang.Thread.run(Thread.java:840) [?:?]
2024-04-03 08:00:23,501 INFO [qtp949673757-2527] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=41674;soapId=e2f3851;] soap - AddCredentialRequest elapsed=2
2024-04-03 08:00:31,906 WARN [qtp949673757-121] [] extensions - unable to find handler for extension: system failure: Extension HTTP handler not found at /metrics/powerstore
2024-04-03 08:00:36,206 WARN [qtp949673757-76] [] extensions - unable to find handler for extension: system failure: Extension HTTP handler not found at /metrics/auth
2024-04-03 08:01:48,767 INFO [qtp949673757-121] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=56136;soapId=e2f3853;] soap - ListOTPRequest elapsed=1
2024-04-03 08:01:52,684 WARN [qtp949673757-2521] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=58290;soapId=e2f3854;] SoapEngine - cannot dispatch request
com.zimbra.common.service.ServiceException: unknown document: AddCredentialRequest
at com.zimbra.common.service.ServiceException.UNKNOWN_DOCUMENT(ServiceException.java:314) ~[zimbracommon.jar:?]
[...]
2024-04-03 08:01:52,686 INFO [qtp949673757-2521] [name=mail@mydomain.tld;mid=4;ip=192.168.100.191;oip=192.168.1.254;port=58290;soapId=e2f3854;] soap - AddCredentialRequest elapsed=2
2024-04-03 08:02:03,983 INFO [MailboxPurge] [name=bano@fracassetti.eu;mid=6;] purge - Purging messages.
On the right bottom appear the green dialog that confirm the new credential creation but this is false.
I think that some package is missing but I can't understand how to solve.
Can someone help me?
Ok, I'm not really interested to ActiveSync: The ability to autoconfigure the mobile app with a QRCode is only part of the licenced version (so is by design that it doesn't works in a CE environment)?
I couldn't find a detailed list of feature not available in CE env that are instead available in paid version: Can you provide it?
We already have a contact channel with your department through Studio Storti for a partnership and an account on your demo tenant. I'll send them my doubt but I think that this information should be publicly available.
What is working, not working or simply expected to not work but is questionably implemented in the interface is very useful to evaluate how much a product is mature.
I installed the CE env to evaluate the installation process and review the infrastructure behind the GUI, not for put it into production.