Ejecuté una prueba creando dos tars desde el mismo directorio (sus archivos permanecieron sin cambios), y descubrí que sus md5sums eran diferentes. Supongo que se incluye una marca de tiempo en el encabezado del tar, pero no he encontrado la manera de anularlo. Mi sistema operativo es Ubuntu 9.1. Algunas ideas ?
Gracias.
touch filename
que cambia el tiempo modificado de un archivo es suficiente para cambiar la suma de verificación.Respuestas:
Como Dennis señaló anteriormente, es gzip. Parte del encabezado gzip es un tiempo de modificación para lo que esté comprimido en el archivo. Si necesita gzip, puede comprimir el archivo tar como un paso adicional fuera de tar en lugar de usar el gzip interno de tar. El comando gzip tiene una bandera para suprimir el ahorro de ese tiempo de modificación.
Esto no afectará los tiempos dentro del archivo tar, solo el del encabezado gzip.
fuente
GZIP=-n tar -cz ...
Para hacer un archivo tar con una suma de verificación consistente, simplemente anteponga
GZIP=-n
así:Cómo funciona esto: Tar puede aceptar las opciones de gzip utilizando una
GZIP
variable de entorno temporal , como se indicó anteriormente. Como dijo Valter, tar usa gzip, que por defecto coloca una marca de tiempo en el archivo. Esto significa que obtienes una suma de comprobación diferente cuando comprimes los mismos archivos. La-n
opción deshabilita esa marca de tiempo.fuente
También tuve este problema, para hacer que gzip no altere la marca de tiempo, use
gzip -n
-n, --no-name no guarda ni restaura el nombre original y la marca de tiempo
Ejemplo:
fuente
Bajé por una madriguera de conejo después de que las otras respuestas me fallaran, y logré darme cuenta de que mi versión de tar (1.27.1 del repositorio openSUSE 42.3 OSS) estaba usando el
pax
formato de archivo no determinista por defecto, lo que significa que incluso sin compresión, (e incluso configurando el mtime explícitamente) los archivos creados con tar a partir de los mismos archivos serían diferentes:Tenga en cuenta que la salida anterior difiere, aunque no se esté utilizando compresión ; el contenido del archivo sin comprimir (generado al ejecutar tar dos veces en el mismo contenido) es diferente, por lo que el contenido comprimido también diferirá incluso cuando se use,
GZIP=-n
como sugieren otras respuestasPara evitar esto, puede especificar
--format gnu
:Esto funciona con la sugerencia sobre gzip anterior:
Sin embargo, además de razones válidas para preferir mejores formatos de compresión a gzip , es posible que desee considerar usar xz en su lugar (que tar también admite con las banderas
--xz
o en-J
lugar de-z
), porque le ahorra un paso aquí; El comportamiento predeterminado dexz
es generar la misma salida comprimida cuando el contenido sin comprimir es el mismo, por lo que no es necesario especificar una opción comoGZIP=-n
:fuente