News for hackers. Stuff that matters.
Re:Real-time notifications from systemd to Slack by arjie on Monday March 13, 2017 @06:04AM (#13856498)
Can anyone who's used systemd share what it's like to have it for process management? We use monit, and it's all right, but I occasionally wonder.

Does anyone run it also as a separate user to manage certain applications? So that you could have certain people log on and operate some things and others operate other things?

Re:Real-time notifications from systemd to Slack by geocar on Monday March 13, 2017 @06:14AM (#13856535)
Yes.

I used to use runit/daemontools/inittab. My favourite thing about systemd is that it is increasingly available, and while it has it's faults, it has instances (macros you can use to kickoff a fleet of services easily) and pretty good isolation features.

It also has a "systemctl-over-ssh" feature which is quite nice, and which allows you to use an .ssh/authorized_keys file instead of sudo to allow access to certain administrative tasks.

Re:Real-time notifications from systemd to Slack by arjie on Monday March 13, 2017 @06:28AM (#13856582)
Interesting. Thank you! Would you mind sharing some of the faults? By instances, are you referring to template unit files like this[0]? Do you use it with the `--user` option or do you just access it with `sudo systemctl`?

0: https://fedoramagazine.org/systemd-template-unit-files/

Re:Real-time notifications from systemd to Slack by geocar on Monday March 13, 2017 @06:59AM (#13856728)
Yes, I do use --user where possible. Because resource limits are per-user on UNIX, I tend to run every program and every instance of a service as a separate user. cgroups/containers make this less necessary, but old habits die hard.

The biggest systemd fault is one of tooling, and that just comes from a project ambitious enough to try and own it's own ecosystem.

When runit/daemontools, you "debug" a service by typing:

    /path/to/service/run
into the terminal. Everything is sensible: grep the output just works. You can use tools familiar like strace/dtruss to "look inside". A unix user can easily leverage their experiences to administer a small unix site, and grow their experiences into larger sites.

With systemd, you run a unit file by copying it into a directory and run some (magic) commands. You need training/internet search to learn those commands. If your unit file doesn't work, you need more training/internet search, but systemd is still so new that your best bet may be to read the systemd source code, or insert a hacky "sleep 30" at the top of your start script and try to race and strace it in another window. Stuff like that.

Want to upgrade your systemd unit? You can't run it along-side an existing version of itself unless you give it a new name, which changes how journalctl can pick up the results. Versioning in the unit name feels wrong, and nobody does this yet which still currently breaks live upgrades where the unit changes.

Eventually the tooling will get better, but then we'll have a way to read files, and away to read systemd files; we'll have a way to run programs, and we'll have a way to run systemd programs; we'll have a way to "test" units, and a side-by-side mode, and so on.

Re:Real-time notifications from systemd to Slack by arjie on Monday March 13, 2017 @09:27AM (#13857587)
Ah, hmm. Thank you very much for sharing. Looks like it's got some way before I can use it instead of `monit`. This helps a lot.
Re:Real-time notifications from systemd to Slack by thwarted on Monday March 13, 2017 @11:22AM (#13858531)
allows you to use an .ssh/authorized_keys file instead of sudo to allow access to certain administrative tasks.

Another way to do this is pam_ssh_agent_auth. Been using it to authenticate to sudo for years on systems that only maintain keys and no passwords.

Re:Real-time notifications from systemd to Slack by hornetblack on Monday March 13, 2017 @06:13AM (#13856532)
systemd has --user option, which makes it a service manager for a particular user, if that's what you mean. I used it for some time to run an emacs daemon. (until I found that it closed between logouts and changed to using the system manager isntead)
Re:Real-time notifications from systemd to Slack by tophercyll on Monday March 13, 2017 @06:43AM (#13856643)
You can make user level systemd instances run at startup and stick around regardless of login/logout.

  loginctl enable-linger <username>
This enables some nice deployment strategies that don't require root.
Re:Real-time notifications from systemd to Slack by hornetblack on Monday March 13, 2017 @05:56PM (#13862826)
Thanks. I figured this was possible. I just never got around to looking at loginctl's options.
Re:Real-time notifications from systemd to Slack by sandGorgon on Monday March 13, 2017 @07:26AM (#13856834)
systemd is far superior to anything else out there. It matured at roughly the same time as docker.

However it doesn't support being the CMD in a Dockerfile. Which is why it's not very common in software deployment scenarios in the post-container world.

For older deployments, it may not be worth switching to systemd because the base OS may not be compatible.

So it's kind of a catch-22.

If you are on baremetal, systemd is much preferable to run it/supervisord

Re:Real-time notifications from systemd to Slack by chimeracoder on Monday March 13, 2017 @12:19PM (#13859165)
> However it doesn't support being the CMD in a Dockerfile. Which is why it's not very common in software deployment scenarios in the post-container world.

Er, that's only half-true. systemd isn't great for running as PID 1 inside a Dockerfile, but that's because Docker already monitors PID 1[0], and systemd can be used to monitor your container itself.

In other words, think of containers as individual applications that you want to monitor, and systemd can be used either to monitor them or even to run the containers directly. (Yes, systemd can even run Docker containers directly, without Docker![1])

[0] you are using exec mode, right?

[1] https://chimeracoder.github.io/docker-without-docker/#1

Re:Real-time notifications from systemd to Slack by sandGorgon on Monday March 13, 2017 @10:01PM (#13864370)
Actually I'm not sure we are referring to the same thing here.

I'm referring to pid1 inside the docker container. systemd does not run inside the container as pid1 very easily.

Take a look at this - https://github.com/docker/docker/pull/13525

I think your presentation was about replicating docker functionality using systemd-nspawn...Which pretty cool...But it's not the same as what I'm talking about.

I'm referring more generally to production decisions with docker. Also read this https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zomb...

Re:Real-time notifications from systemd to Slack by chimeracoder on Monday March 13, 2017 @10:23PM (#13864450)
> Actually I'm not sure we are referring to the same thing here. I'm referring to pid1 inside the docker container. systemd does not run inside the container as pid1 very easily.

We are - I'm saying that you don't actually want to run systemd as PID 1 inside a Docker container; the Docker model is built around the container being an application unit, not a system unit.

But if you want to have isolated system(d) units, you can use systemd to get that behavior inside containers. In that case, you'll want to use systemd to run your containers instead of Docker, because systemd's tooling is container-aware (ie, you can have integration between units that run on your host and units that run inside a machine - 'machine' being the systemd term for 'container', in this case).

Re:Real-time notifications from systemd to Slack by sandGorgon on Monday March 13, 2017 @11:42PM (#13864812)
That is a simplification - even Facebook runs sshd inside its containers.

I know what you are saying - that an atomic unit of work is the program itself..But we run stuff under supervisord even if it is a single program. It helps us to make quick debugging changes to scripts,etc and "restart" them without restarting the container.

In theory it seems the same - in practice it is not. This is the reason for the existence of tons of different init tools for docker.

BTW, I had trouble understanding what you meant because you are constantly moving from docker-as-an-application-unit concept (which is reasonably true) to systemd-nspawn-is-better-than-docker (which is something I am not generally opinionated about).

Re:Real-time notifications from systemd to Slack by stephenr on Monday March 13, 2017 @11:53AM (#13858882)
> It matured at roughly the same time as docker.

Docker, "matured", in past tense? Proof of time travel right there!

Re:Real-time notifications from systemd to Slack by bradmwalker on Monday March 13, 2017 @09:34AM (#13857655)
Systemd works inside LXC and systemd-nspawn.