٤، ٦، ميفاق HTTP الذكي
لدينا الآن وصولا مستوثَقا عبر SSH ووصولا غير مستوثَق عبر git://، ولكن يوجد أيضا ميفاق يمكنه عمل كِلا الأمرين في وقت واحد.
ليس إعداد HTTP الذكي إلا أن تفعّل على الخادوم بُرَيمج CGI المرفق مع جت المسمى git-http-backend.
يقرأ هذا البريمج المسار والترويسات (headers) التي يرسلها أمر الاستحضار git fetch أو الدفع git push إلى رابط HTTP ويحدد إذا كان العميل يستطيع التواصل عبر HTTP (وهذا صحيح لأي عميل جت منذ الإصدارة 1.6.6).
وإذا رأي البريمج أن العميل ذكي، فسيتواصل معه بذكاء؛ وإلا فسيتواصل معه بالميفاق البليد (ولذا فهو متوافق مع الإصدارات القديمة التي تريد القراءة فحسب).
لنرَ إعدادا يسيرا جدا. سنعدّ فيه أباتشي (Apache) ليكون خادوم CGI. إن لم يكن لديك أباتشي مُعدًّا، فيمكنك إعداده على حاسوب لينكسي بفعل شيءٍ كهذا:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
هذا أيضا يفعّل وِحدات mod_cgi و mod_alias و mod_env، التي تحتاجها جميعها حتى يعمل هذا الإعداد بشكل صحيح.
سنحتاج أيضا إلى ضبط مجموعة المستخدمين اليونكسية الخاصة بمجلدات /srv/git إلى www-data، حتى يتسنّى لخادوم الوب قراءة المستودعات وتحريرها، لأن عملية أباتشي التي تشغّل بُريمج CGI الخاص بنا تعمل (مبدئيا) تحت هذا المستخدم:
$ chgrp -R www-data /srv/git
وكذلك سنحتاج إلى إضافة بعض الأشياء إلى تهيئة أباتشي لتشغيل git-http-backend معالجًا (“handler”) لأي شيء يأتي من المسار /git على خادومك.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
إن أهملت متغير البيئة GIT_HTTP_EXPORT_ALL، فلن يتيح جت للعملاء غير المستوثَقين إلا تلك المستودعات التي فيها الملف git-daemon-export-ok، تماما مثلما فعل عفريت جت.
وأخيرا سنحتاج إلى إخبار أباتشي أن يسمح بالطلبات إلى git-http-backend وأن يستوثق عمليات التحرير بطريقةٍ ما، مثلا بكتلة Auth كهذه:
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
يتطلب هذا إنشاء ملف .htpasswd (يبدأ اسمه بنقطه) فيه كلمات المرور لجميع المستخدمين المقبولين.
هذا مثال على إضافة المستخدم “schacon” إليه:
$ htpasswd -c /srv/git/.htpasswd schacon
لدى أباتشي طرائق عديدة لاستيثاق المستخدمين؛ عليك اختيار إحداها وتطبيقها. ليس هذا إلا أيسر مثال استطعنا الإتيان به. ومن شبه المؤكد أنك أيضا ستحتاج إلى إعداد هذا عبر SSH حتى تكون هذه البيانات كلها معمّاة.
لا نود الخوض عميقا في دوامة دقائق تهيئة أباتشي، لأنك قد تستخدم خادوما آخر أو أن لديك احتياجات استيثاق مختلفة.
وإنما الأمر أن مع جت بريمج CGI اسمه git-http-backend، الذي عند ندائه يفعل كل المفاوضات لإرسال واستقبال البيانات عبر HTTP.
ولكنه لا ينفذ أي استيثاق بنفسه. لكن هذا سهل التحكم فيه في خادوم الوب الذي يناديه.
يمكنك فعل هذا مع ربما أي خادوم وب يدعم CGI، لذا فانطلق مع الخادوم الذي تعرفه حق المعرفة.
|
لمزيد من المعلومات عن تهيئة الاستيثاق في أباتشي، انظر وثائق أباتشي (بالإنجليزية) هنا: https://httpd.apache.org/docs/current/howto/auth.html. |