2 Blacklist.ar
Anagnostakis Ioannis edited this page 2026-06-30 21:10:06 +03:00
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

EN · EL · FR · ES · IT · RU · ZH · AR · HI · PT · DE

القائمة السوداء (blacklist)

تُجمِّد القائمة السوداء الحزم التي لا تريد المساس بها، وتُخفي ما لا تريد أن يُعرَض عليك. تعيش القواعد في /etc/slacker/blacklist (واحدةٌ في كل سطر، و# للتعليقات)، أو يُضيفها ويُزيلها لك أمرا frozen وunfrozen.

القائمة السوداء مختلفة عن مطابقة PATTERN في سطر الأوامر. فالـ PATTERN هو سلسلةٌ جزئية + سلسلة + مطابقةٌ تامّة؛ أما قواعد القائمة السوداء فهي globs أو تعابير نمطية غير مثبَّتة (إضافةً إلى نطاق series/ و@repo)، تُطابَق مقابل المعرِّف الكامل name-version-arch-build، كما في slackpkg.


بنية القاعدة

[@repo] PATTERN
  • يكون PATTERN سلسلة Slackware حين ينتهي بـ / (مثل kde/). وإلا فهو glob أو تعبيرٌ نمطيٌّ غير مثبَّت يُطابَق مقابل المعرِّف الكامل — يُقرِّر slacker بحسب ما كتبت:
    • لا بنية regex → glob. يطابق * أيَّ سلسلةٍ من المحارف، ويطابق ? محرفًا واحدًا، ويُؤخَذ كل محرفٍ آخر (بما في ذلك النقطة الحرفية .، كما في webkit2gtk6.0 أو python3.11) كما هو. فتعمل vlc-*، وwebkit2gtk6.0*، و*-l10n-* كما تتوقّع.
    • بنية regex → regex. النمط الذي يحوي محرفًا من [ ] ( ) { } | ^ $ \ ، أو تعبير «أيّ محارف» .* / .+، يُؤخَذ كـ regex كما هو. فتلتقط xf86-.*-202.* بناء 202x، و^vlc-[0-9] تُثبَّت على حزمة vlc، وvlc المجرَّدة تطابق أيّ معرِّفٍ يحوي vlc. ثبِّت بـ ^...$ للمطابقة التامّة.
  • يقصر البادئة الاختيارية @repo القاعدةَ على مستودعٍ واحد: للحزمة المتاحة، مستودعُها المرشَّح؛ وللمثبَّتة، مصدرُها.

مجمَّد مقابل مخفيّ

المُطابَق… الأثر
مثبَّت مجمَّد — لا يُثبَّت ولا يُرقَّى ولا يُعاد تثبيته ولا يُزال أبدًا، ولا تُدرِجه clean-system أبدًا
غير مثبَّت مخفيٌّ من install-new والترقيات وcheck-updates، لكنه يظلُّ يظهر في search/info موسومًا بـ [blacklisted]

تحترم القائمةَ السوداء كلُّ أمرٍ يُعدِّل النظام (بما في ذلك reinstall).


أمر frozen

يتحقّق frozen من القواعد ويُلحِقها بالقائمة السوداء نيابةً عنك.

slacker frozen "@alienbob vlc-[0-9]"     # جمِّد vlc الخاص بـ alienbob فقط (regex)
slacker frozen "vlc-*"                     # glob: كل ما يبدأ بـ "vlc-"
slacker frozen "webkit2gtk6.0*"           # glob؛ النقطة حرفية
slacker frozen kde/                       # جمِّد سلسلة kde كاملة
slacker frozen "xf86-.*-202.*"            # قاعدة regex
slacker frozen "@conraid ^ffmpeg-"        # شبه مضبوطة، مقصورة على conraid
  • كل وسيطٍ قاعدةٌ واحدة؛ اقتبس أيَّ قاعدةٍ تحوي فراغات (قاعدة @repo مثلًا).
  • يُشير slacker إلى خطأٍ مرجَّح — @repo لا يُسمّي أيَّ مستودعٍ مُفعَّل، أو regex يحوي فراغًا (لا معرِّف حزمةٍ يحوي فراغات، فهذا عادةً @ منسيّ أو زلّة اقتباس) — ويسأل إن كان يُصرِّح بها رغم ذلك.
  • يطبع ما ستُجمِّده كل قاعدةٍ ويطلب التأكيد. ويتخطّى --yes المُطالبات. والقواعد الموجودة سلفًا تُتخطّى.

أمر unfrozen

unfrozen نظيرُ frozen: يُزيل القواعد من القائمة السوداء.

slacker unfrozen                          # أدرِج القواعد الحالية (لا حاجة إلى root للقراءة)
slacker unfrozen emacs                     # أزِل القاعدة "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # أزِل قاعدةً مقصورة (اقتبسها)
slacker unfrozen "xf86-.*-202.*"           # المحارف الخاصة تُطابَق حرفيًّا

المطابقة تامّةٌ وحرفية — وليست نمطًا أبدًا. يجب أن يساوي كلُّ وسيطٍ قاعدةً قائمةً محرفًا بمحرف؛ ومحارف الـ regex الخاصة في القاعدة (.*، *، -، [، ]، /) تُقارَن كما هي، ولا تُفسَّر. فـ unfrozen "fcitx5*" يُزيل القاعدة fcitx5* فقط ولا يمسُّ fcitx5-qt أبدًا، وunfrozen fcitx5 (سلسلةٌ أقصر) لا يطابق شيئًا بدل أن يُزيل fcitx5* بالخطأ. وهذا متعمَّد: القائمة السوداء مليئةٌ بالمحارف الخاصة، والمطابقة التامّة هي السبيل الآمن الوحيد لإزالة السطر الصحيح.

  • شغِّله دون وسيط لطباعة القواعد الحالية، لتنسخ النص الدقيق المراد إزالته.
  • تُحفَظ أسطر التعليق والأسطر الفارغة وأيُّ قاعدةٍ لم تُسمِّها كما هي؛ ويُبلَّغ عن قاعدةٍ لم تُوجَد، ولا يُكتَب شيءٌ ما لم تتطابق قاعدةٌ واحدةٌ على الأقل فعليًّا.
  • اقتبس أيَّ قاعدةٍ تحوي فراغاتٍ أو محارف صدفةٍ خاصة (قاعدة @repo، أو * في النهاية)، تمامًا كما في frozen.

إزالة قاعدةٍ من الملف يدويًّا تعمل أيضًا — لكن unfrozen يفعلها بأمان، مع ضمان المطابقة التامّة وإدراج القواعد الحالية.


مثالٌ معالَج: جمِّد vlc من مستودعٍ واحدٍ فقط

لنقل إنك تُبقي vlc من alienbob ولا تريد أبدًا أن يُستبدَل أو يُزال:

slacker frozen "@alienbob vlc-[0-9]"

لماذا vlc-[0-9] وليس vlc فحسب؟ تُطابَق القاعدة دون تثبيت على المعرِّف الكامل. فـ vlc وحدها ستطابق أيضًا vlc-plugin-foo أو أيَّ شيءٍ يحوي تلك الحروف؛ بينما vlc-[0-9] تُثبَّت عند حدِّ الإصدار لتطابق حزمة vlc نفسها. وللمطابقة الصارمة يمكنك كتابة ^vlc-[0-9]. (وتُقبَل أيضًا الـ glob vlc-* — إذ تُترجَم إلى vlc-.* وتُجمِّد عائلة vlc- كاملةً بما فيها الإضافات؛ استخدم الـ regex ^vlc-[0-9] حين تريد حزمة vlc فقط.)


التثبيت (Pins): خذ حزمةً من مستودعٍ واحدٍ فقط

يُخزِّن ملف blacklist نفسه أيضًا pins — النقيض الموجب للتجميد. التجميد يقول لا تأخذ هذه الحزمة أبدًا (أو ليس من هذا المستودع)؛ أما الـ pin فيقول خذ هذه الحزمة فقط من هذا المستودع، متجاهلًا الأولوية.

أدِر الـ pins بأمرين:

slacker pin alienbob:vlc     # يأتي vlc الآن من alienbob فقط، حتى لو قدّم مستودعٌ
                             # أعلى أولويةً بناءً آخر
slacker unpin vlc            # العودة إلى الحلِّ المعتاد بحسب الأولوية
slacker unpin                # (دون وسيط) أدرِج الـ pins الحالية

يُكتَب الـ pin في ملف blacklist بعلامة 100%، فيمكنك أيضًا إضافته أو قراءته يدويًّا:

@alienbob 100% vlc

كيف يتصرّف:

  • كل أمرٍ يحترمه — فـ install وupgrade وupgrade-all تجلب الحزمة من المستودع المُثبَّت فقط، بصرف النظر عن الأولوية. والخطّة التي تتضمّن حزمةً مُثبَّتة تُدرِجها تحت «pinned (taken only from their repo, ignoring priority)»، كما تُبرَز الحزم المجمَّدة.
  • تستخدم الـ pins اسم حزمةٍ مضبوطًا تمامًا، وليس نمطًا أبدًا (vlc، لا vlc*). والنقطة الحرفية مقبولة — python3.11 وwebkit2gtk6.0 اسما pin صالحان. ولتجميد نمط، استخدم frozen بدلًا منه (فهو يقبل globs و regex).
  • للحزمة pin واحدٌ على الأكثر. وتثبيتها على مستودعٍ آخر يستبدل القديم.
  • إن لم يكن المستودع المُثبَّت يُقدِّم الحزمة حاليًّا، تبقى الحزمة كما هي (ولا تُجلَب من أيِّ مكانٍ آخر) إلى أن يُقدِّمها ذلك المستودع. ويُشير slacker status إلى pin مستودعُه غير مُفعَّل، ويُحذِّرك del-repo إن كانت حزمٌ مُثبَّتةً على المستودع الذي تُزيله.
  • يفوز التجميد دائمًا على الـ pin لنفس الحزمة: فإن كان vlc مجمَّدًا ومُثبَّتًا معًا، يسري التجميد ولا يفعل الـ pin شيئًا حتى تُلغي التجميد بـ unfrozen.

الـ pin مقابل التجميد المقصور في المثال أعلاه: @alienbob vlc يُجمِّد vlc الخاص بـ alienbob (ويدع مستودعاتٍ أخرى تُحدِّثه بحسب الأولوية)؛ أما @alienbob 100% vlc فـ يُثبِّت vlc على alienbob (ولا يدع أيَّ مستودعٍ آخر يُقدِّمه). إنهما نقيضان.


القائمة السوداء مقابل حَجْر المستودع

يحلّان مشكلتين مختلفتين:

القائمة السوداء (frozen) الحَجْر (distrust-repo)
النطاق حزمٌ بعينها (بـ regex/سلسلة) مستودعٌ بأكمله
الأثر تجميد / إخفاء تلك الحزم لا يُقدِّم المستودع أيَّ حزمة
متى «لا تمسَّ هذه الحزمة أبدًا» «لا تثق بهذا المصدر الآن»

انظر Security لنموذج الحَجْر.