this post was submitted on 04 Oct 2023
717 points (95.2% liked)

linuxmemes

20761 readers
1580 users here now

I use Arch btw


Sister communities:

Community rules

  1. Follow the site-wide rules and code of conduct
  2. Be civil
  3. Post Linux-related content
  4. No recent reposts

Please report posts and comments that break these rules!

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] gayhitler420@lemm.ee 79 points 11 months ago* (last edited 11 months ago) (30 children)

If you really want the short version:

Systemd was half baked literally when it came out and figuratively as an idea, so much so that there’s already a replacement for it in the works.

A longer version:

Systemd replaced the init script style of boot and process management, which had been in place for decades. init scripts were so simple they could be understood just by looking at the name: the computer is Initialized by Scripts. Systemd was much more complex and allowed many more tools to interact with the different parts of the computer, but people had to learn these tools. Previously all a person had to understand to deal with the computer was how to edit a text file and what various commands and programs did. After systemd a person has to understand how to use the dozens of invocations of systemctl and it’s variants and if they are dealing with a problem, —you know, the only reason a person would ever be dealing with initializing services— they gotta know what’s going on with the text files that systemd uses to run different commands and programs.

So a person who already understood what was going on might rightly say “hey, this systemd thing is just the same shit with different file locations and more to learn”.

People complain about the creator and maintainer of systemd, lennart poettering . Poettering is also the person behind pulseaudio, an powerful but complex audio management daemon in Linux whose name you only recognize because it’s caused you no end of trouble. Pulseaudio was also replaced relatively quickly by pipewire.

The argument could be made (and probably has) that poetterings work is indicative of the problems with foss developers working as employees of major companies with their job responsibilities inclusive of their foss projects. The developer in that situation has an incentive to make big sweeping changes, they’re being paid for it after all, instead of being more careful and measured.

When every big foss maintainer is trying to find a way to justify being paid for it, their projects are never done.

At least poettering is working for Microsoft, ruining windows now…

E: oh my god I forgot about the binary log files! So before (and now), the universal format for log files was plain text. You know, because it’s a log that’s text. Systemd uses binary log files that need a special tool to open and parse. So if you want to look through them on a computer without that tool you’re kinda screwed. Now systemd isn’t the only software package with binary log files, but many people have made the very persuasive argument that it’s not a trait to copy.

E2: actually spelled the man’s name right. Thanks @floofloof@lemmy.ca !

[–] motsu@lemmy.world 12 points 11 months ago (4 children)

Yep, to add on as well as summarized this... Linux has historically had a design methodology of "everything is a file". If your not familear with the implications of this, it means your command line tools just kind of work with most things, and everything is easy to find.

For instance, there's no "registry / regedit" on Linux... There's just a folder with a config file that the application stores settings in. There's no control panel application to modify your network settings... Just a text file on your OS. Your system logs and startup tasks were also (you guessed it) sinole filea on the system. Sure there might be GUI apps to make these things easier for users, but under the hood it reads and writes a file.

This idea goes further than you might assume. Your hard drive is a file on the file system (a special file called a block device). You can do something like "mount /dev/sda1 /home/myuser/some_folder" to "attach" the drive to a folder on the system, but that special block device (dev/sda1 in this case) can be read and written to byte by byte if you want with low level tools like dd.

Even an audio card output can show as a file in dev (this is less the case now with pipewire and pulse), but you used to be able to just echo a raw audio file (like a wav file) and redirect the output to your audio device "file" and it would play out your speaker.

Systemd flipped this all around, and now instead of just changing files, you have to use applications to specify changes to your system. Want to stop something from starting? Well, it used to be that you just move it out of the init directory, but now you have to know to "systemctl disable something.service", or to view logs " journalctl -idk something.service" I dont even remember the flags for specifying a service, so I have to look it up, where it used to just be looking at a file (and maybe use grep to search for something specific)

[–] ammonium@lemmy.world 10 points 11 months ago

Want to stop something from starting? Well, it used to be that you just move it out of the init directory, but now you have to know to “systemctl disable something.service”,

That is still the case, nothing stops you from manually moving a file and its dependencies into or out of /etc/systemd/system/

[–] Sysosmaster@infosec.pub 7 points 11 months ago

Systemd flipped this all around, and now instead of just changing files, you have to use applications to specify changes to your system. Want to stop something from starting? Well, it used to be that you just move it out of the init directory, but now you have to know to “systemctl disable something.service”, or to view logs " journalctl -idk something.service" I dont even remember the flags for specifying a service, so I have to look it up, where it used to just be looking at a file (and maybe use grep to search for something specific)

not true, SystemD still uses files for this very reason....

and what is the last time you used the text version of a syslog.8.xz file?

you are basically complaining that you need to learn how your system works... before you can use it. and there is nothing preventing you from making your own distro that doesn't uses SystemD, or using rSyslog instead of systemd-journal for logging.

incidentally, to just view the logs its journalctl -xef (see https://man7.org/linux/man-pages/man1/journalctl.1.html for what that means) it will be like the syslog you know.

want to see the status of a daemon : systemctl status want it for the system systemctl status want to see the logs of only a specific daemon journalctl -xefu . this all, means that its easier to find the logs for diffrent services since there not scattered somewhere in the /var/log dir... (is it in the syslog, does it have its own log file, is it in the kernel log)...

You are free to setup your system in whatever way you like... but whining about that something works differently is "Microsoft mentality"... lets leave that with them.

[–] caseyweederman@lemmy.ca 4 points 11 months ago

Systemd flipped this all around, and now instead of just changing files, you have to use applications to specify changes to your system. Want to stop something from starting? Well, it used to be that you just move it out of the init directory...

Enable and disable just create symlinks of the "just changing files" files in your example. It tells you this every time you install something that enables a service.
Want to do it manually? ln -s (or rm the link to "disable" it).
Want it to happen later in the init sequence? Put the link in a different .target directory.
All "systemctl enable" does is put the symlink in the target directory that's specified in the Install section of the unit file.

As for "specifying a service"... Everything is a unit file (yes, file), journalctl -u just means "only show me logs for this unit".
There's no flag for "specifying a service", you just type in the service name. If there's any ambiguity (eg. unit.service and unit.socket), you type the service name followed by .service
A flag you might find useful is -g, which means "grep for this string". You can combine this with -u to narrow it down.

[–] HuntressHimbo@lemm.ee 3 points 11 months ago

Not the really the point of your post but I personally tend to use journalctl -fu something.service. That brings you to the end of the logs for that unit and I get to smile about flipping off systemd.

load more comments (25 replies)