基本系统+引导器
进入UEFI固件设置界面(SP3进入方法:关机>按住音量上>按开机键>直到进入设置界面再松开音量上键),关闭Secure Boot(一会装好再开)并修改启动项:U盘启动。【对于SP3来说,目前不知道如何TF卡引导,所以只能用U盘】
配置好UEFI以后再次重启,插U盘,进入Archlinux安装界面(弹出来的选单我选了第一个,大概是UEFI x86_64启动,不同机子需要自己决定)。
====联网====
首先,十分十分建议找一个不需要输密码且不需要网页或者客户端认证的wifi热点,因为用iw+wpa_supplicant输密码有点小麻烦,当然如果会用别的软件(network-manager、netctl等)连wifi就无视我,我还是喜欢用gui呵呵,比较懒。
# ip link
看一下接口(interface)名,SP3只有无线,当然被内核识别的,所以需要用iw(或者netctl等工具)联网。
这里说一下iw的用法:
----iw用法----
# ip link set interface up
激活网络接口。用你查到的接口名替换interface。
# iw dev interface scan | less
扫描可用wifi。此时会进入一个可以用上下键滚动的界面,这是后面那个“less”的效果。上下滚动找你要的网,记下SSID。记好按“esc”退出。
# iw dev interface connect SSID
连接网络。用记好的SSID替换上面的。
#iw dev interface link
检查一下是否连接成功,如果没有(输出“Not connected”),检查上一步的SSID是否正确。
# dhcpcd interface
分配动态ip地址。
# ping www.baidu.com
看看网通了没有,ping用法可以百度一下。
----以上为iw简单用法----
====同步时间====
# timedatectl set-ntp true
启动时间同步服务。
# timedatectl
输出的倒数第三行代表服务是否开启,倒数第二行是是否已同步到时间。倒数第二行有可能是“no”,如果时间多可以稍等一会再输出一次,如果一直不变的话,把上一步的命令最后的“true”改“false”,关闭,然后再改“true”,再开,就这样尝试,直到两个“yes”都出现,当然如果一直不出现(猜测取决于网络状态,“true”指令输完等一会再看。),那就保证先开启,然后就继续吧。
====分区(使用gdisk)====
这里SP3使用GPT分区表,所以我们使用gdisk,gdisk具有自动的4k对齐功能,对于SP3的SSD来说是方便的。
# gdisk /dev/sdx
进入gdisk交互环境,根据提示操作吧。
根据各种针对SSD的分区方案,最终使用EFI+/分区,就两个,其中EFI系统分区是必须的,而且放在第一个,根据Archwiki建议分512M。Swap用交换文件,不专门分区了。
再说一下gdisk对于efi有专门的分区类型,在空间确定好以后会让选。
====格式化分区并建立文件系统====
先挂根分区到/mnt,然后在/mnt里建boot,此时由于/mnt已经挂到实际硬盘的根分区,所以boot目录就是建在刚刚分的区里了,最后再把efi分区挂到boot。简单说就是先挂根分区,然后建目录,再把别的分区挂到根分区下相应的目录。
# mkfs.ext4 /dev/sdxy
格式化根分区,用ext4文件系统。
# mkfs.fat -F32 /dev/sdxz
格式化efi分区,用fat32。必须是fat(DG默认是用fat16不知原因),否则efi固件无法读取。
# mount /dev/sdxy /mnt
先挂/mnt。
# mkdir /mnt/boot
在/mnt,也就是硬盘根分区下建/boot目录。
# mount /dev/sdxz /mnt/boot
最后挂载/boot分区。
交换文件等系统全部装好再说。
====下载并安装系统====
# vim /etc/pacman.d/mirrorlist
把分最高的中国源放第一个(推荐163放第一个,虽然它有时候不是高分,但确实快),然后
# pacstrap /mnt base base-devel
开始下载系统。
====配置系统====
# genfstab -U /mnt >> /mnt/etc/fstab
生成一个名叫“fstab”的文件,包含分区信息供系统开机挂载。
# arch-chroot /mnt
进入新系统。
====时区时间====
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
命令的目的是把时区改为自己的本地时区;命令的作用是让对应的时区文件(第一参数)和自己账户的本地时间(第二参数)建立关联(ln命令)。这个地方,201701的镜像中装完以后已存在/etc/localtime文件,所以至今ln会提示出错,所以只能先把旧的删掉在ln。
# hwclock --systohc
用现在经过网络同步的UTC标准时间刷新BIOS硬件时间。
====本地化设置====
# nano /etc/locale.gen
打开上述文件,把需要的本地化设置前面的注释符去掉,保存退出,一般是en_US.UTF-8和zh_CN.UTF-8。
# locale-gen
生成本地化文件。
# nano /etc/locale.conf
打开(如果没有就是新建)文件,加入以下一行:
LANG=en_US.UTF-8
确保全局地域设置为英文。
====主机和root密码====
# nano /etc/hostname
建立一个新的文件并打开,在里面输入主机名(这里以“host”为例),保存退出。
# nano /etc/hosts
在打开的文件里::1的那行里的hostname改成上一步的主机名。
# passwd
根据提示输入两次root密码。
====生成启动镜像====
# mkinitcpio -p linux
生成启动镜像
====启动引导器和双系统引导====
# pacman -S grub ntfs-3g efibootmgr
安装启动引导器grub、ntfs分区识别工具,EFI启动项编辑工具。
如果使用英特尔CPU的话(AMD跳过)
# pacman -S intel-ucode
安装一个额外的包。求大神科普下这个包,真心没明白它是做什么用的。接下来开始对付SecureBoot。
----UEFI & Secure Boot----
在Secure Boot开启的情况下,Win 8/8.1和Win 10是可以顺利安装的,还有少数其它系统,包括不限于Ubuntu也可以安装,但是对于Archlinux来说是不可以的,会提示签名无效无法加载。解决这个问题有几种方法,第一种最简单,关闭Secure Boot功能就可以了,但是这种方法可能会导致OEM预装的Win系统不能启动,而且对于SP3来说,关闭Secure Boot会导致开机界面变成红色,真的不怎么好看;第二种方法是自己签数字签名,但是SP3的UEFI-BIOS里似乎不可以添加钥匙,只能删空,如果能求指教,我真的没找到在哪里可以改,SP3的UEFI-BIOS功能太简单;所以我选择第三种方法,使用授权过的预加载器链式加载引导器(如grub2、systemd-boot),再引导系统启动。引导器是没有签过名的,所以不能被启动,但是预加载器是签过的,而且预加载器可以加载任何别的引导器或者系统镜像,所以我们让UEFI-BIOS验证能通过验证的预加载器,再用预加载器加载通不过UEFI-BIOS验证的普通引导器,从而引导各种系统启动,所以理论上用这个方法可以引导一切普通引导器能引导的系统。PreLoader.efi就是这样一个预加载器,它可以通过Secure Boot认证从而被启动,而PreLoader对它将要加载的系统或引导器也是有认证机制的,只不过这个认证是由用户说的算的,PreLoader加载系统或引导器之前首先要验证其hash值,如果hash值没有在Preloader记录过则不给启动,但是用户可以通过配套的HashTool.efi把要启动的hash添加到白名单,这样一切就顺利了。
首先,正常安装grub2:
# grub-install --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub
# grub-mkconfig -o /boot/grub/grub.cfg
生成主配置文件
下载PreLoader.efi,Hashtool.efi。
# cp PreLoader.efi /boot/EFI/grub
# cp Hashtool.efi /boot/EFI/grub
把两个程序放到grub的启动目录下。
# efibootmgr --disk /dev/sdX --part Y --create --label "PreLoader" --loader /EFI/grub/PreLoader.efi
用efibootmgr为UEFI-BIOS添加PreLoader.efi启动项,使UEFI-BIOS直接启动PreLoader,由于PreLoader是签过名的,所以可以启动。
如果现在重启,我们已经可以进入PreLoader了,而Preloader启动后默认会加载名为loader.efi的文件,那么既然要让它加载grub2,只要把grub2的启动文件改名为loader.efi就好了。
# cp /boot/EFI/grub/grubx64.efi /boot/EFI/grub/loader.efi
完工,重启打开Secure Boot功能,再重启,首次使用,PreLoader加载loader.efi时会发现hash认证失败,因为我们没有把它的hash加入白名单,于是它会提示启动Hashtool.efi(就是蓝色的只有一个OK选项的界面。SP3用户注意,我的机器上此时键盘盖和触屏都没有用,所以还是外接键盘吧),选择OK,选择Enroll Hash,再选择loader.efi,最后选择yes,此时应该就能进grub了,重启再试一次,应该是“Surface”标志熄灭后直接进grub,完工!
资料:
archwiki:secrue boot:https://wiki.archlinux.org/index.php/Secure_Boot#Set_up_PreLoader
Managing EFI Boot Loaders for Linux --by Rod Smith:http://www.rodsbooks.com/efi-bootloaders/index.html
http://www.rodsbooks.com/efi-bootloaders/secureboot.html#preloader