Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixos/rtkit: Disable debug logging and fix sd_notify #180102

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

dasJ
Copy link
Member

@dasJ dasJ commented Jul 4, 2022

Description of changes

See: heftig/rtkit#22

Things done
  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 22.11 Release Notes (or backporting 22.05 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
    • (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes
  • Fits CONTRIBUTING.md.

Sorry, something went wrong.

@dasJ dasJ requested review from mweinelt and ajs124 July 4, 2022 10:26
@github-actions github-actions bot added 6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: module (update) This PR changes an existing module in `nixos/` labels Jul 4, 2022
@dasJ dasJ requested a review from cheriimoya July 4, 2022 10:27
@ofborg ofborg bot added 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10 labels Jul 4, 2022
systemd.services.rtkit-daemon = {
environment.NOTIFY_SOCKET = "/fs/sd-notify";
serviceConfig = {
BindPaths = "/run/systemd/notify:/proc/fs/sd-notify";
Copy link
Contributor

@viraptor viraptor Jul 4, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels like a terrible hack. Is this the right way to go considering this service is type dbus, so sd_notify doesn't really change the status anyway?
See https://github.com/heftig/rtkit/blob/c295fa849f52b487be6433e69e08b46251950399/rtkit-daemon.service.in#L23
According to service docs the notification is only interesting in case of Type=notify.
On fedora for example this works without log spam and without specific socket mapping.

Or from a different angle: What does having a "Status" line do for us in a service which is actively managed through a specified dbus topic?

Copy link
Member Author

@dasJ dasJ Jul 4, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sd_notify works with non-notify services as well. The reason to use Type=notify is startup notifications, not whether sd_notify() works. That is controlled by NotifyAccess=.

The Status: line is Status: "Supervising 0 threads of 0 processes of 0 users.", which is the same as the debug message that is logged constantly.
Fixing the status line is pretty irrelevant to me, I don't care about it at all, I just implemented it so people who care about the info that is being logged constantly have a way of accessing it that isn't annoying.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Digging into this more, adding notification won't influence the logs, since they're both sent anyway: https://github.com/heftig/rtkit/blob/c295fa849f52b487be6433e69e08b46251950399/rtkit-daemon.c#L1435-L1446

I think bumping up the log level is a good idea, but otherwise the behaviour should be either fixed upstream or patched. The whole chroot("/proc") could be replaced with a strict filesystem protection at service level anyway which would unbreak the status notification. (disable do_chroot) But messing with mounting over random /proc directories is just... yuck.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree but it was disabling chroot() vs messing with /proc and while I agree with you that this is very ugly, it's the solution that doesn't lower security.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or to make it more clear: I'm not happy with this solution at all but it shuts up the daemon while not supressing info that was available previously. And upstream does not seem to care at all: heftig/rtkit#26

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can replicate the chroot with TemporaryFileSystem and BindPaths and then disable the chroot the application creates itself.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something like this should work:

ProtectSystem=strict
PrivateDevices=true
InaccessiblePaths=/etc
TemporaryFileSystem=/var
BindPaths=/run/systemd/notify
SystemCallFilter=~@mount

(not tested)

@stale stale bot added the 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md label Jan 7, 2023
KenMacD added a commit to KenMacD/nixpkgs that referenced this pull request Aug 4, 2023
Pull in a patch from a cleaner upstream PR to reduce logging.

Slightly update the URLs used to download the existing patches
to make it easier to find the relevant PRs.

Re: NixOS#180102, heftig/rtkit#22
@KenMacD KenMacD mentioned this pull request Aug 4, 2023
12 tasks
@FliegendeWurst FliegendeWurst added the 2.status: needs-changes This PR needs changes by the author label Dec 11, 2024
@stale stale bot removed the 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md label Dec 11, 2024
@rvl
Copy link
Contributor

rvl commented Dec 12, 2024

This change looks good to me because it provides a quick way to see how many threads rtkit thinks should be RT.

Despite all the debug logging, rtkit still fails to do its one job on my system (see heftig/rtkit#13).

I don't think it's too important exactly how the sd-notify socket is bind-mounted into a chroot.

@wegank wegank added 2.status: merge conflict This PR has merge conflicts with the target branch 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md labels Dec 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2.status: merge conflict This PR has merge conflicts with the target branch 2.status: needs-changes This PR needs changes by the author 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md 6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: module (update) This PR changes an existing module in `nixos/` 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants