collabora-online-server-nod.../PKGBUILD

254 lines
8.3 KiB
Bash
Raw Normal View History

2017-10-06 14:51:18 +02:00
# Maintainer: Yves G. <theYinYeti@yalis.fr>
# Choose which language(s) to package (in addition to “en-us”)
# This is a “full-line” extended regular-expression, eg.: 'pt' if you want “pt” but not “pt-br” or “pt-pt”
_I18N_EREGEX='.*'
_pkgname=collabora-online-server-nodocker
2020-11-08 19:32:58 +01:00
# taking version of loolwsd:
2021-10-05 08:58:35 +02:00
pkgver=6.4.11
pkgrel=1
2017-10-06 14:51:18 +02:00
arch=('x86_64')
url="https://www.collaboraoffice.com/code/"
license=('MPL')
2021-05-23 13:41:41 +02:00
makedepends=(curl fontconfig libcap)
# ↑ excluding base (bzip2 coreutils gawk grep gzip sed systemd tar util-linux xz)
2018-05-12 18:51:37 +02:00
2019-08-08 14:58:09 +02:00
optdepends=(
'hunspell: Use with language-specific hunspell dictionaries for LibreOffice spell-check'
'hyphen: Use with language-specific hyphen rules for LibreOffice hyphenation'
)
2019-03-09 21:44:22 +01:00
# From Dockerfiles install script, minus inotify-tools+psmisc: not actually part of CODE
depends=()
2017-10-06 14:51:18 +02:00
source=(
'https://www.collaboraoffice.com/repos/CollaboraOnline/CODE/Packages'
install
mkcert_example.sh
sysusers
tmpfiles
)
sha1sums=(
'SKIP'
2021-05-23 13:41:41 +02:00
'876319e04146b36bd53b06e14917c86cb8ec6acc'
'3fe2db88f4f7ee203520c59760582103d3e41210'
2017-10-06 14:51:18 +02:00
'2d271f9493ea14c675af1bfa76f6b654569dd51f'
'f9c102a06b2582548f13121e78790237e2cb38e1'
)
2018-05-12 18:51:37 +02:00
# From debs conffiles
2017-10-06 14:51:18 +02:00
backup=(
2019-03-09 21:44:22 +01:00
etc/apache2/conf-available/loolwsd.conf
2017-10-06 14:51:18 +02:00
etc/loolwsd/loolkitconfig.xcu
etc/loolwsd/loolwsd.xml
2019-03-09 21:44:22 +01:00
etc/nginx/snippets/loolwsd.conf
etc/sysconfig/loolwsd
2017-10-06 14:51:18 +02:00
)
2018-05-12 18:51:37 +02:00
# From debs pre/post scripts
2017-10-06 14:51:18 +02:00
install=install
2018-05-12 18:51:37 +02:00
# From Dockerfile (https://github.com/CollaboraOnline/Docker-CODE), minus i18n files
_upstream_deps=(loolwsd code-brand)
2018-05-12 18:51:37 +02:00
# DEBIANARCHLINUX EQUIVALENCES
#
# In case of a new upstream release:
#
# 1. Move all lines from $_upstream_equiv to $_upstream_equiv_OLD.
#
# 2. Run `makepkg -s` iteratively:
# * Each time a dependency is missing, move it back from $_upstream_equiv_OLD to $_upstream_equiv.
# * If a dependency is new, add a new line in $_upstream_equiv with nothing after the “=” sign.
#
# 3. When the package is done, in a terminal run: ./missing-deps.sh
#
# 4. For each “not found” line:
# * If the missing file should be provided by a new dependency in $_upstream_equiv,
# then put after the “=” sign the name of an Archlinux package that provides this file;
# you may need to create the package if it does not exist (usually old versions).
# * Else the missing file is probably expected to be present on any Debian/Ubuntu system;
# thus add the missing dependency in the $depends array.
2017-10-06 14:51:18 +02:00
_upstream_equiv='
adduser =
2019-03-09 21:44:22 +01:00
cpio = cpio
expat = expat
2017-10-06 14:51:18 +02:00
fontconfig = fontconfig
init-system-helpers =
libc6 = gcc-libs
libcap2 = libcap
libcap2-bin = libcap
libgcc1 = gcc-libs
2018-01-28 21:07:31 +01:00
libpam0g = pam
2017-10-06 14:51:18 +02:00
libpng12-0 = libpng12
libssl1.0.0 = openssl-1.0
libstdc++6 = gcc-libs
2020-11-08 19:32:58 +01:00
openssh-client = openssh
2020-12-14 21:14:11 +01:00
systemd = systemd
2017-12-31 16:20:58 +01:00
zlib1g = zlib
2017-10-06 14:51:18 +02:00
'
2018-05-12 18:51:37 +02:00
_upstream_equiv_OLD='
2020-11-08 19:32:58 +01:00
locales-all = glibc
2018-05-12 18:51:37 +02:00
'
2019-08-08 14:58:09 +02:00
_main_debs=
_i18n_debs=
declare -A __main_debs __i18n_debs
2019-08-08 14:58:09 +02:00
# >>>> START OF DYNAMIC ADAPTATION OF PKGBUILD
2017-10-06 14:51:18 +02:00
_upstream_handle_dep() {
local dep="$2"
2017-10-06 14:51:18 +02:00
local eqv="$(grep "^[[:blank:]]*$(sed 's/[.]/\\\0/g' <<<"$dep")[[:blank:]]*=" <<<"$_upstream_equiv")"
local meta="$(awk -F$'\n' -vRS= "/^Package:[[:blank:]]*$(sed 's/[.]/\\\0/g' <<<"$dep")\\n/{print}" Packages)"
local seen depurl
2017-10-06 14:51:18 +02:00
if [ -n "$eqv" ]; then
dep="$(sed 's/.*=[[:blank:]]*//' <<<"$eqv")"
[ -n "$dep" ] || return
for seen in "${depends[@]}"; do
[ "$seen" == "$dep" ] && return
done
depends+=("$dep")
2017-10-06 14:51:18 +02:00
elif [ -n "$meta" ]; then
depurl="$(sed -rn "s#^Filename:[[:blank:]]*(.*/)?#${source[0]%Packages}#p" <<<"$meta")"
2017-10-06 14:51:18 +02:00
for seen in "${source[@]}"; do
[ "$seen" == "$depurl" ] && return
2017-10-06 14:51:18 +02:00
done
2020-11-08 19:32:58 +01:00
# when a new .DEB is needed, put it in the right array of dependencies
[ $1 == main ] && __main_debs[$dep]="$depurl" || __i18n_debs[$dep]="$depurl"
source+=("$depurl")
sha1sums+=("$(sed -rn "s#^SHA1:[[:blank:]]*##p" <<<"$meta")")
2017-10-06 14:51:18 +02:00
while read dep; do if [ -n "$dep" ]; then
_upstream_handle_dep "$1" "$dep"
2017-10-06 14:51:18 +02:00
fi; done < <(
sed -rn "s#^Depends:[[:blank:]]*##p" <<<"$meta" \
| sed 's#([^)]*)##g; s#[[:blank:]]*,[[:blank:]]*#\n#g'
)
else
echo "Unknown dependency: $dep" >&2; exit 1
fi
}
2019-03-09 21:44:22 +01:00
if [ ${#source[*]} -eq 5 ]; then
2017-10-06 14:51:18 +02:00
curl -s "${source[0]}" >Packages
pkgver=$(
awk -F$'\n' -vRS= '/^Package:[[:blank:]]*loolwsd\n/{print}' Packages \
| sed -n 's/^Version:[[:blank:]]*\(.*\)-.*/\1/p'
)
2020-11-08 19:32:58 +01:00
# first register each .DEB as an unconfirmed main (i.e. not i18n) dependency
for d in "${_upstream_deps[@]}"; do __main_debs[$d]=_pending_; done
if [ -z "$_I18N_EREGEX" ]; then
2020-11-08 19:32:58 +01:00
# go with that if no i18n has been requested
pkgname=$_pkgname
eval 'package() { _main_package; }'
else
2020-11-08 19:32:58 +01:00
# else register the function for building the main package, and dynamically discover i18n packages
pkgname=($_pkgname)
eval "package_$_pkgname() { _main_package; }"
for p in $( \
sed -nr 's#^Package:[[:blank:]]*((collaboraoffice[0-9.]+-dict|collaboraofficebasis[0-9.]+)-[a-z]{2}(-[a-z]+)?)$#\1#p' Packages \
| grep -ve '-en-us$' \
| grep -E "[0-9.]+(-dict)?-($_I18N_EREGEX)\$")
do
2020-11-08 19:32:58 +01:00
# for each .DEB file found that matches the requested i18n regex, register that .DEB as a i18n one
__i18n_debs[$p]=_pending_
done
while read l; do
2020-11-08 19:32:58 +01:00
# and register the function for building each of the i18n packages
pkgname+=(${_pkgname}_${l})
eval "package_${_pkgname}_${l}() { _i18n_package $l; }"
done < <( \
2020-11-08 19:32:58 +01:00
sed -nr 's#^Package:[[:blank:]]*(collaboraoffice[0-9.]+-dict-|collaboraofficebasis[0-9.]+-)([a-z]{2}(-[a-z]+)?)$#\2#p' Packages \
| grep -vxF en-us \
| sort -u \
| grep -Exe "$_I18N_EREGEX")
fi
for dep in "${!__main_debs[@]}"; do
2020-11-08 19:32:58 +01:00
# recursive dependencies for the main package
_upstream_handle_dep main "$dep"
done
for dep in "${!__i18n_debs[@]}"; do
2020-11-08 19:32:58 +01:00
# recursive dependencies for the i18n packages
_upstream_handle_dep i18n "$dep"
2017-10-06 14:51:18 +02:00
done
_main_debs="$(IFS='|'; echo "${__main_debs[*]}")"
_i18n_debs="$(IFS='|'; echo "${__i18n_debs[*]}")"
2017-10-06 14:51:18 +02:00
fi
2020-11-08 19:32:58 +01:00
# some debug:
echo "MAIN DEBs: $_main_debs" >&2
echo "I18N DEBs: $_i18n_debs" >&2
unset _upstream_handle_dep _upstream_equiv _upstream_deps __main_debs __i18n_debs
2019-08-08 14:58:09 +02:00
# <<<< END OF DYNAMIC ADAPTATION OF PKGBUILD
2017-10-06 14:51:18 +02:00
_i18n_package() {
depends=()
backup=()
install=
pkgdesc="Language ${1} internationalization files for Collabora CODE (LibreOffice Online)"
local data f
2017-10-06 14:51:18 +02:00
cd "$pkgdir"
while read f; do
[[ "$f" =~ [0-9.]+(-dict)?-$1 ]] || continue
f="$srcdir/$(basename "$f")"
2017-10-06 14:51:18 +02:00
data="$(ar t "$f" | grep ^data)"
case "$data" in
*.bz2) ar p "$f" "$data" | tar -xjf - ;;
*.gz) ar p "$f" "$data" | tar -xzf - ;;
*.xz) ar p "$f" "$data" | tar -xJf - ;;
*) echo "Unknown file format: $data" >&2; exit 1 ;;
esac
done < <(tr '|' '\n' <<<"$_i18n_debs")
chown -R $(id -nu):$(id -ng) .
}
_main_package() {
pkgdesc="Collabora CODE (LibreOffice Online) server for Nextcloud or ownCloud, without Docker"
local data f
cd "$pkgdir"
while read f; do
f="$srcdir/$(basename "$f")"
data="$(ar t "$f" | grep ^data)"
case "$data" in
*.bz2) ar p "$f" "$data" | tar -xjf - ;;
*.gz) ar p "$f" "$data" | tar -xzf - ;;
*.xz) ar p "$f" "$data" | tar -xJf - ;;
*) echo "Unknown file format: $data" >&2; exit 1 ;;
esac
done < <(tr '|' '\n' <<<"$_main_debs")
2017-12-31 16:20:58 +01:00
chown -R $(id -nu):$(id -ng) .
2017-10-06 14:51:18 +02:00
# /lib is deprecated
mv {lib,usr/lib}
# use systemd for user allocation
2020-11-08 19:32:58 +01:00
install -Dm0644 "$srcdir"/sysusers usr/lib/sysusers.d/$_pkgname.conf
2017-10-06 14:51:18 +02:00
# replace cron with systemd
rm -rf etc/cron.d
2020-11-08 19:32:58 +01:00
install -Dm0644 "$srcdir"/tmpfiles usr/lib/tmpfiles.d/$_pkgname.conf
2017-10-06 14:51:18 +02:00
# add dependency on systemd
sed -i '/^\[Unit\]/ a \
After=systemd-tmpfiles-setup.service' usr/lib/systemd/system/loolwsd.service
# keep the cert-making script from the Dockerfile for reference
install -Dm0755 "$srcdir"/mkcert_example.sh usr/share/doc/loolwsd/example.mkcert.sh
2017-10-06 14:51:18 +02:00
# do not provide libreoffice for the desktop (seems broken…)
2020-11-08 19:32:58 +01:00
rm -rf opt/collaboraoffice6.4/share/xdg
2017-10-06 14:51:18 +02:00
2019-08-08 14:58:09 +02:00
# fix lib + desktop files permissions
2020-11-08 19:32:58 +01:00
chmod a+x opt/collaboraoffice6.4/program/lib*.so
2019-08-08 14:58:09 +02:00
2019-03-09 21:44:22 +01:00
# https://github.com/CollaboraOnline/Docker-CODE/issues/32
[ -d etc/sysconfig ] || mkdir etc/sysconfig
echo 'SLEEPFORDEBUGGER=0' >>etc/sysconfig/loolwsd
2017-10-06 14:51:18 +02:00
}