本次安装选择 amd64 的 包含 systemd 的 Stage3 文件. 本文记录于2017年,2018年及2019年进行过部分更新。请不要按此文步骤安装Gentoo, 安装Gentoo请直接查阅官方网站WIKI关于安装的部分。
root # parted -a optimal /dev/sda
(parted)print
#使用parted移除全部分区, num 用数字代换
(parted)rm "num"
#设置GPT标签
(parted)mklabel gpt
#创建分区,首先,要告诉parted我们工作要使用的容量单位是megabytes
(parted)unit mib
#创建分区,计算例如:80G=1024*80 M
(parted)mkpart primary 1 2049
(parted)mkpart primary 2049 104449
(parted)mkpart primary 104449 462849
#给分区命名
(parted)name 1 efi
(parted)name 2 rootfs
(parted)name 3 datafs
#将引导分区标识为EFI系统分区
(parted)set 1 boot on
#使用 quit 命令退出parted
(parted)quit
#为分区应用文件系统,设置label
root # mkfs.vfat -F 32 /dev/sda1 #EFI启动分区,挂载在/boot/efi
root # sudo mkfs.ext4 -L ROOT /dev/sda2 #linux根目录
root # sudo mkfs.ext4 -L DATA /dev/sda3 #预留分区
root # fatlabel /dev/sda1 EFI
#查看卷标
root # blkid -s LABEL
#我的内存32G够用,不在SSD上使用swap分区,用swap文件替代
root # dd if=/dev/zero of=/home/swapfile bs=1M count=5120
root # chmod 600 /home/swapfile
root # mkswap -L SWAP /home/swapfile
root # swapon /home/swapfile
#如果想关闭swap,可使用
root # swapoff /home/swapfile
#顺便把第二个硬盘也分区格式化了
root # parted -a optimal /dev/sdb
(parted)print
#使用parted移除全部分区
(parted)rm "num"
#设置GPT标签
(parted)mklabel gpt
#创建分区,首先,要告诉parted我们工作要使用的容量单位是megabytes
(parted)unit mib
#创建分区,计算例如:200G=1024*200 M
(parted)mkpart primary 1 2049
(parted)mkpart primary 2049 104449
(parted)mkpart primary 104449 411649
(parted)mkpart primary 411649 718849
(parted)mkpart primary 718849 923649
(parted)mkpart primary 923649 944129
#给分区命名
(parted)name 1 efi
(parted)name 2 os
(parted)name 3 homefs
(parted)name 4 backup
(parted)name 5 windata
(parted)name 6 vartmp
#将引导分区标识为EFI系统分区
(parted)set 1 boot on
#使用 quit 命令退出parted
(parted)quit
#为分区应用文件系统,设置label,备注:/dev/sdb5预留做windows10资料盘
root # mkfs.vfat -F 32 /dev/sdb1 #预留启动分区
root # mkfs.ext4 -L OS /dev/sdb2 #预留系统分区
root # mkfs.ext4 -L HOME /dev/sdb3 #挂载家目录/home
root # mkfs.ext4 -L BACKUP /dev/sdb4 #备份盘
root # mkfs.ext4 -L VARTMP /dev/sdb6 #挂载到/var/tmp,避免写SSD
root # fatlabel /dev/sdb1 EFI
#顺便把第3个硬盘也分区格式化了
root # parted -a optimal /dev/nvme0n1
(parted)print
#使用parted移除全部分区
(parted)rm "num"
#设置GPT标签
(parted)mklabel gpt
#创建分区,首先,要告诉parted我们工作要使用的容量单位是megabytes
(parted)unit mib
#创建分区,计算例如:80G=1024*80 M
(parted)mkpart primary 1 2049
(parted)mkpart primary 2049 104449
(parted)mkpart primary 104449 462849
#给分区命名
(parted)name 1 efi
(parted)name 2 winfs
(parted)name 3 datafs
#将引导分区标识为EFI系统分区
(parted)set 1 boot on
#使用 quit 命令退出parted
(parted)quit
#为分区应用文件系统,设置label,备注:/dev/nvme0n1p2预留做windows10系统盘
root # mkfs.vfat -F 32 /dev/nvme0n1p1 #预留启动分区
root # mkfs.ext4 -L DATA /dev/nvme0n1p3 #预留分区
root # fatlabel /dev/nvme0n1p1 EFI
#查看卷标
root # blkid -s LABEL
root # mount /dev/sda2 /mnt/gentoo
root # mkdir -p /mnt/gentoo/boot/efi
root # mkdir /mnt/gentoo/home
root # mount /dev/sda1 /mnt/gentoo/boot/efi
root # mount /dev/sdb3 /mnt/gentoo/home
#如果/tmp/需要放在一个独立分区,确保在挂载后变更它的权限:
root # chmod 1777 /mnt/gentoo/tmp
#这同样适用于/var/tmp
查看日期
root # date
#同步日期
root # ntpd -q -g
#或者
root # ntpdate pool.ntp.org
#其他可用的time服务器地址包括
#time.nist.gov
#chime.utoronto.ca
#ntp.pipex.net
#time.windows.com
#或者
root # timedatectl set-ntp true
#手动更新日期
root # date MMDDhhmmYYYY
#或者
root # timedatectl set-time "YYYY-MM-DD hh:mm:ss"
root # cd /mnt/gentoo
root # wget -c "PASTED_STAGE_URL"
#解开Stage 3包
root # tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
#查看CPU类型,可用nproc查看CPU核心数量
root # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
root # nproc
#(可选部分)关于COMMON_FLAGS的参数
# 查看 march参数
root # gcc -c -Q -march=native --help=target | grep march
# 输出结果: -march= skylake
# 比如我的i5-8400 , 上面的输出结果为skylake
##########################################################
# 查到具体的代号后,建立两个空文件
root # touch native.cc march.cc
#######################第一步#############################
# 分别用 -march=native 和 -march=skylake 编译这两个文件
# (gcc 编译参数的含义请自行查询gcc手册)
root # gcc -fverbose-asm -march=native native.cc -S
root # gcc -fverbose-asm -march=skylake march.cc -S
#######################第二步#############################
# 整理一下两个生成的文件
root # sed -i 1,/options\ enabled/d march.s
root # sed -i 1,/options\ enabled/d native.s
# 比较一下这两个文件
root # diff march.s native.s
# 输出结果
< # -m128bit-long-double -m64 -m80387 -madx -maes -malign-stringops -mavx
< # -mavx2 -mbmi -mbmi2 -mclflushopt -mcx16 -mf16c -mfancy-math-387 -mfma
< # -mfp-ret-in-387 -mfsgsbase -mfxsr -mglibc -mhle -mieee-fp
---
> # -m128bit-long-double -m64 -m80387 -mabm -madx -maes -malign-stringops
> # -mavx -mavx2 -mbmi -mbmi2 -mclflushopt -mcx16 -mf16c -mfancy-math-387
> # -mfma -mfp-ret-in-387 -mfsgsbase -mfxsr -mglibc -mhle -mieee-fp
#######################第三步#############################
# 可以看到 第二行中的 -mabm 第一行没有
# 所以把 -mabm 参数加入到 skylake后面再次编译 march.cc ,native.cc 不用管
root # gcc -fverbose-asm -march=skylake -mabm march.cc -S
root # sed -i 1,/options\ enabled/d march.s
# 再次和 native.s 比较
root # diff march.s native.s
# 这次没有任何输出, 所以我只需要把 -mabm 加入到COMMON_FLAGS中就可以了
# 如果还有输出内容,找出第二行中多出来的再次执行上面第三步
# 如果第一行中的参数第二行没有
# 以 -maes 为例
# 那么第三步中就需要把这个参数改成 -mno-aes(注意写法,m提前) ,加到skylake后面
root # gcc -fverbose-asm -march=skylake -mabm -mno-aes march.cc -S
root # sed -i 1,/options\ enabled/d march.s
root # diff march.s native.s
# 直到 diff 没有任何输出为止, skylake 后面的参数就是最终需要加到COMMON_FLAGS中的参数
#其他CFLAGS请参考:Red Hat 推荐的GCC编译器和链接器标志: https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc
#配置make.conf
root # nano -w /mnt/gentoo/etc/portage/make.conf
#make.conf 内容
#编译相关
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j6 -l6"
EMERGE_DEFAULT_OPTS="--ask --keep-going --with-bdeps=y --autounmask=y"
#语言相关
LC_MESSAGES=C
LINGUAS="en en_CA zh_CN"
L10N="en en_CA zh-CN"
#GRUB相关
GRUB_PLATFORMS="efi-32 efi-64 pc"
#输入相关
INPUT_DEVICES="libinput synaptics"
#显卡相关,为避免不必要麻烦,建议一开始不要写nvidia
VIDEO_CARDS="nvidia intel i965"
#查看cpu支持的指令集,安装这个程序 cpuid2cpuflags, 我不喜欢设置全局的USE,所以留空
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
USE=""
root # mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
#Gentoo 主仓库
root # mkdir --parents /mnt/gentoo/etc/portage/repos.conf
#可编辑gentoo.conf文件更改其中的 sync-uri 的地址为国内的地址,更新更快,建议以后再更改,避免首次安装出现不必要的编译等错误
root # cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
root # cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
root # mount --types proc /proc /mnt/gentoo/proc
root # mount --rbind /sys /mnt/gentoo/sys
root # mount --make-rslave /mnt/gentoo/sys
root # mount --rbind /dev /mnt/gentoo/dev
root # mount --make-rslave /mnt/gentoo/dev
# --make-rslave操作是稍后安装systemd支持时所需要的。
#当使用非Gentoo安装媒介时,这时可能还不算完。一些发行版将/dev/shm符号链接到/run/shm/,在chroot后将变得不可用。为了让/dev/shm/是一个正常挂载的tmpfs,可以如此修复:
root # test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
root # mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
#同时确保设置了1777模式
root # chmod 1777 /dev/shm
root # chroot /mnt/gentoo /bin/bash
root # source /etc/profile
root # export PS1="(chroot) ${PS1}"
root # emerge-webrsync
#更新Portage树
root # emerge --sync
#在慢速的终端上,比如一些framebuffer或者串口控制台,建议使用--quiet选项来加速这个进程:
root # emerge --sync --quiet
#对于news模块,最常用的有三个操作:
#使用list显示一个可用新闻条目的预览。
#使用read来阅读新闻条目。
#使用purge将在新闻条目阅读后删除,并且不能再次阅读。
root # eselect news list
root # eselect news read
#选择了desktop/plasma后会增加大量相关的USE,更新系统的编译时间可能增加几小时到几天不等
root # eselect profile list
root # eselect profile set 9
#检查当前活动的USE标记
root # emerge --info | grep ^USE
#可以在系统的/usr/portage/profiles/use.desc,/var/db/repos/gentoo/profiles/use.desc中找到可用的USE标记的完整描述。
root # less /var/db/repos/gentoo/profiles/use.desc
#添加需要配置的USE进make.conf,例如 USE="X"
root # nano -w /etc/portage/make.conf
#在更新前,可以先设置/var/tmp/portage为tmpfs
root # mkdir /etc/portage/env
root # echo 'PORTAGE_TMPDIR="/var/tmp/notmpfs"' > /etc/portage/env/notmpfs.conf
root # mkdir /var/tmp/notmpfs
root # chown portage:portage /var/tmp/notmpfs
root # chmod 775 /var/tmp/notmpfs
root # cat > /etc/portage/package.env << "EOF"
> www-client/chromium notmpfs.conf
> www-client/firefox notmpfs.conf
> dev-java/icedtea notmpfs.conf
> app-office/libreoffice notmpfs.conf
> EOF
root # mount -t tmpfs -o size=12G,uid=portage,gid=portage,mode=775,noatime tmpfs /var/tmp/portage
root # emerge --ask --update --deep --newuse @world
#查找可用的时区
root # ls /usr/share/zoneinfo/Canada/
#我选择的时区是Canada/Eastern:
root # echo "Canada/Eastern" > /etc/timezone
#重新配置sys-libs/timezone-data包,将会为我们基于/etc/timezone条目更新/etc/localtime文件
root # emerge --config sys-libs/timezone-data
#或者systemd可以用timedatectl命令:
root # timedatectl set-timezone Canada/Eastern
#查看可以设置的地区
root # cat /usr/share/i18n/SUPPORTED
root # cat > /etc/locale.gen << "EOF"
> C.UTF8 UTF-8
> en_CA.UTF-8 UTF-8
> en_CA ISO-8859-1
> zh_CN.UTF-8 UTF-8
> zh_CN.GBK GBK
> zh_CN.GB18030 GB18030
> zh_CN GB2312
> zh_TW.EUC-TW EUC-TW
> zh_TW.UTF-8 UTF-8
> zh_TW BIG5
> zh_HK.UTF-8 UTF-8
> zh_HK BIG5-HKSCS
> EOF
#生成/etc/locale.gen文件中指定的所有地区
root # locale-gen
#通过eselect locale list可显示可用的目标:
root # eselect locale list
root # eselect locale set 4
#这个还可以通过人工编辑/etc/env.d/02locale文件来完成
root # cat > /etc/env.d/02locale << "EOF"
> LANG="zh_CN.UTF-8"
> LC_COLLATE="C"
> EOF
#现在重新加载环境:
root # env-update && source /etc/profile && export PS1="(chroot) $PS1"
#或者systemd可以用localectl命令:
root # cat > /etc/locale.conf << "EOF"
> LANG="zh_CN.UTF-8"
> EOF
root # localectl set-locale LANG=zh_CN.UTF-8
root # env-update && source /etc/profile && export PS1="(chroot) $PS1"
#新手建议直接使用distribution kernels
root # emerge --ask sys-kernel/installkernel-gentoo
root # emerge --ask sys-kernel/gentoo-kernel-bin
#我是使用 make localmodconfig 根据当前已加载模块列表和系统配置来生成配置文件的,再使用lspci -vv | grep -i kernel查看多个发行版加载的内核模块,然后加上其他发行版在lsmod中的模块,最后把没选择的模块进make menuconfig手动选择后再编译
#我的内核配置选项参考自金步国关于Linux-4.4-x86_64 内核配置选项简介
root # emerge --ask sys-kernel/gentoo-sources
root # ls -l /usr/src/linux
#大多数信息可以通过安装包含lspci命令的sys-apps/pciutils来收集:
root # emerge --ask sys-apps/pciutils
root # lspci -vv
#安装固件先!!!
root # emerge --ask sys-kernel/linux-firmware
#现在进入内核源码目录并执行make menuconfig
root # cd /usr/src/linux
root # make mrproper
root # make distclean
root # make clean
root # make menuconfig
#启用必要的选项后编译和安装
root # make -j6
#安装模块到/lib/modules/,安装内核镜像到/boot/
root # make modules_install
root # make install
#如果把硬盘等内核选项编译进内核,可不需要initramfs,如果要生成initramfs,可使用sys-kernel/genkernel
root # emerge --ask sys-kernel/genkernel
root # genkernel --install initramfs
root # ls /boot/initramfs*
#如果不使用initramfs,不要使用UUID,可以使用PARTUUID
root # cat > /etc/fstab << "EOF"
> PARTUUID=xxxxxxxxxx / ext4 noatime,discard 0 1
> PARTUUID=xxxxxxxxxx /boot/efi vfat defaults,noatime,discard 0 2
> PARTUUID=xxxxxxxxxx /home ext4 noatime 0 0
> tmpfs /var/tmp/portage tmpfs size=12G,uid=portage,gid=portage,mode=775,noatime 0 0
> EOF
root # cat > /etc/hostname << "EOF"
> gentoo.tim
> EOF
#或者systemd使用hostnamectl命令
root # hostnamectl set-hostname gentoo.tim
root # cat > /etc/hosts << "EOF"
> 127.0.0.1 gentoo.tim localhost
> ::1 gentoo.tim localhost
> EOF
#linux下输入密码时是没有任何显示的。
root # passwd
#如果要安装的是NetworkManager则不需要做这些
root # cat > /etc/systemd/network/50-dhcp.network << "EOF"
> [Match]
> Name=en*
>
> [Network]
> DHCP=yes
> EOF
#设置网络服务开机启动
root # systemctl enable systemd-networkd.service
root # ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
root # systemctl enable systemd-resolved.service
#如果是新手且使用无线网络,建议直接使用NetworkManager
#安装NetworkManager
root # emerge -av networkmanager
#NetworkManager需要把用户加入plugdev组,现在还没有创建用户,在创建用户时可以设置组,如果创建时没有设置,则在创建用户之后也可以用gpasswd命令设置
root # gpasswd -a tim plugdev
#配置开机启动NetworkManager服务
root # systemctl enable NetworkManager.service
#如果不用NetworkManager,要使用无线,可安装net-wireless/wpa_supplicant或者net-wireless/iwd
#iwd 对内核有要求,需配置相关内核选项
root # emerge --ask net-wireless/iwd
root # systemctl enable iwd.service
#我未在systemd下使用过net-wireless/wpa_supplicant,请自行测试
#安装dhcpcd 及 wpa_supplicant
root # emerge -av net-misc/dhcpcd
root # emerge -av net-wireless/wpa_supplicant
#安装后更新数据库
root # emerge --ask sys-apps/mlocate
root # updatedb
#一般自带有openssh
root # systemctl enable sshd.service
#分区格式化等
root # emerge -av sys-fs/e2fsprogs sys-fs/xfsprogs sys-fs/dosfstools sys-fs/btrfs-progs
#安装前先设置/etc/portage/make.conf里关于grub的USE
root # emerge --ask --update --newuse --verbose sys-boot/grub:2
#安装grub,使用UEFI时:
root # grub-install --target=x86_64-efi --efi-directory=/boot/efi
#基于用户在/etc/default/grub文件和/etc/grub.d中特别配置的脚本文件来生成GRUB2配置
root # grub-mkconfig -o /boot/grub/grub.cfg
#注:如果EFI启动菜单没有grub相关选项,把/boot/efi/EFI/gentoo/grubx64.efi移动到/boot/efi/EFI/Boot/并改名等动作,但测试无效,最后在winpe下用BOOTICE,点击UEFI选项,选择修改启动序列,选择添加,然后在右边的启动项设置中把菜单标题改为装的系统名称,启动磁盘就是装系统的硬盘,就是根目录和boot那个硬盘,这里的磁盘是一整块硬盘。启动分区就是EFI所在的分区,启动文件就是EFI文件夹下的新装系统文件夹下的efi文件,如:\EFI\gentoo\grubx64.efi弄好启动文件后,上移新的启动项到最前面,然后选择保存当前启动项设置后退出,重启就会进入grub菜单,有人在这种方法下还是在下下次重启的时候没有进入grub菜单成功,这时你还可以进BOIS,修改启动序列,把新系统的启动项放到最前面。如果没有EFIShell,可以顺便下载Shell.efi并添加EFIShell启动项。
#另,可在linux下使用efibootmgr调整EFI启动菜单
root # efibootmgr -v
#可自行添加启动项,-d后面是启动分区所在的硬盘(默认为/dev/sda),-p后面是分区位置(默认为1),-l是启动efi文件的路径,注意是\\
root # efibootmgr -c -w -L "Gentoo Linux" -d /dev/sda -p 1 -l \\EFI\\gentoo\\grubx64.efi
#如果提示Could not prepare Boot variable: Read-only file system错误,则执行下面命令再使用efibootmgr调整
root # mount -o remount,rw /sys/firmware/efi/efivars
#删除启动项,按对应的编号
root # efibootmgr -b 0004 -B
#按编号调整启动顺序
root # efibootmgr -o 0003,0001,0002,0004
#如果挂载了/var/tmp/portage,卸载它
root # exit
root # cd
root # umount -l /mnt/gentoo/dev{/shm,/pts,}
root # umount -R /mnt/gentoo
root # reboot
#加入需要的组
root # useradd -m -G users,wheel,plugdev,cdrom,cdrw,usb,video,audio -s /bin/bash tim
root # passwd tim
#删除下载的安装文件
root # rm /stage3-*.tar*
#如果是连接网线,经过第一部分的网络配置应该能直接上网了,如果是使用无线网,需配置无线网络
#使用NetworkManager在终端界面配置网络
root # nm-connection-editor
root # nmtui
#使用iwd在终端界面配置网络
root # systemctl start iwd.service
#无线网配置连接
root # iwctl station list
#进入交互式设置
root # iwctl
[iwd]# station wlan0 show
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect "xxxxxx"
[iwd]# Type the network passphrase for xxxxxx psk.
[iwd]# Passphrase:
#连接的信息会储存在/var/lib/iwd/xxxxxx.psk
#然后要设置IP地址和DNS,可以直接启动systemd-networkd和systemd-resolved服务自动获取IP
#如果要设置静态地址
root # cat > /etc/iwd/main.conf << "EOF"
> [General]
> EnableNetworkConfiguration=true
>
> #[Network]
> #RoutePriorityOffset=200
> #NameResolvingService=systemd
> EnableIPv6=true
>
> [Scan]
> DisablePeriodicScan=true
> EOF
root # cat > /var/lib/iwd/xxxxxx.psk << "EOF"
> [Settings]
> AutoConnect=true
>
> [Security]
> PreSharedKey=xxxxxxxx
> #Passphrase=xxxxxxxx
>
> [IPv4]
> ip=192.168.0.13
> netmask=255.255.255.0
> gateway=192.168.0.1
> broadcast=192.168.0.255
> dns=192.168.0.1
> EOF
root # cat > /etc/resolv.conf << "EOF"
> nameserver 192.168.0.1
> nameserver 8.8.8.8
> EOF
#如果要使用IP命令设置静态地址
root # ip address add 192.168.0.13/24 broadcast + dev wlan0
root # ip link set wlan0 up
root # ip route add default via 192.168.0.1 dev wlan0
#使用wpa_supplicant在终端界面配置网络,未在systemd下测试过,请自行测试
root # cat > /etc/wpa_supplicant/wpa_supplicant.conf << "EOF"
> ctrl_interface=/var/run/wpa_supplicant
> ctrl_interface_group=0
> update_config=1
> EOF
root # chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
#启用wpa_supplicant
root # wpa_supplicant -B -i wlp3s0b1 -c /etc/wpa_supplicant/wpa_supplicant.conf
#通过命令行工具wpa_cli来实现wifi网络的连接
root # wpa_cli
> scan
> scan_results
> add_network # (assume return 0)
> set_network 0 ssid "xxxxxx"
> set_network 0 psk "your key"
> enable_network 0
> save_config
> quit
#使用dhcpcd获取IP
root # dhcpcd wlp3s0b1
#将硬件时钟设置为本地时区,解决双系统时间同步问题,建议不在linux设置时间同步,只在windows系统设置时间同步问题即可
#linux下:
root # timedatectl set-local-rtc true
#windows下:原理就是在注册表增加一项,作用是让Windows将硬件时间当作UTC
PowerShell # reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
#无字体会有乱码,如果后面安装KDE Plasma,那暂时不用自己安装字体,安装KDE Plasma时会安装
root # emerge -s wqy
root # emerge -av media-fonts/wqy-zenhei
#字体列表
root # eselect fontconfig list
#字体设置
root # eselect fontconfig enable XX
#考察Xorg的log文件来检查Xorg包含的字体路径
root # grep /fonts /var/log/Xorg.0.log
#查看Xorg包含的字体
root # emerge -av x11-apps/xlsfonts
root # xlsfonts
#双显卡,建议先不安装独显驱动,如果安装了,要先进行处理
#先设置USE,在/etc/portage/make.conf中增加VIDEO_CARDS="nvidia intel i965",不安装独显驱动则不写nvidia,更改USE后建议先更新world
root # emerge --ask --verbose --update --deep --newuse --with-bdeps=y @world
root # emerge --ask --verbose x11-base/xorg-server
root # env-update
root # source /etc/profile
#安装twm测试X是否工作
root # emerge --ask x11-wm/twm x11-terms/xterm
#如果安装了独显驱动,在测试前进行双显卡处理,否则开机启动失败,或者startx后黑屏卡死,或者进入到SDDM等相关界面,输入密码后卡死或者只停留在输入密码的画面
root # lsmod | grep nvidia
root # modprobe -r nvidia-drm nvidia-modeset nvidia
#与nvidia相关的模块全部移除,移除后再用lsmod确认是否还有,可能rmmod会移除失败,那就查看/etc/modprobe.d/下关于nvidia的相关设置,全部注释相关启动,保护的设置,再增加相关屏蔽模块的条目
root # cat > /etc/modprobe.d/nvidia-rmmod.conf << "EOF"
> blacklist nouveau
> blacklist nvidia
> blacklist nvidia_uvm
> blacklist nvidia_modeset
> blacklist nvidia_drm
> EOF
#还需删除/etc/X11/下与nvidia相关的文件,或者注释相关条目,重启后再测试,如果不行,就用equery f nvidia-drivers查看还有哪些设置文件并进行设置,如/usr/share/X11/xorg.conf.d/等,但是要用equery就要先安装app-portage/gentoolkit
#设置opengl等为非nvidia
root # eselect opengl list
#或者用数字代替xorg-x11选择非nvidia项目
root # eselect opengl set xorg-x11
root # eselect opencl list
#选择非nvidia项目,如果无其他项目则不设置
root # eselect opencl set 1
root # env-update
root # source /etc/profile
#测试Xorg
tim@gentoo ~ $ startx
#最好测试Xorg成功后再安装桌面环境
#安装i3wm
root # emerge -av x11-wm/i3 dmenu i3status i3blocks i3lock
tim $ nano -w ~/.config/i3/config
tim $ cat > ~/.xinitrc << "EOF"
> exec /usr/bin/i3
> EOF
#安装openbox
root # emerge -av openbox openbox-menu tint2
tim $ mkdir -p ~/.config/openbox/
tim $ cp /etc/xdg/openbox/* ~/.config/openbox/
tim $ echo "export XSESSION=openbox" >> ~/.bashrc
tim $ rm ~/.xinitrc
#安装KDE Plasma,时间有点长,如果一开始并不是选择的 “default/linux/amd64/17.1/desktop/plasma/systemd (stable)” 这个Profile, 安装之前更改这个Profile,并参考相关文档说明配置后再安装
root # echo "kde-plasma/plasma-meta legacy-systray gtk" >> /etc/portage/package.use/tim
root # emerge --ask kde-plasma/plasma-meta
#再安装其他桌面程序
root # emerge -av kde-apps/kdeaccessibility-meta kde-apps/dolphin konsole kwrite kmix krdc print-manager ark kcalc dolphin-plugins-git qtmultimedia
root # emerge --ask sddm
root # usermod -a -G video sddm
#编辑/etc/portage/make.conf,保护sddm的配置文件
root # echo 'CONFIG_PROTECT="/usr/share/sddm/scripts/Xsetup"' >> /etc/portage/make.conf
#系统启动后加载sddm
root # systemctl enable sddm.service
root # env-update && source /etc/profile
#需先进入桌面环境
root # emerge -av x11-apps/mesa-progs
tim $ glxinfo | grep rendering
tim $ glxgears
#按WIKI配置NVIDIA驱动,再按WIKI的NVIDIA Optimus配置NVIDIA 的配置文件/etc/X11/xorg.conf, http://us.download.nvidia.com/XFree86/Linux-x86_64/418.88/README/randr14.html里有官方说明,注意驱动的版本号,其实重点就是BusID
#安装nvidia-drivers 和 xrandr
root # emerge --ask x11-drivers/nvidia-drivers
root # emerge --ask xrandr
#配置/usr/share/sddm/scripts/Xsetup
root # echo "xrandr --setprovideroutputsource modesetting NVIDIA-0" >> /usr/share/sddm/scripts/Xsetup
root # echo "xrandr --auto" >> /usr/share/sddm/scripts/Xsetup
root # echo "xrandr --dpi 96" >> /usr/share/sddm/scripts/Xsetup
#我更喜欢 NVIDIA PRIME Render Offload 的方式, 按官方说明配置文件/etc/X11/xorg.conf, https://download.nvidia.com/XFree86/Linux-x86_64/465.31/README/primerenderoffload.html
#如果使用NVIDIA PRIME Render Offload,清除NVIDIA Optimus配置中/usr/share/sddm/scripts/Xsetup文件的相关配置,并创建~/bin/nv-run
tim $ cat > ~/bin/nv-run << "EOF"
> #!/bin/bash
> __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia "$@"
> EOF
tim $ chmod +x ~/bin/nv-run
#要使用Nvidia运行程序,只需要运行
tim $ ~/bin/nv-run xxxxxx
#使用alsa
root # emerge --ask media-sound/alsa-utils
#查看相关情况
root # aplay -L
root # cat /sys/class/sound/card*/id
root # aplay --list-devices
#测试声音
tim $ speaker-test -t wav -c 2
#调音量,方向键向上是加音量,ESC是退出,m是开关,把MM调为00为开
tim $ alsamixer
#使用pulseaudio,可增加pulseaudio到USE
root # emerge --ask --changed-use --deep @world
root # emerge -av app-admin/sudo
#设置/etc/sudoers,注释"%wheel ALL=(ALL) ALL"前面的#号
root # visudo
#编辑~/.bash_logout,增加
tim $ echo "history -a" >> ~/.bash_logout
#编辑~/.bashrc,增加
tim $ nano -w ~/.bashrc
#~/.bashrc增加的内容
alias ll='ls --color=auto -lh'
alias rm='rm -i'
#连续命令不重复出现
HISTCONTROL=ignoredups
HISTSIZE=4096
HISTFILESIZE=4096
PS1=" [\[\033[32m\]\w\[\e[0m\]]\n\u@\[\033[01;32m\]\h\`if [ \$? = 0 ]; then echo \[\e[33m\] ^o^\[\e[0m\]; else echo \[\e[31m\] *_*\[\e[0m\]; fi\`\[\033[01;34m\] \$\[\033[00m\] "
root # emerge -av app-shells/bash-completion app-editors/vim
#一定要注意USE,否则部分程序打不开,无面板图标,选字候选框等。自定义的USE最好写入/etc/portage/package.use/tim 增加的USE有 "gtk2 opencc qt4"
root # emerge -av fcitx
#当时编译依赖opencc出错,使用以下方式安装成功
root # LANG=c emerge -av fcitx
#KDE桌面增加
root # emerge -av fcitx-qt5 kcm-fcitx
#技巧:英语输入状态时,按 ctrl + alt + h ,可激活英语提示候选词
#设置~/.xinitrc KDE桌面是.xprofile文件
tim $ vim ~/.xinitrc
#~/.xinitrc增加的内容
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
#安装 layman
#修改/etc/portage/package.use/tim 增加USE "sync-plugin-portage git"
root # emerge -av layman
#一般安装完就有/etc/portage/repos.conf/layman.conf,如果没有,可以
root # layman-updater -R
#列出所有可用的 overlays
root # layman -L
#添加 gentoo-zh overlay:
root # layman -a gentoo-zh
#更新所有的 overlays
root # layman --sync ALL
#注意内核设置,注意intel-microcode的USE加上initramfs,会自己生成/boot/intel-uc.img
root # emerge -av sys-firmware/intel-microcode sys-apps/iucode_tool
root # grub-mkconfig -o /boot/grub/grub.cfg
#首次安装systemd时,将禁用大多数服务。提供了一个“预设”文件,该文件可用于启用合理的默认服务集
root # systemctl preset-all
#systemd 安装新服务,找不到服务时更新一下
root # systemctl daemon-reload
#或者,修改了/etc/systemd/system.conf以后
root # systemctl daemon-reexec
root # emerge -avO1 -u --noreplace $(for p in `qlist -I dev-qt/ -C | uniq`; do echo -n $p " " ; done)
#内核需选上File systems ---> <*> FUSE (Filesystem in Userspace) support
#安装fuse、libmtp、mtpfs、simple-mtpfs等
root # emerge -av libmtp simple-mtpfs
#不要用root运行下面的命令
#查看MTP设备,运行(如果没看到有设备,查看手机上连接PC是否设置为文件传输等):
tim $ simple-mtpfs --list-devices
#挂载一个MTP设备 (in this example device 0),运行:
tim $ simple-mtpfs /mountpoint
#卸载,运行
tim $ fusermount -u /mountpoint
本文作者是一位开源理念的坚定支持者,所以本文内容遵照开源的精神发布。
无担保:本文作者不保证此文内容准确无误,亦不承担任何由于使用此文档所导致的损失。
自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。
名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。
其他作品
本文作者十分愿意与他人分享劳动成果,如果你对我的其他作品有兴趣,可以在如下位置查看现有的作品集:
Tim 作品集 [ https://tiimmm.com/ ]
联系方式
由于作者水平有限,因此不能保证此文内容准确无误。如果你发现了此文中的错误(哪怕是错别字也好),请来信指出,任何提高此文质量的建议我都将虚心接纳。
Email: tiimmm dot chen at gmail dot com
网站制作者:Author:tiimmm dot chen at gmail dot com, Welcome to email for discussion!