File egroupware-rocketchat.spec of Package egroupware-rocketchat

Name: egroupware-rocketchat
Version: 7.4.20250319
Release:
Summary: Rocket.Chat container for EGroupware
Group: Web/Database
License: MIT
URL: https://rocket.chat
Vendor: EGroupware GmbH, http://www.egroupware.org/
Packager: Ralf Becker <rb@egroupware.org>

# create with: tar -czvf egroupware-rocketchat-7.4.20250319.tar.gz egroupware-rocketchat
Source: %{name}-%{version}.tar.gz

# some defines in case we want to build it for an other distro
%define etc_dir /etc/egroupware-rocketchat

%if 0%{?suse_version}
	%define apache_conf_d /etc/apache2/conf.d
	%define apache_vhosts_d /etc/apache2/vhosts.d
	%define apache_user wwwrun
	%define apache_group www
	%define apache_service apache2
    %define apache_package apache2
Requires: jq
# disable post build checks: https://en.opensuse.org/openSUSE:Packaging_checks
BuildRequires:	-post-build-checks
Requires: net-tools-deprecated
%else
	%define apache_conf_d /etc/httpd/conf.d
	%define apache_vhosts_d /etc/httpd/conf.d
	%define apache_user apache
	%define apache_group apache
	%define apache_service httpd
    %define apache_package httpd
    %define apache_extra mod_ssl
%endif

Buildarch: noarch
AutoReqProv: no

# RHEL/CentOS 8 no longer provides docker
%if 0%{?centos_version} >= 800 || 0%{?rhel_version} >= 800
Requires: docker-ce >= 1.12
%else
#disabled to allow docker-ce too, we still require docker-compose
#Requires: docker >= 1.12
%endif
Requires: docker-compose >= 1.10.0
Requires: %{apache_package} >= 2.4
%if "%{?apache_extra}" != ""
# require mod_ssl so we can patch include of Rocket.Chat proxy into it
Requires: %{apache_extra}
%endif

%post
# change owner of Rocket.Chat data-directory to 65533 used by container
chown -R 65533:65533 /var/lib/egroupware/default/rocketchat

case "$1" in
  1)# This is an initial install.
	# enable and start docker
	systemctl enable docker
	systemctl status docker || systemctl start docker

	cd %{etc_dir}
	# create docker-compose.override.yml from latest-docker-compose.override.yml
    cp latest-docker-compose.override.yml docker-compose.override.yml

    # if HTTP_HOST given, patch docker-compose.override.yml with it and install and integrate Rocket.Chat into EGroupware
	test -z "$HTTP_HOST" || {
		sed -i %{etc_dir}/docker-compose.override.yml \
			-e "s#ROOT_URL=.*#ROOT_URL=https://${HTTP_HOST}/#g"
		./install-rocketchat.sh
	}
    # otherwise use our primary IP (of interface with default route) and leave installation to Rocket.Chat itself
    test -n "$HTTP_HOST" || \
	sed -i %{etc_dir}/docker-compose.override.yml \
		-e "s#ROOT_URL=.*#ROOT_URL=http://$(ifconfig $(netstat -rn|grep ^0.0.0.0|head -1|sed 's/^.* \(.*\)$/\1/g')|grep 'inet '|sed -En 's/.*inet ([0-9.]+).*/\1/p')/#g"

	# start our containers (do NOT fail package installation on error, as this leaves package in a wirded state!)
	echo "y" | docker-compose up -d || true

	# Set up web server and reload it.
	if [ -d /etc/nginx -a -x /usr/sbin/nginx ]
	then
		# initial install: enable egroupware and disable default site
		if [ -z "$2" ]
		then
			[ -d /etc/nginx/app.d ] || mkdir /etc/nginx/app.d
			ln -fs ../../egroupware-rocketchat/nginx.conf /etc/nginx/app.d/egroupware-rocketchat.conf
		fi
	fi
	if [ -d /etc/apache2 -a -x /usr/sbin/a2enmod ]
	then
		# patch include /etc/egroupware-rocketchat/apache.conf into all vhosts
		cd %{apache_vhosts_d}
		for conf in $(grep -ril '<VirtualHost ' .)
		do [ -z "$(grep '/etc/egroupware-rocketchat/apache.conf' $conf)" ] && \
			sed -i 's|</VirtualHost>|\t# Rocket.Chat proxy needs to be included inside vhost\n\tinclude /etc/egroupware-rocketchat/apache.conf\n\n</VirtualHost>|g' $conf && \
			echo "Include /etc/egroupware-rocketchat/apache.conf added to site $conf"
		done
	fi
	;;

  2)# This is an upgrade.
	cd %{etc_dir}
	# if we dont have it, create docker-compose.override.yml
    test -f docker-compose.override.yml || {
      # if we have modifications in docker-compose.yml update created a docker-compose.yml.rpmnew
      test docker-compose.yml.rpmnew -nt docker-compose.yml && {
         # use current docker-compose.yml as .override
         sed "s|version:'2'|version:'3'|" docker-compose.yml > docker-compose.override.yml
         # disabling a couple of settings, which would break with MongoDB 5.0 and Rocket.Chat 5.4
         sed -i  docker-compose.override.yml \
          -e "s|^\( *\)\(- MONGO_.*\)$|\1#\2|" \
          -e "s|^\( *\)\(image: *mongo:.*\)$|\1#\2|" \
          -e "s|^\( *\)\(command: *mongod.*\)$|\1#\2|"
         # and move new .rpmnew in place
         mv docker-compose.yml.rpmnew docker-compose.yml
      } || \
      # otherwise create it from latest-docker-compose.override
      cp latest-docker-compose.override.yml docker-compose.override.yml
    }
    # if docker-compose.yml.rpmnew exists and is newer than docker-compose.yml --> replace it
    test docker-compose.yml.rpmnew -nt docker-compose.yml && {
      mv docker-compose.yml.rpmnew docker-compose.yml
    } || true
    # update to MongoDB to 7.0
    ./update-mongodb.sh 7.0 && {
      # first start old "stable" image, otherwise some indexes are missing when 5.4 starts
      echo "y" | docker-compose up -d || true
      echo "Waiting for old/stable RC to start"
      for i in `seq 1 45`; do echo -n .; sleep 1; done; echo
      docker logs rocketchat
      # on success: disable image overwrite, to get quay.io/egroupware/rocket.chat:stable7 from docker-compose.yml
      sed 's/^\( *\)\(image: *.*rocket.chat.*\)$/\1#\2/g' -i docker-compose.override.yml
      # remove mongo service overwrites, as docker-compose.yml has everything for 7.0
      sed -e '/^ *mongo:/,+99d' -i docker-compose.override.yml
    } || {
      true # do nothing as RC 7.x still supports MongoDB 5.0, it's only deprecated
    }
	# (re-)start our containers (do NOT fail package installation on error, as this leaves package in a wired state!)
	docker-compose pull && \
	echo "y" | docker-compose up -d || true
	;;
esac

# reload the webserver
if [ -d /etc/nginx -a -x /usr/sbin/nginx ]
then
	nginx -s reload
fi
if [ -d /etc/apache2 -a -x /usr/sbin/a2enmod ]
then
	systemctl enable %{apache_service}
	# openSUSE/SLES require proxy modules to be enabled first, RHEL/CentOS does not require nor have a2enmod
	[ -x /usr/sbin/a2enmod ] && {
		a2enmod proxy
		a2enmod proxy_http
		a2enmod proxy_wstunnel
		a2enmod rewrite
	}
	systemctl restart %{apache_service}
fi

%preun
case "$1" in
  0)# This is an un-installation.
	if [ -d /etc/apache2 -a -x /usr/sbin/a2enmod ]
	then
		cd /etc/apache2/sites-available
		for conf in $(grep -li 'include /etc/egroupware-rocketchat/apache.conf' *.conf)
		do
			sed -i 's|\t# Rocket.Chat proxy needs to be included inside vhost\n\tinclude /etc/egroupware-rocketchat/apache.conf||g' $conf && \
				echo "Include /etc/egroupware-rocketchat/apache.conf removed from site $conf"
		done
		webserver_soft_reload apache2
	fi
	if [ -d /etc/nginx -a -x /usr/sbin/nginx ]
	then
		rm -f /etc/nginx/app.d/egroupware-rocketchat.conf
		nginx -s reload
	fi
	cd %{etc_dir}
	docker-compose rm -fs
	;;

  1)# This is an upgrade.
    # Do nothing.
    :
  ;;
esac

%description
This package installs Docker and docker-compose and use it to run Rocket.Chat
via the container quay.io/egroupware/rocket.chat:stable.

%prep
%setup -n %{name}

%build

%install
mkdir -p $RPM_BUILD_ROOT%{etc_dir}
install -m 644 docker-compose.yml $RPM_BUILD_ROOT%{etc_dir}
install -m 644 docker-compose.override.yml $RPM_BUILD_ROOT%{etc_dir}/latest-docker-compose.override.yml
install -m 644 apache.conf $RPM_BUILD_ROOT%{etc_dir}
install -m 644 nginx.conf $RPM_BUILD_ROOT%{etc_dir}
install -m 700 install-rocketchat.sh $RPM_BUILD_ROOT%{etc_dir}
install -m 700 update-mongodb.sh $RPM_BUILD_ROOT%{etc_dir}
install -m 700 change-site-url.sh $RPM_BUILD_ROOT%{etc_dir}
install -m 644 mongodump-rocketchat-5.4.gz $RPM_BUILD_ROOT%{etc_dir}
mkdir -p $RPM_BUILD_ROOT/var/lib/egroupware/default/rocketchat/uploads

mkdir -p $RPM_BUILD_ROOT%{apache_conf_d}
ln -s %{etc_dir}/apache.conf $RPM_BUILD_ROOT%{apache_conf_d}/egroupware-rocketchat.conf
%if "%{apache_conf_d}" != "%{apache_vhost_d}"
mkdir -p $RPM_BUILD_ROOT%{apache_vhosts_d}
%endif

%files
%defattr(-,root,root)
%{etc_dir}
%config(noreplace) %{etc_dir}/apache.conf
%config(noreplace) %{etc_dir}/nginx.conf
%config(noreplace) %{etc_dir}/docker-compose.yml
%{etc_dir}/latest-docker-compose.override.yml
%{apache_conf_d}
%if "%{apache_conf_d}" != "%{apache_vhost_d}"
%{apache_vhosts_d}
%endif
/var/lib/egroupware/default/rocketchat/uploads
openSUSE Build Service is sponsored by