التثبيت من المصدر
تقديم :
كانت المحاولة الأولي لمعالجة هذا الموضوع على هذه الصفحة عارف-كيف:التثبيت من الشفرة المصدرية ، ولكن في ظل الفهرس الجديد ومعاملات قصور في النسخة الأولى وتفاصيل أتمنى أن يتم تغطيتها في هذه المقالة سيتم إعادة معالجة الموضوع .
التثبيت من المصدر :
هو عملية تحويل كود البرنامج المكتوب بلغة معينة ... في الأغلب السي أو ما شابه ... إلى نسخة تنفيذية قادرة على التعامل مع نظام المعالج الخاص بجهازك ... في الأغلب x86 ..
لكن طبعا عملية التثبيت من المصدر غير مرتبطة لا بالمنصة x86 ولا بلغة السي ... فهى عملية عامة جدا ...
لماذا التثبيت من المصدر :
سؤال بديهي له الحق أن يتبادر إلى ذهنك ....
- تحتاج إلى تثبيت برنامج غير متوفر بنظام الحزم الخاص بتوزيعتك .
- تحتاج إلى تثبيت برنامج غير متوفر إلا كنسخة مصدر - ملفات كود فقط -
- تحتاج إلى دعم بعض الخصائص التي لن يتم تفعيلها إلا بإعادة التثبيت من المصدر
- تحتاج لمعرفة المزيد عن دواخل البرنامج أو تريد الإشتراك في عملية تطوير البرنامج ... فهذا هو السبيل الوحيد .
- تحتاج إلى تثبيت البرنامج بدون أي أضافات تمت عليه من قبل التوزيعة التي تستخدمها
مصادر المصدر :
بالطبع أنت متأقلم مع التنوع الرهيب في عالم المصادر المفتوحة ... فلا تتوقع مصدر واحد ووحيد لهذه المشاريع ... ولكن أيضا دائما ما توجد وسط ذلك الخضم الرهيب من التنوع ... علامات لا يمكن تغافلها ...
من أهم هذه المصادر :
موقع اللحمة الطازة ... حلو جدا
هذه المواقع عبارة عن مستودعات كبيرة جدا لمشاريع مختلفة ومتنوعة جدا ولعل الخاصية الوحيدة التي تكاد تجمع كل هذه المشاريع ... هى المصادر المفتوحة .. فيما عدا ذلك فالمشاريع متنوعة جدا ومختلفة اختلاف رهيب ... ويمكنك إذا امتلكت المعرفة والمثابرة تسجيل مشروعك وانتظار من يهتم بمشروعك ليستخدمه أو يطوره ... وفي الحالتين مشروعك هو المستفيد الأول
مفهوم Tarballs :
دائما ما تكون ملفات أي مشروع في صيغته المصدرية مجمعة بالأداة تار tar ... وهذه الإداة تاريخية نوعا ما ... لأنها مجمعة من كلمتين بالإنجليزية Tape Archive ... فقد كانت تستخدم لتجميع أي نظام ملفات في هيكلية محددة ... هيكلية التار .. لتخزينها على الوسيط Tape.. وهذا الوسيط عبارة عن شريط مقارب لشرائط الكاسيت أو الفيديو ... في الشكل والآلية يتم استخدامه لغرض نسخ الملفات وأخذ نسخ احتياطية منها ...
وبدون تفاصيل كثيرة ... فأهمية أداة التار ... هي تجميع الملفات في هيكلية تسمح بإعادة فك هذه الهيكلية بدون التأثير على الصلاحيات أو معلومات الملفات وهكذا تفاصيل ...
ومن هنا يتضح أن أداة التار ... لا تحتوي على خاصية الضغط Compress ... بمعنى انه باستخدام أداة التار لتجميع نظام ملفات معين في ملف واحد ... فهذا لا يعني أن نتوقع حجم أصغر أو معدل ضغط للملفات
ولكن أيضا هذا لا يمنع أنه يمكننا استخدام خاصية الضغط مع أداة التار للحصول على هيكلية يمكن فكها ومضغوطة أيضا ...
كيف يحدث هذا ؟
لغرض التوضيح والشرح على مثال عملى ... سيتم اختيار مشروع من مشاريع SF لمحاولة توضيح العملية من الأن ...
المشروع المختار : مشروع FLED
غرض المشروع :مشروع صغير جدا .. لا يقوم بشئ إلا أنه يحاول اطفاء وتشغيل مؤشرات لوحة المفاتيح Keyboard LEDs,NUM,CAPS,SCROLL
بطريقة جميلة وتبعا لمتسلسلات مختلفة ...
سبب الإختيار : المشروع صغير جدا وبالتالي لا يعتمد على مكتبات برمجية عديدة وايضا وقت التثبيت سيقل كثيرا
صفحة المشروع : FLED
بمجرد تنزيل المشروع سنلاحظ أنه تمت هيكلته بالأداة تار tar ولكن أيضا تم ضغطه بأداة الضغط Gzip ... وهذا لأن امتداده fled-0.2.1.tar.gz
أولا : سيتم فك الضغط عن الملف
andalusy@linux-box:~#gunzip fled-0.2.1.tar.gz
andalusy@linux-box:~#ls -l
-rw-r--r-- 1 qasem qasem 1617920 2008-08-04 00:12 fled-0.2.1.tar
andalusy@linux-box:~#
ثانيا : سيتم فك هيكلية التار :
andalusy@linux-box:~#tar -xvf fled-0.2.1.tar
fled-0.2.1/
fled-0.2.1/mkinstalldirs
fled-0.2.1/m4/
fled-0.2.1/m4/iconv.m4
fled-0.2.1/m4/po.m4
fled-0.2.1/m4/lib-link.m4
fled-0.2.1/m4/ChangeLog
fled-0.2.1/m4/lib-ld.m4
fled-0.2.1/m4/lib-prefix.m4
fled-0.2.1/m4/progtest.m4
fled-0.2.1/m4/nls.m4
fled-0.2.1/m4/gettext.m4
fled-0.2.1/src/
fled-0.2.1/src/fled.c
fled-0.2.1/src/Makefile.am
fled-0.2.1/src/Makefile.in
fled-0.2.1/src/fled.h
fled-0.2.1/README
fled-0.2.1/po/
fled-0.2.1/po/remove-potcdate.sin
fled-0.2.1/po/Makefile.in.in
fled-0.2.1/po/en@boldquot.header
fled-0.2.1/po/ChangeLog
fled-0.2.1/po/fled.pot
fled-0.2.1/po/stamp-po
fled-0.2.1/po/en@quot.header
fled-0.2.1/po/Rules-quot
fled-0.2.1/po/Makevars
fled-0.2.1/po/POTFILES.in
fled-0.2.1/po/quot.sed
fled-0.2.1/po/boldquot.sed
fled-0.2.1/po/pl.gmo
fled-0.2.1/po/pl.po
fled-0.2.1/po/insert-header.sin
fled-0.2.1/configure.in
fled-0.2.1/config.h.in
fled-0.2.1/AUTHORS
fled-0.2.1/ChangeLog
fled-0.2.1/aclocal.m4
fled-0.2.1/INSTALL
fled-0.2.1/man/
fled-0.2.1/man/en/
fled-0.2.1/man/en/fled.1.gz
fled-0.2.1/man/pl/
fled-0.2.1/man/pl/fled.1.gz
fled-0.2.1/configure
fled-0.2.1/config.sub
fled-0.2.1/ltmain.sh
fled-0.2.1/TODO
fled-0.2.1/config.rpath
fled-0.2.1/config.guess
fled-0.2.1/missing
fled-0.2.1/Makefile.am
fled-0.2.1/Makefile.in
fled-0.2.1/install-sh
fled-0.2.1/COPYING
fled-0.2.1/NEWS
fled-0.2.1/depcomp
fled-0.2.1/ABOUT-NLS
andalusy@linux-box:~#
- الخيار x : يعني فك الهيكلية
- الخيار v : عرض مخرجات العمليات التي تتم على الملف المضغوط
- الخيار f : يستخدم لتحديد أن ماهية المعامل التالي هو اسم الملف المراد فكه
هل يوجد امتدادت أخري تعبر عن أدوات ضغط غير الأداة Gzip ؟
نعم ... يوجد ولكن اشهرها هي الأداة Gzip
أداوت ضغط أخرى :
andalusy@linux-box:~# uncompress fled-0.2.1.tar.Z
andalusy@linux-box:~# gunzip fled-0.2.1.tar.Z
andalusy@linux-box:~# gunzip fled-0.2.1.tar.gz
andalusy@linux-box:~# gunzip fled-0.2.1.tgz
andalusy@linux-box:~# bunzip2 fled-0.2.1.tar.bz2
كيف يمكن فك الهيكلية والضغط في آن واحد ؟
يمكن من معاملات الأمر tar تحديد أداة فك الضغط المطلوبة .
andalusy@linux-box:~# tar -zxvf fled-0.2.1.tgz
andalusy@linux-box:~# tar -zxvf fled-0.2.1.tar.Z
andalusy@linux-box:~# tar -jxvf fled-0.2.1.tar.bz2
ويمكن أيضا من خلال معرفة الأمرين السابقين .. محاولة تحويل المسارات
فالخيار c يقوم بتحويل المسار إلى المخرج القياسي ... والخيار - يخبر الأمر tar بأن اسم الملف المطلوب فكه موجود في المدخل القياسي ... ومن ثم يقوم المحور | بدمج مخرجات الأمر الأول بمدخلات الأمر التاني ... ليحدث السحر العظيم
---أكيد اتغلبطت ... ما كان على خطوتين أحسن
لمزيد من التفاصيل عن هذه التقنيات يمكنك متابعة م/م القشرة
andalusy@linux-box:~# bunzip2 -c fled-0.2.1.tar.bz2 | tar -xvf -
andalusy@linux-box:~# uncompress -c fled-0.2.1.tar.Z | tar -xvf -
andalusy@linux-box:~# gunzip -c fled-0.2.1.tar.Z | tar -xvf -
andalusy@linux-box:~# gunzip -c fled-0.2.1.tar.gz | tar -xvf -
andalusy@linux-box:~# gunzip -c fled-0.2.1.tgz | tar -xvf -
تهيئة بيئة التطوير :
أولا : توجد أداوت أساسية تستخدم لأية عملية تثبيت من المصدر بغض النظر عن أي مكتبات برمجية أو حتى اعتمادية معينة من قبل البرنامج الذي سيتم تثبيته ..
اﻷدوات المطلوبة :
- GNU coreutils
- GNU binutils
- gcc
- GNU tar
- gunzip
- bunzip2
- make
مجموعة أدوات أساسية خاصة بالبيئة التطويرية
مجموعة برامج خاصة بالملفات التنفيذية
هذا هو المترجم السفاح compiler الخاص بمشروع جنو ... وهو قادر على ترجمة أكوادك من اللغات C,C++,Java.Ada,Objective-C,Fortran إلى لغة الألة الخاصة بالمعالج بتاعك ... طبعا أنواع المعالجات كتيرة جدا ... والgcc بيدعم أغلبها وبطريقة سحرية وامكانيات لا نهائية
أداة لفك أرشفة الشفرة المصدرية
أداة لفك أرشفة Zip الخاصة بجنو
أداة لفك أرشفة Zip2 وهذه أفضل من سابقتها في معدل الضغط
أداة لتحليل وقراءة ملف التعريف والخصائص المطلوب تنزيلها
اﻵن كيف ستتأكد أنك تمتلك كل هذه البرامج ؟
- إذا اتبعت طريقة التثبيت من أداة التثبيت العامة الخاصة بتوزيعتك ... فلتطمئن فأنت تمتلك هذه البرامج والمزيد منها ايضا
- أذا أردت أن تعتمد على اﻷمر which or whereis المجال مفتوح ﻷستخدامهم مع أي أمر
ثانيا : بالطبع انت تعتمد الأن على توزيعة من توزيعات لينكس ... وهذه التوزيعة تحتوي على أداة تثبيت عام Setup Manager ...
في توزيعة سوزة : أداة التثبيت العام هي YAST .. يمكنك محاولة تثبيت أداوت البناء الموجودة تحت الحزمة Development Tools
في توزيعة ديبيان : أداة التثبيت العام APT ... يمكنك محاولة تثبيت حزمة build-essential
رحلة استكشافية :
سنحاول سبر أغوار مجلدات المصدر للمشروع FLED ... في محاول لتعميم هذا الفهم على مفهوم البناء من المصدر في حد ذاته ..
andalusy@linux-box:~/fled-0.2.1$ ls -l
total 22404
-rw-r--r-- 1 qasem qasem 79584 2007-08-16 12:53 ABOUT-NLS
-rw-r--r-- 1 qasem qasem 261890 2007-08-19 10:24 aclocal.m4
-rw-r--r-- 1 qasem qasem 40 2007-08-15 19:28 AUTHORS
-rw-r--r-- 1 qasem qasem 388 2007-08-19 15:20 ChangeLog
-rwxr--r-- 1 qasem qasem 44208 2007-08-15 19:28 config.guess
-rw-r--r-- 1 qasem qasem 2287 2008-08-04 19:31 config.h
-rw-r--r-- 1 qasem qasem 2131 2007-08-19 10:24 config.h.in
-rw-r--r-- 1 qasem qasem 27882 2008-08-06 18:28 config.log
-rwxr-xr-x 1 qasem qasem 16164 2007-08-16 12:53 config.rpath
-rwxr-xr-x 1 qasem qasem 36869 2008-08-06 18:28 config.status
-rwxr--r-- 1 qasem qasem 32560 2007-08-15 19:28 config.sub
-rwxr-xr-x 1 qasem qasem 738483 2007-08-19 10:24 configure
-rw-r--r-- 1 qasem qasem 247 2007-08-19 10:23 configure.in
-rw-r--r-- 1 qasem qasem 18009 2007-08-15 19:28 COPYING
-rwxr--r-- 1 qasem qasem 12924 2007-08-15 19:28 depcomp
-rw-r--r-- 1 qasem qasem 10533106 2008-08-04 21:35 fled-after-install.list
-rw-r--r-- 1 qasem qasem 10533109 2008-08-04 22:22 fled-before-install.list
-rw-r--r-- 1 qasem qasem 541 2008-08-04 22:24 fled-installed.list
-rw-r--r-- 1 qasem qasem 6970 2007-08-15 19:28 INSTALL
-rwxr--r-- 1 qasem qasem 6315 2007-08-15 19:28 install-sh
-rwxr-xr-x 1 qasem qasem 203336 2008-08-06 18:28 libtool
-rw-r--r-- 1 qasem qasem 182321 2007-08-15 19:28 ltmain.sh
drwxr-xr-x 2 qasem qasem 4096 2007-08-19 17:30 m4
-rw-r--r-- 1 qasem qasem 22092 2008-08-06 18:28 Makefile
-rw-r--r-- 1 qasem qasem 346 2007-08-19 15:21 Makefile.am
-rw-r--r-- 1 qasem qasem 22134 2007-08-19 15:22 Makefile.in
drwxr-xr-x 4 qasem qasem 4096 2007-08-19 17:30 man
-rwxr--r-- 1 qasem qasem 10270 2007-08-15 19:28 missing
-rwxr--r-- 1 qasem qasem 1988 2007-08-15 19:28 mkinstalldirs
-rw-r--r-- 1 qasem qasem 37 2007-08-17 12:01 NEWS
drwxr-xr-x 2 qasem qasem 4096 2008-08-06 18:28 po
-rw-r--r-- 1 qasem qasem 713 2007-08-19 15:18 README
drwxr-xr-x 4 qasem qasem 4096 2008-08-06 18:28 src
-rw-r--r-- 1 qasem qasem 23 2008-08-06 18:28 stamp-h1
-rw-r--r-- 1 qasem qasem 138 2007-08-17 12:09 TODO
لا داعى تماما للقلق ... فكل هذه الملفات لا تعنينا في شئ أصلا ... فأهم ملف يحوي كود -- مصدر -- المشروع في حد ذاته ... دائما ما يوجد داخل الملجد SRC وهنا بيت القصيد ... فعند استكشاف هذا المجلد لن تجد إلا بعض الإسطر اليتيمة لهذا المشروع الصغير نوعا ما ... طبعا إذا كنت متمرسا مع لغة السي نوعا ما ... فهذا لا علاقة له باللينكس وادارته
ولكن ما فائدة كل هذا الملفات الأخرى ؟
الفائدة واضحة ... فهذه الملفات هي المسئولة عن توثيق المشروع أولا وثانيا عملية بناء المشروع على أي منصة -- معالج -- من إنتل إلى سبارك ومن سموحة للمرسي أبو العباس ...
هل يوجد ما بين هذه الملفات شئ يجب مراجعته ؟
بالطبع .. فلو أنك تمتلك المعرفة الكاملة عن بناء المصدر ... فكل هذه الملفات من الممكن أن تخصك ... ولكن إن لم تمتلك أو لا يهمك ... فأيضا يتبقى بعض الملفات المطلوب مراجعتها ...
- الملف README.txt : واضح من اسمه أنه يحتوي على توثيق للمشروع
- الملف INSTALL.txt : واضح من اسمه أنه يحتوي على توثيق لعملية التثبيت
- الملف TODO : نوع من أنواع الشفافية ما بين صاحب المشورع ومستخدميه ... فهذا الملف يوضح خارطة الطرية الخاصة بالمشروع أو حتى المميزات التي على طريقها أن تضاف والقصور الذي في طريقه أن يزال
- المجلد po : الصيغة po صيغة واسعة الأنتشار ما بين مشاريع المصادر المفتوحة لتسهيل عملية ترجمة المشروع إلى لغة أخري كاللغة العربية لا سمح الله .. بالطبع ترجمة لغة الواجهة للبرنامج ...
- ليضاف .....
وهكذا يمكنك تعميم هذه المفاهيم التي لا تخص هذا المشروع بتاتا لبدء محاولة في فهم هذا التعاون السحري ما بين صاحب المشروع ومستخدميه .
مرحلة بناء البرنامج :
حتى هذه المرحلة ... نحن لم نفعل شيئا أكثر من فك ضغط ملفات البرنامج FLED
نأتي الأن على مرحلة تعرف البرنامج المراد تثبيته على جهازك ومواصفاته والمكتبات البرمجية المثيتة والغير جاهزة والأدوات المختلفة وحالة وجودها من عدمه .
ويتم حفظ ذلك كله في ملف يدعى Makefile موجود داخل كل مجلد من شجرة مجلدات البرنامج ... هذا الملف يحتوى على جميع تفاصيل جهازك المراد تعريفها للبرنامج المثبت وأيضا متغيرات أخري خاصة بالمفسر Compiler والمكتبات البرمجية وايضا أماكن تثيبت هذه الأدوات والمكتبات كلها
والجدير بالذكر أن هذا الملف Makefile ملف بسيط جدا .. يمكن حتى فتحه وقراءته وفهم الكثير من متغيراته ... فهي لا يحتوي إلا على اسم متغير وقيمة هذا المتغير ... فلو تأكد من فهمك الأكيد لمعنى هذا المتغير يمكنك تعديله كما تشاء ...
ما يهم أن هذا الملف بعد استفاء وملئ كل هذه المتغيرات يتم استخدامه من قبل الأداة Make لبدء عملية تحويل الكود إلى نسخة تنفيذية يمكن تشغيلها على معالج جهازك .
بالطبع الخوض في تفاصيل الأداة Make والملف Makefile الآن ... اكيد خارج نطاق الهدف المنشود .
المرجع الأول والاخير :
الملف README.txt والملف INSTALL.txt ... هما أهم ملفين وهما الحكم والخصم في هذه العملية ... ولو وجد أي تفاصيل أو تعليمات في هذه الملفات... ببساطة لا يمكن تجاهلهم أبدا ... لان أهل مكة أدرى بشعابها ... فمن كتب هذه الملفات لا يهمه غير تثبيت مشروعه على أي جهاز مهما كانت مواصفاته أو حالته .
مرحلة التعريف Cofigure :
السؤال هو : من هي الأداة المسئولة عن تعريف كل هذه المتغيرات والتأكد منها وتسجيلها في الملف Makefile ؟
انه السكريبت configure الموجود في كل ملفات الكود وجميع البرامج المراد تثبيتها من المصدر ... وإذا لم يوجد فاعلم أن هذا المشروع عبارة عن سكريبتات لا تحتج غلى تثبيت أو بناء كمثال Python أو PHP
وبالتالي فهذا السكريبت هو عبارة عن مرحلة مراجعة وتأكيد فقط على جميع الأدوات والمكتبات وتسجيل تقرير كامل عنها في الملف Makefile
يمكن معرفة خيارات السكريبت configure من خلال الأمر
andalusy@linux-box:fled-0.2.1# ./configure --help
`configure' configures this package to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-pic try to use only PIC/non-PIC objects [default=use
both]
--with-tags[=TAGS] include additional configurations [automatic]
--with-gnu-ld assume the C compiler uses GNU ld default=no
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
--without-libintl-prefix don't search for libintl in includedir and libdir
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -Lif you have libraries in a
nonstandard directory
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -Iif
you have headers in a nonstandard directory
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
طبقا للمعايير القياسية لنظام ملفات عالم اللينكس ... فإن أي نسخة تنفيذية يتم تثبيتها على نظام الملفات ستوجد تحت المجلد usr/local/bin/ ونسخة التوثيق لهذا البرنامج ستوجد على المسار usr/local/man/
ولكن بكل ببساطة يمكن تغيير هذا المكان عن طريق المعامل prefix-- الذي يسمح بتغيير مكان النسخة التنفيذية وايضا نسخة التوثيق .
وهذا ما سيتم اعتماده في شرحنا الأن ... فسوف يتم تثبيت المشروع FLED على المسار home/qasem/local/
andalusy@linux-box:fled-0.2.1# ./configure --prefix=/home/qasem/local
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for /usr/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for g77... no
checking for xlf... no
checking for f77... no
checking for frt... no
checking for pgf77... no
checking for cf77... no
checking for fort77... no
checking for fl32... no
checking for af77... no
checking for xlf90... no
checking for f90... no
checking for pgf90... no
checking for pghpf... no
checking for epcf90... no
checking for gfortran... no
checking for g95... no
checking for xlf95... no
checking for f95... no
checking for fort... no
checking for ifort... no
checking for ifc... no
checking for efc... no
checking for pgf95... no
checking for lf95... no
checking for ftn... no
checking whether we are using the GNU Fortran 77 compiler... no
checking whether accepts -g... no
checking the maximum length of command line arguments... 32768
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for objdir... .libs
checking for ar... ar
checking for ranlib... ranlib
checking for strip... strip
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
configure: creating libtool
appending configuration tag "CXX" to libtool
checking for ld used by g++... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC
checking if g++ PIC flag -fPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
appending configuration tag "F77" to libtool
checking whether NLS is requested... yes
checking for msgfmt... no
checking for gmsgfmt... :
checking for xgettext... no
checking for msgmerge... no
checking for ld used by GCC... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for shared library run path origin... done
checking for CFPreferencesCopyAppValue... no
checking for CFLocaleCopyCurrent... no
checking for GNU gettext in libc... yes
checking whether to use NLS... yes
checking where the gettext function comes from... libc
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
الملفات config.cache و config.log و config.status
أحيانا تكون هذه الملفات متواجدة وحاضرة واحيانا أخري لا توجد إلى بتمرير معاملات معينة للسكريبت configure ... وهكذا ولكن ما يهم هو أن هذه الملفات لم تكن موجودة عند فك المجلد FLED في المرة الأولي ... وانما هي مخرجات عملية التعريف الناشئة عن السكريبت configure ودائما ما تستخدم للمراجعة وحل المشاكل وتحديد المكتبات المفقودة أو الأدوات المطلوبة وهكذا وأما ثانيا لمحاولة عملية تسريع عملية المراجعة إذا تم استخدام السكريبت configure
وبالتالي دائما ما يتوجب عليك مراجعة هذه الملفات ومقارنة حالتها قبل وبعد ... ولكن الملف config.cache يجب مسحه عند اضافة مكتبة مفقودة أو أداة كانت مطلوبة ... لأنه ببساطة سيظل خطأ الأداة المفقودة يظهر مادام السكريبت configure يحاول تسريع عملية التعريف من الملف config.cache ... ومن هنا يتوجب مسحه
ملحوظة : الأمر make config أحيانا كثيرة يستخدم للتعويض عن الأمر configure/.
ولكن يجب أن يتوفر دعم الخيار config من خلال ملفات الكود
ولكن يجب أن يتوفر دعم الخيار config من خلال ملفات الكود
مرحلة التفسير والتثبيت Compiling & Installing
وهكذا بعد أن احتوي الملف Makefile لكل التعريفات الخاصة بمعالجك ونظام تشغيلك ككل بجميع أداوته المتاحة ... من خلال مرحلة التعريف ... يمكن الآن المرور بمرحلة التفسير Compiling وهي تحويل كود البرنامج إلى نسخة تنفيذية ... وهذا من خلال الأداة make
لا تنسيى :: من هذه المرحلة يتوجب استخدام صلاحيات المستخدم المطلق ... لأن أي عملية تثبيت يتخللها علميات لها صلاحيات أعلى من صلاحيات المستخدم الأساسي .
أولا : أمر make بدون أي معاملات :
يقوم هذا الأمر بتحويل نسخة الكود إلى ملف تنفيذي
ثانيا : أمر make مع المعامل install
يقوم بنقل النسخة التنفيذية إلى مكان التثبيت المعرف في المتغير prefix
ثالثا : أمر make مع المعامل clean
يقوم بمسح جميع الملفات التي تم انشائها اثناء عملية التفسير وجميع ملفات السجل الخاصة بها وما شابه
رابعا :أمر make مع المعامل all
يحاول تنفيذ معاملات الأداة make المعرفة داخل ملفات المشروع
يمكن أن يكون هناك معاملات أخرى وعديدة ولكن كل هذا يعتمد على ما هو متوفر في عملية بناء البرنامج المراد تثبيته من المصدر وبالطبع لمعلومات كهذه يجب الإستعانة بتوثيق البرنامج
والأن لتثبيت المشروع FLED :
يجب تنفيذ الأمر make مع معاملاته المعرفة من قبل البرنامج .
andalusy@linux-box:fled-0.2.1# make
andalusy@linux-box:fled-0.2.1# make install
مرحلة استخدام البرنامج :
الأن تم تثبيت المشروع على المسار home/qasem/local/
أعرف أعرف .. أنت الآن تريد تشغيل المشروع .. هيا فلنبدأ ...
استخدم هذا الأمر
andalusy@linux-box:~$ fled
bash: fled: command not found
عاملى مقالة اتنين كيلو متر وماشي معاك لغاية الآخر وآخرتها يطلع البرنامج منزلش ؟@#؟#@
يا عمنا كلنا ... صبرك بالله
أولا : هذا الأمر لايعني أن البرنامج لم يتم تثبيته .
كل ما فيها أن القشرة لا تعرف مكان أمر أسمه Fled ... هذا كل شئ
وبالتالي يجب أن نعرف هذه القشرة أين البرنامج fled
ولمعرفة المزيد عن المسار المطلق والمسار النسبي ... يمكنك متابعة اصطلاحات
طبعا في مرحلة التثبيت ... تم اختيار المكان home/qasem/local/ ليكون محلا ومنزلا للبرنامج fled ... فما علينا الأن هو الذهاب إلى هناك وتشغيله من موضعه المعرف هذا
إذا فلنذهب ... ولكن دون أن نتبع الدين الجديد ..
andalusy@linux-box:~$ cd local/
andalusy@linux-box:local$ ls -l
bin share
andalusy@linux-box:local$ cd bin/
andalusy@linux-box:local$ ./fled -n 7
/dev/console: Permission denied
Fled require R/W access to /dev/console
andalusy@linux-box:local$ sudo ./fled -n 7
NOW LOOK @ YOUR KEYBOARD
قولي ملقيتش الكيبورد !!! صح ؟
مهمات أساسية بعد تثبيت أي برنامج :
- محاولة تغيير ملفات التعريف الخاصة به تحت المجلد etc
- محاولة قراءة ملفات التوثيق الخاصة به ومعرفة المزيد man fled
- محاولة تشغيل البرنامج تلقائيا كخدمة من خدمات نظام التشغيل
مرحلة حذف التثبيت :
ليستكمل بإذن الله
