導航:首頁 > 源碼編譯 > 教你編譯自己的linux發行版

教你編譯自己的linux發行版

發布時間:2023-05-14 23:07:46

⑴ 如何構建自己的 linux 發行版

風格的書籍,深入研究了調度、內存管理、多進程和線程、文件系統,以及用戶與內核之間的交互。寫作 Linux 書籍的作家相對於 UNIX 作家來說有一個優勢:盡管團體發生了劇變,但是 Linux 內核不可能分成幾個相互競爭的分支,由於 GNU Public License (GPL)、集中式研究實驗室 Open Source Development Lab (OSDL) 和 Linus Torvalds 不可動搖的地位,使得 Linux 有幸成為一個緩慢移動的目標(slow-moving target)。為什麼 UNIX 內核很重要除了某些方面具有一定的相似性之外,不同的 Unix 內核並不怎麼相同。各種 UNIX 風格也具有一個 Linux 所缺少的優點:所有 UNIX 風格都被假定是完全的操作系統。Linux 通常被描述為「只是一個內核」(如果有這樣的定義的話,也是一個武斷的定義),它給出公共功能和實現的核心,不管內核是運行在不太強大的 Pentium? II 機器上還是 Symmetric Multiprocessing (SMP) 系統上,這些公共功能和實現都不會發生本質上的改變。為了更加簡化,有人可能會說,離 Linux 內核越遠,就會發現更多的變化,而 UNIX 系統則趨向於是各種 UNIX/POSIX 標準的離散實現。事情並沒有這么簡單。檢測 Linux 內核和系統級代碼可能是一件很費時間的事情,並且在現實世界中會限制使用。LFS 項目旨在解決 Linux 上有限的系統級可理解性問題。關於內核需要大量的庫和工具來讓 Linux 系統執行最基本的任務這一事實,已經做過討論了,但是如果一個比較熟練的用戶具有一個 slim-line Linux 發行版,他不想下載幾吉位元組不讓他優化系統、也不讓他拋開所有這些麻煩且不必要的工具的二進制代碼,那該怎麼辦?如果一個非常熟練的用戶拒絕接受各種社團發行版的 苛刻條件(diktat),而想要運行一個來自 CD 的 Linux/Apache/MySQL/PHP (LAMP) 類型的應用程序堆棧,那該怎麼辦?LFS 可以解決這些問題。回頁首Linux From ScratchLFS 項目顯然建立於那些對於構成基本的 Linux 系統來說充分而不必要的源文件的基礎之上。它已經超越了 Linux 內核和設備驅動程序,因為要產生一個可工作的 Linux 系統,您必須添加一個完整的編譯器工具鏈、許多 Linux 匯編程序實用工具、glibc 系統庫、系統配置工具和連接到 userland shell 訪問的工具。LFS 建立在這樣一個假設的基礎之上,即 Linux 或 UNIX 允許具有一些腳本編寫知識的用戶,了解一個完全有用的系統的工作方式,而不用深入研究內核代碼本身。為了了解 Linux 系統的工作方式,LFS 的創建者們確定,通過遵循模塊依賴性來編譯系統,可能是了解一般操作系統和特定的 Linux 的機制最自然的方式。用戶掌握了編譯過程之後,就可以開始消除依賴性樹的那些連接到與支持操作系統基本目的無關的系統組件的部件。例如,在編譯完成之後,消除編譯器工具鏈本身是可行的。在沒有全套的命令行實用工具時,可以湊合使用嵌入式 LAMP 堆棧。配置實用工具也可以被丟棄,大多數用戶可以湊合著用一個而不是太多 Linux 將會支持的文件系統。Linux 部件LFS 系統的一個重要部件是,可以作為 tar ball 得到的大量源文件。文檔是另一個重要部件,並且是最重要的。實際上,很有可能利用一個最新的 LFS 書籍文件並創建一個 LFS 發行版,因為 LFS 書籍中詳細描述了每個下載位置和每個源文件及其依賴性的特徵。用於從內核到編譯器到 shell 編譯每組源文件的過程都是已經寫好了的,如果可能,您也可以在描述具有不同特徵的系統的 LFS 書籍中找到替代的常式。LFS 系統的另一個不太可能出現在一般用戶工具箱中的部件是,在基本 LFS 系統組合在一起之後引導系統所需的引導腳本。現在對 LFS 發行版的最大警告是:勇敢的發行版構建者所需的是一個可工作的 Linux 發行版,包括一個完整的編譯器工具鏈和一套文件系統創建實用工具。自然,所有基於源代碼的 Linux 發行版都需要使用各個發行版都完全不同的特定編譯器版本來引導。LFS 不是該領域的惟一系統,但它是惟一允許您直接處理單個源文件的系統。大多數其他基於源代碼的 Linux 系統,比如 Sourcemage 和 MyGeOS,提供一個完整的下載,建議用戶使用。LFS 不作這樣的假設,並且鼓勵拆開 LFS 框架。預先假設起作用的 Linux 發行版已安裝在非外來的(nonexotic)硬體上,即使 LFS 可能沒有配置工具和腳本那麼受關注。要編譯 LFS,您需要准備一個分區和一個文件系統,還需要編譯一個編譯器和系統庫。如果用手工完成的話,這是一個相當傷腦筋的過程,但是也的確可以增加您在處理其餘安裝方面的自信。整個系統的編譯要花一小時到四天的時間,具體時間取決於底層硬體的年代和您的命令行技術熟練程度。作一個相當大的假設,如果您願意很大程度上保留書籍安裝,並使對 LFS 書籍中提議的安裝的更改保持最小,您也可以使用自動化的安裝常式來安裝基於 LFS 的發行版。安裝常式沒有在 LFS 書籍中給出,但是可以在名稱 Automated Linux from Scratch (ALFS) 之下作為基於 XML 的發行版得到。活動安裝可以作為基於 C 的腳本得到,該腳本使用 ncurses 來模擬圖形安裝。該安裝也叫做 nALFS 並給出一個極為靈活的包安裝框架。工作需要一個起作用的 Linux 系統,並帶有可以工作的 C 編譯器和 XML 解析器。一個可以工作的 LFS 系統就足夠了。Automated Linux From ScratchALFS 的目的是超越 LFS 本身。LFS 自己指導基於 Linux 的操作系統的內部工作,但是它不具有單個圖形用戶界面 (GUI)。LFS 既不允許連接到網路,也不允許連接到 Internet。ALFS 可以簡化系統的擴展,例如,通過添加支持 Internet 訪問的庫,或者通過安裝圖形桌面所需的 X 庫。回頁首超越LFSLFS 的創建者們認識到了對其他各種基於源代碼的 Linux 系統的需求。為了這些想要超越 LFS 並添加 X Window System、GNOME 和網路支持的人,創建了另一個 LFS 派生物:Beyond Linux From Scratch (BLFS)。 第三版 LFS 書籍(讓我們不會忘記是在談論書籍而非發行版),形成一個以一個角為基礎的三角形:對於自動化編譯和完全的基於源代碼的 Linux 發行版,基本的 LFS 版本是基礎。BLFS 將基本的 Linux 系統轉化成一個完全的用戶廣泛接受的 Linux 系統。AFLS 簡化基於源代碼的 Linux 安裝的安裝和擴展。整個基於源代碼的系統的編譯是由一個腳本指導的,您在針對運行腳本的硬體調整腳本之後,就可以讓腳本自己運行了。在您(或安裝工程師)確定需要運行哪些包,也即特定的辦公應用程序套件之後,您就可以容易地擴展安裝順序了。ALFS 也遲早會派上用場,因為它適用於從源代碼進行網路范圍的安裝。回頁首Hardened LFSLFS 家族的最後一個成員解決基於源代碼的 Linux 的一個特別重要的方面:安全性。對於不想依賴於所選的 Linux 發行版伺服器交付的補丁的那些人,安全性的普通方法是,針對所選的核心庫和應用程序跟蹤安全報告。對於 LFS 實現人員來說,問題有些不同:盡管不是不可能,但是也難以審計 Linux 內核代碼,也許還包括集中於基於 Linux 的操作系統的內部機能的很多庫和實用工具。代碼審計相當費時,並且只有當補丁伺服器是由專門人員集中維護的時,添加大量補丁才是明智的。但是可以取代一些為反映安全問題的新方法而重新編寫過的庫。一個好的例子是,通過從一個適當大的隨機數池中隨機分配數字,使得猜測進程標識符極為困難。OpenBSD 項目最先採用了該方法,隨後,各種 UNIX 風格和 Linux 發行版都採用了該方法。一個相當新的項目叫做 Hardened Linux From Scratch (HLFS),在 Linux 下採用了這一安全方法。該項目假設相當正規地掌握了 LFS 和 BLFS 的一些部件,並使用了不會成為大多數 Linux 系統中的標準的幾個實用工具和庫。添加到 HLFS 中的最重要的部件可能是 Stack-Smashing Protector (SSP),通過使用 gcc 指令可以啟用該功能。SSP 開發來防禦 stack-smashing 攻擊,這類攻擊屬於影響 Linux 系統的一類最常見的安全威脅。其他安全措施包括一流的隨機數生成器和位置獨立的可執行程序的編譯,其中通常轉化成靜態鏈接對象代碼的可執行代碼作為共享庫出現,而位置獨立的可執行庫通過將地址隨機化可以隱藏這些地址。當然,可從 HLFS Web 站點得到大量補丁,並可查看其源代碼。回頁首日益壯大的 LFS 家族在許多方面,Linux 版本的 LFS 家族是一個方法,給予黑客以構造基於 Linux 的操作系統的能力。但是對於 LFS 的創建者們來說,最重要的結果似乎是:通過 LFS,所有 Linux 發行版對於所涉及的用戶都成了智能的了。通過允許用戶一部分一部分地構建 Linux 發行版,並幫助用戶將一個基於 Linux 的操作系統看作一個由許多部件組成的系統,還可以用另外的方法構建 Linux 發行版。更一般來說,用戶要更改構建 Linux 發行版的方式,不必要是程序員:只要從構建 LFS 系統學到的一點腳本編寫能力就足夠了。LFS 專家可以改變和擴展 Linux 發行版的完美組合,而不會影響它的基本結構。對於有人員和專家維護 Linux 系統,但沒有資金從咨詢機構和公司購買商業支持的機構來說,該功能特別重要。已經針對教學目的和大型網路,演示了基於 LFS 的 Linux 系統。它們也有可能用於其他領域。參考資料 您可以參閱本文在 developerWorks 全球站點上的 英文原文。 最新LFS 版本的門戶是 LFS 下載站點。它提供從幾個方面可用的 LFS 書籍。 LFS 家族的最新成員是 HLFS 或Hardened LFS 風格。 如果願意,LFS 狂熱者們可以創建 自動化的 安裝。 如果基本的 LFS 安裝還不夠,那麼可以繼續安裝更加復雜的 extended Linux From Scratch,也叫做 BLFS。 為了防禦 stack-smashing 攻擊,SSP 指令使得 gcc 可以編譯針對該類型威脅而保護的代碼。 位置獨立的代碼在關於 position-independent executables 的一章中作了簡短介紹。 在developerWorks Linux 專區 可以找到更多為 Linux 開發者准備的資源。 訪問developerWorks 開放源碼專區,獲得廣泛的 how-to 信息、工具和項目更新,以幫助您利用開放源碼技術進行開發,並將它們與 IBM 產品一起使用。 利用IBM 試用軟體 革新您的下一個開放源碼開發項目。可從下載或 DVD 得到試用軟體。 通過參與 developerWorks blogs 加入developerWorks 社區。 關於作者Frank Pohlmann 以前研究的是中東宗教歷史,後來各基金會認為研究宗教辯證歷史與當今世界相去甚遠,從此他便專攻自己熱愛的領域 —— 免費軟體。他獲准成為英國的 LinuxUser and Developer 的技術編輯。您可通過 [email protected] 與他聯系。關閉[x]關於報告濫用的幫助報告濫用謝謝! 此內容已經標識給管理員注意。關閉[x]關於報告濫用的幫助報告濫用報告濫用提交失敗。 請稍後重試。關閉[x]developerWorks:登錄IBM ID:需要一個 IBM ID?忘記IBM ID?密碼:忘記密碼?更改您的密碼 保持登錄。單擊提交則表示您同意developerWorks 的條款和條件。 使用條款 當您初次登錄到 developerWorks 時,將會為您創建一份概要信息。您在developerWorks 概要信息中選擇公開的信息將公開顯示給其他人,但您可以隨時修改這些信息的顯示狀態。您的姓名(除非選擇隱藏)和昵稱將和您在 developerWorks 發布的內容一同顯示。所有提交的信息確保安全。關閉[x]請選擇您的昵稱:當您初次登錄到 developerWorks 時,將會為您創建一份概要信息,您需要指定一個昵稱。您的昵稱將和您在 developerWorks 發布的內容顯示在一起。昵稱長度在 3 至 31 個字元之間。 您的昵稱在 developerWorks 社區中必須是唯一的,並且出於隱私保護的原因,不能是您的電子郵件地址。昵稱:(長度在 3 至 31 個字元之間)單擊提交則表示您同意developerWorks 的條款和條件。 使用條款. 所有提交的信息確保安全。為本文評分評論回頁首

⑵ linux編譯內核步驟

一、准備工作
a) 首先,你要有一台PC(這不廢話么^_^),裝好了Linux。
b) 安裝好GCC(這個指的是host gcc,用於編譯生成運行於pc機程序的)、make、ncurses等工具。
c) 下載一份純凈的Linux內核源碼包,並解壓好。

注意,如果你是為當前PC機編譯內核,最好使用相應的Linux發行版的源碼包。

不過這應該也不是必須的,因為我在我的Fedora 13上(其自帶的內核版本是2.6.33.3),就下載了一個標準的內核linux-2.6.32.65.tar.xz,並且順利的編譯安裝成功了,上電重啟都OK的。不過,我使用的.config配置文件,是Fedora 13自帶內核的配置文件,即/lib/moles/`uname -r`/build/.config

d) 如果你是移植Linux到嵌入式系統,則還要再下載安裝交叉編譯工具鏈。

例如,你的目標單板CPU可能是arm或mips等cpu,則安裝相應的交叉編譯工具鏈。安裝後,需要將工具鏈路徑添加到PATH環境變數中。例如,你安裝的是arm工具鏈,那麼你在shell中執行類似如下的命令,假如有類似的輸出,就說明安裝好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
註:arm的工具鏈,可以從這里下載:回復「ARM」即可查看。

二、設置編譯目標

在配置或編譯內核之前,首先要確定目標CPU架構,以及編譯時採用什麼工具鏈。這是最最基礎的信息,首先要確定的。
如果你是為當前使用的PC機編譯內核,則無須設置。
否則的話,就要明確設置。
這里以arm為例,來說明。
有兩種設置方法():

a) 修改Makefile
打開內核源碼根目錄下的Makefile,修改如下兩個Makefile變數並保存。
ARCH := arm
CROSS_COMPILE := arm-linux-

注意,這里cross_compile的設置,是假定所用的交叉工具鏈的gcc程序名稱為arm-linux-gcc。如果實際使用的gcc名稱是some-thing-else-gcc,則這里照葫蘆畫瓢填some-thing-else-即可。總之,要省去名稱中最後的gcc那3個字母。

b) 每次執行make命令時,都通過命令行參數傳入這些信息。
這其實是通過make工具的命令行參數指定變數的值。
例如
配置內核時時,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
編譯內核時使用
make ARCH=arm CROSS_COMPILE=arm-linux-

注意,實際上,對於編譯PC機內核的情況,雖然用戶沒有明確設置,但並不是這兩項沒有配置。因為如果用戶沒有設置這兩項,內核源碼頂層Makefile(位於源碼根目錄下)會通過如下方式生成這兩個變數的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=

經過上面的代碼,ARCH變成了PC編譯機的arch,即SUBARCH。因此,如果PC機上uname -m輸出的是ix86,則ARCH的值就成了i386。

而CROSS_COMPILE的值,如果沒配置,則為空字元串。這樣一來所使用的工具鏈程序的名稱,就不再有類似arm-linux-這樣的前綴,就相當於使用了PC機上的gcc。

最後再多說兩句,ARCH的值還需要再進一步做泛化。因為內核源碼的arch目錄下,不存在i386這個目錄,也沒有sparc64這樣的目錄。

因此頂層makefile中又構造了一個SRCARCH變數,通過如下代碼,生成他的值。這樣一來,SRCARCH變數,才最終匹配到內核源碼arch目錄中的某一個架構名。

SRCARCH := $(ARCH)

ifeq ($(ARCH),i386)
SRCARCH := x86
endif

ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif

ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif

ifeq ($(ARCH),sh64)
SRCARCH := sh
endif

三、配置內核

內核的功能那麼多,我們需要哪些部分,每個部分編譯成什麼形式(編進內核還是編成模塊),每個部分的工作參數如何,這些都是可以配置的。因此,在開始編譯之前,我們需要構建出一份配置清單,放到內核源碼根目錄下,命名為.config文件,然後根據此.config文件,編譯出我們需要的內核。

但是,內核的配置項太多了,一個一個配,太麻煩了。而且,不同的CPU架構,所能配置的配置項集合,是不一樣的。例如,某種CPU的某個功能特性要不要支持的配置項,就是與CPU架構有關的配置項。所以,內核提供了一種簡單的配置方法。

以arm為例,具體做法如下。

a) 根據我們的目標CPU架構,從內核源碼arch/arm/configs目錄下,找一個與目標系統最接近的配置文件(例如s3c2410_defconfig),拷貝到內核源碼根目錄下,命名為.config。

注意,如果你是為當前PC機編譯內核,最好拷貝如下文件到內核源碼根目錄下,做為初始配置文件。這個文件,是PC機當前運行的內核編譯時使用的配置文件。
/lib/moles/`uname -r`/build/.config
這里順便多說兩句,PC機內核的配置文件,選擇的功能真是多。不編不知道,一編才知道。Linux發行方這樣做的目的,可能是想讓所發行的Linux能夠滿足用戶的各種需求吧。

b) 執行make menuconfig對此配置做一些需要的修改,退出時選擇保存,就將新的配置更新到.config文件中了。

⑶ 如何編譯linux版本

編譯linux內核步驟:
1、安裝內核
如果內核已經安裝(/usr/src/目錄有linux子目錄),跳過。如果沒有安裝,在光碟機中放入linux安裝光碟,找到kernel-source-2.xx.xx.rpm文件(xx代表數字,表示內核的版本號),比如RedHat linux的RPMS目錄是/RedHat/RPMS/目錄,然後使用命令rpm -ivh kernel-source-2.xx.xx.rpm安裝內核。如果沒有安裝盤,可以去各linux廠家站點或者www.kernel.org下載。
2、清除從前編譯內核時殘留的.o 文件和不必要的關聯
cd /usr/src/linux
make mrproper
3、配置內核,修改相關參數,請參考其他資料
在圖形界面下,make xconfig;字元界面下,make menuconfig。在內核配置菜單中正確設置個內核選項,保存退出
4、正確設置關聯文件
make dep
5、編譯內核
對於大內核(比如需要SCSI支持),make bzImage
對於小內核,make zImage
6、編譯模塊
make moles
7、安裝模塊
make moles_install
8、使用新內核
把/usr/src/linux/arch/i386/boot/目錄內新生成的內核文件bzImage/zImage拷貝到/boot目錄,然後修改/etc/lilo.conf文件,加一個啟動選項,使用新內核bzImage/zImage啟動。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告訴lilo預設使用新內核啟動linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留舊有的啟動選項可以保證新內核不能引導的情況,還可以進入linux進行其他操作。保存退出後,不要忘記了最重要的一步,運行/sbin/lilo,使修改生效。
9、重新生成ram磁碟
如果您的系統中的/etc/lilo.conf沒有使用了ram磁碟選項initrd,略過。如果您的系統中的/etc/lilo.conf使用了ram磁碟選項initrd,使用mkinitrd initrd-內核版本號,內核版本號命令重新生成ram磁碟文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之後把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁碟能使系統性能盡可能的優化,具體參考/usr/src/linux/Documents/initrd.txt文件
10、重新啟動,OK!

⑷ 如何打造自己的 Linux 發行版

搜索信螞純「Linux From Scratch」,也就是通常說的LFS,一步一步教你從源碼滑咐製作物圓Linux系統

⑸ 如何編譯linux源代碼

首先uname -r看一下你當前的linux內核版本

1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname -r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核 make menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make bzImage、make moles、make moles
4、安裝,make install
5、.創建系統啟動映像,到 /boot 目錄下,執行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於 /boot/grub/grub.cfg 文件的設置,找到if [ "${linux_gfx_mode}" != "text" ]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改 set default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。

重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make menuconfig這一步,改好後就萬事ok了。

最後再用uname -r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?

⑹ 如何打造自己的 Linux 發行版

LFS 中文版手冊發布:如何打造自己的 Linux 發行版

您是否想過打造您自己的 Linux 發行版?每個 Linux 用戶在他們使用 Linux 的過程中都想過做一個他們自己的發行版,至少一次。我也不例外,作為一個 Linux 菜鳥,我也考慮過開發一個自己的 Linux 發行版。從頭開發一個 Linux 發行版這件事情被稱作 Linux From Scratch (LFS)。

在開始之前,我總結了一些有關 LFS 的內容,如下:
1. 那些想要打造他們自己的 Linux 發行版的人應該了解打造一個 Linux 發行版(打造意味著從頭開始)與配置一個已有的 Linux 發行版的不同
如果您只是想調整下啟動屏幕、定製登錄頁面以及擁有更好的外觀和使用體驗。您可以選擇任何一個 Linux 發行版並且按照您的喜好進行個性化配置。此外,有許多配置工具可以幫助您。
如果您想打包所有必須的文件、引導載入器和內核,並選擇什麼該被包括進來,然後依靠自己編譯這一切東西。那麼您需要的就是 Linux From Scratch (LFS)。
注意:如果您只想要定製 Linux 系統的外表和體驗,這個指南並不適合您。但如果您真的想打造一個 Linux 發行版,並且向了解怎麼開始以及一些其他的信息,那麼這個指南正是為您而寫。
2. 打造一個 Linux 發行版(LFS)的好處
您將了解 Linux 系統的內部工作機制
您將開發一個靈活的適應您需求的系統
您開發的系統(LFS)將會非常緊湊,因為您對該包含/不該包含什麼擁有絕對的掌控
您開發的系統(LFS)在安全性上會更好
3. 打造一個Linux發行版(LFS)的壞處
打造一個 Linux 系統意味著將所有需要的東西放在一起並且編譯之。這需要許多查閱、耐心和時間。而且您需要一個可用的 Linux 系統和足夠的磁碟空間來打造 LFS。
4. 有趣的是,Gentoo/GNU Linux 在某種意義上最接近於 LFS。Gentoo 和 LFS 都是完全從源碼編譯的定製的 Linux 系統
5. 您應該是一個有經驗的Linux用戶,對編譯包、解決依賴有相當的了解,並且是個 shell 腳本的專家。
了解一門編程語言(最好是 C 語言)將會使事情變得容易些。但哪怕您是一個新手,只要您是一個優秀的學習者,可以很快的掌握知識,您也可以開始。最重要的是不要在 LFS 過程中丟失您的熱情。
如果您不夠堅定,恐怕會在 LFS 進行到一半時放棄。
**6. 現在您需要一步一步的指導來打造一個 Linux 。LFS 手冊是打造 LFS 的官方指南。我們的合作站點 tradepub 也為我們的讀者製作了 LFS 的指南,這同樣是免費的。 ###
您可以從下面的鏈接下載 Linux From Scratch 的電子書:

下載: Linux From Scratch
7. 當前 LFS 的版本是 7.7,分為 systemd 版本和非 systemd 版本。
LFS 的官方網站是: http://www.linuxfromscratch.org/
您可以在官網在線瀏覽 LFS 以及類似 BLFS 這樣的相關項目的手冊,也可以下載不同格式的版本。
LFS (非 systemd 版本):
pdf 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.pdf
單一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7-NOCHUNKS.html
打包的多頁 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.tar.bz2
LFS (systemd 版本):
PDF 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.pdf
單一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd-NOCHUNKS.html
打包的多頁 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.tar.bz2
8. Linux 中國/LCTT 翻譯了一份 LFS 手冊(7.7,systemd 版本)
經過 LCTT 成員的努力,我們終於完成了對 LFS 7.7 systemd 版本手冊的翻譯。
手冊在線訪問地址:https://linux.cn/lfs/LFS-BOOK-7.7-systemd/index.html 。
其它格式的版本稍後推出。
感謝參與翻譯的成員: wxy, ictlyh, dongfengweixiao, zpl1025, H-mudcup, Yuking-net, kevinSJ 。

關於:Linux From Scratch
這本手冊是由 LFS 的項目領頭人 Gerard Beekmans 創作的, Matthew Burgess 和 Bruse Dubbs 參與編輯,兩人都是LFS 項目的聯合領導人。這本書內容很廣泛,有 338 頁之多。
手冊中內容包括:介紹 LFS、准備構建、構建 LFS、建立啟動腳本、使 LFS 可以引導,以及附錄。其中涵蓋了您想知道的 LFS 項目中的所有東西。
這本手冊還給出了編譯一個包的預估時間。預估的時間以編譯第一個包的時間作為參考。所有的東西都以易於理解的方式呈現,甚至對於新手來說也是這樣。
如果您有充裕的時間並且真正對構建自己的 Linux 發行版感興趣,那麼您絕對不會錯過下載這個電子書(免費下載)的機會。您需要做的,便是照著這本手冊在一個工作的 Linux 系統(任何 Linux 發行版,足夠的磁碟空間即可)中開始構建您自己的 Linux 系統,付出時間和熱情。
如果 Linux 使您著迷,如果您想自己動手構建一個自己的 Linux 發行版,這便是現階段您應該知道的全部了,其他的信息您可以參考上面鏈接的手冊中的內容。
請讓我了解您閱讀/使用這本手冊的經歷,這本詳盡的 LFS 指南的使用是否足夠簡單?如果您已經構建了一個 LFS 並且想給我們的讀者一些建議,歡迎留言和反饋。
BLFS階段,startx後firefox等程序中文全部亂碼問題的解決 http://www.linuxidc.com/Linux/2007-05/3789.htm
用LFS從零開始構建完整Linux系統 http://www.linuxidc.com/Linux/2011-08/40706.htm
基於Ubuntu 10.10 構建LFS 6.7[圖文] http://www.linuxidc.com/Linux/2011-02/32545.htm
via: http://www.tecmint.com/create-custom-linux-distribution-from-scratch/
作者:Avishek Kumar 譯者:wwy-hust 校對:wxy
本文由 LCTT 原創翻譯

⑺ 如何編譯Linux操作系統的源代碼

首先uname
-r看一下你當前的linux內核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname
-r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核
make
menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make
bzImage、make
moles、make
moles
4、安裝,make
install
5、.創建系統啟動映像,到
/boot
目錄下,執行
mkinitramfs
-o
initrd.img-2.6.36
2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於
/boot/grub/grub.cfg
文件的設置,找到if
[
"${linux_gfx_mode}"
!=
"text"
]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry
'Ubuntu,
with
Linux
3.2.0-35-generic'
--class
ubuntu
--class
gnu-linux
--class
gnu
--class
os
{
recordfail
gfxmode
$linux_gfx_mode
insmod
gzio
insmod
part_msdos
insmod
ext2
set
root='(hd0,msdos1)'
search
--no-floppy
--fs-uuid
--set=root
9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic
root=UUID=9961c170-2566-41ac-8155-18f231c1bea5
ro
quiet
splash
$vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改
set
default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make
menuconfig這一步,改好後就萬事ok了。
最後再用uname
-r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?

⑻ linux發行版 都是怎麼製作的

在這之前,Richard Stallman創建了Free Software Foundation(FSF)組織以及GNU項目,並不斷的編寫創建GNU程序(此類程序的許可方式均為GPL: General Public License)。在不斷的有傑出的程序員和開發者加入到GNU組織中後,便造就了今天我們所看到的Linux,或稱GNU/Linux。 Linux發行版本可以大體分為兩類,一類是商業公司維護的發行版本,一類是社區組織維護的發行版本,前者以著名的Redhat(RHEL)為代表,後者以Debian為代表。下面介紹一下各個發行版本的特點: Redhat,應該稱為Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所謂的Redhat Advance Server,收費版本)、Fedora Core(由原來的Redhat桌面版本發展而來,免費版本)、CentOS(RHEL的社區克隆版本,免費)。Redhat應該說是在國內使用人群最多的Linux版本,甚至有人將Redhat等同於Linux,而有些老鳥更是只用這一個版本的Linux。所以這個版本的特點就是使用人群數量大,資料非常多,言下之意就是如果你有什麼不明白的地方,很容易找到人來問,而且網上的一般Linux教程都是以Redhat為例來講解的。Redhat系列的包管理方式採用的是基於RPM包的YUM包管理方式,包分發方式是編譯好的二進制文件。穩定性方面RHEL和CentOS的穩定性非常好,適合於伺服器使用,但是Fedora Core的穩定性較差,最好只用於桌面應用。 Debian,或者稱Debian系列,包括Debian和Ubuntu等。Debian是社區類Linux的典範,是迄今為止最遵循GNU規范的Linux系統。Debian最早由Ian Murdock於1993年創建,分為三個版本分支(branch): stable, testing和unstable。其中,unstable為最新的測試版本,其中包括最新的軟體包,但是也有相對較多的bug,適合桌面用戶。testing的版本都經過unstable中的測試,相對較為穩定,也支持了不少新技術(比如SMP等)。而stable一般只用於伺服器,上面的軟體包大部分都比較過時,但是穩定和安全性都非常的高。Debian最具特色的是apt-get /dpkg包管理方式,其實Redhat的YUM也是在模仿Debian的APT方式,但在二進制文件發行方式中,APT應該是最好的了。 Ubuntu嚴格來說不能算一個獨立的發行版本,Ubuntu是基於Debian的unstable版本加強而來,可以這么說,Ubuntu就是一個擁有Debian所有的優點,以及自己所加強的優點的近乎完美的Linux桌面系統。根據選擇的桌面系統不同,有三個版本可供選擇,基於Gnome的Ubuntu,基於KDE的Kubuntu以及基於Xfc的Xubuntu。特點是界面非常友好,容易上手,對硬體的支持非常全面,是最適合做桌面系統的Linux發行版本。 Gentoo,偉大的Gentoo是Linux世界最年輕的發行版本,正因為年輕,所以能吸取在她之前的所有發行版本的優點,這也是Gentoo被稱為最完美的Linux發行版本的原因之一。Gentoo最初由Daniel Robbins(FreeBSD的開發者之一)創建,首個穩定版本發布於2002年。由於開發者對FreeBSD的熟識,所以Gentoo擁有媲美FreeBSD的廣受美譽的ports系統——Portage包管理系統。不同於APT和YUM等二進制文件分發的包管理系統,Portage是基於源代碼分發的,必須編譯後才能運行,對於大型軟體而言比較慢,不過正因為所有軟體都是在本地機器編譯的,在經過各種定製的編譯參數優化後,能將機器的硬體性能發揮到極致。Gentoo是所有Linux發行版本里安裝最復雜的,但是又是安裝完成後最便於管理的版本,也是在相同硬體環境下運行最快的版本。最後,介紹一下FreeBSD,需要強調的是:FreeBSD並不是一個Linux系統!但FreeBSD與Linux的用戶群有相當一部分是重合的,二者支持的硬體環境也比較一致,所採用的軟體也比較類似,所以可以將FreeBSD視為一個Linux版本來比較。FreeBSD擁有兩個分支: stable和current。顧名思義,stable是穩定版,而current則是添加了新技術的測試版。FreeBSD採用Ports包管理系統,與Gentoo類似,基於源代碼分發,必須在本地機器編後後才能運行,但是Ports系統沒有Portage系統使用簡便,使用起來稍微復雜一些。FreeBSD的最大特點就是穩定和高效,是作為伺服器操作系統的最佳選擇,但對硬體的支持沒有Linux完備,所以並不適合作為桌面系統。下面給為選擇一個Linux發行版本犯愁的朋友一些建議:如果你只是需要一個桌面系統,而且既不想使用盜版,又不想花大量的錢購買商業軟體,那麼你就需要一款適合桌面使用的Linux發行版本了,如果你不想自己定製任何東西,不想在系統上浪費太多時間,那麼很簡單,你就根據自己的愛好在ubuntu、kubuntu以及xubuntu中選一款吧,三者的區別僅僅是桌面程序的不一樣。 ◆如果你需要一個桌面系統,而且還想非常靈活的定製自己的Linux系統,想讓自己的機器跑得更歡,不介意在Linux系統安裝方面浪費一點時間,那麼你的唯一選擇就是Gentoo,盡情享受Gentoo帶來的自由快感吧! ◆如果你需要的是一個伺服器系統,而且你已經非常厭煩各種Linux的配置,只是想要一個比較穩定的伺服器系統而已,那麼你最好的選擇就是CentOS了,安裝完成後,經過簡單的配置就能提供非常穩定的服務了。 ◆如果你需要的是一個堅如磐石的非常穩定的伺服器系統,那麼你的唯一選擇就是FreeBSD。 ◆如果你需要一個穩定的伺服器系統,而且想深入摸索一下Linux的各個方面的知識,想自己定製許多內容,那麼我推薦你使用Gentoo。

⑼ 如何打造自己的 Linux 發行版

我們散穗可以用谷歌帳絕掘卜戶、Facebook、Twitter、Yahoo、Novell或OpenID來注冊。一旦我們首次登錄進去,會被要求為你的設備(發並穗行版)選擇一個基本模板。

⑽ 如何構建自己的Linux發行版

一、製作LTOS具體過程
光碟結構介紹
* isolinux 目錄存放光碟啟動時的安裝界面信息
* images 目錄包括了必要的啟動映像文件
* CentOS 目錄存放安裝軟體包及信息
* .discinfo 文件是安裝價質的識別信息
* lemp.tar.gz 文件存放系統初始化及其相關程序安裝腳本.
》》環境說明:CentOS 5.3-i386 Vmware Workstation上完成製作工作.
1.安裝製作發行版所需的基本軟體包
# yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs

2.製作ltos源文件夾
# mkdir /ltos
# mkdir /mnt/cdrom
# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom/ 掛載光碟鏡像
或者掛載ISO文件到/mnt/cdrom
# mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom 將CentOS的ISO文件掛載到/mnt/cdrom目錄
# cd /mnt/cdrom
# tar -cf -. | ( cd /ltos ; tar -xvpf -) //將/mnt/cdrom里的文件利用tar全部拷貝到/ltsos這個目錄下.
#cd /ltos //進入此目錄刪除一些無關的文件,仍後進入後面的工作.
[root@server ltos]# ls -al
total 88
drwxr-xr-x 6 root root 4096 Apr 11 21:00 .
drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..
drwxr-xr-x 2 root root 36864 Apr 8 16:06 CentOS
-rw-r--r-- 1 root root 97 Apr 8 16:43 .discinfo
drwxr-xr-x 4 root root 4096 Mar 21 23:04 images
drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux
-rw-r--r-- 1 root root 14371 Apr 11 23:16 lemp.tar.gz //這個軟體包是我們後面要建立的,讀者可以分析一下後面的ks.cfg腳本就可以明白他的用途.
drwxr-xr-x 2 root root 4096 Apr 11 21:00 repodata
-r--r--r-- 1 root root 7048 Mar 21 23:05 TRANS.TBL

3.定製package.list軟體包清單
如安裝一個CentOS5.3的系統,根據自己的需求選擇軟體包;如果想你的系統很小,建議選擇最少的包。安裝完成以後,在系統里會產生日誌。日文文件存放在/root/install.log。
# cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' > packages.list
#mkdir /ltos/CentOS 建立存放rpm包的目錄.

創建自動提取相關rpm腳本:
#vi cprpms.sh
#!/bin/bash
DEBUG=0
LT_CD=/mnt/cdrom
ALL_RPMS_DIR=/mnt/cdrom/CentOS #掛載光碟存放的目錄
LT_RPMS_DIR=/ltos/CentOS #存放RPM包的目錄
packages_list=/root/packages.list
number_of_packages=`cat $packages_list | wc -l`
i=1
while [ $i -le $number_of_packages ] ; do
line=`head -n $i $packages_list | tail -n -1`
name=`echo $line | awk '{print $1}'`
version=`echo $line | awk '{print $3}' | cut -f 2 -d :`
if [ $DEBUG -eq "1" ] ; then
echo $i: $line
echo $name
echo $version
fi
if [ $DEBUG -eq "1" ] ; then
ls $ALL_RPMS_DIR/$name-$version*
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
fi
else
echo "cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/"
cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/
# in case the failed
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
fi
fi
i=`expr $i + 1`
done

執行以上腳本將定製ltos必要的rpm復制到/ltos/CentOS目錄
返回到/ltos目錄下,執行createrepo程序生成repodata下的comps.xml文件
#cd /ltos
#createrepo -g repodata/comps.xml .

閱讀全文

與教你編譯自己的linux發行版相關的資料

熱點內容
簡訊刪除助手文件夾 瀏覽:688
java辦公自動化 瀏覽:340
php中超鏈接 瀏覽:253
linux默認路由設置 瀏覽:36
linux如何掛載iso 瀏覽:432
vs程序換文件夾後不能編譯 瀏覽:557
安卓源碼編譯輸入腳本沒反應 瀏覽:47
phpmysql自增 瀏覽:167
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:278
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:239
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:808
醫療程序員招聘 瀏覽:599
住宿app可砍價是什麼意思 瀏覽:133