├── images ├── image1.png ├── image10.png ├── image11.png ├── image12.png ├── image13.png ├── image14.png ├── image15.png ├── image16.png ├── image17.png ├── image18.png ├── image19.png ├── image2.png ├── image20.png ├── image21.png ├── image22.png ├── image23.png ├── image24.png ├── image25.png ├── image26.png ├── image27.png ├── image28.png ├── image29.png ├── image3.png ├── image30.png ├── image31.png ├── image32.png ├── image33.png ├── image34.png ├── image35.png ├── image36.png ├── image37.png ├── image38.png ├── image39.png ├── image4.png ├── image40.png ├── image41.png ├── image42.png ├── image43.png ├── image44.png ├── image45.png ├── image46.png ├── image47.png ├── image48.png ├── image49.png ├── image5.png ├── image50.png ├── image51.png ├── image52.png ├── image53.png ├── image54.png ├── image7.png ├── image8.png ├── image9.png ├── KalenderTab.jpg ├── KontakteOkt2023.jpg ├── Kontakte_Menue.jpg ├── Konto_exportieren.jpg ├── Kontakte_Importieren.jpg ├── playstore_kontakte.jpg ├── Konto_exportierenOkt2023.jpg ├── Kontakte_ImportierenOkt2023.jpg ├── ThunderbirdKalenderHinzufügen.jpg ├── Kontakte_Einstellungen_Aufrufen.jpg ├── Kontakte_Importieren_Speicherort.jpg └── Einstellungen_Kontakte_exportieren.jpg └── README.md /images/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image1.png -------------------------------------------------------------------------------- /images/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image10.png -------------------------------------------------------------------------------- /images/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image11.png -------------------------------------------------------------------------------- /images/image12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image12.png -------------------------------------------------------------------------------- /images/image13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image13.png -------------------------------------------------------------------------------- /images/image14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image14.png -------------------------------------------------------------------------------- /images/image15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image15.png -------------------------------------------------------------------------------- /images/image16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image16.png -------------------------------------------------------------------------------- /images/image17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image17.png -------------------------------------------------------------------------------- /images/image18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image18.png -------------------------------------------------------------------------------- /images/image19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image19.png -------------------------------------------------------------------------------- /images/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image2.png -------------------------------------------------------------------------------- /images/image20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image20.png -------------------------------------------------------------------------------- /images/image21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image21.png -------------------------------------------------------------------------------- /images/image22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image22.png -------------------------------------------------------------------------------- /images/image23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image23.png -------------------------------------------------------------------------------- /images/image24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image24.png -------------------------------------------------------------------------------- /images/image25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image25.png -------------------------------------------------------------------------------- /images/image26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image26.png -------------------------------------------------------------------------------- /images/image27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image27.png -------------------------------------------------------------------------------- /images/image28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image28.png -------------------------------------------------------------------------------- /images/image29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image29.png -------------------------------------------------------------------------------- /images/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image3.png -------------------------------------------------------------------------------- /images/image30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image30.png -------------------------------------------------------------------------------- /images/image31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image31.png -------------------------------------------------------------------------------- /images/image32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image32.png -------------------------------------------------------------------------------- /images/image33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image33.png -------------------------------------------------------------------------------- /images/image34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image34.png -------------------------------------------------------------------------------- /images/image35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image35.png -------------------------------------------------------------------------------- /images/image36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image36.png -------------------------------------------------------------------------------- /images/image37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image37.png -------------------------------------------------------------------------------- /images/image38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image38.png -------------------------------------------------------------------------------- /images/image39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image39.png -------------------------------------------------------------------------------- /images/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image4.png -------------------------------------------------------------------------------- /images/image40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image40.png -------------------------------------------------------------------------------- /images/image41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image41.png -------------------------------------------------------------------------------- /images/image42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image42.png -------------------------------------------------------------------------------- /images/image43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image43.png -------------------------------------------------------------------------------- /images/image44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image44.png -------------------------------------------------------------------------------- /images/image45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image45.png -------------------------------------------------------------------------------- /images/image46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image46.png -------------------------------------------------------------------------------- /images/image47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image47.png -------------------------------------------------------------------------------- /images/image48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image48.png -------------------------------------------------------------------------------- /images/image49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image49.png -------------------------------------------------------------------------------- /images/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image5.png -------------------------------------------------------------------------------- /images/image50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image50.png -------------------------------------------------------------------------------- /images/image51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image51.png -------------------------------------------------------------------------------- /images/image52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image52.png -------------------------------------------------------------------------------- /images/image53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image53.png -------------------------------------------------------------------------------- /images/image54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image54.png -------------------------------------------------------------------------------- /images/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image7.png -------------------------------------------------------------------------------- /images/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image8.png -------------------------------------------------------------------------------- /images/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/image9.png -------------------------------------------------------------------------------- /images/KalenderTab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/KalenderTab.jpg -------------------------------------------------------------------------------- /images/KontakteOkt2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/KontakteOkt2023.jpg -------------------------------------------------------------------------------- /images/Kontakte_Menue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Kontakte_Menue.jpg -------------------------------------------------------------------------------- /images/Konto_exportieren.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Konto_exportieren.jpg -------------------------------------------------------------------------------- /images/Kontakte_Importieren.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Kontakte_Importieren.jpg -------------------------------------------------------------------------------- /images/playstore_kontakte.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/playstore_kontakte.jpg -------------------------------------------------------------------------------- /images/Konto_exportierenOkt2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Konto_exportierenOkt2023.jpg -------------------------------------------------------------------------------- /images/Kontakte_ImportierenOkt2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Kontakte_ImportierenOkt2023.jpg -------------------------------------------------------------------------------- /images/ThunderbirdKalenderHinzufügen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/ThunderbirdKalenderHinzufügen.jpg -------------------------------------------------------------------------------- /images/Kontakte_Einstellungen_Aufrufen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Kontakte_Einstellungen_Aufrufen.jpg -------------------------------------------------------------------------------- /images/Kontakte_Importieren_Speicherort.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Kontakte_Importieren_Speicherort.jpg -------------------------------------------------------------------------------- /images/Einstellungen_Kontakte_exportieren.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JsBergbau/BaikalAnleitung/HEAD/images/Einstellungen_Kontakte_exportieren.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kalender und Kontakte mit Baikal sicher verwalten 2 | 3 | ## Inhaltsverzeichnis 4 | 5 | - [Einleitung](#einleitung) 6 | - [Alternativen](#alternativen) 7 | - [Baikal](#baikal) 8 | - [Setup](#setup) 9 | - [Raspberry PI vorbereiten](#raspberry-pi-vorbereiten) 10 | - [Baikal Installation](#baikal-installation) 11 | - [Webserver-Konfiguration](#webserver-konfiguration) 12 | - [Baikal Ersteinrichtung](#baikal-ersteinrichtung) 13 | - [Benutzereinrichtung](#benutzereinrichtung) 14 | - [Maildienst Einrichtung (optional, nur für Einladungsmails)](#maildienst-einrichtung-optional-nur-f%C3%BCr-einladungsmails) 15 | - [Baikal-Update](#baikal-update) 16 | - [Benutzerlogin](#benutzerlogin) 17 | - [Freigabe des Kalenders für andere Benutzer](#freigabe-des-kalenders-für-andere-benutzer) 18 | - [Gemeinsame Kontakte](#gemeinsame-kontakte) 19 | - [Zugriff](#zugriff) 20 | - [Thunderbird](#thunderbird) 21 | - [Kalender in Thunderbird](#kalender-in-thunderbird) 22 | - [Kontakte in Thunderbird verwalten](#kontakte-in-thunderbird-verwalten) 23 | - [Apple](#apple) 24 | - [Android](#android) 25 | - [Übertragen der Kontakte vom vorherigen Speicherort zu DAVx5](#übertragen-der-kontakte-vom-vorherigen-speicherort-zu-davx5) 26 | - [Browser](#browser) 27 | - [Erfolgskontrolle](#erfolgskontrolle) 28 | - [Zugriff von unterwegs (Fortgeschritten)](#zugriff-von-unterwegs-fortgeschritten) 29 | - [Exkurs: Was tun ohne öffentliche IP-Adresse](#exkurs-was-tun-ohne-öffentliche-ip-adresse) 30 | - [Haltbarkeit der SD-Karte verlängern](#haltbarkeit-der-sd-karte-verlängern) 31 | - [Backup](#backup) 32 | - [Datenbank verkleinern (nur für Experten)](#datenbank-verkleinern-nur-für-experten) 33 | - [Weboberfläche](#weboberfläche) 34 | - [Stromsparen beim Raspberry-PI](#stromsparen-beim-raspberry-pi) 35 | - [Abschalten des HDMI-Ausgangs](#abschalten-des-hdmi-ausgangs) 36 | - [LEDs abschalten](#leds-abschalten) 37 | - [Netzteil](#netzteil) 38 | - [Creative Commons Lizenz](#creative-commons-lizenz) 39 | 40 | # [Leistungssteigerung von Heizkörpern](https://github.com/JsBergbau/HeizkoerperLeistungssteigerung) 41 | Da Google bisher seit über 3 Jahren mein Repository zur Steigerung der Leistung von Heizkörpern noch nicht indexiert hat, erfolgt hier eine Verlinkung. Gerade für die kalte Jahreszeit kann das sehr hilfreich sein, um nicht frieren zu müssen. Hier gehts zur [Leistungssteigerung von Heizkörpern](https://github.com/JsBergbau/HeizkoerperLeistungssteigerung) mit einfachen Lüftern um je nach Situation Energie zu sparen oder zumindest nicht zu frieren https://github.com/JsBergbau/HeizkoerperLeistungssteigerung 42 | 43 | ## Einleitung 44 | 45 | In diesem Tutorial geht es darum mit Baikal einen eigenen Kalender- und 46 | Kontakte-Server aufzusetzen. Hierfür hat sich für Kalender der CalDAV 47 | Standard etabliert, während es für Kontakte der CardDAV Standard ist. In 48 | dieser Anleitung wird, je nach Gebiet, mehr oder weniger ausführlich 49 | darauf eingegangen einen eigenen Server aufzusetzen. 50 | 51 | ## Alternativen 52 | 53 | Bevor wir mit der Installation beginnen, hier ein paar Alternativen: 54 | 55 | - Radicale: Webinterface ist standardmäßig nur auf localhost erreichbar. 56 | Die Oberfläche sieht im Vergleich zu Baikal altbacken aus. Freigabe von 57 | Kalendern zwischen Benutzern ist nicht direkt möglich. Lediglich über Umwege durch den Administrator kann es mit Verknüpfungen im Dateisystem realisiert werden. 58 | Ein automatisiertes Senden von Einladungsmails wie [unten beschrieben](#maildienst-einrichtung-optional-nur-f%C3%BCr-einladungsmails) ist nicht möglich. 59 | 60 | - DAViCal: Sehr mächtiger Funktionsumfang, auch das Freigeben von Kalendern. 61 | Ist aber aufwendiger, da unbedingt eine PostgreSQL-Datenbank benötigt wird. 62 | Funktionsumfang eignet sich eher für kleine Firmen/Teams, da Berechtigungen 63 | auch auf Gruppenebene vergeben werden können. So ist es z.B. möglich zu 64 | sehen, ob ein anderer Benutzer „frei" ist oder schon einen Termin hat. 65 | Wer sich dafür interessiert, kann [hier](https://www.youtube.com/watch?v=XH0wOLOgLwI) 66 | ab 13:42 einen Einblick in die Administrationsoberfläche und ein paar 67 | Erklärungen bekommen. 68 | 69 | - Nextcloud: Bietet weit mehr als eine Kalender- und Kontaktesynchronisation. 70 | War aber selbst auf dem Raspberry PI 4 mit 2 GB RAM ziemlich langsam. Für 71 | Dateisynchronisierungen bevorzuge ich lieber Syncthing. Auch den 72 | Einrichtungsaufwand fand ich vergleichsweise hoch. Liegt wohl daran, 73 | dass es viel mehr zu tun gibt, weil es deutlich mehr als nur Kalender- 74 | und Kontaktesynchronisationen bietet. 75 | 76 | ## Baikal 77 | 78 | Kommen wir nun zu dem Programm mit dem wir uns in dieser Anleitung 79 | beschäftigen: Baikal 80 | 81 | Download unter [https://github.com/sabre-io/Baikal](https://github.com/sabre-io/Baikal) 82 | 83 | Es benötigt eine lauffähige PHP-Umgebung und kann damit prinzipiell auf 84 | allen Systemen installiert werden, auf denen ein Webserver mit PHP 85 | verfügbar ist. Es kann mit einer MySQL-Datenbank arbeiten, aber genauso 86 | mit SQLite, einer Datenbank in einer einzigen Datei. Das ist die für uns 87 | bevorzugte Variante, da dies erheblich weniger Konfigurationsaufwand 88 | erfordert und viel portabler ist. Es braucht lediglich das 89 | Baikal-Verzeichnis gesichert zu werden um auf ein anderes System 90 | umzuziehen. Es bietet gleichzeitig die Möglichkeit einen Kalender für 91 | andere Benutzer freizugeben. Für eine Familie ist der Funktionsumfang 92 | vollkommen ausreichend. Dank Betrieb auf einem Raspberry PI-Zero W 93 | beträgt der Stromverbrauch weniger als 1 Watt. Die Leistung eines 94 | Raspberry PI Zero W ist im Betrieb vollkommen ausreichend. Solltet ihr 95 | einen leistungsfähigeren Raspberry PI zur Verfügung haben, könnt ihr die 96 | Baikal-Einrichtung auch auf diesem ausführen und dann die SD-Karte in 97 | den endgültigen Rasbperry-PI Zero W umstecken. Richtet in diesem Fall 98 | die Konten in Thunderbird und DAVx5 bitte erst danach ein, weil sich 99 | wahrscheinlich die IP-Adresse eures Raspberry PIs ändert. Gegebenenfalls 100 | solltet ihr in eurem Router einrichten, dass er immer dieselbe 101 | IP-Adresse bekommt, sonst ist er eventuell nicht mehr unter der 102 | eingerichteten Adresse erreichbar. Bei einer Fritzbox ist das nicht 103 | notwendig, sofern der Raspberry PI immer läuft (kurze Unterbrechungen 104 | natürlich ausgenommen). 105 | 106 | ## Setup 107 | 108 | In diesem Beispiel nehmen wir einen Raspberry PI mit Nginx als 109 | Webserver. Als Basis nehmen wir ein Raspbery PI OS Lite Image und 110 | flashen es via Etcher auf eine SD-Karte. 111 | 112 | ### Raspberry PI vorbereiten 113 | 114 | 115 | 116 | Wer hier weitere Unterstützung braucht, kann z.B. nach dieser Anleitung 117 | [https://tutorials-raspberrypi.de/rapbian-betriebssystem-raspberry-pi-image-sd-karte-flashen-windows-mac-linux/](https://tutorials-raspberrypi.de/rapbian-betriebssystem-raspberry-pi-image-sd-karte-flashen-windows-mac-linux/) 118 | vorgehen. Raspbian Buster Lite findet man auf 119 | [https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit](https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit) 120 | 121 | Nach dem Schreiben des Abbilds auf die SD-Karte, nehmen wir sie kurz aus 122 | dem Kartenleser und stecken sie wieder ein. Dadurch bekommen wir nun 123 | Zugriff auf ein Laufwerk namens `Boot`. Die Fehlermeldungen können 124 | ignoriert werden. Jetzt erstellen wir eine Datei `ssh.txt` (oder auch nur 125 | ssh möglich). Wer einen Raspberry PI Zero W verwendet, kann auch eine 126 | `wpa_supplicant.conf` hier ablegen, damit der PI automatisch den Weg ins 127 | WLAN findet. 128 | 129 | Eine Anleitung hierfür findet sich unter 130 | [https://pi-buch.info/wlan-schon-vor-der-installation-konfigurieren/](https://pi-buch.info/wlan-schon-vor-der-installation-konfigurieren/) 131 | Auch wenn dort von Raspbian Stretch (=Vorgängerversion) die Rede ist, 132 | funktioniert der dort beschriebene Weg genauso. 133 | 134 | 135 | 136 | Anschließend starten wir den Raspberry-PI. Via SSH können wir uns nun 137 | verbinden. Wer hierbei Unterstützung braucht, findet sie hier 138 | [https://www.elektronik-kompendium.de/sites/raspberry-pi/2206121.htm](https://www.elektronik-kompendium.de/sites/raspberry-pi/2206121.htm) 139 | 140 | Die IP bekommt man meistens mit einem `ping raspberrypi` oder `ping 141 | raspberrypi.local` heraus. Ansonsten kann man auch mal im Router bei den 142 | Netzwerkgeräten nachsehen. Weitere Hilfe zum Herausfinden der IP gibt's 143 | unter 144 | [https://www.elektronik-kompendium.de/sites/raspberry-pi/1906271.htm](https://www.elektronik-kompendium.de/sites/raspberry-pi/1906271.htm) 145 | 146 | Als erstes wird das System auf den aktuellen Stand gebracht. 147 | 148 | ```sh 149 | sudo apt update && sudo apt upgrade -y 150 | ``` 151 | 152 | Je nach Paketen, z.B. bei Firmware oder Kernel Updates ist ein Neustart 153 | notwendig. Dieser wird mit `sudo reboot` erledigt 154 | 155 | Anschließend werden die benötigten Pakete installiert 156 | 157 | ```sh 158 | sudo apt-get install nginx php-fpm php-sqlite3 composer php-xml php-curl -y 159 | ``` 160 | 161 | ### Baikal Installation 162 | 163 | Die aktuelle Release-Version von Baikal ist 0.7.1. Um immer auf dem aktuellsten Stand zu sein erstellen wir 164 | hier die aktuellste Version direkt aus dem Quellcode. Teilweise findet 165 | man Artikel die einem nahelegen, dass man noch an der PHP-Sicherheit 166 | etwas einstellen müsste. Dies ist heutzutage nicht mehr notwendig, siehe 167 | [https://serverfault.com/questions/627903/is-the-php-option-cgi-fix-pathinfo-really-dangerous-with-nginx-php-fpm](https://serverfault.com/questions/627903/is-the-php-option-cgi-fix-pathinfo-really-dangerous-with-nginx-php-fpm) 168 | 169 | **Update 07.07.2020**. Mittlerweile ist Baikal 0.7.1 als Release-Version 170 | verfügbar. Wir können auch weiterhin über den in diesem Abschnitt beschriebenen Weg stets die 171 | aktuellste Version installieren. 172 | 173 | ```sh 174 | cd /home/pi 175 | mkdir DiensteUndProgramme 176 | cd ./DiensteUndProgramme 177 | git clone https://github.com/sabre-io/Baikal 178 | cd Baikal 179 | composer install 180 | ``` 181 | 182 | Diese Anleitung verwendet Port 9999 für Baikal. Wie ich allerdings nach dem Erstellen der Screenshots festgestellt habe, läuft ebenfalls 183 | Influxdb 2.0 auf Standardmäßig auf Port 9999. Wenn ihr also mal eine InfluxDB 184 | auf demselben System aufsetzen wollt (z.B. für Heimautomation), wählt 185 | bitte einen anderen Port, z.B. 9998 und ersetzt überall, wo ihr hier 186 | 9999 seht durch 9998. 187 | 188 | ### Webserver-Konfiguration 189 | 190 | Erstellen der Datei `baikal-nginx.site` mit diesem Inhalt (z.B. via `nano baikal-nginx.site`): 191 | 192 | ```nginx 193 | server { 194 | 195 | listen 9999 default_server; 196 | 197 | #listen [::]:80 default_server; 198 | # SSL configuration 199 | # 200 | # listen 443 ssl default_server; 201 | # listen [::]:443 ssl default_server; 202 | # 203 | # Note: You should disable gzip for SSL traffic. 204 | # See: https://bugs.debian.org/773332 205 | # 206 | # Read up on ssl_ciphers to ensure a secure configuration. 207 | # See: https://bugs.debian.org/765782 208 | # 209 | # Self signed certs generated by the ssl-cert package 210 | # Don't use them in a production server! 211 | # 212 | # include snippets/snakeoil.conf; 213 | #root /var/www/html; 214 | 215 | root /home/pi/DiensteUndProgramme/Baikal/html; 216 | 217 | # Add index.php to the list if you are using PHP 218 | 219 | index index.php index.html index.htm index.nginx-debian.html; 220 | server_name _; 221 | 222 | # location / { 223 | # First attempt to serve request as file, then 224 | # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; 225 | # } 226 | 227 | rewrite ^/.well-known/caldav /dav.php redirect; 228 | rewrite ^/.well-known/carddav /dav.php redirect; 229 | charset utf-8; 230 | 231 | location ~ /(\.ht|Core|Specific|config) { 232 | deny all; 233 | return 404; 234 | } #In der aktuellen Variante nicht benötigt, da "html" das Root Verzeichnis ist, schadet aber auch nicht. 235 | #Sollte man Baikal jedoch direkt im Webserver als Unterverzeichnis installieren, absolut notwendig. Bitte daran denken! 236 | 237 | location ~ ^(.+.php)(.*)$ { 238 | try_files $fastcgi_script_name =404; 239 | include /etc/nginx/fastcgi_params; 240 | fastcgi_split_path_info ^(.+.php)(.*)$; 241 | fastcgi_pass unix:/run/php/php7.3-fpm.sock; #Hier auf eure installierte PHP-Version achten. 242 | #fastcgi_pass unix:/run/php/php7.4-fpm.sock; #Ubuntu hat z.B. schon php 7.4 243 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 244 | fastcgi_param PATH_INFO $fastcgi_path_info; 245 | } 246 | 247 | # deny access to .htaccess files, if Apache's document root 248 | # concurs with nginx's one 249 | # 250 | 251 | location ~ /.ht { 252 | deny all; 253 | } 254 | 255 | } 256 | ``` 257 | 258 | Gegebenenfalls bitte den Pfad in root `/home/pi/Baikal/html;` und den Port 259 | in `listen 9999 default_server;` anpassen. Bei der Zeile `fastcgi_pass unix:/run/php/php7.3-fpm.sock;` bitte durch ausführen von `php --version` überprüfen, ob ihr auch php 7.3.x habt (Stand Januar 2021 ist das beim Raspberry PI der Fall). 260 | 261 | Ubuntu bringt teilweise 7.4.x mit und daher die Zeile mit Version 7.3 auskommentieren, sowie bei der Zeile darunter das Kommentarzeichen `#` entfernen. Habt ihr hier die falsche Version stehen, kann das die Ursache für eine 502 Bad Gateway Fehlermeldung sein. 262 | 263 | Zum Schluss noch ein paar kleine Abschlussarbeiten: 264 | 265 | ```sh 266 | cd /home/pi/DiensteUndProgramme/Baikal #eigentlich sollten wir schon in diesem Verezeichnis sein, nur zur Sicherheit 267 | 268 | sudo chown -R www-data:www-data . #Man beachte den Punkt „." 269 | 270 | sudo chown root:root baikal-nginx.site # Dient der Sicherheit. Damit der Webserver nicht das eigene Verzeichnis umschreiben kann 271 | 272 | #Ab Debian 12 (Bookworm) fehlt den Homeverzeichnissen das executable Bit, damit kann nginx nicht auf das Homeverzeichnis zugreifen. Mit folgendem Kommando wird dies wieder wie in früheren Versionen hergestellt 273 | sudo chmod o+x /home/pi 274 | 275 | sudo ln -s /home/pi/DiensteUndProgramme/Baikal/baikal-nginx.site /etc/nginx/sites-enabled/baikal-nginx.site #Unsere Datei in den Webserver verlinken, sodass die Seite ausgeliefert wird 276 | 277 | # Neustarten des Webservers 278 | 279 | sudo systemctl restart nginx 280 | 281 | ``` 282 | 283 | Baikal 0.7.0 läuft jetzt und wir können zugreifen via `http://:9999` 284 | 285 | ### Baikal Ersteinrichtung 286 | 287 | 288 | 289 | In diesem Beispiel verwende ich ein 25-stelliges zufälliges Passwort: 290 | 291 | ``` 292 | 3W2hVUaziRq3v14wL1x21yERE 293 | ``` 294 | 295 | Wichtig ist die Digest Authentifizierung. Es wird ein Hash über das 296 | Passwort gebildet. Es wird die MD5 Hashfunktion verwendet. Diese ist 297 | zwar eigentlich unsicher, da sehr viele Hashes gleichzeitig generiert 298 | werden können, aber durch die Länge des Passwortes stellt ihr sicher, 299 | dass ihr selbst bei Abfangen des Hashes sicher seid. In diesem Beispiel 300 | verwenden wir Groß- und Kleinbuchstaben sowie 0-9. Das macht 62 301 | Möglichkeiten je Zeichen, ergibt insgesamt 302 | 6,453454277735124478803774516343e+44 Möglichkeiten. 8 GTX 1080 303 | Grafikkarten können pro Sekunde 200 Milliarden Hashes (GH/s) 304 | ausprobieren. Gehen wir übertrieben davon aus, dass ein Angreifer über 305 | 100 Milliarden dieser Grafikkarten verfügen würde. Macht 306 | 20.000.000.000.000.000.000.000 Hashes pro Sekunde. Dann würde es immer 307 | noch mehr als 1.023.188.463.618.582 Jahre dauern bis alle Passwörter 308 | ausprobiert wurden. Statistisch findet man es in der Hälfte der Zeit. 309 | Aber darum mache ich mir keine Sorgen ☺ Bitte benutzt auf keinen Fall 310 | dieses Passwort. Dadurch, dass es jetzt irgendwo steht, gilt es nicht 311 | mehr als sicher. 312 | 313 | Bei einem derart langen Passwort kommt noch ein anderer Effekt zum Tragen. Dieser nennt sich Hashkollision. D.h. man findet ein funktionierendes Passwort, welches zum selben Hashwert führt, aber nicht euer Originalpasswort ist. Nachdem MD5 jede beliebige Eingabe zu einem festen 128 Bit Wert transformiert, kommt es bei zu langen Passwörtern definitiv zu einer Kollision, sodass ab einer gewissen Passwortlänge kein Sicherheitsgewinn mehr zu erwarten ist. Bei dem hier gewählten Zeichensatz ist das eine Passwortlänge von 22 Zeichen. Das ergibt 3,85e+39 Möglichkeiten verglichen mit 2128 = 3,4e38 Möglichkeiten. Aber selbst das ergibt in diesem Fall mit der extrem hoch angenommenen Hashleistung immer noch über 539 Millionen Jahre bis alle Möglichkeiten durchprobiert wurden. Da MD5 eine nicht lineare Hashfunktion ist, kann man nicht voraussagen, ob es überhaupt eine Kollision zu einem Passwort gibt oder es gleich sehr viele Kollisionen gibt. Mit einer Passwortlänge von 22 Zeichen und dem oben beschriebenen Zeichensatz ist dennoch ein sehr hohes Sicherheitsniveau gegeben. Quelle https://www.malwaretech.com/2014/05/the-reason-for-maximum-password-lengths.html 314 | 315 | Feld `Email invite sender address`wenn ihr Einladungsmails zu den Terminen verschicken möchtet, tragt hier bitte die Absenderadresse eures dafür verwendeten Mailkontos ein. Im Test mit einem lokalen Webserver, der sehr tolerant ist, hat auch nur der ein Buchstabe gereicht um das Versenden von Mails zu aktivieren. 316 | 317 | Im nächsten Fenster belassen wir diese Einstellung so und klicken nur 318 | auf Save Changes: 319 | 320 | 321 | 322 | #### Wenn es doch mit MySQL sein soll 323 | 324 | Sollte man es als erforderlich ansehen, doch über MySQL/MariaDB eine Datenbank aufzusetzen, so kann man folgendermaßen vorgehen. Zuerst wird die Software 325 | 326 | ```sh 327 | sudo apt update && sudo apt install mariadb-common mycli 328 | ``` 329 | 330 | installiert. Spezifische Anleitungen für den Zugang finden sich im Netz zuhauf. 331 | 332 | Für Baikal muss noch eine Datenbank erstellt werden. Dazu loggt man sich bei MariaDB mit 333 | 334 | ``` 335 | mysql -u root -p 336 | ``` 337 | ein und setzt nacheinander die folgenden Befehle ab. 338 | 339 | ```mysql 340 | CREATE DATABASE baikal; 341 | CREATE USER 'baikal'@'localhost' IDENTIFIED BY 'password'; 342 | GRANT ALL PRIVILEGES ON baikal.* TO 'baikal'@'localhost'; 343 | FLUSH PRIVILEGES; 344 | ``` 345 | Natürlich wird ein Passwort gewählt, was nicht so einfach zu erraten ist. 346 | 347 | 348 | 349 | ### Benutzereinrichtung 350 | 351 | Jetzt können wir auf „Start using Baikal" klicken oder wir rufen wieder 352 | `http://:9999` 353 | 354 | und klicken oben auf Login: 355 | 356 | 357 | 358 | Jetzt loggen wir uns mit dem Benutzer admin und unserem vorher 359 | eingegebenen Passwort ein: 360 | 361 | Jetzt sehen wir die Administrationsoberfläche 362 | 363 | 364 | 365 | Hier nicht verwirren lassen. Da wir Baikal selbst aus dem Quellcode 366 | erzeugt haben, findet er eine "neue Version", die aber älter ist. 367 | 368 | Zum Hinzufügen eines Benutzers klicken wir nun oben in der Leiste auf Users and resources und 369 | anschließend rechts auf `+Add user`. 370 | 371 | 372 | 373 | 374 | 375 | Wenn Ihr automatische Einladungsmails zu Terminen verschicken möchtet, gebt hier bitte eure Antwort E-Mail-Adresse an bzw. die E-Mail-Adresse unter der ihr Mails empfangen möchtet. Wenn die Empfänger der Einladungsmails auf Antworten klicken, steht diese in der Antwortzeile. Als Absenderadresse der E-Mails wird diejenige Mailadresse verwendet, die ihr für die nullmailer Konfiguration verwendet habt. 376 | 377 | Nur wenn ihr ganz sicher seit keine Termineinladungen verschicken zu wollen, ist es nicht so wichtig, was eingegeben wird. Sie wird erst wieder beim Freigeben des 378 | Kalenders wichtig. 379 | 380 | Hier im Beispiel legen wir einen Benutzer1 und einen 381 | Benutzer2 an. 382 | 383 | 384 | 385 | Über die Edit Schaltfläche können wir das Passwort ändern. Über Address 386 | Books können weitere Adressbücher hinzugefügt werden. Für 387 | Demonstrationszwecke ändern wir die Namen wie folgt: 388 | 389 | 390 | 391 | Analog gehen wir für den Kalender vor und machen diese Einstellung für 392 | Benutzer2 393 | 394 | 395 | 396 | Wichtig: Änderungen wie den Kalendernamen oder die Farbe könnt ihr nur als Admin vornehmen. Als Benutzer könnt ihr leider "Default calendar" nicht umbenennen bzw. ändern. 397 | 398 | ### Maildienst Einrichtung (optional, nur für Einladungsmails) 399 | 400 | Möchtet ihr beim Erstellen eines Termins Personen zu diesem Termin einladen und dass sie automatisch den Termin an ihre E-Mail-Adresse geschickt bekommen, benötigt ihr ein Mailsystem. Erkennbar an einer ausführbaren sendmail in eurer Pfad-Umgebung. Hierfür kann z.B. nullmailer mit `sudo apt install nullmailer` installiert werden. Die Wahl fiel auf nullmailer, da dieses Paket sehr schlank ist, aber gleichzeitig eine Nachrichtenwarteschlange hat. Kann die Mail aufgrund eines temporären Fehlers, wie z.B. bei einem Netzwerkproblem bzw. Internetverbindungsproblem aktuell nicht versendet werden, wird automatisch versucht sie später erneut zu senden. 401 | 402 | 403 | Konfiguration: 404 | 405 | /etc/nullmailer/adminaddr 406 | ``` 407 | Hier steht eure E-Mail-Adresse auf der Ihr Nachrichten vom System erhalten möchtet 408 | ``` 409 | 410 | /etc/nullmailer/idhost 411 | ``` 412 | nullhost 413 | ``` 414 | Hier könnt ihr ein beliebiges Wort eintragen. Diese Datei verhindert, dass euer Hostname eures Linuxsystems/Raspberry PI an den Mailemfänger im Header-Feld `Message-ID` ausgeplaudert wird 415 | 416 | /etc/nullmailer/remotes 417 | ``` 418 | smtp.gmail.com smtp --user= --pass= --starttls 419 | ``` 420 | Hier am Beispiel für GMail. Lautet eure E-Mail-Adresse blablaudkdka@gmail.com dann ist `user=blablaudkdka` und `--pass` euer App-Passwort, welches ihr zumindest bei Google extra konfigurieren müsst. Da schaut bitte in die Anleitung des jeweiligen Providers für die SMPT Server- und Zugangsdaten. Die Werte für zahlreiche Mailanbieter gibt es hier https://wiki.debian.org/nullmailer#Configuration 421 | 422 | /etc/nullmailer/defaultdomain 423 | 424 | bleibt leer 425 | 426 | Das wars auch schon, ab jetzt könnt ihr Mails versenden. Um das auch via Kommandozeile zu testen `echo "Subject: sendmail test" | sendmail -v eure@zieladresse.domain` 427 | Jetzt bekommt ihr eine leere Mail zugeschickt, wenn alles geklappt hat. 428 | 429 | Ich empfehle auch noch die Installation des nullmailer Rewrite Wrapper https://github.com/JsBergbau/nullmailer-Rewrite-Wrapper Anleitung ist dort beschrieben. 430 | Dadurch gehen Mails die nur an "pi" oder "root" addressiert sind auch an euch. Nullmailer schreibt die nur um, wenn sie an "root@localhost" usw. gerichtet sind. 431 | 432 | Weiterer Bonus durch den Nullmailer Rewrite Wrapper: Es wird auch der Absender zuverlässig überschrieben. Bei Mails via Kommadozeile steht sonst im Header euer Nutzername auf dem Raspberry-PI und der Hostname, z.B. `X-Google-Original-From: ` 433 | Auch bei den via Baikal versendeten Einladungsmails dürfte das der Fall sein. 434 | 435 | 436 | ## Baikal-Update 437 | 438 | Die aktuellste Release-Version findet sich unter 439 | https://github.com/sabre-io/Baikal/releases 440 | 441 | Beginnend mit Version 0.7 wird die Konfiguration intern im yaml-Format 442 | gespeichert. Da wir mit 0.7.0 angefangen haben, sind wir bereits im 443 | neuen Konfigurationsformat. 444 | 445 | Zuerst stoppen wir den Webserver 446 | 447 | ```sh 448 | sudo systemctl stop nginx.service 449 | ``` 450 | 451 | Anschließend gehen wir in den Ordner indem sich der Baikal Ordner 452 | befindet, also hier `/home/pi/DiensteUndProgramme/` und wir kopieren die 453 | gesamte Installation um im Fehlerfall einfach wieder zurückkehren zu 454 | können 455 | 456 | ```sh 457 | sudo cp -R Baikal Baikal.bak 458 | ``` 459 | 460 | Herunterladen der aktuellen Version 461 | 462 | ```sh 463 | wget https://github.com/sabre-io/Baikal/releases/download/0.7.1/baikal-0.7.1.zip 464 | 465 | unzip baikal-0.7.1.zip 466 | ``` 467 | 468 | sollte ein Fehler auftauchen, installieren wir noch `unzip` via `sudo apt install unzip` 469 | 470 | Es wird jetzt ein neuer Ordner namens „baikal" erstellt. Unsere 471 | Installation befindet sich in „Baikal" 472 | 473 | Anpassen der Rechte via `sudo chown -R www-data:www-data baikal` 474 | 475 | Kopieren der neuen Dateien über die alten. Wichtig, Groß- und 476 | Kleinschreibung ist hier extrem wichtig. 477 | 478 | ```sh 479 | sudo rsync -avh baikal/ Baikal 480 | ``` 481 | 482 | anschließend wird der Webserver wieder gestartet 483 | 484 | ```sh 485 | sudo systemctl start nginx.service 486 | ``` 487 | 488 | Beim Zugriff auf unseren Baikal-Server werden wir jetzt von einer 489 | Upgrade-Meldung begrüßt `http://:9999/admin` 490 | 491 | 492 | 493 | Hier klicken wir einfach auf `Start Upgrade`. Ein Backup haben wir ja 494 | bereits zu Beginn erstellt. 495 | 496 | Hier kam nach weniger als einer Sekunde die Meldung, dass alles gut 497 | verlaufen ist. 498 | 499 | 500 | 501 | Nachdem man verifiziert hat, dass die Synchronisation noch läuft und die 502 | Einträge weiterhin vorhanden sind, kann aufgeräumt werden 503 | 504 | ```sh 505 | sudo rm -R Baikal.bak baikal baikal*.zip 506 | ``` 507 | 508 | Das Update ist damit vollständig abgeschlossen. 509 | 510 | ## Benutzerlogin 511 | 512 | Jetzt loggen wir uns als Benutzer über die URL ein 513 | `http://:9999/dav.php` ein. Wichtig, über die andere 514 | Oberfläche können wir uns nicht als Benutzer 1 einloggen! 515 | 516 | Einlogen muss man sich nur, wenn man Kalender mit anderen Benutzern teilen möchte. Ansonsten hat man zwei Vorteile durch den Login: Man kann alle Kalendereinträge herunterladen und man kann die Kalender-URL kopieren, siehe unten. 517 | 518 | 519 | 520 | Dort klicken wir nun auf calendars 521 | 522 | 523 | 524 | Wir klicken auf Benutzer1 525 | 526 | 527 | 528 | Über den via Pfeil markierten Link 529 | kann man den kompletten Kalender als `.ics` Datei herunterladen. Wir 530 | können aber auch den Link kopieren und den Rest mit `?export` entfernen, 531 | sodass es dann so `http://:9999/dav.php/calendars/Benutzer1/default/` 532 | aussieht. Früher war dieser Schritt notwendig um den Kalender in Thunderbird hinzuzufügen. 533 | 534 | Info: Per Klick auf `default` direkt unterhalb der Überschrift "Nodes" gelangt man zu einer weiteren Seite. 535 | Dort ist dann jeder einzelne Kalendereintrag im Quelltext als ICS-Datei abrufbar. Das Datum ist das Ereignisdatum des Kalendereintrags. 536 | Via Klick auf den Dateinamen kann die Datei heruntergeladen werden oder via Klick auf das `i` Symbol kann der Eintrag auch direkt im Browser 537 | zusammen mit weiteren Details betrachtet werden. 538 | 539 | ## Freigabe des Kalenders für andere Benutzer 540 | 541 | Bevor wir die Benutzeroberfläche verlassen, geben wir noch unseren 542 | Kalender für Benutzer2 frei. Wir klicken nun auf default und scrollen im 543 | nächsten Fenster ganz nach unten 544 | 545 | 546 | 547 | Hier geben wir nun die E-Mail-Adresse des Benutzers im Format 548 | `mailto:` ein mit dem wir den Kalender teilen wollen. 549 | Achtung: Es wird nicht geprüft, ob dieser Nutzer auch im System 550 | existiert. OHNE das Präfix `mailto:` wird es ebenfalls nicht 551 | funktionieren. Achtet besonders genau auf die Schreibweise, damit es 552 | später nicht zu Problemen kommt. Um den Zugriff wieder zu entziehen, 553 | gehen wir analog vor, wählen aber Revoke access und klicken dann 554 | verwirrenderweise erneut auf 555 | Share. 556 | 557 | 558 | 559 | Auf dieser Seite sehen wir auch mit wem wir den Kalender geteilt haben. 560 | 561 | Ohne Freigabe für einen anderen Benutzer: 562 | 563 | 564 | 565 | Mit Freigabe: 566 | 567 | 568 | 569 | Achtet darauf, dass dort steht ``. Wenn es nicht 570 | geklappt hat, steht dort `` 571 | 572 | 573 | 574 | Um zu sehen, ob es geklappt hat, loggen wir uns als Benutzer2 ein. Unter 575 | calendars 🡪 Benutzer2 taucht nun ein weiterer Kalender mit einer 576 | komischen Nummer auf. 577 | 578 | 579 | 580 | Auch hier können wir rechts nun den Link kopieren um diesen Kalender im 581 | Thunderbird hinzufügen. 582 | 583 | Unbeachtet besteht natürlich auch die Möglichkeit sich die Zugangsdaten 584 | für einen weiteren gemeinsamen Kalender zu teilen. Dieser bietet sich 585 | an, wenn man einen quasiöffentlichen Kalender hat, wie z.B. um die 586 | Müllentsorgungstermine zu verwalten. 587 | 588 | ## Gemeinsame Kontakte 589 | 590 | Kontakte lassen sich leider nicht wie Kalender teilen. Hier bleibt nur 591 | das Einrichten eines gemeinsamen Kontos für gemeinsame Kontakte. 592 | 593 | ## Zugriff 594 | 595 | ### Thunderbird 596 | 597 | #### Kalender in Thunderbird 598 | 599 | Um den Kalender zu verbinden klicken wir im Thunderbird in der 600 | Menüleiste auf Termine und Aufgaben 🡪 Kalender oder drücken STRG + 601 | Umschalt + C. Damit dieses Menü dauerhaft erscheint, ist ein Klick oben rechts auf "Zum Kalender-Tab wechseln" erforderlich. 602 | Add-Ons bzw. Erweiterungen brauchen im Thunderbird nicht installiert werden. 603 | 604 | 605 | 606 | 607 | Unter Kalender gehen wir per Rechtsklick auf Neuer Kalender, hier wählen 608 | wir Im Netzwerk 609 | 610 | 611 | 612 | Im nächsten Schritt geben wir den Benutzernamen und die Adresse wie im Screenshot angezeigt ein, also z.B. `http://192.168.178.21:9999`. Früher musste hier eine komplizierte URL eingegeben werden, mittlerweile ist die Einrichtung in Thunderbird glücklicherweise erheblich einfacher geworden. 613 | 614 | 615 | 616 | Im nächsten Schritt gegeben wir das Passwort von `benutzer1` ein. Es empfiehlt sich das Kennwort zu speichern, da Thunderbird leider ein paar Probleme hat, wenn man das Kennwort nicht speichert. 617 | 618 | Nach Bestätigung sieht man alle zur Vefügung stehenden Kalender und man kann die Eigenschaften wie die Kalenderfarbe bearbeiten oder wie oft er synchronisiert werden soll. Auch dieser Schritt hat sich erheblich verbessert. Früher wurde die vorgegebene Farbe nicht übernommen. 619 | 620 | Wir erstellen einen Termin. 621 | 622 | 623 | 624 | In der Baikal-Benutzeroberfläche unter 625 | `http://:9999/dav.php` 🡪 calendars 🡪 Benutzer1 626 | 🡪 default taucht dann für jeden Kalendereintrag eine Zeile in der 627 | Übersicht auf. Klickt man darauf, sieht man sogar den genauen Eintrag: 628 | 629 | 630 | 631 | 632 | 633 | #### Kontakte in Thunderbird verwalten 634 | 635 | Hierfür wird das CardBook Addon benötigt 636 | 637 | 638 | 639 | Nach Installation und Neustart Thunderbirds, werden wir mit einem 640 | Fenster des Addons begrüßt: 641 | 642 | 643 | 644 | Da wir nur die Baikal Kontakte damit verwalten wollen, können wir auf 645 | abbrechen klicken. Stattdessen gehen wir im Menü auf Extras 🡪 646 | CardBook oder drücken Alternativ die Tastenkombination STRG + UMSCHALT + 647 | B. Links in der Leiste klicken wir rechts und wählen Neues Adressbuch 648 | 649 | 650 | 651 | Im nächsten Fenster wird Im Netzwerk gewählt 652 | 653 | 654 | 655 | Im nächsten Fenster wird CardDAV gewählt, die Adresse unseres 656 | Baikal-Servers im Format `http://:9999` und die 657 | Zugangsdaten eines Benutzers eingegeben. Bevor wir auf Weiter klicken 658 | können, werden die Zugangsdaten per Klick auf Überprüfen geprüft. Es 659 | dauert einen Moment und dann können wir im nächsten Fenster die Farbe 660 | wählen und einen Namen vergeben. 661 | 662 | 663 | 664 | Wenn wir zuvor den Namen für das Adressbuch des Benutzers 2 geändert 665 | haben, wird hier automatisch dieser Name übernommen. 666 | 667 | 668 | 669 | 670 | 671 | Jetzt taucht unser eingerichtetes Adressbuch auf. Im Beispiel wurde 672 | schon der Max Mustermann Kontakt eingerichtet, welcher dann bei der 673 | Einrichtung von DAVx5 auftaucht. 674 | 675 | 676 | 677 | Es ist sehr komfortabel hier Kontakte zu bearbeiten und auszusortieren. 678 | Damit man nicht mehrmals manuell synchronisieren muss, klicken wir in 679 | der Leiste über Max Mustermann auf Einstellungen. Unter Synchronisation 680 | stellen wir dann die Höchstzahl auf 1000 ein. 681 | 682 | 683 | 684 | Das bedeutet, dass er 1000 Kontakte am Stück synchronisiert. Für den 685 | unwahrscheinlichen Fall, dass ihr mehr als 1000 Kontakte gleichzeitig 686 | geändert habe, müsst ihr einfach nochmal auf „Adressbuch 687 | synchronisieren" drücken. 688 | 689 | 690 | 691 | ### Apple 692 | 693 | Da ich kein Apple Gerät besitze, kann ich nur auf diese Anleitung 694 | [https://kb.mailbox.org/display/MAILBOX/CalDAV+und+CardDAV+fuer+Mac+OS+X+und+iOS](https://kb.mailbox.org/display/MAILBOX/CalDAV+und+CardDAV+fuer+Mac+OS+X+und+iOS) 695 | verweisen. Bei Server kommt natürlich unser Server im Format 696 | `http://:9999` rein und Benutzername z.B. Benutzer1 697 | und euer Passwort. 698 | 699 | ### Android 700 | 701 | Android bringt von Haus aus im Gegensatz zu Apple leider keine 702 | Unterstützung für CalDAV und CardDAV, deswegen brauchen wir hier eine 703 | App. Als sehr geeignet hat sich DAVx5 erwiesen. Im Google Playstore 704 | kostet diese App 3,99€. Wer die Entwickler unterstützten möchte, kann 705 | dort kaufen 706 | [https://play.google.com/store/apps/details?id=at.bitfire.davdroid&hl=de](https://play.google.com/store/apps/details?id=at.bitfire.davdroid&hl=de) 707 | Allerdings behält Google davon unglaubliche 30% ein. Deswegen sollte 708 | man in diesem Fall direkt an den Entwickler spenden 709 | [https://www.davx5.com/donate](https://www.davx5.com/donate) 710 | Am günstigsten ist es über die dort angegebene Bankverbindung. Es 711 | handelt sich zwar um ein österreichisches Konto, aber Dank IBAN geht die 712 | Überweisung genauso wie bei einem deutschen Konto und bereits seit 2006 713 | muss diese Überweisung genauso kostenlos sein wie eine inländische 714 | Überweisung. 715 | 716 | DAVx5 ist glücklicherweise OpenSource Software 717 | [https://gitlab.com/bitfireAT/davx5-ose](https://gitlab.com/bitfireAT/davx5-ose) 718 | Diese Tatsache kommt uns sehr gelegen, aber keine Sorge, ihr müsst die 719 | Software nicht selbst kompilieren. Im alternativen Appstore „F-Droid" 720 | [https://de.wikipedia.org/wiki/F-Droid](https://de.wikipedia.org/wiki/F-Droid) 721 | , in dem nur freie Software angeboten wird, gibt es DAVx5 kostenlos. 722 | Ihr braucht dafür noch nicht einmal die F-Droid Store App installieren, 723 | man kann die App direkt herunterladen. 724 | [https://f-droid.org/de/packages/at.bitfire.davdroid/](https://f-droid.org/de/packages/at.bitfire.davdroid/) 725 | Nehmt dabei bitte die Version bei der „vorgeschlagen" steht. Zum 726 | Zeitpunkt des Schreibens sieht es so aus: 727 | 728 | 729 | 730 | Eventuell müsst ihr auf eurem Handy erlauben, dass Apps von 731 | Drittanbietern installiert werden. Android öffnet dann automatisch die 732 | entsprechenden Dialoge. Der Unterschied bei Verwendung der F-Droid App 733 | sind die automatischen Updates. Das kann aber auch nach hinten losgehen. 734 | So war zum Zeitpunkt der Initialeinrichtung von DAVx5 die aktuellste 735 | Version aufgrund eines Fehlers nicht benutzbar. Mein Tipp: Richtet die 736 | App einmalig manuell ein und macht nur Updates, wenn ihr unbedingt neue 737 | Features braucht oder die App aufgrund eines Android Updates nicht mehr 738 | funktionieren sollte. Da die App nur auf euren lokalen Server zugreift 739 | ist das Sicherheitsrisiko nur minimal. Richtet ihr auch andere Server 740 | ein, dann haltet die App bitte immer aktuell. 741 | 742 | Im Einrichtungsbildschirm fordert DAVx5 dann, dazu auf Einstellungen 743 | vorzunehmen, dass es auch im Hintergrund laufen darf. Technischer 744 | Hintergrund ist, dass leider viele Apps den Akku im Hintergrund 745 | leergesogen haben. Bei DAVx5 braucht ihr euch dabei aber keine 746 | Gedanken zu machen. 747 | 748 | Im nächsten Fenster kann man dann bei Bedarf „OpenTasks" installieren um 749 | auch Aufgaben zu synchronisieren. 750 | 751 | Eure Daten werden wie im folgenden Bild gezeigt eingetragen: 752 | 753 | 754 | 755 | Nach einem Fingertipp auf Anmelden rechts unten, seht ihr folgendes 756 | Fenster, wenn eure Zugangsdaten passen. Solltet ihr z.B. einen Fehler 757 | beim Passwort haben, kommt trotz richtiger „Basis-URL" die verwirrende 758 | Fehlermeldung, „Es konnte weder ein CalDAV- noch ein CardDAV-Dienst 759 | gefunden werden". Prüft nochmal genau euer Passwort und gegebenenfalls 760 | die URL und dann klappt das auch. 761 | 762 | 763 | 764 | Wenn ihr eure Kontakte in Gruppen sortieren wollt, wählt hier bitte 765 | unbedingt „Gruppen sind Kategorien der Kontakte". Diese Option kann aber 766 | auch später in den Einstellungen geändert werden. Der Kontoname oben 767 | kann zwar beliebig angepasst werden, sollte aber wie von der App vorgegeben übernommen werden, da andernfalls 768 | Stand April 2021 keine Einladungsmails an Kontakte verschickt werden, sie Schritt [Maildienst Einrichtung (optional, nur für Einladungsmails)](#maildienst-einrichtung-optional-nur-f%C3%BCr-einladungsmails). 769 | 770 | Im nächsten Fenster tippen wir dann auf unseren Kontonamen 771 | 772 | 773 | 774 | Und schon sehen wir unser Adressbuch für Benutzer 2. Durch Anhaken der 775 | Checkbox und Drücken der Synchronisationspfeile werden die Kontakte 776 | synchronisiert: 777 | 778 | 779 | 780 | 781 | 782 | Nun zu den Kalendern: 783 | 784 | 785 | 786 | Wie wir sehen beachtet DAVx5 im Gegensatz zu Thunderbird die Farben. 787 | Wir sehen den Kalender aus unserem Konto in Gelb und den freigegebenen 788 | Kalender des Benutzer1 mit den Standardtexten. 789 | 790 | Wenn man die Kalenderfarben oder die Liste der Kalender neu einlesen 791 | möchte: In diesem Fenster einfach bei einer freien Stelle drücken und 792 | nach unten ziehen um die Aktualisierung anzustoßen. Analog bei den 793 | Kontakten. 794 | 795 | Schauen wir uns noch kurz die Einstellungen von DAVx5 an: 796 | 797 | 798 | 799 | Hier kann man nach eigenen Vorliegen konfigurieren. Da wir in diesem 800 | Beispiel den Baikal Server nur im lokalen Netzwerk zur Verfügung 801 | stellen, sollten wir die Option wählen, dass wir nur über WLAN 802 | synchronisieren wollen. Wir können sogar die `SSID` / den Namen unseres 803 | WLANs zu Hause eingeben, dann wird nur über diesen Namen synchronisiert. 804 | Hierfür muss man die Standortberechtigung erteilen. Keine Sorge, Baikal 805 | überwacht euch nicht. Es ist einfach eine Sicherheitsmaßnahme, weil über 806 | diese Option DAVx5 Detailinformationen über das WLAN erhält und damit 807 | theoretisch mit Hilfe eines Webdienstes einen ungefähren Standort 808 | bestimmen könnte. 809 | 810 | Sollten die beiden Optionen ausgegraut sein, dann habt ihr Datensparen in Android aktiviert. In diesem Fall wird immer nur synchronisiert, wenn man im WLAN ist. Leider kann dann die Begrenzung auf das eigene WLAN nicht vornehmen. Daher kurz Datensparen deaktivieren, Einstellung vornehmen, und wieder aktivieren. 811 | 812 | Auch wenn ihr mal 2 Wochen oder länger im Urlaub seid, 813 | kein Problem. Wenn ihr dann wieder in eurem WLAN seid, holt Baikal die 814 | Synchronisation nach. Nur in eurem WLAN zu synchronisieren erhöht bei 815 | unverschlüsselten Verbindungen etwas die Sicherheit, denn theoretisch 816 | könnte der Betreiber eines fremden WLAN den Netzwerkverkehr umleiten, 817 | einen Baikal Server simulieren um an euren Passworthash zu gelangen. 818 | Durch ein ausreichend langes Passwort verhindert ihr, dass man aus 819 | diesem Hash ein Passwort machen kann, siehe Abschnitt Baikal 820 | Ersteinrichtung. Aber selbst mit dem Passwort kann der Angreifer nichts 821 | anfangen, da er nicht auf euren Baikalserver zugreifen kann. 822 | 823 | #### Übertragen der Kontakte vom vorherigen Speicherort zu DAVx5 824 | 825 | In den meisten Fällen werdet ihr die Kontakte schon an einem anderen Speicherort gespeichert haben. In diesem Abschnitt geht es darum die Kontakte nach DAVx5 zu übertragen. 826 | 827 | Auch wenn dieses Tutorial die Absicht hat Kontakte ohne Google zu verwalten, verwenden wir hierfür die Google Kontakte App. Dieses ist am leichtesten im Playstore zu finden und bietet die Möglichkeit des einfachen Ex- und Imports der Kontakte, sowie des einfachen Verschiebens zwischen den Konten. Allerdings lässt die Google Kontakte App Stand Dezember 2020 nur ein Verschieben ins Google oder den Gerätespeicher, aber nicht in unsere DAVx5-Konten zu. 828 | 829 | Die Google-Kontakte App versucht ab und zu einen zu nötigen, dass man seine Kontakte doch ins Google-Konto synchronisieren möchte. Hier einfach standhaft bleiben und ablehnen und natürlich auch nochmal die Nachfrage, ob man das wirklich ablehnen möchte. 830 | 831 | Nach dem Verschieben kann die Google-Kontakte App auch wieder gelöscht werden. Ich habe mich bewusst für Google-Kontakte entschieden, da die meisten anderen Kontakte-Apps entweder die benötigte Funktionalität nicht bieten oder so wenige Download-Zahlen haben, dass ich eine große Gefahr sehe, dass diese Apps die Kontakte unbemerkt an den Entwickler nach Hause senden könnten. So schickt die App "Easy Backup - Kontakte Backup" (com.simpler.backup) standardmäßig alle Kontakte an den Hersteller, wo sie wer weiß wie lange gespeichert werden - in Deutschland und vermutlich der gesamten EU durch die DSGVO ohne Einwilligung aller Kontakte strengstens verboten. 832 | 833 | Die Installation der Kontakte App von Google erfolgt z.B. über diesen Link https://play.google.com/store/apps/details?id=com.google.android.contacts oder indem man in der Google Play App "Kontakte" eingibt. Google zeigt automatisch dann nur seine Google-App an. Wettbewerbstechnisch nicht schön, aber hier zumindest hilfreich. 834 | 835 | 836 | 837 | In der App geht ihr unten auf den Schraubenschlüssel und geht dann auf "In Datei exportieren". 838 | 839 | 840 | 841 | 842 | Im nächsten Schritt wählt ihr die Kontakte des Kontos, welches exportiert werden soll. In diesem Fall des Google-Kontos. Die Google Kontakte App zeigt hier nur die Konten/Optionen an, in denen auch Kontakte gespeichert sind. Habt ihr Kontakte Lokal im Gerät gespeichert, taucht dann auch die Option "Gerät" auf. Aber Kontakte der SIM-Karte werden hier leider nicht angezeigt. 843 | 844 | Auf die SIM-Kontakte könnt ihr zugreifen, indem ihr auf "SIM-Karte" verwalten geht. Dort könnt ihr die SIM-Kontakte direkt ins DAVx5-Konto kopieren. 845 | 846 | 847 | 848 | Nach Druck auf "Exportieren" erscheint der Speichern Dialog eures Smartphones. Hier wählt ihr einen Ordner in dem ihr die exportieren Kontakte temporär speichern möchtet. Je nach Anzahl der Kontakte dauert das Exportieren ein paar Sekunden bis Minuten. Wenn der Vorgang abgeschlossen ist, seht ihr in der Benachrichtigungsleiste „Export von .vcf abgeschlossen“ 849 | 850 | Jetzt geht ihr wieder auf die Startseite der Google-Kontakte App wie oben beschrieben und wählt statt „Aus Datei Exportieren“ nun „Aus Datei Importieren“. 851 | 852 | 853 | 854 | Hier wählt ihr nun euer DAVx5-Konto. 855 | 856 | Früher war es so, dass hier euer DAVx5-Konto doppelt angezeigt wurde. Da dies wieder auftreten könnte, wurde dieser Absatz beibehalten. Einmal als DAVx5 und einmal als DAVx5-Adressbuch. Bei ersterem Konto handelt es sich um einen Bug in der Google-Kontakte-App. *_Verwendet auf gar keinen Fall dieses Konto_*, denn hier werden die Kontakte nicht synchronisiert. *_Verwendet immer den Eintrag mit DAVx5-Adressbuch_*. Siehe auch https://www.davx5.com/faq/contacts/android-11-google-contacts 857 | 858 | Im nächsten Schritt wählt ihr die gerade gespeicherte "contacts.vcf" Datei und das war es auch schon. Jetzt werden die Kontakte importiert. 859 | 860 | Um sicherzugehen, dass die Kontakte alle nach Baikal übertragen werden/wurden, leitet einen Synchronisationsvorgang in DAVx5 wie weiter oben beschrieben ein. Es ist normal, dass dieser Synchronisationsvorgang je nach Anzahl der Kontakte ein paar Minuten dauern kann. Die nachfolgenden Synchronisationen sind in wenigen Sekunden abgeschlossen. 861 | 862 | Anschließend können die Kontakte im alten Konto gelöscht werden. Die Übertragung nach DAVx5 ist nun abgeschlossen. 863 | 864 | 865 | ### Erfolgskontrolle 866 | 867 | Ein kurzer Blick auf die Termine zeigt, dass unser in Thunderbird im 868 | Kalender des Benutzers1 eingetragener Termin angezeigt wird. 869 | 870 | 871 | 872 | Kurzer Blick in die Kontakte 873 | 874 | 875 | 876 | In Thunderbird 877 | 878 | 879 | 880 | Es fällt auf, dass Android, zumindest Samsung, den Anzeigenamen nicht 881 | beachtet, da er beides mal nur Max Mustermann heißt. Erst wenn wir den 882 | Kontakt antippen, sehen wir den Anzeigenamen: 883 | 884 | 885 | 886 | Wenn wir den Namen per Tipp auf den kleinen Pfeil aufklappen, 887 | verschwindet wieder unser Anzeigename. 888 | 889 | 890 | 891 | Also mit dem Anzeigenamen lieber sparsam umgehen. 892 | 893 | ### Browser 894 | 895 | Unter https://inf-it.com/open-source/clients/infcloud/ gibt es eine OpenSource Weboberfläche 896 | mit der sich sowohl die Kontakte als auch die Kalender im Browser bearbeiten lassen. 897 | Unter https://inf-it.com/infcloud/ gibt es eine Demo um einen Eindruck davon zu bekommen. 898 | Die Weboberfläche kann z.B. via http://192.168.178.21:9999/infcloud oder auch http://192.168.178.21:9999/web 899 | eingebunden werden. 900 | 901 | Eine ausführliche Anleitung fehlt hierzu noch, da ich die Kalender und Kontakte über Thunderbird und Android 902 | verwalte und gerade mit Android sehr zufrieden bin. Dort gibt es für neue Termineinträge gleich eine Autovervollständigung 903 | basierend auf den vergangenen Einträgen. 904 | Auf dem Desktop-PC kann man per Doppelklick auf einen Tag einen neuen Kalendereintrag erzeugen, 905 | im mobilen Browser klappt das leider nicht. 906 | 907 | Auch zur Sicherheit dieser Weboberfläche kann ich nichts sagen, daher 908 | empfehle ich es nur im lokalen Netz bzw. VPN zugänglich zu machen. 909 | 910 | ## Zugriff von unterwegs (Fortgeschritten) 911 | 912 | Da ich die Kontakte nur im WLAN zu Hause synchronisieren lasse, habe ich 913 | keinen Port freigegeben. Prinzipiell ist es auch möglich von überall aus 914 | auf den Baikal-Server zuzugreifen und ihn auch Freunden zur Verfügung zu 915 | stellen. Da dies nicht zu dieser Anleitung gehört, deswegen nur eine 916 | sehr grobe Anleitung: Man benötigt dafür eine öffentliche IP-Adresse. 917 | Bei manchen Anschlüssen, vor allem Kabel-Anschlüssen, erhält man leider 918 | nur eine öffentliche IPv6 Adresse. 919 | 920 | Da die IP dynamisch ist, sich also verändert, braucht es einen 921 | dynamischen DNS-Dienst, der den Raspberry PI zu Hause immer unter 922 | demselben Namen zur Verfügung stellt. Fritzboxen haben hierfür z.B. 923 | bereits den MyFritz-DynDNS-Dienst integriert. Ansonsten gibt es als 924 | kostenlose Dienste z.B. noip.com, ddnss.de oder freedns.afraid.org. 925 | Anschließend gibt man den Port frei. Es empfiehlt sich einen anderen als 926 | den Standardport zu verwenden um weniger Angriffen ausgesetzt zu sein. 927 | Damit eure Kontakt und Kalenderdaten nicht in fremde Hände gelangen, 928 | solltet ihr die Verbindung verschlüsseln. Ein kostenloses Zertifikat 929 | gibt's dafür von letsencrypt. Eine Anleitung dazu gibt's z.B. hier 930 | [https://gridscale.io/community/tutorials/nginx-lets-encrypt-next-gen-setup/](https://gridscale.io/community/tutorials/nginx-lets-encrypt-next-gen-setup/) 931 | oder hier auf der offiziellen Seite 932 | [https://letsencrypt.org/de/getting-started/](https://letsencrypt.org/de/getting-started/) 933 | 934 | Bedenkt aber auch, dass ihr, sofern ihr den Port von unterwegs freigebt, 935 | immer regelmäßig Updates einspielen müsst, damit nicht ein Angreifer 936 | über eine Sicherheitslücke auf eure Kontakte zugreifen oder gar in euer 937 | WLAN eindringen kann. 938 | 939 | ### Exkurs: Was tun ohne öffentliche IP-Adresse 940 | 941 | In diesem Fall kann man einen Dienst wie ngrok verwenden. Dieser ist 942 | aber ziemlich teuer. Günstiger ist da ein Prepaid-Server, wie z.B. 943 | https://noez.de/de/vserver-lxc/ beginnend ab 1,29 € / Monat (Stand 944 | 30.06.2020). Die geringste Leistung reicht da vollkommen aus. Dieser 945 | Anbieter wurde nicht getestet, es wurde hier lediglich wegen des 946 | günstigen Preis-/Leistungsverhältnisses gewählt und weil anonyme 947 | Bezahlungsmethoden wie Paypal oder Barzahlen.de verfügbar sind, sodass 948 | der Server anonym betrieben werden kann. Wer das vorhat sucht bitte nach 949 | SSH-Tunneling. Euer Raspberry PI baut einen SSH-Tunnel zu eurem Server 950 | auf, Beispielsweise mit 951 | 952 | ```sh 953 | ssh @ -p -i private.key -R 0.0.0.0:9999:localhost:9999 -N -o "ExitOnForwardFailure yes" -o StrictHostKeyChecking=no -o ServerAliveInterval=15 954 | ``` 955 | 956 | Aus Sicherheitsgründen solltet ihr nur die Public-Key-Authentifizierung 957 | auf eurem gemieteten Server erlauben und auch den Port ändern. In 958 | DAVx5 stellt ihr dann statt eurer lokalen IP-Adresse die Adresse des 959 | Servers ein. Hier ist nun ganz wichtig Baikal mit einem SSL-Zertifikat 960 | zu betreiben, welches auf euren Servernamen lautet um Lauscher draußen 961 | zu halten. 962 | 963 | ## Haltbarkeit der SD-Karte verlängern 964 | 965 | Um die Haltbarkeit der SD-Karte zu verlängern wird der TRIM-Befehl regelmäßig abgesetzt. Ich habe damit sehr gute Erfahrungen gesammelt. Die SD-Karten laufen auch noch nach Jahren ohne Probleme. Angeblich soll es SD-Karten geben, bei denen es zu Problemen und Datenverlust dadurch kommen soll. Bei mir hat es mit SD-Karten verschiedenster Hersteller (Sandisk, Transcent und Samsung) immer problemlos funktioniert. Ein Backup sollte dennoch zur Sicherheit vorher vorgenommen werden. 966 | 967 | Der Trim-Befehl wird via `sudo fstrim -v /` durchgeführt. 968 | Regelmäßig kann das crontab übernehmen. Dazu `crontab -e` aufrufen. Solltet ihr nach dem Editor gefragt werden `nano` wählen. In der crontab dann 969 | `@daily sudo ionice fstrim -v / > /dev/null` eintragen. Damit wird einmal täglich getrimmt und die Lebensdauer der SD-Karte deutlich verlängert. 970 | 971 | ## Backup 972 | 973 | Um euren Baikal-Server zu sichern reicht es aus, das Baikal Verzeichnis 974 | irgendwo hinzusichern. Um die maximale Datenkonsistenz sicherzustellen, 975 | solltet ihr zuvor den Server stoppen. 976 | 977 | ```sh 978 | sudo systemctl stop nginx.service 979 | ``` 980 | 981 | Anschließend natürlich wieder starten 982 | 983 | ```sh 984 | sudo systemctl start nginx.service 985 | ``` 986 | 987 | Der gesamte Rasbperry-PI kann auch via restic mit der Befehlszeile 988 | 989 | `./restic backup / /boot --exclude /var/swap --exclude .cache --exclude /var/cache --exclude /tmp --exclude _cacache --one-file-system --exclude-caches` effizient gesichert werden. Im Fall eines SD-Karten Defektes kann damit die gesamte Installation sehr einfach wiederhergestellt werden. Sollte dieses Verfahren benötigt werden, bitte unter "Issues" melden, dann gibt es dort eine angepasste Anleitung, dann erstelle ich eine angepasste Anleitung. 990 | 991 | Eine genauere Anleitung für Restic-Backup würde den Rahmen dieser Anleitung bei weitem übersteigen. Mehr Informationen gibt es unter https://github.com/restic/restic und in der Restic Dokumentation https://restic.readthedocs.io/en/latest/ 992 | 993 | ## Datenbank verkleinern (nur für Experten) 994 | 995 | Unter `/home/pi/Baikal/Specific/db/db.sqlite` findet ihr die Datenbank. Mit einem SQLite Editor wie z.B. „DB Browser for SQLite" kann man darauf zugreifen. 996 | Werden Einträge in der Datenbank gelöscht (z.B. ein Kontakt oder ein Kalendereintrag) "löscht" SQLite diesen nur logisch ohne den Speicherplatz tatsächlich freizugeben. Er wird lediglich bei neuen Einträgen dann wieder benutzt, was zu einer internen Fragmentierung führt. Daher ist es empfehlenswert von Zeit zu Zeit den VACUUM Befehl abzusetzen, siehe https://www.sqlitetutorial.net/sqlite-vacuum/ 997 | 998 | **Warnung:** Dieser Absatz ist nur für die, die genau wissen was sie tun. Im Zweifel hier lieber die Finger davon lassen! 999 | Zusätzlich kann sich die Jahre kann sich in den Tabellen „addressbookchanges" und auch „calendarchanges" einige nicht mehr benötigte Daten ansammeln. Diese Tabellen dienen dazu die korrekte Synchronisation zwischen allen Geräten sicherzustellen. Bevor man also hier löscht, müssen alle Programme/Clients, die auf Baikal zugreifen synchronisiert sein! Im Zweifel die Daten lieber belassen. 1000 | 1001 | Für Wartungsarbeiten ist ein Stoppen von Baikal unerlässlich 1002 | 1003 | ``` 1004 | sudo systemctl stop nginx.service 1005 | ``` 1006 | 1007 | Beispiel für Tabelle "addressbookchanges": 1008 | 1009 | 1010 | 1011 | Wartung der Datenbank mittels VACUUM Befehl: 1012 | 1013 | 1014 | Anschließend natürlich wieder starten 1015 | 1016 | ``` 1017 | sudo systemctl start nginx.service 1018 | ``` 1019 | 1020 | ## Weboberfläche 1021 | 1022 | Mit AgenDAV [https://agendav.org/](https://agendav.org/) 1023 | kann man eine Weboberfläche für die Kalenderverwaltung aufsetzen. Es 1024 | bietet allerdings keine Export- und Importfunktion. Diese habe ich 1025 | selbst nicht ausprobiert. 1026 | 1027 | ## Stromsparen beim Raspberry-PI 1028 | 1029 | Generell gilt bei allen IT-Geräten, je geringer die CPU-Last, desto 1030 | geringer der Stromverbrauch. Also installiert möglichst wenig Dienste, 1031 | die einfach so laufen. Auch wenn die meisten Dienste effizient 1032 | programmiert sind, ein paar Prozent CPU-Auslastung kommen schnell zusammen. 1033 | 1034 | ### Abschalten des HDMI-Ausgangs 1035 | 1036 | Via `crontab -e` tragen wir ein 1037 | 1038 | ```sh 1039 | @reboot sleep 120s && /opt/vc/bin/tvservice -o 1040 | ``` 1041 | 1042 | Das schaltet nach 2 Minuten den HDMI-Ausgang ab. Das spart ca. 0,2 Watt 1043 | Strom oder knapp 2 kWh pro Jahr. Ist nicht viel, aber in der Masse dann 1044 | schon. Die 2 Minuten wurden gewählt, da man so, wenn der Raspberry nicht 1045 | im Netzwerk online kommt man ihn an einen Monitor anschließen kann und 1046 | schauen kann was los ist. 1047 | 1048 | ### LEDs abschalten 1049 | 1050 | Wer mag kann beim Raspberry-PI Zero auch noch die LED via 1051 | 1052 | ```sh 1053 | #!/bin/bash 1054 | echo none | sudo tee /sys/class/leds/led0/trigger 1055 | echo 1 | sudo tee /sys/class/leds/led0/brightness 1056 | ``` 1057 | 1058 | deaktivieren. Auch dieses Skript kann via crontab `@reboot` mit einer 1059 | kleinen Verzögerung aufgerufen werden. Weitere Details für andere 1060 | Raspberry PI-Modelle unter 1061 | [https://www.jeffgeerling.com/blogs/jeff-geerling/controlling-pwr-act-leds-raspberry-pi](https://www.jeffgeerling.com/blogs/jeff-geerling/controlling-pwr-act-leds-raspberry-pi) 1062 | 1063 | ### Netzteil 1064 | 1065 | Auch das Netzteil ist wichtig. Es gibt Schrottnetzteile, besonders 1066 | ältere Geräte, die locker mal 0,5 Watt aus der Steckdose ziehen ohne 1067 | dass überhaupt Leistung entnommen wird. Auch wenn die offiziellen 1068 | Raspberry-PI Netzteile für einen PI Zero W eigentlich völlig 1069 | überdimensioniert sind, so sind sie doch eine gute Wahl. Im Leerlauf 1070 | brauchen sie tatsächlich 0 Watt, während viele „Billigheimer" sich 1071 | durchaus 0,2-0,3 Watt genehmigen. 1072 | 1073 | ## Creative Commons Lizenz 1074 | 1075 | Dieser Text steht unter der Creative Commons BY-SA 4.0 Lizenz 1076 | [https://creativecommons.org/licenses/by-sa/4.0/deed.de](https://creativecommons.org/licenses/by-sa/4.0/deed.de) 1077 | 1078 | Bei Weiterverbreitungen bitte den Link zu Github 1079 | [https://github.com/JsBergbau/BaikalAnleitung](https://github.com/JsBergbau/BaikalAnleitung) 1080 | auf dieses Dokument als Quelle angeben. Bei Änderungen/Ergänzungen bitte 1081 | einen Pull Request oder Issue schreiben, damit 1082 | diese in diesen Text eingepflegt werden können. 1083 | --------------------------------------------------------------------------------