Gentoo是一個很是著名的發行版,在Linux高手中很是流行。以前我也是被Gentoo的威名震懾了,因此一直沒有嘗試安裝,最近感受能夠嘗試一下了。因此今天來看看如何在虛擬機中安裝Gentoo吧。本文參考了Gentoo 安裝手冊,若是想了解更多關於安裝Gentoo的知識,能夠直接查看官方文檔。linux
固然有一說一,Gentoo的安裝確實比Arch複雜多了。Arch其實安裝起來並不算複雜,就是第一次操做命令行不熟悉,而Gentoo相比之下複雜多了,感受難度是Arch安裝5倍不止。特別是配置內核這一項的複雜程度,可能就頂了Arch整個安裝的複雜度。web
首先到Gentoo官網下載所需的網絡安裝鏡像,和Arch同樣,Gentoo沒有提供完整安裝包,只有一個網絡安裝鏡像。固然硬要說的話,Gentoo仍是有完整鏡像的,不過這個鏡像已經三四年沒有更新了,因此咱們徹底不用管它。算法
首先新建虛擬機的過程就不說了,我選擇的CPU是2核,內存2G,硬盤空間32G,啓動方式EFI。除了啓動方式必須設置成EFI之外,其餘設置所有按你們實際狀況來就好了。設置好以後用網絡鏡像啓動虛擬機,應該會看到如圖所示的界面。數據庫
很是有趣的一點就是Gentoo的Live環境了,它雖然是命令行終端,可是卻很是神奇的支持鼠標操做,。鼠標拖動選擇文本等操做所有支持,真的是讓人驚歎。瀏覽器
雖然虛擬機是能夠支持剪貼板複製等操做的,可是在系統安裝過程當中是沒辦法支持的。因此接下來要輸入的大量命令會讓人感到十分困擾。因此爲了方便最好開啓SSH,這樣咱們好歹大部分命令能夠直接複製粘貼。安全
rc-service sshd start
默認root密碼爲空,爲了可以SSH,還有手動設置一下root密碼。bash
passwd
開啓成功以後,輸入ip a
命令查看一下虛擬機的IP,而後咱們就能夠SSH到虛擬機內部了。
網絡
這樣一來就不須要手打命令了。固然並非說全部命令都能無腦複製粘貼,有些地方仍是須要根據本身需求進行修改的。使用SSH還有一個好處就是在下面配置區域的時候,若是你只指定了中文區域,在終端中漢字會顯示成方塊,可是在SSH中能夠正常顯示。若是你準備直接在終端中輸入命令的話,記得同時啓用英文區域。app
固然,由於是虛擬機安裝,因此燒錄鏡像、配置網絡等複雜步驟不須要進行,咱們直接從磁盤分區開始。由於我是EFI方式啓動,因此要分兩個區,ESP以及根分區。less
parted /dev/sda mklabel gpt parted /dev/sda mkpart efi fat32 0% 512M parted /dev/sda mkpart root ext4 512M 100% parted /dev/sda set 1 esp on # 格式化分區 mkfs.fat -F32 /dev/sda1 mkfs.ext4 /dev/sda2
最後將根目錄分區掛載爲/mnt/gentoo
,就能夠進行下一步的工做了。
mount /dev/sda2 /mnt/gentoo
這裏簡單按個人理解介紹一下Gentoo的包,詳細信息請參考關於Stage Tarball的官方文檔,簡單說來能夠分爲Stage 1/2/3/4四個類型:Stage 1能夠簡單理解成源代碼的包;Stage 2一樣包含了Stage 1的全部文件,可是同時還包含了Stage 1編譯出來的文件,也就說是Stage 2是自包含的包(本身能夠編譯出本身);Stage 3則是包含了系統必備工具的集合,也就是咱們這裏要安裝的系統基礎組件(不包括內核和引導器);Stage 4除了Stage 3的文件以外,還包含了內核和系統引導器,因此Stage 4就是一個可運行的包。這裏咱們要學習如何安裝Gentoo,因此選擇下載Stage 3就能夠了,Stage 4主要是用於虛擬機快速運行之類的。
咱們到清華鏡像尋找最新的Stage 3的包,能夠看到這裏有不少文件,x32的咱們不須要,帶nomultilib的也不須要,iso的也不須要。咱們要找的就是tar.xz
格式的歸檔文件,除了包之外,還有三個附加文件分別包含了歸檔包的內容信息(CONTENTS)、校驗信息(DIGESTS)以及加密的校驗信息(DIGESTS.asc)。咱們要把文件和三個校驗文件所有下載下來。
下載命令以下,固然在下載以前,必須將工做目錄切換到/mnt/gentoo
也就是咱們的根目錄下,這樣作的目的很簡單,由於一會要將系統文件解壓到根目錄下。這裏的下載連接是我目前複製出來的,假如你們之後看到本文的話,須要本身打開瀏覽器從新複製一下文件下載連接。
# 必須先切換到/mnt/gentoo cd /mnt/gentoo wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz.CONTENTS wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz.DIGESTS wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz.DIGESTS.asc
若是條件不容許,還可使用另一種方式避免手動輸入這麼一大長串連接。這就是利用文本瀏覽器link來上網並下載文件,光標選擇,回車點擊超連接,d開始下載,q退出瀏覽器。咱們要作的就是用文本瀏覽器訪問清華鏡像網站,而後下載文件。
links https://mirrors.tuna.tsinghua.edu.cn/gentoo/
文本瀏覽器界面以下,使用起來也不算麻煩,將文件本體以及三個校驗文件所有下載下來。
而後用下面的命令來校驗文件。
sha512sum -c stage3-amd64-*.tar.xz.DIGESTS
文件正確的話,應該會顯示兩個OK兩個FIALED。失敗的是另外一種校驗算法,只要有兩個OK,就說明咱們下載的文件是正確無誤的。
最後用下面命令來解壓文件,後面的兩個選項的做用是保留歸檔文件中全部文件正確的權限和命名空間關係。這樣Gentoo的Stage3文件就算安裝完成了。
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
Gentoo是一個源代碼發行版,安裝大多數軟件的時候,其實都是安裝的源代碼,而後在本地編譯的。爲了可以更快更好的編譯軟件,還須要配置一下portage的編譯選項。
# 編輯配置文件 nano /mnt/gentoo/etc/portage/make.conf # 修改COMMAN_FLAGS COMMON_FLAGS="-march=native -O2 -pipe" CFLAGS="${COMMON_FLAGS}" CXXFLAGS="${COMMON_FLAGS}" FCFLAGS="${COMMON_FLAGS}" FFLAGS="${COMMON_FLAGS}" # 添加MAKEOPTS,數字改爲虛擬機設置的總內核數+1 MAKEOPTS="-j5"
用下面的命令設置鏡像源,推薦選擇清華大學鏡像源,按空格選中,而後回車確認。設置成功後,應該能夠在文件最後面看到清華大學的鏡像源。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf # 或者你懶得選擇,直接把清華鏡像源加到配置文件後面也能夠 echo 'GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"' >> /mnt/gentoo/etc/portage/make.conf
而後建立Portage配置文件目錄,並將Gentoo安裝鏡像裏的配置文件複製給咱們的系統。
mkdir --parents /mnt/gentoo/etc/portage/repos.conf cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
另外還要複製DNS信息,這裏--dereference
參數是必須的,否則可能複製到的只是一個連接而已。
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
爲了讓新系統可以正常運行,須要掛載如下文件系統。
mount --types proc /proc /mnt/gentoo/proc mount --rbind /sys /mnt/gentoo/sys mount --make-rslave /mnt/gentoo/sys mount --rbind /dev /mnt/gentoo/dev mount --make-rslave /mnt/gentoo/dev
用下面的命令切換到新的環境中,最後一條命令不是必須的,可是它會在命令提示符前面添加一個(chroot)
提示咱們處在新環境中。
chroot /mnt/gentoo /bin/bash source /etc/profile export PS1="(chroot) ${PS1}"
這裏不少發行版都使用了不一樣的掛載點,最經常使用的掛載點是/boot/efi
,ArchWiki裏推薦使用/efi
,而這裏Gentoo文檔中介紹的是使用/boot
,咱們按照文檔走就能夠了。
mount /dev/sda1 /boot
Portage是Gentoo的軟件包管理器,首先咱們從網絡上下載數據庫快照。
emerge-webrsync
而後選擇列出可用的profile,從中選擇一個。這裏又用到了另一個工具eselect,它是Gentoo的通用管理界面,讓咱們方便的完成系統的各類配置和操做。由於Gentoo安裝比較複雜,並且又是編譯安裝,因此這裏選擇其餘profile的話,可能編譯時間會很是長。所以這裏你們看看就好,保持默認便可。
# 先列出可用的profile,帶星號是目前選擇的 eselect profile list # 假如你想選擇的話 eselect profile set 2
下面是個人profile輸出。
@world集合是Gentoo全部軟件和配置的集合,要進行下一步的安裝和配置,必須先更新@world集合。
emerge --ask --verbose --update --deep --newuse @world
做爲一個源代碼編譯的Linux發行版,Gentoo的不少軟件包並非直接安裝二進制版本,而是下載源代碼由用戶選擇編譯。USE環境變量就是Gentoo提供給用戶的一個工具,利用它能夠指定一些環境變量,在編譯的時候啓用或者禁用某些功能。假如我如今要安裝的是Gnome桌面,就能夠禁用Qt的編譯選項,這樣編譯出來的軟件就不包含Qt的功能,軟件包更加小巧,運行起來也會更快一點。
固然新手用戶就沒有必要更改這些高級選項了,默認的就徹底夠用了。若是你想要看看USE變量裏面有什麼東西的話,能夠用下面的命令。
emerge --info | grep ^USE
若是想查看USE變量裏面全部可用的選項,能夠用下面的命令。
less /var/db/repos/gentoo/profiles/use.desc
首先要配置時區。
echo Asia/Shanghai > /etc/timezone emerge --config sys-libs/timezone-data
而後配置區域。
echo 'zh_CN.UTF-8 UTF-8' >> /etc/locale.gen # 若是你不用SSH,須要添加英文區域 echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen locale-gen # 列出可用的區域 eselect locale list # 選擇中文區域的編號 eselect locale set 2
最後從新加載一下環境變量。注意一下上面的設置,若是你是SSH到虛擬機系統的話,能夠放心配置中文區域,可是若是你是直接在虛擬機終端裏操做的話,須要在eselect locale set
那裏選擇英文區域,否則漢字是沒法正確顯示的。
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
官方文檔這裏詳細介紹瞭如何配置和優化內核,開啓必須的功能,關閉沒必要要的功能。雖然對於初學者來講貌似這是很高深的知識,可是若是你照着作的話,會發現配置內核也不是這麼困難的工做。固然若是你仍是有點心虛的話,Gentoo也能夠自動配置內核。
首先安裝內核源代碼和內核編譯工具。由於Gentoo的安裝是在本地編譯的,因此用時比較長。假如你發現安裝瞬間完成,是由於沒有更新配置文件的緣由。須要輸入etc-update
並選擇-3
自動更新配置文件,而後從新輸入命令便可編譯安裝。
emerge --ask sys-kernel/gentoo-sources emerge --ask sys-kernel/genkernel
fstab是一個很重要的文件,在系統啓動的時候,會讀取fstab文件並掛載fstab中記錄的分區。這裏咱們有boot分區和根目錄分區兩個要掛載的分區。而genkernel工具要安裝內核的話,天然須要知道咱們的啓動分區在哪裏,所以首先要配置fstab文件。
首先用lsblk -f
命令查看分區信息,要注意UUID和標籤。另外要注意若是從新分區或者格式化,這些信息就會發生變化。
知道了標籤和UUID,就能夠填寫fstab信息了,雖然也能夠用/dev/sda1
這樣的塊設備名稱,可是不夠安全。因此咱們用UUID來編寫fstab。第一個是分區名,推薦使用標籤或者UUID;第二個是掛載點,也就是分區掛載的位置;第三個是分區的文件系統類型;第四個是掛載選項;第五個dump參數,默認0便可;第六個pass參數,對於根分區要設置成1,其餘分區設置成2。最後fstab應該相似這樣。固然UUID或者標籤應該改爲你本身實際的值。你的fstab文件應該相似下面這樣。
UUID=1f3f0313-cfc3-47d3-90e3-52c6d1b67757 / ext4 noatime 0 1 UUID=2E77-ED51 /boot vfat defaults,noatime 0 2
在開始手動配置內核以前,咱們須要瞭解硬件的各項信息,這須要安裝另外一個包來作到。
emerge --ask sys-apps/pciutils
在配置以前,還能夠經過lsmod
命令來查看當前所處的Gentoo Live鏡像開啓的功能, 這能夠做爲咱們在配置內核時的重要參考。
一切準備好以後,就能夠切換到內核源代碼目錄並打開配置菜單。
cd /usr/src/linux make menuconfig
這樣就會打開一個終端界面的圖形化配置工具,和其餘一些終端工具操做方法相似,光標鍵選擇,空格選擇,按兩下Esc退回到上一個界面,/
是搜索。
有些內核選項是必須的,必須編譯到內核中,而不是做爲模塊加載。*
表示包括到內核中,M
表示做爲模塊加載,[]
只有包括到內核中和排除在外兩種選項,<>
則有包括到內核中、排除在外和以模塊加載三種選項。下面這些選項都必須以*
方式編譯到內核中。
devtmpfs支持。
Device Drivers ---> Generic Driver Options ---> [*] Maintain a devtmpfs filesystem to mount at /dev [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
SCSI磁盤支持。
Device Drivers ---> SCSI device support ---> <*> SCSI disk support
選擇支持的文件系統。由於前面我用的FAT32格式化的ESP,EXT4格式化的根目錄,因此這裏這兩項(FAT32也就是VFAT)必須包括到內核中,虛擬內存和proc文件系統也是必選的。其實這裏還能夠取消掉不須要的文件系統,可是對於新手我不建議取消任何本身不明白的東西,很容易弄的最後內核沒辦法啓動。
File systems ---> < > Second extended fs support < > The Extended 3 (ext3) filesystem <*> The Extended 4 (ext4) filesystem < > Reiserfs support < > JFS filesystem support < > XFS filesystem support < > Btrfs filesystem support DOS/FAT/NT Filesystems ---> <*> MSDOS fs support <*> VFAT (Windows-95) fs support Pseudo Filesystems ---> [*] /proc file system support [*] Tmpfs virtual memory file system support (former shm fs)
假如你使用PPPoE撥號的話,還須要啓用如下功能。可是由於咱們是虛擬機嘛,因此就不用動下面的設置了。
Device Drivers ---> Network device support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports
若是你的處理器是多核的,還須要開啓SMP(對稱多處理器支持)。
Processor type and features ---> [*] Symmetric multi-processing support
就算是虛擬機,也常常遇到使用USB的狀況,因此USB也必須啓用。
Device Drivers ---> HID support ---> -*- HID bus support <*> Generic HID driver [*] Battery level reporting for HID devices USB HID support ---> <*> USB HID transport layer [*] USB support ---> <*> xHCI HCD (USB 3.0) support <*> EHCI HCD (USB 2.0) support <*> OHCI HCD (USB 1.1) support
由於咱們選擇了multlib,因此32和64位的程序都會安裝。爲了支持32位程序,必須啓用32位程序模擬功能。這裏其實卻是不用怎麼改,默認已經都選上了。
Processor type and features ---> [*] Machine Check / overheating reporting [*] Intel MCE Features [*] AMD MCE Features Processor family (AMD-Opteron/Athlon64) ---> ( ) Opteron/Athlon64/Hammer/K8 ( ) Intel P4 / older Netburst based Xeon ( ) Core 2/newer Xeon ( ) Intel Atom (*) Generic-x86-64 Binary Emulations ---> [*] IA32 Emulation
啓用GPT支持,由於前面我用的GPT分區表,EFI啓動方式,因此這兩項也必須啓用。
-*- Enable the block layer ---> Partition Types ---> [*] Advanced partition selection [*] EFI GUID Partition support
EFI的支持。
Processor type and features ---> [*] EFI runtime service support [*] EFI stub support [*] EFI mixed-mode support Firmware Drivers ---> EFI (Extensible Firmware Interface) Support ---> <*> EFI Variable Support via sysfs
這裏我用的是VMware,因此下列內核選項也必須選擇。某些選項依賴其它選項,使用搜索功能查看具體的依賴項,而後依次啓用。
[*] Networking support ---> Networking options ---> <*> Virtual Socket protocol <*> VMware VMCI transport for Virtual Sockets Device Drivers ---> Misc devices ---> <*> VMware Balloon Driver <*> VMware VMCI Driver SCSI device support ---> [*] SCSI low-level drivers ---> <*> VMware PVSCSI driver support [*] Network device support ---> [*] Ethernet driver support ---> [*] AMD devices <*> AMD 8111 (new PCI LANCE) support <*> AMD PCnet32 PCI support [*] Intel devices <*> Intel(R) PRO/1000 Gigabit Ethernet support <*> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support <*> VMware VMXNET3 ethernet driver Input device support ---> [*] Keyboards ---> <*> AT keyboard File systems ---> <*> FUSE (Filesystem in Userspace) support
把上面全部必選項都配置好以後,選擇save保存配置文件,而後exit退出。默認配置文件名是.config
,可是最好手動複製一個備份,有時候默認名稱的配置文件會莫名丟失,只能重頭再配置一次。而後就能夠開始編譯和安裝了。這個過程可能持續十分鐘到幾個小時,主要取決於你選擇的功能大小以及電腦配置。
# 編譯內核 make && make modules_install # 編譯完成後安裝內核到boot分區 make install
若是你感受手動配置內核比較麻煩,或者辛辛苦苦配了半天,結果內核沒配對系統進不去了。能夠考慮第二種方式,就是自動編譯內核。這種方式有個缺點就是會開啓大部分選項,因此編譯內核用時比較長。
網上查了一下可能須要幾十分鐘到兩三個小時,在虛擬機中編譯的話可能用時更長,可是考慮到本身研究如何把內核跑通可能也得用這麼長時間,因此自動編譯內核也不是不能夠。假如你在手動配置內核的時候遭受了不少失敗,不妨考慮考慮電腦掛在那裏讓它慢慢編譯。
genkernel all
雖然官方文檔說這是可選的,可是爲了保險起見咱們仍是安裝firmware。
emerge --ask sys-kernel/linux-firmware
別忘了安裝initramfs,若是你是自動編譯內核的話,能夠不用安裝initramfs,由於genkernel all
會自動安裝內核以及initramfs。
genkernel --install initramfs
內核編譯完畢以後,查看/boot
分區內容,應該會看到initramfs和vmlinuz文件,這樣內核就準備就緒了。
接下來就是一些系統配置工做。
nano -w /etc/conf.d/hostname # 設置主機名 hostname="mygentoo"
先安裝軟件包。
emerge --ask --noreplace net-misc/netifrc
而後配置DHCP。
nano -w /etc/conf.d/net # 添加DHCP配置 config_eth0="dhcp"
配置網絡自啓動。
cd /etc/init.d ln -s net.lo net.eth0 rc-update add net.eth0 default
等到成功進入系統之後,可能會出現沒網的狀況,由於默認的網絡接口名字不必定是eth0,這時候須要使用ip a
查看一下實際的名稱,而後從新編輯一下網絡配置。
# 添加正確的網絡配置 cd /etc/init.d ln -s net.lo net.eno16777736 rc-update add net.16777736 default # 刪除錯誤的配置 rm /etc/init.d/net.eth0 rc-update del net.eth0 default # 啓動網絡 rc-service net.16777736 start
別忘了設置root密碼。
passwd
還有一些系統工具也須要安裝。
安裝和啓動日誌工具。
emerge --ask app-admin/sysklogd rc-update add sysklogd default
由於前面設置了中文區域,因此終端會顯示方塊。最好這裏直接預先開啓SSH服務,方便之後遠程登陸。
rc-update add sshd default
由於系統使用了FAT32和EXT4兩個文件系統,因此至少這兩種工具必須安裝。
emerge --ask sys-fs/dosfstools sys-fs/e2fsprogs
安裝DHCP工具。
emerge --ask net-misc/dhcpcd
root用戶是特權用戶,平常使用並不安全,因此須要添加新用戶。
useradd -m -G users,wheel,audio -s /bin/bash yitian passwd yitian
是否是想起來有些地方不對勁,沒錯,還有一開始下載的stage3文件,假如最後系統成功啓動了的話,他們就沒用了,能夠安全的刪除掉。
rm /stage3-*.tar.*
最後一步就是安裝系統引導器了,推薦使用grub,功能齊全。
emerge --ask --verbose sys-boot/grub:2
grub-install --target=x86_64-efi --efi-directory=/boot grub-mkconfig -o /boot/grub/grub.cfg
安裝完畢以後,輸入exit退出chroot環境。
(chroot) livecd ~ # exit
而後就umount分區,而後重啓系統。
cd umount -l /mnt/gentoo/dev{/shm,/pts,} umount -R /mnt/gentoo reboot
重啓以後應該會看到grub的界面,可是別覺得這就成功了。由於重點是手動配置編譯的內核是否可以正常啓動。因此接下來繼續觀察,看看是否能夠成功啓動內核進入系統。若是你一次性安裝成功,那麼恭喜了。
可是我先後總共裝了三四天才算成功。第一天照着官方文檔慢慢看慢慢敲命令,次日卡在了配置內核這一步了,而後先後反覆測試,最後把前面的各類步驟弄得很是熟悉,能夠直接複製粘貼命令。最後我放棄了手動配置內核,作好了編譯大半天的準備,因而改用genkernel自動編譯內核。而後最悲催的事情發生了,genkernel半個小時之後失敗了。
最後沒辦法我又開始了手動配置內核的步驟,終於慢慢靠着搜索把文檔列出來的全部項都找到並配置好了。並且爲了保險起見,此次我沒有關閉任何默認內核配置,只按着文檔把全部新的項加上去了。終於奇蹟發生了,重啓以後終於成功了!
安裝screenfetch截個圖,作個記念。
emerge app-misc/screenfetch
我一開始用的是XFS作根分區的文件系統,也確實在內核中將XFS相關選項設置爲編譯到內核中,可是奈何不知道哪裏漏了,因此最後啓動系統的時候,出現了這個錯誤。理論上找到全部XFS、驅動程序等相關選項,而後添加到內核配置中從新編譯一下內核,就能夠解決問題了。惋惜的是我對內核配置一竅不通,百般之下只好認栽,從新用EXT4安裝了一遍,終於成功了。