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

Respect prefix when sysconfdir isn't set in config.toml #113733

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/bootstrap/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,12 @@ fn install_sh(
let _guard = builder.msg(Kind::Install, stage, package, host, host);

let prefix = default_path(&builder.config.prefix, "/usr/local");
let sysconfdir = prefix.join(default_path(&builder.config.sysconfdir, "/etc"));
// if prefix isn't specified, we want this to be an absolute path, outside `/usr/local`. but if it is specified, make sysconfdir relative.
let sysconfdir = if builder.config.prefix.is_some() {
prefix.join(default_path(&builder.config.sysconfdir, "etc"))
} else {
"/etc/".into()
};
Comment on lines +58 to +63
Copy link
Member Author

@jyn514 jyn514 Jul 15, 2023

Choose a reason for hiding this comment

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

i am not quite sure if this is the right fix - maybe it should just be changing /etc to etc so that it's always relative to the prefix? that seems more consistent at least (we'd end up with /usr/local/etc by default). but i don't know if people are depending on the existing behavior.

cc @cuviper, what are your thoughts?

Copy link
Member

Choose a reason for hiding this comment

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

See also #113580, where I was suggesting this should just be a diagnostic.

When the prefix is /usr, you almost surely want /etc, not /usr/etc. But for /usr/local prefix, there is often a /usr/local/etc too, so the "local" installations are completely contained. So, I don't think there's a universally great answer, but changing the default feels a little risky.

For my part in distro builds: prefix, sysconfdir, and all the other installation dirs are explicitly set by the distro-default %configure rpm macro, so I shouldn't be affected by changes here either way.

Copy link
Member

Choose a reason for hiding this comment

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

Maybe a simpler option is to require users to set prefix? I'm not sure how widespread source installs of Rust are, but my very rough guess is that many of those users either are using a non-default prefix today or may want to (e.g., distros probably don't want /usr/local, users installing themselves may want something in $HOME, etc.).

let datadir = prefix.join(default_path(&builder.config.datadir, "share"));
let docdir = prefix.join(default_path(&builder.config.docdir, "share/doc/rust"));
let mandir = prefix.join(default_path(&builder.config.mandir, "share/man"));
Expand Down