شحن المكون الإضافي GNU/Linux Firefox مع مكتبات مشتركة (للتثبيت مع عدم الوصول إلى الجذر)
-
26-09-2019 - |
سؤال
التطبيق هو مكون إضافي Firefox (تم تحميله من $ home/.mozilla/plugins) ، لذا فإن البرنامج النصي المرفق الذي يعين ld_library_path ليس خيارًا سهلاً.
RPATH ، على حد علمي ، لا يمكن الرجوع إلى $ Home ويمكن أن يكون مسار المطلق فقط.
يحاول Firefox أن يكون dlopen هو البرنامج المساعد من ~/.mozilla/المكونات الإضافية ولكنه يفشل (لأنه يعتمد على المكتبات المشتركة المثبتة في مكان ما في الدليل المنزلي للمستخدم).
تعديل عنصر قائمة Firefox لتوفير غلاف (مع LD_Library_Path) حول Firefox هو الاختراق للغاية.
ما الذي يجب أن يفعله البرنامج النصي المثبت (بدون وصول الجذر) لجعل المكونات الإضافية القياسية Firefox Load التي تعتمد على المكتبة المشتركة؟
- هل يجب أن أحاول فقط تضمين كل شيء في ذلك. لذلك لإزالة التبعيات؟
- هل يجب أن أحاول إنشاء برنامج نصي للتثبيت لإنهاء الارتباط أو التصحيح RPTH أثناء مرحلة التثبيت؟
المحلول
تعيين RPATH إلى $ORIGIN/lib
لذلك سوف يبحث المحمل عن المكتبات بالنسبة إلى ملفي.
السيناريو يفسر فقط المكون الإضافي إلى $HOME/.mozilla/plugins/myplugin.so
والمكتبات ل $HOME/.mozilla/plugins/lib/
يمكن تحديد RPATH إلى Linker على الرغم من GCC عن طريق الإضافة Wl,-rpath,'$ORIGIN/lib'
($
يجب مضاعفة في Makefile) ويمكن أيضًا تغييرها بعد التجميع patchelf
.