2017-10-06 14:51:18 +02:00
|
|
|
|
# Maintainer: Yves G. <theYinYeti@yalis.fr>
|
|
|
|
|
|
2020-04-18 16:56:14 +02:00
|
|
|
|
# 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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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 Dockerfile’s 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=(
|
2017-12-02 16:11:15 +01:00
|
|
|
|
'SKIP'
|
2021-05-23 13:41:41 +02:00
|
|
|
|
'876319e04146b36bd53b06e14917c86cb8ec6acc'
|
2019-12-29 21:56:19 +01:00
|
|
|
|
'3fe2db88f4f7ee203520c59760582103d3e41210'
|
2017-10-06 14:51:18 +02:00
|
|
|
|
'2d271f9493ea14c675af1bfa76f6b654569dd51f'
|
|
|
|
|
'f9c102a06b2582548f13121e78790237e2cb38e1'
|
|
|
|
|
)
|
|
|
|
|
|
2018-05-12 18:51:37 +02:00
|
|
|
|
# From deb’s 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 deb’s 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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
_upstream_deps=(loolwsd code-brand)
|
2018-05-12 18:51:37 +02:00
|
|
|
|
|
|
|
|
|
# DEBIAN–ARCHLINUX 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
|
|
|
|
|
2020-04-18 16:56:14 +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() {
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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)"
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
depends+=("$dep")
|
2017-10-06 14:51:18 +02:00
|
|
|
|
elif [ -n "$meta" ]; then
|
2020-04-18 16:56:14 +02:00
|
|
|
|
depurl="$(sed -rn "s#^Filename:[[:blank:]]*(.*/)?#${source[0]%Packages}#p" <<<"$meta")"
|
2017-10-06 14:51:18 +02:00
|
|
|
|
for seen in "${source[@]}"; do
|
2020-04-18 16:56:14 +02:00
|
|
|
|
[ "$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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
[ $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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
_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-04-18 16:56:14 +02:00
|
|
|
|
|
2020-11-08 19:32:58 +01:00
|
|
|
|
# first register each .DEB as an unconfirmed main (i.e. not i18n) dependency
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
__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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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 \
|
2020-04-18 16:56:14 +02:00
|
|
|
|
| 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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
_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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
_upstream_handle_dep i18n "$dep"
|
2017-10-06 14:51:18 +02:00
|
|
|
|
done
|
2020-04-18 16:56:14 +02:00
|
|
|
|
_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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
|
|
|
|
2020-04-18 16:56:14 +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"
|
|
|
|
|
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
2020-04-18 16:56:14 +02:00
|
|
|
|
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
|
2019-12-29 21:56:19 +01:00
|
|
|
|
install -Dm0755 "$srcdir"/mkcert_example.sh usr/share/doc/loolwsd/example.mkcert.sh
|
2017-10-06 14:51:18 +02:00
|
|
|
|
|
2019-12-29 21:34:45 +01: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
|
|
|
|
}
|