Tim's Web Home

Gentoo installation on the T website

Gentoo installation:

本次安装选择 amd64 的 包含 systemd 的 Stage3 文件. 本文记录于2017年,2018年及2019年进行过部分更新。请不要按此文步骤安装Gentoo, 安装Gentoo请直接查阅官方网站WIKI关于安装的部分

第一部分:

  1. 选择installation medium并进行数字校验,我选择 Calculate Linux , 或者 Admin CD , 因为 Minimal Installation CD 不支持UEFI。
  2. 配置引导选项,引导选项是可以配合内核进一步调整引导过程的行为。因为我有双显卡,最好加nomodeset引导,意思是不要加载内核模式设置视频驱动程序。 如果在启动过程中(刚加载模块后)遇到屏幕问题,则可以使用该选项。
  3. 配置用户帐号,配置网络等。因为我使用的是 Calculate Linux 桌面版本,很简单,不做说明。
  4. 使用parted分区,分三个分区,格式化分区。
      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
    
  5. 挂载分区。
      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
    
  6. 设置日期和时间 MMDDhhmmYYYY。
      查看日期
      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"
    
  7. 下载Stage 3 systemd 包。
      root # cd /mnt/gentoo
      root # wget -c "PASTED_STAGE_URL"
      #解开Stage 3包
      root # tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
    
  8. 配置编译选项。
      #查看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=""
    
  9. 选择境像站点。
      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
    
  10. 复制DNS信息。
      root # cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
    
  11. 挂载必要的文件系统。
      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
    
  12. chroot 进入新环境。
      root # chroot /mnt/gentoo /bin/bash
      root # source /etc/profile
      root # export PS1="(chroot) ${PS1}"
    
  13. 安装Portage快照。
      root # emerge-webrsync
      #更新Portage树
      root # emerge --sync
      #在慢速的终端上,比如一些framebuffer或者串口控制台,建议使用--quiet选项来加速这个进程:
      root # emerge --sync --quiet
    
  14. 阅读Gentoo新闻条目。
      #对于news模块,最常用的有三个操作:
      #使用list显示一个可用新闻条目的预览。
      #使用read来阅读新闻条目。
      #使用purge将在新闻条目阅读后删除,并且不能再次阅读。
      root # eselect news list
      root # eselect news read
    
  15. 选择正确的配置文件。 “default/linux/amd64/17.1/desktop/plasma/systemd (stable)”
      #选择了desktop/plasma后会增加大量相关的USE,更新系统的编译时间可能增加几小时到几天不等
      root # eselect profile list
      root # eselect profile set 9
    
  16. 配置USE变量。我保留默认全局配置不做更改,个别的在/etc/portage/package.use中配置
      #检查当前活动的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
    
  17. 更新@world集合, 选择了KDE,时间会比较长。
      #在更新前,可以先设置/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
    
  18. 配置时区。
      #查找可用的时区
      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
    
  19. 配置本地化。
      #查看可以设置的地区
      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"
    
  20. 安装内核源码。
      #新手建议直接使用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*
    
  21. 开机挂载分区。
      #如果不使用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
    
  22. 配置主机名。
      root # cat > /etc/hostname << "EOF"
                 > gentoo.tim
                 > EOF
      #或者systemd使用hostnamectl命令
      root # hostnamectl set-hostname gentoo.tim
    
  23. 配置hosts file。
      root # cat > /etc/hosts << "EOF"
                 > 127.0.0.1       gentoo.tim      localhost
                 > ::1             gentoo.tim      localhost
                 > EOF
    
  24. 设置密码。
      #linux下输入密码时是没有任何显示的。
      root # passwd
    
  25. 配置网络。
     #如果要安装的是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
    
  26. 文件索引。
      #安装后更新数据库
      root # emerge --ask sys-apps/mlocate
      root # updatedb
    
  27. 远程登陆。
      #一般自带有openssh
      root # systemctl enable sshd.service
    
  28. 文件系统工具。
      #分区格式化等
      root # emerge -av sys-fs/e2fsprogs sys-fs/xfsprogs sys-fs/dosfstools sys-fs/btrfs-progs
    
  29. 选择一个引导器。
      #安装前先设置/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
    
  30. 重启系统
      #如果挂载了/var/tmp/portage,卸载它
      root # exit
      root # cd
      root # umount -l /mnt/gentoo/dev{/shm,/pts,}
      root # umount -R /mnt/gentoo
      root # reboot
    

第二部分:

  1. 添加用户。
      #加入需要的组
      root # useradd -m -G users,wheel,plugdev,cdrom,cdrw,usb,video,audio -s /bin/bash tim
      root # passwd tim
    
  2. 磁盘清理。
      #删除下载的安装文件
      root # rm /stage3-*.tar*
    
  3. 设置网络。
      #如果是连接网线,经过第一部分的网络配置应该能直接上网了,如果是使用无线网,需配置无线网络
      #使用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
    
  4. 硬件时钟。
      #将硬件时钟设置为本地时区,解决双系统时间同步问题,建议不在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
    
  5. 安装中文字体。
      #无字体会有乱码,如果后面安装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
    
  6. 安装Xorg。
      #双显卡,建议先不安装独显驱动,如果安装了,要先进行处理
      #先设置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
    
  7. 安装桌面环境。
      #最好测试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
    
  8. 登录管理器SDDM。
      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
    
  9. 安装软件测试显卡3D。
      #需先进入桌面环境
      root # emerge -av x11-apps/mesa-progs
      tim $ glxinfo | grep rendering
      tim $ glxgears
    
  10. 配置NVIDIA Optimus 和 NVIDIA PRIME Render Offload。
      #按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
    
  11. 声卡相关。
      #使用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
    
  12. 安装sudo。
      root # emerge -av app-admin/sudo
      #设置/etc/sudoers,注释"%wheel ALL=(ALL) ALL"前面的#号
      root # visudo
    
  13. bash相关。
      #编辑~/.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\] "  
    
  14. 安装bash命令补全,vim
      root # emerge -av app-shells/bash-completion app-editors/vim
    
  15. 安装输入法。
      #一定要注意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
    
  16. gentoo overlay
      #安装 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
    
  17. 安装Intel microcode。
      #注意内核设置,注意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
    
  18. systemd 服务。
      #首次安装systemd时,将禁用大多数服务。提供了一个“预设”文件,该文件可用于启用合理的默认服务集
      root # systemctl preset-all
      #systemd 安装新服务,找不到服务时更新一下
      root # systemctl daemon-reload
      #或者,修改了/etc/systemd/system.conf以后
      root # systemctl daemon-reexec
    
  19. 解决升级时QT依赖关系问题。
      root # emerge -avO1 -u --noreplace $(for p in `qlist -I dev-qt/ -C | uniq`; do echo -n $p " " ; done)
    
  20. 使用USB线连接安卓手机。
      #内核需选上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!



T站勉强运行341天2时0分18秒
多伦多时间:2024-05-20 Monday 00:33:33 AM