Opened 3 years ago

Last modified 3 years ago

#4848 closed task

make /lib, /bin, /sbin symlinks to their conterpart in /usr — at Version 5

Reported by: Xi Ruoyao Owned by: lfs-book
Priority: normal Milestone: 11.0
Component: Book Version: git
Severity: normal Keywords:
Cc:

Description (last modified by Xi Ruoyao)

Support of "split-usr" configuration is deprecated in systemd-248, and likely to be removed in systemd-249.

Fedora and Arch have already made the move.

Specific to LFS, the main advantage of the move is we can delete all mv /usr/lib/libfoo.so.* /lib && ln -sfv ../../lib/$(...) /usr/lib/libfoo.so stuff. The main disadvantage is we'll have to use an initramfs if /usr is somewhere on network (but I doubt if there is really someone using LFS/BLFS this way).

It's planned to make the move only for systemd, for now. The steps:

  • [x] rewrite section 4.2 and section 7.5. In section 4.2 we'll set up {/usr,}/{lib,lib64,bin,sbin}, and the references to them should be removed in 7.5. For consistency both sysv and systemd should be changed: the revisions share a same section 7.5, but section 4.2 would be different
  • [x] modify section 4.3 for the changes of 4.2
  • [x] remove -Dsplit-usr=true in systemd
  • [x] mark all mv /usr/lib/libfoo.so.* /lib ... commands with revision="sysv", in LFS
  • [x] build and test LFS
  • [ ] mark all mv /usr/lib/libfoo.so.* /lib ... commands with revision="sysv", in BLFS

Change History (5)

comment:1 by Xi Ruoyao, 3 years ago

Description: modified (diff)

comment:2 by Xi Ruoyao, 3 years ago

Description: modified (diff)

Initial changes are staged in branch xry111/usr-move now.

I think we can keep options like --libdir=/lib or --bindir=/bin there. Removing them for only systemd will cost too much work, and won't give significant improve (to readers) like removing explicit mv -vs.

I'll rebuild the system as a test, when GCC 11 is released.

And I hope I didn't introduce something breaking jhalfs...

comment:3 by Xi Ruoyao, 3 years ago

A clarification: systemd stops to support split-usr does *not* mean you can't use a separate partition for /usr. It means /bin, /sbin, /lib, and /lib64 have to be a symlink to its counterpart in /usr, to be supported.

If you want a separate /usr partition, you can use an initramfs anyway.

For example, "ProtectSystem=true" makes systemd bind-mounts /usr, /bin, /sbin, /lib, and /lib64 for a service. In future systemd releases it will only consider /usr, so if /bin or /lib is not a symlink to /usr/bin or /usr/lib, its content will *not* be protected anymore.

comment:4 by Xi Ruoyao, 3 years ago

Another clarification: it won't break any scripts hardcoding /usr/bin or /bin. Every utilitiy is in /usr/bin, and /bin is a symlink to /usr/bin. So you can use the utilities with both path.

comment:5 by Xi Ruoyao, 3 years ago

Description: modified (diff)
Summary: make /lib, /lib64, /bin, /sbin symlinks to their conterpart in /usrmake /lib, /bin, /sbin symlinks to their conterpart in /usr

We'll keep /lib64 there: the existence of /usr/lib64 causes meson trying to install every library into it.

As /lib64 only contains two symlinks, it should be OK.

Note: See TracTickets for help on using tickets.