2011-05-06 15 views
5

Cuando uso C en línea con Barniz no he podido obtener/etc/barniz/predeterminado
para estar contento al inicio.Barniz DAEMON_OPTS Opciones Errores

He probado inline C con barniz por dos cosas: detección de GeoIP y funciones de antisuciedad.

DAEMON_OPTS siempre se queja aunque estoy siguiendo lo que otros parecen
para indicar que funciona bien.

Mi problema es que esta línea de comandos puesta en marcha de las obras:

varnishd -f /etc/varnish/varnish-default.conf -s file,/var/lib/varnish/varnish_storage.bin,512M -T 127.0.0.1:2000 -a 0.0.0.0:8080 -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s' 

Pero él los errores hacia fuera con tratar de arrancar desde scripts de arranque por defecto:

/etc/default/barniz tiene esto en él :

DAEMON_OPTS="-a :8080 \ 
      -T localhost:2000 \ 
      -f /etc/varnish/varnish-default.conf \ 
      -s file,/var/lib/varnish/varnish_storage.bin,512M \ 
      -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'" 

El error es:

# /etc/init.d/varnish start 
Starting HTTP accelerator: varnishd failed! 
storage_file: filename: /var/lib/varnish/vbox.local/varnish_storage.bin size 512 MB. 
Error: 
Unknown parameter "'cc_command". 

Si intento cambiar la última línea a:

-p cc_command='exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'" 

Es error es ahora:

# /etc/init.d/varnish start 
Starting HTTP accelerator: varnishd failed! 
storage_file: filename: /var/lib/varnish/vbox.local/varnish_storage.bin size 512 MB. 
Error: Unknown storage method "hared" 

Se trata de intentar interpretar el '-shared' como -s hared y 'hared' no es una tipo de almacenamiento.

Tanto para GeoIP como para Anti-Site-Scrape He utilizado las opciones de demonio recomendadas exactamente
y además he intentado todo tipo de variaciones como agregar \ 'y' 'pero no me gusta.

Aquí hay un enlace a las instrucciones que he seguido que funcionan bien, excepto la parte DAEMON_OPTS.
http://drcarter.info/2010/04/how-fighting-against-scraping-using-varnish-vcl-inline-c-memcached/

Estoy usando Debian y el DAEMON_OPTS exacto como se indica en las instrucciones.

¿Alguien puede ayudar con un puntero sobre lo que está mal aquí?

¡Muchas gracias!

Respuesta

0

Obviamente, su script de inicio que interpreta el DAEMON_OPTS no está preparado para espacios en blanco (incluso entre comillas simples). En mi instalación de Fedora (15), la solución sugerida funciona bien; los argumentos se interpretan correctamente porque el parámetro bash "$*" se pasa en /etc/init.d/varnish y en /etc/init.d/functions en daemon().

¿Obtuvo sus scripts de inicio de un paquete o hizo scripts personalizados?

9

Incluso si Jacob probablemente nunca leerá esto, los visitantes del futuro pueden apreciar lo que voy a escribir.

Creo que sé lo que está mal, y parece un problema específico de Debian, al menos verificado en Ubuntu 11.04 y Debian Squeeze.

Rastreé la ejecución desde mi /etc/default/varnish que contiene el $DAEMON_OPTS al script de inicio. En el guión de inicio /etc/init.d/varnish, la función start_varnishd() es:

 
start_varnishd() { 
    log_daemon_msg "Starting $DESC" "$NAME" 
    output=$(/bin/tempfile -s.varnish) 
    if start-stop-daemon \ 
     --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \ 
     -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1; then 
     log_end_msg 0 
    else 
     log_end_msg 1 
     cat $output 
     exit 1 
    fi 
    rm $output 
} 

Así que lo modificó para imprimir la línea completa start-stop-daemon de comandos, como:

 
start_varnishd() { 
    log_daemon_msg "Starting $DESC" "$NAME" 
    output=$(/bin/tempfile -s.varnish) 
+ echo "start-stop-daemon --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1" 
    if start-stop-daemon \ 
     --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \ 
     -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1; then 
     log_end_msg 0 

Así que tiene una línea de comandos se hizo eco en la salida estándar, y lo copié en mi caparazón. Y, sorpresa! Funcionó. WTF?

Repita para estar seguro. Si, funciona. Mmh. ¿Podría ser otro de esos casos de esquina bash/dash? Vamos a tratar de alimentar la línea de comandos start-stop-daemon a bash, y ver cómo reacciona:

 
start_varnishd() { 
    log_daemon_msg "Starting $DESC" "$NAME" 
    output=$(/bin/tempfile -s.varnish) 
    if bash -c "start-stop-daemon \ 
     --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \ 
     -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1"; then 
     log_end_msg 0 
    else 
     log_end_msg 1 
     cat $output 
     exit 1 
    fi 
    rm $output 
} 

Sí, funciona bien, al menos para mi caso. Aquí está la parte pertinente de mi /etc/default/varnish:

 
... 
## Alternative 2, Configuration with VCL 
# 
# Listen on port 6081, administration on localhost:6082, and forward to 
# one content server selected by the vcl file, based on the request. Use a 1GB 
# fixed-size cache file. 
# 
DAEMON_OPTS="-a :6081 \ 
      -T localhost:6082 \ 
      -f /etc/varnish/geoip-example.vcl \ 
      -S /etc/varnish/secret \ 
      -s malloc,100M \ 
      -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o %o %s'" 
... 

que he visto mensajes en la que alguien trató de solucionar este problema moviendo el comando de compilación en un script de shell separada. Lamentablemente, eso no cambia el hecho de que start-stop-daemon va a pasar la var $DAEMON_OPTS a través de dash, y que dará lugar a opciones destrozadas.

sería algo a lo largo de las líneas de:

 
-p 'cc_command=exec /etc/varnish/compile.sh %o %s'" 

y luego el guión como compile.sh:

 
#!/bin/sh 
cc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o [email protected] 

pero no funciona, por lo que sólo parchear los scripts de inicio, y usted' re bueno para ir! Espero que pueda encontrar esta información útil.

+0

Puede haber una sintaxis especial o una solución alternativa para hacer que esto funcione en el tablero también. Lamentablemente, no sé mucho sobre el tablero. – cosimo

+0

Eche un vistazo a esto tal vez? http: // stackoverflow.com/questions/1661193/start-stop-daemon-quoted-arguments-malinterpreted – nicomen

+1

Tengo que decir que no entendí cuál es la solución propuesta al final de la historia ...: - | – cosimo

0

Esto no está directamente relacionado con la pregunta, pero puede encontrarse aquí si está trabajando a través del Varnish Tutorial - Put Varnish on port 80.

Para las instalaciones recientes de Varnish en sistemas Debian, la configuración para las opciones de inicio barnizadas se puede encontrar en /etc/systemd/system/multi-user.target.wants/varnish.service. La forma documentada de cambiar el puerto a través del /etc/default/varnish aún existe, pero ya no funciona a menos que cambie su sistema para usar los scripts init en lugar de systemd.

Después de haber cambiado sus opciones en /etc/systemd/system/multi-user.target.wants/varnish.service, no olvide ejecutar systemctl daemon-reload, que catalogará los cambios para ejecutar el programa.

0

Puedes probar a utilizar: - DAEMON_OPTS = "- a: localhost 8080 -T \ : 2000 \ -f /etc/varnish/varnish-default.conf \ archivo -s/var/lib/barniz/varnish_storage.bin, 512M \ -p cc_command = 'cc ejecutivo -fPIC -compartida -Wl, -x -L/usr/include/libmemcached/memcached.h -lmemcached -o% o% s'"