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.
$ 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.
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:
$ 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.
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
Endi bizda yig'ishni boshlash uchun kerak bo'lgan hamma narsa bor, lekin biz faqat yakuniy tayyorgarlik ishlarini bajarishimiz kerak.
# 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:
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
~/.bashrc fayli ma'lum bir foydalanuvchi sessiyasiga kirishda qanday sozlamalarni o'rnatish kerakligini 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
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!):
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
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:
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
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:
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.
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:
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
Men vaqtinchalik tizim paketlarining minimal to'plamini va ba'zi muhim tushuntirishlarni tavsiflash bilan cheklanaman. Keyinchalik siz gcc-ni o'rnatishingiz kerak
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
$ 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 \ > --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
$ 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)
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."
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?
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.
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 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
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.