Easily setup a native instance of Onlyoffice documentserver on ArchLinux

For quite a time I was looking into an online office solution, espacially as an integration into my existing Nextcloud service. At first, there was a lot of publicity for the teamup of Collabora Online together with Nextcloud. It’s a more complex solution, which includes a LibreOffice backend and a LeafletJS frontend. On the one hand, I was impressed how feature rich and stable this first experimental version was but on the other hand, the demo instance was also a bit slow and laggy. Further I was unable to get the Docker image up and running on my own server. I always had connection and routing issues, which of course could be caused by my own custom server setup, but Docker made debugging quite difficult for me.

Onlyoffice documentserver Nextcloud integration

Onlyoffice documentserver was a real performance boost in online office editing compared to Collabora Online. I was able to create complex “Power Point” presentations and larger documents for my studies much faster, nearly as good as provided by Google Docs. I only had to install the Onlyoffice app for Nextcloud and find a public available Documentserver instance (the domain doc.onlyoffice.com worked for a while but with a little work you can also find other instances via Google). After that I could easily open any office document directly in Nextcloud.

Create power point presentations directly in Nextcloud

Collaborative editing of publicly shared documents is also planned feature.

Setup an own Documentserver instance

Since I also had no luck with the docker image provided by Onlyoffice, I decided to compile it from source and deploy it manually. Public available documentation on how to do this was sparse but a good start was the offical documentation. After some weeks of tweaking and patching the sources, I was able to create a working PKGBUILD for the ArchLinux AUR. This means, everything you need to do is a simple:

pacaur -S onlyoffice-documentserver

and the Documentserver is ready to go! You can find a more detailed setup instruction in the ArchLinux Wiki. Installing and configuring Redis, Postgresql, RabbitMQ and Nginx, which all are required dependencies, is easy and straightforward. Further assumed you also have a working domain and SSL setup, you can start using the document server in Nextcloud, providing the URL in the application’s preferences.

Onlyoffice Nextcloud app configuration

Alternative and extensive use cases

There are code examples available for all kind of popular programming languages in which you can embed and include the Onlyoffice document editor. If you just want to see the document editor in action, visit this demo page.

Pishare – Erster öffentlicher Webtorrent Index

Fasziniert von der Möglichkeit, sozusagen P2P Dateien von einem Browser zum anderen Browser zu transferieren, habe Ich mich vor kurzem umgeschaut, was es in dieser Hinsicht schon für Anwendungen und Implementierungen gibt. Webtorrent hat sich dabei als eine der am weitesten entwickelsten Bibliotheken herausgestellt, die direkt im Browser via Javascript verwendet werden kann, sowie auch in NodeJS-Applikationen.

Webtorrent tut genau das, was es verspricht: Eingebunden in eine hübsche graphische Oberfläche, kann eine lokale Datei ausgewählt und mit ein paar wenigen und einfachen Javascript Funktionen indexiert und geseedet werden. Die Datei wird dabei nur gehashed und bei verschiedenen, öffentlichen Webtorrent-Trackern eingetragen, sodass später andere Webtorrent-Peers unter Verwendung eines Magnet-Links die Datei wieder ausfindig machen können.

Was sich mit Webtorrent und dessen Verwendung von WebRTC auf Protokollebene in Zukunft alles bewerkstelligen lässt, ist noch nicht abzusehen. Gerade im OpenSource-Bereich ist die Anzahl von Projekten, die davon gebrauch machen, noch sehr übersichtlich. Als Demo-Anwendung habe Ich mal eine Seite namens PiShare erstellt, eine Art Torrent-Indexer für Webtorrent-Dateien. Die Demo macht schon deutlich, wie einfach und schnell eine Datei publiziert und binnen kürzerster Zeit zwischen zahlriechen Peers verteilt werden kann, ohne dass eine extra Software dafür installiert werden muss.

Der Sourcecode zu dem Projekt findet man hier.

ArmStone A9 als Mediacenter und NAS

homeserver_sata_bananapiMit Hilfe eines kleinen, leistungsfähigen und energiesparenden Mini-Computers, einem ArmStone A9 ARM-Board, ist es mir endlich gelungen, einen Daten-Server (NAS) für meine WG einzurichten. Die Platine wird eigentlich in der Industrie verwendet (z.B. in Automobilsystemen) und hat dementsprechend viel Peripherie, die Ich eigentlich garnicht benötige. Trotzdem eignet sich das Board mit Gbit-Ethernet und einem Sata-Port auch für meine Zwecke.

Der Hersteller fs-net aus Stuttgart hat seit nicht all zu langer Zeit auch einen aktuelleren Linux Kernel für die i.MX6 SOC Platform nachgeliefert, womit es mir dann auch einfacher gelungen ist, ein ArchLinuxARM Betriebssystem zu installieren. Hier hatte Ich eine aktuelle und breite Auswahl an Software zur Verfügung, wie Ich es auch schon bei Server- und Desktopumgebungen gewohnt bin.

Verwendet hatte Ich davor einen Banana PI, der aber für Multimediaanwendungen zu schwach war und einige Hardwarefehler aufwies. Der ArmStone hingegen schafft Ethernet-Transferraten von bis zu 40MB/s und ist auch schnell genug für das Reenkodieren von Audiodateien.

Folgende Dienste soll der kleine Server bereitstellen:

  • Dateifreigabe der 5 TB Festplatte im Netzwerk
  • Plex-Media-Server für Zugriff auf Mediendateien (via. App oder Webseite)
  • DynDNS-Dienst, der dafür sorgt, dass der WG-Server auch über das Internet erreichbar ist

Die folgende Anleitung beschreibt die Software-Installation auf diesem speziellen Gerät und desweiteren die Konfiguration ind Installation der benötigten Software. Letzteres ist allgemeiner gehalten und kann auch ohne Probleme auf anderen Geräten oder Platformen angewendet werden.

ArchLinux auf dem ArmStone installieren

Hierzu habe Ich schon im ArchLinux-Wiki eine ausführliche Anleitung erstellt. Für mein Setup sei ergänzend noch angemerkt, dass Ich folgende Kernel-Module bei dem vom Hersteller ausgelieferten Linux-Kernel noch hinzugenommen habe:
nftables
iptables
btrfs

Nachdem ArchLinux und der anepasste Kernel eingerichtet sind, kann das System gestartet werden.
Bevor das System mit Ansible eingerichtet werden kann (siehe nächster Abschnitt), müssen SSH-Schlüssel generiert und der SSH-Dienst gestartet werden. Der ArmStone muss hierfür via. Ethernet mit dem Internet verbunden sein. Einloggen kann man sich via. SSH mit dem Benutzer root und dem Passwort root.
pacman -Sy python sudo
systemctl start sshdgenkeys
systemctl start sshd

Der Benutzer alarm, der schon von Anfang an dabei ist und von Ansible genutzt werden soll, benötigt administrative Rechte via. sudo. Dazu muss die sudoers-Datei um folgende Zeile, nach “root ALL …” ergänzt werden:

Damit Ansible sich automatisch via. SSH auf dem NAS einloggen kann, sollten die öffentlichen Schlüssel des lokalen Benutzers auf den ArmStone kopiert werden:
ssh-copy-id alarm@10.0.0.2

Mit Ansible das System automatisch einrichten

Mit dem Programm Ansible ist es möglich, eine Systemkonfiguration einheitlich und abstrahiert zu beschreiben und danach automatisiert auf einen oder mehreren Systemen zu anzuwenden. Viele hier verwendete Module und Konfigurationsanweisungen können auch in Zukunft in anderen Projekten wiederverwendet werden.

Ansible muss bereits auf dem lokalen System installiert, und der zu konfigurierende Server über das Netzwerk angeschlossen und erreichbar sein. Mit folgenden Befehlen wird das Ansible-Skript heruntergeladen und alle benötigten Abhängigkeiten installiert:
https://git.project-insanity.org/onny/ansible-picloud.git
cd ansible-picloud
ansible-galaxy install -r requirements.yml -p roles --ignore-errors

Grundlegende Einstellungen bzw. Variablen für das NAS-System können in folgenden Dateien (im vars-Ordner) angepasst werden:

common.yml Definiert Hostname, Locale und Benutzernamen.
systemd-networkd.yml Festlegen der IP-Adresse und des Gateways.
ufw.yml Beinhaltet Konfigration der Firewall. Alle Ports bis auf: CIFS, Plex, mosh, ssh und https werden blockiert. Der Zugriff auf CIFS (Samba) wird nur aus einem bestimmten Subnet gestattet.
mount.yml Definiert Einhängepunkte von Root und dem externen Datenträger nach /mnt
inwx_dyndns_update.yml Beinhaltet Login-Daten zu Inwx.com und angaben über den zu aktualisierenden DNS-Record
shares.yml Definiert Benutzer- und Zugriffsrechte für die Netzwerkdateifreigabe via. Samba
archlinux_aur.yml Zu installierende AUR-Packete. Abägnigkeit des Inwx-Skriptes
hd-idle.yml Installiert und konfiguriert das Programm, dass die Festplatten bei inaktivität in Standby versetzt

Es genügt in diesen Dateien die grundlegenden Einstellungen vorzunehmen. Je nach belieben können einzelne Module aus dem sogenannten Ansible-Playbook (picloud.yml) herausgenommen oder hinzugefügt werden, sodass nicht das komplette Setup, wie hier beschrieben, 1-zu-1 umgesetzt werden muss. Zuletzt wird in der hosts-Datei die IP-Adresse des Servers definiert:

Die Verbindung zum Server kann direkt mit Ansible getestet werden:
ansible -i hosts all -m ping
10.0.0.2 | SUCCESS => {
"changed": false,
"ping": "pong"
}

Sollte dies alles in Ordnung sein, kann die Konfiguration auf dem Zielsystem mit folgendem Befehl ausgeführt werden:
ansible-playbook -i hosts picloud.yml --ask-become-pass

Alle oben genannten Dienste werden nun automatisch installiert, konfiguriert und gestartet :)

Mit Vagrant in einer virtuellen Maschine Konfiguration testen

In dem Ansible-Projektordner ist auch noch Vagrantfile beigelegt, die eine ArchLinux-VM automatisch einrichtet und die Ansible-Konfiguration anschließend anwendet. Dafür muss nur folgender Befehl ausgeführt werden:

cd ansible-picloud
vagrant up

Als Fazit könnte man sagen, dass der erste Aufwand beim Einrichten von Ansible sehr hoch ist. Auf der anderen Seite denke Ich, dass es gerade bei der Administration von vielen unterschiedlichen VMs im Serverbereich nützlich ist, mit Ansible schnell und einfach einen einheitlichen Konfigurationsstand auf allen Maschinen zu haben.

Nextcloud radio app – Erste Version veröffentlicht

Endlich habe Ich es geschaft die erste Version meines Nextcloud App Radio zu veröffentlichen. Es gibt hier und da noch ein paar kleine Bugs oder Darstellungsfehler, aber alles in allem ist es voll funktionsfähig :)

Es handelt sich dabei um eine Anwendung, die eine rießige Auswahl an Radio-Stationen durchsuchbar darstellt und mit einem einfachen Klick diese abspielt. Zusätzlich lassen sich die einzelnen Sender auch favorisieren. Das ganze App ist schlicht und übersichtlich, im Stil von offiziellen Nextcloud Apps, gehalten. Die dahinterliegende Datenbank bzw. Api wird von dem Community-Projekt Radio-Browser.org bereitgestellt.

Der Sourcecode kann über den offiziellen Appstore bezogen werden oder über unsere Gitlab-Instanz.

Application firewall Douane for ArchLinux

While reading the Wikileaks publications about the internal CIA malware production, I became aware that these engineers had to cope with several security products on the MacOS X platform, to safely install their monitoring software and to avoid being detected by third-party firewalls. One document published, describes how the remote-control software “DerStarke” is able to hide its traffic by inheriting into an unsuspicious process like Safari. They further note, that this method successfully circumvents application firewalls like “Little Snitch“.

These insights into govermental intelligence operations show that even products considered to be more secure, like MacOS X, are still vulnerable to these kind of attacks. But on the the contrary, security messures like application sandboxing and firewalling, makes it more complicated for intruders to bypass everything without being recognized.

I was then looking into an application firewall solution for Linux systems and found out about Douaneapp. Even though the software looked a bit unstable and discontinued, I gave it a try.

Gnome file picker dialog triggers smb connections in the background

Douane is a bit difficult to install but I was able to get it working. The program consists of a kernel module, which is able to block outgoing connections per process, a daemon and a dialog process. After installing and running everything, a small popup window appears, asking for permissions.

I enhanced the ArchLinux packages and applied some patches to the software, so it is now easier to get started:
pacaur -S douane-dkms-git douane-daemon-git douane-dialog-git
After installation, start the daemon:
sudo systemctl daemon-reload
sudo systemctl start douane-daemon

Ensure that the dialog process is started with your desktop:
/opt/douane/bin/douane-dialog
Thats it! In case the daemon won’t start, it could be that you have to manually load the kernel module:
sudo modprobe douane
lsmod | grep douane

I really hope that the development of this application continues. If you know any alternatives to this app, please let me know and drop a comment :)