空の CD-RW または DVD-RW ディスクをドライブに挿入すると、このディスクを開こうとすると、Windows 7 エクスプローラーによって、このディスクをフォーマットするように求めるメッセージが自動的に表示されます。
LFSこれは UDF にすぎません。 CD および DVD ディスクにバッチ書き込みするためのファイル システム。 通常のレーザーディスクと同じように使用できます。 つまり、最も簡単な方法でファイルをコピーおよび削除します。 UDF ファイル システムは、特に DVD-Video で使用されます。
マスター済みこれはディスクに書き込むものです ファイルシステム ISO9660 (Joliet 拡張付き)。 ISO9660 ファイル システムは、従来のレーザー ディスク ファイル システムです。 オーディオ CD、MP3 ディスク、コンピュータプログラムUDF ファイル システム (LFS) の使用 UDF ファイル システムは、レーザー ディスクへのバッチ記録に使用されます。 バージョンに応じて、サポートされるものが異なります Windowsのバージョン
。 たとえば、Windows XP はバージョン 1.50、2.0、2.01 をサポートします。
UDF ファイル システムは、DVD プレーヤーなどのビデオおよびオーディオの記録および再生システムでも使用されます (DVD ビデオ ディスクは UDF バージョン 1.50 を使用して作成されます)。 ビデオカメラには、撮影した素材を DVD-RW ディスクに記録するモデルがあります。 このようなディスクを使用するには、まずフォーマットする必要があります。
空の CD-RW または DVD-RW ディスクをドライブに挿入すると、このディスクを開こうとすると、Windows 7 エクスプローラーによって、このディスクをフォーマットするように求めるメッセージが自動的に表示されます。
ファイル システムでのフォーマットにはかなりの時間がかかる場合があります。たとえば、700 MB の CD-RW は 10 ~ 12 分でフォーマットできます。
フォーマットが完了したら、Windows エクスプローラーからこのドライブにファイルを直接コピーできます。
ただし、UDF ディスクへのコピー速度は、通常のフラッシュ ドライブや USB フラッシュ ドライブよりもはるかに遅いことに注意する必要があります。
「GNU/Linux の学習を始めてみませんか? Linux をゼロから始めましょう。」
LFS 本からコンパイルされたディストリビューションでは実際には何もできないことをすぐに言っておきます。 というか、経験の浅いユーザーには何も必要ありません。 オン、オフ、再起動、使用が可能です イーサネット接続, しかし、最も重要なことはコンパイルすることです。 したがって、現在コミュニティによってサポートされている他の書籍もあります。Beyond LFS を使用すると、ユーザーにとって興味深いプログラムそのものを収集できます。 ブラウザやグラフィカル環境から、データベース管理システムや DHCP サーバーまで。 この本はベースの本よりもバージョンが遅れる傾向がありますが、LFS から得られる経験は通常、バージョンの競合を独自に解決するのに十分です。 他の 3 冊の本 (Automated LFS、Cross LFS、および Hardened LFS) はこれらのタイトルに完全に対応しており、この記事の範囲を超えています。 でも、インターネットでいつでも読めるんですよね?
ちなみに、各パッケージのおおよそのビルド時間はチュートリアルに記載されています。 時間の単位は、Binutils パッケージ (アセンブラ、リンカー、およびオブジェクト ファイルを操作するためのその他の多数の小規模なユーティリティ) のビルド時間とみなされます。 上記のシステムでは 3 分かかりました。
追伸 PMに書いてくれた人たちに感謝します。 エラーを修正し、ハックを少し移動しました。
コンピューターに Linux をインストールし、特定のタスクで Linux の使用を開始するには、さまざまな方法があります。 ディストリビューションの選択肢は、「主婦向け」と上級ユーザー向けの両方で、あらゆる好みや色に合わせて非常に幅広く、特定のハードウェアのソース コードからのアセンブリなど、あらゆるレベルのカスタマイズが可能です。 システムのインストールは、原則として、多少なりとも知識のある PC ユーザーであれば誰でも行うことができます。 そして、「Linux とその他の OS」というトピックで今でも人気のあるホリバーに詳しく触れなければ、このシステムを使用するのに、たとえば 10 年前に新しく作られた Linux ユーザーに必須だった知識は必要ありません。 私の非常に主観的な観点から言えば、私がこのシステムの開発を観察してきた 10 年以上にわたって、Linux は初心者にとってよりフレンドリーになり、過去に Linux に内在していた問題の多くが解消されました。 それは良いことです。手作りペンギン…
たとえば、LFS のトピックに関するハブレに関する記事がすでにいくつかあります。 後者に関するコメントは、論理的な考えを示唆しています - 一連の可能性がある場合 Linuxのインストールその研究はすでに徹底的に広範囲にわたっているのに、なぜ LFS が必要なのでしょうか?
「宇宙船がどのように移動するのか...そして地球が火の玉だったとき...」についての話については詳しく説明しません。 私の立場に基づいて提起された質問に答えます。私が LFS を収集しているのは、単にそれに興味があるからです。 この過程でわかります 良い機会システムの「内部」を見てみましょう。 この道が最適とは言い難いことは認めます。 それにもかかわらず、 この記事以降のセクションでは、Linux システムを手動で構築するプロセスについて説明します。 これらの記事はアセンブリ ドキュメントの翻訳ではありません。特にその必要はありません。 著者が個人的に直面しなければならなかったプロセスの詳細とニュアンスに重点が置かれます。 このサイクルを初心者の日記のようなものとして考えてみましょう。
$ source ~/.bash_profile dircolors: SHELL 環境変数もシェル タイプ オプションも指定されていません
Linux Mint 17 では、ユーザーが再度ログインし、source コマンドで環境変数が更新されるときに、/etc/profile から dircolors (ターミナルに色を付けるコマンド) が間接的に呼び出されることが原因で、この警告が表示されました。 これは重要ではないため、無視しても問題ありません。
Linux ホスト システムには、公式のシステム要件にリストされているパッケージがインストールされている必要があります。 これらのパッケージのほとんどは、そのまま提供されるか、オプションの開発者ツールです。 いずれの場合も、特定のディストリビューションの公式リポジトリから簡単にインストールできます。 良い選択肢 Knoppix などの LiveCD を使用する場合は、OS が含まれていないマシンに LFS をインストールできます。 この意味で、選択はあなた次第です。
ハードウェアとOSに加えて、忍耐力と忍耐力も必要です。 組み立てと構成のプロセスは非常に時間がかかり、労力がかかります。 本にあるコマンドをコピーしてターミナルに貼り付けないでください。まず、ケースが特殊である可能性があります。 第二に、私たちの目標は、ソース コードから組み立てられた実行可能な OS を構築する原理を理解することです。つまり、行われているプロセスの意味を掘り下げる必要があります。 仕事の各段階は、有意義かつゆっくりと取り組む必要があります。
注記: この記事の執筆中に、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 md5sum 。 。 lfs-bootscripts-20150222.tar.bz2: 破損しています。 。 md5sum: 警告: 1 つの計算されたチェックサムが一致しませんでした
指定されたアーカイブが解凍され、ファイル サイズは実際のものと一致します。 おそらく、CRS リストを含む md5sums ファイルにエラーが侵入しただけかもしれません。 ただし、リスクを負わないように、この本の安定版を使用することをお勧めします。
必要な最小サイズ ディスクスペース- 4ギガバイト。 サイズが 40 GB の論理パーティションを作成し、EXT4 としてフォーマットしました。 このパーティションはホスト システムにマウントする必要があります。 マウントポイントを特別な環境変数に保存すると便利です
# エクスポート LFS=/mnt/lfs
なぜなら、私たちは頻繁にこの道に頼らなければならないからです。 コマンドを使用してパーティションをマウントします(私の場合はsda6パーティションですが、あなたの場合はおそらく異なるでしょう)
# mkdir -v $LFS # マウント /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
$LFS/sources ディレクトリに 2 つのファイルをアップロードします - ダウンロードされたパッケージのリスト 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
鍵 --ディレクトリプレフィックスダウンロードしたファイルを配置するパスを指定します。 この後、インストールする必要のあるすべてのソースのダウンロードに進みます。
# wget --input-file=$LFS/sources/wget-list -- continue --directory-prefix=$LFS/sources
鍵 --入力ファイルを含むファイルを指します URLのリストダウンロード可能なパッケージ。 - 続く- ネットワークへの接続が中断された場合に、部分的にダウンロードされたファイルを再開できるようにします。 約 325 MB のアーカイブが、必要なソフトウェアのソースとアセンブリに必要なパッチとともにダウンロードされます。 ダウンロード後、ダウンロードしたパッケージの整合性を確認する必要があります
#pushd $LFS/source #md5sum -c md5sums #popd
チェック自体は md5sum ユーティリティの呼び出しであり、パラメータとして渡された md5sum リストに含まれるすべてのファイルのチェックサムを計算し、その結果を同じリストで指定された値と比較します。 成功した場合、結果は次のようになります
パケットの完全性チェック結果
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: 目的
ファイル-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: TARGET
bc-1.06.95-memory_leak-1.patch: ターゲット
bzip2-1.0.6-install_docs-1.patch: TARGET
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: ターゲット
これで、組み立てを開始するために必要なものがすべて揃いましたが、最後の準備作業を行う必要があるだけです。
# ln -sv $LFS/ツール /
これは何のためにあるのでしょうか? 一般に、なぜシンボリック リンクが必要なのでしょうか? これらは、ファイル システム内の特定のポイントへの均一なアクセスを提供するために作成されます。 現時点では、ホスト システムでは、このディレクトリへのパスは /mnt/lfs/tools のようになります。 一時システムに移動すると、そのルートは /mnt/lfs に配置され、この一時システムでは、ディレクトリの内容は /tools で利用できるようになります。 私たちが収集する主要なツールは、どこで起動されるかに関係なく、/tools パスに沿ってこのディレクトリにアクセスします。このパスはコンパイル後にバイナリに組み込まれます。 したがって、指定したリンクを作成すると、システム ルートの現在の場所に関係なく、/tools パスに沿ってこのディレクトリにアクセスできるようになります。 そうしないと、一時的なシステムに切り替えた直後に、最初のコンパイルで失敗が発生します。
さあ、作成しましょう 新しいグループもう 1 人は新しいユーザーです。私たちはそのユーザーに代わって、一時的なシステムを組み立てる最初の段階で作業を行います。 root として作業するべきではありません。たとえば、インストールするパッケージを構成するときに、インストール ディレクトリのプレフィックスを設定することを混乱したり忘れたりする可能性があり、組み立てられたパッケージをホスト システムにインストールすると、パッケージが壊れる (または作業が複雑になる) 可能性があります。 パッケージマネージャー将来)。 特定のディレクトリへの書き込み権限のみを持つ非特権ユーザーとして実行すると、問題を回避できます。
# groupadd lfs # useradd -s /bin/bash -g lfs -m -k /dev/null lfs
最初のコマンドは lfs グループを作成します。 2 つ目はユーザー lfs を作成します。 パラメータの意味は次のとおりです。
lfs ユーザーのパスワードを設定します。
#passwdlfs
そしてそれを $LFS/sources ディレクトリと $LFS/tools ディレクトリの所有者にします
# chown -v lfs $LFS/sources # chown -v lfs $LFS/tools
lfsとしてログイン
#su-lfs
コマンドパラメータの特性(キーの略称) -lまたは - ログイン) は、 指定されたユーザー前のセッションから環境変数の値を継承しない「クリーンな」セッションを作成する必要があります。 このセッションでは、独自の環境変数セットを作成します。
ユーザーのホームディレクトリにファイルを作成する
~/.bash_profile
/$ 猫 > ~/.bash_profile<< "EOF"
>exec env -i HOME=$HOME TERM=$TERM PS1="\u:w\$ " /bin/bash > EOF
~/.bashrc
/$ 猫 > ~/.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 > エクスポート LFS LC_ALL LFS_TGT パス > EOF
~/.bash_profile ファイルは、ユーザーによる環境変数のカスタマイズを定義します。 チーム
Exec env -i HOME=$HOME TERM=$TERM PS1="\u:W\$ " /bin/bash
「クリーンな」ユーザー環境を作成します (キー -私環境変数に値を代入することで、以前の設定を無視するように指定します
~/.bashrc ファイルは、特定のユーザーのセッションにログインするときにどのような設定を行う必要があるかを定義します。
別途、ファイルの作成方法に注意する必要があります。 なぜ cat コマンドを使用するのですか?なぜお気に入りのコンソール エディターを使用できないのですか? ホスト システム上にある限り、 テキストエディタ私たちに利用可能です。 しかし、一時的なシステムに切り替えると、編集者がいなくなります。 したがって、出力ストリームをあるファイルから別のファイルにリダイレクトする cat コマンドを使用する必要があります。 入力ファイルが指定されていないため、標準入力ストリームが使用されます。 出力ファイルは作成中のファイルであり、終了条件は入力ストリーム内のファイルの終わりの文字シーケンス (EOF) の出現です。 コマンドを入力すると、作成されたファイルのテキストをターミナルに直接入力できるようになります。 プロセスを終了するには、行 EOF を入力します。 このようにして、コマンド シェルを基本的なテキスト エディターに変えます。
作成されたスクリプトは、lfs に代わってログインするたびに実行されます。 コマンドでユーザー環境を更新しましょう
/$ ソース ~/.bash_profile
必要な環境変数が設定されていることを確認してください
/$セット
したがって、最初に行うことは、いくつかの部分をクロスコンパイルすることです 将来のシステム、最終バージョンを組み立てるときにそれらを使用できるようにするためです。
一時システムを組み立てる作業はすべて $LFS/sources ディレクトリで行われるので、そこに行きましょう
/$ cd $LFS/ソース
ビルドされるすべてのパッケージについて、ビルド順序には次の一連のアクションが含まれます (特に明記されていない限り)。
パッケージのビルドにかかる時間は、ほぼ瞬時にかかるものから 2 時間半かかるものまでさまざまです (すべてのテストを伴う chroot 後の gcc のビルドには、ほぼ同じ時間がかかります)。 コンピューターの速度は異なるため、ビルド時間の測定には標準ビルド ユニット (SBU) と呼ばれる相対単位が選択されます。 1 つの SBU は、最初にコンパイルされる binutils パッケージのビルド時間と同じです。 1.0 SBU の期間はシステムで大まかに見積もることができますが、現時点では詳細は以下で説明します。
おすすめ: システムを複数のスレッドにアセンブルしないでください。 マルチコア プロセッサを使用している場合、-j スイッチを使用すると作業が高速化されますが、後で重要なテストが失敗したり、組み立てられたソフトウェアの動作が不安定になる可能性があります。 1 つのスレッドでのアセンブリはそれほど長くはかかりません。マルチスレッドでのアセンブリで発生した問題を解決するのにはるかに多くの時間がかかります。
各パッケージの構築については説明しません。LFS の本自体で説明しています。 ただし、最も重要なパッケージのコンパイルを考慮して、アセンブリの微妙な点に焦点を当てます。
アーカイブを解凍し、その内容が含まれるディレクトリに移動します
$ 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(メイク;)
時間は time (...) ユーティリティによって測定され、中括弧で囲まれたコマンドの実行時間を返します。 これはチャンスを与えるだろう 約 SBU を見積もって、残りのパッケージのビルド時間を把握します。
注記: LFS は、ビルドとインストールの構成時間を測定することを推奨しています。 しかし、この推奨事項は広範囲に及びます。 マシンの稼働時間のほとんどは、製作とテストに費やされます。 さらに、make と make install の間に実行される他のアクションについても詳しく調べる必要がある場合があります。 そこで、他の作業によるシステム全体の負荷によって依然として決定される測定のおおよその性質を考慮して、上記の方法で評価を実行することにしました。
私のシステムの場合 - 仮想マシン 4コアで インテルコア 4096 MB の RAM を搭載した i7 は、16 GB の RAM を搭載した同じ Intel Core i7-2600K (ハイパートレード搭載の 4 コア) 上のホスト上で実行されます。1 つのスレッドにアセンブルされた場合、SBU は 2 分 32 秒でした。
残りのパッケージのビルド時間は、SBU の分数で本書に示されているため、他のすべてのおおよそのビルド時間を見積もることができ、作業を計画できます (たとえば、最終ビルド、gcc ビルドを実行し、テストと他のことをしてください。すべてに 63 SBU かかるため、画面を見つめないでください)
ビルドが完了したら、ライブラリ ディレクトリへのシンボリック リンクを作成します。 この操作はシステムが 64 ビットの場合に必要であるため、以下のコマンドは最初にシステムのビット数をチェックし、必要に応じてシンボリックリンクを作成します。
$ case $(uname -m) in > x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; >イーサック
この後、組み立てたものを取り付けていきます
$メイクインストール
2階に上がって、不要になったディレクトリを削除します
$ cd .. $ rm -r binutils-2.25 $ rm -r binutils-build
まず、ソースを含むアーカイブを解凍し、作成されたディレクトリに移動します
$ tar -pxf gcc-4.9.2.tar.bz2 $ cd ../gcc-4.9.2
コンパイルを成功させるには、さらに 3 つのパッケージ (GMP、MPFR、MPC) のソースが必要です。 これらをコンパイラのソース ディレクトリに解凍し、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 も参照する必要があるため、monstrous コマンドを使用してソースを変換します。
$ 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 > 完了
うーん...このチームを初めて見たとき、私は恐怖でいっぱいになりました。 実際、ファイル inux64.h、linux.h、sysv4.h は、gcc/config ディレクトリに存在する場合、ここでループされます。 それらのそれぞれは、サフィックス *.orig が付いた新しいファイルにコピーされます (元のソースを保存します。その後、それらは sed の入力ストリームとして配置されます)。その後、見つかった各ファイルで、/tools が ld に置き換えられます。リンカー検索パスと /usr は /tools に置き換えられます。 さらに、マクロ STANDARD_STARTFILE_PREFIX_1 および STANDARD_STARTFILE_PREFIX_2 のオーバーライドが各ファイルの末尾に追加され、ライブラリへの正しいパスを指すようになります。 次に、タッチコマンドで時刻を変更します。 最後の変更これは、cp コマンドの -u スイッチ (ソース ファイルが宛先ファイルよりも新しい場合はコピー) と組み合わせることで、コマンドが誤って繰り返されたときの不要な変更を防ぎます。
この例の sed 構文について少し説明します。
sed は、正規表現で定義されたパターンを使用してテキスト ファイルに対して操作を実行するストリーミング テキスト エディターです。
初めて LFS を開いたとき、私はレオナルド・ダ・ヴィンチの美術コースの学生と同じように sed 構文を理解していました。 農業。 しかし、しつこくグーグルで調べてみると、次のような考えに至りました。
したがって、式「s@/lib\(64\)\?\(32\)\?/ld@/tools&@g」を解析し、「/lib」、「/lib64」、および「/」を含むすべての行を検索します。 lib32" を先頭に行 "/tools" と式 "s@/usr@/tools@g" を追加します。 "/usr" を含むすべての行を検索し、それらを "/tools" に置き換えます。
次のコマンド:
$ sed -i "/k prot/agcc_cv_libc_provides_ssp=yes" gcc/configure
コンフィギュレータスクリプトを修正しますが、私の場合は何も変更しませんでした。 この本によると、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-decmal-float \ > --disable-threads \ > --disable-libatomic \ > --disable-libgomp \ > --disable-libitm \ > --disable-libquadmath \ > -- disable-libsanitizer \ > --disable-libssp \ > --disable-libvtv \ > --disable-libcilkrts \ > --disable-libstdc++-v3 \ > --enable-langages=c,c++
キーには次の意味があります。
このようにアセンブリを構成したら、それを実行してパッケージをインストールします
$ 作る $ インストールする
それから私たちは自分たちの後片付けをします
$ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2
ここでは、一時的なシステム パッケージの最小限のセットといくつかの重要な説明に限定して説明します。 次にgccをインストールする必要があります
Glibc をビルドした後、アセンブルされたコンパイラーの最初のテストを実行する必要があります。 プリミティブなプログラムを作成し、一時的なセットからコンパイラーでアセンブルします。
$ echo "main()()" > dummy.c $ $LFS_TGT-gcc dummy.c
結果のバイナリを解析して、ダイナミック ライブラリ ローダーの検索パスの存在と内容を確認します。
$ readelf -f a.out | grep ": /ツール"
私の場合、次の結果が得られました。
これは、リンカーへの正しいリンクを示します。 この本では 32 ビット システムの結果が示されていますが、私は 64 ビット システムを組み立てたので、ここで示されているパスは本で示されているパスとは異なります。
問題がないことを確認したら、テストプログラムを削除します
$ 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=/ tools \ > --with-local-prefix=/tools \ > --with-native-system-header-dir=/tools/include \ > --enable-langages=c,c++ \ > --disable-libstdcxx- pch \ > --disable-multilib \ > --disable-bootstrap \ > --disable-libgomp
パッケージが構築されると、それらは徐々に運用環境に導入され、ホスト システムからの独立性がますます高まります。 この段階では、コンパイラの再テストが必要です
$ echo "main()()" > dummy.c $ cc dummy.c $ readelf -la a.out | grep ": /tools" $ $ rm -r dummy.c a.out
$ ストリップ --strip-debug /tools/lib/* $ /usr/bin/strip --strip-unneeded /tools/(,s)bin/*
さらに、インストールされているがまだ必要ではないドキュメントを削除することもできます。ドキュメントは引き続き収集され、再度インストールされ、今度は仕上げのためにインストールされます。
$ rm -rf /tools/(,share)/(info,man,doc)
私の書き込みにご注目いただきありがとうございます!
LFS システムは、すでに設置されているものを使用して組み立てられます。 Linuxディストリビューション(例: Debian、Mandriva、 レッドハットまたはSUSE)。 既存システム Linux (ホスト システム) は開始システムとして使用され、そこから新しいシステムを構築します。 必要なプログラム、コンパイラ、リンカー、シェル インタプリタが含まれます。 これらのツールを使用できるようにするには、ディストリビューションのインストール中に「開発」オプションを選択します。
マシンに別のディストリビューションをインストールする代わりに、Linux From Scratch LiveCD または商用ディストリビューションの LiveCD を使用できます。 LFS LiveCD はホスト システムとして適切に機能し、本書の指示に正しく従うために必要なすべてのツールを提供します。 LiveCD の使用については本書の範囲を超えていますが、本書の作業中に LiveCD をホストとして使用することはできます。 現在の LFS システムを作成するのに最も適したバージョンは、LiveCD エディションの「-nosrc」または「-min」です。 取得するため 追加情報 LFS LiveCD について、またはコピーをダウンロードするには、http://www.linuxfromscratch.org/livecd/ にアクセスしてください。
本書の第 2 章では、新しいパーティションとファイルを作成する方法について説明します。 Linuxシステム。 ここで、新しい LFS システムがコンパイルされ、インストールされます。 第 3 章では、LFS システムを構築するためにどのパッケージとパッチをダウンロードする必要があるか、およびそれらを新しいファイル システムのどこに配置する必要があるかについて説明します。 第 4 章では、適切な作業環境の設定について説明します。 第 4 章では、第 5 章以降に進む前に知っておく必要がある多くの重要な問題について説明しているため、注意深く読んでください。
第 5 章では、基本的な開発キット (またはツールキット) として使用されるいくつかのパッケージをインストールする方法について説明します。 このキットは第 6 章で実際のシステムを構築するために使用されます。 これらのパッケージの一部は、循環依存関係を解決するために必要です。たとえば、コンパイラをコンパイルするにはコンパイラが必要です。
第 5 章では、Binutils と GCC を含むツール セットを作成する最初のパスを実行する方法も示します (最初のパスでは、基本的にこれら 2 つの重要なパッケージを再インストールします)。 次のステップは Glibc を構築することです。Glibc はツールキットに含まれるプログラムを使用してコンパイルされ、開発の最初のパスで構築されます。 次に、ツールチェーンを構築する 2 番目のパスを実行する必要があります。 この時点で、ツールチェーンを新しく構築された Glibc ライブラリに動的にリンクする必要があります。 第 5 章の残りのパッケージは、開発の 2 番目のパスで作成されたツールチェーンを使用して構築されます。 これが完了すると、LFS インストール プロセスは、実行中のカーネルを除き、ホスト システムのディストリビューションに依存しなくなります。
新しいシステムをホスト システムのディストリビューションから分離するこの取り組みは、過剰に見えるかもしれません。 これが行われる理由の完全な技術的説明については、セクション 5.2, ツールキットに関する技術ノートを参照してください。
第 6 章では、LFS システムを完全に組み立てます。 プログラム chroot(ルートを変更) ログインに使用 仮想環境新しいコマンド シェルを起動します。そのルート ディレクトリは LFS パーティションに配置されます。 これは、再起動して、LFS パーティションをルート パーティションとしてマウントするようにカーネルに指示するのと非常に似ています。 システムは実際には再起動しませんが、コマンドを使用しない場合 chrootの場合、ブート可能なシステムを作成するには、まだ必要ではない追加の作業が必要になります。 この「ルート変更」の主な利点は、LFS システムの組み立て中もホスト システムを引き続き使用できることです。 パッケージのコンパイルが完了するまで待機している間、コンピュータは通常どおり使用し続けることができます。
インストールを完了するには、第 7 章の説明に従って LFS ブートスクリプトを設定し、第 8 章の説明に従ってカーネルとブートローダーを設定します。第 9 章では、本書で説明するすべての作業が完了した後で LFS システムを使用する方法について説明します。達成されました。 本書のすべての手順が完了すると、プロジェクトは完了し、コンピュータを再起動できるようになります。 新しいシステム LFS。
これ 簡単な説明プロセス。 詳細情報各ステップについては、後続の章とパッケージの説明で説明します。 LFS の収集を開始すると、複雑に見えるかもしれないことがより明確になり、すべてが適切な位置に収まります。