المرحلة الأولى : تثبيت OpenSER على توزيعة
Debian Gnu/Linux
بعض
الأمور أفترضها :
* توجد لديك توزيعة Debian Gnu/Linux مثبتة بالفعل وعملية الشرح ستكون عليها .
* معرفة كيفية التعامل مع الحزم من إضافة وتثبيت على التوزيعة ، وأود الإشارة إلى أنه فى حالة قيام أى شخص بتنفيذ الشرح على أى توزيعة أخرى وحدثت معه مشاكل فأنا غير ملزم بذلك سواء كانت هذه المشاكل هى عدم توافر حزمة معينة أو حدوث مشكلة أثناء تنفيذ إحدى الخطوات فى عملية ال compiling إلخ .
السطور السابقة تناولنا فيها مقدمة بسيطة عن الفويب (voip) وشرحنا فى تلك المقدمة ما معنى كلمة voip وما الفائدة التى قد تعود علينا من إستخدام تلك التنقبية إلى آخره من تلك المفاهيم ، فى هذا الجزء إن شاء الله سنبدأ فى تثبيت خادم الفويب وستكون عملية التثبيت على توزيعة Debian ومن أراد تثبيت OpenSER على أى توزيعة أخرى فسأذكر بعض النقاط الرئيسية والتى تمكنه من تثبيت الخادم بدون أى مشاكل إن شاء الله .
متطلبات الثبيت (هذه تخص كل التوزيعات ) :
* توجد لديك توزيعة Debian Gnu/Linux مثبتة بالفعل وعملية الشرح ستكون عليها .
* معرفة كيفية التعامل مع الحزم من إضافة وتثبيت على التوزيعة ، وأود الإشارة إلى أنه فى حالة قيام أى شخص بتنفيذ الشرح على أى توزيعة أخرى وحدثت معه مشاكل فأنا غير ملزم بذلك سواء كانت هذه المشاكل هى عدم توافر حزمة معينة أو حدوث مشكلة أثناء تنفيذ إحدى الخطوات فى عملية ال compiling إلخ .
السطور السابقة تناولنا فيها مقدمة بسيطة عن الفويب (voip) وشرحنا فى تلك المقدمة ما معنى كلمة voip وما الفائدة التى قد تعود علينا من إستخدام تلك التنقبية إلى آخره من تلك المفاهيم ، فى هذا الجزء إن شاء الله سنبدأ فى تثبيت خادم الفويب وستكون عملية التثبيت على توزيعة Debian ومن أراد تثبيت OpenSER على أى توزيعة أخرى فسأذكر بعض النقاط الرئيسية والتى تمكنه من تثبيت الخادم بدون أى مشاكل إن شاء الله .
متطلبات الثبيت (هذه تخص كل التوزيعات ) :
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
- gcc
- bison
- flex
- GNU make
- sed and tr (used in Makefiles)
- GNU tar
- GNU install
- libmysqlclient
- bison
- flex
- GNU make
- sed and tr (used in Makefiles)
- GNU tar
- GNU install
- libmysqlclient
ــــــــــــــــــــــــــــــ
ملحوظة : متطلبات التثبيت هذه تكفى فقط بوجود دعم لتوثيق المستخدمين على OpenSER بإستخدام MySQL ، توجد متطلبات أخرى إذا كنت تريد إضافة مهام أكثر ليقوم بها OpenSER ، وجدير بالذكر أن أسماء الحزم السابقة هى أسماء الحزم بشكل عام .
كما أننى أفترض أنك قمت بتعديل ملف ال sources.list الخاص بك على التوزيعة ، وإذا لم تكن قد فعلت فهاهى الطريقة :
فى البداية قم بفتح محاكى الطرفية لديك أو Terminal ، بعد ذلك قم بالدخول بحساب المستخدم الجذر ونفذ الأمر التالى :
ــــــــــــــــــــ
nano /etc/apt/sources.list
ــــــــــــــــــــ
بعد ذلك قم بإضافة المصادر التالية إذا لم تكن موجودة عندك :
ــــــــــــــــ
deb http://http.us.debian.org/debian etch main
deb-src http://http.us.debian.org/debian etch main
deb-src http://http.us.debian.org/debian etch main
ـــــــــــــــــــــــــــــــــــــــ
ملحوظة : من الممكن أن تستخدم أى مُحرر نصوص آخر بدلا ًمن nano ، البعض يُفضل vi أو Vim اختر ما يناسبك أو ما تستطيع إستخدامه .
بعد ذلك قم بتنفيذ الأمر التالى لتحديث ملف المصادر sources.list لديك بالشكل التالى :
ـــــــــــــــــــــ
debian:~# apt-get update
ـــــــــــــــــ
الآن سنقوم بتثبيت الحزم التى ذكرناها سابقا من خلال apt-get بالشكل
التالى :
ـــــــــــــــــــــــ
debian:~# apt-get install gcc bison flex make libmysqlclinet15-dev mysql-server mysql-client
ــــــــــــــــــــــــــــــــــــــ
ملحوظة : قد توجد لديك بعض من تلك الحزم السابقة ولكنى أفترض أن تلك الحزم غير موجودة ، وبالتالى إذا وُجدت الحزم فعلاً وكانت هناك إصدارات حديثة منها سيتم عمل ترقية لتلك الحزم ، والتى لم تكن موجودة سيتم تثبيتها .
بعد التأكد من تثبيت الحزم السابقة على التوزيعة سنقوم الآن بتحميل OpenSER من على الإنترنت ثم نقوم بتثبيته ونبدأ بخطوة التحميل أوﻻً :
نقوم بالولوج إلى المسار usr/src/ ، ثم نقوم بتنزيل الملف بالشكل التالى :
ــــــــــــــــــــــ
debian:~# cd /usr/src/; wget -c http://www.kamailio.org/pub/kamailio/1.3.3/src/openser-1.3.3-notls_src.tar.gz
ــــــــــــــــ
بعد ذلك نقوم بفك الضغط عن الملف :
ــــــــــــــــــــــــــــــــــــ
debian:/usr/src# tar -zxf openser-1.3.3-notls_src.tar.gz
ــــــــــــــــــــــــــــــــــــ
ثم نقوم بحذف الملف المصدر لأنه لم يعد له قيمة (الخيار متروك لك) :
ثم نقوم بحذف الملف المصدر لأنه لم يعد له قيمة (الخيار متروك لك) :
ــــــــــــــــــــــــــــــــــــــــــــــــــــ
debian:/usr/src# rm openser-1.3.3-notls_src.tar.gz
ــــــــــــــــــــــــــــــــــــــــــــــ
الآن نقوم بالولوج إلى المجلد الذى يحتوى الشفرة المصدرية ل OpenSER :
الآن نقوم بالولوج إلى المجلد الذى يحتوى الشفرة المصدرية ل OpenSER :
ــــــــــــــــــــــــــــــــــــــ
debian:/usr/src# cd openser-1.3.3-notls
ـــــــــــــــــــــــــــــــــــــــــــ
بعد ذلك سنقوم بعمل بعض التعديلات على ملف Makefile لإضافة الmodule الذى سوف يكون حلقة الوصل بين OpenSER وبين محرك قواعد البيانات MySQL بالشكل التالى :
بعد ذلك سنقوم بعمل بعض التعديلات على ملف Makefile لإضافة الmodule الذى سوف يكون حلقة الوصل بين OpenSER وبين محرك قواعد البيانات MySQL بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــــ
debian:/usr/src/openser-1.3.3-notls# nano Makefile
ـــــــــــــــــــــــــــــــــــــــــــــ
بعد ذلك نقوم بالبحث عن السطر الذى توجد فيه كلمة mysql بالشكل التالى :
بعد ذلك نقوم بالبحث عن السطر الذى توجد فيه كلمة mysql بالشكل التالى :
ـــــــــــــــــــــــــــــ
exclude_modules?= jabber cpl-c mysql pa postgres osp unixodbc
ــــــــــــــــــــــــــــــــ
ثم نقوم بحذف كلمة mysql ليصبح السطر بالشكل التالى :
ثم نقوم بحذف كلمة mysql ليصبح السطر بالشكل التالى :
ــــــــــــــــــــــــــــــ
exclude_modules?= jabber cpl-c pa postgres osp unixodbc
ـــــــــــــــــــــــــــــــــ
بعد ذلك سنبدأ فى تجميع الشفرة المصدرية الخاصة ب OpenSER أو فيما تُسمى ب OpenSER Compiling :
بعد ذلك سنبدأ فى تجميع الشفرة المصدرية الخاصة ب OpenSER أو فيما تُسمى ب OpenSER Compiling :
ــــــــــــــــــــــــــــــــــــــــــــ
debian:/usr/src/openser-1.3.3-notls# make prefix=/ all
ـــــــــــــــــــــــــــــــــ
ثم نقوم بتثبيت الملفات التى تم عمل لها عملية التجميع من الشفرة المصدرية بالشكل التالى :
ثم نقوم بتثبيت الملفات التى تم عمل لها عملية التجميع من الشفرة المصدرية بالشكل التالى :
ـــــــــــــــــــــــــــ
debian:/usr/src/openser-1.3.3-notls# make prefix=/ install
ـــــــــــــــــــــــــــــــــــ
بعد ذلك نقوم بإنشاء مجلد جديد على
المسار var/run/ لكى نضبط المسار الخاص بملف رقم العملية ل OpenSER
:
ــــــــــــــــــــــــــــــــ
debian:~# mkdir /var/run/openser
ـــــــــــــــــــــــــــــــــ
انتهت عملية التثبيت بنجاح وأصبح لديك خادم الفويب OpenSER على التوزيعة , الخطوة القادمة هى وضع OpenSER كعملية يتم تشغليها أثناء إقلاع Debian Gnu/Linux ونبدأ على الفور بتنفيذ التالى من محاكى الطرفية :
انتهت عملية التثبيت بنجاح وأصبح لديك خادم الفويب OpenSER على التوزيعة , الخطوة القادمة هى وضع OpenSER كعملية يتم تشغليها أثناء إقلاع Debian Gnu/Linux ونبدأ على الفور بتنفيذ التالى من محاكى الطرفية :
ـــــــــــــــــــــــــــــــــــــــــــــــــ
debian:~# cd /usr/src/openser-1.3.3-notls/packaging/debian
ــــــــــــــــــــــــــــــــــــــــ
ــــــــــــــــــــــــــــــــــــــــــــ
debian:/usr/src/openser-1.3.3-notls/packaging/debian# cp OpenSER.default /etc/default/OpenSER
ـــــــــــــــــــــــــــــــــــــ
ـــــــــــــــــــــــــــــــــــــــــــ
debian:/usr/src/openser-1.3.3-notls/packaging/debian# cp OpenSER.init /etc/init.d/OpenSER; cd
ــــــــــــــــــــــــــــــــــ
ـــــــــــــــــــــــــــــــــــــــــــــــ
debian:~# update-rc.d OpenSER defaults 99
ـــــــــــــــــــــــــــــــــــــــــــــــــــــ
بعد ذلك قم بالتعديل على ملف OpenSER.cfg والذى يمثل ملف الاعدادت الرئيسى وقم بالبحث عن كلا من السطر fork=no# ثم نقوم بحذفه ، بعد ذلك نقوم بمنح الملف OpenSER على المسار etc/init.d/ التصاريح اللازمة للتنفيذ بالشكل التالى :
بعد ذلك قم بالتعديل على ملف OpenSER.cfg والذى يمثل ملف الاعدادت الرئيسى وقم بالبحث عن كلا من السطر fork=no# ثم نقوم بحذفه ، بعد ذلك نقوم بمنح الملف OpenSER على المسار etc/init.d/ التصاريح اللازمة للتنفيذ بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــــــــ
debian:~# chmod 755 /etc/init.d/OpenSER
ــــــــــــــــــــــــــــــــــــــــــــ
بعد ذلك نقوم بالتعديل على ذلك الملف لتعديل المسار الذى يوجد به الملف الرئيسى للسيرفر ويكون ذلك بالشكل التالى :
بعد ذلك نقوم بالتعديل على ذلك الملف لتعديل المسار الذى يوجد به الملف الرئيسى للسيرفر ويكون ذلك بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
debian:~# nano /etc/init.d/OpenSER
ـــــــــــــــــــــــــــــــــــــــــــــــــــــ
نقوم بالبحث عن السطر :
نقوم بالبحث عن السطر :
ـــــــــــــــــــــــــــ
DAEMON=/usr/sbin/OpenSER
ــــــــــــــــــــــــــــــــــــــــــــ
ليصبح بالشكل التالى :
ليصبح بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــــــــ
DAEMON=/sbin/OpenSER
ــــــــــــــــــــــــــــــــــــ
أخيرا نقوم بالتعديل على الملف OpenSER الموجود على المسار etc/default/ لتعديل اسم المستخدم المجموعة اللذان سيكون لهم الحق فى تشغيل السيرفر أثناء عملية الإقلاع مع ضبط بعض الخيارات الأخرى لتكون بالشكل التالى :
أخيرا نقوم بالتعديل على الملف OpenSER الموجود على المسار etc/default/ لتعديل اسم المستخدم المجموعة اللذان سيكون لهم الحق فى تشغيل السيرفر أثناء عملية الإقلاع مع ضبط بعض الخيارات الأخرى لتكون بالشكل التالى :
ـــــــــــــــــــــــــــــــــــــــــــــــ
debian:~# nano /etc/default/OpenSER
ــــــــــــــــــــــــــــــــــــــ
ونقوم بتعديل القيم التالية لتصبح بالشكل التالى :
ونقوم بتعديل القيم التالية لتصبح بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــــــــ
RUN_OPENSER=yes
MEMORY=128
USER=the_user_you_want
GROUP=the_group_you_want
MEMORY=128
USER=the_user_you_want
GROUP=the_group_you_want
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
بعد أن ننتهى من ضبط تلك الإعدادات نحفظ التغييرات التى اجريناها ثم نقوم بعمل إعادة تشغيل للتوزيعة لنتأكد من أن كل شىء أصبح على ما يرام ولا توجد هناك أى مشكلة وبعد بدء التشغيل مرة أخرى تستطيع التأكيد من أن OpenSER يعمل فعليا باستخدام الأمر ps بالشكل التالى :
بعد أن ننتهى من ضبط تلك الإعدادات نحفظ التغييرات التى اجريناها ثم نقوم بعمل إعادة تشغيل للتوزيعة لنتأكد من أن كل شىء أصبح على ما يرام ولا توجد هناك أى مشكلة وبعد بدء التشغيل مرة أخرى تستطيع التأكيد من أن OpenSER يعمل فعليا باستخدام الأمر ps بالشكل التالى :
ـــــــــــــــــــــــــــــــــــــــ
debian:~# ps aux | grep openser
ـــــــــــــــــــــــــــــــــــــ
الآن سنتطرق إلى كيفية ضبط اعدادات السيرفر وكيفية التعديل على ملف الاعدادات الرئيسى ، لكن فى البداية سوف أتطرق إلى شرح بعض المفاهيم التى قد تلتبس لدى البعض :
أولا : OpenSER وإعتماده على مبدأ " واحد للكل والكل لواحد " !!
أعتقد أن البعض قد بدأ يفكر هل جننت ؟؟ !! ، ﻻ ليس بعد D: ، ما أقصده من العبارة السابقة نقطة مهمة تخص خادم الفويب OpenSER وهى كيف تم إنشاء OpenSER ليعمل خادماً للفويب ، بمعنى OpenSER فى حد ذاته كحزمة أو برنامج ﻻ تتعدى مساحته كأكواد برمجية حاجز ال 1000 كيلو بايت !! معقول ؟ لكن هل ذلك البرنامج أو الحزمة تستطيع عمل كل الوظائف التى ذكرتها سابقاً فى بداية موضوعنا؟ بالقطع ﻻ !
خادم الفويب OpenSER كحزمة ﻻ يستطيع فعل أى شىء على الإطلاق ، لكن الفكرة العبقرية هنا والتى هى جزء من سبب انتشاره هى اعتماده على نماذج خارجية أو External Modules تقوم بالربط بين OpenSER والبرامج المختلفة ، فعلى سبيل المثال نريد أن نستخدم OpenSER مع نظام إدارة قواعد البيانات MySQL هنا يأتى دور النموذج mysql.so والذى تكون مهمته الرئيسية عمل الإتصالات اللازمة مع MySQL وهكذا قيس الأمر على نفس هذا المنوال حينما تريد مثلا أن تقوم بربط برنامج خارجى مع OpenSER تقوم ببناء Module يقوم بدور الوسيط بين ذلك البرنامج وبين OpenSER .
ملحوظة : بعض ال External Modules تكون معتمدة على بعضها البعض بشكل أو بآخر فتنبه لتلك النقطة لأننا سوف نحتاج إليها لاحقاً .
إذا السؤال الذى يفرض نفسه علينا الآن كيف نقوم مثلا بإضافة نموذج خارجى جديد أو New External Module لخادم الفويب OpenSER أو قد نطرح السؤال بشكل آخر هل يوجد ل OpenSER ملف معين يتم التعديل من خلاله على خصائص OpenSER لإضافة أو حذف External Module معين ؟
نعم ، لدى OpenSER ملف ضبط الإعدادات الخاصة ويدعى OpenSER.cfg وهذا الملف هو الملف الرئيسى أو العقل المدبر ل OpenSER وبدونه OpenSER ﻻ يساوى شيئاً ، فمثلاً عند تشغيل OpenSER يقوم أوﻻ بفحص ملف الإعدادات OpenSER.cfg ليتأكد من صحة وضع الإعدادات بشكل سليم ، كما يتأكد من النماذج الخارجية المُضافة ليقوم بتحميلها أو ﻻ ، وبالتالى نستطيع القول بأن OpenSER بدون OpenSER.cfg يكون عديم القيمة وﻻ فائدة منه .
الآن سنتطرق إلى كيفية ضبط اعدادات السيرفر وكيفية التعديل على ملف الاعدادات الرئيسى ، لكن فى البداية سوف أتطرق إلى شرح بعض المفاهيم التى قد تلتبس لدى البعض :
أولا : OpenSER وإعتماده على مبدأ " واحد للكل والكل لواحد " !!
أعتقد أن البعض قد بدأ يفكر هل جننت ؟؟ !! ، ﻻ ليس بعد D: ، ما أقصده من العبارة السابقة نقطة مهمة تخص خادم الفويب OpenSER وهى كيف تم إنشاء OpenSER ليعمل خادماً للفويب ، بمعنى OpenSER فى حد ذاته كحزمة أو برنامج ﻻ تتعدى مساحته كأكواد برمجية حاجز ال 1000 كيلو بايت !! معقول ؟ لكن هل ذلك البرنامج أو الحزمة تستطيع عمل كل الوظائف التى ذكرتها سابقاً فى بداية موضوعنا؟ بالقطع ﻻ !
خادم الفويب OpenSER كحزمة ﻻ يستطيع فعل أى شىء على الإطلاق ، لكن الفكرة العبقرية هنا والتى هى جزء من سبب انتشاره هى اعتماده على نماذج خارجية أو External Modules تقوم بالربط بين OpenSER والبرامج المختلفة ، فعلى سبيل المثال نريد أن نستخدم OpenSER مع نظام إدارة قواعد البيانات MySQL هنا يأتى دور النموذج mysql.so والذى تكون مهمته الرئيسية عمل الإتصالات اللازمة مع MySQL وهكذا قيس الأمر على نفس هذا المنوال حينما تريد مثلا أن تقوم بربط برنامج خارجى مع OpenSER تقوم ببناء Module يقوم بدور الوسيط بين ذلك البرنامج وبين OpenSER .
ملحوظة : بعض ال External Modules تكون معتمدة على بعضها البعض بشكل أو بآخر فتنبه لتلك النقطة لأننا سوف نحتاج إليها لاحقاً .
إذا السؤال الذى يفرض نفسه علينا الآن كيف نقوم مثلا بإضافة نموذج خارجى جديد أو New External Module لخادم الفويب OpenSER أو قد نطرح السؤال بشكل آخر هل يوجد ل OpenSER ملف معين يتم التعديل من خلاله على خصائص OpenSER لإضافة أو حذف External Module معين ؟
نعم ، لدى OpenSER ملف ضبط الإعدادات الخاصة ويدعى OpenSER.cfg وهذا الملف هو الملف الرئيسى أو العقل المدبر ل OpenSER وبدونه OpenSER ﻻ يساوى شيئاً ، فمثلاً عند تشغيل OpenSER يقوم أوﻻ بفحص ملف الإعدادات OpenSER.cfg ليتأكد من صحة وضع الإعدادات بشكل سليم ، كما يتأكد من النماذج الخارجية المُضافة ليقوم بتحميلها أو ﻻ ، وبالتالى نستطيع القول بأن OpenSER بدون OpenSER.cfg يكون عديم القيمة وﻻ فائدة منه .
تشغيل OpenSER اثناء إقلاع Debian
الملف OpenSER.cfg يتم إنشاؤه بشكل إفتراضى بعد
الإنتهاء من تثبيت OpenSER وقبل الشروع فى التعديل على الملف سنقوم ببعض الخطوات الإضافية لكى نستعمل OpenSER
دون أى مشاكل ونبدأ أوﻻ بتعريف SIP_DOMAIN للجهاز الذى
سوف تم تثبيت OpenSER عليه كما يلى :
ــــــــــــــــــــــــــــــ
debian:~# export SIP_DOMAIN='localhost
ـــــــــــــــــــــــــــــــــ
ملحوظة : فى كل مرة سوف نحتاج إلى عمل export لل SIP_DOMAIN فى حال إعادة تشغيل الجهاز ولذا سوف نقوم بإضافة الأمر export داخل ملف bashrc. والذى يكون داخل مجلد ال home directory بإسم المستخدم الخاص بك وتستطيع الوصول إليه بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــــ
debian:~# nano ~/.bashrc
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
بعد ذلك قم بإضافة هذا السطر فى آخر الملف :
بعد ذلك قم بإضافة هذا السطر فى آخر الملف :
ــــــــــــــــــــــــــــــــــــــــــ
export SIP_DOMAIN='localhost or mydomain.domain.com
ـــــــــــــــــــــــــــــ
أو تستطيع عمل ذلك مباشرة بإستخدام echo بالشكل التالى :
ــــــــــــــــــــــــــــــــــــــــــــ
echo "export SIP_DOMAIN='localhost' " >> ~/.bashrc
ثم قم بحفظ الملف وبعدها لن نحتاج إلى عمل export لل SIP_DOMAIN مرة أخرى .
ملحوظة : يمكنك وضع النطاق الخاص بك مكان كلمة localhost إذا كنت تمتلك احدى النطاقات وذلك لربط عدة مستخدمين على مستوى الشبكة واسعة النطاق (WAN).