كتيبات سطر الأوامر

Man » دليل ucf عبر الإنترنت - وثائق مفصلة عبر الإنترنت لصفحة دليل ucf

🌍
ucf - تحديث ملف التهيئة: الحفاظ على تغييرات المستخدم في ملفات التهيئة

ملخص

ucf [خيارات] <الملف الجديد> <الوجهة>

ucf [خيارات] --purge <الوجهة>

الوصف

توفر هذه الأداة وسيلة لسؤال المستخدم عما إذا كان سيقبل الإصدارات الجديدة من ملفات التهيئة التي يقدمها مسؤول الحزمة أم لا، مع العديد من الاستدلالات المصممة لتقليل وقت التفاعل. يستخدم debconf للتفاعل مع المستخدم، وفقًا لسياسة Debian. في الملخص المذكور أعلاه، "الملف الجديد" هو ملف التهيئة المقدم من الحزمة (إما شحنها مع الحزمة، أو إنشاؤها بواسطة نصوص مسؤول الحزمة)، و "الوجهة" هي الموقع (عادةً تحت /etc) حيث يوجد ملف التهيئة الفعلي، وقد يتم تعديله بواسطة المستخدم النهائي. نظرًا لأن الملفات التي يتم تعديلها هي ملفات فعلية وليست روابط رمزية، فإن ucf يتبع ويحل الروابط الرمزية قبل العمل. قدر الإمكان، تحاول ucf الحفاظ على ملكية وأذونات "الملف الجديد" عند نسخه إلى الموقع الجديد.

يحاول هذا البرنامج توفير معالجة مماثلة لمعالجة "conffile" للملفات المثبتة تحت /etc والتي لم يتم شحنها في حزمة Debian، ولكن يتم التعامل معها بواسطة نصوص ما بعد التثبيت. تنص سياسة Debian على أن الملفات الموجودة تحت /etc والتي هي ملفات تهيئة يجب أن تحافظ على تغييرات المستخدم، وينطبق هذا على الملفات التي يتم التعامل معها بواسطة نصوص مسؤول الحزمة أيضًا. باستخدام ucf، يمكن شحن مجموعة من ملفات التهيئة الافتراضية في مكان ما في /usr (يعد /usr/share/<pkg> موقعًا جيدًا)، والحفاظ على الملفات في /etc، والحفاظ على تغييرات المستخدم وتقديم نفس الميزات بشكل عام أثناء الترقية التي يوفرها dpkg عادةً لـ "ملفات التهيئة".

بالإضافة إلى ذلك، يوفر هذا البرنامج أدوات لنقل ملف لم يتم توفير حماية مماثلة لـ "conffile" ليخضع لهذا المخطط، ويحاول تقليل عدد الأسئلة التي يتم طرحها في وقت التثبيت. في الواقع، تعد أداة النقل أفضل من الأداة التي يوفرها dpkg أثناء نقل ملف من حالة غير "conffile" إلى حالة "conffile". الشكل الثاني في الملخص المذكور أعلاه مخصص لإزالة معلومات حول ملف التهيئة عند إزالة الحزمة؛ وهو أمر بالغ الأهمية للسماح بإعادة تثبيت سلسة.

خلال العمليات، عند العمل مع ملفات التهيئة، يقوم ucf بإنشاء نسخ من إصدارات ملف التهيئة المعني. على سبيل المثال، يحتوي ملف باللاحقة ucf-old على الإصدار القديم من ملف التهيئة الذي تم استبداله بواسطة ucf. بالإضافة إلى ذلك، يمكن إنشاء نسخ من ملف التهيئة باللاحقات ucf-new و ucf-dist؛ ويجب على نصوص المسؤول أن تفكر في إزالة نسخ ملف التهيئة بهذه الامتدادات أثناء الإزالة.


الخيارات

-h، --help

اطبع رسالة استخدام موجزة

-n، --no-action

التشغيل التجريبي. اطبع الإجراءات التي سيتم اتخاذها إذا تم استدعاء البرنامج النصي، ولكن لا تتخذ أي إجراء.

-d[n]، --debug=[n]

اضبط مستوى التصحيح على المستوى n (اختياري، n يكون افتراضيًا 1). يرجى ملاحظة أنه يجب ألا يكون هناك مسافات قبل الرقم n الاختياري. هذا يشغل معلومات تصحيح شاملة.

-p، --purge

يزيل جميع آثار الملف من ملف هاش الحالة. هذا ضروري للسماح بإعادة تثبيت الحزمة بعد إزالتها؛ لأن خلاف ذلك، تتم إزالة الملف الفعلي، ولكنه يظل في ملف هاش؛ وعند إعادة التثبيت لا يتم اتخاذ أي إجراء، لأن مجموع التحقق MD5 للملف الجديد يطابق الموجود في ملف هاش. باختصار، تذكر استخدام هذا الخيار في برنامج ما بعد الإزالة لكل ملف تكوين تتم إدارته بواسطة ucf عندما يتم إزالة الحزمة (بافتراض وجود ucf). ملاحظة: لا يلمس ucf الملف على القرص في هذه العملية، لذلك تظل إزالة أي ملفات مسؤولية الحزمة المستدعاة.

-v، --verbose

اجعل البرنامج النصي مفصلاً للغاية بشأن تعيين المتغيرات الداخلية.

-P foo، --package foo

لا تتبع عمليات إعادة توجيه dpkg-divert للحزمة foo عند تحديث ملفات التكوين.

-s foo، --src-dir foo

اضبط دليل المصدر (من المتوقع أن تكون المجاميع القديمة MD5 موجودة في ملفات ودلائل فرعية من هذا الدليل) إلى foo. افتراضيًا، يُفترض أن يكون الدليل الذي يوجد به الملف الجديد هو دليل المصدر. يؤدي تعيين هذا الخيار إلى إلغاء الإعدادات في متغير البيئة UCF_SOURCE_DIR، وفي متغير ملف التكوين conf_source_dir.

--sum-file foo

أجبر على قراءة المجاميع القديمة MD5 من هذا الملف، بدلاً من الافتراض بأنها موجودة في دليل المصدر. يؤدي تعيين هذا الخيار إلى إلغاء الإعدادات في متغير البيئة UCF_OLD_MDSUM_FILE، وفي متغير ملف التكوين conf_old_mdsum_file.

--three-way

يقوم هذا بتشغيل الخيار، أثناء التثبيت، لتقديم فرصة للمستخدم لرؤية دمج للتغييرات بين الإصدار القديم الذي قام بصيانته المستخدم والإصدار الجديد الذي قام بصيانته المستخدم في النسخة المحلية من ملف التكوين. إذا أعجب المستخدم بما يراه، فيمكنه أن يطلب دمج هذه التغييرات. يتيح ذلك الحصول على تغييرات جديدة من المستخدمين الآخرين ودمجها حتى مع الاحتفاظ بالتعديلات المحلية على ملف التكوين. يتم ذلك عن طريق أخذ ملف التكوين وتخزينه في منطقة ذاكرة تخزين مؤقتة أثناء التسجيل، واستخدام diff3 أثناء التثبيت (اسم الملف المخزن هو نسخة مشوهة من المسار الكامل لملف التكوين لتجنب التعارضات في مساحة الاسم).

--debconf-ok

أشر إلى أنه لا بأس من أن يستخدم ucf مثيل debconf قيد التشغيل بالفعل للمطالبات (لطالما كان من الجيد استخدام ucf عندما لا يكون debconf قيد التشغيل - فسوف يستدعي debconf حسب الحاجة).


--debconf-template foo
يُخبر `ucf` باستخدام نموذج `debconf` متعدد الاختيارات المحدد بدلاً من نموذج `debconf` الافتراضي الذي يوفره `ucf`. يتحمل المستخدم مسؤولية التأكد من أن النموذج المحدد موجود وأن لديه قائمة من الخيارات تتطابق مع تلك الموجودة في النموذج الافتراضي لـ `ucf`، ويجب أن يقوم بتعيين `Choices-C: ${CHOICES}` لضمان تطابق القيم التي يتم إرجاعها مع تلك الموجودة في النموذج الافتراضي. لاحظ أنه يجب أن تكون الخيارات مختلفة بناءً على ما إذا تم تعيين خيار `--three-way` أيضًا.

--state-dir /path/to/dir
يضبط دليل الحالة على `/path/to/dir` بدلاً من الدليل الافتراضي `/var/lib/ucf`. يُستخدم في الغالب للاختبار.

-Z
يضبط سياق أمان SELinux للملف الوجهة على النوع الافتراضي.

الاستخدام

حالة الاستخدام الأكثر شيوعًا بسيطة للغاية: استدعاء واحد في postinst عند التثبيت، واستدعاء واحد آخر في postrm لإخبار ucf بنسيان ملف التكوين عند إلغاء التثبيت (باستخدام خيار --purge). هذا كل ما هو مطلوب (بافتراض أن ucf لا يزال موجودًا على النظام).

يوصى أيضًا بتسجيل أي ملف تتم إدارته بواسطة ucf في سجل ucf. هذا يربط ملف التكوين بالحزمة التي ينتمي إليها. يتم ذلك عن طريق استدعاء بسيط لـ ucfr. يمكن للمستخدمين بعد ذلك الاستعلام عن العلاقة بين ملف التكوين والحزمة باستخدام الأداة ucfq. يرجى الاطلاع على الصفحات الدليلية المناسبة للحصول على التفاصيل.

يمكن للحزم التي تستخدم debhelper تبسيط إنشاء أجزاء البرنامج النصي الضرورية باستخدام المساعد dh_ucf.

إذا كان يتم الانتقال بملف تتم صيانته بواسطة برامج نصية من حالة غير محمية إلى الحماية التي يوفرها البرنامج النصي، فيمكن للمطور تسهيل الانتقال عن طريق تقليل الأسئلة التي قد يتم طرحها في وقت التثبيت. على وجه التحديد، يجب ألا يتم طرح أسئلة إذا كان الملف المعني هو نسخة غير معدلة تم شحنها في إصدار سابق من هذه الحزمة؛ ويمكن للمطور المساعدة من خلال إخبار البرنامج النصي حول قيم MD5 التاريخية التي احتوت عليها الإصدارات المنشورة من هذا الملف.

الطريقة للقيام بذلك هي إما إنشاء ملف يسمى <ملف جديد>.md5sum، مع وجود MD5 واحد في كل سطر (يتم تجاهل أسماء الملفات التي تستخدمها، باستثناء الإدخال المسمى default)، أو إنشاء دليل، يسمى <ملف جديد>.md5sum.d، يجب أن يحتوي على أي عدد من الملفات، يحتوي كل منها على سطر واحد، وهو قيمة MD5 للإصدار السابق من <ملف جديد>. أسماء هذه الملفات غير مهمة، باستثناء استثناء واحد: يتم التعامل مع الملف المسمى default بشكل خاص. على سبيل المثال، يستخدم المؤلف شخصيًا إما أرقام إصدارات الحزمة أو أسماء رموز الإصدار، مثل 7.6.3 أو بطاطا. إذا لم تتطابق أي من قيم MD5 التاريخية، فمن المؤكد تقريبًا إما أن السجل التاريخي لقيم MD5 غير مكتمل، أو أن المستخدم قد قام بتغيير ملف التكوين.

قيمة MD5 التاريخية الافتراضية

الاستثناء للقاعدة المذكورة أعلاه هو أنه إذا لم تتطابق أي من قيم MD5، وإذا كان الملف <ملف جديد>.md5sum.d/default موجودًا، أو إذا كان هناك سطر يتوافق مع ملف default في <ملف جديد>.md5sum، فسيتم استخدامه كقيمة MD5 الافتراضية للإصدار السابق من الحزمة التي يفترض أنها مثبتة على هذا الجهاز. كما ترى، ما لم تكن هناك عدد محدود من الحزم المنشورة سابقًا (مثل حزمة واحدة فقط)، فإن المطور يقوم أيضًا بإجراء تخمين مستنير، ولكن يتم توفير الخيار للمطور.

إذا لم يكن الملف <New file\>.md5sum، أو الدليل <New file\>.md5sum.d موجودًا، أو إذا لم تتطابق أي من قيم MD5، فإننا نختبر الملف المثبت <Destination> لنرى ما إذا كان هو نفسه <New file>. إذا لم يكن كذلك، فإننا نسأل المستخدم عما إذا كان يريد منا استبدال الملف.

يتم توفير تسهيل إضافي: اختياريًا، يمكن لـ ucf تخزين نسخة قديمة واحدة من نسخة المطور من ملف التكوين، وعند الترقية، يمكنه حساب التغييرات التي تم إجراؤها في نسخة المطور من ملف التكوين، وتطبيق هذا التصحيح على النسخة المحلية من الملف (بناءً على طلب المستخدم، بالطبع). توجد أيضًا أداة معاينة حيث يمكن للمستخدم فحص نتائج هذا الدمج قبل طلب اتخاذ الإجراء.

متغيرات البيئة

إذا تم تعيين المتغير UCF_FORCE_CONFFNEW، فإنه يجبر الملف الجديد على الكتابة فوق ملف الوجهة المثبت دائمًا، بينما إذا تم تعيين المتغير UCF_FORCE_CONFFOLD، فإنه يحتفظ بالملف المثبت بصمت. المتغير UCF_FORCE_CONFFMISS ينطبق فقط عندما لا يوجد ملف الوجهة المثبت (ربما بسبب حذفه من قبل المستخدم)، ويجبر ucf على إعادة إنشاء الملف المفقود (السلوك الافتراضي هو احترام رغبات المستخدم وعدم إعادة إنشاء الملف الذي تم حذفه محليًا). بالإضافة إلى ذلك، عندما يقوم ucf بإنشاء shell ثانوي، فإنه يملأ المتغيرات UCF_CONFFILE_NEW وUCF_CONFFILE_OLD والتي تكون مفيدة لفحص التغييرات.

يتم أيضًا دعم العلامات confmiss، وconfnew، وconfold، وconfdef، وconfask الخاصة بمتغير DPKG_FORCE. راجع dpkg(1) لمزيد من المعلومات.

الملفات

يقوم هذا البرنامج النصي بإنشاء الملف new_file.md5sum، وقد يقوم بنسخ الملف (الذي يُفترض أنه تم تضمينه مع الحزمة) <New file> إلى وجهته، <Destination>.

/var/lib/ucf/hashfile، و /var/lib/ucf/hashfile.X، حيث X هو عدد صحيح صغير، حيث يتم تخزين الإصدارات السابقة من ملف hashfile.

/etc/ucf.conf

أمثلة

إذا كانت الحزمة foo تريد استخدام ucf للتعامل مع تفاعل المستخدم لملف التكوين foo.conf، والذي يتم توفير نسخة منه في الحزمة على هيئة /usr/share/foo/configuration، فإن مجرد استدعاء بسيط لـ ucf في ملف ما بعد التثبيت (post inst) هو كل ما هو مطلوب:

ucf /usr/share/foo/configuration /etc/foo.conf

عند إزالة الحزمة (purge)، يجب إخبار ucf بأن ينسى الملف (راجع الأمثلة التفصيلية في /usr/share/doc/ucf/examples):

ucf --purge /etc/foo.conf يرجى ملاحظة أنه يمكن أيضًا استخدام purge لجعل ucf ينسى الحالة السابقة للملفات، وعند تثبيت أو تحديث الحزمة في المرة التالية، سيطلب ucf من المستخدم استبدال ملف التكوين الحالي. افعل ذلك إذا كنت تريد تغيير قرارك بعدم التحديث إلى نسخة يوفرها المطور من ملف التكوين.

كان الدافع وراء هذا البرنامج النصي هو توفير معالجة مماثلة لمعالجة ملفات التهيئة لملفات بدء حزم لغة Emacs (على سبيل المثال، ‎/etc/emacs21/site-start.d/50psgml-init.el). لا يتم تضمين ملفات البدء هذه مع الحزمة، بل يتم تثبيتها أثناء مرحلة التكوين بعد التثبيت بواسطة البرنامج النصي ‎/usr/lib/emacsen-common/emacs-package-install $package_name.

يهدف هذا البرنامج النصي إلى أن يتم استدعاؤه بواسطة برنامج تثبيت الحزم الموجود في ‎/usr/lib/emacsen-common/packages/install/$package_name لكل إصدار من إصدارات Emacs المثبتة عن طريق استدعائه بالقيم المناسبة لملف جديد (‎/usr/share/emacs/site-lisp/<pkg>/<pkg-init.el) وملف وجهة (‎/etc/emacs21/site-start.d/50<pkg-init.el)، ويجب أن يقوم بالباقي.

انظر أيضًا

ucf.conf(5)، ucfr(1)، ucfq(1)، dpkg(1)، dh_ucf(1)، diff3(1).

سياسة Debian Emacs، التي يتم شحنها مع حزمة emacsen-common.

المؤلف

تمت كتابة صفحة الدليل هذه بواسطة Manoj Srivastava <_>، لنظام Debian GNU/Linux.