Project

General

Profile

Actions

Bug #20800

closed

Don't place `ruby` executable into `/usr/libexec/x86_64-linux/bin`

Added by vo.x (Vit Ondruch) 4 months ago. Updated about 1 month ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.4.0dev (2024-10-15 master 3da3cabf98) +PRISM [x86_64-linux]
[ruby-core:119534]

Description

Trying to prepare Ruby 3.4 package for Fedora, it seems that since 1, the ruby executable is installed into /usr/libexec/x86_64-linux/bin:

installing binary commands:         /usr/libexec/x86_64-linux/bin

Unfortunately, the PR does not explain anything about reasons why. To me, using libexec is surprising, because according to FHS 2, the directory is for internal binaries. What is even more surprising is usage of the bin subdirectory there, which IMHO does not follow any standard or convention (I don't have /usr/libexec/x86_64-linux/bin directory on my Fedora yet).

Just FTR, these are the configuration options used:

/builddir/build/BUILD/ruby-3.4.0_20241016git3da3cabf98-build/ruby-3.4.0-3da3cabf98/configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-rubylibprefix=/usr/share/ruby --with-archlibdir=/usr/lib64 --with-rubyarchprefix=/usr/lib64/ruby --with-sitedir=/usr/local/share/ruby/site_ruby --with-sitearchdir=/usr/local/lib64/ruby/site_ruby --with-vendordir=/usr/share/ruby/vendor_ruby --with-vendorarchdir=/usr/lib64/ruby/vendor_ruby --with-rubyhdrdir=/usr/include --with-rubyarchhdrdir=/usr/include '--with-sitearchhdrdir=$(sitehdrdir)/$(arch)' '--with-vendorarchhdrdir=$(vendorhdrdir)/$(arch)' --with-rubygemsdir=/usr/share/rubygems --with-ruby-pc=ruby.pc --with-compress-debug-sections=no --disable-rpath --enable-mkmf-verbose --enable-shared --with-ruby-version= --enable-multiarch --enable-yjit

The --enable-multiarch is among the options. It is used not because Fedora would be multiarch, but because it provides the highest flexibility.

Updated by alanwu (Alan Wu) 4 months ago

I'm not familiar with this area, but using --enable-multiarch when not multiarch seems like a misuse of the feature. Also, can you explain where you'd like it to place ruby?

Updated by vo.x (Vit Ondruch) 4 months ago · Edited

but using --enable-multiarch when not multiarch seems like a misuse of the feature.

I don't disagree. If I had other option, I'd use it. If somebody is interested to help, I'll gladly open separate ticket to share what are my thoughts on this topic.

can you explain where you'd like it to place ruby?

It is hard to guess what was the reason for 1 (and actually that should be the content of PR / commit message. Can this be improved, please?). So to me, it is questionable why the /usr/libexec/ + symlink are used on the first place. But given this is reasonable change, then the path should likely be /usr/libexec/x86_64-linux/ruby. At least this is my interpretation of FHS 2 and that would be aligned with what is the standard on Fedora (although admittedly, we would also leave out the x86_64-linux, because Fedora is not multilib).

BTW I also don't understand why if usage of /usr/libexec/ + symlink was deemed useful, why it should be mulitilib only.

Updated by vo.x (Vit Ondruch) 4 months ago

vo.x (Vit Ondruch) wrote in #note-2:

the path should likely be /usr/libexec/x86_64-linux/ruby

Just to clarify, the ruby would be the binary. Of course it could also be directory should there be need for more files in libexec

Actions #4

Updated by nobu (Nobuyoshi Nakada) 3 months ago

  • Status changed from Open to Closed

Applied in changeset git|303a52c201a693345cf789e9fb7edbcefcb34ec9.


[Bug #20800] Locate executable binary file under "libexec" directly

"libexec" means the directory for executable or binary files already.

Updated by vo.x (Vit Ondruch) 3 months ago

With the PR#12043, the executable is not installed into /usr/x86_64-redhat-linux-gnu/bin/ruby. But I can't say I understand the motivations. I am going to move the executable for Fedora where it always was 🤷

Updated by sorah (Sorah Fukumori) about 1 month ago

Debian would also confuse this change, without explaining motivation behind the change

Updated by mame (Yusuke Endoh) about 1 month ago

The motivation is very clear, at least to me: The word “multiarch” seems to mean installing architecture-dependent files in separate arch-named directories; and "ruby" executable is architecture-dependent; it should be installed to any arch-named directory.

But to my surprise, https://wiki.debian.org/Multiarch/HOWTO says:

Note that it does not enable multiple architecture versions of applications to be installed simultaneously.

So "multiarch" only applies to libraries and not to applications (i.e., executables)? If so, what a confusing and bad name "multiarch" is!

The name argument aside, you expect that the “ruby” executable to be installed into $PREFIX/bin by default, even though it is arch-dependent, right?

Updated by vo.x (Vit Ondruch) about 1 month ago

As far as I can tell, the binaries in Debian are placed in /usr/bin:

https://packages.debian.org/sid/amd64/ruby3.3/filelist

I would expect that if this was problem, Debian folks would carry downstream patch adjusting this location and this change would refer to that patch or some other request from Debian with more details.

Generally, I still don't understand motivation for such change. From my POV, with my Fedora maintainer hat on and with all due respect, Ruby upstream should mostly care about installing Ruby into some dedicated directory out of system locations. Practice of running make install and modifying content of /usr should be discouraged. Installing into /usr/local is a bit better option, but then who cares about multiarch, there?

Updated by mame (Yusuke Endoh) about 1 month ago

I have explained the motivation, but I repeat: @nobu (Nobuyoshi Nakada) took consideration that if --enable-multiarch is specified, all arch-dependent files should be installed in arch-named directories. That makes sense to me.

I would like you not to repeat saying "I don't understand the motivation", but to provide a rationale why this consideration is unnecessary, and then to clearly state where "ruby" should be installed.

Updated by vo.x (Vit Ondruch) about 1 month ago

What I actually want is the configuration options to be honored. If there is used --bindir=/usr/bin configuration option, then simply place binaries into that directory (IOW with that option, I expect /usr/bin/ruby to be created), don't do any additional modifications to it. Currently, there are still additional logic 1 under which is the destination modified. If there is no --bindir specified, then I don't really mind about the result that much.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0