Pregunta

Estoy corriendo en un problema con el guión ./configure para ffmpeg. Mi entorno Linux utiliza busybox, que sólo permite un conjunto limitado de comandos de Linux. Un comando que se utiliza en el guión ./configure ffmpeg es mktemp -u, el problema aquí es el busybox para Linux no reconoce el interruptor -u como válido, por lo que se queja de ello y se rompe el proceso de configuración.

Este es el código relevante en ./configure que utiliza el comando mktemp -u:

if ! check_cmd type mktemp; then
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
        die "Unable to create temporary file in $TMPDIR."
    append TMPFILES $tmp
    eval $1=$tmp
}

No soy bueno con bash scripting en absoluto, así que me preguntaba si alguien tenía una idea sobre cómo puedo forzar esta rutina de configuración no uso mktemp -u y el uso de la etiqueta 'reemplazo' opción alternativa que está disponible en como por el fragmento anterior. Gracias.

Por cierto ... la simple eliminación del interruptor -u no funciona. Tampoco su sustitución por -t o -p. Creo que el mktemp tiene que ser pasado por alto por completo.

¿Fue útil?

Solución

Cambiar esto:

if ! check_cmd type mktemp; then
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

A esto:

#if ! check_cmd type mktemp; then
if true; then # Force the use of mktemp()
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

Podría quitar alternativamente la totalidad de las construcciones if fi de manera que lo que queda es sólo la definición mktemp() pero prefiero dejarlos en como una forma de recordar lo que había que hacer y en caso de que tenga que volver.

Otros consejos

Yo sólo iba a cambiar el script de configuración para descartar la opción -u a mktemp y retire la set -C; (que el modo de conjuntos no-clobber, y requiere que el fichero está ausente; retirar los medios -u que necesita para eliminar el set -C también).

Los MacOS X man de mktemp (1) decir:

-u funcionar en el modo `` peligroso ''. El archivo temporal se desvincula antes de salidas Mktemp. Esta cifra es ligeramente mejor que mktemp (3), pero aún presenta una condición de carrera. Uso de esta opción no se anima.

El nombre del archivo generado se desvincula por mktemp, e inmediatamente después se vuelve a crear el script de configuración, que es un poco tonto. Dejar caer los medios -u que el nombre del archivo ya existen, después de haber sido creado de forma segura.

Si el software es algo que se va a utilizar con frecuencia, a continuación, informar de ello a los desarrolladores o personal de mantenimiento del software.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top