Title: Upgrading to musl 1.1.5 Author: Anthony G. Basile Content-Type: text/plain Posted: 2014-10-22 Revision: 1 News-Item-Format: 1.0 Display-If-Installed: sys-libs/musl Versions 1.1.4 and above of musl provide Native Language Support (nls). Up till now, Gentoo musl stages have used GNU gettext to provide nls via libintl.so and linked applications against it. Beginning with musl-1.1.5 we are switching to nls provided by musl. Since musl is experimental, you are better off starting with a new stage3 dated later than 2014-10-20. However, if you wish to upgrade an existing system, you can proceed as follows: 1. Remove any references to -lintl from /etc/portage/package.env and /etc/portage/env/*. If you did not modify these from the original stage3 then you can just do `rm -rf /etc/portage/package.env /etc/portage/env` 2. Update your system, except for musl: emerge --exclude musl -uvNDq world 3. Remove the libintl header belonging to gettext: rm -f /usr/include/libintl.h 4. Now you can update musl without a file collision: emerge -1q =sys-libs/musl-1.1.5 5. We need to turn USE=nls off in gettext: echo "=sys-devel/gettext-0.19.3" >> /etc/portage/package.accept_keywords echo "sys-devel/gettext -nls" >> /etc/portage/package.use emerge -1 gettext 6. Rebuild any packages that might be linking against libintl.so: USE=-nls emerge -uvDNq world 7. The previous step probably missed some executables, so find them all: for i in /bin/* /sbin/ /usr/bin/* /usr/sbin/* ; do readelf -d $i 2>&1 | grep -q libintl.so && echo $i done You can identify what packages these belong to uing `equery b ` Rebuild those packages. 8. At this point you can remove /usr/lib/libintl.so*. To be safe, check that all your coreutils utilities (like mv, cp, ls, etc.) really aren't linking against libintl.so as described in the previous step and then mv that library out of the dynamic linker's search path. 9. While not strictly necessary, you can rebuild your entire system to make sure everything links nicely against the new libc.so: emerge -evq world