lfs8.1

Linux從頭開始

版本8.1

由傑拉德 現場

主編:布魯斯 Dubbs

版權©1999 - 2017傑拉德現場php

版權©1999 - 2017,傑拉德現場css

保留全部權利。html

這本書是許可下Creative Commons許可.前端

計算機指令可能會從書中提取的麻省理工學院的許可.node

LinuxLinus Torvalds®是一個註冊商標。python


表的內容

前言

前言

個人學習之旅,更好地理解Linux開始在10年前,早在1998年。我第一次剛剛安裝的Linux發行版,並迅速成爲對整個概念和哲學背後的Linux。linux

總有許多方法來完成一個任務。一樣能夠適用於Linux發行版。許多已經存在多年。一些仍然存在,有些人變成別的東西,但別人一直屬於咱們的記憶。他們都作不一樣的事情來知足他們的目標受衆的需求。由於不少不一樣的方式來完成一樣的最終目標存在,我開始意識到我再也不受限於任何一個實現。發現Linux以前,咱們只是忍受問題在其餘操做系統當你別無選擇。這是它是什麼,無論你喜歡仍是不喜歡。對於Linux,選擇的概念開始出現。若是你不喜歡什麼東西,你是自由的,甚至鼓勵改變它。ios

我試着大量的分佈,不能決定任何一個。他們是偉大的系統自己。這不是對與錯的問題了。��已經成爲我的品味的問題。全部可用的選擇,很明顯這不是一個單一的系統,對我來講是完美的。因此我開始建立本身的Linux系統,徹底符合個人我的喜愛。c++

真正讓它本身的系統,我決心從源代碼編譯全部的代碼,而不是使用預編譯二進制包。這 「完美的」Linux系統將各類系統的優點沒有他們的弱點。起初,他們的想法是至關艱鉅的。我仍然致力於這樣一個系統能夠創建。git

後整理等問題循環依賴和編譯時錯誤,我終於創建了一個定製的Linux系統。全面運做,徹底可用像任何其餘的Linux系統。但這是我本身的創造。這是很是使人滿意的本身這樣的一個系統。惟一會被更好地建立每一個本身的軟件。這是下一個最好的事情。

我分享個人目標與其餘Linux社區的成員和經驗,很明顯,這些想法有持續的興趣。它迅速成爲純這樣的定製Linux系統服務不只知足用戶特定需求,但也做爲一個理想的學習機會爲程序員和系統管理員來加強他們的(現有)Linux技能。擴大的利益, Linux從頭開始項目誕生了。

這本書從頭Linux的中央核心項目。它提供了必要的背景和指令爲您設計和構建本身的系統。雖然這本書提供了一個模板,將致使一個正確的工做系統,您能夠自由改變指令來知足本身,這在某種程度上,這個項目的一個重要組成部分。你仍然控制;咱們伸出援助之手讓你開始你本身的旅程。

我衷心但願你能有一個偉大的時間從頭開始本身的Linux系統上工做,享受有一個系統的不少好處,真的是你本身的。

- - -
傑拉德現場
傑拉德在linuxfromscratch D0T org

觀衆

緣由有不少你想要讀這本書。不少人提出的一個問題, 「爲何要經過手動的全部麻煩從頭構建一個Linux系統,當你能夠下載並安裝一個現有的嗎?」

這個項目存在的一個重要緣由是幫助你學習Linux系統是如何工做的。構建LFS系統幫助演示Linux的不一樣之處,以及如何一塊兒工做,彼此依賴。的最好的一件事情,這學習經驗能夠提供Linux系統是可以定製以知足您的獨特需求。

LFS的另外一個主要好處是,它可讓你有更多的控制系統不依賴別人的Linux實現。LFS,你坐在駕駛座上,決定系統的方方面面。

LFS容許您建立很是緊湊的Linux系統。安裝普通發行版時,您經常被迫安裝不少項目可能從未使用或理解。這些項目浪費資源。你可能會爭辯說,今天的硬盤和cpu,這些資源再也不是考慮。可是,有時候你還受制於規模考慮若是沒有其餘。考慮可引導cd、u盤、嵌入式系統。這些地區LFS能夠是有益的。

一個自定義構建的Linux系統的另外一個優勢是安全。經過從源代碼編譯整個系統,您有權審計一切都和應用所需的安全補丁。再也不須要等待別人來編譯二進制包,修復安全漏洞。除非你檢查補丁並實現它你本身,你沒有保證新的二進制包是創建正確和充分修復這個問題。

Linux從頭開始的目標是創建一個完整的和可用的基礎水平系統。若是你不但願從頭開始構建本身的Linux系統,您可能沒有徹底受益於這本書的信息。

有太多其餘好的理由來構建本身的LFS系統在這裏所有列出來。最後,教育是迄今爲止最強大的緣由。當你繼續在LFS的經驗,你會發現真正信息和知識的能力。

LFS目標架構

LFS的主要目標架構是AMD /英特爾x86(32位)和x86_64(64位)的cpu。另外一方面,這本書的指令也工做,一些修改,PC和手臂的cpu。創建一個系統,利用其中一個cpu,主要的先決條件,除了那些在接下來的幾頁,是現有的Linux系統,如早期LFS安裝,Ubuntu,Red Hat / Fedora,SuSE,或其餘目標的分佈體系結構。還要注意,一個32位的分佈能夠安裝和使用做爲一個主機系統在64位AMD /英特爾電腦。

其餘一些關於64位系統須要添加。一個32位的系統相比,可執行程序的大小略大,執行速度略快。例如,在一個測試構建的lfs - 6.5 Core2Duo基於CPU的系統,測量數據以下:

Architecture Build Time     Build Size 32-bit       198.5 minutes  648 MB 64-bit       190.6 minutes  709 MB

正如你所看到的,64位構建只��4%更快,比32位構建大9%。得到的64位系統是相對最小。固然,若是你有超過4 gb的RAM或想操做數據,超過4 gb,64位系統的優勢是顯著的。

默認的64位從LFS構建結果被認爲是一個「純」64位系統。也就是說,它只支持64位的可執行文件。創建一個「multi-lib」系統須要許多應用程序編譯兩次,一次爲一個32位的系統,一次爲一個64位的系統。這不是在LFS直接支持,由於它會干擾的教育目標提供所需的指令簡單基本的Linux系統。你能夠參考跨Linux從頭開始項目高級主題。

LFS和標準

LFS的結構儘量遵循Linux標準。的主要標準是:

  • posix . 1的受權- 2008.

  • 文件系統的層次結構標準(FHS)3.0版

  • Linux標準基地(LSB)5.0版

    LSB有四個獨立的標準:核心,桌面,運行時語言和成像。除了通用的需求也有架構具體要求。還有兩個區域試驗使用:Gtk3和圖形。LFS嘗試符合架構在前一節中討論。

    請注意

    許多人不一樣意LSB的要求。定義它的主要目的是確保專有軟件可以兼容的系統上安裝並正常運行。LFS是基於源以來,用戶徹底控制哪些包是理想的,許多人選擇不安裝一些指定的LSB的包。

建立一個完整的LFS系統可以經過LSB認證考試是可能的,但不是沒有許多其餘包超出了LFS的範圍。BLFS這些額外的包已經安裝說明。並

包提供的LFS須要知足LSB需求

LSB的核心:

Bash,公元前,Binutils Coreutils、你要文件,Findutils,呆呆的,Grep,Gzip、M4,Man-DB,Ncurses,Procps,Psmisc,Sed,影子,焦油,Util-linux Zlib

LSB桌面:

沒有一個

LSB運行時語言:

Perl

LSB成像:

沒有一個

LSB Gtk3和LSB圖形(試驗用):

沒有一個

BLFS包提供的須要並知足LSB需求

LSB的核心:

,批處理(部分),Cpio,艾德,Fcrontab,Initd-tools,Lsb_release,NSPR,NSS,PAM,羅馬帝國,Sendmail(或後綴或進出口),時間

LSB桌面:

Alsa,ATK公司,開羅,Desktop-file-utils,Freetype Fontconfig,Gdk-pixbuf,Glib2,GTK + 2,Icon-naming-utils,Libjpeg-turbo,Libpng,Libtiff,Libxml2,MesaLib,Pango,Qt4 Xdg-utils,Xorg

LSB運行時語言:

Python,Libxml2,Libxslt

LSB成像:

杯子,Cups-filters,內容、理智

LSB Gtk3和LSB圖形(試驗用):

GTK + 3

BLFS包不是由LFS或須要並知足LSB需求

LSB的核心:

沒有一個

LSB桌面:

沒有一個

LSB運行時語言:

沒有一個

LSB成像:

沒有一個

LSB Gtk3和LSB圖形(試驗用):

沒有一個

理由包在書中

如前所述,LFS的目標是創建一個完整的和可用的基礎水平系統。這包括全部包須要複製自身,同時提供一個相對最小的基地來定製一個更完整的系統基於用戶的選擇。這並不意味着LFS系統是最小的可能。包括幾個重要的包,不嚴格要求。下面的列表文檔書中的每一個包的理由。

  • Acl

    這個包包含公用事業管理訪問控制列表,用於定義更細粒度的可自由支配的文件和目錄的訪問權限。

  • Attr

    這個包包含項目管理文件系統對象的擴展屬性。

  • Autoconf

    這個包包含項目生產shell腳本能夠自動配置源代碼從開發人員的模板。一般須要重建一個包後更新到構建過程。

  • Automake

    這個包包含從模板生成使文件的程序。一般須要重建一個包後更新到構建過程。

  • Bash

    這個包知足LSB核心要求系統提供一個Bourne Shell的接口。它選擇在其餘shell包由於它的一些常見的使用和普遍的功能超出了基本的外殼函數。

  • 公元前

    這個包提供了一種高精度數字處理語言。它知足要求須要在構建Linux內核。

  • Binutils

    這個包包含一個連接,一個彙編程序,和其餘工具來處理對象文件。這個包的程序是最須要編譯LFS系統的包。

  • 野牛

    這個包包含的GNU版本yacc(另外一個編譯器編譯器)須要構建其餘幾個LFS項目。

  • Bzip2

    這個包包含壓縮和解壓文件的程序。它是許多LFS包須要減壓。

  • 檢查

    這個包包含其餘項目的測試工具。這只是臨時安裝的工具鏈。

  • Coreutils

    這個包包含許多基本程序用於查看和操做文件和目錄。這些程序須要命令行文件管理,和是必要的在LFS每一個包的安裝過程。

  • DejaGNU

    這個包包含測試其餘程序的一個框架。這只是臨時安裝的工具鏈。

  • 你要

    這個包包含程序顯示文件或目錄之間的差別。這些程序能夠用來建立補丁,還用於許多包的構建過程。

  • E2fsprogs

    這個包包含實用程序處理ext二、ext3和ext4文件系統。這些是最多見的和全面測試Linux支持的文件系統。

  • Eudev

    這個包是一個設備管理器。它動態地控制/ dev目錄中的條目從系統設備被添加或刪除。

  • 外籍人士

    這個包包含一個相對較小的XML解析庫。這是所需的XML::解析器Perl模塊。

  • 預計

    這個包包含一個程序執行腳本對話與其餘互動節目。它一般用於測試其餘包。這只是臨時安裝的工具鏈。

  • 文件

    這個包包含一個實用工具來肯定一個給定的文件或文件的類型。幾包須要構建。

  • Findutils

    這個包包含程序找到文件在文件系統中。它是用於許多包的構建腳本。

  • Flex

    這個包包含一個實用工具生成的程序文本的識別模式。這是GNU版本的lex(詞法分析器)計劃。它須要創建幾個LFS包。

  • 靦腆的人

    這個包包含操縱文本文件的程序。這是awk的GNU版本(Aho-Weinberg-Kernighan)。它是用在許多其餘包的構建腳本。

  • 海灣合做委員會

    這個包是Gnu Compiler Collection。它包含了C和c++編譯器以及其餘一些不是由LFS。

  • 同時

    這個包包含GNU庫數據庫管理器。它被另外一個LFS包,Man-DB。

  • Gettext

    這個包包含公用事業和圖書館國際化和本地化的不少包。

  • Glibc

    這個包包含主要的C庫。沒有它Linux程序不會運行。

  • GMP

    這個包包含數學庫,爲高精度計算提供有用的功能。應構建Gcc。

  • Gperf

    這個包包含一個程序,生成一個完美哈希函數從一個關鍵組。Eudev所需。

  • Grep

    這個包包含搜索文件的程序。使用這些項目大多數軟件包的構建腳本。

  • Groff

    這個包包含用於處理程序和格式文本。這些項目的一個重要功能是格式手冊頁。

  • GRUB

    這個包是大統一引導加載程序。這是幾個可用的引導加載程序之一,可是是最靈活的。

  • Gzip

    這個包包含壓縮和解壓文件的程序。它須要解壓許多包在LFS和超越。

  • Iana-etc

    這個包提供了網絡服務和協議數據。它須要使適當的網絡功能。

  • Inetutils

    這個包包含基本的網絡管理的程序。

  • Intltool

    這個包包含用於從源文件中提取可翻譯字符串的工具。

  • IProute2

    這個包包含項目基本和先進的IPv4和IPv6網絡。這是選擇在其餘常見網絡工具包(net-tools)IPv6的能力。

  • Kbd

    這個包包含密鑰表文件,爲非美國鍵盤鍵盤實用程序,控制檯的字體。

  • Kmod

    這個包包含程序須要管理Linux內核模塊。

  • 這個包包含一個很是好的文本文件查看器,容許向上或向下滾動當瀏覽一個文件。也被Man-DB查看手冊。

  • Libcap

    這個包實現了用戶空間接口的POSIX 1003.1 e Linux內核中可用的功能。

  • Libpipeline

    Libpipeline包包含一個庫操做管道子流程的靈活和方便的方式。這是Man-DB所需的包。

  • Libtool

    這個包包含GNU通用庫支持腳本。它包裝在一致的使用共享庫的複雜性,便攜式接口。這是在其餘LFS包所需的測試套件。

  • Linux內核

    這個包是操做系統。它是Linux在GNU / Linux環境中。

  • M4

    這個包包含一個通用文本宏處理器有用的做爲其餘程序的構建工具。

  • 使

    這個包包含一個程序爲指導建設包。LFS所需的幾乎每個包中。

  • Man-DB

    這個包包含項目尋找和查看手冊頁。這是選擇,而不是 男人包因爲卓越的國際化能力。它提供程序的人。

  • 手冊頁

    這個包包含了基本的Linux手冊頁的實際內容。

  • 貨幣政策委員會

    這個包包含複數的運算的功能。應由Gcc。

  • MPFR

    這個包包含多個精密運算的功能。應由Gcc。

  • Ncurses

    這個包包含庫terminal-independent處理字符的屏幕。它常被用來提供光標控制菜單系統。須要LFS的包數量。

  • 補丁

    這個包包含一個程序修改或建立文件的應用 補丁一般文件建立的 diff程序。它是構建過程所需的幾個LFS包。

  • Perl

    這個包是一個PERL解釋器運行時語言。它須要幾個LFS的安裝和測試套件包。

  • Pkg-config

    這個包提供了一個程序來返回關於一個安裝庫的元數據或包。

  • Procps-NG

    這個包包含項目監控過程。這些程序是用於系統管理,也使用的LFS Bootscripts。

  • Psmisc

    這個包包含程序顯示正在運行的進程的信息。這些項目是有用的系統管理。

  • Readline

    這個包是一組庫提供了命令行編輯和歷史功能。它使用Bash。

  • Sed

    這個包容許在文本編輯器中編輯文本而不打開它。它也須要大多數LFS包的配置腳本。

  • 影子

    這個包包含項目以安全的方式來處理密碼。

  • Sysklogd

    這個包包含項目日誌系統消息,例如那些由內核或守護進程在不尋常的事件發生。

  • Sysvinit

    這個包提供了 初始化程序,它是全部其餘進程的父在Linux系統上。

  • 焦油

    這個包提供了存檔和提取功能用於LFS幾乎全部的包。

  • Tcl

    這個包包含工具命令語言中使用的許多測試套件LFS包。這只是臨時安裝的工具鏈。

  • Texinfo

    這個包包含程序閱讀,寫做,和轉換信息頁面。它是用於許多LFS的安裝程序包。

  • Util-linux

    這個包包含各類各樣的實用程序。其中包括實用程序來處理文件系統、控制檯、分區,和消息。

  • Vim

    這個包包含一個編輯器。之因此選擇它,是由於它的兼容性與經典的vi編輯器及其大量的強大的功能。一個編輯器是一個很是私人的選擇對於許多用戶和任何其餘編輯器能夠代替若是須要。

  • XML::解析器

    這個包是一個Perl模塊,接口與外籍人士。

  • XZ跑龍套

    這個包包含壓縮和解壓文件的程序。它提供了最高的壓縮和解壓包在XZ有用或LZMA格式。

  • Zlib

    這個包包含一些程序所使用的壓縮和解壓縮的例程。

先決條件

構建LFS系統不是一個簡單的任務。它須要必定程度的現有知識的Unix系統管理以解決問題和正確執行命令列出。特別是,做爲一個絕對最低,您應該已經有能力使用命令行(殼)複製或移動文件和目錄,目錄和文件內容列表,改變當前目錄。也但願你有一個合理的使用和安裝Linux軟件的知識。

由於假定的LFS書籍 至少這個基本的水平,各類LFS支持論壇不太可能在這些領域可以給你提供了不少幫助。你會發現你的問題關於這些基本的知識可能會置之不理,或者你只是提到了LFS必要的課前閱讀列表。

在構建LFS系統以前,咱們推薦閱讀如下:

排版

使事情更容易,有一些排版約定使用這本書。本節包含了一些排版格式的例子在Linux從頭開始。

./configure --prefix=/usr

這種形式的文本是設計類型同樣除非另有指出在周圍的文本。它也被運用於解釋部分提到的是識別的命令。

在某些狀況下,一個邏輯行是擴展到兩個或多個物理行最後一個反斜槓。

CC="gcc -B/usr/bin/" ../binutils-2.18/configure \   --prefix=/tools --disable-nls --disable-werror

注意,反斜槓必須當即返回。等其餘空格字符空格或製表符會產生不正確的結果。

install-info: unknown option '--dir-file=/mnt/lfs/usr/info/dir'

這種形式的文本(寬度固定的文本)顯示屏幕輸出,一般做爲命令的結果。這種格式還用於顯示文件名,例如 /etc/ld.so.conf.

強調

這種形式的文本是用於多個目的。其主要目的是爲了強調重要的點或物品。

http://www.linuxfromscratch.org/

這種格式用於超連接在LFS社區和外部頁面。它包括howto、下載位置,和網站。

cat > $LFS/etc/group << "EOF"  EOFroot:x:0: bin:x:1: ......

使用這種格式在建立配置文件。第一個命令告訴系統建立該文件 $LFS/etc/group從任何類型的第二行到文件結束(EOF)序列。所以,整個部分是通常類型的觀察。

<REPLACED TEXT>

這種格式是用來封裝文本不能輸入或複製和粘貼操做。

[OPTIONAL TEXT]

這種格式是用來封裝的文本是可選的。

passwd(5)

這種格式是指一個特定的手冊(人)頁面。圓括號裏面的數字代表一個特定部分手冊內。例如, passwd有兩個手冊頁。每LFS安裝說明,這兩個男人將位於頁面/usr/share/man/man1/passwd.1 /usr/share/man/man5/passwd.5。當這本書使用 passwd(5)它是專門指 /usr/share/man/man5/passwd.5. 人密碼將打印第一個頁面發現匹配嗎 「passwd」,這將 /usr/share/man/man1/passwd.1。對於這個示例,您將須要運行 男人5 passwd爲了讀取特定頁面被稱爲。應該注意的是,大多數人頁面沒有重複的頁面名稱在不一樣的部分。所以,男人 <program name>一般是足夠的。

結構

這本書分爲如下部分。

第一部分,介紹

第一部分解釋了一些重要的筆記如何推動LFS安裝。這一節還提供關於這本書的元信息。

第二部分——準備構建

第二部分描述瞭如何準備建設的進程制定一個分區,下載包,和編譯臨時工具。

第三部分,構建LFS系統

第三部分引導讀者經過LFS system-compiling的建築和安裝的全部包,設置啓動腳本和安裝內核。生成的Linux系統的基礎其餘軟件能夠構建擴展所需的系統。在這本書的最後,有一個易於使用的參考清單的全部程序、庫和重要的文件已經安裝。

勘誤表

用於建立一個LFS系統的軟件是不斷更新和提升。安全警告和錯誤修復可能成爲可用的LFS書籍後被釋放。檢查是否這個版本的包版本或指令LFS須要任何修改來適應安全漏洞或其餘bug修復,請訪問http://www.linuxfromscratch.org/lfs/errata/8.1/在繼續以前與您的構建。你應該注意任何變化如圖所示,將它們應用於這本書的相關部門推動構建LFS系統。

第一部分介紹

第1章。介紹

1.1。如何構建一個LFS系統

LFS系統將由使用一個已經安裝了Linux發行版(好比Debian,OpenMandriva Fedora,或openSUSE)。這個現有的Linux系統(主機)將被用做一個起點提供必要的程序,包括編譯器、連接器,和殼牌,創建新的系統。選擇 「發展」選擇分佈安裝期間可以訪問這些工具。

做爲替代安裝一個單獨分配到您的機器上,您可能但願使用一個LiveCD從商業分佈。

第二章這本書描述瞭如何建立一個新的本地Linux分區和文件系統。這是新的LFS系統的地方將被編譯和安裝。第三章解釋了哪些包和補丁須要下載到構建LFS系統以及如何存儲它們在新的文件系統。第四章論述了設置一個合適的工做環境。請閱讀第四章當心,由於它解釋了幾個重要的問題須要注意在開始工做以前第五章甚至更遠。

第五章解釋了安裝的包的數量將造成基本的開發套件(或工具鏈),用於構建實際系統第六章。這些包是須要解決循環依賴的例子,編譯一個編譯器,您須要一個編譯器。

第五章也向你展現瞭如何構建一個工具鏈的第一遍,包括Binutils和GCC(第一遍基本上意味着這兩個核心包將從新安裝)。下一步是構建Glibc,C庫。Glibc將編譯工具鏈項目建在第一遍。而後,第二個經過工具鏈的創建。這一次,對新建的工具鏈將動態連接Glibc。剩下的第五章包是使用第二個經過工具鏈。在這樣作時,LFS安裝過程將再也不依賴於宿主分佈,除了正在運行的內核。

這一努力隔離新系統從主機分佈彷佛有些過度了。一個完整的技術解釋爲何這樣作是在提供5.2節,「工具鏈技術筆記」.

第六章,創建了完整的LFS系統。的 chroot(改變根)計劃是用來輸入虛擬環境和啓動一個新的shell的LFS分區根目錄將被設置。這很是相似於重啓和指示內核掛載LFS分區做爲根分區。系統並不會重啓,而是使用 chroot由於建立一個可啓動的系統須要額外的工做,這是沒有必要的。主要的優勢是 「chroot」容許你繼續使用主機系統而LFS正在建造中。在等待包編譯完成,你能夠繼續使用你的電腦是正常的。

完成安裝,基本系統配置設置第七章和內核引導加載程序設置第八章.第九章包含的信息繼續LFS的經驗超出了這本書。在這本書中已經實現的步驟後,計算機將準備重啓進入新LFS系統。

這是簡而言之過程。詳細���息在如下章節討論每個步驟和包的描述。將澄清項看起來複雜,那麼一切將會層次分明當你着手LFS冒險。

1.2。有什麼新自上次發佈

下面列出的包更新自書的先前版本。

升級到:

  • Automake 1.15.1

  • 公元前1.07.1

  • Binutils 2.29

  • Coreutils 8.27

  • 你要3.6

  • Eudev 3.2.2

  • E2fsprogs 1.43.5

  • Expat-2.2.3

  • 文件5.31

  • 2.6.4 Flex

  • GCC 7.2.0

  • 同時1.13

  • Glibc 2.26

  • gperf - 3.1

  • Grep 3.1

  • GRUB 2.02

  • IPRoute2 4.12.0

  • Kmod 24

  • 少487

  • Libpipeline 1.4.2

  • Linux 4.12.7

  • 手冊頁4.12

  • Perl 5.26.0

  • Pkg-config 0.29.2

  • Psmisc 23.1

  • 影子4.5

  • Tcl-core-8.6.7

  • Texinfo 6.4

  • Tzdata 2017 b

  • Util-Linux 2.30.1

  • Vim 8.0.586

補充道:

刪除:

  • bc - 1.06.95 memory_leak - 1.補丁

1.3。更新日誌

這是版本 8.1Linux從零開始的書,2017年9月1日。若是這本書是超過六個月大時,一個新的和更好的版本可能已經可用。爲了找到答案,請檢查鏡子經過之一http://www.linuxfromscratch.org/mirrors.html.

下面是一個列表的更改自先前版本的書。

更新日誌條目:

  • 2017-09-01

    • [bdubbs]- lfs - 8.1釋放。

  • 2017-08-27

    • (bdubbs)——從systemd書的util-linux刪除無效的選擇。

  • 2017-08-24

    • (dj)——除去GlibC rpcgen指數。

    • (ken)——修復acl的testsuite perl - 5.26。

  • 2017-08-16

    • (bdubbs)——從glibc刪除不須要的選項。

  • 2017-08-16

    • (bdubbs)——添加一個注意gmp,顯示瞭如何建立通用的gmp庫。

  • 2017-08-15

    • [bdubbs]——gcc-7.2.0更新。修復# 4125.

    • [bdubbs]——linux-4.12.7更新。修復# 4124.

    • [bdubbs]-更新glibc 2.26。修復# 4120.

    • [bdubbs]——更新binutils - 2.29。修復# 4117.

  • 2017-08-11

    • [bdubbs]——tcl-core-8.6.7更新。修復# 4123.

  • 2017-08-08

    • [bdubbs]——e2fsprogs-1.43.5更新。修復# 4122.

    • [bdubbs]——expat-2.2.3更新。修復# 4121.

    • [bdubbs]——linux-4.12.5更新。修復# 4119.

  • 2017-07-23

    • (dj)——util-linux-2.30.1更新。修復# 4114.

    • (dj)——linux-4.12.3更新。修復# 4115.

    • (dj)-更新人-頁面- 4.12。修復# 4116.

  • 2017-07-18

    • (dj)——linux-4.12.2更新。修復# 4113.

    • (dj)——expat-2.2.2更新。修復# 4112.

    • (dj)——推遲systemd BLFS測試套件以前。並修復# 4107.

  • 2017-07-13

    • [bdubbs]——linux-4.12.1更新。修復# 4110.

    • [bdubbs]——libpipeline-1.4.2更新。修復# 4109.

    • [bdubbs]——iproute2-4.12.0更新。修復# 4108.

    • (bdubbs)——解決測試程序。修復# 4105.

    • [bdubbs]——在procps-ng修復測試程序。修復# 4106.

    • [bdubbs]-更新glibc 2.25 + adc7e06。修復# 4097.

  • 2017-07-03

    • [bdubbs]- linux - 4.12更新。

  • 2017-07-02

    • [bdubbs]——在attr修復測試程序。修復# 4103.

    • [bdubbs]-更新grep - 3.1。修復# 4104.

  • 2017-06-30

    • [bdubbs]——linux-4.11.8更新。修復# 4099.

  • 2017-06-26

    • [bdubbs]——修復一個錯誤在mountfs bootscript。

    • (bdubbs)——你要刪除過期的種子在章節5和6。

  • 2017-06-24

    • [bdubbs]——更新texinfo - 6.4。修復# 4100.

    • [bdubbs]——linux-4.11.7更新。修復# 4099.

    • [bdubbs]——刪除部分談論着沒有網卡的配置。

    • [bdubbs]——更新引導腳本卸載網絡文件系統在下降網絡。

  • 2017-06-21

    • [bdubbs]——automake-1.15.1更新。修復# 4098.

    • [bdubbs]——expat-2.2.1更新。修復# 4096.

    • [bdubbs]——更新psmisc - 23.1。修復# 4094.

    • [bdubbs]——linux-4.11.6更新。修復# 4095.

  • 2017-06-07

    • [bdubbs]——linux-4.11.4更新。修復# 4093.

  • 2017-06-02

    • [bdubbs]-更新util - linux - 2.30。修復# 4092.

    • [bdubbs]——perl-5.26.0更新。修復# 4091.

    • [bdubbs]- - - - - - - 5.31更新文件。修復# 4090.

    • 3.6[bdubbs]-你要更新。修復# 4089.

    • [bdubbs]——linux-4.11.3更新。修復# 4088.

  • 2017-05-25

    • [renodr]——修復i686系統的構建。包括06 Glibc章修改。

  • 2017-05-19

    • [bdubbs]——移庫版本presevation packages.ent調試符號。修復# 4085.

    • [bdubbs]——linux-4.11.1更新。修復# 4086.

    • (bdubbs)4.5 -更新的影子。修復# 4087.

  • 2017-05-13

    • (dj)——-isystem介紹使用gcc的最終系統位置的內部頭在Glibc構建。

    • (ken)——更新一些庫版本再次剝離,部分修復# 4085.

    • (dj)——添加額外的符號連接,避免「/工具」最終系統中的引用。

  • 2017-05-07

    • [bdubbs]——flex-2.6.4更新。修復# 4084.

  • 2017-05-05

    • [bdubbs]-更新人-頁面- 4.11。修復# 4083.

  • 2017-05-03

    • [bdubbs]——gcc-7.1.0更新。修復# 4082.

    • [bdubbs]——iproute2-4.11.0更新。修復# 4081.

    • glibc(bdubbs)——解決問題測試和添加一些解釋配置選項。

    • (bdubbs)——添加一個命令/root/.聯繫vimrc這樣默認不覆蓋那些/etc/vimrc. vim選項

  • 2017-05-01

    • [bdubbs]- linux - 4.11更新。修復# 4080.

    • [bdubbs]——更新flex修補。

  • 2017-04-26

    • (bdubbs)——添加一個補丁來修復版本2.6.3:flex退化。

    • [bdubbs]——linux-4.10.13更新。修復# 4079.

  • 2017-04-26

    • [bdubbs]-更新grub 2.02。修復# 4042.

  • 2017-04-25

    • [bdubbs]——vim-8.0.586更新。修復# 4078.

    • [bdubbs]——eudev-3.2.2更新。修復# 4077.

    • [bdubbs]——linux-4.10.12更新。修復# 4075.

    • [bdubbs]——更新gperf - 3.1。修復# 4053.

    • (bdubbs)-提升指令保存調試信息選擇的圖書館當剝離第六章的末尾。修復# 4076(再一次)。

  • 2017-04-22

    • (bdubbs)——添加指令保存調試信息選擇圖書館當剝離第六章的末尾。修復# 4076.

  • 2017-04-11

    • [bdubbs]——刪除沒必要要的——disable-compile-warnings pkg-config指令。感謝傑弗瑞·史密斯指出這一點。

  • 2017-04-10

    • [bdubbs]——linux-4.10.9更新。修復# 4073.

    • [bdubbs]——bc-1.07.1更新。修復# 4074.

  • 2017-04-07

    • [bdubbs]——在bc - 1.07修復一個錯誤。

  • 2017-04-03

    • [bdubbs]-更新bc - 1.07。修復# 4071.

  • 2017-03-31

    • [bdubbs]——linux-4.10.8更新。修復# 4070.

    • [bdubbs]-更新少- 487。修復# 4069.

  • 2017-03-28

    • [bdubbs]——移動readline在公元前第六章。修復# 4068.

    • [bdubbs]—���linux-4.10.6更新。修復# 4065.

    • [bdubbs]——pkg-config-0.29.2更新。修復# 4066.

    • [bdubbs]更新tzdata - 2017 b。修復# 4067.

    • (bdubbs)——添加選項-Dusethreads perl 6章。

  • 2017-03-25

    • (dj)-更新lfs - bootscripts - 20170825。修復一個問題在rc腳本範圍。感謝「quesker」# lfs-support報告和後續測試。

  • 2017-03-18

    • [bdubbs]——更新格式checkfs啓動腳本的錯誤消息。修復# 4064.

    • [bdubbs]-更新人-頁面- 4.10。修復# 4063.

    • [bdubbs]——linux-4.10.3更新。修復# 4062.

    • (bdubbs)-同時更新1.13。修復# 4061.

    • [bdubbs]——更新coreutils - 8.27。修復# 4060.

  • 2017-03-11

    • (dj)——修復的描述修改 gcc/config/{linux,i386/linux{,64}}.h在 海灣合做委員會經過1。

  • 2017-03-08

    • (dj)——在網絡配置更新/ etc / hosts。

  • 2017-03-03

    • [bdubbs]——更新binutils - 2.28。公元前m4和binutils適應以前黃金連接器迴歸測試。修復# 4059.

    • [renodr]——linux-4.10.1更新。修復# 4056.

    • [renodr]——tzdata2017a更新。修復# 4057.

  • 2017-02-28

    • [bdubbs]——kmod-24更新。修復# 4054.

    • [bdubbs]——更新util-linux 2.29.2。修復# 4052.

    • [bdubbs]——iproute2-4.10.0更新。修復# 4051.

    • [bdubbs]- linux - 4.10更新。修復# 4049.

  • 2017-02-25

    • [bdubbs]- lfs - 8.0釋放。

1.4。資源

1.4.1。常見問題解答

若是在構建的LFS系統您遇到任何錯誤,有任何問題,或想在書中有一個錯誤,請先諮詢常見問題(FAQ)位於http://www.linuxfromscratch.org/faq/.

1.4.2。郵件列表

 linuxfromscratch.org服務器主機的郵件列表用於LFS的發展項目。這些列表包括的主要開發和支持列表,等等。若是FAQ並不能解決問題,下一步將是搜索郵件列表http://www.linuxfromscratch.org/search.html.

的信息在不一樣的列表,如何訂閱,存檔位置,和額外的信息,請訪問http://www.linuxfromscratch.org/mail.html.

3。IRC

LFS社區的一些成員提供幫助互聯網中繼聊天(IRC)。在使用這種支持以前,請確保你的問題尚未回答的LFS FAQ或者郵件列表檔案。你能夠找到的IRC網絡 irc.freenode.net。支持通道被命名爲# LFS-support。

1.4.4。鏡像站點

LFS項目有不少全球鏡子讓訪問網站並下載所需的包更方便。請訪問LFS的網站http://www.linuxfromscratch.org/mirrors.html列表的當前的鏡子。

1.4.5。聯繫信息

請直接提問和評論的LFS郵件列表(見上圖)。

1.5。幫助

若是一個問題或經過這本書工做時遇到問題,請檢查FAQ頁面http://www.linuxfromscratch.org/faq/ generalfaq。問題每每已經回答。若是你的問題沒有回答這個頁面上,試圖找到問題的根源。下面的提示將給你一些指導故障排除:http://www.linuxfromscratch.org/hints/downloads/files/errors.txt.

若是你找不到你的問題中列出的常見問題,搜索郵件列表http://www.linuxfromscratch.org/search.html.

咱們也有一個很棒的LFS社區願意提供幫助經過郵件列表、IRC(參見1.4節,「資源」這本書的部分)。然而,咱們天天獲得幾個支持的問題,他們中的許多人很容易回答FAQ,首先經過搜索郵件列表。因此,爲咱們提供最好的幫助,你須要作一些調查。讓咱們關注更多的不一樣尋常的支持需求。若是你搜索不產生一個解決方案,請包括全部相關信息(下面提到)在你的請求幫助。

1.5.1。東西提

除了一個簡短的解釋問題的經驗,最重要的東西,包括在任何請求幫助:

  • 這本書的版本(在本例中使用 8.1 )

  • 主機分佈和用於建立LFS版本

  • 的輸出主機系統需求腳本

  • 包或部分中遇到的問題

  • 準確的錯誤信息或接收症狀

  • 注意你是否已經偏離了這本書

請注意

偏離這本書 不意味着咱們將不會幫助你。畢竟,LFS我的偏好。前期對任何變化創建過程幫助咱們評估和肯定你的問題的可能緣由。

1.5.2。配置腳本的問題

若是出現錯誤而運行 配置腳本,檢查 config.log文件。這個文件可能包含過程當中遇到的錯誤 配置沒有打印到屏幕上。包括 有關若是你須要尋求幫助。

1.5.3。更正編譯問題

屏幕輸出和各類文件的內容是有用的在決定編譯問題的緣由。屏幕輸出 配置腳本和 使運行是頗有幫助的。沒有必要包括整個輸出,但包括足夠的相關信息。下面是一個例子的信息的類型包括屏幕輸出 使:

gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\" -DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" -DLIBDIR=\"/mnt/lfs/usr/lib\" -DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I. -g -O2 -c getopt1.c gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o expand.o file.o function.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.o signame.o variable.o vpath.o default.o remote-stub.o version.o opt1.o -lutil job.o: In function `load_too_high': /lfs/tmp/make-3.79.1/job.c:1565: undefined reference to `getloadavg' collect2: ld returned 1 exit status make[2]: *** [make] Error 1 make[2]: Leaving directory `/lfs/tmp/make-3.79.1' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/lfs/tmp/make-3.79.1' make: *** [all-recursive-am] Error 2

在這種狀況下,不少人就包括底部:

make [2]: *** [make] Error 1

這不是足夠的信息正確診斷問題,由於它只指出,有錯誤,不是 什麼錯了。整個部分,在上面的示例中,就是應該被保存,由於它包含的命令被執行死刑(s)和相關的錯誤消息。

一篇優秀的文章關於在互聯網網上尋求幫助http://catb.org/ esr /常見問題/ smart-questions.html。閱讀並按照提示在本文檔中增長的可能性得到你須要的幫助。

第二部分。準備構建

第二章。準備主機系統

2.1。介紹

在這一章,構建所需的主機工具檢查LFS,若是必要的話,安裝。而後準備一個分區將主機LFS系統。咱們將建立的分區,建立一個文件系統,並掛載。

2.2。主機系統需求

你的主機系統應該有如下軟件的最低版本。這應該不是一個問題對於大多數現代的Linux發行版。還要注意,許多發行版將軟件標題到單獨的包,一般的形式 「<包名稱>重擊」或 「<包名稱> - dev」。必定要安裝這些若是您的發行版提供。

早期版本的軟件包可能上市工做,可是尚未測試。

  • bash - 3.2(/ bin / sh應該是一個象徵性的或硬連接的bash)

  • binutils - 2.17(大於2.29版本不推薦,由於他們沒有測試)

  • 野牛- 2.3(/ usr / bin / yacc應該連接到野牛或小腳本,執行野牛)

  • Bzip2-1.0.4

  • coreutils - 6.9

  • Diffutils-2.8.1

  • Findutils-4.2.31

  • Gawk-4.0.1(/ usr / bin / awk應該呆呆的連接)

  • gcc - 4.7包括c++編譯器, g + +(版本大於7.2.0不推薦,由於他們沒有測試)

  • glibc - 2.11(大於2.26版本不推薦,由於他們沒有測試)

  • Grep-2.5.1a

  • Gzip-1.3.12

  • Linux內核- 3.2

    內核版本需求的緣由是,咱們在構建指定版本 glibc在第六章的建議開發人員。udev也須要。

    若是主機內核是早於3.2須要內核替換爲最新版本。有兩種方法你能夠去。首先,看看你的Linux內核包供應商提供了一個3.2或更高版本。若是是這樣,您可能但願安裝它。若是你的供應商沒有提供一個可接受的內核包,或者你不肯意安裝它,你能夠本身編譯一個內核。說明編譯內核和配置引導加載程序(假設主機使用GRUB)位於第八章.

  • M4-1.4.10

  • 讓- 3.81

  • Patch-2.5.4

  • Perl-5.8.8

  • Sed-4.1.5

  • 瀝青- 1.22

  • texinfo - 4.7

  • Xz-5.0.0

重要的

注意上面提到的符號連接須要構建一個LFS系統使用說明包含在這本書。符號連接指向其餘軟件(如短跑、mawk等)可能會工做,但不支持的測試或LFS開發團隊,而且可能須要偏離的指令或額外的補丁包。

是否你的主機系統全部適當的版本,和編譯程序,運行如下:

cat > version-check.sh << "EOF"  EOF  bash version-check.sh#!/bin/bash # Simple script to list version numbers of critical development tools export LC_ALL=C bash --version | head -n1 | cut -d" " -f2-4 MYSH=$(readlink -f /bin/sh) echo "/bin/sh -> $MYSH" echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash" unset MYSH echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3- bison --version | head -n1 if [ -h /usr/bin/yacc ]; then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`"; elif [ -x /usr/bin/yacc ]; then echo yacc is `/usr/bin/yacc --version | head -n1` else echo "yacc not found" fi bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6- echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2 diff --version | head -n1 find --version | head -n1 gawk --version | head -n1 if [ -h /usr/bin/awk ]; then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`"; elif [ -x /usr/bin/awk ]; then echo awk is `/usr/bin/awk --version | head -n1` else echo "awk not found" fi gcc --version | head -n1 g++ --version | head -n1 ldd --version | head -n1 | cut -d" " -f2- # glibc version grep --version | head -n1 gzip --version | head -n1 cat /proc/version m4 --version | head -n1 make --version | head -n1 patch --version | head -n1 echo Perl `perl -V:version` sed --version | head -n1 tar --version | head -n1 makeinfo --version | head -n1 xz --version | head -n1 echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c if [ -x dummy ] then echo "g++ compilation OK"; else echo "g++ compilation failed"; fi rm -f dummy.c dummy

2.3。建築LFS階段

LFS設計是創建在一個會話中。也就是說,假設的說明系統的過程當中不會關閉。這並不意味着系統必須一口氣完成。問題是,某些程序必須從新引導以後re-accomplished若是恢復LFS在不一樣的點。

2.3.1。1 - 4章

這些章節完成主機系統。從新啓動時,要注意如下幾點:

  • 程序做爲根用戶在2.4節須要LFS環境變量設置 對根用戶.

2.3.2。第五章

  • 必須掛載/ mnt / lfs分區。

  • 全部在第五章必須由用戶指令 lfs。一個 蘇- lfs須要作任何任務以前在第5章。

  • 的程序5.3節,「通常編譯指令」是相當重要的。若是有任何疑問的安裝包,確保任何先前擴展包,re-extract包文件,完成全部部分的指令。

2.3.3。章6 - 8

2.4。建立一個新的分區

像大多數其餘操做系統,LFS一般是安裝在專用的分區。構建LFS系統推薦的方法是使用一個空的分區或可用,若是你有足夠的空間分區,建立一個。

最小系統須要一個分區的6字節(GB)。這是足以存儲全部源tarball,編譯的包。然而,若是LFS系統的目的是成爲主要的Linux系統,安裝額外的軟件可能會將須要額外的空間。20 GB的分區是一個合理的大小提供了增加。LFS系統自己不會佔用這麼多的房間。這個需求的很大一部分是提供足夠的免費臨時存儲以及LFS完成後添加額外的功能。另外,編譯包須要大量的磁盤空間,能夠包安裝後回收。

由於老是沒有足夠的隨機存取存儲器(RAM)用於編譯過程,這是一個好主意使用小磁盤分區 swap空間。這是內核所使用的存儲使用的數據,讓更多的內存用於活動進程。的 swap分區能夠同樣的LFS系統使用的主機系統,在這種狀況下沒有必要建立另外一個。

開始一個磁盤分區程序等 cfdisk fdisk用命令行選項命名的硬盤將建立新分區的例子 /dev/sda主要的集成驅動電路(IDE)磁盤。建立一個Linux native分區和一個 swap分區,若是必要的。請參考 cfdisk(8) fdisk(8)若是你還不知道如何使用程序。

請注意

對於有經驗的用戶,其餘分區方案是可能的。新的LFS系統能夠在軟件突襲數組或一個LVM邏輯卷。然而,其中的一些選項須要一個initramfs,這是一個高級主題。這些分區方法不建議第一次LFS用戶。

記住這個新分區的名稱(例如, sda5)。這本書將稱之爲LFS分區。還記得的稱號 swap分區。這些名字,之後將會須要的 /etc/fstab文件。

2.4.1。其餘分區問題

請求的建議系統分區一般貼在LFS郵件列表。這是一個很是主觀的話題。大多數發行版默認是使用整個驅動器除了一個小交換分區。這不是最佳的LFS幾個緣由。它下降了靈活性,使得跨多個分佈共享數據或LFS構建更加困難,使備份更耗費時間,能夠經過低效浪費磁盤空間的分配文件系統結構。

2.4.1.1。根分區

一個根LFS分區(不要混淆 /root目錄)10 g是一個很好的辦法對於大多數系統。它提供了足夠的空間來構建LFS和BLFS大部分,並但足夠小,這樣能夠很容易地建立多個分區的實驗。

2.4.1.2。���換分區

大多數發行版自動建立交換分區。一般推薦的交換分區的大小大約是物理RAM的兩倍,可是這是不多須要。若是磁盤空間是有限的,是2 g的交換分區和監視磁盤交換的數量。

交換歷來都不是好的。一般你能夠告訴若是一個系統是由聽磁盤交換活動和觀察系統反應的命令。交換的第一反應應該是檢查等不合理的命令試圖編輯一個5 g的文件。若是交換成爲一個正常的現象,最好的解決方案是購買更多的RAM爲您的系統。

2.4.1.3。Grub Bios分區

若是 引導磁盤已經經過GUID來分區的分區表(GPT),而後一個小,一般1 MB,必須建立分區,若是它不存在。這個分區不格式化,但必須用於GRUB安裝期間使用的引導加載程序。該分區將一般被貼上「BIOS引導」若是使用 fdisk或有一個代碼 EF02若是使用 gdisk.

請注意

Grub Bios分區必須開車,Bios使用引導系統。這是不必定相同的驅動LFS根分區的位置。系統上的磁盤可能使用不一樣的分區表類型。這個分區的要求只取決於類型的引導磁盤的分區表。

2.4.1.4。方便分區

有幾個其餘分區不是必需的,但應該考慮當設計一個磁盤佈局。下面的列表並不全面,可是是做爲一個指南。

  • / boot -強烈推薦。使用這個分區存儲內核和其餘引導信息。最小化潛在的更大的磁盤引導問題,讓這個第一個物理分區關於第一個磁盤驅動器。一個分區大小爲100 mb至關充足。

  • / home,強烈推薦。分享你的主目錄和用戶定製或LFS構建跨多個分佈。大小一般是至關大的,取決於可用的磁盤空間。

  • / usr -若是使用一個單獨的/ usr分區一般是提供一個瘦客戶機或服務器無盤工做站。它一般是不須要LFS。5字節的大小將處理大多數安裝。

  • / opt BLFS——這個目錄是最有用,並安裝多個大的包像Gnome或KDE能夠安裝沒有嵌入的文件/ usr的層次結構。若是使用,5到10 g一般是足夠的。

  • / tmp -一個單獨的/ tmp目錄是罕見的,但若是配置一個瘦客戶機有用。這個分區,若是使用,一般不須要超過兩個字節。

  • /usr/src——這個分區是很是有用的BLFS提供一個位置來存儲源文件,並分享他們在LFS構建。它也能夠用做BLFS構建包並位置。30 - 50 gb的至關大的分區容許足夠的空間。

任何你想要的單獨的分區,自動安裝在須要指定的引導 /etc/fstab。如何指定分區的詳細信息將在討論8.2節,「建立掛載文件」.

2.5。建立一個文件系統的分區

如今創建了一個空白分區,能夠建立文件系統。LFS能夠使用任何文件系統認可的Linux內核中,但最多見的類型是ext3和ext4。文件系統的選擇能夠複雜,取決於文件的特色和分區的大小。例如:

ext2

適用於小的分區/ boot等極少更新。

ext3

是ext2的升級,包括日記幫助恢復分區的狀態的狀況下關閉不潔淨。這是經常使用的做爲一個通用文件系統。

ext4

是最新版本的ext文件系統分區類型的家庭。它提供了一些新功能,包括毫微秒時間戳,建立和使用很是大的文件(16 TB),和速度的改進。

其餘文件系統,包括FAT32,NTFS,ReiserFS、XFS JFS,是有用的專業用途。能夠找到更多的信息關於這些文件系統http://en.wikipedia.org/wiki/Comparison_of_file_systems.

LFS假設根文件系統(/)的類型是ext4。建立一個 ext4LFS分區上的文件系統,運行如下:

mkfs - v - t ext4 /dev/<xxx>

若是您使用的是現有的 swap分區,不須要格式。若是一個新的 swap分區被建立時,它須要用這個命令初始化:

mkswap /dev/<yyy>

取代 <yyy>的名稱 swap分區。

2.6。設置$ LFS變量

在本書中,環境變量 LFS將使用幾回。您應該確保這個變量老是定義整個LFS構建過程。它應該被設置爲目錄的名稱您將構建LFS系統——咱們將使用 /mnt/lfs做爲一個例子,但選擇是你的目錄。若是您正在構建LFS在一個單獨的分區,將該目錄分區的掛載點。選擇一個目錄位置和設置變量使用下面的命令:

出口LFS =/mnt/lfs

在這個變量設置等,命令是有益的 mkdir - v $ LFS /工具能夠輸入。殼牌將自動替換 「$ LFS」與 「/ mnt / lfs」(或其餘變量設置爲)處理命令行。

謹慎

不要忘記檢查嗎 LFS每當你離開和從新設置當前工做環境(如何時作 蘇 root或另外一個用戶)。檢查 LFS變量是設置正確:

echo $LFS

確保輸出顯示了你的LFS系統的構建之路的位置,這是 /mnt/lfs若是提供的例子是緊隨其後。若是輸出是不正確的,能夠使用前面給出的命令在這個頁面設置$LFS到正確的目錄名稱。

請注意

保證的一種方式 LFS變量老是設置編輯 .bash_profile在你我的的主目錄和文件 /root/.bash_profile和輸入輸出命令。此外,殼中指定 /etc/passwd文件須要的全部用戶 LFSbash變量須要確保 /root/.bash_profile文件註冊登陸過程的一部分。

2.7。愈來愈多的新分區

如今,建立一個文件系統,分區須要訪問。爲了作到這一點,須要安裝在一個分區掛載點。這本書的目的,假設文件系統安裝在指定的目錄下 LFS環境變量如前一節所述。

建立掛載點並掛載LFS文件系統經過運行:

mkdir pv $ LFS 山- v - t ext4 /dev/$ LFS<xxx>

取代 <xxx>指定的LFS分區。

若是使用多個分區的LFS(例如,一個用於 /,另外一個用於 /usr),安裝使用:

mkdir pv $ LFS 山- v - t ext4 /dev/$ LFS mkdir - v $ LFS / usr 山- v - t ext4 /dev/$ LFS / usr<xxx><yyy>

取代 <xxx> <yyy>用適當的分區名稱。

確保這個新分區是沒有安裝權限太限制(如 nosuid nodev選項)。運行 山設置命令沒有任何參數,看看選項安裝LFS的分區。若是 nosuid和/或 nodev設置,分區須要從新安裝。

若是您使用的是 swap分區,確保使用啓用 swapon命令:

/sbin/swapon - v /dev/<zzz>

取代 <zzz>的名稱 swap分區。

如今有一個工做場所,是時候下載包。

第三章。包和補丁

3.1。介紹

本章包含包的列表,須要下載爲了構建一個基本的Linux系統。上市版本號對應的軟件版本已知的工做,和這本書是根據他們的使用。咱們強烈建議不要使用新版本,由於一個版本的構建命令不得使用新版本。最新的包版本須要變通的可能也有問題。這些變通方案將開發和穩定的開發版本的書。

下載位置可能並不老是容易。若是下載位置改變了這本書出版後,谷歌http://www.google.com/對於大多數包)提供了一個有用的搜索引擎。若是這個搜索是不成功的,試着下載討論的一個替代手段http://www.linuxfromscratch.org/lfs/packages.html包.

下載包和補丁須要存儲的地方方便地得到整個構建。工做目錄也是須要解壓源和建造它們。 $LFS/sources既能夠使用存儲包和補丁的地方做爲一個工做目錄。經過使用這個目錄,所需的元素將會位於LFS分區和建築過程的全部階段中可用。

建立這個目錄,執行如下命令,如用戶 root下載會議開始前:

mkdir -v $LFS/sources

使這個目錄可寫的和粘性。 「黏糊糊的」意味着,即便多個用戶在一個目錄有寫權限,只有一個文件的全部者能夠刪除的目錄中的文件。下面的命令將使編寫和粘性的模式:

chmod -v a+wt $LFS/sources

一個簡單的方法來下載全部的包和補丁是經過使用wget-list做爲一個輸入 wget。例如:

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

此外,從lfs - 7.0開始,有一個單獨的文件,md5sum,能夠用來驗證全部正確的包在繼續以前都是可用的。該文件在 $LFS/sources並運行:

pushd $LFS/sources md5sum -c md5sums popd

3.2。全部的包

下載或以其餘方式得到如下方案:

Acl(2.2.52) 380 KB:

下載:http://download.savannah.gnu.org/releases/acl/acl-2.2.52.src.tar.gz

MD5總和: a61415312426e9c2212bd7dc7929abda

Attr(2.4.47) 336 KB:

主頁:http://savannah.nongnu.org/projects/attr

下載:http://download.savannah.gnu.org/releases/attr/attr-2.4.47.src.tar.gz

MD5總和: 84f58dec00b60f2dc8fd1c9709291cc7

Autoconf(2.69) 1186 KB:

主頁:http://www.gnu.org/software/autoconf/

下載:http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz

MD5總和: 50f97f4159805e374639a73e2636f22e

Automake(1.15.1) 1475 KB:

主頁:http://www.gnu.org/software/automake/

下載:http://ftp.gnu.org/gnu/automake/automake-1.15.1.tar.xz

MD5總和: 24cd3501b6ad8cd4d7e2546f07e8b4d4

Bash(4.4) 9158 KB:

主頁:http://www.gnu.org/software/bash/

下載:http://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz

MD5總和: 148888a7c95ac23705559b6f477dfe25

Bc(1.07.1) 411 KB:

主頁:http://www.gnu.org/software/bc/

下載:http://ftp.gnu.org/gnu/bc/bc-1.07.1.tar.gz

MD5總和: cda93857418655ea43590736fc3ca9fc

Binutils(2.29) 28392 KB:

主頁:http://www.gnu.org/software/binutils/

下載:http://ftp.gnu.org/gnu/binutils/binutils-2.29.tar.bz2

MD5總和: 23733a26c8276edbb1168c9bee60e40e

野牛(3.0.4) 1928 KB:

主頁:http://www.gnu.org/software/bison/

下載:http://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.xz

MD5總和: c342201de104cc9ce0a21e0ad10d4021

Bzip2(1.0.6) 764 KB:

主頁:http://www.bzip.org/

下載:http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz

MD5總和: 00b516f4704d4a7cb50a1d97e6e8e15b

檢查(0.11.0)它 736 KB:

主頁:https://libcheck.github.io/check

下載:https://github.com/libcheck/check/releases/download/0.11.0/check-0.11.0.tar.gz

MD5總和: 9b90522b31f5628c2e0f55dda348e558

Coreutils(8.27) 5162 KB:

主頁:http://www.gnu.org/software/coreutils/

下載:http://ftp.gnu.org/gnu/coreutils/coreutils-8.27.tar.xz

MD5總和: 502795792c212932365e077946d353ae

DejaGNU(1.6) 512 KB:

主頁:http://www.gnu.org/software/dejagnu/

下載:http://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.tar.gz

MD5總和: 1fdc2eb0d592c4f89d82d24dfdf02f0b

你要(3.6) 1366 KB:

主頁:http://www.gnu.org/software/diffutils/

下載:http://ftp.gnu.org/gnu/diffutils/diffutils-3.6.tar.xz

MD5總和: 07cf286672ced26fba54cd0313bdc071

Eudev(3.2.2) 1780 KB:

下載:http://dev.gentoo.org/藍色/ eudev / eudev-3.2.2.tar.gz

MD5總和: 41e19b70462692fefd072a3f38818b6e

E2fsprogs(1.43.5) 7425 KB:

主頁:http://e2fsprogs.sourceforge.net/

下載:http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.43.5/e2fsprogs-1.43.5.tar.gz

MD5總和: 40aa1b7d7d6bd9c71db0fbf325a7c199

外籍人士(2.2.3) 426 KB:

主頁:http://expat.sourceforge.net/

下載:http://prdownloads.sourceforge.net/expat/expat-2.2.3.tar.bz2

MD5總和: f053af63ef5f39bd9b78d01fbc203334

指望(5.45)- 614 KB:

主頁:http://expect.sourceforge.net/

下載:http://prdownloads.sourceforge.net/expect/expect5.45.tar.gz

MD5總和: 44e1a4f4c877e9ddc5a542dfa7ecc92b

文件(5.31) 774 KB:

主頁:http://www.darwinsys.com/file/

下載:ftp://ftp.astron.com/pub/file/file-5.31.tar.gz

MD5總和: 319627d20c9658eae85b056115b8c90a

請注意

文件(5.31)可能再也不可用在上市地點。偶爾主下載位置的網站管理員刪除舊版本發佈新版本時。另外一個下載位置可能正確的版本也能夠發現:http://www.linuxfromscratch.org/lfs/download.html ftp.

Findutils(4.6.0) 3692 KB:

主頁:http://www.gnu.org/software/findutils/

下載:http://ftp.gnu.org/gnu/findutils/findutils-4.6.0.tar.gz

MD5總和: 9936aa8009438ce185bea2694a997fc1

Flex(2.6.4) 1386 KB:

主頁:http://flex.sourceforge.net

下載:https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz

MD5總和: 2882e3179748cc9f9c23ec593d6adc8d

呆呆(4.1.4) 2313 KB:

主頁:http://www.gnu.org/software/gawk/

下載:http://ftp.gnu.org/gnu/gawk/gawk-4.1.4.tar.xz

MD5總和: 4e7dbc81163e60fd4f0b52496e7542c9

GCC(7.2.0) 60853 KB:

主頁:http://gcc.gnu.org/

下載:http://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.xz

MD5總和: ff370482573133a7fcdd96cd2f552292

同時(1.13) 872 KB:

主頁:http://www.gnu.org/software/gdbm/

下載:http://ftp.gnu.org/gnu/gdbm/gdbm-1.13.tar.gz

MD5總和: 8929dcda2a8de3fd2367bdbf66769376

Gettext(0.19.8.1) 7041 KB:

主頁:http://www.gnu.org/software/gettext/

下載:http://ftp.gnu.org/gnu/gettext/gettext-0.19.8.1.tar.xz

MD5總和: df3f5690eaa30fd228537b00cb7b7590

Glibc(2.26) 14339 KB:

主頁:http://www.gnu.org/software/libc/

下載:http://ftp.gnu.org/gnu/glibc/glibc-2.26.tar.xz

MD5總和: 102f637c3812f81111f48f2427611be1

請注意

這個版本的glibc地址的安全問題尚未最新的穩定版本。

6.1.2 GMP(中) 1901 KB:

主頁:http://www.gnu.org/software/gmp/

下載:http://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz

MD5總和: f58fa8001d60c4c77595fbbb62b63c1d

Gperf(3.1) 1188 KB:

主頁:http://www.gnu.org/software/gperf/

下載:http://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz

MD5總和: 9e251c0a618ad0824b51117d5d9db87e

Grep(3.1) 1339 KB:

主頁:http://www.gnu.org/software/grep/

下載:http://ftp.gnu.org/gnu/grep/grep-3.1.tar.xz

MD5總和: feca7b3e7c7f4aab2b42ecbfc513b070

Groff(1.22.3) 4091 KB:

主頁:http://www.gnu.org/software/groff/

下載:http://ftp.gnu.org/gnu/groff/groff-1.22.3.tar.gz

MD5總和: cc825fa64bc7306a885f2fb2268d3ec5

GRUB(2.02) 5970 KB:

主頁:http://www.gnu.org/software/grub/

下載:http://ftp.gnu.org/gnu/grub/grub-2.02.tar.xz

MD5總和: 8a4a2a95aac551fb0fba860ceabfa1d3

Gzip(1.8) 712 KB:

主頁:http://www.gnu.org/software/gzip/

下載:http://ftp.gnu.org/gnu/gzip/gzip-1.8.tar.xz

MD5總和: f7caabb65cddc1a4165b398009bd05b9

Iana-Etc(2.30) 201 KB:

主頁:http://freecode.com/projects/iana-etc

下載:http://anduin.linuxfromscratch.org/LFS/iana-etc-2.30.tar.bz2

MD5總和: 3ba3afb1d1b261383d247f46cb135ee8

Inetutils(1.9.4) 1333 KB:

主頁:http://www.gnu.org/software/inetutils/

下載:http://ftp.gnu.org/gnu/inetutils/inetutils-1.9.4.tar.xz

MD5總和: 87fef1fa3f603aef11c41dcc097af75e

Intltool(0.51.0) 159 KB:

主頁:http://freedesktop.org/wiki/Software/intltool

下載:http://launchpad.net/intltool/trunk/0.51.0/ +下載/ intltool-0.51.0.tar.gz

MD5總和: 12e517cac2b57a0121cda351570f1e63

IPRoute2(4.12.0) 647 KB:

主頁:https://www.kernel.org/pub/linux/utils/net/iproute2/

下載:https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.12.0.tar.xz

MD5總和: e6fecdf46a1542a26044e756fbbabe3b

Kbd(2.0.4) 1008 KB:

主頁:http://ftp.altlinux.org/pub/people/legion/kbd

下載:https://www.kernel.org/pub/linux/utils/kbd/kbd-2.0.4.tar.xz

MD5總和: c1635a5a83b63aca7f97a3eab39ebaa6

Kmod(24) 525 KB:

下載:https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod - 24. tar.xz

MD5總和: 08297dfb6f2b3f625f928ca3278528af

(487)——更少 312 KB:

主頁:http://www.greenwoodsoftware.com/less/

下載:http://www.greenwoodsoftware.com/less/less - 487. tar.gz

MD5總和: dcc8bf183a83b362d37fe9ef8df1fb60

LFS-Bootscripts(20170626)- 32 KB:

下載:http://www.linuxfromscratch.org/lfs/downloads/8.1/lfs bootscripts tar.bz2——20170626.

MD5總和: d4992527d67f28e2d0c12e3495422eab

Libcap(2.25) 64 KB:

主頁:https://sites.google.com/site/fullycapable/

下載:https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.25.tar.xz

MD5總和: 6666b839e5d46c2ad33fc8aa2ceb5f77

Libpipeline(1.4.2) 808 KB:

主頁:http://libpipeline.nongnu.org/

下載:http://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.4.2.tar.gz

MD5總和: d5c80387eb9c9e5d089da2a06e8a6b12

Libtool(2.4.6) 951 KB:

主頁:http://www.gnu.org/software/libtool/

下載:http://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz

MD5總和: 1bfb9b923f2c1339b4d2ce1807064aa5

Linux(4.12.7) 96865 KB:

主頁:http://www.kernel.org/

下載:https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.12.7.tar.xz

MD5總和: 245d1b4dc6e82669aac2c9e6a2dd82fe

請注意

Linux內核更新比較頻繁,不少時候因爲發現的安全漏洞。最新4.12。應該使用x內核版本,除非勘誤表頁面說。

速度或昂貴的帶寬有限的用戶誰但願更新Linux內核中,基線版本的包和補丁能夠單獨下載。這可能節省一些時間或成本後續補丁級別升級在一個小版本。

M4(1.4.18) 1180 KB:

主頁:http://www.gnu.org/software/m4/

下載:http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz

MD5總和: 730bb15d96fffe47e148d1e09235af82

使(4.2.1)準備 1375 KB:

主頁:http://www.gnu.org/software/make/

下載:http://ftp.gnu.org/gnu/make/make-4.2.1.tar.bz2

MD5總和: 15b012617e7c44c0ed482721629577ac

Man-DB(2.7.6.1) 1506 KB:

主頁:http://www.nongnu.org/man-db/

下載:http://download.savannah.gnu.org/releases/man-db/man-db-2.7.6.1.tar.xz

MD5總和: 2948d49d0ed7265f60f83aa4a9ac9268

手冊頁(4.12) 1552 KB:

主頁:http://www.kernel.org/doc/man-pages/

下載:https://www.kernel.org/pub/linux/docs/man-pages/man-pages-4.12.tar.xz

MD5總和: a87cdf43ddc1844e7edc8950a28a51f0

MPC(1.0.3) 655 KB:

主頁:http://www.multiprecision.org/

下載:http://www.multiprecision.org/mpc/download/mpc-1.0.3.tar.gz

MD5總和: d6a1d5f8ddea3abd2cc3e98f58352d26

MPFR(3.1.5) 1101 KB:

主頁:http://www.mpfr.org/

下載:http://www.mpfr.org/mpfr-3.1.5/mpfr-3.1.5.tar.xz

MD5總和: c4ac246cf9795a4491e7766002cd528f

Ncurses(6.0) 3059 KB:

主頁:http://www.gnu.org/software/ncurses/

下載:http://ftp.gnu.org/gnu//ncurses/ncurses-6.0.tar.gz

MD5總和: ee13d052e1ead260d7c28071f46eefb1

補丁(2.7.5) 711 KB:

主頁:http://savannah.gnu.org/projects/patch/

下載:http://ftp.gnu.org/gnu/patch/patch-2.7.5.tar.xz

MD5總和: e3da7940431633fb65a01b91d3b7a27a

Perl(5.26.0) 11682 KB:

主頁:http://www.perl.org/

下載:http://www.cpan.org/src/5.0/perl-5.26.0.tar.xz

MD5總和: 8c6995718e4cb62188f0d5e3488cd91f

Pkg-config(0.29.2) 1970 KB:

主頁:http://www.freedesktop.org/wiki/Software/pkg-config

下載:https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz

MD5總和: f6e931e319531b736fadc017f470e68a

Procps(3.3.12) 826 KB:

主頁:http://sourceforge.net/projects/procps-ng

下載:http://sourceforge.net/projects/procps-ng/files/Production/procps-ng-3.3.12.tar.xz

MD5總和: 957e42e8b193490b2111252e4a2b443c

Psmisc(23.1) 290 KB:

主頁:http://psmisc.sourceforge.net/

下載:https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-23.1.tar.xz

MD5總和: bbba1f701c02fb50d59540d1ff90d8d1

Readline(7.0) 2842 KB:

主頁:http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

下載:http://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz

MD5總和: 205b03a87fc83dab653b628c59b9fc91

Sed(4.4) 1154 KB:

主頁:http://www.gnu.org/software/sed/

下載:http://ftp.gnu.org/gnu/sed/sed-4.4.tar.xz

MD5總和: e0c583d4c380059abd818cd540fe6938

(4.5)的影子 1589 KB:

下載:https://github.com/shadow-maint/shadow/releases/download/4.5/shadow-4.5.tar.xz

MD5總和: c350da50c2120de6bb29177699d89fe3

Sysklogd(1.5.1) 88 KB:

主頁:http://www.infodrom.org/projects/sysklogd/

下載:http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.1.tar.gz

MD5總和: c70599ab0d037fde724f7210c2c8d7f8

Sysvinit(2.88 dsf)- 108 KB:

主頁:http://savannah.nongnu.org/projects/sysvinit

下載:http://download.savannah.gnu.org/releases/sysvinit/sysvinit - 2.88 dsf.tar.bz2

MD5總和: 6eda8a97b86e0a6f59dabbf25202aa6f

焦油(1.29) 1950 KB:

主頁:http://www.gnu.org/software/tar/

下載:http://ftp.gnu.org/gnu/tar/tar-1.29.tar.xz

MD5總和: a1802fec550baaeecff6c381629653ef

Tcl(8.6.7) 5738 KB:

主頁:http://tcl.sourceforge.net/

下載:http://sourceforge.net/projects/tcl/files/Tcl/8.6.7/tcl-core8.6.7-src.tar.gz

MD5總和: 3f723d62c2e074bdbb2ddf330b5a71e1

Texinfo(6.4) 4393 KB:

主頁:http://www.gnu.org/software/texinfo/

下載:http://ftp.gnu.org/gnu/texinfo/texinfo-6.4.tar.xz

MD5總和: 2a676c8339efe6ddea0f1cb52e626d15

時區數據(2017 b) 317 KB:

主頁:http://www.iana.org/time-zones

下載:http://www.iana.org/time-zones/repository/releases/tzdata2017b.tar.gz

MD5總和: 50dc0dc50c68644c1f70804f2e7a1625

Udev-lfs Tarball(udev lfs - 20140408) 11 KB:

下載:http://anduin.linuxfromscratch.org/lfs/udev tar.bz2——lfs - 20140408.

MD5總和: c2d6b127f89261513b23b6d458484099

Util-linux(2.30.1) 4360 KB:

主頁:http://freecode.com/projects/util-linux

下載:https://www.kernel.org/pub/linux/utils/util-linux/v2.30/util-linux-2.30.1.tar.xz

MD5總和: 5e5ec141e775efe36f640e62f3f8cd0d

Vim(8.0.586) 10613 KB:

主頁:http://www.vim.org

下載:ftp://ftp.vim.org/pub/vim/unix/vim-8.0.586.tar.bz2

MD5總和: b35e794140c196ff59b492b56c1e73db

XML::解析器(2.44) 232 KB:

主頁:https://github.com/chorny/XML-Parser

下載:http://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz

MD5總和: af4813fe3952362451201ced6fbce379

Xz跑龍套(5.2.3) 1009 KB:

主頁:http://tukaani.org/xz

下載:http://tukaani.org/xz/xz-5.2.3.tar.xz

MD5總和: 60fb79cab777e3f71ca43d298adacbd5

Zlib(1.2.11) 457 KB:

主頁:http://www.zlib.net/

下載:http://zlib.net/zlib-1.2.11.tar.xz

MD5總和: 85adef240c5f370b308da8c938951a68

這些包的總大小:大約324 MB

3.3。須要的補丁

除了包,也須要幾個補丁。這些補丁糾正任何錯誤的包應該固定的維護者。補丁也作一些小的修改,讓包裝更容易處理。如下補丁須要構建一個LFS系統:

Bash上游修復補丁 17個KB:

下載:http://www.linuxfromscratch.org/patches/lfs/8.1/bash - 4.4 - upstream_fixes 1.補丁

MD5總和: e3d5bf23a4e5628680893d46e6ff286e

Bzip2文件補丁, 1.6 KB:

下載:http://www.linuxfromscratch.org/patches/lfs/8.1/bzip2 - 1.0.6 install_docs - 1.補丁

MD5總和: 6a5ac7e89b791aae556de0f745916f7f

Coreutils國際化修復補丁 168 KB:

下載:http://www.linuxfromscratch.org/patches/lfs/8.1/coreutils - 8.27 i18n - 8.27補丁

MD5總和: a9404fb575dfd5514f3c8f4120f9ca7d

Glibc FHS補丁, 2.8 KB:

下載:http://www.linuxfromscratch.org/patches/lfs/8.1/glibc - 2.26 - fhs - 2.26補丁

MD5總和: 9a5997c3452909b1769918c759eff8a2

Kbd退格/刪除修復補丁 12 KB:

下載:http://www.linuxfromscratch.org/patches/lfs/8.1/kbd - 2.0.4退格- 1.補丁

MD5總和: f75cca16a38da6caa7d52151f7136895

Sysvinit合併補丁, 3.9 KB:

下載:http://www.linuxfromscratch.org/patches/lfs/8.1/sysvinit - 2.88 - dsf -鞏固- 1.補丁

MD5總和: 0b7b5ea568a878fdcc4057b2bf36e5cb

這些補丁的總大小:205.3 KB

除了上述須要的補丁,存在許多可選的LFS社區建立的補丁。這些可選補丁解決小問題或使功能在默認狀況下不啓用。隨意瀏覽數據庫位於補丁http://www.linuxfromscratch.org/patches/downloads/並得到任何額外的補丁,以知足系統的須要。

第四章。最後的準備

4.1。介紹

在這一章,咱們將執行一些額外的任務準備建設臨時系統。咱們將建立一個目錄 $LFS臨時的安裝工具,添加非特權用戶,以減小風險,併爲用戶建立一個適當的構建環境。咱們還將解釋的單位時間咱們用來衡量LFS包須要多長時間,或 「在布」,並給出一些信息包測試套件。

4.2。建立目錄$ LFS /工具

全部程序編譯第五章將安裝在 $LFS/tools讓他們獨立於程序編譯第六章。這裏是臨時工具和編譯的程序不會是最後的LFS系統的一部分。經過這些項目在一個單獨的目錄中,他們很容易被丟棄後使用。這也能夠防止這些程序結束主機生產目錄(簡單的事故第五章).

建立所需的目錄運行如下 root:

mkdir -v $LFS/tools

下一步是建立一個 /tools符號連接在主機系統。這將指向LFS分區上建立的目錄。運行這個命令 root:

ln -sv $LFS/tools /

請注意

上面的命令是正確的。的 ln命令有幾個語法變化,因此必定要檢查 信息coreutils ln ln(1)報告以前你可能認爲是一個錯誤。

建立的符號連接使工具鏈編譯,以便它老是指 /tools,這意味着編譯器、彙編和連接器將在第五章(當咱們仍使用一些工具從主機)和將來(當咱們 「也能夠」LFS分區)。

4.3。添加LFS用戶

當登陸用戶 root,犯了一個錯誤會損壞或破壞系統。所以,咱們建議以非特權用戶的身份構建包在本章。你能夠使用本身的用戶名,可是,讓它更容易創建一個清潔的工做環境,建立一個新的用戶 lfs做爲一個新組(也叫 lfs),用戶在安裝過程當中使用這個。做爲 root發出如下命令來添加新用戶:

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

命令行選項的含義:

-s /bin/bash

這使得 bash用戶的默認shell lfs.

-g lfs

這個選項添加用戶 lfs lfs.

-m

這將建立一個主目錄 lfs.

-k /dev/null

這個參數能夠防止可能的複製文件從一個骨架目錄(默認 /etc/skel)經過改變輸入位置特殊零裝置。

lfs

這是實際的名稱建立的組和用戶。

登陸, lfs(相對於切換到用戶 lfs當登陸 root,不須要 lfs用戶密碼),給予 lfs密碼:

passwd lfs

格蘭特 lfs徹底訪問 $LFS/tools經過使 lfs目錄的全部者:

chown -v lfs $LFS/tools

若是建立一個單獨的工做目錄做爲建議,給用戶 lfs這個目錄的全部權:

chown -v lfs $LFS/sources

接下來,登陸用戶 lfs。這能夠經過一個虛擬控制檯,經過顯示管理器,或者替代用戶命令以下:

su - lfs

的 「-」指示 蘇開始登陸shell,而不是non-login殼。之間的區別這兩種殼能夠在細節中找到 bash(1) 信息bash.

4.4。設置環境

創建一個良好的工做環境,建立兩個新的啓動文件 bash殼。當登陸用戶 lfs發出如下命令來建立一個新的 .bash_profile:

cat > ~/.bash_profile << "EOF"  EOFexec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash

當登陸用戶 lfs一般,最初的外殼 登陸殼牌的讀取 /etc/profile的主機(可能包含一些設置和環境變量) .bash_profile。的 exec env -我…/ bin / bash命令的 .bash_profile文件取代了徹底空的殼與一個新的運行環境,除了 HOME, TERM, PS1變量。這將確保不會沒必要要的和潛在危險環境變量從主機系統泄漏到構建環境。這裏使用的技術實現的目標確保一個清潔的環境。

外殼是一個新實例 non-login殼,不讀了 /etc/profile .bash_profile文件,而是讀取 .bashrc文件代替。建立 .bashrc文件:

cat > ~/.bashrc << "EOF"  EOFset +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

 組+ h命令關閉 bash哈希函數。哈希——一般是一個有用的特性bash使用一個哈希表來記住可執行文件的完整路徑,避免搜索 PATH一次又一次地去尋找相同的可執行文件。然而,就應該使用新工具安裝。經過關掉哈希函數,shell將老是搜索 PATH當一個程序運行。所以,殼牌將發現新編譯的工具 $LFS/tools可就不記得以前版本的同一程序在不一樣的位置。

設置用戶文件建立掩模(umask)到022年確保新建立的文件和目錄由主人只可寫的,可是任何人均可讀和可執行的(假設所使用的默認模式 open(2)系統調用,新文件將最終許可模式644和目錄模式755)。

 LFS變量應該設置爲所選的掛載點。

 LC_ALL變量控制某些項目的本地化,使他們的信息按照指定國家的慣例。設置 LC_ALL來 「POSIX」或 「C」(這兩個是等價的)確保一切都如預期的那樣在chroot環境中工做。

 LFS_TGT變量設置一個非默認,但兼容的機器描述使用在構建交叉編譯器和連接器,當交叉編譯臨時工具鏈。中包含更多的信息5.2節,「工具鏈技術筆記」.

經過將 /tools/bin以前的標準 PATH安裝在,全部的項目第五章��殼後當即拿起他們的安裝。結合關掉哈希,這限制了風險,舊程序時從主機使用相同的程序可在第五章環境。

最後,對建築環境的充分準備臨時工具、對象來源的用戶配置文件:

source ~/.bash_profile

4.5。對全局的

不少人想知道事先大約須要多長時間來編譯和安裝每一個包。由於Linux從頭能夠創建在許多不一樣的系統,提供準確的時間估計是不可能的。最大的包(Glibc)須要大約20分鐘最快的系統,可是在慢系統最多可能須要三天!而不是提供實際的時候,將使用標準建設單位(單位)測量。

全局的測量工做以下。第一個包從本書Binutils被編譯第五章。的時間來編譯這個包將被稱爲標準的建設單位或業務單位。全部其餘的編譯時間將表示相對於這一次。

例如,考慮一個包的編譯時間是4.5單位。這意味着,若是一個系統花了10分鐘Binutils編譯和安裝第一個經過,它將 約45分鐘來構建這個示例包中。幸運的是,大多數爲Binutils構建時間短於一個。

通常來講,單位並不徹底準確,由於他們依賴於許多因素,包括主機系統版本的GCC。他們是這裏提供給估計多長時間可能須要安裝一個包,但這些數字能夠隨多達數十分鐘在某些狀況下。

請注意

對於許多現代系統與多個處理器(或核)的編譯時間計劃能夠減小執行「平行」設置一個環境變量或者告訴 使計劃有多少處理器可用。例如,一個Core2Duo能夠支持兩個同時發生的過程:

export MAKEFLAGS='-j 2'

或者只是建築:

make -j2

使用多個處理器時,書中的單位單位會有所不一樣甚至比他們一般所作的那樣。在某些狀況下,讓一步就會失敗。分析構建過程的輸出也將更加困難,由於不一樣的過程線���叉。若是你遇到一個問題,構建步驟,回覆到一個處理器構建正確分析錯誤消息。

4.6。關於測試套件

大多數軟件包提供一個測試套件。運行測試套件的一個新建的包是一個好主意,由於它能夠提供一個 「完整性檢查」代表一切正確編譯。一般一套測試套件,通過檢查證實了包功能開發人員的目的。然而,它並不保證免費包是徹底錯誤的。

一些測試套件是比別人更重要。例如,測試套件的核心工具鏈packages-GCC Binutils,Glibc-are相當重要的因爲其核心做用在正常運轉的系統。GCC和Glibc的測試套件能夠須要很長時間才能完成,特別是在較慢的硬件,但強烈推薦。

請注意

經驗代表,幾乎沒有能獲得運行測試套件第五章。不能逃避的事實,主機系統老是施加一些影響測試這一章���內容,經常致使莫名其妙的失敗。由於內置的工具第五章是暫時的,最終丟棄,咱們不推薦運行測試套件第五章對普通讀者。的指令運行這些測試套件提供了測試人員和開發人員的好處,但他們是徹底可選的。

一個常見的問題與運行測試套件Binutils和GCC的僞終端(企業)。這能夠致使大量的測試失敗。這可能有幾個緣由,但最可能的緣由是,主機系統沒有的 devpts文件系統的正確設置。在更詳細地討論這個問題http://www.linuxfromscratch.org/lfs/faq.html no-ptys.

有時包測試套件會失敗,但開發人員都知道的緣由,認爲非關鍵。查閱日誌位於http://www.linuxfromscratch.org/lfs/build-logs/8.1/來驗證是否預計這些失敗。本網站全部測試在本書中是有效的。

第五章。構建一個臨時系統

5.1。介紹

這一章展現瞭如何創建一個最小的Linux系統。這個系統將包含足夠的工具開始構建最終的LFS系統第六章容許的工做環境和更多的用戶方便比最低的環境。

有兩個步驟構建這個最小的系統。第一步是構建一個新的host-independent工具鏈(編譯器、彙編器、鏈接器、圖書館和一些有用的實用程序)。第二步使用這個工具鏈構建其餘必不可少的工具。

文件編譯在本章將被安裝 $LFS/tools目錄來讓他們分開的文件安裝在下一章和主機生產目錄。自包編譯下面是暫時的,咱們不但願他們污染即將LFS系統。

5.2。工具鏈技術註釋

本節解釋背後的一些原理和技術細節的總體構建方法。它不是必須當即明白這一節中的內容。大部分這些信息後將會更清晰的執行實際的構建。這部分能夠稱爲過程當中在任什麼時候間。

的���體目標第五章是產生一個臨時區域包含一套好的工具,能夠獨立於主機系統。經過使用 chroot,剩下的章節中的命令將包含在這種環境下,保證一個乾淨、無端障目標LFS系統的構建。構建過程被設計爲新讀者和最小化風險提供最有教育價值在同一時間。

請注意

在繼續以前,請注意工做平臺的名稱,一般稱爲目標三聯體。一個簡單的方法來肯定目標三聯體是運行的名稱 config.guess腳本附帶的源代碼不少包。解壓Binutils來源和運行腳本: ./config.guess並注意輸出。例如,對於一個32位的英特爾處理器的輸出 i686-pc-linux-gnu。在64位系統上 x86_64-pc-linux-gnu.

也意識到平臺的動態連接器的名稱,一般被稱爲動態加載程序(不與標準連接器混淆 ldBinutils的一部分)。Glibc提供的動態連接器查找並加載一個程序所需的共享庫,準備程序運行,而後運行它。動態連接器的名稱爲一個32位的機器將英特爾 ld-linux.so.2 (ld-linux-x86-64.so.264位系統)。也是肯定動態連接器的名稱是檢查一個隨機二進制從主機系統經過運行: readelf -l <name of binary> | grep interpreter並注意輸出。覆蓋全部平臺在權威的參考 shlib-versions文件在Glibc源代碼樹的根。

一些關鍵技術點的第五章構建方法:

  • 略調整工做平臺的名稱,經過改變「供應商」字段三聯體的目標 LFS_TGT變量,確保第一個構建Binutils和GCC產生交叉耦合和交叉編譯器兼容。而不是產生二進制文件架構,交叉耦合和交叉編譯器將生成二進制文件與當前硬件兼容。

  • 臨時庫是交叉編譯。因爲其性質交叉編譯器不能依賴任何東西,從它的主機系統,該方法消除了潛在的污染減小目標系統的頭文件或庫的機會從主機被歸入新工具。交叉編譯的可能性還容許構建32位和64位庫在64位硬件能力。

  • 當心操縱源告訴編譯器GCC的目標將使用動態連接器。

Binutils首先由於安裝 配置運行GCC和Glibc彙編和連接器上執行各類功能測試,以肯定哪些軟件功能啓用或禁用。這是更重要的比人們第一次意識到的。錯誤配置GCC或Glibc會致使巧妙地破碎的工具鏈,這些破損的影響可能不會出現,直到接近尾聲的構建整個分佈。一個測試套件失敗一般會強調這個錯誤以前太多執行額外的工做。

Binutils安裝它的彙編和連接器在兩個位置, /tools/bin /tools/$LFS_TGT/bin。在一個地方的工具很難與其餘有關。連接器的一個重要方面是它的圖書館搜索順序。能夠得到詳細的信息 ld經過它 --verbose國旗。例如,一個 ld --verbose | grep SEARCH將說明當前搜索路徑及其順序。它顯示了哪些文件是聯繫在一塊兒的 ld編譯一個虛擬程序和傳遞 --verbose切換到連接器。例如, gcc dummy.c -Wl,--verbose 2>&1 | grep succeeded將顯示全部的文件在鏈接成功打開。

下一個包安裝GCC。一個例子能夠看到在其運行的 配置是:

checking what assembler to use... /tools/i686-lfs-linux-gnu/bin/as checking what linker to use... /tools/i686-lfs-linux-gnu/bin/ld

這是上面提到的重要的緣由。它還代表,GCC的配置腳本不會搜索目錄的路徑找到工具來使用。然而,在實際的操做 海灣合做委員會自己,不必定是使用相同的搜索路徑。找出哪些標準連接器 海灣合做委員會將使用,運行: gcc -print-prog-name=ld.

能夠得到詳細的信息 海灣合做委員會經過它 -v命令行選項,編譯一個虛擬的程序。例如, gcc -v dummy.c將顯示詳細信息預處理、編譯和組裝階段,包括 海灣合做委員會包括搜索路徑和他們的訂單。

下安裝消毒Linux API頭。這些容許標準C庫(Glibc)與Linux內核提供的功能。

下一個安裝包是Glibc。最重要的考慮建築Glibc編譯器,二進制工具和內核頭文件。編譯器一般不是問題由於Glibc老是使用編譯器有關 --host參數傳遞給它的配置腳本;例如,在咱們的案例中,編譯器將 i686-lfs-linux-gnu-gcc。二進制工具和內核頭文件能夠是一個更復雜。所以,沒有風險和使用可用的配置開關執行正確的選擇。運行後 配置,檢查的內容config.make文件 glibc-build目錄的全部重要的細節。注意使用 CC="i686-lfs-gnu-gcc"控制使用二進制工具的使用 -nostdinc -isystem國旗來控制編譯器的包括搜索路徑。這些項目突出Glibc包裝的一個重要方面是很是自給自足的建設機械和通常不依賴於工具鏈的缺省值。

Binutils第二步期間,咱們可以利用的 --with-lib-path配置開關控制 ld庫搜索路徑。

第二步的GCC,其來源也須要修改告訴GCC使用新的動態連接器。不這麼作將致使GCC項目自己擁有的名稱從主機系統的動態連接器 /lib目錄嵌入到他們,這將擊敗的目標遠離主機。從這一點開始,核心工具鏈是獨立和自主。的其他部分第五章包全部構建新Glibc /tools.

在進入chroot環境第六章第一個主要包安裝Glibc,因爲其自給自足天然上面提到的。一旦這是安裝到Glibc /usr,咱們將執行一個快速轉換工具鏈的缺省值,而後進行構建目標LFS系統的其他部分。

5.3。通常編譯指令

在構建包有幾個假設在產品說明:

  • 幾個包在編譯以前修補,但只有當補丁須要規避的問題。一片一般是須要在這個和下一章,但有時只在一個或另外一個。所以,不要擔憂若是指令下載補丁彷佛失蹤。警告信息 抵消 模糊應用補丁時也會遇到。不要擔憂這些警告,隨着補丁還成功應用。

  • 大多數軟件包編譯期間,將會有一些警告,經過在屏幕上滾動。這些都是正常的,能夠安全地忽略。這些警告他們appear-warnings棄用,但不是無效,使用C或c++語法。C標準常常變化,一些包仍然使用舊的標準。這不是一個問題,可是提示警告。

  • 最後一次檢查 LFS環境變量設置正確:

    echo $LFS

    確保輸出顯示��LFS的路徑分區的掛載點,這是 /mnt/lfs,使用咱們的例子。

  • 最後兩個重要項目必須強調:

    重要的

    構建指令假設主機系統需求,包括符號連接,設置正確:

    • bash在使用shell。

    • 上海是一個符號連接呢 bash.

    • /usr/bin/awk是一個符號連接呢 靦腆的人.

    • /usr/bin/yacc是一個符號連接呢 野牛或一個小腳本執行野牛。

    重要的

    強調構建過程:

    1. 把全部的資源可訪問的目錄和補丁chroot環境等 /mnt/lfs/sources/。作 不把資料放在 /mnt/lfs/tools/.

    2. 改變源目錄。

    3. 爲每個包:

      1. 使用 焦油程序,提取方案。在第五章,確保你是 lfs用戶提取方案。

      2. 改變包提取時建立的目錄。

      3. 按照這本書的指導來構建包。

      4. 改變回源目錄。

      5. 刪除提取的源目錄除非另有指示。

5.4。binutils - 2.29 - 1

Binutils包包含一個連接,一個彙編程序,和其餘工具來處理對象文件。

近似創建時間: 1單位
所需的磁盤空間: 547 MB

5.4.1以前。安裝交叉Binutils

請注意

回去重讀筆記在前一節中。理解標記爲重要的筆記將節省你不少問題。

Binutils是第一個包很重要由於Glibc和GCC編譯執行各類測試可用的連接器和彙編程序,以肯定哪些讓本身的特性。

Binutils文檔建議建築Binutils專用的構建目錄:

mkdir -v build cd       build

請注意

爲了其他的書中列出的單位值的任何使用,測量的時間建造這個包的配置,包括第一次安裝。爲實現這一目標,包裝的命令 時間命令以下: time { ./configure ... && ... && make install; }.

請注意

所需的近似創建業務單位價值和磁盤空間在第5章不包括測試套件的數據。

如今準備Binutils編譯:

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

配置選項的含義:

--prefix=/tools

這告訴配置腳本安裝Binutils項目作準備 /tools目錄中。

--with-sysroot=$LFS

對於交叉編譯,這告訴構建系統在$ LFS尋找目標系統所需的庫。

--with-lib-path=/tools/lib

這指定庫路徑連接器應該配置爲使用。

--target=$LFS_TGT

由於機器的描述 LFS_TGT變量比返回的值略有不一樣 config.guess腳本,這個開關會告訴的 配置腳本調整Binutil構建系統的交聯劑。

--disable-nls

這個禁用國際化i18n是暫時不須要工具。

--disable-werror

這能夠防止構建阻止事件有警告主人的編譯器。

繼續編譯包:

make

如今編譯完成。一般咱們將運行測試套件,但在這個早期階段測試套件框架(Tcl、指望和DejaGNU)尚未到位。此時運行測試的好處是最小自項目從這個第一遍很快就會被那些從第二所取代。

若是在x86_64的基礎上,建立一個符號連接,確保工具鏈的完整性:

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

安裝包:

make install

這個包位於的細節部分6.16.2,「Binutils內容。」

最後一次更新在

5.5。GCC-7.2.0 -經過1

GCC包包含GNU編譯器集合,包括C和c++編譯器。

近似創建時間: 8.9業務單位
所需的磁盤空間: 2.2 GB

5.5.1。安裝交叉GCC

GCC如今須要GMP,MPFR和MPC包。做爲這些包可能不包括在您的主機分配,他們將用GCC。每一個包解壓縮到GCC源目錄和命名的目錄的GCC構建過程將自動使用:

請注意

本章有頻繁的誤解。程序是同樣的其餘如前所述章(包構建指令)。首先從源目錄中提取gcc tarball,而後改變目錄建立。只有這樣,你應該繼續下面的說明。

tar -xf ../mpfr-3.1.5.tar.xz mv -v mpfr-3.1.5 mpfr tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp tar -xf ../mpc-1.0.3.tar.gz mv -v mpc-1.0.3 mpc

下面的命令將會改變GCC的默認的位置動態連接器使用一個安裝在 /tools。它也消除了 /usr/include從GCC的包括搜索路徑。問題:

for file in gcc/config/{linux,i386/linux{,64}}.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

上面彷佛難以理解,讓咱們將其分解。首先,咱們複製文件 gcc/config/linux.h, gcc/config/i386/linux.h, gcc/config/i368/linux64.h。一個文件的名稱相同但添加後綴的 「.orig」。而後第一個sed表現突出 「/工具」每個的實例 「/lib/ld」, 「/ lib64 / ld」或 「/ lib32 / ld」,而第二個取代硬編碼的實例 「/ usr」。接下來,咱們添加定義語句改變默認startfile前綴的文件。注意,拖着 「/」在 「/工具/ lib /」是必需的。最後,咱們使用 觸摸更新複製的文件的時間戳。當結合使用 cp - u,這樣能夠防止意外更改原始文件的命令是無心中運行兩次。

最後,x86_64主機上,設置默認爲64位庫目錄名稱 「自由」:

case $(uname -m) in   x86_64)     sed -e '/m64=/s/lib64/lib/' \         -i.orig gcc/config/i386/t-linux64  ;; esac

GCC文檔建議構建GCC在一個專用的構建目錄:

mkdir -v build cd       build

準備GCC編譯:

../configure                                       \     --target=$LFS_TGT                              \     --prefix=/tools                                \     --with-glibc-version=2.11                      \     --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-libmpx                               \     --disable-libquadmath                          \     --disable-libssp                               \     --disable-libvtv                               \     --disable-libstdcxx                            \     --enable-languages=c,c++

配置選項的含義:

--with-newlib

由於C庫尚未可用的工做,這能夠確保構建libgcc時inhibit_libc常數定義。這能夠防止任何代碼的編譯,須要libc的支持。

--without-headers

當建立一個完整的編譯器GCC要求標準頭與目標系統兼容。對咱們來講這些頭不會須要。這個開關能夠防止GCC尋找他們。

--with-local-prefix=/tools

當地的前綴是系統中的位置,GCC將本地搜索包含文件安裝。默認值是 /usr/local。設置這個 /tools有助於保持主機的位置 /usr/local這個GCC的搜索路徑。

--with-native-system-header-dir=/tools/include

默認狀況下GCC搜索 /usr/include系統頭文件。會同sysroot開關,這一般會翻譯 $LFS/usr/include。不過頭,將安裝將在接下來的兩個部分 $LFS/tools/include。這個開關確保gcc會找到正確。在第二個經過的GCC,一樣的開關將確保沒有頭從主機系統。

--disable-shared

這個開關迫使GCC內部靜態庫連接。這樣作是爲了不可能的主機系統的問題。

--disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libmpx, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx

這些開關禁用支持十進制浮點擴展、線程、libatomic,libgomp,libmpx,libquadmath,libssp,libvtv,c++標準庫。這些功能將沒法編譯構建交叉編譯器時,不交叉編譯臨時libc的任務所必需的。

--disable-multilib

x86_64,LFS還不支持multilib配置。這個開關是x86無害。

--enable-languages=c,c++

這個選項能夠確保只有C和c++編譯器。這些是惟一的語言如今須要的。

GCC編譯經過運行:

make

如今編譯完成。在這一點上,測試套件一般會跑,可是,正如前面提到過的,測試套件框架尚未到位。此時運行測試的好處是最小自項目從這個第一遍很快就會被取代。

安裝包:

make install

這個包位於的細節部分6.20.2,GCC的內容。」

最後一次更新在

5.6。Linux-4.12.7 API頭

Linux內核API頭(linux-4.12.7.tar.xz)公開的API使用Glibc。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 861 MB

5.6.1。安裝Linux API的頭

Linux內核須要公開的應用程序編程接口(API)系統的C庫(LFS Glibc)使用。這樣作是經過消毒各類C頭文件的Linux內核源代碼tarball。

確保沒有過時文件嵌入到包:

make mrproper

如今從源中提取用戶可見的內核頭文件。他們被放置在一箇中間本地目錄複製到所需的位置,由於提取過程在目標目錄中刪除任何現有的文件。

make INSTALL_HDR_PATH=dest headers_install cp -rv dest/include/* /tools/include

最後一次更新在

5.7。glibc - 2.26

Glibc包包含主要的C庫。這個庫提供的基本例程分配內存,搜索目錄,打開和關閉文件、讀寫文件、字符串處理、模式匹配、算術等等。

近似創建時間: 4.2業務單位
所需的磁盤空間: 790 MB

5.7.1。Glibc的安裝

Glibc文檔建議建築Glibc專用的構建目錄:

mkdir -v build cd       build

接下來,Glibc準備編譯:

../configure                             \       --prefix=/tools                    \       --host=$LFS_TGT                    \       --build=$(../scripts/config.guess) \       --enable-kernel=3.2             \       --with-headers=/tools/include      \       libc_cv_forced_unwind=yes          \       libc_cv_c_cleanup=yes

配置選項的含義:

--host=$LFS_TGT, --build=$(../scripts/config.guess)

這些開關的綜合效應是Glibc的構建系統自己須要配置保存,使用交叉耦合和交叉編譯器 /tools.

--enable-kernel=3.2

這告訴Glibc 3.2編譯庫支持,後來Linux內核。替代舊的內核不啓用。

--with-headers=/tools/include

這告訴Glibc編譯自己對最近頭安裝目錄的工具,因此它確切地知道哪些特性相應的內核,能夠優化自己。

libc_cv_forced_unwind=yes

連接器安裝在5.4節,「binutils - 2.29 - 1」交叉編譯,所以不能使用到Glibc已經安裝。這意味着force-unwind支持的配置測試將失敗,由於它依賴於一個連接器工做。libc_cv_forced_unwind = yes變量傳遞以通知 配置force-unwind支持可沒有它運行測試。

libc_cv_c_cleanup=yes

一樣,咱們libc_cv_c_cleanup = yes穿過 配置腳本,則跳過測試配置和C清理處理支持。

在這個階段可能出現如下警告:

configure: WARNING: *** These auxiliary programs are missing or *** incompatible versions: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions.

缺失或不兼容 msgfmt項目一般是無害的。這 msgfmt程序的一部分Gettext包主機分佈應提供。

請注意

有報道稱,這個包可能會失敗在構建「並行」。若是發生這種狀況,從新運行make命令「j - 1」選項。

編譯包:

make

安裝包:

make install

謹慎

在這一點上,必須中止並確保基本功能(編譯和連接)的新工具鏈按預期工做。執行一個檢查,運行如下命令:

echo 'int main(){}' > dummy.c $LFS_TGT-gcc dummy.c readelf -l a.out | grep ': /tools'

若是一切工做正常,應該沒有錯誤,和最後一個命令的輸出的形式:

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

請注意,對於64位的機器,翻譯的名字 /tools/lib64/ld-linux-x86-64.so.2.

若是輸出和上面沒有顯示或沒有輸出,而後是錯誤的。調查和追溯的步驟找出問題並糾正它。這個問題必須解決以後才能繼續。

一旦一切都好,清理測試文件:

rm -v dummy.c a.out

請注意

下下個建築Binutils部分將做爲一個額外的檢查工具鏈創建正常。若是Binutils未能創建,這是一個跡象代表出了毛病前Binutils GCC或Glibc安裝。

這個包位於的細節6.9.3部分,「Glibc的內容。」

最後一次更新在

5.8。Libstdc + + 7.2.0

Libstdc + +是標準c++庫。它須要正確的操做的g++編譯器。

近似創建時間: 0.4業務單位
所需的磁盤空間: 750 MB

5.8.1。安裝目標Libstdc + +

請注意

Libstdc + +是GCC的一部分來源。你應該首先解壓GCC tarball和改變 gcc-7.2.0目錄中。

建立一個單獨的構建目錄Libstdc + +並輸入:

mkdir -v build cd       build

準備Libstdc + +編譯:

../libstdc++-v3/configure           \     --host=$LFS_TGT                 \     --prefix=/tools                 \     --disable-multilib              \     --disable-nls                   \     --disable-libstdcxx-threads     \     --disable-libstdcxx-pch         \     --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/7.2.0

配置選項的含義:

--host=...

代表使用交叉編譯器咱們剛剛創建,而不是一個 /usr/bin.

--disable-libstdcxx-threads

由於咱們尚未創建C線程庫,C + + 1不能創建。

--disable-libstdcxx-pch

這個開關防止預編譯包含文件的安裝,不須要在這個階段。

--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/7.2.0

這是標準的位置搜索包含文件的c++編譯器。在通常的構建,該信息自動傳遞給Libstdc + + 配置選項從頂層目錄。在咱們的例子中,這些信息必須明確。

經過運行:編譯libstdc + +

make

安裝庫:

make install

這個包位於的細節部分6.20.2,GCC的內容。」

最後一次更新在

5.9。binutils - 2.29 - 2

Binutils包包含一個連接,一個彙編程序,和其餘工具來處理對象文件。

近似創建時間: 1.1業務單位
所需的磁盤空間: 582 MB

5.9.1。安裝Binutils

建立一個單獨的構建目錄:

mkdir -v build cd       build

Binutils準備編譯:

CC=$LFS_TGT-gcc                \ AR=$LFS_TGT-ar                 \ RANLIB=$LFS_TGT-ranlib         \ ../configure                   \     --prefix=/tools            \     --disable-nls              \     --disable-werror           \     --with-lib-path=/tools/lib \     --with-sysroot

新的配置選項的含義:

CC=$LFS_TGT-gcc AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib

由於這真的是一個本地構建Binutils,確保設置這些變量構建系統使用交叉編譯器和相關的工具而不是主機系統上的。

--with-lib-path=/tools/lib

這告訴配置腳本指定庫搜索路徑Binutils編譯期間,致使 /tools/lib被傳遞給連接器。這能夠防止連接器主機上經過圖書館搜索目錄。

--with-sysroot

sysroot特性使連接找到共享對象所必需的其餘共享對象明確包括連接器的命令行。沒有這個,一些包可能不成功創建在一些主機。

編譯包:

make

安裝包:

make install

如今準備的連接器 「其餘」在下一章中階段:

make -C ld clean make -C ld LIB_PATH=/usr/lib:/lib cp -v ld/ld-new /tools/bin

使參數的含義:

-C ld clean

這告訴程序刪除全部編譯文件 ld子目錄。

-C ld LIB_PATH=/usr/lib:/lib

這個選項重建中的一切 ld子目錄。指定 LIB_PATHMakefile變量在命令行上容許咱們覆蓋默認值的臨時工具和點適當的最終路徑。這個變量的值指定連接的默認庫搜索路徑。這種準備是用於下一章。

這個包位於的細節部分6.16.2,「Binutils內容。」

最後一次更新在

5.10。GCC-7.2.0 -經過2

GCC包包含GNU編譯器集合,包括C和c++編譯器。

近似創建時間: 11個業務單位
所需的磁盤空間: 2.6 GB

5.10.1。安裝GCC

咱們第一次創建的GCC安裝了幾個內部系統頭文件。一般其中之一, limits.h,將包括相應的系統 limits.h頭,在這種狀況下, /tools/include/limits.h。然而,當時的第一個創建的gcc /tools/include/limits.h不存在,因此內部頭GCC安裝部分,獨立的文件,不包括系統的擴展功能頭。這是構建臨時libc足夠,可是這個構建的GCC如今須要完整的內部頭。建立一個完整版的內部頭使用的命令是相同的什麼GCC編譯系統在正常狀況下:

cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \   `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h

再一次,改變GCC的默認的位置動態連接器使用一個安裝在 /tools.

for file in gcc/config/{linux,i386/linux{,64}}.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

若是基於x86_64,改變默認的64位庫目錄名稱 「自由」:

case $(uname -m) in   x86_64)     sed -e '/m64=/s/lib64/lib/' \         -i.orig gcc/config/i386/t-linux64   ;; esac

在第一個構建的GCC須要GMP,MPFR和MPC包。解壓壓縮包並移動到所需的目錄名稱:

tar -xf ../mpfr-3.1.5.tar.xz mv -v mpfr-3.1.5 mpfr tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp tar -xf ../mpc-1.0.3.tar.gz mv -v mpc-1.0.3 mpc

建立一個單獨的構建目錄:

mkdir -v build cd       build

在開始構建GCC以前,記得要設置環境變量,覆蓋默認的優化旗幟。

如今準備GCC編譯:

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

新的配置選項的含義:

--enable-languages=c,c++

這個選項能夠確保C和c++編譯器。

--disable-libstdcxx-pch

不創建預編譯頭(PCH) libstdc++。它佔用了大量的空間,咱們不須要它。

--disable-bootstrap

對於本地版本的GCC,默認是「引導」構建。這並不僅是GCC編譯,編譯它好幾回。它使用在第一輪編譯程序編譯自己第二次,第三次,而後再次。第二個和第三個迭代進行比較,以確保它能夠複製自己完美。這也意味着這是正確編譯。然而,LFS構建方法應該提供一個堅實的編譯器,而不須要每次都引導。

編譯包:

make

安裝包:

make install

最後潤色,建立一個符號連接。許多程序和腳本運行 cc而不是 海灣合做委員會,用於保持程序通用的,所以可用在各類UNIX系統上安裝了GNU C編譯器並不老是。運行 cc使系統管理員能夠決定哪些C編譯器安裝:

ln -sv gcc /tools/bin/cc

謹慎

在這一點上,必須中止並確保基本功能(編譯和連接)的新工具鏈按預期工做。執行一個檢查,運行如下命令:

echo 'int main(){}' > dummy.c cc dummy.c readelf -l a.out | grep ': /tools'

若是一切工做正常,應該沒有錯誤,和最後一個命令的輸出的形式:

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

請注意, /tools/lib,或 /tools/lib64對於64位機器顯示爲動態連接器的前綴。

若是輸出和上面沒有顯示或沒有輸出,而後是錯誤的。調查和追溯的步驟找出問題並糾正它。這個問題必須解決以後才能繼續。首先,再次執行完整性檢查,使用海灣合做委員會而不是 cc。若是這是,那麼 /tools/bin/cc符號連接是失蹤。安裝按上面的符號連接。接下來,確保 PATH是正確的。這能夠經過運行檢查 回聲路徑美圓和驗證 /tools/bin在列表的頭。若是 PATH是錯誤的,它可能意味着你沒有登陸的用戶嗎 lfs或者出了問題4.4節,「設置環境。」

一旦一切都好,清理測試文件:

rm -v dummy.c a.out

這個包位於的細節部分6.20.2,GCC的內容。」

最後一次更新在

5.11。Tcl-core-8.6.7

Tcl包包含工具命令語言。

近似創建時間: 0.4業務單位
所需的磁盤空間: 42 MB

5.11.1。安裝Tcl-core

這個包和將來三(DejaGNU指望,並檢查)安裝爲GCC支持運行測試套件和Binutils和其餘包。爲測試目的安裝四個包彷佛有些過度了,但這很安心,若是不是必要的,知道最重要的工具是正常工做。即便測試套件運行在本章(不強制),這些包都必須運行測試套件第六章.

注意,這裏使用的Tcl包是運行LFS所需的最小版本測試。完整的包,看到BLFS Tcl程序.

Tcl準備編譯:

cd unix ./configure --prefix=/tools

建設方案:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。Tcl運行測試套件,發出如下命令:

TZ=UTC make test

Tcl測試套件可體驗到失敗在特定主機的條件並不徹底理解。所以,測試套件的失敗在這裏不奇怪,不被認爲是相當重要的。的 TZ=UTC參數設置時區爲協調世界時(UTC),但只有時間的測試套件運行。這將確保時鐘測試正確行使。細節上的 TZ環境變量提供了第七章.

安裝包:

make install

讓安裝庫可寫的調試符號能夠刪除後:

chmod -v u+w /tools/lib/libtcl8.6.so

安裝Tcl的頭。期待,下一個包須要構建。

make install-private-headers

如今作一個必要的符號連接:

ln -sv tclsh8.6 /tools/bin/tclsh

5.11.2。Tcl-core內容

安裝程序: tclsh(tclsh8.6連接)和tclsh8.6
安裝庫: libtcl8.6。因此,libtclstub8.6.a

簡短的描述

tclsh8.6

Tcl命令shell

tclsh

tclsh8.6連接

libtcl8.6.so

Tcl圖書館

libtclstub8.6.a

Tcl的存根庫

最後一次更新在

5.12。指望- 5.45

預計包包含一個程序的執行腳本與其餘互動對話程序。

近似創建時間: 0.1業務單位
所需的磁盤空間: 4.3 MB

5.12.1。安裝預計

首先,迫使指望的配置腳本使用 /bin/stty而不是 /usr/local/bin/stty它可能會發如今主機系統。這將確保咱們的測試套件工具保持理智的最終構建咱們的工具鏈:

cp -v configure{,.orig} sed 's:/usr/local/bin:/bin:' configure.orig > configure

如今預計準備編譯:

./configure --prefix=/tools       \             --with-tcl=/tools/lib \             --with-tclinclude=/tools/include

配置選項的含義:

--with-tcl=/tools/lib

這將確保配置腳本找到臨時的Tcl安裝工具位置,而不是可能定位現有的主機系統。

--with-tclinclude=/tools/include

這明確告訴預計在哪裏找到Tcl的內部標頭。使用這個選項能夠避免的狀況 配置失敗,由於它不能自動發現Tcl的頭的位置。

建設方案:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。預計測試套件運行,發出如下命令:

make test

注意,但願測試套件是已知的失敗經驗在某些主機不在咱們控制以內的條件。所以,測試套件的失敗在這裏不奇怪,不被認爲是相當重要的。

安裝包:

make SCRIPTS="" install

使參數的含義:

SCRIPTS=""

這能夠防止安裝補充Expect腳本,不須要。

5.12.2。內容的指望

安裝程序: 預計
安裝庫: libexpect-5.45.so

簡短的描述

預計

根據腳本與其餘互動項目

libexpect-5.45.so

包含函數,容許指望做爲Tcl擴展或直接從使用C或c++(沒有Tcl)

最後一次更新在

5.13。dejagnu - 1.6

DejaGNU包包含測試其餘程序的一個框架。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 3.2 MB

5.13.1。安裝DejaGNU

DejaGNU準備編譯:

./configure --prefix=/tools

構建和安裝包:

make install

測試結果,問題:

make check

5.13.2。DejaGNU內容

安裝程序: 小牛

簡短的描述

小牛

一個定位適當的包裝器腳本 預計殼,而後DejaGNU運行

最後一次更新在

5.14。Check-0.11.0

檢查是C的單元測試框架。

近似創建時間: 0.1業務單位
所需的磁盤空間: 11 MB

5.14.1。安裝檢查

準備檢查編譯:

PKG_CONFIG= ./configure --prefix=/tools

配置參數的含義:

PKG_CONFIG=

這告訴配置腳本忽略任何pkg-config選項,可能會致使系統不試圖連接庫 /tools目錄中。

建設方案:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。檢查運行測試套件,發出如下命令:

make check

注意,檢查測試套件可能須要較長(4單位)。

安裝包:

make install

5.14.2。檢查的內容

安裝程序: checkmk
安裝庫: libcheck。{,,}

簡短的描述

checkmk

Awk腳本生成C單元測試使用檢查單元測試框架

libcheck.{a,so}

包含函數,容許檢查在測試程序中調用

最後一次更新在

5.15。ncurses - 6.0

Ncurses包包含庫terminal-independent處理字符的屏幕。

近似創建時間: 0.5業務單位
所需的磁盤空間: 38 MB

5.15.1。安裝Ncurses

首先,確保 靦腆的人第一次發如今配置:

sed -i s/mawk// configure

Ncurses準備編譯:

./configure --prefix=/tools \             --with-shared   \             --without-debug \             --without-ada   \             --enable-widec  \             --enable-overwrite

配置選項的含義:

--without-ada

這將確保Ncurses Ada編譯器不支持它可能出如今主機,但一旦咱們進入將不可用 chroot環境。

--enable-overwrite

這告訴Ncurses安裝它的頭文件 /tools/include,而不是 /tools/include/ncurses,以確保其餘包能夠找到Ncurses頭成功。

--enable-widec

這個開關會致使寬度字符庫(例如, libncursesw.so.6.0)創建而不是正常的(例如, libncurses.so.6.0)。這些寬度字符庫可用在多字節和傳統的8位地區,而正常庫只在8位場所正常工做。寬字符和正常庫源代碼兼容,但不是二進制兼容的。

編譯包:

make

這個包有一個測試套件,但它只能包已經安裝後運行。測試中駐留 test/目錄中。看到 README該目錄中的文件爲進一步的細節。

安裝包:

make install

這個包位於的細節部分6.23.2,「Ncurses的內容。」

最後一次更新在

5.16。bash - 4.4

Bash包包含Bourne-Again殼。

近似創建時間: 0.4業務單位
所需的磁盤空間: 61 MB

5.16.1。Bash的安裝

Bash準備編譯:

./configure --prefix=/tools --without-bash-malloc

配置選項的含義:

--without-bash-malloc

這個選項關閉使用Bash的內存分配(malloc)函數會致使分割的缺點。關閉這個選項,Bash將使用 malloc函數從Glibc更穩定。

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行Bash測試套件,發出如下命令:

make tests

安裝包:

make install

使程序的連接使用 上海外殼:

ln -sv bash /tools/bin/sh

這個包位於的細節部分6.34.2,Bash的內容。」

最後一次更新在

5.17。Bison-3.0.4

野牛包包含一個解析器生成器。

近似創建時間: 0.3業務單位
所需的磁盤空間: 32 MB

5.17.1。安裝的野牛

野牛準備編譯:

./configure --prefix=/tools

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

這個包位於的細節部分6.31.2,「野牛」的內容。

最後一次更新在

5.18。Bzip2-1.0.6

Bzip2包包含壓縮和解壓文件的程序。壓縮的文本文件 bzip2產生一個更好的壓縮比與傳統的比例 gzip.

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 5.2 MB

5.18.1。安裝Bzip2

Bzip2包不包含 配置腳本。編譯和測試它:

make

安裝包:

make PREFIX=/tools install

這個包位於的細節部分6.21.2,Bzip2內容。」

最後一次更新在

5.19。coreutils - 8.27

Coreutils包包含實用程序顯示和設置基本制度特徵。

近似創建時間: 0.6業務單位
所需的磁盤空間: 136 MB

5.19.1。安裝Coreutils

Coreutils準備編譯:

./configure --prefix=/tools --enable-install-program=hostname

配置選項的含義:

--enable-install-program=hostname

這使 主機名二進制建造和安裝——它默認是禁用的,但Perl所要求的測試套件。

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行測試套件Coreutils不管如何,發出如下命令:

make RUN_EXPENSIVE_TESTS=yes check

 RUN_EXPENSIVE_TESTS=yes參數告訴測試套件運行幾個額外的測試被認爲是相對昂貴(CPU和內存使用)在一些平臺上,但一般不是一個問題在Linux上。

安裝包:

make install

這個包位於的細節部分6.50.2,「Coreutils內容。」

最後一次更新在

5.20。你要- 3.6

你要包包含程序顯示文件或目錄之間的差別。

近似創建時間: 0.2業務單位
所需的磁盤空間: 22 MB

5.20.1。你要安裝

你要準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行你的測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節6.51.2節,「你要的內容。」

最後一次更新在

5.21。文件- 5.31

文件包包含一個實用工具來肯定一個給定的文件或文件的類型。

近似創建時間: 0.1業務單位
所需的磁盤空間: 16 MB

5.21.1。安裝的文件

準備文件進行編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行測試套件的文件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節6.12.2節,「文件」的內容。

最後一次更新在

5.22。Findutils-4.6.0

Findutils包包含程序找到文件。這些項目提供了遞歸搜索目錄樹和建立、維護和搜索數據庫(一般比遞歸查找更快,可是不可靠,若是數據庫最近沒有更新)。

近似創建時間: 0.3業務單位
所需的磁盤空間: 35 MB

5.22.1。安裝Findutils

Findutils準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行測試套件Findutils不管如何,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.53.2,「Findutils內容。」

最後一次更新在

5.23。Gawk-4.1.4

呆呆的包包含操縱文本文件的程序。

近似創建時間: 0.2業務單位
所需的磁盤空間: 35 MB

5.23.1。安裝呆呆的

準備呆呆的編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行呆呆的測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.52.2,呆呆的「內容」。

最後一次更新在

5.24。Gettext-0.19.8.1

國際化和本地化的Gettext包包含公用事業。這些容許編譯程序與NLS(本地語言支持),使他們可以輸出消息在用戶的母語。

近似創建時間: 0.8業務單位
所需的磁盤空間: 164 MB

5.24.1。安裝Gettext

對於咱們的臨時的工具集,咱們只須要從Gettext構建和安裝三個項目。

Gettext準備編譯:

cd gettext-tools EMACS="no" ./configure --prefix=/tools --disable-shared

配置選項的含義:

EMACS="no"

這能夠防止配置腳本肯定在哪裏安裝Emacs Lisp文件做爲測試掛在一些虛擬主機。

--disable-shared

咱們不須要安裝任何共享Gettext庫,所以不須要構建它們。

編譯包:

make -C gnulib-lib make -C intl pluralx.c make -C src msgfmt make -C src msgmerge make -C src xgettext

只有三個項目已經被編譯,不可能沒有編譯運行測試套件從Gettext包額外的支持庫。所以不建議嘗試運行測試套件。

安裝 msgfmt, msgmerge xgettext程序:

cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin

這個包位於的細節部分6.47.2,「Gettext的內容。」

最後一次更新在

5.25。grep - 3.1

Grep搜索包包含項目文件。

近似創建時間: 0.2業務單位
所需的磁盤空間: 19 MB

5.25.1。Grep的安裝

Grep準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行Grep測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.33.2,「Grep的內容。」

最後一次更新在

5.26。gzip - 1.8

的Gzip壓縮和解壓文件包包含項目。

近似創建時間: 0.1業務單位
所需的磁盤空間: 9 MB

5.26.1。Gzip的安裝

Gzip準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行Gzip測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.57.2,「Gzip的內容。」

最後一次更新在

5.27。M4-1.4.18

M4包包含一個宏處理器。

近似創建時間: 0.2業務單位
所需的磁盤空間: 19 MB

5.27.1。M4的安裝

M4準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。M4運行測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節6.14.2部分,「M4的內容。」

最後一次更新在

5.28。Make-4.2.1

使編譯包包含一個程序包。

近似創建時間: 0.1業務單位
所需的磁盤空間: 12.5 MB

5.28.1。安裝使

準備進行編譯:

./configure --prefix=/tools --without-guile

配置選項的含義:

--without-guile

這將確保Make-4.2.1不會對詭計庫連接,這可能出如今主機系統,但不會中可用的 chroot環境下一章。

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行Make測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節6.61.2部分,「內容」。

最後一次更新在

5.29。Patch-2.7.5

補丁包包含一個程序修改或建立文件的應用 「補丁」一般文件建立的 diff程序。

近似創建時間: 0.2業務單位
所需的磁盤空間: 11 MB

5.29.1。安裝補丁

準備補丁進行編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行補丁測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.62.2,「補丁的內容。」

最後一次更新在

5.30。Perl-5.26.0

Perl包包含實際提取和報告語言。

近似創建時間: 1.3業務單位
所需的磁盤空間: 261 MB

5.30.1。安裝Perl

首先,修復一個構建問題只出如今LFS環境:

sed -e '9751 a#ifndef PERL_IN_XSUB_RE' \     -e '9808 a#endif'                  \     -i regexec.c

準備Perl編譯:

sh Configure -des -Dprefix=/tools -Dlibs=-lm

建設方案:

make

雖然Perl附帶一個測試套件,最好等到安裝在下一章。

只有少數的實用程序和庫須要安裝在這個時間:

cp -v perl cpan/podlators/scripts/pod2man /tools/bin mkdir -pv /tools/lib/perl5/5.26.0 cp -Rv lib/* /tools/lib/perl5/5.26.0

這個包位於的細節部分6.40.2,「Perl」的內容。

最後一次更新在

5.31。sed - 4.4

Sed包包含一個流編輯器。

近似創建時間: 0.2業務單位
所需的磁盤空間: 16 MB

5.31.1。Sed的安裝

Sed準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。Sed運行測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.27.2,「Sed的內容。」

最後一次更新在

5.32。瀝青- 1.29

Tar包包含一個歸檔項目。

近似創建時間: 0.3業務單位
所需的磁盤空間: 33 MB

5.32.1。安裝焦油

焦油準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。焦油運行測試套件,發出如下命令:

make check

安裝包:

make install

最後一次更新在

5.33。texinfo - 6.4

Texinfo包包含項目爲閱讀,寫做,和轉換信息頁面。

近似創建時間: 0.2業務單位
所需的磁盤空間: 99 MB

5.33.1。安裝Texinfo

Texinfo準備編譯:

./configure --prefix=/tools

請注意

做爲配置過程的一部分,一個測試是由TestXS_la-TestXS.lo代表一個錯誤。這不是有關LFS和應被忽略。

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行測試套件Texinfo不管如何,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.69.2,「Texinfo內容。」

最後一次更新在

5.34。Util-linux-2.30.1

Util-linux包包含各類各樣的實用程序。

近似創建時間: 0.8業務單位
所需的磁盤空間: 123 MB

5.34.1。安裝Util-linux

Util-linux準備編譯:

./configure --prefix=/tools                \             --without-python               \             --disable-makeinstall-chown    \             --without-systemdsystemunitdir \             --without-ncurses              \             PKG_CONFIG=""

配置選項的含義:

--without-python

這個開關禁用使用 Python若是是安裝在主機系統上。它能避免試圖創建沒必要要的綁定。

--disable-makeinstall-chown

這個開關禁用使用 喬恩在安裝期間命令。這是不須要在安裝/工具目錄,避免做爲根用戶安裝的必要性。

--without-ncurses

這個開關禁用使用ncurses庫的構建過程。這是不須要在安裝/工具目錄並避免問題在某些主機發行版。

--without-systemdsystemunitdir

系統使用systemd,包試圖安裝一個systemd特定文件到一個不存在的目錄在/工具。這個開關禁用沒必要要的行動。

PKG_CONFIG=""

設置環境變量添加沒必要要的特性,能夠防止在主機。注意,設置這個環境變量的位置顯示是不一樣於其餘LFS部分變量在哪裏設置前的命令。這個位置所示展現的另外一種方式使用配置時設置一個環境變量。

編譯包:

make

安裝包:

make install

最後一次更新在

5.35。Xz-5.2.3

Xz包包含壓縮和解壓文件的程序。它提供了功能lzma和更新的xz壓縮格式。壓縮的文本文件 xz產生一個更好的壓縮比與傳統的比例 gzip bzip2命令。

近似創建時間: 0.2業務單位
所需的磁盤空間: 17個MB

5.35.1。安裝Xz

Xz準備編譯:

./configure --prefix=/tools

編譯包:

make

如今編譯完成。正如前面所討論的,運行測試套件是臨時工具不是強制性的在這一章。運行Xz測試套件,發出如下命令:

make check

安裝包:

make install

這個包位於的細節部分6.45.2,「Xz內容。」

最後一次更新在

5.36。剝離

本節中的步驟是可選的,但若是LFS分區,而小,有利於學習,能夠刪除沒必要要的物品。到目前爲止的可執行文件和庫創建包含大約70 MB的沒必要要的調試符號。刪除這些符號:

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

這些命令將跳過大量文件、報告,它不認可他們的文件格式。大多數都是腳本而不是二進制文件。也使用系統帶命令包括加沙地帶二進制/工具。

照顧 不使用 --strip-unneeded在庫。靜態的將被摧毀和工具鏈包須要從新建造。

存更多的錢,刪除文檔:

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

此時,您應該至少3 GB的空閒空間 $LFS能夠用來構建和安裝Glibc和Gcc在接下來的階段。若是你能構建和安裝Glibc,您能夠構建和安裝其他。

5.37。改變全部權

請注意

在這本書的其他部分的命令必須在登陸用戶執行 root,再也不做爲用戶 lfs。此外,雙重檢查 $LFS被設置在 root的環境。

目前, $LFS/tools目錄由用戶 lfs,用戶只存在於主機系統。若是 $LFS/tools目錄保存,文件是屬於沒有對應賬戶的用戶ID。這是危險的,由於一個用戶賬戶建立後能夠獲得相同的用戶ID和將本身的 $LFS/tools目錄和全部文件,從而讓這些文件可能的惡意操縱。

爲了不這個問題,您能夠添加 lfs用戶後,建立新的LFS系統 /etc/passwd文件,照顧分配相同的用戶和組id在主機系統。更好的是,改變的全部權 $LFS/tools目錄的用戶 root經過運行下面的命令:

chown -R root:root $LFS/tools

雖然 $LFS/tools目錄能夠刪除LFS系統已經完成後,它能夠保留創建附加的LFS系統 同一本書的版本。如何備份 $LFS/tools是一個我的喜愛的問題。

謹慎

若是你打算保持暫時的工具用於構建將來的LFS系統, 如今是時候回去了。第六章中後續的命令將改變目前的工具,呈現他們無用的將來構建。

第三部分。LFS系統建設

第六章。安裝基本系統軟件

6.1。介紹

在這一章,咱們進入建築工地,開始認真構建LFS系統。咱們chroot臨時迷你的Linux系統,作一些最後的準備,而後開始安裝包。

這個軟件的安裝很簡單。雖然在許多狀況下,安裝說明能夠更短更通用的,咱們選擇爲每一個包提供完整的指令錯誤的可能性降到最低。學習是什麼讓一個Linux系統的關鍵工做是知道每一個包是用來和你爲何(或系統)可能須要它。

咱們不建議使用優化。他們能夠使程序運行更快,但他們也可能致使編譯運行程序時,困難和問題。若是一個包拒絕編譯使用優化時,試着編譯它沒有優化,看看修復這個問題。即便包編譯使用優化時,存在的風險多是編譯錯誤,由於之間的複雜交互代碼並構建工具。還注意到 -march -mtune選項使用值沒有指定在書中沒有被測試。這可能致使問題的工具鏈包(Binutils,GCC和Glibc)。小的潛在收益實現使用編譯器優化每每抵消風險。鼓勵首次建築商LFS構建沒有定製優化。隨後系統將仍然跑得很快,是穩定在同一時間。

包的順序安裝在本章須要嚴格執行,以確保沒有指程序意外得到一個路徑 /tools硬鏈接。出於一樣的緣由,不要並行編譯不一樣的包。並行編譯可能節省時間(特別是在雙cpu的機器上),但它可能致使程序包含一個硬鏈接的路徑 /tools,這將致使程序中止工做時,刪除目錄。

安裝前安裝說明,每一個頁面提供關於包裝的信息,包括一個簡潔的描述,它包含什麼,大約須要多長時間,多少磁盤空間這個建築過程當中是必需的。安裝說明後,有一個項目列表和庫(以及簡要的描述這些),包安裝。

請注意

所需的業務單位價值和磁盤空間包括全部適用的測試套件數據包在第六章。

可是。關於圖書館

通常來講,LFS編輯阻礙構建和安裝靜態庫。最初的目的大多數靜態庫已通過時的在現代的Linux系統。除了靜態庫連接到一個程序能夠是有害的。若是一個更新圖書館須要刪除一個安全問題,全部的程序使用靜態庫須要工具的新圖書館。由於使用靜態庫並不老是顯而易見的,相關的程序(程序須要作連接)甚至不被人知道的。

在第六章的程序,咱們刪除或禁用大多數靜態庫的安裝。在一些狀況下,尤爲是glibc和gcc,使用靜態庫總包建築仍然是必不可少的過程。這一般是經過一個完成的 --disable-static選項 配置。在其餘狀況下,備用手段是必要的。

爲一個更完整的討論圖書館,看到討論庫:靜態或共享?BLFS的書。並

6.2。虛擬內核文件系統作準備

各類文件系統導出由內核用於交流和從內核自己。這些文件系統是虛擬的,沒有磁盤空間用於他們。文件系統的內容駐留在內存中。

首先建立目錄上的文件系統安裝:

mkdir -pv $LFS/{dev,proc,sys,run}

6.2.1。建立初始設備節點

在內核啓動時系統,它須要一些設備節點的存在,尤爲是 console null設備。必須在硬盤上建立設備節點,這樣他們是可用的 udevd已經開始,另外當Linux是開始 init=/bin/bash。建立設備經過運行如下命令:

mknod -m 600 $LFS/dev/console c 5 1 mknod -m 666 $LFS/dev/null c 1 3

6.2.2。安裝並填充/ dev

推薦的填充方法 /dev目錄和設備(如安裝一個虛擬文件系統 tmpfs) /dev建立目錄,並容許設備動態虛擬文件系統上檢測到或訪問。建立設備一般是由Udev在引導過程當中完成的。由於這個新系統尚未Udev還沒有啓動,須要掛載和填充 /dev手動。這是經過綁定安裝主機系統的 /dev目錄中。綁定掛載是一種特殊類型的山,容許您建立一個鏡像的目錄或掛載點到其餘位置。使用如下命令來實現:

mount -v --bind /dev $LFS/dev

6.2.3。安裝虛擬內核文件系統

如今剩下的山虛擬內核文件系統:

mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run

開發的掛載選項的含義:

gid=5

這確保了全部devpts-created設備節點屬於5組ID。這是之後咱們將使用的ID tty組。咱們使用組ID,而不是一個名字,由於主機系統可能使用不一樣的ID的 tty組。

mode=0620

這確保了全部devpts-created設備節點模式0620(用戶可讀和可寫,集團可寫)。連同上面的選項,這將確保開發將建立設備節點,知足grantpt的要求(),這意味着Glibcpt_chown輔助二進制(默認不安裝)不是必需的。

在某些主機系統, /dev/shm是一個符號連接呢 /run/shm。/運行tmpfs上面安裝在這種狀況下只須要建立一個目錄。

if [ -h $LFS/dev/shm ]; then   mkdir -pv $LFS/$(readlink $LFS/dev/shm) fi

6.3。包管理

包管理是一個常常要求的LFS書籍。包管理器容許跟蹤的安裝文件便於拆卸和升級包。二進制文件和庫文件,安裝的軟件包管理器將處理配置文件。在你開始懷疑以前,這個部分將不討論也不推薦任何特定的軟件包管理器。它提供的是一個比較流行的技術和它們是如何工做的。完美的包管理器爲你可能在這些技術或可能的組合兩個或更多的這些技術。本節簡要提到升級包時可能出現的問題。

一些緣由沒有包管理器中提到的LFS BLFS或包括:並

  • 處理包管理的目標將注意力從這些書如何構建Linux系統。

  • 有多個解決方案包管理,各有其優勢和缺點。包括一個知足全部觀衆是很困難的。

有一些提示寫在包管理的主題。參觀提示項目看看其中一個適合您的須要。

6.3.1。升級的問題

包管理器很容易升級到新版本時釋放。BLFS一般LFS中的指令和書並能夠用來升級到新版本。這裏有一些點,你應該知道升級的包時,特別是在正在運行的系統。

  • 若是須要升級到一個新版本,Glibc(例如,從Glibc 2.19 - 2.19到Glibc,重建LFS更安全。雖然你 可能能重建全部依賴的包訂單,咱們不推薦它。

  • 若是一個包包含共享庫的更新,若是庫的名稱更改,那麼全部的包動態連接庫須要從新編譯連接的新圖書館。(注意,沒有相關性包版本和圖書館的名稱。)例如,考慮一個包foo-1.2.3,安裝一個共享庫的名字 libfoo.so.1。說你的包升級到新版本foo-1.2.4,安裝一個共享庫的名字 libfoo.so.2。在這種狀況下,全部的包都是動態連接的 libfoo.so.1須要從新編譯連接 libfoo.so.2。注意,您不該該刪除之前的圖書館,直到從新編譯依賴包。

再。包管理技術

如下是一些常見的包管理技術。包管理器在作決定以前,作一些研究各類技術,尤爲是特定方案的缺點。

6.3.2.1。這一切都是在個人腦海裏!

是的,這是一個包管理技術。有些人找不到須要包管理器,由於他們知道緊密的包和知道文件是由每一個包安裝。一些用戶也不須要任何包管理,由於他們打算重建整個系統方案時改變。

6.3.2.2。安裝在不一樣的目錄

這是一個簡單的包管理,不須要任何額外的包管理設施。每一個包是安裝在一個單獨的目錄中。例如,包安裝在foo - 1.1 /usr/pkg/foo-1.1和一個符號連接是由 /usr/pkg/foo/usr/pkg/foo-1.1。在安裝新版本foo - 1.2時,它是安裝在 /usr/pkg/foo-1.2和前一個符號連接被新版本的符號連接。

環境變量,如 PATH, LD_LIBRARY_PATH, MANPATH, INFOPATH CPPFLAGS須要擴大到包括 /usr/pkg/foo。超過幾包,這個方案就變得難以管理。

6.3.2.3。符號連接風格包管理

這是前面的包管理技術的一種變體。每一個包安裝相似於前面的方案。相反的符號連接,每一個文件的符號連接到 /usr層次結構。這消除了須要擴大環境變量。雖然用戶能夠建立符號連接的自動建立,許多包經理已經使用這種方法寫的。一些流行的包括Stow,Epkg,貪污和倉庫。

安裝須要僞造,因此包認爲它是安裝在 /usr但在現實中它是安裝在 /usr/pkg層次結構。以這種方式安裝一般不是一個微不足道的任務。例如,考慮你安裝一個包libfoo - 1.1。下面的說明可能不能正常安裝包:

./configure --prefix=/usr/pkg/libfoo/1.1 make make install

安裝工做,但依賴包可能不像你指望libfoo連接。若是你編譯一個包,對libfoo連接,您可能會注意到,有關 /usr/pkg/libfoo/1.1/lib/libfoo.so.1而不是 /usr/lib/libfoo.so.1如你所願。正確的方法是使用 DESTDIR策略來假的安裝包。這種方法工做以下:

./configure --prefix=/usr make make DESTDIR=/usr/pkg/libfoo/1.1 install

大多數軟件包支持這種方法,可是有一些不。不一致的包,您可能須要手動安裝包中,或者你可能會發現更容易安裝一些有問題的包 /opt.

6.3.2.4。基於時間戳的

在這種技術中,一個包的安裝以前文件時間戳。在安裝以後,一個簡單的使用 找到命令與適當的選項能夠生成一個日誌的全部文件建立時間戳文件後安裝。這種方法編寫的包管理器安裝日誌。

這個方案的優勢是簡單,可是它有兩個缺點。在安裝過程當中,若是文件安裝任何當前時間之外的時間戳,這些文件不會被追蹤的包管理器。同時,這個計劃時只能使用一個安裝包。日誌是不可靠的,若是兩個包被安裝在兩個不一樣的主機。

6.3.2.5。跟蹤安裝腳本

在這種方法中,安裝腳本的命令執行記錄。有兩個技術,一個能夠使用:

 LD_PRELOAD環境變量能夠設置爲指向一個庫加載安裝前。在安裝期間,這個庫跟蹤正在安裝的軟件包依附於各類可執行文件等 cp, 安裝, mv和跟蹤修改文件系統的系統調用。這種方法起做用,全部的可執行文件須要動態連接沒有suid和sgid位。預加載庫在安裝過程當中可能會致使一些沒必要要的反作用。所以,建議一個執行一些測試來確保包管理器不會破壞任何東西和日誌全部適當的文件。

第二個方法是使用 strace期間,記錄全部的系統調用的執行安裝腳本。

6.3.2.6。建立包檔案

軟件包安裝在這個方案中,僞裝成一個單獨的樹描述的符號連接風格包管理。安裝後,使用安裝包建立存檔文件。這個檔案用於安裝包在本地機器上或甚至能夠被用來在其餘機器上安裝包。

這種方法使用的大多數軟件包管理器中發現的商業分佈。包經理,按照這種方法的例子是RPM(順便說一下,這是須要的Linux標準基礎規範)、pkg-utils Debian的貼切,Gentoo的運輸系統。一個提示描述如何採用這種風格的包管理對於LFS系統位於http://www.linuxfromscratch.org/hints/downloads/files/fakeroot.txt.

建立包文件,包括依賴信息複雜,超出了LFS的範圍。

Slackware使用 焦油基於系統包檔案。這個系統故意不處理包依賴關係更復雜的軟件包管理器同樣。Slackware包管理的細節,請參閱http://www.slackbook.org/html/package-management.html.

6.3.2.7。基於用戶的管理

LFS獨有的,這個方案是由馬提亞Benkmann,和可用的提示項目。在這個方案中,每一個包安裝做爲一個單獨的用戶到標準位置。屬於一個包的文件很容易被檢查用戶ID。這種方法的特色和缺點過於複雜來描述在這一節中。詳細信息請參閱暗示http://www.linuxfromscratch.org/hints/downloads/files/more_control_and_pkg_man.txt.

6.3.3。LFS部署在多個系統

LFS系統的優勢之一是,沒有文件,取決於一個磁盤上的文件系統的位置。克隆LFS構建到另外一臺計算機用一樣的架構爲基礎系統同樣簡單 焦油在LFS分區包含根目錄(大約250 mb未壓縮的基礎LFS版本),將文件經過網絡傳輸或光盤複製到新系統和擴大它。從這一點上,幾個配置文件將會被改變。可能須要更新的配置文件包括: /etc/hosts, /etc/fstab,/etc/passwd, /etc/group, /etc/shadow, /etc/ld.so.conf, /etc/sysconfig/rc.site, /etc/sysconfig/network, /etc/sysconfig/ifconfig.eth0.

一個定製的內核可能須要創建新系統根據不一樣的系統硬件和原來的內核配置。

請注意

有一些報告問題之間複製時類似但不相同的架構。例如,Intel系統的指令集是不相同的AMD處理器和後版本的一些處理器指令早期版本中不可用。

最後新系統可引導經過8.4節,「使用GRUB引導過程設置」.

6.4。進入Chroot環境

是時候開始進入chroot環境構建和安裝最後的LFS系統。做爲用戶 root運行如下命令進入的領域,目前,填充只有暫時的工具:

chroot "$LFS" /tools/bin/env -i \     HOME=/root                  \     TERM="$TERM"                \     PS1='\u:\w\$ '              \     PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \     /tools/bin/bash --login +h

 -i選擇的 envchroot環境的命令將清除全部變量。以後,只有 HOME, TERM, PS1, PATH變量設置。的 TERM=$TERM構建將設置 TERM變量在chroot chroot外爲相同的值。此變量所需的程序 vim 少正確運行。若是須要其餘變量,如 CFLAGS CXXFLAGS再次,這是一個好地方讓他們。

從這個角度,沒有須要使用 LFS變量了,由於全部的工做將被限制在LFS文件系統。這是由於Bash shell是告知 $LFS如今是根(/)目錄。

請注意, /tools/bin在去年 PATH。這意味着一個臨時工具將再也不使用一次它的最終版本安裝。這發生在殼不 「還記得」執行的二進制文件的位置這個緣由,經過哈希是關閉 +h選項bash.

請注意, bash提示會說 I have no name!這是正常的,由於 /etc/passwd文件還沒有建立。

請注意

重要的是,全部的命令在本章的其他部分和接下來的章節在chroot環境中運行。若是你由於任何緣由離開這個環境(例如重啓),確保虛擬內核文件系統安裝在解釋道6.2.2節,「安裝和填充/ dev」6.2.3節」,愈來愈多的虛擬內核文件系統」並輸入chroot又在繼續安裝以前。

6.5。建立目錄

是時候LFS建立一些結構文件系統。建立一個標準目錄樹經過發出如下命令:

mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo} mkdir -v  /usr/libexec mkdir -pv /usr/{,local/}share/man/man{1..8}  case $(uname -m) in  x86_64) mkdir -v /lib64 ;; esac  mkdir -v /var/{log,mail,spool} ln -sv /run /var/run ln -sv /run/lock /var/lock mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}

目錄,默認狀況下,建立755年許可模式,但這是不可取的全部目錄。在上面的命令中,兩個變化作了一個用戶的主目錄 root,另外一個爲臨時文件的目錄。

第一個模式更改不只確保任何人均可以進入 /root目錄做爲一個普通用戶同樣與他或她的主目錄。第二個模式變化確保任何用戶均可以寫的 /tmp /var/tmp目錄,但不能刪除其餘用戶的文件。後者是所謂的禁止 「粘的,」最高的1777位元遮罩(1)。

6.5.1。FHS合規報告

基於文件系統的目錄樹層次結構(FHS)(能夠在標準https://wiki.linuxfoundation.org/en/FHS)。FHS還指定了可選的存在一些目錄等 /usr/local/games/usr/share/games。咱們只建立所需的目錄。可是,能夠隨意建立這些目錄。

6.6。建立必要的文件和符號連接

一些程序使用硬鏈接路徑項目不存在。爲了知足這些項目,建立一個符號連接的數量將會取代了真正的文件在本章的課程後,軟件已經安裝:

ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin ln -sv /tools/bin/{install,perl} /usr/bin ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la ln -sv bash /bin/sh

每一個連接的目的:

/bin/bash

許多 bash腳本指定 /bin/bash.

/bin/cat

這個路徑名被硬編碼到Glibc的配置腳本。

/bin/dd

的路徑 dd將被硬編碼到嗎 /usr/bin/libtool實用程序。

/bin/echo

這是知足一個Glibc的測試套件的測試,預計 /bin/echo.

/usr/bin/install

的路徑 install將被硬編碼到嗎 /usr/lib/bash/Makefile.inc文件。

/bin/ln

的路徑 ln將被硬編碼到嗎 /usr/lib/perl5/5.26.0/<target-triplet>/Config_heavy.pl文件。

/bin/pwd

一些 配置腳本、尤爲是Glibc的路徑名硬編碼。

/bin/rm

的路徑 rm將被硬編碼到嗎 /usr/lib/perl5/5.26.0/<target-triplet>/Config_heavy.pl文件。

/bin/stty

這個路徑名被硬編碼到料,所以Binutils和GCC所需測試套件。

/usr/bin/perl

不少Perl腳本硬編碼這個路徑 perl程序。

/usr/lib/libgcc_s.so{,.1}

Glibc pthreads圖書館工做須要這個。

/usr/lib/libstdc++{,.6}

這是一些測試所需的Glibc的測試套件,以及在GMP c++支持。

/usr/lib/libstdc++.la

這能夠防止一個 /tools參考,不然 /usr/lib/libstdc++.laGCC後安裝。

/bin/sh

許多shell腳本硬編碼 /bin/sh.

歷史上,Linux維護一個文件掛載的文件系統的列表 /etc/mtab。現代內核維護該列表內部和暴露給用戶經過 /proc文件系統。爲了知足實用程序指望的存在 /etc/mtab,請建立如下符號連接:

ln -sv /proc/self/mounts /etc/mtab

爲了讓用戶 root可以登陸和名字 「根」識別,必須有相關的條目 /etc/passwd /etc/group文件。

建立 /etc/passwd文件經過運行下面的命令:

cat > /etc/passwd << "EOF"  EOFroot:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/dev/null:/bin/false daemon:x:6:6:Daemon User:/dev/null:/bin/false messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false nobody:x:99:99:Unprivileged User:/dev/null:/bin/false

實際的密碼 root( 「x」這裏使用只是一個佔位符)稍後將被設置。

建立 /etc/group文件經過運行下面的命令:

cat > /etc/group << "EOF"  EOFroot:x:0: bin:x:1:daemon sys:x:2: kmem:x:3: tape:x:4: tty:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: adm:x:16: messagebus:x:18: systemd-journal:x:23: input:x:24: mail:x:34: nogroup:x:99: users:x:999:

建立的組不屬於任何標準組決定在Udev配置的需求在這一章,和部分常見慣例受僱於一些現有的Linux發行版。此外,一些測試套件依賴特定用戶或組。Linux標準基地(LSB,可用http://www.linuxbase.org)建議,除了集團 root和組ID(GID)0,一組 bin1的GID。全部其餘的組名和GID由系統管理員能夠選擇自由自編寫良好的程序不依賴於GID編號,而是使用集團的名稱。

刪除 「我沒有名字!」提示,啓動一個新的shell。由於一個完整的安裝在Glibc第五章 /etc/passwd /etc/group文件被建立,用戶名和組名稱解析將工做:

exec /tools/bin/bash --login +h

注意使用 +h指令。這告訴 bash不使用其內部路徑散列。若是沒有這個指令, bash會記得執行二進制文件的路徑。確保使用新編譯的二進制文件就安裝, +h指令將用於本章的持續時間。

 登陸, agetty, 初始化程序(和其餘人)使用的日誌文件來記錄信息,如登陸到系統時。然而,這些程序不會寫入日誌文件是否已經不存在。初始化日誌文件,給他們適當的權限:

touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664  /var/log/lastlog chmod -v 600  /var/log/btmp

 /var/log/wtmp文件記錄全部登陸和註銷。的 /var/log/lastlog文件記錄每一個用戶上次登陸。的 /var/log/faillog文件記錄失敗的登陸嘗試。的 /var/log/btmp文件記錄糟糕的登陸嘗試。

請注意

 /run/utmp當前登陸用戶的文件記錄。這個文件是動態建立的啓動腳本。

6.7。Linux-4.12.7 API頭

Linux內核API頭(linux-4.12.7.tar.xz)公開的API使用Glibc。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 865 MB

6.7.1。安裝Linux API的頭

Linux內核須要公開的應用程序編程接口(API)系統的C庫(LFS Glibc)使用。這樣作是經過消毒各類C頭文件的Linux內核源代碼tarball。

確保周圍沒有過時的文件和依賴從先前的活動:

make mrproper

如今從源中提取用戶可見的內核頭文件。他們被放置在一箇中間本地目錄複製到所需的位置,由於提取過程在目標目錄中刪除任何現有的文件。也有一些隱藏文件使用的內核開發人員和不須要經過LFS從中間目錄中刪除。

make INSTALL_HDR_PATH=dest headers_install find dest/include \( -name .install -o -name ..install.cmd \) -delete cp -rv dest/include/* /usr/include

6.7.2。Linux API標題的內容

安裝頭: /usr/include/asm/*.h,/usr/include/asm-generic / *。h,/usr/include/drm/*.h,/usr/include/linux/*.h,/usr/include/misc/*.h,/usr/include/mtd/*.h,/usr/include/rdma/*.h,/usr/include/scsi/*.h,/usr/include/sound/*.h,/usr/include/video/*.h,/usr/include/xen/*.h
安裝目錄: /usr/include/asm、/usr/include/asm-generic /usr/include/drm、/usr/include/linux /usr/include/misc,/usr/include/mtd,/usr/include/rdma,/usr/include/scsi,/usr/include/sound /usr/include/video,/usr/include/xen

簡短的描述

/usr/include/asm/*.h

Linux API ASM頭

/usr/include/asm-generic/*.h

Linux API ASM通用標題

/usr/include/drm/*.h

Linux API DRM頭

/usr/include/linux/*.h

Linux API Linux頭

/usr/include/mtd/*.h

Linux API MTD頭

/usr/include/rdma/*.h

Linux API RDMA頭

/usr/include/scsi/*.h

Linux API SCSI頭

/usr/include/sound/*.h

Linux API聲音頭

/usr/include/video/*.h

Linux API視頻頭

/usr/include/xen/*.h

Linux API Xen頭

最後一次更新在

6.8。人-頁面- 4.12

手冊頁包包含超過2200手冊頁。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 27 MB

6.8.1。安裝手冊頁

安裝手冊頁經過運行:

make install

6.8.2。手冊頁的內容

安裝文件: 各類手冊頁

簡短的描述

man pages

描述C編程語言的功能,重要的設備文件,重要的配置文件

最後一次更新在

6.9。glibc - 2.26

Glibc包包含主要的C庫。這個庫提供的基本例程分配內存,搜索目錄,打開和關閉文件、讀寫文件、字符串處理、模式匹配、算術等等。

近似創建時間: 20單位
所需的磁盤空間: 2.0 GB

6.9.1。Glibc的安裝

請注意

Glibc構建系統是獨立的,並將安裝徹底,即便編譯器規格文件和連接器仍然指向 /tools。規格和連接器沒法調整前的Glibc安裝,由於Glibc autoconf測試會給假的結果和擊敗的目標實現一個乾淨的構建。

Glibc的程序使用non-FHS compilant /var/db目錄存儲運行時數據。應用如下補丁做出這樣程序運行時數據存儲在FHS-compliant位置:

patch -Np1 -i ../glibc-2.26-fhs-1.patch

首先建立一個符號連接的兼容性,避免引用/工具在咱們最後的glibc:

ln -sfv /tools/lib/gcc /usr/lib

肯定GCC包括LSB合規的目錄,並建立一個符號連接。此外,x86_64,建立一個兼容性動態加載程序正常工做所需的符號連接:

case $(uname -m) in     i?86)    GCC_INCDIR=/usr/lib/gcc/$(uname -m)-pc-linux-gnu/7.2.0/include             ln -sfv ld-linux.so.2 /lib/ld-lsb.so.3     ;;     x86_64) GCC_INCDIR=/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include             ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64             ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3     ;; esac

刪除一個文件,多是前一次構建遺留的嘗試:

rm -f /usr/include/limits.h

Glibc文檔建議建築Glibc專用的構建目錄:

mkdir -v build cd       build

Glibc準備編譯:

CC="gcc -isystem $GCC_INCDIR -isystem /usr/include" \ ../configure --prefix=/usr                          \              --disable-werror                       \              --enable-kernel=3.2                    \              --enable-stack-protector=strong        \              libc_cv_slibdir=/lib unset GCC_INCDIR

選項和新的配置參數的含義:

CC="gcc -isystem $GCC_INCDIR -isystem /usr/include"

設置gcc和系統包括目錄的位置避免引入無效路徑在調試符號。

--disable-werror

這個選項禁用-Werror選項傳遞給GCC。這是必要的,爲運行測試套件。

--enable-stack-protector=strong

這個選項增長系統安全性經過添加一個已知的金絲雀(一個隨機整數)堆棧在一個函數中,函數返回時,檢查它。若是它改變了,有一個堆棧溢出,程序停止。

libc_cv_slibdir=/lib

這個變量設置正確的圖書館系統。咱們不但願lib64使用。

編譯包:

make

重要的

在本節中,測試套件的Glibc被認爲是相當重要的。不要在任何狀況下跳過它。

通常幾個測試不經過,但你一般能夠忽略下面列出的任何測試失敗。如今測試構建結果:

make check

你可能會看到一些測試失敗。Glibc測試套件有點依賴主機系統。這是一個列表的最多見的問題對於LFS的一些版本:

  • posix / tst-getaddrinfo4 posix / tst-getaddrinfo5架構可能會失敗。

  •  rt / tst-cputimer1 rt / tst-cpuclock2衆所周知,測試失敗。緣由不是徹底理解,但跡象代表,小時機能夠觸發這些失敗的問題。

  • 數學測試有時失敗當系統上運行的CPU不是一個相對較新的英特爾或AMD處理器。

  •  nptl / tst-thread-affinity - { pthread、pthread2 sched }測試可能失敗的緣由還沒有肯定。

  • 其餘測試已知的失敗在一些架構malloc / tst-malloc-usable和nptl / tst-cleanupx4。

雖然這是一個無害的消息,Glibc的安裝階段將抱怨的缺失 /etc/ld.so.conf。防止這個警告:

touch /etc/ld.so.conf

修復生成Makefile跳過一個uneeded完整性檢查失敗的LFS部分環境:

sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile

安裝包:

make install

安裝配置文件和運行時目錄 nscd:

cp -v ../nscd/nscd.conf /etc/nscd.conf mkdir -pv /var/cache/nscd

接下來,安裝場所,能夠使系統響應在不一樣的語言。沒有一個地方是必需的,可是若是有些缺失,將來包將跳太重要的測試點的測試套件。

個別地區能夠安裝使用 localedef程序。如。,第一個 localedef下面的命令將 /usr/share/i18n/locales/cs_CZcharset-independent語境的定義 /usr/share/i18n/charmaps/UTF-8.gzcharmap定義和附加結果 /usr/lib/locale/locale-archive文件。下面的說明將安裝所需的最小區域設置的最優覆蓋測試:

mkdir -pv /usr/lib/locale localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i de_DE -f UTF-8 de_DE.UTF-8 localedef -i en_GB -f UTF-8 en_GB.UTF-8 localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN.GB18030

此外,安裝現場爲本身的國家,語言和字符集。

另外,安裝中列出的全部地區 glibc-2.26/localedata/SUPPORTED文件(它包括上面列出的每個地區和許多更多)在一次耗時的命令以下:

make localedata/install-locales

而後使用 localedef命令建立和安裝場所不列入 glibc-2.26/localedata/SUPPORTED文件在不可能的狀況下你須要他們。

6.9.2。配置Glibc

6.9.2.1。添加nsswitch.conf

 /etc/nsswitch.conf須要建立文件由於Glibc違約不工做在網絡環境。

建立一個新文件 /etc/nsswitch.conf經過運行如下:

cat > /etc/nsswitch.conf << "EOF"  EOF# Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf

6.9.2.2。添加時區數據

安裝和設置時區數據以下:

tar -xf ../../tzdata2017b.tar.gz  ZONEINFO=/usr/share/zoneinfo mkdir -pv $ZONEINFO/{posix,right}  for tz in etcetera southamerica northamerica europe africa antarctica  \           asia australasia backward pacificnew systemv; do     zic -L /dev/null   -d $ZONEINFO       -y "sh yearistype.sh" ${tz}     zic -L /dev/null   -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}     zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz} done  cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO zic -d $ZONEINFO -p America/New_York unset ZONEINFO

珠海命令的意義:

zic -L /dev/null ...

這就產生了posix時區,沒有任何閏秒。把這些都是常規的 zoneinfo zoneinfo/posix。有必要把POSIX時區 zoneinfo,不然各類測試套件將報告錯誤。在嵌入式系統中,空間緊張,你不打算更新時區,你能夠節省1.9 mb經過不使用 posix目錄,可是一些應用程序或測試套件可能產生一些失敗。

zic -L leapseconds ...

這將建立正確的時區,包括閏秒。在嵌入式系統中,空間緊張,你不打算更新時區,或者關心正確的時間,你能夠節省1.9 mb的省略 right目錄中。

zic ... -p ...

這將建立的 posixrules文件。咱們使用紐約由於POSIX須要夏令時規則按照咱們的規則。

肯定當地時區的方法之一是運行如下腳本:

tzselect

回答幾個問題關於位置後,腳本將輸出時區的名稱(例如, 美國/埃德蒙頓)。也有一些其餘可能的時區中列出 /usr/share/zoneinfo 加拿大/東 EST5EDT不肯定的腳本,但能夠使用。

而後建立 /etc/localtime文件經過運行:

cp - v /usr/share/zoneinfo//etc/localtime<xxx>

取代 <xxx>與時區選擇的名稱(如。加拿大/東部)。

6.9.2.3。配置動態加載程序

默認狀況下,動態加載程序(/lib/ld-linux.so.2)經過搜索 /lib /usr/lib所須要的動態庫程序運行。然而,若是有圖書館目錄以外 /lib /usr/lib這些須要被添加到 /etc/ld.so.conf文件動態加載程序爲了找到他們。兩個目錄,一般包含額外的庫 /usr/local/lib /opt/lib,因此這些目錄添加到動態加載程序的搜索路徑。

建立一個新文件 /etc/ld.so.conf經過運行如下:

cat > /etc/ld.so.conf << "EOF"  EOF# Begin /etc/ld.so.conf /usr/local/lib /opt/lib

若是須要,動態加載程序也能夠搜索一個目錄和包含的內容文件。通常包括目錄中的文件的一行指定所需的庫路徑。添加此功能運行如下命令:

cat >> /etc/ld.so.conf << "EOF"  EOF mkdir -pv /etc/ld.so.conf.d# Add an include directory include /etc/ld.so.conf.d/*.conf

6.9.3。Glibc的內容

安裝程序: catchsegv,gencat、getconf getent、iconv iconvconfig,ldconfig,ldd,lddlibc4,語境,localedef,makedb,mtrace,nscd,pldd,sln,sotruss,sprof,tzselect,xtrace zdump,珠海
安裝庫: ld - 2.26。因此,libBrokenLocale。{一},libSegFault。因此,libanl。{一},libc。{一},libc_nonshared。libcidn。因此,受阻。{一},libdl。{一},libg。libieee。libm。{一},libmcheck。libmemusage。因此,libnsl。{一},libnss_compat。因此,libnss_dns。因此,libnss_files。因此,libnss_hesiod。因此,libnss_nis。因此,libnss_nisplus。因此,libpthread。{一},libpthread_nonshared。libresolv。{一},librpcsvc。librt。{一},libthread_db。因此,libutil。{,,}
安裝目錄: /usr/include/arpa、/usr/include/bits /usr/include/gnu、/usr/include/net /usr/include/netash,/usr/include/netatalk,/usr/include/netax25,/usr/include/neteconet,/usr/include/netinet,/usr/include/netipx,/usr/include/netiucv,/usr/include/netpacket,/usr/include/netrom,/usr/include/netrose,/usr/include/nfs,/usr/include/protocols,/usr/include/rpc,/usr/include/rpcsvc,/usr/include/sys,/usr/lib/audit,/usr/lib/gconv,/usr/lib/locale,/usr/libexec/getconf,/usr/share/i18n,/usr/share/zoneinfo /var/cache/nscd,/var/lib/nss_db

簡短的描述

catchsegv

能夠用來建立一個堆棧跟蹤當程序終止段錯誤

gencat

生成消息目錄

getconf

顯示系統配置文件系統特定的變量的值

getent

從行政數據庫條目

iconv

執行字符集轉換

iconvconfig

建立fastload iconv模塊配置文件

ldconfig

配置動態連接器運行時綁定

ldd

報告每一個給定的程序或共享庫所須要的共享庫

lddlibc4

次助攻 ldd與對象文件

語言環境

打印當前語言環境的各類信息

localedef

編譯語言環境規範

makedb

建立一個簡單的數據庫從文本輸入

mtrace

讀取和解釋一個內存跟蹤文件並顯示總結人類可讀的格式

nscd

一個守護進程,它提供了最多見的名字服務請求的緩存

pldd

運行的進��所使用的動態共享對象列表

sln

一個靜態連接的 ln程序

sotruss

共享庫過程調用指定命令的痕跡

sprof

讀取和顯示共享對象分析數據

tzselect

問用戶的位置對應的時區描述系統和報告

xtrace

跟蹤程序執行的打印當前執行的函數

zdump

時區翻斗車

珠海

時區編譯器

ld-2.26.so

輔助項目共享庫的可執行文件

libBrokenLocale

內部使用Glibc的總值破碎的項目(如黑客。,一些主題運行的應用程序)。看到評論 glibc-2.26/locale/broken_cur_max.c的更多信息

libSegFault

段錯誤信號處理器,使用 catchsegv

libanl

異步名稱查找圖書館

libc

主要的C庫

libcidn

內部使用Glibc處理國際化域名的 getaddrinfo()函數

libcrypt

加密庫

libdl

動態連接庫的接口

libg

虛擬圖書館不含功能。之前是一個運行時庫 g + +

libieee

連接在此模塊部隊錯誤處理規則數學函數定義的電氣和電子工程師協會(IEEE)。缺省值是POSIX。1錯誤處理

libm

數學庫

libmcheck

打開內存分配與時檢查

libmemusage

所使用的 memusage幫助收集程序的內存使用的信息

libnsl

網絡服務庫

libnss

名稱服務切換庫,包含函數解析主機名、用戶名、組名稱、別名、服務、協議等。

libpthread

POSIX線程庫

libresolv

包含函數用於建立、發送和解釋包互聯網域名服務器

librpcsvc

包含功能提供雜項RPC服務

librt

包含功能提供大部分的POSIX指定的接口。1 b實時擴展

libthread_db

包含多線程程序的功能很是有用的調試器

libutil

包含代碼 「標準函數中使用許多不一樣的Unix實用工具

最後一次更新在

6.10。調整工具鏈

如今最後的C庫安裝了,是時候調整工具鏈,這樣它將鏈接任何新編譯程序對這些新的庫。

首先,備份 /tools連接器,代之以調整連接器在第5章。咱們還將建立一個對應的連接 /tools/$(uname -m)-pc-linux-gnu/bin:

mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld

接下來,修改GCC規格文件,以便它指向新的動態連接器。簡單地刪除的全部實例 「/工具」應該留給咱們的正確路徑動態連接器。也調整規格文件,以便GCC知道在哪裏能夠找到正確的標題和Glibc啓動文件。一個 sed命令完成:

gcc -dumpspecs | sed -e 's@/tools@@g'                   \     -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \     -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' >      \     `dirname $(gcc --print-libgcc-file-name)`/specs

是個好主意視覺檢查規格文件來驗證預期的變化其實是。

必須在這一點上,確保基本功能(調整工具鏈編譯和連接)是按預期工做。爲此,執行如下健康檢查:

echo 'int main(){}' > dummy.c cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib'

應該沒有錯誤,和最後一個命令的輸出將(容許特定於平臺的動態連接器的不一樣名稱):

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

注意,在64位系統上 /lib是咱們的動態連接器的位置,而是經過一個符號連接/ lib64訪問。

請注意

在32位系統上應該/lib/ld-linux.so.2解釋器。

確保咱們設置使用正確的啓動文件:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

最後一個命令的輸出應該是:

/usr/lib/../lib/crt1.o succeeded /usr/lib/../lib/crti.o succeeded /usr/lib/../lib/crtn.o succeeded

驗證編譯器尋找正確的頭文件:

grep -B1 '^ /usr/include' dummy.log

這個命令應該返回如下輸出:

#include <...> search starts here:  /usr/include

接下來,驗證新連接器使用正確的搜索路徑:

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

引用路徑與「-linux-gnu」組件應該被忽略,可是最後一個命令的輸出應該是:

SEARCH_DIR("/usr/lib") SEARCH_DIR("/lib")

下一個確保咱們使用正確的libc:

grep "/lib.*/libc.so.6 " dummy.log

最後一個命令的輸出應該是:

attempt to open /lib/libc.so.6 succeeded

最後,確保使用正確的GCC動態連接器:

grep found dummy.log

最後一個命令的輸出應該(容許特定於平臺的動態連接器的不一樣名稱):

found ld-linux-x86-64.so.2 at /lib/ld-linux-x86-64.so.2

若是輸出沒有出現如上所示仍是沒有收到,而後是嚴重錯誤的。調查和追溯的步驟找出問題並糾正它。最可能的緣由是,調整與規範文件出現了錯誤。任何問題須要解決在繼續以前的過程。

一旦一切都是正常工做,清理測試文件:

rm -v dummy.c a.out dummy.log

6.11。Zlib-1.2.11

Zlib壓縮和解壓縮包中包含一些程序所使用的例程。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 4.5 MB

6.11.1。安裝Zlib

Zlib準備編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

共享庫須要搬到 /lib,結果 .so文件中 /usr/lib須要從新建立:

mv -v /usr/lib/libz.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so

6.11.2。Zlib內容

安裝庫: libz。{,,}

簡短的描述

libz

包含一些程序所使用的壓縮和解壓縮功能

最後一次更新在

6.12。文件- 5.31

文件包包含一個實用工具來肯定一個給定的文件或文件的類型。

近似創建時間: 0.1業務單位
所需的磁盤空間: 16 MB

6.12.1。安裝的文件

準備文件進行編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

6.12.2。文件的內容

安裝程序: 文件
安裝庫: libmagic.so

簡短的描述

文件

嘗試每個給定的文件進行分類;它經過執行幾個tests-file系統測試,神奇數字測試,和語言測試

libmagic

包含神奇數字識別的程序,使用的 文件程序

最後一次更新在

6.13。readline - 7.0

Readline包是一組庫提供了命令行編輯和歷史功能。

近似創建時間: 0.1業務單位
所需的磁盤空間: 15 MB

6.13.1。安裝Readline

從新安裝Readline會致使舊的圖書館搬到< libraryname > .old。雖然這一般不是一個問題,在某些狀況下,它能夠觸發一個連接錯誤 ldconfig。這能夠避免經過發出如下兩個種子:

sed -i '/MV.*old/d' Makefile.in sed -i '/{OLDSUFF}/c:' support/shlib-install

Readline準備編譯:

./configure --prefix=/usr    \             --disable-static \             --docdir=/usr/share/doc/readline-7.0

編譯包:

make SHLIB_LIBS="-L/tools/lib -lncursesw"

使選項的含義:

SHLIB_LIBS="-L/tools/lib -lncursesw"

這個選項Readline連接反對力量 libncursesw圖書館。

這個包不有一個測試套件。

安裝包:

make SHLIB_LIBS="-L/tools/lib -lncurses" install

如今將動態庫移動到一個更合適的位置並修復了一些符號連接:

mv -v /usr/lib/lib{readline,history}.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libreadline.so) /usr/lib/libreadline.so ln -sfv ../../lib/$(readlink /usr/lib/libhistory.so ) /usr/lib/libhistory.so

若是須要,安裝文檔:

install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-7.0

6.13.2。Readline的內容

安裝庫: libhistory。因此libreadline.so
安裝目錄: /usr/include/readline、/usr/share/readline /usr/share/doc/readline - 7.0

簡短的描述

libhistory

回憶的歷史提供了一致的用戶界面

libreadline

艾滋病在離散程序用戶界面的一致性,須要提供一個命令行界面

最後一次更新在

6.14。M4-1.4.18

M4包包含一個宏處理器。

近似創建時間: 0.4業務單位
所需的磁盤空間: 30 MB

6.14.1。M4的安裝

M4準備編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

6.14.2。M4的內容

安裝程序: m4

簡短的描述

m4

給定的文件副本,同時擴大這些宏宏,它們包含(內置的或用戶定義的,能夠有任意數量的參數。除了執行宏擴展, m4內置函數包括命名文件,運行Unix命令,執行整數運算,操縱文本,遞歸,等 m4程序能夠使用做爲一個編譯器的前端或宏處理器自己。)

最後一次更新在

6.15。Bc-1.07.1

Bc包包含一個任意精度數值處理語言。

近似創建時間: 0.1業務單位
所需的磁盤空間: 3.6 MB

6.15.1。公元前的安裝

首先,改變內部腳本使用 sed而不是 艾德:

cat > bc/fix-libmath_h << "EOF" #! /bin/bash sed -e '1   s/^/{"/' \     -e     's/$/",/' \     -e '2,$ s/^/"/'  \     -e   '$ d'       \     -i libmath.h  sed -e '$ s/$/0}/' \     -i libmath.h EOF

建立臨時符號連接的包能夠找到readline庫並確認其所需libncurses圖書館是可用的。即便/工具/ lib中的庫是在這一點上,該系統將在本章的最後使用特性。

ln -sv /tools/lib/libncursesw.so.6 /usr/lib/libncursesw.so.6 ln -sfv libncurses.so.6 /usr/lib/libncurses.so

修復的問題 配置因爲在LFS的早期階段丟失的文件:

sed -i -e '/flex/s/as_fn_error/: ;; # &/' configure

公元前準備編譯:

./configure --prefix=/usr           \             --with-readline         \             --mandir=/usr/share/man \             --infodir=/usr/share/info

配置選項的含義:

--with-readline

這個選項告訴Bc使用 readline圖書館已經安裝在系統上,而不是使用本身的readline版本。

編譯包:

make

公元前測試,運行下面的命令。有至關多的輸出,因此你可能想要把輸出重定向到一個文件。有一個很是小的比例的測試(10 12144),將顯示一個圓滑錯誤在最後數字。

echo "quit" | ./bc/bc -l Test/checklib.b

安裝包:

make install

6.15.2。公元前的內容

安裝程序: bc和直流

簡短的描述

公元前

是一個命令行計算器

直流

是一個逆波蘭命令行計算器

最後一次更新在

6.16。binutils - 2.29

Binutils包包含一個連接,一個彙編程序,和其餘工具來處理對象文件。

近似創建時間: 5.8業務單位
所需的磁盤空間: 4.2 GB

6.16.1。安裝Binutils

驗證企業是否正常工做在chroot環境中經過執行一個簡單的測試:

expect -c "spawn ls"

這個命令應該輸出以下:

spawn ls

相反,若是輸出包括如下消息,那麼環境不創建適當的企業操做。這個問題須要解決在運行測試套件以前Binutils和GCC:

The system has no more ptys. Ask your system administrator to create more.

Binutils文檔建議建築Binutils專用的構建目錄:

mkdir -v build cd       build

Binutils準備編譯:

../configure --prefix=/usr       \              --enable-gold       \              --enable-ld=default \              --enable-plugins    \              --enable-shared     \              --disable-werror    \              --with-system-zlib

配置參數的含義:

--enable-gold

創建黃金連接器和安裝它ld.gold(默認連接器)。

--enable-ld=default

創建最初的快速公車提供連接器和安裝它ld(默認連接器)和ld.bfd。

--enable-plugins

使插件支持連接器。

--with-system-zlib

使用安裝zlib庫而不是建築包括版本。

編譯包:

make tooldir=/usr

使參數的含義:

tooldir=/usr

一般,tooldir(可執行文件的目錄最終將位於)設置 $(exec_prefix)/$(target_alias)。例如,x86_64機器將擴大 /usr/x86_64-unknown-linux-gnu。由於這是一個定製的系統,這種有針對性的目錄 /usr不是必需的。 $(exec_prefix)/$(target_alias)若是系統被用來保存��用(例如,編譯一個包在一個英特爾機器生成的代碼,能夠在PowerPC機器上執行)。

重要的

Binutils測試套件的這一部分被認爲是相當重要的。在任何狀況下不要跳過它。

測試結果:

make -k check

一個測試,debug_msg。sh,失敗。

安裝包:

make tooldir=/usr install

6.16.2。Binutils內容

安裝程序: addr2line,ar,c++ filt,elfedit,gprof,ld,ld.bfd,ld.gold,nm,objcopy,objdump,ranlib,readelf,大小、字符串、和地帶
安裝庫: libbfd。{一個,因此}和libopcodes。{,,}
安裝目錄: /usr/lib/ldscripts

簡短的描述

addr2line

翻譯程序地址文件名和行號;給定一個地址和一個可執行的名稱,它使用調試信息的可執行文件,以肯定哪些源文件和行號與地址相關聯

基於「增大化現實」技術

建立、修改和提取物檔案

做爲

一個組裝的輸出的彙編程序 海灣合做委員會成目標文件

c++ filt

鏈接器用來de-mangle c++和Java符號和防止重載函數發生衝突

elfedit

更新精靈ELF文件的標題

gprof

顯示調用圖配置文件數據

ld

一個連接器相結合的對象和歸檔文件到一個文件,將它們的數據和捆綁符號引用

ld.gold

下降版本只支持的ld elf對象文件格式

ld.bfd

硬連接 ld

納米

列出了符號發生在一個給定的對象文件

objcopy

翻譯一個文件到另外一個類型的對象

objdump

顯示給定對象的信息文件,選項控制特定信息顯示;顯示的信息是有用的程序員正在編譯工具

ranlib

生成一個索引的內容存檔並將其存儲在存檔;定義的索引列表的全部符號歸檔成員可重定位的目標文件

readelf

顯示有關精靈的信息類型的二進制文件

大小

列出了部分尺寸和給定的對象文件的總大小

字符串

輸出,對於每一個給定的文件,可打印字符的序列至少指定的長度(4)違約;對象文件,打印,默認狀況下,只有字符串的初始化和加載部分其餘類型的文件時,它會掃描整個文件

丟棄對象文件的符號

libbfd

二進制文件描述符的圖書館

libopcodes

一個庫來處理opcodes-the 「可讀的文本版本的處理器指令;它是用於構建實用程序 objdump

最後一次更新在

6.17。GMP-6.1.2

GMP包包含數學庫。這些有用的高精度計算的功能。

近似創建時間: 1.2業務單位
所需的磁盤空間: 59 MB

6.17.1。GMP的安裝

請注意

若是你正在構建32位x86,但你有一個CPU運行64位代碼的能力 和你有指定的 CFLAGS在環境中,configure腳本將嘗試配置64 -位和失敗。避免這種狀況經過調用下面的配置命令

。/配置……ABI=32

請注意

GMP生產庫的默認設置爲主機處理器優化。若是庫適合處理器能力低於所需的主機的CPU,通用庫能夠經過運行下面的建立:

cp -v configfsf.guess config.guess cp -v configfsf.sub   config.sub

GMP準備編譯:

./configure --prefix=/usr    \             --enable-cxx     \             --disable-static \             --docdir=/usr/share/doc/gmp-6.1.2

新的配置選項的含義:

--enable-cxx

該參數使c++支持

--docdir=/usr/share/doc/gmp-6.1.2

這個變量指定了正確的文檔。

編譯包和生成HTML文檔:

make make html

重要的

測試套件的GMP在本節中被認爲是相當重要的。在任何狀況下不要跳過它。

測試結果:

make check 2>&1 | tee gmp-check-log

謹慎

gmp中的代碼是高度優化的處理器建造的地方。偶爾,檢測處理器識別錯系統功能的代碼和測試中會有錯誤或其餘應用程序使用的gmp庫消息「非法指令」。在這種狀況下,gmp應配置選項——構建= x86_64-unknown-linux-gnu和重建。

確保全部190年測試套件測試經過。檢查結果經過發出如下命令:

awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log

安裝包和它的文檔:

make install make install-html

6.17.2。GMP的內容

安裝庫: libgmp。因此libgmpxx.so
安裝目錄: /usr/share/doc/gmp-6.1.2

簡短的描述

libgmp

包含精確數學函數

libgmpxx

包含c++精密的數學函數

最後一次更新在

6.18。MPFR-3.1.5

MPFR包包含多個精確數學的函數。

近似創建時間: 0.8業務單位
所需的磁盤空間: 45 MB

6.18.1。安裝MPFR

MPFR準備編譯:

./configure --prefix=/usr        \             --disable-static     \             --enable-thread-safe \             --docdir=/usr/share/doc/mpfr-3.1.5

編譯包和生成HTML文檔:

make make html

重要的

MPFR測試套件的這一部分被認爲是相當重要的。在任何狀況下不要跳過它。

測試結果並確保全部測試經過:

make check

安裝包和它的文檔:

make install make install-html

6.18.2。MPFR內容

安裝庫: libmpfr.so
安裝目錄: /usr/share/doc/mpfr-3.1.5

簡短的描述

libmpfr

包含多種精密的數學函數

最後一次更新在

6.19。MPC-1.0.3

MPC包包含一個庫複數的運算與任意精度高和正確的結果四捨五入。

近似創建時間: 0.3業務單位
所需的磁盤空間: 17個MB

6.19.1。MPC的安裝

英國央行貨幣政策委員會準備編譯:

./configure --prefix=/usr    \             --disable-static \             --docdir=/usr/share/doc/mpc-1.0.3

編譯包和生成HTML文檔:

make make html

測試結果,問題:

make check

安裝包和它的文檔:

make install make install-html

6.19.2。MPC的內容

安裝庫: libmpc.so
安裝目錄: /usr/share/doc/mpc-1.0.3

簡短的描述

libmpc

包含複雜的數學函數

最後一次更新在

6.20。GCC-7.2.0

GCC包包含GNU編譯器集合,包括C和c++編譯器。

近似創建時間: 82年業務單位(測試)
所需的磁盤空間: 3.2 GB

6.20.1。安裝GCC

若是基於x86_64,改變默認的64位庫目錄名稱 「自由」:

case $(uname -m) in   x86_64)     sed -e '/m64=/s/lib64/lib/' \         -i.orig gcc/config/i386/t-linux64   ;; esac

刪除以前建立的符號連接做爲最終gcc包括將安裝:

rm -f /usr/lib/gcc

GCC文檔建議構建GCC在一個專用的構建目錄:

mkdir -v build cd       build

準備GCC編譯:

SED=sed                               \ ../configure --prefix=/usr            \              --enable-languages=c,c++ \              --disable-multilib       \              --disable-bootstrap      \              --with-system-zlib

請注意,對於其餘語言,有一些還沒有公佈的先決條件。看到BLFS書說明如何構建全部的GCC支持的語言。

新的配置參數的含義:

SED=sed

設置環境變量能夠防止一個硬編碼的路徑/工具/ bin / sed。

--with-system-zlib

這個開關告訴GCC連接到系統安裝Zlib庫的副本,而不是本身內部的副本。

編譯包:

make

重要的

在本節中,GCC的測試套件被認爲是相當重要的。不要在任何狀況下跳過它。

在GCC測試套件是一組測試排氣堆棧,因此增長堆棧大小以前運行測試:

ulimit -s 32768

測試結果,但不要停在錯誤:

make -k check

接收測試套件的總結結果,運行:

../contrib/test_summary

的總結,管的輸出 grep -A7 Summ.

結果能夠與那些位於http://www.linuxfromscratch.org/lfs/build-logs/8.1/http://gcc.gnu.org/ml/gcc-testresults/.

一些意想不到的失敗老是沒法避免。GCC開發人員一般是意識到這些問題,但沒有解決。特別是,五libstdc + +測試套件的測試失敗做爲根用戶運行時被稱爲咱們這裏所作的。除非測試結果有很大的不一樣從那些在上述URL,它是安全的繼續。

請注意

在一些內核配置的組合和AMD處理器可能有超過1100失敗在gcc。目標/ i386 / mpx測試(這是爲了測試mpx選擇最新的英特爾處理器)。這些能夠安全地忽略AMD處理器。

安裝包:

make install

建立一個符號連接的要求FHS「歷史」的緣由。

ln -sv ../usr/bin/cpp /lib

許多軟件包使用這個名字 cc調用C編譯器。爲了知足這些包,建立一個符號連接:

ln -sv gcc /usr/bin/cc

添加一個兼容性符號連接,使建築項目與連接時優化(維度):

install -v -dm755 /usr/lib/bfd-plugins ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/7.2.0/liblto_plugin.so \         /usr/lib/bfd-plugins/

如今咱們最後的工具鏈,重要的是再次確保編譯和連接��正常工做。咱們經過執行相同的健康檢查咱們早些時候章:

echo 'int main(){}' > dummy.c cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib'

應該沒有錯誤,和最後一個命令的輸出將(容許特定於平臺的動態連接器的不一樣名稱):

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

確保咱們設置使用正確的啓動文件:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

最後一個命令的輸出應該是:

/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/crt1.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/crti.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/crtn.o succeeded

根據你的機器架構,上面可能會略有不一樣,區別一般後目錄的名稱 /usr/lib/gcc。最重要的是 海灣合做委員會發現這三個 crt*.o下的文件 /usr/lib目錄中。

驗證編譯器尋找正確的頭文件:

grep -B4 '^ /usr/include' dummy.log

這個命令應該返回如下輸出:

#include <...> search starts here:  /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include  /usr/local/include  /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include-fixed  /usr/include

再次注意,目錄命名你的目標三聯體可能和上面的不一樣,取決於您的體系結構。

請注意

安裝版本4.3.0,GCC如今無條件安裝 limits.h文件到私人 include-fixed目錄,目錄必須到位。

接下來,驗證新連接器使用正確的搜索路徑:

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

引用路徑與「-linux-gnu」組件應該被忽略,可是最後一個命令的輸出應該是:

SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64") SEARCH_DIR("/usr/local/lib64") SEARCH_DIR("/lib64") SEARCH_DIR("/usr/lib64") SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib") SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib");

一個32位的系統可能會看到一些不一樣的目錄。例如,下面是一個i686機器的輸出:

SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32") SEARCH_DIR("/usr/local/lib32") SEARCH_DIR("/lib32") SEARCH_DIR("/usr/lib32") SEARCH_DIR("/usr/i686-pc-linux-gnu/lib") SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib");

下一個確保咱們使用正確的libc:

grep "/lib.*/libc.so.6 " dummy.log

最後一個命令的輸出應該是:

attempt to open /lib/libc.so.6 succeeded

最後,確保使用正確的GCC動態連接器:

grep found dummy.log

最後一個命令的輸出應該(容許特定於平臺的動態連接器的不一樣名稱):

found ld-linux-x86-64.so.2 at /lib/ld-linux-x86-64.so.2

若是輸出沒有出現如上所示仍是沒有收到,而後是嚴重錯誤的。調查和追溯的步驟找出問題並糾正它。最可能的緣由是,調整與規範文件出現了錯誤。任何問題須要解決在繼續以前的過程。

一旦一切都是正常工做,清理測試文件:

rm -v dummy.c a.out dummy.log

最後,把錯誤的文件:

mkdir -pv /usr/share/gdb/auto-load/usr/lib mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib

6.20.2。GCC的內容

安裝程序: c++,cc(gcc)連接,cpp,g + +,gcc,gcc-ar,gcc-nm gcc-ranlib,gcov
安裝庫: libasan。{一},libatomic。{一},libgcc。libgcc_eh。libgcc_s。因此,libgcov。libgomp。{一},libiberty。libitm。{一},liblto_plugin。因此,libquadmath。{一},libssp。{一},libssp_nonshared。libstdc + +。{一},libsupc + +。1、libtsan。{,,}
安裝目錄: /usr/include/c + +,/usr/lib/gcc /usr/libexec/gcc,/usr/share/gcc-7.2.0

簡短的描述

c++

c++編譯器

cc

C編譯器

cpp

C預處理器;它使用編譯器擴大# include,#定義、源文件和相似的語句

g + +

c++編譯器

海灣合做委員會

C編譯器

gcc-ar

一個包裝 基於「增大化現實」技術將插件添加到命令行中。這個程序只是用於添加」連接優化」並非有用的用默認構建選項

gcc-nm

一個包裝 納米將插件添加到命令行中。這個程序只是用於添加」連接優化」並非有用的用默認構建選項

gcc-ranlib

一個包裝 ranlib將插件添加到命令行中。這個程序只是用於添加」連接優化」並非有用的用默認構建選項

gcov

一個覆蓋測試工具;它是用來分析程序來肯定優化最具效果

libasan

洗手液運行時庫的地址

libgcc

包含運行時支持 海灣合做委員會

libgcov

這個庫在程序當GCC有關指示,使分析

libgomp

GNU的OpenMP API實現多平臺共享內存並行編程在C / c++和Fortran

libiberty

包含各類GNU計劃使用的例程,包括 getopt, obstack會, strerror, strtol, strtoul

liblto_plugin

GCC的連接時優化(LTO)插件讓GCC跨編譯單元進行優化

libquadmath

GCC四精確數學庫的API

libssp

包含程序支持GCC的stack - smashing保護功能

libstdc++

標準c++庫

libsupc++

提供平常支持c++編程語言

libtsan

洗手液的線程運行時庫

最後一次更新在

6.21。Bzip2-1.0.6

Bzip2包包含壓縮和解壓文件的程序。壓縮的文本文件 bzip2產生一個更好的壓縮比與傳統的比例 gzip.

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 2.3 MB

6.21.1。安裝Bzip2

應用補丁,安裝這個包的文檔:

patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch

下面的命令確保安裝符號連接是相對的:

sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile

確保手冊頁安裝到正確的位置:

sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile

Bzip2準備編譯:

make -f Makefile-libbz2_so make clean

使參數的含義:

-f Makefile-libbz2_so

這將致使Bzip2建成使用不一樣 Makefile文件,在這種狀況下 Makefile-libbz2_so文件,該文件建立一個動態的 libbz2.so庫和連接Bzip2公用事業。

編譯和測試包:

make

安裝程序:

make PREFIX=/usr install

安裝共享 bzip2二進制的 /bin目錄,進行一些必要的符號連接,和清理:

cp -v bzip2-shared /bin/bzip2 cp -av libbz2.so* /lib ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so rm -v /usr/bin/{bunzip2,bzcat,bzip2} ln -sv bzip2 /bin/bunzip2 ln -sv bzip2 /bin/bzcat

6.21.2。Bzip2內容

安裝程序: bunzip2 bzip2(連接),bzcat bzip2(連接),bzcmp bzdiff(連接),bzdiff,bzegrep bzgrep(連接),bzfgrep bzgrep(連接),bzgrep,bzip2,bzip2recover,bzless bzmore(連接),和bzmore
安裝庫: libbz2。{,,}
安裝目錄: /usr/share/doc/bzip2-1.0.6

簡短的描述

bunzip2

解壓縮bzipped文件

bzcat

解壓縮到標準輸出

bzcmp

運行 cmpbzipped文件

bzdiff

運行 diffbzipped文件

bzegrep

運行 egrepbzipped文件

bzfgrep

運行 fgrepbzipped文件

bzgrep

運行 grepbzipped文件

bzip2

壓縮文件使用burrows - wheeler排序文本塊和霍夫曼編碼壓縮算法;壓縮率比經過更傳統的壓縮機使用 「Lempel-Ziv算法,如 gzip

bzip2recover

試圖從受損bzipped文件恢復數據

bzless

運行 bzipped文件

bzmore

運行 更多bzipped文件

libbz2

圖書館實現無損,塊分類數據壓縮,使用burrows - wheeler算法

最後一次更新在

6.22。Pkg-config-0.29.2

pkg-config包包含一個工具,經過包括路徑和/或庫路徑在配置和構建工具使文件執行。

近似創建時間: 0.3業務單位
所需的磁盤空間: 28 MB

6.22.1。安裝Pkg-config

Pkg-config準備編譯:

./configure --prefix=/usr              \             --with-internal-glib       \             --disable-host-tool        \             --docdir=/usr/share/doc/pkg-config-0.29.2

新的配置選項的含義:

--with-internal-glib

這將容許pkg-config使用其內部版本Glib由於外部LFS版本不可用。

--disable-host-tool

這個選項禁用無用的建立硬連接到pkg-config程序。

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

6.22.2。Pkg-config內容

安裝程序: pkg-config
安裝目錄: /usr/share/doc/pkg-config-0.29.2

簡短的描述

pkg-config

返回指定的庫或包元數據信息

最後一次更新在

6.23。ncurses - 6.0

Ncurses包包含庫terminal-independent處理字符的屏幕。

近似創建時間: 0.3業務單位
所需的磁盤空間: 39 MB

6.23.1。安裝Ncurses

不安裝一個靜態庫,不是由配置:

sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in

Ncurses準備編譯:

./configure --prefix=/usr           \             --mandir=/usr/share/man \             --with-shared           \             --without-debug         \             --without-normal        \             --enable-pc-files       \             --enable-widec

新的配置選項的含義:

--enable-widec

這個開關會致使寬度字符庫(例如, libncursesw.so.6.0)創建而不是正常的(例如, libncurses.so.6.0)。這些寬度字符庫可用在多字節和傳統的8位地區,而正常庫只在8位場所正常工做。寬字符和正常庫源代碼兼容,但不是二進制兼容的。

--enable-pc-files

這個開關生成並安裝。爲pkg-config電腦文件。

--without-normal

這個開關禁用構建和安裝大多數靜態庫。

編譯包:

make

這個包有一個測試套件,但它只能包已經安裝後運行。測試中駐留 test/目錄中。看到 README該目錄中的文件爲進一步的細節。

安裝包:

make install

移動的共享庫 /lib目錄,預計他們將駐留的地方:

mv -v /usr/lib/libncursesw.so.6* /lib

由於圖書館移動,一個符號連接指向一個不存在的文件。重建:

ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so

許多應用程序仍預計連接器可以找到non-wide-character Ncurses庫。欺騙這樣的應用程序與寬度字符庫連接的符號連接和連接器腳本:

for lib in ncurses form panel menu ; do     rm -vf                    /usr/lib/lib${lib}.so     echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so     ln -sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc done

最後,確保尋找舊的應用程序 -lcurses在構建時仍能夠建造的:

rm -vf                     /usr/lib/libcursesw.so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so ln -sfv libncurses.so      /usr/lib/libcurses.so

若是須要,安裝Ncurses文檔:

mkdir -v       /usr/share/doc/ncurses-6.0 cp -v -R doc/* /usr/share/doc/ncurses-6.0

請注意

上面的指令不建立non-wide-character Ncurses圖書館由於沒有包安裝編譯源代碼將在運行時連接攻擊他們。然而,惟一已知的二進制只讀應用程序符合連接對non-wide-character Ncurses庫須要版本5。若是你必須有這樣的圖書館由於某些二進制只讀應用程序或符合LSB,符合構建包再次與如下命令:

make distclean ./configure --prefix=/usr    \             --with-shared    \             --without-normal \             --without-debug  \             --without-cxx-binding \             --with-abi-version=5  make sources libs cp -av lib/lib*.so.5* /usr/lib

6.23.2。Ncurses的內容

安裝程序: captoinfo抽搐(連接),清晰,infocmp,infotocap抽搐(連接),ncursesw6-config,重置tset(連接),標籤、抽搐,腳趾,tput,tset
安裝庫: libcursesw。因此(libncursesw.so符號連接和連接器腳本),libformw。因此,libmenuw。因此,libncursesw。因此,libncurses + + w。libpanelw。因此,non-wide-character同行沒有在圖書館「w」的名字。
安裝目錄: /usr/share/tabset、/usr/share/terminfo /usr/share/doc/ncurses - 6.0

簡短的描述

captoinfo

termcap描述轉換成terminfo描述

清晰的

清除屏幕,若是可能的話

infocmp

比較或打印出terminfo描述

infotocap

terminfo描述轉換成termcap描述

ncursesw6-config

爲ncurses提供配置信息

重置

從新啓動一個終端的默認值

選項卡

清除並設置製表符設置終端

抽搐

terminfo entry-description編譯器,terminfo文件從源格式轉換爲所需的二進制格式ncurses庫例程(terminfo文件包含信息在某個終端的功能。)

腳趾

列出了全部可用的終端類型,給主名稱和描述

tput

使terminal-dependent功能的值可用於殼;它也能夠用於重置或初始化一個終端或報告其長名稱

tset

能夠用來初始化終端

libcursesw

的連接 libncursesw

libncursesw

包含函數來顯示文本終端屏幕上在許多複雜的方式;使用這些函數的一個很好的例子是在內核的菜單顯示 使menuconfig

libformw

包含功能實現形式

libmenuw

包含實現菜單功能

libpanelw

包含函數來實現板

最後一次更新在

6.24。Attr-2.4.47

attr包包含公用事業管理文件系統對象的擴展屬性。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 3.3 MB

6.24.1。安裝Attr

修改的文檔目錄,以便它是版本目錄:

sed -i -e 's|/@pkg_name@|&-@pkg_version@|' include/builddefs.in

防止安裝已經安裝的手冊頁 man pages包:

sed -i -e "/SUBDIRS/s|man[25]||g" man/Makefile

修復一個問題在測試過程引發的變化在perl - 5.26:

sed -i 's:{(:\\{(:' test/run

準備Attr編譯:

./configure --prefix=/usr \             --bindir=/bin \             --disable-static

編譯包:

make

測試須要運行在一個文件系統,支持擴展屬性如ext二、ext三、或ext4文件系統。測試也稱失敗若是同時運行多個測試(大於1 - j選項)。測試結果,問題:

make -j1 tests root-tests

安裝包:

make install install-dev install-lib chmod -v 755 /usr/lib/libattr.so

共享庫須要搬到 /lib,結果 .so文件中 /usr/lib須要從新建立:

mv -v /usr/lib/libattr.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libattr.so) /usr/lib/libattr.so

6.24.2。內容Attr

安裝程序: attr,getfattr,setattr
安裝庫: libattr.so
安裝目錄: /usr/include/attr和/usr/share/doc/attr-2.4.47

簡短的描述

attr

擴展屬性的文件系統對象

getfattr

文件系統對象的擴展屬性

setattr

設置文件系統對象的擴展屬性

libattr

包含libbrary操縱擴展屬性的功能

最後一次更新在

6.25。Acl-2.2.52

Acl包包含公用事業管理訪問控制列表,用於定義更細粒度的可自由支配的文件和目錄的訪問權限。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 4.8 MB

6.25.1。Acl的安裝

修改的文檔目錄,以便它是版本目錄:

sed -i -e 's|/@pkg_name@|&-@pkg_version@|' include/builddefs.in

解決一些破碎的測試:

sed -i "s:| sed.*::g" test/{sbits-restore,cp,misc}.test

修復一個問題在測試過程引發的變化在perl - 5.26:

sed -i 's/{(/\\{(/' test/run

此外,修復一個缺陷的緣由 getfacl - e段錯誤過於長組名稱:

sed -i -e "/TABS-1;/a if (x > (TABS-1)) x = (TABS-1);" \     libacl/__acl_to_any_text.c

Acl準備編譯:

./configure --prefix=/usr    \             --bindir=/bin    \             --disable-static \             --libexecdir=/usr/lib

編譯包:

make

Acl測試須要運行在一個文件系統,支持訪問控制 Coreutils已建成的Acl庫。若是須要,回到這個包和運行 使j - 1的測試後 Coreutils是創建在本章後面。

安裝包:

make install install-dev install-lib chmod -v 755 /usr/lib/libacl.so

共享庫須要搬到 /lib,結果 .so文件中 /usr/lib須要從新建立:

mv -v /usr/lib/libacl.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libacl.so) /usr/lib/libacl.so

6.25.2。Acl的內容

安裝程序: chacl、getfacl setfacl
安裝庫: libacl.so
安裝目錄: /usr/include/acl和/usr/share/doc/acl-2.2.52

簡短的描述

chacl

改變文件或目錄的訪問控制列表

getfacl

文件訪問控制列表

setfacl

設置文件訪問控制列表

libacl

包含的庫函數操做訪問控制列表

最後一次更新在

6.26。libcap - 2.25

從googlecode得到Libcap包實現了用戶空間接口的POSIX 1003.1 Linux內核中的可用功能。這些功能分區的全部強大的根特權爲一組不一樣的特權。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 1.3 MB

6.26.1。安裝Libcap

防止一個靜態庫安裝:

sed -i '/install.*STALIBNAME/d' libcap/Makefile

編譯包:

make

這個包不有一個測試套件。

安裝包:

make RAISE_SETFCAP=no lib=lib prefix=/usr install chmod -v 755 /usr/lib/libcap.so

使選項的含義:

RAISE_SETFCAP=no

這個參數跳過試圖使用 setcap在自己。這避免了安裝偏差若是內核或文件系統不支持擴展功能。

lib=lib

這個參數安裝的圖書館 $prefix/lib而不是 $prefix/lib64x86_64。它沒有x86上的效果。

共享庫須要搬到 /lib,結果 .so文件中 /usr/lib須要從新建立:

mv -v /usr/lib/libcap.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libcap.so) /usr/lib/libcap.so

6.26.2。Libcap內容

安裝程序: capsh、getcap getpcaps,setcap
安裝庫: libcap.so

簡短的描述

capsh

殼包裝探索和約束功能的支持

getcap

檢查文件能力

getpcaps

顯示查詢過程的能力(es)

libcap

包含操縱POSIX 1003.1 e的庫函數功能

setcap

設置文件能力

最後一次更新在

6.27。sed - 4.4

Sed包包含一個流編輯器。

近似創建時間: 0.3業務單位
所需的磁盤空間: 25 MB

6.27.1。Sed的安裝

首先解決一個問題在LFS環境和刪除一個失敗的測試:

sed -i 's/usr/tools/'                 build-aux/help2man sed -i 's/testsuite.panic-tests.sh//' Makefile.in

Sed準備編譯:

./configure --prefix=/usr --bindir=/bin

編譯包和生成HTML文檔:

make make html

測試結果,問題:

make check

安裝包和它的文檔:

make install install -d -m755           /usr/share/doc/sed-4.4 install -m644 doc/sed.html /usr/share/doc/sed-4.4

6.27.2。對話的內容

安裝程序: sed
安裝目錄: /usr/share/doc/sed - 4.4

簡短的描述

sed

在一個經過過濾和轉換文本文件

最後一次更新在

6.28。影子- 4.5

影子包包含項目以安全的方式來處理密碼。

近似創建時間: 0.2業務單位
所需的磁盤空間: 42 MB

6.28.1。安裝的影子

請注意

若是你想執行使用強密碼,請參考http://www.linuxfromscratch.org/blfs/view/8.1/postlfs/cracklib.html安裝前CrackLib建築的影子。而後添加 --with-libcrack 配置下面的命令。

禁用的安裝 組程序和它的手冊頁,Coreutils提供了一個更好的版本。也防止安裝手冊頁,已經安裝的 man pages包:

sed -i 's/groups$(EXEEXT) //' src/Makefile.in find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \; find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;

而不是使用默認的 地下室方法,使用更安全 sha - 512密碼加密的方法還容許密碼超過8個字符。也有必要改變過期了 /var/spool/mail位置陰影使用默認用戶郵箱 /var/mail目前使用的位置:

sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \        -e 's@/var/spool/mail@/var/mail@' etc/login.defs

請注意

若是你選擇與Cracklib創建陰影的支持,運行如下:

sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs

作一個小改變讓默認useradd符合LFS組文件:

sed -i 's/1000/999/' etc/useradd

影子準備編譯:

./configure --sysconfdir=/etc --with-group-name-max-length=32

配置選項的含義:

--with-group-name-max-length=32

最大的用戶名是32個字符。使最大組名稱相同。

編譯包:

make

這個包不有一個測試套件。

安裝包:

make install

錯誤的程序移動到適當的位置:

mv -v /usr/bin/passwd /bin

6.28.2。配置的影子

這個包包含工具添加、修改和刪除用戶和組;設置和修改本身的密碼;並執行其餘管理任務。對於一個完整的解釋 密碼陰影意思,看 doc/HOWTO文件打開源代碼樹中。若是使用影子的支持,請記住,程序,須要驗證密碼(顯示經理、FTP程序pop3守護進程,等等)必須Shadow-compliant。也就是說,他們須要可以處理跟蹤密碼。

運行如下命令來啓用跟蹤密碼:

pwconv

啓用跟蹤組密碼,運行:

grpconv

影子股票配置 useradd實用程序有幾個事項須要一些解釋。首先,默認動做 useradd效用是建立用戶和組的名稱相同的用戶。默認的用戶ID(UID)和組ID(GID)數量將從1000年開始。這意味着若是你不傳遞參數 useradd,每一個用戶將系統上的一個獨特的組的成員。若是這種行爲是不可取的,你須要經過 -g參數 useradd。存儲在默認的參數/etc/default/useradd文件。您可能須要修改兩個參數在此文件來知足您的特定需求。

/etc/default/useradd參數解釋

GROUP=1000

該參數集的開始集團所屬中使用的數字文件。你能夠修改你的慾望。請注意, useradd永遠不會重用一個UID或GID。若是使用該參數肯定人數,它將使用下一個可用的數量。還請注意,若是你沒有一組1000年第一次在您的系統上使用 useradd沒有 -g參數,你會獲得一個信息顯示在終端上,說: useradd: unknown GID 1000。你能夠忽略這個消息將使用和組1000號。

CREATE_MAIL_SPOOL=yes

這個參數會致使 useradd建立一個郵箱文件爲新建立的用戶。 useradd將使集團擁有這個文件嗎 mail集團擁有0660權限。若是你但願這些郵箱文件不是由 useradd,發出如下命令:

sed -i 's/yes/no/' /etc/default/useradd

6.28.3。設置root密碼

爲用戶選擇一個密碼 根,經過運行:

passwd root

6.28.4。內容的影子

安裝程序: 恰克,chfn,chgpasswd chpasswd,chsh到期,faillog,gpasswd,groupadd,groupdel,groupmems,groupmod,grpck,grpconv,grpunconv,lastlog,登陸,logoutd,newgidmap,newgrp,newuidmap,分類列出,nologin,passwd,pwck,pwconv,pwunconv,sg newgrp(連接),蘇,useradd,userdel,usermod,vigr vipw(連接),和vipw
安裝目錄: /etc/default

簡短的描述

恰克

用於更改的密碼更改之間的最大天數

chfn

用於更改用戶的全名和其餘信息

chgpasswd

用於更新組密碼以批處理模式

chpasswd

用於更新用戶密碼以批處理模式

chsh

用於更改用戶的默認登陸shell

到期

檢查和執行當前的密碼過時策略

faillog

用於檢查登陸失敗的日誌,設定一個最大數量的失敗以前一個賬戶阻塞,或重置失敗數

gpasswd

用於添加和刪除會員和管理員組

groupadd

建立一個組的名字

groupdel

刪除給定名稱的組

groupmems

容許用戶管理他/她本身的組成員列表沒有超級用戶權限的要求。

groupmod

用於修改給定的組織的名稱或GID嗎

grpck

驗證組文件的完整性 /etc/group /etc/gshadow

grpconv

建立或更新影子組文件從正常組文件

grpunconv

更新 /etc/group /etc/gshadow而後刪除後者

lastlog

報告最近登陸的全部用戶或一個給定的用戶

登陸

使用系統讓用戶登陸嗎

logoutd

守護程序用於執行限制登陸時間和港口嗎

newgidmap

用於設置用戶名稱空間的gid映射

newgrp

是用來改變當前GID在一個登陸會話嗎

newuidmap

用於設置用戶的uid映射名稱空間

分類列出

用於建立或更新整個系列的用戶賬戶

nologin

顯示一個消息,一個帳戶不可用;它被設計用做默認的shell的帳戶被禁用

passwd

是用來改變一個用戶或組賬戶的密碼嗎

pwck

驗證密碼文件的完整性 /etc/passwd /etc/shadow

pwconv

建立或更新的影子口令文件正常的密碼文件

pwunconv

更新 /etc/passwd /etc/shadow而後刪除後者

sg

執行一個給定的命令在用戶給定組的GID將

運行一個殼替代用戶和組id

useradd

用給定的名稱建立一個新用戶,或更新後默認的新信息

userdel

刪除給定的用戶賬戶

usermod

用於修改給定用戶的登陸名稱,用戶標識(UID)、殼牌、初始羣體,主目錄等。

vigr

編輯 /etc/group /etc/gshadow文件

vipw

編輯 /etc/passwd /etc/shadow文件

最後一次更新在

6.29。psmisc - 23.1

Psmisc包包含程序顯示正在運行的進程的信息。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 4.2 MB

6.29.1。安裝Psmisc

Psmisc準備編譯:

./configure --prefix=/usr

編譯包:

make

這個包不有一個測試套件。

安裝包:

make install

最後,移動 killall 熔化爐FHS程序所指定的位置:

mv -v /usr/bin/fuser   /bin mv -v /usr/bin/killall /bin

6.29.2。Psmisc內容

安裝程序: 熔化爐,killall peekfd、prtstat pstree,pstree。pstree x11(連接)

簡短的描述

熔化爐

報告的進程id(pid)的流程使用給定的文件或文件系統

killall

殺死進程的名字;它發送一個信號,任何給定的命令運行的全部進程

peekfd

Peek在運行的進程的文件描述符,它的PID

prtstat

打印信息的過程

pstree

顯示正在運行的進程做爲一個樹

pstree.x11

同樣 pstree在退出前,除了它等待確認

最後一次更新在

6.30。iana -等- 2.30

Iana-Etc包爲網絡服務和協議提供數據。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 2.3 MB

6.30.1。安裝Iana-Etc

下面的命令將IANA提供的原始數據轉換爲正確的格式 /etc/protocols /etc/services數據文件:

make

這個包不有一個測試套件。

安裝包:

make install

6.30.2。Iana-Etc內容

安裝文件: /etc/protocols和/ etc / services

簡短的描述

/etc/protocols

描述了各類DARPA互聯網協議,可從TCP / IP子系統

/etc/services

提供了一個友好之間的映射爲互聯網服務文本名稱,及其潛在的分配的端口號和協議類型

最後一次更新在

6.31。Bison-3.0.4

野牛包包含一個解析器生成器。

近似創建時間: 0.3業務單位
所需的磁盤空間: 32 MB

6.31.1。安裝的野牛

野牛準備編譯:

./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.0.4

編譯包:

make

之間有一個環形依賴野牛和flex的檢查。若是須要的話,在安裝flex在下一節中,野牛檢查能夠與運行 作檢查。三個測試lalr1有關。cc失敗緣由未知。

安裝包:

make install

6.31.2。內容的野牛

安裝程序: 野牛和yacc
安裝庫: liby.a
安裝目錄: /usr/share/bison

簡短的描述

野牛

生成,從一系列的規則,程序分析文本文件的結構;野牛是一個替代Yacc(另外一個編譯器編譯器)

yacc

一個包裝 野牛,這意味着項目仍然打電話 yacc而不是 野牛;它調用 野牛 -y選項

liby

Yacc庫包含Yacc-compatible的實現 yyerror main函數;這個庫一般不是頗有用,但POSIX須要它

最後一次更新在

6.32。Flex-2.6.4

Flex包包含一個實用程序生成的程序文本的識別模式。

近似創建時間: 0.4業務單位
所需的磁盤空間: 32 MB

6.32.1。安裝Flex

首先,修復一個問題介紹了glibc - 2.26:

sed -i "/math.h/a #include <malloc.h>" src/flexdef.h

構建過程假設 help2man程序能夠建立可執行的手冊頁——help選項。這是不存在,因此咱們用一個環境變量來跳過這個過程。如今,準備Flex編譯:

HELP2MAN=/tools/bin/true \ ./configure --prefix=/usr --docdir=/usr/share/doc/flex-2.6.4

編譯包:

make

測試結果(約0.5單位),問題:

make check

安裝包:

make install

不知道幾個項目 flex然而,試着運行它的前身, lex。爲了支持這些項目,建立一個符號連接 lex運行 flex lex仿真模式:

ln -sv flex /usr/bin/lex

6.32.2。Flex的內容

安裝程序: flex,flex + +(flex連接),lex flex(連接)
安裝庫: libfl。因此libfl_pic.so
安裝目錄: /usr/share/doc/flex-2.6.4

簡短的描述

flex

生成程序的工具在文本識別模式;它容許多功能性指定模式發現的規則,消除須要開發一個專門的程序

flex + +

flex的延伸,用於生成c++代碼和類。這是一個符號連接 flex

lex

一個腳本,該腳本運行 flex lex模擬模式

libfl

 flex圖書館

最後一次更新在

6.33。grep - 3.1

Grep搜索包包含項目文件。

近似創建時間: 0.4業務單位
所需的磁盤空間: 29 MB

6.33.1。Grep的安裝

Grep準備編譯:

./configure --prefix=/usr --bindir=/bin

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

6.33.2。Grep的內容

安裝程序: fgrep egrep,grep

簡短的描述

egrep

打印行匹配擴展正則表達式

fgrep

打印行匹配固定字符串的列表

grep

打印行匹配一個基本的正則表達式

最後一次更新在

6.34。bash - 4.4

Bash包包含Bourne-Again殼。

近似創建時間: 2.0業務單位
所需的磁盤空間: 56 MB

6.34.1。Bash的安裝

把一些上游修復:

patch -Np1 -i ../bash-4.4-upstream_fixes-1.patch

Bash準備編譯:

./configure --prefix=/usr                       \             --docdir=/usr/share/doc/bash-4.4 \             --without-bash-malloc               \             --with-installed-readline

新的配置選項的含義:

--with-installed-readline

這個選項告訴Bash使用 readline圖書館已經安裝在系統上,而不是使用本身的readline版本。

編譯包:

make

跳過了 「安裝包」若是不是運行測試套件。

準備測試,確保 nobody用戶能夠寫入源樹:

chown -Rv nobody .

如今,運行測試 nobody用戶:

su nobody -s /bin/bash -c "PATH=$PATH make tests"

安裝包和移動主要可執行文件 /bin:

make install mv -vf /usr/bin/bash /bin

運行新編譯的 bash目前正在執行的程序(取代):

exec /bin/bash --login +h

請注意

使使用的參數 bash過程一個交互式登陸shell,繼續禁用散列,這樣新項目被發現,由於他們變得可用。

6.34.2。Bash的內容

安裝程序: bash、bashbug和sh(連接到bash)
安裝目錄: /usr/share/doc/bash - 4.4

簡短的描述

bash

一個普遍使用的命令解釋器;它執行許多類型的擴展和替換給定的命令行執行前,從而使這一翻譯一個強大的工具

bashbug

一個shell腳本,以幫助用戶組合和郵件標準格式化的bug報告有關 bash

上海

一個符號連接 bash程序;當調用 上海, bash試圖模仿的創業行爲的歷史版本 上海儘量,符合POSIX標準

最後一次更新在

6.35。Libtool-2.4.6

Libtool包包含GNU通用庫支持腳本。它包裝在一致的使用共享庫的複雜性,便攜式接口。

近似創建時間: 1.8業務單位
所需的磁盤空間: 43個MB

6.35.1。安裝Libtool

Libtool準備編譯:

./configure --prefix=/usr

編譯包:

make

測試結果(約11.0單位),問題:

make check

請注意

測試時間libtool能夠與多個核心ibe系統上的顯著減小。爲此,添加 TESTSUITEFLAGS = - j < N >上面的線。例如,使用閣下能夠減小測試時間60%以上。

5測試已知失敗LFS構建環境因爲循環依賴,但全部測試經過,若是automake安裝後從新覈對。

安裝包:

make install

6.35.2。Libtool內容

安裝程序: libtool和libtoolize
安裝庫: libltdl.so
安裝目錄: /usr/include/libltdl和/usr/share/libtool

簡短的描述

libtool

提供了廣義圖書館建築的支持服務

libtoolize

提供了一種標準方法來添加 libtool支持一個包

libltdl

隱藏的各類困難dlopen庫

最後一次更新在

6.36。同時- 1.13

同時包包含GNU數據庫管理器。這是一個數據庫函數庫,使用可擴展散列和工做相似於標準的UNIX dbm。圖書館提供了存儲鍵/數據對原語,搜索和檢索數據的鍵和刪除鍵及其數據。

近似創建時間: 0.1業務單位
所需的磁盤空間: 10 MB

6.36.1。同時安裝

同時準備編譯:

./configure --prefix=/usr \             --disable-static \             --enable-libgdbm-compat

配置選項的含義:

--enable-libgdbm-compat

這個開關使libgdbm兼容性圖書館建成,一些包之外的LFS可能須要它提供的老DBM的例程。

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

6.36.2。內容的同時

安裝程序: gdbm_dump、gdbm_load gdbmtool
安裝庫: libgdbm。因此libgdbm_compat.so

簡短的描述

gdbm_dump

同時數據庫轉儲到一個文件

gdbm_load

再現同時數據庫轉儲文件

gdbmtool

測試和修改同時數據庫

libgdbm

包含函數來操縱一個散列數據庫

libgdbm_compat

兼容性包含老DBM函數庫

最後一次更新在

6.37。gperf - 3.1

Gperf生成一套完美哈希函數從一個關鍵。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 5.8 MB

6.37.1。Gperf安裝

Gperf準備編譯:

./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1

編譯包:

make

衆所周知,測試失敗若是同時運行多個測試(大於1 - j選項)。測試結果,問題:

make -j1 check

安裝包:

make install

6.37.2。Gperf內容

安裝程序: gperf
安裝目錄: /usr/share/doc/gperf - 3.1

簡短的描述

gperf

生成一個完美散列鍵設置

最後一次更新在

6.38。Expat-2.2.3

外籍人士包包含用於解析XML面向流的C庫。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 9.5 MB

6.38.1。安裝的外籍人士

首先解決一個問題在LFS regession測試環境:

sed -i 's|usr/bin/env |bin/|' run.sh.in

外籍人士準備編譯:

./configure --prefix=/usr --disable-static

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

若是須要,安裝文檔:

install -v -dm755 /usr/share/doc/expat-2.2.3 install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.2.3

6.38.2。外籍人士的內容

安裝程序: xmlwf
安裝庫: libexpat.so
安裝目錄: /usr/share/doc/expat-2.2.3

簡短的描述

xmlwf

是一個非驗證工具來檢查是否格式良好的XML文檔嗎

libexpat

包含解析XML的API函數

最後一次更新在

6.39。Inetutils-1.9.4

Inetutils包包含項目基本網絡。

近似創建時間: 0.3業務單位
所需的磁盤空間: 27 MB

6.39.1。安裝Inetutils

Inetutils準備編譯:

./configure --prefix=/usr        \             --localstatedir=/var \             --disable-logger     \             --disable-whois      \             --disable-rcp        \             --disable-rexec      \             --disable-rlogin     \             --disable-rsh        \             --disable-servers

配置選項的含義:

--disable-logger

這個選項能夠防止Inetutils安裝 日誌記錄器計劃,該腳本使用消息傳遞到系統日誌守護進程。不要���裝它,由於Util-linux安裝最新版本。

--disable-whois

這個選項禁用Inetutils的建築 域名查詢服務客戶端,這是過期了。更好的說明 域名查詢服務BLFS客戶機的書。並

--disable-r*

這些參數禁用建築不該使用過期的項目,因爲安全問題。這些程序所提供的功能能夠提供的 opensshBLFS包的書。並

--disable-servers

這將禁止安裝的各類網絡服務器做爲Inetutils包的一部分。這些服務器在基本的LFS系統被認爲是不合適的。有些人天生沒有安全感,只考慮安全可信的網絡。注意,更好的替代品可供這些服務器。

編譯包:

make

測試結果,問題:

make check

請注意

一個測試,libl。sh初始chroot環境中可能會失敗,但會經過若是LFS系統完成後的測試運行。

安裝包:

make install

移動一些程序,因此他們若是是可用的 /usr沒法訪問:

mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin mv -v /usr/bin/ifconfig /sbin

6.39.2。Inetutils內容

安裝程序: dnsdomainname、ftp、ifconfig、主機名平,ping6,說話,telnet,tftp和路由跟蹤

簡短的描述

dnsdomainname

顯示系統的DNS域名

ftp

文件傳輸協議的程序嗎

主機名

報告或設置主機的名稱

ifconfig

管理網絡接口

發送迴應請求包和報告回覆花多長時間

ping6

的一個版本 IPv6網絡

說話

用於與其餘用戶聊天嗎

遠程登陸

一個接口的TELNET協議

tftp

一個簡單的文件傳輸程序

traceroute

痕跡的路線你包從主機到另外一個網絡上的主機,顯示全部中間跳(網關)

最後一次更新在

6.40。Perl-5.26.0

Perl包包含實際提取和報告語言。

近似創建時間: 8.6業務單位
所需的磁盤空間: 257 MB

6.40.1。安裝Perl

首先建立一個基本的 /etc/hosts文件中引用一個Perl的配置文件以及可選的測試套件:

echo "127.0.0.1 localhost $(hostname)" > /etc/hosts

如今這個版本的Perl構建壓縮::生::Zlib壓縮::生:BZip2模塊。默認狀況下Perl將使用一個內部來源構建的副本。發出如下命令,以便Perl將使用庫安裝在系統:

export BUILD_ZLIB=False export BUILD_BZIP2=0

有徹底控制Perl是設置的方式,你能夠刪除 「des」選擇從下面的命令和精心挑選的方式構建這個包。此外,用下面的命令同樣,使用Perl自動偵測的違約:

sh Configure -des -Dprefix=/usr                 \                   -Dvendorprefix=/usr           \                   -Dman1dir=/usr/share/man/man1 \                   -Dman3dir=/usr/share/man/man3 \                   -Dpager="/usr/bin/less -isR"  \                   -Duseshrplib                  \                   -Dusethreads

配置選項的含義:

-Dvendorprefix=/usr

這樣能夠確保 perl知道如何告訴包他們應該安裝perl模塊。

-Dpager="/usr/bin/less -isR"

這將確保 less而不是使用 more.

-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3

自從Groff還沒有安裝, 配置認爲咱們不但願Perl的手冊頁。發行這些參數覆蓋這一決定。

-Duseshrplib

創建一個共享libperl所需的一些perl模塊。

-Dusethreads

perl構建支持線程。

編譯包:

make

測試結果(大約2.5全局的問題:

make -k test

請注意

一些測試相關zlib將失敗歸因於使用zlib而不是內部的系統版本的版本。

安裝包和清理:

make install unset BUILD_ZLIB BUILD_BZIP2

6.40.2。Perl的內容

安裝程序: c2ph,corelist,cpan enc2xs、encguess h2ph,h2xs,instmodsh,json_pp,libnetcfg,perl,perl5.26.0 perl(硬連接),perlbug,perldoc,perlivp,perlthanks perlbug(硬連接),piconv,pl2pm,pod2html,pod2man,pod2text,pod2usage,podchecker,podselect,證實,pstruct c2ph(硬連接),ptar,ptardiff,ptargrep,shasum,splain xsubpp,zipdetails
安裝庫: 不少都不能被列在這裏
安裝目錄: /usr/lib/perl5

簡短的描述

c2ph

轉儲C結構的生成 cc - g - s

corelist

一個命令行前端模塊::CoreList

cpan

與綜合Perl檔案網絡交互(CPAN)從命令行

enc2xs

構建一個Perl擴展編碼模塊從Unicode字符映射或Tcl編碼文件

encguess

猜一個或多個文件的編碼類型

h2ph

轉換 .hC頭文件 .phPerl的頭文件

h2xs

轉換 .hPerl擴展C頭文件

instmodsh

Shell腳本檢查安裝Perl模塊,甚至能夠從一個安裝模塊建立一個tarball

json_pp

在特定的輸入和輸出格式之間轉換數據

libnetcfg

可用於配置 libnetPerl模塊

perl

結合C的一些最好的特性, sed, awk 上海成一個單一的瑞士軍隊的語言

perl5.26.0

一個硬連接 perl

perlbug

用於生成錯誤報告關於Perl或隨之而來的模塊,和郵件

perldoc

顯示一塊pod格式的文檔中嵌入Perl安裝樹或一個Perl腳本

perlivp

Perl安裝驗證過程;它能夠用來驗證Perl和圖書館已正確安裝

perlthanks

用於生成謝謝消息郵件Perl開發人員

piconv

一個Perl版本的字符編碼轉換器 iconv

pl2pm

一個粗略的Perl4轉換的工具 .pl文件到Perl5 .pm模塊

pod2html

將文件從pod格式轉換爲HTML格式

pod2man

轉換數據格式* roff輸入倉

pod2text

圓莢體數據轉換爲格式化的ASCII文本

pod2usage

從嵌入式pod文檔打印使用消息文件

podchecker

檢查pod格式文檔文件的語法

podselect

顯示選中的部分pod文檔

證實

命令行工具對測試:運行測試:利用模塊

pstruct

轉儲C結構的生成 cc - g - s刺穿了

ptar

一個 焦油例如用Perl編寫的程序

ptardiff

一個Perl程序,比較與unextracted提取檔案

ptargrep

一個Perl程序,適用於模式匹配在tar存檔文件的內容

shasum

打印或檢查沙校驗和

splain

Perl用於力詳細預警診斷

xsubpp

將Perl XS代碼轉換成C代碼

zipdetails

顯示一個Zip文件的內部結構的詳細信息

最後一次更新在

6.41。XML::解析器- 2.44

XML::解析器模塊是一個Perl接口詹姆斯克拉克的XML解析器,外籍人士。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 2.0 MB

6.41.1。安裝XML::解析器

準備XML::解析器進行編譯:

perl Makefile.PL

編譯包:

make

測試結果,問題:

make test

安裝包:

make install

6.41.2。內容的XML::解析器

安裝模塊: Expat.so

簡短的描述

Expat

提供Perl外籍接口

最後一次更新在

6.42。Intltool-0.51.0

Intltool是一個國際化的工具用於從源文件中提取可翻譯字符串。

近似創建時間: 小於0.1業務單位
所需的磁盤空間: 1.5 MB

6.42.1。安裝Intltool

第一次修復一個警告是由perl - 5.22及之後:

sed -i 's:\\\${:\\\$\\{:' intltool-update.in

Intltool準備編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

安裝包:

make install install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO

6.42.2。Intltool內容

安裝程序: intltool-extract、intltool-merge intltool-prepare、intltool-update intltoolize
安裝目錄: /usr/share/doc/intltool-0.51.0和/usr/share/intltool

簡短的描述

intltoolize

準備一個包使用intltool

intltool-extract

生成頭文件能夠理解 gettext

intltool-merge

合併字符串翻譯成各類文件類型

intltool-prepare

更新文件和合並他們的翻譯文件

intltool-update

更新訂單模板文件和合並的翻譯

最後一次更新在

6.43。autoconf - 2.69

Autoconf包包含項目生產shell腳本能夠自動配置源代碼。

近似創建時間: 小於0.1業務單位(約3.3單位與測試)
所需的磁盤空間: 17.3 MB

6.43.1。安裝Autoconf

Autoconf準備編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

這須要很長時間,大約3.3單位。此外,一些測試是使用Automake的跳過。完整的測試覆蓋率,Autoconf Automake已經安裝後能夠從新測試。此外,兩個測試失敗因爲libtool-2.4.3後來的變化。

請注意

autoconf的測試時間與多核系統能夠顯著減小。爲此,添加 TESTSUITEFLAGS = - j < N >上面的線。例如,使用閣下能夠減小測試時間60%以上。

安裝包:

make install

6.43.2。Autoconf的內容

安裝程序: autoconf、autoheader autom4te autoreconf,自動掃描,自動更新,ifnames
安裝目錄: /usr/share/autoconf

簡短的描述

autoconf

生產shell腳本,自動配置軟件源代碼包,以適應各類各樣的類unix系統;配置腳本產生不須要獨立運行它們 autoconf程序

autoheader

一個工具用於建立模板文件的C #定義配置使用的語句

autom4te

一個包裝器M4宏處理器

autoreconf

自動運行 autoconf, autoheader, aclocal, automake, gettextize, libtoolize以正確的順序更改時節省時間 autoconfautomake模板文件

自動掃描

有助於建立一個 configure.in申請一個軟件包;檢查源文件目錄樹,他們尋找共同的可移植性問題,並建立一個 configure.scan文件,做爲初步configure.in文件包

自動更新

修改一個 configure.in文件還稱 autoconf宏的舊名稱使用當前宏的名字

ifnames

有助於寫做時 configure.in一個軟件包文件;它打印C預處理器的標識符包使用條件(若是一個包已經設置有可移植性,這個程序能夠幫助肯定 配置須要檢查。它也能夠填補的空白 configure.in生成的文件 自動掃描.]

最後一次更新在

6.44。Automake-1.15.1

Automake包包含使用Autoconf的程序生成makefile。

近似創建時間: 小於0.1業務單位(約8.5單位與測試)
所需的磁盤空間: 110 MB

6.44.1。安裝Automake

Automake準備編譯:

./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.15.1

編譯包:

make

有一些測試,錯誤連接到錯誤的flex版本的庫,因此咱們暫時解決這個問題。同時,使用閣下讓選項加速測試,即便在系統只有一個處理器,因爲內部我的測試延遲。測試結果,問題:

sed -i "s:./configure:LEXLIB=/usr/lib/libfl.a &:" t/lex-{clean,depend}-cxx.sh make -j4 check

已知三個測試失敗的LFS環境:check12。sh,subobj。sh,check12-w.sh。

安裝包:

make install

6.44.2。Automake的內容

安裝程序: aclocal aclocal - 1.15(硬與aclocal),automake,automake - 1.15(硬與automake)
安裝目錄: /usr/share/automake /usr/share/aclocal - 1.15——1.15,/usr/share/doc/automake-1.15.1

簡短的描述

aclocal

生成 aclocal.m4基於內容的文件 configure.in文件

aclocal - 1.15

一個硬連接 aclocal

automake

自動生成的工具 Makefile.in文件從 Makefile.am文件(建立的全部 Makefile.in文件包,在頂級目錄中運行這個程序。經過掃描 configure.in每一個適當的文件時,它將自動發現 Makefile.am並生成相應的文件 Makefile.in文件。)

automake - 1.15

一個硬連接 automake

最後一次更新在

6.45。Xz-5.2.3

Xz包包含壓縮和解壓文件的程序。它提供了功能lzma和更新的xz壓縮格式。壓縮的文本文件 xz產生一個更好的壓縮比與傳統的比例 gzip bzip2命令。

近似創建時間: 0.2業務單位
所需的磁盤空間: 15 MB

6.45.1。安裝Xz

Xz準備編譯:

./configure --prefix=/usr    \             --disable-static \             --docdir=/usr/share/doc/xz-5.2.3

編譯包:

make

測試結果,問題:

make check

安裝包和確保全部必要的文件是正確的目錄:

make install mv -v   /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin mv -v /usr/lib/liblzma.so.* /lib ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so

6.45.2。Xz內容

安裝程序: xz lzcat(連接),lzcmp xzdiff(連接),lzdiff xzdiff(連接),lzegrep xzgrep(連接),lzfgrep xzgrep(連接),lzgrep xzgrep(連接),lzless xzless(連接),lzma xz(連接),lzmadec,lzmainfo,lzmore xzmore(連接),unlzma xz(連接),unxz xz(連接),xz,xzcat xz(連接),xzcmp xzdiff(連接),xzdec,xzdiff,xzegrep xzgrep(連接),xzfgrep xzgrep(連接),xzgrep xzless,xzmore
安裝庫: liblzma.so
安裝目錄: /usr/include/lzma和/usr/share/doc/xz-5.2.3

簡短的描述

lzcat

解壓縮到標準輸出

lzcmp

運行 cmp在LZMA壓縮文件

lzdiff

運行 diff在LZMA壓縮文件

lzegrep

運行 egrep在LZMA壓縮文件

lzfgrep

運行 fgrep在LZMA壓縮文件

lzgrep

運行 grep在LZMA壓縮文件

lzless

運行 在LZMA壓縮文件

lzma

使用LZMA壓縮或解壓縮文件格式

lzmadec

一個小而快LZMA壓縮文件的解碼器

lzmainfo

顯示的信息存儲在LZMA壓縮文件頭

lzmore

運行 更多在LZMA壓縮文件

unlzma

解壓縮文件使用LZMA格式

unxz

解壓縮文件使用XZ格式

xz

使用XZ壓縮或解壓縮文件格式

xzcat

解壓縮到標準輸出

xzcmp

運行 cmp在XZ壓縮文件

xzdec

一個小而快XZ壓縮文件的解碼器

xzdiff

運行 diff在XZ壓縮文件

xzegrep

運行 egrep在XZ壓縮文件的文件

xzfgrep

運行 fgrep在XZ壓縮文件

xzgrep

運行 grep在XZ壓縮文件

xzless

運行 在XZ壓縮文件

xzmore

運行 更多在XZ壓縮文件

liblzma

圖書館實現無損,塊分類數據壓縮,使用Lempel-Ziv-Markov鏈算法

最後一次更新在

6.46。Kmod-24

Kmod包包含加載內核模塊的庫和工具

近似創建時間: 0.1業務單位
所需的磁盤空間: 12 MB

6.46.1。安裝Kmod

Kmod準備編譯:

./configure --prefix=/usr          \             --bindir=/bin          \             --sysconfdir=/etc      \             --with-rootlibdir=/lib \             --with-xz              \             --with-zlib

配置選項的含義:

--with-xz, --with-zlib

這些選項啓用Kmod處理壓縮內核模塊。

--with-rootlibdir=/lib

這個選項能夠確保不一樣圖書館相關文件放置在正確的目錄。

編譯包:

make

這個包有一個測試套件,不能夠在LFS chroot環境中運行。至少git項目須要和幾個測試將不會運行以外的git存儲庫。

安裝包,併爲兼容Module-Init-Tools建立符號連接(之前的包處理Linux內核模塊):

make install  for target in depmod insmod lsmod modinfo modprobe rmmod; do   ln -sfv ../bin/kmod /sbin/$target done  ln -sfv kmod /bin/lsmod

6.46.2。Kmod內容

安裝程序: kmod depmod(連接),insmod(kmod連接),kmod,lsmod kmod(連接),modinfo kmod(連接),modprobe(kmod連接),rmmod(kmod連接)
安裝庫: libkmod.so

簡短的描述

depmod

建立一個依賴文件符號的基礎上,發現現有的模塊;這種依賴性文件使用 modprobe自動負載所需的模塊

insmod

安裝一個可加載模塊運行的內核

kmod

內核模塊加載和卸載

lsmod

列出當前加載的模塊

modinfo

檢查一個對象文件與一個內核模塊和顯示,它能夠收集的任何信息

modprobe

使用一個依賴文件,建立的 depmod自動加載相關的模塊

rmmod

卸載模塊從正在運行的內核

libkmod

這個庫被其餘程序使用內核模塊加載和卸載

最後一次更新在

6.47。Gettext-0.19.8.1

國際化和本地化的Gettext包包含公用事業。這些容許編譯程序與NLS(本地語言支持),使他們可以輸出消息在用戶的母語。

近似創建時間: 2.4業務單位
所需的磁盤空間: 199 MB

6.47.1。安裝Gettext

首先,抑制兩個調用test-lock永遠在一些機器上能夠循環:

sed -i '/^TESTS =/d' gettext-runtime/tests/Makefile.in && sed -i 's/test-lock..EXEEXT.//' gettext-tools/gnulib-tests/Makefile.in

Gettext準備編譯:

./configure --prefix=/usr    \             --disable-static \             --docdir=/usr/share/doc/gettext-0.19.8.1

編譯包:

make

測試結果(這須要很長時間,大約在布),問題:

make check

安裝包:

make install chmod -v 0755 /usr/lib/preloadable_libintl.so

6.47.2。Gettext的內容

安裝程序: autopoint、envsubst gettext,gettext。sh、gettextize msgattrib,msgcat、msgcmp msgcomm,msgconv,msgen,msgexec,msgfilter,msgfmt,msggrep,msginit,msgmerge,msgunfmt,msguniq,ngettext recode-sr-latin,xgettext
安裝庫: libasprintf。因此,libgettextlib。因此,libgettextpo。因此,libgettextsrc。因此,preloadable_libintl.so
安裝目錄: /usr/lib/gettext、/usr/share/doc/gettext-0.19.8.1 /usr/share/gettext

簡短的描述

autopoint

標準Gettext基礎設施文件複製到一個源包中

envsubst

替代品在shell環境變量格式字符串

gettext

將天然語言信息轉化爲用戶的語言經過查找翻譯的信息目錄

gettext.sh

主要做爲gettext的shell函數庫

gettextize

全部標準Gettext文件複製到頂級目錄的一個包開始國際化

msgattrib

過濾器的消息翻譯目錄根據它們的屬性和操做的屬性

msgcat

鏈接和合並 .po文件

msgcmp

比較兩個 .po文件檢查都包含相同的一組是否字符串

msgcomm

發現的常見的消息 .po文件

msgconv

將一個翻譯目錄轉換爲不一樣的字符編碼

msgen

建立一個英語翻譯目錄

msgexec

一個命令適用於全部翻譯的翻譯目錄

msgfilter

一個過濾器適用於全部翻譯的翻譯目錄

msgfmt

從翻譯目錄生成一個二進制消息目錄

msggrep

提取全部消息的翻譯目錄匹配一個給定的模式或屬於一些給定的源文件

msginit

建立一個新的 .po文件,初始化值的元信息從用戶的環境

msgmerge

結合了兩種原始翻譯成一個單一的文件中

msgunfmt

反編譯的二進制消息目錄到原始的翻譯文本

msguniq

結合重複的翻譯在翻譯目錄

ngettext

顯示的母語翻譯的文本消息的語法形式取決於數量

recode-sr-latin

從新編碼塞爾維亞斯拉夫字母到拉丁文本的腳本

xgettext

從給定的源文件提取可翻譯消息行第一個翻譯模板

libasprintf

定義了 autosprintf類,這使得C格式化輸出例程可用在c++程序中,��用 <字符串>字符串和 <iostream>

libgettextlib

一個私人圖書館,其中包含了常規使用的各類Gettext項目;這些都不是用於通常用途

libgettextpo

用於編寫專門的程序過程 .po文件;這個庫時使用的標準應用程序附帶Gettext(如 msgcomm, msgcmp, msgattrib, msgen)將是不夠的

libgettextsrc

一個私人圖書館,其中包含了常規使用的各類Gettext項目;這些都不是用於通常用途

preloadable_libintl

一個庫,旨在使用LD_PRELOAD助攻 libintl在日誌翻譯信息

最後一次更新在

6.48。Procps-ng-3.3.12

Procps-ng包包含項目監控過程。

近似創建時間: 0.1業務單位
所需的磁盤空間: 14 MB

6.48.1。安裝Procps-ng

如今準備procps-ng編譯:

./configure --prefix=/usr                            \             --exec-prefix=                           \             --libdir=/usr/lib                        \             --docdir=/usr/share/doc/procps-ng-3.3.12 \             --disable-static                         \             --disable-kill

配置選項的含義:

--disable-kill

這個開關禁用建設 殺了由Util-linux命令將安裝包。

編譯包:

make

LFS的測試套件須要一些自定義的修改。刪除一個失敗的測試腳本時不使用tty設備和修復兩人。要運行測試套件,運行如下命令:

sed -i -r 's|(pmap_initname)\\\$|\1|' testsuite/pmap.test/pmap.exp sed -i '/set tty/d' testsuite/pkill.test/pkill.exp rm testsuite/pgrep.test/pgrep.exp make check

ps測試可能會失敗,可是若是測試是經過從新運行第六章的末尾。

安裝包:

make install

最後,必要的庫移動到一個位置,若是能夠找到 /usr不是安裝。

mv -v /usr/lib/libprocps.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libprocps.so) /usr/lib/libprocps.so

6.48.2。Procps-ng內容

安裝程序: 免費,pgrep、pidof pkill pmap,ps,pwdx,slabtop,sysctl,tload,頂部,正常運行時間,vmstat,w,手錶
安裝庫: libprocps.so
安裝目錄: /usr/include/proc和/usr/share/doc/procps-ng-3.3.12

簡短的描述

免費的

報告的和用去的內存(物理和交換內存)的系統

pgrep

查找過程基於他們的名字和其餘屬性

pidof

報告給出的pid程序

pkill

信號流程基於他們的名字和其餘屬性

pmap

報告給出的內存映射的過程

ps

列出了當前運行的進程

pwdx

報告進程的當前工做目錄

slabtop

顯示詳細的實時內核耳光緩存信息

sysctl

在運行時修改內核參數

tload

輸出當前系統平均負載圖

頂部

顯示一個列表最CPU密集型的過程;它提供了一個持續的觀察實時處理器活動

正常運行時間

報告系統已運行多長時間,多少用戶登陸,系統平均負載

vmstat

報告虛擬內存統計信息,讓信息流程、內存、分頁、塊輸入/輸出(IO),陷阱和CPU活動

w

顯示當前登陸的用戶,以及從何時開始

反覆運行一個給定的命令,顯示第一屏的輸出;這容許用戶觀看輸出隨時間變化

libprocps

包含函數所使用的大部分程序在這個包中

最後一次更新在

6.49。E2fsprogs-1.43.5

E2fsprogs包包含了實用程序來處理 ext2文件系統。它也支持的 ext3 ext4日誌文件系統。

近似創建時間: 3.3業務單位
所需的磁盤空間: 58 MB

6.49.1。安裝E2fsprogs

E2fsprogs文檔建議包在源代碼樹的子目錄:

mkdir -v build cd build

E2fsprogs準備編譯:

LIBS=-L/tools/lib                    \ CFLAGS=-I/tools/include              \ PKG_CONFIG_PATH=/tools/lib/pkgconfig \ ../configure --prefix=/usr           \              --bindir=/bin           \              --with-root-prefix=""   \              --enable-elf-shlibs     \              --disable-libblkid      \              --disable-libuuid       \              --disable-uuidd         \              --disable-fsck

環境變量的意義和配置選項:

PKG_CONFIG_PATH, LIBS, CFLAGS

這些變量使e2fsprogs建成使用5.34節,「Util-linux-2.30.1」包了。

--with-root-prefix="" --bindir=/bin

(如某些項目 e2fsck程序)是必不可少的項目。例如,當 /usr不安裝,這些項目仍然須要可用。他們屬於目錄 /lib /sbin。若是這個選項不是經過E2fsprogs的配置、程序安裝到 /usr目錄中。

--enable-elf-shlibs

這將建立一些程序在這個包中使用的共享庫。

--disable-*

這能夠防止E2fsprogs構建和安裝 libuuid libblkid庫, uuidd守護進程, fsck包裝,如Util-Linux安裝最新版本。

編譯包:

make

創建和運行測試套件,咱們須要首先聯繫一些庫從/工具/ lib位置測試程序看起來。運行測試,問題:

ln -sfv /tools/lib/lib{blk,uu}id.so.1 lib make LD_LIBRARY_PATH=/tools/lib check

的一個E2fsprogs測試將試圖分配256 MB的內存。若是你沒有比這更多的RAM,務必使充分交換空間測試。看到2.5節,「分區上建立一個文件系統」2.7節,「安裝新的分區」有關建立並啓用交換空間。

安裝二進制文件、文檔和共享庫:

make install

安裝靜態庫和標題:

make install-libs

讓安裝的靜態庫可寫的調試符號能夠刪除後:

chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a

這個包安裝gzip .info文件但不更新系統 dir文件。解壓縮這個文件,而後更新系統 dir使用如下命令文件。

gunzip -v /usr/share/info/libext2fs.info.gz install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info

若是須要,建立並安裝一些額外的文檔經過發出如下命令:

makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo install -v -m644 doc/com_err.info /usr/share/info install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info

6.49.2。E2fsprogs內容

安裝程序: debugfs badblocks、chattr compile_et,dumpe2fs,e2freefrag,e2fsck,e2image,e2label,e2undo,e4defrag,filefrag,fsck。ext2,fsck。ext3,fsck。ext4,fsck。ext4dev、logsave lsattr、mk_cmds mke2fs,mkfs。ext2,mkfs。ext3,mkfs。ext4,mkfs。mklost +發現,ext4dev resize2fs,和tune2fs
安裝庫: libcom_err。因此,libe2p。因此,libext2fs。因此,libss.so
安裝目錄: /usr/include/e2p、/usr/include/et /usr/include/ext2fs、/usr/include/ss /usr/share/et,/usr/share/ss

簡短的描述

badblocks

搜索一個設備(一般是一個磁盤分區)壞塊

chattr

在一個變化的屬性文件 ext2文件系統;它也改變 ext3文件系統的日誌記錄版本 ext2文件系統

compile_et

一個錯誤表編譯器;它將錯誤代碼的表名稱和消息轉換成C源文件適合使用 com_err圖書館

debugfs

一個文件系統調試器;它能夠用來檢查和改變的狀態 ext2文件系統

dumpe2fs

打印的超級塊和塊組信息文件系統出如今一個給定的設備

e2freefrag

自由空間碎片信息報告

e2fsck

是用來檢查,能夠修復嗎 ext2文件系統和 ext3文件系統

e2image

用於保存重要嗎 ext2文件系統數據到一個文件

e2label

顯示或更改文件系統標籤 ext2文件系統出如今一個給定的設備

e2undo

回放的undo日誌undo_log ext2或ext3 / ext4文件系統上發現一個設備(這能夠用於e2fsprogs撤銷操做失敗的計劃。)

e4defrag

在線碎片整理程序ext4文件系統

filefrag

報告多麼支離破碎的特定文件

fsck.ext2

默認狀況下檢查 ext2文件系統和是一個硬連接 e2fsck

fsck.ext3

默認狀況下檢查 ext3文件系統和是一個硬連接 e2fsck

fsck.ext4

默認狀況下檢查 ext4文件系統和是一個硬連接 e2fsck

fsck.ext4dev

默認狀況下檢查 ext4開發文件系統和一個硬連接 e2fsck

logsave

將一個命令的輸出保存在一個日誌文件

lsattr

列出了第二個擴展文件系統上的文件的屬性

mk_cmds

將表的命令名稱和幫助信息轉換成C源文件適合使用 libss子系統的圖書館

mke2fs

建立一個 ext2 ext3文件系統在給定的設��

mkfs.ext2

在默認狀況下建立 ext2文件系統和是一個硬連接 mke2fs

mkfs.ext3

在默認狀況下建立 ext3文件系統和是一個硬連接 mke2fs

mkfs.ext4

在默認狀況下建立 ext4文件系統和是一個硬連接 mke2fs

mkfs.ext4dev

在默認狀況下建立 ext4開發文件系統和一個硬連接 mke2fs

mklost +發現

用於建立一個 lost+found在一個目錄 ext2文件系統;這一策略預先分配磁盤塊這個目錄來減輕的任務 e2fsck

resize2fs

能夠用來擴大或縮小 ext2文件系統

tune2fs

調整可調參數對一個文件系統 ext2文件系統

libcom_err

常見的錯誤顯示例程

libe2p

所使用的 dumpe2fs, chattr, lsattr

libext2fs

包含程序讓用戶級程序操做 ext2文件系統

libss

所使用的 debugfs

最後一次更新在

6.50。coreutils - 8.27

Coreutils包包含實用程序顯示和設置基本制度特徵。

近似創建時間: 2.4業務單位
所需的磁盤空間: 171 MB

6.50.1。安裝Coreutils

從Coreutils POSIX要求程序即便在多字節語言環境正確識別字符邊界。如下補丁修復這種違規行爲和其餘國際化bug。

patch -Np1 -i ../coreutils-8.27-i18n-1.patch

請注意

在過去,許多bug被髮如今這個補丁。報告新的bug Coreutils維護人員時,請先檢查,若是他們沒有這個補丁是能夠重現的。

抑制一個測試在一些機器上永遠循環:

sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk

如今準備Coreutils編譯:

FORCE_UNSAFE_CONFIGURE=1 ./configure \             --prefix=/usr            \             --enable-no-install-program=kill,uptime

配置選項的含義:

FORCE_UNSAFE_CONFIGURE=1

這個環境變量容許包創建做爲根用戶。

--enable-no-install-program=kill,uptime

這個開關的目的是防止Coreutils安裝二進制文件,稍後將由其餘包安裝。

編譯包:

FORCE_UNSAFE_CONFIGURE=1 make

跳過了 「安裝包」若是不是運行測試套件。

如今要運行的測試套件已經準備好了。首先,運行測試,用戶是如何運行的 root:

make NON_ROOT_USERNAME=nobody check-root

咱們要運行的測試的 nobody用戶。然而,某些測試,要求用戶是多個組的成員。這些測試不跳過咱們將添加一個臨時的組和用戶 nobody它的一部分:

echo "dummy:x:1000:nobody" >> /etc/group

修復一些權限,這樣非root用戶能夠編譯和運行測試:

chown -Rv nobody . 

如今運行測試。肯定的路徑 su環境包括/工具/ bin。

su nobody -s /bin/bash \           -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"

測試程序test-getlogin和date-debug失敗在chroot環境這樣一個部分構建的系統環境,可是若是在這一章的結束。

刪除臨時組:

sed -i '/dummy/d' /etc/group

安裝包:

make install

FHS項目移動到指定的地點:

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin mv -v /usr/bin/chroot /usr/sbin mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8

一些依靠LFS-Bootscripts的腳本包 頭, 睡眠, 不錯的。做爲 /usr可能不可用在引導的早期階段,這些二進制文件須要在根分區:

mv -v /usr/bin/{head,sleep,nice,test,[} /bin

6.50.2。Coreutils內容

安裝程序: [base32 base64,basename,貓,chcon,chgrp,chmod,喬恩,chroot,校驗和,通信,cp,csplit,削減,日期,dd,df,dir,dircolors,目錄名,du,呼應,env,擴張,expr,因素,假,fmt,摺疊,團體,頭,hostid,id、安裝、鏈接、連接、ln,logname,ls,md5sum,mkdir,mkfifo,mknod,mktemp,mv,不錯,問,nohup,nproc,numfmt,開發部,粘貼,pathchk,小指,公關,printenv,printf,ptx,pwd,指向,realpath,rm,刪除目錄,runcon,seq,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum,分解,shuf,睡眠,排序,分裂,統計,stdbuf,stty,和,同步,tac,尾巴,三通,測試、超時、觸摸、tr,真的,截斷,tsort,tty,uname,unexpand,uniq,分開,用戶,vdir,wc,誰,whoami,是的
安裝庫: libstdbuf.so
安裝目錄: /usr/libexec/coreutils

簡短的描述

base32

編碼和解碼數據根據base32規範(RFC 4648)

base64

根據base64編碼和解碼數據規範(RFC 4648)

basename

帶任何路徑和一個給定的文件名後綴

鏈接到標準輸出文件

chcon

更改的文件和目錄的安全上下文

chgrp

改變了組織的文件和目錄的全部權

修改文件權限

改變每一個文件的權限爲給定的模式;的模式能夠是一個象徵性的表示變化使或八進制數表明新的權限

喬恩

改變了用戶和/或組的文件和目錄的全部權

chroot

與指定的目錄運行命令 /目錄

校驗和

打印循環冗餘校驗(CRC)每一個指定文件的校驗和字節數

通信

比較兩個文件排序,輸出在三列獨特的線條和線條是常見的

cp

拷貝文件

csplit

將給定的文件分爲幾個新文件,將它們根據給定的模式或行號和輸出每一個新文件的字節數

減小

打印部分的線路,選擇部分根據給定的字段或位置

日期

在給定的格式顯示當前時間,或設置系統日期

dd

拷貝一個文件使用給定的塊大小和計數,同時有選擇地執行轉換

df

報告的可用磁盤空間(使用)在全部掛載文件系統,或者只在文件系統保持選中的文件

dir

列出每一個給定的內容目錄(同樣的 ls命令)

dircolors

輸出命令來設置 LS_COLOR環境變量改變所使用的配色方案 ls

目錄名

條目錄從文件後綴名

報告的磁盤空間使用的當前目錄,由每一個給定的目錄(包括全部子目錄)或每個給定的文件

回聲

顯示給定的字符串

env

在修改後的環境中運行一個命令

擴大

將製表符轉換爲空格

expr

計算表達式

因素

打印全部指定的整數數字的主要因素

什麼也不作,但沒有成功;它老是退出狀態碼錶示失敗

fmt

將段落在給定的文件中

褶皺

包裝線在給定的文件中

報告用戶的組成員關係

打印前十行(或給定的行數)的每一個文件

hostid

報告的數字標識符(十六進制)主機

id

報告的有效用戶ID、組ID和指定的當前用戶或用戶的組成員關係

安裝

拷貝文件,設置他們的許可模式,若是可能的話,他們的全部者和組

加入

鏈接的線相同的加入字段從兩個不一樣的文件

連接

用給定的名稱建立一個硬連接到一個文件

ln

使硬連接或軟(象徵性的)文件之間的聯繫

logname

報告當前用戶的登陸名

ls

列出每一個���定目錄的內容

md5sum

報告或檢查消息摘要5 MD5校驗和

mkdir

用給定的名稱建立目錄

mkfifo

建立先進先出(fifo),「命名管道」的UNIX的說法,用給定的名稱

mknod

用給定的名稱建立設備節點;設備節點是一個字符特殊文件,一塊特殊文件,或一個FIFO

mktemp

建立臨時文件以一種安全的方式;在腳本中使用它

mv

移動或重命名文件或目錄

不錯的

運行一個程序修改調度優先級

數字線從給定的文件

nohup

運行一個命令受禁錮,輸出重定向��一個日誌文件中

nproc

打印的數量處理單元可用於一個過程

numfmt

將數字轉換爲或從人類可讀的字符串

od

八進制和其餘格式的轉儲文件

粘貼

合併給定的文件,按順序加入相應的線並排,製表符隔開

pathchk

檢查文件名是否有效或可移植

小指

是一個輕量級的手指端;它報道一些給定的用戶的信息

公關

分頁和columnates文件打印

printenv

打印環境

printf

根據給定的格式打印給定的參數,就像C printf函數

ptx

產生一個交換指數從給定的文件的內容,每一個關鍵字的上下文

松材線蟲病

報告的當前工做目錄的名稱

指向

報告的價值符號連接

realpath

打印的解決路徑

rm

刪除文件或目錄

刪除文件夾

刪除目錄是空的

runcon

運行一個命令,指定的安全上下文

seq

輸出一個數字序列在必定範圍內與一個給定的增量

sha1sum

打印或檢查160位安全散列算法1(SHA1)校驗和

sha224sum

打印或檢查224位校驗和安全散列算法

sha256sum

打印或檢查256位校驗和安全散列算法

sha384sum

打印或檢查384位校驗和安全散列算法

sha512sum

打印或檢查512位校驗和安全散列算法

分解

覆蓋給定的文件屢次與複雜的模式,很難恢復數據

shuf

打亂行文本

睡眠

給定的時間停頓

排序

從給定的文件類型的

分裂

給定文件分割成小塊,大小或行數

統計

顯示文件或文件系統���狀態

stdbuf

運行命令改變緩衝操做的標準流

stty

集或報了結端線設置

總和

爲每一個給定的文件打印校驗和和塊數量

同步

將文件系統緩衝;它迫使改變塊磁盤並更新超級塊

tac

在反向鏈接給定的文件

尾巴

打印最後十行(或給定的行數)的每一個文件

三通

從標準輸入讀取在寫標準輸出和給定的文件

測試

比較值和檢查文件類型

超時

運行一個命令的時間限制

觸摸

修改文件時間戳,設置給定文件的訪問和修改時間爲當前時間;建立文件不存在零長度

tr

翻譯、擠壓和刪除給定的字符從標準輸入

真正的

什麼也不作,成功;它老是退出狀態碼錶示成功

截斷

收縮或擴展一個文件到指定的大小

tsort

執行一個拓撲排序;它寫一個徹底有序列表根據給定文件中的部分排序

tty

報告的文件名終端鏈接到標準輸入

uname

報告系統信息

面板摺疊

將空格轉換爲製表符

uniq

丟棄全部但一個連續相同的行

拆開

刪除給定的文件

用戶

報告當前登陸用戶的名稱

vdir

是同樣的 ls - l

wc

報告的行數,話說,和字節爲每一個給定的文件,以及總當多個文件

報告是誰登陸

顯示本用戶信息

報告與當前有效的用戶ID相關聯的用戶名

是的

重複輸出 「y或一個給定的字符串,直到死亡

libstdbuf

所使用的庫 stdbuf

最後一次更新在

6.51。你要- 3.6

你要包包含程序顯示文件或目錄之間的差別。

近似創建時間: 0.4業務單位
所需的磁盤空間: 30 MB

6.51.1。你要安裝

你要準備編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

6.51.2。你要的內容

安裝程序: diff,cmp diff3,sdiff

簡短的描述

cmp

比較兩個文件和報告是否在他們不一樣的字節

diff

比較兩個文件或目錄並報告線在不一樣的文件

diff3

比較三個文件

sdiff

合併兩個文件和交互式地輸出結果

最後一次更新在

6.52。Gawk-4.1.4

呆呆的包包含操縱文本文件的程序。

近似創建時間: 0.3業務單位
所需的磁盤空間: 36 MB

6.52.1。安裝呆呆的

準備呆呆的編譯:

./configure --prefix=/usr

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

若是須要,安裝文檔:

mkdir -v /usr/share/doc/gawk-4.1.4 cp    -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-4.1.4

6.52.2。呆呆的內容

安裝程序: awk呆呆(連接),呆呆的,gawk-4.1.4,igawk
安裝庫: filefuncs。因此,:。因此,叉。因此,原地。因此,ordchr。因此,readdir。readfile。因此,revoutput。因此,revtwoway。因此,rwarray。因此,testext。所以,從此
安裝目錄: /usr/lib/gawk、/usr/libexec/awk /usr/share/awk,/usr/share/doc/gawk-4.1.4

簡短的描述

awk

的連接 靦腆的人

靦腆的人

一個程序用於處理文本文件;這是GNU的實現 awk

gawk-4.1.4

一個硬連接 靦腆的人

igawk

給了 靦腆的人包含文件的能力

最後一次更新在

6.53。Findutils-4.6.0

Findutils包包含程序找到文件。這些項目提供了遞歸搜索目錄樹和建立、維護和搜索數據庫(一般比遞歸查找更快,可是不可靠,若是數據庫最近沒有更新)。

近似創建時間: 0.7業務單位
所需的磁盤空間: 48 MB

6.53.1。安裝Findutils

首先,抑制一個測試在一些機器上能夠永遠循環:

sed -i 's/test-lock..EXEEXT.//' tests/Makefile.in

Findutils準備編譯:

./configure --prefix=/usr --localstatedir=/var/lib/locate

配置選項的含義:

--localstatedir

這個選項的位置變化 定位數據庫在 /var/lib/locateFHS-compliant。

編譯包:

make

測試結果,問題:

make check

安裝包:

make install

一些依靠LFS-Bootscripts的腳本包 找到。做爲 /usr可能不可用在引導的早期階段,這個項目須要在根分區。的 更新資料庫腳本還須要修改正確的顯式路徑:

mv -v /usr/bin/find /bin sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb

6.53.2。Findutils內容

安裝程序: 代碼,發現、定位、oldfind更新資料庫,xargs

簡短的描述

代碼

曾用於生產嗎 定位數據庫;它的祖先 frcode

找到

搜索給定目錄樹文件匹配指定的標準

定位

經過數據庫的文件名搜索和報告的名稱包含一個給定的字符串或匹配一個給定的模式

oldfind

舊版本的發現,使用不一樣的算法

更新資料庫

更新 定位數據庫;它會掃描整個文件系統(包括其餘文件系統正在安裝,除非告知不要),把每一個文件的名字找到到數據庫中

xargs

可用於應用給定命令的列表文件

最後一次更新在

6.54。Groff-1.22.3

Groff包包含程序處理和格式化文本。

近似創建時間: 0.4業務單位
所需的磁盤空間: 83 MB

6.54.1。安裝Groff

Groff預計環境變量 PAGE包含默認紙張大小。爲用戶在美國, PAGE=letter是適當的。在其餘地方, PAGE=A4可能更合適。而在編譯配置默認紙張大小,它能夠覆蓋後經過呼應 「A4」或「信」到 /etc/papersize文件。

Groff準備編譯:

頁面=。/ configure——prefix = / usr<paper_size>

這個包不支持並行構建。編譯包:

make -j1

這個包不有一個測試套件。

安裝包:

make install

6.54.2。Groff內容

安裝程序: addftinfo afmtodit,化學,eqn、eqn2graph gdiffmk,glilypond,gperl,gpinyin,grap2graph,入庫單,grodvi,groff,groffer,熟料,grolbp,grolj4,gropdf,集團崛起,難看的,hpftodit,indxbib,lkbib,lookbib,mmroff,neqn,nroff,pdfmom,pdfroff,pfbtops,圖片,pic2graph,post-grohtml,preconv,pre-grohtml,參考,roff2dvi,roff2html,roff2pdf,roff2ps,roff2text,roff2x,soelim,臺,tfmtodit、troff
安裝目錄: /usr/lib/groff /usr/share/doc/groff-1.22.3,/usr/share/groff

簡短的描述

addftinfo

讀取troff字體文件並添加一些額外的font-metric使用的信息 groff系統

afmtodit

建立一個使用的字體文件 groff 集團

化學

Groff預處理生產化學結構圖

eqn

編譯的描述方程嵌入troff文件輸入命令所理解 troff

eqn2graph

轉換troff EQN(方程)裁剪圖像

gdiffmk

標誌着groff / nroff / troff文件之間的差別

glilypond

將曲譜用lilypond語言轉換成groff語言

gperl

Preprocesor groff,容許添加perl代碼進入groff文件

gpinyin

Preprocesor groff,容許添加象漢語拼音進入groff文件。

grap2graph

grap圖轉換成位圖圖像出現

入庫單

一個 groff預處理器小鬼文件

grodvi

一個司機 groff生產特克斯dvi格式

groff

前端groff文檔格式化系統;一般,它運行 troff程序和後處理器適合所選設備

groffer

顯示groff X和遙控終端文件和手冊頁

熟料

讀取文件和猜想的 groff選項 -e, -man, -me, -mm, -ms, -p, -s, -t須要打印文件和報告嗎 groff命令包括那些選項

grolbp

是一個 groff爲佳能CAPSL打印機驅動程序(LBP-4和LBP-8系列激光打印機)

grolj4

是一個司機 groff產生輸出PCL5格式適用於惠普激光打印機4打印機

gropdf

翻譯GNU的輸出 troff爲PDF

集團

翻譯GNU的輸出 troff到PostScript

難看的

翻譯GNU的輸出 troff成適合typewriter-like設備

hpftodit

建立一個使用的字體文件 groff -Tlj4從一個HP-tagged字體指標文件

indxbib

建立一個反向索引指定的書目數據庫,文件使用 請參考, lookbib, lkbib

lkbib

搜索指定書目數據庫引用包含密鑰和報告發現的任何引用

lookbib

打印標準錯誤的提示(除非標準輸入不是終端),讀取一行包含一組從標準輸入關鍵字,搜索指定文件引用的書目數據庫包含這些關鍵詞,打印上發現的任何引用標準輸出,並重復這個過程,直到結束輸入

mmroff

一個簡單的預處理 groff

neqn

美國信息交換標準代碼格式方程(ASCII)輸出

nroff

一個腳���,模擬 nroff命令使用 groff

pdfmom

是一個包裝groff,促進生產的PDF文檔文件格式與媽媽宏。

pdfroff

使用groff建立pdf文檔

pfbtops

翻譯PostScript字體 .pfbASCII格式

圖片

編譯的描述圖片嵌入troff或特克斯文件輸入命令被特克斯或理解 troff

pic2graph

裁剪圖片圖轉換成圖像

post-grohtml

翻譯GNU的輸出 troff與HTML

preconv

轉換編碼的輸入文件GNU troff理解

pre-grohtml

翻譯GNU的輸出 troff與HTML

請參考

��一個文件的內容複製到標準輸出,除了之間的界線 .[ .]解釋爲引用,和之間的界限是什麼 .R1 .R2解釋爲命令引用如何處理

roff2dvi

將每一年的文件轉換成DVI格式

roff2html

將每一年的文件轉換爲HTML格式

roff2pdf

將每一年的文件轉換成pdf文檔

roff2ps

將每一年的文件轉換成ps文件

roff2text

將每一年的文件轉換成文本文件

roff2x

將每一年的文件轉換成其餘格式

soelim

讀取文件並替換的形式 因此文件提到的內容 文件

資源描述

編譯的描述表嵌入troff文件輸入命令所理解 troff

tfmtodit

建立一個使用的字體文件 groff -Tdvi

troff

是高度兼容Unix troff;它一般應該使用調用 groff命令,該命令還將運行預處理器和後處理器以適當的順序和適當的選項

最後一次更新在

6.55。grub - 2.02

GRUB包包含了大統一引導裝載程序。

近似創建時間: 0.8業務單位
所需的磁盤空間: 144 MB

6.55.1。安裝GRUB

GRUB準備編譯:

./configure --prefix=/usr          \             --sbindir=/sbin        \             --sysconfdir=/etc      \             --disable-efiemu       \             --disable-werror

新的配置選項的含義:

--disable-werror

這容許構建完整的警告最近引入的Flex版本。

--disable-efiemu

這個選項最小化是由禁用LFS的特性和測試程序不須要。

編譯包:

make

這個包不有一個測試套件。

安裝包:

make install

使用GRUB,使你的LFS系統可引導將在討論8.4節,「使用GRUB引導過程設置」.

6.55.2。GRUB的內容

安裝程序: grub-bios-setup、grub-editenv grub-file、grub-fstest grub-glue-efi,grub-install,grub-kbdcomp,grub-macbless,grub-menulst2cfg,grub-mkconfig,grub-mkimage,grub-mklayout,grub-mknetdir,grub-mkpasswd-pbkdf2,grub-mkrelpath,grub-mkrescue,grub-mkstandalone,grub-ofpathname,grub-probe,grub-reboot,grub-render-label,grub-script-check,grub-set-default grub-sparc64-setup,grub-syslinux2cfg
安裝目錄: /usr/lib/grub,/etc/grub.d,/usr/share/grub和引導/ grub(grub-install首次運行時)

簡短的描述

grub-bios-setup

是一個輔助程序grub-install嗎

grub-editenv

一個工具來編輯環境

grub-file

檢查是否指定類型的文件。

grub-fstest

工具來調試文件系統驅動程序

grub-glue-efi

流程ia32和amd64 EFI圖像和膠水他們根據蘋果的格式。

grub-install

在您的驅動器安裝GRUB

grub-kbdcomp

腳本,該腳本將xkb佈局成一個被GRUB

grub-macbless

蘋果樣式或HFS +祝福在HFS文件

grub-menulst2cfg

轉換一個GRUB Legacy menu.lst成一個 grub.cfg使用GRUB 2

grub-mkconfig

生成一個grub配置文件

grub-mkimage

作一個GRUB啓動映像

grub-mklayout

生成一個GRUB鍵盤佈局文件

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息