٤، ٥، عفريت جت

(من المترجم) كلمة ‪“daemon”‬ ظهرت في MIT اسمًا للعمليات الخدمية التي تعمل في خلفية نظام التشغيل ولا يلاحظها المستخدم. جاءت التسمية نسبة إلى عفريت ماكسويل في الفيزياء، الذي يستعمل المعنى القديم للكلمة (في اليونانية والعربية)، وهو الكائن الغَيْبي الذي يعمل في الخفاء، وليس بالضرورة شيطانًا. فأترجمها «عفريت»، وأترجم فعل الصيرورة منها (‪“daemonize”‬) إلى «عفرتة». الاسم المناظر على ويندوز هو «خدمة» (‪“service”‬)، وقد بدأ استخدامه حديثًا في لينكس كذلك.

سنعدّ الآن عفريتًا ليقدِّم المستودعات بميفاق ‪“Git”‬. هذا هو الخيار الشائع لإتاحة وصول سريع بغير استيثاق لبيانات جت. تذكر أنه غير مستوثَق، فأي شيء تتيحه عبر هذا الميفاق سيكون عموميا للجميع داخل الشبكة.

فإذا كنت تستخدمه على خادوم خارج جدار حمايتك (firewall)، فعليك ألا تستخدمه إلا للمشروعات التي يمكن أن يراها العالم. وإذا كان خادومك داخل جدار حمايتك، فيمكنك استخدامه للمشروعات التي يحتاج الكثير من الناس أو الأجهزة الوصولَ إليه وصول قراءة فقط (مثل خواديم البناء أو الدمج المستمر (CI))، إن لم تكن تريد إضافة مفتاح SSH لكلٍ منهم.

وفي جميع الأحوال، إن ميفاق Git سهل الإعداد نسبيا. فلستَ تحتاج إلا إلى عفرتة هذا الأمر:

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

خيار --reuseaddr («أعد استخدام العنوان») يسمح بإعادة تشغيل الخادوم بغير انتظار انقضاء مهلة الاتصالات القديمة (timeout). وخيار --base-path («أساس المسار») يتيح للناس استنساخ المشروعات بغير تحديد المسار بكامله. أما المسار الذي في آخر الأمر يخبر عفريت جت مكان المستودعات التي سيُصدِّرها. وإذا كنت تستخدم جدار حماية (firewall)، فستحتاج أيضا إلى فتح منفذ 9418 فيه على الجهاز الذي تعدّه عليه.

طريقة عفرتة هذه العملية تختلف حسب نظام تشغيلك.

لأن systemd هو نظام الابتداء (init) الأشهر على توزيعات لينكس الحديثة، فيمكنك استخدامه لهذا الغرض. ليس عليك سوى إنشاء الملف /etc/systemd/system/git-daemon.service فيه هذا:

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

ربما لاحظت أن اسم المستخدم واسم المجموعة اللذين يُنفَّذ بهما عفريت جت هما git. يمكنك تغييرهما إلى ما يناسبك، ولكن تأكد من وجود اسم المستخدم المختار على نظامك. وتأكد أيضا من أن الملف التنفيذي لبرنامج جت موجود فعلا في المسار /usr/bin/git وإلا فغيّره إلى ما يناسب.

وأخيرا، نفّذ systemctl enable git-daemon لبَدء تشغيل الخدمة (العفريت) آليًّا مع بدء تشغيل النظام، ويمكنك تشغيل الخدمة بالأمر systemctl start git-daemon وإيقافها بالأم‍ر systemctl stop git-daemon.

على الأنظمة الأخرى، قد يناسبك xinetd أو بُرَيمج في نظام sysvinit أو شيئًا آخر — طالما أنك جعلت هذا الأمر مُعَفرَت ومُراقَب بطريقةٍ ما.

ثم تحتاج إلى إخبار جت بالمستودعات التي يسمح بالوصول إليها بغير استيثاق عبر خادوم جت. يمكنك فعل هذا بإنشاء ملف اسمه git-daemon-export-ok في كل مستودع.

$ cd /path/to/project.git
$ touch git-daemon-export-ok

وجود هذا الملف يخبر جت بقَبول إتاحة هذا المشروع بغير استيثاق.