<?xml version="1.0"?>
<rss version="2.0"><channel><title>DevOps: &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</title><link>https://academy.hsoub.com/devops/servers/page/3/?d=4</link><description>DevOps: &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</description><language>ar</language><item><title>&#x62A;&#x62B;&#x628;&#x64A;&#x62A; Graylog &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; &#x648;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645;&#x647; &#x644;&#x62A;&#x62D;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x633;&#x62C;&#x644;&#x627;&#x62A; (Logs)</title><link>https://academy.hsoub.com/devops/servers/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-graylog-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D9%87-%D9%84%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-logs-r218/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/graylog-ubuntu-logs.png.3b698e011a8471d6a5a92a3e18543fb4.png" /></p>

<p id="مقدمة">
	يتناول هذا المقال كيفية تثبيت الإصدار 1.3 من برنامج Graylog (يُشار إليه أحيانا بـ Graylog2) وإعداده لتجميع سجلات نظام التشغيل Syslog في موضِع مركزي. Graylog هو أداة فعّالة لإدارة السجلات وتحليلها تُستخدم في حالات كثيرة من مراقبة Monitoring الدخول عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> والأنشطة غير المعتادة إلى تنقيح Debugging التطبيقات. تعتمد الأداة على Elasticsearch، جافا وقاعدة بيانات MongoDB.
</p>

<p style="text-align: center;">
	<img alt="graylog-ubuntu-logs.png.e144983492603596" class="ipsImage ipsImage_thumbnailed" data-fileid="14222" data-unique="b5okf9zrg" src="https://academy.hsoub.com/uploads/monthly_2016_03/graylog-ubuntu-logs.png.e144983492603596854ec4806dd2fd65.png"></p>

<p>
	يمكن استخدام Graylog لتجميع أنواع مختلفة من السجلات ومراقبتها، إلا أننا سنقتصر في هذا الدرس على تجميع سجلات النظام.
</p>

<h2 id="مكونات-graylog">
	مكونات Graylog
</h2>

<p>
	توجد أربعة عناصر أساسية في Graylog:
</p>

<ul><li>
		<strong>عُقد خادوم Graylog</strong>: تشتغل عاملا لاستقبال الرسائل ومعالجتها، كما أنها تتواصل مع بقية العناصر (غير عقد الخادوم). يعتمد أداء هذه العقد على قدرات معالج Processor الخادوم المضيف.
	</li>
	<li>
		<strong>عُقد Elasticsearch</strong>: تخزّن الرسائل والسجلات. يعتمد أداءها على الذاكرة الحية RAM وقدرة الأقراص على الإدخال/الإخراج.
	</li>
	<li>
		<strong>قاعدة بيانات MongoDB</strong>: تخزّن البيانات الوصفية Metadata؛ لا تُستحث كثيرا.
	</li>
	<li>
		واجهة المستخدم (صفحات ويب).
	</li>
</ul><p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_02/01_graylog_setup.png.0ad408cd1ecc53266759bd7b6c7cb74e.png"><img alt="01_graylog_setup.thumb.png.7e5f5d6b260a5" class="ipsImage ipsImage_thumbnailed" data-fileid="13037" data-unique="7dubphoi7" src="https://academy.hsoub.com/uploads/monthly_2016_02/01_graylog_setup.thumb.png.7e5f5d6b260a53e4012df55fe2677555.png"></a>
</p>

<h2 id="إعداد-graylog-القاعدي">
	إعداد Graylog القاعدي
</h2>

<p>
	سننفذ في هذا الدرس إعدادا قاعديا لـGraylog توجد جميع العناصر فيه على نفس الخادوم. يُستحسن في بيئات الإنتاج الكبيرة أن يُضبط كل مكوِّن على خادوم منفصل لتحسين الأداء.
</p>

<h3 id="المتطلبات">
	المتطلبات
</h3>

<p>
	ستحتاج من أجل تنفيذ الخطوات المشروحة في هذا الدرس إلى حساب إداري على خادوم أوبنتو 14.04 ذي ذاكرة عشوائية لا تقلّ عن 2GB. طريقة إعداد الحساب مشروحة في درس <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7%D8%A6%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r4/">الإعداد الابتدائي لخادوم أوبنتو 14.04</a>. إن كانت ذاكرة الوصول العشوائي لديك أقل من 2GB فلن تستطيع تشغيل جميع مكونات Graylog.
</p>

<p>
	نبدأ بتثبيت MongoDB.
</p>

<h3 id="تثبيت-mongodb">
	تثبيت MongoDB
</h3>

<p>
	تثبيت MongoDB سهل وسريع. نفّذ الأمر التالي لاستيراد مفتاح GPG الخاص بـ MongoDB إلى <code>apt</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_7">
<span class="pln">sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10</span></pre>

<p>
	ثم أنشئ قائمة مصادر MongoDB بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_9">
<span class="pln">echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list</span></pre>

<p>
	حدّث أرشيف الحزم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_11">
<span class="pln">sudo apt-get update</span></pre>

<p>
	ثم نثبّت الإصدار المستقر Stable من MongoDB بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_13">
<span class="pln">sudo apt-get install mongodb-org</span></pre>

<p>
	يجب أن تكون قاعدة بيانات MongoDB الآن جاهزة وتعمل على الخادوم. يمكنك التأكد من ذلك بتنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_15">
<span class="pln">sudo service mongod status</span></pre>

<p>
	لتشغيل قاعدة البيانات (إن لم تشتغل لسبب ما):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_17">
<span class="pln">sudo service mongod start</span></pre>

<h3 id="تثبيت-java">
	تثبيت Java
</h3>

<p>
	يحتاج Elasticsearch لجافا حتى يعمل، لذا سنثبته. ينصح Elasticsearch بتثبيت Oracle Java 8، وهو ما سنفعله (على الرغم من ذلك، إلا أن Elasticsearch ينبغي أن يعمل دون مشاكل مع OpenJDK).
</p>

<p>
	أضف مستودع PPA الخاص بـ ـOracle Java إلى <code>apt</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_19">
<span class="pln">sudo add-apt-repository ppa:webupd8team/java</span></pre>

<p>
	ثم حدّث قاعدة بيانات الحزم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_21">
<span class="pln">sudo apt-get update</span></pre>

<p>
	نفذ أمر تثبيت Oracle Java 8 التالي (واقبل شروط الرخصة في النافذة المنبثقة):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_23">
<span class="pln">sudo apt-get install oracle-java8-installer</span></pre>

<p>
	بعد اكتمال تثبيت جافا يأتي دور Elasticsearch.
</p>

<h3 id="تثبيت-elasticsearch">
	تثبيت Elasticsearch
</h3>

<p>
	نحتاج لإصدار من Elasticsearch سابق للإصدار 2.0 ليعمل معه Graylog، لذا سنثبّت الإصدار 1.7 من Elasticsearch.
</p>

<p>
	نستورد مفتاح GPG العمومي الخاص بـ ـElasticsearch إلى <code>apt</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_25">
<span class="pln">wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -</span></pre>

<p>
	قد تحتاج لإدخال كلمة السر الخاصة بالمستخدم الجذر.
</p>

<p>
	ثم أنشئ قائمة مورد لـ Elasticsearch:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_27">
<span class="pln">echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.x.list</span></pre>

<p>
	نحدّث بيانات الحزم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_29">
<span class="pln">sudo apt-get update</span></pre>

<p>
	ثم نثبت Elasticsearch:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_31">
<span class="pln">sudo apt-get -y install elasticsearch</span></pre>

<p>
	الخطوة الموالية هي إعداد Elasticsearch؛ افتح ملف التعديل:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_33">
<span class="pln">sudo vi /etc/elasticsearch/elasticsearch.yml</span></pre>

<p>
	ابحث عن فقرة <code>cluster.name</code> ثم انزع عنها علامة التعليق <code>#</code> وأبدل القيمة المبدئية بـ <code>graylog-development</code> (الاسم الذي اخترناه للعنقود Cluster. لا يمكن أن يكون لعنقودين في نفس الشبكة نفس الاسم):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_35">
<span class="pln">cluster.name: graylog-development</span></pre>

<p>
	يستعمل Elasticsearch المنفذ Port رقم <code>9200</code>. سنمنع المتصلين من خارج الشبكة المحلية من الوصول إليه. اعثر على السطر الذي يحدّد المضيف على الشبكة <code>network.host</code>، أزل علامة التعليق وضع مكانها <code>localhost</code> (المضيف المحلي) كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_37">
<span class="pln">network.host: localhost</span></pre>

<p>
	احفظ ملف <code>elasticsearch.yml</code> ثم أغلقه. أعد تشغيل Elasticsearch:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_39">
<span class="pln">sudo service elasticsearch restart</span></pre>

<p>
	نفذ الأمر التالي لتشغيل Elasticsearch مع بدء تشغيل النظام:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_41">
<span class="pln">sudo update-rc.d elasticsearch defaults 95 10</span></pre>

<p>
	انتظر بضع لحظات ثم نفذ الأمر التالي للتأكد من أن Elasticsearch يعمل كما يرام:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_43">
<span class="pln">curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'</span></pre>

<p>
	تظهر نتيجة الأمر كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_45">
<span class="pln">{
"cluster_name" : "graylog-development",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 1,
"active_shards" : 1,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0
}</span></pre>

<h3 id="تثبيت-خادوم-graylog">
	تثبيت خادوم Graylog
</h3>

<p>
	يمكننا الآن بعد تجهيز المتطلبات تثبيتُ برنامج Graylog. نبدأ بتثبيت خادوم Graylog.
</p>

<p>
	ننزل حزمة مستودع Graylog في المجلد الشخصي للمستخدم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_47">
<span class="pln">cd ~
wget https://packages.graylog2.org/repo/packages/graylog-1.3-repository-ubuntu14.04_latest.deb</span></pre>

<p>
	ونثبتها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_49">
<span class="pln">sudo dpkg -i graylog-1.3-repository-ubuntu14.04_latest.deb</span></pre>

<p>
	تضيف هذه الحزمة عند تثبيتها مستودع Graylog إلى قائمة المستودعات لدى النظام.
</p>

<p>
	قبل تثبيت حزمة خادوم Graylog نتأكد من أن <code>apt-transport-https</code> التي تمكّن من تنزيل حزم <code>apt</code> باتصال آمن مثبتة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_51">
<span class="pln">sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get install graylog-server</span></pre>

<p>
	سنستخدم حزمة <code>pwgen</code> لتوليد مفاتيح سرية لذا سنثبتها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_53">
<span class="pln">sudo apt-get install pwgen</span></pre>

<p>
	سنحتاج لضبط كلمة سر مدير خادوم Graylog ومفتاحه الخاص. يُضبط المفتاح الخاص في ملف <code>server.conf</code> بتحديد قيمة معطى <code>password_secret</code>. يمكن توليد مفتاح عشوائي وإدراجه في إعداد Graylog عبر الأمرين التاليين:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_55">
<span class="pln">SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf</span></pre>

<p>
	تُعيَّن كلمة سر المدير بإنشاء مجموع تحقق Checksum لكلمة السر المرغوبة ثم تحديد قيمة المعطى <code>root_password_sha2</code> في ملف إعداد Graylog بمجموع التحقق المُنشأ.
</p>

<p>
	أنشئ مجموع التحقق الخاص بكلمة السر بتنفيذ الأمر أدناه مع إبدال <code>password</code> بكلمة السر التي ترغب فيها. يدرج أمر <code>sed</code> في السطر الثاني مجموع التحقق في ملف إعداد Graylog (يمكنك تنفيذ أمر <code>shasum</code> ثم إدراج النتيجة يدويا في الملف <code>server.conf</code>):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_57">
<span class="pln">PASSWORD=$(echo -n password | shasum -a 256 | awk '{print $1}')
sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf</span></pre>

<p>
	نفتح ملف <code>server.conf</code> لتحريره:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_59">
<span class="pln">sudo vi /etc/graylog/server/server.conf</span></pre>

<p>
	ستجد أن قيمتي المعطيين <code>password_secret</code> و<code>root_password_sha2</code> عبارة عن سلسلة محارف Strings عشوائية هي ناتج الأوامر أعلاه.
</p>

<p>
	نعيد تعيين قيمة المعطى <code>rest_transport_uri</code> التي هي وسيلة اتصال واجهة ويب Graylog بخادومه. بما أننا نثبت جميع العناصر على نفس الخادوم فسنحدّد القيمة <code>127.0.0.1</code> أو <code>localhost</code>. اعثُر على المعطى <code>rest_transport_uri</code> وعدّل قيمته لتصبح على النحو التالي (مع إزالة علامة التعليق أمام السطر <code>#</code>):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_61">
<span class="pln">rest_transport_uri = http://127.0.0.1:12900/</span></pre>

<p>
	نغيّر قيمة معطى <code>elasticsearch_shards</code> إلى <code>1</code> نظرا لأن لدينا عامل Elasticsearch وحيدا وهو الخادوم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_63">
<span class="pln">elasticsearch_shards = 1</span></pre>

<p>
	ثم نغير قيمة المعطى <code>elasticsearch_cluster_name</code> إلى <code>graylog-development</code> (نفس الاسم الذي حددناه أعلاه لمعطى <code>cluster.name</code>):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_65">
<span class="pln">elasticsearch_cluster_name = graylog-development</span></pre>

<p>
	نزيل علامة التعليق من أمام السطرين التاليين لاستخدام اتصال من نوع <code>unicast</code> بدلا من <code>multicast</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_67">
<span class="pln">elasticsearch_discovery_zen_ping_multicast_enabled = false
elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300</span></pre>

<p>
	احفظ الملف ثم أغلقه. خادوم Graylog الآن مضبوط وجاهز للعمل. نشغّل خادوم Graylog بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_69">
<span class="pln">sudo java -jar /usr/share/graylog-server/graylog.jar server</span></pre>

<p>
	تظهر في مخرجات الأمر العبارتان التاليتان دلالة على نجاح تشغيل خادوم Graylog:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_71">
<span class="pln">Started REST API at </span><span class="tag">&lt;http</span><span class="pln">:</span><span class="pun">//</span><span class="pln">127.0.0.1:12900</span><span class="tag">/&gt;</span><span class="pln">
Graylog server up and running</span></pre>

<p>
	الخطوة الموالية هي تثبيت واجهة ويب Graylog.
</p>

<h3 id="تثبيت-واجهة-ويب-graylog">
	تثبيت واجهة ويب Graylog
</h3>

<p>
	ننفذ أمر التثبيت التالي للحصول على واجهة ويب Graylog:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_73">
<span class="pln">sudo apt-get install graylog-web</span></pre>

<p>
	الخطوة التالية هي إعداد المفتاح السري لواجهة الويب الذي يمثله معطى <code>application.secret</code> في ملف الإعداد <code>web.conf</code>. نطبق نفس الطريقة السابقة لتوليد مفتاح سري وإدراجه:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_75">
<span class="pln">SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /etc/graylog/web/web.conf</span></pre>

<p>
	افتح ملف إعداد واجهة الويب لتحريره:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_77">
<span class="pln">sudo vi /etc/graylog/web/web.conf</span></pre>

<p>
	نحتاج لتحديث ملف الإعداد لتحديد قيمة المعطى <code>graylog2-server.uris</code> التي هي قائمة من مسارات URI خاصة بخواديم Graylog. بما أن لدينا عقدة خادوم واحدة فيجب أن تطابق قيمة <code>graylog2-server.uris</code> قيمةَ المعطى <code>rest_listen_uri</code> في إعداد الخادوم (أي <code>http://127.0.0.1:12900/</code>):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_79">
<span class="pln">graylog2-server.uris="http://127.0.0.1:12900/"</span></pre>

<p>
	احفظ الملف ثم أغلقه. يجب نسخ ملف الإعداد إلى المسار <code>/usr/share/graylog-web/conf/web.conf</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_81">
<span class="pln">sudo cp /etc/graylog/web/web.conf /usr/share/graylog-web/conf/web.conf</span></pre>

<p>
	ننفذ الأمر التالي لتشغيل واجهة ويب Graylog:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_83">
<span class="pln">sudo /usr/share/graylog-web/bin/graylog-web-interface</span></pre>

<p>
	نستطيع الآن استخدام واجهة الويب، وهو ما سنفعله في الفقرات التالية.
</p>

<h2 id="إعداد-graylog-لاستقبال-رسائل-النظام-syslog">
	إعداد Graylog لاستقبال رسائل النظام Syslog
</h2>

<p>
	أدخل عنوان الويب التالي إلى شريط العناوين في متصفحك المفضل:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_85">
<span class="pln">http://graylog_public_IP:9000/</span></pre>

<p>
	يمثّل <code>graylog_public_IP</code> عنوان IP العمومي لخادومك.
</p>

<p>
	ستظهر لديك واجهة تطلب اسم المستخدم وكلمة السر. أدخل <code>admin</code> وكلمة السر التي اخترتها أثناء إعداد خادوم Graylog.
</p>

<p>
	ثم بعد الدخول الواجهة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_02/02_graylog_dashboard.png.744f67173ec6bbf0bdbe8f57e46e735c.png"><img alt="02_graylog_dashboard.thumb.png.8cdd14f09" class="ipsImage ipsImage_thumbnailed" data-fileid="13038" data-unique="idno6b8ic" src="https://academy.hsoub.com/uploads/monthly_2016_02/02_graylog_dashboard.thumb.png.8cdd14f09721f9e243f423f99d494006.png"></a>
</p>

<p>
	يوجد في أعلى الواجهة عدد يمثل إشعارا تظهر بعد النقر عليه رسالة تقول إن لديك عقدة نشطة لا تصلها أية مُدخَلات Inputs. فلنضف مدخلا لاستقبال رسائل سجل النظام عبر UDP.
</p>

<h3 id="إنشاء-مدخل-لسجلات-النظام-عبر-ميثاق-udp">
	إنشاء مدخل لسجلات النظام عبر ميثاق UDP
</h3>

<p>
	انقر على القائمة المنسدلة System (النظام) الموجودة في شريط القوائم العلوي واختر Inputs (مُدخلات) لإضافة مُدخَل يستقبل رسائل سجل النظام. اختر Syslog UDP من القائمة المنسدلة في الصفحة الجديدة ثم انقر على زر Launch new input (ابدأ المُدخَل الجديد).
</p>

<p>
	ستظهر نافذة منبثقة جديدة. أدخل البيانات التالية (أبدِل <code>graylog_private_IP</code> بعنوان IP الداخلي لخادومك):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_87">
<span class="pln">Title: syslog
Port: 8514
Bind address: graylog_private_IP</span></pre>

<p>
	ثم انقر على زرّ Launch أسفل النافذة.
</p>

<p>
	ستجد أن مُدخلا جديدا باسم syslog يظهر في فقرة Local inputs؛ تظهر أولا لصيقة starting (في طور التشغيل) ثم بعد قليل تتحول إلى اللون الأخضر وعبارة running (يعمل)، قد تحتاج لإعادة تحميل الصفحة لتحديث الحالة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_02/03_graylog_syslog_input.png.a3f603bf09fae41dbfc49d9ac9f16469.png"><img alt="03_graylog_syslog_input.thumb.png.75abf7" class="ipsImage ipsImage_thumbnailed" data-fileid="13039" data-unique="0ck9jm3gx" src="https://academy.hsoub.com/uploads/monthly_2016_02/03_graylog_syslog_input.thumb.png.75abf737a47d494f24a2218e03791185.png"></a><img alt="imageproxy.php?img=&amp;key=e4ac65570db3469d" class="ipsImage ipsImage_thumbnailed" data-fileid="o_1abm5mno9dt21qmm1bdktisdk8n" data-unique="rqbx22nyq" src="" style="opacity: 1; display: none;"></p>

<p>
	جهزنا خادوم Graylog لاستقبال رسائل من سجل النظام، بقي لنا ضبط الخادوم لإرسال سجلات النظام إلى Graylog.
</p>

<h3 id="إعداد-الخواديم-لإرسال-سجلات-النظام-إلى-graylog">
	إعداد الخواديم لإرسال سجلات النظام إلى Graylog
</h3>

<p>
	ينبغي تطبيق الخطوات التالية على الخواديم التي نريد مراقبتها.
</p>

<p>
	نبدأ بإنشاء ملف إعداد <code>rsyslog</code> في المجلد <code>etc/rsyslog/</code>، سنسميه <code>90-graylog.conf</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_89">
<span class="pln">sudo vi /etc/rsyslog.d/90-graylog.conf</span></pre>

<p>
	نضيف الأسطر التالية إلى الملف كي يبعث برسائل سجلات النظام إلى خادوم Graylog (أبدل <code>graylog_private_IP</code> بعنوان IP المحلي لخادوم Graylog):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_91">
<span class="pln">$template GRAYLOGRFC5424,"</span><span class="pun">&lt;%</span><span class="pln">pri%&gt;%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
*.* @graylog_private_IP:8514;GRAYLOGRFC5424</span></pre>

<p>
	احفظ الملف ثم أغلقه. سيُحمَّل هذا الملف مع تحميل إعداد <code>rsyslog</code>، تجب إعادة تحميل <code>rsyslog</code> من أجل اعتماده:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9684_93">
<span class="pln">sudo service rsyslog restart</span></pre>

<p>
	نعود، بعد إكمال إعداد <code>rsyslog</code> على جميع الخواديم التي نريد مراقبة سجلاتها إلى واجهة Graylog.
</p>

<h3 id="عرض-مصادر-graylog">
	عرض مصادر Graylog
</h3>

<p>
	بالعودة إلى واجهة الويب، انقر قائمة Sources في الشريط العلوي. ستظهر أسفل الصفحة لائحة بجميع الخواديم التي أعددت عليها <code>rsyslog</code> لإرسال السجلات إلى Graylog، مع عدد الرسائل الواردة منها في المدة المحددة ضمن القائمة المنسدلة (ساعة مبدئيا).
</p>

<h3 id="البحث-في-بيانات-graylog">
	البحث في بيانات Graylog
</h3>

<p>
	توفر واجهة Graylog إمكانية البحث في بيانات السجلات. تختلف البيانات المتوصَّل إليها حسب نشاط الخادوم، لذا امنح Graylog دقائق لجمع البيانات خصوصا إذا كان النشاط على الخادوم ضعيفا. في الصورة التوضيحية أدناه مثال للبحث عن <code>DNS</code> في البيانات التي جُمعت في آخر 15 دقيقة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-extension="core_Attachment" href="https://academy.hsoub.com/uploads/monthly_2016_02/04_graylog_syslog_messages.png.02240b1a819eb478ac28ee9bc2a7b037.png"><img alt="04_graylog_syslog_messages.thumb.png.e15" class="ipsImage ipsImage_thumbnailed" data-extension="core_Attachment" data-fileid="13040" data-unique="71enx81iw" src="https://academy.hsoub.com/uploads/monthly_2016_02/04_graylog_syslog_messages.thumb.png.e15019e3e46dc4410ad34a7a0bd46c5e.png"></a>
</p>

<p>
	تظهر الرسائل في أسفل الصفحة، ويمكن استخدامها للبحث عن مشاكل في الإعدادات ومن ثم إصلاحها. يتيح Graylog إمكانية حصْر البحث في الرسائل القادمة على خادوم واحد فقط في حالة إعداد Graylog لتجميع البيانات من أكثر من مصدر. يمكن أيضا حصر البحث في نطاق زمني محدّد.
</p>

<p>
	يفيد البحث قي بيانات Graylog كثيرا حيث يمكّنك مثلا من مراجعة سجلات خادوم أو خواديم بعد حدوث مشكل. تساعد السجلات المركزية في تشخيص الحوادث المترابطة، فأنت لا تحتاج لتسجيل الدخول إلى جميع الخواديم لعرض بيانات الأحداث.
</p>

<h2 id="خاتمة">
	خاتمة
</h2>

<p>
	لا تنحصر إمكانيات Graylog في تجميع بيانات سجل النظام بل يمكن استخدامه لمركزة سجلات مختلفة ومراقبة التطبيقات أو الأنظمة التي ترسلها. كما تمكن أيضا إعادة تهيئة السجلات المرسلة لاستخراج بيانات محدّدة منها. لا تتردد في استكشاف إمكانيات البرنامج. يُستحسن في بيئات العمل الكبيرة تثبيت عناصر Graylog وإعدادها على خوادم منفصلة لأداء أعلى.
</p>

<p>
	ترجمة -وبتصرف- لمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-install-graylog-1-x-on-ubuntu-14-04" rel="external nofollow">How To Install Graylog 1.x on Ubuntu 14.04</a> لصاحبه Mitchell Anicas.
</p>
]]></description><guid isPermaLink="false">218</guid><pubDate>Tue, 22 Mar 2016 22:31:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; Hexo&#x60C; &#x645;&#x648;&#x644;&#x62F; &#x645;&#x648;&#x627;&#x642;&#x639; &#x62B;&#x627;&#x628;&#x62A;&#x629; (static site generator) &#x648;&#x639;&#x645;&#x644; &#x645;&#x62F;&#x648;&#x646;&#x629; &#x628;&#x647; &#x639;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x648;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-hexo%D8%8C-%D9%85%D9%88%D9%84%D8%AF-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%AB%D8%A7%D8%A8%D8%AA%D8%A9-static-site-generator-%D9%88%D8%B9%D9%85%D9%84-%D9%85%D8%AF%D9%88%D9%86%D8%A9-%D8%A8%D9%87-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r228/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/hexo-blog-ubuntu.png.6a05ac5694108137dcb6430ef9dc229a.png" /></p>

<p id="مقدمة">
	يُستخدَم Hexo، وهو إطار عمل للتدوين الثابت (Static) مبنيّ على Node.js، لنشر تدوينات مكتوبة في مستندات Markdown. تُعالَج التدوينات ثم تُحوَّل إلى HTML/CSS انطلاقا من قوالب معدَّة لهذا الغرض (تماما كما تفعل بقية مُولّدات المحتوى الثابت مثل <a href="https://academy.hsoub.com/tags/jekyll/">Jekyll</a> و <a href="https://academy.hsoub.com/devops/web-servers/nginx/%D8%AA%D8%B9%D9%84%D9%85-%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A6-%D9%85%D8%AF%D9%88%D9%86%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-ghost-%D9%88-nginx-%D8%B9%D9%84%D9%89-ubuntu-r86/">Ghost</a>). يعمل Hexo على هيئة وِحدات (Modules) يمكن ثبيتها وإعدادها حسب الحاجة.
</p>

<p style="text-align: center;">
	<img alt="hexo-blog-ubuntu.png.87c8adeeccdf9292887" class="ipsImage ipsImage_thumbnailed" data-fileid="14218" data-unique="ycm98m9ny" src="https://academy.hsoub.com/uploads/monthly_2016_03/hexo-blog-ubuntu.png.87c8adeeccdf9292887dd012a1d55baa.png"></p>

<p>
	سنعدّ في هذا المقال Hexo اعتمادا على خادوم ويب Nginx ومنصة GitHub.
</p>

<h2 id="المتطلبات">
	المتطلبات
</h2>

<p>
	في ما يلي قائمة بما ستحتاجه لإنجاز هذا الدرس:
</p>

<ul><li>
		خادوم أوبنتو 14.04 مع حساب ذي صلاحيات إدارية غير المستخدم الجذر. يمكنك إعداد حساب بالمواصفات المطلوبة باتباع خطوات درس <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7%D8%A6%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r4/">الإعداد الابتدائي لخادوم أوبنتو</a>.
	</li>
	<li>
		تثبيت Git على خادوم أوبنتو وإعداده. يشرح درس <a href="https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-git-%D9%88gitolite-%D9%84%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r200/">تنصيب وإعداد Git و gitolite للتحكم في الإصدارات على أوبنتو</a> الكيفية.
	</li>
	<li>
		تثبيت Node.js على خادوم أوبنتو.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AB%D8%A8%D8%AA-%D8%AD%D8%B2%D9%85-mysql-%D8%8Cnginx-%D8%8Clinux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">تثبيت Nginx على خادوم أوبنتو</a>.
	</li>
	<li>
		حساب على <a href="https://github.com/" rel="external nofollow">GitHub</a> الذي هو مستودع <a href="https://academy.hsoub.com/programming/workflow/git/">Git</a>.
	</li>
</ul><p>
	تأكد من أن المتطلبات مثبتة ومضبوطة ثم انتقل إلى خطوات تثبيت Hexo وإعداده.
</p>

<h2 id="الخطوة-الأولى-تثبيت-hexo-وبدء-تشغيله">
	الخطوة الأولى: تثبيت Hexo وبدء تشغيله
</h2>

<p>
	تتضمن هذه الفقرة كل ما عليك فعله لتثبيت Hexo وجعله يعمل على خادومك.
</p>

<p>
	ابدأ أولا بتحديث الحزم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_7">
<span class="pln">sudo apt-get update &amp;&amp; sudo apt-get upgrade</span></pre>

<p>
	يتكوّن Hexo من الكثير من العناصر والحزم البرمجية. سنجلب اثنتين من الحزم الأكثر أهمية في Hexo باستخدام مدير الاعتمادات <code>npm</code>.
</p>

<p>
	العنصر الأول والأهم هو <code>hexo-cli</code>، يوفر أوامر Hexo الأساسية :
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_9">
<span class="pln">npm install hexo-cli -g</span></pre>

<p>
	ثم نأتي للعنصر الثاني <code>hexo-server</code> وهو خادوم مضمَّن يمكن استخدامه للعرض المسبق للتدوينات واختبارها قبل النشر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_11">
<span class="pln">npm install hexo-server -g</span></pre>

<p>
	تتوفر الكثير من الحزم الأخرى لـHexo، إلا أن الحزمتين أعلاه هما الأساس الذي لا يُستغنى عنه لإطلاق مدونة باستخدام Hexo. يمكن أن تستعرض الحزم الأخرى المكونة لإطار عمل Hexo بخاصية البحث في <code>npm</code>.
</p>

<p>
	نحتاج الآن لقاعدة ملفات لبناء مدونتنا عليها. يُوفِّر Hexo أمر <code>init</code> لهذا الغرض، كل ما عليك فعله هو تمرير المسار أو المجلد الذي تريد استخدامه لملفات إعداد المدونة إلى الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_13">
<span class="pln">hexo init ~/hexo_blog</span></pre>

<p>
	يستغرق اﻷمر بضع ثوان حسب سرعة الاتصال لديك:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_15">
<span class="pln">INFO  Copying data to ~/hexo_blog
INFO  You are almost done! Don't forget to run 'npm install' before you start blogging with Hexo!

. . .</span></pre>

<p>
	ننتقل إلى المجلد المستخدَم في الأمر السابق:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_17">
<span class="pln">cd ~/hexo_blog</span></pre>

<p>
	ثم ننفذ أمر التثبيت التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_19">
<span class="pln">npm install</span></pre>

<p>
	يمكنك تجاهل التحذيرات الاختيارية (<code>WARN notsup</code>). نحصُل بعد انتهاء تنفيذ الأمر على ملفات الإعداد الأساسية.
</p>

<h2 id="الخطوة-الثانية-ضبط-ملف-الإعداد-الأساسي-في-hexo">
	الخطوة الثانية: ضبط ملف الإعداد الأساسي في Hexo
</h2>

<p>
	نسرُد محتويات مجلد المشروع:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_21">
<span class="pln">ls -l</span></pre>

<p>
	تظهر مخرجات على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_23">
<span class="pln">-rw-rw-r--   1 zeine77 zeine77  1483 Feb 17 15:48 _config.yml
drwxrwxr-x 201 zeine77 zeine77 36864 Feb 17 15:53 node_modules
-rw-rw-r--   1 zeine77 zeine77   442 Feb 17 15:48 package.json
drwxrwxr-x   2 zeine77 zeine77  4096 Feb 17 15:45 scaffolds
drwxrwxr-x   3 zeine77 zeine77  4096 Feb 17 15:45 source
drwxrwxr-x   3 zeine77 zeine77  4096 Feb 17 15:45 themes</span></pre>

<p>
	يعدّ الملف <code>config.yml_</code> أهم هذه الملفات إذ تخزَّن به إعدادات نواة Hexo. إن احتجت مستقبلا لإجراء تعديلات على المدونة فعلى الأرجح سيكون ذلك من خلال هذا الملف.
</p>

<p>
	نفتح الملف لإجراء تخصيصات على البرنامج:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_25">
<span class="pln">nano _config.yml</span></pre>

<p>
	توجد في أعلى الملف فقرة معنونة بـ<code>Site</code> (الموقع):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_27">
<span class="pln"># Site
title: Hexo
subtitle:
description:
author: John Doe
language:
timezone:</span></pre>

<p>
	يوجد في الأسطر الأربعة الأولى اسم المدونة، عنوان فرعي لها، وصف واسم صاحب المدونة. لديك كامل الحرية في اختيار ما يناسب لهذه الأسطر. انتبه إلى أن بعض قوالب Hexo لا تعرض كامل هذه المعلومات. يمكن اعتباره هذه الفقرة بيانات وصفية للمدونة.
</p>

<p>
	الخياران المواليان يمثلان اللغة والمنطقة الزمنية. تأخذ اللغة قيمة عبارة عن حرفين يرمزان للغة وفق معيار <code>ISO-639-1</code>. يُضبط الوقت مبدئيا على المنطقة الزمنية للخادوم ويستخدم صيغة قاعدة بيانات <code>tz</code>. إن قررت التعديل على إحدى المعطيين فتأكد أن القيمة وفق الصيغة المطلوبة.
</p>

<p>
	في ما يلي مثال على ملف الإعداد:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_29">
<span class="pln">#Site
title: مدونة أكاديمية حسوب
subtitle: مدونة تقنية تستخدم Hexo
description: مثال على استخدام Hexo لإنشاء مدونة
author: أكاديمية حسوب
language: ar 
timezone: Africa/Nouakchott</span></pre>

<p>
	تضبط الفقرة الموالية إعدادات الروابط. يمكن استخدام عنوان IP قيمةً لمعطى <code>url</code> إن لم يكن لديك نطاق خاص.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_31">
<span class="pln"># URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://127.0.0.1
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:</span></pre>

<p>
	خيار آخر نودّ تغييره في ملف الإعداد وهو <code>default_layout</code> ضمن فقرة <code>Writing</code> إلى الأسفل قليلا. نحدد القيمة <code>draft</code> للمعطى. يعني هذا أن المنشورات الجديدة تُنشأ على هيئة مسودات يجب نشرها حتى تكون مرئية على المدونة.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_33">
<span class="pln"># Writing
new_post_name: :title.md # File name of new posts
default_layout: draft
titlecase: false # Transform title into titlecase</span></pre>

<p>
	احفظ الملف ثم أغلقه. سنعود إليه لاحقا عندما نبدأ بالنشر.
</p>

<h2 id="الخطوة-الثالثة-كتابة-تدوينة-جديدة-ونشرها">
	الخطوة الثالثة: كتابة تدوينة جديدة ونشرها
</h2>

<p>
	تبدأ عملية نشر تدوينة (أو مسودة كما أسميناها في الإعداد أعلاه) بتنفيذ الأمر التالي، حيث <code>أول-تدوينة</code> هو اسم التدوينة التي تريد إنشاءها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_35">
<span class="pln">hexo new أول-تدوينة</span></pre>

<p>
	تظهر الرسالة التالي في سطر الأوامر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_37">
<span class="pln">INFO  Created: ~/hexo_blog/source/_drafts/أول-تدوينة.md</span></pre>

<p>
	نفتح الملف لتحرير أول تدويناتنا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_39">
<span class="pln">nano ~/hexo_blog/source/_drafts/أول-تدوينة.md</span></pre>

<p>
	يجب أن تحوي كل تدوينة على جبهة أمامية Front-matter، وهي كتلة تعليمات قصيرة مكتوبة بـJSON أو YAML لضبط إعدادات مثل عنوان التدوينة، تاريخ النشر، الوسوم Tags ومعلومات من هذا القبيل. تُعلَّم نهاية الجبهة الأمامية بعلامة <code>---</code> أو <code>;;;</code>. تمكن كتابة منشور المدونة بعد الجبهة الأمامية باستخدام صيغة Markdown.
</p>

<p>
	أبدل المحتوى المبدئي لملف "<span style="font-family:courier new,courier,monospace;">md.</span><code><span style="font-family:courier new,courier,monospace;">أول-تدوينة"</span> </code>بالمحتوى التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_41">
<span class="pln">title: أول تدوينة في مدونة أكاديمية حسوب
tags:
- حسوب
- مدونة
categories:
- إعلانات
comments: true
date: 2016-02-18 09:30:00
---

## هنا تكتب تعليمات ماركداون

**هذه هي تدوينتنا الأولى!**

نص التدوينة الأولى</span></pre>

<p>
	احفظ الملف ثم أغلقه.
</p>

<p>
	سيبقى ملف ماركداون الذي أنشأناه للتو في مجلد <code>hexo_blog/source/_drafts/~</code> إلى أن ننشره. كل الملفات الموجودة في هذا الملف غير مرئية لزوار المدونة.
</p>

<p>
	ننشر التدوينة لتتاح للزوار
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_43">
<span class="pln">hexo publish first-post</span></pre>

<p>
	تظهر الرسالة التالية:
</p>

<pre>
 </pre>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_45">
<span class="pln">INFO  Published: ~/hexo_blog/source/_posts/أول-تدوينة.md</span></pre>

<p>
	سيصبح بالإمكان رؤية المنشور فور نشر المدونة.
</p>

<h2 id="الخطوة-الرابعة-تشغيل-خادوم-الاختبار">
	الخطوة الرابعة: تشغيل خادوم الاختبار
</h2>

<p>
	أكملنا في الخطوات السابقة إعداد الخادوم، ونشرنا أول تدوينة. سنشغّل خادوم الاختبار لرؤية النتيجة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_47">
<span class="pln">hexo server</span></pre>

<p>
	يمكن الآن رؤية المدونة بزيارة <code>http://your_server_ip:4000</code> حيث <code>your_server_ip</code> عنوان IP الموقع. سيظهر لديك منشور Hello World المعرَّف مسبقا، إضافة للمنشور الذي كتبناه للتو.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_02/01_first_post_hexo.png.095d01e2e9900f3be172b7f58aadb1e9.png"><img alt="01_first_post_hexo.thumb.png.e86e1b01c73" class="ipsImage ipsImage_thumbnailed" data-fileid="13180" data-unique="drte7em5t" src="https://academy.hsoub.com/uploads/monthly_2016_02/01_first_post_hexo.thumb.png.e86e1b01c73f7a6d008dc2ede927c215.png"></a>
</p>

<p>
	اضغط على الزرين <span style="font-family:courier new,courier,monospace;"><code>CTRL</code>+<code>C</code></span> لإيقاف خادوم الاختبار.
</p>

<p>
	يُستخدم خادوم الاختبار لعرض التغييرات والإضافات إلى المدونة، ثم يأتي وقت نشر المدونة على الشبكة بعد أن تنتهي من التعديلات.
</p>

<h2 id="الخطو-الخامسة-إعداد-git-لنشر-المدونة">
	الخطو الخامسة: إعداد Git لنشر المدونة
</h2>

<p>
	توجد وسائل عدة لنشر ما أعدنناه على Hexo. المقاربة المختارة في هذا الدرس هي استخدام Git لتخزين الملفات الثابتة، الخطافات Hooks لتوجيهها وNginx لتقديمها. تتيح حزم في Hexo الدعم لـ Heroku ،Rsync ،OpenShift وغيرها.
</p>

<p>
	سنحتاج لمستودع Git نخزّن فيه ملفات HTML التي يولّدها Hexo. سنستخدم مستودعا عموميا على GitHub لتسهيل الأمور.
</p>

<p>
	أنشئ مستودعا جديدا على GitHub باسم <code>hexo_static</code> أو أي اسم آخر تراه مناسبا، مع التأكد من أن المستودع عمومي (خيار <code>Public</code>). حدّد مربع <code>Initialize this repository with a README</code> لإضافة ملف <code>README</code> تلقائيا إلى المستودع.
</p>

<p>
	افتح ملف الإعداد الرئيسي لـHexo من أجل تحريره:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_49">
<span class="pln">nano _config.yml</span></pre>

<p>
	توجد في أسفل الملف فقرة معنونة بـ<code>Deployment</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_51">
<span class="pln"># Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type:</span></pre>

<p>
	حدّد خيارات النشر كما في المثال أدناه. يحيل رابط URL إلى المستودع الذي أنشأته للتو؛ لذا تأكد من وضع اسم حسابك في GitHub مكان <code>your_github_username</code>. أبدل كذلك اسم المستودع إن كنت اخترت اسما مغايرا.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_53">
<span class="pln">deploy:
    type: git
    repo: https://github.com/your_github_username/hexo_static.git
    branch: master</span></pre>

<p>
	احفظ الملف ثم أغلقه.
</p>

<p>
	بما أننا اخترنا النشر عن طريق Git فسنحتاج لحزمة Hexo التي ترسل الملفات الثابتة التي يولدها إلى مستودع Git.
</p>

<p>
	استخدم <code>npm</code> لتثبيتها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_55">
<span class="pln">npm install hexo-deployer-git --save</span></pre>

<p>
	يمكنك الآن تجربة إرسال الملفات إلى مستودع <code>hexo_static</code> وإضافة أول إيداع بواسطة Hexo:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_57">
<span class="pln">hexo generate &amp;&amp; hexo deploy</span></pre>

<p>
	أدخل معلومات الاستيثاق في GitHub عندما تطلب منك لبدء نقل الملفات.
</p>

<p>
	تبدو نتيجة تنفيذ الأمرين السابقين بعد نجاحه على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_59">
<span class="pln">To https://github.com/username/hexo_static.git.
* [new branch]      master -&gt; master
Branch master set up to track remote branch master from https://github.com/username/hexo_static.git.
INFO  Deploy done: git</span></pre>

<h2 id="الخطوة-السادسة-إعداد-nginx">
	الخطوة السادسة: إعداد Nginx
</h2>

<p>
	يتميّز خادوم ويب Nginx في تقديم الملفات الثابتة للزوار، وهو ما يجعله اختيارا مناسبا لمدونتنا. نبدأ بإعداد Nginx لتقديم المدونة للزوار.
</p>

<p>
	ننشئ أولا مجلدات النظام التي سنطلب من Nginx استخدامها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_61">
<span class="pln">sudo mkdir -p /var/www/hexo</span></pre>

<p>
	ثم نعطي للحساب الذي نستخدمه على أوبنتو ملكيةَ المجلد:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_63">
<span class="pln">sudo chown -R $USER:$USER /var/www/hexo</span></pre>

<p>
	نعدّل أذون المجلد على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_65">
<span class="pln">sudo chmod -R 755 /var/www/hexo</span></pre>

<p>
	نفتح ملف الإعداد المبدئي لـNginx لتحريره:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_67">
<span class="pln">sudo nano /etc/nginx/sites-available/default</span></pre>

<p>
	نعدّل كلتة <code>server</code> في ملف الإعداد بحيث يصبح جذر المستند Document root يشير إلى المجلد الذي أنشأناه للتو:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_69">
<span class="pln">server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/hexo;
    index index.html index.htm;</span></pre>

<p>
	احفظ الملف ثم أغلقه. يمكنك عند الحصول على اسم نطاق للمدونة تحرير هذا الملف وتحديد قيمة <code>server_name</code> بحيث تصبح اسمَ نطاقك.
</p>

<p>
	نعيد تشغيل Nginx لاعتماد التعديلات:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_71">
<span class="pln">sudo service nginx restart</span></pre>

<h2 id="الخطوة-السابعة-إنشاء-خطافات-hooks-في-git">
	الخطوة السابعة: إنشاء خطافات Hooks في Git
</h2>

<p>
	سنربط في هذه الخطوة مستودع <code>hexo_static</code> بمستودع Git آخر لنرسل عبره ملفات HTML إلى مجلد خادوم الويب.
</p>

<p>
	نبدأ بإنشاء مستودع Git فارغ الهدف منه توجيه محتوى المستودع <code>hexo_static</code> إلى مجلد خادوم الويب:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_73">
<span class="pln">git init --bare ~/hexo_bare</span></pre>

<p>
	أنشئ ملف خطاف جديدا داخل مجلد خطافات Git:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_75">
<span class="pln">nano ~/hexo_bare/hooks/post-receive</span></pre>

<p>
	أضف السطرين التاليين إلى الملف. نحدّد في الملف شجرة عمل Git التي تحوي الشفرة المصدرية ومجلد Git الذي يحوي الإعدادات، السجل وأمورا أخرى:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_77">
<span class="pln">#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/home/$USER/hexo_bare checkout -f</span></pre>

<p>
	احفظ الملف ثم أغلقه.
</p>

<p>
	اجعل الملف <code>post-receive</code> قابلا للتنفيذ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_79">
<span class="pln">chmod +x ~/hexo_bare/hooks/post-receive</span></pre>

<p>
	سنحتاج الآن لنسخ مستودع النشر <code>hexo_static</code> الذي أنشأناه في الخطوة الخامسة إلى الخادوم. تأكد من إبدال <code>username</code> في الأمر أدناه باسم حسابك في GitHub.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_81">
<span class="pln">git clone https://github.com/username/hexo_static.git ~/hexo_static</span></pre>

<p>
	انتقل إلى المجلد <code>hexo_static</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_83">
<span class="pln">cd ~/hexo_static</span></pre>

<p>
	نضيف مستودع <code>hexo_bare</code> السابق على أنه مستودع بعيد باسم <code>live</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_85">
<span class="pln">git remote add live ~/hexo_bare</span></pre>

<h2 id="الخطوة-الثامنة-إنشاء-سكربت-النشر">
	الخطوة الثامنة: إنشاء سكربت النشر
</h2>

<p>
	يمكن باستخدام سكربت Shell قصير بدء كامل عملية النشر السابقة بدلا من أدائها يدويا. يعني هذا أننا لن نحتاج إلى تنفيذ أوامر Hexo الواحدة تلو الأخرى أو تشغيل خطّاف Git بأوامر متعدّدة.
</p>

<p>
	نعود إلى مجلد مدونة Hexo وننشء فيه ملفا للسكربت:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_87">
<span class="pln">cd ~/hexo_blog 
nano hexo_git_deploy.sh</span></pre>

<p>
	ألصق الشفرة التالية في الملف:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_89">
<span class="pln">#!/bin/bash

hexo clean
hexo generate 
hexo deploy

( cd ~/hexo_static ; git pull ; git push live master )</span></pre>

<p>
	احفظ الملف ثم أغلقه.
</p>

<p>
	ينفذ السكربت أوامر Hexo التالية:
</p>

<ul><li>
		أمر <span style="font-family:courier new,courier,monospace;"><code>clean</code></span> الذي يحذف الملفات المولَّدة سابقا من مجلد <code>public</code>.
	</li>
	<li>
		أمر <code>generate</code> الذي يولّد ملفات HTML انطلاقا من ملفات ماركداون ويضعها في مجلد <code>public</code>.
	</li>
	<li>
		أمر <code>deploy</code> الذي يُرسِل الملفات الموجودة في المجلد <code>public</code> إلى مستودع Git الذي عرّفناه سابقا في ملف الإعداد <code>config.yml_</code>.
	</li>
</ul><p>
	يشغّل السطر الأخير <code>(c<span style="font-family:courier new,courier,monospace;">d ~/hexo_static ; git pull ; git push live master</span>)</code> خطاف Git ويحدّث مجلد المدونة على خادوم الويب بوضع ملفات HTML فيه.
</p>

<p>
	نجعل سكربت النشر قابلا للتنفيذ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_91">
<span class="pln">chmod +x hexo_git_deploy.sh</span></pre>

<h2 id="الخطوة-التاسعة-تنفيذ-سكربت-النشر">
	الخطوة التاسعة: تنفيذ سكربت النشر
</h2>

<p>
	نفذ سكربت النشر السابق لاختبار كامل العملية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_93">
<span class="pln">./hexo_git_deploy.sh</span></pre>

<p>
	ستُطلب منك معلومات الاستيثاق أثناء إيداع الملفات في مستودع GitHub. انتظر اكتمال العملية ثم ألق نظرة على الملفات في المجلد <span style="font-family:courier new,courier,monospace;"><code>var/www/hexo/</code></span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_95">
<span class="pln">ls /var/www/hexo</span></pre>

<p>
	النتيجة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_97">
<span class="pln">2016  archives  categories  css  fancybox  index.html  js  tags</span></pre>

<p>
	تُظهر نتيجة الأمر أعلاه أن الملفات التي أنشأها Hexo نُقلت إلى مجلد خادوم الويب، يعني هذا أن بإمكانك تصفح المدونة بالذهاب إلى عنوان الخادوم <code>http://your_server_ip/</code>.
</p>

<p>
	يكفي تنفيذ السكربت <code>hexo_git_deploy.sh</code> مستقبلا لنشر التعديلات أو الإضافات على المدونة. تذكر أن تختبر التغييرات على خادوم Hexo الاختباري قبل نشرها.
</p>

<h2 id="الخطوة-العاشرة-اكتشاف-نظام-ملفات-hexo-اختيارية">
	الخطوة العاشرة: اكتشاف نظام ملفات Hexo (اختيارية)
</h2>

<p>
	يعتمد Hexo على ملفات للعمل عليها. ليس من الضروري تعديل هذه الملفات إلا أنه سيكون من الجيد معرفة دور كل واحد منها في نظام الملفات التابع لـHexo، فربما تحتاج لاستخدامه.
</p>

<p>
	يبدو مخطَّط الملفات والمجلدات على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5743_99">
<span class="pln">├── _config.yml
├── node_modules
├── package.json
├── scaffolds
├── source
|   └── _posts
└── themes</span></pre>

<h3 id="مجلد-nodemodules">
	مجلد node_modules
</h3>

<p>
	يخزّن Hexo في هذا المجلّد الوحدات التي تنزّلها بـ <code>npm</code> لاستخدامها في المدونة. بنهاية هذا الدرس لن توجد في هذا المجلد سوى الحزم التي نزلناها في الخطوة الأولى أو الحزم التي تأتي مضمَّنة في Hexo. على العموم لن تحتاج للتعديل على هذا المجلد.
</p>

<h3 id="مجلد-packagejson">
	مجلد package.json
</h3>

<p>
	يحوي ملف JSON هذا الإعدادات والإصدارات التي يستخدمها Hexo. الجأ لهذا الملف إن احتجت لتحديث الحزم يدويا، إرجاعها إلى إصدار أقدم Downgrade أو حذفها. لن تحتاج لتعديل هذا الملف على الأرجح إلا إذا حدث تعارض بين حزم Hexo وهو أمر غير شائع.
</p>

<h3 id="مجلد-scaffolds">
	مجلد scaffolds
</h3>

<p>
	يستخدم Hexo القوالب الموجودة في هذا المجلد ليصيغ التدوينات وفقا لها. تأتي ثلاثة قوالب مبدئيا في الملف وهي <code>draft</code> (مسودة)، <code>post</code> (منشور) و <code>page</code> (صفحة). إن أردت استخدام قالب جديد فيجب وضعه هنا قبل الاستخدام.
</p>

<h3 id="مجلد-source">
	مجلد source
</h3>

<p>
	توجد التدوينات المنشورة في مجلد فرعي من مجلد <code>source</code>، نفس الشيء ينطبق على المسودات. يوجد أغلب محتوى المدونة المكتوب بماركداون في هذا المجلد أو مجلد متفرع عنه.
</p>

<h3 id="مجلد-themes">
	مجلد themes
</h3>

<p>
	توضع قوالب المظهر Themes في هذا المجلد. تحوي أغلب القوالب على ملف <span style="font-family:courier new,courier,monospace;"><code>config.yml_</code></span> خاص بها للاحتفاظ بإعدادات مخصّصة مثل تلك التي يعرّفها ملف الإعداد العام. استخدمنا خلال هذا الدليل القالب المبدئي في Hexo.
</p>

<h2 id="خاتمة">
	خاتمة
</h2>

<p>
	لم نتطرق في هذا الدرس للكثير مما يمكن تعلمه، إلا أنه يضع قاعدة متينة لإنشاء مدونة باستخدام Hexo. راجع التوثيق الرسمي لإطار العمل والذي يحوي الكثير من المعلومات الدقيقة إن أردت التعمق أكثر في البرنامج. الخطوة الموالية هي تخصيص المظهر ليناسب رغباتك في تطوير مدونة خاصة بك.
</p>

<p>
	ترجمة -وبتصرف- لمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-create-a-blog-with-hexo-on-ubuntu-14-04" rel="external nofollow">How to Create a Blog with Hexo On Ubuntu 14.04</a> لصاحبه C.J. Scarlett.
</p>
]]></description><guid isPermaLink="false">228</guid><pubDate>Tue, 22 Mar 2016 09:09:00 +0000</pubDate></item><item><title>&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x627;&#x62A; &#x645;&#x641;&#x64A;&#x62F;&#x629; &#x644;&#x625;&#x62F;&#x627;&#x631;&#x629; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; &#x631;&#x628;&#x645;&#x627; &#x644;&#x645; &#x62A;&#x633;&#x645;&#x639; &#x639;&#x646;&#x647;&#x627; &#x645;&#x646; &#x642;&#x628;&#x644;</title><link>https://academy.hsoub.com/devops/servers/%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%81%D9%8A%D8%AF%D8%A9-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D8%B1%D8%A8%D9%85%D8%A7-%D9%84%D9%85-%D8%AA%D8%B3%D9%85%D8%B9-%D8%B9%D9%86%D9%87%D8%A7-%D9%85%D9%86-%D9%82%D8%A8%D9%84-r227/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-useful-apps.png.60f45e5d03dde59b70dca89795751483.png" /></p>

<p dir="rtl">
	هنالك العديد من البرمجيات المفيدة جدًا المطورة من فريق خادوم أوبنتو وغيرهم التي تندمج اندماجًا جيدًا مع نسخة خادوم أوبنتو، لكن ربما لا تكون معروفةً جدًا؛ سيعرض هذا الدرس بعض التطبيقات المفيدة التي تسهِّل إدارة خادوم، أو عدِّة خواديم أوبنتو.
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-useful-apps.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13302" data-unique="v12o9pl7a" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-useful-apps.png.ae80ec3c7fa9826e8442b0266aa90953.png"></p>

<h2 dir="rtl">
	pam_motd
</h2>

<p dir="rtl">
	عندما تسجل دخولك إلى خادوم أوبنتو، ربما تلاحظ "رسالة اليوم" (Message Of The Day اختصارًا MOTD)؛ تأتي هذه المعلومات وتُعرَض من حزمتين:
</p>

<p dir="rtl">
	<strong>1. الحزمة <span style="font-family:courier new,courier,monospace;">landscape-common</span></strong>: توفر المكتبات الأساسية لبرمجية <span style="font-family:courier new,courier,monospace;">landscape-client</span>، التي يمكن أن تُستخدَم لإدارة الأنظمة باستخدام تطبيق الويب Landscape؛ تتضمن هذه الحزمة الأداة <span style="font-family:courier new,courier,monospace;">‎/usr/bin/landscape-sysinfo </span>التي تُستخدَم لجمع المعلومات التي تُعرَض في MOTD، مثل المعالج، والذاكرة، والمساحة التخزينية للقرص الصلب ...إلخ. على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_7">
<span class="pln">
	  System load:  0.0               Processes:           76
	  Usage of /:   30.2% of 3.11GB   Users logged in:     1
	  Memory usage: 20%               IP address for eth0: 10.153.107.115
	  Swap usage:   0%

	  Graph this data and manage this system at https://landscape.canonical.com/</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: يمكنك تشغيل الأمر <span style="font-family:courier new,courier,monospace;">landscape-sysinfo</span> في أي وقت يدويًا.
</p>

<p>
	<strong>2. حزمة <span style="font-family:courier new,courier,monospace;">update-notifier-common</span></strong>: التي توفر معلومات عن التحديثات المتوفرة للحزم، والتحققات من أنظمة الملفات (fsck)، ومتى يجب إعادة الإقلاع (مثلًا، بعد تحديث النواة).
</p>

<p dir="rtl">
	تنفِّذ <span style="font-family:courier new,courier,monospace;">pam_motd</span> السكربتات في <span style="font-family:courier new,courier,monospace;">‎/etc/update-motd.d </span>في ترتيبٍ مبنيّ على الرقم الذي يسبق اسم السكربت؛ يُكتَب ناتج السكربتات إلى<span style="font-family:courier new,courier,monospace;"> ‎/‎var/run/motd</span>، بترتيبٍ رقمي، ثم تُجمَّع مع <span style="font-family:courier new,courier,monospace;">‎/etc/motd.tail</span>.
</p>

<p dir="rtl">
	يمكنك إضافة البيانات الديناميكية إلى رسالة اليوم؛ فمثلًا، لإضافة معلومات الطقس المحلي:
</p>

<ul>
<li>
		<p dir="rtl">
			أولًا، ثبِّت حزمة <span style="font-family:courier new,courier,monospace;">weather-util</span>:
		</p>
	</li>
</ul>
<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_9">
<span class="pln">sudo apt-get install weather-util</span></pre>

<ul>
<li>
		<p dir="rtl">
			تستخدم أداة الطقس بيانات METAR من National Oceanic and Atmospheric Administration and Forecast من National Weather Service؛ وللعثور على المعلومات المحلية، فستحتاج إلى رمز ICAO من أربعة محارف؛ الذي يمكن تحديده بتصفح موقع <a href="http://www.weather.gov/tg/siteloc.shtml" rel="external nofollow">http://www.weather.gov/tg/siteloc.shtml</a>.
		</p>
	</li>
</ul>
<p dir="rtl">
	وعلى الرغم من أن National Weather Service هي وكالة حكومية تابعة للولايات المتحدة، لكن هنالك محطات طقس متوفرة في جميع أنحاء العالم، لكن ربما لا تتوفر معلومات الطقس لجميع المناطق خارج الولايات المتحدة.
</p>

<ul>
<li>
		<p dir="rtl">
			أنشِئ الملف ‎<span style="font-family:courier new,courier,monospace;">/usr/local/bin/local-weather</span>، الذي هو سكربت شِل بسيط للحصول على الطقس لمنطقتك المحلية:
		</p>
	</li>
</ul>
<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_11">
<span class="pln">#!/bin/sh
#
#
# Prints the local weather information for the MOTD.
#
#

# Replace KINT with your local weather station.
# Local stations can be found here: http://www.weather.gov/tg/siteloc.shtml

echo
weather -i KINT
echo</span></pre>

<ul>
<li>
		<p dir="rtl">
			اجعل السكربت قابلًا للتنفيذ:
		</p>
	</li>
</ul>
<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_13">
<span class="pln">sudo chmod 755 /usr/local/bin/local-weather</span></pre>

<ul>
<li>
		<p dir="rtl">
			ثم أنشِئ وصلةً رمزيةً إلى<span style="font-family:courier new,courier,monospace;"> ‎/etc/update-motd.d/98-local-weather</span>:
		</p>
	</li>
</ul>
<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_15">
<span class="pln">sudo ln -s /usr/local/bin/local-weather /etc/update-motd.d/98-local-weather</span></pre>

<ul>
<li>
		<p dir="rtl">
			في النهاية، أغلق جلستك الحالية، وأعد تشغيل الدخول لمشاهدة رسالة اليوم الجديدة.
		</p>
	</li>
</ul>
<p dir="rtl">
	يجب أن يُرحَّب بك الآن ببعض المعلومات المفيدة؛ لكن بعض المعلومات حول الطقس المحلي قد لا تكون مفيدةً جدًا! لكن هذا المثال يشرح مرونة <span style="font-family:courier new,courier,monospace;">pam_motd</span>.
</p>

<h2 dir="rtl">
	etckeeper
</h2>

<p dir="rtl">
	يسمح <span style="font-family:courier new,courier,monospace;">etckeeper</span> بتخزين محتويات ‎<span style="font-family:courier new,courier,monospace;">/etc/‎</span> بسهولة في مستودع نظام تحكم بالإصدارات (<abbr title="Version Control Systems | أنظمة التحكم بالنُّسخ"><abbr title="Version Control Systems | أنظمة التحكم بالنُّسخ">VCS</abbr></abbr>)؛ حيث يندمج مع <span style="font-family:courier new,courier,monospace;">apt</span> لكي يودع التغيرات الحاصلة على ‎<span style="font-family:courier new,courier,monospace;">/etc</span> تلقائيًّا عندما تُثبَّت أو تُحدَّث الحزم. وضع ‎/etc ضمن مستودع للتحكم بالإصدارات هو أفضل ممارسة يُنصَح بها في مجال العمل، وهدف etckeeper هو جعل هذه المهمة أسهل ما يمكن.
</p>

<p dir="rtl">
	أدخِل الأمر الآتي في الطرفية لتثبيت <span style="font-family:courier new,courier,monospace;">etckeeper</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_17">
<span class="pln">sudo apt-get install etckeeper</span></pre>

<p dir="rtl">
	ملف الضبط الافتراضي <span style="font-family:courier new,courier,monospace;">‎/etc/etckeeper/etckeeper.conf </span>هو بسيط جدًا؛ الخيار الرئيسي يكون لضبط أي متحكم بالإصدارات ليُستخدَم؛ افتراضيًا، يكون etckeeper مضبوط لاستخدام Bazaar للتحكم بالإصدارات؛ ويُهيَّأ المستودع تلقائيًّا (ويُودَع فيه لأول مرة) أثناء عملية تثبيت الحزمة؛ من الممكن التراجع عن هذه الخطوة بإدخال الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_19">
<span class="pln">sudo etckeeper uninit</span></pre>

<p dir="rtl">
	سيودع etckeeper التغيرات غير المودعة التي حصلت على<span style="font-family:courier new,courier,monospace;"> ‎/etc </span>يوميًا افتراضيًا؛ يمكن تعطيل هذا باستخدام خيار الضبط <span style="font-family:courier new,courier,monospace;">AVOID_DAILY_AUTOCOMMITS</span>؛ وستودع أيضًا التغيرات تلقائيًا قبل وبعد تثبيت الحزم؛ للمزيد من القدرة على التحكم بالتغيرات، من المستحسن أن تودع التغيرات يدويًا مع رسالة الإيداع كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_21">
<span class="pln">sudo etckeeper commit "..Reason for configuration change.."</span></pre>

<p dir="rtl">
	يمكنك باستخدام أوامر <abbr title="Version Control Systems | أنظمة التحكم بالنُّسخ"><abbr title="Version Control Systems | أنظمة التحكم بالنُّسخ">VCS</abbr></abbr> مشاهدة سجل المعلومات حول الملفات في ‎<span style="font-family:courier new,courier,monospace;">/etc</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_23">
<span class="pln">sudo bzr log /etc/passwd</span></pre>

<p dir="rtl">
	لشرح طريقة الاندماج مع نظام إدارة الحزم، جرِّب تثبيت الحزمة <span style="font-family:courier new,courier,monospace;">postfix</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_25">
<span class="pln">sudo apt-get install postfix</span></pre>

<p dir="rtl">
	بعد انتهاء التثبيت، ستودَع كل ملفات ضبط <span style="font-family:courier new,courier,monospace;">postfix</span> إلى المستودع:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_27">
<span class="pln">Committing to: /etc/
added aliases.db
modified group
modified group-
modified gshadow
modified gshadow-
modified passwd
modified passwd-
added postfix
added resolvconf
added rsyslog.d
modified shadow
modified shadow-
added init.d/postfix
added network/if-down.d/postfix
added network/if-up.d/postfix
added postfix/dynamicmaps.cf
added postfix/main.cf
added postfix/master.cf
added postfix/post-install
added postfix/postfix-files
added postfix/postfix-script
added postfix/sasl
added ppp/ip-down.d
added ppp/ip-down.d/postfix
added ppp/ip-up.d/postfix
added rc0.d/K20postfix
added rc1.d/K20postfix
added rc2.d/S20postfix
added rc3.d/S20postfix
added rc4.d/S20postfix
added rc5.d/S20postfix
added rc6.d/K20postfix
added resolvconf/update-libc.d
added resolvconf/update-libc.d/postfix
added rsyslog.d/postfix.conf
added ufw/applications.d/postfix
Committed revision 2.</span></pre>

<p dir="rtl">
	وكمثال عن طريقة تتبع etckeeper للتغيرات اليدوية، أضف مضيفًا جديدًا إلى ملف ‎<span style="font-family:courier new,courier,monospace;">/etc/hosts</span>؛ ثم استخدام <span style="font-family:courier new,courier,monospace;">bzr</span> لمشاهدة أي ملفات قد عُدِّلَت:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_29">
<span class="pln">sudo bzr status /etc/
modified:
  hosts</span></pre>

<p dir="rtl">
	يمكنك إيداع التغيرات الآن:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1655_31">
<span class="pln">sudo etckeeper commit "new host"</span></pre>

<p dir="rtl">
	للمزيد من المعلومات حول <span style="font-family:courier new,courier,monospace;">bzr</span>، راجع درس <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-bazaar%D8%8C-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r199/" rel="">نظرة سريعة على Bazaar، نظام التحكم في الإصدارات على أوبنتو</a>.
</p>

<h2 dir="rtl">
	Byobu
</h2>

<p dir="rtl">
	أحد أكثر البرامج فائدةً لأي مدير أنظمة هو screen، حيث يسمح بتنفيذ عدِّة صدفات (shells) في طرفية واحدة؛ ولجعل بعض ميزات screen المتقدمة أكثر قربًا من المستخدم، ولتوفير بعض المعلومات المفيدة عن النظام؛ أنشِئت الحزمة byobu.
</p>

<p dir="rtl">
	عند تنفيذ <span style="font-family:courier new,courier,monospace;">byobu</span>، سيُظهِر الضغط على زر F9 قائمةَ الضبط التي تسمح لك بما يلي:
</p>

<ul dir="rtl">
<li>
		عرض قائمة المساعدة.
	</li>
	<li>
		تغيير لون خلفية Byobu.
	</li>
	<li>
		تغيير لون أمامية Byobu.
	</li>
	<li>
		تبديل ظهور شريط الإشعارات.
	</li>
	<li>
		تغيير ربط المفاتيح.
	</li>
	<li>
		تغيير سلسلة الخروج.
	</li>
	<li>
		إنشاء نوافذ جديدة.
	</li>
	<li>
		إدارة النوافذ الافتراضية.
	</li>
	<li>
		«لا يبدأ Byobu عند تسجيل الدخول (تفعيل ذاك الخيار)".
	</li>
</ul>
<p dir="rtl">
	ربط المفاتيح يحدد بعض الأمور مثل سلسلة الخروج (escape sequence)، وإنشاء نافذة جديدة، وتغيير النافذة ...إلخ. هنالك مجموعتا ربط للمفاتيح يمكن الاختيار بينها، واحدة باسم <span style="font-family:courier new,courier,monospace;">f-keys</span>، والأخرى<span style="font-family:courier new,courier,monospace;"> screen-escape-keys</span>؛ إذا أردت استخدام الربط الافتراضي، فاختر none.
</p>

<p dir="rtl">
	يوفر byobu قائمةً تُظهِر إصدارة أوبنتو، ومعلومات المعالج، ومعلومات الذاكرة، والوقت والتاريخ؛ مما يجعلها تبدو كقائمة سطح مكتب.
</p>

<p dir="rtl">
	تفعيل خيار "لا يبدأ Byobu عند تسجيل الدخول" سيجعل byobu يبدأ عند فتح أي طرفية؛ التغيرات التي تحصل على byobu تكون خاصة بالمستخدم، ولن تؤثر على بقية مستخدمي النظام.
</p>

<p dir="rtl">
	أحد الميزات في byobu هو نمط scrollback، اضغط على زر F7 للدخول بوضع scrollback، الذي يسمح لك بالتنقل إلى المخرجات السابقة باستخدام أوامر شبيهة بأوامر محرر vi؛ هذه قائمة سريعة بأوامر الحركة:
</p>

<ul dir="rtl">
<li>
		<strong>h</strong>: تحريك المؤشر إلى اليسار محرفًا واحدًا.
	</li>
	<li>
		<strong>j</strong>: تحريك المؤشر إلى الأسفل سطرًا واحدًا.
	</li>
	<li>
		<strong>k</strong>: تحريك المؤشر إلى الأعلى سطرًا واحدًا.
	</li>
	<li>
		<strong>l</strong>: تحريك المؤشر إلى اليمين محرفًا واحدًا.
	</li>
	<li>
		: تحريك المؤشر إلى بداية السطر الحالي.
	</li>
	<li>
		<strong>$</strong>: تحريك المؤشر إلى نهاية السطر الحالي.
	</li>
	<li>
		<strong>G</strong>: تحريك المؤشر إلى سطر محدد (افتراضيًا إلى النهاية).
	</li>
	<li>
		<strong>?</strong>: البحث إلى الخلف.
	</li>
	<li>
		<strong>n</strong>: الانتقال إلى المطابقة التالية إما إلى الأمام أو إلى الخلف.
	</li>
</ul>
<h2 dir="rtl">
	مصادر
</h2>

<ul dir="rtl">
<li>
		راجع صفحة الدليل<span style="font-family:courier new,courier,monospace;"> man update-motd</span> للمزيد من الخيارات المتوفرة لحزمة<span style="font-family:courier new,courier,monospace;"> update-motd</span>.
	</li>
	<li>
		راجع <a href="http://kitenet.net/~joey/code/etckeeper/" rel="external nofollow">موقع </a><a href="http://kitenet.net/~joey/code/etckeeper/" rel="external nofollow">etckeeper</a> لمزيدٍ من التفاصيل حول استخدامه.
	</li>
	<li>
		راجع أيضًا صفحة ويكي أوبنتو "<a href="https://help.ubuntu.com/community/etckeeper" rel="external nofollow">etckeeper</a>".
	</li>
	<li>
		لآخر الأخبار عن bzr، انظر إلى <a href="http://bazaar-vcs.org/" rel="external nofollow">موقع </a><a href="http://bazaar-vcs.org/" rel="external nofollow">bzr</a><a href="http://bazaar-vcs.org/" rel="external nofollow"> </a><a href="http://bazaar-vcs.org/" rel="external nofollow">الرسمي</a>.
	</li>
	<li>
		لمزيد من المعلومات حول screen، راجع <a href="http://www.gnu.org/software/screen/" rel="external nofollow">موقعه الرسمي</a>.
	</li>
	<li>
		وأيضًا صفحة ويكي أوبنتو "<a href="https://help.ubuntu.com/community/Screen" rel="external nofollow">Screen</a>".
	</li>
	<li>
		راجع <a href="https://launchpad.net/byobu" rel="external nofollow">صفحة مشروع </a><a href="https://launchpad.net/byobu" rel="external nofollow">Byobu</a> لمزيدٍ من المعلومات.
	</li>
</ul>
<p>
	ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/other-useful-applications.html" rel="external nofollow">Ubuntu Server Guide: Other Useful Applications</a>.
</p>
]]></description><guid isPermaLink="false">227</guid><pubDate>Thu, 25 Feb 2016 23:26:00 +0000</pubDate></item><item><title>&#x644;&#x645;&#x62D;&#x629; &#x639;&#x644;&#x649; &#x627;&#x644;&#x634;&#x628;&#x643;&#x627;&#x62A; &#x627;&#x644;&#x639;&#x646;&#x642;&#x648;&#x62F;&#x64A;&#x629; DRBD &#x639;&#x644;&#x649; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%84%D9%85%D8%AD%D8%A9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%86%D9%82%D9%88%D8%AF%D9%8A%D8%A9-drbd-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r226/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-drbd.png.d7f1ccf6752bc6d2f56ae06bf42a01a2.png" /></p>

<p dir="rtl">
	ينشئ DRBD (الذي هو اختصار لـ Distributed Replicated Block Device والذي يُمكن ترجمته إلى «جهاز كتلي موزع ومُستنسَخ») نسخة انعكاسية من الأجهزة الكتلية بين عدِّة مضيفين؛ الاستنساخ غير مرئي لبقية التطبيقات على الأنظمة المضيفة. أي أقراص صلبة، أو أقسام، أو أجهزة RAID، أو حجوم منطقية ...إلخ. يمكن أن تُنسَخ انعكاسيًا (mirrored).
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-drbd.png.a0f8ec25269a7efe2" class="ipsImage ipsImage_thumbnailed" data-fileid="13301" data-unique="gyuow5fnj" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-drbd.png.a0f8ec25269a7efe23146f7797c867fc.png"></p>

<p dir="rtl">
	للبدء باستخدام DRBD، عليك أولًا تثبيت الحزم الضرورية؛ وذلك بإدخال الأمر الآتي من الطرفية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_7">
<span class="pln">sudo apt-get install drbd8-utils</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: إذا كنت تستخدم نواةً وهمية (virtual kernel) كجزءٍ من الآلة الوهمية، فستحتاج إلى تصريف (compile) وحدة <span style="font-family:courier new,courier,monospace;">debd</span>؛ ربما من الأسهل تثبيت حزمة <span style="font-family:courier new,courier,monospace;">linux-server</span> داخل الآلة الوهمية.
</p>

<p dir="rtl">
	يشرح هذا القسم كيفية ضبط <span style="font-family:courier new,courier,monospace;">debd</span> لاستنساخ القسم ‎<span style="font-family:courier new,courier,monospace;">/srv</span> بنظام ملفات ext3 بين مضيفَين؛ لا يهم حجم القسم، لكن يجب أن يكون كلا القسمَين بنفس الحجم.
</p>

<h2 dir="rtl">
	الضبط
</h2>

<p dir="rtl">
	اسم المضيفين في هذا المثال هو <span style="font-family:courier new,courier,monospace;">debd01</span> و <span style="font-family:courier new,courier,monospace;">drbd02</span>؛ وسنحتاج إلى الحصول على خدمة استبيان أسماء إما عبر DNS أو ملف ‎<span style="font-family:courier new,courier,monospace;">/etc/hosts</span>؛ راجع درس <a href="https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%AF%D9%85%D8%A9-%D8%A7%D8%B3%D9%85-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82-dns-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r176/">DNS</a> للتفاصيل.
</p>

<ul><li>
		<p dir="rtl">
			لضبط <span style="font-family:courier new,courier,monospace;">drbd</span>، عدِّل ملف <span style="font-family:courier new,courier,monospace;">‎/etc/drbd.conf </span>على المضيف الأول:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_10">
<span class="pln">global { usage-count no; }
common { syncer { rate 100M; } }
resource r0 {
        protocol C;
        startup {
                wfc-timeout  15;
                degr-wfc-timeout 60;
        }
        net {
                cram-hmac-alg sha1;
                shared-secret "secret";
        }
        on drbd01 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.0.1:7788;
                meta-disk internal;
        }
        on drbd02 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.0.2:7788;
                meta-disk internal;
        }
} </span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: هنالك خيارات أخرى كثيرة في<span style="font-family:courier new,courier,monospace;"> ‎/etc/drbd.conf</span>، لكن القيم الافتراضية كافيةٌ لهذا المثال.
</p>

<ul><li>
		<p dir="rtl">
			انسخ الآن الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/drbd.conf</span> إلى المضيف الثاني:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_12">
<span class="pln">scp /etc/drbd.conf drbd02:~</span></pre>

<ul><li>
		<p dir="rtl">
			الآن، انسخ الملف إلى<span style="font-family:courier new,courier,monospace;"> ‎ /‎etc</span>في <span style="font-family:courier new,courier,monospace;">drbd02</span>:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_14">
<span class="pln">sudo mv drbd.conf /etc/</span></pre>

<ul><li>
		<p dir="rtl">
			باستخدام أداة <span style="font-family:courier new,courier,monospace;">drbdadm</span> لتهيئة تخزين البيانات الوصفية؛ نفِّذ على كل خادوم ما يلي:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_16">
<span class="pln">sudo drbdadm create-md r0</span></pre>

<ul><li>
		<p dir="rtl">
			وعلى كلا المضيفين، شغِّل عفريت <span style="font-family:courier new,courier,monospace;">drbd</span>:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_18">
<span class="pln">sudo service drbd start</span></pre>

<ul><li>
		<p dir="rtl">
			في <span style="font-family:courier new,courier,monospace;">drbd01</span>، أو أي مضيف تريد أن يكون هو المضيف الرئيسي، أدخِل ما يلي:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_20">
<span class="pln">sudo drbdadm -- --overwrite-data-of-peer primary all</span></pre>

<ul><li>
		<p dir="rtl">
			ستبدأ البيانات بالمزامنة مع المضيف الثاني بعد تنفيذ الأمر السابق؛ نفِّذ الأمر الآتي على <span style="font-family:courier new,courier,monospace;">drbd02</span> لمشاهدة العملية:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_22">
<span class="pln">watch -n1 cat /proc/drbd</span></pre>

<p dir="rtl">
	اضغط <span style="font-family:courier new,courier,monospace;">Ctrl+c</span> لإيقاف الأمر السابق.
</p>

<ul><li>
		<p dir="rtl">
			في النهاية، أضف نظام ملفات إلى ‎<span style="font-family:courier new,courier,monospace;">/dev/drbd0</span> وصِله:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_24">
<span class="pln">sudo mkfs.ext3 /dev/drbd0
sudo mount /dev/drbd0 /srv</span></pre>

<h2 dir="rtl">
	الاختبار
</h2>

<p dir="rtl">
	لتختبر إذا كانت الملفات تُزامَن فعليًا بين المضيفين، فانسخ بعض الملفات في <span style="font-family:courier new,courier,monospace;">drbd01</span>، إلى<span style="font-family:courier new,courier,monospace;"> ‎/srv</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_26">
<span class="pln">sudo cp -r /etc/default /srv</span></pre>

<p dir="rtl">
	ثم افصل <span style="font-family:courier new,courier,monospace;">‎/srv</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_28">
<span class="pln">sudo umount /srv</span></pre>

<p dir="rtl">
	الآن نزِّل مرتبة الخادوم الرئيسي إلى دور ثانوي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_30">
<span class="pln">sudo drbdadm secondary r0</span></pre>

<p dir="rtl">
	ورقّ الخادوم الثانوي إلى رئيسي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_32">
<span class="pln">sudo drbdadm primary r0</span></pre>

<p dir="rtl">
	ثم صِل القسم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6360_35">
<span class="pln">sudo mount /dev/drbd0 /srv</span></pre>

<p dir="rtl">
	وباستخدام ls، يجب أن تشاهد <span style="font-family:courier new,courier,monospace;">‎/srv/default </span>منسوخةً من الخادوم الرئيسي (سابقًا) الذي هو <span style="font-family:courier new,courier,monospace;">drbd01</span>.
</p>

<h2 dir="rtl">
	مصادر
</h2>

<ul dir="rtl"><li>
		للمزيد من المعلومات حول DRBD، راجع <a href="http://www.drbd.org/" rel="external nofollow">الصفحة الرئيسية</a> الخاصة به.
	</li>
	<li>
		تحتوي صفحة دليل<span style="font-family:courier new,courier,monospace;"> man drbd.conf </span>على شرح لخيارات لم نغطها في هذا الفصل.
	</li>
	<li>
		راجع أيضًا صفحة الدليل <span style="font-family:courier new,courier,monospace;">man drbdadm</span>.
	</li>
	<li>
		صفحة ويكي أوبنتو «<a href="https://help.ubuntu.com/community/DRBD" rel="external nofollow">DRBD</a>» فيها المزيد من المعلومات.
	</li>
</ul><p>
	ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/drbd.html" rel="external nofollow">Ubuntu Server Guide: DRBD</a>.
</p>
]]></description><guid isPermaLink="false">226</guid><pubDate>Mon, 22 Feb 2016 19:54:09 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x645;&#x62C;&#x645;&#x648;&#x639;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x62D;&#x643;&#x645; cgroup &#x639;&#x644;&#x649; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-cgroup-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r224/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-cgroups.png.dd1cac8531d97dcb213ac545c810d014.png" /></p>

<p dir="rtl">
	مجموعات التحكم هي آلية في النواة لتجميع وتتبع ووضع حد لاستهلاك الموارد للمهام؛ الواجهة الإدارية التي توفرها النواة تكون عبر نظام ملفات وهمي؛ لكن طوِّرت أدوات إدارية لمجموعات التحكم ذات مستوى أعلى، بما فيها <span style="font-family:courier new,courier,monospace;">libcgroup</span> و <span style="font-family:courier new,courier,monospace;">lmctfy</span>. بالإضافة لذلك، هنالك دليل في freedesktop.org حول كيف يمكن أن تتعاون التطبيقات بأفضل طريقة باستخدام واجهة نظام الملفات لمجموعات التحكم (cgroup filesystem interface).
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-cgroups.png.1b95b3e1bec0f6" class="ipsImage ipsImage_thumbnailed" data-fileid="13300" data-unique="rxh6prl66" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-cgroups.png.1b95b3e1bec0f69bf735c24f931dbf0e.png"></p>

<p dir="rtl">
	في أوبنتو 14.04؛ أصبح مدير مجموعات التحكم (<span style="font-family:courier new,courier,monospace;">cgmanager</span>) متوفرًا كأداة أخرى لإدارة واجهة <span style="font-family:courier new,courier,monospace;">cgroup</span>؛ حيث هدفه هو الاستجابة لطلبات dbus من أي مستخدم، مما يمكِّنه من إدارة مجموعات التحكم التي أُسنِدَت إليه فقط.
</p>

<h2 dir="rtl">
	لمحة
</h2>

<p dir="rtl">
	إن مجموعات التحكم (cgroups) هي الميزة التي تستعمل لتجميع المهام؛ حيث يكون تتبع الموارد ووضع حدود لها مُدارًا من أنظمة فرعية؛ إذ أنَّ الهيكلية (hierarchy) هي مجموعة من الأنظمة الفرعية الموصولة مع بعضها بعضًا؛ على سبيل المثال، إذا كانت الأنظمة الفرعية للذاكرة والأجهزة (devices) موصولة مع بعضها في ‎<span style="font-family:courier new,courier,monospace;">/sys/fs/cgroups/set1</span>، فيمكن لأي مهمة في<span style="font-family:courier new,courier,monospace;"> ‎/child1</span> أن تكون عرضةً للحدود الموافقة للنظامين الفرعيين السابقين.
</p>

<p dir="rtl">
	حيث تُشكِّل كل مجموعة من الأنظمة الفرعية الموصولة «هيكليةً» (مع استثناءات)؛ مجموعات التحكم التي تكون أولاد <span style="font-family:courier new,courier,monospace;">‎/child1</span> تكون عرضةً للحدود المفروضة على ‎<span style="font-family:courier new,courier,monospace;">/child1</span>، ويكون استهلاك الموارد محسوبًا على <span style="font-family:courier new,courier,monospace;">‎/child1</span>.
</p>

<p>
	الأنظمة الفرعية الموجودة تتضمن:
</p>

<ul dir="rtl"><li>
		<strong><span style="font-family:courier new,courier,monospace;">cpusets</span></strong>: تبسيط إسناد مجموعة من المعالجات وعُقَد الذاكرة إلى مجموعات التحكم؛ فالمهام في مجموعة تحكّم فيها النظام الفرعي <span style="font-family:courier new,courier,monospace;">cpusets</span> يمكن أن تستخدم المعالجات المُسنَدة إلى تلك المجموعة فقط.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">blkio</span></strong>: تحديد كتل الدخل/الخرج لكل مجموعة تحكم.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">cpuacct</span></strong>: توفير حساب الاستهلاك للمعالج لكل مجموعة تحكم.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">devices</span></strong>: التحكم في قدرة المهام على إنشاء أو استخدام عقد الأجهزة إما باستعمال قائمة بيضاء (whitelist) أو سوداء (blacklist).
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">freezer</span></strong>: توفير طريقة «لتجميد» (freeze) و «تذويب» (thaw) مجموعات التحكم؛ لا يمكن جدولة (scheduled) مجموعات التحكم وهي مجمدة.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">hugetlb</span></strong>: تبسيط وضع حد لاستهلاك <span style="font-family:courier new,courier,monospace;">hugetlb</span> لكل مجموعة تحكم.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">memory</span></strong>: السماح للذاكرة، وذاكرة النواة، وذاكرة التبديل (swap) بأن تُتَبَّع وتقيّد.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">net_cls</span></strong>: توفير واجهة لوضع علامات على الرزم الشبكية بناءً على مجموعة التحكم المُرسِلة؛ يمكن استعمال هذه العلامات لاحقًا باستخدام tc‏ (traffic controller) لإسناد أولويات للرزم الشبكية.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">net_prio</span></strong>: السماح بضبط أولوية بيانات التراسل الشبكي بناءً على مجموعة التحكم.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">cup</span></strong>: تمكين ضبط جدولة الخصائص على أساس مجموعة التحكم.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">pref_event</span></strong>: تفعيل نمط لكل معالج لمراقبة الخيوط (threads) لمجموعات تحكم معينة.
	</li>
</ul><p dir="rtl">
	يمكن إنشاء مجموعات تحكم مُسماة دون استخدام أنظمة فرعية معها، ويكون الغرض من ذلك هو تتبع العمليات؛ على سبيل المثال، يقوم <span style="font-family:courier new,courier,monospace;">systemd</span> بذلك لتتبع خدماته وجلسات المستخدم.
</p>

<h2 dir="rtl">
	نظام الملفات
</h2>

<p dir="rtl">
	تُنشَأ هيكلية بوصل نسخة من نظام ملفات مجموعة التحكم لكل نظام فرعي مُراد استخدامه كخيار للوصل؛ على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9147_7">
<span class="pln">mount -t cgroup -o devices,memory,freezer cgroup /cgroup1</span></pre>

<p dir="rtl">
	وهذا ما سيُنشِئ هيكلية فوريًا مع الأجهزة ومجموعات التحكم للذاكرة موصولةً مع بعضها؛ ويمكن إنشاء مجموعة تحكم فرعية (child cgroup) باستخدام <span style="font-family:courier new,courier,monospace;">mkdir</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9147_9">
<span class="pln">mkdir /cgroup1/child1</span></pre>

<p dir="rtl">
	يمكن نقل المهام إلى مجموعة التحكم الفرعية الجديدة بكتابة أرقام معرفات عملياتهم في ملف <span style="font-family:courier new,courier,monospace;">tasks</span> أو <span style="font-family:courier new,courier,monospace;">cgroup.procs</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9147_11">
<span class="pln">sleep 100
echo $! &gt; /cgroup1/child1/cgroup.procs</span></pre>

<p dir="rtl">
	يمكن الإدارة أيضًا عبر ملفات في مجلدات <span style="font-family:courier new,courier,monospace;">cgroup</span>؛ على سبيل المثال، لتجميد جميع المهام في <span style="font-family:courier new,courier,monospace;">child1</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9147_13">
<span class="pln">echo FROZEN &gt; /cgroup1/child1/freezer.state</span></pre>

<p dir="rtl">
	يمكن العثور على كمية كبيرة من المعلومات عن مجموعات التحكم وأنظمتها الفرعية في مجلد التوثيق <span style="font-family:courier new,courier,monospace;">cgroups</span> في شجرة مصدر النواة.
</p>

<h2 dir="rtl">
	التفويض
</h2>

<p dir="rtl">
	يمكن لملفات ومجلدات مجموعات التحكم أن تُملَك من مستخدمين غير المستخدم الجذر، مما يمكِّن تفويض (delegation) إدارة مجموعات التحكم؛ عمومًا، تُجبِر النواة القيود المفروضة على الهيكلية على الأولاد؛ على سبيل المثال، إن كانت مجموعة الأجهزة <span style="font-family:courier new,courier,monospace;">‎/child1</span> لا تملك وصولًا للقرص الصلب، فلا تستطيع مجموعة التحكم <span style="font-family:courier new,courier,monospace;">‎/child1/child2 </span>إعطاء نفسها هذه الامتيازات.
</p>

<p dir="rtl">
	في أوبنتو 14.04، يوضع المستخدمون افتراضيًا في مجموعة من مجموعات التحكم التي يملكونها، مما يسمح لهم باحتواء المهام التي يشغلونها باستخدام مجموعات تحكم فرعية بأمان؛ تُستخدَم هذه الميزة عمليًا ويمكن الاعتماد عليها فمثلًا يمكن استخدامها لإنشاء <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/">حاوية LXC</a> دون امتيازات.
</p>

<h2 dir="rtl">
	المدير
</h2>

<p dir="rtl">
	مدير مجموعات التحكم (<span style="font-family:courier new,courier,monospace;">cgmanager</span>) يوفر خدمة D-Bus للسماح للبرامج والمستخدمين بإدارة مجموعات التحكم دون الحاجة إلى معرفة أو وصول مباشر إلى نظام ملفات مجموعات التحكم. وللطلبات من المهام في نفس مجال الأسماء (namespace) للمدير، فيمكن للمدير إجراء التحققات الأمنية اللازمة للتأكد من شرعية تلك الطلبات؛ وللطلبات الأخرى، كتلك القادمة من مهمة في حاوية، فيجب القيام بطلبات D-Bus مُحَسَّنة؛ حيث يجب أن تُمرَّر معرفات process، و user، و group على شكل SCM_CREDENTIALS، لذلك يمكن للنواة ربط المعرفات إلى قيم المضيف العامة.
</p>

<p dir="rtl">
	ولتبسيط استخدام استدعاءات D-Bus من جميع المستخدمين، فيبدأ «وسيط مدير مجموعات التحكم» (cgproxy) تلقائيًا في الحاويات؛ حيث يقبل طلبات D-Bus قياسية من المهام في نفس مجال أسمائه، ثم يحوله إلى طلبات SCM D-Bus محسنة التي تُمرَّر بعد ذلك إلى cgmanager.
</p>

<p dir="rtl">
	مثال بسيط عن إنشاء مجموعة تحكم -التي ستُشغِّل تصريفًا (compile) يستهلك كثيرًا من طاقة المعالجة- سيكون كالآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9147_16">
<span class="pln">cgm create cpuset build1
cgm movepid cpuset build1 $$
cgm setvalue cpuset build1 cpuset.cpus 1
make</span></pre>

<h2 dir="rtl">
	مصادر
</h2>

<ul dir="rtl"><li>
		مشروع cgmanager مُستضاف في <a href="http://cgmanager.linuxcontainers.org/" rel="external nofollow">linuxcontainers.org</a>.
	</li>
	<li>
		يمكن العثور على صفحة توثيق النواة <a href="https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/cgroups" rel="external nofollow">هنا</a>.
	</li>
	<li>
		ويمكن العثور على دليل freedesktop.org لاستخدام مجموعات التحكم <a href="http://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups/" rel="external nofollow">هنا</a>.
	</li>
</ul><div id="sdfootnote1">
	<p>
		ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/cgroups.html" rel="external nofollow">Ubuntu Server Guide: Control Groups</a>.
	</p>
</div>
]]></description><guid isPermaLink="false">224</guid><pubDate>Mon, 22 Feb 2016 19:53:12 +0000</pubDate></item><item><title>&#x625;&#x62C;&#x631;&#x627;&#x621; &#x645;&#x647;&#x627;&#x645; &#x645;&#x639;&#x64A;&#x646;&#x629; &#x639;&#x646;&#x62F; &#x645;&#x62E;&#x62A;&#x644;&#x641; &#x645;&#x631;&#x627;&#x62D;&#x644; &#x62F;&#x648;&#x631;&#x629; &#x62D;&#x64A;&#x627;&#x629; &#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x644;&#x64A;&#x646;&#x643;&#x633; (LXC)</title><link>https://academy.hsoub.com/devops/servers/%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1-%D9%85%D9%87%D8%A7%D9%85-%D9%85%D8%B9%D9%8A%D9%86%D8%A9-%D8%B9%D9%86%D8%AF-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D9%85%D8%B1%D8%A7%D8%AD%D9%84-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AD%D9%8A%D8%A7%D8%A9-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r221/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-lxc-hooks.png.e532c54199e494ad698edfea3443165a.png" /></p>

<p dir="rtl">
	تعرفنا في الدرسين الماضيين عن <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/">مفهوم حاويات لينكس (LXC) ومبدأ عملها</a> ثم شرعنا في <a href="https://academy.hsoub.com/devops/servers/%D8%A8%D8%AF%D8%A1-%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r220/">كيفية البدء في استعمالها</a>. سنعرج في هذا الدرس إلى كيفية استغلال مختلف نقاط ومراحل دورة حياة حاويات لينكس (LXC) لإدراج بعض من الإضافات (hooks) التي تقوم بإجراء مهمة ما.
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-lxc-hooks.png.0ce563bb4d37" class="ipsImage ipsImage_thumbnailed" data-fileid="13420" data-unique="iwd7ucche" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-lxc-hooks.png.0ce563bb4d3762dfc47191190ecc75e5.png"></p>

<h2 dir="rtl">
	إضافات إدارة دورة التشغيل
</h2>

<p dir="rtl">
	بدءًا من أوبنتو 12.10، أصبح من الممكن تعريف إضافات (hooks) تُنفَّذ عند نقاط محددة من دورة تشغيل الحاوية:
</p>

<ul dir="rtl"><li>
		الإضافات التي تحدث قبل التشغيل تُنفَّذ من مجال أسماء المضيف قبل أن تُنشَأ طرفيات أو نقاط وصل الحاويات؛ إذا أُجري أي وصل في هذه الفترة، فيجب أن يُنظَّف في إضافة تحدث بعد إيقاف التشغيل.
	</li>
	<li>
		الإضافات التي تحدث قبل الوصل تُنفَّذ في مجال أسماء الحاوية، لكن قبل أن يوصل جذر نظام الملفات؛ سينظف أي وصل لنظام الملفات في هذه الفترة تلقائيًا عند إيقاف تشغيل الحاوية.
	</li>
	<li>
		إضافات الوصل هي إضافات تنفذ بعد وصل أنظمة ملفات الحاوية، لكن قبل أن تُنفِّذ الحاوية pivot_root لتغيير جذر نظام ملفاتها.
	</li>
	<li>
		الإضافات التي تحدث بعد إيقاف التشغيل ستنفَّذ بعد إيقاف تشغيل الحاوية.
	</li>
</ul><p dir="rtl">
	إذا أعادت أيّة إضافة خطأً، فسيلغى تشغيل الحاوية، لكن أي إضافة تحدث بعد إيقاف التشغيل ستنفَّذ، ستُسجَّل أيّة مخرجات تولد من السكربت بأولوية التنقيح (debug).
</p>

<p dir="rtl">
	رجاءً راجع صفحة دليل<span style="font-family:courier new,courier,monospace;"> lxc.container.conf</span> لصيغة ملف الضبط التي سيحدد الإضافات؛ يمكن أن تأتي بعض أمثلة الإضافات في الحزمة <span style="font-family:courier new,courier,monospace;">lxc</span> لتخدم كمثال حول طريقة كتابة إحدى تلك الإضافات.
</p>

<h2 dir="rtl">
	سطر الأوامر
</h2>

<p dir="rtl">
	لدى الحاويات عدد مضبوط من «أسطر الأوامر» (consoles)؛ أحدها موجودٌ دائمًا في<span style="font-family:courier new,courier,monospace;"> ‎/dev/console</span>؛ الذي يظهر في الطرفية عندما تُشغِّل<span style="font-family:courier new,courier,monospace;"> lxc-start </span>ما لم تحدد الخيار ‎<span style="font-family:courier new,courier,monospace;">-d</span>؛ يمكن إعادة توجيه ناتج خرج <span style="font-family:courier new,courier,monospace;">‎/dev/console</span> إلى ملف باستخدام<span style="font-family:courier new,courier,monospace;"> ‎-c console-file</span> في الأمر<span style="font-family:courier new,courier,monospace;"> lxc-start</span>؛ يمكن تحديد عدد إضافي من أسطر الأوامر باستخدام المتغير <span style="font-family:courier new,courier,monospace;">lxc.tty </span>المضبوط عادةً إلى 4؛ يمكن أن تظهر أسطر الأوامر تلك في <span style="font-family:courier new,courier,monospace;">‎/dev/ttyN </span>(حيث N أكبر أو تساوي 1، وأصغر أو تساوي 4)؛ ولتسجيل الدخول إلى console 3 من المضيف، فنفِّذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_8">
<span class="pln">sudo lxc-console -n container -t 3</span></pre>

<p dir="rtl">
	إذا لم تحدد الخيار ‎<span style="font-family:courier new,courier,monospace;">-t N</span>، فسيتم اختيار سطر أوامر غير مُستخدَم؛ للخروج منه، استخدام عبارة الخروج <span style="font-family:courier new,courier,monospace;">Ctrl-a q</span>؛ لاحظ أن عبارة الخروج لا تعمل في سطر الأوامر الناتج عن<span style="font-family:courier new,courier,monospace;"> lxc-start</span> دون الخيار ‎<span style="font-family:courier new,courier,monospace;">-d</span>.
</p>

<h2 dir="rtl">
	استكشاف الأخطاء
</h2>

<h3 dir="rtl">
	التسجيل
</h3>

<p dir="rtl">
	إذا حدث شيء ما خاطئ عند تشغيل حاوية، فإن أول خطوة هي الحصول على سجل كامل من LXC:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_10">
<span class="pln">sudo lxc-start -n C1 -l trace -o debug.out</span></pre>

<p dir="rtl">
	هذا سيؤدي إلى جعل lxc يسجل في أعلى درجة إسهاب، التي هي trace، وسيكون ملف التخزين هو ملف باسم «<span style="font-family:courier new,courier,monospace;">debug.out</span>»، إذا كان الملف<span style="font-family:courier new,courier,monospace;"> debug.out</span> موجودًا مسبقًا، فستُضاف معلومات السجل الجديد إليه.
</p>

<h3 dir="rtl">
	مراقبة حالة الحاوية
</h3>

<p dir="rtl">
	هنالك أمران متوفران لمراقبة تغيرات حالة الحاوية:<span style="font-family:courier new,courier,monospace;"> lxc-monitor </span>الذي يراقب حاويةً أو أكثر ﻷي تغيرات في الحالة، حيث يأخذ اسم الحاوية مع الخيار <span style="font-family:courier new,courier,monospace;">‎-n </span>كالعادة؛ لكن في هذا الحالة، يمكن أن يكون اسم الحاوية تعبيرًا نمطيًا من نمط POSIX للسماح بمراقبة مجموعة من الحاويات؛ يستمر<span style="font-family:courier new,courier,monospace;"> lxc-monitor</span> بالعمل ويعرض تغيرات حالات الحاويات؛ أما<span style="font-family:courier new,courier,monospace;"> lxc-wait </span>فينتظر تغيِّرًا محددًا في الحالة ثم ينتهي تنفيذه؛ على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_12">
<span class="pln">sudo lxc-monitor -n cont[0-5]*</span></pre>

<p dir="rtl">
	هذا سيعرض جميع تغيرات الحالة لأي حاوية تطابق التعبير النمطي؛ بينما:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_14">
<span class="pln">sudo lxc-wait -n cont1 -s 'STOPPED|FROZEN'</span></pre>

<p dir="rtl">
	سينتظر إلى أن تتغير حالة الحاوية <span style="font-family:courier new,courier,monospace;">cont1</span> إلى <span style="font-family:courier new,courier,monospace;">STOPPED</span> أو <span style="font-family:courier new,courier,monospace;">FROZEN</span> ثم ينتهي.
</p>

<h3 dir="rtl">
	الوصل
</h3>

<p dir="rtl">
	من الممكن في أوبنتو 14.04 الوصل (attach) إلى مجال أسماء حاوية، أبسط طريقة هي تنفيذ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_16">
<span class="pln">sudo lxc-attach -n C1</span></pre>

<p dir="rtl">
	الذي سيبدأ صدفة موصولة لمجال الحاوية C1، أو داخل الحاوية؛ آلية عمل الوصل هي معقدة جدًا، مما يسمح بوصل مجموعة فرعية من مجالات أسماء (namespaces) الحاوية ونمط الحماية (security context)، راجع صفحة الدليل لمزيدٍ من المعلومات.
</p>

<h3 dir="rtl">
	درجة إسهاب init في الحاوية
</h3>

<p dir="rtl">
	إذا أكمل LXC بدء تشغيل الحاوية، لكن فشل إكمال تنفيذ <span style="font-family:courier new,courier,monospace;">init</span> فيها (على سبيل المثال، لم يُعرَض محث الدخول)، فمن المفيد طلب درجة إسهاب أكبر من عملية <span style="font-family:courier new,courier,monospace;">init</span>، فلحاوية <span style="font-family:courier new,courier,monospace;">upstart</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_18">
<span class="pln">sudo lxc-start -n C1 /sbin/init loglevel=debug</span></pre>

<p dir="rtl">
	يمكنك أيضًا بدء تشغيل برامج مختلفة عن <span style="font-family:courier new,courier,monospace;">init</span>، على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_20">
<span class="pln">sudo lxc-start -n C1 /bin/bash
sudo lxc-start -n C1 /bin/sleep 100
sudo lxc-start -n C1 /bin/cat /proc/1/status</span></pre>

<h2 dir="rtl">
	واجهة LXC البرمجية <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>
</h2>

<p dir="rtl">
	يمكن الوصول إلى غالبية وظائف LXC عبر واجهة برمجية (<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>) مُصدَّرة من <span style="font-family:courier new,courier,monospace;">liblxc</span> التي تكون ارتباطاتها متوفرة لعدة لغات برمجية بما فيها بايثون، و lua، وروبي، و go.
</p>

<p dir="rtl">
	ما يلي هو مثال عن استخدام ربط بايثون (المتوفرة في حزمة <span style="font-family:courier new,courier,monospace;">python3-lxc</span>)، التي تُنشِئ وتبدأ حاوية، ثم تنتظر إلى أن يوقف تشغيلها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4854_22">
<span class="pln"># sudo python3
Python 3.2.3 (default, Aug 28 2012, 08:26:03)
[GCC 4.7.1 20120814 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import lxc
__main__:1: Warning: The python-lxc API isn't yet stable and may change at any p
oint in the future.
&gt;&gt;&gt; c=lxc.Container("C1")
&gt;&gt;&gt; c.create("ubuntu")
True
&gt;&gt;&gt; c.start()
True
&gt;&gt;&gt; c.wait("STOPPED")
True</span></pre>

<h2 dir="rtl">
	الحماية
</h2>

<p dir="rtl">
	يربط مجال الأسماء المعرفات (ids) إلى الموارد؛ لكنه لا يوفر للحاوية أي معرِّف يمكنه أن يشير إلى المورد، لذلك يمكن أن يُحمى المورد؛ وهذا هو أساس بعض الحماية الموفرة لمستخدمي الحاوية؛ على سبيل المثال، مجال أسماء IPC معزول تمامًا؛ لكن مجالات أسماء أخرى فيها بعض «التسربات» (leaks) التي تسمح للامتيازات بأن تُستخرَج بشكل غير ملائم من الحاوية إلى حاوية أخرى، أو إلى المضيف.
</p>

<p dir="rtl">
	افتراضيًا، تُشغَّل حاويات LXC بسياسة AppArmor التي تقيّد بعض الأفعال، تفاصيل دمج AppArmor مع LXC موجودة في قسم «<a href="https://academy.hsoub.com/devops/servers/%D8%A8%D8%AF%D8%A1-%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-lxc-r220/">AppArmor</a>» في الدرس السابق، الحاويات دون امتيازات تربط الجذر في الحاوية إلى مستخدم دون امتيازات في المضيف، وهذا يمنع الوصول إلى ملفات <span style="font-family:courier new,courier,monospace;">‎/proc </span>و <span style="font-family:courier new,courier,monospace;">‎/sys </span>التي تمثل موارد المضيف، وغيرها من الملفات المملوكة من الجذر في المضيف.
</p>

<h3 dir="rtl">
	الثغرات في استدعاءات النظام
</h3>

<p dir="rtl">
	ميزة أساسية من مزايا الحاويات أنها تشارك النواة مع المضيف؛ وهذا يعني أنه إذا حوت النواة على أيّة ثغرات في استدعاءات النظام (system calls)، فيمكن أن تستغلها الحاوية؛ وبعد أن تتحكم حاوية بالنواة، فيمكنها أن تسيطر سيطرةً كاملةً على أي مورد معروف للمضيف!
</p>

<p dir="rtl">
	بدءًا من أوبنتو 12.10، يمكن أن تقيَّد الحاوية من مرشِّح seccomp، إن Seccomp هو ميزة جديدة في النواة التي تُرشِّح استدعاءات النظام التي يمكن أن تُستخدَم من المهمة وأولادها؛ بينما يتوقع الوصول إلى إدارة سهلة ومحسنة للسياسة في المستقبل القريب، لكن تحتوي السياسة الحالية على قائمة بيضاء بسيطة لأرقام استدعاءات النظام؛ يبدأ ملف السياسة برقم الإصدار (الذي يجب أن يكون 1) في أول سطر ونوع السياسة (الذي يجب أن يكون whitelist) في ثاني سطر؛ وتُلحَق بقائمة أرقام، كل رقم في سطر.
</p>

<p dir="rtl">
	سنحتاج عادةً لتشغيل حاوية بتوزيعة كاملة إلى عدد كبير من استدعاءات النظام؛ لكن لحاويات البرامج، يمكن أن نقلل عدد استدعاءات النظام المتوفرة إلى رقم قليل؛ وحتى للحاويات التي تشغل توزيعات كاملة يمكن الحصول على فوائد أمنية إذا حذفت -على سبيل المثال- استدعاءات النظام المتوافقة مع 32 بت في حاوية 64 بت؛ راجع صفحة دليل<span style="font-family:courier new,courier,monospace;"> lxc.container.conf </span>للمزيد من التفاصيل حول كيفية ضبط الحاوية لتستخدم seccomp؛ لن تُحمَّل افتراضيًا سياسة seccomp.
</p>

<h2 dir="rtl">
	مصادر
</h2>

<ul dir="rtl"><li>
		كتاب «<a href="http://www.ibm.com/developerworks/linux/library/l-lxc-security/index.html" rel="external nofollow">Secure Containers Cookbook</a>» يشرح كيفية استخدام أنماط الحماية لجعل الحاويات أكثر أمانًا.
	</li>
	<li>
		<a href="http://linuxcontainers.org/" rel="external nofollow">مشروع </a><a href="http://linuxcontainers.org/" rel="external nofollow">LXC</a> مُستضاف في linuxcontainers.org.
	</li>
	<li>
		مشاكل LXC الأمنية مذكورة ومناقشة في صفحة وكي «<a href="http://wiki.ubuntu.com/LxcSecurity" rel="external nofollow">LXC Security</a>».
	</li>
</ul><div id="sdfootnote1">
	<p>
		ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/lxc.html" rel="external nofollow">Ubuntu Server Guide: LXC</a>.
	</p>
</div>
]]></description><guid isPermaLink="false">221</guid><pubDate>Mon, 22 Feb 2016 19:52:10 +0000</pubDate></item><item><title>&#x628;&#x62F;&#x621; &#x62A;&#x634;&#x63A;&#x64A;&#x644; &#x648;&#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; &#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x644;&#x64A;&#x646;&#x643;&#x633; (LXC)</title><link>https://academy.hsoub.com/devops/servers/%D8%A8%D8%AF%D8%A1-%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%88%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r220/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-start-lxc.png.651aa287059ba712d26772a0f96ecf24.png" /></p>

<p dir="rtl">
	تعرفنا في الدرس الماضي على <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/">مفهوم حاويات لينكس (LXC)، مبدأ عملها وكيفية تثبيتها</a>، سنشرع في هذا الدرس إلى كيفية بدء تشغيلها واستعمالها.
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-start-lxc.png.95050de6cd24" class="ipsImage ipsImage_thumbnailed" data-fileid="13419" data-unique="6oxt6d08q" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-start-lxc.png.95050de6cd24da9c62ac61c4ace51463.png"></p>

<p dir="rtl">
	لا يملك LXC عفريتًا (daemon) يعمل طوال الوقت، لكنه يملك مهام <span style="font-family:courier new,courier,monospace;">upstart</span>:
</p>

<ul dir="rtl"><li>
		<strong>المهمة ‎<span style="font-family:courier new,courier,monospace;">/etc/init/lxc-net.conf</span></strong>: هي مهمة اختيارية تعمل فقط إذا حَدَّد الملف <span style="font-family:courier new,courier,monospace;">‎/etc/default/lxc </span>الخاصية <span style="font-family:courier new,courier,monospace;">USE_LXC_BRIDGE</span> (قيمتها هي true افتراضيًا)؛ حيث تهيِّء جسر NAT لكي تستخدمه الحاويات.
	</li>
	<li>
		<strong>المهمة ‎<span style="font-family:courier new,courier,monospace;">/etc/init/lxc.conf</span></strong>: تعمل إذا كانت الخاصية <span style="font-family:courier new,courier,monospace;">LXC_AUTO</span> (قيمتها true افتراضيًا) مضبوطة إلى true في <span style="font-family:courier new,courier,monospace;">‎/etc/default/lxc</span>؛ حيث تبحث عن القيود في المجلد <span style="font-family:courier new,courier,monospace;">‎/etc/lxc/auto‎/‎</span> حيث توجد وصلات رمزية إلى ملفات الضبط للحاويات التي يجب أن تُشغَّل في وقت الإقلاع.
	</li>
	<li>
		<strong>المهمة <span style="font-family:courier new,courier,monospace;">‎/etc/init/lxc-instance.conf</span></strong>: تُستخدَم من <span style="font-family:courier new,courier,monospace;">‎/etc/init/lxc.conf</span> للبدء التلقائي لتشغيل حاوية.
	</li>
</ul><h2 dir="rtl">
	التخزين
</h2>

<p dir="rtl">
	يدعم LXC عدّة أنماط من التخزين لجذر نظام ملفات الحاوية؛ افتراضيًا يكون مجلدًا بسيطًا، لأنه لا يتطلب أي ضبط مسبق للمضيف طالما أن نظام الملفات فيه مساحة تخزينية كافية؛ وهو لا يتطلب أيضًا امتيازات الجذر لإنشاء المخزن، لذلك سيكون ملائمًا للاستخدام دون امتيازات؛ جذر نظام الملفات للاستخدام مع امتيازات موجود افتراضيًا في ‎<span style="font-family:courier new,courier,monospace;">/var/lib/lxc/C1/rootfs</span>، بينما جذر نظام الملفات للحاويات التي تعمل دون امتيازات يكون في ‎<span style="font-family:courier new,courier,monospace;">~/.local/share/lxc/C1/rootfs</span>، إذا حُدِّد <span style="font-family:courier new,courier,monospace;">lxcpath</span> خاص في<span style="font-family:courier new,courier,monospace;"> lxc.system.com</span>، فإن جذر نظام ملفات الحاوية سيكون موجودًا في ‎<span style="font-family:courier new,courier,monospace;">$lxcpath/C1/rootfs</span>.
</p>

<p dir="rtl">
	نسخة snapshot باسم C2 لحاوية C1 التي تُخزَّن في مجلد ستصبح حاوية <span style="font-family:courier new,courier,monospace;">overlayfs</span>، بجذر نظام ملفات هو <span style="font-family:courier new,courier,monospace;">overlayfs:/var/lib/lxc/C1/rootfs:/var/lib/lxc/C2/delta0</span>، أنواع التخزين الأخرى تتضمن loop، و btrfs، و LVM، و zfs.
</p>

<p dir="rtl">
	حاوية تعتمد على تخزين btrfs تبدو عمومًا مثل حاوية تعتمد على التخزين في مجلد، ويكون جذر نظام الملفات في نفس المكان؛ لكن جذر نظام الملفات يحتوي على حجم فرعي (subvolume)، لذلك تكون نسخة snapshot مُنشَأة باستخدام نسخة snapshot لحجم فرعي.
</p>

<p dir="rtl">
	جذر نظام الملفات لحاوية تستخدم LVM يمكن أن يكون أي حجم منطقي منفصل؛ اسم مجموعة الحجوم الافتراضي يمكن أن يُحدَّد في ملف<span style="font-family:courier new,courier,monospace;"> lxc.conf</span>؛ ويُضبَط نوع وحجم نظام الملفات لكل حاوية باستخدام <span style="font-family:courier new,courier,monospace;">lxc-create</span>.
</p>

<p dir="rtl">
	جذر نظام الملفات لحاوية تستخدم zfs هو نظام ملفات zfs منفصل، وموصول في المكان التقليدي <span style="font-family:courier new,courier,monospace;">‎/var/lib ‎/lxc/C1/rootfs</span>، يمكن تحديد zfsroot باستخدام <span style="font-family:courier new,courier,monospace;">lxc-create</span>، ويمكن تحديد قيمة افتراضية في ملف <span style="font-family:courier new,courier,monospace;">lxc.system.conf</span>.
</p>

<p dir="rtl">
	المزيد من المعلومات حول إنشاء الحاويات بمختلف طرائق التخزين يمكن أن توجد في صفحة دليل <span style="font-family:courier new,courier,monospace;">lxc-create</span>.
</p>

<h2 dir="rtl">
	القوالب
</h2>

<p dir="rtl">
	يتطلب إنشاء حاوية عادةً إنشاء جذر نظام ملفات للحاوية؛ يفوض الأمر <span style="font-family:courier new,courier,monospace;">lxc-create </span>هذا العمل إلى القوالب (templates)، التي تكون عادةً خاصة بالتوزيعة؛ قوالب lxc التي تأتي مع lxc يمكن أن توجد في مجلد <span style="font-family:courier new,courier,monospace;">‎/usr/share/lxc/templates</span>، بما فيها القوالب لإنشاء أوبنتو، ودبيان، وفيدورا، وأوراكل، وسنتوس، وجنتو بالإضافة لغيرها.
</p>

<p dir="rtl">
	إنشاء صور للتوزيعات في أغلب الحالات يتطلب القدرة على إنشاء عقد أجهزة، ويتطلب ذلك أدوات التي ليست متوفرة في بقية التوزيعات، وعادةً يستغرق هذا الأمر وقتًا طويلًا؛ فلذلك يأتي lxc بقالب download، الذي ينزل صور مبنية مسبقًا للحاويات من خادوم lxc مركزي؛ أهم حالة استخدام هي السماح بإنشاء بسيط لحاويات دون امتيازات بواسطة مستخدمين غير الجذر، الذين لن يستطيعوا ببساطة تشغيل الأمر <span style="font-family:courier new,courier,monospace;">debootstrap</span>.
</p>

<p dir="rtl">
	عند تشغيل <span style="font-family:courier new,courier,monospace;">lxc-create</span>، فجميع الخيارات التي تأتي بعد «--» تُمرَّر إلى القالب؛ ففي الأمر الآتي، تمرر الخيارات <span style="font-family:courier new,courier,monospace;">‎--name </span>و <span style="font-family:courier new,courier,monospace;">‎--template </span>و <span style="font-family:courier new,courier,monospace;">‎--bdev </span>إلى <span style="font-family:courier new,courier,monospace;">lxc-create</span>، بينما يمرر الخيار <span style="font-family:courier new,courier,monospace;">‎--release </span>إلى القالب:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_7">
<span class="pln">lxc-create --template ubuntu --name c1 --bdev loop -- --release trusty</span></pre>

<p dir="rtl">
	يمكنك الحصول على مساعدة حول الخيارات المدعومة في حاوية معينة بتمرير الخيار <span style="font-family:courier new,courier,monospace;">‎--help </span>واسم القالب إلى الأمر <span style="font-family:courier new,courier,monospace;">lxc-create</span>؛ فعلى سبيل المثال، للحصول على مساعدة حول تنزيل قالب:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_9">
<span class="pln">lxc-create --template download --help</span></pre>

<h2 dir="rtl">
	البدء التلقائي
</h2>

<p dir="rtl">
	يدعم LXC تعليم الحاويات لكي تُشغَّل عند إقلاع النظام؛ ففي الإصدارات قبل أوبنتو 14.04، كان يتم ذلك باستخدام وصلات رمزية في المجلد <span style="font-family:courier new,courier,monospace;">‎/etc/lxc/auto</span>؛ وبدءًا من أوبنتو 14.04، يتم ذلك عبر ملفات ضبط الحاوية؛ القيد:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_11">
<span class="pln">lxc.start.auto = 1
lxc.start.delay = 5</span></pre>

<p dir="rtl">
	يعني أن على الحاوية البدء عند إقلاع النظام ويجب الانتظار 5 ثواني قبل بدء تشغيل الحاوية التالية؛ يدعم LXC أيضًا ترتيب وتجميع الحاويات، وأيضًا إعادة الإقلاع وإيقاف التشغيل عبر مجموعات autostart؛ راجع صفحات دليل <span style="font-family:courier new,courier,monospace;">lxc-autostart </span>و <span style="font-family:courier new,courier,monospace;">lxc-container.conf</span> للمزيد من المعلومات.
</p>

<h2 dir="rtl">
	AppArmor
</h2>

<p dir="rtl">
	يأتي LXC مع ملف ضبط <a href="https://academy.hsoub.com/devops/servers/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%85%D9%86-%D9%88%D8%A7%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-apparmor-r186/">AppArmor</a> مهمته هي حماية المضيف من الإساءة العرضية للامتيازات داخل الحاوية؛ على سبيل المثال، لن تكون الحاوية قادرةً على الكتابة إلى ‎<span style="font-family:courier new,courier,monospace;">/proc/sysrq-trigger</span> أو أغلبية ملفات ‎<span style="font-family:courier new,courier,monospace;">/sys</span>.
</p>

<p dir="rtl">
	الملف <span style="font-family:courier new,courier,monospace;">usr.bin.lxc-start</span> يدخل حيز التنفيذ عند تشغيل<span style="font-family:courier new,courier,monospace;"> lxc-start</span>؛ يمنع ملف الضبط <span style="font-family:courier new,courier,monospace;">lxc-start</span> من وصل أنظمة ملفات جديدة خارج نظام ملفات الجذر الخاص بالحاوية؛ قبل تنفيذ <span style="font-family:courier new,courier,monospace;">init</span> للحاوية، فإن LXC يطلب تبديلًا لملف ضبط الحاوية؛ افتراضيًا، هذا الضبط هو السياسة <span style="font-family:courier new,courier,monospace;">lxc-container-default</span> المعرَّفة في ملف الضبط ‎<span style="font-family:courier new,courier,monospace;">/etc/apparmor.d/lxc/lxc-default</span>. يمنع هذا الضبط الحاوية من الوصول إلى مسارات خطرة، ومن وصل أغلبية أنظمة الملفات.
</p>

<p dir="rtl">
	لا يمكن تقييد البرامج في الحاوية أكثر من ذلك؛ فعلى سبيل المثال، خادوم MySQL الذي يعمل ضمن نطاق الحاوية (مما يحمي المضيف) لا يمكن أن يدخل في نطاق ملف ضبط MySQL (لحماية الحاوية).
</p>

<p dir="rtl">
	لا يدخل <span style="font-family:courier new,courier,monospace;">lxc-execute </span>ضمن سلطة AppArmor، لكن الحاوية التي يُنشِئها (spawn) ستكون مقيدةً.
</p>

<h3 dir="rtl">
	تعديل سياسات الحاوية
</h3>

<p dir="rtl">
	إذا وجدت أن <span style="font-family:courier new,courier,monospace;">lxc-start </span>لا يعمل بسبب تقييد في الوصول من سياسة AppArmor، فيمكنك تعطيل ملف ضبط <span style="font-family:courier new,courier,monospace;">lxc-start</span> بتنفيذ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_14">
<span class="pln">sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/</span></pre>

<p dir="rtl">
	هذا سيجعل<span style="font-family:courier new,courier,monospace;"> lxc-start </span>يعمل دون قيود، لكن ستبقى الحدود موجودةً للحاوية نفسها، وإذا أردت إزالة التقييد عن الحاوية، فعليك بالإضافة إلى تعطيل ملف الضبط<span style="font-family:courier new,courier,monospace;"> usr.bin.lxc-start</span> أن تضيف السطر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_16">
<span class="pln">lxc.aa_profile = unconfined</span></pre>

<p dir="rtl">
	إلى ملف ضبط الحاوية. يأتي LXC مع سياسات بديلة للحاويات، فإذا أردت إنشاء حاويات داخل حاويات (تشعب)، فعليك استخدام ملف الضبط <span style="font-family:courier new,courier,monospace;">lxc-container-default-with-nasting</span> بإضافة السطر الآتي إلى ملف ضبط الحاوية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_18">
<span class="pln">lxc.aa_profile = lxc-container-default-with-nesting</span></pre>

<p dir="rtl">
	إذا أردت استخدام <span style="font-family:courier new,courier,monospace;">libvirt</span> داخل الحاويات، فستحتاج إلى تعديل تلك السياسة (المعرفة في <span style="font-family:courier new,courier,monospace;">‎‎/etc/apparmor.d/lxc/lxc-default-with-nasting</span>) وإزالة التعليق عن السطر الآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_20">
<span class="pln">mount fstype=cgroup -&gt; /sys/fs/cgroup/**,</span></pre>

<p dir="rtl">
	ثم أعد تحميل السياسة.
</p>

<p dir="rtl">
	لاحظ أن سياسة التشعب للحاويات ذات الامتيازات هي أقل أمانًا من السياسة الافتراضية، حيث تسمح للحاويات بإعادة وصل <span style="font-family:courier new,courier,monospace;">‎/sys </span>و ‎<span style="font-family:courier new,courier,monospace;">/proc</span> في أمكان غير قياسية، مما يتجاوز سياسة AppArmor؛ لا تملك الحاويات دون امتيازات هذا التأثير الجانبي، ﻷن جذر الحاوية لا يمكنه الكتابة إلى ملفات <span style="font-family:courier new,courier,monospace;">proc</span> و <span style="font-family:courier new,courier,monospace;">sys</span> المملوكة من الجذر.
</p>

<p dir="rtl">
	إذا أردت تشغيل الحاوية بملف ضبط مخصص، فبإمكانك إنشاء ملف ضبط في ‎<span style="font-family:courier new,courier,monospace;">/etc/apparmor.d/lxc</span>، ويجب أن يبدأ اسمه بالكلمة<span style="font-family:courier new,courier,monospace;"> lxc-‎</span> لكي يُسمَح لبرنامج <span style="font-family:courier new,courier,monospace;">lxc-start</span> بالانتقال إليه؛ ملف <span style="font-family:courier new,courier,monospace;">lxc-default </span>يتضمن إعادة استعمال الملف المجرد <span style="font-family:courier new,courier,monospace;">‎/etc/apparmor.d/abstraction/lxc/container-base</span>؛ طريقة سهلة لإنشاء ملف ضبط جديد هي فعل المثل، ثم إضافة الأذونات الإضافية في نهاية السياسة.
</p>

<p dir="rtl">
	حَمِّل الضبط الجديد بعد إنشاءه كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_22">
<span class="pln">sudo apparmor_parser -r /etc/apparmor.d/lxc-containers</span></pre>

<p dir="rtl">
	سيُحمَّل هذا الضبط تلقائيًا بعد إعادة الإقلاع، ﻷنه يُقرَأ من الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/apparmor.d/lxc-containers</span>؛ وفي النهاية ولجعل الحاوية CN تستخدم ملف الضبط الجديد<span style="font-family:courier new,courier,monospace;"> lxc-CN-profile</span>، فأضف السطر الآتي إلى ملف الضبط:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_24">
<span class="pln">lxc.aa_profile = lxc-CN-profile</span></pre>

<h2 dir="rtl">
	مجموعات التحكم
</h2>

<p dir="rtl">
	إن مجموعات التحكم (cgroups) هي ميزة من ميزات النواة توفر تجميع للمهام تجميعًا هيكليًا، وإسناد وتحديد الموارد لكل مجموعة تحكم؛ تُستخدَم في الحاويات للحد من الوصول إلى الأجهزة الكتلية أو المحرفية (block or character devices) وتجمِّد عمل الحاويات؛ يمكن استعمالها أيضًا لتحديد استخدام الذاكرة وإيقاف الدخل أو الخرج، وضمانة استخدام أصغري للمعالج، والسماح للحاوية بالوصول إلى معالجات محددة.
</p>

<p dir="rtl">
	افتراضيًا، سيُسند للحاوية CN ذات امتيازات مجموعةُ تحكمٍ باسم <span style="font-family:courier new,courier,monospace;">‎/lxc/CN</span>؛ وفي حال حدوث تضارب بالاسم (الذي قد يحدث عند استخدام <span style="font-family:courier new,courier,monospace;">lxcpaths</span> مخصصة)، فستُضاف لاحقة «‎-n» حيث n هو رقم صحيح يبدأ من الصفر، ويُسنَد إلى اسم مجموعة التحكم.
</p>

<p dir="rtl">
	افتراضيًا، سيُسند للحاوية CN دون امتيازات مجموعة تحكم باسم CN في مجموعة التحكم الخاصة بالمهمة التي بدأت الحاوية، على سبيل المثال <span style="font-family:courier new,courier,monospace;">‎/usr/1000.user/1.session/CN </span>سيُمنَح جذر الحاوية ملكية المجموعة للمجلد (لكن ليس جميع الملفات)، وهذا ما سيسمح بإنشاء مجموعات تحكم فرعية.
</p>

<p dir="rtl">
	وفي أوبنتو 14.04، يستخدم LXC مدير مجموعات التحكم cgmanager لإدارة مجموعات التحكم؛ يستقبل مدير مجموعات التحكم طلبات D-Bus عبر مقبس يونكس <span style="font-family:courier new,courier,monospace;">‎/sys/fs/cgroup/cgmanager/sock</span>؛ يجب أن يُضاف السطر الآتي لاستخدام آمن للحاويات المتشعبة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_26">
<span class="pln">lxc.mount.auto = cgroup</span></pre>

<p dir="rtl">
	إلى ملف ضبط الحاوية، مما يصل المجلد ‎<span style="font-family:courier new,courier,monospace;">/sys/fs/cgroup/cgmanager</span> وصلًا ترابطيًا (bind-mounted) إلى الحاوية؛ ويجب على الحاوية في المقابل تشغيل وسيط إدارة مجموعات التحكم (ويتم ذلك افتراضيًا إذا كانت الحزمة cgmanager مثبتةً على الحاوية) الذي سينقل المجلد <span style="font-family:courier new,courier,monospace;">‎/sys/fs/cgroup/cgmanager </span>إلى <span style="font-family:courier new,courier,monospace;">‎/sys/fs/cgroup‎/cgmanager.lower</span> ثم سيبدأ الاستماع إلى الطلبات للوسيط على مقبسه <span style="font-family:courier new,courier,monospace;">‎/sys/fs/cgroup</span> <span style="font-family:courier new,courier,monospace;">‎/cgmanager‎/sock</span>؛ سيتأكد مدير مجموعات التحكم في المضيف أن الحاويات المتشعبة لن تستطيع «الهروب» من مجموعات التحكم المُسندَة إليها أو إنشاء طلبات غير مصرح لها بها.
</p>

<h2 dir="rtl">
	الاستنساخ
</h2>

<p dir="rtl">
	للتزويد السريع بالحاويات، ربما تريد تخصيص حاوية تبعًا لحاجاتك ثم تُنشِئ عدَّة نسِخٍ منها؛ ويمكن فعل ذلك بالبرنامج lxc-clone.
</p>

<p dir="rtl">
	الاستنساخ إما أن يكون عبر snapshots أو بنسخ حاوية أخرى؛ فالنسخ هو إنشاء حاوية جديدة منسوخة من الأصلية، وتأخذ مساحة تخزينية مثل الحاوية الأصلية؛ أما snapshot فإنها تستخدم قدرة آلية التخزين على إنشاء snapshots لإنشاء حاوية النسخ-عند-الكتابة (copy-on-write) تُشير إلى الحاوية الأولى؛ يمكن إنشاء snapshots للحاويات المخزنة في btrfs، و LVM، و zfs، وتلك التي تكون مخزنة في مجلدات؛ حيث كل آلية تخزين لها خصوصياتها؛ فمثلًا، حاويات LVM التي ليست thinpool-provisioned لا تدعم إنشاء snapshots من snapshots؛ ولا يمكن حذف حاويات zfs مع snapshots قبل أن تُطلَق (release) جميع snapshots؛ ويجب أن يُخطط جيدًا لحاويات LVM فقد لا يدعم نظام الملفات أن يزيد حجمه. لا يعاني btrfs من تلك السلبيات، لكنه يعاني من أداء fsync منخفض يسبب جعل dpkg و apt-get أبطئ.
</p>

<p dir="rtl">
	تُنشَأ snapshots من الحاويات المخزنة في مجلدات عبر نظام الملفات؛ فمثلًا يكون لحاوية ذات امتيازات C1 جذر نظام ملفات في <span style="font-family:courier new,courier,monospace;">‎/var/lib/lxc/C1/rootfs</span>، وستبدأ نسخة snapshot للحاوية C1 باسم C2 بجذر نظام الملفات للحاوية C1 موصولًا للقراءة فقط في <span style="font-family:courier new,courier,monospace;">‎/var/lib/lxc/C2/delta0</span>؛ كل ما يهم في هذه الحالة أنه لا يفترض أن تعمل أو تحذف الحاوية C1 أثناء عمل C2؛ من المستحسن اعتبار الحاوية C1 هي حاوية أساسية واستخدام نسخة snapshot لها فقط.
</p>

<p dir="rtl">
	لنفترض أن لدينا حاوية باسم C1، فيمكن إنشاء نسخة منها باستخدام الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_34">
<span class="pln">sudo lxc-clone -o C1 -n C2</span></pre>

<p dir="rtl">
	يمكن إنشاء snapshot باستخدام:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_36">
<span class="pln">sudo lxc-clone -s -o C1 -n C2</span></pre>

<p dir="rtl">
	راجع صفحة دليل <span style="font-family:courier new,courier,monospace;">lxc-clone </span>لمزيد من المعلومات.
</p>

<h3 dir="rtl">
	Snapshots
</h3>

<p dir="rtl">
	LXC يدعم snapshots لتسهيل دعم نسخ snapshot لتطوير تكراري للحاوية؛ فعندما تعمل على حاوية C1 -وقبل إنشاء تغيير خطير وصعب العكس- يمكنك إنشاء snapshot:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_30">
<span class="pln">sudo lxc-snapshot -n C1</span></pre>

<p dir="rtl">
	التي هي نسخة snapshot باسم «snap0» في مجلد <span style="font-family:courier new,courier,monospace;">‎/var/lib/lxcsnaps </span>أو <span style="font-family:courier new,courier,monospace;">‎$HOME/.local ‎/share/lxcsnaps</span>، النسخة الثانية ستُسمى «snap1» وهكذا؛ يمكن عرض النسخ الموجودة حاليًا باستخدام الأمر <span style="font-family:courier new,courier,monospace;">lxc-snapshot -L -n C1</span>، ويمكن أن تُستعاد نسخة snapshot وتمحى حاوية C1 الحالية باستخدام الأمر <span style="font-family:courier new,courier,monospace;">lxc-snapshot -r snap1 -n C1</span>، وبعد تنفيذ أمر الاستعادة، فستبقى النسخة snap1 موجودةً.
</p>

<p dir="rtl">
	تُدعَم snapshots لحاويات btrfs، و lvm، وzfs، و overlayfs؛ إذا استدعي الأمر <span style="font-family:courier new,courier,monospace;">lxc-snapshot </span>على حاوية تُخزَّن في مجلد، فسيسجل خطأ وستُنشَأ نسخة <span style="font-family:courier new,courier,monospace;">copy-clone</span>؛ وسبب ذلك أنه لو أنشأ المستخدم نسخة overlayfs snapshot لحاوية تخزن في مجلد، فسينعكس جزء من تغيرات الحاوية الأصلية على نسخة snapshot؛ إذا كنت تريد إنشاء snapshots لحاوية C1 مخزنة في مجلد، فيمكن إنشاء نسخة overlayfs للحاوية C1، ويجب ألّا تلمس C1 بعد ذلك قط، لكن يمكن أن نعدِّل overlayfs وننسخها نسخ snapshots كما نريد، أي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_32">
<span class="pln">lxc-clone -s -o C1 -n C2
lxc-start -n C2 -d # make some changes
lxc-stop -n C2
lxc-snapshot -n C2
lxc-start -n C2 # etc</span></pre>

<h3 dir="rtl">
	الحاويات العابرة
</h3>

<p dir="rtl">
	«الحاويات العابرة» (Ephemeral containers) هي حاويات تستخدم لمرة واحدة فقط؛ فليكن لدينا حاوية موجودة مسبقًا باسم C1، فيمكنك إنشاء حاوية عابرة باستخدام:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5452_28">
<span class="pln">lxc-start-ephemeral -o C1</span></pre>

<p dir="rtl">
	ستبدأ الحاوية كنسخة snapshot للحاوية C1، وستطبع التعليمات للدخول إلى الحاوية على الطرفية، وستدمر الحاوية العابرة بعد إيقاف التشغيل، راجع صفحة الدليل<span style="font-family:courier new,courier,monospace;"> lxc-start-ephemeral</span> لمزيد من الخيارات.
</p>

<p dir="rtl">
	ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/lxc.html" rel="external nofollow" target="_blank">Ubuntu Server Guide: LXC</a>.
</p>
]]></description><guid isPermaLink="false">220</guid><pubDate>Mon, 22 Feb 2016 19:50:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x636;&#x627;&#x641;&#x629; &#x642;&#x631;&#x635; Swap &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; 14.04</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D8%B1%D8%B5-swap-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r230/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/56c99f0dcf9d5_ubuntu-swap(1).png.8198a669ccc55a0d02a6a2d2272805b2.png" /></p>

<div id="wmd-preview-section-20">
	<p id="مقدمة">
		واحدة من أسهل الطرق لزيادة استجابة خادومك وجعله قويًا ضدّ أخطاء الذاكرة التي قد تطرأ على تطبيقاتك التي تشغّلها عليه هي عبر إضافة مساحة Swap.
	</p>

	<p style="text-align: center;">
		<img alt="56c99f1011d00_ubuntu-swap(1).png.d6479ec" class="ipsImage ipsImage_thumbnailed" data-fileid="13307" data-unique="5xt79u7gn" src="https://academy.hsoub.com/uploads/monthly_2016_02/56c99f1011d00_ubuntu-swap(1).png.d6479ec9c110f72f3d9cf2311bc9a2f5.png"></p>

	<p>
		Swap هي مساحة من القرص الصلب يتم تعريفها على أنّها مكان يمكن لنظام التشغيل تخزين البيانات فيها مؤقتًا في حال عدم توفّر مكان لذلك على الذاكرة العشوائية (RAM).
	</p>

	<p>
		يعطيك هذا القدرة على زيادة كميّة المعلومات التي يمكن لخادومك الاحتفاظ بها في "ذاكرته" ريثما يعمل. سيتم استخدام المساحة من على القرص الصلب مؤقتًا عندما لا يكون هناك مساحة كافية في الذاكرة العشوائية لحفظ البيانات.
	</p>

	<p>
		المعلومات التي يتم كتابتها على القرص الصلب ستكون أبطء في الاستجابة من تلك الموجودة في الذاكرة العشوائية، ولكنّ نظام التشغيل سيفضّل الإبقاء على بيانات التطبيق العامِلة حاليًا في الذاكرة العشوائية مع استخدام قرص Swap للبيانات الأقدم. بشكلٍ عام، يعتبر امتلاك قرص Swap صمّام أمانٍ فاصل يتم استعماله تلقائيًا عند نضوب الذاكرة العشوائية من خادومك.
	</p>

	<p>
		في هذا الدرس، سنشرح كيفية إنشاء وتمكين ملفّ swap على توزيعة Ubuntu 14.04.
	</p>

	<p>
		<strong>ملاحظة</strong>: على الرغم من أنّ قرص Swap مستحسن للأنظمة التي تستخدم الأقراص الصلبة التقليدية، إلّا أنّ استخدام Swap مع أقراص SSD يمكن أن يسبب مشاكل وتهتّكًا للعتاد مع مرور الوقت. القيام بذلك قد يؤثر على بنية العتاد التحتية التي توفّر الخدمة لك ولجيرانك.
	</p>

	<p>
		إذا كنت تحتاج تحسين أداء خادومك، فإننا ننصحك بترقيته. سيوفّر لك هذا نتائج أفضل بما يتعلّق بالأداء وسيقلّص من احتمالية حصول مشاكل مع العتاد.
	</p>
</div>

<div id="wmd-preview-section-21">
	<h2 id="التحقق-من-معلومات-الـswap-على-النظام">
		التحقق من معلومات Swap على النظام
	</h2>

	<p>
		قبل أن نبدأ، سنأخذ جولةً على نظام التشغيل الخاصّ بنا لنرى ما إذا كنّا نمتلك بالفعل قرص Swap أم لا. يمكننا امتلاك أكثر من قرص أو ملفّ Swap واحد، ولكن بشكلٍ عام، يجب أن يكون واحد منها كافيًا فقط.
	</p>

	<p>
		يمكننا رؤية ما إذا كان النظام يمتلك أيّ ملفّات Swap مُعدّة مسبقًا عبر كتابة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_7">
<span class="pln">sudo swapon -s</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_9">
<span class="pln">Filename                Type        Size    Used    Priority</span></pre>

	<p>
		إذا رأيت فقط ترويسة الجدول، كما رأينا أعلاه، فهذا يعني أنّك لا تمتلك حاليًا أيّ قرص Swap على النظام.
	</p>

	<p>
		طريقة أخرى للتحقق من مساحة swap هي عبر استخدام الأداة <span style="font-family:courier new,courier,monospace;">free</span>، والتي تقوم بإظهار استخدام الذاكرة الحالي لنا. يمكننا رؤية نسبة استخدام الذاكرة الحالية و swap محسوبةً بالميغابايت عبر كتابة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_11">
<span class="pln">free -m</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_13">
<span class="pln">             total       used       free     shared    buffers     cached
Mem:          3953        154       3799          0          8         83
-/+ buffers/cache:         62       3890
Swap:            0          0          0</span></pre>

	<p>
		كما يمكنك أن ترى، مساحة Swap على نظامنا هي 0. وهذا مطابقٌ لما رأيناه في الأمر السابق.
	</p>
</div>

<div id="wmd-preview-section-22">
	<h2 id="التحقق-من-المساحة-المتوفرة-على-القرص-الصلب">
		التحقق من المساحة المتوفرة على القرص الصلب
	</h2>

	<p>
		الطريقة النموذجية لتخصيص المساحة لـ Swap هي عبر استخدام (partition) قسم من القرص الصلب له، ولكنّ التعديل على التقسيم الافتراضي للقرص الصلب ليس دومًا ممكنًا. يمكننا ببساطة إنشاء ملفّ swap عادي ليعمل على قسمٍ موجودٍ بالفعل.
	</p>

	<p>
		قبل أن نقوم بهذا، يجب أن نعرف حجم المساحة الحرّة المتوفّرة على القرص الصلب. يمكننا الحصول على هذه المعلومات عبر كتابة: 
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_15">
<span class="pln">df -h</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_17">
<span class="pln">Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  312K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user</span></pre>

	<p>
		كما يمكنك أن ترى في السطر الأول، يمتلك القرص الصلب الخاصّ بنا حوالي 55 جيجابايت من المساحة المتوفّرة، لذا فإنّه يوجد لدينا مساحة كبيرة لاستغلالها. هذا طبعًا على خادوم افتراضي خاصّ جديد بحجمٍ متوسّط، قد يكون خادومك مختلفًا تبعًا لاستخداماتك.
	</p>

	<p>
		على الرغم من أنّه يوجد العديد من الآراء حول الحجم المناسب لملفّ swap، إلّا أنّه يعتمد في الواقع على رغبتك واحتياجات تطبيقاتك. بشكلٍ عام، من المنصوح أن تجعل حجم swap مساويًا أو مضاعفًا لحجم الذاكرة العشوائية (RAM) المتوفّرة على خادومك.
	</p>

	<p>
		بما أنّ خادومنا يحتوي 4 جيجابايت من الذاكرة العشوائية هنا، وبما أنّ ضعف هذا الرقم سيعطينا ملفّ swap كبير جدًا لن نحتاج بتاتًا لاستخدامه كلّه أو حتّى نصفه، فسنقوم فقط باستخدام 4 جيجابايت من المساحة لملفّ swap.
	</p>
</div>

<div id="wmd-preview-section-23">
	<h2 id="إنشاء-ملف-swap">
		إنشاء ملف Swap
	</h2>

	<p>
		الآن وبعد أن عرفنا المساحة المتوفّرة على القرص الصلب الخاصّ بنا، يمكننا المضي قدمًا في إنشاء ملفّ swap على نظام الملفّات الخاصّ بنا.
	</p>

	<p>
		سنقوم بإنشاء ملفّ يدعى <span style="font-family:courier new,courier,monospace;">swapfile</span> ضمن المسار الجذر (/). يجب أن يكون حجم الملفّ مساويًا لحجم المساحة التي نريد تخصيصها لـ Swap، وهناك طريقتان للقيام بالعملية:
	</p>
</div>

<div id="wmd-preview-section-24">
	<h3 id="الطريقة-التقليدية-البطيئة">
		الطريقة التقليدية البطيئة
	</h3>

	<p>
		يمكننا إنشاء ملفّ جديد بحجمٍ معيّن عبر استخدام الأمر <span style="font-family:courier new,courier,monospace;">dd</span>. تقوم هذه الأداة متعددة الاستخدامات بكتابة البيانات من موقعٍ إلى آخر.
	</p>

	<p>
		يمكننا أن نستعمل هذه الأداة للقيام بكتابة أصفار إلى ملفّ من جهازٍ خاص في أنظمة لينكس موجود في المسار <span style="font-family:courier new,courier,monospace;">dev/zero/</span>، يقوم هذا الجهاز فقط بطباعة عددٍ من الأصفار حسب ما يُطلبُ منه.
	</p>

	<p>
		نقوم بتحديد حجم الملفّ عبر استخدام <span style="font-family:courier new,courier,monospace;">bs</span> لحجم الكتلة الواحدة (block size) وcount لعدد الكتل (blocks) التي نريد إنشاءها. يمكننا إسناد أيّ قيمة إلى كِلا المُعامِلين، ولكن ما يهم حقًا هو نتيجتهما معًا.
	</p>

	<p>
		كمثال، في حالتنا نريد إنشاء ملف بحجم 4 جيجابايت. يمكننا القيام بهذا عبر تحديد حجم الكتلة الواحدة بـ 1 جيجابايت وبتحديد عدد الكتل إلى 4:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_19">
<span class="pln">sudo dd if=/dev/zero of=/swapfile bs=1G count=4</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_21">
<span class="pln">4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s</span></pre>

	<p>
		تحقق من الأمر الذي تريد إدخاله قبل الضغط على زرّ Enter، لأنّ هذا الأمر يمكن أن يقوم بمسح بياناتك في حال قمت بتوجيه <span style="font-family:courier new,courier,monospace;">of</span> (والذي يرمز إلى output file أو ملف الخرج) إلى المسار الخاطئ.
	</p>

	<p>
		يمكننا أن نرى أنّه قد تمّ إنشاء الملفّ بحجم 4 جيجابايت عبر كتابة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_23">
<span class="pln">ls -lh /swapfile</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_25">
<span class="pln">-rw-r--r-- 1 root root 4.0G Apr 28 17:15 /swapfile</span></pre>

	<p>
		إذا قمت بتنفيذ الأمر السابق لإنشاء ملف swap بنجاح، فقد تكون قد لاحظت أنّه أخذ وقتًا ليكتمل، في خادومنا التجريبي، سترى أنّ النظام استغرق 18 ثانية ليقوم بإنشاء الملفّ، لأنّه يجب عليه كتابة 4 جيجابايت من الأصفار إلى ملفّ على القرص الصلب.
	</p>

	<p>
		إذا كنت تريد معرفة كيفيّة إنشاء الملفّ بشكلٍ أسرع، فقم بحذف الملفّ عبر الأمر أدناه وطبّق الخطوة التالية:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_27">
<span class="pln">sudo rm /swapfile</span></pre>

	<h3>
		الطريقة السريعة
	</h3>
</div>

<div id="wmd-preview-section-25">
	<p>
		الطريقة الأسرع لإنشاء نفس الملفّ هي عبر استخدام برنامج <span style="font-family:courier new,courier,monospace;">fallocate</span>. يقوم هذا الأمر بإنشاء ملفّ بحجمٍ معيّن، دون الحاجة إلى كتابة أصفار مثلًا أو محتوىً آخر إليه.
	</p>

	<p>
		يمكننا إنشاء ملفّ بحجم 4 جيجابايت عبر كتابة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_29">
<span class="pln">sudo fallocate -l 4G /swapfile</span></pre>

	<p>
		ستقوم الطرفية بالرجوع إليك في نفس اللحظة تقريبًا. يمكننا التحقق مما إذا كان حجم الملفّ صحيحًا أم لا عبر كتابة الأمر:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_31">
<span class="pln">ls -lh /swapfile</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_33">
<span class="pln">-rw-r--r-- 1 root root 4.0G Apr 28 17:19 /swapfile</span></pre>

	<p>
		وكما ترى، تمّ إنشاء ملفّ Swap الخاصّ بنا بالمساحة المطلوبة بشكلٍ صحيح.
	</p>
</div>

<div id="wmd-preview-section-26">
	<h2 id="تفعيل-ملف-الـswap">
		تفعيل ملف Swap
	</h2>

	<p>
		الآن تمّ إنشاء الملفّ، ولكنّ النظام لا يعرف أنّه من المفترض به أن يستخدمه بعد. يجب أن نقوم بإخبار النظام بأن يقوم بتهيئة هذا الملفّ كقرص Swap ومن ثمّ تفعيله.
	</p>

	<p>
		ولكن قبل أن نقوم بهذا، علينا ضبط صلاحيات الملفّ بحيث لا يكون قابلًا للقراءة لأيّ أحد باستثناء المستخدم الجذر (root). السماح للمستخدمين الآخرين بقراءة أو كتابة محتويات هذا الملفّ قد يكون خطرًا أمنيًا كبيرًا. يمكننا قفل هذه الصلاحيات عبر كتابة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_35">
<span class="pln">sudo chmod 600 /swapfile</span></pre>

	<p>
		تحقق الآن من أنّ الملفّ يمتلك الصلاحيات الصحيحة عبر تطبيق:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_37">
<span class="pln">ls -lh /swapfile</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_39">
<span class="pln">-rw------- 1 root root 4.0G Apr 28 17:19 /swapfile</span></pre>

	<p>
		كما نرى، فقط المستخدم الجذر يمتلك صلاحيات الكتابة والقراءة حاليًا.
	</p>

	<p>
		الآن وبعد أن أصبح ملفّنا أكثر أمانًا، يمكننا أن نخبر نظامنا بأن يقوم بتهيئته كملفّ swap عبر تنفيذ:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_41">
<span class="pln">sudo mkswap /swapfile</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_43">
<span class="pln">Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944</span></pre>

	<p>
		أصبح الملفّ الآن جاهزًا ليتم استخدامه كمساحة Swap. يمكننا تفعيله عبر الأمر:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_45">
<span class="pln">sudo swapon /swapfile</span></pre>

	<p>
		يمكننا كذلك اختبار نجاح العملية أو فشلها عبر سؤال النظام الآن عمّا إذا كان يتعرّف على مساحة Swap أم لا عبر كتابة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_47">
<span class="pln">sudo swapon -s</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_49">
<span class="pln">Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0       -1</span></pre>

	<p>
		لدينا ملفّ swap جديد هنا. يمكننا أيضًا استخدام أداة <span style="font-family:courier new,courier,monospace;">free</span> للتأكّد مما وجدناه:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_51">
<span class="pln">free -m</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_53">
<span class="pln">             total       used       free     shared    buffers     cached
Mem:          3953        101       3851          0          5         30
-/+ buffers/cache:         66       3887
Swap:         4095          0       4095</span></pre>

	<p>
		تمّ الآن إعداد swap بنجاح، وسيقوم النظام باستخدامه عندما يحتاجه فقط.
	</p>
</div>

<div id="wmd-preview-section-27">
	<h2 id="استخدام-ملف-الـswap-بشكل-دائم">
		استخدام ملف Swap بشكل دائم
	</h2>

	<p>
		لقد قمنا بتفعيل ملفّ Swap الآن، ولكن عندما نقوم بإعادة التشغيل، فإنّ الخادوم لن يقوم تلقائيًا بإعادة تفعيل الملفّ. يمكننا تغيير هذا عبر تعديل ملفّ <span style="font-family:courier new,courier,monospace;">fstab</span>.
	</p>

	<p>
		قم بتعديل الملفّ بصلاحيات الجذر باستخدام محرر نصوصك المفضّل:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_55">
<span class="pln">sudo nano /etc/fstab</span></pre>

	<p>
		في نهاية ملفّك، تحتاج إلى إضافة سطرٍ يخبر نظام التشغيل أن يقوم باستخدام الملفّ الذي أنشأته تلقائيًا:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_57">
<span class="pln">/swapfile   none    swap    sw    0   0</span></pre>

	<p>
		احفظ الملفّ واخرج عندما تنتهي.
	</p>
</div>

<div id="wmd-preview-section-28">
	<h2 id="اضبط-إعدادات-الـswap-الخاصة-بك">
		اضبط إعدادات Swap الخاصة بك
	</h2>

	<p>
		هناك بعض الخيارات المؤثّرة على أداء خادومك التي يمكنك ضبطها وتعديلها للحصول على أداءٍ أفضل عند التعامل مع swap.
	</p>

	<p>
		يقوم مُعامِل <span style="font-family:courier new,courier,monospace;">swappiness</span> بإعداد معدّل تكرار النظام للقيام بعملية نقل البيانات من الذاكرة العشوائية إلى ملفّ swap، وهذه القيمة محصورة بين الـ0 والـ100 وتمثّل نسبةً مئوية.
	</p>

	<p>
		عندما تكون القيمة أقرب إلى الصفر، فإنّ النظام لن يقوم بنقل أيّ بيانات من الذاكرة العشوائية إلى swap إلّا في حال الضرورة القصوى. تذكّر أنّ التعامل مع swap "مكلف" حيث أنّه بطيء بشكلٍ ملحوظ مقارنةً بالذاكرة العشوائية مما يسبب بطئًا في الأداء. لذا فإنّ إخبار النظام بألّا يقوم بالاعتماد على swap كثيرًا سيقوم بتسريع أداء نظامك بشكلٍ عام.
	</p>

	<p>
		إذا كانت القيمة أقرب إلى المئة، فإنّ النظام سيقوم بنقل المزيد من البيانات إلى swap بهدف حفظ المزيد من الذاكرة العشوائية. اعتمادًا على ماهيّة التطبيقات التي تقوم بتشغيلها على خادومك واحتياجاتك الشخصية، قد يكون هذا الخيار أفضل لك في بعض الحالات.
	</p>

	<p>
		يمكننا أن نرى قيمة مُعامِل <span style="font-family:courier new,courier,monospace;">swappiness</span> الحالية عبر تطبيق:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_59">
<span class="pln">cat /proc/sys/vm/swappiness</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_61">
<span class="pln">60</span></pre>

	<p>
		بالنسبة لجهاز سطح مكتب (استخدام عادي)، فإنّ قيمة 60 ليست سيئة. ولكن بالنسبة إلى خادوم، فإننا قد نود تقريب القيمة إلى الصفر.
	</p>

	<p>
		يمكننا تغيير قيمة <span style="font-family:courier new,courier,monospace;">swappiness</span> إلى قيمة أخرى عبر استخدام الأمر <span style="font-family:courier new,courier,monospace;">sysctl</span>.
	</p>

	<p>
		كمثال، لتغيير قيمة <span style="font-family:courier new,courier,monospace;">swappiness</span> إلى 10، يمكننا تنفيذ:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_63">
<span class="pln">sudo sysctl vm.swappiness=10</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_65">
<span class="pln">vm.swappiness = 10</span></pre>

	<p>
		سيستمر هذا التغيير إلى حين عملية إعادة التشغيل المقبلة. يمكننا جعل هذا التغيير دائمًا حتّى بعد إعادة التشغيل عبر إضافة سطرٍ معيّن إلى نهاية ملفّ <span style="font-family:courier new,courier,monospace;">etc/sysctl.conf/</span>:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_67">
<span class="pln">sudo nano /etc/sysctl.conf</span></pre>

	<p>
		في نهاية الملفّ أضف:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_69">
<span class="pln">vm.swappiness=10</span></pre>

	<p>
		احفظ الملفّ واخرج عندما تنتهي.
	</p>

	<p>
		قيمة أخرى مرتبطة قد تودّ تغييرها هي <span style="font-family:courier new,courier,monospace;">vfs_cache_pressure</span>. يقوم هذا المُعامِل بتحديد إلى أيّ مدى سيقوم النظام بالاحتفاظ بالخبيئة (cache) للبيانات الأكثر تكرارًا في مقابل البيانات الأخرى.
	</p>

	<p>
		تكون هذه البيانات عادةً متعلقة بنظام الملفّات نفسه، وغالبًا ما يتكرر طلبها، لذلك فإنّه من الممتاز لنظامك أن يقوم بالاحتفاظ بهذه البيانات في ذاكرته المؤقتة. يمكنك رؤية قيمة هذا المُعامِل الحالية عبر الأمر:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_71">
<span class="pln">cat /proc/sys/vm/vfs_cache_pressure</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_73">
<span class="pln">100</span></pre>

	<p>
		حاليًا، يقوم نظامنا بحذف البيانات والمعلومات من الخبيئة (cache) بسرعة سريعة جدًا. يمكننا جعل هذه العملية أكثر بطئًا عبر استخدام قيمة كـ50:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_75">
<span class="pln">sudo sysctl vm.vfs_cache_pressure=50</span></pre>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_77">
<span class="pln">vm.vfs_cache_pressure = 50</span></pre>

	<p>
		مرةً أخرى.. هذه القيمة ليست دائمة حاليًا وسيتم فقدانها عند إعادة التشغيل، يمكننا تغيير هذا الوضع عبر إضافتها إلى ملفّات إعداداتنا كما فعلنا مسبقًا:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_79">
<span class="pln">sudo nano /etc/sysctl.conf</span></pre>

	<p>
		في نهاية الملفّ، أضف القيمة التي تريدها:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4557_81">
<span class="pln">vm.vfs_cache_pressure = 50</span></pre>

	<p>
		احفظ الملفّ واخرج عندما تنتهي.
	</p>
</div>

<div id="wmd-preview-section-29">
	<h2 id="الخاتمة">
		الخاتمة
	</h2>

	<p>
		اتبّاع الخطوات في هذا الدرس سيعطيك بعض الهواء لتتنفسه عندما يتعلّق الأمر باستخدام الذاكرة العشوائية في نظامك. مساحة Swap مفيدة بشكلٍ لا يصدّق في تفادي بعض المشاكل الشائعة.
	</p>

	<p>
		إذا كنت تصادف أخطاء (OOM (Out of memory أو عدم توفّر الذاكرة بشكلٍ شائع، أو إذا كنت ترى أنّ نظامك غير قادر على استخدام التطبيقات التي تحتاجها، فإنّ الحلّ الأفضل لك هو في ضبط إعدادات تطبيقاتك أو في ترقية موارد خادومك، كما أنّ تفعيل مساحة Swap على خادومك سيعطيه المزيد من المرونة ويوفّر لك المزيد من الوقت على خادومٍ بمواصفاتٍ عادية.
	</p>

	<p>
		ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04" rel="external nofollow">How To Add Swap on Ubuntu 14.04</a> لصاحبه Justin Ellingwood.
	</p>
</div>
]]></description><guid isPermaLink="false">230</guid><pubDate>Sun, 21 Feb 2016 20:25:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x62D;&#x627;&#x648;&#x64A;&#x627;&#x62A; &#x644;&#x64A;&#x646;&#x643;&#x633; LXC</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-lxc-r219/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-lxc.png.ed59d6a73f1b9585e7c1b0db48cfe5ec.png" /></p>

<p dir="rtl">
	الحاويات (containers) هي تقنية أنظمة وهمية خفيفة؛ حيث تجنح لأن تكون شبيهةً بطريقة <span style="font-family:comic sans ms,cursive;">chroot</span> محسّنة بدلًا من كونها تقنية أنظمة وهمية كاملة مثل Qemu أو VMware؛ لأن كلاهما لا يحاكي العتاد ولأن الحاويات تشارك نفس نظام التشغيل للمضيف؛ لذلك من الأفضل مقارنة الحاويات إلى «نطاقات سولارس» (Solaris zones) أو «سجون BSD» ‏(BSD jails). إن Linux-vserver و OpenVZ هما نسختان من الحاويات لنظام لينُكس مطورتان بشكل منفصل عن بعضهما؛ في الواقع، ظهرت الحاويات نتيجةً للعمل على تطوير وظائف vserver و OpenVZ.
</p>

<p dir="rtl" style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13181" data-unique="2c9ni8bu2" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-lxc.png.a9b3245d57bf56086c823df5fab63508.png" alt="ubuntu-server-lxc.png.a9b3245d57bf56086c"></p>

<p dir="rtl">
	هنالك نسختان في «مجال المستخدم» (user-space) للحاويات تستخدمان نفس مزايا النواة؛ تسمح <span style="font-family:courier new,courier,monospace;">Libvirt</span> باستخدام الحاويات عبر محرك LXC بالاتصال إلى «<span style="font-family:courier new,courier,monospace;">lxc:///‎</span>»، قد يكون هذا أمرًا ملائمًا لأنها تملك نفس طريقة الاستخدام الموجودة في المحركات الأخرى. النسخة الأخرى المُسماة ببساطة «LXC» هي غير متوافقة مع libvirt؛ لكنها أكثر مرونةً بأدوات أكثر في مجال المستخدم؛ من الممكن التبديل بين النسختين آنفتَيّ الذكر، لكن هنالك بعض الخصوصيات التي قد تسبب ارتباكًا.
</p>

<p dir="rtl">
	سنشرح في هذا الدرس حزمة lxc شرحًا رئيسيًا، حيث أن استخدام<span style="font-family:courier new,courier,monospace;"> libvirt-lxc</span> ليس مستحسنًا ﻷنه يفتقر إلى حماية AppArmor لحاويات <span style="font-family:courier new,courier,monospace;">libvirt-lxc</span>؛ وستكون أسماء الحاويات الموجودة في هذا الفصل هي CN، أو C1، أو C2.
</p>

<h2 dir="rtl">
	التثبيت
</h2>

<p dir="rtl">
	يمكن تثبيت حزمة <span style="font-family:courier new,courier,monospace;">lxc</span> باستخدام الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_7">
<span class="pln">sudo apt-get install lxc</span></pre>

<p dir="rtl">
	سنحتاج إلى تنزيل الاعتماديات المطلوبة والمستحسنة، وضبط جسر الشبكة لكي يستخدمه الحاويات؛ إذا أردت استخدام حاويات دون امتيازات، فربما تحتاج إلى أن تتأكد أن للمستخدمِين امتيازات <span style="font-family:courier new,courier,monospace;">subuids</span> و <span style="font-family:courier new,courier,monospace;">subgids</span>، وتريد أن تسمح للمستخدمين بوصل الحاويات إلى جسر؛ راجع القسم «الاستخدام الأساسي دون امتيازات».
</p>

<h2 dir="rtl">
	الاستخدام الأساسي
</h2>

<p dir="rtl">
	يمكن أن نستخدم LXC بطريقتين مختلفتين، الأولى بامتيازات عبر تنفيذ أوامر lxc بحساب المستخدم الجذر؛ أو دون امتيازات بتنفيذ أوامر <span style="font-family:courier new,courier,monospace;">lxc</span> بحساب أي مستخدم عدا الجذر (في الواقع، يمكن تشغيل حاويات دون امتيازات بحساب الجذر، لكننا لن نشرح ذلك هاهنا)؛ الحاويات دون امتيازات محدودة أكثر، فمثلًا لن تستطيع إنشاء عقد أجهزة أو تصل أنظمة ملفات كتلية؛ لكنها أقل خطرًا للمضيف، حيث يكون الجذر في الحاوية مربوطًا بحساب غير جذر في المضيف.
</p>

<h3 dir="rtl">
	الاستخدام الأساسي بامتيازات
</h3>

<p dir="rtl">
	لإنشاء حاوية ذات امتيازات، كل ما عليك فعله هو تنفيذ الأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_10">
<span class="pln">sudo lxc-create --template download --name u1</span></pre>

<p dir="rtl">
	أو بشكل مختصر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_12">
<span class="pln">sudo lxc-create -t download -n u1</span></pre>

<p dir="rtl">
	الذي سيسألك تفاعليًا عن نوع جذر نظام الملفات لكي يُنزَّل، وخصوصًا التوزيعة والإصدارة والمعمارية؛ يمكنك تحديد هذه القيم في سطر الأوامر لإنشاء حاوية دون الإجابة على تلك الأسئلة تفاعليًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_14">
<span class="pln">sudo lxc-create -t download -n u1 -- --dist ubuntu --release trusty --arch amd64</span></pre>

<p dir="rtl">
	أو
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_16">
<span class="pln">sudo lxc-create -t download -n u1 -- -d ubuntu -r trusty -a amd64</span></pre>

<p dir="rtl">
	يمكنك الآن استخدام <span style="font-family:courier new,courier,monospace;">lxc-ls</span> لعرض قائمة بالحاويات، و <span style="font-family:courier new,courier,monospace;">lxc-info</span> للحصول على معلومات مفصلة عن حاوية، و <span style="font-family:courier new,courier,monospace;">lxc-start </span>لبدء و<span style="font-family:courier new,courier,monospace;"> lxc-stop</span> لإيقاف الحاوية؛ بينما يسمح لك الأمران <span style="font-family:courier new,courier,monospace;">lxc-attach</span> و <span style="font-family:courier new,courier,monospace;">lxc-console </span>بالدخول إلى حاوية إذا لم يكن الاتصال إليها عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> متاحًا؛ والأمر <span style="font-family:courier new,courier,monospace;">lxc-destory</span> يحذف الحاوية، بما في ذلك جذر نظام الملفات؛ راجع صفحات الدليل للأوامر السابقة للمزيد من المعلومات؛ أمثلة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_39">
<span class="pln">sudo lxc-ls --fancy
sudo lxc-start --name u1 --daemon
sudo lxc-info --name u1
sudo lxc-stop --name u1
sudo lxc-destroy --name u1</span></pre>

<h3 dir="rtl">
	مجالات أسماء المستخدم
</h3>

<p dir="rtl">
	تسمح الحاويات دون امتيازات للمستخدمين بإنشاء وإدارة الحاويات دون الحصول على امتيازات الجذر؛ أساس هذه الميزة هو ما يسمى «مجالات أسماء المستخدم» (user namespaces)، إن مجالات أسماء المستخدم هيكليةٌ، حيث تكون المهام ذات امتيازات في مجال الأسماء الأب قادرة على ربط معرِّفاتها إلى مجالات أسماء الأبناء؛ افتراضيًا، كل مهمة على المضيف تعمل في مجال أسماء مبدئي (initial user namespace)، حيث المجال الكامل لمعرفاتها مربوطٌ مع المجال الكامل؛ يمكن مشاهدة ذلك بالنظر إلى <span style="font-family:courier new,courier,monospace;">‎/proc/self/uid_map </span>و <span style="font-family:courier new,courier,monospace;">‎/proc/self ‎/gid_map</span>؛ اللذان سيظهران القيمة «‎‎0 0 4294967295‎» عندما يُقرأ من مجال الأسماء المبدئي؛ وفي أوبنتو 14.04، المستخدمون الجدد الذين يُنشؤون يكون لهم افتراضيًا مجال من معرفات المستخدم؛ هذه القائمة من المعرفات المُسنَدة يمكن أن تُشاهد في الملفين<span style="font-family:courier new,courier,monospace;"> ‎/etc/subuid </span>و<span style="font-family:courier new,courier,monospace;"> ‎/etc/subgid</span>؛ انظر إلى صفحات الدليل الموافقة لهم للمزيد من المعلومات؛ ويبدأ <span style="font-family:courier new,courier,monospace;">subuid</span> و <span style="font-family:courier new,courier,monospace;">subgid</span> عرفيًا من المعرف 100000 لتجنب التضارب مع مستخدمي النظام.
</p>

<p dir="rtl">
	إذا أُنشِئ المستخدم في إصدارة قديمة، فيمكنك منحه مجالًا من المعرفات باستخدام <span style="font-family:courier new,courier,monospace;">usermod</span>، كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_20">
<span class="pln">sudo usermod -v 100000-200000 -w 100000-200000 user1</span></pre>

<p dir="rtl">
	برنامجا <span style="font-family:courier new,courier,monospace;">newuidmap</span> و <span style="font-family:courier new,courier,monospace;">newgidmap</span> هما برنامجا<span style="font-family:courier new,courier,monospace;"> setuid-root </span>في حزمة <span style="font-family:courier new,courier,monospace;">uidmap</span>، اللذان يُستخدمان داخليًا بواسطة <span style="font-family:courier new,courier,monospace;">lxc</span> لربط <span style="font-family:courier new,courier,monospace;">subuids</span> و <span style="font-family:courier new,courier,monospace;">subgids</span> من المضيف إلى حاوية دون امتيازات؛ ويتأكدان من أن المستخدم يربط المعرفات المصرَّح بها فقط من ضبط المضيف.
</p>

<h3 dir="rtl">
	<a name="20.4.2.3.%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%20%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%20%D8%AF%D9%88%D9%86%20%D8%A7%D9%85%D8%AA%D9%8A%D8%A7%D8%B2%D8%A7%D8%AA%7Coutline" rel="external"></a> الاستخدام الأساسي دون امتيازات
</h3>

<p dir="rtl">
	لإنشاء حاويات دون امتيازات، فإن هنالك خطوات أولية ضرورية؛ حيث تحتاج إلى إنشاء ملف ضبط حاوية افتراضي، مُحدِّدًا ربط المعرفات الذي تريده وضبط الشبكة، بالإضافة إلى ضبط المضيف للسماح لمستخدم دون امتيازات بالارتباط إلى شبكة المضيف؛ يفترض المثال الآتي أنك ربطت معرفات المستخدم والمجموعة ذات المجال 100000 – 165536.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_41">
<span class="pln">mkdir -p ~/.config/lxc
echo "lxc.id_map = u 0 100000 65536" &gt; ~/.config/lxc/default.conf
echo "lxc.id_map = g 0 100000 65536" &gt;&gt; ~/.config/lxc/default.conf
echo "lxc.network.type = veth" &gt;&gt; ~/.config/lxc/default.conf
echo "lxc.network.link = lxcbr0" &gt;&gt; ~/.config/lxc/default.conf
echo "$USER veth lxcbr0 2" | sudo tee -a /etc/lxc/lxc-usernet</span></pre>

<p dir="rtl">
	بعد ذلك، يمكنك إنشاء حاويات دون امتيازات بنفس طريقة إنشاء حاويات بامتيازات، لكن ببساطة دون sudo:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_43">
<span class="pln">lxc-create -t download -n u1 -- -d ubuntu -r trusty -a amd64
lxc-start -n u1 -d
lxc-attach -n u1
lxc-stop -n u1
lxc-destroy -n u1</span></pre>

<h3 dir="rtl">
	التشعب
</h3>

<p dir="rtl">
	لكي نشغِّل حاويات داخل حاويات – الأمر الذي يُشار إليه بتشعّب الحاويات – فإن سطرين يجب أن يوجدا في ملف ضبط الحاوية الأب:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_45">
<span class="pln">lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting</span></pre>

<p dir="rtl">
	سيسبب السطر الأول بدمج مقبس مدير مجموعات التحكم في الحاوية، لذلك سيكون <span style="font-family:courier new,courier,monospace;">lxc</span> داخل الحاوية قادرًا على إدارة مجموعات التحكم للحاويات المتشعبة الخاصة به؛ أما السطر الثاني فيسبب تشغيل الحاوية بوضع أكثر سماحيةً بالنسبة إلى AppArmor، مما يسمح للحاوية بإجراء عمليات الوصل اللازمة لبدء تشغيل الحاويات؛ لاحظ أن سياسة AppArmor التي ستُطبَّق أقل أمنًا من السياسة العادية أو سياسة حاوية دون امتيازات؛ راجع القسم «AppArmor» في هذا الدرس القادم لمزيدٍ من المعلومات.
</p>

<h2 dir="rtl">
	الضبط العام
</h2>

<p dir="rtl">
	تُستخدَم ملفات الضبط الآتية من LXC؛ للاستخدام ذو الامتيازات، فإنها ستتواجد في مجلد ‎<span style="font-family:courier new,courier,monospace;">/etc/lxc</span>، بينما للاستخدام دون امتيازات فستكون موجودةً في ‎<span style="font-family:courier new,courier,monospace;">~/.config/lxc</span>.
</p>

<ul dir="rtl"><li>
		<strong><span style="font-family:courier new,courier,monospace;">lxc.conf</span></strong>: يُحدِّد اختياريًا القيم البديلة لمختلف خيارات ضبط <span style="font-family:courier new,courier,monospace;">lxc</span>، بما فيها <span style="font-family:courier new,courier,monospace;">lxcpath</span>، والضبط الافتراضي، ومجموعات التحكم التي ستُستخدَم، ونمط إنشاء مجموعة تحكم، وإعدادات الواجهات الخلفية لتخزين <span style="font-family:courier new,courier,monospace;">lvm</span> و <span style="font-family:courier new,courier,monospace;">zfs</span>.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">default.conf</span></strong>: يحدد الضبط الذي يجب أن يحتويه كل ملف ضبط للحاويات المُنشأة حديثًا؛ يحتوي هذا الملف عادةً على الأقل على قسم للشبكة؛ ويحتوي على قسم لربط المعرفات للمستخدمين دون امتيازات.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">lxc-usernet.conf</span></strong>: يحدد كيف يوصل المستخدمون دون امتيازات حاوياتهم إلى شبكة مملوكة من المضيف.
	</li>
</ul><p dir="rtl">
	الملفان<span style="font-family:courier new,courier,monospace;"> lxc.conf </span>و <span style="font-family:courier new,courier,monospace;">default.conf</span> موجودان في <span style="font-family:courier new,courier,monospace;">‎/etc/lxc </span>و ‎<span style="font-family:courier new,courier,monospace;">$HOME/.config/lxc</span>؛ بينما الملف<span style="font-family:courier new,courier,monospace;"> lxc-usernet.conf</span> هو ملف لعموم المضيف.
</p>

<p dir="rtl">
	افتراضيًا، تقبع الحاويات في مجلد <span style="font-family:courier new,courier,monospace;">‎/var/lib/lxc</span> بالنسبة للمستخدم الجذر، و <span style="font-family:courier new,courier,monospace;">‎$HOME/.local/share/lxc</span> عدا ذلك؛ يمكن تحديد المسار لجميع أوامر <span style="font-family:courier new,courier,monospace;">lxc</span> باستخدام المعامل «<span style="font-family:courier new,courier,monospace;">‎-P|--lxcpath</span>».
</p>

<h2 dir="rtl">
	ضبط الشبكة
</h2>

<p dir="rtl">
	افتراضيًا، يُنشِئ LXC مجال أسماء شبكي خاص لكل حاوية، الذي يتضمن مجموعة الاتصال الشبكي من الطبقة الثانية (layer 2)، تتصل الحاويات عادةً إلى العالم الخارجي إما بالحصول على بطاقة شبكية فيزيائية، أو عبر نفق veth يُمرَّر إلى الحاوية؛ ينُشِئ LXC جسر NAT، الذي هو <span style="font-family:courier new,courier,monospace;">lxcbr0</span> عند إقلاع المضيف؛ والحاويات المُنشَأة باستخدام ملف الضبط الافتراضي سيكون لها بطاقة شبكية veth تكون نهايتها موصولةٌ إلى الجسر <span style="font-family:courier new,courier,monospace;">lxcbr0</span>، يمكن للبطاقة الشبكية أن تتواجد في مجال أسماء واحد في وقتٍ واحد، لذلك البطاقة الشبكية الفيزيائية المُمررة إلى الحاوية ستكون غير قابلة للاستخدام في المضيف.
</p>

<p dir="rtl">
	من الممكن إنشاء حاويات دون مجال أسماء شبكي خاص، ففي هذه الحالة، ستحصل الحاوية على وصول إلى شبكة المضيف مثل أي تطبيق آخر، لاحظ أنه هذا خطير خصوصًا إذا كانت الحاوية تُشغِّل توزيعة تستخدم <span style="font-family:courier new,courier,monospace;">upstart</span>، مثل أوبنتو، لأن البرامج التي «تتحدث» إلى <span style="font-family:courier new,courier,monospace;">init</span>، مثل <span style="font-family:courier new,courier,monospace;">shutdown</span>، سيتحدثون عبر مقبس مجال يونكس مجرد (abstract Unix domain socket) إلى <span style="font-family:courier new,courier,monospace;">upstart</span> للمضيف، مما سيوقف تشغيل المضيف!
</p>

<p dir="rtl">
	لمنح الحاويات في <span style="font-family:courier new,courier,monospace;">lxcbr0</span> عنوان IP ثابت بناءً على اسم المضيف، فيمكنك كتابة هذه المدخلات إلى <span style="font-family:courier new,courier,monospace;">‎/etc/lxc/dnsmasq.conf</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_48">
<span class="pln">dhcp-host=lxcmail,10.0.3.100
dhcp-host=ttrss,10.0.3.101</span></pre>

<p dir="rtl">
	إذا كان من المطلوب أن يُسمَح بالوصول إلى الحاوية من الخارج، فهنالك عدِّة طرق للالتفاف على ذلك، إحداها هي استخدام <span style="font-family:courier new,courier,monospace;">iptables</span> لتمرير منافذ المضيف إلى الحاوية، فمثلًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_50">
<span class="pln"> iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 587 -j DNAT \
 	--to-destination 10.0.3.100:587</span></pre>

<p dir="rtl">
	طريقة أخرى هي إنشاء جسر إلى إلى البطاقة الشبكية للمضيف (راجع درس ضبط الشبكة لمزيدٍ من المعلومات)؛ ثم حدد جسر المضيف في ملف ضبط الحاوية بدلًا من <span style="font-family:courier new,courier,monospace;">lxcbr0</span>، فمثلًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_52">
<span class="pln">lxc.network.type = veth
lxc.network.link = br0</span></pre>

<p dir="rtl">
	في النهاية، يمكنك سؤال LXC ليستخدم <span style="font-family:courier new,courier,monospace;">macvlan</span> كبطاقة شبكية للحاوية؛ لاحظ أن لهذه الطريقة حدود واعتمادًا على الضبط قد لا تتمكن الحاوية من «التحدث» إلى المضيف نفسه، وبالتالي الخياران السابقان أفضل ويُستخدمان أكثر.
</p>

<p dir="rtl">
	هنالك عدِّة طرق لتحديد عنوان IP للحاوية، فأولًا، يمكنك استخدام<span style="font-family:courier new,courier,monospace;"> lxc-ls --fancy</span> الذي سيطبع عناوين IP لجميع الحاويات التي تعمل؛ أو<span style="font-family:courier new,courier,monospace;"> lxc-info -i -H -n C1</span> الذي سيطبع عنوان IP للحاوية C1؛ إذا كان <span style="font-family:courier new,courier,monospace;">dnsmasq</span> مثبتًا على المضيف، فيمكنك إضافة قيد إلى ‎<span style="font-family:courier new,courier,monospace;">/etc/dnsmasq.conf</span> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_34">
<span class="pln">server=/lxc/10.0.3.1</span></pre>

<p dir="rtl">
	بعد أن يستبين <span style="font-family:courier new,courier,monospace;">dnsmasq</span> عنوان C1.lxc محليًا، فيمكنك تنفيذ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4413_54">
<span class="pln">ping C1
ssh C1</span></pre>

<p dir="rtl">
	للمزيد من المعلومات، راجع صفحة دليل <span style="font-family:courier new,courier,monospace;">lxc.conf</span> ومثال ضبط الشبكة في<span style="font-family:courier new,courier,monospace;"> ‎/usr/share/doc/lxc ‎/examples/‎</span>.
</p>

<p dir="rtl">
	ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/lxc.html" rel="external nofollow">Ubuntu Server Guide: LXC</a>.
</p>
]]></description><guid isPermaLink="false">219</guid><pubDate>Fri, 19 Feb 2016 21:44:56 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x644;&#x62A;&#x631;&#x642;&#x64A;&#x629; &#x625;&#x644;&#x649; PHP 7 &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; 14.04</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B1%D9%82%D9%8A%D8%A9-%D8%A5%D9%84%D9%89-php-7-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r217/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/upgrade-to-php7.png.729d7fe879b79ecddf4e42846ddcac98.png" /></p>

<div id="wmd-preview-section-25">
	<p id="كيفية-الترقية-إلى-php-7-على-أوبنتو-1404">
		تَعِد PHP 7، التي صدرت في 3 ديسمبر 2015، بتحسينات كبيرة في سرعتها على النُسخ السابقة من اللغة، مع مميزات جديدة مثل تلميح النوع العددي (scalar type hinting). سنشرح كيفية ترقية خادوم Apache أو Nginx يستخدم PHP 5.x (أي إصدار) إلى PHP 7.
	</p>

	<p style="text-align: center;">
		<img alt="upgrade-to-php7.png.756b67429c05f76ba116" class="ipsImage ipsImage_thumbnailed" data-fileid="12901" data-unique="imrbtb426" src="https://academy.hsoub.com/uploads/monthly_2016_02/upgrade-to-php7.png.756b67429c05f76ba116b5ed0d38722a.png"></p>

	<p>
		<strong>تحذير</strong>: كما هو الحال مع معظم النسخ الرئيسية لإصدارات اللغة، من الأفضل الانتظار لبعض الوقت قبل الانتقال إلى PHP 7 في بيئة الإنتاج. في غضون ذلك، يكون الوقت مناسب لاختبار توافقية تطبيقاتك مع الإصدار الجديد، إجراء مقاييس الأداء والتّعرف على الميزات الجديدة للغة.
	</p>

	<p>
		إذا كُنت تُشغل أي خدمات أو تطبيقات بمستخدمين نُشطاء، فالآمن اختبار PHP 7 في بيئة إدراج staging environment قبل تثبيتها في بيئة الإنتاج.
	</p>

	<p>
		<strong>ملحوظة</strong>: بيئة الإدراج (staging environment) هي بيئة تطوير تقع بين بيئة الاختبار وبيئة الإنتاج، تُستخدم في تجميع، اختبار واستعراض الإصدارات الجديدة من البرمجيات قبل نقلها إلى بيئة الإنتاج.
	</p>
</div>

<div id="wmd-preview-section-26">
	<h2 id="المتطلبات-الأساسية">
		المتطلبات الأساسية
	</h2>

	<p>
		يُفتَرض أنك تستخدم PHP 5.x على أوبنتو 14.04، باستخدام إما <span style="font-family:courier new,courier,monospace;">mod_php</span> بالتزامن مع Apache، أو PHP-FPM بالتزامن مع Nginx. ويُفتَرض أن لديك مُستخدم عادي غير المستخدم الجذر بصلاحيات sudo للمهام الإدارية.
	</p>
</div>

<div id="wmd-preview-section-27">
	<h2 id="إضافة-ppa-لحزم-php-70">
		إضافة PPA لحزم PHP 7.0
	</h2>

	<p>
		أرشيف الحزم الشخصي، أو PPA، هو مُستودع Apt مُستضاف على <a href="https://launchpad.net/" rel="external nofollow">Launchpad</a>. وهذه الأرشيفات الشخصية تسمح لمطوري الطرف الثالث ببناء وتوزيع الحزم لأوبنتو خارج قنوات تطوير الحزم الرسمية. وهي مصادر مفيدة غالبًا من البرمجيات التجريبية، البنّى المُعدلة والمنقولات الخلفية backports لإصدارات النظام القديمة.
	</p>

	<p>
		<strong>ملحوظة</strong>: الحزم المنقولة خلفًا (package backports) هي حزم لبرمجيات حديثة أعيدت ترجمتها لتوزيعة قديمة (نُقلت إلى الخلف)، وعادة ما يكون النقل إلى التوزيعة المستقرة.
	</p>

	<p>
		يقوم Ondřej Surý على صيانة حزم PHP لدبيان، ويوفر <a href="https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0" rel="external nofollow">أرشيف شخصي للنسخة PHP 7.0</a> على أوبنتو. قبل القيام بأي شيء، سجل دخولك إلى النظام، وأضف أرشيف Ondřej الشخصي إلى قائمة مصادر Apt بالنظام:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_9">
<span class="pln">$ sudo add-apt-repository ppa:ondrej/php-7.0</span></pre>

	<p>
		ستلاحظ وصف الأرشيف الشخصي، متبوعًا بمحث للاستمرار. اضغط Enter للمواصلة.
	</p>

	<p>
		<strong>ملحوظة</strong>: إذا كانت محليات نظامك مضبوطة لأي شيء غير UTF-8، فقد تفشل عملية إضافة الأرشيف الشخصي لوجود مشكلة برمجية في التعامل مع الحروف في اسم المؤلف. وكالتفاف حول المشكلة يمكنك تثبيت الحزمة<span style="font-family:courier new,courier,monospace;"> language-pack-en-base</span> لتتأكد من توليد المحليات المطلوبة، وتتجاوز إعدادات محليات النظام عند إضافة الأرشيف الشخصي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9149_10">
<span class="pln">$ sudo apt-get install -y language-pack-en-base
$ sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php-7.0</span></pre>

	<p>
		بمجرد انتهاء تثبيت الأرشيف الشخصي، حدّث ذاكرة الحزم المُخبأة لكي يتم تضمين محتويات الأرشيف:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_13">
<span class="pln">$ sudo apt-get update</span></pre>

	<p>
		الآن أصبح لدينا وصول لحزم PHP 7.0، ويمكننا استبدال نسخة PHP الحالية.
	</p>
</div>

<div id="wmd-preview-section-28">
	<h2 id="ترقية-modphp-مع-apache">
		ترقية mod_php مع Apache
	</h2>

	<p>
		هذا القسم يوضح عملية ترقية نظام يستخدم Apache كخادوم و <span style="font-family:courier new,courier,monospace;">mod_php </span>لتنفيذ شفرة PHP. إذا كُنت تستخدم Nginx و PHP-FPM انتقل للقسم التالي.
	</p>

	<p>
		تثبت الحزم الجديدة سوف يُرقي كل حزم PHP الهامة، باستثناء<span style="font-family:courier new,courier,monospace;"> php5-mysql</span>، التي سيتم حذفها.
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_15">
<span class="pln">$ sudo apt-get install php7.0</span></pre>

	<p>
		<strong>ملحوظة</strong>: إذا قُمت بتعديلات هامة على أي ملف من ملفات الضبط في<span style="font-family:courier new,courier,monospace;">/etc/php5/</span>، فهذه الملفات ستظل في مكانها، ويمكن الرجوع إليها. ملفات ضبط PHP 7.0 تجدها الآن في <span style="font-family:courier new,courier,monospace;">etc/php/7.0/</span>.
	</p>

	<p>
		إذا كُنت تستخدم MySQL، تأكد من إعادة تثبيت جسر PHP MySQL المُحدّثة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_17">
<span class="pln">$ sudo apt-get install php7.0-mysql</span></pre>

	<h2>
		ترقية PHP-FPM مع Nginx
	</h2>
</div>

<div id="wmd-preview-section-29">
	<p>
		هذا القسم يوضح عملية ترقية نظام يستخدم Nginx كخادوم و PHP-FPM لتنفيذ شفرة PHP.
	</p>

	<p>
		تثبيت حزم PHP-FPM الجديدة واعتمادياتها:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_19">
<span class="pln">$ sudo apt-get install php7.0-fpm</span></pre>

	<p>
		سيطلب منك الاستمرار، اضغط Enter لإكمال التثبيت.
	</p>

	<p>
		إذا كُنت تستخدم MySQL، تأكد من إعادة تثبيت جسر PHP MySQL المُحدّثة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_21">
<span class="pln">$ sudo apt-get install php7.0-mysql</span></pre>

	<p>
		<strong>ملحوظة</strong>: إذا قُمت بتعديلات هامة على أي ملف من ملفات الضبط في<span style="font-family:courier new,courier,monospace;">/etc/php5/</span>، فهذه الملفات ستظل في مكانها، ويمكن الرجوع إليها. ملفات ضبط PHP 7.0 تجدها الآن في <span style="font-family:courier new,courier,monospace;">etc/php/7.0/</span>.
	</p>
</div>

<div id="wmd-preview-section-30">
	<h2 id="ترقية-مواقع-nginx-لتستخدم-مسار-المقبس-الجديد">
		ترقية مواقع Nginx لتستخدم مسار المقبس الجديد
	</h2>

	<p>
		يتواصل Nginx مع PHP-FPM باستخدام <a href="https://en.wikipedia.org/wiki/Unix_domain_socket" rel="external nofollow">مقبس نطاق يونكس</a>. ترسم المقابس خريطة لمسار على نظام الملفات، تستخدم PHP 7 مسار افتراضيًا جديدًا :
	</p>

	<p style="text-align: left;">
		PHP 5:<span style="font-family:courier new,courier,monospace;"> /var/run/php5-fpm.sock</span> 
	</p>

	<p style="text-align: left;">
		PHP 7: <span style="font-family:courier new,courier,monospace;">/var/run.php7.0-fpm.sock</span>
	</p>

	<p>
		<span style="line-height: 2em;">افتح ملف ضبط الموقع الافتراضي بالمحرر nano (أو أي مُحرر من اختيارك):</span>
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_7">
<span class="pln">sudo nano /etc/nginx/sites-enabled/default</span></pre>

	<pre>
<span style="line-height: 2em; font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif;">قد يختلف ضبطك قليلا. ابحث عن كتلة تبدأ بـ<span style="font-family:courier new,courier,monospace;"> }$location ~ \.php</span> وسطر يبدو مثل <span style="font-family:courier new,courier,monospace;">;fastcgi_pass unix:/var/run/php5-fpm.sock</span> غيّر هذا ليستخدم <span style="font-family:courier new,courier,monospace;">unix:/var/run/php/php7.0-fpm.sock.</span></span>
</pre>

	<p>
		<strong>مثال لملف <span style="font-family:courier new,courier,monospace;">etc/nginx/sites-enabled/default/</span></strong>
	</p>
</div>

<div id="wmd-preview-section-31">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_9">
<span class="pln">server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name server_domain_name_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}</span></pre>

	<p>
		اخرج واحفظ الملف. يمكنك القيام بهذا في nano بالضغط على <span style="font-family:courier new,courier,monospace;">Ctrl-x</span> للخروج، <span style="font-family:courier new,courier,monospace;">y</span> للتأكيد و <span style="font-family:courier new,courier,monospace;">Enter</span> للتأكيد على اسم الملف الذي سيتم الكتابة فوقه.
	</p>

	<p>
		ينبغي تكرار هذه الخطوة لأي مواقع مُعرّفة في المُجلّد <span style="font-family:courier new,courier,monospace;">etc/nginx/sites-enabled/</span> والتي تحتاج أن تدعم PHP.
	</p>

	<p>
		الآن يمكننا إعادة تشغيل nginx:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_11">
<span class="pln">$ sudo service nginx restart</span></pre>

	<h2>
		اختبار PHP
	</h2>
</div>

<div id="wmd-preview-section-32">
	<p>
		بعد ضبط الخادوم وتثبيت الحزم الجديدة، يمكننا التحقق من أن PHP تعمل. ابدأ بالتحقق من نسخة PHP المُثبتة بالأمر:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_19">
<span class="pln">$ php -v</span></pre>

	<h3>
		المخرجات
	</h3>
</div>

<div id="wmd-preview-section-33">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_21">
<span class="pln">PHP 7.0.0-5+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies</span></pre>

	<p>
		يمكننا كذلك إنشاء ملف اختبار في مُجلد جذر وثائق الخادوم (document root). مسار هذا المُجلد يعتمد على خادومك وضبطك، قد يكون واحدًا من:
	</p>

	<ul><li>
			<span style="font-family:courier new,courier,monospace;">var/www/html/</span>
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">/var/www/</span>
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">usr/share/nginx/html/</span>
		</li>
	</ul><p>
		افتح ملفًا جديدًا باستخدام nano يسمى <span style="font-family:courier new,courier,monospace;">info.php</span> في جذر الوثائق. يكون على Apache، افتراضيًا بالمسار الأول:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_13">
<span class="pln">$ sudo nano /var/www/html/info.php</span></pre>

	<p>
		على Nginx، قد تستخدم:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7631_15">
<span class="pln">$ sudo nano /usr/share/nginx/html/info.php</span></pre>

	<p>
		وألصق الشيفرة التالية بالملف:
	</p>
</div>

<div id="wmd-preview-section-34">
	<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7631_17">
<span class="pun">&lt;?</span><span class="pln">php
phpinfo</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

	<p>
		أغلق المُحرر، واحفظ <span style="font-family:courier new,courier,monospace;">info.php</span>. الآن، حمل العنوان التالي في متصفحك:
	</p>

	<pre style="text-align: center;">
<strong>http://server_domain_name_or_IP/info.php</strong>
</pre>

	<p>
		استبدل <span style="font-family:courier new,courier,monospace;">server_domain_name_or_IP</span> باسم نطاق أو عنوان ip الخادوم.
	</p>

	<p>
		ينبغي أن ترى رقم نُسخة PHP ومعلومات ضبط PHP 7. بمجرد أن تُراجع هذه المعلومات، فمن الأفضل (لزيادة أمان خادومك) حذف الملف <span style="font-family:courier new,courier,monospace;">info.php</span>:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9543_7">
<span class="pln">$ sudo rm /var/www/html/info.php</span></pre>

	<h2>
		خاتمة
	</h2>
</div>

<div id="wmd-preview-section-35">
	<p>
		الآن لديك PHP 7، مُثبت ويعمل. قد ترغب في إلقاء نظرة على <a href="https://secure.php.net/manual/en/migration70.php" rel="external nofollow">دليل الهجرة الرسمي إلى PHP 7</a>.
	</p>

	<p>
		ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-ubuntu-14-04" rel="external nofollow">How To Upgrade to PHP 7 on Ubuntu 14.04</a> لصاحبه Brennen Bearnes.
	</p>
</div>
]]></description><guid isPermaLink="false">217</guid><pubDate>Sat, 13 Feb 2016 10:18:20 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x623;&#x646;&#x638;&#x645;&#x629; &#x627;&#x644;&#x648;&#x647;&#x645;&#x64A;&#x629; &#x639;&#x644;&#x649; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D9%88%D9%87%D9%85%D9%8A%D8%A9-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r215/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-virtualization.png.6880ea8e8955e4a8acaca88d51f4fd0b.png" /></p>

<p dir="rtl">
	يُعتمَد على الأنظمة الوهمية في مختلف البيئات والحالات؛ فلو كنت مطوِّرًا فتوفر لك الأنظمة الوهمية بيئة مُحتوَية حيث تستطيع أن تجري أي نوع من أنواع التطوير دون القلق من تخريب بيئة العمل الرئيسية عندك. وإذا كنت مديرًا للأنظمة، فتستطيع استخدام الأنظمة الوهمية لتعزل خدماتك عزلًا سهلًا وتنقلهم بناءً على الحاجة.
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-virtualization.png.8c624d1" class="ipsImage ipsImage_thumbnailed" data-fileid="12790" data-unique="vhvoc45m8" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-virtualization.png.8c624d1c449a22606e9f1e58e2dacac2.png"></p>

<p dir="rtl">
	تقنية الأنظمة الوهمية الافتراضية المدعومة في أوبنتو هي KVM، تتطلب KVM ملحقات لدعم الأنظمة الوهمية في عتاد Intel و AMD؛ وتقنية Xen مدعومة أيضًا في أوبنتو؛ حيث يمكن أن تستفيد Xen من تلك الملحقات عند توفرها، لكن يمكن تشغيلها على عتاد دون إضافات الأنظمة الوهمية؛ خيار شائع أخر هو Qemu للعتاد بدون ملحقات الأنظمة الوهمية (virtualization extensions).
</p>

<h2 dir="rtl">
	libvirt
</h2>

<p dir="rtl">
	تُستخدَم المكتبة libvirt للتعامل مع مختلف تقنيات الأنظمة الوهمية؛ وقبل البدء مع libvirt، من الأفضل التحقق أنّ عتادك يدعم الملحقات الضرورية لعمل KVM، وذلك بإدخال الأمر الآتي في الطرفية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_8">
<span class="pln">kvm-ok</span></pre>

<p dir="rtl">
	ستظهر رسالة تعلِمك إن كان معالجك يدعم أو لا يدعم الملحقات العتادية للأنظمة الوهمية.
</p>

<p dir="rtl">
	<strong>ملاحظة</strong>: يكون من الضروري في أغلب الحواسيب التي تدعم معالجاتها الأنظمة الوهمية أن يفعَّل خيارٌ في BIOS لتمكينها.
</p>

<h2 dir="rtl">
	التواصل الشبكي الوهمي
</h2>

<p dir="rtl">
	هنالك عدِّة طرق للسماح لنظام وهمي بالوصول إلى الشبكة الخارجية؛ خيار ضبط التواصل الشبكي الوهمي الافتراضي هو «usermode»، الذي يستخدم بروتوكول SLIRP ويمرِّر التراسل الشبكي عبر NAT عبر بطاقة المضيف إلى الشبكة الخارجية.
</p>

<p dir="rtl">
	لتمكين وصول المضيفين الخارجيين إلى الخدمات مباشرةً على الأنظمة الوهمية، فيجب استخدام ضبط «bridge»؛ هذا يسمح للبطاقات الشبكية الوهمية بالاتصال إلى الشبكة الخارجية عبر البطاقة العتادية، مما يجعلها تبدو كأنها حواسيب عادية لبقية الشبكة.
</p>

<h2 dir="rtl">
	التثبيت
</h2>

<p dir="rtl">
	أدخِل ما يلي في الطرفية لتثبيت الحزم اللازمة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_10">
<span class="pln">sudo apt-get install kvm libvirt-bin</span></pre>

<p dir="rtl">
	يجب إضافة المستخدم الذي سيدير الآلات الوهمية إلى مجموعة libvirtd بعد تثبيت <span style="font-family:courier new,courier,monospace;">libvirt-bin</span>؛ وبهذا تعطي المستخدم وصولًا إلى خيارات الشبكة المتقدمة؛ وذلك بإدخال الأمر الآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_12">
<span class="pln">sudo adduser $USER libvirtd</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: إذا كان المستخدم الذي أضفته هو المستخدم الحالي، فيجب عليك تسجيل الخروج ثم الدخول مرةً أخرى لكي تأخذ عضوية المجموعة الجديدة مفعولها.
</p>

<p dir="rtl">
	أنت الآن جاهز لتثبيت نظام تشغيل «ضيف» (Guest)؛ طريقة تثبيت نظام التشغيل على الآلات الوهمية هي نفس طريقة تثبيته مباشرةً على العتاد؛ أي أنك إما أن تحتاج إلى أتمتة التثبيت، أو إلى لوحة مفاتيح وشاشة موصولين إلى الآلة الفيزيائية.
</p>

<p dir="rtl">
	في حالة الآلات الوهمية، تكون الواجهة الرسومية (GUI) مماثلة لاستخدام لوحة مفاتيح وفأرة فيزيائية؛ فبدلًا من تثبيت واجهة رسومية، يمكن استخدام التطبيق virt-viewer للاتصال إلى الآلة الوهمية باستخدام VNC، راجع القسم «عارض الآلات الوهمية» لمزيدٍ من التفاصيل.
</p>

<p dir="rtl">
	هنالك عدِّة طرق لأتمتة تثبيت أوبنتو، إذ يمكن ذلك باستخدام preseed أو kickstart على سبيل المثال. راجع <a href="https://help.ubuntu.com/14.04/installation-guide/" rel="external nofollow">دليل تثبيت أوبنتو</a> للتفاصيل.
</p>

<p dir="rtl">
	طريقة أخرى لتثبيت أوبنتو على آلة افتراضية هي استخدام<span style="font-family:courier new,courier,monospace;"> ubuntu-vm-builder</span>، يسمح<span style="font-family:courier new,courier,monospace;"> ubuntu-vm-builder</span> بإعداد متقدم للأقسام، وتنفيذ سكربتات بعد التثبيت ...إلخ. للتفاصيل، راجع القسم «الصور السحابية وأداة uvtools».
</p>

<p dir="rtl">
	يمكن ضبط Libvirt مع Xen، راجع صفحة مجتمع أوبنتو المُشار إليها في المصادر.
</p>

<h2 dir="rtl">
	virt-install
</h2>

<p dir="rtl">
	<span style="font-family:courier new,courier,monospace;">virt-install</span> هو جزء من حزمة <span style="font-family:courier new,courier,monospace;">virtinst</span>، أدخِل الأمر الآتي لتثبيتها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_16">
<span class="pln">sudo apt-get install virtinst</span></pre>

<p dir="rtl">
	هنالك عدِّة خيارات متوفرة عند استخدام<span style="font-family:courier new,courier,monospace;"> virt-install</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_18">
<span class="pln">sudo virt-install -n web_devel -r 256 \
--disk path=/var/lib/libvirt/images/web_devel.img,bus=virtio,size=4 -c \
ubuntu-14.04-server-i386.iso --network network=default,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole -v</span></pre>

<ul dir="rtl"><li>
		<strong>الخيار<span style="font-family:courier new,courier,monospace;"> ‎-n web_devel</span></strong>: اسم الآلة الوهمية، سيكون web_devel في هذا المثال.
	</li>
	<li>
		<strong>الخيار ‎<span style="font-family:courier new,courier,monospace;">-r 256</span></strong>: تحديد مقدار الذاكرة التي ستستخدمها الآلة الوهمية مقدرًا بالميغابايت.
	</li>
	<li>
		<strong>الخيار</strong> <strong><span style="font-family:courier new,courier,monospace;">‎--disk path=/var/lib/libvirt/images/web_devel.img,size=4</span></strong>: الإشارة إلى مسار القرص الوهمي الذي يمكن أن يكون ملفًا أو قسمًا أو حجمًا وهميًا؛ في هذا المثال هنالك ملف باسم <span style="font-family:courier new,courier,monospace;">web_devel.img</span> في مجلد <span style="font-family:courier new,courier,monospace;">‎/var/lib/libvirt/images/‎ </span>بحجم 4 غيغابايت، وسيستخدم virtio كناقل للقرص (disk bus).
	</li>
	<li>
		<strong>الخيار</strong> ‎:<strong><span style="font-family:courier new,courier,monospace;">-c ubuntu-14.04-server-i386.iso</span></strong> الملف الذي سيُستخدَم كقرص CD-ROM وهمي، يمكن أن يكون الملف إما ملف ISO أو مسار إلى جهاز قرص CD-ROM في المضيف.
	</li>
	<li>
		<strong>الخيار</strong> <strong><span style="font-family:courier new,courier,monospace;">‎--network</span></strong>: يوفر معلومات حول البطاقة الشبكية للآلة الوهمية؛ يُستخدَم هنا default، وضُبِط موديل البطاقة إلى virtio.
	</li>
	<li>
		<strong>الخيار</strong> ‎<strong><span style="font-family:courier new,courier,monospace;">--graphics vnc,listen=0.0.0.0</span></strong>: تصدير طرفية الضيف باستخدام VNC على جميع البطاقات الشبكية للمضيف؛ إذ عمومًا لا يكون للخادوم واجهة رسومية، لذلك فيمكن لحاسوب آخر على الشبكة المحلية ذي واجهةٍ رسومية أن يتصل عبر VNC لإكمال التثبيت.
	</li>
	<li>
		<strong>الخيار</strong> ‎<strong><span style="font-family:courier new,courier,monospace;">--noautoconsole</span></strong>: يؤدي إلى عدم الاتصال تلقائيًا إلى طرفية الآلة الوهمية.
	</li>
	<li>
		<strong>الخيار</strong> ‎<strong><span style="font-family:courier new,courier,monospace;">-v</span></strong>: إنشاء ضيف وهمي كامل.
	</li>
</ul><p dir="rtl">
	بعد تشغيل <span style="font-family:courier new,courier,monospace;">virt-install </span>يمكنك الاتصال إلى طرفية الآلة الوهمية إما محليًا باستخدام GUI أو باستخدام الأداة <span style="font-family:courier new,courier,monospace;">virt-viewer</span>.
</p>

<h2 dir="rtl">
	virt-clone
</h2>

<p dir="rtl">
	يمكن استخدام <span style="font-family:courier new,courier,monospace;">virt-clone </span>لنسخ آلة وهمية إلى آلة أخرى؛ على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_20">
<span class="pln">sudo virt-clone -o web_devel -n database_devel -f /path/to/database_devel.img \
--connect=qemu:///system</span></pre>

<ul dir="rtl"><li>
		<strong><span style="font-family:courier new,courier,monospace;">‎-o</span></strong>: الآلة الوهمية الأصلية.
	</li>
	<li>
		‎<strong><span style="font-family:courier new,courier,monospace;">-n</span></strong>: اسم الآلة الوهمية الجديدة.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">‎-f</span></strong>: المسار إلى الملف، أو القسم، أو الحجم المنطقي الذي سيُستخدَم من الآلة الوهمية الجديدة.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">‎--connect</span></strong>: تحديد «المشرف» (hypervisor) الذي سيُتصَّل به.
	</li>
</ul><p dir="rtl">
	يمكن أيضًا استخدام الخيار <span style="font-family:courier new,courier,monospace;">‎-d </span>أو<span style="font-family:courier new,courier,monospace;"> ‎--debug </span>لاستكشاف الأخطاء مع <span style="font-family:courier new,courier,monospace;">virt-clone</span>.
</p>

<p dir="rtl">
	<strong>ملاحظة</strong>: استبدل <span style="font-family:courier new,courier,monospace;">web_devel</span> و <span style="font-family:courier new,courier,monospace;">database_devel</span> بأسماء ملائمة للآلات الوهمية.
</p>

<h2 dir="rtl">
	إدارة الآلة الوهمية
</h2>

<h3 dir="rtl">
	virsh
</h3>

<p dir="rtl">
	هنالك عدِّة أدوات متوفرة لإدارة الآلات الوهمية و <span style="font-family:courier new,courier,monospace;">libvirt</span>؛ يمكن أن تُستخدَم الأداة <span style="font-family:courier new,courier,monospace;">virsh</span> من سطر الأوامر؛ هذه بعض الأمثلة:
</p>

<ul><li>
		<p dir="rtl">
			لعرض قائمة بالآلات الوهمية التي تعمل:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_22">
<span class="pln">virsh -c qemu:///system list</span></pre>

<ul><li>
		<p dir="rtl">
			لبدء تشغيل آلة وهمية:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_24">
<span class="pln">virsh -c qemu:///system start web_devel</span></pre>

<ul><li>
		<p dir="rtl">
			وبشكلٍ مشابه، لتشغيل آلة وهمية عند الإقلاع:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_26">
<span class="pln">virsh -c qemu:///system autostart web_devel</span></pre>

<ul><li>
		<p dir="rtl">
			أعد إقلاع آلة وهمية باستخدام الأمر:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_28">
<span class="pln">virsh -c qemu:///system reboot web_devel</span></pre>

<ul><li>
		<p dir="rtl">
			يمكن حفظ «حالة» (state) الآلة الوهمية إلى ملف لتُستعاد لاحقًا؛ ما يلي سوف يحفظ حالة الآلة الوهمية إلى ملف مسمى وفقًا لتاريخ اليوم:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_30">
<span class="pln">virsh -c qemu:///system save web_devel web_devel-022708.state</span></pre>

<p dir="rtl">
	ستتوقف الآلة الوهمية عن العمل بعد حفظ حالتها.
</p>

<ul><li>
		<p dir="rtl">
			يمكن استعادة الآلة الوهمية باستخدام:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_32">
<span class="pln">virsh -c qemu:///system restore web_devel-022708.state</span></pre>

<ul><li>
		<p dir="rtl">
			نفِّذ الأمر لإيقاف تشغيل آلة وهمية:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_34">
<span class="pln">virsh -c qemu:///system shutdown web_devel</span></pre>

<ul><li>
		<p dir="rtl">
			يمكن وصل جهاز CD-ROM إلى آلة وهمية بالأمر:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_36">
<span class="pln">virsh -c qemu:///system attach-disk web_devel /dev/cdrom /media/cdrom</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: استبدل في الأمثلة السابقة <span style="font-family:courier new,courier,monospace;">web_devel </span>مع اسم الآلة الوهمية الملائم، و <span style="font-family:courier new,courier,monospace;">web_devel-022708.state</span> باسم ملف أكثر وصفًا.
</p>

<h3 dir="rtl">
	مدير الآلات الوهمية
</h3>

<p dir="rtl">
	تحتوي حزمة <span style="font-family:courier new,courier,monospace;">virt-manager</span> على أداة رسومية لإدارة الآلات الوهمية المحلية والبعيدة؛ أدخِل الأمر الآتي لتثبيتها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_38">
<span class="pln">sudo apt-get install virt-manager</span></pre>

<p dir="rtl">
	لما كانت الأداة <span style="font-family:courier new,courier,monospace;">virt-manager</span> تتطلب واجهة رسومية (GUI) فمن المستحسن أن تُثبَّت على محطة عمل أو جهاز للاختبارات بدلًا من خادوم إنتاجي؛ أدخِل الأمر الآتي للاتصال بخدمة <span style="font-family:courier new,courier,monospace;">libvirt</span> محلية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_40">
<span class="pln">virt-manager -c qemu:///system</span></pre>

<p dir="rtl">
	تستطيع الاتصال بخدمة <span style="font-family:courier new,courier,monospace;">libvirt</span> في مضيف آخر بإدخال ما يلي في الطرفية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_42">
<span class="pln">virt-manager -c qemu+ssh://virtnode1.mydomain.com/system</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: يفترض المثال السابق أن إمكانية الاتصال عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> بين نظام الإدارة و <span style="font-family:courier new,courier,monospace;">virtnode1.mydomain.com </span>قد ضُبِطَت مسبقًا، وتستخدم مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> للاستيثاق؛ هنالك حاجة لمفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> لأن المكتبة libvirt تُرسِل محث كلمة المرور إلى عملية أخرى. للتفاصيل عن ضبط <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>، راجع درس <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%B9%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-openssh-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r172/">خادوم OpenSSH</a>.
</p>

<h2 dir="rtl">
	<a name="20.1.6.%D8%B9%D8%A7%D8%B1%D8%B6%20%D8%A7%D9%84%D8%A2%D9%84%D8%A7%D8%AA%20%D8%A7%D9%84%D9%88%D9%87%D9%85%D9%8A%D8%A9%7Coutline" rel="external"></a> عارض الآلات الوهمية
</h2>

<p dir="rtl">
	يسمح التطبيق <span style="font-family:courier new,courier,monospace;">virt-viewer</span> لك بالاتصال إلى طرفية الآلة الوهمية لكن<span style="font-family:courier new,courier,monospace;"> virt-viewer</span> يتطلب واجهة رسومية (GUI) للتعامل مع الآلة الوهمية، أدخِل الأمر الآتي من الطرفية لتثبيت <span style="font-family:courier new,courier,monospace;">virt-viewer</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_44">
<span class="pln">sudo apt-get install virt-viewer</span></pre>

<p dir="rtl">
	بعد تثبيت وتشغيل آلة وهمية، يمكنك الاتصال إلى طرفيتها بالأمر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_46">
<span class="pln">virt-viewer -c qemu:///system web_devel</span></pre>

<p dir="rtl">
	وكما في <span style="font-family:courier new,courier,monospace;">virt-manager</span>، يمكن اتصال <span style="font-family:courier new,courier,monospace;">virt-viewer </span>إلى مضيف بعيد باستخدام <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> مع استيثاق باستخدام مفتاح:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3802_48">
<span class="pln">virt-viewer -c qemu+ssh://virtnode1.mydomain.com/system web_devel</span></pre>

<p dir="rtl">
	تأكد من استبدال<span style="font-family:courier new,courier,monospace;"> web_devel</span> باسم الآلة الوهمية الملائم.
</p>

<p dir="rtl">
	إذا ضبطت استخدام بطاقة شبكية جسرية (bridged network interface)، فيمكنك ضبط وصول <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> إلى الآلة الوهمية؛ راجع درس <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%B9%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-openssh-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r172/">خادوم OpenSSH</a> لمزيدٍ من المعلومات.
</p>

<h2 dir="rtl">
	مصادر
</h2>

<ul dir="rtl"><li>
		راجع <a href="http://kvm.qumranet.com/kvmwiki" rel="external nofollow">صفحة </a><a href="http://kvm.qumranet.com/kvmwiki" rel="external nofollow">KVM</a><a href="http://kvm.qumranet.com/kvmwiki" rel="external nofollow"> </a><a href="http://kvm.qumranet.com/kvmwiki" rel="external nofollow">الرئيسية</a> للمزيد من التفاصيل.
	</li>
	<li>
		للمزيد من المعلومات حول libvirt، انظر إلى <a href="http://libvirt.org/" rel="external nofollow">صفحة </a><a href="http://libvirt.org/" rel="external nofollow">libvirt </a><a href="http://libvirt.org/" rel="external nofollow">الرئيسية</a>.
	</li>
	<li>
		موقع «<a href="http://virt-manager.et.redhat.com/" rel="external nofollow">Virtual Machine Manager</a>» فيه المزيد من المعلومات حول تطوير virt-manager.
	</li>
	<li>
		ادخل إلى قناة ‎#ubuntu-virt على خادوم <a href="http://freenode.net/" rel="external nofollow">freenode</a> لمناقشة تقنيات الأنظمة الوهمية في أوبنتو.
	</li>
	<li>
		مصدر آخر جيد هو صفحة ويكي أوبنتو «<a href="https://help.ubuntu.com/community/KVM" rel="external nofollow">KVM</a>».
	</li>
	<li>
		للمزيد من المعلومات حول Xen، بما فيها استخدام Xen مع libvirt؛ رجاءً راجع صفحة ويكي أوبنتو «<a href="https://help.ubuntu.com/community/Xen" rel="external nofollow">Xen</a>».
	</li>
</ul><div id="sdfootnote1">
	<p>
		ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/libvirt.html" rel="external nofollow">Ubuntu Server Guide: libvirt</a>.
	</p>
</div>
]]></description><guid isPermaLink="false">215</guid><pubDate>Wed, 10 Feb 2016 08:31:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Bacula &#x644;&#x644;&#x646;&#x633;&#x62E; &#x627;&#x644;&#x627;&#x62D;&#x62A;&#x64A;&#x627;&#x637;&#x64A; &#x639;&#x644;&#x649; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-bacula-%D9%84%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r214/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-backup-bacula.png.eb680c49fbf2b5cccb4b9d4b5a589c2d.png" /></p>

<p dir="rtl">
	إن Bacula هو برنامج للنسخ الاحتياطي يسمح لك بالنسخ والاستعادة والتحقق من البيانات عبر الشبكة؛ هنالك عملاء Bacula للينُكس وويندوز وماك OS X؛ مما يجعله حلًّا متعدد المنصات للنسخ الاحتياطي.
</p>

<p dir="rtl" style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="12758" data-unique="4wt7ndb1g" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-backup-bacula.png.12aad6c1a69b743319a8e0b21b72f7d8.png" alt="ubuntu-server-backup-bacula.png.12aad6c1"></p>

<h2 dir="rtl">
	لمحة
</h2>

<p dir="rtl">
	يتألف Bacula من عدِّة مكونات وخدمات تُستخدَم لإدارة أيّة ملفات لتُنسَخ وأماكن النسخ:
</p>

<ul dir="rtl"><li>
		<strong>Bacula Director</strong>: خدمة تتحكم بجميع عمليات النسخ الاحتياطي والاستعادة والتحقق والأرشفة.
	</li>
	<li>
		<strong>Bacula Console</strong>: برنامج يسمح بالتواصل مع Director؛ هنالك ثلاثة إصدارات من Console:
		<ul><li>
				نسخة نصية تعتمد على سطر الأوامر.
			</li>
			<li>
				واجهة رسومية متناغمة مع غنوم وتَستخدم GTK+‎.
			</li>
			<li>
				واجهة رسومية تعتمد على wxWidgets.
			</li>
		</ul></li>
	<li>
		<strong>Bacula File</strong>: ويُعرَف أيضًا بعميل Bacula؛ يُثبَّت هذا التطبيق على الأجهزة التي ستُنسَخ احتياطيًا، وهو مسؤول عن البيانات التي تُطلَب من Director.
	</li>
	<li>
		<strong>Bacula Storage</strong>: التطبيق الذي يجري عملية تخزين واستعادة البيانات من وإلى الوسائط التخزينية.
	</li>
	<li>
		<strong>Bacula Catalog</strong>: مسؤول عن صيانة فهارس الملفات وقواعد بيانات الحجوم لجميع الملفات التي نُسِخَت احتياطيًا، مما يُمكِّن تحديد المكان والاستعادة السريعة للملفات المؤرشفة؛ يدعم Catalog ثلاثة محركات قواعد بيانات مختلفة هي MySQL و PostgreSQL و SQLite.
	</li>
	<li>
		<strong>Bacula Monitor</strong>: يسمح بمراقبة عمل Director، وعفاريت الملفات والتخزين؛ يتوفر Monitor حاليًا كتطبيق GTK+‎ فقط.
	</li>
</ul><p dir="rtl">
	يمكن أن تُشغَّل هذه الخدمات والتطبيقات في عدِّة خواديم وعملاء، أو يمكن تثبيتها على جهاز واحد إذا كانت ستأخذ نسخةً احتياطيةً لقرص واحد فقط.
</p>

<h2 dir="rtl">
	التثبيت
</h2>

<p dir="rtl">
	<strong>ملاحظة</strong>: إذا كنت تستخدم MySQL أو PostgreSQL كقاعدة بيانات، فيجب أن تملك أولًا تلك الخدمات؛ إذ لن يثبتها Bacula.
</p>

<p dir="rtl">
	هنالك عدِّة حزم تحتوي على مختلف مكونات Bacula، أدخِل الأمر الآتي لتثبيت Bacula:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_7">
<span class="pln">sudo apt-get install bacula</span></pre>

<p dir="rtl">
	يَستخدم التثبيت الافتراضي لحزمة bacula قاعدة بيانات MySQL لتطبيق Catalog؛ إذا أردت استخدام SQLite أو PostgreSQL لتطبيق Catalog، فثبِّت الحزمة <span style="font-family:courier new,courier,monospace;">bacula-director-sqlite3</span> أو <span style="font-family:courier new,courier,monospace;">bacula-director-pgsql </span>على التوالي وبالترتيب.
</p>

<p dir="rtl">
	ستُسأل أثناء التثبيت عن توفير تصاريح لمدير قاعدة البيانات ومالك قاعدة بيانات bacula؛ سيحتاج مدير قاعدة البيانات إلى امتلاك الأذونات الملائمة لإنشاء قاعدة بيانات؛ راجع درس <a href="https://academy.hsoub.com/devops/servers/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%86%D8%B8%D8%A7%D9%85%D9%8A-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-mysql-%D9%88postgresql-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r194/">قواعد البيانات</a> لمزيدٍ من المعلومات.
</p>

<h2 dir="rtl">
	الضبط
</h2>

<p dir="rtl">
	ملفات ضبط Bacula منسقة بناءً على «موارد» تشتمل على «تعليمات» محاطة بقوسين معقوفين «{}»؛ ولكل مكون من مكونات Bacula ملف منفصل في مجلد ‎<span style="font-family:courier new,courier,monospace;">/etc/bacula</span>.
</p>

<p dir="rtl">
	يجب أن تُصرِّح مختلف مكونات Bacula عن نفسها لبعضها بعضًا؛ وهذا يتم باستخدام التعليمة <span style="font-family:courier new,courier,monospace;">password</span>؛ على سبيل المثال، كلمة مرور مورد Storage في ملف <span style="font-family:courier new,courier,monospace;">‎/etc/bacula/bacula-dir.conf </span>يجب أن تُطابِق كلمة مرور Director في <span style="font-family:courier new,courier,monospace;">‎/etc/bacula/bacula-sd.conf</span>.
</p>

<p dir="rtl">
	افتراضيًا، تكون هنالك مهمة نسخ احتياطي اسمها Client1 لأرشفة Bacula Catalog؛ إذا كنت تخطط لاستخدام الخادوم للنسخ الاحتياطي لأكثر من عميل، فعليك تعديل اسم هذه المهمة إلى شيء أكثر وصفًا؛ لتغيير الاسم، عدِّل الملف<span style="font-family:courier new,courier,monospace;"> ‎/eth]lc/bacula/bacula-dir.conf</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_9">
<span class="pln">#
# Define the main nightly save backup job
#   By default, this job will back up to disk in 
Job {
  Name = "BackupServer"
  JobDefs = "DefaultJob"
  Write Bootstrap = "/var/lib/bacula/Client1.bsr"
}</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: يغيّر المثال السابق اسم المهمة إلى BackupServer مما يطابق اسم المضيف للخادوم؛ استبدل الكلمة BackupServer باسم المضيف الملائم عندك، أو اسم أكثر وصفًا.
</p>

<p dir="rtl">
	يمكن استخدام Console لإنشاء طلبية لبرمجية Director عن المهام؛ لكن لكي تستخدم Console بمستخدم غير جذر، فيجب أن تضيف المستخدم لمجموعة bacula؛ وذلك بإدخال الأمر الآتي في الطرفية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_11">
<span class="pln">sudo adduser $username bacula</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: استبدل<span style="font-family:courier new,courier,monospace;"> ‎$username </span>باسم المستخدم الفعلي؛ وإذا أضفت المستخدم الحالي إلى المجموعة، فعليك تسجيل الخروج ثم إعادة تسجيل الدخول مرةً أخرى لتأخذ الأذونات الجديدة مفعولها.
</p>

<h2 dir="rtl">
	نسخة احتياطية محلية
</h2>

<p dir="rtl">
	يشرح هذا القسم كيف تأخذ نسخة احتياطية لمجلدات محددة على مضيف واحد إلى شريط ممغنط محلي.
</p>

<ul><li>
		<p dir="rtl">
			أولًا، يجب ضبط جهاز Storage؛ وذلك بتعديل الملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/bacula/bacula-sd.conf</span> وإضافة:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_13">
<span class="pln">Device {
  Name = "Tape Drive"
  Device Type = tape
  Media Type = DDS-4
  Archive Device = /dev/st0
  Hardware end of medium = No;
  AutomaticMount = yes;               # when device opened, read it
  AlwaysOpen = Yes;
  RemovableMedia = yes;
  RandomAccess = no;
  Alert Command = "sh -c 'tapeinfo -f %c | grep TapeAlert'"
}</span></pre>

<p dir="rtl">
	هذا المثال يستخدم شريطًا ممغنطًا من نوع DDS-4؛ عدِّل قيمة Media Type و Archive Device لتُطابِق عتادك.
</p>

<p dir="rtl">
	يمكنك أيضًا إزالة التعليق عن أحد الأمثلة في الملف.
</p>

<ul><li>
		<p dir="rtl">
			بعد تعديل <span style="font-family:courier new,courier,monospace;">‎/etc/bacula/bacula-ds.conf</span>، فيجب إعادة تشغيل عفريت Storage:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_15">
<span class="pln">sudo service bacula-sd restart</span></pre>

<ul><li>
		<p dir="rtl">
			أضف الآن مورد Storage إلى ملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/bacula/bacula-dir.conf </span>لاستخدام الجهاز الجديد:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_17">
<span class="pln"># Definition of "Tape Drive" storage device
Storage {
  Name = TapeDrive
  # Do not use "localhost" here    
  Address = backupserver               # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "Cv70F6pf1t6pBopT4vQOnigDrR0v3LT3Cgkiyjc"
  Device = "Tape Drive"
  Media Type = tape
}</span></pre>

<p dir="rtl">
	يجب أن تكون قيمة التعليمة <span style="font-family:courier new,courier,monospace;">Address</span> هي الاسم الكامل للنطاق (FQDN) للخادوم؛ عدِّل backupserver إلى اسم المضيف الحقيقي.
</p>

<p dir="rtl">
	تأكد أيضًا أن التعليمة <span style="font-family:courier new,courier,monospace;">Password</span> تُطابِق قيمة السلسلة النصية password في ‎<span style="font-family:courier new,courier,monospace;">/etc/bacula ‎/bacula-sd.conf</span>.
</p>

<ul><li>
		<p dir="rtl">
			أنشِئ FileSet جديد، الذي سيُحدِّد المجلدات التي ستُأخذ نسخة احتياطية لها، وذلك بإضافة:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_19">
<span class="pln"># LocalhostBacup FileSet.
FileSet {
  Name = "LocalhostFiles"
  Include {
    Options {
      signature = MD5
      compression=GZIP
    }
    File = /etc
    File = /home
  }
}</span></pre>

<p dir="rtl">
	سيُنسخ المجلدان ‎<span style="font-family:courier new,courier,monospace;">/etc </span>و <span style="font-family:courier new,courier,monospace;">‎/home </span>احتياطيًا، تعليمات Options تضبط FileSet لإنشاء بصمة MD5 لكل ملف يُنسَخ احتياطيًا؛ ولضغط الملفات باستخدام <span style="font-family:courier new,courier,monospace;">gzip</span>.
</p>

<ul><li>
		<p dir="rtl">
			الآن، أنشِئ Schedule (للجدولة) لمهمة النسخ:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_21">
<span class="pln"># LocalhostBackup Schedule -- Daily.
Schedule {
  Name = "LocalhostDaily"
  Run = Full daily at 00:01
}</span></pre>

<p dir="rtl">
	ستعمل مهمة النسخ الاحتياطي كل يوم في تمام الساعة 00:01 أو 12:01‎ ‎AM؛ تتوفر العديد من خيارات الجدولة الإضافية.
</p>

<ul><li>
		<p dir="rtl">
			في النهاية، أنشِئ Job:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_23">
<span class="pln"># Localhost backup.
Job {
  Name = "LocalhostBackup"
  JobDefs = "DefaultJob"
  Enabled = yes
  Level = Full
  FileSet = "LocalhostFiles"
  Schedule = "LocalhostDaily"
  Storage = TapeDrive
  Write Bootstrap = "/var/lib/bacula/LocalhostBackup.bsr"
}  </span></pre>

<p dir="rtl">
	مما سينسخ نسخةً كاملةً كل يوم إلى الشريط الممغنط.
</p>

<ul><li>
		<p dir="rtl">
			كل شريط ممغنط مستخدم يجب أن تكون له لافتة (Label)، إذا لم يكن للشريط الحالي لافتةٌ، فسيرسل Bacula بريدًا إلكترونيًا لجعلك تعلم بذلك؛ لضبط لافتة لشريط باستخدام Console، فعليك إدخال الأمر الآتي:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_25">
<span class="pln">bconsole</span></pre>

<ul><li>
		<p dir="rtl">
			وفي برنامج Bacula Console، أدخِل:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_27">
<span class="pln">label</span></pre>

<ul><li>
		<p dir="rtl">
			ثم ستُسأل عن مورد Storage:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_29">
<span class="pln">
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
The defined Storage resources are:
     1: File
     2: TapeDrive
Select Storage resource (1-2):2</span></pre>

<ul><li>
		<p dir="rtl">
			أدخِل اسم الحجم الجديد:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_31">
<span class="pln">Enter new Volume name: Sunday
Defined Pools:
     1: Default
     2: Scratch</span></pre>

<p dir="rtl">
	استبدل Sunday باسمٍ ملائم.
</p>

<ul><li>
		<p dir="rtl">
			الآن اختر Pool:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2836_33">
<span class="pln">Select the Pool (1-2): 1
Connecting to Storage daemon TapeDrive at backupserver:9103 ...
Sending label command for Volume "Sunday" Slot 0 ...</span></pre>

<p dir="rtl">
	تهانينا! لقد ضبطت Bacula لنسخ جهازك المحلي احتياطيًا إلى شريط ممغنط.
</p>

<h2 dir="rtl">
	مصادر
</h2>

<ul dir="rtl"><li>
		لمزيد من المعلومات حول خيارات ضبط Bacula، راجع «<a href="http://www.bacula.org/en/rel-manual/index.html" rel="external nofollow">Bacula User's Manual</a>».
	</li>
	<li>
		تحتوي صفحة <a href="http://www.bacula.org/" rel="external nofollow">Bacula</a><a href="http://www.bacula.org/" rel="external nofollow"> </a><a href="http://www.bacula.org/" rel="external nofollow">الرئيسية</a> على آخر أخبار تطوير Bacula.
	</li>
	<li>
		أيضًا، راجع صفحة ويكي أوبنتو «<a href="https://help.ubuntu.com/community/Bacula" rel="external nofollow">Bacula</a>».
	</li>
</ul><p dir="rtl">
	ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/bacula.html" rel="external nofollow">Ubuntu Server Guide: Bacula</a>.
</p>
]]></description><guid isPermaLink="false">214</guid><pubDate>Mon, 08 Feb 2016 15:16:52 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x642;&#x648;&#x645; &#x628;&#x627;&#x644;&#x646;&#x633;&#x62E; &#x627;&#x644;&#x627;&#x62D;&#x62A;&#x64A;&#x627;&#x637;&#x64A; &#x639;&#x644;&#x649; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D9%82%D9%88%D9%85-%D8%A8%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r213/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-backup.png.4ab16aec3e8098b04467695f044e1935.png" /></p>

<p dir="rtl">
	هنالك عدِّة طرق لنسخ تثبيت أوبنتو احتياطيًا؛ أهم ما هنالك بالنسبة إلى النسخ الاحتياطية هو تطوير «خطة نسخ احتياطي» تحتوي على ماذا سيُنسَخ احتياطيًّا، وأين سيُنسَخ، وكيف سيُسترجَع.
</p>

<p dir="rtl" style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="12757" data-unique="8ar38ash1" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-backup.png.215b5e52e3020e81261237c8343ac9c4.png" alt="ubuntu-server-backup.png.215b5e52e3020e8"></p>

<p dir="rtl">
	ستشرح الأقسام الآتية طرقًا مختلفة لإنجاز هذه المهام.
</p>

<h2 dir="rtl">
	سكربتات شل
</h2>

<p dir="rtl">
	إحدى أبسط الطرق لنسخ نظام احتياطيًّا هي استخدام «سكربت شِل» (shell script)؛ على سبيل المثال، يمكن أن يُستخدَم سكربت لضبط أيّة مجلدات يجب أن تُنسَخ احتياطيًّا، وتُمرَّر هذه المجلدات كوسائط إلى الأداة tar، التي ستُنشِئ ملف أرشيف؛ ويمكن أن يُنقَل ذاك الملف أو ينُسَخ إلى مكانٍ آخر؛ ويمكن أن يُنشَأ أيضًا الأرشيف في نظام بعيد عبر NFS.
</p>

<p dir="rtl">
	الأداة <span style="font-family:courier new,courier,monospace;">tar</span> تُنشِئ ملف أرشيف واحد من عدِّة ملفات أو مجلدات؛ يمكن أيضًا للأداة <span style="font-family:courier new,courier,monospace;">tar</span> تمرير الملفات عبر أدوات ضغط، وهذا سيؤدي بدوره إلى تقليل حجم ملف الأرشيف.
</p>

<h3 dir="rtl">
	سكربت شِل بسيط
</h3>

<p dir="rtl">
	السكربت الآتي يستخدم <span style="font-family:courier new,courier,monospace;">tar</span> لإنشاء ملف أرشيف في نظام ملفات NFS موصول عن بعد؛ يُحدَّد اسم الأرشيف باستخدام أدوات إضافية تعمل من سطر الأوامر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9177_7">
<span class="pln">#!/bin/bash
####################################
#
# Backup to NFS mount script.
#
####################################

# What to backup. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Where to backup to.
dest="/mnt/backup"

# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar czf $dest/$archive_file $backup_files

# Print end status message.
echo
echo "Backup finished"
date

# Long listing of files in $dest to check file sizes.
ls -lh $dest</span></pre>

<ul dir="rtl"><li>
		‎<strong><span style="font-family:courier new,courier,monospace;">$backup_files</span></strong>: متغير يحتوي على قائمة بأيّة مجلدات تود أن تنسخها احتياطيًّا؛ يجب تعديل هذه القائمة لتناسب احتياجاتك.
	</li>
	<li>
		‎<strong><span style="font-family:courier new,courier,monospace;">$day</span></strong>: متغير يحتوي على اسم اليوم من الأسبوع (مثل Monday، أو Tuesday، أو Wednesday ...إلخ.)؛ وسيُستخدَم لإنشاء ملف أرشيف لكل يوم من الأسبوع، مما يعطي تاريخًا للنسخ الاحتياطي هو سبعة أيام؛ هنالك طرقٌ أخرى للقيام بذلك بما فيها استخدام الأداة <span style="font-family:courier new,courier,monospace;">date</span>.
	</li>
	<li>
		‎<strong><span style="font-family:courier new,courier,monospace;">$hostname</span></strong>: متغير يحتوي على الاسم القصير للمضيف؛ استخدام اسم المضيف في اسم ملف الأرشيف يُمكِّنك من وضع ملفات الأرشيف اليومية من عدِّة خواديم في نفس المجلد.
	</li>
	<li>
		‎<strong><span style="font-family:courier new,courier,monospace;">$archive_file</span></strong>: الاسم الكامل لملف الأرشيف.
	</li>
	<li>
		‎<strong><span style="font-family:courier new,courier,monospace;">$dest</span></strong>: الوجهة التي سيُخزَّن فيها ملف الأرشيف؛ يجب أن يكون المجلد موجودًا وفي هذه الحالة موصولًا قبل تنفيذ أمر النسخ الاحتياطي؛ راجع درس «<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-nfs-%D9%88-iscsi-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%84%D8%AA%D8%B4%D8%A7%D8%B1%D9%83-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-r197/">نظام ملفات الشبكة </a><a href="#14.2.%D9%86%D8%B8%D8%A7%D9%85%20%D9%85%D9%84%D9%81%D8%A7%D8%AA%20%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9%20(NFS)%7Coutline" rel="external">(NFS)</a>» لمزيدٍ من التفاصيل حول استخدام NFS.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">status messages</span></strong>: الرسائل الاختيارية التي ستُطبَع إلى الطرفية باستخدام الأمر <span style="font-family:courier new,courier,monospace;">echo</span>.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">tar czf $dest/$archive_file $backup_files</span></strong>: أمر <span style="font-family:courier new,courier,monospace;">tar</span> المُستخدَم لإنشاء ملف الأرشيف.
		<ul><li>
				الخيار <strong>c</strong>: إنشاء أرشيف.
			</li>
			<li>
				الخيار <strong>z</strong>: تمرير الملف الناتج عبر الأداة <span style="font-family:courier new,courier,monospace;">gzip</span> لضغط الأرشيف.
			</li>
			<li>
				الخيار <strong>f</strong>: الإخراج إلى ملف أرشيف؛ عدا ذلك، سيُرسِل الأمر <span style="font-family:courier new,courier,monospace;">tar</span> مخرجاته إلى مجرى الخرج القياسي.
			</li>
		</ul></li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">ls -lh $dest</span></strong>: عبارة اختيارية تطبع قائمة تفصيلية (‎<strong>-l</strong>) بتنسيق سهل القراءة للبشر (‎<strong>-h</strong>) لمحتويات مجلد الهدف، هذا الأمر مفيدٌ للتحقق السريع من الحجم التخزيني لملف الأرشيف؛ هذا التحقق ليس بديلًا عن اختبار ملف الأرشيف نفسه!
	</li>
</ul><p dir="rtl">
	هذا مثالٌ بسيطٌ عن سكربت شِل للنسخ الاحتياطي؛ لكن هنالك العديد من الخيارات التي يمكن تضمينها في مثل هكذا سكربت، راجع قسم «مصادر» في هذا الدرس للحصول على روابط تُوفِّر معلومات تفصيلية عن كتابة سكربتات شِل.
</p>

<h3 dir="rtl">
	<a name="19.1.2.%D8%AA%D9%86%D9%81%D9%8A%D8%B0%20%D8%A7%D9%84%D8%B3%D9%83%D8%B1%D8%A8%D8%AA%7Coutline" rel="external"></a> تنفيذ السكربت
</h3>

<ul dir="rtl"><li>
		<h4 dir="rtl">
			<strong>التنفيذ من الطرفية</strong>: أبسط طريقة لتنفيذ سكربت النسخ الاحتياطي السابق هي نسخ ولصق محتوياته في ملف باسم<span style="font-family:courier new,courier,monospace;"> backup.sh </span>على سبيل المثال، ثم تنفيذ ما يلي من الطرفية:
		</h4>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_14">
<span class="pln">sudo bash backup.sh</span></pre>

<p dir="rtl">
	هذه طريقة رائعة لاختبار أن كل شيء يعمل على ما يرام في السكربت.
</p>

<ul dir="rtl"><li>
		<h4 dir="rtl">
			<strong>التنفيذ عبر المهام المجدولة (cron)</strong>: يمكن استخدام الأداة <span style="font-family:courier new,courier,monospace;">cron</span> ﻷتمتة تنفيذ السكربت، يسمح عفريت <span style="font-family:courier new,courier,monospace;">cron</span> بتنفيذ السكربتات أو الأوامر في أوقات وتواريخ محددة مسبقًا.
		</h4>
	</li>
</ul><p dir="rtl">
	يُضبَط cron عبر قيود في ملف <span style="font-family:courier new,courier,monospace;">crontab</span>؛ تنقسم ملفات <span style="font-family:courier new,courier,monospace;">crontab</span> إلى حقول:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_16">
<span class="pln"># m h dom mon dow command</span></pre>

<ul dir="rtl"><li>
		<strong>الحقل m</strong>: الدقيقة التي سيُنفَّذ عندها الأمر؛ تتراوح القيمة بين 0 و 59.
	</li>
	<li>
		<strong>الحقل h</strong>: الساعة التي سيُنفَّذ عندها الأمر؛ تتراوح القيمة بين 0 و 23.
	</li>
	<li>
		<strong>الحقل dom</strong>: يوم الشهر الذي سينُفَّذ عنده السكربت.
	</li>
	<li>
		<strong>الحقل mon</strong>: الشهر الذي سيُنفَّذ عنده السكربت، بين 1 و 12.
	</li>
	<li>
		<strong>الحقل dow</strong>: يوم الأسبوع الذي سيُنفَّذ عنده الأمر، تتراوح قيمته بين 0 و 7؛ حيث يمكن تحديد يوم الأحد باستخدام 0 أو 7، حيث يجوز استخدام كلا القيمتين.
	</li>
	<li>
		<strong>الحقل command</strong>: الأمر الذي سيُنفَّذ.
	</li>
</ul><p dir="rtl">
	يجب استخدام الأمر <span style="font-family:courier new,courier,monospace;">crontab -e</span> لإضافة أو تعديل المدخلات في ملف <span style="font-family:courier new,courier,monospace;">crontab</span>؛ أيضًا يجب عرض محتويات الملف <span style="font-family:courier new,courier,monospace;">crontab</span> باستخدام الأمر <span style="font-family:courier new,courier,monospace;">crontab -l</span>.
</p>

<p dir="rtl">
	أدخِل الأمر الآتي في الطرفية لتنفيذ سكربت <span style="font-family:courier new,courier,monospace;">backup.sh</span> السابق باستخدام <span style="font-family:courier new,courier,monospace;">cron</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_18">
<span class="pln">sudo crontab -e</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: استخدام <span style="font-family:courier new,courier,monospace;">sudo</span> مع الأمر <span style="font-family:courier new,courier,monospace;">crontab -e</span> سيُعدِّل جدول المهام للمستخدم الجذر؛ هذا ضروريٌ إذا كنت تنسخ مجلدات احتياطيًا لا يملك وصولًا إليها عدا المستخدم الجذر.
</p>

<p dir="rtl">
	أضف القيد الآتي إلى ملف <span style="font-family:courier new,courier,monospace;">crontab</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_20">
<span class="pln"># m h dom mon dow command
0 0 * * * bash /usr/local/bin/backup.sh</span></pre>

<p dir="rtl">
	يجب أن يُنفَّذ سكربت<span style="font-family:courier new,courier,monospace;"> backup.sh</span> كل يوم في تمام الساعة 12:00 AM.
</p>

<p dir="rtl">
	<strong>ملاحظة</strong>: يجب نسخ سكربت <span style="font-family:courier new,courier,monospace;">backup.sh</span> إلى مجلد <span style="font-family:courier new,courier,monospace;">‎/usr/local/bin </span>لكي يعمل القيد السابق عملًا صحيحًا؛ يمكن أن يقبع السكربت في أي مكان في نظام الملفات، وكل ما عليك فعله هو تعديل المسار المذكور في القيد أعلاه بما يلائم مكان وجوده.
</p>

<h3 dir="rtl">
	الاستعادة من أرشيف
</h3>

<p dir="rtl">
	بعد إنشاء الأرشيف، فمن المهم تجربته؛ يمكن أن يُجرَّب الأرشيف بعرض قائمة بالملفات التي يحتويها؛ لكن أفضل طريقة للاختبار هي استعادة ملف من الأرشيف.
</p>

<ul><li>
		<p dir="rtl">
			يمكنك تنفيذ الأمر الآتي لعرض قائمة بمحتويات الأرشيف:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_22">
<span class="pln">tar -tzvf /mnt/backup/host-Monday.tgz</span></pre>

<ul><li>
		<p dir="rtl">
			لاستعادة ملف من الأرشيف إلى مجلد مختلف، أدخِل الأمر:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_24">
<span class="pln">tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts</span></pre>

<p>
	يوجه الخيار <span style="font-family:courier new,courier,monospace;">‎-C</span> الأمر <span style="font-family:courier new,courier,monospace;">tar</span> ليستخرج الملفات إلى مجلد محدد؛ حيث سيستخرج الأمر السابق الملف <span style="font-family:courier new,courier,monospace;">‎/etc/hosts</span> إلى <span style="font-family:courier new,courier,monospace;">‎/tmp/etc/hosts</span>؛ يعيد <span style="font-family:courier new,courier,monospace;">tar</span> إنشاء هيكلة المجلدات التي تحتوي الملفات.
</p>

<p dir="rtl">
	لاحظ أيضًا أن الشرطة المائلة<span style="font-family:courier new,courier,monospace;"> /</span> في أول المسار قد أزيلت من المسار المُستخرَج إليه.
</p>

<ul><li>
		<p dir="rtl">
			لاستعادة كل الملفات من الأرشيف، أدخِل الأمرين:
		</p>
	</li>
</ul><pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_26">
<span class="pln">cd /
sudo tar -xzvf /mnt/backup/host-Monday.tgz</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: سيكتب الأمر السابق فوق الملفات في نظام الملفات.
</p>

<h3 dir="rtl">
	<a name="19.1.4.%D9%85%D8%B5%D8%A7%D8%AF%D8%B1%7Coutline" rel="external"></a> مصادر
</h3>

<ul dir="rtl"><li>
		للمزيد من المعلومات حول كتابة سكربتات الشِل، راجع «<a href="http://tldp.org/LDP/abs/html/" rel="external nofollow">Advanced Bash-Scription Guide</a>».
	</li>
	<li>
		كتاب «<a href="http://safari.samspublishing.com/0672323583" rel="external nofollow">Teach Yourself Shell Programming in 24 Hours</a>» متوفر على الإنترنت، وهو مصدر ممتاز يشرح كتابة سكربتات الشِل.
	</li>
	<li>
		صفحة الويكي «<a href="https://help.ubuntu.com/community/CronHowto" rel="external nofollow">CronHowto</a>» تحتوي على تفاصيل عن خيارات cron المتقدمة.
	</li>
	<li>
		راجع دليل <a href="http://www.gnu.org/software/tar/manual/index.html" rel="external nofollow">GNU tar</a> للمزيد من خيارات tar.
	</li>
	<li>
		صفحة ويكيبيديا «<a href="http://en.wikipedia.org/wiki/Backup_rotation_scheme" rel="external nofollow">Bachup Rotation Scheme</a>» تحتوي على معلومات عن أنماط أخرى للنسخ الاحتياطي.
	</li>
	<li>
		يستخدم سكربت الشِل الأداةَ tar لإنشاء الأرشيف، لكن هنالك أدواتٌ سطريةٌ أخرى يمكن استعمالها، على سبيل المثال:
		<ul><li>
				<a href="http://www.gnu.org/software/cpio/" rel="external nofollow">cpio</a>: يُستخدَم لنسخ الملفات إلى ومن الأرشيفات.
			</li>
			<li>
				<a href="http://www.gnu.org/software/coreutils/" rel="external nofollow">dd</a>: جزء من حزمة coreutils، الذي هو أداة منخفضة المستوى تستطيع نسخ البيانات من صيغة لأخرى.
			</li>
			<li>
				<a href="http://www.rsnapshot.org/" rel="external nofollow">rsnapshot</a>: أداة لأخذ snapshot لنظام الملفات تُستخدَم لإنشاء نسخ من كامل نظام الملفات.
			</li>
			<li>
				<a href="http://www.samba.org/ftp/rsync/rsync.html" rel="external nofollow">rsync</a>: أداة مرنة تُستخدَم لإنشاء نسخ تراكمية من الملفات.
			</li>
		</ul></li>
	<li>
		وبالطبع، كتاب «<a href="http://sourceforge.net/projects/omlx/files/open%20books/TLCL/The_Linux_Command_Line-arabic-14.07.pdf/download" rel="external nofollow">سطر أوامر لينُكس</a>» يحتوي على شرحٍ تفصيلي لأغلبية المواضيع التي ناقشناها هاهنا.
	</li>
</ul><h2 dir="rtl">
	دورة الأرشيف
</h2>

<p dir="rtl">
	يسمح السكربت المشروح في القسم الأول من هذا الدرس بسبعة أرشيفات مختلفة فقط؛ ربما يكفي هذا لخادوم لا تتغير البيانات التي فيه كثيرًا؛ أما لو كان يملك الخادوم كميةً كبيرةً من البيانات، فيجب استخدام مخطط معقد للدورات.
</p>

<h3 dir="rtl">
	دورة أرشيفات NFS
</h3>

<p dir="rtl">
	سنعدِّل في هذا القسم السكربت السابق لتطبيق مخطط الجد-الأب-الابن (شهريًا-أسبوعيًا-يوميًا):
</p>

<ul dir="rtl"><li>
		ستُنشَأ نسخ احتياطية يومية من الأحد إلى الجمعة.
	</li>
	<li>
		ستُأخذ نسخة احتياطية أسبوعية في يوم السبت مما يمنحك أربع نسخ احتياطية أسبوعية في الشهر.
	</li>
	<li>
		ستُأخذ نسخة احتياطية شهرية في أول كل شهر وتكون الدورة شهرين بناءً إذا ما كان رقم الشهر فرديًا أو زوجيًا.
	</li>
</ul><p dir="rtl">
	هذا هو السكربت:
</p>

<pre class="ipsCode" id="ips_uid_4762_28">
#!/bin/bash
####################################
#
# Backup to NFS mount script with
# grandfather-father-son rotation.
#
####################################

# What to backup. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Where to backup to.
dest="/mnt/backup"

# Setup variables for the archive filename.
day=$(date +%A)
hostname=$(hostname -s)

# Find which week of the month 1-4 it is.
day_num=$(date +%d)
if (( $day_num &lt;= 7 )); then
        week_file="$hostname-week1.tgz"
elif (( $day_num &gt; 7 &amp;&amp; $day_num &lt;= 14 )); then
        week_file="$hostname-week2.tgz"
elif (( $day_num &gt; 14 &amp;&amp; $day_num &lt;= 21 )); then
        week_file="$hostname-week3.tgz"
elif (( $day_num &gt; 21 &amp;&amp; $day_num &lt; 32 )); then
        week_file="$hostname-week4.tgz"
fi

# Find if the Month is odd or even.
month_num=$(date +%m)
month=$(expr $month_num % 2)
if [ $month -eq 0 ]; then
        month_file="$hostname-month2.tgz"
else
        month_file="$hostname-month1.tgz"
fi

# Create archive filename.
if [ $day_num == 1 ]; then
	archive_file=$month_file
elif [ $day != "Saturday" ]; then
        archive_file="$hostname-$day.tgz"
else 
	archive_file=$week_file
fi

# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar czf $dest/$archive_file $backup_files

# Print end status message.
echo
echo "Backup finished"
date

# Long listing of files in $dest to check file sizes.
ls -lh $dest/</pre>

<p dir="rtl">
	يمكن تنفيذ هذا السكربت بنفس آلية التنفيذ في القسم السابق «تنفيذ السكربت».
</p>

<p dir="rtl">
	عادة جيدة هي أخذ وسائط تخزين النسخ الاحتياطية خارج مكان العمل تحسبًا لوقوع كارثة؛ في مثال سكربت الشِل؛ وسيط التخزين هو خادوم آخر يوفر مشاركة NFS؛ في مثل هذه الحالة، لن يكون خيارًا عمليًا نقل خادوم NFS إلى موقع آخر؛ لكن بناءً على سرعة الاتصال يمكنك نسخ ملف الأرشيف عبر خط WAN إلى خادوم في مكان آخر.
</p>

<p dir="rtl">
	خيار آخر هو نسخ ملف الأرشيف على قرص صلب خارجي يمكن أن يؤخذ بعد ذلك خارج الموقع؛ ولما كانت أسعار الأقراص الصلبة الخارجية تستمر بالانخفاض، فربما يكون ملائمًا استخدام قرصين صلبين لكل مستوى من مستويات الأرشفة؛ هذا سيسمح بوجود قرص صلب خارجي موصول إلى خادوم النسخ الاحتياطي، وآخر في مكانٍ بعيد.
</p>

<h3 dir="rtl">
	محركات الأشرطة الممغنطة
</h3>

<p dir="rtl">
	يمكن استخدام شريط ممغنط (tape) بدلًا من مشاركة NFS، يُسهِّل استخدام الأشرطة الممغنطة دورات الأرشيفات؛ ويجعل أخذ وسائط التخزين خارج الموقع أمرًا هينًا.
</p>

<p dir="rtl">
	القسم الخاص باسم الملف في السكربت لن يكون ضروريًا عند استخدام الأشرطة، لأن البيانات تُرسَل مباشرةً إلى الشريط؛ هنالك حاجة لبعض الأوامر للتعديل على الأشرطة، يتم ذلك باستخدام الأداة mt، التي تُستخدَم للتحكم بالأشرطة الممغنطة وهي جزء من حزمة <span style="font-family:courier new,courier,monospace;">cpio</span>.
</p>

<p dir="rtl">
	هذا هو سكربت الشِل المعدَّل لاستخدام شريط ممغنط:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_12">
<span class="pln">#!/bin/bash
####################################
#
# Backup to tape drive script.
#
####################################

# What to backup. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Where to backup to.
dest="/dev/st0"

# Print start status message.
echo "Backing up $backup_files to $dest"
date
echo

# Make sure the tape is rewound.
mt -f $dest rewind

# Backup the files using tar.
tar czf $dest $backup_files

# Rewind and eject the tape.
mt -f $dest rewoffl

# Print end status message.
echo
echo "Backup finished"
date</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: اسم الجهاز الافتراضي لشريط SCSI ممغنط هو ‎<span style="font-family:courier new,courier,monospace;">/dev/st0</span>؛ استخدم مسار الجهاز الملائم لنظامك في السكربت السابق.
</p>

<p dir="rtl">
	الاستعادة من شريط ممغنط هي نفس عملية الاستعادة من ملف؛ ببساطة أعد لَفّ الشرط واستخدم مسار الجهاز بدلًا من مسار ملف؛ على سبيل المثال، لاستعادة ملف <span style="font-family:courier new,courier,monospace;">‎/etc/hosts </span>إلى ‎<span style="font-family:courier new,courier,monospace;">/tmp/etc/hosts</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4762_10">
<span class="pln">mt -f /dev/st0 rewind
tar -xzf /dev/st0 -C /tmp etc/hosts</span></pre>

<p>
	ترجمة -وبتصرف- للمقالين <a href="https://help.ubuntu.com/lts/serverguide/backup-shellscripts.html" rel="external nofollow">Ubuntu Server Guide; Shell Scripts</a> و <a href="https://help.ubuntu.com/lts/serverguide/backups-shellscripts-rotation.html" rel="external nofollow">Ubuntu Server Guide: Archive Rotation</a>.
</p>
]]></description><guid isPermaLink="false">213</guid><pubDate>Mon, 08 Feb 2016 14:06:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x646;&#x635;&#x64A;&#x628; &#x648;&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x62E;&#x627;&#x648;&#x62F;&#x645;&#x64A; &#x627;&#x644;&#x645;&#x62D;&#x627;&#x62F;&#x62B;&#x629; IRC &#x648; Jabber &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D9%88%D8%AF%D9%85%D9%8A-%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%AF%D8%AB%D8%A9-irc-%D9%88-jabber-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r208/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-chat-irc-jabber.png.d163d396969b56faea2a200a11335033.png" /></p>

<p dir="rtl">
	سنناقش في هذا الدرس كيفية تثبيت وضبط خادوم IRC‏ (<span style="font-family:courier new,courier,monospace;">ircd-irc2</span>) وسنناقش أيضًا كيفية تثبيت وضبط خادوم المراسلة الفورية Jabber.
</p>

<p dir="rtl" style="text-align: center;">
	<img alt="ubuntu-server-chat-irc-jabber.png.fa0cce" class="ipsImage ipsImage_thumbnailed" data-fileid="12480" data-unique="jryp4b0ul" src="https://academy.hsoub.com/uploads/monthly_2016_02/ubuntu-server-chat-irc-jabber.png.fa0cce7a429e956f096949f5f6ecc2ed.png"></p>

<h2 dir="rtl">
	خادوم IRC
</h2>

<p dir="rtl">
	يحتوي مستودع أوبنتو على العديد من خواديم IRC، يشرح هذا القسم كيفية تثبيت وضبط خادوم IRC الأصلي<span style="font-family:courier new,courier,monospace;"> ircd-irc2</span>.
</p>

<h3 dir="rtl">
	التثبيت
</h3>

<p dir="rtl">
	أدخِل الأمر الآتي في الطرفية لتثبيت خادوم <span style="font-family:courier new,courier,monospace;">ircd-irc2</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_7">
<span class="pln">sudo apt-get install ircd-irc2</span></pre>

<p dir="rtl">
	يُخزَّن ملف الضبط في مجلد <span style="font-family:courier new,courier,monospace;">‎/etc/ircd</span>، والتوثيق متوفرٌ في مجلد ‎<span style="font-family:courier new,courier,monospace;">/usr/share/doc/ircd-irc2</span>.
</p>

<h3 dir="rtl">
	الضبط
</h3>

<p dir="rtl">
	يمكن أن تُضبَط إعدادات IRC بملف الضبط<span style="font-family:courier new,courier,monospace;"> ‎/etc/ircd/ircd.conf</span>؛ يمكنك ضبط اسم مضيف IRC بتعديل السطر الآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_9">
<span class="pln">M:irc.localhost::Debian ircd default configuration::000A</span></pre>

<p dir="rtl">
	رجاءً تأكد أنك تضيف أسماء DNS البديلة لاسم مضيف IRC؛ على سبيل المثال، إذا ضبطت <span style="font-family:courier new,courier,monospace;">irc.liveciper.com </span>كاسم مضيف IRC؛ فتأكد أن<span style="font-family:courier new,courier,monospace;"> irc.liveciper.com </span>يُحَّل في خادوم أسماء المضيفين عندك؛ لا يتوجب أن يكون اسم مضيف IRC هو نفسه اسم مضيف الخادوم.
</p>

<p dir="rtl">
	يمكن ضبط معلومات مدير IRC بتعديل السطر الآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_11">
<span class="pln">A:Organization, IRC dept.:Daemon </span><span class="tag">&lt;ircd</span><span class="pln">@</span><span class="atn">example</span><span class="pln">.</span><span class="atn">irc</span><span class="pln">.</span><span class="atn">org</span><span class="tag">&gt;</span><span class="pln">:Client Server::IRCnet:</span></pre>

<p dir="rtl">
	عليك إضافة أسطر خاصة لضبط قائمة بالمنافذ التي يستمع إليها IRC؛ ولضبط «الأوراق الاعتمادية للمشغل»، ولتضبط الاستيثاق من العميل ...إلخ. رجاءً ارجع إلى المثال عن ملف الضبط الموجود في ‎<span style="font-family:courier new,courier,monospace;">/usr/share/doc/ircd-irc2/ircd.conf.example.gz</span>.
</p>

<p dir="rtl">
	لافتة IRC هي الرسالة التي تظهر في عميل IRC عندما يتصل إلى الخادوم، ويمكن أن تُضبَط في الملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/ircd/ircd.motd</span>.
</p>

<p dir="rtl">
	بعد إجراء التعديلات الضرورية لملف الضبط، تستطيع إعادة تشغيل خادوم IRC بتنفيذ الأمر الآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_13">
<span class="pln">sudo service ircd-irc2 restart</span></pre>

<h3 dir="rtl">
	مصادر
</h3>

<ul dir="rtl"><li>
		ربما تكون مهتمًا بإلقاء نظرة إلى خواديم IRC الأخرى المتوفرة في مستودعات أوبنتو، التي تتضمن <span style="font-family:courier new,courier,monospace;">ircd-ircu</span>، و <span style="font-family:courier new,courier,monospace;">ircd-hybrid</span>.
	</li>
	<li>
		ارجع إلى <a href="http://www.irc.org/tech_docs/ircnet/faq.html" rel="external nofollow">IRCD FAQ</a> للمزيد من التفاصيل حول خادوم IRC.
	</li>
</ul><h2 dir="rtl">
	خادوم المراسلة الفورية Jabber
</h2>

<p dir="rtl">
	إن Jabber هو بروتوكول مراسلة فورية مبني على XMPP (معيار مفتوح للمراسلة الفورية) ويُستخدَم بواسطة عدِّة برمجيات مشهورة. يشرح هذا القسم طريقة إعداد خادوم Jabberd 2 على شبكة LAN محلية؛ يمكن أن يُعدَّل هذا الضبط لتوفير خدمات تبادل الرسائل فوريًا عبر الإنترنت.
</p>

<h3 dir="rtl">
	التثبيت
</h3>

<p dir="rtl">
	لتثبيت<span style="font-family:courier new,courier,monospace;"> jabberd2</span>، أدخِل الأمر الآتي في الطرفية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_15">
<span class="pln">sudo apt-get install jabberd2</span></pre>

<h3 dir="rtl">
	الضبط
</h3>

<p dir="rtl">
	هنالك ملفَيّ ضبط XML يُستخدَمان لضبط Jabberd2 لاستيثاق Berkeley DB من المستخدم؛ هذا شكل بسيط جدًا من أشكال الاستيثاق؛ لكن يمكن ضبط Jabberd2 لكي يَستخدم LDAP، أو MySQL، أو PostgreSQL ...إلخ. للاستيثاق من المستخدم.
</p>

<p dir="rtl">
	أولًا، عدِّل الملف <span style="font-family:courier new,courier,monospace;">‎/etc/jabberd2/sm.xml</span> مغيّرًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_17">
<span class="tag">&lt;id&gt;</span><span class="pln">jabber.example.com</span><span class="tag">&lt;/id&gt;</span></pre>

<p dir="rtl">
	<strong>ملاحظة</strong>: استبدل<span style="font-family:courier new,courier,monospace;"> jabber.example.com </span>باسم المضيف أو بمعرِّف ID آخر لخادومك.
</p>

<p dir="rtl">
	الآن في قسم <span style="font-family:courier new,courier,monospace;">&lt;storage&gt;</span>، عدِّل قيمة<span style="font-family:courier new,courier,monospace;"> &lt;driver&gt;</span> إلى:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_19">
<span class="tag">&lt;driver&gt;</span><span class="pln">db</span><span class="tag">&lt;/driver&gt;</span></pre>

<p dir="rtl">
	ثم في ملف <span style="font-family:courier new,courier,monospace;">‎/etc/jabberd2/c2s.xml</span>، عدِّل في قسم <span style="font-family:courier new,courier,monospace;">&lt;local&gt;</span>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_21">
<span class="tag">&lt;id&gt;</span><span class="pln">jabber.example.com</span><span class="tag">&lt;/id&gt;</span></pre>

<p>
	وعدِّل أيضًا <span style="font-family:courier new,courier,monospace;">&lt;module&gt;</span> في قسم<span style="font-family:courier new,courier,monospace;"> &lt;authreg&gt;</span> إلى:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_23">
<span class="tag">&lt;module&gt;</span><span class="pln">db</span><span class="tag">&lt;/module&gt;</span></pre>

<p dir="rtl">
	في النهاية، أعد تشغيل خدمة <span style="font-family:courier new,courier,monospace;">jabberd2</span> لتفعيل الضبط الجديد:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6697_25">
<span class="pln">sudo service jabberd2 restart</span></pre>

<p dir="rtl">
	يمكنك الآن الاتصال إلى الخادوم باستخدام عميل Jabber مثل بيدجن (Pidgin) على سبيل المثال.
</p>

<p dir="rtl">
	<strong>ملاحظة</strong>: ميزة استخدام Berkeley DB لمعلومات المستخدم هو أنها لا تحتاج إلى صيانة إضافية بعد ضبطها؛ إذا أردت المزيد من التحكم في حسابات المستخدمين، فمن المستحسن استخدام آلية استيثاق أخرى.
</p>

<h3 dir="rtl">
	مصادر
</h3>

<ul dir="rtl"><li>
		يحتوي <a href="http://codex.xiaoka.com/wiki/jabberd2:start" rel="external nofollow">موقع </a><a href="http://codex.xiaoka.com/wiki/jabberd2:start" rel="external nofollow">Jabberd2</a> على المزيد من التفاصيل حول ضبط Jabberd2.
	</li>
	<li>
		للمزيد من خيارات الاستيثاق، راجع «<a href="http://www.jabberdoc.org/" rel="external nofollow">Jabberd2 Install Guide</a>».
	</li>
	<li>
		أيضًا، هنالك بعض المعلومات في صفحة ويكي أوبنتو «<a href="https://help.ubuntu.com/community/SettingUpJabberServer" rel="external nofollow">Setting Up Jabber Server</a>».
	</li>
</ul><p>
	ترجمة -وبتصرف- للمقال <a href="https://help.ubuntu.com/lts/serverguide/chat-servers.html" rel="external nofollow">Ubuntu Server Guide: Chat Applications</a>.
</p>

<p>
	حقوق الصورة البارزة: <a href="http://www.freepik.com/free-vector/mobile-phone-chat_791418.htm" rel="external nofollow">Designed by Freepik</a>.
</p>
]]></description><guid isPermaLink="false">208</guid><pubDate>Thu, 04 Feb 2016 09:26:00 +0000</pubDate></item><item><title>&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x62E;&#x627;&#x62F;&#x648;&#x645; &#x627;&#x644;&#x637;&#x628;&#x627;&#x639;&#x629; CUPS &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A7%D9%84%D8%B7%D8%A8%D8%A7%D8%B9%D8%A9-cups-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r198/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-cups.png.590e34049989dd2d354f705b374a9694.png" /></p>

<p dir="rtl">CUPS هي الآلية الرئيسية للطباعة وخدمات الطباعة في أوبنتو وهي «النظام الشائع للطباعة في يونكس» (Common UNIX Printing System اختصارًا CUPS)، نظام الطباعة هذا هو طبقة محمولة متوفرة مجانًا التي أصبحت المعيار القياسي الجديد للطباعة في غالبية توزيعات لينُكس.</p><p dir="rtl" style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-cups.png.332627d9007409cc578c7ddde354875f.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12065" src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-cups.thumb.png.5ac46020d7038360b6ea07f80cd3cfbd.png" class="ipsImage ipsImage_thumbnailed" alt="ubuntu-server-cups.thumb.png.5ac46020d70"></a></p><p dir="rtl">يدير CUPS مهام الطباعة والطلبيات ويوفر خدمات طباعة عبر الشبكة باستخدام «بروتوكول الطباعة عبر الإنترنت» (Internet Printing Protocol اختصارًا IPP)، بينما يوفر CUPS دعمًا لمجالٍ واسعٍ جدًا من الطابعات، بدءًا من طابعات مصفوفة النقط (dot-matrix) إلى الطابعات الليزرية وما بينهما؛ ويدعم CUPS أيضًا «PostScript Printer ‎Description»‏‎‏ (PPD) والاكتشاف التلقائي لطابعات الشبكة، ويوفر واجهة ويب بسيطة كأداة للضبط والإدارة.</p><h2 dir="rtl">التثبيت</h2><p dir="rtl">أدخل الأمر الآتي في الطرفية لتثبيت CUPS:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install cups</pre><p dir="rtl">سيعمل خادوم CUPS تلقائيًا بعد نجاح التثبيت.</p><p dir="rtl">ولاستكشاف الأخطاء، يمكنك الوصول إلى أخطاء خادوم CUPS عبر ملف سجل في ‎<span style="font-family:courier new,courier,monospace;">/var/log/cups ‎/error_log</span>؛ إذا لم يُظهِر سجل الأخطاء معلوماتٍ كافيةً لحل المشاكل التي تواجهك، فيمكن زيادة درجة «الإسهاب» لسجل CUPS بتغيير التعليمة <span style="font-family:courier new,courier,monospace;">LogLevel</span> في ملف الضبط إلى "<span style="font-family:courier new,courier,monospace;">debug</span>" أو حتى إلى "<span style="font-family:courier new,courier,monospace;">debug2</span>"، مما يؤدي إلى تسجيل كل شيء؛ تأكد من إعادة القيمة الافتراضية "<span style="font-family:courier new,courier,monospace;">info</span>" بعد حل مشكلتك لتفادي زيادة حجم السجل زيادةً كبيرةً جدًا.</p><h2 dir="rtl">الضبط</h2><p dir="rtl">يُضبَط سلوك خادوم CUPS عبر تعليمات موجودة في ملف <span style="font-family:courier new,courier,monospace;">‎/etc/cups/cupsd.conf</span>؛ يتبِّع ملف ضبط CUPS نفس الصيغة العامة لملف الضبط الرئيسي لخادوم أباتشي؛ سنذكر هنا بعض الأمثلة عن الإعدادات التي يمكن تغييرها.</p><p dir="rtl"><strong>تنويه</strong>: عليك إنشاء نسخة من الملف الأصلي قبل تعديل ملف الضبط، وعليك حماية تلك النسخة من الكتابة، لذلك ستكون لديك الإعدادات الافتراضية كمرجع أو لإعادة استخدامها وقت الحاجة.</p><p dir="rtl">انسخ الملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/cups/cupsd.conf </span>واحمهِ من الكتابة بالأوامر الآتية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
sudo chmod a-w /etc/cups/cupsd.conf.original</pre><ul><li><p dir="rtl"><strong>التعليمة ServerAdmin</strong>: لضبط عنوان البريد الإلكتروني لمدير خادوم CUPS، عليك أن تُحرِّر ملف الضبط ‎<span style="font-family:courier new,courier,monospace;">/etc/cups/cupsd.conf</span>، ثم أضف أو عدِّل سطر <span style="font-family:courier new,courier,monospace;">ServerAdmin</span> بما يلائمك؛ فمثلًا إن كنت أنت مدير خادوم CUPS، وكان بريدك الإلكتروني هو user@example.com، فعليك تعديل سطر <span style="font-family:courier new,courier,monospace;">ServerAdmin</span> ليبدو كما يلي:</p></li></ul><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">ServerAdmin user@example.com</pre><ul><li><p dir="rtl"><strong>التعليمة Listen</strong>: يستمع خادوم CUPS في أوبنتو افتراضيًا على بطاقة loopback فقط على عنوان IP 127.0.0.1؛ ولكي تجعل خادوم CUPS يستمع على عنوان IP لبطاقة شبكية، فعليك تحديد إما اسم مضيف، أو عنوان IP، أو اختيارًا، عنوان IP ومنفذ؛ وذلك بإضافة التعليمة <span style="font-family:courier new,courier,monospace;">Listen</span>؛ على سبيل المثال، لو كان خادوم CUPS يقبع على شبكة محلية بعنوان IP هو 192.168.10.250 وتريد أن تجعله متاحًا لبقية الأنظمة على هذه الشبكة الفرعية؛ فعليك تعديل ‎<span style="font-family:courier new,courier,monospace;">/etc/cups/cupsd.conf</span>؛ وإضافة التعليمة <span style="font-family:courier new,courier,monospace;">Listen</span>، كما يلي:</p></li></ul><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">Listen 127.0.0.1:631 # existing loopback Listen
Listen /var/run/cups/cups.sock # existing socket Listen
Listen 192.168.10.250:631 # Listen on the LAN interface, Port 631 (IPP)</pre><p dir="rtl">قد تحذف أو تضع تعليقًا قبل الإشارة إلى عنوان loopback‏ (127.0.0.1) إذا لم ترغب في أن يستمع <span style="font-family:courier new,courier,monospace;">cupsd</span> إلى هذه البطاقة لكنك تريده أن يستمع فقط إلى بطاقة إيثرنت للشبكة المحلية LAN؛ لتفعيل الاستماع لكل منافذ الشبكة بما فيها loopback لمضيف معيّن، فتستطيع إنشاء قيد <span style="font-family:courier new,courier,monospace;">Listen</span> لاسم المضيف (socrates) كما يلي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">Listen socrates:631 # Listen on all interfaces for the hostname 'socrates'</pre><p dir="rtl">أو بحذف التعليمة <span style="font-family:courier new,courier,monospace;">Listen</span> واستخدام <span style="font-family:courier new,courier,monospace;">Port</span> عوضًا عنها:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">Port 631 # Listen on port 631 on all interfaces</pre><p dir="rtl">للمزيد من الأمثلة عن تعليمات الضبط لخادوم CUPS، راجع صفحة الدليل الخاصة بملف الضبط بإدخال الأمر الآتي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">man cupsd.conf</pre><p dir="rtl"><strong>ملاحظة</strong>: في كل مرة تُعدِّل فيها على ملف الضبط ‎<span style="font-family:courier new,courier,monospace;">/etc/cups/cupsd.conf</span>؛ فستحتاج إلى إعادة تشغيل خادوم CUPS بكتابة الأمر التالي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service cups restart</pre><h2 dir="rtl">واجهة الويب</h2><p dir="rtl"><strong>ملاحظة</strong>: يمكن أن يُضبَط ويُراقَب CUPS باستخدام واجهة ويب، التي تتوفر افتراضيًا على <a rel="external nofollow" href="http://localhost:631/admin">http://localhost:631/admin</a>؛ يمكن استخدام واجهة الويب لإجراء كل مهام إدارة الطابعة.</p><p dir="rtl">لكي تنفذ المهام الإدارية عبر واجهة الويب، فعليك إما تفعيل حساب الجذر على خادومك، أو الاستيثاق كمستخدم في المجموعة <span style="font-family:courier new,courier,monospace;">lpadmin</span>؛ ولأسبابٍ أمنية، لن يستوثق CUPS من مستخدم لا يملك كلمة مرور.</p><p dir="rtl">لإضافة مستخدم إلى المجموعة <span style="font-family:courier new,courier,monospace;">lpadmin</span>، فعليك تنفيذ الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo usermod -aG lpadmin username</pre><p dir="rtl">يتوفر توثيق في لسان Documentation/Help في واجهة الويب.</p><h2 dir="rtl">مصادر</h2><ul><li><p dir="rtl">موقع <a rel="external nofollow" href="http://www.cups.org/">CUPS</a> الإلكتروني.</p></li></ul><p dir="rtl">ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/cups.html">Ubuntu Server Guide: CUPS - Print Server</a>.</p>
]]></description><guid isPermaLink="false">198</guid><pubDate>Thu, 28 Jan 2016 18:59:43 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x639;&#x62F;&#x627;&#x62F; NFS &#x648; iSCSI &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; &#x644;&#x62A;&#x634;&#x627;&#x631;&#x643; &#x627;&#x644;&#x645;&#x644;&#x641;&#x627;&#x62A; &#x639;&#x644;&#x649; &#x627;&#x644;&#x634;&#x628;&#x643;&#x629;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-nfs-%D9%88-iscsi-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%84%D8%AA%D8%B4%D8%A7%D8%B1%D9%83-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-r197/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-network-file-sharing.png.e4bb7b0f387ef0439ebe1b37747e7265.png" /></p>

<h2 dir="rtl" style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-network-file-sharing.png.aa0652490cfe95a6f3eb1ac1b8fe4dcc.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12041" src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-network-file-sharing.thumb.png.aaeb9d6e849532240b715f205a427916.png" class="ipsImage ipsImage_thumbnailed" alt="ubuntu-server-network-file-sharing.thumb"></a></h2><h2 dir="rtl">نظام ملفات الشبكة (NFS)</h2><p dir="rtl">يسمح NFS للنظام بمشاركة المجلدات والملفات مع الآخرين عبر الشبكة؛ إذ يمكن للمستخدمين والبرامج الوصول إلى الملفات في الأنظمة البعيدة كأنها ملفاتٌ محلية باستخدام NFS.</p><p dir="rtl">بعض الميزات الملحوظة التي يوفرها استخدام NFS:</p><ul dir="rtl"><li>محطات العمل المحلية تستهلك مساحة قرص أقل ﻷنها تستخدم بيانات يمكن تخزينها على جهاز واحد وتبقى متاحةً للبقية عبر الشبكة.</li><li>لا توجد حاجة ليُنشَأ للمستخدمين مجلدات منزل منفصلة في كل جهاز شبكي؛ حيث يمكن ضبط مجلدات المنزل على خادوم NFS وتتوفر للجميع عبر الشبكة.</li><li>أجهزة التخزين مثل سواقات CD-ROM وأقراص USB يمكن استخدامها من الأجهزة الأخرى على الشبكة، وربما يقلل هذا من عدد مشغلات الوسائط القابلة للإزالة في الشبكة.</li></ul><h3 dir="rtl">التثبيت</h3><p dir="rtl">أدخل الأمر الآتي في الطرفية لتثبيت خادوم NFS:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install nfs-kernel-server</pre><h3 dir="rtl">الضبط</h3><p dir="rtl">تستطيع ضبط المجلدات لكي «تُصدَّر» عبر إضافتها لملف ‎<span style="font-family:courier new,courier,monospace;">/etc/exports</span>، على سبيل المثال:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">/ubuntu *(ro,sync,no_root_squash)
/home *(rw,sync,no_root_squash)</pre><p dir="rtl">تستطيع استبدال <strong>*</strong> بإحدى صيغ أسماء المضيفين، تأكد من أن تعريف اسم المضيف محدد كي لا تستطيع الأنظمة غير المعنية أن تصل إلى NFS.</p><p dir="rtl">نفِّذ الأمر الآتي في مِحَث الطرفية لتشغيل خادوم NFS:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service nfs-kernel-server start</pre><h3 dir="rtl">ضبط عميل NFS</h3><p dir="rtl">استخدم الأمر <span style="font-family:courier new,courier,monospace;">mount</span> لوصل مجلد NFS مشترك من جهاز لآخر؛ وذلك بكتابة أمرٍ شبيه بالأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo mount example.hostname.com:/ubuntu /local/ubuntu</pre><p dir="rtl"><strong>تحذير</strong>: يجب أن تكون نقطة الوصل <span style="font-family:courier new,courier,monospace;">‎/local/ubuntu </span>موجودةً مسبقًا، ولا يجب أن يكون هنالك أيّة ملفات أو مجلدات فرعية في نقطة الوصل.</p><p dir="rtl">طريقة أخرى لوصل مشاركة NFS من جهاز لآخر هي إضافة سطر إلى ملف ‎<span style="font-family:courier new,courier,monospace;">/etc/fstab</span>؛ يجب أن يُحدِّد هذا السطر اسم مضيف خادوم NFS، والمجلد الذي صُدِّرَ من الخادوم، والمجلد في الجهاز المحلي الذي يجب وصل NFS إليه؛ الشكل العام للسطر الذي سيُضاف إلى ملف <span style="font-family:courier new,courier,monospace;">‎/etc/fstab </span>هو:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">example.hostname.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr</pre><p dir="rtl">إذا حدثت معك مشكلة في وصل NFS، فتأكد أن الحزمة <span style="font-family:courier new,courier,monospace;">nfs-common</span> مثبتة في نظام عميلك؛ وذلك بإدخال الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install nfs-common</pre><h3 dir="rtl">مصادر</h3><ul dir="rtl"><li><a rel="external nofollow" href="http://nfs.sourceforge.net/">Linux NFS faq</a></li><li>صفحة ويكي أوبنتو<a rel="external nofollow" href="https://help.ubuntu.com/community/NFSv4Howto"> </a>«<a rel="external nofollow" href="https://help.ubuntu.com/community/NFSv4Howto">NFS Howto</a>»</li></ul><h2 dir="rtl">«مبادر»‏ iSCSI‏</h2><p dir="rtl">إن iSCSI‏ (Internet Small Computer System Interface) هو بروتوكول يسمح بنقل أوامر SCSI عبر الشبكة؛ عادةً يُستخدَم iSCSI في SAN‏ (Storage Area Network) للسماح للخواديم بالوصول إلى مخزن كبير لمساحة القرص الصلب؛ يُشير بروتوكول iSCSI للعملاء «بالمبادرين» (initiators) ولخواديم iSCSI بالأهداف (targets).</p><p dir="rtl">يمكن أن يُضبَط خادوم أوبنتو كمبادر أو هدف iSCSI، يوفر هذا الدرس الأوامر والضبط اللازم لإعداد مبادر iSCSI، على فرض أنك تملك هدف iSCSI في شبكتك وتملك الامتيازات المناسبة للاتصال إليه؛ التعليمات حول إعداد هدف تختلف اختلافًا كبيرًا بين مزودي العتاد، لذلك راجع توثيق الشركة لضبط هدف iSCSI الذي عندك.</p><h3 dir="rtl">تثبيت مبادر iSCSI</h3><p dir="rtl">لضبط خادوم أوبنتو كمبادر iSCSI، فثبِّت الحزمة <span style="font-family:courier new,courier,monospace;">open-iscsi</span> بإدخال الأمر الآتي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install open-iscsi</pre><h3 dir="rtl">ضبط مبادر iSCSI</h3><p dir="rtl">بعد أن تُثبَّت حزمة <span style="font-family:courier new,courier,monospace;">open-iscsi</span>، عليك تعديل الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/iscsi/iscsid.conf</span> مغيرًا ما يلي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">node.startup = automatic</pre><p dir="rtl">تستطيع التأكد إذا كان الهدف متوفرًا حاليًا باستخدام الأداة <span style="font-family:courier new,courier,monospace;">iscsiadm</span>؛ وذلك بإدخال الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo iscsiadm -m discovery -t st -p 192.168.0.10</pre><ul dir="rtl"><li><strong>‎-m</strong>: يحدد النمط الذي سيُنفَّذ فيه <span style="font-family:courier new,courier,monospace;">iscsiadm</span>.</li><li><strong>‎-t</strong>: يحدد نوع الاستكشاف.</li><li>‎<strong>-p</strong>: يحدد عنوان IP للهدف.</li></ul><p dir="rtl"><strong>ملاحظة</strong>: عدِّل 192.168.0.10 إلى عنوان IP للهدف على شبكتك المحلية.</p><p dir="rtl">إذا كان الهدف متوفرًا، فيجب أن تشاهد مخرجات شبيهة بما يلي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">192.168.0.10:3260,1 iqn.1992-05.com.emc:sl7b92030000520000-2</pre><p dir="rtl"><strong>ملاحظة</strong>: قد يختلف رقم iqn وعنوان IP في الأعلى بناءً على العتاد الذي تستخدمه.</p><p dir="rtl">يجب أن تكون الآن قادرًا على الاتصال بهدف iSCSI، واعتمادًا على إعدادات الهدف، فربما تحتاج لإدخال بيانات المستخدم لتسجيل الدخول إلى عقدة iSCSI:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo iscsiadm -m node --login</pre><p dir="rtl">تأكد الآن أن القرص الجديد قد عُثِرَ عليه باستخدام <span style="font-family:courier new,courier,monospace;">dmesg</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">dmesg | grep sd

[   4.322384] sd 2:0:0:0: Attached scsi generic sg1 type 0
[   4.322797] sd 2:0:0:0: [sda] 41943040 512-byte logical blocks:(21.4GB/20.0 GiB)
[   4.322843] sd 2:0:0:0: [sda] Write Protect is off
[   4.322846] sd 2:0:0:0: [sda] Mode Sense: 03 00 00 00
[   4.322896] sd 2:0:0:0: [sda] Cache data unavailable
[   4.322899] sd 2:0:0:0: [sda] Assuming drive cache: write through
[   4.323230] sd 2:0:0:0: [sda] Cache data unavailable
[   4.323233] sd 2:0:0:0: [sda] Assuming drive cache: write through
[   4.325312] sda: sda1   sda2 &lt; sda5 &gt;
[   4.325729] sd 2:0:0:0: [sda] Cache data unavailable
[   4.325732] sd 2:0:0:0: [sda] Assuming drive cache: write through
[   4.325735] sd 2:0:0:0: [sda] Attached SCSI disk
[2486.941805] sd 4:0:0:3: Attached scsi generic sg3 type 0
[2486.952093] sd 4:0:0:3: [sdb] 1126400000 512-byte logical blocks: (576 GB/537 ↪ GiB)
[2486.954195] sd 4:0:0:3: [sdb] Write Protect is off
[2486.954200] sd 4:0:0:3: [sdb] Mode Sense: 8f 00 00 08
[2486.954692] sd 4:0:0:3: [sdb] Write cache: disabled, read cache: enabled, ↪ doesn't support DPO or FUA
[2486.960577] sdb: sdb1
[2486.964862] sd 4:0:0:3: [sdb] Attached SCSI disk</pre><p dir="rtl">في الناتج أعلاه، يكون sdb هو قرص iSCSI الجديد؛ تذكر أن هذا مجرد مثال، قد يختلف الناتج عمّا تراه على الشاشة.</p><p dir="rtl">أنشِئ الآن قسمًا، وهيّء نظام الملفات، وصِل قرص iSCSI الجديد؛ وذلك بإدخال ما يلي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo fdisk /dev/sdb
n
p
enter
w</pre><p dir="rtl"><strong>ملاحظة</strong>: الأوامر الآتية من داخل الأداة <span style="font-family:courier new,courier,monospace;">fdisk</span>؛ راجع <span style="font-family:courier new,courier,monospace;">man fdisk</span> لتعليمات تفصيلية؛ أيضًا الأداة <span style="font-family:courier new,courier,monospace;">cfdisk</span> في بعض الأحيان تكون «صديقة» للمستخدم أكثر.</p><p dir="rtl">هيّء الآن نظام الملفات وصِله إلى <span style="font-family:courier new,courier,monospace;">‎/srv</span> على سبيل المثال:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo mkfs.ext4 /dev/sdb1
sudo mount /dev/sdb1 /srv</pre><p dir="rtl">في النهاية، أضف مدخلة إلى ‎<span style="font-family:courier new,courier,monospace;">/etc/fstab</span> لوصل قرص iSCSI أثناء الإقلاع:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">/dev/sdb1 /srv ext4 defaults,auto,_netdev 0 0</pre><p dir="rtl">فكرة جيدة هي التأكد أن كل شيء يعمل على ما يرام قبل إعادة تشغيل الخادوم.</p><h3 dir="rtl">مصادر</h3><ul dir="rtl"><li>موقع <a rel="external nofollow" href="http://www.open-iscsi.org/">Open-iSCSI</a> الإلكتروني.</li><li>صفحة ويكي دبيان «<a rel="external nofollow" href="http://wiki.debian.org/SAN/iSCSI/open-iscsi">Open-iSCSI</a>».</li></ul><p dir="rtl">ترجمة -وبتصرف- للمقالين: <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/network-file-system.html">Ubuntu Server Guide: Network File System NFS</a> و <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/iscsi-initiator.html">Ubuntu Server Guide: ISCSI Initiator</a>.</p>
]]></description><guid isPermaLink="false">197</guid><pubDate>Wed, 27 Jan 2016 19:51:09 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x646;&#x635;&#x64A;&#x628; &#x648;&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x62E;&#x627;&#x62F;&#x648;&#x645; FTP &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-ftp-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r196/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-ftp.png.c3bd7a28b2d63b9e43526cf9ac88fc03.png" /></p>

<p dir="rtl">إذا كان لديك أكثر من حاسوب في نفس الشبكة، فعند حدٍّ معيَّن ستحتاج إلى مشاركة الملفات بين تلك الحواسيب.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-ftp.png.ce3e4b8fb6f80342e217d7fd5bcb5572.png"><img data-fileid="12009" class="ipsImage ipsImage_thumbnailed" alt="ubuntu-server-ftp.thumb.png.0d19f04dbbec" src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-ftp.thumb.png.0d19f04dbbecae6441556d2cecb48e7b.png"></a></p><h2 dir="rtl">خادوم FTP</h2><p dir="rtl">بروتوكول نقل الملفات (File Transfer Protocol اختصارًا FTP) هو بروتوكول TCP لتنزيل الملفات بين الحواسيب؛ في الماضي، كان يُستخدم أيضًا لرفع الملفات، لكن هذه الطريقة لا توفر إمكانية التشفير، وستُنقَل معلومات المستخدم مع البيانات في صيغة سهلة التفسير؛ إذا كنت تبحث هنا عن طريقة آمنة لرفع أو تنزيل الملفات، فألقِ نظرةً على خادوم <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%B9%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-openssh-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r172/">OpenSSH</a>.</p><p dir="rtl">يعمل FTP وفق نمط «عميل/خادوم»؛ حيث تُسمى مكونة FTP في الخادوم «عفريت FTP»، الذي يستمع بشكل متواصل لطلبات FTP من العملاء البعيدين؛ وعند وصول طلب، فإنه يجري عملية الدخول ويُهيِّء الاتصال، وستُنفَّذ الأوامر المُرسَلة من عميل FTP أثناء مدة عمل الجلسة.</p><p dir="rtl">يمكن الوصول إلى خادوم FTP بإحدى الطريقتين:</p><ul dir="rtl"><li>مستخدم مجهول.</li><li>مستخدم موثوق.</li></ul><p dir="rtl">في نمط المستخدم المجهول (Anonymous)؛ يمكن للعملاء البعيدين الوصول إلى خادوم FTP بحساب المستخدم الافتراضي المُسمى «anonymous» أو «ftp» ويرسلون عنوان بريد إلكتروني ككلمة مرور؛ أما في نمط المستخدم الموثوق، فيجب على المستخدم امتلاك حساب وكلمة مرور؛ الخيار الثاني غير آمن أبدًا ولا يجب أن يستخدم إلا في الحالات الخاصة؛ إذا كنت تبحث عن طريقة آمنة لنقل الملفات، فانظر إلى SFTP في OpenSSH-Server. وصول المستخدم إلى مجلدات وملفات خادوم FTP يتعلق بالأذونات المعطية للحساب أثناء تسجيل الدخول؛ وكقاعدة عامة، سيخفي عفريت FTP المجلد الجذر لخادوم FTP وسيحول المستخدم إلى مجلد منزل FTP؛ وهذا سيخفي بقية نظام الملفات من الجلسات البعيدة.</p><h2 dir="rtl">تثبيت خادوم FTP‏ ‎«vsftpd»‎</h2><p dir="rtl">إن vsftpd هو عفريت FTP متوفر في أوبنتو، ومن السهل تثبيته وإعداده وصيانته؛ لتثبيت <span style="font-family:courier new,courier,monospace;">vsftpd</span>، عليك تنفيذ الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install vsftpd</pre><h3 dir="rtl">ضبط الوصول المجهول لخادوم FTP</h3><p dir="rtl">افتراضيًا، لم يُضبَط vsftpd للسماح للمستخدمين المجهولين بالتنزيل؛ إذا كنت تريد السماح لهم بالتنزيل، فعدِّل الملف ‎/etc/vsftpd.conf مغيّرًا:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">anonymous_enable=Yes</pre><p dir="rtl">سيُنشَأ مستخدم باسم ftp مع مجلد المنزل<span style="font-family:courier new,courier,monospace;"> ‎/srv/ftp </span>أثناء التثبيت؛ هذا هو مجلد FTP الافتراضي.</p><p dir="rtl">إذا أردت تغيير هذا المسار إلى <span style="font-family:courier new,courier,monospace;">‎/srv/files/ftp </span>على سبيل المثال، فببساطة أنشِئ مجلدًا في مكانٍ آخر، وغيّر مجلد المنزل للمستخدم ftp:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp</pre><p dir="rtl">أعد تشغيل الخدمة <span style="font-family:courier new,courier,monospace;">vsftpd</span> بعد عمل التغيرات السابقة:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo restart vsftpd</pre><p dir="rtl">في النهاية، انسخ أيّة ملفات ومجلدات تريد للمستخدمين المجهولين تنزيلها عبر ftp إلى <span style="font-family:courier new,courier,monospace;">‎/srv/files/ftp </span>أو إلى<span style="font-family:courier new,courier,monospace;"> ‎/srv/ftp</span> إذا أبقيت على الإعدادات الافتراضية.</p><h2 dir="rtl">ضبط FTP للاستيثاق من المستخدمين</h2><p dir="rtl">افتراضيًا، يكون <span style="font-family:courier new,courier,monospace;">vsftpd</span> مضبوطًا على الاستيثاق من مستخدمي النظام والسماح لهم بتنزيل الملفات؛ إذا أردت السماح للمستخدمين برفع الملفات، فعدِّل الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/vsftpd.conf</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">write_enable=YES</pre><p dir="rtl">ثم أعد تشغيل <span style="font-family:courier new,courier,monospace;">vsftpd</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo restart vsftpd</pre><p dir="rtl">الآن عندما يتصل مستخدمو النظام عبر FTP، فسيبدؤون في مجلد المنزل الخاص بهم، حيث يستطيعون تنزيل أو رفع الملفات أو إنشاء المجلدات ...إلخ.</p><p dir="rtl">وبشكلٍ مشابه، لا يُسمَح افتراضيًا للمستخدمين المجهولين برفع الملفات إلى خادوم FTP؛ لتغيير ذلك الإعداد عليك أن تُزيل التعليق عن السطر الآتي وتُعيد تشغيل خدمة <span style="font-family:courier new,courier,monospace;">vsftpd</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">anon_upload_enable=YES</pre><p dir="rtl"><strong>تحذير:</strong> إن السماح للمستخدمين المجهولين برفع الملفات إلى الخادوم هو أمرٌ خطيرٌ جدًا، ولا يُفضَّل أبدًا أن يُسمَح للمستخدمين المجهولين برفع الملفات مباشرةً من الإنترنت.</p><p dir="rtl">يحتوي ملف الضبط على العديد من خيارات الضبط؛ توجد معلومات حول كل خيار في ملف الضبط؛ ويمكنك مراجعة صفحة الدليل<span style="font-family:courier new,courier,monospace;"> man 5 vsftpd.conf</span> للمزيد من التفاصيل حول كل إعداد.</p><h2 dir="rtl">تأمين FTP</h2><p dir="rtl">هنالك خيارات في<span style="font-family:courier new,courier,monospace;"> ‎/etc/vsftpd.conf</span> للمساعدة في جعل <span style="font-family:courier new,courier,monospace;">vsftpd</span> أكثر أمانًا؛ فمثلًا يمكن أن يقيّد وصول المستخدمين إلى مجلدات المنزل الخاصة بهم بإزالة التعليق عن السطر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">chroot_local_users=YES</pre><p dir="rtl">يمكنك أن تقيّد قائمة محددة من المستخدمين إلى مجلدات المنزل الخاصة بهم فقط:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list</pre><p dir="rtl">بعد إزالة التعليق عن الخيارات السابقة؛ أنشِئ ملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/vsftpd.chroot_list</span> الذي يحتوي على قائمة بالمستخدمين المسموح لهم واحدًا في كل سطر؛ ثم أعد تشغيل <span style="font-family:courier new,courier,monospace;">vsftpd</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo restart vsftpd</pre><p dir="rtl">يحتوي الملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/ftpusers</span> أيضًا على قائمة بالمستخدمين غير المسموح لهم بالوصول إلى FTP؛ القائمة الافتراضية تتضمن root، و daemon، و nobody ...إلخ. لتعطيل الوصول إلى FTP لمستخدمين آخرين، فأضفهم ببساطة إلى القائمة.</p><p dir="rtl">يمكن أن يُشفَّر FTP باستخدام FTPS، الذي يختلف عن SFTP؛ FTPS هو FTP عبر طبقة المقابس الآمنة (<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>)؛ إن SFTP هو مثل جلسة FTP عبر اتصال <abbr title="Secure SHell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> مشفر؛ اختلاف رئيسي هو أن مستخدمي SFTP يجب أن يملكوا حساب «shell» على النظام، بدلًا من صدفة nologin؛ قد لا يكون توفير صدفة لكل المستخدمين أمرًا ملائمًا في بعض البيئات مثل خادوم ويب مشترك؛ لكن من الممكن تقييد مثل هذه الحسابات إلى SFTP فقط وتعطيل التعامل مع الصدفة، راجع درس OpenSSH لمزيدٍ من المعلومات.</p><p dir="rtl">لضبط FTPS، عدِّل الملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/vsftpd.conf</span> وأضف في النهاية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">ssl_enable=Yes</pre><p dir="rtl">أيضًا، لاحظ الخيارات المتعلقة بالشهادة والمفتاح:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key</pre><p dir="rtl">ضُبِطَت هذه الخيارات افتراضيًا إلى الشهادة والمفتاح الموفر من الحزمة <span style="font-family:courier new,courier,monospace;"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>-sert</span>؛ لكن يجب استبدالهما في البيئات الإنتاجية بالشهادة والمفتاح المُولَّد لمضيف محدد؛ للمزيد من المعلومات حول الشهادات، راجع الدرس الخاص بها في هذه السلسلة.</p><p dir="rtl">أعد الآن تشغيل vsftpd، وسيُجبر المستخدمون غير المجهولين على استخدام FTPS:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo restart vsftpd</pre><p dir="rtl">للسماح للمستخدم بصدفة ‎<span style="font-family:courier new,courier,monospace;">/usr/sbin/nologin</span> بالوصول إلى FTP، لكن عدم امتلاك وصول للصدفة، فعدِّل ملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/shells</span> مضيفًا الصدفة <span style="font-family:courier new,courier,monospace;">nologin</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"># /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/sbin/nologin</pre><p dir="rtl">هذا ضروريٌ لأن vsftpd يستخدم PAM افتراضيًا للاستيثاق؛ والملف <span style="font-family:courier new,courier,monospace;">‎/etc/pam.d/vsftpd</span><span style="font-family:courier new,courier,monospace;"> </span>يحتوي على:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">auth required pam_shells.so</pre><p dir="rtl">الصدفات التي تسمح الوحدة PAM لها بالوصول هي الصدفات المذكورة في ملف <span style="font-family:courier new,courier,monospace;">‎/etc/shells</span>.</p><p dir="rtl">يمكن ضبط أغلبية عملاء FTP الشهيرين ليتصلوا عبر FTPS. الأداة <span style="font-family:courier new,courier,monospace;">lftp</span> التي تعمل من سطر الأوامر لها إمكانية استخدام FTPS أيضًا.</p><h2 dir="rtl">مصادر</h2><ul dir="rtl"><li>راجع موقع <a rel="external nofollow" href="http://vsftpd.beasts.org/vsftpd_conf.html">vsftpd</a> الرسمي لمزيدٍ من المعلومات.</li><li>لتفاصيل الخيارات في<span style="font-family:courier new,courier,monospace;"> ‎/etc/vsftpd.conf </span>راجع صفحة دليل <span style="font-family:courier new,courier,monospace;">vsftpd.conf</span>.</li></ul><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/ftp-server.html">Ubuntu Server Guide: FTP Server</a>.</p>
]]></description><guid isPermaLink="false">196</guid><pubDate>Wed, 27 Jan 2016 17:47:03 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x648;&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; LAMP &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-lamp-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r195/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-lamp_(1).png.5c929a68dfe9e474b2f27fdd17611108.png" /></p>

<p dir="rtl">تثبيت LAMP (الذي هو Linux + Apache + MySQL + PHP/Perl/Python) هو إعداد شائع لخواديم أوبنتو؛ هنالك تشكيلة واسعة جدًا من البرمجيات مفتوحة المصدر المكتوبة لتجميعة برامج LAMP؛ أشهر تلك البرمجيات هي تطبيقات الويكي، وأنظمة إدارة المحتوى، وبرمجيات الإدارة مثل phpMyAdmin.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-lamp_(1).png.99e2d9b6090b8473661be21440c3a514.png"><img data-fileid="11864" class="ipsImage ipsImage_thumbnailed" alt="ubuntu-server-lamp_(1).thumb.png.9b399e9" src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-lamp_(1).thumb.png.9b399e933ab23f64c4f609cc6c40fc2b.png"></a></p><p dir="rtl">ميزة من مزايا LAMP هي المرونة غير العادية لاستخدام قواعد بيانات أو خواديم ويب أو لغات برمجية مختلفة! بدائل شائعة لقواعد MySQL تتضمن PostgreSQL و SQLite؛ وتُستخدَم Python أو Perl أو Ruby بدلًا من PHP؛ ويَستبدل Nginx أو Cherokee أو Lighttpd الخادوم أباتشي.</p><p dir="rtl">أسرع طريقة للبدء في تثبيت LAMP هي استخدام <span style="font-family:courier new,courier,monospace;">tasksel</span>؛ الأداة <span style="font-family:courier new,courier,monospace;">tasksel</span> هي أداة خاصة بدبيان/أوبنتو التي تُثبِّت حزمًا مترابطة للقيام «بمهمة» في نظامك؛ أدخِل الأمر الأتي في الطرفية لتثبيت خادوم LAMP:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo tasksel install lamp-server</pre><p dir="rtl">بعد إتمام عملية التثبيت، ستكون قادرًا على تثبيت أغلبية تطبيقات LAMP بهذه الطريقة:</p><ul dir="rtl"><li>تنزيل أرشيف يحتوي على الملفات المصدرية للتطبيق.</li><li>استخراج الملفات من الأرشيف إلى مجلد يمكن لخادوم الويب الوصول إليه.</li><li>اعتمادًا على المكان الذي استخرجت الملفات إليه، فاضبط خادوم الويب ليُخدِّم الصفحات من هناك.</li><li>اضبط التطبيق للاتصال بقاعدة البيانات.</li><li>شغِّل سكربتًا، أو افتح صفحةً من التطبيق لتثبيت قاعدة البيانات التي يحتاج لها هذا التطبيق.</li><li>بعد أن أجريت الخطوات السابقة أو خطواتٍ شبيهةٍ بها، فأنت جاهزٌ الآن للبدء باستعماله.</li></ul><p dir="rtl">عيب من عيوب هذه الطريقة هي أن ملفات التطبيق لا توضع في مكان قياسي في نظام الملفات، الأمر الذي قد يسبب فوضى؛ عيب آخر كبير هو تحديث التطبيق، فعند إصدار نسخة جديدة منه، فيجب إجراء نفس عملية تثبيت التطبيق لتحديثه.</p><p dir="rtl">لحسن الحظ، هنالك عدد من تطبيقات LAMP مُحزَّمة في أوبنتو، ومتوفرة للتثبيت كغيرها من التطبيقات؛ لكن حسب التطبيق، فربما هنالك خطوات أخرى للضبط والإعداد؛ سيشرح هذا الفصل تثبيت بعض تطبيقات LAMP.</p><h2 dir="rtl">Moin Moin</h2><p dir="rtl">إن<span style="font-family:courier new,courier,monospace;"> MoinMoin</span> هو محرك ويكي مكتوب بلغة بايثون ومبني على محرك الويكي PikiPiki ومرخص برخصة GUN GPL.</p><h3 dir="rtl">التثبيت</h3><p dir="rtl">نفِّذ الأمر الآتي لتثبيت MoinMoin:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install python-moinmoin</pre><p dir="rtl">يجب أن تكون قد ثبتت خادوم أباتشي؛ رجاءً راجع درس تثبيت أباتشي لمزيدٍ من المعلومات حول تثبيت أباتشي.</p><h3 dir="rtl">الضبط</h3><p dir="rtl">لضبط أول تطبيق ويكي خاص بك، فعليك تنفيذ سلسلة الأوامر الآتية؛ على فرض أنك تُنشِئ «ويكي» باسم mywiki:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cd /usr/share/moin
sudo mkdir mywiki
sudo cp -R data mywiki
sudo cp -R underlay mywiki
sudo cp server/moin.cgi mywiki
sudo chown -R www-data.www-data mywiki
sudo chmod -R ug+rwX mywiki
sudo chmod -R o-rwx mywiki</pre><p dir="rtl">يجب الآن أن تضبط MoinMoin لكي يرى الويكي الجديد mywiki؛ لضبط MoinMoin، افتح الملف <span style="font-family:courier new,courier,monospace;">‎/etc/moin/mywiki.py</span> وعدِّل السطر الآتي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">data_dir = '/org/mywiki/data'</pre><p dir="rtl">إلى:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">data_dir = '/usr/share/moin/mywiki/data'</pre><p dir="rtl">أيضًا، تحت الخيار <span style="font-family:courier new,courier,monospace;">data_dir</span>، أضف الخيار<span style="font-family:courier new,courier,monospace;"> data_underlay_dir</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">data_underlay_dir='/usr/share/moin/mywiki/underlay'</pre><p dir="rtl"><strong>ملاحظة</strong>: إذا لم يكن الملف <span style="font-family:courier new,courier,monospace;">‎/etc/moin/mywiki.py</span> موجودًا، فعليك نسخ<span style="font-family:courier new,courier,monospace;"> ‎/usr/share/moin/‎config/wikifarm/mywiki.py </span>إلى <span style="font-family:courier new,courier,monospace;">‎/etc/moin/mywiki.py</span> ثم تنفيذ التغيير المذكور آنفًا.</p><p dir="rtl"><strong>ملاحظة</strong>: إذا سميت الويكي باسم <span style="font-family:courier new,courier,monospace;">my_wiki_name</span>، فيجب إضافة السطر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎("my_wiki_name",r".*") </pre><p dir="rtl">إلى ملف <span style="font-family:courier new,courier,monospace;">‎/etc/moin/farmconfig.py ب</span>عد السطر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎("mywiki", r".*")</pre><p dir="rtl">بعد أن تضبط MoinMoin ليعثر على أول تطبيق ويكي mywiki عليك ضبط أباتشي وجعله جاهزًا لتطبيق الويكي.</p><p dir="rtl">يجب أن تُضيف الأسطر الآتية في ملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/apache2/sites-available/default</span> ضمن الوسم ‎<span style="font-family:courier new,courier,monospace;">&lt;VirtualHost *&gt;</span>‎:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">### moin
  ScriptAlias /mywiki "/usr/share/moin/mywiki/moin.cgi"
  alias /moin_static193 "/usr/share/moin/htdocs"
  &lt;Directory /usr/share/moin/htdocs&gt;
    Order allow,deny
    allow from all
  &lt;/Directory&gt;
### end moin</pre><p dir="rtl">بعد أن تضبط خادوم أباتشي وتجعله جاهزًا لتطبيق الويكي، يجب عليك أن تعيد تشغيله، وذلك بإدخال الأمر الآتي لإعادة تشغيل خادوم أباتشي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service apache2 restart</pre><h3 dir="rtl">التجربة</h3><p dir="rtl">للتأكد من عمل تطبيق الويكي، وجِّه متصفحك للوصلة الآتية:</p><p style="text-align: center;"><a ipsnoembed="true" rel="external nofollow" href="http://localhost/mywiki">http://localhost/mywiki</a></p><p dir="rtl">للمزيد من المعلومات، راجع موقع MoinMoin الرسمي.</p><h3 dir="rtl">مصادر</h3><ul dir="rtl"><li>للمزيد من المعلومات انظر إلى ويكي «<a rel="external nofollow" href="http://moinmo.in/">moinmoin</a>».</li><li>أيضًا، صفحة ويكي أوبنتو «<a rel="external nofollow" href="https://help.ubuntu.com/community/MoinMoin">MoinMoin</a>».</li></ul><h2 dir="rtl">MediaWiki</h2><p dir="rtl">إن MediaWiki هي برمجية Wiki مبنية على الويب مكتوبة بلغة PHP؛ يمكنها أن تستخدم نظام إدارة قواعد بيانات MySQL أو PostgreSQL.</p><h3 dir="rtl">التثبيت</h3><p dir="rtl">قبل تثبيت MediaWiki، يجب عليك تثبيت أباتشي ولغة برمجة PHP5 ونظام إدارة قواعد بيانات؛ وأشهرها MySQL أو PostgreSQL، اختر واحدًا بناءً على احتياجاتك، رجاءً ارجع إلى الأقسام التي تشرح تثبيتها في هذه السلسلة للمزيد من المعلومات.</p><p dir="rtl">نفِّذ الأمر الآتي في الطرفية لتثبيت MediaWiki:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install mediawiki php5-gd</pre><p dir="rtl">لوظائف MediaWiki إضافية، انظر إلى الحزمة <span style="font-family:courier new,courier,monospace;">mediawiki-extensions</span>.</p><h3 dir="rtl">الضبط</h3><p dir="rtl">ملف ضبط أباتشي<span style="font-family:courier new,courier,monospace;"> mediawiki.conf</span> مثبَّتٌ في ‎‎<span style="font-family:courier new,courier,monospace;">/etc/apache2/conf-available/‎</span>، يجب عليك إزالة التعليق من السطر الآتي للوصول إلى تطبيق MediaWiki:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"># Alias /mediawiki /var/lib/mediawiki</pre><p dir="rtl">بعد أن تُزيل التعليق من السطر السابق، ففعِّل الضبط ثم أعد تشغيل خادوم أباتشي ثم ادخل إلى MediaWiki عبر الرابط الآتي <a rel="external nofollow" href="http://localhost/mediawiki/config/index.php">http://localhost/mediawiki/config/index.php</a>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo a2enconf mediawiki.conf
sudo service apache2 restart</pre><p dir="rtl">بعد إكمال الضبط، يجب عليك أن تنقل الملف <span style="font-family:courier new,courier,monospace;">LocalSettings.php</span> إلى المجلد<span style="font-family:courier new,courier,monospace;"> ‎/etc/mediawiki</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo mv /var/lib/mediawiki/config/LocalSettings.php /etc/mediawiki/</pre><p dir="rtl">ربما تريد أيضًا تعديل<span style="font-family:courier new,courier,monospace;"> ‎/etc/mediawiki/LocalSettings.php </span>لكي تضبط حد الذاكرة الأقصى (معطَّل افتراضيًا):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">ini_set( 'memory_limit', '64M' );</pre><h3 dir="rtl">الإضافات</h3><p dir="rtl">توفِّر الإضافات ميزات وتحسينات على تطبيق MediaWiki؛ تمنح هذه الإضافات مدراء الويكي والمستخدمين النهائيين القدرة على تخصيص MediaWiki لتناسب احتياجاتهم.</p><p dir="rtl">يمكنك تنزيل إضافات MediaWiki كأرشيف أو عبر سحبها (checkout) من مستودع Subversion؛ عليك أن تنسخها إلى مجلد <span style="font-family:courier new,courier,monospace;">‎/var/lig/mediawiki/extensions</span>؛ يجب عليك أيضًا إضافة السطر الآتي في نهاية الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/mediawiki/LocalSettings.php</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">require_once "$IP/extensions/ExtentionName/ExtentionName.php";</pre><h3 dir="rtl">مصادر</h3><ul dir="rtl"><li>للمزيد من المعلومات، رجاءً راجع موقع <a rel="external nofollow" href="http://www.mediawiki.org/">MediaWiki</a>.</li><li>يحتوي كتاب «<a rel="external nofollow" href="http://www.packtpub.com/Mediawiki/book">MediaWiki Administrators’ Tutorial Guide</a>» على معلوماتٍ قيمة لمدراء MediaWiki الجدد.</li><li>صفحة ويكي أوبنتو «<a rel="external nofollow" href="https://help.ubuntu.com/community/MediaWiki">MediaWiki</a>» هي مصدرٌ جيدٌ أيضًا.</li></ul><h2 dir="rtl">phpMyAdmin</h2><p dir="rtl">إن phpMyAdmin هو تطبيق LAMP مكتوب خصيصًا لإدارة خواديم MySQL، وهو مبرمج بلغة PHP، ويمكن الوصول إليه عبر متصفح الويب، حيث يوفِّر phpMyAdmin واجهة رسومية لمهام إدارة قواعد البيانات.</p><h3 dir="rtl">التثبيت</h3><p dir="rtl">قبل تثبيت phpMyAdmin فستحتاج إلى وصول إلى قاعدة بيانات MySQL سواءً على نفس المضيف الذي سيُثبَّت عليه phpMyAdmin أو على مضيف آخر متوفر عبر الشبكة؛ للمزيد من المعلومات حول MySQL فانظر إلى القسم الخاص بها في هذا الكتاب؛ أدخِل الأمر الآتي لتثبيت phpMyAdmin:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install phpmyadmin</pre><p dir="rtl">ستظهر لك نافذة لاختيار أي خادوم ويب سيُضبَط ليستخدمه phpMyAdmin؛ سنستخدم لبقية هذا القسم خادوم أباتشي كخادوم ويب.</p><p dir="rtl">في المتصفح، اذهب إلى <a rel="external nofollow" href="http://server/phpmyadmin">http://server/phpmyadmin</a> مستبدلًا server باسم مضيف الخادوم الحقيقي؛ وعند صفحة تسجيل الدخول، اكتب root في حقل اسم المستخدم، أو أي مستخدم MySQL إذا كنت قد أعددت واحدًا؛ ثم أدخل كلمة مرور ذاك المستخدم.</p><p dir="rtl">بعد تسجيل الدخول، تستطيع إعادة ضبط كلمة مرور الجذر إن كان ذلك ضروريًا، وإنشاء المستخدمين، وإنشاء أو حذف قواعد البيانات والجداول ...إلخ.</p><h3 dir="rtl">الضبط</h3><p dir="rtl">ملفات الضبط الخاصة ببرمجية phpMyAdmin موجودةٌ في مجلد <span style="font-family:courier new,courier,monospace;">‎/etc/phpmyadmin</span>؛ ملف الضبط الرئيسي هو <span style="font-family:courier new,courier,monospace;">‎/etc/phpmyadmin/config.inc.php</span> يحتوي هذا الملف خيارات الضبط التي تُطبَّق عمومًا على phpMyAdmin.</p><p dir="rtl">لاستخدام phpMyAdmin لإدارة قواعد بيانات MySQL على خادوم آخر، عدِّل قيمة ما يلي في ملف ‎<span style="font-family:courier new,courier,monospace;">/etc/phpmyadmin/config.inc.php</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">$cfg['Servers'][$i]['host'] = 'db_server';</pre><p dir="rtl"><strong>ملاحظة</strong>: استبدل<span style="font-family:courier new,courier,monospace;"> db_server</span> باسم مضيف الخادوم البعيد أو عنوان IP الخاص به؛ أيضًا تأكد أن مضيف phpMyAdmin لديه الأذونات الكافية للوصول إلى قاعدة البيانات البعيدة.</p><p dir="rtl">بعد ضبطه، سجل خروجك من phpMyAdmin ثم أعد تسجيل الدخول، ويجب أن تستطيع الوصول إلى الخادوم الجديد.</p><p dir="rtl">الملفان <span style="font-family:courier new,courier,monospace;">config.header.inc.php</span> و <span style="font-family:courier new,courier,monospace;">config.footer.inc.php</span> يستخدمان لإضافة ترويسة وتذييل HTML إلى phpMyAdmin.</p><p dir="rtl">ملف ضبط آخر مهم هو ‎<span style="font-family:courier new,courier,monospace;">/etc/phpmyadmin/apache.conf</span>، توجد وصلة رمزية لهذا الملف في<span style="font-family:courier new,courier,monospace;"> ‎/etc/apache2/conf.d/phpmyadmin.conf </span>ويُستخدَم لضبط أباتشي لتخديم صفحات phpMyAdmin؛ يحتوي هذا الملف على تعليمات لتحميل PHP، وأذونات المجلد ...إلخ.</p><h3 dir="rtl">مصادر</h3><ul dir="rtl"><li>يأتي توثيق phpMyAdmin مثبتًا مع الحزمة ويمكن الوصول إليه من وصلة «<a rel="external nofollow" href="http://www.phpmyadmin.net/home_page/docs.php">phpMyAdmin Documentation</a>» تحت شعار phpMyAdmin؛ يمكن الوصول إلى التوثيق الرسمي أيضًا في موقع phpMyAdmin.</li><li>كتاب «<a rel="external nofollow" href="http://www.packtpub.com/phpmyadmin-3rd-edition/book">Mastering phpMyAdmin</a>» هو مصدر جيد للمعلومات.</li><li>مصدر ثالث هو صفحة ويكي أوبنتو «<a rel="external nofollow" href="https://help.ubuntu.com/community/phpMyAdmin">phpMyAdmin</a>».</li></ul><h2 dir="rtl">ووردبريس</h2><p dir="rtl">إن ووردبريس (Wordpress) هي أداة تدوين، ومنصة نشر، ونظام إدارة محتوى مكتوبة بلغة PHP ومرخصة برخصة GNU GPLv2.</p><h3 dir="rtl">التثبيت</h3><p dir="rtl">نفِّذ الأمر الآتي في سطر الأوامر لتثبيت ووردبريس:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install wordpress</pre><p dir="rtl">يجب عليك أيضًا تثبيت خادوم أباتشي وخادوم MySQL؛ راجع الأقسام التي تُعنى بتثبيتهما وإعدادهما في هذه السلسلة.</p><h3 dir="rtl">الضبط</h3><p dir="rtl">لضبط أول تطبيق ووردبريس، فعليك ضبط موقع أباتشي؛ افتح الملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/apache2/sites-available/wordpress.conf</span> وضع فيه الأسطر الآتية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">Alias /blog /usr/share/wordpress

&lt;Directory /usr/share/wordpress&gt;
  Options FollowSymLinks
  AllowOverride Limit Options FileInfo
  DirectoryIndex index.php
  Order allow,deny
  Allow from all
&lt;/Directory&gt;

&lt;Directory /usr/share/wordpress/wp-content&gt;
  Options FollowSymLinks
  Order allow,deny
  Allow from all
&lt;/Directory&gt;</pre><p dir="rtl">ثم فعِّل الموقع الجديد:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo a2ensite wordpress</pre><p dir="rtl">بعد أن انتهيت من ضبط خادوم أباتشي، وجعلته جاهزًا لتطبيق ووردبريس، فعليك الآن إعادة تشغيله وذلك بتنفيذ الأمر الآتي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service apache2 restart</pre><p dir="rtl">لتبسيط تشغيل عدِّة نسخ من ووردبريس، فسمِّ ملف الضبط بناءً على اسم المضيف؛ وهذا يعني أنك تستطيع أن تملك عدّة مضيفين وهميين بمطابقة اسم المضيف في ملف الضبط مع ملف اسم المضيف الوهمي في أباتشي؛ فعلى سبيل المثال، تكون أسماء الملفات هي<span style="font-family:courier new,courier,monospace;"> ‎/etc/wordpress/config-10.211.55.50.php</span>، أو ‎<span style="font-family:courier new,courier,monospace;">/etc/wordpress/config-hostalias1.php</span> ...إلخ. هذه التعليمات تفترض أنك تستطيع الوصول إلى أباتشي عبر المضيف المحلي (ربما باستخدام نفق <abbr title="Secure SHell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>)؛ إذا لم يكن ذلك هو الأمر، فاستبدل ‎<span style="font-family:courier new,courier,monospace;">/etc/wordpress/config-localhost.php</span> بالاسم <span style="font-family:courier new,courier,monospace;">‎/etc/wordpress/config/NAME_OF_VIRTUAL ‎_HOST.php</span>.</p><p dir="rtl">بعد أن يُكتَب ملف الضبط، فعليك اختيار نمط ﻷسماء مستخدمي MySQL وكلمات مرورهم لكل نسخة ووردبريس؛ لكن سنعرض في هذا الدرس مثالًا واحدًا هو localhost فقط.</p><p dir="rtl">علينا الآن ضبط ووردبريس لاستخدام قاعدة بيانات MySQL؛ افتح الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/wordpress/config-localhost.php</span> واكتب الأسطر الآتية:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">&lt;?php
  define('DB_NAME', 'wordpress');
  define('DB_USER', 'wordpress');
  define('DB_PASSWORD', 'yourpasswordhere');
  define('DB_HOST', 'localhost');
  define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
?&gt;</pre><p dir="rtl">ثم أنشِئ قاعدة البيانات، وذلك بفتح ملف مؤقت باسم<span style="font-family:courier new,courier,monospace;"> wordpree.sql</span> فيه أوامر MySQL الآتية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">CREATE DATABASE wordpress;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
  ON wordpress.*
  TO wordpress@localhost
  IDENTIFIED BY 'yourpasswordhere';
FLUSH PRIVILEGES;</pre><p dir="rtl">نفِّذ أوامر MySQL السابقة بالأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cat wordpress.sql | sudo mysql --defaults-extra-file=/etc/mysql/debian.cnf</pre><p dir="rtl">يجب أن تكون نسخة ووردبريس عندك قابلة للضبط بزيارة الوصلة <a rel="external nofollow" href="http://localhost/blog">http://localhost/blog/wp-admin/install.php</a>، ثم اكتب اسم الموقع واسم المستخدم وكلمة المرور وبريدك الإلكتروني ثم اضغط على «تثبيت ووردبريس».</p><p dir="rtl">لاحظ كلمة المرور المُولَّدة إن لم تختر واحدةً، ثم سجِّل دخولك إلى لوحة تحكم ووبرديس.</p><h3 dir="rtl">مصادر</h3><ul dir="rtl"><li>توثيق <a rel="external nofollow" href="https://codex.wordpress.org/">Wordpress.org Codex</a>.</li><li>صفحة ويكي أوبنتو «<a rel="external nofollow" href="https://help.ubuntu.com/community/WordPress">WordPress</a>».</li></ul><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/lamp-applications.html">Ubuntu Server Guide: LAMP Applications</a>.</p>
]]></description><guid isPermaLink="false">195</guid><pubDate>Tue, 26 Jan 2016 17:03:10 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x635;&#x64A;&#x628; &#x648;&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x623;&#x628;&#x627;&#x62A;&#x634;&#x64A; &#x62A;&#x648;&#x645;&#x643;&#x627;&#x62A; &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A3%D8%A8%D8%A7%D8%AA%D8%B4%D9%8A-%D8%AA%D9%88%D9%85%D9%83%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r193/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-apache-tomcat.png.f8c0b9c231bb7752bc5a812ead556dd6.png" /></p>

<p dir="rtl">إن أباتشي تومكات (Apache Tomcat) هو «حاوية ويب» (web container) يسمح لك بتخديم Java Servlets و JSP ‏(Java Server Pages).</p><p dir="rtl" style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-apache-tomcat.png.681315cf2dd5a6f440bfbeaddfcdf397.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="11758" src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-apache-tomcat.thumb.png.ce951cbac76516ebaef0956912ceb138.png" class="ipsImage ipsImage_thumbnailed" alt="ubuntu-server-apache-tomcat.thumb.png.ce"></a></p><p dir="rtl">في أوبنتو دعمٌ لإصدارَيّ تومكات 6 و 7، حيث تومكات 6 هي النسخة القديمة؛ و تومكات 7 هي النسخة الحالية التي تضاف إليها الميزات الجديدة. يُعتَبَر أن كلا الإصدارين مستقر، لكننا سنركز على نسخة تومكات 7، لكن أغلبية تفاصيل الضبط المشروحة هنا صالحة لكلي النسختين.</p><p dir="rtl">تَدعم حزم تومكات في أوبنتو طريقتين مختلفتين لتشغيل تومكات؛ يمكنك تثبيته بالطريقة الكلاسيكية لعموم النظام، مما يجعل تومكات يبدأ في وقت الإقلاع وسيعمل كمستخدم tomcat7 (أو tomcat6) بدون امتيازات؛ لكنك تستطيع إنشاء نسخ خاصة منه وتشغيلها بامتيازات المستخدم، الذي يمكنك بدؤه أو إيقافه بنفسك؛ الطريقة الثانية هي مفيدة خصوصًا في الخادوم التطويري حيث يحتاج عدّة مستخدمين إلى اختبار البرمجيات في نسخ تومكات الخاصة بهم.</p><h2 dir="rtl">التثبيت لعموم النظام</h2><p dir="rtl">عليك إدخال الأمر الآتي في الطرفية لتثبيت خادوم تومكات:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install tomcat7</pre><p dir="rtl">الأمر السابق سيُثبِّت خادوم تومكات مع تطبيق الويب الافتراضي ROOT؛ الذي يُظهِر صفحةً بسيطةً تحتوي على "It works".</p><h2 dir="rtl">الضبط</h2><p dir="rtl">ملفات ضبط تومكات موجودة في ‎<span style="font-family:courier new,courier,monospace;">/etc/tomcat7</span>، بعض تعديلات الضبط الشائعة ستُشرَح هنا فقط؛ رجاءً راجع توثيق <a rel="external nofollow" href="http://tomcat.apache.org/tomcat-7.0-doc/index.html">Tomcat </a><a rel="external nofollow" href="http://tomcat.apache.org/tomcat-7.0-doc/index.html">7</a><a rel="external nofollow" href="http://tomcat.apache.org/tomcat-7.0-doc/index.html">.0</a><a rel="external nofollow" name="sdfootnote1anc" href="#sdfootnote1sym">1</a> للمزيد.</p><h3 dir="rtl">تغيير المنافذ الافتراضية</h3><p dir="rtl">يعمل تومكات 7.0 افتراضيًا بواصل HTTP‏ (HTTP connector) على المنفذ 8080 وواصل AJP على المنفذ 8009؛ ربما تريد تغيير هذين المنفذين الافتراضيين لتفادي التضاربات مع خواديم أخرى على النظام، يمكن فعل ذلك بتعديل الأسطر الآتية في<span style="font-family:courier new,courier,monospace;"> ‎/etc/tomcat7/server.xml</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /&gt;
...
&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /&gt;</pre><h3 dir="rtl">تبديل JVM المستخدمة</h3><p dir="rtl">يعمل تومكات افتراضيًا عملًا ممتازًا مع OpenJDK، ثم سيُجرِّب JVM الخاصة بشركة Sun؛ ثم سيجرب JVMs الأخرى؛ إذا كان لديك عدّة JVMs مثبتةً، فيمكنك ضبط أيٌّ منها سيستخدم عبر <span style="font-family:courier new,courier,monospace;">JAVA_HOME</span> في <span style="font-family:courier new,courier,monospace;">‎/etc/default ‎/tomcat7</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">JAVA_HOME=/usr/lib/jvm/java-6-sun</pre><h3 dir="rtl">تعريف المستخدمين وأدوارهم</h3><p dir="rtl">يمكن أن تُعرَّف أسماء المستخدمين وكلمات مرورهم وأدوارهم (المجموعات) في حاوية Servlet؛ يتم ذلك في ملف ‎<span style="font-family:courier new,courier,monospace;">/etc/tomcat7/tomcat-users.xml</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;role rolename="admin"/&gt;
&lt;user username="tomcat" password="s3cret" roles="admin"/&gt;</pre><h2 dir="rtl">استخدام تطبيقات الويب القياسية التابعة لتومكات</h2><p dir="rtl">يأتي تومكات مع تطبيقات ويب تستطيع تثبيتها لأغراض التوثيق أو الإدارة أو لأغراض تجريبية.</p><h3 dir="rtl">توثيق تومكات</h3><p dir="rtl">تحتوي الحزمة <span style="font-family:courier new,courier,monospace;">tomcat7-docs</span> على توثيق تومكات محزمًّا كتطبيق ويب تستطيع الدخول إليه افتراضيًا عبر <a rel="external nofollow" href="http://server:8080/docs">http://server:8080/docs</a>، وتستطيع تثبيت تلك الحزمة بالأمر الآتي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install tomcat7-docs</pre><h3 dir="rtl">تطبيقات الويب لإدارة تومكات</h3><p dir="rtl">تحتوي الحزمة <span style="font-family:courier new,courier,monospace;">tomcat7-admin </span>على تطبيقَيّ ويب تستطيع استخدامهما لإدارة خادوم تومكات عبر واجهة ويب، يمكنك تثبيتهما عبر إدخال الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install tomcat7-admin</pre><p dir="rtl">أولهما هو تطبيق الويب «<strong>manager</strong>»؛ الذي يمكن الوصول إليه افتراضيًا عبر <a rel="external nofollow" href="http://server:8080/manager/html">http://server:8080/manager/html</a>؛ ويُستخدَم للحصول على حالة الخادوم وإعادة تشغيل تطبيقات الويب.</p><p dir="rtl"><strong>ملاحظة</strong>: الوصول إلى تطبيق manager محميٌ افتراضيًا: عليك أن تُعرِّف مستخدمًا بدور «manager-gui» في<span style="font-family:courier new,courier,monospace;"> ‎/etc/tomcat7/tomcat-users.xml</span> قبل الوصول إليه.</p><p dir="rtl">التطبيق الآخر هو «<strong>host-manager</strong>» الذي يمكن الوصول إليه افتراضيًّا عبر <a rel="external nofollow" href="http://server:8080/host-manager/html">http://server:8080/host-manager/html</a>، ويمكن أن يُستخدَم لإنشاء مضيفين وهميين ديناميكيًّا.</p><p dir="rtl"><strong>ملاحظة</strong>: الوصول إلى تطبيق host-manager محميٌ افتراضيًا أيضًا: عليك أن تُعرِّف مستخدمًا بدور «admin-gui» في ‎/etc/tomcat7/tomcat-users.xml قبل الوصول إليه.</p><p dir="rtl">لأسباب تتعلق بالحماية، لا يمكن للمستخدم tomcat7 أن يكتب إلى مجلد<span style="font-family:courier new,courier,monospace;"> ‎/etc/tomcat7</span> افتراضيًا؛ بعض الميزات في تطبيقات الويب هذه (نشر التطبيقات، أو إنشاء مضيف وهمي) تحتاج إلى إذن الكتابة إلى ذاك المجلد؛ إذا أردت استخدام هذه الميزات، فعليك تنفيذ الأوامر الآتية لإعطاء المستخدمين في مجموعة tomcat7 الامتيازات اللازمة:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo chgrp -R tomcat7 /etc/tomcat7
sudo chmod -R g+w /etc/tomcat7</pre><h3 dir="rtl">تطبيقات ويب تومكات للتجربة</h3><p dir="rtl">تحتوي حزمة<span style="font-family:courier new,courier,monospace;"> tomcat7-example </span>على تطبيقَيّ ويب يُستخدمان لاختبار أو شرح ميزات Servlets و JSP؛ تستطيع الوصول إليهما افتراضيًا عبر <a rel="external nofollow" href="http://server:8080/examples">http://server:8080/examples</a>؛ يمكنك تثبيتهما بالأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install tomcat7-examples</pre><h2 dir="rtl">استخدام نسخ خاصة</h2><p dir="rtl">يُستخدم تومكات استخدامًا واسعًا في التطوير وحالات الاختبار حيث لا يكون استخدام نسخة واحدة لعموم النظام كافيًا لعدة مستخدمين على نظام واحد؛ تأتي حزم تومكات في أوبنتو مع الأدوات اللازمة لإنشاء نسخ موجهة للمستخدمين، مما يسمح لكل مستخدم في النظام بتشغيل (دون امتيازات الجذر) نسخة خاصة منفصلة بينما ما تزال تستخدم تلك النسخة المكتبات المثبتة على النظام.</p><p dir="rtl"><strong>ملاحظة</strong>: من الممكن تشغيل نسخة لعموم النظام، ونسخ خاصة على التوازي (أي معًا)؛ شريطة ألّا يستخدموا نفس منافذ TCP.</p><h3 dir="rtl">تثبيت دعم النسخ الخاصة</h3><p dir="rtl">يمكنك تثبيت كل ما يلزم لدعم النسخ الخاصة بتنفيذ الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install tomcat7-user</pre><h3 dir="rtl">إنشاء نسخة خاصة</h3><p dir="rtl">يمكنك إنشاء مجلد لنسخة خاصة بإدخال الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">tomcat7-instance-create my-instance</pre><p dir="rtl">سيُنشِئ الأمر السابق مجلد<span style="font-family:courier new,courier,monospace;"> my-instance</span> جديد مع كل المجلدات الفرعية والسكربتات اللازمة؛ يمكنك على سبيل المثال تثبيت المكتبات الشائعة في المجلد الفرعي<span style="font-family:courier new,courier,monospace;"> lib/‎</span> ووضع تطبيق الويب في مجلد <span style="font-family:courier new,courier,monospace;">webapps/‎</span>؛ لا توجد أيّة تطبيقات ويب افتراضيًا.</p><h3 dir="rtl">ضبط نسختك الخاصة</h3><p dir="rtl">ستجد ملفات ضبط تومكات التقليدية في النسخة الخاصة في المجلد الفرعي<span style="font-family:courier new,courier,monospace;"> conf/‎</span>؛ يجب عليك، على سبيل المثال، تعديل ملف <span style="font-family:courier new,courier,monospace;">conf/server.xml</span> لتغيير المنفذ الافتراضي المُستخدَم من نسخة تومكات الخاصة لتفادي التضارب مع النسخ الأخرى التي قد تكون تعمل على النظام.</p><h3 dir="rtl">بدء أو إيقاف النسخة الخاصة</h3><p dir="rtl">يمكنك بدء نسختك الخاصة بإدخال الأمر الآتي في الطرفية (بفرض أن نسختك موجودةٌ في مجلد <span style="font-family:courier new,courier,monospace;">my-instance</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">my-instance/bin/startup.sh</pre><p dir="rtl"><strong>ملاحظة</strong>: عليك التحقق من المجلد الفرعي <span style="font-family:courier new,courier,monospace;">logs/ </span>لأي خطأ؛ إذا حصلت على خطأ:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"> java.net.BindException: Address already in use&lt;null&gt;:8080 </pre><p dir="rtl">فاعلم أن المنفذ مُستخدَم من قبل وعليك تغييره.</p><p dir="rtl">يمكنك إيقاف نسختك الخاصة بتنفيذ الأمر الآتي في سطر الأوامر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">my-instance/bin/shutdown.sh</pre><h2 dir="rtl">مصادر</h2><ul dir="rtl"><li>راجع موقع <a rel="external nofollow" href="http://tomcat.apache.org/">Apache Tomcat</a> لمزيدٍ من المعلومات.</li><li>كتاب «<a rel="external nofollow" href="http://oreilly.com/catalog/9780596003180.do">Tomcat: The Definitive Guide</a>» هو مصدر جيد لبناء تطبيقات الويب مع تومكات.</li><li>راجع قائمة «<a rel="external nofollow" href="http://wiki.apache.org/tomcat/Tomcat/Books">Tomcat Books</a>» لمزيدٍ من الكتب.</li></ul><p dir="rtl">ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/tomcat.html">Ubuntu Server Guide: Apache Tomcat</a>.</p>
]]></description><guid isPermaLink="false">193</guid><pubDate>Sun, 24 Jan 2016 12:45:57 +0000</pubDate></item><item><title>&#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x648;&#x636;&#x628;&#x637; &#x62E;&#x627;&#x62F;&#x648;&#x645; Squid &#x627;&#x644;&#x648;&#x633;&#x64A;&#x637; &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%B6%D8%A8%D8%B7-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-squid-%D8%A7%D9%84%D9%88%D8%B3%D9%8A%D8%B7-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r191/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-squid-proxy.png.3ddb1228644d4c5588166144a9488722.png" /></p>

<p dir="rtl">إن Squid هو خادوم تخزين وسيط للويب (web proxy cache server) الذي يوفر خدمات الوساطة والتخزين لبروتوكول نقل النص الفائق (HTTP)، وبروتوكول نقل الملفات (FTP)، وغيرهما من بروتوكولات الشبكة الشهيرة؛ يمكن أن يدعم Squid التخزين والوساطة لطلبات طبقة المقابس الآمنة (<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>) وتخزين طلبيات DNS؛ ويدعم Squid أيضًا بروتوكولات تخزين مخبأ مختلفة، مثل بروتوكول تخزين الإنترنت (Internet Cache Protocol اختصارًا ICP)، وبروتوكول تخزين النص الفائق (Hyper Text Caching Protocol اختصارًا HTCP)، وبروتوكول تخزين مصفوفة التوجيه (Cache Array Routing Protocol اختصارًا CARP)، وبروتوكول تنسيق تخزين الويب (Web Cache Coordination Protocol اختصارًا WCCP).</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-squid-proxy.png.3d7e4b885ed8f402e7455913b2222e29.png"><img data-fileid="11756" class="ipsImage ipsImage_thumbnailed" alt="ubuntu-server-squid-proxy.thumb.png.b205" src="https://academy.hsoub.com/uploads/monthly_2016_01/ubuntu-server-squid-proxy.thumb.png.b20570bd430bd96fa4aeb1bfaf1a1efc.png"></a></p><p dir="rtl">إن الخادوم الوسيط Squid هو حل ممتاز لاحتياجاتٍ كثيرةً للوساطة أو التخزين المؤقت، والتوسع من مكتب فرعي إلى شبكة الشركة الكبيرة وذلك بتوفير آليات مراقبة وتحكم في الوصول للمعاملات المهمة باستخدام بروتوكول إدارة الشبكة المبسط (Simple Network Management Protocol اختصارًا SNMP).</p><p dir="rtl">عند اختيار حاسوب ليعمل كخادوم Squid، فتأكد أنه مضبوط مع كمية كبيرة من الذاكرة الفيزيائية، حيث يستخدم Squid التخزين في الذاكرة لزيادة الأداء.</p><h2 dir="rtl">التثبيت</h2><p dir="rtl">أدخِل الأمر الآتي في الطرفية لتثبيت خادوم Squid:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install squid3</pre><h2 dir="rtl">الضبط</h2><p dir="rtl">يُضبَط Squid بتعديل التعليمات الموجودة ضمن ملف الضبط ‎<span style="font-family:courier new,courier,monospace;">/etc/squid3/squid.conf</span>؛ الأمثلة الآتية تعرض بعض التعليمات التي يمكن تعديلها لتغيير سلوك خادوم Squid؛ للمزيد من التفاصيل المعمَّقة حول Squid، فانظر إلى قسم المصادر.</p><p dir="rtl"><strong>تنويه</strong>: قبل تعديل ملف الضبط، تأكد أنك ستُنشِئ نسخةً من الملف الأصلي وتحميها من الكتابة كي تحصل على الإعدادات الافتراضية كمرجعٍ لك، أو أن تعيد استخدامها وقت الحاجة.</p><p dir="rtl">انسخ الملف ‎<span style="font-family:courier new,courier,monospace;">/etc/squid/squid.conf</span> واحمهِ من الكتابة بإدخال الأوامر الآتية في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo cp /etc/squid3/squid.conf /etc/squid3/squid.conf.original
sudo chmod a-w /etc/squid3/squid.conf.original</pre><p dir="rtl">لضبط خادوم Squid لكي يستمع إلى منفذ TCP ذو الرقم 8888 بدلًا من منفذ TCP الافتراضي 3128، فعدِّل التعليمة<span style="font-family:courier new,courier,monospace;"> http_port</span> كما يلي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">http_port 8888</pre><p dir="rtl">عدِّل التعليمة<span style="font-family:courier new,courier,monospace;"> visible_hostname </span>لكي تعطي خادوم Squid اسم مضيف خاص به؛ هذا الاسم لا يفترض أن يكون نفس اسم المضيف للحاسوب؛ ضُبِطَ في هذا المثال إلى weezie:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">visible_hostname weezie</pre><p dir="rtl">باستخدام التحكم في الوصول الخاص بخادوم Squid، ربما تضبط استخدام خدمات الإنترنت التي يكون فيها Squid وسيطًا لتتوفر للمستخدمين الذي يملكون عناوين IP معيّنة؛ ففي هذا المثال، سنسمح بالوصول لمستخدمي الشبكة الفرعية 192.168.42.0/24 فقط:</p><p dir="rtl">أضف ما يلي إلى نهاية قسم ACL من ملف ضبط <span style="font-family:courier new,courier,monospace;">‎/etc/squid3/squid.conf</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">acl fortytwo_network src 192.168.42.0/24</pre><p dir="rtl">ثم أضف ما يلي إلى بداية قسم <span style="font-family:courier new,courier,monospace;">http_access</span> في ملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/squid3/squid.conf</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">http_access allow fortytwo_network</pre><p dir="rtl">باستخدام ميزات التحكم بالوصول الممتازة التي يوفرها Squid؛ فربما تضبط استخدام خدمات الإنترنت التي يكون فيها Squid وسيطًا كي تتوفر فقط أثناء ساعات العمل العادية؛ على سبيل المثال، سنحاكي وصول الموظفين خلال ساعات العمل من 9:00AM إلى 5:00PM ومن الاثنين إلى الجمعة، الذين يستخدمون الشبكة الفرعية 10.1.42.0/42:</p><p dir="rtl">أضف ما يلي إلى نهاية قسم ACL في ملف<span style="font-family:courier new,courier,monospace;"> ‎/etc/squid3/squid.conf</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">acl biz_network src 10.1.42.0/24
acl biz_hours time M T W T F 9:00-17:00</pre><p dir="rtl">ثم أضف ما يلي إلى أعلى قسم <span style="font-family:courier new,courier,monospace;">http_access</span> في ملف ‎<span style="font-family:courier new,courier,monospace;">/etc/squid3/squid.conf</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">http_access allow biz_network biz_hours</pre><p dir="rtl"><strong>ملاحظة</strong>: بعد عمل تغيرات إلى ملف الضبط <span style="font-family:courier new,courier,monospace;">‎/etc/squid3/squid.conf</span>، فاحفظ الملف ثم أعد تشغيل خادوم Squid لكي تأخذ التغيرات مجراها بإدخال الأمر الآتي في الطرفية:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service squid3 restart</pre><h2 dir="rtl">مصادر</h2><ul dir="rtl"><li>موقع <a rel="external nofollow" href="http://www.squid-cache.org/">Squid</a>.</li><li>صفحة ويكي أوبنتو «<a rel="external nofollow" href="https://help.ubuntu.com/community/Squid">Squid</a>».</li></ul><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://help.ubuntu.com/lts/serverguide/squid.html">Ubuntu Server Guide: Squid - Proxy Server</a>.</p>
]]></description><guid isPermaLink="false">191</guid><pubDate>Sun, 24 Jan 2016 12:12:00 +0000</pubDate></item></channel></rss>
