السلام عليكم ورحمة الله وبركاته
والله زماااااااااااان عالكتابة هنا
... هذا الموضوع قمت بعمله باللغة الإنجليزية لأغراض العمل ولهذا قلت أعمله بالعربي لمشاركة المبدأ والطريقة مع الجميع لعله يكون محل فائدة لأحدكم ...
كيفية إستعمال Subversion لإدارة الملفات والإعدادات، أي إستعماله لغرض Configuration Management System ... حيث بعض الأحيان تقوم بعمل إعدادات معينة وبعد فترة تقوم بعمل إعدادات جديدة وكل هذا دون تسجيل أو حفظ لما قمت به ... فلو رغبت بالعودة الى الإعدادات السابقة لن تتمكن من ذلك إلا لو كنت حافظ الإعدادات وهذه مسألة غير صحية وأيضاً غير جيدة في حالة كان عندك أكثر من خادم تديره ...
طبعاً سنقوم بشرح كيفية تنصيب وإعداد Subversion لنعمل خادم SVN وذلك لكي نستعمله لحفظ إعداداتنا وتغييراتها ... وأيضاً يمكنك إستعماله لغرض حفظ مستنداتك والتغييرات التي تطرأ عليها ...
ملاحظة: لن أشرح في هذا الموضوع ما هو الـ Subversion ولا المستودعات Repositories ولا هيكليتها وذلك لأنها عبارة عن أجزاء كبيرة من كتاب Subversion، وأنصح كل مهتم بقراءة الكتاب بالكامل كما فعلت أنا ... الكتاب يوجد منه نسخة مجانية ومتوفرة هنا سواءاً للقراءة على النت أو تحميله ...
لتنصيب subversion كل ما عليك فعله هو:
- For Redhat/CentOS -
- For Debian/Ubuntu -
الآن لنقوم بعمل مستودع Repository الذي سنستعمله للأغراض التي ذكرناها ...
أو قم بإنشاءه في أي مكان تراه يناسبك ... فقط قم بتغيير المسار ...
الآن لنقوم بإضافة /etc مثلا الى svn ... في البداية نعمل المجلد الذي سنضع فيه /etc في المستودع repository وذلك ممكن من خلال:
لاحقا حين تكمل الإعدادات يمكنك عمل هذا المجلد من خلال الويب مثلاً:
الآن أذهب الى المجلد /etc:
بعد ذلك نفذ الأمر التالي:
هكذا أخبرنا svn بأن يضيف المجلد etc الى Version Control ... أرجوا أن لا تنسوا النقطة "." التي بآخر السطر أعلاه ... بعد ذلك لنقوم بإضافة الملفات والمجلدات كلها اليه:
والآن لم يتبقى لنا سوى إضافتهم بشكل حقيقي من خلال عمل commit:
الى الآن نستطيع الوصول الى المستودع من خلال نظام الملفات فقط ومن خلال ssh كذلك (هذه نتركها لوقت آخر) ... الآن لنقوم بإعداد خادم الأباتشي لكي يستطيع التعامل مع SVN ونتمكن من الوصول أليه من أي متصفح ومن أي مكان عن بعد ... نحتاج الى ذلك تركيب موديول خاص بالأباتشي:
- For Redhat/CentOS -
- For Debian/Ubuntu -
في هذا الشرح سأواصل الإعدادات بإستعمال توزيعة CentOS لكنه عملية إعداده على توزيعات دبيانية ليست بذلك الإختلاف الكبير فقط فروقات بسيطة في اماكن الإعدادات ...
الآن قم بفتح الملف الخاص بالـ subversion وفيه إعدادات أباتشي:
بعد ذلك ضع الإعدادات التالية (يرجى التعديل عليها حسب إحتياجاتك وإعداداتك):
أهم الأمور التي في ملف الإعدادات أعلاه هي:
الخيار SVNPath، حيث نستعمله للإشارة الى مكان وجود المستودع SVN Repository
أما ما يخص الخيار AuthzSVNAccessFile فهو لأغراض أمنية ... حيث يمكن من خلاله عمل Access Control أو ما يسمى بـ ACL على المستودعات ... وهذه تساعدنا في توزيع الصلاحيات على المستودع ... بحيث لا نقوم مثلاً بإعطاء صلاحيات وصول الى جميع المستودع سوى لأشخاص معيينيين (مدراء الأنظمة) وكذلك إن كنت تستعمل المستودع لحفظ مستنداتك ومستندات غيرك تستطيع من خلاله إعطاء صلاحيات لك على مكان تخزين مستنداتك دون وصول غيرك لها، ونفس الشيء بالنسبة لمستندات غيرك دون وصولك انت أو غيرك لها ... طبعاً يمكن توزيع الصلاحيات بناءاً على مستخدمين أو مجموعات مستخدمين ... لنوضح ذلك:
الآن لو نفرض أريد عمل ثلاث مجموعات ... واحدة لمدراء الأنظمة administrators وأخرى للموظفين Employee's وأخرى لفريق عمل الـ Documentation ... وأريد أن يكون صلاحياتهم كالتالي:
هذه المجموعة لها كامل الصلاحيات (كتابة وقراءة) على المستودع كما نلاحظ من خلال / ...
هذه المجموعة لها الصلاحيات القراءة فقط على جزء معيين من المستودع هو /workingfiles ...
هذه المجموعة لها كامل الصلاحيات (كتابة وقراءة) على جزء معيين من المستودع هو /workingfiles/doc ...
ملاحظة: طبعاً r تعني القراءة (read) و w تعني الكتابة (write) ...
طيب لنقوم بتحرير الملف الذي فيه هذه الإعدادات حسب ما حددناه في ملف إعدادات أباتشي أعلاه هو /usr/local/mysvn/conf/authz، ولهذا قم بالتالي:
وقم بإضافة التالي له:
قم بحفظ الملف وغلقه ... قمنا بعدل الإعدادات اللازمة لكل مجموعة ووضعنا مستخدمين لكل مجموعة، ففي المجموعة الأولى وضعنا المستخدم root وفي المجموعة الثانية ali و mohamed وفي المجموعة الثالثة والأخيرة وضعنا المستخدم sabri ... طبعاً كل هؤلاء المستخدمين لم نقم بإضافتهم بعد، لكننا حددنا صلاحياتهم على ضوء المجموعات ...
الآن السؤال الذي يدور في ذهني: لا اتوقع بإن إضافة مجموعة أخرى وصلاحيات معينة على مكان معيين هو بالأمر الصعب عليكم ... صح ؟
الآن لنقوم بإضافة المستخدمين جميعهم ... كل ما عليك فعله هو تنفيذ التالي (سيطلب منك إدخال كلمة سرية لكل مستخدم مرتين):
كما تلاحظون في أول أمر أستعملنا الخيار c وذلك لعمل الملف /etc/httpd/htpasswd في حالة لم يكن موجود ... بعد ذلك نقوم بالإضافة فقط ...
الآن لنقوم بالتأكد من عمل الأباتشي بعد إعادة التشغيل:
ولنقوم بتشغيل الأباتشي الآن أو إعادة تشغيله:
الآن للوصول الى هذه المستودعات كل ما عليك فعله هو إستعمال الرابط الصحيح لكل مستخدم وإدخال اسم المستخدم والكلمة السرية له ... مثلا بالنسبة للمستخدم root فهو قادر على الوصول اليه من خلال:
بينما المستخدمين ali و mohamed من خلال:
ولا يستطيع المستخدمين ali أو mohamed من الوصول الى ما يستطيع الوصول أليه root فلقد حددنا صلاحياته على workingfiles وما هو أسفلها فقط ...
وأخيراً لوصول المستخدم sabri كل ما عليك فعله هو إستعمال الرابط التالي:
ونفس الشيء الآن بالنسبة لـ sabri لا يستطيع الوصول الى ما هو أعلى من doc فقط ما هو بداخله ...
إن شاء الله تستفيدون من هذه الطريقة لعمل Configuration Management System على خوادمكم ... حيث الآن يمكنك متابعة جميع التغييرات وتسجيلها والعودة لأي تغيير قمت به حين تحتاج الى ذلك بكل سهولة ...
إن شاء الله في موضوع آخر نتحدث عن كيفية إضافة ملف جديد وحذف ملف وتحديث ملف أو مجلد الى آخره من العمليات التي ستحتاجها بشكل يومي من خلال الأمر svn ... وإن لم تكن تستطيع الصبر؟ وهذا ما اتمناه، هو أن تراجع الكتاب الرائع Version Control with Subversion على الرابط التالي: أضغط هنا
موفقين ...
والله زماااااااااااان عالكتابة هنا

كيفية إستعمال Subversion لإدارة الملفات والإعدادات، أي إستعماله لغرض Configuration Management System ... حيث بعض الأحيان تقوم بعمل إعدادات معينة وبعد فترة تقوم بعمل إعدادات جديدة وكل هذا دون تسجيل أو حفظ لما قمت به ... فلو رغبت بالعودة الى الإعدادات السابقة لن تتمكن من ذلك إلا لو كنت حافظ الإعدادات وهذه مسألة غير صحية وأيضاً غير جيدة في حالة كان عندك أكثر من خادم تديره ...
طبعاً سنقوم بشرح كيفية تنصيب وإعداد Subversion لنعمل خادم SVN وذلك لكي نستعمله لحفظ إعداداتنا وتغييراتها ... وأيضاً يمكنك إستعماله لغرض حفظ مستنداتك والتغييرات التي تطرأ عليها ...
ملاحظة: لن أشرح في هذا الموضوع ما هو الـ Subversion ولا المستودعات Repositories ولا هيكليتها وذلك لأنها عبارة عن أجزاء كبيرة من كتاب Subversion، وأنصح كل مهتم بقراءة الكتاب بالكامل كما فعلت أنا ... الكتاب يوجد منه نسخة مجانية ومتوفرة هنا سواءاً للقراءة على النت أو تحميله ...
لتنصيب subversion كل ما عليك فعله هو:
- For Redhat/CentOS -
كود:
yum install subversion
- For Debian/Ubuntu -
كود:
apt-get install subversion
الآن لنقوم بعمل مستودع Repository الذي سنستعمله للأغراض التي ذكرناها ...
كود:
svnadmin create /usr/local/mysvn
أو قم بإنشاءه في أي مكان تراه يناسبك ... فقط قم بتغيير المسار ...
الآن لنقوم بإضافة /etc مثلا الى svn ... في البداية نعمل المجلد الذي سنضع فيه /etc في المستودع repository وذلك ممكن من خلال:
كود:
svn mkdir --parents file:///usr/local/mysvn/hosts/etc -m "/etc Directory in repository for $host"
لاحقا حين تكمل الإعدادات يمكنك عمل هذا المجلد من خلال الويب مثلاً:
كود:
svn mkdir http://example.com/mysvn/hosts/etc -m "/etc Directory in repository for $host"
الآن أذهب الى المجلد /etc:
كود:
cd /etc
بعد ذلك نفذ الأمر التالي:
كود:
svn checkout file:///usr/local/mysvn/hosts/etc .
هكذا أخبرنا svn بأن يضيف المجلد etc الى Version Control ... أرجوا أن لا تنسوا النقطة "." التي بآخر السطر أعلاه ... بعد ذلك لنقوم بإضافة الملفات والمجلدات كلها اليه:
كود:
svn add *
والآن لم يتبقى لنا سوى إضافتهم بشكل حقيقي من خلال عمل commit:
كود:
svn commit -m "$host /etc config files"
الى الآن نستطيع الوصول الى المستودع من خلال نظام الملفات فقط ومن خلال ssh كذلك (هذه نتركها لوقت آخر) ... الآن لنقوم بإعداد خادم الأباتشي لكي يستطيع التعامل مع SVN ونتمكن من الوصول أليه من أي متصفح ومن أي مكان عن بعد ... نحتاج الى ذلك تركيب موديول خاص بالأباتشي:
- For Redhat/CentOS -
كود:
yum install mod_dav_svn
- For Debian/Ubuntu -
كود:
apt-get install libapache2-svn
في هذا الشرح سأواصل الإعدادات بإستعمال توزيعة CentOS لكنه عملية إعداده على توزيعات دبيانية ليست بذلك الإختلاف الكبير فقط فروقات بسيطة في اماكن الإعدادات ...
الآن قم بفتح الملف الخاص بالـ subversion وفيه إعدادات أباتشي:
كود:
vim /etc/httpd/conf.d/subversion.conf
بعد ذلك ضع الإعدادات التالية (يرجى التعديل عليها حسب إحتياجاتك وإعداداتك):
كود:
<Location /mysvn> DAV svn SVNPath /usr/local/mysvn AuthzSVNAccessFile /usr/local/mysvn/conf/authz Satisfy Any Require valid-user AuthType Basic AuthName "Subversion repos" AuthUserFile /etc/httpd/htpasswd </Location>
أهم الأمور التي في ملف الإعدادات أعلاه هي:
الخيار SVNPath، حيث نستعمله للإشارة الى مكان وجود المستودع SVN Repository
أما ما يخص الخيار AuthzSVNAccessFile فهو لأغراض أمنية ... حيث يمكن من خلاله عمل Access Control أو ما يسمى بـ ACL على المستودعات ... وهذه تساعدنا في توزيع الصلاحيات على المستودع ... بحيث لا نقوم مثلاً بإعطاء صلاحيات وصول الى جميع المستودع سوى لأشخاص معيينيين (مدراء الأنظمة) وكذلك إن كنت تستعمل المستودع لحفظ مستنداتك ومستندات غيرك تستطيع من خلاله إعطاء صلاحيات لك على مكان تخزين مستنداتك دون وصول غيرك لها، ونفس الشيء بالنسبة لمستندات غيرك دون وصولك انت أو غيرك لها ... طبعاً يمكن توزيع الصلاحيات بناءاً على مستخدمين أو مجموعات مستخدمين ... لنوضح ذلك:
الآن لو نفرض أريد عمل ثلاث مجموعات ... واحدة لمدراء الأنظمة administrators وأخرى للموظفين Employee's وأخرى لفريق عمل الـ Documentation ... وأريد أن يكون صلاحياتهم كالتالي:
كود PHP:
1- Administration Group
name: administrators
perm: rw
repo: /
كود PHP:
2- Employee's Group
name: employee
perm: r
repo: /workingfiles
كود PHP:
3- Documentation Group
name: documentation
perm: rw
repo: /workingfiles/doc
ملاحظة: طبعاً r تعني القراءة (read) و w تعني الكتابة (write) ...
طيب لنقوم بتحرير الملف الذي فيه هذه الإعدادات حسب ما حددناه في ملف إعدادات أباتشي أعلاه هو /usr/local/mysvn/conf/authz، ولهذا قم بالتالي:
كود:
vim /usr/local/mysvn/conf/authz
وقم بإضافة التالي له:
كود:
[groups] administrators = root employee = ali, mohamed documentation = sabri [/] @administrators = rw [/workingfiles] @employee = r [/workingfiles/doc] @documentation = rw
الآن السؤال الذي يدور في ذهني: لا اتوقع بإن إضافة مجموعة أخرى وصلاحيات معينة على مكان معيين هو بالأمر الصعب عليكم ... صح ؟

الآن لنقوم بإضافة المستخدمين جميعهم ... كل ما عليك فعله هو تنفيذ التالي (سيطلب منك إدخال كلمة سرية لكل مستخدم مرتين):
كود:
htpasswd -cm /etc/httpd/htpasswd root htpasswd -m /etc/httpd/htpasswd ali htpasswd -m /etc/httpd/htpasswd mohamed htpasswd -m /etc/httpd/htpasswd sabri
كما تلاحظون في أول أمر أستعملنا الخيار c وذلك لعمل الملف /etc/httpd/htpasswd في حالة لم يكن موجود ... بعد ذلك نقوم بالإضافة فقط ...
الآن لنقوم بالتأكد من عمل الأباتشي بعد إعادة التشغيل:
كود:
chkconfig httpd on
ولنقوم بتشغيل الأباتشي الآن أو إعادة تشغيله:
كود:
service httpd restart
الآن للوصول الى هذه المستودعات كل ما عليك فعله هو إستعمال الرابط الصحيح لكل مستخدم وإدخال اسم المستخدم والكلمة السرية له ... مثلا بالنسبة للمستخدم root فهو قادر على الوصول اليه من خلال:
كود PHP:
http://example.com/mysvn
بينما المستخدمين ali و mohamed من خلال:
كود PHP:
http://example.com/mysvn/workingfiles
ولا يستطيع المستخدمين ali أو mohamed من الوصول الى ما يستطيع الوصول أليه root فلقد حددنا صلاحياته على workingfiles وما هو أسفلها فقط ...
وأخيراً لوصول المستخدم sabri كل ما عليك فعله هو إستعمال الرابط التالي:
كود PHP:
http://example.com/mysvn/workingfiles/doc
ونفس الشيء الآن بالنسبة لـ sabri لا يستطيع الوصول الى ما هو أعلى من doc فقط ما هو بداخله ...
إن شاء الله تستفيدون من هذه الطريقة لعمل Configuration Management System على خوادمكم ... حيث الآن يمكنك متابعة جميع التغييرات وتسجيلها والعودة لأي تغيير قمت به حين تحتاج الى ذلك بكل سهولة ...
إن شاء الله في موضوع آخر نتحدث عن كيفية إضافة ملف جديد وحذف ملف وتحديث ملف أو مجلد الى آخره من العمليات التي ستحتاجها بشكل يومي من خلال الأمر svn ... وإن لم تكن تستطيع الصبر؟ وهذا ما اتمناه، هو أن تراجع الكتاب الرائع Version Control with Subversion على الرابط التالي: أضغط هنا
موفقين ...
تعليق