Çok eski bir glibc ile eski bir sistemim var, bu da bir test / doğrulama çalışması dağına çıkmadan yükseltemiyoruz.
Bu sistemde birkaç kez daha yeni programlar (Java 1.7 gibi) çalıştırmam gerekiyor. Gerekli tüm kütüphaneleri paketlediğim ve bir krootta bir hizmet yürüttüğüm bir chroot çözümü seçtim.
Kroot çok sınırlayıcı ve sorunu LD_LIBRARY_PATH ile çözmeye çalışmayı tercih ederim. Ne yazık ki, bunu libc.so.6: cannot handle TLS data
denediğimde bir hata alıyorum .
Görünüşe göre kroottan da ihtiyacım var /lib/ld-linux.so.2
. Bu çalışıyor:
LD_LIBRARY_PATH=/home/chroot/lib /home/chroot/lib/ld-linux.so.2 /home/chroot/bin/program
Ancak, ikili kod 'bin / java' olarak adlandırılmamışsa başarısız olan kitaplıklarını nereden yükleyeceğini belirleyerek java
hilemi folyolar /proc/self/cmdline
. Ayrıca java, başlatma sırasında kendini yürütür, işleri daha da karmaşık hale getirir.
Bu işi yapmak için bir son dakika girişimi, ben bir onaltılık editörü ile java ikili açtı ve dize yerini /lib/ld-linux.so.2
ile /home/chroot/ld.so
(bir sembolik o ve yapılan ld-linux.so.2
ve işe yaradı)!
Ama bence herkes her yeni ikilinin yolunu iç içe sistemin mutlak bir yoluna yeniden yazmanın büyük bir çamur olduğunu kabul eder.
Herkes özel bir ld-linux.so dahil olmak üzere özel bir kitaplık yolu kullanmak için daha temiz bir yol biliyor mu ?