数字と人生の厳しい真実

09.07.2020

空の 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 フラッシュ ドライブよりもはるかに遅いことに注意する必要があります。

私は幼い頃からコンピューターに興味がありました。 この関心は、幼稚園で MS-DOS でゲームをプレイすることから成長し、学校が終わるまでにあらゆる種類のプログラミング コンテストに終わりました。 当然のことですが、学校卒業後はプログラマーになるために専門学校に通いました。 最も奇妙なのは、私がここ何年も GNU/Linux のような素晴らしいオペレーティング システムからまったく遠ざかっていたということです。 しかし、1年半前の、最初の学期の初めに、私はある男性に会いました(彼は私より少し年上で、専門学校を卒業して研究所に入学し、就業経験がありました)、会話の1つで次のように言いました。
「GNU/Linux の学習を始めてみませんか? Linux をゼロから始めましょう。」

唯一の紙の配布

LFS (以下、Linux From Scratch の略称) は、Gerard Beekmans によって書かれた本で、GNU/Linux の最小限の動作バージョンをソース コードから構築するプロセスを説明しています。 なぜ紙なのでしょうか? かつてはハードカバーで購入できたので、「流通」というのはちょっと珍しいですよね。 もちろん、本自体に加えて、それを組み立てるにはインターネット (または事前にダウンロードされた) が必要です。 ソースコード)、ハードドライブ上の空きパーティション、および任意の オペレーティング·システムコンパイラを備えた Linux カーネルに基づいています。 個人的には、常に事前に構築された LFS ディストリビューションまたは フルインストール Slackware - (たとえば、Ubuntu については言えない) 必要なものがすべて揃っています。 もちろん、不足しているパッケージをいつでもダウンロードできますが、私たちは Linux を学びたいだけですよね? また、Slackware は、基本的なインストールや設定なしでも、必要なツールを提供します。

LFS 本からコンパイルされたディストリビューションでは実際には何もできないことをすぐに言っておきます。 というか、経験の浅いユーザーには何も必要ありません。 オン、オフ、再起動、使用が可能です イーサネット接続, しかし、最も重要なことはコンパイルすることです。 したがって、現在コミュニティによってサポートされている他の書籍もあります。Beyond LFS を使用すると、ユーザーにとって興味深いプログラムそのものを収集できます。 ブラウザやグラフィカル環境から、データベース管理システムや DHCP サーバーまで。 この本はベースの本よりもバージョンが遅れる傾向がありますが、LFS から得られる経験は通常、バージョンの競合を独自に解決するのに十分です。 他の 3 冊の本 (Automated LFS、Cross LFS、および Hardened LFS) はこれらのタイトルに完全に対応しており、この記事の範囲を超えています。 でも、インターネットでいつでも読めるんですよね?

しかし、なぜそれから始めるのでしょうか?

ばかげているわけではないにしても、すべては非常に単純です。 この本には、説明書に加えて、理論的な (ただし非常に簡潔で、結果として悲観的ではない) 内容がたくさん含まれています。 Ubuntuをインストールします。 Libtool パッケージが何をするか知っていますか? それともゴーク? LFS のビルドが数回成功すると、システム上のすべてのパッケージがわかり、最も重要なことに、それらがどのように相互作用するかを理解できるようになります。 はい、システムの構成は最小限ですが、これにより常にその改善への関心が高まります。 頻繁に Google に助けを求めたり、英語のドキュメントを読んだりすることを教えます。 最初は、コンソールにコードのブロックを慎重に再入力したりコピーしたりしても、アクションの半分も理解できないでしょう。 しかし最終的には、グラフィックス サポートや強力なビデオ カード、最新の Aero 機能がなければ、これは見苦しいということに気づきます。 タッチスクリーン、あなたが自分で組み立てたオペレーティングシステムは、あなた自身が新たな知識と新たな勝利を求めて手を伸ばすほどの強さと誇りをあなたに与えます。 少し大げさですが、新しいシステムで最初に再起動したときの感覚は、今でも忘れることができません。

数字と人生の厳しい真実

LFS は最小のディストリビューションではありません。 アセンブリには、ディスク上に約 3 GB の空き容量が必要です (これは、既に動作している Linux ベースのシステムに追加されます)。ただし、一定の作業を行った後、システムを Live-CD に変えることができます。 このような機会があれば、その方法については後で説明します。 すべてをコンパイルするには (構成ファイルなどを作成する必要性を考慮して)、約 2 日かかります。 これは、夜間に睡眠、食事のための休憩をとり、コンピュータの電源を切る場合のことです。 一方、システムを組み込むコンピュータの性能にも依存します。 私の最初の犠牲者は MSI ノートパソコン X-340 - インテルプロセッサー Core 2 Solo 搭載 クロック周波数 1.2 ギガヘルツ (一般的に、LFS はシングルコア システム上に構築することが推奨されます)。 ラム- 2GB DDR2。 より低い仕様でも十分であり、高速プロセッサーではアセンブリははるかに高速に行われます。

ちなみに、各パッケージのおおよそのビルド時間はチュートリアルに記載されています。 時間の単位は、Binutils パッケージ (アセンブラ、リンカー、およびオブジェクト ファイルを操作するためのその他の多数の小規模なユーティリティ) のビルド時間とみなされます。 上記のシステムでは 3 分かかりました。

流通構成

LFS に含まれるすべてのパッケージをリストすることはあまり意味がありません。 リストは長くなり、初心者にはほとんど何もわかりません。 知識のある人にとっては過剰です。 この短いセクションでは、一般的なアドバイスをいくつか述べたいと思います。 まず、本書で説明されていないパッケージを構築するときは、パッチ リポジトリを確認してください。パッチ リポジトリは、すでに LFS での使用に適応されている可能性があります。 次に、BLFS はほぼ完全にオプションのパッケージで構成されています。必要なものを選択するだけで、LFS ビルドに自由に追加できます。 そして 3 番目: 最初からパッケージ マネージャーを使用します。 本書ではこれに一章を割いているが、 実践的な指示完全に欠けているわけではありません。 私が推奨できるのは、パッケージ、依存関係、およびバージョンを管理するための最小限のコマンド セットを提供する Bash で書かれたスクリプトである Guarded Installation Tool だけです。その後、LFS ではソース コードから APT または DPKG をコンパイルできます。コミュニティフォーラムでよく取り上げられています。

結論の代わりに

この 1 年半で、私は研究において大きな進歩を遂げました。 「こんなOSがあるんだ」という段階から、「Gentooのサーバーを3日で立てられる」というレベルまで進みました。 私はまだ理想からは程遠く、自分を本物の Linux ユーザーと呼ぶことすらできません。 自宅のコンピューター古い W​​indows XP と Xubuntu 10.10 は相性が良いですが、Linux の学習をどこから始めればよいかと聞かれたら、何と答えるかご存知ですか? Linux をゼロから始めましょう。

追伸 PMに書いてくれた人たちに感謝します。 エラーを修正し、ハックを少し移動しました。

コンピューターに Linux をインストールし、特定のタスクで Linux の使用を開始するには、さまざまな方法があります。 ディストリビューションの選択肢は、「主婦向け」と上級ユーザー向けの両方で、あらゆる好みや色に合わせて非常に幅広く、特定のハードウェアのソース コードからのアセンブリなど、あらゆるレベルのカスタマイズが可能です。 システムのインストールは、原則として、多少なりとも知識のある PC ユーザーであれば誰でも行うことができます。 そして、「Linux とその他の OS」というトピックで今でも人気のあるホリバーに詳しく触れなければ、このシステムを使用するのに、たとえば 10 年前に新しく作られた Linux ユーザーに必須だった知識は必要ありません。 私の非常に主観的な観点から言えば、私がこのシステムの開発を観察してきた 10 年以上にわたって、Linux は初心者にとってよりフレンドリーになり、過去に Linux に内在していた問題の多くが解消されました。 それは良いことです。

手作りペンギン…

たとえば、LFS のトピックに関するハブレに関する記事がすでにいくつかあります。 後者に関するコメントは、論理的な考えを示唆しています - 一連の可能性がある場合 Linuxのインストールその研究はすでに徹底的に広範囲にわたっているのに、なぜ LFS が必要なのでしょうか?

「宇宙船がどのように移動するのか...そして地球が火の玉だったとき...」についての話については詳しく説明しません。 私の立場に基づいて提起された質問に答えます。私が LFS を収集しているのは、単にそれに興味があるからです。 この過程でわかります 良い機会システムの「内部」を見てみましょう。 この道が最適とは言い難いことは認めます。 それにもかかわらず、 この記事以降のセクションでは、Linux システムを手動で構築するプロセスについて説明します。 これらの記事はアセンブリ ドキュメントの翻訳ではありません。特にその必要はありません。 著者が個人的に直面しなければならなかったプロセスの詳細とニュアンスに重点が置かれます。 このサイクルを初心者の日記のようなものとして考えてみましょう。

1. システム要件

LFS を構築するには、GNU/Linux がインストールされたコンピューターが必要です。 原則として、どのような配布でも構いません。 私が使用しているマシンで考えてみましょう Arch Linux。 Debian ベースのディストリビューションについて ( リナックスミント、Ubuntu など)、もちろんそれらも適していますが、次のことに注意してください。作業の初期段階の 1 つで、環境変数を初期化するときに、コマンド シェルの警告が表示されます。

$ source ~/.bash_profile dircolors: SHELL 環境変数もシェル タイプ オプションも指定されていません
Linux Mint 17 では、ユーザーが再度ログインし、source コマンドで環境変数が更新されるときに、/etc/profile から dircolors (ターミナルに色を付けるコマンド) が間接的に呼び出されることが原因で、この警告が表示されました。 これは重要ではないため、無視しても問題ありません。

Linux ホスト システムには、公式のシステム要件にリストされているパッケージがインストールされている必要があります。 これらのパッケージのほとんどは、そのまま提供されるか、オプションの開発者ツールです。 いずれの場合も、特定のディストリビューションの公式リポジトリから簡単にインストールできます。 良い選択肢 Knoppix などの LiveCD を使用する場合は、OS が含まれていないマシンに LFS をインストールできます。 この意味で、選択はあなた次第です。

ハードウェアとOSに加えて、忍耐力と忍耐力も必要です。 組み立てと構成のプロセスは非常に時間がかかり、労力がかかります。 本にあるコマンドをコピーしてターミナルに貼り付けないでください。まず、ケースが特殊である可能性があります。 第二に、私たちの目標は、ソース コードから組み立てられた実行可能な OS を構築する原理を理解することです。つまり、行われているプロセスの意味を掘り下げる必要があります。 仕事の各段階は、有意義かつゆっくりと取り組む必要があります。

2. 最小限のシステムを構築するためのドキュメント

必要なドキュメントはすべて、『Linux Form Scratch』という書籍に集中しています (リンクは最新の安定リリースのオンライン バージョンにつながります)。 初心者に最初にアドバイスしたいのは、最新の安定バージョンを使用することです。 英語。 がある ロシア語の翻訳ただし、彼らは常に遅れています 現在のバージョン。 さらに、LFS 6.0 の最新のロシア語版へのリンクは空白につながり、公式 Web サイトから入手できる唯一の翻訳は 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 md5sum 。 。 lfs-bootscripts-20150222.tar.bz2: 破損しています。 。 md5sum: 警告: 1 つの計算されたチェックサムが一致しませんでした

指定されたアーカイブが解凍され、ファイル サイズは実際のものと一致します。 おそらく、CRS リストを含む md5sums ファイルにエラーが侵入しただけかもしれません。 ただし、リスクを負わないように、この本の安定版を使用することをお勧めします。

3. 土づくり

まず、LFS を展開するにはディスク容量が必要です。 これは、HDD 上の 1 つのパーティション (または複数のパーティション) である場合もあれば、ホスト ファイル システム内のディレクトリである場合もあります。 私は、以前に 64 ビット Arch Linux をインストールした仮想マシンの HDD 上にパーティションを作成するというオプションに落ち着きました。

必要な最小サイズ ディスクスペース- 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: ターゲット


私はいくつかの Pushd/popd コマンドに特に注意を払いました。 私は長年Linuxを使い続けている確信犯のLinuxユーザーですが、 このシステム、これらの内部 bash コマンドは私にとって初めてでした。 ただし、ファイル システム内のさまざまなポイントを頻繁に移動してから戻る必要がある場合には、非常に便利です。 Pushd コマンドは、パラメータとして指定されたディレクトリに一時的に移動します。 戻るには、popd コマンドを使用します。 この場合、ジャンプするルートはスタックの形式で編成され、戻るためのパスを再入力する必要はありません。

これで、組み立てを開始するために必要なものがすべて揃いましたが、最後の準備作業を行う必要があるだけです。

4. 作業環境の整備

まず、ホスト システムのルートにある $LFS/tools ディレクトリへのシンボリック リンクを作成しましょう。

# 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 を作成します。 パラメータの意味は次のとおりです。

  • -s /bin/bash - ユーザーセッションで使用されるコマンドシェル
  • -g lfs - ユーザーが属するグループ
  • -m - ユーザーのホーム ディレクトリを作成することを指定します /home/lfs
  • -k /dev/null - 空のテンプレート ディレクトリ。 デフォルトでは、ホーム ディレクトリを作成すると、/etc/skel にあるファイルとフォルダがその中に配置されます。 必要に応じて、このテンプレートは変更できますが、空のディレクトリ /home/lfs を作成する必要があり、テンプレートとして null ファイルを渡すことでそれを示します。

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
「クリーンな」ユーザー環境を作成します (キー -私環境変数に値を代入することで、以前の設定を無視するように指定します

  • HOME - ホーム ディレクトリ。/home/lfs に等しい変数に現在の値を割り当てます。
  • TERM - 使用する端末のタイプ。現在の端末も残します。
  • PS1 - 招待状の形式 コマンドライン。 この場合、形式はユーザー名: 現在の作業ディレクトリ $ として設定されます。特殊文字 \u はユーザー名、\W は現在の作業ディレクトリです。
  • /bin/bash - 新しいシェル インスタンスを開始するコマンド

~/.bashrc ファイルは、特定のユーザーのセッションにログインするときにどのような設定を行う必要があるかを定義します。

  • set +h - bash でのハッシュを無効にします。 コマンド シェルは次のパスを記憶します。 実行可能ファイル、以前に起動されたため、システムが確実に高速化されます。 ただし、電話します。 異なるバージョン同じプログラムが異なるパスにあるため、ハッシュ化は害を及ぼすだけです。
  • umask 022 - 新しいファイルとディレクトリへのデフォルトのアクセス権を設定します。 値 022 は、ファイルが権利 644 (rw-r--r--) で作成され、ディレクトリが権利 755 (rwx r-x r-x) で作成されることを意味します。 各 umask ビットが設定されると、権利属性の対応するビットがリセットされることを意味します
  • LFS=/mnt/lfs - アセンブル中のシステムのルート
  • LC_ALL=POSIX - 起動されたプログラムのローカライズを決定します。 POSIX は、文字エンコード方式に依存しない表示標準を定義しています。
  • LFS_TGT - 一時的なシステム ビルド ツールを構築するときに使用されるターゲット マシンの説明を指定します。
  • PATH - 実行可能ファイルの検索パス
  • エクスポート - 上記で指定した値を指定した変数に割り当てます

別途、ファイルの作成方法に注意する必要があります。 なぜ cat コマンドを使用するのですか?なぜお気に入りのコンソール エディターを使用できないのですか? ホスト システム上にある限り、 テキストエディタ私たちに利用可能です。 しかし、一時的なシステムに切り替えると、編集者がいなくなります。 したがって、出力ストリームをあるファイルから別のファイルにリダイレクトする cat コマンドを使用する必要があります。 入力ファイルが指定されていないため、標準入力ストリームが使用されます。 出力ファイルは作成中のファイルであり、終了条件は入力ストリーム内のファイルの終わりの文字シーケンス (EOF) の出現です。 コマンドを入力すると、作成されたファイルのテキストをターミナルに直接入力できるようになります。 プロセスを終了するには、行 EOF を入力します。 このようにして、コマンド シェルを基本的なテキスト エディターに変えます。

作成されたスクリプトは、lfs に代わってログインするたびに実行されます。 コマンドでユーザー環境を更新しましょう

/$ ソース ~/.bash_profile

必要な環境変数が設定されていることを確認してください
/$セット

5. 仮のツールセットを組み立てる(仮システム)

システムを組み立て始めると、典型的な「鶏が先か、卵が先か」の問題に直面します。 システムを構築するには、コンパイラ、リンカー、ライブラリが必要です。 しかし、私たちは上記の情報を何も持っておらず、情報源のみを持っています。 ホスト システムにはコンパイラがあり、それを使って必要なソフトウェアの収集を開始します。 ただし、同じ gcc をデフォルト設定で単純に構築した場合、構築の初期段階では LFS システムでは動作しません。動作に必要なライブラリの動的リンクが使用されます。 作業に必要なコードはすべて静的にリンクする必要があります。つまり、実行可能ファイルに明示的に含める必要があります。

したがって、最初に行うことは、いくつかの部分をクロスコンパイルすることです 将来のシステム、最終バージョンを組み立てるときにそれらを使用できるようにするためです。

一時システムを組み立てる作業はすべて $LFS/sources ディレクトリで行われるので、そこに行きましょう

/$ cd $LFS/ソース
ビルドされるすべてのパッケージについて、ビルド順序には次の一連のアクションが含まれます (特に明記されていない限り)。

  • パッケージと一緒にアーカイブを解凍します
    $tar -pxf
  • 解凍されたディレクトリに移動します
    $cd
  • 組み立て説明書に従います(各パッケージにはドキュメントに詳細が記載されているニュアンスがあります)
  • 上記のディレクトリに移動し、$LFS/source に戻り、解凍およびアセンブリ中に作成されたすべてのディレクトリを削除します。

パッケージのビルドにかかる時間は、ほぼ瞬時にかかるものから 2 時間半かかるものまでさまざまです (すべてのテストを伴う chroot 後の 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

キーには特に注意してください。

  • --prefix=/ツール- を示します 組み立てられたパッケージ/tools ディレクトリにインストールされ、一時システムが配置されます。
  • --with-sysroot=$LFS- システムのルート ディレクトリ。一時システム内のプログラムの動作に必要なライブラリやその他のリソースの検索が実行されます。
  • --with-lib-path=/tools/lib- ldリンカに指定されたライブラリ検索パス
  • --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

7. GCC の構築 - 最初のパス

システムを構築するプロセス中に、コンパイラを 3 回構築する必要があります。 最初の 2 つのパスは、ホスト システムから独立して実行できるコンパイラを取得するために必要です。 最初のパスでは、必要なすべてのコードの静的リンクを使用し、いくつかの追加設定も行います。

まず、ソースを含むアーカイブを解凍し、作成されたディレクトリに移動します

$ 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 構文を理解していました。 農業。 しかし、しつこくグーグルで調べてみると、次のような考えに至りました。

  • 処理されるパスには「/」記号が含まれているため、sed はオペランド区切り文字の代わりに「@」記号を使用します。
  • 「\(64\)\?」という形式の構造 そして「\(32\)\?」 検索文字列に文字列「64」と「32」が含まれる場合と含まれない場合があることを sed に伝えます。操作は両方の場合に実行する必要があります。
  • 「&」記号は、/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
コンフィギュレータスクリプトを修正しますが、私の場合は何も変更しませんでした。 この本によると、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++

キーには次の意味があります。

  • --with-newlib- libc サポートを必要とするコードのコンパイルを防止します - これらのライブラリはまだありません。後でコンパイルされます。
  • --ヘッダーなし- まだ利用できない標準ヘッダー ファイルの使用を無効にします。
  • --with-local-prefix=/ツール- GCC がヘッダー ファイルを検索するローカル パス。 デフォルトでは、その値は /usr/local です。
  • --with-native-system-header-dir=/tools/include- システムヘッダーの検索パス
  • --共有を無効にする- すべてのライブラリ コードが静的にリンクされる必要があることを示します
  • --disable-decmal-float、--disable-threads、--disable-libatomic、--disable-libgomp、--disable-libitm、--disable-libquadmath、--disable-libsanitizer、--disable-libssp、 --disable-libvtv、--disable-libcilkrts、--disable-libstdc++-v3- この段階では不要なコンパイラ拡張機能をすべて無効にします。浮動小数点、マルチスレッド、並列処理、標準 C++ ライブラリなどを処理します。
  • --disable-multilib- 64 ビット環境での 32 ビット コードのビルドのサポートを無効にします
  • --enable-messages=c,c++- C/C++ サポートに限定

このようにアセンブリを構成したら、それを実行してパッケージをインストールします
$ 作る $ インストールする

それから私たちは自分たちの後片付けをします
$ cd .. $ rm -r gcc-build && rm -r gcc-4.9.2

8. 一時的なシステムの残りのパッケージを組み立てる

一時的なシステムの組み立てのさらなる進行については説明の必要はないので、LFS の本を参照してください。 唯一注意すべき点は、プロセス全体を通じてソースを編集してインストールする必要があることです。 特別なオプションこのプロセスは慎重かつゆっくりと行う必要があります。 この段階での間違いは非常に大きな損害をもたらす可能性があり、準備ができていない初心者にとって間違いを見つけるのは非常に困難です。

ここでは、一時的なシステム パッケージの最小限のセットといくつかの重要な説明に限定して説明します。 次にgccをインストールする必要があります

  • Linux-3.19 カーネル ヘッダー - GLibc ライブラリで必要
  • glibc-2.21 は、メモリ割り当て、ファイル システム操作、および基本的な算術演算を提供するメインの C ライブラリです。

    Glibc をビルドした後、アセンブルされたコンパイラーの最初のテストを実行する必要があります。 プリミティブなプログラムを作成し、一時的なセットからコンパイラーでアセンブルします。

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

    結果のバイナリを解析して、ダイナミック ライブラリ ローダーの検索パスの存在と内容を確認します。

    $ readelf -f a.out | grep ": /ツール"
    私の場合、次の結果が得られました。


    これは、リンカーへの正しいリンクを示します。 この本では 32 ビット システムの結果が示されていますが、私は 64 ビット システムを組み立てたので、ここで示されているパスは本で示されているパスとは異なります。

    問題がないことを確認したら、テストプログラムを削除します
    $ rm -v dummy.c a.out

  • Libstdc++-4.9.2 - g++ コンパイラが動作するために必要な標準 C++ ライブラリ
  • Binutils-2.25 - すでに考慮した 2 番目のビルド パス インストールされたパッケージ。 アセンブリは、コンパイラ、ar アーカイバ (binutils に含まれる)、最初のパスですでにコンパイルされたライブラリ、および環境変数 CC、AR、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 - 2 番目のパス、一時的なシステムによって実行されます。

    $ 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

  • Tcl-8.6.3 - テストを実行するためにコンパイラに必要な Tcl 言語サポート パッケージ。
  • Expect-5.45 - Tcl 拡張機能として使用されるテスト自動化ツール
  • DejaGNU-1.5.2 - プログラムテストを作成するためのフレームワーク
  • Check-0.9.14 - C プログラムの単体テストを整理するためのフレームワーク
  • Ncurses-5.9 は、疑似ターミナル UI を整理するためのライブラリであり、特に一部の構成ユーティリティ (Linux カーネル ビルドの構成時を含む) や mc などの一般的なプログラムで使用されます。
  • Bash-4.3.30 - コマンド シェル。 コメントはありません。
  • Bzip2-1.0.6 - bzip2 アーカイブのサポート。
  • Coreutils-8.23 は GNU 環境のコア パッケージの 1 つで、cat、ls、rm などの外部シェル コマンドが含まれています。
  • Diffutils-3.3 - ファイルとディレクトリを比較するためのユーティリティ。
  • File-5.22 - ファイルの種類を判別するためのユーティリティ。
  • Findutils-4.4.2 - ファイルとディレクトリを検索するためのユーティリティ。 たとえば、広く使用されている find が含まれています。
  • Gawk-4.1.1 - awk ユーティリティの GNU 実装 - 行ごとの解析と処理 テキストファイルおよびその他の入力ストリーム。
  • Gettext-0.19.4 - プログラムの国際化をサポートするユーティリティのパッケージ。
  • Grep-2.21 - 入力ストリーム内のテキスト検索ユーティリティ
  • Gzip-1.6 - 別のアーカイバ
  • M4-1.4.17 - ソフトウェア構成およびアセンブリツールで使用されるマクロプロセッサ
  • Make-4.1 - 自動ソフトウェア ビルド ユーティリティ
  • Patch-2.7.4 - ソース コード パッチを操作するためのユーティリティ
  • Perl-5.20.2 - Perl 言語インタプリタ
  • Sed-4.2.2 - ストリーミング テキスト エディター
  • Tar-1.28 - それがなければ、私たちはどうなるでしょうか?
  • Texinfo-5.2 - ドキュメント情報ページを操作するためのユーティリティ
  • Util-linux-2.26 は、Linux システム ユーティリティのメイン パッケージです。 たとえば、マウントが含まれます。
  • Xz-5.2.0 は別のアーカイバです。

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

すべてをアセンブルした後、スペースを節約するために、アセンブルされたバイナリからデバッグ情報を削除することをお勧めします。 チームでやります

$ ストリップ --strip-debug /tools/lib/* $ /usr/bin/strip --strip-unneeded /tools/(,s)bin/*

さらに、インストールされているがまだ必要ではないドキュメントを削除することもできます。ドキュメントは引き続き収集され、再度インストールされ、今度は仕上げのためにインストールされます。

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

結論

その結果、$LFS/tools ディレクトリに一時システムが作成されました。これは、次のステップで GNU 環境とシステム構成の最終アセンブリに進みます。 しかし、これについては後でお話します。

私の書き込みにご注目いただきありがとうございます!

1.1. LFS システムの組み立て方法

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 の収集を開始すると、複雑に見えるかもしれないことがより明確になり、すべてが適切な位置に収まります。