TFTP zum Funktionieren zu bringen ist eine Qual, vor allem auch deshalb, weil teilweise nicht geloggt wird und daher die Infos fehlen …

Nach der Installation mit

$ sudo yum install tftp

funktionierte erst einmal lange Zeit nichts. Es gabe Probleme mit Schreibrechten, denen nicht einmal mit 777 beizukommen waren.
Schließlich konnte unter /var/log/audit/audit.log SELinux als Verursacher des Problems identifiziert werden:

type=AVC msg=audit(1635500788.578:14267): avc:  denied  { write } for  pid=17556 comm="in.tftpd" name="tftpboot" dev="dm-3" ino=132 scontext=system_u:system_r:tftpd_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=0
type=SYSCALL msg=audit(1635500788.578:14267): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=556177fa2442 a2=41 a3=1b6 items=0 ppid=17548 pid=17556 auid=4294967295 uid=65534 gid=65534 euid=65534 suid=65534 fsuid=65534 egid=65534 sgid=65534 fsgid=65534 tty=(none) ses=4294967295 comm="in.tftpd" exe="/usr/sbin/in.tftpd" subj=system_u:system_r:tftpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=openat AUID="unset" UID="nobody" GID="nobody" EUID="nobody" SUID="nobody" FSUID="nobody" EGID="nobody" SGID="nobody" FSGID="nobody"
type=PROCTITLE msg=audit(1635500788.578:14267): proctitle=2F7573722F7362696E2F696E2E7466747064002D63002D73002F646174612F74667470626F6F74

Googeln brachte mich in 2 Schritte zu Beiträgen die mir folgendes empfahlen:

$ sudo setsebool -P tftp_anon_write 1
$ sudo setsebool -P tftp_home_dir 1
$ sudo chcon -t -P tftpdir_rw_t /data/tftpboot/*

Als zusätzliches Problem stellte sich heraus, dass am “Client” die Firewall die Pakete nach der ersten Verbindung blockt, weil sich das Protokoll im high-Port-Bereich die Parameter für die tatsächliche Übertragung vereinbaren. Also muss komplett noch UDP zwischen Server und Client am Client freigeschaltet werden. Man muss eh nicht sagen, dass es dann auf den eigentlichen Clients gar keine Firewall gibt. Allerdings ist der verwendete TFTP-Client etwas komfortabler und aussagekräftiger, als der TFTP-Client auf der Netzwerkkomponente …
Aus Gründen, die ich nicht weiter verfolgt habe, bringt der folgende Befehl nicht das gewünschte Ergebnis:

$ sudo firewall-cmd --add-service=tftp-client --permanent

Ich habe dann ein ganzes Netzwerk für UDP freigeschaltet:

$ sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="a.b.c.d/27" accept' --permanent

firewalld am Server sollte natürlich ebenfalls angepasst sein:

$ sudo firewall-cmd --add-service=tftp --permanent

Noch ein paar NAcharbeiten, nachdem das tftp-Verzeichnis verschoben wurde:

Zuerst allgemeiner das Verzeichnis über SELinux public gemacht:

$ semanage fcontext -a -t public_content_rw_t "/data/tftpboot(/.*)?"
$ restorecon -F -R -v /data/tftpboot/

Dann lieber auf den tftp-daemon beschränkt:

$ semanage fcontext -m -t tftpdir_rw_t "/data/tftpboot(/.*)?"
$ restorecon -F -R -v /data/tftpboot

Das -a setzt neu, und das -m modifiziert!

Upgrade auf RedHat 8 und ich bekomme folgenden Fehler im Apache-Log:

[Fri Apr 09 09:21:08.101462 2021] [proxy:error] pid 2147:tid 140116118988544Permission denied: AH00957: HTTP: attempt to connect to x.x.x.x:80 (*) failed
[Fri Apr 09 09:21:08.101516 2021] [proxy_http:error] [pid 2147:tid 140116118988544] [client y.y.y.y:34796] AH01114: HTTP: failed to make connection to backend: 156.58.166.131
y.y.y.y - - [09/Apr/2021:09:21:08 +0200] "GET / HTTP/1.1" 503 299 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0"

Die Lösung versteckt sich hinter selinux, mit dem ich leider noch nicht sehr viel auseinandergesetzt habe. Offenbar muss man http den Zugriff auf das Netzwerk erlauben:

/usr/sbin/setsebool httpd_can_network_connect 1

Wenn der Zugriff jetzt funktioniert, muss man diese Änderung unter selinux noch permanent machen:

/usr/sbin/setsebool -P httpd_can_network_connect 1

Gefunden unter https://blog.pheonixsolutions.com/13permission-denied-ah00957-http-attempt-to-connect-to-failed/

Hinweis: es wurde eine bereits bestehende Davical-Datenbank transferiert!
Postgres in der Version 11
Davical 1.1.8

Davical und postgres installieren

apt-get install davical
apt-get install postgres

Davical konfigurieren

vim /etc/davical/cal3.example.com-conf.php

domain_name  = 'cal3.example.com';
  $c->sysabbr     = 'davical';
  $c->system_name = 'DAViCal CalDAV Server';

  $c->admin_email  = 'davical@example.com';
  $c->pg_connect[] = 'dbname=davical port=5432 user=davical_app';
  $c->default_locale = "de_DE";

Achtung: der Name der Konfigurationsdatei muss mit dem Hostnamen des Kalenderserver übereinstimmen!

postgres konfigurieren

vim /etc/postgresql/11/main/pg_hba.conf

…
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# Allow local access for davical
local   davical         davical_app                             trust
local   davical         davical_dba                             trust
host    davical         davical_app     127.0.0.1/32            trust
host    davical         davical_dba     127.0.0.1/32            trust
host    davical         davical_app     ::1/128                 trust
host    davical         davical_dba     ::1/128                 trust

# "local" is for Unix domain socket connections only
local   all             all                                     peer
…

Hinweis: der fett ausgeführte Teil muss vor allen anderen Definitienen erolgen, damit sie greifen!

Konfiguration Apache

Erweiterung der Ports

vim /etc/apache2/ports.conf

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
        Listen 443
        <strong>>isten 8443</strong>
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

Davical Konfiguration

vim /etc/apache2/conf-available/davical.conf

## /etc/apache2/conf-available/davical.conf


<IfModule mod_ssl.c>
Alias /davical /usr/share/davical/htdocs
<Directory /usr/share/davical/htdocs>


       Require all granted
       Options Indexes
       DirectoryIndex index.php
#       php_flag magic_quotes_gpc Off
#       php_flag register_globals Off
</Directory>
</IfModule>

Davical-Site-Konfiguration

vim /etc/apache2/sites-available/davical.conf

<VirtualHost *:8443 >
  DocumentRoot /usr/share/davical/htdocs
  SSLEngine on
  SSLCertificateFile /etc/ssl/2018/STAR_example_at.crt
  SSLCertificateKeyFile /etc/ssl/2018/example.at.key
  DirectoryIndex index.php index.html
  ServerName cal3.example.com
  ServerAlias cal.example.com
  Alias /images/ /usr/share/davical/htdocs/images/
  CustomLog /var/log/apache2/davical_access.log combined
  ErrorLog /var/log/apache2/davical-error.log
  <Directory /usr/share/davical/htdocs/>
      AllowOverride None
      Order allow,deny
      Allow from all
  </Directory>
  AcceptPathInfo On
  php_value include_path /usr/share/awl/inc
  php_value magic_quotes_gpc 0
  php_value register_globals 0
  php_value error_reporting "E_ALL & ~E_NOTICE"
  php_value default_charset "utf-8"
  php_admin_flag suhosin.server.strip off
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !^/$
  RewriteCond %{REQUEST_URI} !/.(php|css|js|png|gif|jpg)
  RewriteRule ^(/principals/users.*)$ /caldav.php$1 [NC,L]
</VirtualHost>

Aktivierung der Apachen-Konfiguration

a2enconf davical
a2ensite davical
systemctl restart apache2

Aus unbekannten Gründen musste auch noch die Datenbank upgedatet werden (wie nach einem Davical Upgrade):
/usr/share/davical/dba/update-davical-database

Anleitung zur kompletten Neuinstallation (inkl. anlegen der Datenbanken)

Davical Installation