編譯gentoo
1. gentoo重新編譯內核,是否需要重新安裝之前安裝的軟體詳細點。
大部分的軟體不需要重新編譯
少量的會需要重新編譯下,比如:顯卡驅動等硬體驅動或者一些需要內核模塊支持的程序
如果你更換了內核版本,那麼這些程序一定需要重新編譯
如果你沒有更換內核版本,但是改動涉及很多硬體方面的內容,那也需要重新編譯這部分軟體,否則會這些軟體/硬體沒辦法工作~
有一個工具:mole_rebuild (emerge mole_rebuild就可以了)
如果你不確定是否需要emerge編譯哪些軟體,那就執行:
mole_rebuild list (在我的電腦上就一個軟體需要重新編譯,就是閉源的ati顯卡驅動)
則會列出需要重新編譯的軟體(它不會記住你是否重新編譯過了這些軟體,而是告訴你這些可能需要重新安裝,所以你更新內核之後執行一次mole-rebuild就可以了)
然後你可以執行:mole-rebuild rebuild來重新安裝這些軟體~
2. linux Gentoo安裝,採用stage1方式,完全自己編譯內核,這需要聯網。
樓主,你沒有這個能力,也沒有這個外部環境就不要這么折騰了。
妥妥的用 Windows 吧……
1、安裝過程理論上不可以中斷,不過實際上,在編譯軟體包的過程中 ^C ,下次是可以繼續的。emerge 每完成一個軟體包,就會自動記錄相關的信息並且安裝到系統裡面。因為已經有了這個軟體包的全套過程,下次繼續會從斷掉的那個軟體包開始重新編譯安裝。不過軟體包互相之間有依賴關系,軟體包升級後,可能介面會改變,導致某些程序出問題。如果出問題的正好是 emerge 和相關的東西,比如 python ,那就肯定掛了。
2、斷網依然可以繼續編譯。不過沒有下載的源代碼就沒辦法再次下載了。
3、不聯網需要提前下載 portage 的數據,和對應想編譯的軟體源代碼。
4、你需要一個 chroot 環境,所以,必須是有一個 Linux 系統,這個系統可以是任何方式啟動的,只要能啟動到 Linux 命令行,並且可以實現讀取你需要安裝到的地方即可。就如同你安裝 Windows ,你需要啟動一個安裝環境,也就是安裝 Windows 的那個安裝程序界面(Ghost版就是啟動到 Ghost 裡面)。
3. 如何用gentoo交叉編譯一個基本系統
嵌入式系統的編譯環境
為某個平台開發軟體,首先需要一個編譯環境。一般來說,編譯環境包括三部分:工具 鏈/運行環境/編譯方法。對於嵌入式系統來說,常見的編譯環境有三種:
本地環境。如很流行的Ubuntu for ARM,利用官方製作好的目標機鏡像(通常包含了 編譯環境),直接在目標機上編譯/安裝軟體,與PC機開發完全一樣。這種方法簡單省 事。缺點也顯而易見,編譯速度慢,耗時長,特別是較大的軟體包(如xbmc)的時候, 程序員不是停下來喝杯咖啡就可以收攤,恐怕得打場通宵dota後才能看到結果 了…(或許distcc能有所改善)
虛擬環境。在PC上建立目標機的虛擬環境,如QEMU-ARM,然後chroot到虛擬環境 中編譯/安裝軟體。這種方法利用了PC的處理能力,速度比本地環境要快得多,但 QEMU並不能完美的模擬目標機環境,如不支持某些系統調用等,這可能導致它不能 正確的編譯某些軟體。
交叉編譯。為目標機交叉編譯軟體,這是最常規的辦法,也是上面兩種方法實現的基 礎。說交叉編譯是「臟活」,是因為需要手工解決軟體包的所有依賴問題,手工編譯 每一個軟體包,並且解決軟體包對目標機兼容問題… 看網上鋪天蓋地關於求教/指導 某個軟體包如何正確交叉編譯就知道,有多少程序員在被它虐?
gentoo下的交叉編譯
gentoo是一個metadistribution,從源代碼構建整個系統,同時支持很多不同的體 系如alpha/arm/hppa/ppc/sh/sparc/s390等,也為交叉編譯提供了便利的工具,這是 其它二進制發行版沒有辦法比擬的(scratchbox也顯得弱爆了)。
gentoo下的交叉編譯通過crossdev和portage來實現。portage帶來的好處是自 動解決依賴和自動升級更新系統,跟本機環境一樣。
製作工具鏈
crossdev用來製作交叉工具鏈,並且還提供了交叉編譯環境下的emerge的輔助腳本。如 下編譯arm平台的工具鏈:
$ sudo crossdev -t arm-supertux-linux-gnueabi
這樣,crossdev最終製作了符合「gentoo規范」的arm交叉編譯器。
運行環境
crossdev生成/usr/arm-supertux-linux-gnueabi/目錄作為目標系統 $buildroot。編譯後生成的目標會被emerge到$buildroot,編譯時依賴的環境(如 鏈接庫/頭文件/pkgconfig等)也都在$buildroot。
交叉編譯
有了工具鏈/運行環境,使用的crossdev封裝過的emerge,就可以自由的emerge了。 如交叉編譯bash:
$ sudo emerge-arm-supertux-linux-gnueabi -avu bash
porage會自動把bash的依賴如ncurses/readline一起emerge到$buildroot。 交叉編譯就是變得如此簡單…
碰到的問題
站在巨人的肩膀上可以看的更遠,前提是我們先要爬上巨人的肩膀。portage是一個快 速更新迭代的系統,並不完美,維護者沒有辦法測試每個軟體包的所有兼容性。所以, 當你想安裝一個圖形環境如$emerge -avu enlightenment時,很可能會出現錯誤。但 portage提供了細粒度的控制幫助解決這樣的問題。下面是我碰到過一些情形和解決方 法:
由於軟體包的環境變數引起的問題,如鏈接庫指向了/usr/bin,而非 $buildroot。可以配置$buldroot/etc/portage/env/目錄下相應的文 件,portage會自動source該文件,從而改變編譯時的環境。
portage沒有包含該軟體或portage自身的bug引起,如默認使能了某個在目標機 平台不能使用的特性。建立一個針對目標機的overlay,自己編寫相應軟體包的 ebuild文件指導portage進行交叉編譯。
當某個軟體包分階段編譯時,如perl編譯時先生成miniperl,通過miniperl最 後生成perl目標映像。由於miniperl被交叉編譯器生成目標機的映像,正常情況 下不能主機環境中繼續運行生成最終的目標映像。這就要藉助qemu-arm+binfmt模 擬目標機環境,讓miniperl在主機環境中也能無縫的運行。
從形式上看,處理上面幾種情況,也是「臟活」。不僅需要了解該軟體包的編譯環境, 還需要了解portage的原理,還要知道ebuild的書寫語法。但是,與傳統的交叉編譯 方式比起來,這是一勞永逸的工作,別人使用我的運行環境和overlay,即不需再做什 么就能生成最終的目標機系統。
4. gentoo 和 archlinux 有什麼優缺點
Gentoo和Arch都是滾動更新的Distro。但是Gentoo是基於源碼的,而Arch是二進制。
Gentoo優點是強大的定製性、滾動更新但仍然足夠穩定;缺點是編譯比較耗費時間(CPU沒有足夠快的話),對機器特別是CPU要求高。
Arch的優點是軟體包多,滾動更新且升級迅速,相較Gentoo更易掌握使用;缺點是近乎強迫式必須緊跟最新滾動升級,不然容易出問題。
5. gentoo 編譯內核需要多長時間
取決於CPU的速度,以及選上的內核選項的數量(決定內核的大小)。
很老的P4大約需要一小時。現代的i5不會超過15分鍾。
6. gentoo內核編譯失敗,這是報錯,求解答
看上去像是文件系統沒編譯到內核里,
先查看下你是什麼哪種文件系統,ext2或ext3 (df -T)
比如你的/boot分區是ext2格式的
File systems --->
<*> Second extended fs support
然後重新編譯拷貝到/boot目錄下,重啟試試。