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/paperless: move paperless-manage to proper systemPackage #367496

Merged
merged 1 commit into from
Feb 27, 2025

Conversation

SuperSandro2000
Copy link
Member

@SuperSandro2000 SuperSandro2000 commented Dec 22, 2024

Closes #343961

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • 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/)
  • 25.05 Release Notes (or backporting 24.11 and 25.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
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

@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/` 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10 labels Dec 22, 2024
@erikarvstedt
Copy link
Member

This doesn't work on systems that use doas instead of sudo.
Ways to solve this:

  • Add a simple runtime warning in paperless-manage that asks users to manually run the command with doas.

  • Enable sudo in the paperless module. Unsafe and intrusive, not viable.

  • Add doas support. I've implemented this here, feel free to squash.
    Because doas doesn't support sudo option --preserve-env, we sudo/doas-exec the whole paperless-manage script to run the env setup after sudo/doas.

    Note: Module btrbk has a similar sudo/doas check. It probably doesn't make sense yet to extract this to a common lib function.

@leona-ya
Copy link
Member

I think this also breaks with sudo-rs, as it doesn't implement --preserve-env.

@erikarvstedt
Copy link
Member

Running manage under the wrong user is indeed a pitfall we should remove, so I'ld like to see this merged.
My above patch makes it work for all sudo implementations.

@SuperSandro2000
Copy link
Member Author

SuperSandro2000 commented Jan 13, 2025

This doesn't work on systems that use doas instead of sudo.

Then don't use doas or the sudo shim, they are none standard anyway and break basic things as you noted and the project is abandonware anyway since 3 to 4 year depending on how you count https://github.com/Duncaen/OpenDoas

Add a simple runtime warning in paperless-manage that asks users to manually run the command with doas.

It needs to be a hard error as the linked issue demonstrates and if we turn it into an hard error then we might as well just sudo to the correct user to not get in our way.

Enable sudo in the paperless module. Unsafe and intrusive, not viable.

Not necessary as it is enabled by default but we can easily exit the script if people are not using sudo and the script is run as the wrong user.

we sudo/doas-exec the whole paperless-manage script to run the env setup after sudo/doas.

That could be a solution but since EnvironmentFile from systemd allows us to have the secret file 400 for root:root we would be loosing that.

Note: Module btrbk has a similar sudo/doas check. It probably doesn't make sense yet to extract this to a common lib function.

I am not doing that since I am aware of the pitfalls it has with the shared nginx module and to my knowledge it cannot easily be done correct on a module level.

@SuperSandro2000
Copy link
Member Author

SuperSandro2000 commented Jan 13, 2025

Add doas support. I've implemented this here, feel free to squash.

regarding The `paperless` module requires `sudo` or `doas` to be enabled: that is not true, you just then need to figure out how to run the script as the paperless user on your own which IMO is a fine solution and puts people not using the standard sudo back to where we are right now but with a hard error.

Also having a throw in the module system is forbidden as that halts the entire evaluation on the first error. It must be an assertion.

@SuperSandro2000 SuperSandro2000 force-pushed the paperless-manage branch 2 times, most recently from 6f55b16 to 0675cbe Compare January 13, 2025 15:05
@SuperSandro2000
Copy link
Member Author

SuperSandro2000 commented Jan 13, 2025

I pushed a solution which I think is the easiest one here to keep doas compatibility: people not running sudo just need to use runuser/doas -u paperless/or anything similar to change the user of the script.

Copy link
Member

@erikarvstedt erikarvstedt left a comment

Choose a reason for hiding this comment

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

This line of the test needs to be changed to

assert cmdline.strip() == "paperless-manage document_exporter /var/lib/paperless/export --compare-checksums --delete --no-progress-bar --no-thumbnail", "Unexpected exporter command line"

This PR needs a changelog entry.

@github-actions github-actions bot added 8.has: documentation This PR adds or changes documentation 8.has: changelog labels Jan 28, 2025
@ofborg ofborg bot added the 2.status: merge conflict This PR has merge conflicts with the target branch label Jan 28, 2025
Copy link
Contributor

@eclairevoyant eclairevoyant left a comment

Choose a reason for hiding this comment

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

Also why in the world are we running sudo in a systemd service that can arbitrarily set the user? Shouldn't we figure out why it's running as root in the first place when serviceConfig.User is already set?

@SuperSandro2000
Copy link
Member Author

Also why in the world are we running sudo in a systemd service that can arbitrarily set the user? Shouldn't we figure out why it's running as root in the first place when serviceConfig.User is already set?

We are not doing that. Please check the code correctly. We are switching the user if it doesn't match what we expect which is only the case when running interactively. Also sudo will fail because we don't have a pty.

@ofborg ofborg bot removed the 2.status: merge conflict This PR has merge conflicts with the target branch label Feb 27, 2025
@SuperSandro2000
Copy link
Member Author

Run the tests locally. Going to merge this to avoid more merge conflicts with the other two paperless PRs open by me and we have done a good review on this one.

@SuperSandro2000 SuperSandro2000 merged commit 73f3c9b into NixOS:master Feb 27, 2025
26 of 28 checks passed
@SuperSandro2000 SuperSandro2000 deleted the paperless-manage branch February 27, 2025 20:57
Copy link
Member

@erikarvstedt erikarvstedt left a comment

Choose a reason for hiding this comment

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

Couldn't run test due to paperless build failures (log), but diff looks fine.

@SuperSandro2000
Copy link
Member Author

that's probably just another occurrence of 361006

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: changelog 8.has: documentation This PR adds or changes documentation 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.

paperless-ngx file permissions seem to be wrong
5 participants