[patch] ldconfig.8: Document file filter and symlink pattern expectations
Michael Kerrisk (man-pages)
mtk.manpages@gmail.com
Sat Dec 14 04:55:00 GMT 2019
Hi Carlis,
On 12/2/19 10:41 PM, Carlos O'Donell wrote:
> On 12/2/19 3:32 PM, DJ Delorie wrote:
>>
>> Information gleaned from comments in glibc's elf/ldconfig.c
>>
>> diff --git a/man8/ldconfig.8 b/man8/ldconfig.8
>> index 4f799962c..15585243c 100644
>> --- a/man8/ldconfig.8
>> +++ b/man8/ldconfig.8
>> @@ -93,6 +93,28 @@ option.
>> .B ldconfig
>> should normally be run by the superuser as it may require write
>> permission on some root owned directories and files.
>> +.PP
>> +Note that
>> +.B ldconfig
>> +will only look at files that are named
>> +.I lib*.so*
>> +(for regular shared objects) or
>> +.I ld-*.so*
>> +(for the dynamic loader itsef). Other files will be ignored. Also,
>> +.B ldconfig
>> +expects a certain pattern to how the symlinks are set up, like this
>> +example, where the middle file
>> +.RB ( libfoo.so.1
>> +here) is the SONAME for the library:
>> +.PP
>> +.in +4n
>> +.EX
>> +libfoo.so -> libfoo.so.1 -> libfoo.so.1.12
>> +.EE
>> +.in
>> +.PP
>> +Failure to follow this pattern may result in compatibility issues
>> +after an upgrade.
>> .SH OPTIONS
>> .TP
>> .BR \-c " \fIfmt\fP, " \-\-format=\fIfmt\fP
>>
>
> I wrote the relevant comment in glibc here after a frustrating
> night of debugging :-)
>
> elf/ldconfig.c
>
> 884 /* If the path the link points to isn't its soname or it is not
> 885 the .so symlink for ld(1), we treat it as a normal file.
> 886
> 887 You should always do this:
> 888
> 889 libfoo.so -> SONAME -> Arbitrary package-chosen name.
> 890
> 891 e.g. libfoo.so -> libfoo.so.1 -> libfooimp.so.9.99.
> 892 Given a SONAME of libfoo.so.1.
> 893
> 894 You should *never* do this:
> 895
> 896 libfoo.so -> libfooimp.so.9.99
> 897
> 898 If you do, and your SONAME is libfoo.so.1, then libfoo.so
> 899 fails to point at the SONAME. In that case ldconfig may consider
> 900 libfoo.so as another implementation of SONAME and will create
> 901 symlinks against it causing problems when you try to upgrade
> 902 or downgrade. The problems will arise because ldconfig will,
> 903 depending on directory ordering, creat symlinks against libfoo.so
> 904 e.g. libfoo.so.1.2 -> libfoo.so, but when libfoo.so is removed
> 905 (typically by the removal of a development pacakge not required
> 906 for the runtime) it will break the libfoo.so.1.2 symlink and the
> 907 application will fail to start. */
Thanks for that added info.
> Should we be more specific about always doing:
>
> libfoo.so -> SONAME -> Arbitrary package-chosen name.
>
> Users love having examples of how to do it right :-)
Well, I applied DJ's patch. Would you be willing to send a small patch
with this extra info?
Thanks,
Michael
More information about the Libc-alpha
mailing list