ESXi预先配置

由于虚拟机的硬件信息与实际硬件不一致,所以有些配置需要提前更改和了解一下.

  • 虚拟机硬件-网络适配器-适配器类型-VMXNET3
    这个是vmware特有的虚拟网卡,内核中专门的驱动程序
  • 虚拟机硬件-SCSI控制器-LSI Logic Parallel
    bus总线,最近的硬盘无法识别就是由于这个没有配置好
  • 虚拟机选项-引导选项-固件-EFI
    由于采用UEFI启动,所以需要改为EFI

不要勾选安全引导,linux不支持安全引导,另外esxi6.5版本有bug,在勾选安全启动后,无法通过web UI界面取消,只能通过shell取消.

安装

分区

parted /dev/sda
mktable gpt
mkpart esp 0% 100m          #efi分区
mkpart name2 100m 100%      #lvm
set 1 boot on               #设置为efi启动分区
set 2 lvm on                #设置为lvm分区

UEFI识别的EFI分区必须是fat分区,而且PC给电后启动顺序也是UEFI程序->系统,所以EFI分区需要单独分开.
引导方面来说 UEFI+GPT 而 BIOS+MBR 是两种对应的引导方式,MBR支持单个分区最大4T,MBR没有容量限制,以后MBR会慢慢被GPT取代.

格式化lvm逻辑卷

pvcreate /dev/sda2
vgcreate vg /dev/sda2
lvcreate -L 500m vg -n boot
lvcreate -C y -L 4g vg -n swap
lvcreate -L 8g vg -n portage
lvcreate -L 8g vg -n root

lvm创建swap虚拟卷的时候,lvcreate -C y -L 4G vg -n swap添加-C y参数,用来指定逻辑卷的空间分配是连续的,这保证了你所创建的swap空间不会被分散在不连续的物理空间甚至不同的硬盘中

格式化分区

mkfs.fat -F 32 -s 2 /dev/sda1
mkfs.ext4 /dev/vg/boot
mkswap /dev/vg/swap
swapon /dev/vg/swap
mkfs.ext4 /dev/vg/portage
mkfs.ext4 /dev/vg/root

挂载分区

mount /dev/vg/root /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/vg/boot /mnt/gentoo/boot
mkdir /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efi

新分区的挂载点没有对应的文件夹,需要先创建再挂载

下载解压基础环境

systemd 引导

cd /mnt/gentoo 
elinks mirrors.aliyun.com/gentoo/
# 位置:release/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-xxxx.tar.bz2
tar xjpf stage3-*.tar.bz2 --xattrs --numeric-owner
  • –xattrs 支持扩展属性
  • –numeric-owner 以UID和GID代替用户名和组名

openrc 引导

cd /mnt/gentoo 

# 注意url结尾有斜杠
elinks https://mirrors.163.com/gentoo/
#位置:release/amd64/autobuilds/current-stage3-amd64/stage3-amd64-xxxxxx.tar.xz
#注意区分amd64和x86
xz -d stage3-*.tar.xz
tar xpf stage3-*.tar --xattrs --numeric-owner

tar.xz压缩据说压缩比更高,但是tar没有集成的解压参数,必须两步解压

挂载portage目录

mkdir /mnt/gentoo/usr/portage
mount /dev/vg/portage /mnt/gentoo/usr/portage

挂载livecd目录

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
  • –make-rslave操作是稍后安装systemd支持时所需要的,openrc引导可以忽略此行

设置portage镜像

portage镜像源是gentoo下载软件包(源码)的服务器地址

mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

选择网易(Netease)镜像服务器

或者直接指定阿里云的服务器

echo "GENTOO_MIRRORS=\"http://mirrors.aliyun.com/gentoo/\"" >> /mnt/gentoo/etc/portage/make.conf
  • 双引号需要转译

配置portage同步源

portage会在本地保持一份软件包目录,其中包括软件包的版本/特性/安装(编译)方法等等,目前portage支持rsync同步和git同步,但是git同步需要手动生成metadata文件.
虽然git的同步,输出信息比较友善,但是metadata的生成实在效率低下,所以还是推荐rsync同步,gentoo默认的example文件也是rsync同步

mkdir /mnt/gentoo/etc/portage/repos.conf
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

复制DNS信息

cp /etc/resolv.conf /mnt/gentoo/etc/

切换gentoo系统

chroot /mnt/gentoo /bin/bash
source /etc/profile

下载portage软件源信息

emerge-webrsync

由于第一次安装,直接用webrsync就可以了,从无到有需要一段时间,以后差异更新,效率会快很多.日后再更新使用emerge --sync就可以了.

初次更新后,会出现gentoo近期所有的重要新闻信息.可以看一看

eselect news list       #查看新闻列表
eselect news read all   #读取所有新闻

非gentoo livecd问题修复 (可选)

当使用非Gentoo安装媒介时,这时可能还不算完。一些发行版将/dev/shm符号链接到/run/shm/,在chroot后将变得不可用。为了让/dev/shm/是一个正常挂载的tmpfs,可以如此修复:
同时确保设置了1777模式

test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm
source /etc/profile

修改编译配置

nano /etc/portage/make.conf
CFLAGS添加 -march=native
MAKEOPTS="-j4"
#可以是cpu数量+1,或者内核线程数(intel有超线程的cpu)

EMERGE_DEFAULT_OPTS="-av --quiet"
#emerge命令的默认参数,可以理解为全局的alias

更改profile

profile是gentoo对系统环境的配置基础,里边包括很多的选择,诸如桌面环境的选择,引导系统选择

systemd需要单独设置对应的profile
default/linux/amd64/17.0/systemd (stable)
如果是X环境,可以选择desktop下的子节点,其中包括Gnome和KDE(plasma)的profile.

eselect profile list    #查看profile列表
eselect profile set 1   #选择第一个profile

由于profile更改了系统的全局特性信息(USE),其中可能也包括编译器和运行环境(gcc/llvm/python等等),所以推荐在执行下边操作之前先更新下系统

emerge -avuDN world
  • a ask 在继续执行操作之前,会先进行询问
  • v view 查看要安装的软件包特性信息(USE)
  • u update 更新系统
  • D deep 更深层的检测
  • N new USE 检测USE变动

更改挂载信息

nano /etc/fstab
/dev/vg/root         /               ext4    noatime         0 1
/dev/vg/portage      /usr/portage    ext4    noatime         0 1
/dev/vg/swap         none            swap    sw              0 0
/dev/vg/boot         /boot           ext4    auto,noatime    1 2
/dev/sda1            /boot/efi       vfat    auto            0 0

系统编码支持

nano /etc/locale.gen 
en_US. ...
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN.GB2312 GB2312
zh_CN.GB18030 GB18030

# 重新生成
locale-gen

内核配置

安装内核源码

emerge gentoo-sources

ESXI 内核设置

参考链接

  • vmware tools 需要模块调用支持
Loadable module support  --->
  [*] Enable loadable module support
  [*]   Module unloading
  [*]   Automatic kernel module loading
  • 内核配置
Processor type and features  --->
  [*] Symmetric multi-processing support
  (2)   Maximum number of CPUs (2-255)
  [*]   SMT (Hyperthreading) scheduler support
      Timer frequency (100 HZ) --->
        (X) 100 HZ
  • SCSI 控制器
BusLogic SCSI 控制器(不推荐)
Device Drivers  --->
  SCSI device support  ---> ** Turn off EVERYTHING under here besides what is shown below **
      SCSI disk support
         SCSI low-level drivers  --->
             BusLogic SCSI support
             
LSI Logic SCSI 控制器 (推荐)
Device Drivers  --->
  SCSI device support  ---> ** Turn off EVERYTHING under here besides what is shown below **
      SCSI disk support
  [*] Fusion MPT device support --->
      Fusion MPT ScsiHost drivers for SPI
  • 网卡
Device Drivers  --->
  Network Device support
     [*] Network device support
        <*> Vmware VMXNET3 ethernet driver
  • systemd支持
    通用部分
CONFIG_DEVPTS_MULTIPLE_INSTANCE
  • EFI支持
Processor type and features  --->
    [*] EFI runtime service support 
    [*]   EFI stub support
    ...
    [*] Built-in kernel command line
    (root=/dev/sda2)
  • 取消内核启动logo
Device Driver --->
    Graphics support --->
        [ ] Bootup logo --->
  • 网卡驱动 (型号不对,应该使用r8168驱动)
Device Driver --->
    [*] network device support --->
		[*] ethernet driver support --->
			<*> Realtek 8169 gigabit ethernet support
  • 声卡驱动
Device Driver --->
	<*> sound car support --->
		<*>   Advanced Linux Sound Architecture  ---> 
			HD-Audio  --->       
				<*> Build HDMI/DisplayPort HD-audio codec support   
				<*> Enable generic HD-audio codec parser   
			[*]   Dynamic device file minor numbers    

配置选项 (如果按上边的配置,下边几个变量已经都设置过了)

CONFIG_SND_DYNAMIC_MINORS=y 
CONFIG_SND_MAX_CARDS=4 
CONFIG_SND_HDA_INTEL=y 
CONFIG_SND_HDA_CODEC_HDMI=y

参考链接

内核EFI支持 (默认已经都选择)

CONFIG_EFI=y
CONFIG_EFI_STUB=y   //允许内核当efi程序运行
CONFIG_RELOCATABLE=y
CONFIG_FB_EFI=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_EFI_VARS=m

UEFI 运行时变量/服务支持 - ‘efivars’内核模块。 这个选项对于"efibootmgr"之类的 UEFI 运行时管理工具而言十分重要
CONFIG_EFI_PARTITION=y //GPT分区支持

  • 编译内核LVM支持
Device Drivers  --->
   Multiple devices driver support (RAID and LVM)  --->
       <*> Device mapper support
           <*> Crypt target support
           <*> Snapshot target
           <*> Mirror target
       <*> Multipath target
           <*> I/O Path Selector based on the number of in-flight I/Os
           <*> I/O Path Selector based on the service time
  • initramfs (默认已经选择)
General setup  --->
        [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
    Device Drivers --->
        Generic Driver Options --->
            [*] Maintain a devtmpfs filesystem to mount at /dev   
  • ntfs3g支持
File system --->
    FUSE (Filesystem in userspace) support
  • USB 支持
Device Drivers --->
    [*] USB support  --->
        <*>   Support for Host-side USB

        Select a USB HCI driver, e.g.:
        <*> xHCI HCD (USB 3.0) support (xhci-hcd)
        <*> EHCI HCD (USB 2.0) support (ehci-hcd)
        <*> OHCI HCD support (ohci-hcd)
        <*> UHCI HCD (most Intel and VIA) support (uhci-hcd)
  • 禁用内存debug信息
Kernel hacking --->
    Memory Debugging --->
        [ ] Stack utilization instrumentation

编译内核

make && make modules_install

安装内核,输出到/boot目录

make install

如何/boot目录存在旧版本内核,会自动重命名旧内核文件,可以自行先择删除与否

安装portage辅助工具(推荐)

eix

emerge eix
eix-update 

emerge是gentoo的包管理器portage的交互命令,但是emerge的查询会遍历文件进行查询效率不高.eix通过预先创建索引的方式,可以更高效的查看软件包信息
eix-update只在第一次安装完后执行,eix会检索系统软件包信息创建索引.
日后可以利用eix-sync命令代替emerge --sync完全软件包的更新.

gentoolkit
gentoolkit包含了gentoo软件包安装的辅助工具,其中包括equery/euse等等

lvm支持
lvm为linux的逻辑卷管理工具

emerge lvm2

由于/boot分区也是lvm的逻辑卷,所以需要采用initramfs加载lvm启动信息才可以

initramfs
gentoo可以使用genkernel-next生成initramfs
systemd只支持genkernel-next引导lvm

emerge genkernel-next

initramfs需要禁用lvmetad,否则会生成失败

nano /etc/lvm/lvm.conf 
    use_lvmetad = 0     #改成0,禁用lvmetad

生成initramfs,需要添加lvm支持

genkernel --lvm initramfs

grub引导

由于使用lvm所以grub特性需要添加device-mapper支持

mkdir /etc/portage/package.use
echo "sys-boot/grub device-mapper" >> /etc/portage/package.use/app
emerge grub

os-prober

如果安装多系统支持,例如windows,可以安装os-probe,这样grub在生成配置文件的时候会自动检测多系统,并写入引导配置文件

emerge os-prober

安装grub的EFI引导程序

grub-install --target=x86_64-efi 

修改grub引导文件的配置信息

nano /etc/default/grub
    GRUB_DISABLE_RECOVERY=true
    GRUB_DISABLE_SUBMENU=y
    GRUB_CMDLINE_LINUX="dolvm rootfstype=ext4 quiet init=/usr/lib/systemd/systemd systemd.show_status=1"
  • GRUB_DISABLE_RECOVERY 禁用恢复模式
  • GRUB_DISABLE_SUBMENU 禁用子菜单
  • GRUB_CMDLINE_LINUX 内核引导的附加参数
    • dolvm 启用lvm支持
    • rootfstype 根系统格式
    • quiet 隐藏内核启动日志
    • init 启动服务路径
    • systemd.show_status 显示systemd启动日志

如果grub-install返回一个类似"Could not prepare Boot variable: Read-only file system"的错误,可以考虑重新挂载efivars

mount -o remount,rw /sys/firmware/efi/efivars

如果/boot分区只读,同样可以重新挂载/boot解决

mount -o remount,rw /dev/vg/boot /mnt/gentoo/boot

如果提示procsfs or sysfs文件夹无法访问,是由于使用的bios/mbr方式启动的,需要重新用efi shell启动,然后找到刚才grub-install的 efi/gentoo/bootx86.efi文件,
启动gentoo,之后再重新grub-install 就可以正确的将efi引导文件添加到bios里了
有些UEFI系统中,唯一可行的启动时(如果应用没有在 UEFI 启动菜单定制条目的话)加载 UEFI 应用的方法是把它放在此固定位置:/EFI/boot/bootx64.efi (对于 64 位的 x86 系统)

grub-mkconfig -o /boot/grub/grub.cfg

生成grub配置文件,grub根据grub.cfg文件进行引导

如果使用openrc引导,lvm需要添加到启动服务中

rc-update lvm boot

安装网络

emerge dhcpcd

修改root密码

passwd

重新启动系统(视bios uefi固件不同,可能无法自动加载grub,不行就先手动选择)

安装 dhcpcd
安装 ntfs3g CONFIG_FUSE_FS

caps lock 与 ctrl 键交换
setkeycodes 0x3a 29

reboot

修改用户目录的默认权限

systemd的 localectl timedatectl hostnamectl 都设置一下,未知domain名称需要修改/etc/hosts文件

timedatectl set-timezone Asia/Shanghai
localectl set-locale LANG=en_US.utf8
hostnamectl sethostname xxxx

vim /etc/hosts
127.0.0.1 [hostname].[domainname] [hostname] localhost

live cd 重启,chroot

mount /dev/vg/root /mnt/gentoo
mount /dev/vg/boot /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot/efi
mount /dev/vg/portage /mnt/gentoo/usr/portage

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

chroot /mnt/gentoo /bin/bash
source /etc/profile

相关链接

you bios is broken
https://bbs.archlinux.org/viewtopic.php?id=174881

win7 grub引导
http://askubuntu.com/questions/216215/invalid-efi-file-path

systemd-udevd used
http://forums.gentoo.org/viewtopic-p-7440724.html

http://forums.gentoo.org/viewtopic-t-1004766.html?sid=055843c22199025ccc619f16f322c7ed

http://gentoo.2317880.n4.nabble.com/Brand-new-instalation-Network-problem-td271362.html

UEFI Dual boot with Windows 7/8
http://wiki.gentoo.org/wiki/UEFI_Dual_boot_with_Windows_7/8#Use_gdisk_instead_of_fdisk_or_parted_to_create_gentoo_partitions.

Configure UEFI/GPT-Based Hard Drive Partitions
http://technet.microsoft.com/en-us/library/hh824839.aspx

uefi win7 安装
http://tieba.baidu.com/p/2200521697?pn=1

u盘装win7
http://wenku.baidu.com/link?url=xbirrhXeIfq3syRpbd8hpanZN0ksKUicltKgICY1HowHJLG_Ya1vUiBTtJnoGZYj5HmpS6t47ivygK1J_QBQzbSBIJVcvl_w0YelCq64t8C

parted命令介绍
http://zhumeng8337797.blog.163.com/blog/static/10076891420132794229902/
parted 尤其是toggle 切换分区类型已经partprobe重新加载分区
http://blog.sina.com.cn/s/blog_a2d4803001013trp.html

gentoo amd中文介绍
http://www.gentoo.org/doc/zh_cn/gentoo-amd64-faq.xml#cflags

gentoo amd 安装
http://wiki.gentoo.org/wiki/AMD64/FAQ
http://www.gentoo.org/doc/zh_cn/handbook/handbook-amd64.xml

gentoo 分区介绍
http://tieba.baidu.com/p/2254489272?pid=31191159603&cid=31198943523#31198943523

gentoo systemd
https://wiki.gentoo.org/wiki/Systemd

UEFI Gentoo Quick Install Guide
http://wiki.gentoo.org/wiki/UEFI_Gentoo_Quick_Install_Guide

efi kernel
http://wiki.gentoo.org/wiki/EFI_stub_kernel

grub uefi/gpt
https://wiki.gentoo.org/wiki/GRUB2#UEFI.2FGPT

uefi介绍 (arch wiki)
https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface_(简体中文)

lvm介绍 (arch wiki)
https://wiki.archlinux.org/index.php/LVM_(简体中文)

grub介绍 (arch wiki)
https://wiki.archlinux.org/index.php/GRUB2_(简体中文)#LVM

boot loader
https://wiki.archlinux.org/index.php/Boot_Loaders_(简体中文)

lvm介绍 (arch wiki)
https://wiki.archlinux.org/index.php/LVM_(简体中文)

修改启动logo
http://blog.chinaunix.net/uid-28458801-id-3484269.html

其他问题

在GRUB中直接从ISO启动,在其它盘安装Arch,创建EFI系统分区时,报出“EFI variables are not supported on this system”问题,原因为:
如果机器从 MBR 启动,之后运行 grub-install (或 efibootmgr) 会失败,并伴随着以下错误提示:
EFI variables are not supported on this system
电脑启动的时候,选择EFI方式引导livecd,MBR引导livecd,就会出现这种问题