أولا، تعلم البرمجة.مطلوب معرفة المجمع. يوصى أيضًا بشدة بفهم لغات البرمجة الإضافية ذات المستوى الأدنى، مثل C.
حدد الجهاز الذي تريد تحميل نظام التشغيل عليه.يمكن أن يكون هذا قرصًا مضغوطًا أو قرص DVD أو جهاز ذاكرة فلاش أو محرك أقراص ثابتة أو كمبيوتر آخر.
قرر الشكل الذي تريد أن يبدو عليه نظام التشغيل الخاص بك.هل ينبغي أن يكون نظام تشغيل كاملًا مزودًا بواجهة مستخدم رسومية (GUI) أو ربما شيء أكثر بساطة؟ عليك أن تعرف الاتجاه الذي يجب أن تسلكه قبل بدء العملية.
تحقق من النظام الأساسي للمعالج الذي سيدعمه نظام التشغيل الخاص بك.يعد AI-32 وx86_64 الإصدارين الأكثر شيوعًا لأجهزة الكمبيوتر الشخصية، لذا يمكن اعتبارهما الخيار الأفضل.
قرر ما إذا كنت تفضل القيام بكل شيء بنفسك من الصفر، أو ما إذا كانت هناك نواة ترغب في البناء عليها في النظام. Linux من الصفر هو مشروع لأولئك الذين يريدون، على سبيل المثال، إنشاء توزيعة Linux الخاصة بهم.
اختر ما إذا كنت ستستخدم أداة تحميل التشغيل الخاصة بك أو أداة تحميل التشغيل الكبرى الموحدة (GRUB) المُصممة مسبقًا. نظرًا لأن ترميز برنامج التمهيد الخاص بك يتطلب معرفة واسعة بأجهزة الكمبيوتر ونظام BIOS، فقد يؤدي ذلك إلى تأخير جدول البرمجة للنواة الحية.
اتخذ قرارًا بشأن لغة البرمجة التي ستستخدمها.بالطبع من الممكن جداً تطوير نظام تشغيل بلغة مثل Pascal أو BASIC، لكن من الأفضل كتابته بلغة C أو لغة التجميع. لغة التجميع ضرورية للغاية، حيث أن بعض الأجزاء المهمة من نظام التشغيل تتطلب معرفة هذه اللغة بالذات. من ناحية أخرى، يحتوي C++ على الكلمات الأساسية المطلوبة لتشغيل الإصدار الكامل من نظام التشغيل.
حدد واجهة برمجة التطبيقات (API).إحدى واجهات برمجة التطبيقات الجيدة هي POSIX، لأنها موثقة جيدًا. تتمتع جميع أنظمة Unix بدعم جزئي على الأقل لـ POSIX، لذلك سيكون من السهل تجميع برامج Unix في نظام التشغيل الخاص بك.
اتخاذ قرار بشأن التصميم.هناك حبات متجانسة و microkernels. تعمل النوى المتجانسة على تشغيل جميع الخدمات في النواة، بينما تحتوي النوى الميكروية على نواة صغيرة مقترنة بتنفيذ مخصص للخدمات. بشكل عام، تكون الحبات المتجانسة أسرع، لكن الحبيبات الدقيقة تتمتع بعزل وحماية أفضل ضد الأخطاء المحتملة.
النظر في التطوير والعمل الجماعي.بهذه الطريقة، ستقضي وقتًا أقل في حل المشكلات الكبيرة، مما يسمح لك بإنشاء نظام تشغيل أفضل في وقت أقل.
لا تمسح القرص الصلب الخاص بك بالكامل.تذكر أن تنسيق القرص سيؤدي إلى مسح جميع بياناتك بشكل دائم! استخدم GRUB أو مدير آخر لتكرار تشغيل جهاز الكمبيوتر الخاص بك من نظام تشغيل آخر حتى يصبح الإصدار الخاص بك جاهزًا للعمل بشكل كامل.
تبدأ صغيرة.انتبه إلى الأشياء الصغيرة أولاً، مثل عرض النص والانقطاعات، قبل الانتقال إلى العناصر المعقدة مثل إدارة الذاكرة وتعدد المهام.
احتفظ بنسخة احتياطية من أحدث نسخة صالحة للعمل.وهذا يوفر بعض راحة البال في حالة حدوث خطأ ما تمامًا في الإصدار الحالي من نظام التشغيل لديك أو الإضافات اللاحقة. إذا تعطل جهاز الكمبيوتر الخاص بك ولم يتمكن من التمهيد، كما تفهم أنت بنفسك، فإن الحصول على نسخة ثانية للعمل بها سيكون فرصة ممتازة، حتى تتمكن من إصلاح المشكلات الحالية.
اختبر نظام التشغيل الجديد الخاص بك على جهاز افتراضي.بدلاً من إعادة تشغيل جهاز الكمبيوتر الخاص بك في كل مرة تقوم فيها بإجراء تغييرات أو نقل الملفات من جهاز الكمبيوتر الخاص بك إلى جهاز الاختبار، يمكنك استخدام تطبيق لتشغيل نظام التشغيل في جهاز ظاهري بينما يستمر نظام التشغيل الحالي الخاص بك في التشغيل. تتضمن تطبيقات VM برنامج VMWare (الذي يحتوي أيضًا على خادم متاح مجانًا)، وبديل مفتوح المصدر، وBochs، وMicrosoft Virtual PC (غير متوافق مع Linux)، وXVM VirtualBox.
الافراج عن نسخة الإصدار.سيسمح هذا للمستخدمين بإخبارك عن العيوب المحتملة في نظام التشغيل الخاص بك.
يجب أن يكون نظام التشغيل أيضًا سهل الاستخدام، لذا تأكد من إضافة ميزات مفيدة تصبح جزءًا لا يتجزأ من تصميمك.
إحدى أفضل الطرق لتوفير الوقت في أي نشاط هي إنشاء نظام له. وتتمثل ميزته في أنه من خلال أتمتة عملك وتحسينه، تصبح أكثر إنتاجية ولديك المزيد من الوقت للمهام الأخرى التي تهمك.
النظام هو أسلوب أو إجراء أو روتين يتم إنشاؤه لأداء نشاط متكرر باستخدام استراتيجية. تسمح لك الأنظمة بإدارة عملك وحياتك بشكل أكثر كفاءة.
فيما يلي بعض مجالات الحياة التي يمكنك إنشاء نظامك الخاص لها:
ستسمح لك الخطوات الخمس التالية بإنشاء نظامك الخاص لأي نشاط تقريبًا.
ابدأ بتحديد الإجراءات التي تتخذها بانتظام، سواء في المنزل أو في العمل. قم بتحليل يومك وإلقاء نظرة على جميع الأنشطة التي تشكل جدولك اليومي. على سبيل المثال: الاستعداد للعمل/المدرسة في الصباح، وإعداد الأطفال للمدرسة، والتنقل، والرد على رسائل البريد الإلكتروني والمكالمات الهاتفية، وكتابة التقارير، والذهاب للركض في المساء، وطهي العشاء، وكتابة مشاركة مدونة، وتسويق كتابك، وما إلى ذلك.
انتقل إلى قائمة المهام المحددة للعنصر المحدد واسأل نفسك ما يلي:
بناءً على مخزونك، اختر نشاطًا واحدًا لتنظيمه.
قم بتنفيذ الإجراءات التي تريد تنظيمها باستخدام الإجراء العادي (أي التصرف كالمعتاد). قم بتوثيق العملية من خلال تسجيل كل ما يلي:
بعد ذلك قم بمراجعة الوثيقة المستلمة ودراستها.
النظام، كما ذكرنا سابقًا، هو عملية تقوم بإنشائها لتبسيط المهام وزيادة الكفاءة. ألقِ نظرة على المستند والنشاط الذي تريد تحسينه واطرح على نفسك الأسئلة التالية:
الآن قم بتدوين نظامك الجديد، مع إدراج كل خطوة بالتفصيل.
بمجرد أن يكون لديك خطة، عليك أن تضعها موضع التنفيذ على الفور. قد تحتاج إلى مساعدة من الآخرين أولاً، أو قد تحتاج إلى شراء برامج أو أدوات ترقية.
حان الوقت لتشغيل العملية واختبار عملها. افعل ذلك وانتبه إلى النتائج. اسأل نفسك الأسئلة التالية:
قم بإجراء التعديلات والتغييرات اللازمة. قم بتحديث نظامك حتى تحصل على النتائج التي تريدها.
يجدر مراقبة نظامك باستمرار، لأنه في عالم يتغير بسرعة، يمكن أن يصبح قديمًا بنفس السرعة. اسأل نفسك دائمًا ما إذا كانت هناك حاجة إلى تحسينات.
يتطلب إنشاء النظام دائمًا استثمارًا للوقت. ولكن من خلال إنفاق أكثر مما تنفقه في البداية، سينتهي بك الأمر إلى توفيره بشكل كبير. والتقليل من تأثير الضغوط التشغيلية.
نتمنى لك حظا سعيدا!
إذا وصلنا إلى هذه النقطة...
نظام التشغيل هو الشيء الذي ينفذ المهام المتعددة (عادة) ويدير توزيع الموارد بين هذه المهام وبشكل عام. من الضروري التأكد من أن المهام لا يمكن أن تضر ببعضها البعض وأن تعمل في مناطق مختلفة من الذاكرة وأن تعمل مع الأجهزة بدورها، على الأقل. تحتاج أيضًا إلى توفير القدرة على نقل الرسائل من مهمة إلى أخرى.
أيضًا، يجب أن يوفر نظام التشغيل، في حالة وجود ذاكرة طويلة المدى، إمكانية الوصول إليها: أي توفير جميع الوظائف للعمل مع نظام الملفات. إنه الحد الأدنى.
في كل مكان تقريبًا، يجب كتابة رمز التمهيد الأول بلغة التجميع - هناك مجموعة من القواعد حول المكان الذي يجب أن يكون فيه، وكيف يجب أن يبدو، وما يجب أن يفعله، وما الحجم الذي يجب ألا يتجاوزه.
بالنسبة لجهاز الكمبيوتر، تحتاج إلى كتابة أداة تحميل التشغيل على ASMA، والتي سيتم استدعاؤها بواسطة BIOS والتي يجب، دون تجاوز أربعة وبضع مئات من البايتات، القيام بشيء ما وتشغيل نظام التشغيل الرئيسي - نقل التحكم إلى الكود الرئيسي، والذي يمكن كتابة المستقبل القريب بلغة C.
بالنسبة إلى ARM، تحتاج إلى إنشاء جدول مقاطعة على ACMA (إعادة التعيين، والأخطاء المختلفة، ومقاطعة IRQ، ومقاطعات FIQ، وما إلى ذلك) ونقل التحكم إلى الكود الرئيسي. على الرغم من أن هذا الرمز متاح في العديد من بيئات التطوير لأي وحدة تحكم تقريبًا.
وهذا هو، لهذا تحتاج:
إضافي. لنفترض أنك كتبت شيئًا ما. نحن بحاجة لاختبار هذا الشيء. إما أنك تحتاج إلى جهاز فعلي ستُجرى عليه التجارب (لوحة تصحيح الأخطاء، أو كمبيوتر ثانٍ)، أو محاكيًا له. عادةً ما يكون الخيار الثاني أسهل وأسرع في الاستخدام. لأجهزة الكمبيوتر، على سبيل المثال، برنامج VMWare.
هناك أيضًا الكثير من المقالات حول هذا الموضوع على الإنترنت، إذا قمت بالبحث جيدًا. هناك أيضًا العديد من الأمثلة على أنظمة التشغيل الجاهزة ذات أكواد المصدر.
إذا كنت تريد ذلك حقًا، فيمكنك حتى إلقاء نظرة على الكود المصدري للنواة القديمة لأنظمة NT (Windows)، بشكل منفصل (الذي نشرته Microsoft، مع التعليقات وأنواع مختلفة من المواد المرجعية)، وبالتزامن مع الكود القديم نظام التشغيل (مسرب).
الأصل: "قم بلف لعبتك الخاصة بنظام التشغيل UNIX-clone OS"
المؤلف: جيمس مولوي
تاريخ النشر: 2008
ترجمة: ن. رومادانوف
تاريخ الترجمة: يناير 2012
تم تصميم هذه المجموعة من البرامج التعليمية لتوضيح كيفية برمجة نظام تشغيل بسيط يشبه UNIX لبنية x86 بالتفصيل. في هذه الدروس، لغة البرمجة المختارة هي C، مع استكمالها بلغة التجميع عند الحاجة. الغرض من البرامج التعليمية هو إخبارك عن تصميم وتنفيذ الحلول المستخدمة في إنشاء نظام التشغيل OS الذي نقوم بإنشائه، والذي يكون متجانسًا في بنيته (يتم تحميل برامج التشغيل في وضع وحدة kernel، وليس في وضع المستخدم كما يحدث مع البرامج)، لأن مثل هذا الحل أكثر بساطة.
هذه المجموعة من الأدلة عملية للغاية بطبيعتها. يقدم كل قسم معلومات نظرية، ولكن معظم الدليل يتعلق بتنفيذ الأفكار والآليات المجردة التي تمت مناقشتها في الممارسة العملية. من المهم أن نلاحظ أن جوهر يتم تنفيذه باعتباره جوهر التدريب. أعلم أن الخوارزميات المستخدمة ليست الأكثر كفاءة في استخدام المساحة ولا هي الأمثل. تم اختيارهم بشكل عام بسبب بساطتهم وسهولة فهمهم. والغرض من ذلك هو إعطائك العقلية الصحيحة والأساس الذي تعمل من خلاله. هذا النواة قابل للتوسيع ويمكنك بسهولة توصيل أفضل الخوارزميات. إذا كانت لديك أية مشكلات تتعلق بالنظرية، فهناك العديد من المواقع التي يمكن أن تساعدك في اكتشافها. معظم الأسئلة التي تمت مناقشتها في منتدى OSDev تتعلق بالتنفيذ ("وظيفة get الخاصة بي لا تعمل! مساعدة!") وبالنسبة للكثيرين، فإن السؤال حول النظرية يشبه نسمة هواء نقية. يمكن العثور على الروابط في نهاية هذا مقدمة.
لتجميع وتشغيل رمز المثال، أفترض أنك تحتاج فقط إلى دول مجلس التعاون الخليجي، ld، NASM وGNU Make. NASM هو مجمع x86 مفتوح المصدر وهو اختيار العديد من مطوري نظام التشغيل x86.
ومع ذلك، ليس هناك فائدة من تجميع الأمثلة وتشغيلها إذا لم تفهمها. عليك أن تفهم ما يتم ترميزه، وللقيام بذلك عليك أن تعرف لغة C جيدًا، خاصة عندما يتعلق الأمر بالمؤشرات. يجب عليك أيضًا فهم بعض لغات التجميع (تستخدم هذه البرامج التعليمية بناء جملة Intel)، بما في ذلك الغرض من استخدام سجل EBP.
هناك العديد من الموارد إذا كنت تعرف كيف تبحث عنهم. وعلى وجه الخصوص، ستجد الروابط التالية مفيدة:
ايليا الكسندروف
نحن نقوم بإنشاء نظام التشغيل الخاص بنا على أساس Linux
هناك المئات من توزيعات Linux، ولا أحد يعرف كم سيظهر المزيد. تتنافس العشرات من الشركات والآلاف من المبرمجين لإنشاء أفضل مشروع Linux، ومع ذلك يمكن لأي مستخدم ذي خبرة أن يصبح مؤلفًا لنظام كمبيوتر منزلي ليس أدنى من منتجات عمالقة صناعة تكنولوجيا المعلومات.
على مدار سنوات عديدة من العمل مع Linux، استخدمت عددًا كبيرًا من التوزيعات المختلفة: Mandriva وFedora وSlackWare وDebian وUbuntu وغيرها الكثير. أحببت بعض المشاريع أكثر، وبعضها أقل. ولكن في جميع التوزيعات كان علينا حتماً أن نتعامل مع أوجه القصور الخطيرة التي جعلت العمل صعباً للغاية. أحدهما يتطلب موارد كبيرة للغاية، والآخر لا يدعم جميع المعدات اللازمة، والثالث يفتقر إلى البرامج المختلفة. وهنا تذكرت الحكمة الشرقية الشهيرة: إذا كنت تريد أن تفعل شيئًا جيدًا، فافعله بنفسك.
لينكس من الصفر
أنا لست الوحيد الذي قرر إنشاء نسختي الخاصة من Linux - نظام تشغيل يتم فيه أخذ الجزء الأساسي من النظام والنواة كأساس، ولكن لن يكون هناك كيلو بايت إضافي واحد من المطور ، أي منك. دفع العدد الكبير من توزيعات Linux التي لا تلبي متطلبات المستخدم جيرارد بيكمانز إلى إنشاء توزيعة تسمح للجميع ببناء نظام يحتوي فقط على المكونات والوظائف التي يحتاجون إليها.
أدت رغبة المبرمج الموهوب إلى ظهور مشروع Linux from Scratch (www.linuxfromscratch.org)، والمختصر بـ LFS. يتيح لك هذا المشروع تصميم نظام التشغيل الخاص بك المستند إلى Linux من البداية، من أكواد المصدر. يتم تجميع LFS على جهاز كمبيوتر مثبت عليه نظام Linux بالفعل، ومع ذلك، فإن القرص المضغوط المباشر "المتقدم"، على سبيل المثال، Knoppix، مناسب أيضًا.
في هذه الحالة، يمكن أن يكون نظام Linux المستخدم للبناء موجودًا - مطلوب فقط وجود مترجم ومكتبات النظام. لا يمكن تسمية Linux From Scratch بالتوزيع بالمعنى المعتاد للكلمة - فهو يشبه البرنامج المساعد الذي سيسمح لك، إلى جانب الجزء الأساسي من نظام التشغيل، بإنشاء الإصدار الفريد الخاص بك من نظام التشغيل.
كما تعلمون، قام لينوس تورفالدس بتطوير نظام التشغيل الخاص به تحت شعار "للمتعة فقط!" - أي من أجل المتعة فقط. يجب الاعتراف بأن LFS لا يتم العثور عليه في كثير من الأحيان على الخوادم؛ وعادة ما يستخدم هذا النظام من قبل عشاق الكمبيوتر. سيساعدك التثبيت والعمل باستخدام Linux من Scratch على فهم العلاقة بين مكونات نظام التشغيل، وهو ما سيكون مفيدًا عند تطوير توزيعة Linux الخاصة بك، وليس فقط استنادًا إلى LFS. لذلك، تم تصميم LFS إلى حد كبير لأولئك الأشخاص الذين تعتبر عملية تجميع التوزيع الخاص بهم مثيرة ومثيرة للاهتمام - وصدقوني، هناك الكثير من هؤلاء الأشخاص.
لذلك، إذا كنت على استعداد لقضاء يوم كامل (أو حتى أكثر) في تصميم النظام، فإنني أوصي بالتنزيل من الموقع (2) LFS-packages-6.0، LFS-book، ومواصلة قراءة هذه المقالة.
تقسيم القرص وإنشاء شجرة الدليل
للحصول على فهم أفضل للمادة، سنقوم بوصف العملية برمتها بشكل عام (انظر الشكل 1).
في المرحلة الأولى، باستخدام مجموعة التوزيع المثبتة بالفعل أو LiveCD، يتم تقسيم القرص. تم تخصيص قسم على القرص الصلب للنظام الجديد. بعد ذلك، في هذا القسم، ستحتاج إلى تجميع كافة البرامج الضرورية ونواة النظام بشكل ثابت. بعد ذلك، يتم تغيير الدليل الجذر إلى قسم القرص الثابت المخصص لنظام التشغيل الجديد الخاص بنا. سوف تحتاج إلى تكرار التجميع، ولكن هذه المرة يجب أن يتم بناء البرنامج ديناميكيًا (سيتم وصف الفرق بين التجميع الديناميكي والثابت أدناه). تتضمن المرحلة الأخيرة إنشاء مكتبة glibc بالغة الأهمية وتكوين نظام التشغيل المثبت. كما ترون، ليس عليك القيام بأي شيء معقد بشكل خاص.
طوال العملية برمتها، مساعدك الرئيسي هو الوثائق من حزمة كتب LFS، والتي يمكن العثور على الترجمة الروسية لها هنا: http://multilinux.sakh.com/download/lfsbook.tar.bz2. يصف الكتاب كل خطوة من خطوات إنشاء نظام التشغيل بالتفصيل، لذا تأكد من الرجوع إلى هذا الدليل إذا كانت لديك مشكلات (ليس المقصود من هذه المقالة أن تحل محل هذه الوثائق الشاملة).
نقوم بإنشاء قسم جديد - في حالتي هو /dev/hda5، نظرًا لأن القسم /dev/hda1 مشغول بالفعل بواسطة Linux Slackware المثبت على القرص الصلب. يوصى أولاً بعمل نسخة احتياطية للنظام حتى يمكن استعادته في حالة حدوث ضرر، على الرغم من أن احتمال ذلك قريب من الصفر. وهنا، أعتقد أن كل شيء واضح: نخصص المبلغ المطلوب (23 جيجابايت يكفي) للدليل الجذر، مساحة تساوي ضعف حجم ذاكرة الوصول العشوائي لقسم المبادلة، إذا رغبت في ذلك، يمكنك إنشاء أقسام منفصلة للمنزل الدليل (/الصفحة الرئيسية) و/التمهيد. ومع ذلك، فإن خيار التقسيم الذي يفضله الكثيرون - تخصيص كل المساحة المتاحة ناقص المبادلة إلى الدليل الجذر، ثم إنشاء المبادلة نفسها - يعد أيضًا مقبولًا تمامًا عند إنشاء LFS. على كمبيوتر المؤلف، يستخدم كل من Linux Slackware، وهو نظام التشغيل الأصلي، وLFS محرك أقراص ثابتة واحدًا، ومع ذلك، فإن تثبيت LFS على محرك أقراص ثابت آخر ليس بالأمر الصعب أيضًا.
اختر نظام الملفات حسب تقديرك: لم تكن هناك مشاكل مع Ext3 أو ReiserFS ضمن LFS. لكن سيشعر محبو XFS بخيبة أمل - فمحاولات جعل Linux From Scratch يعمل مع FS هذا لم تكن ناجحة.
نقوم الآن بتثبيت القسم المخصص لنظام التشغيل الجديد:
$ mount /dev/hda5 /mnt/mylin
للراحة، دعونا نحدد متغير MYLIN:
$ تصدير MYLIN=/mnt/mylin
عظيم، لمزيد من العمل، من الأفضل إنشاء مستخدم منفصل، والذي سنقوم بتعيينه كمالك للقسم المثبت.
$ إضافة مستخدم مايلين
$ chown –R مايلين $MYLIN
تحتاج إلى إنشاء شجرة دليل في جذر القسم الجديد:
$cd$ميلين
$ mkdir –p bin boot dev وما إلى ذلك home lib mnt opt root sbin usr/(X11R6,local) var
في الدلائل usr، usr/X11R6، usr/local، نقوم بإنشاء البنية اللازمة: الدلائل الفرعية bin، إلخ، تشمل، lib، sbin، share، src.
ثم سنفعل الشيء نفسه بالنسبة للمجلدين /var و/opt للنظام المستقبلي:
$ mkdir var/(cache,lib,local,lock,log,opt,run,spool)
$ mkdir opt/(bin,doc,include,info,lib,man)
دعونا لا ننسى أن هناك تسلسلات هرمية أعمق، على سبيل المثال /usr/share/man/man1. لكن نطاق المقالة لا يسمح لنا بتقديم جميع المعلومات حول بنية شجرة الملفات هنا، لذلك تحتاج إما إلى استخدام مستند Filesystem Hierarhy Standard (يمكن العثور عليه على: http://linux-ve.net) /MyLDP/file-sys/fhs-2.2-rus) أو ادرس بعناية بنية نظام التشغيل Linux الذي قمت بتثبيته بالفعل. بعد إعداد القرص الصلب، ننتقل إلى التجميع الثابت.
بناء ثابت
لماذا نستخدم التجميع الثابت؟ مع التجميع الثابت، يتم إرفاق الكود المصدري للمكتبة برمز التطبيق، مما يؤدي إلى زيادة حجمها، ولكن في نفس الوقت يتم الحفاظ على سلامتها. مع التجميع الديناميكي، توجد المكتبة في ملف منفصل، والذي يمكن الوصول إليه عن طريق التطبيقات حسب الحاجة. ونتيجة لذلك، تعمل كافة البرامج مع نفس الإصدار من المكتبة
ولكن عندما نستخدم الأمر chroot لتعيين الدليل الجذر للنظام المُجمَّع حديثًا، فإن مكتبات النظام المثبت "الأصل"، الموجودة في /lib، و/usr/lib، وغيرها، لن تكون متاحة بعد الآن، لذلك يتم تجميعها ديناميكيًا سترفض البرامج العمل، بالإضافة إلى ذلك، لن يكون من الممكن عدم ضمان توافق الإصدار.
لتجنب ذلك، سنقوم أولاً بتجميع كافة البرامج اللازمة لنظامنا المستقبلي بشكل ثابت. لنبدأ بمترجم أوامر bash. (يمكن لعشاق ZSH أو TCSH تثبيت المترجمين الفوريين المفضلين لديهم بعد تثبيت النظام، ولكن في مرحلة الإنشاء، لا يتم توفير استخدامها من قبل مؤلف LFS). يجب عليك التحقق مما إذا كان لديك الملف /usr/lib/libcurses.a، وإذا لم يكن كذلك، قم بتثبيت حزمة ncursesdev. يجب إنشاء جميع الحزم بعلامات بناء ثابتة: "--enable-static-link" أو "--disable-shared" أو "--static". يمكن معرفة أي منها مناسب في كل حالة محددة من خلال الوثائق الخاصة بحزمة معينة أو من خلال مخرجات البرنامج النصي للتكوين الذي تم تشغيله باستخدام المعلمة "--help".
$ ./تكوين --مساعدة
لكي لا نخلط بين البرامج المترجمة بشكل ثابت والبرامج "الديناميكية" لاحقًا، فلنقم بإنشاء دليل خاص لها:
$mkdir $MYLIN/stat
عند إنشاء الحزم وتثبيتها، لا تنس إضافة المعلمة "--prefix=$MYLIN/stat" لنقل الملفات إلى هذا الدليل. وأخيرًا، قم بتثبيت باش:
$ ./configure –-enable-static-link --prefix=$MYLIN/stat
$ جعل
$ قم بالتثبيت
باستخدام نفس المخطط، نقوم بجمع الحزم الضرورية المتبقية : binutils، bzip2، textutils، texinfo، tar، sh-utils، gcc، grep، gzip، gawk، diffutils، fileutils، make، patch، sed،وفي الواقع، نواة لينكس.
نعم، عند تجميع النواة، لا تنس أنه بالنسبة للإصدارات الأقدم من النواة (2.2.x-2.4.x) فإنك تحتاج إلى استخدام gcc 2.95، وبالنسبة للإصدار الحالي 2.6.x فمن المستحسن استخدام gcc 3.x تجنب المشاكل.
لا تنس إلقاء نظرة على الأقسام ذات الصلة من كتاب LFS، فهو يتحدث عن هذا والعديد من الفروق الدقيقة الأخرى. بشكل عام، لا يختلف تجميع النواة في LFS عن إجراء مماثل يتم إجراؤه عند استخدام التوزيع المثبت على محرك الأقراص الثابتة. لنقم بفك ضغط مصادر النواة إلى $MYLIN/usr/src/linux-2.6.xx، ثم قم بتكوينها عن طريق تشغيل:
$ جعل القائمة التكوين
لقد تم وصف عملية ضبط معلمات النواة عدة مرات على الإنترنت (6)؛ ومن غير المرجح أن تكون هناك حاجة للخوض في هذا الأمر بمزيد من التفصيل. بعد ذلك، نعطي الأوامر التالية في المجلد الذي يحتوي على مصادر Linux-kernel:
$ اصنع bzImage
$ إنشاء وحدات
هذا كل شيء، في $MYLIN/usr/src/linux-2.6.xx/arch/i386/boot/bzImage هناك نواة جديدة.
بعد ذلك، قم بإنشاء الملفات $MYLIN/etc/passwd و$MYLIN/etc/group. في الأول، نسجل مستخدمًا واحدًا في الوقت الحالي - الجذر باستخدام أي كلمة مرور، وفي الثانية - مجموعات المستخدمين (بالنسبة للمبتدئين، ستكون مجموعة جذر واحدة كافية أيضًا).
عند هذه النقطة، انتهت استعداداتنا للخطوة التالية، وننتقل إلى تجميع ديناميكي أكثر دقة.
التجميع الديناميكي
نحن الآن بحاجة إلى تغيير الدليل الجذر إلى /mnt/mylin، حيث سنستخدم فقط الأدوات المساعدة المجمعة بشكل ثابت - لن نتمكن بعد الآن من اللجوء إلى مساعدة الأدوات من نظام التشغيل "الأصل". نصدر الأمر في وحدة التحكم:
$ chroot $MYLIN/usr/bin/env –i
>الصفحة الرئيسية=/مصطلح الجذر=$TERM PS1='u:w$'
> المسار=/bin: /usr/bin: /sbin: /usr/sbin: /stat/sbin
>/stat/bin/bash --login
باستخدام هذا الأمر، حددنا المسارات إلى الملفات القابلة للتنفيذ، ونوع المحطة الطرفية، والمترجم، ونوع موجه سطر الأوامر.
لضمان عمل بعض البرامج، تحتاج إلى تثبيت نظام ملفات proc على النظام الجديد.
$ جبل بروك /proc -t proc
لقد وصلت اللحظة الأكثر أهمية. بناء مكتبة glibc. وهو الأهم لأن معظم البرامج الضرورية لن تعمل بدونه، ولا فائدة من استخدام لينكس بدون المكتبة الرئيسية. غالبًا ما يسبب بناء glibc الكثير من المشاكل.
أثناء الإنشاء، حددنا المعلمة "--prefix=$MYLIN/stat"، لذلك عند تغيير الجذر، ستنتهي جميع الحزم المبنية بشكل ثابت في الدليل /stat لقسم نظام التشغيل الجديد.
لذلك، قم بفك ضغط أرشيف glibc-2.x.x.tar.gz (على سبيل المثال، في الدليل /usr/src/) وانتقل إلى دليل glibclinuxthreads. سيتعين علينا تصحيح كود المصدر قليلاً نظرًا لحقيقة أنه في هذه المرحلة من المستحيل تحديد المستخدم بالاسم في النظام (على وجه التحديد بسبب عدم وجود glibc والمكتبات الأخرى)، وحقيقة أنه لتثبيت glibc عليك بحاجة إلى مترجم بيرل، الذي ليس لدينا.
نحن نستبدل اسم المستخدم الجذر في تسجيل الدخول/Makefile بـ uid الخاص به، أي 0، ويجب استبدال المتغير $PERL في malloc/Makefile بالمسار إلى المترجم - /usr/bin/Perl - وسوف ببساطة يتم تجاهلها أثناء التكوين.
$ /usr/src/glibc-2.x.x/configure --prefix=/usr --enable-add-ons --libexecdir=/usr/bin &&
& يصنع
وقم بالتثبيت
$ جعل البيانات المحلية/التثبيت المحلي
$ /stat/bash --login
إذا فعلت كل شيء بشكل صحيح، فسيتم تجميع glibc، وسيظهر "الجذر" أخيرًا في الموجه، ويمكنك إعادة ترجمة جميع البرامج ديناميكيًا.
لنكمل تثبيت النواة:
$ جعل Modules_install
$ قم بالتثبيت
لنقل النواة الجديدة إلى الدليل /boot، قم بتشغيل أمر آخر:
$ قم بإلغاء التثبيت
نقوم بجمع كافة البرامج المثبتة وبعض البرامج الجديدة، الآن بدون علامات التحويل البرمجي الثابتة. سنحتاج (في هذه المرحلة من المهم جدًا ألا ننسى تجميع كل ما هو مدرج أدناه) (انظر الجدول 1).
الجدول 1. مجموعة الحزم المطلوبة للتجميع
com.autoconf |
grep |
بيرل |
com.automake |
جروف |
|
سحق |
com.gzip |
com.procinfo |
bin86 |
procps |
|
com.binutils |
أقل |
com.psmisc |
bzip2 |
reiserfs-progs |
|
diffutils |
libtool |
|
e2fsprogs |
ليلو |
sh-utils |
ظل |
||
ملف |
يصنع |
sysklogd |
com.fileutils |
com.makedev |
sysvinit |
findutils |
صفحات الرجل |
|
ثني |
modutils |
texinfo |
البله |
ncurses |
com.textutils |
netkitbase |
util-linux |
|
الثور |
أدوات الشبكة |
|
الحصول على النص |
رقعة |
بعد إجراء إعادة الترجمة الديناميكية، يمكنك حذف الدليل باستخدام الحزم المبنية بشكل ثابت:
$ rm -rf /stat
يمكنك أن تتنفس الصعداء وتشرب القهوة - لقد تركت أصعب الأشياء الروتينية وراءك. دعنا ننتقل إلى المرحلة التالية - التكوين الأولي لنظامنا.
التكوين الأولي للنظام
قبل أن نبدأ الإعداد، ألاحظ أنه يجب إجراء جميع التغييرات في ملفات الدليل لنظام التشغيل الجديد، وليس النظام الأصلي.
لضبط وقت النظام، قم بإنشاء ملف /etc/sysconfig/clock يحتوي على سطر واحد فقط:
التوقيت العالمي = 0
الآن ستعرض ساعة الكمبيوتر الوقت في منطقتك الزمنية - بشرط أن يتم ضبط القيمة الزمنية في BIOS بشكل صحيح.
دعونا نعطي الكمبيوتر اسما:
صدى "HOSTNAME=my_linux" > /etc/sysconfig/network
سنشير الآن إلى الأقسام التي يجب أن يقوم النظام بتثبيتها عند التمهيد في /etc/fstab:
# خيارات نوع FS لنقطة تثبيت نظام الملفات تفريغ ترتيب fsck
/dev/hda5/ext3 الإعدادات الافتراضية 1 1
/dev/hda3 مبادلة مبادلة pri=1 0 0
proc /proc إعدادات proc الافتراضية 0 0
بدلاً من /dev/hda3 و/dev/hda5، اكتب الأقسام الخاصة بك (الجذر والمبادلة)، وأكمل الملف، إذا لزم الأمر، بنقاط تحميل للأقسام الأخرى من محرك الأقراص الثابتة والأقراص المضغوطة.
الآن دعونا نجعل نظامنا قابلاً للتمهيد.
إذا كنت تستخدم توزيعات Linux أخرى، بالإضافة إلى LFS، فأنت الآن بحاجة إلى تسجيل الدخول إلى النظام القديم - للقيام بذلك، قم بتشغيل الأمر:
$ الخروج
بالفعل في نظام التشغيل الأصلي، قم بإضافة ما يلي إلى الملف /etc/lilo.conf:
#LFS
image=/boot/bzImage
التسمية = lfs
الجذر=
يقرأ فقط
من الواضح أن "/boot/bzImage" هو المسار إلى نواة النظام التي قمت بتجميعها، و"القسم" هو قسم القرص حيث يوجد الدليل الجذر.
إذا كنت لا تخطط لاستخدام أنظمة تشغيل أخرى وتوزيعات Linux، فانتقل مباشرة إلى إعداد LILO في LFS.
في هذه الحالة، سيبدو lilo.conf كما يلي:
boot=/dev/hda
التأخير = 40
المدمج
في جي ايه=عادي
الجذر=/dev/hda1
يقرأ فقط
الصورة=/boot/zImage-2.6.12
التسمية = لينكس
قم بإجراء التغييرات اللازمة وفقًا للتكوين الخاص بك. نقوم بتحديث أداة تحميل التشغيل باستخدام الأمر:
$ /sbin/lilo –v
وإذا تمت جميع الخطوات السابقة بشكل صحيح سنجد أنفسنا في النظام الجديد. ومع ذلك، فإن مرحلة طويلة من الضبط "الدقيق" (ينبغي إيلاء اهتمام خاص لأمان النظام الجديد، لأن LFS افتراضيًا يبدو غير محمي تمامًا، مثل أي نظام تشغيل مثبت حديثًا) لا يزال أمامنا. لكن لديك بالفعل نسخة مجمعة ذاتيًا من Linux.
ملاحظة
لم يكن جيرارد بيكمانز هو الشخص الوحيد الذي فكر في إنشاء نظام Linux خاص به. مشروع آخر، BYOLinux، بقيادة جوناثان ثورب، توقف الآن عن تطويره، على الرغم من أن الوثائق التي كتبها لا تزال ذات صلة اليوم، لكنها ليست مفصلة مثل كتاب LFS ولم تتم ترجمتها إلى اللغة الروسية. والفرق الرئيسي بين طريقة جون هو أن مكتبة glibc يتم نقلها من النظام الأصلي إلى النظام الفرعي دون إعادة الترجمة؛ وهذا ليس بنفس الكفاءة، ولكنه يتجنب العديد من المشاكل أثناء التجميع. لدى بعض مستخدمي FreeBSD أيضًا الرغبة في الشعور وكأنهم مصمم نظام التشغيل.
الآن أصبح هذا ممكنًا تمامًا - يوجد على http://ezine.daemonnews.org/200302/fbsdscratch.html مقال حول بناء FreeBSD من المصادر بالكامل - من التوزيعات إلى المنافذ، وبطريقة لا تشبه "إعادة البناء" المعتادة. للنظام، ولكنه مشابه لطريقة جيرارد بيكمان. حسنًا، الآن لديك نظامك الشخصي الفريد الذي يعتمد على Linux. إذا نشأت مشاكل، فابحث عن حلها في كتاب LFS، حيث يتم وصف كل شيء بالتفصيل هناك. أوصي أيضًا بتنزيل دليل مسؤول شبكة Linux من البوابة http://www.tldp.org؛ على الرغم من أنه لا يرتبط مباشرة بـ LFS، إلا أنه سيكون مفيدًا في مرحلة إعداد النظام. لا تنس أن كل برنامج يأتي أيضًا مع صفحات معلومات ومعلومات متنوعة، مصممة أيضًا لتسهيل الحياة على مستخدمي Linux.