[voikko] Voikon työkalubinääreissä on rpathit

Anssi Hannula anssi at mandriva.org
Wed Sep 16 14:35:06 EEST 2009


Ville-Pekka Vainio wrote:
> + /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
> *******************************************************************************
> *
> * WARNING: 'check-rpaths' detected a broken RPATH and will cause
> 'rpmbuild'
> *          to fail. To ignore these errors, you can set the '$QA_RPATHS'
> *          environment variable which is a bitmask allowing the values
> *          below. The current value of QA_RPATHS is 0x0000.
> *
> *    0x0001 ... standard RPATHs (e.g. /usr/lib); such RPATHs are a minor
> *               issue but are introducing redundant searchpaths without
> *               providing a benefit. They can also cause errors in
> multilib
> *               environments.
[...]
> ERROR   0001: file '/usr/bin/voikkospell' contains a standard rpath
> '/usr/lib64' in [/usr/lib64]
> ERROR   0001: file '/usr/bin/voikkogc' contains a standard rpath
> '/usr/lib64' in [/usr/lib64]
> ERROR   0001: file '/usr/bin/voikkohyphenate' contains a standard rpath
> '/usr/lib64' in [/usr/lib64]
> 
> Sama ongelma on myös versiossa 2.1, aiempia en kokeillut. Nuo saattaisi
> olla hyvä saada pois käytöstä, ellei niitä jostain syystä erikseen
> tarvita. En ole ehtinyt tutustua asiaan, mutta esitän arvauksen, että
> libtoolin asetusvivuilla niitä saisi ehkä säädettyä? Tiedättekö
> tarkemmin?

Hieman taustatietoa ongelmasta:

libtool asettaa tiedostoille RPATHin (eli kansion/kansiot josta
kirjastoja etsitään ensimmäisenä) silloin, kun ko. kansio ei ole
järjestelmän oletuskirjastokansioiden joukossa. libtool olettaa näiden
oletuskirjastokansioiden olevan linux-järjestelmissä "/lib /usr/lib
(/etc/ld.so.conf sisältö)". Tämä ei kuitenkaan pidä paikkaansa kaikissa
64-bittisissä distroissa, esim. Fedora ja Mandriva, joissa 64-bittiset
kirjastot ovat kansioissa /lib64 ja /usr/lib64.

Molemmissa distroissa libtool (tai oikeammin libtoolin .m4-tiedosto,
jota käytetään configure-skriptin luontiin) on kuitenkin patchattu  [1]
(hieman eri tavoilla), jotta tuo kansio oletettaisiin oletuskansioksi.
Valitettavasti tämä ei kuitenkaan riitä, sillä configure (kuten libtool
itse (ltmain.sh)) on tunnetusti yleensä sisällytetty ohjelmiston
tarballiin. Jotta muutokset tulevat käyttöön, tämä tulee
uudelleengeneroida komennolla "autoreconf --force" (myös "aclocal
--force && autoconf --force" voi riittää).

Mandrivassa paketteja käännettäessa makro %configure suorittaa
automaattisesti skriptin, joka sed-komennolla tarvittaessa asettaa nuo
oletuskansiot oikein [2].

Nämä oletuskirjastokansiot voi käsittääkseni myös asettaa
ympäristömuuttujalla lt_cv_sys_lib_dlsearch_path_spec, mutta yleiseksi
ratkaisuksi tämä ei ole kovin hyvä, koska /etc/ld.so.conf täytyisi
jotenkin parsia include-statementteineen ja jokerimerkkeineen, jotta sen
sisältämät kansiot voitaisiin myös lisätä ko. muuttujaan.

Paras olisi varmaankin saada libtool jotenkin automaattisesti
tunnistamaan loaderin käyttämät kansiot, jolloin ko. ratkaisu voitaisiin
lisätä alkuperäiseen libtooliin nykyisen hardkoodauksen sijasta.

[1]
http://cvs.fedora.redhat.com/viewvc/devel/libtool/libtool-2.2.6a-rpath.patch?revision=1.1&view=markup
[2]
http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/rpm-manbo-setup/current/SOURCES/fix-dlsearch-path-in-libtool-for-multilib?revision=214913&view=markup

-- 
Anssi Hannula



More information about the voikko mailing list