ayaports/apk/v3.13/main/collabora/APKBUILD

204 lines
6.7 KiB
Text
Raw Normal View History

2021-06-04 15:24:22 +00:00
# Maintainer: Yves G. <theYinYeti@yalis.fr>
pkgname=collabora-online-server-nodocker
pkgver=4.0.4
pkgrel=0
pkgdesc="Collabora CODE (LibreOffice Online) server for Nextcloud or ownCloud, without Docker"
arch='x86_64'
url="https://www.collaboraoffice.com/code/"
license='MPL'
provides='libreoffice libreoffice-en-US'
makedepends=(bzip2 coreutils curl fontconfig gawk grep gzip libcap sed tar util-linux xz)
# From Dockerfiles install script, minus inotify-tools+psmisc: not actually part of CODE
depends=()
source="
https://www.collaboraoffice.com/repos/CollaboraOnline/CODE/Packages
install
mkcert_example.sh
sysusers
tmpfiles
"
# From debs conffiles
backup=(
opt/collaboraoffice6.0/share/psprint/psprint.conf
etc/apache2/conf-available/loolwsd.conf
etc/loolwsd/loolkitconfig.xcu
etc/loolwsd/loolwsd.xml
etc/nginx/snippets/loolwsd.conf
etc/sysconfig/loolwsd
)
# From debs pre/post scripts
install=install
# From Dockerfile (https://github.com/CollaboraOnline/Docker-CODE), minus i18n files
_upstream_deps='loolwsd code-brand'
# 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.
_upstream_equiv='
adduser =
cpio = cpio
expat = expat
fontconfig = fontconfig
init-system-helpers =
libc6 = gcc-libs
libcap2 = libcap
libcap2-bin = libcap
libcups2 = libcups
libexpat1 =
libgcc1 = gcc-libs
libgl1-mesa-glx = mesa-libgl
libpam0g = pam
libpcre3 =
libpng12-0 = libpng12
libpococrypto60 = poco
libpocofoundation60 = poco
libpocojson60 = poco
libpoconet60 = poco
libpoconetssl60 = poco
libpocoutil60 = poco
libpocoxml60 = poco
libsm6 = libsm
libssl1.0.0 = openssl-1.0
libstdc++6 = gcc-libs
libxcb-render0 = libxcb
libxcb-shm0 = libxcb
libxinerama1 = libxinerama
libxrender1 = libxrender
locales-all = glibc
zlib1g = zlib
'
_upstream_equiv_OLD='
'
_upstream_handle_dep() {
local dep="$1"
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=
if [ -n "$eqv" ]; then
dep="$(sed 's/.*=[[:blank:]]*//' <<<"$eqv")"
[ -n "$dep" ] || return
for seen in "${depends[@]}"; do
[ "$seen" == "$dep" ] && return
done
if [[ "$dep" =~ :// ]]; then
source[${#source[*]}]="$dep"
sha1sums[${#sha1sums[*]}]="SKIP"
else
depends[${#depends[*]}]="$dep"
fi
elif [ -n "$meta" ]; then
dep="$(sed -rn "s#^Filename:[[:blank:]]*(.*/)?#${source[0]%Packages}#p" <<<"$meta")"
for seen in "${source[@]}"; do
[ "$seen" == "$dep" ] && return
done
source[${#source[*]}]="$dep"
sha1sums[${#sha1sums[*]}]="$(sed -rn "s#^SHA1:[[:blank:]]*##p" <<<"$meta")"
while read dep; do if [ -n "$dep" ]; then
_upstream_handle_dep "$dep"
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
}
if [ ${#source[*]} -eq 5 ]; then
curl -s "${source[0]}" >Packages
pkgver=$(
awk -F$'\n' -vRS= '/^Package:[[:blank:]]*loolwsd\n/{print}' Packages \
| sed -n 's/^Version:[[:blank:]]*\(.*\)-.*/\1/p'
)
for dep in $_upstream_deps; do
_upstream_handle_dep "$dep"
done
fi
unset _upstream_handle_dep _upstream_equiv _upstream_deps
package() {
local data= f=
cd "$pkgdir"
for f in "$srcdir"/*.deb; do
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
chown -R $(id -nu):$(id -ng) .
# /lib is deprecated
mv {lib,usr/lib}
# use systemd for user allocation
install -Dm0644 "$srcdir"/sysusers usr/lib/sysusers.d/$pkgname.conf
# replace cron with systemd
rm -rf etc/cron.d
install -Dm0644 "$srcdir"/tmpfiles usr/lib/tmpfiles.d/$pkgname.conf
# 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 -Dm0644 "$srcdir"/mkcert_example.sh usr/share/doc/loolwsd/example.mkcert.sh
# actually provide libreoffice, without conflicting with Archlinux libreoffice
mkdir -p usr/share/applications
sed -i 's#^Exec=collaboraoffice6.0#Exec=/opt/collaboraoffice6.0/program/soffice#' \
opt/collaboraoffice6.0/share/xdg/*
ls -1 opt/collaboraoffice6.0/share/xdg \
| while read f; do
case "$f" in
base.desktop)
icon=/usr/share/loolwsd/loleaflet/dist/images/lc_basicshapes.can.svg ;;
calc.desktop)
icon=/usr/share/loolwsd/loleaflet/dist/images/x-office-spreadsheet.svg ;;
draw.desktop)
icon=/usr/share/loolwsd/loleaflet/dist/images/lc_gallery.svg ;;
impress.desktop)
icon=/usr/share/loolwsd/loleaflet/dist/images/x-office-presentation.svg ;;
math.desktop)
icon=/usr/share/loolwsd/loleaflet/dist/images/lc_symbolshapes.brace-pair.svg ;;
writer.desktop)
icon=/usr/share/loolwsd/loleaflet/dist/images/x-office-document.svg ;;
*)
icon=/usr/share/loolwsd/loleaflet/dist/images/toolbar-bg.svg ;;
esac
sed -i "s#^Icon=.*#Icon=${icon}#" opt/collaboraoffice6.0/share/xdg/"$f"
mv opt/collaboraoffice6.0/share/xdg/"$f" usr/share/applications/"collaboraoffice-$f"
done
rm -rf opt/collaboraoffice6.0/share/xdg
# https://github.com/CollaboraOnline/Docker-CODE/issues/32
[ -d etc/sysconfig ] || mkdir etc/sysconfig
echo 'SLEEPFORDEBUGGER=0' >>etc/sysconfig/loolwsd
}