
كود مصدر نواة لينكس 4.1.15 مع التركيز على CVE-2023-26607، مما يوفر مرجعًا لتحليل الثغرات وفهم الكود المتأثر.
هذه هي ملاحظات الإصدار لنواة لينكس الإصدار 4. اقرأها بعناية، فهي تخبرك ما هو هذا الأمر، وتشرح كيفية تثبيت النواة، وماذا تفعل إذا حدث خطأ ما.
ما هو لينكس؟
لينكس هو نسخة مقلدة من نظام التشغيل يونكس، مكتوبة من الصفر بواسطة لينوس تورفالدز بمساعدة فريق غير مترابط من المخترقين عبر الإنترنت. يهدف إلى الامتثال لمعايير POSIX و Single UNIX Specification.
يتمتع بجميع الميزات التي تتوقعها في نظام يونكس حديث متكامل، بما في ذلك تعدد المهام الحقيقي، الذاكرة الافتراضية، المكتبات المشتركة، التحميل عند الطلب، الملفات التنفيذية المشتركة للنسخ عند الكتابة، إدارة الذاكرة السليمة، والشبكات متعددة الأكوام بما في ذلك IPv4 و IPv6.
يتم توزيعه بموجب رخصة جنو العمومية العامة - راجع ملف COPYING المرفق لمزيد من التفاصيل.
على أي أجهزة يعمل؟
على الرغم من أنه طُوّر في البداية لأجهزة الكمبيوتر الشخصية 32-بت المعتمدة على x86 (386 أو أعلى)، إلا أن لينكس اليوم يعمل أيضًا (على الأقل) على معماريات Compaq Alpha AXP و Sun SPARC و UltraSPARC و Motorola 68000 و PowerPC و PowerPC64 و ARM و Hitachi SuperH و Cell و IBM S/390 و MIPS و HP PA-RISC و Intel IA-64 و DEC VAX و AMD x86-64 و AXIS CRIS و Xtensa و Tilera TILE و AVR32 و Renesas M32R.
لينكس سهل النقل إلى معظم المعماريات العامة 32-بت أو 64-بت طالما أنها تحتوي على وحدة إدارة ذاكرة مقسمة الصفحات (PMMU) ومنفذ لمترجم GNU C (gcc) (جزء من مجموعة مترجمات GNU، GCC). كما تم نقل لينكس إلى عدد من المعماريات بدون PMMU، على الرغم من أن الوظائف محدودة بشكل واضح. تم نقل لينكس أيضًا إلى نفسه. يمكنك الآن تشغيل النواة كتطبيق على مستوى المستخدم - وهذا يسمى UserMode Linux (UML).
التوثيق:
هناك الكثير من التوثيق المتاح سواء في شكل إلكتروني على الإنترنت أو في الكتب، سواء الخاصة بلينكس أو المتعلقة بأسئلة UNIX العامة. أوصي بالاطلاع على الأدلة الفرعية للتوثيق على أي موقع FTP للينكس من أجل كتب مشروع توثيق لينكس (LDP). هذا الملف README ليس المقصود منه أن يكون توثيقًا للنظام: هناك مصادر أفضل بكثير متاحة.
هناك ملفات README مختلفة في الدليل الفرعي Documentation/: تحتوي هذه عادةً على ملاحظات تثبيت خاصة بالنواة لبعض برامج التشغيل على سبيل المثال. راجع Documentation/00-INDEX للحصول على قائمة بما هو موجود في كل ملف. يُرجى قراءة ملف Changes، لأنه يحتوي على معلومات حول المشاكل التي قد تنتج عن ترقية النواة الخاصة بك.
الدليل الفرعي Documentation/DocBook/ يحتوي على عدة أدلة للمطورين والمستخدمين للنواة. يمكن عرض هذه الأدلة بعدة تنسيقات: PostScript (.ps) و PDF و HTML وصفحات الدليل (man-pages)، من بين أخرى. بعد التثبيت، سيؤدي تشغيل "make psdocs" أو "make pdfdocs" أو "make htmldocs" أو "make mandocs" إلى عرض التوثيق بالتنسيق المطلوب.
تثبيت شفرة مصدر النواة:
إذا قمت بتثبيت المصادر الكاملة، ضع حزمة النواة المضغوطة في دليل لديك فيه صلاحيات (مثل دليل منزلك) وقم بفك ضغطها:
xz -cd linux-4.X.tar.xz | tar xvf -
استبدل "X" برقم إصدار أحدث نواة.
لا تستخدم منطقة /usr/src/linux! هذه المنطقة تحتوي على مجموعة (عادة غير كاملة) من رؤوس النواة التي تستخدمها ملفات رؤوس المكتبات. يجب أن تتطابق مع المكتبة، وألا تُفسد بأي شيء قد يكون هو النواة الحالية.
يمكنك أيضًا الترقية بين إصدارات 4.x عن طريق التصحيح (patching). يتم توزيع التصحيحات بتنسيق xz. للتثبيت عن طريق التصحيح، احصل على جميع ملفات التصحيح الأحدث، وادخل إلى الدليل العلوي لمصدر النواة (linux-4.X) وقم بتنفيذ:
xz -cd ../patch-4.x.xz | patch -p1
استبدل "x" لجميع الإصدارات الأكبر من الإصدار "X" لشجرة المصادر الحالية لديك، بالترتيب، ويجب أن تكون بخير. قد ترغب في إزالة ملفات النسخ الاحتياطي (some-file-name~ أو some-file-name.orig)، وتأكد من عدم وجود تصحيحات فاشلة (some-file-name# أو some-file-name.rej). إذا كانت موجودة، فإما أنك أو أنا ارتكبنا خطأ.
على عكس تصحيحات النواة 4.x، فإن تصحيحات النواة 4.x.y (المعروفة أيضًا باسم النواة المستقرة -stable) ليست تراكمية بل تطبق مباشرة على النواة الأساسية 4.x. على سبيل المثال، إذا كانت نواتك الأساسية هي 4.0 وتريد تطبيق التصحيح 4.0.3، يجب ألا تطبق أولاً التصحيحين 4.0.1 و 4.0.2. وبالمثل، إذا كنت تستخدم إصدار النواة 4.0.2 وتريد القفز إلى 4.0.3، يجب عليك أولاً عكس التصحيح 4.0.2 (أي patch -R) قبل تطبيق التصحيح 4.0.3. يمكنك قراءة المزيد حول هذا في Documentation/applying-patches.txt
بدلاً من ذلك، يمكن استخدام السكربت patch-kernel لأتمتة هذه العملية. يحدد إصدار النواة الحالي ويطبق أي تصحيحات موجودة.
linux/scripts/patch-kernel linux
الوسيطة الأولى في الأمر أعلاه هي موقع مصدر النواة. يتم تطبيق التصحيحات من الدليل الحالي، ولكن يمكن تحديد دليل بديل كوسيطة ثانية.
تأكد من عدم وجود ملفات .o قديمة وتبعيات عالقة:
cd linux make mrproper
يجب أن يكون لديك الآن المصادر مثبتة بشكل صحيح.
متطلبات البرمجيات
يتطلب تجميع وتشغيل النواة 4.x إصدارات حديثة من حزم برمجية متنوعة. استشر Documentation/Changes للحصول على أرقام الإصدارات الدنيا المطلوبة وكيفية الحصول على تحديثات لهذه الحزم. احذر من أن استخدام إصدارات قديمة جدًا من هذه الحزم يمكن أن يسبب أخطاء غير مباشرة يصعب تتبعها، لذلك لا تفترض أنه يمكنك فقط تحديث الحزم عند ظهور مشاكل واضحة أثناء البناء أو التشغيل.
دليل البناء للنواة:
عند تجميع النواة، سيتم تخزين جميع ملفات الإخراج افتراضيًا مع شفرة مصدر النواة. باستخدام الخيار "make O=output/dir" يمكنك تحديد مكان بديل لملفات الإخراج (بما في ذلك .config). مثال:
شفرة مصدر النواة: /usr/src/linux-4.X
دليل البناء: /home/name/build/kernel
لتكوين وبناء النواة، استخدم:
cd /usr/src/linux-4.X
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
يُرجى ملاحظة: إذا تم استخدام الخيار 'O=output/dir'، فيجب استخدامه لجميع استدعاءات make.
تكوين النواة:
لا تتخط هذه الخطوة حتى لو كنت تقوم فقط بترقية إصدار ثانوي واحد. يتم إضافة خيارات تكوين جديدة في كل إصدار، وستظهر مشاكل غريبة إذا لم يتم إعداد ملفات التكوين كما هو متوقع. إذا كنت ترغب في نقل تكوينك الحالي إلى إصدار جديد بأقل جهد، استخدم "make oldconfig"، والذي سيسألك فقط عن الإجابات للأسئلة الجديدة.
أوامر التكوين البديلة هي:
"make config" واجهة نصية عادية.
"make menuconfig" قوائم ملونة تعتمد على النص، وقوائم راديو وحوارات.
"make nconfig" قوائم ملونة معززة تعتمد على النص.
"make xconfig" أداة تكوين تعتمد على X windows (Qt).
"make gconfig" أداة تكوين تعتمد على X windows (Gtk).
"make oldconfig" الافتراضي لجميع الأسئلة بناءً على محتويات ملف ./.config الحالي الخاص بك والسؤال عن رموز التكوين الجديدة.
"make silentoldconfig" مثل ما سبق، لكنه يتجنب تشويش الشاشة بالأسئلة التي تمت الإجابة عليها بالفعل. بالإضافة إلى تحديث التبعيات.
"make olddefconfig" مثل ما سبق، لكنه يضبط الرموز الجديدة على قيمها الافتراضية دون مطالبة.
"make defconfig" أنشئ ملف ./.config باستخدام قيم الرموز الافتراضية إما من arch/$ARCH/defconfig أو arch/$ARCH/configs/${PLATFORM}_defconfig، اعتمادًا على المعمارية.
"make ${PLATFORM}_defconfig" أنشئ ملف ./.config باستخدام قيم الرموز الافتراضية من arch/$ARCH/configs/${PLATFORM}_defconfig. استخدم "make help" للحصول على قائمة بجميع المنصات المتاحة لمعماريتك.
"make allyesconfig" أنشئ ملف ./.config عن طريق ضبط قيم الرموز على 'y' قدر الإمكان.
"make allmodconfig" أنشئ ملف ./.config عن طريق ضبط قيم الرموز على 'm' قدر الإمكان.
"make allnoconfig" أنشئ ملف ./.config عن طريق ضبط قيم الرموز على 'n' قدر الإمكان.
"make randconfig" أنشئ ملف ./.config عن طريق ضبط قيم الرموز على قيم عشوائية.
"make localmodconfig" أنشئ تكوينًا يعتمد على التكوين الحالي و الوحدات المحملة (lsmod). يعطل أي خيار وحدة غير مطلوب للوحدات المحملة.