Arch! 从安装开始

时间:2024-02-01 12:05:54

Arch! 从安装开始

事实上Arch的安装Arch Wiki Installation Guide,已经非常详细了

但是初次面对这些东西时肯定非常迷茫,根本不知道这些东西是在干嘛?为什么要这么干?

但是我可以跟你保证这一定不会很难

我之所以觉得不难并不是因为我有多么会装

事实上我就安装过两次Arch

第一次是什么也不懂的时候

第二次是装了固态想迁移系统的时候

但是每次安装完我基本都忘了要怎么安装了,下一次安装依然需要看Arch Wiki一步一步来

我觉得并不需要把安装命令像背八股一样背下来

我之所以觉得不难,更多是因为我看得懂怎么安装

我知道它在干什么

你觉得难大概是因为你根本不知道它在做什么,只有一头雾水

那么这篇就是大概解释每一个操作背后的东西,希望可以帮助你更加了解Arch的安装

写在一切之前

第一篇博文就用来布道咯--

不过我一直不喜欢讨论Linux/Windows or 不同发行版之间的好坏之类的东西

不同的人总是会有不同的看法

我觉得你用一个你觉得顺手的工具就行

不同的发行版/系统就跟不同的手机品牌一样

你可能会在某一个方面被吸引但是同样也要承受它的其他缺点

但是你最终干的还是那些事

所以没必要在这方面进行过多讨论(虽然但是不管你使用什么发行版都可以试试ArchWiki

我也不会把细节过多聚焦在如何安装上

例如我直接跳过了怎么制作usb镜像

因为这些东西随便找个教程都能翻到

你在B站甚至可以看到视频

你对着视频一个命令一个命令敲也能顺利安装下来

我更多的还是针对新手,想讲讲Arch为什么需要这样安装

也就是其他发行版下一步下一步的背后到底是在干什么

所以不用担心,基本不需要Linux基础

基本所有用到的命令都会解释一下

如果有一点点Linux使用基础可能会提升你的阅读体验

当然如果你基本会使用Linux了,那可能会破坏你的阅读体验

我希望能给那些对Arch感兴趣但网上清一色评价Arch难装而被劝退Arch的新手一点帮助

Arch本就是用户导向的系统,亲民是Arch的最大特性

目前现有的教程显然对刚接触Linux的人还是有点难度

所以就补全一下这方面的东西吧

最后,希望这篇博文对你有所帮助

你看到了什么?

如果你成功制作了usb镜像并选择启动到了Live环境,你看到了什么?

丑陋的大黑框??

它可以被看作是Linux的PE

但其实它比PE要强很多

因为Live环境本身就是一个完整的Linux环境

而且还内置一些工具帮助你把安装Arch到本机上

未来你可能还需要用它来帮你完成修复系统、重置root密码、给软件包降级之类的操作(具体请看ArchWiki里的chroot词条,以后有机会的话会水一篇

当然我再怎么说你也不一定会喜欢这个丑陋无比的家伙,肯定想着为什么Arch官方不愿意提供一个图形化的LiveCD?

事实上我之前提到过Live环境本身就是一个完整的Linux环境,所以你其实可以根据archiso自己定制一个

当然我知道你可能不会定制,但是不用担心

因为社区已经有不少定制的Live环境了,有些甚至直接演化成了一个基于Arch的发行版,例如Archcraft最初便只是一个定制的archiso

所以你现在看到的其实就是一个没有桌面环境已经图形服务的完整的ArchLinux系统,它能帮助你把Arch安装到电脑上

连接互联网

如果你是用网线进行的连接的那么恭喜你,这一步什么事都不用干

如果你需要用wifi上网则需要使用iwctl这个工具

这个工具的使用我也不展开说,但是依旧可以告诉你需要做那些事,首先iwctl需要使用命令来使用

那么我们需要连接到网络,要连接网络首先就需要扫描周围的wifi,但是你直接输入scan命令是不行的

因为他不知道你要对那个网卡操作,所以首先你要使用命令看看有那些设备

如果你只有一个无线网卡那么设备名应该是wlan0

这下你已经基本掌握了iwctl的使用方法

至于具体的命令你不知道,而我也早忘了

所以当我们想使用的时候为什么不查下wiki或者是百度呢?

因为你可能就用这么一次,也没必要记住吧?

连接完后你需要测试一下是否成功连接到到网络

可以使用广为人知的ping命令,当然也可以使用curl,wget...

但我们的目的都是验证一下我们有没有成功连上网络

ping通说明网络连接正常,按ctrl+c退出

然后你如果是按wiki来的,那么接下来wiki上有个同步系统时间的操作

timedatectl set-ntp true

其实在Live环境中我不知道这个操作有什么必要性

基本不会影响到我们的系统安装,例如我这次的安装便没有进行这个操作

设置分区

这个也是必不可少的一步

Linux基本都需要3个分区(建议这个顺序作为待会儿划分分区时的顺序

EFI引导分区(你能不能开机,或者多系统时在开机界面能不能看到你的Arch就靠他了,但老式机使用MBR引导不需要这个分区,或者你已经有了也不需要创建EFI分区

SWAP分区,现在比较流行的是不用SWAP分区而是用SWAP文件代替,我觉得没什么区别,在这里不展开讨论,好奇的话可以使用搜索引擎详细了解

根分区,Linux一般不会想Windows一样分好几个不同的盘,就跟你的手机一样,Linux的存储是一体的

那么我们怎么进行分区能?有两个工具一个是fdisk一个是cfdisk

前者依靠命令操作,后者有一个图形界面依靠上下左右和enter操作

但是跟你的习惯相反其实前者更好操作一点,因为或者的选项有太多相同类型

不去找别人安装的教程然后看别人的图操作很容易心里没底,而前者则是wiki上用的

只要知道在干什么就行,命令可以直接参考wiki上的操作

首先我们可能有多个硬盘

所以我们要看看我们的硬件名,方便后续操作

对指定的那个硬盘使用fdisk后

你会发现有两块命令

第一块你自己读就好了,什么意思一目了然

第二块其实是告诉你还没有创建磁盘分区表(一般是新装的硬盘或者是虚拟机安装会这样,如果原来使用过删了一部分空间安装则不需要这个操作

现代的设备一般选择GPT分区表,关于各个不同的分区表区别感兴趣自查

那么怎么创建分区表?这时你会发现括号里写着m for help

是的,其实之前的所有软件都有help操作

所以你如果用过一次了下一次也不用再查wiki用内置参数来寻找提示就能帮助你进行操作了

例如这次他便提示我们只需要按下g然后敲下回车就能创建GPT分区表了

第一步就完成了,然后查看wiki发现分区主要有两个参数,一个是文件系统,一个是大小

文件系统是我们待会儿格式化时创建的,现在连分区都还没创建

所以我们要创建三个大小不一样的分区

分区大小根据wiki的推荐即可

怎么分区显然你可以在它的help里看见是字母n

但是敲完字母n以后我估计你又不知道它在搞什么名堂了

如果你遇到了Partition type,那么选择默认的主要分区即可

扩展分区显然不是我们今天的目的

然后你可能会遇到Partition number这个是让你给你的分区编号

这个我们也不需要要,直接回车让它给你编就行

然后fdisk就会让你选择启示扇区和终止扇区来进行磁盘分区

虽然很科学但显然你也没接触过扇区这个概念

虽然可以百度然后换算来分区,但是我们其实还可以用更符合人类操作习惯的方式

就是像往常一样制定分区大小划分分区

怎么做?

还是什么也不输入直接回车,第一个扇区会选择你能划分的最小扇区

然后选择最后一个扇区的时候是可以用+/-操作的

指的是离你之前选择的扇区的距离,后面加上K,M,G之类的字母则可以用大小来划分

所以到这里,使用fdisk划分分区你也会了

所以现在应该也明白了为什么要最后划分根分区,因为可以直接敲回车,使用剩下的所以分区

至此分区工作结束

别忘了按w保存退出fdisk,不然就会白忙活

那么就要开始格式化分区了,也就是给分区适配它应该使用的文件系统

这个按照

格式化分区按照Wiki的文件系统,要求输入wiki上写好的两行命令即可

当然EFI分区的格式化命令没有给出

直接用fat格式就行

也就是使用以下命令

mkfs.fat /dev/*efi_partition*

格式化到此也就结束了

下面就是挂载磁盘了

挂载这个操作其实你经常用到,只不过你的桌面环境帮你把这一步完成了而已

例如你插入u盘,你必须挂载u盘才能对于u盘进行访问读写

我们现在则相反,我们是在一个u盘里的操作系统,我们需要把刚分好区格式化的硬盘挂载到我们现在加载的系统上进行读写

一般Linux用来挂载的目录都是跟目录下的mnt目录,也就是mount的缩写

我使用了cd也就是change directory的缩写进行了更换目录,更换到了/

是的其实第一个/不是一个分割符号,而是一个存在的目录,是所有目录的起始目录

也就是我们一直所说的根目录

那么我们之前一直在那里呢?

我们一直在根目录下的root目录里

也就是/root下面

这个就是root用户的家目录

其他用户的家目录是/home/用户名

家目录类似Windows的User目录,是存放用户的配置文件已经日常给类使用文件的地方

假设我现在的用户叫empathy

我的桌面是什么目录呢?

在/home/empathy/Desktop里

家目录实际上就是一个环境变量

环境变量就是可以以变量形式传递给系统或者应用的一些参数

例如path, 如果你在Windows下给gcc设置过环境变量你应该对它会有点印象

这个变量下的目录就是当用户要求系统运行程序时(命令本质就是系统自带的基本程序

如果没有给出这个程序的路径,系统就会在path目录下面寻找,并匹配运行

home这个变量我们也可以直接打出来看看(bash下变量使用$表示,有别于Windows的前后两个%

看的非常清楚

那么你应该对linux的目录结构有了初步了解

了解了家目录、根目录以及通常用于挂载的目录

所以可以开始挂载操作了

挂载所使用的命令就是mount非常直接没有使用任何缩写

我们先挂载一下根目录

mount /dev/*root_partition* /mnt

挂载后大概长这样

然后挂载一下efi目录,挂载前先在/mnt下创建一个叫efi的文件夹

创建文件夹需要的命令是mkdir,make dirctory的缩写

然后正常挂载即可

如果你用的是之前已有的efi分区那么需要找一下,可以使用lsblk查询

mkdir /mnt/efi
mount /dev/*root_partition* /mnt/efi

和硬盘相关的操作结束了

那么折腾了半天硬盘,显然应该往里面写入东西了

安装

我们需要使用pacstrap往我们新系统的根目录也就是挂载在/mnt的目录安装最基本的而系统

pacstrap是一个用来给你制定位置安装一些基础包的脚本

我们现在安装系统需要的基本软件包就要用到他

如果你看了一个比较老的教程

那么以往这个地方可能会有一步需要编辑/etc/pacman.d/mirrorlist这个文件

并将这个操作称之为「换源」

源简单来说就是你下载东西用的网页

但是显然Arch是一个国外的发行版,所以我们在连接他默认的源是会遇到困难

但是不用担心,国内有一些服务器存储了国外的源里的东西,并不断保持更新

就相当于在国内开了加分店,使你的连接更方便了

(我们一连入网就有个应用在后台帮我们根据连接速度更换了镜像源

「镜像源」的概念如果不太懂还是建议使用搜索引擎

上面的一切概念最后其实就是一行命令

pacstrap /mnt base linux linux-firmware

也可以不一样,例如linux就可以替换成其他内核,详细见wiki

或者你也可以自己安装一些你需要的软件包,例如一个终端下的文本编辑器

这三个包baselinuxlinux-firmware

分别是基础软件包,系统内核,以及常规硬件的固件

显然系统最基本的部分差不多弄好了

但是有个问题,就是我们虽然现在手动进行了挂载操作,但显然重启以后就没了

但是我之前说过的存储设备需要挂载后才能读写

fstab文件就负责干这事儿

这个也很简单按照wiki上的原封不动的打上去就行

genfstab -U /mnt >> /mnt/etc/fstab

>>其实就是输出重定向,我们是把genfstab -U /mnt这条命令产生的内容输出到了/mnt/etc里的fstab文件里

-U这个参数就是使用UUIDs(通用唯一识别码)作为源文件标识的意思

然后我们指定了/mnt目录告诉是为了告诉系统/mnt下的挂载就是我们要记录的挂载情况

接下来就用到了之前提过一嘴的chroot操作切换根目录

也就是说我们会切换到我们新安装的系统上,使用arch-chroot /mnt命令

然后在新系统里要进行一些基础性的设置

设置

更改时区并同步硬件时钟,不然会因为时间不同步而无法联网

这两步操作我也记不来

按wiki给的输入即可

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

不要一直傻敲,还容易敲错,用tab补全就行

然后就是本地化

这个地方需要用到文本编辑器

我们之前用pacstrap只下了三个必备的包

所以我们需要用pacman

pacman不同于pacstrap, pacman是一个给本地安装软件包的东西

这个概念可太易懂了,不就是App store吗?

pacman有很多功能,我们目前只需要用它下载软件包,传递-S参数即可

下面给出示例

pacman -S package1 package2 package3

这下你就学会了怎么使用pacman下载软件包了(其他使用方法请自行查阅

例如终端下的文本编辑器我喜欢使用vim,可以这么下载pacman -S vim

如果你之前不了解vim那么我建议你使用nano

nano的使用方法在你打开nano后就有提示,我建议你自己读一下

安装好后去可以进行地区设置了

首先类似fstab, 地区的设置主要是这个文件/etc/locale.conf

但是在创建并编辑这个文件之前我们需要让系统帮我生成一下基本的区域设置

使用locale-gen命令就能生成了,但是系统并不知道你需要的区域有那些

所以我们需要对它的生成进行指导,需要编辑/etc/locale.gen文件

只需要把我们需要的区域设置前面的注释去掉即可,shell中一切以#开头的东西都会被当作是注释(当然有一个特例,就是第一行以#!开头的语句,感兴趣可以自己了解

我们将来可能使用的区域设置以及相关变量主要是en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8

我们只需要把它们前面的#号删掉即可

然后就可以使用locale-gen命令生成了

然后再往/etc/locale.conf写入LANG=en_US.UTF-8(这里如果你使用中文会导致tty乱码,只能用英语

然后我们要设置一个主机名

需要写入到/etc/hostname文件里

直接写入你想要的名字就行,例如我写的是mn1I(注意Linux是大小写敏感的,mn1I和mn1i不一样)

然后就是解析本地域名,像wiki上的那样写入hosts就行,不过注意中间的空白是tab制表符而非空格

这一步目前其实没什么用,但是后续在本地使用「web server」之类的东西就会出现问题了,就不展开细讲了

然后就是设置root密码

这个密码忘了会有点麻烦,务必设置个你不会忘记的密码

然后基本就安装好了,但是如果你这是退出chroot环境重启会有两个问题

就是我们新系统没有装网络相关的包,意味着我们需要进入系统后进行安装

但是进入系统后安装软件包的前提是我们有网络...所以会陷入一个循环

为了打破这个循环我们需要现在进行安装

另一个则是我们没有安装起动器

所以现在重启系统是没办法正确读到我们新装的系统的

所以我们还需安装一个启动器

启动器需要安装这两个包grub,efibootmgr(当然你也可以不用grub,但目前grub应该是最受欢迎的起动管理器

当然如果你是多系统还需要使用os-prober帮你寻找适配其他系统,如果你有Windows系统还需要安装ntfs-3g

因为Windows的文件系统和Linux不一样,不安装这个包你就无法正常访问使用ntfs文件系统的分区

现在grub就在你的系统上了

但是这还不够,因为开机读取的不是你的系统分区,而是引导分区

所以我们需要用我们安装好的grub工具把grub启动器安装到引导分区上

所以这个时候你去可以去ArchWiki看grub词条,这也是Archwiki的强大之处了

不止是系统本身的东西,很多软件包的使用都可以在Archwiki中查询到

按照上面推荐的使用下面的命令就可以(把esp换成你的efi分区的位置,例如我是/efi,各个参数的含义其实很直白,具体的作用还请参考wiki

grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB

但是这只是安装完成了而已

完成安装之后,grub在每次启动的时候载入配置文件 /boot/grub/grub.cfg

所以我们还需要生成grub的配置文件

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

然后就需要安装联网用的软件包了,当然你也可以安装其他需要使用的软件包

例如base-devel里是开发相关的基础组件(gccmakesudo...都在这个包里),不安装也没事,但是很多依赖都在这个包里,建议现在就安装上

不过你也可以进入新系统后安装,必要的就是这两个包dhcpcdwpa_supplicant前者主要是用于分配ip

后者使用来连接wifi的,如果你只用有线网可以只安装前者

然后就基本告一段落了

你的系统安装就完全结束了

我们只需要

至于图形界面和桌面环境之类的东西也不会难倒你

不过就是使用pacman安装软件包而已

最后就只需使用exit推出chroot

umount 加上-a参数取消所有挂载

这一步有些分区不能取消挂载没关系(能取消才怪了

你觉得不妥也可以先取消挂载 /mnt/boot然后再取消挂载/mnt也行

reboot重启即可

最后

总结一下

其实说下来也就分为四类操作,有些操作需要交替执行

联网->分区->安装软件包->配置

这下我想你应该知道安装Arch大概都是在干什么了吧,Happy hacking