Re: [systemd-devel] Deferring start of service until file exists

2019-08-21 Thread Colin Hogben

On 20/08/19 16:54, Silvio Knizek wrote:


The NFS root needs to be mounted in the initrd step. Else everything
will break. With systemd in the initrd you gain the possibilty to
depend on those units in the actual system.


Booting with an NFS root is working fine.  I'm not sure how to tell 
whether or not I have "systemd in the initrd" as you describe; I built 
the initrd with dracut, and I get the

  random: systemd-udevd: uninitialized urandom read (16 bytes read)
messages before
  dracut: Mounted root filesystem ...


Why not systemd-networkd,


systemd-networkd is inadequate for the task.  Even though I could 
potentially parse the ntp servers out of the lease file (is that even a 
public interface with stable format?), I didn't find a way, documented 
or undocumented, for getting the log-server.  Indeed, from scanning the 
source code it seems that any DHCP options other than some core ones and 
those in the private range, e.g. 7 (log-server), are just ignored. 
(Bizarrely, systemd-networkd does include a DHCP server - WTF?! 
DOTADIW?  But I digress...)



systemd-journald with remote-forwarding
enabled


I didn't know it could do that.  Googling e.g. 
https://unix.stackexchange.com/questions/394822 and the linked Redhat 
recommendation suggest otherwise.  I found references to 
systemd-journal-netlogd (WIP? PR #1890 rejected), and some other systemd 
stuff which didn't support traditional UDP output.



and systemd-timesyncd?


Only because it isn't (wasn't) packaged for CentOS 7.  In fact I used it 
in another project and I'd forgotten I even found a way to integrate it 
with dhclient: https://www.raspberrypi.org/forums/viewtopic.php?t=217832



moreover you want daemon.service to be part of the startup
transaction
(I'm not certain why)


Well, I'm not sure why I wouldn't.  The whole purpose of the system
is to run that service.

But the trigger for the .service is not start up, but accessibilty and
if certain information are available.


Other network-facing services e.g. sshd have WantedBy=multi-user.target 
- I don't see how my service is in principle different.  I just has some 
extra dependencies.



Having to write looping shell-scripts or reinvent inotifywait seems
contrary to the spirit of systemd, but maybe I have to do that.

You don't have to reinvent the wheel. You just need to know about the
capabilities of systemd.


I'm trying to learn.  How can I get a systemd unit to defer its start 
until certain information is available from dhclient?


--
Colin Hogben
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Re: [systemd-devel] systemd-timedated: Not possible to set time zone that is a symlink!

2019-08-21 Thread Christopher Wong
Hi,

Sorry, for this late reply, vacation and other priorities.

> > I am asking because our system mount /usr/share/zoneinfo as
> > read-only and because of legacy we need to support the user being
> > able to change the TZ string in a tz-file. Installing a symlink that
> > point to such a tz-file will allow us to use the systemd-timedated
> > interface to set time zone. The changeable tz-file (located at
> > /etc/...) can be altered by root and a specific service. Do you see
> > any potential risk by doing so?
> 
> consider turning off the sandboxing features, i.e. add a drop-in that
> turns off ProtectSystem=, ProtectHome= and suchlike.

Just wanted to give feedback that ProtectSystem= and ProtectHome= was turned 
off already, but we could no longer produce the problem we have seen. So case 
closed.

BR,
Christopher Wong
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Re: [systemd-devel] Antw: Re: Need help detecting local/remote targets

2019-08-21 Thread Simon McVittie
On Wed, 21 Aug 2019 at 08:02:39 +0200, Ulrich Windl wrote:
> >>> Mantas Mikulenas  schrieb am 21.08.2019 um 06:07 in
> Nachricht
> :
> > / and /usr are mounted by initramfs before systemd starts.
> 
> And what about /run?

/run is mounted by systemd as pid 1, but it is one of the "API file
systems"[1] and is required to be a tmpfs, so listing a non-tmpfs /run in
/etc/fstab is not a supported situation. As a result, it is always local.

smcv

[1] https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

[systemd-devel] Environment Variables are not getting passed to a child script started from a service

2019-08-21 Thread Debraj Manna
I am having a unit file like below running on Ubuntu 16.04 with
systemd version 229.

[Unit]
Description=Hadoop-Yarn-Resourcemanager Service
[Service]
Type=simple
Environment=JAVA_HOME=/usr/lib/jvm/jdk1.8
Environment=YARN_USER=yarn
Environment=YARN_IDENT_STRING=yarn
Environment=YARN_PID_DIR=/var/run/hadoop-yarn
Environment=YARN_LOG_DIR=/var/log/hadoop-yarn
Environment=YARN_CONF_DIR=/etc/hadoop/conf
Environment=HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec
IgnoreSIGPIPE=false
ExecStart=/home/ubuntu/build-target/cdh/yarn-rm/hadoop-yarn-resourcemanager-sysd-start.sh
ExecStopPost=-/bin/bash
/home/ubuntu/build-target/cdh/yarn-rm/hadoop-yarn-resourcemanager-sysd-poststop.sh
ExecStopPost=-/bin/sleep 1
RestartSec=2s
Restart=always
[Install]
WantedBy=multi-user.target

hadoop-yarn-resourcemanager-sysd-start.sh looks like below

#!/bin/bash

echo "Running pre-steps for hadoop-yarn-resourcemanager"
sudo mkdir -p $YARN_LOG_DIR
sudo chown -R yarn:hadoop $YARN_LOG_DIR
sudo mkdir -p $YARN_PID_DIR
sudo chown yarn:yarn $YARN_PID_DIR
echo "Starting hadoop-yarn-resourcemanager"
sudo -u yarn /usr/lib/hadoop-yarn/sbin/yarn-daemon.sh start resourcemanager
sleep 3
echo "Starting health check for hadoop-yarn-resourcemanager"
/home/ubuntu/build-target/cdh/yarn-rm/hadoop-yarn-resourcemanager-sysd-health.sh
res=$?

sleep 1
exit $res

yarn-daemon.sh has code like below

#!/usr/bin/env bash

echo "debrah $YARN_LOG_DIR $HADOOP_LIBEXEC_DIR"

...


But I am observing the environment variable values are not getting
passed to yarn-daemon.sh. Below are the logs

Aug 21 16:06:14 vrni-platform systemd[1]: Stopped
Hadoop-Yarn-Resourcemanager Service.
Aug 21 16:06:14 vrni-platform systemd[1]: Started
Hadoop-Yarn-Resourcemanager Service.
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + echo 'Running
pre-steps for hadoop-yarn-resourcemanager'
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: Running pre-steps
for hadoop-yarn-resourcemanager
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + sudo mkdir -p
/var/log/hadoop-yarn
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + sudo chown -R
yarn:hadoop /var/log/hadoop-yarn
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + sudo mkdir -p
/var/run/hadoop-yarn
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + sudo chown
yarn:yarn /var/run/hadoop-yarn
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + echo 'Starting
hadoop-yarn-resourcemanager'
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: Starting
hadoop-yarn-resourcemanager
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: + sudo -u yarn
/usr/lib/hadoop-yarn/sbin/yarn-daemon.sh start resourcemanager
Aug 21 16:06:14 vrni-platform
hadoop-yarn-resourcemanager-sysd-start.sh[12333]: debrah

Can someone let me know what is the correct way to declare the enviroment
variable so that it gets passed to a child script started by a systemd
service?
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Re: [systemd-devel] Environment Variables are not getting passed to a child script started from a service

2019-08-21 Thread Reindl Harald


Am 21.08.19 um 18:29 schrieb Debraj Manna:
> I am having a unit file like below running on Ubuntu 16.04 with systemd
> version 229.
> 
> echo "Starting hadoop-yarn-resourcemanager"
> sudo -u yarn /usr/lib/hadoop-yarn/sbin/yarn-daemon.sh start resourcemanager

this crap triggers new sessions, replace it with proper systemd units
and proper ordering
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Re: [systemd-devel] Deferring start of service until file exists

2019-08-21 Thread Silvio Knizek
Am Mittwoch, den 21.08.2019, 09:32 +0100 schrieb Colin Hogben:
> On 20/08/19 16:54, Silvio Knizek wrote:
>
> > The NFS root needs to be mounted in the initrd step. Else
> > everything will break. With systemd in the initrd you gain the
> > possibilty to depend on those units in the actual system.
>
> Booting with an NFS root is working fine.  I'm not sure how to tell
> whether or not I have "systemd in the initrd" as you describe; I
> built the initrd with dracut, and I get the
>random: systemd-udevd: uninitialized urandom read (16 bytes read)
> messages before
>dracut: Mounted root filesystem ...
Ah, than it should be fine. dracut actually does it right®
>
> > Why not systemd-networkd,
>
> systemd-networkd is inadequate for the task.  Even though I could
> potentially parse the ntp servers out of the lease file (is that even
> a public interface with stable format?), I didn't find a way,
> documented or undocumented, for getting the log-server.  Indeed, from
> scanning the source code it seems that any DHCP options other than
> some core ones and those in the private range, e.g. 7 (log-server),
> are just ignored. (Bizarrely, systemd-networkd does include a DHCP
> server - WTF?! DOTADIW?  But I digress...)
sd-networkd would tell sd-timesyncd by themself. But yeah, currently
you can't add random options to the dhcp client.
>
> > systemd-journald with remote-forwarding
> > enabled
>
> I didn't know it could do that.  Googling e.g.
> https://unix.stackexchange.com/questions/394822 and the linked
> Redhat recommendation suggest otherwise.  I found references to
> systemd-journal-netlogd (WIP? PR #1890 rejected), and some other
> systemd stuff which didn't support traditional UDP output.
sd-journald would use it's own transport via HTTP(S). See man:systemd-
journal-gatewayd, man:systemd-journal-upload and man:systemd-journal-
remote
There are also other tools to directly read from the journal and into
the appropriate backend for elasticsearch, graylog and other.
>
> > and systemd-timesyncd?
>
> Only because it isn't (wasn't) packaged for CentOS 7.  In fact I used
> it  in another project and I'd forgotten I even found a way to
> integrate it with dhclient:
> https://www.raspberrypi.org/forums/viewtopic.php?t=217832
If you're stuck with dhclient and old versions of systemd, than use
ntpd or ntpdate, no problem.
>
> > > > moreover you want daemon.service to be part of the startup
> > > > transaction (I'm not certain why)
> > >
> > > Well, I'm not sure why I wouldn't.  The whole purpose of the
> > > system is to run that service.
> > But the trigger for the .service is not start up, but accessibilty
> > and if certain information are available.
>
> Other network-facing services e.g. sshd have WantedBy=multi-
> user.target - I don't see how my service is in principle
> different.  I just has some extra dependencies.
sshd.service is totaly fine by starting without network. It sounds like
your service needs a network and information from dhclient to be up
probably.
>
> > > Having to write looping shell-scripts or reinvent inotifywait
> > > seems contrary to the spirit of systemd, but maybe I have to do
> > > that.
> > You don't have to reinvent the wheel. You just need to know about
> > the capabilities of systemd.
>
> I'm trying to learn.  How can I get a systemd unit to defer its
> start until certain information is available from dhclient?
Well, in dhclient you can define a script which is executed as soon as
there is a lease. Use this to trigger further units as this is your
trigger. See man:dhclient-script
The normal start up logic is not appliable here. You want dhclient as
trigger after writing config files.

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Re: [systemd-devel] Environment Variables are not getting passed to a child script started from a service

2019-08-21 Thread Mantas Mikulėnas
On Wed, Aug 21, 2019 at 7:30 PM Debraj Manna 
wrote:

> I am having a unit file like below running on Ubuntu 16.04 with systemd 
> version 229.
>
> [Unit]
> Description=Hadoop-Yarn-Resourcemanager Service
> [Service]
> Type=simple
> Environment=JAVA_HOME=/usr/lib/jvm/jdk1.8
> Environment=YARN_USER=yarn
> Environment=YARN_IDENT_STRING=yarn
> Environment=YARN_PID_DIR=/var/run/hadoop-yarn
> Environment=YARN_LOG_DIR=/var/log/hadoop-yarn
> Environment=YARN_CONF_DIR=/etc/hadoop/conf
> Environment=HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec
> IgnoreSIGPIPE=false
> ExecStart=/home/ubuntu/build-target/cdh/yarn-rm/hadoop-yarn-resourcemanager-sysd-start.sh
> ExecStopPost=-/bin/bash 
> /home/ubuntu/build-target/cdh/yarn-rm/hadoop-yarn-resourcemanager-sysd-poststop.sh
> ExecStopPost=-/bin/sleep 1
> RestartSec=2s
> Restart=always
> [Install]
> WantedBy=multi-user.target
>
> hadoop-yarn-resourcemanager-sysd-start.sh looks like below
>
> #!/bin/bash
>
> echo "Running pre-steps for hadoop-yarn-resourcemanager"
> sudo mkdir -p $YARN_LOG_DIR
> sudo chown -R yarn:hadoop $YARN_LOG_DIR
> sudo mkdir -p $YARN_PID_DIR
> sudo chown yarn:yarn $YARN_PID_DIR
> echo "Starting hadoop-yarn-resourcemanager"
> sudo -u yarn /usr/lib/hadoop-yarn/sbin/yarn-daemon.sh start resourcemanager
> sleep 3
> echo "Starting health check for hadoop-yarn-resourcemanager"
> /home/ubuntu/build-target/cdh/yarn-rm/hadoop-yarn-resourcemanager-sysd-health.sh
> res=$?
>
>
Usually `sudo` resets all environment variables except whitelisted ones.
That's not a systemd thing – pid1 *cannot* affect how environment variables
are inherited.

Don't use sudo in systemd startup scripts. Create the pid_dir using
RuntimeDirectory= (or tmpfiles.d), then just start yarn-daemon from
ExecStart directly with User=yarn.

And probably more importantly, don't start multiple services from a single
.service unit – it will never work well... (Chances are, if you do this,
you won't even *need* a PIDFile because systemd will be able to track the
process directly.)

-- 
Mantas Mikulėnas
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel