diff --git a/dist/docker/Dockerfile b/dist/docker/Dockerfile new file mode 100644 index 0000000000..d277deecbd --- /dev/null +++ b/dist/docker/Dockerfile @@ -0,0 +1,35 @@ +FROM fedora:31 + +RUN dnf -y erase vim-minimal +RUN dnf -y install kdelibs-webkit prison qjson libical xapian-core boost-program-options dbus-x11 grantlee xorg-x11-font* mariadb-server qt-mysql kde-runtime \ + mesa-dri-drivers xorg-x11-drv-intel xerces-c boost sudo vim \ + cyrus-sasl cyrus-sasl-plain \ + gtk2 qt-common libnotify libxdg-basedir gnupg2-smime pinentry-qt gdb \ + qt-qdbusviewer +#So we have at least some icons in zanshin until we manage to figure out how to configure the theme properly +#Qt probably thinks we're gnome for some reason, which breaks QIconLoader +RUN dnf -y install gnome-icon-theme + +RUN dnf -y copr enable cmollekopf/kolab-desktop-client +RUN dnf -y install kdepimlibs-devel akonadi-devel make gcc cmake copr-rpmbuild kdelibs-webkit-devel libkolab-devel libkolabxml-devel baloo-devel grantlee-devel libxslt-devel cyrus-sasl-devel kdelibs-devel libical-devel qjson-devel gpgme-devel boost-devel xapian-core-devel + +#Without this installing languages will not work +RUN echo '%_install_langs all' > /etc/rpm/macros.image-language-conf +RUN dnf -y install kde-l10n-de + +RUN rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime + +RUN dbus-uuidgen --ensure + +RUN useradd -d /home/developer -m developer +RUN echo 'developer ALL=NOPASSWD: ALL' >> /etc/sudoers + +ADD kdeenv.sh /home/developer/kdeenv.sh +ADD setupdbus.sh /home/developer/setupdbus.sh +ADD entrypoint.sh /home/developer/entrypoint.sh +ADD bashrc /home/developer/.bashrc +ADD build.sh /home/developer/build.sh + +USER developer +ENV HOME /home/developer +CMD /bin/bash diff --git a/dist/docker/Makefile b/dist/docker/Makefile new file mode 100644 index 0000000000..2079662cfb --- /dev/null +++ b/dist/docker/Makefile @@ -0,0 +1,15 @@ +SOURCEDIR=~/src/ +BUILDDIR=~/src/build/ +INSTALLDIR=~/src/install/kontact/ +NAME=kontactdev + +build: + docker build -t ${NAME} . + +rebuild: + docker build --no-cache -t ${NAME} . + +run: + docker run --rm -ti --userns=keep-id --security-opt=label=type:container_runtime_t \ + -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/dri/card0:/dev/dri/card0 -e DISPLAY \ + -v ${SOURCEDIR}:/src -v ${BUILDDIR}:/build -v ${INSTALLDIR}:/install -w /build/ ${NAME} '/bin/bash' diff --git a/dist/docker/bashrc b/dist/docker/bashrc new file mode 100644 index 0000000000..f9775d56dd --- /dev/null +++ b/dist/docker/bashrc @@ -0,0 +1 @@ +source ~/entrypoint.sh diff --git a/dist/docker/build.sh b/dist/docker/build.sh new file mode 100755 index 0000000000..4eeac88f9e --- /dev/null +++ b/dist/docker/build.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +cd /build/kdepimlibs/ +cmake -DCMAKE_PREFIX_PATH=/install -DCMAKE_INSTALL_PREFIX=/install -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=debug \ + -DKDEPIM_NO_KCAL=TRUE -DKDEPIM_NO_KRESOURCES=TRUE \ + /src/kdepimlibs/ +make -j5 install + +cd /build/kdepim-runtime/ +cmake -DCMAKE_PREFIX_PATH=/install -DCMAKE_INSTALL_PREFIX=/install -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=debug \ + -DDISABLE_ALL_OPTIONAL_SUBDIRECTORIES=TRUE -DBUILD_kolab=TRUE -DBUILD_mixedmaildir=TRUE -DBUILD_maildir=TRUE \ + /src/kdepim-runtime/ +make -j5 install + + +cd /build/kdepim/ +cmake -DCMAKE_PREFIX_PATH=/install -DCMAKE_INSTALL_PREFIX=/install -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=debug \ + -DKDEPIM_BUILD_MOBILE=FALSE -DKDEPIM_MOBILE_UI=FALSE -DDISABLE_ALL_OPTIONAL_SUBDIRECTORIES=TRUE \ + -DBUILD_korganizer=TRUE -DBUILD_kmail=TRUE -DBUILD_korgac=TRUE -DBUILD_kaddressbook=TRUE \ + -DBUILD_kontact=TRUE -DBUILD_kaddressbook=TRUE -DBUILD_doc=TRUE -DBUILD_akonadiconsole=TRUE \ + -DBUILD_messagecomposer=TRUE -DBUILD_mailimporter=TRUE -DBUILD_sieveeditor=TRUE -DBUILD_importwizard=TRUE \ + -DBUILD_agents=TRUE -DBUILD_sendlateragent=TRUE -DBUILD_archivemailagent=TRUE -DBUILD_mailfilteragent=TRUE \ + -DBUILD_kleopatra=TRUE -DDISABLE_ALL_OPTIONAL_PLUGINS=TRUE \ + /src/kdepim/ +make -j5 install + diff --git a/dist/docker/entrypoint.sh b/dist/docker/entrypoint.sh new file mode 100755 index 0000000000..73e5a3968c --- /dev/null +++ b/dist/docker/entrypoint.sh @@ -0,0 +1,25 @@ +source ~/kdeenv.sh +source ~/setupdbus.sh +# Use same graphics system as host, since we'll share the X11 socket +export QT_GRAPHICSSYSTEM=native +export QT_X11_NO_MITSHM=1 +# Give access to graphics card. Alternatively add user to group video +sudo setfacl -m user:developer:rw /dev/dri/card0 + +# Disable KCrash, so we can get a backtrace using gdb +export KDE_DEBUG=1 + +gpg-agent --daemon --sh + +# kwalletd& +export IMAP_TRACE=1 +akonadictl start &> /tmp/akonadi.output +dbus-monitor --session interface='org.freedesktop.Notifications',member='Notify' &> /tmp/notifications.output & + +# Block until akonadi is started so we don't accidentaly start akonadi again +while ! qdbus org.freedesktop.Akonadi.Control / org.freedesktop.DBus.Peer.Ping; do sleep 1 && echo sleep; done; echo "done" +while ! qdbus org.freedesktop.Akonadi.Resource.akonadi_kolab_resource_0 / org.freedesktop.DBus.Peer.Ping; do sleep 1 && echo sleep; done; echo "done" + +function syncCollection() { + qdbus org.freedesktop.Akonadi.Resource.akonadi_kolab_resource_0 / org.freedesktop.Akonadi.Resource.synchronizeCollection $1 +} diff --git a/dist/docker/kdeenv.sh b/dist/docker/kdeenv.sh new file mode 100755 index 0000000000..9864573090 --- /dev/null +++ b/dist/docker/kdeenv.sh @@ -0,0 +1,38 @@ +function printKDEenv { + echo "KDEHOME: $KDEHOME" + echo "KDEDIR: $KDEDIR" + echo "KDEDIRS: $KDEDIRS" + echo "BUILD_DIR: $BUILD_DIR" + echo "PATH: $PATH" + echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH" + echo "PKG_CONFIG_PATH: $PKG_CONFIG_PATH" + echo "QT_PLUGIN_PATH: $QT_PLUGIN_PATH" +} + +function akonadidb { + mysql --auto-vertical-output -S $XDG_DATA_HOME/akonadi/socket-*/mysql.socket akonadi +} + +export KDEDIR=/install/ +export KDEHOME=$HOME/.kde4src/ +export KDETMP=/tmp/$USER-kde4src +mkdir -p $KDETMP +export KDESYCOCA=/var/tmp/kdesycoca-custom + +export KDEDIRS=$KDEDIR:/usr +export PATH=$KDEDIR/bin:$PATH +export LD_LIBRARY_PATH=$KDEDIR/lib:$KDEDIR/lib64 +export PKG_CONFIG_PATH=$KDEDIR/lib/pkgconfig +export QT_PLUGIN_PATH=$KDEDIR/lib/kde4/plugins:$KDEDIR/lib64/kde4/plugins + +# XDG +export XDG_CONFIG_HOME=$KDEHOME/.config +export XDG_DATA_HOME=$KDEHOME/.local/share +export XDG_CONFIG_DIRS=$KDEDIR/share/config +export XDG_DATA_DIRS=$KDEDIR/share/:/usr/share + +export KDE_FULL_SESSION=true +export KDE_SESSION_UID=`id -ru` +export KDE_SESSION_VERSION=4 +export XDG_CURRENT_DESKTOP=KDE + diff --git a/dist/docker/setupdbus.sh b/dist/docker/setupdbus.sh new file mode 100755 index 0000000000..a36821d4db --- /dev/null +++ b/dist/docker/setupdbus.sh @@ -0,0 +1,30 @@ +unset DBUS_SESSION_BUS_PID + +function setup { + if [ -f ~/dbusenv ] + then + source ~/dbusenv + else + touch ~/dbusenv + fi + + if [ -z "$DBUS_SESSION_BUS_PID" ] + then + dbus-launch --sh-syntax > ~/dbusenv + echo "started dbus" + else + echo "dbus at $DBUS_SESSION_BUS_ADDRESS" + echo "dbus at $DBUS_SESSION_BUS_PID" + + if ps -p $DBUS_SESSION_BUS_PID > /dev/null + then + echo "dbus is running" + else + echo "dbus killed, starting again" + dbus-launch --sh-syntax > ~/dbusenv + echo "started dbus" + fi + fi + source ~/dbusenv +} +setup