From owner-freebsd-questions@freebsd.org  Mon Jan 11 13:44:15 2021
Return-Path: <owner-freebsd-questions@freebsd.org>
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 991EE4D9AED
 for <freebsd-questions@mailman.nyi.freebsd.org>;
 Mon, 11 Jan 2021 13:44:15 +0000 (UTC)
 (envelope-from freebsd-lists-5@thismonkey.com)
Received: from mail-01.thismonkey.com (mail-01.thismonkey.com
 [IPv6:2406:3400:35e:6602::a01:232])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client CN "thismonkey.com", Issuer "Let's Encrypt Authority X3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4DDw0s5TdXz3jBJ
 for <freebsd-questions@freebsd.org>; Mon, 11 Jan 2021 13:44:13 +0000 (UTC)
 (envelope-from freebsd-lists-5@thismonkey.com)
Received: from mailhub-01.thismonkey.com (mailhub-01.thismonkey.com
 [IPv6:2406:3400:35e:6601:0:0:a01:11e])
 by mail-01.thismonkey.com (8.15.2/8.15.2) with ESMTP id 10BDhvDq003405;
 Tue, 12 Jan 2021 00:43:57 +1100 (EST)
 (envelope-from freebsd-lists-5@thismonkey.com)
X-TM-Via-MX: mailhub-01.thismonkey.com
Received: from utility-01.thismonkey.com (utility-01.thismonkey.com
 [IPv6:2406:3400:35e:6601:0:0:a01:120])
 by mailhub-01.thismonkey.com (8.15.2/8.15.2) with ESMTPS id 10BDhvxo091977
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);
 Tue, 12 Jan 2021 00:43:57 +1100 (AEDT)
 (envelope-from freebsd-lists-5@thismonkey.com)
Received: from utility-01.thismonkey.com (localhost [127.0.0.1])
 by utility-01.thismonkey.com (8.16.1/8.16.1) with ESMTP id 10BDhv7g056460;
 Tue, 12 Jan 2021 00:43:57 +1100 (EST)
 (envelope-from freebsd-lists-5@thismonkey.com)
Received: (from root@localhost)
 by utility-01.thismonkey.com (8.16.1/8.16.1/Submit) id 10BDhvVS056456;
 Tue, 12 Jan 2021 00:43:57 +1100 (EST)
 (envelope-from freebsd-lists-5@thismonkey.com)
Date: Tue, 12 Jan 2021 00:43:57 +1100
From: Scott <freebsd-lists-5@thismonkey.com>
To: Polytropon <freebsd@edvax.de>
Cc: freebsd-questions@freebsd.org
Subject: Re: Need help specifying args in rc.conf for a service
Message-ID: <X/xWHReL/tarF8Ic@thismonkey.com>
Mail-Followup-To: Polytropon <freebsd@edvax.de>, freebsd-questions@freebsd.org
References: <X/w9IwVAFXyDr/ir@thismonkey.com>
 <20210111132107.82de40d0.freebsd@edvax.de>
 <X/xKy6Y6Cl4+zkhd@thismonkey.com>
 <20210111143139.278aec37.freebsd@edvax.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210111143139.278aec37.freebsd@edvax.de>
X-Virus-Scanned: clamav-milter 0.102.2 at mail-01.thismonkey.com
X-Virus-Status: Clean
X-Rspamd-Queue-Id: 4DDw0s5TdXz3jBJ
X-Spamd-Bar: ---
Authentication-Results: mx1.freebsd.org; dkim=none;
 dmarc=pass (policy=none) header.from=thismonkey.com;
 spf=pass (mx1.freebsd.org: domain of freebsd-lists-5@thismonkey.com designates
 2406:3400:35e:6602::a01:232 as permitted sender)
 smtp.mailfrom=freebsd-lists-5@thismonkey.com
X-Spamd-Result: default: False [-3.80 / 15.00]; MID_RHS_MATCH_FROM(0.00)[];
 RBL_DBL_DONT_QUERY_IPS(0.00)[2406:3400:35e:6602::a01:232:from];
 ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[];
 R_SPF_ALLOW(-0.20)[+mx]; NEURAL_HAM_LONG(-1.00)[-1.000];
 MIME_GOOD(-0.10)[text/plain]; NEURAL_HAM_MEDIUM(-1.00)[-1.000];
 SPAMHAUS_ZRD(0.00)[2406:3400:35e:6602::a01:232:from:127.0.2.255];
 RCVD_COUNT_THREE(0.00)[4]; TO_MATCH_ENVRCPT_SOME(0.00)[];
 NEURAL_HAM_SHORT(-1.00)[-1.000]; RCPT_COUNT_TWO(0.00)[2];
 DMARC_POLICY_ALLOW(-0.50)[thismonkey.com,none];
 FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[];
 MIME_TRACE(0.00)[0:+];
 ASN(0.00)[asn:10143, ipnet:2406:3400:340::/42, country:AU];
 RCVD_TLS_LAST(0.00)[]; MAILMAN_DEST(0.00)[freebsd-questions]
X-BeenThere: freebsd-questions@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: User questions <freebsd-questions.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-questions>, 
 <mailto:freebsd-questions-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-questions/>
List-Post: <mailto:freebsd-questions@freebsd.org>
List-Help: <mailto:freebsd-questions-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-questions>, 
 <mailto:freebsd-questions-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Jan 2021 13:44:15 -0000

On Mon, Jan 11, 2021 at 02:31:39PM +0100, Polytropon wrote:
> On Mon, 11 Jan 2021 23:55:39 +1100, Scott wrote:
> > On Mon, Jan 11, 2021 at 01:21:07PM +0100, Polytropon wrote:
> > > On Mon, 11 Jan 2021 22:57:23 +1100, Scott wrote:
> > > > Hi all,
> > > > 
> > > > I posted this on the forums and was unsuccessful so I thought I'd try here:
> > > > 
> > > > I've been struggling to pass additional arguments to the Prometheus 
> > > > node_exporter daemon in /etc/rc.conf.
> > > > 
> > > > The help for node_exporter provides an example argument (mount points to 
> > > > ignore) as:
> > > > 
> > > > --collector.filesystem.ignored-mount-points="^/(dev)($|/)"
> > > >                                 Regexp of mount points to ignore for filesystem collector.
> > > > 
> > > > The rc script says to use the _args variable to specify arguments to 
> > > > node_exporter:
> > > > # node_exporter_args (string):          Set extra arguments to pass to 
> > > > # Default is "".
> > > > 
> > > > Adding the line:
> > > > 
> > > > node_exporter_args="--collector.filesystem.ignored-mount-points=\"^/(dev)($|/)\""
> > > > 
> > > > to /etc/rc.conf and running sh -x /usr/local/etc/rc.d/node_exporter start 
> > > > results in:
> > > > 
> > > > + 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.
> > > > 
> > > > [...]
> > > > 
> > > > Can anyone please help?
> > > 
> > > If I see this correctly, the argument given to to the program's
> > > option --collector.filesystem.ignored-mount-points= is to be a
> > > regex, not the result of evaluating the regex (which the program
> > > surely does internally). So my suggestion, without knowing any
> > > further details, is to use this in /etc/rc.conf:
> > > 
> > > 	node_exporter_args='--collector.filesystem.ignored-mount-points="^/(dev)($|/)"'
> > > 
> > > Always remember that /etc/rc.conf is, more or less, just a simple
> > > shell script, so all rules applying to sh will apply to rc.conf
> > > exactly. That's why 'single quotes' will stop any expansion and
> > > transfer the value 1:1, which I think is what you are require to
> > > do here. Characters such as $, " or ^ will be part of the string
> > > handed over to the program, and will _not_ be interpreted by the
> > > shell prior to assigning to the _args variable.
> > > 
> > > Within "double quotes", symbols such as $ have a specific meaning,
> > > that's why you see the error ($ not properly quoted). So the
> > > error message is completely valid and logical - and expected. ;-)
> > > 
> > > [...]
> > > 
> > Thanks Poly,
> > 
> > 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.
> 
> So there seems to be another "layer" of possible interpretation.
> The call to sh contains still a single $ which leads to the error.
> Maybe using the quoted form \$ would help here?
> 
> 	node_exporter_args='--collector.filesystem.ignored-mount-points="^/(dev)(\$|/)"'
> 
> It's not entirely trivial to deal with several layers of
> variable expansion, especially when you want to avoid it. ;-)
> 
> Another option is to make the ' part of the option argument, but
> that would be quite ugly (and maybe doesn't work):
> 
> 	node_exporter_args="--collector.filesystem.ignored-mount-points='^/(dev)(\$|/)'"
> 
> Maybe you can try that as well?
> 
> 
> 
> 
> -- 
> Polytropon
> Magdeburg, Germany
> Happy FreeBSD user since 4.0
> Andra moi ennepe, Mousa, ...

Thanks again, but no luck:

with: 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)(\$|/)""'
Badly placed (.

with: 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)($|/)\'"\''
eval: 1: Syntax error: "(" unexpected 

Scott