Okna.  Wirusy.  Laptopy.  Internet.  Biuro.  Narzędzia.  Kierowcy

Jeśli do napędu włożysz czystą płytę CD-RW lub DVD-RW, Eksplorator Windows 7 automatycznie wyświetli monit o sformatowanie tej płyty przy próbie jej otwarcia:

LFS to nic innego jak UDF. System plików do nagrywania wsadowego na dyski CD i DVD. Umożliwia korzystanie z dysku laserowego w taki sam sposób jak zwykłego. Oznacza to, że kopiuj i usuwaj pliki w najprostszy sposób. System plików UDF jest szczególnie używany w DVD-Video.

Opanowany Jest to nagranie płytowe w systemie plików ISO9660 z rozszerzeniem Joliet. System plików ISO9660 to tradycyjny system plików dysków laserowych. Płyty audio CD, płyty MP3, płyty z programy komputerowe

są zapisywane w tym systemie plików.

Korzystanie z systemu plików UDF (LFS) System plików UDF służy do nagrywania wsadowego na dyskach laserowych. W zależności od wersji jest obsługiwany przez różne Wersje Windowsa

. Na przykład Windows XP obsługuje wersje 1.50, 2.0, 2.01. System plików UDF jest również używany w systemach nagrywania i odtwarzania wideo i audio, takich jak odtwarzacze DVD

(Płyty DVD-Video są nagrywane przy użyciu formatu UDF w wersji 1.50). Istnieją modele kamer wideo, które nagrywają nakręcony materiał na dyskach DVD-RW. Aby móc korzystać z takich dysków, należy je najpierw sformatować.

Włóż czystą płytę CD-RW lub DVD-RW do napędu, a Eksplorator Windows 7 automatycznie wyświetli monit o sformatowanie tej płyty przy próbie jej otwarcia:

Formatowanie systemu plików może zająć sporo czasu, np. płytę CD-RW o pojemności 700 MB można sformatować w 10–12 minut.

Po zakończeniu formatowania możesz skopiować pliki na ten dysk bezpośrednio za pomocą Eksploratora Windows:

Należy jednak pamiętać, że prędkość kopiowania na dysk UDF jest znacznie niższa niż na zwykły pendrive czy pendrive'a.

Powiązane artykuły

1.1. Jak zamontować system LFS System LFS zostanie zmontowany przy użyciu już zainstalowanych Dystrybucja Linuksa (na przykład Debian, Mandriva, Red Hat lub SUSE). Istniejący system Jako system startowy posłuży Linux (system host), skąd zostaną pobrane do budowy nowego systemu, w tym kompilator, linker i interpreter powłoki. Aby móc korzystać z tych narzędzi, podczas instalacji dystrybucji wybierz opcję „rozwój”.

Alternatywą dla instalowania osobnej dystrybucji na komputerze jest użycie LiveCD Linux From Scratch lub LiveCD z dystrybucji komercyjnej. LFS LiveCD sprawdza się dobrze jako system hosta, zapewniając wszystkie narzędzia potrzebne do pomyślnego wykonywania instrukcji zawartych w tej książce. Korzystanie z LiveCD wykracza poza zakres tej książki, ale nadal można go używać jako hosta podczas pracy nad tą książką. Najbardziej odpowiednimi wersjami do stworzenia aktualnego systemu LFS są edycje LiveCD „-nosrc” lub „-min”. Aby dostać dodatkowe informacje Informacje o LFS LiveCD lub aby pobrać kopię, odwiedź http://www.linuxfromscratch.org/livecd/.

Rozdział 2 tej książki opisuje, jak utworzyć nową partycję i plik Systemy linuksowe. To tutaj zostanie skompilowany i zainstalowany nowy system LFS. Rozdział 3 wyjaśnia, które pakiety i łatki należy pobrać, aby zbudować system LFS i gdzie należy je umieścić w nowym systemie plików. Rozdział 4 omawia tworzenie odpowiedniego środowiska pracy. Przeczytaj uważnie rozdział 4, ponieważ wyjaśnia on szereg ważnych kwestii, o których musisz wiedzieć przed przejściem do rozdziału 5 i kolejnych.

Rozdział 5 wyjaśnia, jak zainstalować szereg pakietów, które będą używane jako podstawowy zestaw programistyczny (lub narzędzia). Zestaw ten zostanie wykorzystany w rozdziale 6 do zbudowania rzeczywistego systemu. Niektóre z tych pakietów są wymagane do rozwiązywania zależności cyklicznych, na przykład do skompilowania kompilatora potrzebny jest kompilator.

Rozdział 5 pokazuje także, jak wykonać pierwszy etap tworzenia zestawu narzędzi, który obejmuje Binutils i GCC (pierwszy przebieg zasadniczo polega na ponownej instalacji tych dwóch ważnych pakietów). Następnym krokiem jest zbudowanie Glibc, biblioteki C, która zostanie skompilowana przy użyciu programów zawartych w zestawie narzędzi i zbudowana podczas pierwszego etapu programowania. Następnie będziesz musiał wykonać drugi etap budowania łańcucha narzędzi. W tym momencie zestaw narzędzi musi być dynamicznie połączony z nowo zbudowaną biblioteką Glibc. Pakiety z pozostałej części rozdziału 5 są budowane przy użyciu zestawu narzędzi utworzonego w drugiej fazie programowania. Po wykonaniu tej czynności proces instalacji LFS nie będzie już zależał od dystrybucji systemu hosta, z wyjątkiem działającego jądra.

Wysiłki mające na celu odizolowanie nowego systemu od dystrybucji systemu hosta mogą wydawać się nadmierne. Pełne techniczne wyjaśnienie, dlaczego tak się dzieje, można znaleźć w sekcji 5.2 „Uwagi techniczne dotyczące zestawu narzędzi”.

Rozdział 6 całkowicie składa system LFS. Program chrootować(zmiana root) służy do wejścia do środowiska wirtualnego i uruchomienia nowej powłoki poleceń, której katalog główny będzie zlokalizowany na partycji LFS. Jest to bardzo podobne do ponownego uruchomienia komputera i poinformowania jądra, aby zamontowało partycję LFS jako partycję główną. System faktycznie nie uruchamia się ponownie, ale jeśli nie użyjesz polecenia chrootować, wówczas utworzenie systemu startowego będzie wymagało dodatkowej pracy, która nie jest jeszcze konieczna. Główną zaletą tej „zmiany roota” jest to, że możesz nadal korzystać z systemu hosta, gdy system LFS jest jeszcze w fazie montażu. Podczas oczekiwania na zakończenie kompilacji pakietów możesz w dalszym ciągu normalnie korzystać z komputera.

Aby zakończyć instalację, skonfiguruj skrypty LFS-Bootscripts zgodnie z opisem w rozdziale 7 oraz skonfiguruj jądro i program ładujący zgodnie z opisem w rozdziale 8. Rozdział 9 zawiera informacje na temat używania systemu LFS po ukończeniu wszystkiego, co opisano w tej książce. Po wykonaniu wszystkich kroków opisanych w tej książce projekt zostanie ukończony, a komputer będzie gotowy do ponownego uruchomienia z nowym systemem LFS.

Ten krótki opis proces. Szczegóły każdego kroku opisano w poniższych rozdziałach i opisach pakietów. To, co może wydawać się skomplikowane, stanie się jaśniejsze i wszystko się ułoży, gdy zaczniesz zbierać LFS.

Od najmłodszych lat interesowałem się komputerami. Zainteresowanie to wyrosło z grania w gry pod MS-DOS w przedszkolu, a skończyło się na wszelkiego rodzaju konkursach programistycznych pod koniec szkoły. Nic dziwnego, że po szkole poszedłem na studia do instytutu technicznego, aby zostać programistą. Najdziwniejsze jest to, że przez te wszystkie lata byłem absolutnie daleko od tak wspaniałego systemu operacyjnego jak GNU/Linux. Ale półtora roku temu, na samym początku pierwszego semestru, poznałam faceta (był trochę starszy ode mnie i wszedł do instytutu po technikum – mając doświadczenie zawodowe), który podczas jednej z rozmów powiedział:
„Czy chcesz rozpocząć naukę GNU/Linuksa? Rozpocznij pracę z Linuksem od zera.”

Jedyna dystrybucja papieru

LFS (zwany dalej skrótem od Linux From Scratch) to książka napisana przez Gerarda Beekmansa, która opisuje proces budowania minimalnej działającej wersji GNU/Linux z kodu źródłowego. Dlaczego papier? Kiedyś książkę można było kupić w twardej oprawie, co sprawia, że ​​„dystrybucja” jest dość nietypowa, prawda? Oprócz samej książki, do jej złożenia potrzebny będzie oczywiście Internet (lub pobrany wcześniej plik kody źródłowe), bezpłatną partycję na dysku twardym i dowolną system operacyjny na podstawie Jądra Linuksa, który ma kompilator. Osobiście zawsze używam albo gotowej dystrybucji LFS, albo pełna instalacja Slackware - ma wszystko, czego potrzeba, czego nie można powiedzieć o (przykładowo) Ubuntu. Oczywiście zawsze możesz pobrać brakujące pakiety, ale my po prostu chcemy nauczyć się Linuksa, prawda? A Slackware nawet w swoim instalacja podstawowa i bez konfiguracji zapewnia wymagane narzędzia.

Należy od razu powiedzieć, że dystrybucja skompilowana z książki LFS tak naprawdę nie może nic zrobić. A raczej nic, czego niedoświadczony użytkownik będzie potrzebował. Może włączać, wyłączać, restartować, korzystać z połączenia Ethernet, ale co najważniejsze, kompilować. Istnieją więc inne książki, teraz wspierane przez społeczność - Beyond LFS pozwala zebrać te same programy, które są interesujące dla użytkownika. Od przeglądarki i środowiska graficznego po systemy zarządzania bazami danych i Serwery DHCP. Książka ma tendencję do pozostawania w tyle za wersją podstawową, ale doświadczenie zdobyte w LFS jest zwykle wystarczające do samodzielnego rozwiązywania konfliktów wersji. Trzy inne książki – Automated LFS, Cross LFS i Hardened LFS w pełni odpowiadają tytułom i wykraczają poza zakres tego artykułu. Zawsze jednak można to przeczytać w Internecie, prawda?

Ale po co od tego zaczynać?

Wszystko jest bardzo proste, jeśli nie śmieszne. Książka oprócz instrukcji zawiera sporo materiału teoretycznego (choć niezwykle zwięzłego i w efekcie niezbyt żałobnego). Zainstaluj Ubuntu. Czy wiesz do czego służy pakiet Libtool? Albo Gawka? Po kilku udanych kompilacjach LFS poznasz każdy pakiet w swoim systemie i, co najważniejsze, zrozumiesz, w jaki sposób ze sobą współdziałają. Tak, skład systemu jest minimalny, ale to stale podsyca zainteresowanie jego ulepszaniem. Nauczy Cię częstego zwracania się o pomoc do Google i czytania dokumentacji w języku angielskim. Na początku nie zrozumiesz nawet połowy swoich działań, ostrożnie wpisując lub kopiując bloki kodu do konsoli. Ale na samym końcu świadomość, że sam zmontowałeś ten brzydki system operacyjny, bez wsparcia graficznego i potężnej karty graficznej, bez nowomodnego Aero i ekranów dotykowych, da ci taką rezerwę siły i dumy, że sam sięgniesz po nową wiedzę i nowe zwycięstwa. Trochę przesadzam, ale wrażenia po pierwszym uruchomieniu nowy system Nawet teraz trudno o tym zapomnieć.

Liczby i brutalna prawda życia

LFS wcale nie jest dystrybucją minimalną. Montaż będzie wymagał około 3 wolnych gigabajtów na dysku (jest to dodatek do już działającego systemu opartego na Linuksie) - jednak po pewnych tańcach system można przekształcić w Live-CD. Jeśli będę miał taką możliwość, opowiem później, jak to się robi. Kompilacja czegokolwiek i wszystkiego (biorąc pod uwagę potrzebę tworzenia pliki konfiguracyjne i inne rzeczy) zajmuje około dwóch dni. Dzieje się tak w przypadku przerw na sen, jedzenie i wyłączanie komputera na noc. Zależy to natomiast od wydajności komputera, na którym montowany jest system. Moją pierwszą ofiarą była laptopa MSI X-340 - Procesor Intela Core 2 Solo o częstotliwości taktowania 1,2 gigaherca (ogólnie rzecz biorąc, LFS zaleca się budować na systemie jednordzeniowym). BARAN- 2 GB pamięci DDR2. Nawet niższe specyfikacje w zupełności wystarczą, a na szybkim procesorze montaż pójdzie znacznie szybciej.

Nawiasem mówiąc, przybliżony czas kompilacji każdego pakietu jest wskazany w samouczku. Za jednostkę czasu przyjmuje się czas budowy pakietu Binutils – asemblera, linkera i szeregu innych, mniejszych narzędzi do pracy z plikami obiektowymi. W powyższym systemie zajęło to trzy minuty.

Skład dystrybucji

Nie ma większego sensu wyszczególnianie wszystkich pakietów zawartych w LFS. Lista będzie długa i praktycznie nic nie powie początkującemu; nadmierne dla osoby posiadającej wiedzę. W tej krótkiej sekcji chciałem tylko dać kilka ogólnych rad. Po pierwsze, budując pakiet, który nie jest opisany w książce, zajrzyj do repozytorium poprawek - mogło być już przystosowane do użytku w LFS. Po drugie, BLFS składa się prawie wyłącznie z opcjonalnych pakietów - po prostu wybierz te, których potrzebujesz i możesz swobodnie dodać je do swojej kompilacji LFS. I po trzecie: od samego początku używaj menedżera pakietów. W książce poświęcono temu rozdział, lecz praktycznie nie ma tam praktycznych instrukcji. Mogę tylko polecić Guarded Installation Tool - skrypt napisany w Bash, który zapewnia minimalny zestaw poleceń do zarządzania pakietami, zależnościami i wersjami. W LFS to wystarczy. Następnie możesz skompilować APT lub DPKG z kodu źródłowego - to jest dobrze omówione na forach społecznościowych.

Zamiast wniosków

Przez ostatnie półtora roku poczyniłem ogromne postępy w nauce. Przeszedłem od etapu „Jest taki system operacyjny” do poziomu „W trzy dni mogę postawić serwer dla Gentoo”. Nadal jestem bardzo daleki od ideału i trudno mi nawet nazwać się prawdziwym użytkownikiem Linuksa – wł komputer domowy stary Windows XP i Xubuntu 10.10 sobie radzą, ale czy wiesz, co odpowiadam, gdy pytają mnie, od czego zacząć naukę Linuksa? Rozpocznij pracę z Linuksem od zera.

P.S. Dziękuję tym, którzy napisali na PW. Poprawiono błędy, przesunięto trochę hack.

Aby zainstalować na swoim Komputer z Linuksem i zacznij go używać konkretne zadania Jest wiele sposobów. Wybór dystrybucji jest niezwykle szeroki, na każdy gust i kolor - zarówno „dla gospodyń domowych”, jak i dla zaawansowanych użytkowników, umożliwiając dowolny poziom personalizacji, w tym montaż z kodu źródłowego dla konkretnego sprzętu. Instalacja systemu jest w zasadzie dostępna dla każdego, mniej lub bardziej wykształconego użytkownika komputera PC. A jeśli nie zagłębisz się w wciąż popularne holivary na temat „Linux kontra inny system operacyjny”, to korzystanie z tego systemu nie wymaga wiedzy, która była obowiązkowa dla świeżo upieczonego użytkownika Linuksa, powiedzmy, dziesięć lat temu. Z mojego głęboko subiektywnego punktu widzenia, przez ponad dziesięć lat obserwacji rozwoju tego systemu, Linux stał się bardziej przyjazny dla początkujących i pozbył się wielu problemów, jakie wiązały się z nim w przeszłości. I to dobrze.

Ręcznie robione pingwiny...

Było już kilka artykułów na temat Habré na przykład na temat LFS lub. Komentarze do tego ostatniego sugerują logiczną myśl - jeśli zestaw możliwości Instalacje Linuksa a jego badanie jest już wyczerpująco obszerne, po co nam BAEL?

Nie będę się rozwodzić nad opowieściami o tym, „jak wędrują statki kosmiczne… i kiedy Ziemia była kulą ognia…”. Odpowiem na zadane pytanie na podstawie mojego stanowiska - zbieram LFS, bo po prostu mnie to interesuje. Postrzegam ten proces jako dobrą okazję do zajrzenia „pod maskę” systemu. Przyznam, że tę ścieżkę trudno nazwać optymalną. Jednakże ten artykuł i następne będą poświęcone procesowi ręcznego budowania systemu Linux. Artykuły te nie będą tłumaczeniem dokumentacji montażowej - nie ma takiej szczególnej potrzeby. Nacisk zostanie położony na specyfikę i niuanse procesu, z którym autor musiał się osobiście zmierzyć. Potraktujmy ten cykl jak pamiętnik neofity.

1. Wymagania systemowe

Aby zbudować LFS, potrzebujesz komputera z zainstalowanym systemem GNU/Linux. W zasadzie wystarczy każda dystrybucja. Powiedzmy, że na moich maszynach, których używam Arch Linux. Jeśli chodzi o dystrybucje oparte na Debianie ( Mennica Linuksa, Ubuntu itp.), oczywiście też się nadają, ale spieszę zwrócić uwagę na następującą kwestię - na jednym z początkowych etapów pracy, podczas inicjalizacji zmiennych środowiskowych, pojawia się ostrzeżenie powłoki poleceń

$ source ~/.bash_profile dircolors: brak zmiennej środowiskowej SHELL i nie podano opcji typu powłoki
Otrzymałem to ostrzeżenie w Linux Mint 17 z powodu pośredniego wywołania dircolors (polecenie, które koloruje terminal) z /etc/profile, gdy użytkownik loguje się ponownie, a zmienne środowiskowe są aktualizowane za pomocą polecenia source. Nie jest to krytyczne i można je zignorować.

W systemie hosta Linux muszą być zainstalowane pakiety wymienione w oficjalnych wymaganiach systemowych. Większość tych pakietów jest gotowa do użycia lub stanowi opcjonalne narzędzia programistyczne. W każdym razie można je łatwo zainstalować z oficjalnego repozytorium konkretnej dystrybucji. Dobra opcja jest użycie LiveCD, takiego jak Knoppix, wówczas możesz zainstalować LFS na komputerze, który nie zawiera żadnego systemu operacyjnego. W tym sensie wybór należy do Ciebie.

Oprócz sprzętu i systemu operacyjnego wymagana jest również cierpliwość i wytrwałość. Proces montażu i konfiguracji jest dość długi i pracochłonny. Nie powinieneś kopiować i wklejać poleceń z książki do terminala: po pierwsze, Twój przypadek może być wyjątkowy; po drugie, naszym celem jest zrozumienie zasady budowania działającego systemu operacyjnego złożonego z kodu źródłowego, co oznacza, że ​​będziemy musieli zagłębić się w znaczenie zachodzących procesów. Do każdego etapu pracy należy podchodzić sensownie i powoli.

2. Dokumentacja montażu systemu minimalnego

Cała niezbędna dokumentacja jest skupiona w książce Linux Form Scratch (link prowadzi do wersji online najnowszego stabilnego wydania). Pierwszą radą, jaką chciałbym dać początkującemu, jest zainstalowanie najnowszej stabilnej wersji angielski. Istnieją tłumaczenia na język rosyjski, ale zawsze pozostają w tyle aktualna wersja. Poza tym link do najnowszej rosyjskiej wersji LFS 6.0 prowadzi w pustkę, a jedyne dostępne na oficjalnej stronie tłumaczenie dotyczy LFS 5.0, ale jest ono, delikatnie mówiąc, nieaktualne. Jądro systemu i oprogramowanie projektu GNU podlegają regularnym zmianom, ponadto wersje pakietów opisane w starszych wersjach LFS nie zawsze są dostępne do pobrania, a jeśli są dostępne, trzeba będzie je wyszukać ręcznie. Dlatego naszym wyborem jest aktualna angielska wersja LFS.

Notatka: podczas pisania tego artykułu w artykule wiki LFS znaleziono link do tłumaczenia LFS 7.3, co jest bliższe prawdy. Tłumaczenie to nie jest jednak jeszcze ukończone – większość książki jest w języku angielskim.

Chcę także ostrzec czytelnika, że ​​korzystanie z aktualnej wersji rozwojowej książki może również skutkować nieprzewidzianymi trudnościami. Wersję tę można pobrać z repozytorium SVN, które jest codziennie aktualizowane. Książka jest pobierana za pomocą polecenia

$ mkdir ~/LFS && cd ~/LFS $ svn co svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/
I jest łatwy w montażu, na przykład tak (do zbudowania wersji html potrzebny jest pakiet tidyhtml)
$ cd BOOK $ mkdir ../html $ make BASEDIR=../html

Ta wersja jest najnowszą, skupiającą się na wykorzystaniu niedawno wydanej „wersji skynet” jądra Linuksa 4.0.

Co ma z tym wspólnego SkyNet?

A oto co:



Pierwszy problem pojawia się przy sprawdzaniu sum kontrolnych pobranych pakietów

$ md5sum -c md5sumy . . lfs-bootscripts-20150222.tar.bz2: USZKODZONY. . md5sum: OSTRZEŻENIE: 1 obliczona suma kontrolna nie jest zgodna

Określone archiwum jest rozpakowane, rozmiary plików odpowiadają prawdzie. Być może błąd po prostu wkradł się do pliku md5sums zawierającego listę CRS. Aby jednak nie ryzykować, lepiej sięgnąć po stabilną wersję książki.

3. Przygotowanie gleby

Po pierwsze, aby wdrożyć LFS, potrzebujemy miejsca na dysku. Może to być jedna partycja (lub kilka partycji) na dysku twardym lub może to być katalog w systemie plików hosta. Zdecydowałem się na opcję posiadania partycji na dysku twardym maszyny wirtualnej, na której wcześniej instalowałem 64-bitowy Arch Linux.

Wymagany minimalny rozmiar miejsce na dysku- 4 GB. Utworzyłem partycję logiczną o rozmiarze 40 GB i sformatowałem ją jako EXT4. Partycję tę należy zamontować w systemie hosta. Wygodnie jest zapisać punkt montowania w specjalnej zmiennej środowiskowej

# eksportuj LFS=/mnt/lfs
gdyż będziemy musieli bardzo często skręcać w tę stronę. Montujemy partycję za pomocą poleceń (w moim przypadku jest to partycja sda6, w Twoim pewnie będzie inaczej)

# mkdir -v $LFS # mount /dev/sda6 $LFS

Teraz musimy utworzyć dwa katalogi: $LFS/sources - do przechowywania paczek tar ze źródłami; $LFS/tools - do umieszczania tymczasowych narzędzi do budowy systemu

# mkdir -v $LFS/źródła # mkdir -v $LFS/narzędzia
Ustaw uprawnienia do katalogu $LFS/sources: dozwolony jest zapis (+w) dla wszystkich użytkowników (a) z możliwością usuwania tylko przez właściciela katalogu (t)

# chmod -v a+wt $LFS/źródła
Do katalogu $LFS/sources wrzucamy dwa pliki - listę pobranych pakietów wget-list oraz listę sum kontrolnych pakietów md5sums

# wget http://www.linuxfromscratch.org/lfs/view/stable/wget-list --directory-prefix=$LFS/sources # wget http://www.linuxfromscratch.org/lfs/view/stable/md5sums --przedrostek-katalogu=$LFS/źródła
klawisz --przedrostek-katalogu określa ścieżkę, w której powinien zostać umieszczony pobrany plik. Następnie przystępujemy do pobierania źródeł wszystkiego i wszystkiego, co musimy zainstalować

# wget --input-file=$LFS/sources/wget-list --continue --directory-prefix=$LFS/sources
klawisz --plik-wejściowy wskazuje plik zawierający lista adresów URL pakiety do pobrania; --Kontynuować- umożliwia wznowienie częściowo pobranych plików w przypadku przerwania połączenia z siecią. Pobrane zostanie około 325 MB archiwów zawierających źródła wymaganego oprogramowania oraz łatki niezbędne do montażu. Po pobraniu należy sprawdzić integralność pobranych pakietów

# pushd $LFS/źródło # md5sum -c md5sums # popd
Samo sprawdzenie jest wywołaniem narzędzia md5sum, które oblicza sumy kontrolne wszystkich plików znajdujących się na liście md5sums przekazanej jako parametr i porównuje wynik z wartością podaną na tej samej liście. Wynik, jeśli się powiedzie, będzie wyglądał następująco

Wynik kontroli integralności pakietu

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


Zwróciłem szczególną uwagę na kilka poleceń pushd/popd. Chociaż jestem przekonanym użytkownikiem Linuksa, który korzysta z niego od dłuższego czasu tego systemu, te wewnętrzne polecenia bash były dla mnie nowością. Są jednak bardzo wygodne, gdy trzeba często przeskakiwać między różnymi punktami w systemie plików, a następnie wracać. Polecenie pushd tymczasowo przenosi Cię do katalogu określonego jako parametr. Możesz wrócić za pomocą polecenia popd. W tym przypadku trasa, po której skaczesz, jest zorganizowana w formie stosu i nie musisz ponownie wchodzić na ścieżkę, którą chcesz wrócić.

Teraz mamy wszystko, czego potrzebujemy, aby rozpocząć montaż, ale musimy jeszcze wykonać ostatnie prace przygotowawcze.

4. Konfiguracja środowiska pracy

Na początek utwórzmy dowiązanie symboliczne do katalogu $LFS/tools w katalogu głównym systemu hosta

# ln -sv $LFS/narzędzia /
Do czego to służy? Ogólnie rzecz biorąc, dlaczego potrzebujemy dowiązań symbolicznych? Są tworzone w celu zapewnienia jednolitego dostępu do określonych punktów w systemie plików. W w tej chwili, w hoście systemowym ścieżka do tego katalogu wygląda następująco: /mnt/lfs/tools. Kiedy się wprowadzimy systemu tymczasowego, którego korzeń będzie znajdował się na ścieżce /mnt/lfs, w tym systemie tymczasowym zawartość katalogu będzie dostępna na ścieżce /tools. Podstawowe narzędzia, które zbierzemy, będą miały dostęp do tego katalogu poprzez ścieżkę /tools, niezależnie od tego, gdzie zostaną uruchomione — ścieżka ta zostanie połączona z plikami binarnymi po kompilacji. Dlatego tworząc określone łącze, zapewniamy możliwość dostępu do tego katalogu po ścieżce /tools, niezależnie od aktualnej lokalizacji katalogu głównego systemu. W przeciwnym razie zaraz po przejściu na system tymczasowy odczujemy błąd przy pierwszej kompilacji.

Teraz stwórzmy nowa grupa oraz nowego użytkownika, w imieniu którego będziemy pracować na pierwszym etapie montażu systemu tymczasowego. Zdecydowanie nie powinieneś pracować jako root - na przykład podczas konfigurowania pakietu do zainstalowania możesz pomylić lub zapomnieć o ustawieniu prefiksu dla katalogu instalacyjnego, a zainstalowanie zmontowanego pakietu na systemie hosta może to zepsuć (lub skomplikować pracę menedżer pakietów w przyszłości). Uruchomienie jako użytkownik nieuprzywilejowany, który ma uprawnienia do zapisu tylko w niektórych katalogach, pozwoli uniknąć kłopotów.

# groupadd lfs # useradd -s /bin/bash -g lfs -m -k /dev/null lfs
Pierwsze polecenie tworzy grupę lfs. Drugi tworzy użytkownika lfs. Znaczenie parametrów jest następujące:

  • -s /bin/bash - powłoka poleceń używana w sesji użytkownika
  • -g lfs – grupa, do której należy użytkownik
  • -m - określa, że ​​katalog domowy użytkownika powinien zostać utworzony /home/lfs
  • -k /dev/null - pusty katalog szablonów. Domyślnie podczas tworzenia katalogu domowego umieszczane są w nim pliki i foldery znajdujące się w /etc/skel. W razie potrzeby szablon ten można zmienić, ale chcemy utworzyć pusty katalog /home/lfs, co wskazujemy przekazując plik zerowy jako szablon

Ustaw hasło dla użytkownika lfs
#passwdlfs
i uczyń go właścicielem katalogów $LFS/sources i $LFS/tools

# chown -v lfs $LFS/źródła # chown -v lfs $LFS/narzędzia

Zaloguj się jako lfs

#su-lfs
Cecha w parametrach poleceń (skrót od key -l Lub --login) wskazuje, że dla danego użytkownika musisz utworzyć „czystą” sesję, która nie dziedziczy wartości zmiennych środowiskowych z poprzedniej sesji. Na potrzeby tej sesji utworzymy własny zestaw zmiennych środowiskowych

Twórz pliki w katalogu domowym użytkownika

~/.bash_profile
/$ kot > ~/.bash_profile<< "EOF" >exec env -i HOME=$HOME TERM=$TERM PS1="\u:w\$ " /bin/bash > EOF
~/.bashrc
/$ kot > ~/.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 > eksportuj LFS LC_ALL LFS_TGT ŚCIEŻKA > EOF

Plik ~/.bash_profile definiuje dostosowywanie zmiennych środowiskowych przez użytkownika. Zespół

Wykonaj env -i HOME=$HOME TERM=$TERM PS1="\u:W\$ " /bin/bash
tworzy „czyste” środowisko użytkownika (key -I określa ignorowanie poprzednich ustawień) poprzez przypisanie wartości zmiennym środowiskowym

  • HOME - katalog domowy, przypisz aktualną wartość zmiennej równej /home/lfs
  • TERM - typ terminala, z którego będziemy korzystać, pozostawiamy także aktualny
  • PS1 - format zaproszenia wiersz poleceń. W tym przypadku formatem jest nazwa użytkownika: bieżący katalog roboczy$, gdzie znak specjalny \u to nazwa użytkownika, \W to bieżący katalog roboczy.
  • /bin/bash - polecenie uruchamiające nową instancję powłoki

Plik ~/.bashrc określa, jakie ustawienia należy wprowadzić podczas logowania się do sesji danego użytkownika

  • set +h - wyłącza mieszanie w bashu. Powłoka poleceń zapamiętuje ścieżki do pliki wykonywalne, uruchomione wcześniej, co z pewnością przyspiesza działanie systemu. Jednak zadzwonimy różne wersje te same programy zlokalizowane na różnych ścieżkach, więc haszowanie nam tylko zaszkodzi.
  • umask 022 - ustawi domyślne prawa dostępu do nowych plików i katalogów. Wartość 022 oznacza, że ​​pliki zostaną utworzone z uprawnieniami 644 (rw- r-- r--), a katalogi zostaną utworzone z uprawnieniami 755 (rwx r-x r-x). Każdy ustawiony bit umask oznacza reset odpowiedniego bitu w atrybutach praw
  • LFS=/mnt/lfs - katalog główny montowanego systemu
  • LC_ALL=POSIX - określa lokalizację uruchamianych programów. POSIX definiuje standard wyświetlania niezależny od metody kodowania znaków.
  • LFS_TGT – określa opis maszyny docelowej używany podczas budowania tymczasowych narzędzi do budowania systemu
  • PATH - szukaj ścieżek plików wykonywalnych
  • eksport - przypisuje wartości określone powyżej do określonych zmiennych

Osobno należy zwrócić uwagę na sposób tworzenia plików. Dlaczego używamy polecenia cat, dlaczego nie możemy użyć naszego ulubionego edytora konsolowego? OK, dopóki jesteśmy w systemie hosta, edytor tekstu dla nas dostępne. Ale kiedy przejdziemy na system tymczasowy, nie będziemy mieli żadnego edytora. Dlatego musisz użyć polecenia cat, które przekierowuje strumień wyjściowy z jednego pliku do drugiego. Nie określono pliku wejściowego, co oznacza, że ​​zostanie on użyty standardowy strumień wejście. Plik wyjściowy to plik, który tworzymy, a warunkiem zakończenia jest pojawienie się w strumieniu wejściowym sekwencji znaków końca pliku – EOF. Po wpisaniu polecenia będziemy mogli wpisać tekst utworzony plik bezpośrednio w terminalu. Aby zakończyć proces należy wpisać linię EOF. W ten sposób zamieniamy powłokę poleceń w prymitywny edytor tekstu.

Utworzone skrypty będą wykonywane przy każdym logowaniu w imieniu lfs. Zaktualizujmy środowisko użytkownika za pomocą polecenia

/$ źródło ~/.bash_profile

Dbamy o to, aby było to konieczne zmienne środowiskowe zainstalowany
/$zestaw

5. Montaż tymczasowego zestawu narzędzi (System Tymczasowy)

Kiedy zaczynamy składać system, stajemy przed klasycznym problemem „kura i jajko”. Do zbudowania systemu potrzebujemy kompilatora, linkera i bibliotek. Ale nie mamy żadnego z powyższych, tylko ich źródła. Mamy kompilator na systemie hosta i zaczniemy za jego pomocą gromadzić niezbędne oprogramowanie. Jeśli jednak po prostu zbudujesz ten sam gcc z ustawieniami domyślnymi, nie będzie on działał w systemie LFS etap początkowy jego konstrukcja - wykorzystuje dynamiczne łączenie bibliotek niezbędnych do działania. Cały kod niezbędny do pracy będzie musiał być połączony statycznie, to znaczy jawnie zawarty w pliku wykonywalnym.

Pierwszą rzeczą, którą zrobimy, będzie kompilacja krzyżowa niektórych części przyszłego systemu, aby móc z nich skorzystać podczas asemblowania jego ostatecznej wersji.

Całość prac związanych z montażem systemu tymczasowego odbywa się w katalogu $LFS/sources, więc przejdźmy tam

/$ cd $LFS/źródła
Dla wszystkich budowanych pakietów kolejność kompilacji zawiera następującą sekwencję działań (chyba że zaznaczono inaczej!):

  • Rozpakuj archiwum z pakietem
    $tar -pxf
  • Przejdź do rozpakowanego katalogu
    $CD
  • Postępujemy zgodnie z instrukcją montażu (każde opakowanie posiada niuanse szczegółowo opisane w dokumentacji)
  • Przejdź do powyższego katalogu, wróć do $LFS/source i usuń wszystkie katalogi utworzone podczas rozpakowywania i montażu

Czas potrzebny na zbudowanie pakietów jest różny - od niemal natychmiastowego do dwóch i pół godziny (budowanie gcc po chroot ze wszystkimi testami trwa mniej więcej tyle). Ponieważ szybkości komputerów są różne, do pomiaru czasu kompilacji wybierana jest jednostka względna zwana standardową jednostką konstrukcyjną (SBU). Jeden SBU jest równy czasowi kompilacji pakietu binutils, który jest kompilowany jako pierwszy. Czas trwania 1.0 SBU można z grubsza oszacować dla Twojego systemu, ale na razie więcej na ten temat poniżej

Zalecenie: nie łącz systemu w wiele wątków. Jeśli masz procesor wielordzeniowy, przełącznik -j przyspieszy pracę, ale później może to skutkować niepowodzeniem niektórych ważnych testów i niestabilna praca zmontowane oprogramowanie. Montaż w jednym wątku nie jest tak długi - znacznie więcej czasu poświęci się na rozwiązywanie problemów nabytych przez montaż wielowątkowy.

Nie będziemy rozważać budowania każdego pakietu – omawia to sama książka LFS. Skupimy się jednak na niektórych niuansach montażowych, przyglądając się kompilacji najważniejszych pakietów

6. Budowa Binutils - pierwsze przejście. Pomiar SBU

Binutils to pakiet zawierający narzędzia pomocnicze do tworzenia oprogramowania. Należą do nich asembler (as) i linker (ld). Są potrzebne glibc i gcc do zdania niektórych testów, więc ten pakiet iść pierwszy.

Rozpakuj archiwum i przejdź do katalogu z jego zawartością

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

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

Teraz musimy skonfigurować pakiet, aby wygenerował poprawny plik Makefile.

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

Szczególna uwaga na klawisze:

  • --prefix=/narzędzia– wskazuje na to zmontowane pakiety zostanie zainstalowany w katalogu /tools, gdzie będzie zlokalizowany system tymczasowy
  • --with-sysroot=$LFS- katalog główny systemu, względem którego prowadzone będzie wyszukiwanie bibliotek i innych zasobów niezbędnych do działania programów w systemie tymczasowym
  • --with-lib-path=/tools/lib- ścieżka przeszukiwania biblioteki określona dla linkera ld
  • --target=$LFS_TGT- ustaw opis maszyny docelowej
  • --wyłącz-nls- wyłącza internacjonalizację zebranych pakietów. W tej chwili jest to niepotrzebne, a jego obecność może powodować szereg awarii
  • --wyłącz-werror- wyłącza zatrzymanie kompilacji po otrzymaniu ostrzeżeń od kompilatora systemu hosta

Po uruchomieniu konfiguratora otrzymamy plik Makefile przeznaczony do zbudowania i zainstalowania pakietu. Montujemy paczkę i mierzymy SBU

$czas(make;)
Czas mierzony jest narzędziem time (...), które zwraca czas wykonania poleceń zawartych w aparat ortodontyczny. To da szansę około oszacuj SBU, aby zorientować się w czasie kompilacji pozostałych pakietów.

Notatka: LFS zaleca mierzenie czasu konfiguracji kompilacji i instalacji. Ale to zalecenie jest szerokie. Większość czasu pracy maszyny przypada na produkcję i testowanie. Ponadto pomiędzy make a make install mogą być wykonywane inne czynności, nad którymi musisz się głębiej zastanowić. Postanowiłem więc dokonać oceny w sposób opisany powyżej, biorąc pod uwagę przybliżony charakter pomiaru, który w dalszym ciągu jest zdeterminowany całkowitym obciążeniem systemu innymi pracami.

Dla mojego systemu - maszyna wirtualna na 4 rdzeniach Rdzeń Intela i7 z 4096 MB pamięci RAM działający na wierzchu hosta na tym samym procesorze Intel Core i7-2600K (4 rdzenie z funkcją hypertrading) z 16 GB pamięci RAM - SBU trwało 2 minuty 32 sekundy po złożeniu w jeden wątek.

Czas kompilacji pozostałych pakietów podany jest w książce w ułamkach SBU, więc teraz możesz oszacować przybliżony czas kompilacji całej reszty, planując w ten sposób swoją pracę (na przykład uruchom ostateczną kompilację, kompilację gcc, wraz z testami i idź zająć się innymi rzeczami, bo to wszystko zajmuje 63 SBU - żadnych gapiów, mam nadzieję, na ekran)

Po zakończeniu montażu tworzymy dowiązania symboliczne do katalogów bibliotek. Ta operacja jest konieczna, jeśli Twój system jest 64-bitowy, więc poniższe polecenie najpierw sprawdza bitowość systemu, a dopiero potem, jeśli to konieczne, tworzy dowiązania symboliczne.

$ case $(uname -m) w > x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; >esak
Następnie instalujemy zmontowane

$ wykonaj instalację
Idziemy na górę i usuwamy katalogi, które nie są już potrzebne

$ cd .. $ rm -r binutils-2.25 $ rm -r binutils-build

7. Budowa GCC - pierwsze przejście

Podczas procesu budowania systemu kompilator będzie musiał zostać zbudowany trzykrotnie. Pierwsze dwa przebiegi są niezbędne, aby uzyskać kompilator, który może działać niezależnie od systemu hosta. W pierwszym przebiegu użyjemy statycznego łączenia całego niezbędnego kodu, a także dokonamy kilku dodatkowych ustawień.

Najpierw rozpakuj archiwum ze źródłami i przejdź do utworzonego katalogu

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

Do pomyślnej kompilacji potrzebujemy źródeł trzech kolejnych pakietów: GMP, MPFR i MPC. Rozpakujmy je do katalogu źródłowego kompilatora i zmieńmy nazwy katalogów zgodnie z odniesieniami do nich w źródłach gcc

$ 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
Ponadto będziesz musiał edytować źródła gcc. Faktem jest, że ścieżka poszukiwań linkera ld jest w nich zdefiniowana tak, jak dla normalnie działającego systemu. W naszym przypadku linker znajduje się w katalogu /tools (został zbudowany jako część binutils). Niektóre definicje makr muszą również odnosić się do /tools, dlatego transformujemy źródła za pomocą polecenia monstrous

$ dla pliku w \ > $(znajdź 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 """ >> $plik > dotknij $file.orig > gotowe
Hmmm... pierwsze spojrzenie na ten zespół napełniło mnie przerażeniem. W rzeczywistości pliki inux64.h, linux.h, sysv4.h są tutaj zapętlone, pod warunkiem, że znajdują się w katalogu gcc/config. Każdy z nich kopiowany jest do nowego pliku z rozszerzeniem *.orig (oryginalne źródła zapisujemy – wówczas zostaną one umieszczone jako strumień wejściowy dla sed), po czym w każdym ze znalezionych plików podstawiony zostaje /tools w miejsce ld ścieżka wyszukiwania linkera, a /usr zostaje zastąpiony przez /tools. Dodatkowo na końcu każdego pliku dodawane jest nadpisanie makr STANDARD_STARTFILE_PREFIX_1 i STANDARD_STARTFILE_PREFIX_2, tak aby wskazywały prawidłowe ścieżki do bibliotek. Następnie czas jest modyfikowany za pomocą polecenia dotykowego ostatnia zmiana wszystkie przetworzone pliki na bieżący, co w połączeniu z przełącznikiem -u polecenia cp (skopiuj, jeśli plik źródłowy jest nowszy niż plik docelowy), zapobiega niepożądanym zmianom w przypadku przypadkowego powtórzenia polecenia.

Kilka słów o składni sed w tym przykładzie

sed to edytor tekstu przesyłanego strumieniowo, który wykonuje operacje na plikach tekstowych przy użyciu wzorców zdefiniowanych przez wyrażenia regularne.

Kiedy po raz pierwszy otworzyłem LFS, rozumiałem składnię sed tak samo, jak student sztuki Leonarda da Vinci. rolnictwo. Jednak ciągłe googlowanie doprowadziło mnie do następujących przemyśleń:

  • Ponieważ przetwarzane ścieżki zawierają symbol „/”, sed używa symbolu „@” zamiast separatora argumentów
  • konstrukcje postaci „\(64\)\?” i „\(32\)\?” powiedz sedowi, że wyszukiwany ciąg może zawierać ciągi „64” i „32” lub nie - operację należy wykonać w obu przypadkach.
  • znak „&” wskazuje, że /tools zostanie umieszczone przed ciągami wyszukiwania (tzn. znalezione wyrażenie zostanie umieszczone w miejscu znaku „&”)

W ten sposób przeanalizowałem wyrażenie „s@/lib\(64\)\?\(32\)\?/ld@/tools&@g” - znajdź wszystkie linie zawierające „/lib”, „/lib64” i „ / lib32” i poprzedź je linią „/tools” i wyrażeniem „s@/usr@/tools@g” - znajdź wszystkie linie zawierające „/usr” i zamień je na „/tools”


Ogólnie rzecz biorąc, montaż systemu tymczasowego (i głównego) jest dosłownie nasycony wykorzystaniem takich konstrukcji. Wskazane jest, aby spróbować zrozumieć ich znaczenie i wpisywać polecenia rękami. Następnie, pod koniec procesu montażu, zostaniesz oświecony w wielu kwestiach dotyczących technik przetwarzania tekstu i pracy w konsoli *nix.

Następne polecenie:

$ sed -i "/k prot/agcc_cv_libc_provides_ssp=yes" gcc/configure
wprowadza poprawkę do skryptu konfiguratora, ale w moim przypadku nie wprowadza w nim żadnych zmian. Według książki ma to na celu zmianę charakteru działania gcc z ochroną stosu.

$ ../gcc-4.9.2/configure \ > --target=$LFS_TGT \ > --prefix=/tools \ > --with-sysroot=$LFS \ > --with-newlib \ > --without- nagłówki \ > --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++

Klawisze mają następujące znaczenie:

  • --with-newlib- uniemożliwia kompilację jakiegokolwiek kodu wymagającego obsługi libc - nie mamy jeszcze tych bibliotek, zostaną skompilowane później
  • --bez-nagłówków- wyłącza użycie standardowych plików nagłówkowych, które nie są jeszcze dla nas dostępne
  • --with-local-prefix=/tools- ścieżka lokalna, gdzie GCC będzie szukać plików nagłówkowych. Domyślnie jego wartość to /usr/local
  • --with-native-system-header-dir=/tools/include- ścieżka wyszukiwania nagłówków systemowych
  • --wyłącz-udostępnione- wskazuje, że cały kod biblioteki powinien być połączony statycznie
  • --disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libitm, --disable-libquadmath, --disable-libsanitizer, --disable-libssp, --disable-libvtv, --disable-libcilkrts, --disable-libstdc++-v3- wyłącza wszystkie rozszerzenia kompilatora, które są niepotrzebne na tym etapie - praca z zmiennoprzecinkowym, wielowątkowością i równoległością, a także standardową biblioteką C++ i wiele więcej.
  • --disable-multilib- wyłącza obsługę budowania kodu 32-bitowego w środowisku 64-bitowym
  • --enable-languages=c,c++- ograniczone do obsługi C/C++

Po skonfigurowaniu w ten sposób zestawu uruchamiamy go i instalujemy pakiet
$ wykonaj $ wykonaj instalację

Potem sprzątamy po sobie
$ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2

8. Montaż pozostałych pakietów systemu tymczasowego

Dalszy przebieg montażu układu tymczasowego nie wymaga objaśnień i odsyłam czytelnika do książki LFS. Jedyne, na co warto zwrócić uwagę, to to, że przez cały proces będziesz musiał edytować kod źródłowy i zainstalować specjalne opcje konfiguratora, a proces ten powinien być przemyślany i spokojny. Błąd na tym etapie może być dość kosztowny, a znalezienie go dla nieprzygotowanego nowicjusza jest dość trudne.

Ograniczę się do opisania minimalnego zestawu tymczasowych pakietów systemowych i kilku ważnych wyjaśnień. Następnie musisz zainstalować gcc

  • Nagłówki jądra Linux-3.19 - wymagane przez biblioteki GLibc
  • Glibc-2.21 - główna biblioteka C zapewniająca alokację pamięci, z którą można pracować system plików, podstawowa arytmetyka.

    Po zbudowaniu Glibc należy przeprowadzić pierwszy test zmontowanego kompilatora. Tworzymy prymitywny program i składamy go za pomocą kompilatora z zestawu tymczasowego

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

    Przeanalizuj wynikowy plik binarny pod kątem obecności i zawartości ścieżki wyszukiwania modułu ładującego biblioteki dynamiczne

    $ readelf -f a.out | grep ": /narzędzia"
    W moim przypadku otrzymałem następujący wynik:


    co wskazuje poprawny link do linkera. Książka podaje wynik dla systemu 32-bitowego, ale ja zmontowałem system 64-bitowy i podana tutaj ścieżka różni się od wskazanej w książce.

    Po upewnieniu się, że wszystko jest w porządku, usuń program testowy
    $ rm -v dummy.c a.out

  • Libstdc++-4.9.2 - standardowe biblioteki C++ niezbędne do działania kompilatora g++
  • Binutils-2.25 - drugi przebieg kompilacji, już uwzględniony zainstalowanych pakietów. Montaż odbywa się przy użyciu kompilatora, archiwizatora ar (zawartego w binutils) i bibliotek już złożonych w pierwszym przebiegu oraz bibliotek określonych za pomocą zmiennych środowiskowych CC, AR i RANLIB

    $ 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 - drugie przejście wykonane przez tymczasowe narzędzia systemowe

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

    W miarę budowania pakietów są one stopniowo wprowadzane do produkcji, czyniąc nas coraz bardziej niezależnymi od systemu hosta. Na tym etapie konieczny jest powtórny test kompilatora.

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

  • Tcl-8.6.3 — pakiet obsługi języka Tcl wymagany przez kompilator do uruchamiania testów.
  • Spodziewaj się-5.45 - narzędzie do automatyzacji testów używane jako rozszerzenie Tcl
  • DejaGNU-1.5.2 - framework do pisania testów programów
  • Check-0.9.14 - framework do organizowania testów jednostkowych programów w C
  • Ncurses-5.9 to biblioteka do organizowania pseudograficznego interfejsu użytkownika terminala, wykorzystywana w szczególności przez niektóre narzędzia konfiguracyjne (w tym podczas konfigurowania kompilacji jądra Linuksa) i tak popularny program jak mc.
  • Bash-4.3.30 - powłoka poleceń. Brak komentarzy.
  • Bzip2-1.0.6 - obsługa archiwów bzip2.
  • Coreutils-8.23 jest jednym z głównych pakietów środowiska GNU zawierających polecenia zewnętrzne powłoki, takie jak cat, ls, rm i tak dalej
  • Diffutils-3.3 - narzędzia do porównywania plików i katalogów.
  • File-5.22 - narzędzia do określania typów plików.
  • Findutils-4.4.2 - narzędzia do wyszukiwania plików i katalogów. Zawiera na przykład powszechnie używane znalezisko
  • Gawk-4.1.1 - Implementacja GNU narzędzia awk - parsowanie i przetwarzanie linia po linii pliki tekstowe i inne strumienie wejściowe.
  • Gettext-0.19.4 - pakiet narzędzi wspierających internacjonalizację programu.
  • Grep-2.21 - narzędzie do wyszukiwania tekstu w strumieniu wejściowym
  • Gzip-1.6 - kolejny archiwizator
  • M4-1.4.17 - makroprocesor używany przez narzędzia do konfiguracji i montażu oprogramowania
  • Make-4.1 - narzędzie do automatycznego tworzenia oprogramowania
  • Patch-2.7.4 - narzędzie do pracy z poprawkami kodu źródłowego
  • Perl-5.20.2 - Interpreter języka Perl
  • Sed-4.2.2 - edytor tekstu strumieniowego
  • Tar-1.28 – gdzie byśmy bez niego byli?
  • Texinfo-5.2 - narzędzia do pracy ze stronami informacyjnymi dokumentacji
  • Util-linux-2.26 to główny pakiet narzędzi systemu Linux. Zawiera na przykład wierzchowiec
  • Xz-5.2.0 to kolejny archiwizator.

9. Przycinanie informacji debugowania

Po złożeniu wszystkiego, aby zaoszczędzić miejsce, zaleca się odcięcie informacji debugowania od zmontowanych plików binarnych. Robimy to w zespołach

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

Ponadto możesz usunąć dokumentację, która jest zainstalowana, ale jeszcze nie jest potrzebna - nadal będzie zebrana i zainstalowana ponownie, tym razem do wykończenia.

$ rm -rf /tools/(,share)/(info,man,doc)

Konkluzja

W rezultacie mamy system tymczasowy znajdujący się w katalogu $LFS/tools, do którego przejdziemy w kolejnym kroku w celu ostatecznego montażu środowiska GNU i konfiguracji systemu. Ale opowiem ci o tym później.

Dziękuję za uwagę na mój tekst!



Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl+Enter
UDZIAŁ: