Opened 19 years ago
Closed 19 years ago
#1770 closed defect (fixed)
Issue when reinstalling Readline
Reported by: | Owned by: | ||
---|---|---|---|
Priority: | normal | Milestone: | 6.2 |
Component: | Book | Version: | SVN |
Severity: | minor | Keywords: | |
Cc: |
Description
Doing several LFS builds to test the ICA/farce support in jhalfs, I noticed that when reinstalling Readline the existent /lib/lib{history,readline}.so.5.1 libraries are renamed to /lib/lib{history,readline}.so.5.1.old AND the symliks /lib/lib{history,readline}.so.5 are changed to to point to that /lib/lib{history,readline}.so.5.1.old libraries instead to point to the newly installed /lib/lib{history,readline}.so.5.1 ones.
That meant that the symlinks /usr/lib/lib{history,readline}.so that we create pointing to ../../lib/lib{history,readline}.so.5 in fact will point also to that "old" libraries.
That has been confirmed by others folks. The lfs-dev thread start here:
http://linuxfromscratch.org/pipermail/lfs-dev/2006-April/056814.html
I think that we should to add a similar note to the current one for Bzip2 saying that if reinstalling Readline a "rm -f /lib/lib{history,readline}.so.5*" must be performed before "make install"
Change History (13)
comment:1 by , 19 years ago
comment:2 by , 19 years ago
This is not jhalfs specific, just sillyness by the readline developers. There are two places where this is enabled in the readline build files. First, the static library in Makefile.in:
install-static: installdirs $(STATIC_LIBS) install-headers install-doc -$(MV) $(DESTDIR)$(libdir)/libreadline.a $(DESTDIR)$(libdir)/libreadline.old $(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a -$(MV) $(DESTDIR)$(libdir)/libhistory.a $(DESTDIR)$(libdir)/libhistory.old
And, second, the shell script support/shlib-install:
${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} if [ -f "$INSTALLDIR/$LIBNAME" ]; then ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} fi
DESTDIR is not affected so long as $(DESTDIR)/lib/libreadline.* doesn't exist.
These two seds suppress that behavior:
sed -i '/MV.*old/d' Makefile.in sed -i '/{OLDSUFF}/c:' support/shlib-install
The second one replaces the line with :, the do nothing command. This is necessary since they are wrapped in if;then statements that would be empty without them.
comment:3 by , 19 years ago
This ticket isn't only about that the *old files will be created, but that when doing a Readline reinstallation with jhalfs I end having
/lib/libhistory.so.5 link to /lib/libhistory.so.5.1.old /lib/libreadline.so.5 link to /lib/libreadline.so.5.1.old
Then I would to know if that also happens when reinstalling Readline following the book commands on a running LFS SVN system installed also by-the-book.
comment:4 by , 19 years ago
Looking at the source, I can't figure out how those links would happen. I'll see what happens when doing the build by the book and using the sed's on reinstall.
comment:5 by , 19 years ago
I can't confirm that behavior. I'm not seeing this link repeatedly doing by the book install:
/lib/libreadline.so.5 -> libreadline.so.5.1.old
It's coming out as expected as
/lib/libreadline.so.5 -> libreadline.so.5.1
Also as noted, I get:
/lib/libreadline.old /lib/libreadline.so.5.1.old /lib/libhistory.old /lib/libhistory.so.5.1.old
comment:6 by , 19 years ago
The incorrect symlinks are because of a bug in ldconfig. See <http://archives.linuxfromscratch.org/mail-archives/lfs-dev/2006-January/055391.html>.
comment:7 by , 19 years ago
Priority: | normal → lowest |
---|---|
Severity: | minor → trivial |
Type: | defect → enhancement |
Thanks.
That meant that the bug isn't in Readline, but a race condition in jhalfs generated by a latter package reinstallation that is issuing a plain "ldconfig" by their own.
Then IMHO no special notes are required in the book commands for Readline, except maybe, the possibility to delete the *old files after doing the reinstallation.
But that look like a very minor issue, thus I will close this bug in 2 days if there is no more comments.
comment:8 by , 19 years ago
Priority: | lowest → normal |
---|---|
Severity: | trivial → minor |
Type: | enhancement → defect |
With the seds, I can repeatedly install by the book and get the right libraries. I still can't confirm the behavior you're seeing.
And, running ldconfig (without -X) doesn't cause any problems since there is only one set of libraries. Thanks for the reminder, Tushar.
Without the seds, I do get the bad symlinks:
lrwxrwxrwx 1 root root 22 Apr 17 12:20 /lib/libreadline.so.5 -> libreadline.so.5.1.old
Since some Makefiles run ldconfig, it would be impossible to control those symlinks not being created. Issue the seds before you build readline and this is never an issue.
comment:9 by , 19 years ago
I'm now doing a new jhalfs build with only the removal of the *old libraries.
If works, it might be an alternative to the seds for the book.
comment:10 by , 19 years ago
Finished the build. A plain
rm -v /lib/lib{history,readline}*old
after "make install" will prevent also the creation of that wrong symlinks.
comment:11 by , 19 years ago
So what's the plan? The seds or the library removal? I prefer the latter, but I prefer doing it before configure, not after make install.
comment:12 by , 19 years ago
If the comment is place before configure, then the sed is the way to go.
To can have the /lib/lib{history,readline}.so.5 symlinks pointing to /lib/lib{history,readline}.so.5.1 after a reinstallation, in jhalfs-X I need to add the following commands after "make install":
rm -v /lib/lib{history,readline}.so.5 rm -v /lib/lib{history,readline}*old ln -sfv libhistory.so.5.1 /lib/libhistory.so.5 ln -sfv libreadline.so.5.1 /lib/libreadline.so.5
I can't reproduce the bug using DESTDIR for installation/reinstallation, thus not sure if it could be a jhalfs specific bug.
If no one can confirm the bug reinstallig Readline on a running system, please close this ticket as WORKFORME