这篇文章在2020年07月02日 (Thu)更新了呐~

给会用点 Windows 的彻头彻尾的 GNU/Linux 新手的 Arch Linux 安装指南 😣

为啥要搞这个?

因为 ArchWiki 上的 Beginner Guide 已经和 Installation Guide 合成一个啦😂, 然后有小白开始抱怨看不懂啦(误 (╯・∧・)╯ ┻━┻

其实咱最早看的也是 Beginner Guide ……

算了概念用到时再解释 😂

我是一个彻头彻尾的Linux新手,我应该用Arch吗?

如果你是新手,要使用 Arch 就必须愿意花时间学习新系统,接受 Arch 是一个 DIY 的系统,每个用户都是自己系统的组建者。

在开始问任何问题之前,自己先通过Google、Wiki或者论坛进行搜索。我们为你创建了这些资源并让你可以随时访问,上千志愿者为你提供了大量的信息资源。

推荐阅读: Arch terminology#RTFM

首先说点废话

  • Arch 这种经常更新内核的还是适合上实体机……

  • 看得懂英语的话最好还是看官方的 Installation Guide 吧(人家更新的比咱要勤快):

    https://wiki.archlinux.org/index.php/Installation_guide

  • 这里的目标是装好最简单的一个带有桌面的 Arch Linux ,对于部分特殊需求(例如无 GUI 的环境), 请直接参阅上方官方 Wiki 的安装指南装出基本系统,然后再参阅其他的文章呗~

备份……

万一手抖格错了盘别抱怨 GNU/Linux ……

但如果汝有备份的话,是不是已经下定决心把整个硬盘格式化掉了?(雾)

下载 ISO

https://www.archlinux.org/download/

BT 种子和磁力链接在上面,直接下载的话往下拉,找 China 下面的镜像网站挑一个下载就好。 (っ╹ ◡ ╹ )っ

如果是用 HTTP/HTTPS 下载的话,下载完以后最好验证一下文件的散列值来确定文件下载完了 (╯艹︿艹)╯ ┻━┻

Windows 上这样的工具有很多呐,例如 HashTab 和 FCIV。

但是如果汝正好没有这些工具或者从来没听说过散列(或者另一种译名叫哈希)的说法的话,可以用 Windows PowerShell 来完成:

# 例如获得某一个文件的 md5 散列值,用汝下载的 ISO 的路径换掉 <filepath>
Get-FileHash <filepath> -Algorithm MD5

# 尽管 md5 和 sha1 已经被认为是不安全的散列算法了(容易发生两个文件不同但散列值相同的情况,
也被称作散列碰撞”,然而 Arch Linux 的官方网站上还是只有这两种 😂, 先凑合着用吧……

至于下面那个 PGP 签名,又是个大坑,先鸽了(咕咕咕……)

确定启动类型

  • 首先打开设置 ( Windows 8/8.1 叫做 "电脑设置"),然后通过 "更新和恢复" -> "恢复" -> "高级启动" 重启电脑.

    Windows 10 的话,按住 Shift 再点击电源按钮里的重启也行……

如果是 UEFI 启动的话,大概是这个样子:

UEFI 系统启动之后大概像这样

没错就是有个 "使用设备" 的选项 😂

  • 或者同时按下键盘上的 Windows 徽标键(就是有 Windows 标志那个) 和 R 键,会打开“运行” 对话框。
“运行”对话框

在里面输入 msinfo32 然后回车(按 Enter 键)确认,打开”系统信息”应用。

“系统信息”窗口

看“BIOS模式”里是不是 UEFI 😂😂,还有下面那个 “安全启动状态”是不是“以关闭”(咱这台电脑的 UEFI 太旧所以显示的是不支持)

如果安全启动是打开的还需要自己进 UEFI 固件设置里手动关闭 😂

具体怎么关因为每种电脑的方法不一样于是汝要自己 STFW (Search the f**king Web,搜索一下) 了😂
  • 再或者打开磁盘管理(Windows 8 以后的系统可以通过按下 Windows + X 的菜单里找到 “磁盘管理”)
磁盘管理在这~

嗯,大概就是这样子的呗 (虽然具体的磁盘分区可能和咱的不一样)

大概长这样~

看汝的硬盘上有没有一个 EFI 系统分区 😂😂😂


还是搞不懂的下面也不用看了,准备下最后的晚餐吧 😋 (误

在硬盘上准备一块空闲空间

不然要把 Arch Linux 装到哪里去呐?

这里拿来演示的是 Windows 7 以后都自带的 “磁盘管理” 程序,应该能解决大多数问题 _(:з」∠)_

  • Windows 8 以后的系统可以通过按下 Windows + X 的菜单里找到 “磁盘管理”
磁盘管理在这~
  • 嗯,大概就是这样子的呗 (虽然具体的磁盘分区可能和咱的不一样)
大概长这样~
  • 汝哪个硬盘分区比较空闲? 右键点击它,有一个"压缩卷的选项"
”压缩卷“ 在这~
  • 输入压缩的大小 _(:з」∠)_
多少
  • 然后就多了一块未分配的空间 😂
多了一块未分配的空间

如果汝的硬盘分区有些刁钻而磁盘管理没法解决的话,AOMEI 家的分区助手不错, 这是官方网站 , 这是分区教程

制作启动盘

但前提是汝的电脑能从 U 盘启动 😂 (不过最近几年生产的电脑都应该可以了吧……

Windows 下咱比较推荐一个叫 rufus 的软件,官方网站在这

下载完以后双击运行,需要管理员权限,记得看有没有数字签名。(有数字签名时用户账户控制的对话框是蓝色的)

Rufus 自带多国语言(当然也包括中文啦),如果汝系统语言不是中文的话,点击那个地球图标就可以修改语言了啦~

选择语言

然后戳有点像光盘的按钮选择刚下载好的 ISO 镜像

选择映像

然后选择一种启动类型,UEFI 就选最后一个,不是的话就选第一个。

选择启动类型

写入方式选推荐的就好 (´_`)

选择写入方式

确认(要知道汝按下确认以后就没有回头路了,所以记得提前备份 U 盘上的资料 😂)

确认

然后坐等完成,完成以后汝的 U 盘卷标应该是 "ARCH_201610" 这样的 (后面四位年份和两位月份),不要改成别的,万一不对记得照 ISO 改回来 😂😂

准备启动

重启电脑,然后让电脑从 U 盘启动。

具体怎么搞还是要看电脑的硬件啦 😂

大多数的电脑都有一个在开机时按下一个按键来选择从哪里启动的选项(例如 Dell 和 ThinkPad 是 F12)。 UEFI 的话, 刚才提到的那个“使用设备” 的选项也可以。

还是去翻一翻汝自己的电脑生产商的说明书更快一点 ……

  • MBR 成功启动以后像这样
MBR

选第一项。😂 (除了 CPU 不支持的都应该用x86_64 😋)

后来 Arch Linux 不再支持 i686 啦,所以这里应该只会看见 x86_64 那一项(但是咱懒得换图片啦……)
  • UEFI 成功启动以后像这样
UEFI

还是选第一项。😂

然后等待一会以后会出现……

root@archiso ~ #

这就表示已经启动完毕啦 ~(>_<~)

root是用戶名,前面那個數字是上一個命令的exit status啦,如果正常結束的命令exit status是0,就不會顯示出來,你有 1 2 127 這種都是某種東西報錯了.

----现任 Arch Linux TU 之一的 farseerfchttps://www.zhihu.com/question/45329752/answer/98733823 中写到……

联网

因为 ArchISO 就是个重启就没了的 Live 环境,安装时需要的软件包都要另外下载。

首先当然是联网啦,如果是自动获取 IP 地址的有线网络,那么应该啥也不用做,ping 一下试试?

root@archiso ~ # ping archlinux.org
# 汝应该会看到像这样的东西 ……
PING archlinux.org (138.201.81.199) 56(84) bytes of data.
64 bytes from apollo.archlinux.org (138.201.81.199): icmp_seq=1 ttl=49 time=361 ms
……

(把电脑用网线接到家里的路由器上就有相同的效果)

如果没网的话…… 😂


  • 先用 ip link 确定一下网卡
root@archiso ~ # ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether c8:9c:dc:a8:ab:c3 brd ff:ff:ff:ff:ff:ff
3: wlp0s29u1u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 44:94:fc:0f:63:b9 brd ff:ff:ff:ff:ff:ff

这个例子里,lo 是本地环回不用管它,enp 开头的是有线网卡,wlp 开头的是无线网卡。

如果汝明明有无线网卡却没识别的话,有可能汝是某无线网卡厂商受害者😂😂

这时可以:

  • 有 Android 手机的话,手机连 WiFi ,然后用“USB 网络共享”共享给电脑。
  • 找个 USB 无线网卡插上 😂
  • 连有线😂😂
  • 如果有无线网卡的话,试试连接到 WiFi ……

    2020 年 7 月的 ArchISO 拿掉了 netctl,于是经典的 wifi-menu 也被 iwctl 取代了。

    如果汝之前也能熟练使用 wpa_supplicant 啥的那当咱没说……

# iwctl 命令来进入 iwd 的 shell。
root@archiso ~ # iwctl
# 以下的操作都在 iwctl 的 shell 中,输入 help 来获得可用的命令。
[iwd]# help
# 列出无线网络设备
[iwd]# device list
# 用所指定的设备扫描网络(用上一步的设备名称替换 device)
[iwd]# station device scan
# 或者列出所有的网络
[iwd]# station device get-networks
# 连接到网络, SSID 就是汝要连接的网络的 SSID 啦
[iwd]# station device connect SSID
# 如果所连接的网络需要密码,则接下来会提示输入,汝当然也可以直接在 iwctl 命令中输入
root@archiso ~ # iwctl --passphrase passphrase station device connect SSID

谁叫 Arch 连不上网的话都装不了 😂

另外,如果汝连接的网络需要网页登录(Captive Portal),可以用 elinks 碰碰运气 😂

# 用汝的门户的 URL 替换 <your_captive_portal_url>
# 如果不知道的话,随便访问一个 HTTP 网站试试,应该就会被重定向到 Portal 了
root@archiso ~ # elinks http://<your_captive_portal_url>

时间同步

timedatectl set-ntp true 保证时间同步 。

root@archiso ~ # timedatectl set-ntp true
root@archiso ~ # timedatectl status
    Local time: Fri 2016-10-28 17:39:42 UTC
    Universal time: Fri 2016-10-28 17:39:42 UTC
    RTC time: Fri 2016-10-28 17:39:42
    Time zone: UTC (UTC, +0000)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no

因为有不少操作需要准确的时间呐,例如 HTTPS 和 GnuPG 都需要准确的时间来验证证书的有效性。

但是如果因为各种原因没法同步的话,那就只好手动设置咯~

# timectl set-time "yyyy-MM-dd hh:mm:ss"
root@archiso ~ # timectl set-time "2016-10-28 17:39:42"

准备硬盘空间

这里用 cgdisk (UEFI)/ cfdisk (MBR) 来给硬盘分区。

首先输入 lsblk 看看汝的硬盘是哪个设备:

root@archiso ~ # lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 463.9G  0 disk
├─sda1   8:1    0   512M  0 part
├─sda2   8:2    0    16M  0 part
├─sda3   8:3    0 103.4G  0 part
└─sda4   8:4    0 253.4G  0 part
sdb      8:16   1   7.5G  0 disk
└─sdb1   8:17   1   7.5G  0 part /run/archiso/bootmnt
sr0     11:0    1  1024M  0 rom
loop0    7:0    0 346.1M  1 loop /run/archiso/sfs/airootfs

如果那是一块新硬盘或者已经清空的硬盘的话,汝大概看不到 /dev/sda1 一类的分区。


如果汝没看到 /dev/sda 却看到了一些其它的东西的话:

  • /dev/nvme0n1 一类的:表示汝的电脑上有一块 NVMe SSD (发出了羡慕的目光(咳咳))
  • /dev/mmcblk0 一类的:表示汝的电脑上有 eMMC 存储(例如是早期的 Windows 8 平板电脑啥的)

这种时候的话可能汝 ArchISO 的 U 盘就跑到 sda 去了,在下面的操作时记得注意一下。

比如咱这里 sda 是咱的硬盘,于是运行 cgdisk 时加上 /dev/sda 这个参数:

/dev 是一个虚拟目录(也就是并不在硬盘上),它会把电脑上的设备映射成一个个文件 _(:з」∠)_

再学究的解释真不会了……

cgdisk

root@archiso ~ # cgdisk /dev/sda

如果汝在用 cgdisk 的话汝可能会看到这样的提示:

Warning! Non-GPT or damaged disk detected! This program will attempt to
convert to GPT form or repair damage to GPT data structures, but may not
succeed. Use gdisk or another disk repair tool if you have a damaged GPT
disk.


                                            Press any key to continue....

这表示 cdgisk 在这块硬盘上找不到 GPT 分区表。如果这是一块新硬盘或者已经清空的硬盘的话 不必担心,继续即可。否则请立即停下来检查一下硬盘(或者汝有这块硬盘的备份的话也可以继续)。

                                            cgdisk 1.0.1

                                        Disk Drive: /dev/sda
                                    Size: 972906545, 463.9 GiB

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
1           512.0 MiB   EFI System                EFI system partition
2           16.0 MiB    Microsoft reserved        Microsoft reserved partition
3           103.4 GiB   Microsoft basic data      Basic data partition
4           253.4 GiB   Microsoft basic data      Basic data partition
            106.6 GiB   free space





    [ Align  ]  [ Backup ]  [  Help  ]  [  Load  ]  [  New   ]  [  Quit  ]  [ Verify ]  [ Write  ]

cgdisk 的界面大概像这样啦,用上下方向键把光标移动到汝之前的空闲空间上去(例如咱这里是最后一个)

新硬盘的话应该只有一个 free space 😂

用左右方向键把下面一排按钮上的光标移动到 New 上,然后按 Enter。

(这里看不出光标😂,黑色背景下光标应该是白的吧😂😂)

接下来会问几个问题(# 开头的是咱加上的注释😂):

# 数字可能和汝看到的不一样😂
# 起始扇区的位置,直接 Enter 就行
First sector (749424640-972906511, default = 749424640):
# 大小,可以是扇区数,也可以是实际的大小(例如 100M,20G一类的),要用掉整个剩余空闲空间的话,直接 Enter 就行。
Size in sectors or {KMGTP} (default = 223481872):
# 分区类型,默认的就好
# 但是如果要建立新的 EFI 系统分区的话 ,分区类型是 :code:`ef00`
# 但是如果要建立新的 交换空间(就是虚拟内存啦)的话 ,分区类型是 :code:`8200`
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
# 设置卷标,不设置也行。
Current partition name is ''
Enter new partition name, or <Enter> to use the current name:

然后汝应该会发现下面的空闲空间变成 Linux filesystem 了呗~

要保存分区表的话,用左右方向键把下面一排按钮上的光标移动到 Write 上,然后按 Enter。

Are you sure you want to write the partition table to disk? (yes or no):

        Warning!! This may destroy data on your disk!

在这里输入 yes (就是 yes,不是 y Y YES 啥的😂),然后按 Enter。

然后下面会闪过一行 "The operation has completed successfully" ,这时就可以退出了。

用左右方向键把下面一排按钮上的光标移动到 Quit 上,然后按 Enter。

cfdisk

如果汝在用 cfdisk 的话汝可能会看到这样的提示:

                        ┌ Select label type ───┐
                        │ gpt                  │
                        │ dos                  │
                        │ sgi                  │
                        │ sun                  │


        Device does not contain a recognized partition table.
Select a type to create a new label or press 'L' to load script file.

这表示 cfgisk 在这块硬盘上找不到可以识别的分区表。如果这是一块新硬盘或者已经清空的硬盘的话 不必担心,选择 dos 继续即可。否则请立即停下来检查一下硬盘(或者汝有这块硬盘的备份的话也可以继续)。

这就是 cfdisk 的主界面啦:

                                                    Disk: /dev/sdc
                                Size: 465.8 GiB, 500107862016 bytes, 976773168 sectors
                                        Label: dos, identifier: 0x178bfb32

    Device            Boot               Start              End          Sectors         Size       Id Type
>>  Free space                            2048        976773167        976771120       465.8G










┌──────────────────────────────────────────────────────────┐
│Filesystem UUID: 3AB8802AB87FE2B5                                                                                   │
│     Filesystem: ntfs                                                                                               │
└──────────────────────────────────────────────────────────┘
                            [   New  ]  [  Quit  ]  [  Help  ]  [  Write ]  [  Dump  ]


                                        Create new partition from free space

也是选择 new 然后输入大小:

Partition size:
# 然后可能会让汝选择是主分区还是扩展分区,按需选择就 OK
[primary]  [extended]

但是如果汝需要调整分区类型的话,选中要改变的分区然后把光标移动到 Type 上按 Enter,选择一个分区类型:

                                                    Disk: /dev/sdc
                                Size: 465.8 GiB, 500107862016 bytes, 976773168 sectors
                                        Label: dos, identifier: 0xe0a3ecf7

    Device           Boot               Start             End        Sectors        Size      Id Type
>>  /dev/sdc1                            2048         1050623        1048576        512M      ef EFI (FAT-12/16/32)
    /dev/sdc2                         1050624       976773167      975722544      465.3G      83 Linux










┌──────────────────────────────────────────────────────────┐
│Partition type: EFI (FAT-12/16/32) (ef)
└──────────────────────────────────────────────────────────┘
            [Bootable]  [ Delete ]  [ Resize ]  [  Quit  ]  [  Type  ]  [  Help  ]  [  Write ]  [  Dump  ]

要保存分区表的话,用左右方向键把下面一排按钮上的光标移动到 Write 上,然后按 Enter。

Are you sure you want to write the partition table to disk? (yes or no):

在这里输入 yes (就是 yes,不是 y Y YES 啥的😂),然后按 Enter。

然后下面会闪过一行 "The operation has completed successfully" ,这时就可以退出了。

用左右方向键把下面一排按钮上的光标移动到 Quit 上,然后按 Enter。


然而汝以为这样就结束了?还没格式化呢 (╯°Д°)╯︵/(.□ . )

创建文件系统+挂载

所以挂载是啥玩意?

GNU/Linux 不是用 Windows 那样的盘符来分区的啦,GNU/Linux 继承了 Unix 的整个目录结构 从根目录 / 开始。然后下面是各种子目录。

大多数的 GNU/Linux 发行版都遵循一个叫做“文件系统层次结构标准”(Filesystem Hierarchy Standard, 有时也简称作 FHS)的标准,汝可以 ls / 一下看看会不会发现一些例如 /bin /home /usr 一类的目录? 这就是拜这个标准所赐 😂

在 Windows 里,汝大概会把不同的文件放在不同的盘符下的硬盘分区里。 在 GNU/Linux 中,咱们通常就是把不同的分区 挂载到整个目录结构中的一处。向挂载好的目录写入的文件就会保存在被挂载的磁盘分区上。

首先还是用 lsblk 确定一下分区的名称,为了以防万一记得加上 -f 参数:

root@archiso ~ # lsblk -f
NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1 vfat               3C44-B4ED
├─sda2
├─sda3 ntfs               42E243C5E243BBC3
├─sda4 ntfs   新加卷      58741F29741F0A00
└─sda5
sdb
└─sdb1 vfat   ARCH_201610 EAC8-F012                            /run/archiso/bootmnt
sr0
loop0  squashfs                                                  /run/archiso/sfs/airootfs

第一排分别表示设备名称,文件系统类型,卷标,UUID和挂载点。

咱这里的话 sda1 那个 vfat 分区就是 EFI 系统分区啦,sda5 就是刚刚新建的分区啦~(因为还没格式化所以没有文件系统😂)

mkfs.ext4 把那个分区格式化成 ext4 文件系统咯~

mkfs 可以格式化成某一个汝指定的文件系统(就像刚才那样 mkfs.ext4 可以格式化出一个 ext4 文件系统)

ext 家族大概是 GNU/Linux 最古老,应用的最广泛的文件系统了吧……

当然可以用的文件系统有很多啦,如果汝想再了解一些的话,可以去 ArchWiki 看一看:

https://wiki.archlinux.org/index.php/File_systems

记得自己看清楚是哪个分区别格式化错了 😂

root@archiso ~ # mkfs.ext4 /dev/sda5
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 27935234 4k blocks and 6987776 inodes
Filesystem UUID: a3943e57-6217-4a5f-8e57-ade5771315c0
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

root@archiso ~ #

等一排文字闪过就格式化完了……

如果要格式化新的 EFI 系统分区的话,用 mkfs.vfat

如果要格式化新的 交换空间的话,用 mkswap

接下来用 mount 挂载分区啦~ (。>ω<)。

# mount <设备名称> <目标文件夹>
# /mnt 挺合适的
root@archiso ~ # mount /dev/sda5 /mnt
# 如果要挂载 EFI 系统分区的话,建议挂载到 /mnt/boot
# 所以先建立相应的文件夹
root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/sda1 /mnt/boot
# 有交换空间的话不用挂载,用 swapon 命令。
root@archiso ~ # swapon /dev/sda6

选择软件仓库镜像

软件仓库(在Debian系发行版中,又叫做“软件源”)是软件包存储的地方。通常我们所说的软件仓库指在线软件仓库,亦即用户从互联网获取软件的地方。

以及新的 ArchISO 中内置了通过测速和筛选镜像服务器位置来选择镜像的 Reflector, 使用方法在这里。

用 nano 打开 /​etc/​pacman.d/​mirrorlist

root@archiso ~ # nano /etc/pacman.d/mirrorlist


GNU nano 2.7.0                        File: /etc/pacman.d/mirrorlist

##
## Arch Linux repository mirrorlist
## Sorted by mirror score from mirror status page
## Generated on 2016-10-01
##

## Score: 0.2, France
Server = http://archlinux.polymorf.fr/$repo/os/$arch
## Score: 0.3, France
Server = http://arch.tamcore.eu/$repo/os/$arch
## Score: 0.3, Germany
Server = http://mirrors.cicku.me/archlinux/$repo/os/$arch
## Score: 0.3, Czech Republic
Server = http://ftp.sh.cvut.cz/arch/$repo/os/$arch
## Score: 0.3, Germany
Server = http://mirror.js-webcoding.de/pub/archlinux/$repo/os/$arch
## Score: 0.4, Netherlands
Server = http://ftp.nluug.nl/os/Linux/distr/archlinux/$repo/os/$arch
## Score: 0.4, Poland
                                        [ Read 517 lines ]
^G Get Help    ^O Write Out   ^W Where Is    ^K Cut Text    ^J Justify     ^C Cur Pos     ^Y Prev Page
^X Exit        ^R Read File   ^\ Replace     ^U Uncut Text  ^T To Spell    ^_ Go To Line  ^V Next Page

这是 GNU nano 的主界面,最简单的方法还是把下面那些 Mirrors 先全删掉然后输入一个新的, 用光标指向某一行以后同时按下 Ctrl+K 就好。然后自己输入一个 Mirror ,下面给出几个中国国内的 Mirror:

(所谓的 Ctrl+K 就是这两个键一起按😂)

# 网易
Server = http://mirrors.163.com/archlinux/$repo/os/$arch
# 清华大学 TUNA 协会
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
# 中国科学技术大学
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
# 西安交通大学
Server = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch

输入完以后按下 Ctrl+O 写入,按 Enter 确定,再按 Ctrl+X 退出。

然后用 pacman -Syy 刷新一下软件包数据库。

root@archiso ~ # pacman -Syy
:: Synchronizing package databases...
core                                  120.9 KiB  4.92M/s 00:00 [##################################] 100%
extra                                1755.6 KiB  5.24M/s 00:00 [##################################] 100%
community                               3.7 MiB  6.82M/s 00:01 [##################################] 100%
root@archiso ~ #

安装基本系统

用 pacstrap 安装基本系统:

  • 默认会安装 base 元包(包含基本系统所需的依赖)。

    如果汝在别的地方见到说 base 是个软件包组的说法,忘了它吧……

  • 然后大多数情况下,汝还需要一个内核。目前官方仓库里有这些:

    对于大多数情况下,汝可能会考虑安装固件包 linux-firmware 。

  • 以及一个文字编辑器,例如刚才用到的 nano

    诶,base 组不包含 live 环境中所有的软件包么?是的, https://projects.archlinux.org/archiso.git/tree/configs/releng/packages.x86_64 列出了在 ISO 中的 live 环境中安装的但不在 base 包中的软件包。

  • 以及一些文件系统工具,如果汝和咱这里一样用了 ext4 的话,安装 e2fsprogs 就好, 需要读写其它文件系统的话,可以在 https://wiki.archlinux.org/index.php/File_system 找到相应的用户空间工具。

  • 要通过 AUR 或者 ABS 编译安装软件包,还需要安装 base-devel 啦 (现在它还是个软件包组)。

  • 要通过刚刚用过的 iwctl 连接无线网络的话,记得安装 iwd 。

于是一个栗子大概像这样

root@archiso ~ # pacstrap /mnt base base-devel linux linux-firmware nano e2fsprogs iwd

其他软件以后会用 pacman 再安装啦~

安装完以后大概会是这个样子 (´・ω・`)

pacstrap /mnt base linux    29.09s user 2.61s system 85% cpu 37.271 total

准备进入 chroot 环境

生成 fstab 啦 ~

所以 fstab 又是个啥玩意?

fstab(5)文件可用于定义磁盘分区,各种其他块设备或远程文件系统应如何装入文件系统。

每个文件系统在一个单独的行中描述。这些定义将在引导时动态地转换为系统挂载单元,并在系统管理器的配置重新加载时转换。 在启动需要挂载的服务之前,默认设置会自动fsck和挂载文件系统。例如,systemd会自动确保远程文件系统挂载 (如NFS或Samba)仅在网络设置完成后启动。因此,在/etc/fstab中指定的本地和远程文件系统挂载应该是开箱即用的。

emmmmm

# genfstab
usage: genfstab [options] root

Options:
    -L             Use labels for source identifiers (shortcut for -t LABEL)
    -p             Exclude pseudofs mounts (default behavior)
    -P             Include printing mounts
    -t TAG         Use TAG for source identifiers
    -U             Use UUIDs for source identifiers (shortcut for -t UUID)

    -h             Print this help message

genfstab generates output suitable for addition to an fstab file based on the
devices mounted under the mountpoint specified by the given root.
root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab

然后用 arch-chroot 向新系统出发~

因为还有些配置没完成嘛……
root@archiso ~ # arch-chroot -help
usage: arch-chroot chroot-dir [command]

    -h                  Print this help message
    -u <user>[:group]   Specify non-root user and optional group to use

If 'command' is unspecified, arch-chroot will launch /bin/bash.
root@archiso ~ # arch-chroot /mnt /bin/bash
[root@archiso /] #

设置基本系统

# 开头只表示以 root 用户运行,汝不用把 # 输入到终端里啦~
  • 设置时区(中国的时区是 Asia/Shanghai)
# ln -s <源文件> <目标> 创建一个符号链接

# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 设置时间标准 为 UTC,并调整 时间漂移:
# hwclock --systohc --utc

如果汝正在尝试安装双系统,在进入 Windows 以后可能会发现 Windows 的时间不对了 ,因为 Windows 默认的硬件时钟是 localtime(

可以用一条注册表键值让 Windows 使用 UTC 作为硬件时钟(在早于 Windows 7 的系统上发现过这样做会出现一些严重的问题: http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html

reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetControlTimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
  • /etc/locale.gen 是一个仅包含注释文档的文本文件。指定您需要的本地化类型,去掉对应行前面的注释符号(#)就可以啦,还是用 nano 打开,建议选择帶UTF-8的項:
# nano /etc/locale.gen

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8
  • 执行 locale-gen 以生成 locale 讯息:
# locale-gen
  • 创建 locale.conf 并提交您的本地化选项:

    将系统 locale 设置为en_US.UTF-8,系统的 Log 就会用英文显示,这样更容易问题的判断和处理。用户可以设置自己的 locale。

    警告: 不推荐在此设置任何中文locale,或导致tty乱码。

# echo 用来输出某些文字,后面的大于号表示把输出保存到某个文件里啦~

# 或者可以用文字编辑器新建这个文件加上这一行。

# echo LANG=en_US.UTF-8 > /etc/locale.conf
  • 设置一个喜欢的主机名(用汝的主机名代替 myhostname ):
# echo myhostname > /etc/hostname
  • 设置 root 的密码(输入密码的时候就是啥也没有 ╮( ̄▽ ̄)╭ ):
[root@archiso /]# passwd
New password:
Retype new password:
passwd: password updated successfully

以及汝大多数时候应该是用不到这个密码的(

  • 安装启动加载器(例如 GRUB ):

    启动加载器是 BIOS 或 UEFI 启动的第一个程序。它负责使用正确的内核参数加载内核, 并根据配置文件加载初始化 RAM disk。

    如果对其它的启动管理器有兴趣的话,记得去看 https://wiki.archlinux.org/index.php/Arch_boot_process#Boot_loader

** UEFI 用户先再安装几个必要的软件包咯, efibootmgr 用于修改 UEFI 固件中的某些信息,

dosfstools 包含了操作 FAT/FAT32 文件系统所需的用户空间工具。

# pacman -S efibootmgr dosfstools

** 然后安装 GRUB (如果汝的硬盘上没有其它系统,那么可以不用装 os-prober )

# pacman -S grub os-prober

** 把 GRUB 安装到硬盘:

# MBR 用户这么做 (记得用汝自己硬盘的名称代替 sda ,不要带上表示分区的数字啦~):

# grub-install --target=i386-pc /dev/sda --recheck

# UEFI 用户这么做(如果汝没把 EFI 系统分区挂载到 /boot ,请自行修改 --efi-directory 的值):

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck

EFI 安装成功以后大概像这样 😂

[root@archiso /]# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
Installing for x86_64-efi platform.
Installation finished. No error reported.

然后生成必要的配置文件:

[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image(s) in /boot: initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
done

如果汝安装了 os-prober 然后看到这样的警告:

WARNING: Failed to connect to lvmetad. Falling back to device scanning.

这是因为在 chroot 环境里面 /run 是不可用的。只要每个步骤都做对了,这些警告不会影响系统启动, 汝可以放心继续进行下一步的系统安装咯。 如果汝重启之后没看到 Windows 的启动项,试着进入 Arch 之后再运行那条生成配置文件的命令。

因为 GRUB 是一个操作系统,它的配置和使用可能会非常复杂,可以在 https://wiki.archlinux.org/index.php/GRUB 上找到一些提示和疑难排解技巧。

设置 sudo

所以这又是个啥玩意? (´_`)

因为 root 用户的权力很大而且很危险,所以轻易不会用到它 (。>ω<)。

所以就有了 sudo(substitute user do) 使得系统管理员可以授权特定用户或用户组作为 root 或其他用户执行某些(或所有)命令,同时还能够对命令及其参数提供审核跟踪。

(话风突变)

sudo 应该已经作为 base-devel 的一部分装上去了,如果没有的话汝也可以自己手动安装一下:

[root@archiso /]# pacman -S sudo

sudo 的配置文件是 /etc/sudoers ,但是咱们不会直接去编辑它(因为一旦搞坏了不好修)。 所以有一个 visudo 的命令用来代理编辑它(就是先编辑一个临时文件,然后检查有没有错误, 一切 OK 后再覆盖)。

嗯…… visudo? 如果汝觉得 vi 哪里眼熟的话,没错! 这个命令默认会用 vi 去编辑那个文件。 如果汝想用其他的编辑器(例如刚刚用的 nano)的话,可以通过一个环境变量:

[root@archiso /]# EDITOR=nano visudo

现在大概像这个样子:

GNU nano 3.2                                        /etc/sudoers.tmp

## sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##

##
## Host alias specification
##
## Groups of machines. These may include host names (optionally with wildcards),
## IP addresses, network numbers or netgroups.
# Host_Alias    WEBSERVERS = www1, www2, www3

##
## User alias specification
##
                                                [ Read 97 lines ]
^G Get Help    ^O Write Out   ^W Where Is    ^K Cut Text    ^J Justify     ^C Cur Pos     M-U Undo       M-A Mark Text
^X Exit        ^R Read File   ^\ Replace     ^U Uncut Text  ^T To Spell    ^_ Go To Line  M-E Redo       M-6 Copy Text

虽然这个文件有很多行,但是咱们还是先从让它能够工作开始来最小的修改它。

找到下面的这一行,然后把 %wheel 前面的注释符号(#)去掉,不过百分号要留下:

## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL

然后就可以保存退出啦~ (效果就是注释里说明的,给 wheel 组执行所有命令的权限)

如果汝不想每一次都在前面加上 EDITOR 来指定编辑器的话,可以加上这几行:

# 重设默认的环境变量
Defaults      env_reset
# 设置默认的编辑器,并使 visudo 不再读取环境变量 editor 的值。
Defaults      editor=/usr/bin/nano, !env_editor

如果汝想进一步了解 sudo 的配置的话,还是去看 ArchWiki: https://wiki.archlinux.org/index.php/Sudo

安装桌面环境

  • 安装桌面环境需要的基础包 (就是 xorg 啦)
[root@archiso /]# pacman -S xorg
:: There are 80 members in group xorg:
:: Repository extra
1) xf86-input-evdev  2) xf86-input-joystick  3) xf86-input-keyboard  4) xf86-input-libinput
5) xf86-input-mouse  6) xf86-input-synaptics  7) xf86-input-vmmouse  8) xf86-input-void
9) xf86-video-amdgpu  10) xf86-video-ark  11) xf86-video-ati  12) xf86-video-dummy
13) xf86-video-fbdev  14) xf86-video-glint  15) xf86-video-i128  16) xf86-video-intel
17) xf86-video-mach64  18) xf86-video-neomagic  19) xf86-video-nouveau  20) xf86-video-nv
21) xf86-video-openchrome  22) xf86-video-r128  23) xf86-video-savage  24) xf86-video-siliconmotion
25) xf86-video-sis  26) xf86-video-tdfx  27) xf86-video-trident  28) xf86-video-vesa
29) xf86-video-vmware  30) xf86-video-voodoo  31) xorg-bdftopcf  32) xorg-docs  33) xorg-font-util
34) xorg-fonts-100dpi  35) xorg-fonts-75dpi  36) xorg-fonts-encodings  37) xorg-iceauth
38) xorg-luit  39) xorg-mkfontdir  40) xorg-mkfontscale  41) xorg-server  42) xorg-server-common
43) xorg-server-devel  44) xorg-server-xdmx  45) xorg-server-xephyr  46) xorg-server-xnest
47) xorg-server-xvfb  48) xorg-server-xwayland  49) xorg-sessreg  50) xorg-setxkbmap
51) xorg-smproxy  52) xorg-x11perf  53) xorg-xauth  54) xorg-xbacklight  55) xorg-xcmsdb
56) xorg-xcursorgen  57) xorg-xdpyinfo  58) xorg-xdriinfo  59) xorg-xev  60) xorg-xgamma
61) xorg-xhost  62) xorg-xinput  63) xorg-xkbcomp  64) xorg-xkbevd  65) xorg-xkbutils  66) xorg-xkill
67) xorg-xlsatoms  68) xorg-xlsclients  69) xorg-xmodmap  70) xorg-xpr  71) xorg-xprop
72) xorg-xrandr  73) xorg-xrdb  74) xorg-xrefresh  75) xorg-xset  76) xorg-xsetroot  77) xorg-xvinfo
78) xorg-xwd  79) xorg-xwininfo  80) xorg-xwud

Enter a selection (default=all):

这时会让汝选择需要哪些软件包啦,其实大多数时候默认的就行……

  • 接下来挑一个喜欢的桌面环境包组装上咯~

    (咱这里就只举例 GNOME 、KDE 和 xfce 啦,其他官方支持的桌面环境可以去 https://wiki.archlinux.org/index.php/Desktop_environment_(简体中文) 查看)

    GNOME , 想要 GNOME 全家桶的话带上 gnome-extras

    # pacman -S gnome

    KDE Plasma , 想要 KDE 全家桶的话用 kde-applications-meta 代替 。 kde-applications 会提示汝选择要安装哪些包。

    以及一个显示管理器, KDE 和 sddm 一起使用最好。

    # pacman -S plasma sddm kde-applications

    或者只安装 kdebase 组,包含了一些基本组件(例如文件管理器和终端模拟器)。

    # pacman -S plasma sddm kdebase

    xfce4,xfce 不带显示管理器,所以要装个其他的(例如 lightdm,还要装一个 greeter)

    # pacman -S xfce4 xfce4-goodies lightdm lightdm-gtk-greeter

    桌面环境大多数使用 NetworkManager ,xfce 的话,记得安装 network-manager-applet, 一个控制 NetworkManager 的小工具:

    # pacman -S networkmanager

  • 然后安装中文字体( 同样的方法安装 😋)

    Google Noto Fonts 系列: noto-fonts noto-fonts-cjk noto-fonts-emoji

    思源黑体:adobe-source-han-sans-otc-fonts

    文泉驿:wqy-microhei wqy-zenhei

更多的字体可以在 https://wiki.archlinux.org/index.php/Fonts_(简体中文) 找到。

收尾工作

  • 新建一个用户

    -m 为新用户创建一个目录,-s 设置用户的登录 Shell -G 会把新建的用户追加到某个组中 (这里是刚刚 sudo 里的那个 wheel)

    记得最后是用户名就好 😂

    # useradd -m -G wheel horo

    然后设置密码(记得是输入两次,而且输入过程中不会有显示,不要以为是键盘坏了哦)

    # passwd horo

  • 激活需要的服务,例如一个显示管理器,在例如 gdm :

    # systemctl enable gdm

    当然还有 NetworkManager:

    # systemctl enable NetworkManager

    (这个里面有大写😂)

    systemd 是 Arch Linux 现在唯一的 init 程序,当内核加载完毕后,首先被加载的 就是 init (这里就是 systemd 啦)。然后 systemd 会接着加载剩下的部分。

    https://wiki.archlinux.org/index.php/systemd

  • 设置用户级别的 locale

    用 su 切换到刚建立的用户,然后编辑 ~/.config/locale.conf 修改自己的 Locale ,例如:

LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

或者可以重启以后用桌面环境的设置程序改 😂

完工啦

  • 离开 chroot 环境:

    # exit

  • 卸载挂载的分区,(其实不是必须的,因为马上就重启啦~)

    # umount -R /mnt

  • 重新启动,准备迎接新的系统吧 ~(>_<~)


欢迎来到 Arch Linux 的世界!

Cheers! 汝刚刚成功的安装 Arch Linux 到汝的电脑中了呐!

那接下来要干啥呢?


keyboard_arrow_left 上一篇文章: 和雨宫恋叶交换问题! keyboard_arrow_right 下一篇文章: Arch Linux 的衍生发行版们

想要表达对咱的支持的话,汝可以:

需要 JavaScript 支持来使用 Isso 😂