Paketierung produktspezifischer Standardkonfigurationen
In der Fedora.next-Welt bieten wir eine Auswahl kuratierter Fedora-Produkte sowie die klassische Fedora-Version an. Bisher haben wir für alle Fedora-Installationen einheitliche Standardkonfigurationen verwendet. Unterschiedliche Anwendungsfälle stellen jedoch unterschiedliche Anforderungen. Dieses Dokument beschreibt daher die Richtlinien für die Erstellung produktspezifischer Standardkonfigurationen.
Wir möchten sicherstellen, dass alle Pakete sinnvolle Standardeinstellungen für das jeweilige Produkt haben, auf dem sie installiert werden, und gleichzeitig Situationen vermeiden, in denen Benutzer einige Pakete mit den Standardeinstellungen des einen Produkts und andere Pakete mit den Standardeinstellungen eines anderen Produkts installiert haben.
Erfordernisse
-
Alle Pakete MÜSSEN über eine globale Standardkonfiguration verfügen. Diese Konfiguration wird immer dann verwendet, wenn keine produktspezifische Standardkonfiguration erforderlich ist, zum Beispiel bei einer Nicht-Produktinstallation oder wenn nur Fedora Cloud eine benutzerdefinierte Konfiguration besitzt und Fedora Workstation installiert wurde.
-
Jedes Paket, das eine produktspezifische Standardkonfiguration erfordert, MUSS alle alternativen Konfigurationsdateien im selben Paket bereitstellen.
-
Jedes Paket, das eine für das jeweilige Produkt unterschiedliche Konfiguration erfordert, MUSS vor der Paketierung die Genehmigung der Arbeitsgruppe des jeweiligen Produkts einholen.
Globale Standardkonfiguration
-
Die globale Standardkonfiguration MUSS von dem Paket bereitgestellt werden, das sie benötigt.
-
Die globale Standardkonfiguration MUSS gemäß dem normalen Namensschema des Pakets benannt werden, wobei der Hauptteil des Namens mit dem Suffix „-default“ versehen wird. Wenn das Paket beispielsweise normalerweise
foo.confverwendet, MUSS die globale Standardkonfigurationfoo-default.confheißen.
Produktspezifische Standardkonfiguration
-
Für jedes Produkt, das eine individuelle Standardkonfiguration erfordert, MUSS der Paketierer eine Kopie der Standardkonfigurationsdatei bereitstellen, die entsprechend dem jeweiligen Produkt angepasst ist.
-
Die produktspezifische Konfigurationsdatei MUSS gemäß dem üblichen Namensschema des Pakets benannt werden. Der Hauptteil des Namens wird mit einem Bindestrich und dem Produktnamen ergänzt. Verwendet das Paket beispielsweise normalerweise
foo.conf, muss die Serverversionfoo-server.confheißen. -
Wenn die Konfiguration per symbolischem Link direkt im Verzeichnis gespeichert werden soll, muss sich die produktspezifische Konfigurationsdatei in einem geeigneten Bereich der
/etc-Verzeichnishierarchie befinden. Die abweichende Konfigurationsdatei muss gemäß den üblichen Paketbaurichtlinien von/etcals%config(noreplace)in%filesangegeben werden. -
Soll die Konfiguration direkt kopiert werden, muss sich die produktspezifische Konfigurationsdatei in einem geeigneten Bereich der Verzeichnishierarchie
/usr/sharebefinden. Die abweichende Konfigurationsdatei muss als normale Datei im Abschnitt%filesangegeben werden.
Anwenden der Konfiguration
Um die Konfiguration anwenden zu können, MUSS der Paketierer im Abschnitt %posttrans der Spec-Datei einen Mechanismus implementieren, der sich wie folgt verhält:
-
Es MUSS zuerst prüfen, ob die endgültige Konfigurationsdatei bereits existiert. Falls ja, DARF das Skript KEINE Änderungen vornehmen.
%posttrans if [ ! -e %{_sysconfdir}/foo/foo.conf ]; then ... fi -
Anschließend muss der Wert von
VARIANT_IDaus Fedora verwendet werden, um eine der abweichenden Konfigurationsdateien (oder die Standarddatei) an den endgültigen Speicherort der Konfigurationsdatei zu verlinken oder zu kopieren. Dieser Wert wird durch Importieren des Inhalts von/etc/os-releaseals Shell-Werte ermittelt. Bekannte Werte dieses Feldes sind zum Zeitpunkt der Erstellung dieses Dokuments „atomichost“, „cloud“, „server“ und „workstation“. Weitere Informationen finden Sie in der Handbuchseite zu os-release(5).. /etc/os-release || : case "$VARIANT_ID" in server) ln -sf foo-server.conf %{_sysconfdir}/foo/foo.conf || : ;; *) ln -sf foo-default.conf %{_sysconfdir}/foo/foo.conf || : ;; esac -
Schließlich MUSS der Speicherort der endgültigen Konfigurationsdatei im Abschnitt
%filesmit%ghostangegeben werden:%ghost %config(noreplace) %{_sysconfdir}/foo/foo.conf -
Zur Nachverfolgung muss das Paket, das die verschiedenen Konfigurationsdateien bereitstellt, auch ein virtuelles
Provides:für jede anwendbare Konfigurationsvariante enthalten:Provides: variant_config(Atomic.host) Provides: variant_config(Cloud) Provides: variant_config(Server) Provides: variant_config(Workstation)
Beispiel (firewalld)
Wir gehen der Einfachheit halber davon aus, dass firewalld für Fedora Server und Fedora Workstation eine benutzerdefinierte Konfiguration benötigt, Fedora Cloud jedoch keine Änderungen gegenüber der globalen Standardeinstellung erfordert.
...
Provides: variant_config(Server)
Provides: variant_config(Workstation)
...
%posttrans
# Falls noch kein symbolischer Link oder keine bestehende Datei für
# firewalld.conf vorhanden ist, erstellen Sie diese. Hinweis: Dadurch
# wird die PolicyKit-Richtlinie absichtlich zurückgesetzt,
# um sie zu synchronisieren.
if [ ! -e %{_sysconfdir}/firewalld/firewalld.conf ]; then
# /etc/os-release importieren, um die Variantendefinition
# zu erhalten
. /etc/os-release || :
case "$VARIANT_ID" in
server)
ln -sf firewalld-server.conf %{_sysconfdir}/firewalld/firewalld.conf || :
ln -sf org.fedoraproject.FirewallD1.server.policy \
%{_datadir}/polkit-1/actions/org.fedoraproject.FirewallD1.policy || :
;;
workstation)
ln -sf firewalld-workstation.conf %{_sysconfdir}/firewalld/firewalld.conf || :
ln -sf org.fedoraproject.FirewallD1.desktop.policy \
%{_datadir}/polkit-1/actions/org.fedoraproject.FirewallD1.policy || :
;;
*)
ln -sf firewalld-default.conf %{_sysconfdir}/firewalld/firewalld.conf || :
# The default firewall policy will be the same as Server
ln -sf org.fedoraproject.FirewallD1.server.policy \
%{_datadir}/polkit-1/actions/org.fedoraproject.FirewallD1.policy || :
;;
esac
fi
...
%files -f %{name}.lang
...
%attr(0750,root,root) %dir %{_sysconfdir}/firewalld
%ghost %config(noreplace) %{_sysconfdir}/firewalld/firewalld.conf
%config(noreplace) %{_sysconfdir}/firewalld/firewalld-default.conf
%config(noreplace) %{_sysconfdir}/firewalld/firewalld-server.conf
%config(noreplace) %{_sysconfdir}/firewalld/firewalld-workstation.conf
...
%ghost %{_datadir}/polkit-1/actions/org.fedoraproject.FirewallD1.policy
%{_datadir}/polkit-1/actions/org.fedoraproject.FirewallD1.desktop.policy
%{_datadir}/polkit-1/actions/org.fedoraproject.FirewallD1.server.policy
Want to help? Learn how to contribute to Fedora Docs ›