Aktionen

NextCloud unter Ubuntu 24.04 LTS installieren: Unterschied zwischen den Versionen

Aus znilwiki

Zeile 1.001: Zeile 1.001:
Auf gpt umstellen:
Auf gpt umstellen:
  gdisk /dev/sdb
  gdisk /dev/sdb
Und dann  
Wenn da aber eine Meldung steht wie
Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.
Dann brecht an dieser Stelle mit {{Key|q}} ab! Dann geht es nicht!
Wenn da keine Warnung steht, dann
  w
  w
drücken.<br>
drücken.<br>

Version vom 18. Juni 2024, 07:43 Uhr

Changelog:

  • 27.05.2024 erste Version
  • 16.06.2024 Feintuning und diverse Anpassungen

Installation Ubuntu Server 24.04.x LTS (Long Term Support)



Einstellungen für die VM

Falls Ihr den NextCloud-Server als virtuelle Maschine (VM) installiert so könnt Ihr Beispielsweise folgenden Einstellungen nehmen. Diese berücksichtigen auch die Mindestanforderungen von Ubuntu 24.04

  • Konfiguration: Typisch
  • Name und Speicherort: Nach eigener Wahl
  • Speicher: Nach eigener Wahl
  • Gastbetriebssystem: (*) Linux --> Ubuntu (64-Bit)
  • Netzwerk:
    • Wie viele Netzwerkkarten möchten Sie anschließen: 1
    • Netzwerk: Nach Wahl (VM Network?)
    • Adapter: VMXNET 3
  • Größer der virtuellen Festplatte:
    • Hängt von der Anzahl der überwachten Geräte / Items ab.
    • Ich empfehle min 32GB für das Betriebssystem des Servers. Für die Datenpartition hängen wir später noch eine zweite Festplatte an.
    • Die Festplatte kann bei einer VM nachträglich vergrößert werden - siehe dazu den Abschnitt in diesem Artikel weiter unten
    • Thick-Provision Lazy-Zeroed

Danach Einstellungen der VM bearbeiten: Reiter Hardware:

  • Arbeitsspeicher:
    • 4GB oder mehr
  • CPUs:
    • Anzahl der virtuellen Sockets
      • 4 oder mehr
    • Anzahl der Cores pro Socket: 1 (Immer Anzahl der Sockets erhöhen)

Reiter Optionen

  • ...




Grundinstallation

Important.png
Hinweis: Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server


CD einlegen und los,
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):

ClipCapIt-240527-140258.PNG Try or Install Ubuntu Server
ClipCapIt-240527-140440.PNG Deutsch
ClipCapIt-220427-115808.PNG German / German
Wenn er einen neueren Installer findet und fragt ob er auf diesen aktualisieren soll - Ja!
Install Ubuntu2204 Pic2.png Ubuntu Server
ClipCapIt-220427-120131.PNG Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den ens160 Eintrag aus und drückt Enter:
ClipCapIt-200521-152546.PNG ens192 => Bearbeite IPv4
ClipCapIt-200521-152642.PNG Manuell
ClipCapIt-200521-152742.PNG Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24
ClipCapIt-200521-153302.PNG Erledigt
ClipCapIt-220427-120259.PNG Bei Bedarf, sonst leer lassen
ClipCapIt-220427-120335.PNG Erledigt
ClipCapIt-220427-120400.PNG Nutzt die ganze Festplatte ohne LVM (also Haken entfernen). Die Festplatte lässt sich später trotzdem leicht vergrößern
ClipCapIt-220427-120443.PNG Erledigt
ClipCapIt-220427-120505.PNG Fortfahren
ClipCapIt-220427-120827.PNG Den Servernamen festlegen. Ich lege hier den Benutzer installadmin an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)
ClipCapIt-240527-140937.PNG Falls Ihr Ubuntu Pro habt, könnet Ihr es hier aktiveren, ansonsten einfach [Fortfahren]
ClipCapIt-240527-141106.PNG OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty)
ClipCapIt-240527-141137.PNG Erledigt

Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach:

ClipCapIt-220427-121943.PNG Jetzt neustarten
ClipCapIt-220427-122036.PNG ISO aus der VM entfernen und Enter drücken
ClipCapIt-220427-122152.PNG Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind

PuTTY

Ab dieser Stelle könnt Ihr PuTTY oder den SSH Client eurer Wahl nutzen - was ich dringend empfehle. Denn dann könnt Ihr hier vorgeschlagenen Befehle einfach per Copy&Paste übernehmen.
Die IP-Adresse habt Ihr zu diesem Zeitpunkt ja bereits festgelegt:

ClipCapIt-200521-155245.PNG ClipCapIt-200521-155339.PNG ClipCapIt-200521-160706.PNG

Nach der Anmeldung nutze ich immer gerne ein

sudo -i

Damit wechselt man dauerhaft zum root Benutzer und muss nicht vor jedem Befehl ein sudo stellen.


root wieder freischalten

Important.png
Hinweis: Ob nun wie ich immer als root arbeiten wollt oder aber als einfacher Benutzer und dann immer sudo verwendet müsst Ihr selbst wissen
  • Mit Benutzer installadmin anmelden
sudo -i
  • Kennwort des Benutzer installadmin eintippen
passwd root
  • neues Kennwort für "root" 2x eintippen
ClipCapIt-200521-161108.PNG
  • Lokal Anmelden kann man sich nun mit root - aber eine Anmeldung über SSH funktioniert dann immer noch nicht.
  • Damit diese auch funktioniert müsst ihr die sshd_config bearbeiten:
nano /etc/ssh/sshd_config

sucht nach der Zeile (STRG + W ist Suchen) nach

#PermitRootLogin without-password

und stellt den Cursor in die Zeile.
Drückt nun einmal F9 und 2x F10 - damit erstellt Ihr eine Kopie der Zeile.
Ändert die Kopie wie folgt ab:

PermitRootLogin yes
ClipCapIt-200521-161435.PNG

Speichert die Datei (STRG + x, dann y und Enter) und startet den ssh Dienst neu:

systemctl restart ssh.service

Ab dann klappt es auch mit dem SSH-Login für den Benutzer root, z.B. über puTTY
Jetzt 2x

exit

eintippen wodurch sich das PuTTY Fenster schließt - der (eingeschränkte) Benutzer installadmin hat sich somit abgemeldet

Important.png
Hinweis:

Ja, ich persönlich arbeite gerne als root und habe diesen für die Anmeldung freigeschaltet. Was ich nicht mache ist das Login per SSH mit Passwort zu erlauben. Ich hinterlege also immer einen SSH-Key für die Anmeldung und nutze diesen statt des Kennwortes. Die Lösung hier ist einfach gehalten, der Profi mögen anpassen wie er es braucht. Ein Anmeldung als eingeschränkter Benutzer geht natürlich auch, das erste was ich dann immer mache ist ein sudo -i um dauerhaft zum root zu wechseln

Anmelden als root

Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer root an.


nano & Co auf Deutsch

nano war eben z.B. noch auf Englisch, mit

apt install -y language-pack-de

ist es (und vieles andere) auf deutsch.


root farbiger Prompt

Als root anmelden:

nano ~/.bashrc

Zeile 39 (Alt + C aktiviert Zeilennummernanzeige):

#force_color_prompt=yes

ändern zu (# entfernen):

force_color_prompt=yes


nun wieder Abmelden - ab der nächsten Anmeldung ist der neue Prompt aktiv.

ClipCapIt-200521-162422.PNG

Wer den sofort haben will (ohne neu Anmelden):

source ~/.bashrc

Feste IP-Adresse vergeben

Der Server hat dank des neuen Setupdialoges nun bereits eine feste IP-Adresse.
Solltet Ihr an dieser etwas ändern müssen so müssen wir erst das Cloud-Init deaktivieren:

nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Inhalt:

network: {config: disabled}

Dann könnte Ihr in der folgenden Datei etwas ändern, die Warnungen das es einen reboot nicht übersteht könnt Ihr ignorieren, dafür haben wir die andere Datei angelegt.

nano /etc/netplan/50-cloud-init.yaml
ClipCapIt-200521-162802.PNG

Updates einspielen

  • wieder anmelden als root bzw. zum root wechseln
  • Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
apt update
  • Updates einspielen:
apt upgrade -y
  • Nach Update überflüssige Pakete entfernen:
apt autoremove -y


Ich mache das normalerweise immer als Einzeiler:

apt update && apt upgrade -y && apt autoremove -y




Multipathing deinstallieren (wenn der Server eine VM ist)

Ab Werk wird nun das

/var/log/syslog

mit Multipath-Meldungen vollgemüllt:

2024-05-27T12:32:47.571374+00:00 ubuntu2404 systemd[1]: Started multipathd.service - Device-Mapper Multipath Device Controller.
2024-05-27T12:32:47.592304+00:00 ubuntu2404 kernel: systemd[1]: Listening on multipathd.socket - multipathd control socket.
2024-05-27T12:32:47.592385+00:00 ubuntu2404 kernel: systemd[1]: Starting multipathd.service - Device-Mapper Multipath Device Controller...
2024-05-27T12:32:48.141146+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
2024-05-27T12:32:48.141212+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:32:48.141278+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:32:57.634912+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:32:57.667862+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
2024-05-27T12:32:57.667930+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:32:57.667959+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:07.637080+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:33:07.676773+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
2024-05-27T12:33:07.676839+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:33:07.676865+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:17.641466+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:33:17.709843+00:00 ubuntu2404 multipathd[467]: sda: failed to get sysfs uid: No such file or directory
2024-05-27T12:33:17.709915+00:00 ubuntu2404 multipathd[467]: sda: failed to get sgio uid: No such file or directory
2024-05-27T12:33:17.709942+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:33:17.709969+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:28.134951+00:00 ubuntu2404 multipathd[467]: sda: not initialized after 3 udev retriggers
2024-05-27T12:33:29.139933+00:00 ubuntu2404 multipathd[467]: sda: add missing path
2024-05-27T12:33:29.140037+00:00 ubuntu2404 multipathd[467]: sda: failed to get sysfs uid: No such file or directory
2024-05-27T12:33:29.140063+00:00 ubuntu2404 multipathd[467]: sda: failed to get sgio uid: No such file or directory
2024-05-27T12:33:29.140086+00:00 ubuntu2404 multipathd[467]: sda: no WWID in state "undef
2024-05-27T12:33:29.140109+00:00 ubuntu2404 multipathd[467]: ", giving up
2024-05-27T12:33:29.140181+00:00 ubuntu2404 multipathd[467]: sda: check_path() failed, removing

Unter Ubuntu 24.04/22.04 scheint es nicht mehr ganz so schlimm wie unter 20.04 - aber in einer VM macht Multipath keinen Sinn, also deaktivieren und deinstallieren um das Syslog von den Meldungen befreien:

systemctl stop multipathd.service && systemctl disable multipathd.service
apt install kpartx libsgutils2-1.46-2 sg3-utils sg3-utils-udev
apt remove -y multipath-tools && apt purge -y multipath-tools

Die apt install Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf manuell installiert gesetzt und dann nicht bei einem apt autoremove deinstalliert


Cloud-Init deinstallieren (Wenn es keine VM bei einem Cloudanbieter ist)

Wenn Ihr die VM reboootet und die Console betrachtet tauchen kurz nach dem Reboot (Fehler-)Meldungen zum Cloud-init auf:

ClipCapIt-200521-163633.PNG

Das Cloud-Init ist - wenn ich mich recht erinnere - dafür da falls eure VM z.B. bei Amazon AWS, Azure oder andere Anbieter läuft um z.B. die Netzwerkinformationen vom Hoster/Provider zu erhalten.
Brauchen wir nicht, also weg damit:

echo 'datasource_list: [ None ]' | tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
apt purge -y cloud-init
rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
apt install eatmydata libeatmydata1 python-babel-localedata python3-babel python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-markupsafe python3-pyrsistent python3-tz -y
reboot

Die apt install Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf manuell installiert gesetzt und dann nicht bei einem apt autoremove deinstalliert


Zeitzone setzen

In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal probeweise date ein) - weil der ESXi-Host auf UTC Zeit läuft und die Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.
Wir korrigieren das mit

timedatectl set-timezone Europe/Berlin

ein

date

sollte dann die richtige Uhrzeit ausspucken.


Zeitserver setzen

Important.png
Hinweis: Wenn Ihr diesen Schritt überspringt, wird ntp.ubuntu.com als Zeitserver verwendet

Für die Zeitsynchronisierung ist der Dienst systemd-timesyncd.service zuständig, dieser wird über die Datei

nano /etc/systemd/timesyncd.conf

konfiguriert:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# the /etc/systemd/timesyncd.conf.d/ directory. The latter is generally
# recommended. Defaults can be restored by simply deleting the main
# configuration file and all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/timesyncd.conf' to display the full config.
#
# See timesyncd.conf(5) for details.

[Time]
NTP=192.168.1.81
FallbackNTP=192.168.1.198 de.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60

Sowohl die Liste der NTP= als auch der FallbackNTP= erwartet eine per Leerzeichen getrennte Liste der möglichen Server.
Laut Anleitung hört der Dienst aber beim ersten Treffer auf zu suchen. In der Praxis setzt also einen NTP-Server und ggf. die Fallback. Setzt Ihr einen Wert nicht, lasst diesen also auskommentiert, so gilt der Default-Wert, beim Fallback gilt dann FallbackNTP=ntp.ubuntu.com.
Nach der Änderung müsst Ihr den Dienst einmal neu starten:

systemctl restart systemd-timesyncd.service

und mit folgenden Befehl könnt Ihr den Status abfragen:

timedatectl show-timesync

Beispielausgabe:

LinkNTPServers=fd00::1eed:6fff:fe71:f1c0
SystemNTPServers=192.168.1.81
FallbackNTPServers=192.168.1.198 de.pool.ntp.org
ServerName=192.168.1.81
ServerAddress=192.168.1.81
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=2min 8s
NTPMessage={ Leap=0, Version=3, Mode=4, Stratum=3, Precision=-23, RootDelay=20.324ms, RootDispersion=28.579ms, Reference=C0A801C6, OriginateTimestamp=Tue 2024-06-04 08:22:24 CEST, 
ReceiveTimestamp=Tue 2024-06-04 08:22:24 CEST, TransmitTimestamp=Tue 2024-06-04 08:22:24 CEST, DestinationTimestamp=Tue 2024-06-04 08:22:24 CEST, Ignored=no, PacketCount=2, Jitter=239us }
Frequency=1158037

Automatische Updates deaktivieren

Ich persönlich möchte nicht das der Zabbix-Server automatisch Updates einspielt.
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht. Ich möchte das geplant durchführen.
Die automatischen Updates verhindern wir mit

apt remove -y unattended-upgrades

Benötigte Programme für Nextcloud installieren

Die nachfolgende Zeile installiert alles notwendige die auch nachfolgend beschriebenen Features von NextCloud zu nutzen. Als Datenbank wird MariaDB verwendet.

apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip php-ldap php-bz2 php-json unzip zip imagemagick -y
Face-wink.png
Tipp: Zum kopieren der oberen Zeile mit der Maus vor das apt gehen und 3x Klicken. Ggf. mehrmals versuchen - bis die ganze Zeile markiert ist. Diese kann dann so in z.B. PuTTY eingefügt werden





Zusätzliche Festplatte einbinden

Warning.png
Warnung: Gemäß dieser Anleitung wird eine MBR Partition erstellt, da ist dann bei 2TiB Schluss! Ich überarbeite das gerade das eine GPT Partition erstellt wird

Die Daten von NextCloud sollen auf einer 2. Festplatte gespeichert werden - exklusive der SQL-Datenbank, diese wird auf der Festplatte mit dem Betriebssystem liegen.
Dazu habe ich der VM einfach eine weitere Festplatte mit 50GiB hinzugefügt. Diese können wir später bei bedarf einfach vergrößern.
Nach dem hinzufügen startet Ihr den Server einmal neu.

Zuerst müssen wir herausfinden wie die 2. Festplatte unter Ubuntu heißt:

ls -l /dev/sd*

Ausgabe:

brw-rw---- 1 root disk 8,  0 Jan 29 10:46 /dev/sda
brw-rw---- 1 root disk 8,  1 Jan 29 10:46 /dev/sda1
brw-rw---- 1 root disk 8,  2 Jan 29 10:46 /dev/sda2
brw-rw---- 1 root disk 8, 16 Jan 29 10:46 /dev/sdb

/dev/sda ist die erste Festplatte, sda1 und sda2 sind Partitionen auf dieser.
Unsere Zielfestplatte Platte ist die /dev/sdb
Da wir hier keine /dev/sdb1 sehen hat diese Festplatte noch keine Partitionen.

Ich arbeite hier ohne LVM, die Festplatte können wir später trotzdem leicht vergrößern.

Warning.png
Warnung: Das müsst Ihr nur machen falls Ihr noch keine Partition habt, also kein /dev/sda1 sondern nur /dev/sda


Wir tippen ein:

fdisk /dev/sdb

Da kommt dann etwas Text und die Aufforderung

Befehl (m für Hilfe):

Wir drücken

n

um eine neue Partition zu erstellen und dann

p

für eine Primäre Partition, dann

1

für die erste Partition.
Dann drückt 2x Enter um die vorgeschlagenen Werte zu übernehmen.
Jetzt sollte da wieder

Befehl (m für Hilfe):

stehen und wir drücken

w

um das ganze auf die Platte zu schreiben.

Das sollte also etwas so aussehen:

root@nextcloud1:~# fdisk /dev/sdb

Willkommen bei fdisk (util-linux 2.37.2).
Änderungen werden vorerst nur im Speicher vorgenommen, bis Sie sich
entscheiden, sie zu schreiben.
Seien Sie vorsichtig, bevor Sie den Schreibbefehl anwenden.

Gerät enthält keine erkennbare Partitionstabelle.
Eine neue DOS-Festplattenbezeichnung 0xdc256c5b wurde erstellt.

Befehl (m für Hilfe): n
Partitionstyp
   p   Primär (0 primär, 0 erweitert, 4 frei)
   e   Erweitert (Container für logische Partitionen)
Wählen (Vorgabe p): p
Partitionsnummer (1-4, Vorgabe 1): 1
Erster Sektor (2048-104857599, Vorgabe 2048):
Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (2048-104857599, Vorgabe 104857599):

Eine neue Partition 1 des Typs „Linux“ und der Größe 50 GiB wurde erstellt.

Befehl (m für Hilfe): w
Die Partitionstabelle wurde verändert.
ioctl() wird aufgerufen, um die Partitionstabelle neu einzulesen.
Festplatten werden synchronisiert.



Prima, jetzt haben wir eine Partition /dev/sdb1, diese formatieren wir nun mit dem ext4 Dateisystem:

mkfs.ext4 /dev/sdb1

Ausgabe:

root@nextcloud1:~# mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Geräteblöcke werden verworfen: erledigt
Ein Dateisystem mit 13106944 (4k) Blöcken und 3276800 Inodes wird erzeugt.
UUID des Dateisystems: 2ead4117-e280-4ac4-8038-f41ef64c1e70
Superblock-Sicherungskopien gespeichert in den Blöcken:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

beim Anfordern von Speicher für die Gruppentabellen: erledigt
Inode-Tabellen werden geschrieben: erledigt
Das Journal (65536 Blöcke) wird angelegt: fertig
Die Superblöcke und die Informationen über die Dateisystemnutzung werden
geschrieben: erledigt

Nun müssen wir die Festplatte noch mounten. NextCloud werden wir nach

/var/www/nextcloud

installieren. Deshalb hängen wir die neue Festplatte unterhalb von /var/www ein. In diesem Verzeichnis gibt es im Moment noch das Unterverzeichnis html was wir uns vorher wegsichern:

mv /var/www/html /tmp/html

Dann mounten wir unsere neue Partition an diesen Pfad:

mount /dev/sdb1 /var/www/

Prüfen wir ob das geklappt hat:

root@nextcloud1:~# df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs           391M    1,2M  390M    1% /run
/dev/sda2        32G    7,5G   23G   26% /
tmpfs           2,0G       0  2,0G    0% /dev/shm
tmpfs           5,0M       0  5,0M    0% /run/lock
tmpfs           391M    4,0K  391M    1% /run/user/1000
/dev/sdb1        49G     24K   47G    1% /var/www

In der letzten Zeile sehen wir das es geklappt hat.
Nun müssen wir dafür sorgen das dies auch beim nächsten Booten automatisch gemacht wird. Dazu brauchen wir die UUID die wir wie folgt herausbekommen:

ls -l /dev/disk/by-uuid/ | grep sdb

Ergebnis bei mir:

lrwxrwxrwx 1 root root 10 Jan 29 11:10 2ead4117-e280-4ac4-8038-f41ef64c1e70 -> ../../sdb1

Nun bearbeiten wir die fstab:

nano /etc/fstab

und hängen unten folgende Zeile an:

/dev/disk/by-uuid/2ead4117-e280-4ac4-8038-f41ef64c1e70 /var/www ext4 defaults 0 1

Die Werte bedeuten:

/dev/disk/by-uuid/2ead4117-e280-4ac4-8038-f41ef64c1e70   : Pfad mit UUID des Datenträgers
/var/www                                                 : Das Verzeichnis in das gemountet werden soll
ext4                                                     : Welches Dateisystem soll gemountet werden, ggf. auch mit auto probieren
defaults                                                 : Mit Standardeinstellungen / Rechten mounten, Detail siehe z.B. hier: https://wiki.archlinux.de/title/Fstab
0                                                        : Für den Befehl Dump, 0 bedeutet "keine Systempartition"
0                                                        : Für Dateisystemprüfung, 1 bedeutet "mit Prüfung" einbinden


Bevor wir nun neu Starten verschieben wir noch das html Verzeichnis zurück:

mv /tmp/html /var/www/html

Als Test nun einen Reboot - danach sollte die Platte weiterhin/wieder eingehängt sein. Das könnte ihr wieder mit df -h kontrollieren:

Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs           391M    1,2M  390M    1% /run
/dev/sda2        32G    7,5G   23G   26% /
tmpfs           2,0G       0  2,0G    0% /dev/shm
tmpfs           5,0M       0  5,0M    0% /run/lock
/dev/sdb1        49G     40K   47G    1% /var/www
tmpfs           391M    4,0K  391M    1% /run/user/1000

Nextcloud installieren

Die folgenden Installationsschritte habe ich mir aus verschiedenen Anleitungen zusammengesucht, die Quellen sind:


Datenbank erstellen

NextCloud benötigt eine MySQL / MariaDB Datenbank die wir wie folgt erstellen:

mysql -u root -e "CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
mysql -u root -e "CREATE USER 'dbusernextcloud'@'localhost' IDENTIFIED BY 'password4nextclouddb'"
mysql -u root -e "GRANT ALL PRIVILEGES ON nextcloud.* TO 'dbusernextcloud'@'localhost'"
mysql -u root -e "FLUSH PRIVILEGES"

Damit wird eine Datenbank nextcloud erstellt (falls noch nicht vorhanden) und dem lokalen Benutzer dbusernextcloud mit dem Passwort password4nextclouddb darauf Zugriff gewährt.


NextCloud herunterladen

Die folgenden Befehle laden die aktuellste Version als .zip herunter, entpacken diese in den Ordern /var/www/nextcloud, löschen die .zip und geben dem Benzutzer unter dem der Webserver läuft volle Rechte auf den Ordner:

cd /var/www/
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
rm -rf latest.zip
chown -R www-data:www-data /var/www/nextcloud/



Webserver auf NextCloud-Pfad setzen

Die Default-Webseite zeigt im Moment noch auf /var/www/html, wir ändern dies auf unser neues Verzeichnis:

nano /etc/apache2/sites-enabled/000-default.conf

Mit F9 könnt Ihr den gesamten Inhalt der Datei löschen und das nachfolgende einfügen.
Geändert wird aber erst einmal nur die Zeile mit DocumentRoot

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/nextcloud

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Wo wir schon mal dabei sind aktivieren wir gleich weitere Apache2 Module die wir gleich noch brauchen:

a2enmod rewrite dir mime env headers

und starten den Webserver dann neu:

systemctl restart apache2



Grundsetup über das Webinterface

Im Webbrowser müsstet Ihr jetzt über die IP-Adresse des Servers das Setup erreichen:

http://IP-eurer-NextCloud-VM/
ImageNextCloudSetup.png

Den Benutzernamen und das Passwort dürft Ihr euch frei ausdenken. Das wird der erste Admin-Benutzer.
Das Datenverzeichnis lasst Ihr so stehen wie vorgeschlagen auf

/var/www/nextcloud/data

Beim Datenbank-Benutzer müsst tragt Ihr - wenn Ihr mein Beispiel übernommen habt

dbusernextcloud

ein, das Passwort ist

password4nextclouddb

und der Datenbank-Name

nextcloud

Den Host last ihr wie er ist.
Auf installieren drücken und Geduld beweisen, nach 10 bis 30 Sekunden geht es weiter:

ImageNextCloudSetup2.png

Das könnt Ihr nach eigenen Gutdünken entscheiden, ich überspringe hier da ich den Server nur für den Austausch von Dateien verwenden möchte.

Es folgt eine Infoseite durch die man sich durchklickt bis man bei Los gehts! landet.

Fertig! Der grundlegende NextCloud-Server läuft nun!


Feintuning Teil 1

Im Verwaltungsbereich wird uns NextCloud ein paar Warnung bezüglich verschiedener Einstellungen geben, ein paar davon stellen wir hier ab.
Zudem folgen wir den Empfehlungen von https://mailserverguru.com/install-nextcloud-on-ubuntu-22-04-lts/ und bauen auf PHP-FPM um, das wird auch von NextCloud selbst empfohlen (aus Performancegründen):

apt install php-fpm

Der Dienst dazu sollte automatisch starten, das können wir per

 systemctl status php8.3-fpm.service

prüfen.
Nun wechseln wir die PHP-Engine von Apache:

a2dismod php8.3
a2dismod mpm_prefork
a2enmod mpm_event proxy_fcgi setenvif
a2enconf php8.3-fpm

dann bearbeiten wir die Datei

nano /etc/php/8.3/fpm/php.ini

und ändern folgende Zeilen (STRG + W ist suchen):

upload_max_filesize = 1024M 
post_max_size = 1536M 
memory_limit = 2048M 
max_execution_time = 600
max_input_vars = 3000 
max_input_time = 1000
opcache.interned_strings_buffer=32


Nun noch die FPM-Pool-Einstellungen:

nano /etc/php/8.3/fpm/pool.d/www.conf

und folgende Änderungen:

pm.max_children = 64
pm.start_servers = 16
pm.min_spare_servers = 16
pm.max_spare_servers = 32

Im Anschluss den Dients neu starten:

systemctl restart php8.3-fpm.service

Jetzt noch die Webseitenkonfiguration anpassen damit php-fpm verwendet wird:

nano /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/nextcloud


        <Directory /var/www/nextcloud>
          Options Indexes FollowSymLinks
          AllowOverride All
          Require all granted
        </Directory>

        <FilesMatch ".php$">
         SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"
        </FilesMatch>


        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Jetzt noch den Apache neu starten:

systemctl restart apache2.service

und testen, die Webseite sollte wie gewohnt funktionieren


Umbau auf https - Selbstsigniertes Zertifikat

In der http:// Anzeige funktioniert zunächst alles, aber zum Beispiel das kopieren von Links zum Teilen nicht.
Wir machen den Server also über https:// erreichbar, zunächst mit einem selbst signierten Zertifikat:
https-Unterstützung des Apache2 aktivieren:

a2enmod ssl
systemctl restart apache2

Dann erstellen wir unser eigenes SSL-Zertifikat:

openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt

Die Fragen beantwortet ihr nach eigenem Gutdünken oder eben gar nicht (einfach mit Enter bestätigen).
Bei Common Name (e.g. server FQDN or YOUR name) []: solltet Ihr den DNS-Namen eintragen unter dem der Server später erreicht werden soll:

Common Name (e.g. server FQDN or YOUR name) []:nextcloud1.test.local

Nun erstellen wir eine neue Apache2-Konfiguration für den verschlüsselten Zugriff:

nano /etc/apache2/sites-available/nextcloud-ssl.conf

mit folgendem Inhalt:

<VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/nextcloud

        <Directory /var/www/nextcloud>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile    /etc/ssl/certs/nextcloud-selfsigned.crt
        SSLCertificateKeyFile /etc/ssl/private/nextcloud-selfsigned.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>

</VirtualHost>

Der Bereich mit <Directory /var/www/nextcloud> ist wichtig damit später die .htaccess Dateien funktionieren!
Jetzt müssen wir die Seite noch aktivieren:

a2ensite nextcloud-ssl.conf
systemctl reload apache2

Nun müssen wir NextCloud noch davon erzählen - das der Zugriff per DNS-Name aus dem Zertifikat ok ist:

nano /var/www/nextcloud/config/config.php

und oben folgenden Eintrag ergänzen (der 1 =>):

  array (
   0 => '192.168.1.10',
   1 => 'nextcloud1.test.local',
 ),

und nun sollte Ihr im Webbrowser eure NextCloud-Installation auch per https erreichen. (mit Zertifikatswarnung).
Damit es über den Namen klappt müsst Ihr diesen auf eurem DNS-Server hinterlegen.


kurze URLs verwenden

Important.png
Hinweis: Das funktioniert nur wenn ihr den vorherigen Umbau auf PHP-FPM gemacht habt!


Die Links wenn Ihr später Dateien teilt enthalten immer die index.php

https://192.168.1.10/index.php/s/2D7HRQ2NnzHX8BW

Um diese Anzeige zu entfernen bearbeiten wir die Konfigurationsdatei von NextCloud:

nano /var/www/nextcloud/config/config.php

und hängen unten folgende Zeile an (vor dem ); in der letzten Zeile):

'overwrite.cli.url' => 'https://nextcloud1.test.local/',
'htaccess.RewriteBase' => '/',

Speichern und dann folgenden Befehl ausführen:

sudo -u www-data php --define apc.enable_cli=1 /var/www/nextcloud/occ maintenance:update:htaccess

Ab jetzt müsstet Ihr den Server über seinen DNS-Namen aufrufen!


LDAP / Active Directory anbinden

Für die LDAP-Anbindung muss das LDAP-PHP Modul installiert sein, nach dieser Anleitung ist das schon der Fall.
Ansonsten:

apt install php-ldap


Zunächst brauchen wir im Active Directory einen Benutzer für die LDAP-Abfrage.
Das ist ein ganz normales Benutzerkonto ohne weitere Rechte, es muss sich nur am AD anmelden können.
Erstellt den Benutzer. Der Benutzer sollte nicht mehr in eine andere OU verschoben werden nachdem er in NextCloud eingetragen wurde.
Ich nenne meinen Benutzer

ldapnextcloud

Das Kennwort des Benutzers sollte nie ablaufen und er muss es auch nicht bei der nächsten Anmeldung ändern.
Jetzt brauchen wir noch den Distinguished Name des Benutzers. Öffnet auf dem Domänencontroller eine Eingabeaufforderung und nutz folgenden Befehl:

dsquery user -samid ldapnextcloud

Beispielausgabe:

"CN=ldapnextcloud,OU=Funktionsbenutzer,OU=Benutzer,OU=Sonstiges,DC=test,DC=local"

Den Pfad, ohne die " " brauchen wir gleich.
Dann bauen wir noch eine Gruppe. Nur Mitglieder in dieser Gruppe sollen NextCloud nutzen können.
Ich nenne meine Gruppe hier "nextcloud". Den Distinguished Name brauchen wir ebenfalls, diesen ermitteln wir mit dem gleichen Befehl wie zuvor:

dsquery group -samid nextcloud

Ausgabe:

"CN=nextcloud,OU=VerwaltungsGruppen,OU=Gruppen,OU=Sonstiges,DC=test,DC=local"

Zum testen packen wir auch ein paar Benutzer in diese Gruppe.


Wir gehen in der Managementoberfläche in das Apps-Menü und aktivieren das LDAP user an group backend:
ImageNextCloudLDAP1.png

Danach könnt Ihr wieder zurück in die Verwaltungseinstellungen wechseln, dort gibt es nun einen neuen Abschnitt "LDAP/AD-Integration":

Auf der ersten Seite tragen wir unseren Server ein. Das kann eine IP-Adresse sein, aber auch ein Domänenname. In der Regel wird Port 389 verwendet, das ist der unverschlüsselt LDAP-Port. Kopiert den DN des benutzers hinein und sein Passwort. Drückt auf Zugangsdaten speichern und danach auf Base DN ermitteln - das ist dann der erste Test ob der Zugriff klappt.

ImageNextCloudLDAP2.png

Mit Fortsetzen wechseln wir auf den Reiter Benutzer. Hier können wir unter Nur aus diesen Gruppen nach unserer Gruppe suchen:

ImageNextCloudLDAP3.png

Markiert den Treffer (2) und drückt dann auf <code>></code> bei (3)

Der LDAP-Filter sollte sich dann entsprechend ändern:

ImageNextCloudLDAP4.png

Nach einem Klick auf Fortsetzen können wir wählen welche Attribute für die Anmeldung erlaubt sind, ob Benutzername und/oder Emailadresse:

ImageNextCloudLDAP5.png

Unten links könnt Ihr das testen.

Bei Bedarf können auch noch Gruppen ausgewählt werden die in NextCloud verwendet werden sollen.

Wenn Ihr nun in die Benutzerverwaltung wechselt, tauchen dort die Gruppenmitglieder aus dem Active Directory auf:

ImageNextCloudLDAP6.png


Cronjob für interne Verarbeitung einrichten

NextCloud muss von Zeit zu Zeit Hintergrundaufgaben ausführen. NextCloud ist aber eine PHP-Anwendung in einer Webseite und würde somit nur beim Aufruf der Seite ausgeführt. Damit regelmäßige Aufgaben auch ausgeführt werden wenn niemand gerade die Webseite benutzt richten wir einen CronJob ein.
In NextCloud stellt Ihr unter

Verwaltungseinstellungen => Verwaltung - Grundeinstellungen

Die Hintergrund-Job um auf Cron

Auf der NextCloud-VM melden wir uns per SSH (puTTY) an, wechseln zum root Benutzer und geben folgenden Befehl ein:

crontab -u www-data -e

Falls da eine Auswahl kommt die nach dem zu verwendenden Editor fragt nehmt die 1. /bin/nano
Hängt unten and die Datei die folgenden Zeile an:

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

Speichern und fertig! In der Weboberfläche wo Ihr auf Cron umgestellt habt könnt Ihr - als ungefähre Zeitangabe wie Der letzte Job lief vor einer Minute sehen ob es funktioniert.


Backup der VM (Hot Backup - Datenbank einfrieren)

Bei dieser Methode passiert folgendes:

  • Die Datenbank wird vor einem Snapshot auf "READ ONLY" gesetzt - zuvor werden noch alle Daten geschrieben ("FLUSH TABLES")
  • Der Snapshot wird erstellt
  • Die Datenbank wird wieder für Schreibzugriffe freigegeben


Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:

nano /usr/sbin/pre-freeze-script

mit folgendem Inhalt:

Warning.png
Warnung: Vergesst nicht das Passwort in Zeile 9 zu setzen (steht auf Leer was per Default passen sollte)
#!/bin/sh
# 2018-04-20 Bernhard Linz
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information
# Log will be write to syslog and(!) to /tmp/snapshot.log
echo "$0 pre-freeze start" | logger
echo "-------------------------------------------------------------------------------------" >> /tmp/snapshot.log
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') pre-freeze start" >> /tmp/snapshot.log
# Set Username and Passwort for MySQL Access. Set mysql_password="" if no password needed
mysql_username="root"
mysql_password=""
timeout=300

# ************************************************************************************************
# No Changes behind this line!
# ************************************************************************************************
# Check if username + password is used
if [ -n "$mysql_password" ]; then
    use_credentials="-u$mysql_username -p$mysql_password"
else
    use_credentials=""
fi

# Name of the Lockfile
lock_file=/tmp/mysql_tables_read_lock

sleep_time=$((timeout+10))
rm -f $lock_file
echo "$0 executing FLUSH TABLES WITH READ LOCK" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') executing FLUSH TABLES WITH READ LOCK" >> /tmp/snapshot.log

# Start READ LOCK - Process will send to background (and will still run after script is completed. Lock will stop if process is stopped
# After READ ONLY mode is entered the lockfile will be created. Process will stop when getting stop signal from post-thaw-script or timeout reached
mysql $use_credentials -e "FLUSH TABLES WITH READ LOCK; system touch $lock_file; system nohup sleep $sleep_time; system echo lock released|logger; " > /dev/null &
# get the PID of the mysql process
mysql_pid=$!

echo "$0 child pid $mysql_pid" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') child pid $mysql_pid" >> /tmp/snapshot.log

# Waiting for the lockfile ...
c=0
while [ ! -f $lock_file ]
do
    # check if mysql is running
    if ! ps -p $mysql_pid 1>/dev/null ; then
        echo "$0 mysql command has failed (bad credentials?)" | logger
        echo "$0 $(date '+%Y-%m-%d %H:%M:%S') mysql command has failed (bad credentials?)" >> /tmp/snapshot.log
        exit 1
    fi
    sleep 1
    c=$((c+1))
    # check if the script run into timeout
    if [ $c -gt $timeout ]; then
        echo "$0 timed out waiting for lock" | logger
        echo "$0 $(date '+%Y-%m-%d %H:%M:%S') timed out waiting for lock" >> /tmp/snapshot.log
        touch $lock_file
        kill $mysql_pid
    fi
done
# write PID into the lockfile
echo $mysql_pid > $lock_file

echo "$0 pre-freeze stop" | logger
echo "$0 $(date '+%Y-%m-%d %H:%M:%S') pre-freeze stop" >> /tmp/snapshot.log

exit 0


und

nano /usr/sbin/post-thaw-script
#!/bin/sh
# 2018-04-20 Bernhard Linz
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information
# Log will be write to syslog and(!) to /tmp/snapshot.log
echo "$0 post-thaw start" | logger
echo "$0  $(date '+%Y-%m-%d %H:%M:%S') post-thaw start" >> /tmp/snapshot.log

lock_file=/tmp/mysql_tables_read_lock

# get PID from lockfile
mysql_pid=$(cat $lock_file)
echo "$0 sending sigterm to $mysql_pid" | logger
echo "$0  $(date '+%Y-%m-%d %H:%M:%S') sending sigterm to $mysql_pid" >> /tmp/snapshot.log
# and send stop to process
pkill -9 -P $mysql_pid
rm -f $lock_file

echo "$0 post-thaw stop" | logger
echo "$0  $(date '+%Y-%m-%d %H:%M:%S') post-thaw stop" >> /tmp/snapshot.log

exit 0


Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:

chmod 0700 /usr/sbin/pre-freeze-script
chmod 0700 /usr/sbin/post-thaw-script
chown root:root /usr/sbin/pre-freeze-script
chown root:root /usr/sbin/post-thaw-script


Voraussetzung ist das die VMware-Tools installiert sind!
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:

ClipCapIt-200521-204401.PNG


Beispielausgabe aus der

cat /tmp/snapshot.log
-------------------------------------------------------------------------------------
/usr/sbin/pre-freeze-script 2023-03-20 12:49:14 pre-freeze start
/usr/sbin/pre-freeze-script 2023-03-20 12:49:14 executing FLUSH TABLES WITH READ LOCK
/usr/sbin/pre-freeze-script 2023-03-20 12:49:14 child pid 11824
/usr/sbin/pre-freeze-script 2023-03-20 12:49:15 pre-freeze stop
/usr/sbin/post-thaw-script  2023-03-20 12:49:18 post-thaw start
/usr/sbin/post-thaw-script  2023-03-20 12:49:18 sending sigterm to 11824
/usr/sbin/post-thaw-script  2023-03-20 12:49:18 post-thaw stop


Falls es mit dem Passwort mal hakt so müsste das auch dort stehen:

/usr/sbin/pre-freeze-script 2018-06-13 12:01:04 mysql command has failed (bad credentials?)

Mehr Details stehen ggf. im syslog

tail -f -n 500 /var/log/syslog

In den meisten Umgebungen geht das so schnell das die Anwendungen das nicht einmal mitbekommen (4 bis 5 Sekunden).
Es müsste schon in diesen Sekunden ein Schreibzugriff stattfinden - und dieser würde dann statt Millisekunden die 4 bis 6 Sekunden dauern.

Important.png
Hinweis: Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!





Festplatte im laufenden Betrieb vergrößern

Ihr habt den NextCloud-Server nach dieser Anleitung hier als VM installiert (und ohne LVM) und nun geht euch der Platz aus?
Kein Problem, Ihr könnt die Festplatte im laufenden Betrieb vergößern!


Schritt 1: Platz an die Festplatte anhängen

  • Stellt sicher das auf der VM zur zeit kein Snapshot aktiv ist!
  • Vergrößert die Festplatte um den benötigten Speicherplatz

in dem Beispiel hier wird der Platz von 50 auf 100GB vergrößert.


Schritt 2: Betriebssystem die neue Größe erkennen lassen

Die einfachste und sicherste Methode ist den Server neu zu starten.
Wer will kann es aber auch im laufenden Betrieb durchführen, und das geht so:

Wir müssen die Festplattenkontroller-Adapternummer ermitteln:

grep mpt /sys/class/scsi_host/host*/proc_name

findet er nichts probiert

grep pvscsi /sys/class/scsi_host/host*/proc_name

Beispielausgaben (eine von beiden wird kommen):

/sys/class/scsi_host/host32/proc_name:mptspi
/sys/class/scsi_host/host2/proc_name:vmw_pvscsi

Die Nummer ist in diesem Fall host2! Die brauchen wir für den nächsten Befehl:

find /sys -name rescan | grep host2

Beispielausgabe:

/sys/devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/rescan
/sys/devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/rescan

Das sind unsere beiden Festplatten, die mit "target2:0:0" ist unsere Bootplatte, die mit "target2:0:1" unsere zweite Festplatte. Keine Angst, es geht nicht kaputt wenn ihr den nächsten Befehl an die falsche Festplatte sendet.<bt> Ok, an die 2. Festplatte schicken wir jetzt eine 1 um den Rescan auszulösen:

echo 1 > /sys/devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:1/2:0:1:0/rescan

Fertig!

Im Anschluß zur Kontrolle ein

fdisk -l

Die Ausgabe sollte ähnlich wie diese sein:

Festplatte /dev/sda: 25 GiB, 26843545600 Bytes, 52428800 Sektoren
Festplattenmodell: Virtual disk
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 9BE90D25-A550-48DB-9E50-6CAC38D87217

Gerät       Anfang     Ende Sektoren Größe Typ
/dev/sda1     2048  2203647  2201600    1G EFI-System
/dev/sda2  2203648 52426751 50223104 23,9G Linux-Dateisystem
 

Festplatte /dev/sdb: 100 GiB, 107374182400 Bytes, 209715200 Sektoren
Festplattenmodell: Virtual disk
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x725104eb

Gerät      Boot Anfang      Ende  Sektoren Größe Kn Typ
/dev/sdb1         2048 104857599 104855552   50G 83 Linux

Wir können sehen das sdb nun 100GB groß ist, in der letzten zeile sehen wir aber das die Partition sdb1 zur Zeit noch 50Gb groß ist - prima!

Schritt 3: Partition vergrößern

Das /var/www Verzeichnis unserer zweiten Festplatte befindet sich auf dem Gerät

/dev/sdb1

wenn Ihr nach dieser Anleitung installiert hattet. Kontrollieren könnte Ihr das z.B. mit

df -h

und dann schauen was links vom Verzeichnis / steht:

Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs           391M    1,2M  390M    1% /run
/dev/sda2        32G    7,6G   23G   26% /
tmpfs           2,0G       0  2,0G    0% /dev/shm
tmpfs           5,0M       0  5,0M    0% /run/lock
/dev/sdb1        49G    655M   46G    2% /var/www
tmpfs           391M    4,0K  391M    1% /run/user/1000

Die nächsten Befehle gehen von /dev/sdb1, wenn der Pfad anderes ist müsst Ihr diesen anpassen!

growpart /dev/sdb 1
resize2fs /dev/sdb1

Ja, beim ersten Befehl ist da ein Leerzeichen zwischen dem sdb und der 1, beim zweiten Befehl nicht.

Schritt 4: Das war schon alles!

Ihr könnt mit

df -h

es einmal kontrollieren - aber das war schon alles:

Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs           391M    1,2M  390M    1% /run
/dev/sda2        32G    7,6G   23G   26% /
tmpfs           2,0G       0  2,0G    0% /dev/shm
tmpfs           5,0M       0  5,0M    0% /run/lock
/dev/sdb1        99G    655M   93G    1% /var/www
tmpfs           391M    4,0K  391M    1% /run/user/1000

Feintuning Teil 2

Warning.png
Warnung: Ihr könnte die nachfolgenden Zeilen so in die config.php einfügen, inklusive der Kommentare dahinter. Diese werden aber bei der nächsten Konfigurationsänderung über die Weboberfläche wieder verschwinden, Nextcloud schreibt dann jedes mal die gesamte Datei neu.

Wir editieren die Datei

nano /var/www/nextcloud/config/config.php

und setzen noch zusätzlich folgende Optionen:

  'defaultapp' => 'files',                         // Standardansicht nach der Anmeldung ist nun die Dateiansicht.
  'skeletondirectory' => '',                       // Neuen Benutzern werden nicht die üblichen Startdateien kopiert
  'default_language' => 'de',                      // Anzeigesprache Deutch, kann sich der Benutzer umstellen
  'overwritehost' => 'nextcloud1.test.local',      // Keine Autoermittlung der URL sondern in Links diesen Host einsetzen (wichtig für Reverse Proxy)
  'overwriteprotocol' => 'https',                  // Keine Autoermittlung des Protokolls sondern immer dieses in Links verwenden
  'versions_retention_obligation' => 'auto, 30',   // Versionen gemäß Plan behalten, Versionen älter als 30 Tage aber löschen.
  //'versions_retention_obligation' => 'disabled', // Alternativ: Versionierung deaktivieren
  'trashbin_retention_obligation' => '3,7',        // gelöschte Dateien bleiben mindestens 3 Tage im Papierkorb und werden spätestens nach 7 Tagen gelöscht
  //'trashbin_retention_obligation' => '3,auto',   // gelöschte Dateien bleiben mindestens 3 Tage im Papierkorb und werden bei Bedarf automatisch gelöscht
  //'trashbin_retention_obligation' => 'auto,7',   // Dateien werden bei Bedarf automatisch gelöscht

Feintuning Teil 3

und noch mehr Optionen für die

nano /var/www/nextcloud/config/config.php

und zwar:

 'force_language' => 'de',                         // und zwar Zwangsweise, der Benutzer kann diese nicht ändern
 'default_locale' => 'de_DE',                      // Für Editoren & Co
 'force_locale' => 'de_DE',                        // wieder zwangsweise
 'default_phone_region' => 'DE',                   // Telefonnummern ist per Default aus Deutschland
 'maintenance_window_start' => 1,                  // Intensive Wartung um 01:00 und 05:00 Uhr ausführen

und für die Apache2 Konfigurationsdatei:

nano /etc/apache2/sites-available/nextcloud-ssl.conf

folgendes mit einbauen:

       <IfModule mod_headers.c>
               Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
       </IfModule>

Was dafür sorgt das https nicht umgangen werden kann.


MBR Datenträger in GPT Datenträger umwandeln

Warning.png

Warnung:

Das sah erst ganz gut aus, jedoch wurden mir dann in der Konsole viele Schreibfehler angezeigt, also Kernel Fehler das ein Schreibvorgang ablehnt wurde. Ich habe dann doch alles von der Festplatte wegkopiert, diese gelöscht und neu erstellt, diesmal gleich als GPT-Datenträger, und alles wieder zurück kopiert

In einer früheren Version dieser Anleitung wurde bei der Erstellung der zusätzlichen Festplatte diese als MBR statt als GPT erstellt.
Das Problem ist das diese dann nicht größer als 2TB werden kann.
Zum Glück kann man das nachträglich noch ändern - ohne Datenverlust: (Snapshot der VM vorher schadet nicht)

Damit keiner die Festplatte benutzt:

systemctl stop apache2.service php8.3-fpm

Festplatte unmounten

umount /var/www

Auf gpt umstellen:

gdisk /dev/sdb

Wenn da aber eine Meldung steht wie

Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.

Dann brecht an dieser Stelle mit q ab! Dann geht es nicht! Wenn da keine Warnung steht, dann

w

drücken.
Dem Betriebssystem mitteilen das sich da etwas geändert hat:

partprobe /dev/sdb

und mit einem

mount -a

ist alles wieder gemountet. Ihr könnt die Dienste wieder starten oder das System einmal rebooten.
Quelle: https://www.ubuntubuzz.com/2023/05/safely-convert-hard-disk-to-gpt-without-data-loss.html


Kommentare

Loading comments...