Agregar línea de text a la sección de file de reglas

Intento escribir un script bash para automatizar la installation de nginx con el module de velocidad de página.

Parte de esto requiere que agregue esto: --add-module=$(MODULESDIR)/ngx_pagespeed \ a una sección del file /usr/src/nginx/nginx-XX6/debian/rules .

Cada sección es similar a:

 light_configure_flags := \ $(common_configure_flags) \ --with-http_gzip_static_module \ --without-http_browser_module \ --without-http_geo_module \ --without-http_limit_req_module \ --without-http_limit_conn_module \ --without-http_memcached_module \ --without-http_referer_module \ --without-http_scgi_module \ --without-http_split_clients_module \ --without-http_ssi_module \ --without-http_userid_module \ --without-http_uwsgi_module \ --add-module=$(MODULESDIR)/nginx-echo 

El file completo está aquí: https://jsfiddle.net/72hL5pya/1/ (lo siento, no sabía dónde más ponerlo)

Y cada sección es * _configure_flags

hay varias de estas secciones para cada "versión" de nginx para comstackr (light, full, extras, etc …)

Entonces esa última --add-module= línea es diferente en cada sección.

¿Cómo puedo agregar el --add-module=$(MODULESDIR)/ngx_pagespeed \ a cada uno?

NOTA: Parece que a partir de cualquier date, la estructura de este file de rules ha cambiado.

 #!/usr/bin/make -f #export DH_VERBOSE=1 CFLAGS ?= $(shell dpkg-buildflags --get CFLAGS) LDFLAGS ?= $(shell dpkg-buildflags --get LDFLAGS) WITH_HTTP2 := $(shell printf \ "Source: nginx\nBuild-Depends: libssl-dev (>= 1.0.1)\n" | \ dpkg-checkbuilddeps - >/dev/null 2>&1 && \ echo "--with-http_v2_module") PKGS = nginx nginx-dbg \ nginx-module-xslt nginx-module-geoip nginx-module-image-filter \ nginx-module-perl nginx-module-njs COMMON_CONFIGURE_ARGS := \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-http_xslt_module=dynamic \ --with-http_image_filter_module=dynamic \ --with-http_geoip_module=dynamic \ --with-http_perl_module=dynamic \ --add-dynamic-module=debian/extra/njs-1c50334fbea6/nginx \ --with-threads \ --with-stream \ --with-stream_ssl_module \ --with-http_slice_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-ipv6 \ $(WITH_HTTP2) \ --with-cc-opt="$(CFLAGS)" \ --with-ld-opt="$(LDFLAGS)" %: dh $@ override_dh_auto_configure: configure_debug override_dh_strip: dh_strip --dbg-package=nginx-dbg override_dh_auto_build: dh_auto_build mv objs/nginx objs/nginx-debug mv objs/ngx_http_xslt_filter_module.so objs/ngx_http_xslt_filter_module-debug.so mv objs/ngx_http_image_filter_module.so objs/ngx_http_image_filter_module-debug.so mv objs/ngx_http_geoip_module.so objs/ngx_http_geoip_module-debug.so mv objs/ngx_http_perl_module.so objs/ngx_http_perl_module-debug.so mv objs/src/http/modules/perl/blib/arch/auto/nginx/nginx.so objs/src/http/modules/perl/blib/arch/auto/nginx/nginx-debug.so mv objs/ngx_http_js_module.so objs/ngx_http_js_module-debug.so CFLAGS="" ./configure $(COMMON_CONFIGURE_ARGS) dh_auto_build configure_debug: CFLAGS="" ./configure $(COMMON_CONFIGURE_ARGS) \ --with-debug override_dh_auto_install: sed -e 's/%%PROVIDES%%/nginx/g' \ -e 's/%%DEFAULTSTART%%/2 3 4 5/g' \ -e 's/%%DEFAULTSTOP%%/0 1 6/g' \ < debian/init.d.in > debian/init.d dh_auto_install mkdir -p debian/nginx/etc/init.d debian/nginx/etc/default \ debian/nginx/usr/lib/nginx/modules sed -e 's/%%PROVIDES%%/nginx-debug/g' \ -e 's/%%DEFAULTSTART%%//g' \ -e 's/%%DEFAULTSTOP%%/0 1 2 3 4 5 6/g' \ < debian/init.d.in > debian/debug.init.d /usr/bin/install -m 755 debian/debug.init.d \ debian/nginx/etc/init.d/nginx-debug /usr/bin/install -m 644 debian/nginx-debug.default \ debian/nginx/etc/default/nginx-debug /usr/bin/install -m 644 debian/nginx.conf debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/win-utf debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/koi-utf debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/koi-win debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/mime.types debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/scgi_params debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/fastcgi_params debian/nginx/etc/nginx/ /usr/bin/install -m 644 conf/uwsgi_params debian/nginx/etc/nginx/ /usr/bin/install -m 644 html/index.html \ debian/nginx/usr/share/nginx/html/ /usr/bin/install -m 644 html/50x.html \ debian/nginx/usr/share/nginx/html/ /usr/bin/install -m 644 debian/nginx.vh.default.conf \ debian/nginx/etc/nginx/conf.d/default.conf /usr/bin/install -m 755 objs/nginx debian/nginx/usr/sbin/ /usr/bin/install -m 755 objs/nginx-debug debian/nginx/usr/sbin/ cd debian/nginx/etc/nginx && /bin/ln -s \ ../../usr/lib/nginx/modules modules && cd - override_dh_gencontrol: for p in $(PKGS); do \ if [ -e debian/$$p.version ]; then \ dpkg-gencontrol -p$$p -ldebian/changelog -Tdebian/$$p.substvars -Pdebian/$$p -v`cat debian/$$p.version`~`lsb_release -cs`; \ else \ dpkg-gencontrol -p$$p -ldebian/changelog -Tdebian/$$p.substvars -Pdebian/$$p ; \ fi ; \ done override_dh_clean: dh_clean rm -f debian/*init.d 

Si no importa en qué parte de la list de opciones se encuentra el nuevo, podría

 sed '/_configure_flags *:=/ a\ --add-module=$(MODULESDIR)/ngx_pagespeed \\ ' file 
 light_configure_flags := \ --add-module=$(MODULESDIR)/ngx_pagespeed \ $(common_configure_flags) \ --with-http_gzip_static_module \ ... 

Para agregar después de la línea "common_configure_flags", puede:

 sed -r ' # when the line ends with a backslash # add the new line with a backslash /\$\(common_configure_flags\)[[:blank:]]*\\$/ a\ --add-module=$(MODULESDIR)/ngx_pagespeed \\ # when the line does not end with a backslash, # add a backslash, then # add the new line without a backslash /\$\(common_configure_flags\)[[:blank:]]*$/ { s/$/ \\/ a\ --add-module=$(MODULESDIR)/ngx_pagespeed } ' file 

Algunos datos sobre el file de reglas están actualmente disponibles en http://anonscm.debian.org/cgit/collab-maint/nginx.git/tree/debian/rules

Como las configuraciones específicas del package parecen henetworkingarse a través de la statement $(common_configure_flags) , modificar solo ese bloque puede ser suficiente:

 $ perl -00 -ple 's{$}{ \\\n\t\t\t--add-module=\$(MODULESDIR)/ngx_pagespeed} if m/common_configure_flags :=/' rules > nu $ diff -u rules nu --- rules 2015-12-17 14:49:12.000000000 -0800 +++ nu 2015-12-17 14:52:52.171942309 -0800 @@ -47,7 +47,8 @@ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_realip_module \ - --with-http_auth_request_module + --with-http_auth_request_module \ + --add-module=$(MODULESDIR)/ngx_pagespeed 

Esta solución trata los contenidos del file en turnos de párrafos ( -00 -p ), y agrega los datos necesarios al final de cada uno (y backwhacking apropiado, nueva línea y tabú), pero solo para el párrafo que coincide con common_configure_flags := bit . Para apuntar a cada sección (en lugar de solo a la común), uno tendría que jugar con la expresión regular if es apropiado.

Necesitaba agregar varias líneas y no pude hacer que sed funcionara, así que usé awk en su lugar:

 awk '/full_configure_flags :=/{print $0 RS \ " --add-dynamic-module=/opt/ngx_http_split_clients/ngx_http_split_clients_module.c" RS \ " --with-http_addition_module" RS \ " --with-http_sub_module" RS \ " --with-http_flv_module" RS \ " --with-http_mp4_module" RS \ " --with-http_gunzip_module" RS \ " --with-http_random_index_module" RS \ " --with-http_secure_link_module" RS \ " --with-http_stub_status_module" RS \ " --with-mail" RS \ " --with-mail_ssl_module" RS \ " --with-file-aio" RS \ " --with-ipv6" RS \ " --with-http_spdy_module" RS \ " --with-cc-opt";next}1' /opt/rebuildnginx/nginx-1.10.2/debian/rules 

Esta publicación de SO fue útil para descifrar la syntax.