Menu
৪.৬ সার্ভারে গিট – স্মার্ট HTTP
স্মার্ট HTTP
আমরা ইতোমধ্য SSL এর মাধ্যমে এক্সেস অথেনটিকেট এবং git:// এর মাধ্যমে এক্সেস আন-অথেনটিকেট করেছি , কিন্তু আরও একটি স্মার্ট এইচটিটিপি প্রটোকল আছে যা দুইটি কাজ এক সাথে করতে পারে। মূলত স্মার্ট এইচটিটিপি সেট আপ করা হল সার্ভারে একটা CGI এনাবল করা এবং এটা হল git-http-backend, যা সার্ভারে দেওয়া থাকে। CGI আসলে পাথ ও হেডারগুলো পড়ে, যা git fetch অথবা git push এইচটিটিপি URL এর মাধ্যমে পাঠায় এবং HTTP এর মাধ্যমে যোগাযোগ করতে পারে কি না তা যাচাই করে (HTTP ১.৬.৬ ভার্শন থেকে সকল ক্লাইন্টের জন্য উপযুক্ত)। ক্লাইন্ট যদি স্মার্ট হয়, তখন CGI ক্লাইন্ট এর সাথে স্মার্টলি যোগাযোগ করে অন্যথায় নীরব আচারনের জন্য এটি পিছু হটে (তাই এটি পুরানো ক্লাইন্টদের সাথে পড়ার জন্য ব্যাকওয়ার্ড কম্প্যাটিবল হয়ে থাকে)এখন আমারা একটা মৌলিক সেট আপের মাধ্যমে শুরু করব। আমরা Apache কে CGI সার্ভার ধরে সেটআপ করব। যদি আপনার Apache সেটআপ করা না থাকে তাহলে লিনাক্স বক্স দিয়ে নিচের মত করতে পারেনঃ
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
এটি mod_cgi, mod_alias, এবং mod_env মডিউল গুলোকে এনাবল করে, আর সঠিক ভাবে কাজ করার জন্য এই মডিউল গুলো প্রয়োজন হয়।
সার্ভার যেন রিপোজিটোরিতে লেখতে এবং পড়তে পারে সেই জন্য ডিরেক্টরি /srv/git থেকে www-data ইউনিক্স ইউজার গ্রুপ সেট আপ করতে হবে, কারন Apache ইন্সট্যান্স CGI স্ক্রিপ্ট কে চলমান করে যা উক্ত ইউজার হিসেবে চলমান থাকবে।
সার্ভার যেন রিপোজিটোরিতে লেখতে এবং পড়তে পারে সেই জন্য ডিরেক্টরি /srv/git থেকে www-data ইউনিক্স ইউজার গ্রুপ সেট আপ করতে হবে, কারন Apache ইন্সট্যান্স CGI স্ক্রিপ্ট কে চলমান করে যা উক্ত ইউজার হিসেবে চলমান থাকবে।
$ chgrp -R www-data /srv/git
এরপর আমাদের Apache কনফিগারেশনে এমন কিছু যোগ করতে হবে যাতে করে ওয়েব সার্ভারে /git এই পথে যা কিছু আসুক না কেন যেন git-http-backend কে চলমান রাখতে সহায়ক হয়।
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 শুধুমাত্র আন- অথেনটিকেটেড ক্লাইন্টদের git-daemon-export-ok ফাইলের সাথে রিপোজিটোরি প্রদান করবে যা Git daemon করেছিল।
অবশেষে আপনাকে Apache কে বলতে হবে যে git-http-backend এর রিকুয়েস্টগুলি কে অনুমতি দিতে এবং কোনভাবে অথেনটিকেট করতে, সম্ভবত নিচের মত একটি Auth ব্লক দিয়েঃ
অবশেষে আপনাকে Apache কে বলতে হবে যে git-http-backend এর রিকুয়েস্টগুলি কে অনুমতি দিতে এবং কোনভাবে অথেনটিকেট করতে, সম্ভবত নিচের মত একটি Auth ব্লক দিয়েঃ
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
আপনাকে .htpasswd একটা ফাইল তৈরি করতে হবে যেখানে সকল বৈধ ইউজারের পাসওয়ার্ড থাকবে।
“schacon” নামে এক জন ইউজারকে কিভাবে রাখতে হয় সেটা দেখানো হল নিচে:
“schacon” নামে এক জন ইউজারকে কিভাবে রাখতে হয় সেটা দেখানো হল নিচে:
$ htpasswd -c /srv/git/.htpasswd schacon
বিভিন্ন উপায়ে Apache ইউজার তৈরি করা যায়, আপনাকে যে কোন একটি নির্বাচন করতে হবে। উপরে যা আলোচনা করলাম এটা মোটমুটি সহজ উদাহরন । SSL এর মধ্যমে সেট আপ করতে হবে যাতে করে সকল ডেটা এনক্রিপ্ট হয়ে আসে।
যেহেতু অন্য কোন সার্ভার ব্যবহার করে ভাল ফলাফল পাওয়া যেতে পারে তাই Apache সার্ভারের কনফিগারেশনের জন্য আমরা খুব গভীরে যাব না। আবার ভিন্ন কোন অথেনটিকেশন প্রয়োজন হতেও পারে। মূল প্রক্রিয়া হল গিটের সাথে CGI থাকে যাকে git-http-backend বলা হয়। যখন একে ইনভোক করা হয় তখন HTTP এর মাধ্যমে ডেটা আদান-প্রদান করার জন্ন্য সকল নেগোশিয়েশন নিজেই করে। এটি নিজ থেকে কোন অথেনটিকেশন প্রয়োগ করে না। তবে এটা খুব সহজে নিয়ন্ত্রন করা যায় ওয়েব সার্ভার থেকে। CGI কে সমর্থন করে এমন যেকোন ওয়েব সার্ভার দিয়ে এটা করা যায়, তাই যে যেটা খুব ভাল পারে সেটাই ব্যবহার করাই ভাল।
যেহেতু অন্য কোন সার্ভার ব্যবহার করে ভাল ফলাফল পাওয়া যেতে পারে তাই Apache সার্ভারের কনফিগারেশনের জন্য আমরা খুব গভীরে যাব না। আবার ভিন্ন কোন অথেনটিকেশন প্রয়োজন হতেও পারে। মূল প্রক্রিয়া হল গিটের সাথে CGI থাকে যাকে git-http-backend বলা হয়। যখন একে ইনভোক করা হয় তখন HTTP এর মাধ্যমে ডেটা আদান-প্রদান করার জন্ন্য সকল নেগোশিয়েশন নিজেই করে। এটি নিজ থেকে কোন অথেনটিকেশন প্রয়োগ করে না। তবে এটা খুব সহজে নিয়ন্ত্রন করা যায় ওয়েব সার্ভার থেকে। CGI কে সমর্থন করে এমন যেকোন ওয়েব সার্ভার দিয়ে এটা করা যায়, তাই যে যেটা খুব ভাল পারে সেটাই ব্যবহার করাই ভাল।
নোট
এপাচি তে আরও অথেন্টিকেশন কনফিগারের জন্য আরও ইনফরমেশন এই লিংক এ দেয়া আছেঃ https://httpd.apache.org/docs/current/howto/auth.html
অন্যান্য ব্রাঞ্চের ক্ষেত্রে মার্জের অবস্থা জানার জন্যে আপনি সর্বদাই একটি অতিরিক্ত আর্গুমেন্ট সরবরাহ করতে পারবেন প্রথম ব্রাঞ্চটি চেক না করেই, যেমন, master ব্রাঞ্চে কোনটি মার্জ হয়নি?