إذا قمت بإدخال قرص 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.
"هل تريد أن تبدأ في تعلم جنو/لينكس؟ ابدأ مع Linux من الصفر."
يجب أن يقال على الفور أن التوزيع المجمع من كتاب LFS لا يمكنه فعل أي شيء حقًا. أو بالأحرى، لا شيء سيحتاجه المستخدم عديم الخبرة. يمكن تشغيله وإيقاف تشغيله وإعادة تشغيله واستخدامه اتصال إيثرنتولكن الأهم هو التجميع. إذن هناك كتب أخرى يدعمها المجتمع الآن - يتيح لك Beyond LFS جمع تلك البرامج التي تهم المستخدم. من المتصفح والبيئة الرسومية، إلى أنظمة إدارة قواعد البيانات وخادم DHCP. يميل الكتاب إلى التخلف عن الكتاب الأساسي في الإصدار، لكن الخبرة المكتسبة من LFS عادةً ما تكون كافية لحل تعارضات الإصدارات بشكل مستقل. ثلاثة كتب أخرى - Automated LFS وCross LFS وHardened LFS تتوافق تمامًا مع العناوين وتقع خارج نطاق هذه المقالة. ومع ذلك، يمكنك دائمًا قراءتها على الإنترنت، أليس كذلك؟
بالمناسبة، تمت الإشارة إلى وقت البناء التقريبي لكل حزمة في البرنامج التعليمي. تعتبر وحدة الوقت هي وقت إنشاء حزمة Binutils - وهي عبارة عن مُجمِّع ورابط وعدد من الأدوات المساعدة الأخرى الأصغر حجمًا للعمل مع ملفات الكائنات. على النظام أعلاه استغرق الأمر ثلاث دقائق.
ملاحظة: شكرا لأولئك الذين كتبوا في PM. تم تصحيح الأخطاء، وتحريك الاختراق قليلا.
هناك العديد من الطرق لتثبيت Linux على جهاز الكمبيوتر الخاص بك والبدء في استخدامه لمهام محددة. اختيار التوزيعات واسع للغاية، لكل الأذواق والألوان - سواء "لربات البيوت" أو للمستخدمين المتقدمين، مما يسمح بأي مستوى من التخصيص، بما في ذلك التجميع من التعليمات البرمجية المصدر لأجهزة معينة. يمكن تثبيت النظام، من حيث المبدأ، في متناول أي مستخدم كمبيوتر شخصي أكثر أو أقل معرفة بالقراءة والكتابة. وإذا لم تتعمق في الهوليفار التي لا تزال شائعة حول موضوع "Linux vs Other OS"، فإن استخدام هذا النظام لا يتطلب المعرفة التي كانت إلزامية لمستخدم Linux الجديد، على سبيل المثال، قبل عشر سنوات. من وجهة نظري الذاتية العميقة، على مدار أكثر من عشر سنوات كنت أراقب فيها تطور هذا النظام، أصبح Linux أكثر ملاءمة للمبتدئين وتخلص من العديد من المشكلات المتأصلة فيه في الماضي. وهذا جيد.طيور البطريق المصنوعة يدويا...
لقد كانت هناك بالفعل مقالتان عن حبري حول موضوع LFS، على سبيل المثال، أو. تشير التعليقات على هذا الأخير إلى فكرة منطقية - إذا كانت هناك مجموعة من الاحتمالات عمليات تثبيت لينكسودراستها واسعة النطاق بالفعل، لماذا نحتاج إلى LFS؟
ولن أتوسع في قصص "كيف تتجول سفن الفضاء... وعندما كانت الأرض كرة من نار...". سأجيب على السؤال المطروح بناءً على موقفي - أقوم بجمع LFS لأنني ببساطة مهتم بالقيام بذلك. أرى في هذه العملية فرصة جيدةانظر "تحت غطاء محرك السيارة" للنظام. أعترف أنه من الصعب أن يسمى هذا المسار الأمثل. مع ذلك، هذه المقالة، وسيتم تخصيص ما يلي لعملية إنشاء نظام Linux يدويًا. لن تكون هذه المقالات ترجمة لوثائق التجميع - ليست هناك حاجة خاصة لذلك. سيتم التركيز على التفاصيل والفروق الدقيقة للعملية التي كان على المؤلف مواجهتها شخصيًا. دعونا نعتبر هذه الدورة بمثابة مذكرات مبتدئ.
$ source ~/.bash_profile dircolors: لا يوجد متغير بيئة SHELL، ولا يوجد خيار لنوع الصدفة محدد
لقد تلقيت هذا التحذير في Linux Mint 17 بسبب الاستدعاء غير المباشر لـ dircolors (الأمر الذي يقوم بتلوين الجهاز الطرفي) من /etc/profile عندما يقوم المستخدم بتسجيل الدخول مرة أخرى ويتم تحديث متغيرات البيئة باستخدام الأمر المصدر. إنها ليست حرجة ويمكن تجاهلها.
يجب أن يكون لدى نظام Linux المضيف الحزم المدرجة في متطلبات النظام الرسمية مثبتة. معظم هذه الحزم تأتي خارج الصندوق أو هي أدوات مطورة اختيارية. على أية حال، يتم تثبيتها بسهولة من المستودع الرسمي لتوزيع معين. خيار جيدهو استخدام قرص حي مثل Knoppix، ثم يمكنك تثبيت 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. ومع ذلك، من أجل عدم المخاطرة، من الأفضل أن تأخذ نسخة مستقرة من الكتاب.
الحد الأدنى للحجم المطلوب مساحة القرص- 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: الهدف
الآن لدينا كل ما نحتاجه لبدء التجميع، لكننا نحتاج فقط إلى القيام ببعض الأعمال التحضيرية النهائية.
# 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 المستخدم. معنى المعلمات هو كما يلي:
قم بتعيين كلمة مرور لمستخدم 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
ينشئ بيئة مستخدم "نظيفة" (مفتاح -أنايحدد تجاهل الإعدادات السابقة) عن طريق تعيين قيم لمتغيرات البيئة
يحدد الملف ~/.bashrc الإعدادات التي يجب إجراؤها عند تسجيل الدخول إلى جلسة مستخدم معين
بشكل منفصل، يجب الانتباه إلى طريقة إنشاء الملفات. لماذا نستخدم الأمر cat، لماذا لا يمكننا استخدام محرر وحدة التحكم المفضل لدينا؟ حسنًا، طالما أننا على النظام المضيف، محرر النصوصمتاح لنا. لكن عندما نتحول إلى النظام المؤقت، لن يكون لدينا أي محرر. ولذلك، يجب عليك استخدام الأمر cat، الذي يعيد توجيه دفق الإخراج من ملف إلى آخر. لم يتم تحديد ملف الإدخال، مما يعني أنه سيتم استخدام دفق الإدخال القياسي. ملف الإخراج هو الملف الذي نقوم بإنشائه، وشرط الإنهاء هو ظهور تسلسل أحرف نهاية الملف - EOF - في دفق الإدخال. بعد إدخال الأمر، سنكون قادرين على كتابة نص الملف الذي تم إنشاؤه مباشرة في الجهاز. لإنهاء العملية، أدخل السطر EOF. بهذه الطريقة نحول غلاف الأوامر إلى محرر نصوص بدائي.
سيتم تنفيذ البرامج النصية التي تم إنشاؤها في كل مرة تقوم فيها بتسجيل الدخول نيابة عن lfs. لنقم بتحديث بيئة المستخدم باستخدام الأمر
/$ المصدر ~/.bash_profile
تأكد من تعيين متغيرات البيئة الضرورية
/$مجموعة
لذا فإن أول شيء سنفعله هو تجميع بعض الأجزاء النظام المستقبليلتتمكن من استخدامها عند تجميع نسخته النهائية.
يتم تنفيذ كافة الأعمال المتعلقة بتجميع النظام المؤقت في الدليل $LFS/sources، لذلك دعونا نذهب إلى هناك
/$ cd $LFS/sources
بالنسبة لجميع الحزم التي يتم إنشاؤها، يحتوي أمر الإنشاء على تسلسل الإجراءات التالي (ما لم يُنص على خلاف ذلك!):
يختلف الوقت المستغرق لإنشاء الحزم - من فوري تقريبًا إلى ساعتين ونصف الساعة (يستغرق إنشاء دول مجلس التعاون الخليجي بعد عملية الجذر مع جميع الاختبارات تلك المدة تقريبًا). ونظرًا لاختلاف سرعات الكمبيوتر، يتم اختيار وحدة نسبية تسمى وحدة البناء القياسية (SBU) لقياس وقت البناء. وحدة SBU واحدة تساوي وقت إنشاء حزمة binutils التي تم تجميعها أولاً. يمكن تقدير مدة 1.0 SBU تقريبًا لنظامك، ولكن المزيد عن ذلك أدناه، في الوقت الحالي
توصية: لا تقم بتجميع النظام في مواضيع متعددة. إذا كان لديك معالج متعدد النواة، فسيعمل المفتاح -j على تسريع العمل، ولكن قد يؤدي ذلك لاحقًا إلى فشل بعض الاختبارات المهمة والتشغيل غير المستقر للبرنامج المجمع. لا يستغرق التجميع في خيط واحد وقتًا طويلاً - سيتم قضاء المزيد من الوقت في حل المشكلات الناتجة عن التجميع متعدد الخيوط.
لن نقوم بتغطية بناء كل حزمة - كتاب LFS نفسه يغطي ذلك. ومع ذلك، سنركز على بعض الفروق الدقيقة في التجميع، والنظر في تجميع الحزم الأكثر أهمية
قم بفك ضغط الأرشيف وانتقل إلى الدليل بمحتوياته
$ القطران -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
اهتمام خاص بالمفاتيح:
بعد تشغيل المكوّن، فإن الناتج الذي نحصل عليه هو ملف 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
أولاً، قم بفك ضغط الأرشيف بالمصادر وانتقل إلى الدليل الذي تم إنشاؤه
$ 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 إلى الأفكار التالية:
وبالتالي، قمت بتحليل التعبير "s@/lib\(64\)\?\(32\)\?/ld@/tools&@g" - ابحث عن جميع الأسطر التي تحتوي على "/lib" و"/lib64" و" / lib32" واسبقها بالسطر "/tools"، والتعبير "s@/usr@/tools@g" - ابحث عن جميع الأسطر التي تحتوي على "/usr" واستبدلها بـ "/tools"
الأمر التالي:
$ 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++
المفاتيح لها المعنى التالي:
بعد تكوين التجميع بهذه الطريقة، نقوم بتنفيذه وتثبيت الحزمة
$ جعل $ جعل التثبيت
ثم نقوم بالتنظيف بعد أنفسنا
$ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2
سأقتصر على وصف الحد الأدنى من حزم النظام المؤقتة وبعض التفسيرات المهمة. بعد ذلك تحتاج إلى تثبيت دول مجلس التعاون الخليجي
بعد بناء Glibc، تحتاج إلى إجراء الاختبار الأول للمترجم المجمع. نقوم بإنشاء برنامج بدائي ونقوم بتجميعه باستخدام مترجم من مجموعة مؤقتة
$ echo "main()()" > dummy.c $ $LFS_TGT-gcc dummy.c
قم بتحليل الثنائي الناتج لمعرفة وجود ومحتوى مسار البحث لمحمل المكتبة الديناميكي
$ readelf -f a.out | grep ": / الأدوات"
في حالتي حصلت على النتيجة التالية:
مما يدل على الرابط الصحيح للرابط. يعطي الكتاب النتيجة لنظام 32 بت، لكنني قمت بتجميع نظام 64 بت، والمسار الموضح هنا يختلف عن ذلك المشار إليه في الكتاب.
بعد التأكد من أن كل شيء على ما يرام، قم بحذف برنامج الاختبار
$ rm -v dummy.c a.out
$ 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
$ 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
$ strip --strip-debug /tools/lib/* $ /usr/bin/strip --strip-unneeded /tools/(,s)bin/*
بالإضافة إلى ذلك، يمكنك حذف الوثائق التي تم تثبيتها ولكن لم تكن هناك حاجة إليها بعد - وسيظل يتم جمعها وتثبيتها مرة أخرى وهذه المرة للانتهاء.
$ rm -rf /tools/(,share)/(info,man,doc)
أشكركم على اهتمامكم بكتابتي!
سيتم تجميع نظام 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.