Nuestro equipo realiza con frecuencia la personalización de varios paquetes distribuidos con RHEL/CentOS. Nuestro flujo de trabajo incluye la instalación de la SRPM, ejecutando rpmbuild -bp
para desempaquetar y parchear la fuente, haciendo que nuestros cambios y crear un .patch para ser incluido en el specfile, y la construcción de la nueva SRPM personalizado para su uso posterior con fingida:¿Cómo puedo usar git para rastrear personalizaciones de SRPM?
$ rpm -i grub-0.97-13.5.1.src.rpm
$ rpmbuild -bp rpmbuild/SPECS/grub.spec
$ cp -a rpmbuild/BUILD/grub-0.97 grub-0.97.orig
$ cd rpmbuild/BUILD/grub-0.97
# Make modifications, generate .patch against ".orig" copy
$ vim rpmbuild/SPECS/grub.spec
# Add custom .patch to specfile, update version, etc
$ rpmbuild -bs rpmbuild/SPECS/grub.spec
$ mock -r default-x86_64.cfg rpmbuild/SRPMS/grub-0.97-13.5.1.custom-1.src.rpm
Este proceso funciona bien, pero actualmente no estamos utilizando ningún tipo de control de origen para realizar un seguimiento de nuestras modificaciones y cambios en el archivo de la especificación. Basado en mi comprensión (ciertamente básica) de git, creo que debería ser posible inyectarlo en este flujo de trabajo y aprovechar parte de su poder para optimizar algunos de los pasos (además de los beneficios normales de SCM).
Por ejemplo, en lugar de crear una copia de la fuente a diff
en una fecha posterior, podríamos crear una confirmación inicial de la fuente de parche de inicio y luego hacer nuestras modificaciones. Cuando esté listo, use git format-patch
para crear nuestro parche de características y agréguelo al archivo de especificación.
También me gustaría controlar la versión de los archivos de especificación, aunque no estoy seguro de cómo lograrlo.
Así que mi pregunta es triple:
- ¿Alguien por ahí utilizar SMC cuando personalización de paquetes de aguas arriba?
- ¿Cuál es la forma más efectiva de integrar git en nuestro flujo de trabajo?
- ¿Existe un mejor flujo de trabajo que sea más propicio para la creación de RPM personalizada controlada por versión?
Crédito adicional: Suponiendo un flujo de trabajo basado en git, ¿cómo iba a estructurar un repositorio central para aceptar empuja? Un repositorio con submódulos? Un repo por paquete?
Gran respuesta. Una adición: usualmente uso 'mock' para un desarrollador menor y rpmbuild se quejaría si las dependencias no están instaladas. Una pizca de '--nodeps' agregado a rpmbuild hace felices a todos. – Mansour
¿Por qué borrar? – MarkHu
El contenido del directorio 'BUILD' se elimina por rpm como parte del proceso de compilación. Por supuesto, podría mantener este repositorio de forma persistente en otro lugar. – larsks