Comencé a usar el modo org para planificar mis tareas en el sistema de estilo GTD . Al colocar todos los archivos de organización en un directorio de una carpeta de Dropbox , ejecuto emacs para editar / administrar estos archivos desde tres máquinas locales diferentes: Cygwin, Mac OS X y Debian. Como también uso MobileOrg para acceder a estos archivos de organización desde mi iPad, un checksums.dat
archivo debe mantenerse actualizado cuando se realicen cambios. Esto se puede hacer corriendo md5sum *.org > checksums.dat
.
El problema es que hay tres comandos diferentes para el md5sum
comando: md5sum.exe
en Cygwin, md5
en Mac OS X y md5sum
en Debian. La situación más ideal es un archivo MAKE, almacenado en un buscador de Dropbox, detecta qué comando está disponible en la máquina actual y ejecuta ese comando para realizar la operación de suma de comprobación md5.
autotools
make checksum
para generar datos de suma de verificación en una carpeta de Dropbox, quiero que el archivo MAKE use un comando apropiado después de detectar qué comando de suma de verificación está disponible en la máquina actual.Respuestas:
Posibles comandos para generar una suma de comprobación
Desafortunadamente, no hay una utilidad estándar para generar una suma de verificación criptográfica. Hay una utilidad estándar para generar una CRC:
cksum
; Esto puede ser suficiente para su propósito de detectar cambios en un entorno no hostil.Recomendaría usar SHA1 en lugar de MD5. No hay muchos sistemas que tengan una utilidad MD5 pero no SHA1, y si va a usar sumas de verificación criptográficas, también podría usar un algoritmo sin método conocido para encontrar colisiones (suponiendo que también verifique el tamaño).
Una herramienta que no es estándar pero sí común y puede calcular resúmenes es OpenSSL . Está disponible para Cygwin, Debian y OSX, pero desafortunadamente no forma parte de la instalación predeterminada en OSX.
En OSX 10.6, hay una
shasum
utilidad, que también está presente en Debian (es parte delperl
paquete) y también creo en Cygwin. Este es un script de Perl. La mayoría de los sistemas Unix tienen instalado Perl, por lo que puede agrupar ese script junto con su archivo MAKE si le preocupa que este script no esté disponible en todas partes.Seleccionar el comando correcto para su sistema
Ok, digamos que realmente no puedes encontrar un comando que funcione en todas partes.
En la cáscara
Use el
type
incorporado para ver si hay un comando disponible.GNU make
Puede usar la
shell
función para ejecutar un fragmento de shell cuando se carga el archivo MAKE y almacenar la salida en una variable.Marca portátil (POSIX)
Solo puede ejecutar comandos de shell en la regla, por lo que cada regla que calcule una suma de verificación debe contener el código de búsqueda. Puedes poner el fragmento en una variable. Recuerde que las líneas separadas en las reglas se evalúan de forma independiente. También recuerde que las
$
señales que se deben pasar al shell deben escaparse$$
.fuente
-P
opción deltype
comando para que el método "GNU make" descrito anteriormente funcionara correctamente, así que terminé consum := $(shell { type -P sha1sum || type -P sha1 || type -P shasum; } 2>/dev/null)
.type -P
solo funciona si su shell es bash, no si es, por ejemplo, ksh o dash (que es el caso en Ubuntu, entre otros). Puedes usarcommand -v
para portabilidad.type
a usarcommand
. ¿Deberían actualizarse también los otros métodos?type
es una forma correcta y portátil de probar la presencia de un comando, el problema es que produce un resultado similarsha1sum is /usr/bin/sha1sum
al nombre del programa. Este fue el único lugar donde utilicé el resultado entype
lugar de solo su valor de retorno.Es algo así como un truco, pero puedes probar si cada uno existe y ejecutarlos si lo hacen:
Estoy bastante seguro de que Cygwin reconoce los comandos (incluidos
md5sum
) sin el.exe
, pero inclúyalo si es necesario.fuente
which
los valores de salida no son portables. Use en sutype
lugar (y probablemente quiera usarif; then; elif
para evitar tener problemas porque hay múltiples ejecutables).which
ytype
solo busque ejecutables de todos modos, por lo que su prueba con -x no tiene sentido.Como está ejecutando emacs, puede usar emacs para calcular las sumas de verificación: http://www.gnu.org/software/emacs/manual/html_node/elisp/MD5-Checksum.html .
fuente
O las herramientas automáticas GNU (como se menciona en un comentario), o también CMake es una opción.
Las herramientas automáticas GNU son el enfoque más tradicional, pero (y tal vez hablando solo por mí) no creo que la gente esté realmente entusiasmada con la perspectiva de establecer inicialmente un proyecto usándolas. Bueno, es una curva de aprendizaje, en cualquier caso. CMake es el chico más nuevo en el bloque, y quizás menos común (y aún tiene una curva de aprendizaje). Tiene su propia sintaxis y genera archivos MAKE para su plataforma. CMake sí tiene la clara ventaja de no estar tan centrado en x; también funciona de manera confiable en Unix, Windows y Mac (por ejemplo, puede generar proyectos de msvc, por ejemplo, en lugar de archivos MAKE).
Editar: y, por supuesto, como se sugirieron 'makefiles', esta respuesta va junto con esa presunción. Pero quizás solo un script de Python o (jadeo) un simple programa Java sería más apropiado para esta tarea; el lenguaje de programación / scripting haría lo mismo en todas las plataformas.
fuente