diff --git a/docker/roundcube/rootfs/opt/app-root/src/build.sh b/docker/roundcube/rootfs/opt/app-root/src/build.sh index ddd91e04..3e4ade20 100755 --- a/docker/roundcube/rootfs/opt/app-root/src/build.sh +++ b/docker/roundcube/rootfs/opt/app-root/src/build.sh @@ -1,62 +1,61 @@ #!/bin/bash set -e set -x pushd /opt/app-root/src/ # Clone what we don't find (roundcubemail-skin-elastic is not publicly available, so can't be included this way) if [ ! -d roundcubemail ]; then - # Push this branch on an apheleia-it repo - git clone --branch dev/kolab-1.5 https://github.com/cmollekopf/roundcubemail.git roundcubemail + git clone --branch dev/kolab-1.5 https://git.kolab.org/source/roundcubemail.git roundcubemail fi if [ ! -d roundcubemail-plugins-kolab ]; then git clone --branch master https://git.kolab.org/diffusion/RPK/roundcubemail-plugins-kolab.git roundcubemail-plugins-kolab fi if [ ! -d syncroton ]; then git clone --branch master https://git.kolab.org/diffusion/S/syncroton.git syncroton fi if [ ! -d iRony ]; then git clone --branch master https://git.kolab.org/source/iRony.git iRony fi if [ ! -d chwala ]; then git clone --branch master https://git.kolab.org/diffusion/C/chwala.git chwala fi if [ ! -d autoconf ]; then git clone --branch master https://git.kolab.org/diffusion/AC/autoconf.git autoconf fi if [ ! -d freebusy ]; then git clone --branch master https://git.kolab.org/diffusion/F/freebusy.git freebusy fi pushd roundcubemail cp /opt/app-root/src/composer.json composer.json rm -rf vendor/ composer.lock php -dmemory_limit=-1 $(command -v composer) install cd /opt/app-root/src/ ./update.sh cd /opt/app-root/src/roundcubemail # Adjust the configs sed -i -r \ -e "s/'vlv'(\s+)=> false,/'vlv'\1=> true,/g" \ -e "s/'vlv_search'(\s+)=> false,/'vlv_search'\1=> true,/g" \ -e "s/inetOrgPerson/inetorgperson/g" \ -e "s/kolabInetOrgPerson/inetorgperson/g" \ config/*.inc.php sed -i -r -e "s|\$config\['enigma_pgp_homedir'\] = .*$|\$config['enigma_pgp_homedir'] = '/tmp/';|g" config/enigma.inc.php sed -i -r -e "s|\$config\['enigma_passwordless'\] = .*$|\$config['enigma_passwordless'] = true;|g" config/enigma.inc.php sed -i -r -e "s|\$config\['enigma_multihost'\] = .*$|\$config['enigma_multihost'] = true;|g" config/enigma.inc.php echo "\$config['enigma_woat'] = true;" >> config/enigma.inc.php sed -i -r -e "s|\$config\['managesieve_host'\] = .*$|\$config['managesieve_host'] = 'kolab';|g" config/managesieve.inc.php popd # Set the php timezone sed -i -r -e 's|^(;*)date\.timezone.*$|date.timezone = Europe/Zurich|g' /etc/php.ini # Allow environment variables from fpm sed -i -e "s/;clear_env/clear_env/" /etc/php-fpm.d/www.conf diff --git a/docker/roundcube/rootfs/opt/app-root/src/init.sh b/docker/roundcube/rootfs/opt/app-root/src/init.sh index 13d080df..46890c2f 100755 --- a/docker/roundcube/rootfs/opt/app-root/src/init.sh +++ b/docker/roundcube/rootfs/opt/app-root/src/init.sh @@ -1,69 +1,71 @@ #!/bin/bash set -e set -x pushd /opt/app-root/src/ # FIXME doesn't work in rootless # sed -i -r -e "s|service_bind_pw = .*$|service_bind_pw = $LDAP_SERVICE_BIND_PW|g" /etc/kolab/kolab.conf pushd roundcubemail ## Copy our configs over the default ones cp /etc/roundcubemail/* config/ DES_KEY=$(openssl rand -base64 24); sed -i -r -e "s|\$config\['des_key'\] = .*$|\$config['des_key'] = \"$DES_KEY\";|g" config/config.inc.php # Initialize the db cat > /tmp/kolab-setup-my.cnf << EOF [client] host=${DB_HOST} user=root password=${DB_ROOT_PASSWORD} EOF mysql --defaults-file=/tmp/kolab-setup-my.cnf </dev/null 2>&1 || : done fi done -# FIXME should we be runnin updates? -# bin/updatedb.sh --dir SQL/ --package roundcube -# bin/updatedb.sh --dir plugins/libkolab/SQL/ --package libkolab -# bin/updatedb.sh --dir plugins/calendar/SQL/ --package calendar - popd roundcubemail/bin/initdb.sh --dir syncroton/docs/SQL/ || : roundcubemail/bin/initdb.sh --dir chwala/doc/SQL/ || : +echo "Updating tables..." +roundcubemail/bin/updatedb.sh --dir syncroton/docs/SQL/ --package syncroton || : +roundcubemail/bin/updatedb.sh --dir roundcubemail/SQL/ --package roundcube || : +roundcubemail/bin/updatedb.sh --dir roundcubemail/plugins/libkolab/SQL/ --package libkolab || : +roundcubemail/bin/updatedb.sh --dir roundcubemail/plugins/kolab-calendar/SQL/ --package calendar-kolab || : + echo "" echo "Done, starting httpd..." /usr/sbin/php-fpm exec httpd -DFOREGROUND diff --git a/docker/roundcube/rootfs/opt/app-root/src/update-from-source.sh b/docker/roundcube/rootfs/opt/app-root/src/update-from-source.sh index 956d82da..803ce7a6 100755 --- a/docker/roundcube/rootfs/opt/app-root/src/update-from-source.sh +++ b/docker/roundcube/rootfs/opt/app-root/src/update-from-source.sh @@ -1,36 +1,36 @@ #!/bin/bash -#Update from source (rather then via composer which updates to the latest commit) +#Update from source (rather than via composer which updates to the latest commit) for repo in roundcubemail syncroton iRony chwala autoconf freebusy do if [ -d /src.orig/$directory ]; then rsync -av \ --no-links \ --exclude=vendor \ --exclude=temp \ --exclude=config \ --exclude=logs \ --exclude=.git \ --exclude=config.inc.php \ --exclude=composer.json \ --exclude=composer.lock \ /src.orig/$directory/ /opt/app-root/src/$directory fi done pushd /src.orig/roundcubemail-plugins-kolab/plugins for plugin in $(ls -1d) do if [ -d /opt/app-root/src/roundcubemail/plugins/${plugin}/ ]; then rsync -av \ --exclude=vendor \ --exclude=composer.json \ --exclude=config.inc.php \ $plugin/ /opt/app-root/src/roundcubemail/plugins/$plugin fi done popd ./reload.sh diff --git a/docker/roundcube/rootfs/opt/app-root/src/update.sh b/docker/roundcube/rootfs/opt/app-root/src/update.sh index ce498857..9f256b88 100755 --- a/docker/roundcube/rootfs/opt/app-root/src/update.sh +++ b/docker/roundcube/rootfs/opt/app-root/src/update.sh @@ -1,220 +1,213 @@ #!/bin/bash set -e set -x # Look for local repositories for repo in roundcubemail roundcubemail-plugins-kolab roundcubemail-skin-elastic syncroton iRony chwala autoconf freebusy do if [ -d /src.orig/$repo ]; then rsync -av \ --exclude=vendor \ --exclude=temp \ --exclude=logs \ --exclude=composer.lock \ /src.orig/$repo/ /opt/app-root/src/$repo fi done pushd /opt/app-root/src/ LESSC=/usr/local/bin/lessc SKINS=(kolab plesk) pushd roundcubemail cp /opt/app-root/src/composer.json composer.json php -dmemory_limit=-1 $(command -v composer) update bin/install-jsdeps.sh # May require an "npm install less" and "npm install less-plugin-clean-css" pushd skins/elastic $LESSC -x styles/styles.less > styles/styles.css $LESSC -x styles/print.less > styles/print.css $LESSC -x styles/embed.less > styles/embed.css popd $LESSC --clean-css="--s1 --advanced" --rewrite-urls=all plugins/libkolab/skins/elastic/libkolab.less > plugins/libkolab/skins/elastic/libkolab.min.css bin/updatecss.sh --dir skins/elastic popd # Install skins for skin in "${SKINS[@]}"; do if [ -d "roundcubemail-skin-elastic/$skin" ]; then cp -r "roundcubemail-skin-elastic/$skin" roundcubemail/skins/ else echo "Skin $skin is not available" fi done pushd roundcubemail for skin in $(ls -1d skins/* | grep -vE '(classic|elastic|larry)'); do skin=$(basename $skin) # Copy elastic skin over $skin (but don't overwrite what already existis) find \ ./skins/elastic/ \ ./plugins/libkolab/skins/elastic/ \ -type f | sort | while read file; do target_dir=$(dirname ${file} | sed -e 's|%{datadir}|.|g' -e 's|./public_html/assets/|./|g' -e 's|./public_html/assets/plugins/libkolab/|./|g' -e "s/elastic/$skin/g") file_name=$(basename ${file}) echo "Target: $target_dir, file $file_name" if [ ! -d ${target_dir} ]; then mkdir -p ${target_dir} fi if [ ! -f "${target_dir}/${file_name}" ]; then cp -av "${file}" "${target_dir}" fi done # Replace elastic references, but don't change the depends value in meta.json sed -i -e "s/\"elastic\"/\"$skin\"/g" \ $(find skins/$skin/ plugins/libkolab/skins/$skin/ -type f -not -name "meta.json") pushd skins/$skin $LESSC -x styles/styles.less > styles/styles.css $LESSC -x styles/print.less > styles/print.css $LESSC -x styles/embed.less > styles/embed.css popd $LESSC --clean-css="--s1 --advanced" --rewrite-urls=all plugins/libkolab/skins/$skin/libkolab.less > plugins/libkolab/skins/$skin/libkolab.min.css # Compile and compress the CSS #for file in `find . -type f -name "styles.less" -o -name "print.less" -o -name "embed.less" -o -name "libkolab.less"`; do # %{_bindir}/lessc --relative-urls ${file} > $(dirname ${file})/$(basename ${file} .less).css # # sed -i \ # -e "s|../../../skins/plesk/images/contactpic.png|../../../../skins/plesk/images/contactpic.png|" \ # -e "s|../../../skins/plesk/images/watermark.jpg|../../../../skins/plesk/images/watermark.jpg|" \ # $(dirname ${file})/$(basename ${file} .less).css # # cat $(dirname ${file})/$(basename ${file} .less).css #done bin/updatecss.sh --dir "skins/$skin" done ## Configs # Install plugin configs for plugin in $(find plugins/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | sort); do if [ -f "plugins/${plugin}/config.inc.php.dist" ]; then pushd plugins/${plugin} mv config.inc.php.dist ../../config/${plugin}.inc.php rm -f config.inc.php ln -s ../../config/${plugin}.inc.php config.inc.php popd fi done # Copy our configs over the default ones cp /etc/roundcubemail/* config/ DES_KEY=$(openssl rand -base64 24); sed -i -r -e "s|\$config\['des_key'\] = .*$|\$config['des_key'] = \"$DES_KEY\";|g" config/config.inc.php -# Update plugins on update - +# Update plugins pushd /opt/app-root/src/roundcubemail-plugins-kolab/plugins for plugin in $(ls -1d) do if [ -d plugins/${plugin}/ ]; then rsync -av \ --exclude=vendor \ --exclude=composer.json \ --exclude=config.inc.php \ $plugin/ /opt/app-root/src/roundcubemail/plugins/$plugin fi done popd -##Fix permissions +# Fix permissions chmod 777 -R logs chmod 777 -R temp popd # Maybe redo this in case of updates # Install chwala pushd chwala + # Openshift (I think) doesn't handle urls without a trailing slash well. In this case we end up with a 301 redirect to the http url, which breaks the file viewer. patch -p1 <<'EOF' diff --git a/lib/file_api.php b/lib/file_api.php index a2d8db8..f8fa511 100644 --- a/lib/file_api.php +++ b/lib/file_api.php @@ -369,7 +369,7 @@ class file_api extends file_api_core */ public function file_url($file) { - return $this->api_url() . '?method=file_get' + return $this->api_url() . '/?method=file_get' . '&file=' . urlencode($file) . '&token=' . urlencode(session_id()); } EOF rm -f lib/ext/Roundcube lib/drivers/kolab/plugins vendor mkdir -p lib/ext ln -s ../../../roundcubemail/program/lib/Roundcube lib/ext/Roundcube ln -s ../../../../roundcubemail/plugins lib/drivers/kolab/plugins ln -s ../roundcubemail/vendor vendor rm -R config ln -s ../roundcubemail/config config chmod 777 -R cache chmod 777 -R logs popd - # Install iRony pushd iRony rm -f lib/FileAPI lib/Roundcube lib/plugins vendor ln -s ../../chwala/lib lib/FileAPI ln -s ../../roundcubemail/program/lib/Roundcube lib/Roundcube ln -s ../../roundcubemail/plugins lib/plugins ln -s ../roundcubemail/vendor vendor rm -R config ln -s ../roundcubemail/config config mkdir -p logs chmod 777 -R logs mkdir -p temp chmod 777 -R temp popd - # Install syncroton pushd syncroton rm -f lib/ext/Roundcube lib/plugins vendor mkdir -p lib/ext ln -s ../../../roundcubemail/program/lib/Roundcube lib/ext/Roundcube ln -s ../../roundcubemail/plugins lib/plugins ln -s ../roundcubemail/vendor vendor rm -R config ln -s ../roundcubemail/config config chmod 777 -R logs popd # Install autoconf pushd autoconf rm -f vendor ln -s ../roundcubemail/vendor vendor chmod 777 -R logs popd # Install freebusy pushd freebusy rm -f vendor ln -s ../roundcubemail/vendor vendor mkdir -p logs chmod 777 -R logs popd -# Not a good idea during an openshift build -# roundcubemail/bin/updatedb.sh --dir syncroton/docs/SQL/ --package syncroton -# roundcubemail/bin/updatedb.sh --dir roundcubemail/SQL/ --package roundcube -# roundcubemail/bin/updatedb.sh --dir roundcubemail/plugins/libkolab/SQL/ --package libkolab -# roundcubemail/bin/updatedb.sh --dir roundcubemail/plugins/kolab-calendar/SQL/ --package calendar-kolab