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 komputeroweKorzystanie 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.
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.”
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?
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.
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.
$ 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.
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:
$ 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.
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
Teraz mamy wszystko, czego potrzebujemy, aby rozpocząć montaż, ale musimy jeszcze wykonać ostatnie prace przygotowawcze.
# 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:
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
Plik ~/.bashrc określa, jakie ustawienia należy wprowadzić podczas logowania się do sesji danego użytkownika
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
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!):
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
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:
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
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ń:
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”
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:
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
Ograniczę się do opisania minimalnego zestawu tymczasowych pakietów systemowych i kilku ważnych wyjaśnień. Następnie musisz zainstalować gcc
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
$ CC=$LFS_TGT-gcc \ > AR=$LFS_TGT-ar \ > RANLIB=$LFS_TGT-ranlib \ >../binutils-2.25/configure \ > --prefix=/tools \ > --disable-nls \ > --disable-werror \ > --with-lib-path=/tools/lib \ > --with-sysroot
$ CC=$LFS_TGT-gcc \ > CXX=$LFS_TGT-g++ \ > AR=$LFS_TGT-ar \ > RANLIB=$LFS_TGT-ranlib \ > ../gcc-4.9.2/configure \ > --prefix=/ 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
$ 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)
Dziękuję za uwagę na mój tekst!