Odroid C2 mit Nextcloud von A bis Z

Odroid C2 mit Nextcloud von A bis Z

Mit dieser Anleitung setzen Sie Ihren Odroid C2 mit Ubuntu 18.04.x LTS neu auf, Sie konfigurieren und optimieren den Server und installieren abschließend Ihre eigene Nextcloud mithilfe meines Installationsskripts. Das Zielsystem basiert auf nginx 1.19.x, PHP 7.4.x, MariaDB 10.4.x, Redis-Server 4.0.9 und fail2ban 0.10.2 – los geht’s:

(1) Installation des Basisimages auf die eMMC
(2) Server tweaks
* Bash (auto-) completion
* Benutzer anlegen („root“ deaktivieren)
* Zeitzone anpassen
* ssh Anpassungen
* Servernamen anpassen
(3) Server aktualisieren
(4) Performance tuning: boot.ini
(5) Nextcloud mittels Installationsskripts
(6) SSL durch Let’s Encrypt SSL ersetzen

(1) Installation des Basisimages auf die eMMC

Zuerst laden Sie das Odroid ubuntu image herunter:

Download: ubuntu-18.04.3-3.16-minimal-odroid-c2-20190814.img.xz

Verbinden Sie das eMMC Modul mit Ihrem Desktop und suchen das eMMC Gerät

sudo -s
fdisk -l

Hier verwenden wir exemplarisch „/dev/mmcblk0„. Extrahieren Sie das zuvor heruntergeladenen Image:

unxz unxz ubuntu-18.04.3-3.16-minimal-odroid-c2-20190814.img.xz

und übertragen es auf das eMMC Modul:

dd if=ubuntu-18.04.3-3.16-minimal-odroid-c2-20190814.img of=/dev/mmcblk0

Nach wenigen Minuten ist der Vorgang bereits abgeschlossen. Bauen Sie den Odroid C2 nun zusammen, verbinden ihn mit einem LAN Kabel sowie mit einer Tastatur, einem Monitor und dem Stromkabel.

Der ODROID C2 muss nach wenigen Minuten (das blaue Licht leuchtet dann nicht mehr!) neu gestartet werden. Ziehen Sie den Odroid C2 dafür kurz vom Strom und verbinden ihn wieder mit Strom, er startet somit neu. Am Monitor können SIe den Startvorgang sehen. Login Sie sich als Benutzer „root“ und dem Passwort „odroid“ ein.

user: root
password: odroid

Zuerst aktualisieren wir den Odroid C2 und ermitteln die IP-Adresse:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9
apt update && apt upgrade -y
apt install net-tools -y && ifconfig

Die Netzwerkkarte wird Ihnen mit eth0 dargestellt. Die IP-Adresse erscheint in der zweiten Zeile, bspw.:

inet addr:192.168.2.167

Konfigurieren Sie die deutsche Sprache ür Ihren Odroid C2:

apt install language-pack-de
dpkg-reconfigure keyboard-configuration
locale-gen de_DE@euro
dpkg-reconfigure console-setup

Ab jetzt können Sie den Monitor und die Tastatur bereits abstecken und sich direkt per SSH im Terminal unter Linux oder unter Windows 10 mittels Putty oder dem integriertem WSL mit Ihrem Server verbinden:

ssh root@192.168.2.167

Bei der Erstanmeldung müssen Sie den Schlüssel prüfen und mit „yes“ bestärigen, ehe Sie sich am System anmelden können. Verwenden Sie erneut das Passwort odroid.

Glückwunsch, Ihr Server ist vorbereitet und kann nun optimiert werden.

(2) Server tweaks

(2.1) Bash (auto-) completion

Aktivieren Sie die sogenannte bash auto completion (Auto-Vervollständigung mittels Tab in der Shell):

apt install bash-completion -y

Passen Sie das File bash.bashrc an

cp /etc/bash.bashrc  /etc/bash.bashrc.bak
vi /etc/bash.bashrc

in dem Sie nach dem unteren Block suchen und diesen einkommentieren, also die # entfernen:

# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

Lassen Sie sich die Bash zudem farblich darstellen:

vi .bashrc

Entfernen Sie die ‚#‘ vor force_color_promp=yes

force_color_prompt=yes

Starten Sie den Server neu.

reboot now

(2.2) Persönlichen Benutzer anlegen und „root“ deaktivieren

Verbinden Sie sich wie zuvor mit Ihrem Server und erzeugen einen neuen Benutzer namens „next“

adduser next

Setzen Sie ihr eigenes Passwort und füllen die nachfolgenden Felder aus bzw. lassen diese auf Ihren Wunsch hin leer. Im Anschluß daran wird dem neuen Benutzer noch das sudo-Recht gewährt:

usermod -aG sudo next

Verlassen Sie die root-Shell

exit

und verbinden sich mit ihrem neuen Benutzer zum Server:

ssh next@192.168.2.167

Nun deaktivieren Sie den root Account, um ein interaktives Anmelden des Benutzers „root“ zukünftig zu verhindern:

sudo passwd -dl root

(2.3) Zeitzone anpassen

Der Server nutzt standardmäßig das UTC-Zeitformat. Um später lesbare und vergleichbare Datumswerte (u.a. in den Logfiles) nutzen zu können, passen wir dieses Zeitformat an und richten Europa/Berlin ein:

sudo dpkg-reconfigure tzdata

Folgen Sie dem Assistenten:

(2.4) ssh Anpassungen

Wir stellen nun sicher, dass sich der der Root-Benutzer nicht mehr per SSH anmelden kann, der ServerKey aus 4096 Bits besteht und nur noch der neu angelegte Benutzer eine SSH Verbindung zum Server aufbauen kann.

sudo ssh-keygen -q -f /etc/ssh/ssh_host_rsa_key -N '' -b 4096 -t rsa
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config

Setzen Sie „ServerKeyBits“ auf 4096:

ServerKeyBits 4096

Setzen Sie „PermitRootLogin“ auf no:

PermitRootLogin no

Setzen Sie „AllowUsers“ auf ihren Benutzer (bspw. next)

AllowUsers next

Starten Sie den SSH Dienst neu und testen dann eine neue SSH-Verbindung, ohne das bestehende Shell-Fenster zu schließen!

sudo service ssh restart

Sofern die Anmeldung funktioniert hat, ist die neue SSH-Konfiguration in Ordnung.

(2.5) Servernamen anpassen

Setzen Sie den Servernamen auf localhost:

sudo cp /etc/hosts /etc/hosts.bak
sudo vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 cloud
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Ersetzen Sie nun in der hostname-Datei den derzeitigen Servernamen odroid64 mit bspw. cloud:

sudo cp /etc/hostname /etc/hostname.bak
sudo vi /etc/hostname
cloud
sudo reboot now

(3) Aktualisieren Sie den Server

Aktualisieren Sie den Server bevor Sie die Performance optimieren

sudo apt update && sudo apt upgrade -y

(4) Performance tuning: boot.ini

Für eine bessere Perfomrance und weniger Speicherverbrauch setzen Sie zwei Werte auf ‚1‘:

sudo -s
vi /media/boot/boot.ini

to

...
# Server Mode (aka. No Graphics)
# Setting nographics to 1 will disable all video subsystem
# This mode is ideal of server type usage. (Saves ~300Mb of RAM)
setenv nographics "1"

# Meson Timer
# 1 - Meson Timer
# 0 - Arch Timer
# Using meson_timer improves the video playback however it breaks KVM (virtualization).
# Using arch timer allows KVM/Virtualization to work however you'll experience poor video
setenv mesontimer "1"
...

Nach einem letzten Restart des Servers

sudo reboot now

können Sie bereits mit der automatischen Nextcloud Installation beginnen.

(5) Nextcloud Installation mittels Skript:

Verbinden Sie sich mit ihrem Server und wechseln mittels sudo zu Ihrem privilegierten Benutzer:

sudo -s

Laden Sie das Installationsskript nach /usr/local/src herunter:

cd /usr/local/src && apt install wget -y
wget https://it-services.c-rieger.de/s/kX56nntHoWWoPps/download -O install.zip

Entpacken Sie das Skript:

apt install unzip -y && unzip install.zip

Markieren Sie das Skript als „ausführbar“

chmod +x install.sh

und führen es dann zur Installation aus:

./install.sh

Fügen Sie abschließend die Server-IP-Adresse als „Nextcloud Trusted Domain“ hinzu

sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 1 --value=192.168.2.167

und schon erreichen Sie Ihre Nextcloud bspw. über

https://cloud (oder https://192.168.2.167)

Sollten Sie nach Gebrauch plötzlich keine Verbindung mehr zur Ihrer Nextcloud aufbauen können, so prüfen Sie bitte mittels des eingerichteten fail2ban, ob ihre IP durch fehlerhafte Loginversuche (sowohl SSH, als auch Nextcloud werden von fail2ban überwacht!) möglicherweise gesperrt wurde.

sudo -s
fail2ban-client status nextcloud && fail2ban-client status sshd

Viel Spaß mit Ihrer Nextcloud!

(6) Einrichtung von SSL über Let’s Encrypt

Bitte stellen Sie zuerst sicher, dass Ihr Server sowohl über Port 80/TCP als auch über Port 443/TCP von außen erreichbar ist.

Für das Zertifikatshandling erstellen wir dann einen dedizierten Benutzer und fügen diesen der www-data Gruppe hinzu:

adduser acmeuser
usermod -a -G www-data acmeuser

Wechseln Sie in die Shell des neuen Benutzers um die Zertifikatssoftware zu installieren und verlassen diese Shell danach wieder:

su - acmeuser
curl https://get.acme.sh | sh
exit

Legen Sie drei Verzeichnisse mit den entsprechenden Berechtigungen an, um die neuen Zertifikate darin speichern zu können:

mkdir -p /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs
chmod -R 775 /var/www/letsencrypt /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt

Wechseln Sie erneut in die Shell des neuen Benutzers

su - acmeuser

und requestieren (beantragen) die SSL-Zertifikate. Ersetzen Sie dabei your.dedyn.io mit Ihrer Domain :

acme.sh --issue -d your.dedyn.io --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem
acme.sh --issue -d your.dedyn.io --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem

Verlassen Sie die Shell des neuen Benutzers

exit

und legen sich dann ein Skript an, dass zukünftig die Berechtigungen überprüft und korrigiert (permissions.sh):

nano /root/permissions.sh

Kopieren Sie alle Zeilen in die Datei:

#!/bin/bash
find /var/www/ -type f -print0 | xargs -0 chmod 0640
find /var/www/ -type d -print0 | xargs -0 chmod 0750
chmod -R 775 /var/www/letsencrypt /etc/letsencrypt 
chown -R www-data:www-data /var/www/nextcloud /etc/letsencrypt
chown -R www-data:www-data /daten
chmod 0644 /var/www/nextcloud/.htaccess
chmod 0644 /var/www/nextcloud/.user.ini
exit 0

Hinweis:
Bitte passen Sie ggf. das Datenverzeichnis im Skript an, sofern Sie nicht /daten verwendet haben.

Markieren Sie das Skript als ausführbar und führen es dann direkt aus:

chmod +x /root/permissions.sh
/root/permissions.sh

Entfernen Sie Ihre bisher verwendeten Self-Signed-Zertifikate aus nginx und aktivieren Sie die neuen, vollwertigen und bereits gültigen SSL Zertifikate von Let’s Encrypt:

sed -i '/ssl-cert-snakeoil/d' /etc/nginx/ssl.conf
sed -i s/\#\ssl/\ssl/g /etc/nginx/ssl.conf
service nginx restart

Glückwunsch, das war es schon! Über eine Spende würden sich meine Frau, meine Zwillinge und ich sehr freuen!

© Carsten Rieger IT-Services

Carsten Rieger

Carsten Rieger ist ein angestellter Senior IT-Systemengineer und zudem auch als Kleinunternehmer (Freelancer) aktiv. Er arbeitet seit mehr als 15 Jahren im Linux- und Microsoftumfeld, ist ein Open Source Enthusiast und hoch motiviert, Linux Installationen und Troubleshooting durchzuführen. Dabei arbeitet er vorrangig mit Debian und Ubuntu Linux, Nginx und Apache Webservern, MariaDB/MySQL/PostgreSQL, PHP, Cloud Infrastrukturen (bspw. Nextcloud) und auch vielen anderen Open Source Projekten (bspw. Roundcube). Zudem engagiert er sich ehrenamtlich für die Dr. Michael & Angela Jacobi Stiftung - und das schon seit mehr als 7 Jahren.