
شجرة مصدر نواة Linux 4.1.15 مع التركيز على CVE-2022-42703، ثغرة استخدام بعد التحرير في نظام netfilter الفرعي، للتحليل والبحث في الاستغلال.
Linux kernel release 4.x http://kernel.org/
هذه هي ملاحظات إصدار نواة لينكس 4.x. اقرأها بعناية، فهي تخبرك ما هو هذا كل شيء، وتشرح كيفية تثبيت النواة، وماذا تفعل إذا حدث خطأ ما.
ما هو لينكس؟
لينكس هو نسخة مطابقة لنظام التشغيل Unix، مكتوب من الصفر بواسطة Linus Torvalds بمساعدة فريق غير منظم من المخترقين عبر الإنترنت. يهدف إلى الامتثال لـ POSIX و Single UNIX Specification.
يحتوي على جميع الميزات التي تتوقعها في نظام Unix حديث كامل، بما في ذلك تعدد المهام الحقيقي، الذاكرة الافتراضية، المكتبات المشتركة، التحميل حسب الطلب، الملفات التنفيذية المشتركة للنسخ عند الكتابة، إدارة الذاكرة الصحيحة، والشبكات متعددة الأكوام بما في ذلك IPv4 و IPv6.
يتم توزيعه بموجب رخصة GNU العامة - راجع ملف 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 للحصول على أرقام الإصدارات الدنيا المطلوبة وكيفية الحصول على تحديثات لهذه الحزم. انتبه إلى أن استخدام إصدارات قديمة جدًا من هذه الحزم يمكن أن يسبب أخطاء غير مباشرة يصعب تتبعها، لذا لا تفترض أنه يمكنك فقط تحديث الحزم عند ظهور مشاكل واضحة أثناء البناء أو التشغيل.
دليل BUILD للنواة:
عند تجميع النواة، سيتم تخزين جميع ملفات المخرجات افتراضيًا مع كود مصدر النواة. استخدام الخيار "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). يعطل أي خيار وحدة غير ضرورية للوحدات المحملة.
لإنشاء localmodconfig لجهاز آخر،
قم بتخزين lsmod لذلك الجهاز في ملف
وقم بتمريره كمعامل LSMOD.
target$ lsmod > /tmp/mylsmod
target$ scp /tmp/mylsmod host:/tmp
host$ make LSMOD=/tmp/mylsmod localmodconfig
ما سبق يعمل أيضًا عند الترجمة المشتركة (cross compiling).
"make localyesconfig" مشابه لـ localmodconfig، باستثناء أنه سيحول جميع خيارات الوحدات إلى خيارات مدمجة (=y).