إعادة تسمية مكتبة تشفير لا تصلح عميلاً قديماً
الرابط الرمزي يغيّر الملف الذي يفتحه المُحمِّل، لا الواجهة التي بُني عليها الملف التنفيذي. افحص نوع الفشل قبل أن تلمس أي مكتبة.
راجع خطأ المُحمِّل بالترتيب: أي ملف مفقود، وأي معمارية يستخدمها الملف التنفيذي، وأي رمز كان يطلبه، وهل وقع الفشل قبل بدء العملية أم بعدها. هذه أربع مشكلات مختلفة، والرابط الرمزي يعالج الأولى فقط. والقيام بها بالترتيب يمنع النتيجة الشائعة حيث يبدأ العميل ثم يفشل عند أول مصافحة. وتنتهي القائمة بالتحقق عبر المُشغِّل الحقيقي لا عبر اختبار يدوي.
سجّل مسار الملف التنفيذي ومعماريته ونص الخطأ الأول حرفياً قبل أن تغيّر أي شيء.
أربعة أعطال مختلفة خلف خطأ واحد
الكائن المشترك المفقود مشكلة في حل الملفات: بحث المُحمِّل عن اسم فلم يجد شيئاً. والرمز المفقود مشكلة في الواجهة: الملف موجود لكنه لا يُصدِّر ما يشير إليه الملف التنفيذي. وعدم تطابق إصدار الرمز هو الفئة نفسها مع تفصيل أكبر. أما الخوارزمية غير المدعومة التي تُبلَّغ بعد بدء التشغيل فهي تغيّر سلوكي داخل مكتبة حُمِّلت بنجاح. كل واحدة منها تحتاج استجابة مختلفة، والأولى وحدها مسألة تسمية.
ldd على الملف التنفيذي وreadelf -d على قسمه الديناميكي يُظهران ما يطلبه، وهو عادة كافٍ للفصل بين مشكلة ملف ومشكلة واجهة.
ما الذي يتطلبه OpenSSL 3 فعلاً
دليل الترحيل إلى OpenSSL 3 صريح في هذا الشأن: التطبيقات المبنية على إصدارات أقدم تحتاج إلى إعادة بناء على الأقل، والتوافق المصدري غير مضمون. تغيّرت الواجهات، وبعضها أُهمل أو أُزيل. والاسم البديل لا يستطيع إجراء إعادة بناء، ولا يستطيع تعليم ملف تنفيذي قديم واجهة جديدة. وربط مكتبة أحدث تحت اسم يبدو أقدم يُنتج برنامجاً قد يبدأ ثم يفشل في مكان أقل وضوحاً بكثير.
وهذا أسوأ من فشل نظيف. فخطأ المُحمِّل يسمّي المشكلة فوراً، بينما يبدو الفشل المتأخر داخل عملية ما وكأنه مشكلة شبكة أو بيانات اعتماد فيوجّه التحقيق في الاتجاه الخاطئ.
لماذا مكتبة التوزيعة هي المكان الخطأ
استبدال مكتبة توزيعة لإرضاء عميل واحد يغيّر البيئة لكل برنامج على الجهاز، بما في ذلك تحديثات الأمان وأي شيء يعتمد على الواجهة الحالية. ونسخ مكتبة قديمة بجانب الملف التنفيذي أضيق نطاقاً، لكنه ما زال يخلق اعتماداً يجب على أحدهم صيانته وترقيعه. ولا أي من الطريقتين مسار توافق معتمد، حتى عندما تبدو ناجحة يوم تطبيقها. والاسم البديل العام الذي يُترك بعد التجربة أسوأ، لأن لا أحد يتذكر لماذا وُجد.
استخدم عميل المورّد المدعوم ومجموعة الاعتماديات الخاصة بإصدار نظام التشغيل والمعمارية والبوابة الفعلية. فصيغة حزمة نجحت لشخص واحد لا تُثبت المسار الصحيح الحالي، والوصفة المؤرشفة دليل على الماضي.
تحقق من المُشغِّل لا من التشغيل
بعد استبدال مدعوم، افحص ما يحله المُشغِّل العادي: ldd على الملف التنفيذي المثبَّت، وإصدارات المكتبات التي يسمّيها، والبيئة التي تمررها الخدمة. ثم شغّل المصادقة المقصودة وعملية حقيقية واحدة. فالاستدعاء اليدوي ببيئة معدّلة لا يُثبت إلا أن صدفة الأوامر لديك قادرة على تشغيله. أما ما يشغّله المستخدمون فعلاً فهو المُشغِّل أو مدخل سطح المكتب أو وحدة الخدمة.
إن لم يوجد بناء مدعوم، اطلب من مالك VPN بديلاً أو مسار ترحيل. فالتبديل الصامت إلى بروتوكول آخر، أو افتراض أن عميلاً باسم مورّد مألوف يرضي البوابة، ينقل الفشل بدل أن يصلحه.
حين يكون ترتيب توافق مؤقت لا مفر منه، وثّقه، واحصره على ذلك الملف التنفيذي، وأزله عند وصول البناء المدعوم.