الأرقام والحقيقة القاسية للحياة

09.07.2020

إذا قمت بإدخال قرص CD-RW أو DVD-RW فارغ في محرك الأقراص، فسيطالبك Windows 7 Explorer تلقائيًا بتهيئة هذا القرص عند محاولة فتح هذا القرص:

LFSهذا ليس أكثر من UDF. نظام ملفات للنسخ المجمع على أقراص CD وDVD. يتيح لك استخدام قرص الليزر بنفس طريقة استخدام القرص العادي. أي نسخ الملفات وحذفها بأبسط طريقة. يُستخدم نظام الملفات UDF بشكل خاص في أقراص DVD-Video.

يتقنهذا هو حرق القرص ل نظام الملفات ISO9660 مع امتداد جولييت. نظام الملفات ISO9660 هو نظام ملفات قرص الليزر التقليدي. الأقراص الصوتية المضغوطة، وأقراص MP3، والأقراص ذاتبرامج الكمبيوتر

مكتوبة على نظام الملفات هذا.

استخدام نظام ملفات UDF (LFS) يتم استخدام نظام الملفات UDF للتسجيل الدفعي على أقراص الليزر. اعتمادا على الإصدار، يتم دعمه من قبل مختلفإصدارات ويندوز

. على سبيل المثال، يدعم Windows XP الإصدارات 1.50، 2.0، 2.01.

يُستخدم نظام ملفات UDF أيضًا في أنظمة تسجيل وتشغيل الفيديو والصوت، على سبيل المثال في مشغلات DVD (يتم تصنيع أقراص فيديو DVD باستخدام UDF الإصدار 1.50). توجد نماذج لكاميرات الفيديو تقوم بتسجيل المواد المصورة على أقراص DVD-RW. لاستخدام هذه الأقراص، عليك أولاً تهيئتها.

أدخل قرص CD-RW أو DVD-RW فارغًا في محرك الأقراص، ثم سيطالبك Windows 7 Explorer تلقائيًا بتهيئة هذا القرص عند محاولة فتح هذا القرص:

يمكن أن تستغرق عملية التنسيق في نظام الملفات بعض الوقت، على سبيل المثال، يمكن تنسيق قرص CD-RW سعة 700 ميجابايت خلال 10 - 12 دقيقة.

بعد اكتمال التنسيق، يمكنك نسخ الملفات إلى محرك الأقراص هذا مباشرةً من خلال Windows Explorer:

ومع ذلك، عليك أن تتذكر أن سرعة النسخ على قرص UDF أقل بكثير من سرعة النسخ على محرك أقراص فلاش عادي أو USB.

منذ سن مبكرة جدًا كنت مهتمًا بالكمبيوتر. وقد نما هذا الاهتمام من ممارسة الألعاب تحت نظام MS-DOS في رياض الأطفال، وانتهاء بجميع أنواع مسابقات البرمجة بنهاية المدرسة. ليس من المستغرب أنني بعد المدرسة ذهبت للدراسة في معهد تقني لأصبح مبرمجًا. والأغرب من ذلك هو أنني طوال هذه السنوات كنت بعيدًا تمامًا عن نظام تشغيل رائع مثل GNU/Linux. لكن منذ عام ونصف، في بداية الفصل الدراسي الأول، التقيت برجل (كان أكبر مني قليلاً ودخل المعهد بعد المدرسة الفنية - ولديه خبرة عمل)، الذي قال خلال إحدى المحادثات:
"هل تريد أن تبدأ في تعلم جنو/لينكس؟ ابدأ مع Linux من الصفر."

توزيع الورق الوحيد

LFS (يشار إليه فيما يلي باختصار لـ Linux From Scratch) هو كتاب كتبه جيرارد بيكمانز يصف عملية بناء نسخة عمل بسيطة من GNU/Linux من الكود المصدري. لماذا الورق؟ في وقت ما، كان من الممكن شراء الكتاب بغلاف مقوى، مما يجعل "التوزيع" غير معتاد إلى حد ما، أليس كذلك؟ بالإضافة إلى الكتاب نفسه، لتجميعه، بالطبع، ستحتاج إلى الإنترنت (أو تنزيله مسبقًا). رموز المصدر)، وقسم مجاني على القرص الصلب الخاص بك، وأي نظام التشغيليعتمد على نواة لينكس مع مترجم. أنا شخصياً أستخدم دائمًا توزيعة LFS المعدة مسبقًا أو التثبيت الكاملسلاكوير - لديه كل ما تحتاجه، والذي لا يمكن قوله عن (على سبيل المثال) أوبونتو. بالطبع، يمكنك دائمًا تنزيل الحزم المفقودة، لكننا نريد فقط أن نتعلم Linux، أليس كذلك؟ ويوفر Slackware، حتى في تثبيته الأساسي وبدون تكوين، الأدوات المطلوبة.

يجب أن يقال على الفور أن التوزيع المجمع من كتاب LFS لا يمكنه فعل أي شيء حقًا. أو بالأحرى، لا شيء سيحتاجه المستخدم عديم الخبرة. يمكن تشغيله وإيقاف تشغيله وإعادة تشغيله واستخدامه اتصال إيثرنتولكن الأهم هو التجميع. إذن هناك كتب أخرى يدعمها المجتمع الآن - يتيح لك Beyond LFS جمع تلك البرامج التي تهم المستخدم. من المتصفح والبيئة الرسومية، إلى أنظمة إدارة قواعد البيانات وخادم DHCP. يميل الكتاب إلى التخلف عن الكتاب الأساسي في الإصدار، لكن الخبرة المكتسبة من LFS عادةً ما تكون كافية لحل تعارضات الإصدارات بشكل مستقل. ثلاثة كتب أخرى - Automated LFS وCross LFS وHardened LFS تتوافق تمامًا مع العناوين وتقع خارج نطاق هذه المقالة. ومع ذلك، يمكنك دائمًا قراءتها على الإنترنت، أليس كذلك؟

ولكن لماذا نبدأ به؟

كل شيء بسيط للغاية، إن لم يكن مثير للسخرية. بالإضافة إلى التعليمات، يحتوي الكتاب على الكثير من المواد النظرية (ولكن موجزة للغاية، ونتيجة لذلك، ليست حزينة). قم بتثبيت أوبونتو. هل تعرف ماذا تفعل حزمة Libtool؟ أو غاوك؟ بعد عدة عمليات إنشاء ناجحة لـ LFS، ستتعرف على كل حزمة موجودة على نظامك، والأهم من ذلك، ستفهم كيفية تفاعلها. نعم، تكوين النظام هو الحد الأدنى، لكنه يثير الاهتمام باستمرار بتحسينه. سيعلمك اللجوء في كثير من الأحيان إلى Google للحصول على المساعدة وقراءة الوثائق باللغة الإنجليزية. في البداية، لن تفهم حتى نصف أفعالك، حيث تقوم بإعادة كتابة أو نسخ مجموعات من التعليمات البرمجية بعناية إلى وحدة التحكم. ولكن في النهاية، إدراك أن هذا أمر قبيح، بدون دعم الرسومات وبطاقة الفيديو القوية الخاصة بك، بدون Aero و شاشات تعمل باللمس، سيمنحك نظام التشغيل الذي جمعته بنفسك مخزونًا من القوة والفخر الذي ستصل إليه بنفسك للحصول على معرفة جديدة وانتصارات جديدة. أنا أبالغ قليلا، ولكن الشعور بعد إعادة التشغيل الأول في النظام الجديد من الصعب أن ننسى الآن.

الأرقام والحقيقة القاسية للحياة

LFS ليس توزيعًا أدنى على الإطلاق. سيتطلب التجميع حوالي 3 غيغابايت مجانية على القرص (هذا بالإضافة إلى نظام Linux الذي يعمل بالفعل) - ومع ذلك، بعد بعض الرقصات، يمكن تحويل النظام إلى قرص مضغوط مباشر. إذا أتيحت لي مثل هذه الفرصة، سأخبرك كيف يتم ذلك لاحقًا. يستغرق تجميع كل شيء (مع مراعاة الحاجة إلى إنشاء ملفات التكوين وأشياء أخرى) حوالي يومين. هذا إذا كان مع فترات راحة للنوم والطعام وإيقاف تشغيل الكمبيوتر ليلاً. ومن ناحية أخرى، يعتمد ذلك على أداء الكمبيوتر الذي تم تجميع النظام عليه. ضحيتي الأولى كانت لابتوب إم إس آياكس-340 - معالج إنتلكور 2 سولو مع تردد الساعة 1.2 جيجاهيرتز (بشكل عام، يوصى ببناء LFS على نظام أحادي النواة). كبش- 2 جيجابايت DDR2. حتى المواصفات الأقل كافية تمامًا، وعلى المعالج السريع، سيعمل التجميع بشكل أسرع.

بالمناسبة، تمت الإشارة إلى وقت البناء التقريبي لكل حزمة في البرنامج التعليمي. تعتبر وحدة الوقت هي وقت إنشاء حزمة Binutils - وهي عبارة عن مُجمِّع ورابط وعدد من الأدوات المساعدة الأخرى الأصغر حجمًا للعمل مع ملفات الكائنات. على النظام أعلاه استغرق الأمر ثلاث دقائق.

تكوين التوزيع

ليس من المنطقي إدراج جميع الحزم المضمنة في LFS. ستكون القائمة طويلة، ولن تخبر أي شيء تقريبًا للمبتدئين؛ مبالغة لشخص مطلع. في هذا القسم القصير أردت فقط تقديم بعض النصائح العامة. أولاً، عند إنشاء حزمة غير مذكورة في الكتاب، قم بإلقاء نظرة على مستودع التصحيح - ربما تم تكييفه بالفعل للاستخدام في LFS. ثانيًا، يتكون BLFS بالكامل تقريبًا من حزم اختيارية - ما عليك سوى اختيار الحزم التي تحتاجها ولا تتردد في إضافتها إلى إصدار LFS الخاص بك. وثالثًا: استخدم مدير الحزم منذ البداية. وقد أفرد الكتاب فصلاً لهذا، ولكن تعليمات عمليةفي عداد المفقودين أقل قليلا من تماما. لا يمكنني إلا أن أوصي بأداة التثبيت Guarded - وهو برنامج نصي مكتوب بلغة Bash يوفر الحد الأدنى من مجموعة الأوامر لإدارة الحزم والتبعيات والإصدارات، وسيكون هذا كافيًا. وبعد ذلك، يمكنك تجميع APT أو DPKG من الكود المصدري تمت تغطيته بشكل جيد في منتديات المجتمع.

بدلا من الاستنتاج

خلال العام ونصف العام الماضيين، أحرزت تقدمًا كبيرًا في دراستي. لقد تقدمت من مرحلة "يوجد نظام تشغيل كهذا" إلى مستوى "يمكنني إعداد خادم لـ Gentoo في ثلاثة أيام". ما زلت بعيدًا جدًا عن المثالية ولا أستطيع حتى أن أسمي نفسي مستخدمًا حقيقيًا لنظام Linux الكمبيوتر المنزلييتوافق نظام التشغيل Windows XP القديم وXubuntu 10.10، لكن هل تعرف ما أجيبه عندما يسألونني من أين أبدأ في تعلم Linux؟ ابدأ مع Linux من الصفر.

ملاحظة: شكرا لأولئك الذين كتبوا في PM. تم تصحيح الأخطاء، وتحريك الاختراق قليلا.

هناك العديد من الطرق لتثبيت Linux على جهاز الكمبيوتر الخاص بك والبدء في استخدامه لمهام محددة. اختيار التوزيعات واسع للغاية، لكل الأذواق والألوان - سواء "لربات البيوت" أو للمستخدمين المتقدمين، مما يسمح بأي مستوى من التخصيص، بما في ذلك التجميع من التعليمات البرمجية المصدر لأجهزة معينة. يمكن تثبيت النظام، من حيث المبدأ، في متناول أي مستخدم كمبيوتر شخصي أكثر أو أقل معرفة بالقراءة والكتابة. وإذا لم تتعمق في الهوليفار التي لا تزال شائعة حول موضوع "Linux vs Other OS"، فإن استخدام هذا النظام لا يتطلب المعرفة التي كانت إلزامية لمستخدم Linux الجديد، على سبيل المثال، قبل عشر سنوات. من وجهة نظري الذاتية العميقة، على مدار أكثر من عشر سنوات كنت أراقب فيها تطور هذا النظام، أصبح Linux أكثر ملاءمة للمبتدئين وتخلص من العديد من المشكلات المتأصلة فيه في الماضي. وهذا جيد.

طيور البطريق المصنوعة يدويا...

لقد كانت هناك بالفعل مقالتان عن حبري حول موضوع LFS، على سبيل المثال، أو. تشير التعليقات على هذا الأخير إلى فكرة منطقية - إذا كانت هناك مجموعة من الاحتمالات عمليات تثبيت لينكسودراستها واسعة النطاق بالفعل، لماذا نحتاج إلى LFS؟

ولن أتوسع في قصص "كيف تتجول سفن الفضاء... وعندما كانت الأرض كرة من نار...". سأجيب على السؤال المطروح بناءً على موقفي - أقوم بجمع LFS لأنني ببساطة مهتم بالقيام بذلك. أرى في هذه العملية فرصة جيدةانظر "تحت غطاء محرك السيارة" للنظام. أعترف أنه من الصعب أن يسمى هذا المسار الأمثل. مع ذلك، هذه المقالة، وسيتم تخصيص ما يلي لعملية إنشاء نظام Linux يدويًا. لن تكون هذه المقالات ترجمة لوثائق التجميع - ليست هناك حاجة خاصة لذلك. سيتم التركيز على التفاصيل والفروق الدقيقة للعملية التي كان على المؤلف مواجهتها شخصيًا. دعونا نعتبر هذه الدورة بمثابة مذكرات مبتدئ.

1. متطلبات النظام

لبناء LFS، تحتاج إلى جهاز كمبيوتر مثبت عليه GNU/Linux. من حيث المبدأ، أي توزيع سوف تفعل. لنفترض على أجهزتي التي أستخدمها آرتش لينكس. بخصوص التوزيعات المبنية على دبيان ( لينكس منت، Ubuntu، وما إلى ذلك)، بالطبع فهي مناسبة أيضًا، لكنني أسارع إلى لفت انتباهكم إلى ما يلي - في إحدى المراحل الأولية للعمل، عند تهيئة متغيرات البيئة، يظهر تحذير قذيفة الأوامر

$ source ~/.bash_profile dircolors: لا يوجد متغير بيئة SHELL، ولا يوجد خيار لنوع الصدفة محدد
لقد تلقيت هذا التحذير في Linux Mint 17 بسبب الاستدعاء غير المباشر لـ dircolors (الأمر الذي يقوم بتلوين الجهاز الطرفي) من /etc/profile عندما يقوم المستخدم بتسجيل الدخول مرة أخرى ويتم تحديث متغيرات البيئة باستخدام الأمر المصدر. إنها ليست حرجة ويمكن تجاهلها.

يجب أن يكون لدى نظام Linux المضيف الحزم المدرجة في متطلبات النظام الرسمية مثبتة. معظم هذه الحزم تأتي خارج الصندوق أو هي أدوات مطورة اختيارية. على أية حال، يتم تثبيتها بسهولة من المستودع الرسمي لتوزيع معين. خيار جيدهو استخدام قرص حي مثل Knoppix، ثم يمكنك تثبيت LFS على جهاز لا يحتوي على أي نظام تشغيل. وبهذا المعنى، فالخيار لك.

بالإضافة إلى الأجهزة ونظام التشغيل، هناك حاجة أيضًا إلى الصبر والمثابرة. عملية التجميع والتكوين طويلة جدًا وتتطلب عمالة مكثفة. لا ينبغي عليك نسخ ولصق الأوامر من الكتاب إلى الوحدة الطرفية: أولاً، قد تكون حالتك فريدة من نوعها؛ ثانيا، هدفنا هو فهم مبدأ بناء نظام تشغيل عملي تم تجميعه من كود المصدر، مما يعني أنه سيتعين علينا الخوض في معنى العمليات الجارية. يجب التعامل مع كل مرحلة من مراحل العمل بشكل هادف وببطء.

2. وثائق لتجميع نظام الحد الأدنى

جميع الوثائق الضرورية مركزة في كتاب Linux Form Scratch (يؤدي الرابط إلى الإصدار عبر الإنترنت لأحدث إصدار ثابت). النصيحة الأولى التي أود تقديمها للمبتدئين هي استخدام أحدث إصدار ثابت إنجليزي. هناك الترجمات الروسيةومع ذلك فهم متخلفون دائما الإصدار الحالي. بالإضافة إلى ذلك، فإن الرابط إلى الإصدار الروسي الأخير من LFS 6.0 يؤدي إلى الفراغ، والترجمة الوحيدة المتاحة من الموقع الرسمي تتعلق بـ LFS 5.0، لكنها، بعبارة ملطفة، قديمة. تخضع نواة النظام وبرنامج مشروع GNU لتغييرات منتظمة؛ علاوة على ذلك، فإن إصدارات الحزم الموضحة في الإصدارات الأقدم من LFS ليست متاحة دائمًا للتنزيل، وإذا كانت متوفرة، فسيتعين البحث عنها يدويًا. لذا فإن خيارنا هو الإصدار الإنجليزي الحالي من LFS.

ملحوظة: أثناء كتابة هذه المقالة، تم العثور على رابط لترجمة LFS 7.3 في مقالة LFS wiki، وهي أقرب إلى الحقيقة. ومع ذلك، لم تنته هذه الترجمة بعد، فمعظم الكتاب باللغة الإنجليزية.

أريد أيضًا أن أحذر القارئ من أن استخدام إصدار التطوير الحالي للكتاب يمكن أن يؤدي أيضًا إلى صعوبات غير متوقعة. يمكن الحصول على هذا الإصدار من مستودع SVN، الذي يتم تحديثه يوميًا. يتم تحميل الكتاب عن طريق الأمر

$ mkdir ~/LFS && cd ~/LFS $ svn co svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/
ومن السهل تجميعها، على سبيل المثال مثل هذا (لإنشاء نسخة html تحتاج إلى حزمة tidyhtml)
$ cd BOOK $ mkdir ../html $ make BASEDIR=../html

هذا الإصدارهو الأحدث، ويركز على استخدام "إصدار Skynet" الذي تم إصداره مؤخرًا من Linux 4.0 kernel.

ما علاقة SkyNet بالأمر؟

وهذا ما يلي:



المشكلة الأولى تنشأ بالفعل أثناء الشيكات المجاميع الاختباريةالحزم التي تم تنزيلها

$ md5sum -c md5sums . . lfs-bootscripts-20150222.tar.bz2: تالف. . md5sum: تحذير: المجموع الاختباري المحسوب واحد غير متطابق

تم فك ضغط الأرشيف المحدد، وأحجام الملفات مطابقة للحقيقة. ربما تسلل خطأ ببساطة إلى ملف md5sums الذي يحتوي على قائمة CRS. ومع ذلك، من أجل عدم المخاطرة، من الأفضل أن تأخذ نسخة مستقرة من الكتاب.

3. تحضير التربة

أولًا، لنشر LFS، نحتاج إلى مساحة على القرص. يمكن أن يكون هذا قسمًا واحدًا (أو عدة أقسام) على محرك الأقراص الثابتة، أو قد يكون دليلاً في نظام الملفات المضيف. لقد استقرت على خيار وجود قسم على محرك الأقراص الثابتة لجهاز افتراضي، والذي قمت مسبقًا بتثبيت نظام Arch Linux 64 بت عليه.

الحد الأدنى للحجم المطلوب مساحة القرص- 4 غيغابايت. لقد قمت بإنشاء قسم منطقي بحجم 40 جيجابايت، وقمت بتنسيقه كـ EXT4. يجب تثبيت هذا القسم على النظام المضيف. من الملائم حفظ نقطة التثبيت في متغير بيئة خاص

# تصدير LFS=/mnt/lfs
لأننا سنضطر إلى اللجوء إلى هذا المسار في كثير من الأحيان. نقوم بتثبيت القسم باستخدام الأوامر (في حالتي هو قسم sda6، وفي قسمك سيكون مختلفًا على الأرجح)

# mkdir -v $LFS # mount /dev/sda6 $LFS

نحتاج الآن إلى إنشاء مجلدين: $LFS/sources - لتخزين كرات القطران مع المصادر؛ $LFS/tools - لوضع أدوات بناء النظام المؤقتة

# mkdir -v $LFS/sources # mkdir -v $LFS/tools
قم بتعيين الحقوق إلى دليل LFS/sources $: الكتابة مسموحة (+w) لجميع المستخدمين (أ) مع إمكانية الحذف فقط من قبل مالك الدليل (t)

# chmod -v a+wt $LFS/sources
نقوم بتحميل ملفين إلى دليل $LFS/sources - قائمة الحزم التي تم تنزيلها wget-list وقائمة المجاميع الاختبارية للحزم md5sums

# wget http://www.linuxfromscratch.org/lfs/view/stable/wget-list --directory-prefix=$LFS/sources # wget http://www.linuxfromscratch.org/lfs/view/stable/md5sums --directory-prefix=$LFS/sources
مفتاح --directory-prefixيحدد المسار الذي يجب وضع الملف الذي تم تنزيله فيه. بعد ذلك، ننتقل إلى تنزيل مصادر كل شيء وأي شيء يتعين علينا تثبيته

# wget --input-file=$LFS/sources/wget-list --continue --directory-prefix=$LFS/sources
مفتاح --input-fileيشير إلى ملف يحتوي على قائمة عناوين URLالحزم القابلة للتنزيل؛ --يكمل- يتيح استئناف الملفات التي تم تنزيلها جزئيًا في حالة انقطاع الاتصال بالشبكة. سيتم تنزيل حوالي 325 ميجابايت من الأرشيفات مع مصادر البرامج المطلوبة بالإضافة إلى التصحيحات اللازمة للتجميع. بعد التنزيل، تحتاج إلى التحقق من سلامة الحزم التي تم تنزيلها

# Pushd $LFS/source # md5sum -c md5sums # popd
الفحص نفسه عبارة عن استدعاء للأداة المساعدة md5sum، التي تحسب المجموع الاختباري لجميع الملفات الموجودة في قائمة md5sums التي تم تمريرها كمعلمة وتقارن النتيجة بالقيمة المحددة في نفس القائمة. والنتيجة إذا نجحت ستكون هكذا

نتيجة التحقق من سلامة الحزمة

acl-2.2.52.src.tar.gz: الهدف
attr-2.4.47.src.tar.gz: الهدف
autoconf-2.69.tar.xz: الهدف
automake-1.15.tar.xz: الهدف
bash-4.3.30.tar.gz: الهدف
bc-1.06.95.tar.bz2: الهدف
binutils-2.25.tar.bz2: الهدف
البيسون-3.0.4.tar.xz: الهدف
bzip2-1.0.6.tar.gz: الهدف
check-0.9.14.tar.gz: الهدف
coreutils-8.23.tar.xz: الهدف
dejagnu-1.5.2.tar.gz: الهدف
diffutils-3.3.tar.xz: الهدف
eudev-2.1.1.tar.gz: الهدف
eudev-2.1.1-manpages.tar.bz2: الهدف
e2fsprogs-1.42.12.tar.gz: الهدف
expat-2.1.0.tar.gz: الهدف
توقع5.45.tar.gz: الهدف
file-5.22.tar.gz: الهدف
findutils-4.4.2.tar.gz: الهدف
flex-2.5.39.tar.bz2: الهدف
gawk-4.1.1.tar.xz: الهدف
gcc-4.9.2.tar.bz2: الهدف
gdbm-1.11.tar.gz: الهدف
gettext-0.19.4.tar.xz: الهدف
glibc-2.21.tar.xz: الهدف
gmp-6.0.0a.tar.xz: الهدف
gperf-3.0.4.tar.gz: الهدف
grep-2.21.tar.xz: الهدف
جروف-1.22.3.tar.gz: الهدف
grub-2.02~beta2.tar.xz: الهدف
gzip-1.6.tar.xz: الهدف
iana-etc-2.30.tar.bz2: الهدف
inetutils-1.9.2.tar.gz: الهدف
intltool-0.50.2.tar.gz: الهدف
iproute2-3.19.0.tar.xz: الهدف
kbd-2.0.2.tar.gz: الهدف
kmod-19.tar.xz: الهدف
less-458.tar.gz: الهدف
lfs-bootscripts-20150222.tar.bz2: الهدف
libcap-2.24.tar.xz: الهدف
libpipeline-1.4.0.tar.gz: الهدف
libtool-2.4.6.tar.xz: الهدف
linux-3.19.tar.xz: الهدف
m4-1.4.17.tar.xz: الهدف
make-4.1.tar.bz2: الهدف
man-db-2.7.1.tar.xz: الهدف
man-pages-3.79.tar.xz: الهدف
mpc-1.0.2.tar.gz: الهدف
mpfr-3.1.2.tar.xz: الهدف
ncurses-5.9.tar.gz: الهدف
patch-2.7.4.tar.xz: الهدف
بيرل-5.20.2.tar.bz2: الهدف
pkg-config-0.28.tar.gz: الهدف
procps-ng-3.3.10.tar.xz: الهدف
psmisc-22.21.tar.gz: الهدف
readline-6.3.tar.gz: الهدف
sed-4.2.2.tar.bz2: الهدف
Shadow-4.2.1.tar.xz: الهدف
sysklogd-1.5.1.tar.gz: الهدف
sysvinit-2.88dsf.tar.bz2: الهدف
tar-1.28.tar.xz: الهدف
tcl8.6.3-src.tar.gz: الهدف
texinfo-5.2.tar.xz: الهدف
tzdata2015a.tar.gz: الهدف
udev-lfs-20140408.tar.bz2: الهدف
util-linux-2.26.tar.xz: الهدف
vim-7.4.tar.bz2: الهدف
XML-Parser-2.44.tar.gz: الهدف
xz-5.2.0.tar.xz: الهدف
zlib-1.2.8.tar.xz: الهدف
bash-4.3.30-upstream_fixes-1.patch: الهدف
bc-1.06.95-memory_leak-1.patch: الهدف
bzip2-1.0.6-install_docs-1.patch: الهدف
coreutils-8.23-i18n-1.patch: الهدف
glibc-2.21-fhs-1.patch: الهدف
kbd-2.0.2-backspace-1.patch: الهدف
mpfr-3.1.2-upstream_fixes-3.patch: الهدف
readline-6.3-upstream_fixes-3.patch: الهدف
sysvinit-2.88dsf-consolidated-1.patch: الهدف


لقد أولت اهتمامًا خاصًا لعدد من أوامر Pushd/popd. على الرغم من أنني مستخدم Linux مقتنع أستخدمه لفترة طويلة هذا النظام، كانت أوامر bash الداخلية هذه جديدة بالنسبة لي. ومع ذلك، فهي مريحة للغاية عندما يتعين عليك التنقل بشكل متكرر حول نقاط مختلفة في نظام الملفات ثم العودة مرة أخرى. ينقلك أمر Pushd مؤقتًا إلى الدليل المحدد كمعلمة. تتم العودة باستخدام الأمر popd. في هذه الحالة، يتم تنظيم المسار الذي تقفز فيه في شكل مكدس ولا تحتاج إلى إعادة إدخال المسار الذي يمكنك من خلاله العودة مرة أخرى.

الآن لدينا كل ما نحتاجه لبدء التجميع، لكننا نحتاج فقط إلى القيام ببعض الأعمال التحضيرية النهائية.

4. تهيئة بيئة العمل

أولاً، لنقم بإنشاء رابط رمزي لمجلد $LFS/tools في جذر النظام المضيف

# ln -sv $LFS/tools /
لماذا هذا؟ بشكل عام، لماذا نحتاج إلى روابط رمزية؟ تم إنشاؤها لتوفير وصول موحد إلى نقاط معينة في نظام الملفات. في الوقت الحالي، في النظام المضيف، يبدو المسار إلى هذا الدليل مثل /mnt/lfs/tools. عندما ننتقل إلى نظام مؤقت، سيكون جذره موجودًا في /mnt/lfs، في هذا النظام المؤقت ستكون محتويات الدليل متاحة في /tools. ستصل هذه الأدوات الأساسية التي سنجمعها إلى هذا الدليل عبر المسار /tools، بغض النظر عن مكان إطلاقها - سيتم ربط هذا المسار في الثنائيات بعد التجميع. لذلك، من خلال إنشاء الرابط المحدد، فإننا نوفر القدرة على الوصول إلى هذا الدليل عبر المسار /tools، بغض النظر عن الموقع الحالي لجذر النظام. خلاف ذلك، مباشرة بعد التحول إلى نظام مؤقت، سنواجه فشلًا في التجميع الأول.

الآن دعونا ننشئ مجموعة جديدةومستخدم جديد سنعمل نيابة عنه في المرحلة الأولى لتجميع النظام المؤقت. من المؤكد أنك لا يجب أن تعمل كجذر - على سبيل المثال، عند تكوين حزمة ليتم تثبيتها، قد تخلط أو تنسى تعيين بادئة لدليل التثبيت وتثبيت الحزمة المجمعة على النظام المضيف يمكن أن يعطلها (أو يعقد العمل) مدير الحزمفي المستقبل). إن العمل كمستخدم لا يتمتع بأي امتيازات ولديه أذونات الكتابة لأدلة معينة فقط سيسمح لك بتجنب المشاكل.

# groupadd lfs # useradd -s /bin/bash -g lfs -m -k /dev/null lfs
يقوم الأمر الأول بإنشاء مجموعة lfs. والثاني يقوم بإنشاء lfs المستخدم. معنى المعلمات هو كما يلي:

  • -s /bin/bash - واجهة الأوامر المستخدمة في جلسة المستخدم
  • -g lfs - المجموعة التي ينتمي إليها المستخدم
  • -m - يحدد أنه يجب إنشاء الدليل الرئيسي للمستخدم /home/lfs
  • -k /dev/null - دليل القالب الفارغ. بشكل افتراضي، عند إنشاء دليل رئيسي، يتم وضع الملفات والمجلدات الموجودة في /etc/skel فيه. إذا رغبت في ذلك، يمكن تغيير هذا القالب، ولكننا نريد إنشاء دليل فارغ /home/lfs، والذي نشير إليه عن طريق تمرير ملف فارغ كقالب

قم بتعيين كلمة مرور لمستخدم lfs
#passwdlfs
واجعله مالكًا لمجلدي $LFS/sources و$LFS/tools

# chown -v lfs $LFS/sources # chown -v lfs $LFS/tools

تسجيل الدخول باسم lfs

#su-lfs
السمة في معلمات الأمر (اختصار لـ key أو --تسجيل الدخول) يدل على ذلك مستخدم معينتحتاج إلى إنشاء جلسة "نظيفة" لا ترث قيم متغيرات البيئة من الجلسة السابقة. في هذه الجلسة سنقوم بإنشاء مجموعتنا الخاصة من متغيرات البيئة

إنشاء ملفات في الدليل الرئيسي للمستخدم

~/.bash_profile
/$ القط> ~/.bash_profile<< "EOF" >exec env -i HOME=$HOME TERM=$TERM PS1="\u:w\$ " /bin/bash > EOF
~/.bashrc
/$ القط> ~/.bashrc<< "EOF" >set +h > umask 022 > LFS=/mnt/lfs > LC_ALL=POSIX > LFS_TGT=$(uname -m)-lfs-linux-gnu > PATH=/tools/bin:/bin:/usr/bin >export LFS LC_ALL LFS_TGT PATH> EOF

يحدد الملف ~/.bash_profile تخصيص المستخدم لمتغيرات البيئة. فريق

Exec env -i HOME=$HOME TERM=$TERM PS1="\u:W\$ " /bin/bash
ينشئ بيئة مستخدم "نظيفة" (مفتاح -أنايحدد تجاهل الإعدادات السابقة) عن طريق تعيين قيم لمتغيرات البيئة

  • HOME - الدليل الرئيسي، قم بتعيين القيمة الحالية للمتغير الذي يساوي /home/lfs
  • TERM - نوع المحطة المراد استخدامها، ونترك أيضًا المحطة الحالية
  • PS1 - تنسيق الدعوة سطر الأوامر. في هذه الحالة، يتم تعيين التنسيق كاسم مستخدم: دليل العمل الحالي$، حيث الحرف الخاص \u هو اسم المستخدم، \W هو دليل العمل الحالي.
  • /bin/bash - الأمر الذي يبدأ نسخة Shell جديدة

يحدد الملف ~/.bashrc الإعدادات التي يجب إجراؤها عند تسجيل الدخول إلى جلسة مستخدم معين

  • set +h - تعطيل التجزئة في bash. تتذكر قذيفة الأوامر المسارات إلى الملفات القابلة للتنفيذ، تم إطلاقه في وقت سابق، مما يؤدي بالتأكيد إلى تسريع النظام. ومع ذلك، سوف ندعو إصدارات مختلفةنفس البرامج تقع على مسارات مختلفة، لذا فإن التجزئة لن تؤدي إلا إلى الإضرار بنا.
  • umask 022 - سيحدد حقوق الوصول الافتراضية إلى الملفات والأدلة الجديدة. تعني القيمة 022 أنه سيتم إنشاء الملفات بالحقوق 644 (rw- r-- r--) والأدلة بالحقوق 755 (rwx r-x r-x). تعني كل مجموعة بتات umask أنه تتم إعادة تعيين البت المقابل في سمات الحقوق
  • LFS=/mnt/lfs - جذر النظام الذي يتم تجميعه
  • LC_ALL=POSIX - يحدد توطين البرامج التي تم إطلاقها. يحدد POSIX معيار عرض مستقل عن طريقة ترميز الأحرف.
  • LFS_TGT - يحدد وصف الجهاز المستهدف المستخدم عند إنشاء أدوات إنشاء النظام المؤقتة
  • PATH - مسارات البحث عن الملفات القابلة للتنفيذ
  • تصدير - يعين القيم المحددة أعلاه للمتغيرات المحددة

بشكل منفصل، يجب الانتباه إلى طريقة إنشاء الملفات. لماذا نستخدم الأمر cat، لماذا لا يمكننا استخدام محرر وحدة التحكم المفضل لدينا؟ حسنًا، طالما أننا على النظام المضيف، محرر النصوصمتاح لنا. لكن عندما نتحول إلى النظام المؤقت، لن يكون لدينا أي محرر. ولذلك، يجب عليك استخدام الأمر cat، الذي يعيد توجيه دفق الإخراج من ملف إلى آخر. لم يتم تحديد ملف الإدخال، مما يعني أنه سيتم استخدام دفق الإدخال القياسي. ملف الإخراج هو الملف الذي نقوم بإنشائه، وشرط الإنهاء هو ظهور تسلسل أحرف نهاية الملف - EOF - في دفق الإدخال. بعد إدخال الأمر، سنكون قادرين على كتابة نص الملف الذي تم إنشاؤه مباشرة في الجهاز. لإنهاء العملية، أدخل السطر EOF. بهذه الطريقة نحول غلاف الأوامر إلى محرر نصوص بدائي.

سيتم تنفيذ البرامج النصية التي تم إنشاؤها في كل مرة تقوم فيها بتسجيل الدخول نيابة عن lfs. لنقم بتحديث بيئة المستخدم باستخدام الأمر

/$ المصدر ~/.bash_profile

تأكد من تعيين متغيرات البيئة الضرورية
/$مجموعة

5. تجميع مجموعة مؤقتة من الأدوات (النظام المؤقت)

عندما نبدأ في تجميع النظام، نواجه مشكلة "الدجاجة والبيضة" الكلاسيكية. لبناء النظام نحتاج إلى مترجم، رابط ومكتبات. لكن ليس لدينا أي مما سبق، فقط مصادرهم. لدينا مترجم على النظام المضيف، وسنبدأ في جمع البرامج اللازمة معه. ومع ذلك، إذا قمت ببساطة ببناء نفس gcc بالإعدادات الافتراضية، فلن يعمل في نظام LFS في المرحلة الأولى من إنشائه - فهو يستخدم الارتباط الديناميكي للمكتبات اللازمة للتشغيل. يجب ربط كافة التعليمات البرمجية اللازمة للعمل بشكل ثابت، أي تضمينها بشكل صريح في الملف القابل للتنفيذ.

لذا فإن أول شيء سنفعله هو تجميع بعض الأجزاء النظام المستقبليلتتمكن من استخدامها عند تجميع نسخته النهائية.

يتم تنفيذ كافة الأعمال المتعلقة بتجميع النظام المؤقت في الدليل $LFS/sources، لذلك دعونا نذهب إلى هناك

/$ cd $LFS/sources
بالنسبة لجميع الحزم التي يتم إنشاؤها، يحتوي أمر الإنشاء على تسلسل الإجراءات التالي (ما لم يُنص على خلاف ذلك!):

  • قم بفك ضغط الأرشيف باستخدام الحزمة
    $ القطران -pxf
  • انتقل إلى الدليل الذي تم فك حزمه
    قرص مضغوط $
  • نحن نتبع تعليمات التجميع (تحتوي كل حزمة على فروق دقيقة موصوفة بالتفصيل في الوثائق)
  • انتقل إلى الدليل أعلاه، ثم ارجع إلى $LFS/source، واحذف جميع الأدلة التي تم إنشاؤها أثناء التفريغ والتجميع

يختلف الوقت المستغرق لإنشاء الحزم - من فوري تقريبًا إلى ساعتين ونصف الساعة (يستغرق إنشاء دول مجلس التعاون الخليجي بعد عملية الجذر مع جميع الاختبارات تلك المدة تقريبًا). ونظرًا لاختلاف سرعات الكمبيوتر، يتم اختيار وحدة نسبية تسمى وحدة البناء القياسية (SBU) لقياس وقت البناء. وحدة SBU واحدة تساوي وقت إنشاء حزمة binutils التي تم تجميعها أولاً. يمكن تقدير مدة 1.0 SBU تقريبًا لنظامك، ولكن المزيد عن ذلك أدناه، في الوقت الحالي

توصية: لا تقم بتجميع النظام في مواضيع متعددة. إذا كان لديك معالج متعدد النواة، فسيعمل المفتاح -j على تسريع العمل، ولكن قد يؤدي ذلك لاحقًا إلى فشل بعض الاختبارات المهمة والتشغيل غير المستقر للبرنامج المجمع. لا يستغرق التجميع في خيط واحد وقتًا طويلاً - سيتم قضاء المزيد من الوقت في حل المشكلات الناتجة عن التجميع متعدد الخيوط.

لن نقوم بتغطية بناء كل حزمة - كتاب LFS نفسه يغطي ذلك. ومع ذلك، سنركز على بعض الفروق الدقيقة في التجميع، والنظر في تجميع الحزم الأكثر أهمية

6. بناء بينوتيلز - الممر الأول. قياس ادارة امن الدولة

Binutils عبارة عن حزمة تحتوي على أدوات مساعدة لبناء البرامج. وتشمل هذه المجمّع (as) والرابط (ld). هناك حاجة إليها من قبل glibc وgcc لاجتياز بعض الاختبارات، لذلك هذه الحزمةالذهاب أولا.

قم بفك ضغط الأرشيف وانتقل إلى الدليل بمحتوياته

$ القطران -pxf binutils-2.25.tar.bz2 $ cd binutils-2.25

$ mkdir -v ../binutils-build $ cd ../binutils-build

نحتاج الآن إلى تكوين الحزمة لإنشاء ملف Makefile الصحيح.

$ ../binutils-2.25/configure \ > --prefix=/tools \ > --with-sysroot=$LFS \ > --with-lib-path=/tools/lib \ > --target=$LFS_TGT \ > --disable-nls \ > --disable-werror

اهتمام خاص بالمفاتيح:

  • --prefix=/tools- يدل على ذلك الحزم المجمعةسيتم تثبيته في الدليل /tools، حيث سيتم وضع النظام المؤقت
  • --with-sysroot=$LFS- الدليل الجذر للنظام الذي سيتم من خلاله البحث عن المكتبات والموارد الأخرى اللازمة لتشغيل البرامج في النظام المؤقت
  • --with-lib-path=/tools/lib- مسار البحث في المكتبة المحدد للرابط ld
  • --target=$LFS_TGT- تعيين وصف للجهاز المستهدف
  • --disable-nls- تعطيل تدويل الحزم المجمعة. في هذه اللحظة ليس من الضروري، ووجودها يمكن أن يسبب عددا من الإخفاقات
  • --تعطيل الخطأ- تعطيل إيقاف الترجمة عند تلقي تحذيرات من مترجم النظام المضيف

بعد تشغيل المكوّن، فإن الناتج الذي نحصل عليه هو ملف Makefile مخصص لبناء الحزمة وتثبيتها. نقوم بتجميع الحزمة وقياس SBU

$ الوقت (جعل؛)
يتم قياس الوقت بواسطة الأداة المساعدة الوقت (...)، والتي تُرجع وقت تنفيذ الأوامر المحاطة بأقواس متعرجة. وهذا سيعطي فرصة تقريبًاقم بتقدير SBU للحصول على فكرة عن وقت إنشاء الحزم المتبقية.

ملحوظة: يوصي LFS بقياس وقت تكوين البناء والتثبيت. لكن هذه التوصية واسعة النطاق. يتم قضاء معظم وقت تشغيل الجهاز في التصنيع والاختبار. بالإضافة إلى ذلك، قد تكون هناك إجراءات أخرى يتم تنفيذها بين make وmake install والتي يتعين عليك التعمق فيها. لذلك قررت إجراء التقييم بالطريقة الموضحة أعلاه، مع الأخذ في الاعتبار الطبيعة التقريبية للقياس، والتي لا يزال يتم تحديدها من خلال حمل النظام الإجمالي للأعمال الأخرى.

بالنسبة لنظامي - الآلة الافتراضيةعلى 4 النوى إنتل كور i7 مع 4096 ميجابايت من ذاكرة الوصول العشوائي التي تعمل أعلى المضيف على نفس Intel Core i7-2600K (4 مراكز مع التداول الفائق) مع 16 جيجابايت من ذاكرة الوصول العشوائي - كان SBU دقيقتين و 32 ثانية عند تجميعه في موضوع واحد.

يتم توفير وقت البناء للحزم المتبقية في الكتاب في أجزاء من SBU، لذا يمكنك الآن تقدير وقت البناء التقريبي لكل شيء آخر، وبالتالي التخطيط لعملك (على سبيل المثال، تشغيل البناء النهائي، وبناء دول مجلس التعاون الخليجي، جنبًا إلى جنب مع الاختبارات و اذهب وافعل أشياء أخرى، لأن الأمر كله يتطلب 63 وحدة SBU - نأمل ألا يحدق في الشاشة)

بعد اكتمال البناء، نقوم بإنشاء روابط رمزية لأدلة المكتبة. تعد هذه العملية ضرورية إذا كان نظامك 64 بت، لذا فإن الأمر أدناه يتحقق أولاً من معدل البت في النظام، ثم يقوم بعد ذلك فقط بإنشاء روابط رمزية إذا لزم الأمر.

$ الحالة $(uname -m) in > x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; >esac
بعد هذا نقوم بتثبيت المجمعة

$ قم بالتثبيت
نصعد إلى الطابق العلوي ونحذف الدلائل التي لم تعد هناك حاجة إليها

$ cd .. $ rm -r binutils-2.25 $ rm -r binutils-build

7. بناء مجلس التعاون الخليجي - الممر الأول

أثناء عملية بناء النظام، يجب بناء المترجم ثلاث مرات. يعد التمريران الأولان ضروريين للحصول على مترجم يمكن تشغيله بشكل مستقل عن النظام المضيف. في المرة الأولى، سنستخدم الارتباط الثابت لكل التعليمات البرمجية الضرورية، وسنقوم أيضًا بإجراء بعض الإعدادات الإضافية.

أولاً، قم بفك ضغط الأرشيف بالمصادر وانتقل إلى الدليل الذي تم إنشاؤه

$ tar -pxf gcc-4.9.2.tar.bz2 $ cd ../gcc-4.9.2

للتجميع الناجح، نحتاج إلى مصادر ثلاث حزم أخرى: GMP وMPFR وMPC. دعونا نفكها في دليل مصدر المترجم ونعيد تسمية الدلائل كما تمت الإشارة إليها في مصادر دول مجلس التعاون الخليجي

$ tar -pxf ../gmp-6.0.0a.tar.xz $ tar -pxf ../mpfr-3.1.2.tar.xz $ tar -pxf ../mpc-1.0.2.tar.gz $ mv -v gmp-6.0.0a gmp $ mv -v mpfr-3.1.2 mpfr $ mv -v mpc-1.0.2 mpc
بالإضافة إلى ذلك، سيتعين عليك تعديل مصادر مجلس التعاون الخليجي. الحقيقة هي أن مسار البحث عن الرابط ld محدد فيها كما هو الحال في نظام التشغيل العادي. في حالتنا، الرابط موجود في الدليل /tools (تم إنشاؤه كجزء من binutils). يجب أن تشير بعض تعريفات الماكرو أيضًا إلى /tools، لذلك نقوم بتحويل المصادر باستخدام الأمر الوحشي

$ للملف في \ > $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h) > do > cp -uv $file(,.orig) > sed -e " s@/lib\(64\)\?\(32\)\?/ld@/tools&@g" \ > -e "s@/usr@/tools@g" $file.orig > $file > echo " > #undef STANDARD_STARTFILE_PREFIX_1 > #undef STANDARD_STARTFILE_PREFIX_2 > #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/" > #define STANDARD_STARTFILE_PREFIX_2 """ >> $file > المس $file.orig > تم
هممممم... النظرة الأولى لهذا الفريق ملأتني بالرعب. في الواقع، يتم تكرار الملفات inux64.h وlinux.h وsysv4.h هنا، بشرط أن تكون موجودة في دليل gcc/config. يتم نسخ كل واحد منهم إلى ملف جديد باللاحقة *.orig (نحفظ المصادر الأصلية - ثم سيتم وضعها كدفق إدخال لـ sed)، ثم يتم استبدال ld في كل من الملفات /الأدوات التي تم العثور عليها يتم استبدال مسار بحث الرابط و/usr بـ/tools. بالإضافة إلى ذلك، تتم إضافة تجاوز وحدات الماكرو STANDARD_STARTFILE_PREFIX_1 وSTANDARD_STARTFILE_PREFIX_2 إلى نهاية كل ملف بحيث تشير إلى المسارات الصحيحة إلى المكتبات. بعد ذلك، يتم تعديل الوقت باستخدام أمر اللمس التغيير الأخيرجميع الملفات التي تمت معالجتها إلى الملف الحالي، والذي، بالاشتراك مع رمز التبديل -u للأمر cp (انسخ إذا كان الملف المصدر أحدث من الملف الوجهة)، يمنع التغييرات غير المرغوب فيها عند تكرار الأمر عن طريق الخطأ.

بضع كلمات حول بناء الجملة sed في هذا المثال

sed هو محرر نصوص متدفق يقوم بتنفيذ العمليات على الملفات النصية باستخدام الأنماط المحددة بواسطة التعبيرات العادية.

عندما فتحت LFS لأول مرة، كان لدي نفس الفهم لبناء جملة sed مثل طلاب دورة الفن ليوناردو دا فينشي. زراعة. ومع ذلك، قادني البحث المستمر عبر Google إلى الأفكار التالية:

  • نظرًا لأن المسارات التي تتم معالجتها تحتوي على الرمز "/"، فإن sed يستخدم الرمز "@" بدلاً من فاصل المعامل
  • إنشاءات النموذج "\(64\)\؟" و"\(32\)\؟" أخبر sed أن سلسلة البحث قد تحتوي أو لا تحتوي على السلسلتين "64" و"32" - يجب إجراء العملية في كلتا الحالتين.
  • يشير الرمز "&" إلى أنه سيتم وضع /tools قبل سلاسل البحث (أي أن التعبير الذي تم العثور عليه سيكون بدلاً من "&")

وبالتالي، قمت بتحليل التعبير "s@/lib\(64\)\?\(32\)\?/ld@/tools&@g" - ابحث عن جميع الأسطر التي تحتوي على "/lib" و"/lib64" و" / lib32" واسبقها بالسطر "/tools"، والتعبير "s@/usr@/tools@g" - ابحث عن جميع الأسطر التي تحتوي على "/usr" واستبدلها بـ "/tools"


بشكل عام، فإن تجميع النظام المؤقت (والنظام الرئيسي أيضًا) مشبع حرفيًا باستخدام مثل هذه الهياكل. يُنصح بمحاولة فهم معناها وكتابة الأوامر بيديك. وبعد ذلك، بحلول نهاية عملية التجميع، سيتم إطلاعك على العديد من المشكلات المتعلقة بتقنيات معالجة النصوص والعمل في وحدة التحكم *nix.

الأمر التالي:

$ sed -i "/k prot/agcc_cv_libc_provides_ssp=yes" gcc/configure
يقوم بتصحيح البرنامج النصي للتكوين، ولكن في حالتي لم يتم إجراء أي تغييرات عليه. وفقًا للكتاب، فهو يهدف إلى تغيير طبيعة كيفية عمل دول مجلس التعاون الخليجي مع حماية المكدس.

$ ../gcc-4.9.2/configure \ > --target=$LFS_TGT \ > --prefix=/tools \ > --with-sysroot=$LFS \ > --with-newlib \ > --without- الرؤوس \ > --with-local-prefix=/tools \ > --with-native-system-header-dir=/tools/include \ > --disable-nls \ > --disable-shared \ > --disable -multilib \ > --disable-decimal-float \ > --disable-threads \ > --disable-libatomic \ > --disable-libgomp \ > --disable-libitm \ > --disable-libquadmath \ > -- Disable-libsanitizer \ > --disable-libssp \ > --disable-libvtv \ > --disable-libcilkrts \ > --disable-libstdc++-v3 \ > --enable-languages=c,c++

المفاتيح لها المعنى التالي:

  • --with-newlib- يمنع تجميع أي كود يتطلب دعم libc - ليس لدينا هذه المكتبات بعد، سيتم تجميعها لاحقا
  • --بدون رؤوس- تعطيل استخدام ملفات الرأس القياسية، والتي ليست متاحة لنا بعد
  • --with-local-prefix=/tools- المسار المحلي حيث سيبحث مجلس التعاون الخليجي عن ملفات الرأس. بشكل افتراضي قيمته هي /usr/local
  • --with-native-system-header-dir=/tools/include- مسار البحث عن رؤوس النظام
  • --تعطيل المشاركة- يشير إلى أنه يجب ربط جميع أكواد المكتبة بشكل ثابت
  • --disable-decimal-float، --disable-threads، --disable-libatomic، --disable-libgomp، --disable-libitm، --disable-libquadmath، --disable-libsanitizer، --disable-libssp، --disable-libvtv، --disable-libcilkrts، --disable-libstdc++-v3- تعطيل جميع ملحقات المترجم غير الضرورية في هذه المرحلة - النقطة العائمة، وتعدد مؤشرات الترابط والتوازي، بالإضافة إلى مكتبة C++ القياسية وغير ذلك الكثير.
  • --disable-multilib- تعطيل دعم إنشاء تعليمات برمجية 32 بت في بيئة 64 بت
  • --enable-languages=c,c++- يقتصر على دعم C/C++

بعد تكوين التجميع بهذه الطريقة، نقوم بتنفيذه وتثبيت الحزمة
$ جعل $ جعل التثبيت

ثم نقوم بالتنظيف بعد أنفسنا
$ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2

8. تجميع باقي حزم النظام المؤقت

التقدم الإضافي في تجميع النظام المؤقت لا يحتاج إلى شرح وأحيل القارئ إلى كتاب LFS. الشيء الوحيد الجدير بالملاحظة هو أنه خلال العملية بأكملها سيتعين عليك تعديل المصادر وتثبيتها خيارات خاصةمكون، وينبغي أن تكون هذه العملية مدروسة وعلى مهل. يمكن أن يكون الخطأ في هذه المرحلة مكلفًا للغاية، ومن الصعب جدًا العثور عليه بالنسبة لمبتدئ غير مستعد.

سأقتصر على وصف الحد الأدنى من حزم النظام المؤقتة وبعض التفسيرات المهمة. بعد ذلك تحتاج إلى تثبيت دول مجلس التعاون الخليجي

  • رؤوس kernel Linux-3.19 - مطلوبة من قبل مكتبات GLibc
  • Glibc-2.21 هي مكتبة C الرئيسية التي توفر تخصيص الذاكرة ومعالجة نظام الملفات والحسابات الأساسية.

    بعد بناء Glibc، تحتاج إلى إجراء الاختبار الأول للمترجم المجمع. نقوم بإنشاء برنامج بدائي ونقوم بتجميعه باستخدام مترجم من مجموعة مؤقتة

    $ echo "main()()" > dummy.c $ $LFS_TGT-gcc dummy.c

    قم بتحليل الثنائي الناتج لمعرفة وجود ومحتوى مسار البحث لمحمل المكتبة الديناميكي

    $ readelf -f a.out | grep ": / الأدوات"
    في حالتي حصلت على النتيجة التالية:


    مما يدل على الرابط الصحيح للرابط. يعطي الكتاب النتيجة لنظام 32 بت، لكنني قمت بتجميع نظام 64 بت، والمسار الموضح هنا يختلف عن ذلك المشار إليه في الكتاب.

    بعد التأكد من أن كل شيء على ما يرام، قم بحذف برنامج الاختبار
    $ rm -v dummy.c a.out

  • Libstdc++-4.9.2 - مكتبات C++ القياسية الضرورية لتشغيل مترجم g++
  • Binutils-2.25 - تمريرة البناء الثانية، مع الأخذ بعين الاعتبار بالفعل الحزم المثبتة. يتم تنفيذ التجميع باستخدام المترجم وأرشيفي ar (المضمن في binutils) والمكتبات المجمعة بالفعل في المرور الأول والمكتبات المحددة من خلال متغيرات البيئة CC وAR وRANLIB

    $ CC=$LFS_TGT-gcc \ > AR=$LFS_TGT-ar \ > RANLIB=$LFS_TGT-ranlib \ >../binutils-2.25/configure \ > --prefix=/tools \ > --disable-nls \ > --disable-werror \ > --with-lib-path=/tools/lib \ > --with-sysroot

  • مجلس التعاون الخليجي-4.9.2 - التمريرة الثانية، يتم إجراؤها عن طريق النظام المؤقت

    $ CC=$LFS_TGT-gcc \ > CXX=$LFS_TGT-g++ \ > AR=$LFS_TGT-ar \ > RANLIB=$LFS_TGT-ranlib \ > ../gcc-4.9.2/configure \ > --prefix=/ أدوات \ > --with-local-prefix=/tools \ > --with-native-system-header-dir=/tools/include \ > --enable-languages=c,c++ \ > --disable-libstdcxx- pch \ > --disable-multilib \ > --disable-bootstrap \ > --disable-libgomp

    عندما يتم إنشاء الحزم، يتم إدخالها تدريجيًا في الإنتاج، مما يجعلنا أكثر وأكثر استقلالية عن النظام المضيف. في هذه المرحلة، من الضروري إعادة اختبار المترجم

    $ echo "main()()" > dummy.c $ cc dummy.c $ readelf -l a.out | grep ": /tools" $ $ rm -r dummy.c a.out

  • Tcl-8.6.3 - حزمة دعم لغة Tcl المطلوبة من قبل المترجم لتشغيل الاختبارات.
  • توقع-5.45 - أداة أتمتة الاختبار المستخدمة كملحق Tcl
  • DejaGNU-1.5.2 - إطار لكتابة اختبارات البرنامج
  • Check-0.9.14 - إطار عمل لتنظيم اختبارات الوحدة لبرامج C
  • Ncurses-5.9 عبارة عن مكتبة لتنظيم واجهة مستخدم طرفية زائفة، تُستخدم على وجه الخصوص بواسطة بعض أدوات التكوين المساعدة (بما في ذلك عند تكوين بنية Linux kernel) وبرنامج شائع مثل mc.
  • باش-4.3.30 - قذيفة الأوامر. لا تعليقات.
  • Bzip2-1.0.6 - دعم أرشيفات bzip2.
  • Coreutils-8.23 هي إحدى الحزم الأساسية لبيئة GNU، وتحتوي على أوامر shell خارجية مثل cat وls وrm وما إلى ذلك.
  • Diffutils-3.3 - أدوات مساعدة لمقارنة الملفات والأدلة.
  • File-5.22 - أدوات مساعدة لتحديد أنواع الملفات.
  • Findutils-4.4.2 - أدوات مساعدة للبحث في الملفات والأدلة. أنه يحتوي، على سبيل المثال، على الاكتشاف المستخدم على نطاق واسع
  • Gawk-4.1.1 - تنفيذ GNU للأداة المساعدة awk - التحليل والمعالجة سطرًا تلو الآخر ملفات نصيةوتدفقات الإدخال الأخرى.
  • Gettext-0.19.4 - حزمة من الأدوات المساعدة لدعم تدويل البرنامج.
  • Grep-2.21 - أداة مساعدة للبحث عن النص في دفق الإدخال
  • Gzip-1.6 - أرشيفي آخر
  • M4-1.4.17 - معالج ماكرو يستخدم بواسطة أدوات تكوين وتجميع البرامج
  • Make-4.1 - أداة مساعدة لبناء البرامج تلقائيًا
  • Patch-2.7.4 - أداة مساعدة للعمل مع تصحيحات التعليمات البرمجية المصدر
  • Perl-5.20.2 - مترجم لغة بيرل
  • Sed-4.2.2 - محرر النصوص المتدفقة
  • Tar-1.28 - أين سنكون بدونه؟
  • Texinfo-5.2 - أدوات مساعدة للعمل مع صفحات معلومات التوثيق
  • Util-linux-2.26 هي الحزمة الرئيسية لأدوات نظام Linux المساعدة. يحتوي، على سبيل المثال، جبل
  • Xz-5.2.0 هو أرشيفي آخر.

9. تقليم معلومات التصحيح

بعد تجميع كل شيء، لتوفير المساحة، يوصى بقطع معلومات التصحيح عن الثنائيات المجمعة. نحن نفعل ذلك في فرق

$ strip --strip-debug /tools/lib/* $ /usr/bin/strip --strip-unneeded /tools/(,s)bin/*

بالإضافة إلى ذلك، يمكنك حذف الوثائق التي تم تثبيتها ولكن لم تكن هناك حاجة إليها بعد - وسيظل يتم جمعها وتثبيتها مرة أخرى وهذه المرة للانتهاء.

$ rm -rf /tools/(,share)/(info,man,doc)

خلاصة القول

ونتيجة لذلك، أصبح لدينا نظام مؤقت موجود في دليل $LFS/tools، والذي سنذهب إليه في الخطوة التالية للتجميع النهائي لبيئة GNU وتكوين النظام. لكنني سأخبرك بهذا لاحقًا.

أشكركم على اهتمامكم بكتابتي!

1.1. كيفية تجميع نظام LFS

سيتم تجميع نظام LFS باستخدام النظام المثبت بالفعل توزيعة لينكس(على سبيل المثال ديبيان، ماندريفا، القبعة الحمراءأو سوزي). النظام الموجودسيتم استخدام Linux (النظام المضيف) كنظام بداية، حيث سيتم نقلهم لبناء نظام جديد البرامج الضرورية، بما في ذلك المترجم والرابط ومترجم الصدفة. لتتمكن من استخدام هذه الأدوات، حدد خيار "التطوير" أثناء تثبيت التوزيعة.

كبديل لتثبيت توزيعة منفصلة على جهازك، يمكنك استخدام قرص حي Linux From Scratch أو قرص حي خاص بتوزيع تجاري. يعمل LFS LiveCD بشكل جيد كنظام مضيف، حيث يوفر جميع الأدوات التي تحتاجها لاتباع الإرشادات الواردة في هذا الكتاب بنجاح. يعد استخدام القرص الحي (LiveCD) خارج نطاق هذا الكتاب، ولكن لا يزال من الممكن استخدامه كمضيف أثناء العمل على هذا الكتاب. الإصدارات الأكثر ملاءمة لإنشاء نظام LFS الحالي هي إصدارات LiveCD "-nosrc" أو "-min". للحصول على معلومات إضافيةحول LFS LiveCD أو لتنزيل نسخة، تفضل بزيارة http://www.linuxfromscratch.org/livecd/.

يصف الفصل الثاني من هذا الكتاب كيفية إنشاء قسم وملف جديدين أنظمة لينكس. هذا هو المكان الذي سيتم فيه تجميع نظام LFS الجديد وتثبيته. يشرح الفصل الثالث الحزم والتصحيحات التي يجب تنزيلها لبناء نظام LFS وأين يجب وضعها على نظام الملفات الجديد. ويناقش الفصل الرابع تهيئة بيئة العمل المناسبة. يرجى قراءة الفصل الرابع بعناية لأنه يشرح عددًا من القضايا المهمة التي تحتاج إلى معرفتها قبل الانتقال إلى الفصل الخامس فصاعدًا.

يشرح الفصل الخامس كيفية تثبيت عدد من الحزم التي سيتم استخدامها كمجموعة أدوات تطوير أساسية (أو مجموعة أدوات). سيتم استخدام هذه المجموعة في الفصل السادس لبناء النظام الفعلي. بعض هذه الحزم مطلوبة لحل التبعيات الدائرية، على سبيل المثال، تحتاج إلى مترجم لتجميع مترجم.

يوضح لك الفصل الخامس أيضًا كيفية القيام بالمرحلة الأولى لإنشاء مجموعة من الأدوات، والتي تتضمن Binutils وGC (تتضمن المرحلة الأولى بشكل أساسي إعادة تثبيت هاتين الحزمتين المهمتين). الخطوة التالية هي إنشاء Glibc، وسيتم تجميع مكتبة Glibc باستخدام البرامج المضمنة في مجموعة الأدوات وسيتم إنشاؤها أثناء المرحلة الأولى من التطوير. ستحتاج بعد ذلك إلى إجراء تمريرة ثانية لبناء سلسلة الأدوات. عند هذه النقطة، يجب أن تكون سلسلة الأدوات مرتبطة ديناميكيًا بمكتبة Glibc المبنية حديثًا. تم إنشاء الحزم الخاصة بالجزء المتبقي من الفصل الخامس باستخدام سلسلة الأدوات التي تم إنشاؤها في المرحلة الثانية من التطوير. بمجرد الانتهاء من ذلك، لن تعتمد عملية تثبيت LFS على توزيع النظام المضيف، باستثناء النواة قيد التشغيل.

قد يبدو هذا الجهد المبذول لعزل النظام الجديد عن توزيع النظام المضيف مبالغًا فيه. للحصول على شرح فني كامل لسبب القيام بذلك، راجع القسم 5.2 "الملاحظات الفنية لمجموعة الأدوات".

يجمع الفصل السادس نظام LFS بالكامل. برنامج chroot(تغيير الجذر) يستخدم لتسجيل الدخول البيئة الافتراضيةوإطلاق غلاف أوامر جديد، والذي سيكون الدليل الجذر له موجودًا في قسم LFS. وهذا مشابه جدًا لإعادة التشغيل وإخبار kernel بتركيب قسم LFS كقسم جذر. لا يتم إعادة تشغيل النظام فعليًا، ولكن إذا لم تستخدم الأمر chroot، فإن إنشاء نظام قابل للتمهيد سيتطلب عملاً إضافيًا ليس ضروريًا بعد. الميزة الرئيسية لهذا "التغيير الجذري" هي أنه يمكنك الاستمرار في استخدام النظام المضيف بينما لا يزال نظام LFS قيد التجميع. أثناء انتظار اكتمال تجميع الحزم، يمكنك الاستمرار في استخدام جهاز الكمبيوتر الخاص بك كالمعتاد.

لإكمال التثبيت، قم بتكوين LFS-Bootscripts كما هو موضح في الفصل 7، وقم بتكوين kernel ومحمل التشغيل كما هو موضح في الفصل 8. يوفر الفصل 9 معلومات حول كيفية استخدام نظام LFS بعد تثبيته تم إنجازه. بمجرد الانتهاء من جميع الخطوات الواردة في هذا الكتاب، سيكون المشروع مكتملًا وسيكون جهاز الكمبيوتر الخاص بك جاهزًا لإعادة التشغيل منه نظام جديد LFS.

هذا وصف موجزعملية. معلومات مفصلةيتم تناول كل خطوة في الفصول اللاحقة وأوصاف الحزمة. ما قد يبدو معقدًا سيصبح أكثر وضوحًا وسيصبح كل شيء في مكانه بمجرد البدء في جمع LFS.