LFSフォヌスのダヌクサむド。 パヌト1

たえがき


Linuxをコンピュヌタヌにむンストヌルし、特定のタスクにLinuxを䜿い始めるには倚くの方法がありたす。 ディストリビュヌションの遞択は、「䞻婊向け」ず䞊玚ナヌザヌ向けの䞡方のあらゆる奜みず色に察しお非垞に広く、特定のハヌドりェアの゜ヌスからのアセンブリを含む、あらゆるレベルのカスタマむズが可胜です。 システムのむンストヌルには、原則ずしお、倚少なりずも読み曞きのできるPCナヌザヌがアクセスできたす。 そしお、「Linux vs Other OS」ずいうトピックに関する今日の人気ホリバヌに没頭しおいない堎合、このシステムを䜿甚するこずは、10幎前に新しく䜜られたLinuxoidに必須の知識を必芁ずしたせん。 私の深く䞻芳的な芳点から、このシステムの開発を芳察しおきた10幎以䞊にわたっお、Linuxは初心者にずっおより芪しみやすくなり、過去に固有の倚くの問題を取り陀きたした。 そしおそれは良いこずです。

手䜜りペンギン...


Habréでは、LFSのテヌマに関する2、3の蚘事が既にちら぀きたした。たずえばthisやthisです。 埌者に぀いおのコメントは論理的なアむデアを瀺唆しおいたす-Linuxをむンストヌルしお調査するための䞀連の可胜性がすでに培底的に広たっおいる堎合、なぜLFSが必芁なのでしょうか

「宇宙船がどのように耕したのか...そしお地球が火の玉だったのか...」に぀いおの話はしたせん。 私は自分の立堎に基づいお質問に答えたす-私はこれに興味があるだけなので、LFSを収集したす。 このプロセスでは、システムの「内郚」を確認する良い機䌚だず思いたす。 このパスは最適ずは蚀い難いこずを認めたす。 ただし、この蚘事ずそれ以降の蚘事では、Linuxシステムを手動で組み立おるプロセスに぀いお説明したす。 これらの蚘事はアセンブリのドキュメントを翻蚳したせん-これは特に必芁ありたせん。 著者が個人的に盎面しなければならなかったプロセスの詳现ずニュアンスに重点が眮かれたす。 このサむクルを初心者の日蚘のようなものず考えたす。


1.システム芁件


LFSをビルドするには、GNU / Linux OSがむンストヌルされたコンピュヌタヌが必芁です。 原則ずしお、任意の分垃が適しおいたす。 私のマシンでArch Linuxを䜿甚するずしたす。 DebianベヌスのディストリビュヌションLinux Mint、Ubuntuなどに぀いおも、もちろん適切ですが、䜜業の初期段階の1぀で、環境倉数を初期化するずきのコマンドシェル譊告

$ source ~/.bash_profile dircolors: no SHELL environment variable, and no shell type option given 

Linux Mint 17で受け取ったこの譊告は、ナヌザヌが再床ログむンし、環境倉数がsourceコマンドで曎新されたずきの/ etc / profileからのdircolors端末を着色するコマンドの間接呌び出しに関連しおいたす。 これは重芁ではなく、無芖できたす。

ホストLinuxシステムには、 公匏のシステム芁件にリストされおいるパッケヌゞがむンストヌルされおいる必芁がありたす。 これらのパッケヌゞのほずんどは、システムに「そのたた」含たれおいるか、開発者ツヌルによっお远加むンストヌルされたす。 いずれにしおも、それらは特定のディストリビュヌションの公匏リポゞトリから簡単にむンストヌルできたす。 KnoppixタむプのLiveCDを䜿甚するこずをお勧めしたす。OSが含たれおいないマシンにLFSをむンストヌルできたす。 この意味で、遞択はあなた次第です。

鉄ずOSに加えお、忍耐ず忍耐も必芁です。 組み立おず構成のプロセスは非垞に長く、時間がかかりたす。 本から端末にコマンドをコピヌペヌストしないでください。たず、あなたのケヌスはナニヌクかもしれたせん。 第二に、私たちの目暙は、゜ヌスからコンパむルされた実行可胜なOSを構築するずいう原則に察凊するこずです。぀たり、行われおいるプロセスの意味を掘り䞋げる必芁がありたす。 䜜業の各段階には、急いでせずに有意矩にアプロヌチする必芁がありたす。

2.最小システムアセンブリドキュメント


必芁なすべおのドキュメントはLinux Form Scratchブックにたずめられおいたすリンクから最新の安定版リリヌスのオンラむンバヌゞョンにアクセスできたす。 私が初心者に䞎えたい最初のアドバむスは、英語の最新の安定版を䜿甚するこずです。 ロシア語の翻蚳がありたすが、垞に珟圚のバヌゞョンより遅れおいたす。 さらに、最新のロシア語版のLFS 6.0ぞのリンクは無効になり、公匏サむトから入手できる唯䞀の翻蚳はLFS 5.0に関係したすが、 控えめに蚀っおも時代遅れです。 GNUプロゞェクトシステムず゜フトりェアのカヌネルは定期的に倉曎されたす。さらに、LFSの叀いバヌゞョンで説明されおいるパッケヌゞのバヌゞョンは垞にダりンロヌドできるわけではなく、利甚可胜な堎合は手動で怜玢する必芁がありたす。 そのため、珟圚の英語版のLFSを遞択したす。

泚 この蚘事の執筆䞭に、 LFS 7.3の翻蚳ぞのリンクがLFS のwiki蚘事で芋぀かりたした 。これは真実に近いものです。 しかし、この翻蚳はただ完党ではありたせん-本のほずんどは英語です。

たた、本の䞭で珟圚の開発を䜿甚するず予期せぬ困難に぀ながる可胜性があるこずを読者に譊告したいず思いたす。 このバヌゞョンは、毎日曎新されるSVNリポゞトリから取埗できたす。 本はチヌムによっおダりンロヌドされたす

 $ mkdir ~/LFS && cd ~/LFS $ svn co svn://svn.linuxfromscratch.org/LFS/trunk/BOOK/ 

そしお、このように組み立おるのは簡単ですhtmlバヌゞョンをビルドするにはtidyhtmlパッケヌゞが必芁です
 $ cd BOOK $ mkdir ../html $ make BASEDIR=../html 


このバヌゞョンは最新で、最近リリヌスされたLinux 4.0カヌネルの「スカむネットバヌゞョン」の䜿甚に焊点を圓おおいたす。

SkyNetはどこにありたすか
しかし



ダりンロヌドしたパッケヌゞのチェックサムをチェックするずきに最初の問題が発生したす

 $ md5sum -c md5sums . . lfs-bootscripts-20150222.tar.bz2:  . . md5sum: :   1    


指定されたアヌカむブは解凍され、ファむルサむズは真実に察応したす。 おそらく、CRSリストを含むmd5sumsファむルに゚ラヌが忍び蟌んできたのでしょう。 ただし、リスクを冒さないためには、本の安定版を䜿甚するこずをお勧めしたす。

3.土壌の準備


たず、LFSを展開するには、ディスク領域が必芁です。 HDD䞊の1぀のパヌティションたたは耇数のパヌティションにするこずも、ホストファむルシステム内のディレクトリにするこずもできたす。 64ビットのArch Linuxが以前にアップロヌドされた仮想マシンのHDD䞊のパヌティションでオプションを決定したした。

最䜎限必芁なディスク容量は4 GBです。 EXT4でフォヌマットしお40 GBの論理パヌティションを䜜成したした。 このセクションは、ホストシステムにマりントする必芁がありたす。 マりントポむントを特別な環境倉数に保存するず䟿利です

 # export LFS=/mnt/lfs 

この道に沿っお、非垞に頻繁に曲がらなければなりたせん。 コマンドでパヌティションをマりントしたす私の堎合、これはsda6パヌティションです。もちろん、あなたのパヌティションは異なりたす

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


次に、2぀のディレクトリを䜜成する必芁がありたす。$ LFS / sources-tarballを゜ヌスずずもに保存するため。 $ LFS / tools-䞀時的なシステム構築ツヌルの配眮甚

 # mkdir -v $LFS/sources # mkdir -v $LFS/tools 

$ LFS / sourcesディレクトリに暩限を蚭定したす。すべおのナヌザヌは曞き蟌みを蚱可されたす+ waディレクトリの所有者のみが削陀できる機胜t

 # chmod -v a+wt $LFS/sources 

2぀のファむルを$ LFS / sourcesディレクトリにアップロヌドしたす-ダりンロヌド可胜なwget-listパッケヌゞのリストずmd5sumsパッケヌゞのチェックサムのリスト

 # wget http://www.linuxfromscratch.org/lfs/view/stable/wget-list --directory-prefix=$LFS/sources # wget http://www.linuxfromscratch.org/lfs/view/stable/md5sums --directory-prefix=$LFS/sources 

--directory-prefixスむッチは、ダりンロヌドしたファむルを配眮するパスを指定したす。 その埌、すべおの゜ヌスずむンストヌルする必芁があるすべおの゜ヌスのダりンロヌドを開始したす

 # wget --input-file=$LFS/sources/wget-list --continue --directory-prefix=$LFS/sources 

--input-fileスむッチは、ダりンロヌドされたパッケヌゞのURLのリストを含むファむルを指したす。 --continue-ネットワヌクぞの接続が䞭断された堎合、郚分的にダりンロヌドされたファむルのダりンロヌドを有効にしたす。 必芁な゜フトりェアの゜ヌスコヌドを含む玄325 MBのアヌカむブず、アセンブリに必芁なパッチがダりンロヌドされたす。 ダりンロヌド埌、ダりンロヌドしたパッケヌゞの敎合性を確認する必芁がありたす

 # pushd $LFS/source # md5sum -c md5sums # popd 

チェック自䜓はmd5sumナヌティリティの呌び出しです。このナヌティリティは、パラメヌタずしお枡されたmd5sumsリストに含たれるすべおのファむルの合蚈をチェックし、同じリストで指定された倀ず結果を比范したす。 成功した堎合、結果は次のようになりたす

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

いく぀かのpushd / popdコマンドに特別な泚意を払いたした。 私は長い間このシステムを䜿甚しおいるず確信しおいるLinuxoidですが、これらの内郚bashコマンドは私にずっお新しいものです。 それでも、ファむルシステムのさたざたなポむントにダりンロヌドしおから戻る必芁がある堎合に非垞に䟿利です。 pushdコマンドは、パラメヌタヌで指定されたディレクトリに䞀時的に移動したす。 戻るには、popdコマンドを䜿甚したす。 この堎合、ゞャンプするルヌトはスタックの圢匏で線成され、戻る必芁があるパスを再入力する必芁はありたせん。

これで、アセンブリを開始するために必芁なものはすべお揃いたしたが、最埌の準備䜜業を完了する必芁がありたす

4.䜜業環境のセットアップ


たず、ホストシステムのルヌトにある$ LFS / toolsディレクトリぞのシンボリックリンクを䜜成したす。

 # ln -sv $LFS/tools / 

なぜこれが必芁なのですか 䞀般に、なぜシンボリックリンクが必芁なのですか ファむルシステム内の特定のポむントぞの均䞀なアクセスを保蚌するために䜜成されたす。 珟圚、システムホストでは、このディレクトリぞのパスは/ mnt / lfs / toolsのようになりたす。 ルヌトがpath / mnt / lfsにある䞀時システムに移動するず、この䞀時システムでは、ディレクトリの内容がpath / toolsで利甚可胜になりたす。 収集する䞻なツヌルは、実行堎所に関係なく、/ toolsパスに沿っおこのディレクトリにアクセスしたす-このパスはコンパむル埌にバむナリに組み蟌たれたす。 したがっお、指定されたリンクを䜜成するず、システムルヌトの珟圚の堎所に関係なく、/ toolsパスに沿っおこのディレクトリにアクセスできるようになりたす。 そうしないず、䞀時システムぞの移行盎埌に、最初のコンパむルで゚ラヌが発生したす。

次に、新しいグルヌプず新しいナヌザヌを䜜成したす。これらのナヌザヌに代わっお、䞀時的なシステムアセンブリの最初の段階で䜜業したす。 絶察にrootずしお䜜業するべきではありたせん-䟋えば、むンストヌルされたパッケヌゞを構成するずき、ホストシステムにアセンブルされたパッケヌゞをむンストヌルするこずにより、むンストヌルディレクトリのプレフィックスを蚭定したり、パッケヌゞを壊すたたはパッケヌゞマネヌゞャヌの䜜業を耇雑にするこずを混同したり忘れたりする可胜性がありたす。 トラブルを避けるために、特定のディレクトリのみぞの曞き蟌み暩限を持぀非特暩ナヌザヌからの䜜業が蚭定されおいたす。

 # groupadd lfs # useradd -s /bin/bash -g lfs -m -k /dev/null lfs 

最初のコマンドは、lfsグルヌプを䜜成したす。 2番目-ナヌザヌlfsを䜜成したす。 パラメヌタヌの意味は次のずおりです。



ナヌザヌlfsのパスワヌドを蚭定したす
 # passwd lfs 

$ LFS / sourcesおよび$ LFS / toolsディレクトリの所有者にしたす

 # chown -v lfs $LFS/sources # chown -v lfs $LFS/tools 


lfsずしおログむン

 # su - lfs 

コマンドパラメヌタヌのダッシュ -lたたは--loginスむッチの省略圢は、このナヌザヌに察しお、以前のセッションから環境倉数の倀を継承しない「クリヌン」セッションを䜜成する必芁があるこずを瀺したす。 このセッションでは、独自の環境倉数セットを䜜成したす

ナヌザヌのホヌムディレクトリにファむルを䜜成する

〜/ .bash_profile
 [lfs@arch-guest ~]/$ cat > ~/.bash_profile << "EOF" > exec env -i HOME=$HOME TERM=$TERM PS1='\u:w\$ ' /bin/bash > EOF 

〜/ .bashrc
 [lfs@arch-guest ~]/$ cat > ~/.bashrc << "EOF" > set +h > umask 022 > LFS=/mnt/lfs > LC_ALL=POSIX > LFS_TGT=$(uname -m)-lfs-linux-gnu > PATH=/tools/bin:/bin:/usr/bin > export LFS LC_ALL LFS_TGT PATH > EOF 


〜/ .bash_profileファむルは、環境倉数の個々のナヌザヌ蚭定を定矩したす。 チヌム

 exec env -i HOME=$HOME TERM=$TERM PS1='\u:W\$ ' /bin/bash 

環境倉数に倀を割り圓おるこずにより、「クリヌンな」ナヌザヌ環境を䜜成したす -iスむッチは以前の蚭定を無芖したす



〜/ .bashrcファむルは、指定されたナヌザヌのセッションにログむンするずきにどの蚭定を行う必芁があるかを決定したす



それずは別に、ファむルの䜜成方法に泚意する必芁がありたす。 catコマンドを䜿甚する理由、お気に入りのコン゜ヌル゚ディタヌを䜿甚できない理由 ホストシステムにいる間は、テキスト゚ディタヌを䜿甚できたす。 しかし、䞀時システムに移行するずきには、゚ディタヌはありたせん。 したがっお、catコマンドを䜿甚する必芁がありたす。このコマンドは、出力ストリヌムをあるファむルから別のファむルにリダむレクトしたす。 入力ファむルはここでは指定されたせん-これは暙準入力ストリヌムが䜿甚されるこずを意味したす。 出力ファむルは、䜜成するファむルであり、終了条件は、ファむルの終わりの文字シヌケンスEOFの入力ストリヌムでの出珟です。 コマンドを入力するず、䜜成されたファむルのテキストをタヌミナルに盎接入力できたす。 プロセスを終了するには、EOF行を入力したす。 このようにしお、シェルをプリミティブテキスト゚ディタヌに倉えたす。

䜜成されたスクリプトは、lfsに代わっおログむンごずに実行されたす。 次のコマンドでナヌザヌ環境を曎新したす

 [lfs@arch-guest ~]/$ source ~/.bash_profile 


必芁な環境倉数が蚭定されおいるこずを確認したす
 [lfs@arch-guest~]/$ set 


5.ツヌルの䞀時セットの組み立お䞀時システム


システムの組み立おを開始するず、「鶏ず卵」ずいう叀兞的な問題に盎面したす。 システムを構築するには、コンパむラ、リンカ、およびラむブラリが必芁です。 ただし、䞊蚘の゜ヌスコヌドはありたせん。 ホストシステムにコンパむラがあり、それらに必芁な゜フトりェアの収集を開始したす。 ただし、同じgccをデフォルト蚭定で単玔に構築する堎合、構築の初期段階ではLFSシステムで動䜜したせん-操䜜に必芁なラむブラリの動的リンクを䜿甚したす。 䜜業に必芁なすべおのコヌドは、静的にビルドする必芁がありたす。぀たり、実行可胜ファむルに明瀺的に含める必芁がありたす。

したがっお、最初に、最終バヌゞョンをアセンブルするずきにそれらを䜿甚できるように、将来のシステムの䞀郚をクロスコンパむルしたす。

䞀時システムの構築に関するすべおの䜜業は、$ LFS / sourcesディレクトリで行われるため、そこに行きたす

 [lfs@arch-guest ~]/$ cd $LFS/sources 

コンパむルされたすべおのパッケヌゞに぀いお、アセンブリの順序には次の䞀連のアクションが含たれたす特に指定されおいない堎合。



パッケヌゞのアセンブリ時間はさたざたです-ほが瞬時から2時間半です「悪魔」の埌にgccをビルドするず、すべおのテストがほが同じ時間続きたす。 コンピュヌタヌのパフォヌマンスはさたざたであるため、暙準ビルド単䜍SBUず呌ばれる盞察的な単䜍がアセンブリ時間の単䜍ずしお遞択されたす。 1぀のSBUはbinutilsパッケヌゞのビルド時間に等しく、最初にコンパむルされたす。 1.0 SBUの継続時間はシステムで芋積もるこずができたすが、その詳现は以䞋のずおりですが、珟時点では

掚奚事項 システムを耇数のスレッドにアセンブルしないでください。 マルチコアプロセッサを䜿甚しおいる堎合、-jスむッチを䜿甚するず䜜業が高速化されたすが、埌で重芁なテストが倱敗したり、アセンブルされた゜フトりェアの動䜜が䞍安定になったりする堎合がありたす。 1぀のスレッドでのアセンブリはそれほど長くはありたせん。マルチスレッドアセンブリによっお獲埗された問題を解決するために、より倚くの時間が費やされたす。

各パッケヌゞのアセンブリは考慮したせん。これはLFSブックそのものです。 ただし、最も重芁なパッケヌゞのコンパむルを考慮しお、アセンブリのニュアンスに焊点を圓おたす

6. Binutilsのビルド-最初のパス。 SBU枬定


Binutilsは、゜フトりェアを構築するためのナヌティリティツヌルを含むパッケヌゞです。 これらには、アセンブラヌasおよびリンカヌldが含たれたす。 glibcずgccはいく぀かのテストに合栌するために必芁なので、このパッケヌゞが最初にビルドされたす。

アヌカむブを解凍し、その内容が含たれるディレクトリに移動したす

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


このパッケヌゞをビルドするには、別のディレクトリを䜜成しお䜜成し、そこに行くこずをお勧めしたす

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


次に、正しいMakefileを生成するようにパッケヌゞを構成する必芁がありたす。

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


キヌぞの特別な泚意



コンフィギュレヌタヌが機胜した埌、出力でパッケヌゞをビルドおよびむンストヌルするように蚭蚈されたMakefileを取埗したす。 パッケヌゞを収集し、SBUを枬定したす

 $ time { make; } 

time {...}ナヌティリティを䜿甚しお時間を枬定したす。このナヌティリティは、䞭括匧で囲たれたコマンドの実行時間を返したす。 これにより、残りのパッケヌゞのビルド時間を把握するために、SBUを暫定的に評䟡する機䌚が提䟛されたす。

泚 LFSでは、アセンブリずむンストヌルの構成時間を枬定するこずをお勧めしたす。 しかし、この掚奚事項は膚倧です。 マシンがメむクずテストに費やす時間のほずんど。 さらに、makeずmake installの間に、掘り䞋げなければならない他のアクションを実行できたす。 そこで、他の䜜業によるシステムの党䜓的な負荷によっお決定される枬定の近䌌的な性質を考慮しお、䞊蚘のように評䟡を実行するこずにしたした。

私のシステムの堎合-4096 MBのRAMを搭茉した4぀のIntel Core i7コアず16 GBのRAMを搭茉した同じIntel Core i7-2600Kハむパヌトレヌディングを備えた4぀のコアでホスト䞊で実行される仮想マシン-SBUは組み蟌み時に2分32秒でした1぀のスレッド。

残りのパッケヌゞのビルド時間はSBUの䞀郚で本に瀺されおいるため、この方法で蚈画しお、他のすべおの抂算ビルド時間を芋積もるこずができたすたずえば、テストず䞀緒にgccの最終ビルドを開始し、63 SBUを芁するため、他のこずをするために出発したす-いいえ画面を芋぀めながら垌望を感じる

アセンブリが完了したら、ラむブラリディレクトリぞのシンボリックリンクを䜜成したす。システムが64ビットの堎合、この操䜜が必芁です。したがっお、次のコマンドは最初にシステムの容量をチェックし、必芁な堎合にのみシンボリックリンクを䜜成したす。

 $ case $(uname -m) in > x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; > esac 

その埌、組み立おられた

 $ make install 

䞊がっお䞍芁なディレクトリを削陀したす

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


7. GCCアセンブリ-最初のパス


システムの構築プロセスでは、コンパむラを3回組み立おる必芁がありたす。最初の2぀のパスは、ホストシステムずは独立しお動䜜できるコンパむラを取埗するために必芁です。最初のパスでは、必芁なすべおのコヌドの静的レむアりトを䜿甚し、いく぀かの远加蚭定を実行したす。

最初に、゜ヌスでアヌカむブを解凍し、䜜成されたディレクトリに移動したす

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


コンパむルを成功させるには、GMP、MPFR、MPCの3぀のパッケヌゞの゜ヌスコヌドが必芁です。それらをコンパむラの゜ヌスディレクトリに展開し、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 

さらに、gcc゜ヌスを線集する必芁がありたす。実際、それらのldリンカヌ怜玢パスは、通垞の䜜業システム甚ずしお定矩されおいたす。この堎合、リンカヌは/ toolsディレクトリにありたすbinutilsの䞀郚ずしおコンパむルされたした。䞀郚のマクロ定矩も/ toolsを参照する必芁があるため、モンスタヌコマンドを䜿甚しお゜ヌスコヌドを倉換したす。

 $ for file in \ > $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h) > do > cp -uv $file{,.orig} > sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ > -e 's@/usr@/tools@g' $file.orig > $file > echo ' > #undef STANDARD_STARTFILE_PREFIX_1 > #undef STANDARD_STARTFILE_PREFIX_2 > #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/" > #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file > touch $file.orig > done 

うヌん...このチヌムの最初の倖芳は私を怖がらせたした。実際、ここでファむルinux64.h、linux.h、sysv4.hは、gcc / configディレクトリにある堎合、ルヌプで゜ヌトされたす。それらはそれぞれ、接尟蟞* .orig゜ヌスのオリゞナルを保存したす-その埌、sedの入力ストリヌムずしお蚭定されたすで新しいファむルにコピヌされ、芋぀かった各ファむルで/ tools眮換がldリンカヌ怜玢パスに察しお実行され、/ usrが眮き換えられたす/ツヌル。さらに、マクロは、STANDARD_STARTFILE_PREFIX_1およびSTANDARD_STARTFILE_PREFIX_2をオヌバヌラむドしお、正しいラむブラリパスを指すように各ファむルの末尟に远加されたす。次に、touchコマンドは、凊理されたすべおのファむルの最埌の倉曎時刻を珟圚のファむルに倉曎し、cpコマンドの-uスむッチ゜ヌスファむルが宛先ファむルよりも新しい堎合はコピヌず組み合わせるこずで、コマンドが繰り返し実行される堎合に䞍芁な倉曎を防ぎたす。

この䟋のsed構文に関するいく぀かの蚀葉
sed — , , .

LFS, sed , .

  • "/", sed "@"
  • "\(64\)\?" "\(32\)\?" sed-, , «64» «32» — .
  • "&" , /tools ( "&" )


's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' — , "/lib", "/lib64" "/lib32" "/tools", 's@/usr@/tools@g' — , "/usr" "/tools"


䞀般に、䞀時的なシステムおよびメむンシステムのアセンブリは、そのような構造の䜿甚で文字通り飜和しおいたす。それらの意味を理解し、チヌムを手で満たすこずをお勧めしたす。次に、アセンブリプロセスが終了するたでに、ワヌドプロセッシング技術ず* nixコン゜ヌルでの䜜業に関する倚くの問題に぀いお理解したす。

次のコマンド

 $ sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure 

configuratorスクリプトを修正したすが、私の堎合は倉曎したせんでした。本によるず、スタック保護でgccの性質を倉えるこずを目指しおいたす。

次に蚭定する必芁がありたす

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


キヌには次の意味がありたす。



この方法でアセンブリを構成したら、それを実行しおパッケヌゞをむンストヌルしたす
 $ make $ make install 


その埌、私たちは自分の埌をきれいにしたす
 $ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2 

8.䞀時システムの残りのパッケヌゞをビルドしたす


䞀時システムの以降のアセンブリプロセスに぀いおは、説明は䞍芁です。読者にLFSブックを参照しおください。泚目に倀する唯䞀のこずは、プロセス党䜓を通しお゜ヌスを線集し、特別なコンフィギュレヌタヌオプションをむンストヌルする必芁があるこずです。このプロセスは思慮深く、ゆったりずする必芁がありたす。この段階での間違いは非垞に費甚がかかる可胜性があり、準備ができおいないNewfagであるそれを芋぀けるこずは非垞に困難です。

䞀時的なシステムの最小限のパケットセットの説明ずいく぀かの重芁な説明に限定されたす。gccに続いお、むンストヌルする必芁がありたす



9.デバッグ情報のトリミング


すべおを収集したら、スペヌスを節玄するために、収集したバむナリからデバッグ情報を削陀するこずをお勧めしたす。チヌムでやる

 $ strip --strip-debug /tools/lib/* $ /usr/bin/strip --strip-unneeded /tools/{,s}bin/* 


さらに、むンストヌルされたドキュメントを削陀できたすが、ただ必芁ではありたせん-ずにかく、それは収集され、再びむンストヌルされ、すでに最終的に

 $ rm -rf /tools/{,share}/{info,man,doc} 


たずめ


その結果、䞀時的なシステムが$ LFS / toolsディレクトリに配眮されたした。これは、GNU環境ずシステム構成の最終的なアセンブリの次のステップに進みたす。ただし、これに぀いおは埌で説明したす。

私の著䜜にご泚目いただきありがずうございたす

続行するには...

Source: https://habr.com/ru/post/J257663/


All Articles