Empaquetado de Configuración por Producto
En el entorno de Fedora.next, contamos con una selección de productos Fedora, además de la disponibilidad de la versión clásica de Fedora. Tradicionalmente, hemos mantenido una configuración predeterminada única para todas las instalaciones de Fedora, pero los distintos casos de uso tienen necesidades diferentes. El objetivo de este documento es establecer las directrices para crear configuraciones predeterminadas específicas para cada producto.
Queremos garantizar que todos los paquetes tengan valores predeterminados razonables para cualquier Producto en el que estén instalados, y al mismo tiempo evitar situaciones donde los usuarios tengan algunos paquetes instalados con los valores predeterminados de un Producto y algunos paquetes con los de otro.
Requerimientos
-
Todos los paquetes DEBEN tener una configuración predeterminada global. Esta configuración se utilizará siempre que no se requiera una configuración predeterminada específica del producto. (Por ejemplo, si se utiliza una instalación que no es del producto o si solo Fedora Cloud tiene una configuración personalizada y se instaló Fedora Workstation).
-
Cualquier paquete que requiera una configuración predeterminada por producto DEBE proporcionar todos los archivos de configuración alternativos en el mismo paquete.
-
Cualquier paquete que requiera una configuración que difiera entre Productos DEBE obtener permisos desde ese Grupo de Trabajo de Productos antes de empaquetarlo.
Configuración Predeterminada Global
-
La configuración global por defecto DEBE ser proporcionada por el paquete que lo requiere.
-
La configuración global por defecto DEBE ser nombrada basándose en la esquema de nombrado nomalizado del paquete, con la parte principal del nombre siendo sufijo por defecto. Por ejemplo, si el paquete normalmente utiliza
algo.conf, entonces la configuración global por defecto DEBE ser nombrada comoalgo-predeterminado.conf..
Configuración Per-Producto Predeterminado
-
Por cada Producto requiriendo una única configuración por defecto, el empaquetador DEBE proporcionar una copia del archivo de configuración por defecto, modificado como sea apropiado para el producto específico.
-
El archivo de configuración específico del producto DEBE ser nombrado basado en el esquema de nombrado normal del paquete, con la parte principal del nombre siendo anexado por un guión seguido por el nombre del producto. Por ejemplo, si el paquete utiliza normalmente
algo.conf, entonces la versión Servidor DEBE ser nombradaalgo-server.conf. -
Si la configuración será enlazado simbólicamente en su lugar, el archivo de configuración específico de producto DEBE ser puesto en una parte apropiada de la jerarquía
/etc. EL archivo de configuración divergente DEBE ser especificado como%config(noremplazar)en%archivoscomo por las guías de empaquetado usual de/etc. -
Si la configuración será copiada en su lugar, el archivo de configuración específico del producto DEBE ubicarse en una parte adecuada de la jerarquía
/usr/share. El archivo de configuración divergente DEBE especificarse como un archivo normal en la sección%files.
Aplicar Configuración
Con el fin de aplicar la configuración, el empaquetador DEBE implementar un mecanismo en la sección posttrans del específico que se comporte como sigue:
-
Primero DEBE comprobar si el archivo config final ya existe. Si es así, el script no DEBE ningún cambio.
%posttrans if [ ! -e %{_sysconfdir}/algo/algo.conf ]; then ... fi -
Then it MUST use the value of the Fedora
VARIANT_IDto symlink or copy one of the divergent config files (or the default) to the final config file location. It will get this value by importing the contents of/etc/os-releaseas shell values. Known values of this field at the time of this writing are "atomichost", "cloud", "server" and "workstation". For more detail, see the os-release(5) man page.. /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 -
Por último, el lugar del archivo config final DEBE ser listado dentro de la sección
%filescon%ghost:%ghost %config(noreplace) %{_sysconfdir}/algo/algo.conf -
Para propósito de seguimiento, el paquete proporciona varios archivos de configuración DEBEN además contener un
Provides:virtual por cada configuración variante que pueda ser aplicado:Provides: variant_config(Atomic.host) Provides: variant_config(Cloud) Provides: variant_config(Server) Provides: variant_config(Workstation)
Ejemplo (firewalld)
We will assume for the sake of demonstration that firewalld will need a custom configuration for Fedora Server and Fedora Workstation, but that Fedora Cloud will not require any changes from the global default.
...
Provides: variant_config(Server)
Provides: variant_config(Workstation)
...
%posttrans
# Si aún no tenemos un enlace simbólico o un archivo existente para firewalld.conf,
# créalo. Nota: esto restablecerá intencionalmente la directiva del kit de directivas.
# al mismo tiempo, por tanto están en sincronía.
if [ ! -e %{_sysconfdir}/firewalld/firewalld.conf ]; then
# Importar /etc/os-release para obtener la definición de variante
. /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 ›