Windows.  Viruslar.  Noutbuklar.  Internet.  Idora.  Utilitalar.  Haydovchilar

O'zingizga o'rnatish uchun Linux kompyuter va undan foydalanishni boshlang aniq vazifalar Ko'p yo'llari bor. Tarqatishlarni tanlash juda keng, har qanday did va rang uchun - ham "uy bekalari uchun" ham, ilg'or foydalanuvchilar uchun ham har qanday darajadagi sozlash imkonini beradi, shu jumladan ma'lum bir apparat uchun manba kodidan yig'ish. Tizimni o'rnatish, qoida tariqasida, har qanday ko'proq yoki kamroq savodli kompyuter foydalanuvchisi uchun ochiqdir. Va agar siz "Linux va boshqa operatsion tizimlar" mavzusidagi hali ham mashhur holivarlarga sho'ng'imasangiz, unda ushbu tizimdan foydalanish yangi Linux foydalanuvchisi uchun majburiy bo'lgan bilimlarni talab qilmaydi, masalan, o'n yil oldin. Mening chuqur sub'ektiv nuqtai nazarimdan, men ushbu tizimning rivojlanishini kuzatgan o'n yildan ortiq vaqt davomida Linux yangi boshlanuvchilar uchun ko'proq do'stona bo'lib qoldi va o'tmishda unga xos bo'lgan ko'plab muammolardan xalos bo'ldi. Va u yaxshi.

Qo'lda yasalgan pingvinlar ...

Habré haqida LFS mavzusida bir nechta maqolalar allaqachon mavjud edi, masalan, yoki. Ikkinchisi haqidagi sharhlar mantiqiy fikrni taklif qiladi - agar imkoniyatlar to'plami bo'lsa Linux o'rnatish va uni o'rganish allaqachon to'liq keng, nima uchun bizga LFS kerak?

Men "kosmik kemalar qanday yurishi ... va Yer olov to'pi bo'lganida ..." haqidagi hikoyalarni batafsil bayon qilmayman. Men o'z pozitsiyamga qarab berilgan savolga javob beraman - men LFSni yig'aman, chunki men buni qilishdan manfaatdorman. Men bu jarayonni tizimning "qopqoqligi ostida" qarash uchun yaxshi imkoniyat deb bilaman. Tan olaman, bu yo'lni optimal deb atash qiyin. Biroq, ushbu va keyingi maqolalar Linux tizimini qo'lda qurish jarayoniga bag'ishlanadi. Ushbu maqolalar montaj hujjatlarining tarjimasi bo'lmaydi - bunga alohida ehtiyoj yo'q. Muallif shaxsan duch kelishi kerak bo'lgan jarayonning o'ziga xos xususiyatlari va nuanslariga e'tibor qaratiladi. Keling, ushbu tsiklni neofitning kundaligi kabi ko'rib chiqaylik.

1. Tizim talablari

LFSni yaratish uchun sizga GNU/Linux o'rnatilgan kompyuter kerak bo'ladi. Printsipial jihatdan har qanday tarqatish amalga oshiriladi. Aytaylik, men foydalanadigan mashinalarim haqida Arch Linux. Debian-ga asoslangan taqsimotlar haqida ( Linux Mint, Ubuntu va boshqalar), albatta, ular ham mos keladi, lekin men sizning e'tiboringizni quyidagilarga qaratishga shoshilaman - ishning dastlabki bosqichlaridan birida, muhit o'zgaruvchilari ishga tushirilganda, buyruq qobig'i ogohlantirishi paydo bo'ladi.

$ source ~/.bash_profile dircolors: SHELL muhit oʻzgaruvchisi yoʻq va qobiq turi varianti berilmagan
Men ushbu ogohlantirishni Linux Mint 17 da foydalanuvchi qayta tizimga kirganda va muhit oʻzgaruvchilari manba buyrugʻi bilan yangilanganda /etc/profile dan dircolors (terminalni rang beruvchi buyruq) bilvosita chaqiruvi tufayli oldim. Bu muhim emas va uni e'tiborsiz qoldirish mumkin.

Linux xost tizimida rasmiy tizim talablarida sanab o'tilgan paketlar o'rnatilgan bo'lishi kerak. Ushbu paketlarning aksariyati qutidan chiqariladi yoki ixtiyoriy ishlab chiquvchi vositalaridir. Qanday bo'lmasin, ular ma'lum bir tarqatishning rasmiy omboridan osongina o'rnatiladi. Yaxshi variant Knoppix kabi LiveCD dan foydalanish bo'lsa, LFSni hech qanday operatsion tizimga ega bo'lmagan mashinaga o'rnatishingiz mumkin. Shu ma'noda, tanlov sizniki.

Uskuna va operatsion tizimdan tashqari, sabr-toqat va qat'iyat ham talab qilinadi. Yig'ish va sozlash jarayoni ancha uzoq va ko'p mehnat talab qiladi. Kitobdagi buyruqlarni terminalga nusxa ko'chirishingiz shart emas: birinchidan, sizning holatingiz noyob bo'lishi mumkin; ikkinchidan, bizning maqsadimiz manba kodidan yig'ilgan ishlaydigan operatsion tizimni yaratish tamoyilini tushunishdir, ya'ni biz sodir bo'layotgan jarayonlarning ma'nosini o'rganishimiz kerak bo'ladi. Ishning har bir bosqichiga mazmunli va sekin yondashish kerak.

2. Minimal tizimni yig'ish uchun hujjatlar

Barcha kerakli hujjatlar Linux Form Scratch kitobida jamlangan (havola so'nggi barqaror versiyaning onlayn versiyasiga olib keladi). Yangi boshlanuvchilarga bermoqchi bo'lgan birinchi maslahat - bu eng so'nggi barqaror versiyani olishdir Ingliz tili. Ruscha tarjimalar bor, lekin ular doimo orqada qoladilar joriy versiya. Bundan tashqari, LFS 6.0 ning so'nggi ruscha versiyasiga havola bo'sh joyga olib keladi va rasmiy veb-saytda mavjud bo'lgan yagona tarjima LFS 5.0 ga tegishli, ammo yumshoq qilib aytganda, eskirgan. Tizim yadrosi va GNU loyiha dasturiy ta'minoti muntazam o'zgarishlarga uchraydi va LFS ning eski versiyalarida tasvirlangan paketlarning versiyalari har doim ham yuklab olish uchun mavjud emas va agar ular mavjud bo'lsa, ularni qo'lda qidirish kerak bo'ladi. Shunday qilib, bizning tanlovimiz LFS ning hozirgi inglizcha versiyasidir.

Eslatma: ushbu maqola yozilayotganda LFS wiki maqolasida LFS 7.3 tarjimasiga havola topildi, bu haqiqatga yaqinroq. Biroq, bu tarjima hali tugallanmagan - kitobning aksariyati ingliz tilida.

Shuningdek, kitobning joriy taraqqiyot versiyasidan foydalanish ham kutilmagan qiyinchiliklarga olib kelishi mumkinligi haqida o'quvchini ogohlantirmoqchiman. Ushbu versiyani har kuni yangilanadigan SVN omboridan olish mumkin. Kitob buyruq bilan yuklab olinadi

$ mkdir ~/LFS && cd ~/LFS $ svn CO svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/
Va yig'ish oson, masalan, bu kabi (html versiyasini yaratish uchun sizga tidyhtml paketi kerak)
$ cd KITOB $ mkdir ../html $ BASEDIR=../html qilish

Ushbu versiya eng so'nggi bo'lib, yaqinda chiqarilgan "skynet versiyasi" dan foydalanishga qaratilgan. Linux yadrolari 4.0.

SkyNetning bunga nima aloqasi bor?

Va mana nima:



Birinchi muammo yuklab olingan paketlarning nazorat summalarini tekshirishda paydo bo'ladi

$ md5sum -c md5sums. . lfs-bootscripts-20150222.tar.bz2: BUZILGAN. . md5sum: OGOHLANTIRISH: 1 hisoblangan nazorat summasi mos kelmadi

Belgilangan arxiv ochilgan, fayl o'lchamlari haqiqatga mos keladi. Ehtimol, xatolik CRS ro'yxatini o'z ichiga olgan md5sums fayliga tushib qolgandir. Biroq, tavakkal qilmaslik uchun kitobning barqaror versiyasini olish yaxshiroqdir.

3. Tuproqni tayyorlash

Avvalo, LFS-ni o'rnatish uchun bizga disk maydoni kerak. Bu HDDdagi bitta bo'lim (yoki bir nechta bo'limlar) yoki xostdagi katalog bo'lishi mumkin fayl tizimi. Men 64-bitli Arch Linux-ni o'rnatgan virtual mashinaning HDD-da bo'limga ega bo'lish variantiga qaror qildim.

Minimal o'lcham talab qilinadi disk maydoni- 4GB. Men EXT4 formatida 40 GB hajmdagi mantiqiy bo'lim yaratdim. Ushbu bo'lim xost tizimiga o'rnatilishi kerak. O'rnatish nuqtasini maxsus muhit o'zgaruvchisida saqlash qulay

# eksport LFS=/mnt/lfs
chunki biz bu yo'lga tez-tez murojaat qilishimiz kerak bo'ladi. Biz bo'limni buyruqlar yordamida o'rnatamiz (mening holimda bu sda6 bo'limi, siznikida u boshqacha bo'lishi mumkin)

# mkdir -v $LFS # o'rnatish /dev/sda6 $LFS

Endi biz ikkita katalog yaratishimiz kerak: $LFS/sources - manbalar bilan tarballlarni saqlash uchun; $LFS/tools - vaqtinchalik tizim qurish vositalarini joylashtirish uchun

# mkdir -v $LFS/manbalar # mkdir -v $LFS/vositalari
$LFS/sources katalogiga huquqlarni o'rnating: yozishga ruxsat berilgan (+w) barcha foydalanuvchilarga (a) faqat katalog egasi tomonidan o'chirish imkoniyati (t)

# chmod -v a+wt $LFS/manbalar
Biz $LFS/sources katalogiga ikkita faylni yuklaymiz - yuklab olingan paketlar roʻyxati wget-list va paket nazorat summalari roʻyxati 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/manbalar
kalit --katalog-prefiks yuklab olingan faylni joylashtirish yo'lini belgilaydi. Shundan so'ng, biz o'rnatishimiz kerak bo'lgan hamma narsaning manbalarini yuklab olishni davom ettiramiz

# wget --input-file=$LFS/sources/wget-list --continue --directory-prefix=$LFS/sources
kalit --kirish fayli o'z ichiga olgan faylga ishora qiladi URL manzillar ro'yxati yuklab olinadigan paketlar; --davom etish- tarmoqqa ulanish uzilgan bo'lsa, qisman yuklab olingan fayllarni qaytadan boshlash imkonini beradi. Taxminan 325 MB arxivlar kerakli dasturiy ta'minot manbalari hamda yig'ish uchun zarur bo'lgan yamalar bilan yuklab olinadi. Yuklab olingandan so'ng siz yuklab olingan paketlarning yaxlitligini tekshirishingiz kerak

# pushd $LFS/manba # md5sum -c md5sums # popd
Tekshirishning o'zi md5sum yordam dasturiga qo'ng'iroq bo'lib, u parametr sifatida qabul qilingan md5sums ro'yxatidagi barcha fayllarning nazorat summalarini hisoblab chiqadi va natijani xuddi shu ro'yxatda ko'rsatilgan qiymat bilan taqqoslaydi. Natija, agar muvaffaqiyatli bo'lsa, shunday ko'rinadi

Paket yaxlitligini tekshirish natijasi

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


Men bir nechta pushd/popd buyruqlariga alohida e'tibor qaratdim. Men uzoq vaqtdan beri foydalanayotgan ishonchli Linux foydalanuvchisi bo'lsam ham bu tizim, bu ichki bash buyruqlari men uchun yangi edi. Biroq, ular fayl tizimining turli nuqtalari bo'ylab tez-tez sakrab o'tib, keyin orqaga qaytishingiz kerak bo'lganda juda qulaydir. Pushd buyrug'i sizni vaqtinchalik parametr sifatida ko'rsatilgan katalogga olib boradi. Orqaga qaytish popd buyrug'i bilan amalga oshiriladi. Bunday holda, siz sakrab o'tadigan marshrut stek shaklida tashkil etilgan va siz orqaga qaytish uchun yo'lni qayta kiritishingiz shart emas.

Endi bizda yig'ishni boshlash uchun kerak bo'lgan hamma narsa bor, lekin biz faqat yakuniy tayyorgarlik ishlarini bajarishimiz kerak.

4. Ish muhitini o'rnatish

Avvalo, xost tizimining ildizidagi $LFS/tools katalogiga ramziy havola yarataylik.

# ln -sv $LFS/asboblar /
Bu nima uchun? Umuman olganda, bizga ramziy havolalar nima uchun kerak? Ular fayl tizimining ma'lum nuqtalariga bir xil kirishni ta'minlash uchun yaratilgan. IN bu daqiqa, tizim xostida ushbu katalogga yo'l /mnt/lfs/tools kabi ko'rinadi. Ildizi /mnt/lfs da joylashgan vaqtinchalik tizimga o'tsak, bu vaqtinchalik tizimda katalog mazmuni /tools da mavjud bo'ladi. Biz to'playdigan asosiy vositalar ushbu katalogga qaerda ishga tushirilishidan qat'i nazar, /tools yo'li bo'ylab kirishadi - bu yo'l kompilyatsiyadan so'ng ikkilik fayllarga ulanadi. Shuning uchun, belgilangan havolani yaratish orqali biz tizim ildizining joriy joylashuvidan qat'i nazar, /tools yo'li bo'ylab ushbu katalogga kirish imkoniyatini taqdim etamiz. Aks holda, vaqtinchalik tizimga o'tgandan so'ng, biz birinchi kompilyatsiyada muvaffaqiyatsizlikka duch kelamiz.

Endi yarataylik yangi guruh va yangi foydalanuvchi, uning nomidan biz vaqtinchalik tizimni yig'ishning birinchi bosqichida ishlaymiz. Siz, albatta, ildiz sifatida ishlamasligingiz kerak - masalan, o'rnatiladigan paketni sozlashda siz chalg'itishingiz yoki o'rnatish katalogiga prefiks o'rnatishni unutishingiz mumkin va yig'ilgan paketni xost tizimiga o'rnatish uni buzadi (yoki ishini murakkablashtiradi). kelajakda paket menejeri). Faqat ma'lum kataloglarga yozish ruxsatiga ega bo'lgan imtiyozsiz foydalanuvchi sifatida ishlash muammolardan qochish imkonini beradi.

# groupadd lfs # useradd -s /bin/bash -g lfs -m -k /dev/null lfs
Birinchi buyruq lfs guruhini yaratadi. Ikkinchisi lfs foydalanuvchisini yaratadi. Parametrlarning ma'nosi quyidagicha:

  • -s /bin/bash - foydalanuvchi seansida ishlatiladigan buyruq qobig'i
  • -g lfs - foydalanuvchi tegishli bo'lgan guruh
  • -m - foydalanuvchining uy katalogi /home/lfs yaratilishi kerakligini bildiradi
  • -k /dev/null - bo'sh shablon katalogi. Odatiy bo'lib, uy katalogini yaratishda unga /etc/skel-da joylashgan fayllar va papkalar joylashtiriladi. Agar so'ralsa, ushbu shablonni o'zgartirish mumkin, lekin biz bo'sh katalog yaratmoqchimiz /home/lfs, biz shablon sifatida null faylni o'tkazish orqali ko'rsatamiz.

lfs foydalanuvchisi uchun parol o'rnating
#passwdlfs
va uni $LFS/sources va $LFS/tools kataloglarining egasiga aylantiring

# chown -v lfs $LFS/manbalar # chown -v lfs $LFS/asboblar

lfs sifatida tizimga kiring

#su-lfs
Buyruqlar parametrlaridagi belgi (kalitning qisqartmasi -l yoki --tizimga kirish) uchun ekanligini bildiradi berilgan foydalanuvchi oldingi sessiyadagi muhit o'zgaruvchilari qiymatlarini meros qilib olmaydigan "toza" seans yaratishingiz kerak. Ushbu sessiya uchun biz o'z muhit o'zgaruvchilari to'plamini yaratamiz

Foydalanuvchining uy katalogida fayllar yarating

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

~/.bash_profile fayli foydalanuvchining individual sozlamalarini belgilaydi atrof-muhit o'zgaruvchilari. Jamoa

Exec env -i HOME=$HOME TERM=$TERM PS1="\u:W\$ " /bin/bash
"toza" foydalanuvchi muhitini yaratadi (kalit -i oldingi sozlamalarni e'tiborsiz qoldirishni belgilaydi) muhit o'zgaruvchilariga qiymatlarni belgilash orqali

  • HOME - uy katalogi, /home/lfs ga teng bo'lgan o'zgaruvchiga joriy qiymatni tayinlang
  • TERM - foydalaniladigan terminal turi, biz joriyini ham qoldiramiz
  • PS1 - taklifnoma formati buyruq qatori. Bunday holda, format foydalanuvchi nomi sifatida o'rnatiladi: joriy ishchi katalog$, bu erda maxsus belgi \u foydalanuvchi nomi, \W joriy ishchi katalog.
  • /bin/bash - yangi qobiq namunasini ishga tushiruvchi buyruq

~/.bashrc fayli ma'lum bir foydalanuvchi sessiyasiga kirishda qanday sozlamalarni o'rnatish kerakligini belgilaydi

  • set +h - bash-da xeshni o'chirib qo'yadi. Buyruq qobig'i yo'llarni eslab qoladi bajariladigan fayllar, avvalroq ishga tushirilgan, bu albatta tizimni tezlashtiradi. Biroq, biz turli yo'llarda joylashgan bir xil dasturlarning turli versiyalarini chaqiramiz, shuning uchun xeshlash bizga faqat zarar keltiradi.
  • umask 022 - yangi fayllar va kataloglarga standart kirish huquqlarini o'rnatadi. 022 qiymati fayllar 644 (rw- r-- r--) huquqlar va 755 (rwx r-x r-x) huquqlarga ega kataloglar yaratilishini bildiradi. Har bir umask bit to'plami huquqlar atributlaridagi mos bit qayta o'rnatilganligini bildiradi
  • LFS=/mnt/lfs - yig'ilayotgan tizimning ildizi
  • LC_ALL=POSIX - ishga tushirilgan dasturlarning lokalizatsiyasini aniqlaydi. POSIX belgilarni kodlash usulidan mustaqil bo'lgan displey standartini belgilaydi.
  • LFS_TGT - vaqtinchalik tizimni yaratish vositalarini yaratishda foydalaniladigan maqsadli mashina tavsifini belgilaydi
  • PATH - bajariladigan fayllarni qidirish yo'llari
  • eksport - yuqorida ko'rsatilgan qiymatlarni belgilangan o'zgaruvchilarga belgilaydi

Alohida-alohida, siz fayllarni yaratish usuliga e'tibor berishingiz kerak. Nima uchun biz mushuk buyrug'idan foydalanamiz, nega biz sevimli konsol muharriridan foydalana olmaymiz? Xo'sh, biz xost tizimida ekanmiz, matn muharriri biz uchun mavjud. Ammo vaqtinchalik tizimga o‘tsak, bizda hech qanday muharrir bo‘lmaydi. Shuning uchun, chiqish oqimini bir fayldan boshqasiga yo'naltiradigan cat buyrug'ini ishlatishingiz kerak. Kirish fayli ko'rsatilmagan, demak u ishlatiladi standart oqim kiritish. Chiqish fayli biz yaratayotgan fayl, tugatish sharti esa kirish oqimidagi fayl oxiri belgilar ketma-ketligi - EOF ko'rinishidir. Buyruqni kiritganimizdan so'ng biz matn kiritishimiz mumkin bo'ladi yaratilgan fayl to'g'ridan-to'g'ri terminalda. Jarayonni tugatish uchun EOF qatorini kiriting. Shu tarzda biz buyruq qobig'ini ibtidoiy matn muharririga aylantiramiz.

Yaratilgan skriptlar har safar lfs nomidan tizimga kirganingizda bajariladi. Buyruq bilan foydalanuvchi muhitini yangilaymiz

/$ manba ~/.bash_profile

Biz zarurligiga ishonch hosil qilamiz atrof-muhit o'zgaruvchilari o'rnatilgan
/$set

5. Vaqtinchalik asboblar to'plamini yig'ish (Vaqtinchalik tizim)

Tizimni yig'ishni boshlaganimizda, biz klassik "tovuq va tuxum" muammosiga duch kelamiz. Tizimni qurish uchun bizga kompilyator, bog'lovchi va kutubxonalar kerak. Ammo bizda yuqorida aytilganlarning hech biri yo'q, faqat ularning manbalari. Bizda xost tizimida kompilyator mavjud va biz u bilan kerakli dasturlarni yig'ishni boshlaymiz. Biroq, agar siz oddiy sozlamalar bilan bir xil gcc ni yaratsangiz, u LFS tizimida ishlamaydi dastlabki bosqich uning qurilishi - u faoliyat uchun zarur bo'lgan kutubxonalarni dinamik bog'lashdan foydalanadi. Ish uchun zarur bo'lgan barcha kodlar statik ravishda bog'lanishi kerak, ya'ni bajariladigan faylga aniq kiritilishi kerak.

Shunday qilib, biz qiladigan birinchi narsa ba'zi qismlarni o'zaro kompilyatsiya qilishdir kelajak tizimi, yakuniy versiyasini yig'ishda ulardan foydalanish imkoniyatiga ega bo'lish uchun.

Vaqtinchalik tizimni yig'ish bo'yicha barcha ishlar $LFS/sources katalogida amalga oshiriladi, shuning uchun u erga boramiz.

/$ cd $LFS/manbalar
Qurilayotgan barcha paketlar uchun qurish tartibi quyidagi harakatlar ketma-ketligini o'z ichiga oladi (agar boshqacha ko'rsatilmagan bo'lsa!):

  • Arxivni paket bilan oching
    $tar -pxf
  • Ochilmagan katalogga o'ting
    $cd
  • Biz yig'ish ko'rsatmalariga amal qilamiz (har bir paketda hujjatlarda batafsil tavsiflangan nuanslar mavjud)
  • Yuqoridagi katalogga o'ting, $LFS/source ga qayting va ochish va yig'ish paytida yaratilgan barcha kataloglarni o'chiring.

Paketlarni yaratish uchun ketadigan vaqt har xil bo'ladi - deyarli bir lahzadan ikki yarim soatgacha (barcha testlar bilan chrootdan keyin gcc qurish taxminan shuncha davom etadi). Kompyuter tezligi har xil bo'lganligi sababli, qurish vaqtini o'lchash uchun standart qurilish birligi (SBU) deb nomlangan nisbiy birlik tanlanadi. Bitta SBU birinchi bo'lib tuzilgan binutils paketini qurish vaqtiga teng. 1.0 SBU muddatini sizning tizimingiz uchun taxminan taxmin qilish mumkin, ammo hozircha quyida batafsilroq

Tavsiya: tizimni bir nechta iplarga yig'mang. Agar bor bo'lsa ko'p yadroli protsessor, keyin -j kaliti ishni tezlashtiradi, lekin keyinchalik bu ba'zi muhim testlarning muvaffaqiyatsiz bo'lishiga olib kelishi mumkin va beqaror ish yig'ilgan dasturiy ta'minot. Bitta ipda yig'ish unchalik uzoq emas - ko'p ipli yig'ish bilan bog'liq muammolarni hal qilishga ko'proq vaqt sarflanadi.

Biz har bir paketni yaratishni qamrab olmaymiz - LFS kitobining o'zi buni qamrab oladi. Biroq, biz eng muhim paketlarni kompilyatsiya qilishni hisobga olgan holda, ba'zi yig'ish nuanslariga e'tibor qaratamiz

6. Binoli binoni - birinchi o'tish. SBU o'lchovi

Binutils - bu dasturiy ta'minotni yaratish uchun yordamchi dasturlarni o'z ichiga olgan paket. Bularga assembler (as) va linker (ld) kiradi. Ular ba'zi testlardan o'tish uchun glibc va gcc tomonidan kerak, shuning uchun Joriy paket birinchi bo'lib ketadi.

Arxivni oching va uning mazmuni bilan katalogga o'ting

$ tar -pxf binutils-2.25.tar.bz2 $ cd binutils-2.25

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

Endi biz to'g'ri Makefile faylini yaratish uchun paketni sozlashimiz kerak.

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

Kalitlarga alohida e'tibor:

  • --prefiks=/asboblar- kompilyatsiya qilingan paketlar vaqtinchalik tizim joylashgan /tools katalogiga o'rnatilishini bildiradi.
  • --with-sysroot=$LFS- vaqtinchalik tizimdagi dasturlarning ishlashi uchun zarur bo'lgan kutubxonalar va boshqa resurslarni qidirish amalga oshiriladigan tizimning asosiy katalogi.
  • --with-lib-path=/tools/lib- ld bog'lovchisi uchun belgilangan kutubxona qidirish yo'li
  • --target=$LFS_TGT- maqsadli mashinaning tavsifini o'rnatish
  • --disable-nls- to'plangan paketlarni xalqarolashtirishni o'chiradi. Ayni paytda bu keraksiz va uning mavjudligi bir qator nosozliklarga olib kelishi mumkin
  • --o'chirish-verish- xost tizimi kompilyatoridan ogohlantirishlarni qabul qilishda kompilyatsiyani to'xtatishni o'chiradi

Konfigurator ishga tushirilgandan so'ng, biz oladigan natija paketni yaratish va o'rnatish uchun mo'ljallangan Makefile faylidir. Biz paketni yig'amiz va SBU ni o'lchaymiz

$time(qilish;)
Vaqt vaqt (...) yordam dasturi bilan o'lchanadi, u jingalak qavslar ichiga olingan buyruqlarning bajarilish vaqtini qaytaradi. Bu imkoniyat beradi taxminan qolgan paketlarni qurish vaqti haqida tasavvurga ega bo'lish uchun SBU ni taxmin qiling.

Eslatma: LFS qurish va o'rnatish konfiguratsiya vaqtlarini o'lchashni tavsiya qiladi. Ammo bu tavsiyalar juda keng. Mashinaning ish vaqtining ko'p qismi ishlab chiqarish va sinovga sarflanadi. Bundan tashqari, make va make install oʻrtasida boshqa amallar ham boʻlishi mumkin, ular bilan tanishishingiz kerak. Shuning uchun men hali ham boshqa ishlarning umumiy tizim yuki bilan belgilanadigan o'lchovning taxminiy xususiyatini hisobga olgan holda, yuqorida tavsiflangan tarzda baholashni amalga oshirishga qaror qildim.

Mening tizimim uchun - virtual mashina 4 yadroda Intel Core 4096 MB operativ xotiraga ega i7 bir xil Intel Core i7-2600K (gipertrading bilan 4 yadro) ustidagi xost ustida ishlaydi, 16 Gb tezkor xotiraga ega - SBU bitta ipga yig'ilganda 2 daqiqa 32 soniyani tashkil etdi.

Qolgan paketlarni qurish vaqti kitobda SBU ning fraktsiyalarida berilgan, shuning uchun endi siz qolgan hamma narsa uchun taxminiy qurish vaqtini taxmin qilishingiz mumkin, shu bilan ishingizni rejalashtirishingiz mumkin (masalan, yakuniy qurish, gcc qurish, sinovlar va borib, boshqa narsalarni qiling, chunki buning hammasi 63 SBU oladi - umid qilamanki, ekranga tikilmaydi)

Yig'ish tugallangandan so'ng biz kutubxona kataloglariga ramziy havolalar yaratamiz. Agar tizimingiz 64 bitli bo'lsa, bu operatsiya zarur, shuning uchun quyidagi buyruq birinchi navbatda tizimning bitligini tekshiradi va kerak bo'lganda faqat simli havolalarni yaratadi.

$ case $(uname -m) in > x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; >esac
Shundan so'ng biz yig'ilganlarni o'rnatamiz

$ o'rnatish
Biz yuqoriga chiqamiz va endi kerak bo'lmagan kataloglarni o'chirib tashlaymiz

$ cd .. $ rm -r binutils-2,25 $ rm -r binutils-build

7. GCC qurilishi - birinchi o'tish

Tizimni qurish jarayonida kompilyatorni uch marta qurish kerak bo'ladi. Dastlabki ikkita o'tish xost tizimidan mustaqil ravishda ishlay oladigan kompilyatorni olish uchun kerak. Birinchi o'tishda biz barcha kerakli kodlarni statik bog'lashdan foydalanamiz, shuningdek, ba'zi qo'shimcha sozlamalarni qilamiz.

Birinchidan, arxivni manbalar bilan oching va yaratilgan katalogga o'ting

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

Muvaffaqiyatli kompilyatsiya qilish uchun bizga yana uchta paketning manbalari kerak: GMP, MPFR va MPC. Keling, ularni kompilyator manba katalogiga ochamiz va kataloglarning nomini GCC manbalarida ko'rsatilgandek o'zgartiramiz.

$ 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
Bundan tashqari, siz gcc manbalarini tahrirlashingiz kerak bo'ladi. Haqiqat shundaki, ld bog'lovchisi uchun qidiruv yo'li ularda oddiy ishlaydigan tizim kabi aniqlangan. Bizning holatda, bog'lovchi /tools katalogida joylashgan (u binutilsning bir qismi sifatida qurilgan). Ba'zi so'l ta'riflar /tools ga ham tegishli bo'lishi kerak, shuning uchun biz dahshatli buyruq yordamida manbalarni o'zgartiramiz.

$ fayl uchun \ > $(gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h toping) > 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 """ >> $orig > $file ni bosing.
Hm... bu jamoaga birinchi qarash meni dahshatga soldi. Aslida, inux64.h, linux.h, sysv4.h fayllari gcc/config katalogida mavjud bo'lishi sharti bilan bu erda o'tkaziladi. Ularning har biri *.orig qo'shimchasi bilan yangi faylga ko'chiriladi (biz asl manbalarni saqlaymiz - keyin ular sed uchun kirish oqimi sifatida joylashtiriladi), so'ngra topilgan har bir faylda /tools ld o'rniga almashtiriladi. bog'lovchi qidiruv yo'li va /usr /tools bilan almashtiriladi. Bundan tashqari, har bir faylning oxiriga STANDARD_STARTFILE_PREFIX_1 va STANDARD_STARTFILE_PREFIX_2 makroslarining bekor qilinishi qo‘shiladi, shunda ular kutubxonalarga to‘g‘ri yo‘llarni ko‘rsatadi. Keyinchalik, sensorli buyruq barcha qayta ishlangan fayllarni oxirgi o'zgartirish vaqtini joriyiga o'zgartiradi, bu cp buyrug'ining -u tugmasi bilan birgalikda (agar manba fayl maqsad fayldan yangiroq bo'lsa, nusxa ko'chiring) istalmagan o'zgarishlarni oldini oladi. buyruq tasodifan takrorlanadi.

Ushbu misoldagi sed sintaksisi haqida bir necha so'z

sed - oddiy iboralar bilan belgilangan naqshlar yordamida matnli fayllar ustida amallarni bajaradigan oqimli matn muharriri.

Men LFSni birinchi marta ochganimda, men Leonardo da Vinchi san'ati talabasi kabi sed sintaksisini tushundim. qishloq xo'jaligi. Biroq, doimiy googling meni quyidagi fikrlarga olib keldi:

  • Qayta ishlangan yo'llar "/" belgisini o'z ichiga olganligi sababli, sed operand ajratuvchi o'rniga "@" belgisidan foydalanadi.
  • "\(64\)\?" shaklidagi konstruktsiyalar. va "\(32\)\?" Qidiruv satrida “64” va “32” satrlari bo‘lishi yoki bo‘lmasligi mumkinligini ayting – operatsiya ikkala holatda ham bajarilishi kerak.
  • "&" belgisi /tools qidiruv satrlaridan oldin joylashtirilishini bildiradi (ya'ni topilgan ifoda "&" o'rnida bo'ladi)

Shunday qilib, men "s@/lib\(64\)\?\(32\)\?/ld@/tools&@g" iborasini tahlil qildim - "/lib", "/lib64" va " / ni o'z ichiga olgan barcha qatorlarni toping. lib32" va ulardan oldin "/tools" qatorini va "s@/usr@/tools@g" ifodasini qo'ying - "/usr" ni o'z ichiga olgan barcha qatorlarni toping va ularni "/tools" bilan almashtiring.


Umuman olganda, vaqtinchalik tizimni yig'ish (va asosiysi ham) tom ma'noda bunday tuzilmalardan foydalanish bilan bog'liq. Ularning ma'nosini tushunishga harakat qilish va buyruqlarni qo'llaringiz bilan yozish tavsiya etiladi. Keyin, yig'ish jarayonining oxiriga kelib, siz matnni qayta ishlash texnikasi va *nix konsolida ishlash bo'yicha ko'plab masalalar bo'yicha ma'lumotga ega bo'lasiz.

Keyingi buyruq:

$ sed -i "/k prot/agcc_cv_libc_provides_ssp=yes" gcc/configure
konfigurator skriptiga tuzatish kiritadi, lekin mening holimda u unga hech qanday o'zgartirish kiritmadi. Kitobga ko'ra, u gcc ning stek himoyasi bilan ishlash xususiyatini o'zgartirishga qaratilgan.

$ ../gcc-4.9.2/configure \ > --target=$LFS_TGT \ > --prefix=/tools \ > --with-sysroot=$LFS \ > --with-newlib \ > --without- sarlavhalar \ > --with-local-prefix=/tools \ > --with-native-system-header-dir=/tools/include \ > --disable-nls \ > --disable-shared \ > --disable -multlilib \ > --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++

Kalitlar quyidagi ma'noga ega:

  • --newlib bilan- libc qo'llab-quvvatlashini talab qiladigan har qanday kodni kompilyatsiya qilishni oldini oladi - bizda bu kutubxonalar hali mavjud emas, ular keyinroq tuziladi
  • --sarlavhasiz- hali bizda mavjud bo'lmagan standart sarlavha fayllaridan foydalanishni o'chirib qo'yadi
  • --with-local-prefix=/vositalari- GCC sarlavha fayllarini qidiradigan mahalliy yo'l. Odatiy bo'lib, uning qiymati /usr/local
  • --with-native-system-header-dir=/tools/include- tizim sarlavhalarini qidirish yo'li
  • --o'chirish-birgalikda- barcha kutubxona kodlari statik ravishda bog'lanishi kerakligini ko'rsatadi
  • --decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libitm, --disable-libquadmath, --disable-libsanitizer, --disable-libssp, --disable-libvtv, --disable-libcilkrts, --disable-libstdc++-v3- ushbu bosqichda keraksiz bo'lgan barcha kompilyator kengaytmalarini o'chirib qo'yadi - suzuvchi nuqta, multithreading va parallelizm bilan ishlash, shuningdek standart kutubxona C++ va boshqalar.
  • --o'chirish-multilib- 64-bitli muhitda 32-bitli kodni yaratishni qoʻllab-quvvatlashni oʻchirib qoʻyadi
  • --enable-languages=c,c++- C/C++ qo'llab-quvvatlash bilan cheklangan

Yig'ishni shu tarzda sozlaganimizdan so'ng, biz uni bajaramiz va paketni o'rnatamiz
$ make $ oʻrnatish

Keyin o'zimizni tozalaymiz
$ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2

8. Vaqtinchalik tizimning qolgan paketlarini yig'ish

Vaqtinchalik tizimni yig'ishning keyingi jarayoni tushuntirishni talab qilmaydi va men o'quvchini LFS kitobiga havola qilaman. Shunisi e'tiborga loyiqki, butun jarayon davomida siz manba kodini tahrirlashingiz va maxsus konfigurator parametrlarini o'rnatishingiz kerak bo'ladi va bu jarayon o'ylangan va bemalol bo'lishi kerak. Ushbu bosqichdagi xato juda qimmatga tushishi mumkin va uni topish tayyor bo'lmagan newfag uchun juda qiyin.

Men vaqtinchalik tizim paketlarining minimal to'plamini va ba'zi muhim tushuntirishlarni tavsiflash bilan cheklanaman. Keyinchalik siz gcc-ni o'rnatishingiz kerak

  • Linux-3.19 yadro sarlavhalari - GLibc kutubxonalari tomonidan talab qilinadi
  • Glibc-2.21 xotirani taqsimlashni, fayl tizimining ishlashini va asosiy arifmetikani ta'minlovchi asosiy C kutubxonasidir.

    Glibc-ni qurgandan so'ng, siz yig'ilgan kompilyatorning birinchi sinovini o'tkazishingiz kerak. Biz primitiv dastur yaratamiz va uni vaqtinchalik to'plamdan kompilyator bilan yig'amiz

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

    Olingan ikkilik faylni dinamik kutubxonani yuklovchi qidiruv yo'lining mavjudligi va mazmuni uchun tahlil qiling

    $ readelf -f a.out | grep ": / Tools"
    Mening holatimda quyidagi natijaga erishildi:


    bu bog'lovchiga to'g'ri havolani ko'rsatadi. Kitob 32 bitli tizim uchun natija beradi, lekin men 64 bitli tizimni yig'dim va bu erda berilgan yo'l kitobda ko'rsatilganidan farq qiladi.

    Har bir narsa tartibda ekanligiga ishonch hosil qilgandan so'ng, sinov dasturini o'chiring
    $ rm -v dummy.c a.out

  • Libstdc++-4.9.2 - g++ kompilyatori ishlashi uchun zarur bo'lgan standart C++ kutubxonalari
  • Binutils-2.25 - allaqachon hisobga olgan holda ikkinchi qurish o'tishi o'rnatilgan paketlar. Yig'ish kompilyator, ar arxivi (binutils tarkibiga kiritilgan) va birinchi o'tishda allaqachon tuzilgan kutubxonalar hamda CC, AR va RANLIB muhit o'zgaruvchilari orqali ko'rsatilgan kutubxonalar yordamida amalga oshiriladi.

    $ 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

  • GCC-4.9.2 - vaqtinchalik tizim vositalari tomonidan amalga oshiriladigan ikkinchi o'tish

    $ CC=$LFS_TGT-gcc \ > CXX=$LFS_TGT-g++ \ > AR=$LFS_TGT-ar \ > RANLIB=$LFS_TGT-ranlib \ > ../gcc-4.9.2/configure \ > --prefiks=/ asboblar \ > --local-prefiks bilan=/vositalar \ > --native-system-header-dir=/tools/include \ > --enable-languages=c,c++ \ > --disable-libstdcxx- pch \ > --disable-multilib \ > --disable-bootstrap \ > --disable-libgomp

    Paketlar ishlab chiqilgach, ular asta-sekin ishlab chiqarishga kiritiladi, bu bizni xost tizimidan tobora ko'proq mustaqil qiladi. Ushbu bosqichda takroriy kompilyator testi zarur.

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

  • Tcl-8.6.3 - testlarni bajarish uchun kompilyator tomonidan talab qilinadigan Tcl tilini qo'llab-quvvatlash paketi.
  • Expect-5.45 - Tcl kengaytmasi sifatida ishlatiladigan sinov avtomatlashtirish vositasi
  • DejaGNU-1.5.2 - dastur testlarini yozish uchun ramka
  • Tekshirish-0.9.14 - C dasturlarining birlik testlarini tashkil qilish uchun asos
  • Ncurses-5.9 - bu psevdografik terminal interfeysini tashkil qilish uchun kutubxona, xususan, ba'zi konfiguratsiya yordam dasturlari (shu jumladan Linux yadrosi tuzilishini sozlashda) va mc kabi mashhur dastur.
  • Bash-4.3.30 - buyruq qobig'i. Sharxsiz.
  • Bzip2-1.0.6 - bzip2 arxivlarini qo'llab-quvvatlash.
  • Coreutils-8.23 o'z ichiga olgan asosiy GNU muhit paketlaridan biridir tashqi buyruqlar mushuk, ls, rm va boshqalar kabi qobiqlar
  • Diffutils-3.3 - fayllar va kataloglarni taqqoslash uchun yordamchi dasturlar.
  • File-5.22 - fayl turlarini aniqlash uchun yordamchi dasturlar.
  • Findutils-4.4.2 - fayllar va kataloglarni qidirish uchun yordamchi dasturlar. U, masalan, keng qo'llaniladigan topilmani o'z ichiga oladi
  • Gawk-4.1.1 - GNU awk yordam dasturini amalga oshirish - satr bo'yicha tahlil qilish va qayta ishlash matnli fayllar va boshqa kirish oqimlari.
  • Gettext-0.19.4 - dasturni xalqarolashtirishni qo'llab-quvvatlash uchun yordamchi dasturlar to'plami.
  • Grep-2.21 - kirish oqimidagi matn qidirish yordam dasturi
  • Gzip-1.6 - boshqa arxivchi
  • M4-1.4.17 - dasturiy ta'minotni sozlash va yig'ish vositalari tomonidan ishlatiladigan makroprotsessor
  • Make-4.1 - avtomatik dasturiy ta'minot yaratish yordam dasturi
  • Patch-2.7.4 - manba kodi yamoqlari bilan ishlash uchun yordamchi dastur
  • Perl-5.20.2 - Perl tili tarjimoni
  • Sed-4.2.2 - oqimli matn muharriri
  • Tar-1.28 - usiz qayerda bo'lardik?
  • Texinfo-5.2 - hujjatlar ma'lumotlar sahifalari bilan ishlash uchun yordamchi dasturlar
  • Util-linux-2.26 Linux tizim utilitlarining asosiy paketidir. Masalan, o'rnatishni o'z ichiga oladi
  • Xz-5.2.0 boshqa arxivlovchi hisoblanadi.

9. Nosozliklarni tuzatish ma'lumotlarini kesish

Har bir narsa yig'ilgandan so'ng, joyni tejash uchun yig'ilgan ikkilik fayllardan disk raskadrovka ma'lumotlarini kesib tashlash tavsiya etiladi. Biz buni jamoalarda qilamiz

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

Bundan tashqari, siz o'rnatilgan, lekin hali kerak bo'lmagan hujjatlarni o'chirishingiz mumkin - ular hali ham to'planadi va qayta o'rnatiladi va bu safar tugatish uchun.

$ rm -rf /vositalar/(, almashish)/(ma'lumot,man,doc)

Pastki chiziq

Natijada, bizda $LFS/tools katalogida joylashgan vaqtinchalik tizim mavjud bo'lib, biz keyingi bosqichda GNU muhiti va tizim konfiguratsiyasini yakuniy yig'ish uchun o'tamiz. Lekin bu haqda keyinroq aytib beraman.

Yozuvlarimga e'tibor berganingiz uchun tashakkur!

Men juda yoshligimdan kompyuterga qiziqardim. Bu qiziqish bolalar bog'chasida MS-DOS ostida o'yin o'ynashdan kuchaydi va maktab oxiriga qadar har xil dasturlash musobaqalari bilan yakunlanadi. Maktabdan keyin men dasturchi bo'lish uchun texnik institutga o'qishga borganim ajablanarli emas. Eng ajablanarlisi shundaki, men bu yillar davomida GNU/Linux kabi ajoyib operatsion tizimdan mutlaqo yiroqman. Ammo bir yarim yil oldin, birinchi semestrning boshida men bir yigitni uchratdim (u mendan bir oz katta edi va texnik maktabdan keyin institutga o'qishga kirgan - ish tajribasi bor edi), u suhbatlardan birida shunday dedi:
"Siz GNU/Linux-ni o'rganishni boshlamoqchimisiz? Linuxni noldan boshlang."

Yagona qog'oz tarqatish

LFS (keyingi o'rinlarda Linux From Scratch qisqartmasi) Gerard Beekmans tomonidan yozilgan kitob bo'lib, u manba kodidan GNU/Linuxning minimal ishchi versiyasini yaratish jarayonini tavsiflaydi. Nega qog'oz? Bir vaqtlar kitobni qattiq jildda sotib olish mumkin edi, bu "tarqatish" ni biroz g'ayrioddiy qiladi, shunday emasmi? Kitobning o'ziga qo'shimcha ravishda, uni yig'ish uchun, albatta, sizga Internet kerak bo'ladi (yoki oldindan yuklab olingan manba kodlari), qattiq diskingizdagi bepul bo'lim va har qanday operatsion tizim kompilyatorli Linux yadrosiga asoslangan. Shaxsan men har doim oldindan tuzilgan LFS taqsimotidan foydalanaman yoki to'liq o'rnatish Slackware - bu sizga kerak bo'lgan hamma narsaga ega, buni (masalan, Ubuntu) haqida aytib bo'lmaydi. Albatta, siz har doim etishmayotgan paketlarni yuklab olishingiz mumkin, lekin biz faqat Linuxni o'rganmoqchimiz, to'g'rimi? Va Slackware hatto o'zida ham asosiy o'rnatish va konfiguratsiyasiz kerakli vositalarni taqdim etadi.

Darhol aytish kerakki, LFS kitobidan tuzilgan tarqatish haqiqatan ham hech narsa qila olmaydi. To'g'rirog'i, tajribasiz foydalanuvchiga hech narsa kerak bo'lmaydi. U yoqilishi, o'chirilishi, qayta ishga tushirilishi, Ethernet ulanishidan foydalanishi mumkin, lekin eng muhimi, kompilyatsiya qilish. Shunday qilib, endi hamjamiyat tomonidan qo'llab-quvvatlanadigan boshqa kitoblar ham bor - Beyond LFS sizga foydalanuvchi uchun qiziqarli bo'lgan dasturlarni to'plash imkonini beradi. Brauzerdan va grafik muhit, ma'lumotlar bazasini boshqarish tizimlariga va DHCP serverlari. Kitob versiyada asosiy kitobdan orqada qolishga moyildir, lekin LFSdan olingan tajriba odatda versiya ziddiyatlarini mustaqil hal qilish uchun etarli. Yana uchta kitob - Avtomatlashtirilgan LFS, Cross LFS va Hardened LFS nomlarga to'liq mos keladi va ushbu maqola doirasidan tashqarida. Biroq, uni har doim Internetda o'qishingiz mumkin, to'g'rimi?

Lekin nima uchun undan boshlash kerak?

Hamma narsa juda oddiy, agar kulgili bo'lmasa. Ko'rsatmalarga qo'shimcha ravishda, kitobda juda ko'p nazariy (lekin juda ixcham va natijada qayg'uli emas) materiallar mavjud. Ubuntu-ni o'rnating. Libtool paketi nima qilishini bilasizmi? Yoki Gawkmi? LFS-ni bir nechta muvaffaqiyatli qurgandan so'ng, siz tizimingizdagi har bir paketni bilib olasiz va eng muhimi, ularning o'zaro ta'sirini tushunasiz. Ha, tizimning tarkibi minimal, ammo bu uni takomillashtirishga doimo qiziqish uyg'otadi. Sizga tez-tez yordam so'rab Googlega murojaat qilishni va ingliz tilidagi hujjatlarni o'qishni o'rgatadi. Avvaliga siz o'zingizning harakatlaringizning yarmini ham tushunolmaysiz, kod bloklarini diqqat bilan qayta terish yoki konsolga nusxalash. Ammo oxirida shuni tushunish kerakki, bu grafik yordamisiz va kuchli video kartasiz, yangi Aero va sensorli ekranlar, siz o'zingiz yig'gan operatsion tizim sizga shunday kuch va g'urur zaxirasini beradiki, siz o'zingiz yangi bilim va yangi g'alabalarga erishasiz. Men biroz mubolag'a qilyapman, lekin yangi tizimga birinchi marta qayta yuklangandan keyingi tuyg'uni hozir ham unutish qiyin.

Raqamlar va hayotning qattiq haqiqati

LFS umuman minimal taqsimot emas. Yig'ish uchun diskda taxminan 3 bo'sh gigabayt kerak bo'ladi (bu allaqachon ishlayotgan Linux-asosidagi tizimga qo'shimcha ravishda) - ammo ma'lum raqslardan so'ng tizimni Live-CDga aylantirish mumkin. Agar menda shunday imkoniyat bo'lsa, bu qanday amalga oshirilishini keyinroq aytib beraman. Har qanday narsani va hamma narsani kompilyatsiya qilish (yaratish zarurligini hisobga olgan holda konfiguratsiya fayllari va boshqa narsalar) taxminan ikki kun davom etadi. Bu uyqu, ovqatlanish va kechasi kompyuterni o'chirish uchun tanaffuslar bilan bo'lsa. Boshqa tomondan, bu tizim yig'ilgan kompyuterning ishlashiga bog'liq. Mening birinchi qurbonim edi MSI noutbuki X-340 - Intel protsessori 1,2 gigagerts chastotali Core 2 Solo (umuman aytganda, LFSni bitta yadroli tizimda qurish tavsiya etiladi). Operativ xotira- 2 GB DDR2. Hatto pastroq texnik xususiyatlar juda etarli va tez protsessorda yig'ish ancha tezroq bo'ladi.

Aytgancha, har bir paketni qurishning taxminiy vaqti qo'llanmada ko'rsatilgan. Vaqt birligi Binutils paketini yaratish vaqti sifatida qabul qilinadi - assembler, bog'lovchi va ob'ekt fayllari bilan ishlash uchun boshqa bir qator kichikroq yordamchi dasturlar. Yuqoridagi tizimda bu uch daqiqa davom etdi.

Tarqatish tarkibi

LFSga kiritilgan barcha paketlarni sanab o'tish unchalik mantiqiy emas. Ro'yxat uzoq bo'ladi va yangi boshlanuvchiga deyarli hech narsa aytmaydi; bilimdon odam uchun ortiqcha. Ushbu qisqa bo'limda men faqat umumiy maslahat bermoqchi edim. Birinchidan, kitobda tavsiflanmagan paketni yaratishda, yamoqlar omboriga qarang - u allaqachon LFSda foydalanish uchun moslashtirilgan bo'lishi mumkin. Ikkinchidan, BLFS deyarli butunlay ixtiyoriy paketlardan iborat – shunchaki keraklilarini tanlang va ularni LFS tuzilmangizga qo‘shing. Va uchinchisi: boshidanoq paket menejeridan foydalaning. Kitob bunga bir bob bag'ishlaydi, ammo amaliy ko'rsatmalar umuman yo'q. Men faqat himoyalangan o'rnatish vositasini tavsiya qilaman - paketlar, bog'liqliklar va versiyalarni boshqarish uchun minimal buyruqlar to'plamini ta'minlaydigan skript LFS-da bu etarli bo'ladi, keyin siz APT yoki DPKG ni manba kodidan kompilyatsiya qilishingiz mumkin jamoat forumlarida yaxshi yoritilgan.

Xulosa o'rniga

O'tgan bir yarim yil ichida men o'qishda katta muvaffaqiyatlarga erishdim. Men "Bunday operatsion tizim bor" bosqichidan "Men Gentoo uchun serverni uch kun ichida o'rnataman" darajasiga o'tdim. Men hali ham idealdan juda yiroqman va o'zimni haqiqiy Linux foydalanuvchisi deb atashim qiyin uy kompyuteri eski Windows XP va Xubuntu 10.10 bir-biriga mos keladi, lekin ular mendan Linuxni o'rganishni qaerdan boshlashni so'rashganida nima deb javob berishimni bilasizmi? Linuxni noldan boshlang.

P.S. PM da yozganlarga rahmat. Xatolar tuzatildi, hack biroz ko'chirildi.

Drayvga bo'sh CD-RW yoki DVD-RW disk joylashtirsangiz, Windows 7 Explorer ushbu diskni ochmoqchi bo'lganingizda avtomatik ravishda ushbu diskni formatlashni taklif qiladi:

LFS bu UDFdan boshqa narsa emas. CD va DVD disklarga ommaviy yozish uchun fayl tizimi. Lazer diskini odatdagidek ishlatishga imkon beradi. Ya'ni fayllarni nusxalash va o'chirish eng oddiy tarzda. UDF fayl tizimi ayniqsa DVD-Videoda qo'llaniladi.

O'zlashtirilgan Bu Joliet kengaytmali ISO9660 fayl tizimidagi disk yozuvidir. ISO9660 fayl tizimi an'anaviy lazerli disk fayl tizimidir. Audio kompakt disklar, MP3 disklar, disklar kompyuter dasturlari ushbu fayl tizimiga yoziladi.

UDF fayl tizimidan (LFS) foydalanish

UDF fayl tizimi lazer disklarida ommaviy yozish uchun ishlatiladi. Versiyaga qarab, uni turli xil qo'llab-quvvatlaydi Windows versiyalari. Masalan, Windows XP 1.50, 2.0, 2.01 versiyalarini qo'llab-quvvatlaydi.

UDF fayl tizimi video va audio yozish va ijro etish tizimlarida ham qo'llaniladi, masalan DVD pleerlar(DVD-video disklari UDF 1.50 versiyasi yordamida ishlab chiqariladi). Filmga olingan materialni DVD-RW disklariga yozib oladigan videokamera modellari mavjud. Bunday disklardan foydalanish uchun avval uni formatlashingiz kerak.

Drayvga bo'sh CD-RW yoki DVD-RW diskini joylashtiring, keyin Windows 7 Explorer ushbu diskni ochmoqchi bo'lganingizda avtomatik ravishda ushbu diskni formatlashni taklif qiladi:

Fayl tizimida formatlash ancha vaqt talab qilishi mumkin, masalan, CD-RW 700 mb ni 10-12 daqiqada formatlash mumkin.

Formatlash tugallangandan so'ng, fayllarni ushbu diskka to'g'ridan-to'g'ri Windows Explorer orqali nusxalashingiz mumkin:

Biroq, UDF diskiga nusxa ko'chirish tezligi oddiy yoki USB flesh haydovchiga qaraganda ancha past ekanligini yodda tutishingiz kerak.

Tegishli maqolalar

1.1. LFS tizimini qanday yig'ish kerak

LFS tizimi allaqachon o'rnatilgan tizim yordamida yig'iladi Linux tarqatish(masalan, Debian, Mandriva, Red Hat yoki SUSE). Mavjud tizim Linux (xost tizimi) boshlang'ich tizim sifatida ishlatiladi, u erdan ular yangi tizimni qurish uchun olinadi zarur dasturlar, shu jumladan kompilyator, bog'lovchi va qobiq tarjimoni. Ushbu vositalardan foydalanish imkoniyatiga ega bo'lish uchun tarqatishni o'rnatish vaqtida "ishlab chiqish" variantini tanlang.

Mashinangizga alohida tarqatishni o'rnatishga muqobil sifatida siz Linux From Scratch LiveCD yoki tijorat tarqatish LiveCD dan foydalanishingiz mumkin. LFS LiveCD ushbu kitobdagi ko'rsatmalarni muvaffaqiyatli bajarishingiz uchun zarur bo'lgan barcha vositalarni ta'minlovchi asosiy tizim sifatida yaxshi ishlaydi. LiveCD dan foydalanish bu kitobning doirasiga kirmaydi, lekin bu kitob ustida ishlayotganda undan host sifatida foydalanish mumkin. Joriy LFS tizimini yaratish uchun eng mos versiyalar LiveCD nashrlari "-nosrc" yoki "-min" hisoblanadi. Olish uchun Qo'shimcha ma'lumot LFS LiveCD haqida yoki nusxasini yuklab olish uchun http://www.linuxfromscratch.org/livecd/ saytiga tashrif buyuring.

Ushbu kitobning 2-bobi yangi bo'lim va faylni qanday yaratishni tasvirlaydi Linux tizimlari. Bu erda yangi LFS tizimi kompilyatsiya qilinadi va o'rnatiladi. 3-bobda LFS tizimini yaratish uchun qaysi paketlar va yamoqlarni yuklab olish va ularni yangi fayl tizimiga qaerga joylashtirish kerakligi tushuntirilgan. 4-bobda tegishli o'rnatish muhokama qilinadi ish muhiti. Iltimos, 4-bobni diqqat bilan o'qing, chunki u 5-bobga o'tishdan oldin bilishingiz kerak bo'lgan bir qator muhim masalalarni tushuntiradi.

5-bobda asosiy ishlab chiqish to'plami (yoki asboblar). Ushbu to'plam 6-bobda haqiqiy tizimni yaratish uchun ishlatiladi. Ushbu paketlarning ba'zilari aylana bog'liqliklarini hal qilish uchun talab qilinadi, masalan, kompilyatorni kompilyatsiya qilish uchun kompilyator kerak.

5-bob shuningdek, Binutils va GCCni o'z ichiga olgan vositalar to'plamini yaratishda birinchi o'tishni qanday amalga oshirishni ko'rsatadi (birinchi o'tish asosan ushbu ikkita muhim paketni qayta o'rnatishni o'z ichiga oladi). Keyingi qadam Glibc-ni yaratish bo'lib, Glibc asboblar to'plamiga kiritilgan dasturlardan foydalangan holda kompilyatsiya qilinadi va birinchi o'tish paytida qurilgan. Keyin asboblar zanjirini qurishning ikkinchi o'tishini bajarishingiz kerak bo'ladi. Ushbu nuqtada asboblar zanjiri yangi qurilgan Glibc kutubxonasiga dinamik ravishda bog'langan bo'lishi kerak. 5-bobning qolgan qismi uchun paketlar rivojlanishning ikkinchi bosqichida yaratilgan asboblar zanjiri yordamida qurilgan. Bu amalga oshirilgandan so'ng, LFS o'rnatish jarayoni endi ishlaydigan yadrodan tashqari xost tizimining taqsimlanishiga bog'liq bo'lmaydi.

Yangi tizimni xost tizimini taqsimlashdan ajratish bo'yicha bu harakat haddan tashqari ko'rinishi mumkin. Bu nima uchun amalga oshirilganligi haqida to'liq texnik tushuntirish uchun asboblar to'plamiga oid texnik eslatmalarning 5.2-bo'limiga qarang.

6-bob LFS tizimini to'liq yig'adi. Dastur chroot(rootni o'zgartirish) virtual muhitga kirish va yangi buyruq qobig'ini ishga tushirish uchun ishlatiladi, uning ildiz katalogi LFS bo'limida joylashgan bo'ladi. Bu qayta ishga tushirish va yadroga LFS bo'limini ildiz bo'limi sifatida o'rnatishni aytishga juda o'xshaydi. Tizim aslida qayta ishga tushmaydi, lekin agar siz buyruqni ishlatmasangiz chroot, keyin yuklanadigan tizimni yaratish hali zarur bo'lmagan qo'shimcha ishlarni talab qiladi. Ushbu "ildiz o'zgarishi" ning asosiy afzalligi shundaki, siz LFS tizimi hali ham yig'ilayotganda xost tizimidan foydalanishni davom ettirishingiz mumkin. Paketlarni kompilyatsiya qilish tugashini kutayotganingizda, kompyuteringizdan odatdagidek foydalanishni davom ettirishingiz mumkin.

O'rnatishni yakunlash uchun 7-bobda tavsiflanganidek LFS-Bootscripts-ni sozlang va 8-bobda tasvirlanganidek yadro va yuklash moslamasini sozlang. 9-bobda LFS tizimi o'rnatilgandan keyin qanday foydalanish mumkinligi haqida ushbu kitobda tasvirlangan amalga oshirildi. Ushbu kitobdagi barcha qadamlar bajarilgandan so'ng, loyiha tugallanadi va kompyuteringiz qayta ishga tushirishga tayyor bo'ladi yangi tizim LFS.

Bu qisqa Tasvir jarayon. Har bir bosqichning tafsilotlari keyingi boblarda va paket tavsiflarida keltirilgan. Murakkab tuyulishi mumkin bo'lgan narsa aniqroq bo'ladi va LFSni yig'ishni boshlaganingizdan so'ng hamma narsa joyiga tushadi.

Agar xatolikni sezsangiz, matn qismini tanlang va Ctrl+Enter tugmalarini bosing
ULOSING: