Bazı arka plan
Evet, ia32-libs
gerçek multi-arch uygulanmadan önce durmaksızın bir önlemdi - temel olarak, bu paket bazı popüler kütüphanelerin sadece 32-bit sürümlerini içeriyordu .
Şimdi ne yapıyorsun
Foregin mimarisini etkinleştirme i386
içinde dpkg
:
dpkg --add-architecture i386
Bu şeyin istediği kitaplıkları bulmak ve uygun 32-bit ( i386
) sürümlerini yüklemek gibi
apt-get install libfooX.Y:i386
Ancak bazı talihsiz şeyleri not edin:
Debian'daki çoklu kemer, kemer bağımlı kitaplıkların, /usr/lib/x86_64-linux-gnu
yerli amd64
kütüphaneler ve aynı sistemdeki aynı kütüphaneler /usr/lib/i386-linux-gnu/
için olduğu gibi, kemer bağımlı dizinlere kurulmasına dayanır i386
.
Buradaki sorun, Debian'da uygulandığı şekliyle çoklu-arşivden habersiz olan üçüncü parti yazılımın, tipik olarak /usr/lib/libfoo.so.X.Y.Z
, son zamanlarda Debian'da olduğu gibi , iyi bilinen bir isim kullanmayacağına dair kütüphaneler bulmayı beklemesidir. sürümleri.
Bu, LD_PRELOAD
başka yollarla (örneğin, /etc/ld.so.cache
başka bir yerde kurulu kütüphanelere referanslar içermek yerine alternatif bir önbellek dosyası kullanmasını sağlamak gibi) başka bir yol kullanarak bağlantı kurarak veya veya dinamik yükleyiciyle karışarak çözülebilir, ancak bir sonraki noktaya bakın.
Linux uyumlu Adobe Air sürümleri üzerinde yapılan çalışmalar oldukça uzun bir süredir IIRC'de durdurulmuştu, bu nedenle en yeni Adobe Air blob'u Debian'ın son sürümlerinde bulunmayan oldukça eski kütüphanelerin sürümlerine bağlı olabilir. Ve daha yeni kütüphaneler API / ABI değişiklikleri anlamına gelir ve bunlar sembolik bağlantılar kullanılarak çözülemez.
Olası çözüm
Bu Adobe abominasyonundan kurtulmak imkansızsa, Linux çekirdeğinin API / ABI'sinin oldukça istikrarlı olduğuna ve özellikle bu blob'u çalıştırmak için herhangi bir işletim sisteminden alınan kütüphaneleri kullanarak çalıştırmak için chroot veya LXC ortamı yaratmaya çalışacağım . onunla uyumlu olmak.
Temel olarak, chroot için /bin/bash
iyi bilinen isimlerle (gibi /usr/lib/libfoo.so
) en az sayıda kütüphaneyi (ve bazı ikili dosyalar gibi ) içeren bir dizin oluşturmanız gerekir .
Bu tam kolay bir yolu (eğer silahlı, deneme-yanılma mermi bir sürü gerekir değil readelf
, ldd
, ayıklanması ve vb dosya kopyalama) ama bunun nedeni sonunda işe yarayabilir, bütün kütüphaneleri çekirdeğe sesleniyorum Syscalls kullanarak ve bunlar çekirdek bültenleri arasında oldukça kararlıdır.