From owner-freebsd-questions@freebsd.org Wed Jan 13 17:02:04 2021 Return-Path: Delivered-To: freebsd-questions@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7A3D94E27ED for ; Wed, 13 Jan 2021 17:02:04 +0000 (UTC) (envelope-from freebsd@edvax.de) Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.135]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mout.kundenserver.de", Issuer "TeleSec ServerPass Class 2 CA" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DGDJC1gc9z3CFh for ; Wed, 13 Jan 2021 17:02:02 +0000 (UTC) (envelope-from freebsd@edvax.de) Received: from r56.edvax.de ([94.222.8.191]) by mrelayeu.kundenserver.de (mreue012 [212.227.15.167]) with ESMTPA (Nemesis) id 1N1cvQ-1jy7NT2xKq-011xJX; Wed, 13 Jan 2021 18:01:39 +0100 Date: Wed, 13 Jan 2021 18:01:34 +0100 From: Polytropon To: Scott Cc: "James B. Byrne" , Polytropon , freebsd-questions@freebsd.org Subject: Re: Need help specifying args in rc.conf for a service Message-Id: <20210113180134.a481ad1e.freebsd@edvax.de> In-Reply-To: References: <74ebbde2ed354c37fc2a84cbf3e36840.squirrel@webmail.harte-lyne.ca> Reply-To: Polytropon Organization: EDVAX X-Mailer: Sylpheed 3.1.1 (GTK+ 2.24.5; i386-portbld-freebsd8.2) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:tJ6Lygr4n5Eiyay190Y0TUKbxyQ8KNdUWGRXfi9aA6Go+Fv6lUj Qbl7dNJxxQlm8fMkny3Xl0M+7epVXuS2kWSwxTQZG7sQgJvXQ6fgCBcQxMQhCg1F+5IsDVt iuXUFYaTDZBzGjQHnON3losP8YMcLUm0G0BEOLUm4kiVTNptAM40sl5JDph1Yczhdjm/THm hfIKIgySJIZwQJP0TpjPQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:OGrcNHBMjaw=:i0bXskEaNvK+pVcvIG5r11 tzrT/HAvlLZMpSxoGd/b0i8C5jmynd2622PCIW+di3SYHZnAoa19v82P1VcdkDxBKmz6fxqRQ CsF8Nn45DyGiNvyiba7DlXcFlTaYJ/0/Eu7QR8q/4Pfe57kRXz3gKtb5pk9AgB3XG6y4Hv7dE U7h1GpwNU89mug2FspHRiXVIoJAKvwKVMmkW08Psy9+4bcYRNA5u45na1NS2KaDg3PnPYMhLl lee6u0NyLcGQx1Xj39GwRpJZ99qwa+wWe+k1Cjzd4176h7OvKorDVABokCf6uuiFwMxBGeQ2K 2dKzkqHekyRwRbpseImWgp5nC6L2uiTRmXLpj8wcVmHMsNJQOQIoR5JRYwGE0toQPqbEXBtET YrsYfmngFoCI6LGpgwrCXKLraVcK93rsQCX+bxWORDbehURh6ETT/N9C0L9TY X-Rspamd-Queue-Id: 4DGDJC1gc9z3CFh X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of freebsd@edvax.de has no SPF policy when checking 212.227.126.135) smtp.mailfrom=freebsd@edvax.de X-Spamd-Result: default: False [-0.60 / 15.00]; HAS_REPLYTO(0.00)[freebsd@edvax.de]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_SOME(0.00)[]; MV_CASE(0.50)[]; HAS_ORG_HEADER(0.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; R_DKIM_NA(0.00)[]; ASN(0.00)[asn:8560, ipnet:212.227.0.0/16, country:DE]; MIME_TRACE(0.00)[0:+]; RECEIVED_SPAMHAUS_PBL(0.00)[94.222.8.191:received]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; REPLYTO_EQ_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[edvax.de]; AUTH_NA(1.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MID_CONTAINS_FROM(1.00)[]; RCVD_IN_DNSWL_NONE(0.00)[212.227.126.135:from]; R_SPF_NA(0.00)[no SPF record]; RWL_MAILSPIKE_VERYGOOD(0.00)[212.227.126.135:from]; RCVD_COUNT_TWO(0.00)[2]; MAILMAN_DEST(0.00)[freebsd-questions] X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jan 2021 17:02:04 -0000 On Wed, 13 Jan 2021 10:36:01 +1100, Scott wrote: > On Tue, Jan 12, 2021 at 09:35:58AM -0500, James B. Byrne wrote: > > > > > > On Mon, January 11, 2021 07:55, Scott wrote: > > > > > > here's what I get using: > > > node_exporter_args='--collector.filesystem.ignored-mount-points="^/(dev)($|/)"' > > > > > > + _doit=$' limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon -f -p > > > /var/run/node_exporter.pid -T node_exporter /usr/bin/env > > > /usr/local/bin/node_exporter --web.listen-address=:9100 > > > --collector.textfile.directory=/var/tmp/node_exporter > > > --collector.filesystem.ignored-mount-points="^/(dev)($|/)""\'' > > > + _run_rc_doit $' limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon > > > -f -p /var/run/node_exporter.pid -T node_exporter /usr/bin/env > > > /usr/local/bin/node_exporter --web.listen-address=:9100 > > > --collector.textfile.directory=/var/tmp/node_exporter > > > --collector.filesystem.ignored-mount-points="^/(dev)($|/)""\'' > > > + debug $'run_rc_command: doit: limits -C daemon su -m nobody -c \'sh -c > > > "/usr/sbin/daemon -f -p /var/run/node_exporter.pid -T node_exporter > > > /usr/bin/env /usr/local/bin/node_exporter --web.listen-address=:9100 > > > --collector.textfile.directory=/var/tmp/node_exporter > > > --collector.filesystem.ignored-mount-points="^/(dev)($|/)""\'' > > > + eval $' limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon -f -p > > > /var/run/node_exporter.pid -T node_exporter /usr/bin/env > > > /usr/local/bin/node_exporter --web.listen-address=:9100 > > > --collector.textfile.directory=/var/tmp/node_exporter > > > --collector.filesystem.ignored-mount-points="^/(dev)($|/)""\'' > > > + limits -C daemon su -m nobody -c 'sh -c "/usr/sbin/daemon -f -p > > > /var/run/node_exporter.pid -T node_exporter /usr/bin/env > > > /usr/local/bin/node_exporter --web.listen-address=:9100 > > > --collector.textfile.directory=/var/tmp/node_exporter > > > --collector.filesystem.ignored-mount-points="^/(dev)($|/)""' > > > Illegal variable name. > > > > > > Thanks > > > > > > > > > > Try escaping the '$' character (\$). > > > > > > node_exporter_args='--collector.filesystem.ignored-mount-points="^/(dev)(\$|/)"' > > [...] > > No joy: > > + _doit=$' limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon -f -p /var/run/node_exporter.pid -T node_exporter /usr/bin/env /usr/local/bin/node_exporter --web.listen-address=:9100 --collector.textfile.directory=/var/tmp/node_exporter --collector.filesystem.ignored-mount-points="^/(dev)(\\$|/)""\'' > + _run_rc_doit $' limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon -f -p /var/run/node_exporter.pid -T node_exporter /usr/bin/env /usr/local/bin/node_exporter --web.listen-address=:9100 --collector.textfile.directory=/var/tmp/node_exporter --collector.filesystem.ignored-mount-points="^/(dev)(\\$|/)""\'' > + debug $'run_rc_command: doit: limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon -f -p /var/run/node_exporter.pid -T node_exporter /usr/bin/env /usr/local/bin/node_exporter --web.listen-address=:9100 --collector.textfile.directory=/var/tmp/node_exporter --collector.filesystem.ignored-mount-points="^/(dev)(\\$|/)""\'' > + eval $' limits -C daemon su -m nobody -c \'sh -c "/usr/sbin/daemon -f -p /var/run/node_exporter.pid -T node_exporter /usr/bin/env /usr/local/bin/node_exporter --web.listen-address=:9100 --collector.textfile.directory=/var/tmp/node_exporter --collector.filesystem.ignored-mount-points="^/(dev)(\\$|/)""\'' > + limits -C daemon su -m nobody -c 'sh -c "/usr/sbin/daemon -f -p /var/run/node_exporter.pid -T node_exporter /usr/bin/env /usr/local/bin/node_exporter --web.listen-address=:9100 --collector.textfile.directory=/var/tmp/node_exporter --collector.filesystem.ignored-mount-points="^/(dev)(\$|/)""' > Badly placed (. The last error indicates that there still is a problem with escaping and quoting. You'd have to find a combination of ", ' and \ to make it work. Another idea: Create a file /etc/ignore.txt with the following content: "^/(dev)(\$|/)" Make sure no \n follows - the 2nd " should be the last symbol in the file, its size therefore be 15 bytes. In /etc/rc.conf, try: node_exporter_args="--collector.filesystem.ignored-mount-points=`/in/cat /etc/ignore.txt`" It's not fully clear to me where the expansion attempt happens, but it seems that it happens in at least two places: first in /etc/rc.conf, which turns \$ into literal $, and further down in the "starter script" which reads $ and tries to expand it, instead of using it "as is". The idea is to keep at least one of those possible interpreters from interpreting, which almost every time leads to a predictable mis-interpretation. To avoid this, try /etc/ignore.txt with: '^/(dev)($|/)' or maybe even: '^/(dev)(\$|/)' Finally, you have the ability to hard-code the $ at the last place it will be processed, checking the "surrounding" for any possible variable evalation. That is of course not an ideal solution, but it might be a working solution. Create a diff for it so you can apply it after each program upgrade. -- Polytropon Magdeburg, Germany Happy FreeBSD user since 4.0 Andra moi ennepe, Mousa, ...