這可能是除了官方wiki寫的最全的教程了
(可能還存在錯誤之處,歡迎指出)
2018.7.3更新,完善make.conf的說明
准備:
- 至少一個人
- 一雙能打字的手
- 一個能思考的腦袋
- 倆部電影
- 至少一台正常的電腦
- 一個正常的U盤
- 一個穩定的網絡環境
- 一個穩定的電源
- 一個已能完美運行的系統.(如果你是Linux系統則不需要下一個)
- 一個Ubuntu ISO鏡像文件
如果你是Windows系統:
下載Rufus刻錄Ubuntu鏡像
至於UEFI Legacy GPT和MBR等我就不說了,如果不熟悉這些玩Gentoo恐怕困難重重
如果你已有一個正常運行的Linux,恭喜,安裝Gentoo會簡單很多.
安裝完並確定可用之后之后你可以tar打包已安裝的系統使用live CD解壓過去並修改相關配置
需要知道的一些東西
Gentoo有很多好用的工具
這里說下安裝過程會遇到的
eselect可以用來配置系統
比如eselect python set X
可以設置默認的python(eselect python list
查看可用選項)eselect fontconfig enable X
可以啟用xxx字體配置(eselct fontconfig list
查看可用選項)
etc-update可以用來更新or生成配置文件
假如系統更新了軟件 有新的配置文件 Gentoo會生成一個臨時的配置文件,需要自己手動刪除 合並或覆蓋 可以通過運行etc-update
進行
記住,要盡量保證emerge提示無可用更新的配置文件(特別是更新portage的配置文件的時候)
准備磁盤
啟動到live CD(已有Linux系統忽略這句)
使用你喜歡的工具進行分區(或者直接用gparted)
這里會聲明下分區,之后的過程將使用這些變量
UEFI(GPT):
sda1 ---/boot--->vfat >=200M #注意分區設置flags為esp
sda2 ---/--->ext4,btrfs,xfs,jfs.etc >=20G #建議至少20G大小
sda3 ---swap---> >=2G #除非你16G內存,即使你8G內存也建議設置2G的swap
Legacy(MBR):
sda1 ---/boot--->ext2 >=200M #可以不設置此分區
sda2 ---/--->ext4,btrfs,xfs,jfs.etc >=20G #建議至少20G大小
sda3 ---swap---> >=2G #除非你16G內存,即使你8G內存也建議設置2G的swap
創建目錄:
mkdir -v /mnt/gentoo
掛載目錄:
mount -v /dev/sda2 /mnt/gentoo
安裝基本文件
在這里你需要選擇一個鏡像站,在這里列出幾個速度比較快的鏡像站,請親自測試選擇鏡像站:
進入鏡像站的/gentoo/releases/amd64/autobuilds/
目錄
如果你對systemd沒有剛需則進入current-stage3-amd64/
目錄選擇最新的stage3
下載到本地的/mnt/gentoo
目錄,例如:stage3-amd64-20171019.tar.bz2
如果你需要systemd,則進入current-stage3-amd64-systemd/
目錄選擇最新的stage3
下載到本地的/mnt/gentoo
目錄,例如:stage3-amd64-systemd-20171018.tar.bz2
下載完成之后進入gentoo的根目錄並解壓文件:
cd /mnt/gentoo
tar vxpf stage3-*.tar.bz2或xz --xattrs-include='*.*' --numeric-owner
配置make.conf
和Portage Mirror
以下參數在經過自己調整或選擇之后加入到 /mnt/gentoo/etc/portage/make.conf
- USE: 首先,你可以刪掉默認的USE標記,加上
-bindist
(不了解USE的情況下建議如此) - CFLAGS: 將CFLAGS修改為
CFLAGS="-march=native -O2 -pipe"
或者你也可以指定.例如我的Intel CPU是haswell,將native換成haswell就行(不確定就不要指定).你也可以在這里看到所有可以設置的值 - MAKEOPTS: 根據你的CPU核心數設置MAKEOPTS例如雙四線程設置為
MAKEOPTS="-j5"
- GENTOO_MIRRORS: 設置為
GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/"
請自行選擇速度最快的Mirror - EMERGE_DEFAULT_OPTS: 設置為
EMERGE_DEFAULT_OPTS="--keep-going --with-bdeps=y"
是個不錯的選擇,keep going意為安裝一堆軟件時遇到編譯錯誤自動跳過這個軟件繼續編譯安裝 - FEATURES: 在這里最好寫成
# FEATURES="${FEATURES} -userpriv -usersandbox -sandbox"
,最好在前面加上#注釋掉,在你編譯軟件遇到權限不足時去掉注釋即可解決問題(但請務必注意是不是因為rm -rf /*
等命令權限不足,因為說不定你的ebuild文件被篡改了) - ACCEPT_KEYWORDS: 如果你想用作桌面/學習/開發系統那就務必加上
ACCEPT_KEYWORDS="~amd64"
,服務器/工作/家/娛樂用可以忽略 - ACCEPT_LICENSE: 加上
ACCEPT_LICENSE="*"
表示此系統接受所有軟件許可證,即不論非自由還是自由軟件都接受,非商業用戶基本不需要考慮 - L10N: 設置為
L10N="en-US zh-CN en zh"
- LINGUAS: 設置為
LINGUAS="en_US zh_CN en zh"
- VIDEO_CARDS: 根據你的顯卡類型設置假如你是NVIDIA單顯卡則設置為
VIDEO_CARDS="nvidia"
(閉源驅動)VIDEO_CARDS="nouveau"
(開源驅動).還有radeon和intel,但如果你是雙顯卡例如Intel+NVIDIA則設置為VIDEO_CARDS="intel i965 nvidia"
(只要不是遠古的集成顯卡都是用i965) - GRUB_PLATFORMS: 如果你使用GRUB且使用UEFI啟動則添加
GRUB_PLATFORMS="efi-64"
- Portage Mirror: 這個不是make.conf的選項.
mkdir /mnt/gentoo/etc/portage/repos.conf
創建repos.conf目錄並添加如下到/mnt/gentoo/etc/portage/repos.conf/gentoo.conf文件里面(自行選擇速度最快的鏡像站):
[gentoo]
location = /usr/portage
sync-type = rsync
#sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage/
sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
auto-sync = yes
- 這里還有個CPU_FLAGS_X86,在后面的步驟
emerge --sync
之后安裝app-portage/cpuid2cpuflags
並配置:
emerge --ask app-portage/cpuid2cpuflags
cpuid2cpuflags #將輸出值改入CPU_FLAGS_X86
示例配置(請以實際為標准):
# /usr/share/portage/config/make.conf.example
# GCC
CFLAGS="-march=haswell -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
MAKEOPTS="-j5"
# USE
SUPPORT="pulseaudio btrfs mtp git chromium"
DESKTOP="infinality emoji cjk"
FUCK="-bindist -grub -plymouth -systemd consolekit -modemmanager -gnome-shell -gnome -gnome-keyring -nautilus -modules"
ELSE="client icu sudo python"
USE="${SUPPORT} ${DESKTOP} ${FUCK} ${ELSE}"
# Portage
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
# GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo/"
GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/"
EMERGE_DEFAULT_OPTS="--ask --verbose=y --keep-going --with-bdeps=y --load-average"
# FEATURES="${FEATURES} -userpriv -usersandbox -sandbox"
PORTAGE_REPO_DUPLICATE_WARN="0"
# PORTAGE_TMPDIR="/var/tmp/notmpfs"
ACCEPT_KEYWORDS="~amd64"
ACCEPT_LICENSE="*"
# Language
L10N="en-US zh-CN en zh"
LINGUAS="en_US zh_CN en zh"
# Else
VIDEO_CARDS="intel i965 nvidia"
RUBY_TARGETS="ruby24 ruby25"
LLVM_TARGETS="X86"
QEMU_SOFTMMU_TARGETS="alpha aarch64 arm i386 mips mips64 mips64el mipsel ppc ppc64 s390x sh4 sh4eb sparc sparc64 x86_64"
QEMU_USER_TARGETS="alpha aarch64 arm armeb i386 mips mipsel ppc ppc64 ppc64abi32 s390x sh4 sh4eb sparc sparc32plus sparc64"
# ABI_X86="64 32"
進入Chroot環境
復制DNS:
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
掛載必要文件系統:
mount -t 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
Debian等發行版可能需要:
test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm
進入Chroot:
chroot /mnt/gentoo /bin/bash
source /etc/profile
如果你有boot分區則在這里掛載上去:
mount /dev/sda1 /boot
選擇Profile並更新系統
使用快照更新Portage:
emerge-webrsync
使用rsync同步:
emerge --sync
使用eselect news read
命令閱讀新聞
列出profile:
eselect profile list
如果你使用systemd則需要選上帶有systemd字樣的選項
如果你不使用systemd則不建議使用GNOME桌面,因為GNOME桌面依賴systemd(辣雞)
例如不使用systemd且使用KDE桌面則選擇19 default/linux/amd64/17.0/desktop/plasma:
eselect profile set 19
然后就是漫長的更新了(有錢人當我沒說):
emerge -auvDN --with-bdeps=y @world
如果碰到未滿足的xxx或者其它提示:
emerge -auvDN --with-bdeps=y --autounmask-write @world
etc-update # 然后輸入-3就能更新配置,確保再次運行時沒有可更新的文件
emerge -auvDN --with-bdeps=y @world
如果以上還是不能解決問題,則進入/etc/portage目錄刪掉package.use,package.mask和package.unmask文件或目錄再次嘗試
到了這里,你可以去看電影了...
等它跑完了,先別急
運行下這幾個命令:
emerge @preserved-rebuild
perl-cleaner --all
emerge -auvDN --with-bdeps=y @world
確定沒有更新之后再繼續,否則查看輸出嘗試重復運行
如果你在emerge -auvDN --with-bdeps=y @world
時提示帶有bindist
字樣且你已啟用ACCEPT_KEYWORDS="~amd64"
的話
運行如下命令之后再次重試:
cd /usr/portage/dev-libs/openssl/
ebuild openssl-1.0.2o-r6.ebuild merge # 這里openssl的版本可能和你的不一樣,運行ls命令查看可用版本,替換為版本號帶o字母的即可
配置時區和地區
echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data
echo "en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eselect locale list
這里建議使用英語易於排錯,之后你可以自行換成中文:
eselect locale set X # X換成上面命令顯示的序號
配置fstab,安裝文件系統工具
如果你和我一樣懶
可以下載此腳本自動配置fstab(引自Arch的genfstab):
wget https://raw.githubusercontent.com/YangMame/Gentoo-Installer/master/genfstab
chmod +x genfstab
#可選 cp genfstab /usr/bin/
./genfstab / > /etc/fstab
nano /etc/fstab #最好檢查下此文件,刪掉無用掛載點
上面的腳本在chroot環境下不能正常使用-U參數在fstab寫入分區的UUID
掛載點主要有倆種格式:
/dev/sda1 /boot vfat或ext2 defaults 0 0
/dev/sda2 / ext4或btrfs,jfs,xfs.etc defaults 0 0
/dev/sda3 none swap defaults 0 0
這里的UUID通過blkid查看
UUID=xxxxxxxxxxx /boot vfat或ext2 defaults 0 0
UUID=xxxxxxxxxxx / ext4或btrfs,jfs,xfs.etc defaults 0 0
UUID=xxxxxxxxxxx none swap defaults 0 0
如果你使用非ext4文件系統則在編譯內核前需要另外安裝相應的工具:
btrfs: emerge sys-fs/btrfs-progs
xfs: emerge sys-fs/xfsprogs
jfs: emerge sys-fs/jfsutils
安裝NetworkManager
沒錯,我很懶,又加上我是KDE桌面用戶,所以我選擇使用NetworkManager連接網絡:
emerge -av networkmanager
如果它說有未滿足的xxxx或者其它提示:
emerge --autounmask-write networkmanager
etc-update --automode -3
emerge networkmanager
openRC(即非systemd)添加開機服務:
rc-update add NetworkManager default
systemd添加開機服務:
systemctl enable NetworkManager
在/etc/conf.d/hostname內修改主機名,例如:
echo hostname=\"Test\" > /etc/conf.d/hostname
安裝一些必要工具並配置
emerge app-admin/sysklogd sys-process/cronie sudo layman grub
sed -i 's/\# \%wheel ALL=(ALL) ALL/\%wheel ALL=(ALL) ALL/g' /etc/sudoers
passwd #是時候設置root密碼了
如果你是systemd:
sed -i 's/\# GRUB_CMDLINE_LINUX=\"init=\/usr\/lib\/systemd\/systemd\"/GRUB_CMDLINE_LINUX=\"init=\/usr\/lib\/systemd\/systemd\"/g' /etc/default/grub
ln -sf /proc/self/mounts /etc/mtab
systemd-machine-id-setup
非systemd系統:
rc-update add sysklogd default
rc-update add cronie default
配置編譯安裝內核
有以下推薦內核可供選擇:
gentoo-sources
ck-sources
git-sources
這里示例使用gentoo-sources:
emerge -av gentoo-sources
如果你不會配置內核或者時間不允許可以先用genkernel
:
emerge -av genkernel
genkernel --menuconfig all
genkernel --install initramfs
或者你當前運行着一個正常使用的Linux的話也可以:
cd /usr/src/linux
make localyesconfig
# 如果詢問新選項,一路回車吧,23333
make -jX #將X替換為你想編譯時的線程數
make modules_install
make install
genkernel --install initramfs
手動配置內核:
cd /usr/src/linux
make menuconfig
關於配置內核
本站有寫內核配置的文章
你也可以選擇去看金步國的文章
配置完之后:
make -jX #將X替換為你想編譯時的線程數
make modules_install
make install
genkernel --install initramfs
安裝GRUB並創建用戶
如果你是UEFI:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Gentoo
grub-mkconfig -o /boot/grub/grub.cfg
如果出現No space left on device
請運行:
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
rm /sys/firmware/efi/efivars/dump-*
然后重試(由 @Chara 提議加上)
如果你是Legacy:
grub-install --target=i386-pc /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
創建一個管理員並設置密碼:
useradd -m -G users,wheel,portage,usb,video 這里換成你的用戶名(小寫)
passwd 用戶名
顯卡驅動
NVIDIA單顯卡:
emerge -av x11-drivers/nvidia-drivers
Intel單顯卡:
emerge -av x11-drivers/xf86-video-intel
Intel+NVIDIA雙顯卡請看這篇文章
其它顯卡硬件待補坑 歡迎提出
檢查系統可用性
到了這里你應該可以重啟查看系統是否能正常啟動,然后在安裝桌面
重啟前最好檢查下的東西:
- boot目錄是否有相應文件
- GRUB是否正確生成配置並顯示內核等文件
- fstab是否正確無誤
安裝桌面
首先需要確保已安裝xorg-server和顯卡驅動:
emerge -av xorg-server
emerge xf86-video-intel #Intel顯卡驅動
emerge nvidia-drivers #nvidia顯卡驅動
如遇需要更新配置則運行etc-update --automode -3
並再次運行命令
KDE:
emerge -av plasma-desktop plasma-nm plasma-pa sddm konsole
如遇需要更新配置則運行etc-update --automode -3
並再次運行命令
如果你是systemd:
systemctl enable sddm
openrc則編輯/etc/conf.d/xdm
將DISPLAYMANAGER
的值改為sddm
並:
rc-update add xdm default
GNOME:
emerge -av gnome-shell gdm gnome-terminal
systemctl enable gdm
如遇需要更新配置則運行etc-update --automode -3
並再次運行命令
這里只說明systemd,因為openrc並不能滿足GNOME的依賴