Arch Linux
Arch Linux 是一种通用操作系统,它是基于 x86-64 架构的一类 GNU/Linux 发行版,采用滚动升级模式。滚动升级模式决定了它不适合作为服务器,但当作个人主机还是挺不错的。

Arch Linux 得核心特点是简洁与以用户为中心,初始安装完成的 Arch Linux 只是一个基本系统,随后用户可以根据自己的喜好安装需要的软件并配置成符合自己理想的个性化系统。

安装前准备

  1. 中科大镜像站下载 Arch Linux:推荐最新日期的iso版本
  2. 制作 UEFI 引导启动盘或者准备 VMware 虚拟机:对制作启动盘、盘启动和VMware虚拟机操作不了解的,可以搜索引擎了解
  3. 最好有同一局域网下的主机:可以在该主机上使用远程工具连接 Arch Linux 主机,方便复制、粘贴

物理主机禁用 Secure Boot 功能

Secure Boot
secure boot 是指确保在一个平台上运行的程序的完整性的过程或机制。secure boot会在固件和应用程序之间建立一种信任关系。在启用secure boot功能后,未经签名的固件或程序将不能运行在该设备上。secure boot一般使用公钥/私钥来验证固件和应用程序的签名是否合法。通过这种方式,可以保护操作系统免受恶意攻击。
  1. 开机时频繁按 F12delete
  2. 找到「安全启动选项」或「Secure Boot」选项
  3. 将选项设置为「关闭」或「Disabled」
  4. 点击「保存并退出」或「Save & Exit」->「OK」

VMware虚拟机设置固件类型为 UEFI

UEFI
UEFI,全称 Unified Extensible Firmware Interface,即统一的可扩展固件接口,是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替 BIOS(基本输入/输出系统)。此标准由 UEFI 联盟中的140多个技术公司共同创建,其中包括微软公司。 UEFI 旨在提高软件互操作性和解决 BIOS 的局限性。

其主要作用包括初始化和配置硬件、提供高级用户界面、引导加载程序支持、增强的安全特性、提高性能、网络功能、驱动程序和服务支持、兼容性和扩展性和模块化。
  1. 点击编辑虚拟机设置
  2. 点击选项
  3. 点击高级
  4. 固件类型选择UEFI
  5. 点击确定

确定是否为 UEFI 模式

root@archiso ~ # ls /sys/firmware/efi/efivars
AuditMode-8be4df61-93ca-11d2-aa0d-00e098032b8c          KEKDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c                         OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c           KEK-8be4df61-93ca-11d2-aa0d-00e098032b8c                                PKDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c           LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c                          PK-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c           Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c                               PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c           LoaderEntries-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f                      PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c
BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c        LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f                SbConfigState-793d9786-44dc-4709-b57f-85b8e8fdbfd2
BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c  LoaderFeatures-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f                     SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c
BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c          LoaderFirmwareInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f                 SetupMode-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c           LoaderFirmwareType-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f                 ShimRetainProtocol-605dab50-e046-4300-abb6-3dd810dd8b23
ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c              LoaderImageIdentifier-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f              SignatureSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c          LoaderInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f                         dbDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c             MTC-eb704011-1402-11d3-8e77-00a0c969723b                                dbxDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConsoleOutMode-793d9786-44dc-4709-b57f-85b8e8fdbfd2     MemoryOverwriteRequestControlLock-bb983ccf-151d-40e1-a07b-4a17be168292  dbx-d719b2cb-3d3a-4596-a3bc-dad00e67656f
DeployedMode-8be4df61-93ca-11d2-aa0d-00e098032b8c       MemoryOverwriteRequestControl-e20939be-32d4-41be-a150-897f85d49829      db-d719b2cb-3d3a-4596-a3bc-dad00e67656f
ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c             MemoryTypeInformation-4c19049f-4137-4dd3-9c10-8b97a83ffdfa
root@archiso ~ #

出现以上画面,可以确定为 UEFI 模式。否则需要检查一下启动盘或虚拟机设置。

测试网络连通性并更新系统时钟

如果物理主机只能连接 wifi

命令说明
  • iwctl:进入交互式命令行
  • device list:列出无线网卡设备名,比如无线网卡看到叫 wlan0
  • station wlan0 get-networks:列出所有 wifi 网络
  • station wlan0 connect wifi-name:进行连接,回车后输入密码
  • exit:连接成功后退出
root@archiso ~ # iwctl
NetworkConfigurationEnabled: disabled
StateDirectory: /var/lib/iwd
Version: 3.2
[iwd]# device list
                         Devices
------------------------------------------------------------
  Name        Address        Powered     Adapter     Mode
------------------------------------------------------------
  wlan0       ************   on          phy0        station

[iwd]# station wlan0 get-networks
                     Availablenetworks
------------------------------------------------------------
  Network name                   Security     Signal
  HUAWEI-A2BF                    psk          **
  JZY                            psk          **
  TP-Link_8DAB                   psk          *
  
[iwd]# station wlan0 connect JZY
Type the network passphrase for JZY psk.
Passphrase:**********
[iwd]# exit

[iwd]#
root@archiso ~ #

如果插上一个已经联网的路由器分出的网线(DHCP),直接就能联网。 若是 VMware ,网络选择桥接网络,就代表是有线连接。

测试网络连通性并更新系统时钟

root@archiso ~ # ping www.baidu.com
PING www.wshifen.com (103.235.46.96) 56(84) bytes of data.
64 bytes from 103.235.46.96: icmp_seq=1 ttl=49 time=36.7 ms
64 bytes from 103.235.46.96: icmp_seq=2 ttl=49 time=36.7 ms
64 bytes from 103.235.46.96: icmp_seq=3 ttl=49 time=36.5 ms
64 bytes from 103.235.46.96: icmp_seq=4 ttl=49 time=36.1 ms
64 bytes from 103.235.46.96: icmp_seq=5 ttl=49 time=36.6 ms

--- www.wshifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 36.080/36.490/36.662/0.215 ms
root@archiso ~ # timedatectl set-ntp true
root@archiso ~ # timedatectl status
               Local time: Tue 2024-12-17 10:05:19 UTC
           Universal time: Tue 2024-12-17 10:05:19 UTC
                 RTC time: Tue 2024-12-17 10:05:19
                Time zone: UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
root@archiso ~ #

远程连接进行安装

设置 root 密码

root@archiso ~ # passwd root
New password:
Retype new password:
passwd: password updated successfully
root@archiso ~ #

查看 ip 地址

root@archiso ~ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:80:0f:de brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.9.52/24 metric 100 brd 192.168.9.255 scope global dynamic ens33
       valid_lft 85370sec preferred_lft 85370sec
    inet6 fe80::20c:29ff:fe80:fde/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
root@archiso ~ #

「192.168.9.52」就是本主机的IP地址,远程工具使用「ssh root@192.168.9.52」连接,连接成功后输入密码即可。

建议使用远程工具连接进行安装便于复制、粘贴。如果没有条件,就手打吧。

更新国内软件仓库镜像源

禁用 reflector 服务

为什么禁用 reflector 服务?
2020 年,archlinux 安装镜像中加入了 reflector 服务,它会自己更新 mirrorlist(软件包管理器 pacman 的软件源),但不是国内的软件源。因为墙的原因,这项服务并不适合启用。
root@archiso ~ # systemctl stop reflector.service
root@archiso ~ # systemctl status reflector.service
○ reflector.service - Refresh Pacman mirrorlist with Reflector.
     Loaded: loaded (/usr/lib/systemd/system/reflector.service; enabled; preset: disabled)
    Drop-In: /etc/systemd/system/reflector.service.d
             └─archiso.conf
     Active: inactive (dead) since Tue 2024-12-17 07:53:18 UTC; 43min ago
 Invocation: 2594c6a368fb4b9fb2cbb2127a8a1bbc
       Docs: https://wiki.archlinux.org/index.php/Reflector
    Process: 1053 ExecStart=/usr/bin/reflector @/etc/xdg/reflector/reflector.conf (code=exited, status=0/SUCCESS)
   Main PID: 1053 (code=exited, status=0/SUCCESS)
   Mem peak: 43.8M
        CPU: 2.406s

Dec 17 07:51:56 archiso reflector[1053]: [2024-12-17 07:51:56] WARNING: failed to rate http(s) download (https://arch.phinau.de/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:52:20 archiso reflector[1053]: [2024-12-17 07:52:20] WARNING: failed to rate http(s) download (https://asia.mirror.pkgbuild.com/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:52:33 archiso reflector[1053]: [2024-12-17 07:52:33] WARNING: failed to rate http(s) download (https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:52:45 archiso reflector[1053]: [2024-12-17 07:52:45] WARNING: failed to rate http(s) download (https://al.arch.niranjan.co/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:52:55 archiso reflector[1053]: [2024-12-17 07:52:55] WARNING: failed to rate http(s) download (https://de.arch.niranjan.co/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:53:01 archiso reflector[1053]: [2024-12-17 07:53:01] WARNING: failed to rate http(s) download (https://in.arch.niranjan.co/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:53:15 archiso reflector[1053]: [2024-12-17 07:53:15] WARNING: failed to rate http(s) download (https://mirror.ufscar.br/archlinux/extra/os/x86_64/extra.db): Download timed out after 5 second(s).
Dec 17 07:53:18 archiso systemd[1]: reflector.service: Deactivated successfully.
Dec 17 07:53:18 archiso systemd[1]: Finished Refresh Pacman mirrorlist with Reflector..
Dec 17 07:53:18 archiso systemd[1]: reflector.service: Consumed 2.406s CPU time, 43.8M memory peak.
root@archiso ~ #
命令说明
  • systemctl stop reflector.service:禁用 reflector 服务
  • systemctl status reflector.service:查看 reflector 服务的状态,(preset: disabled) 代表已停用

编辑配置文件,更新为国内软件仓库镜像源

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

修改为下方后,保存

vim 说明
vim /etc/pacman.d/mirrorlist 后,按 i 进入编辑模式。
然后粘贴内容至文件内,按 esc 退出编辑模式。
最后 shift+: 进入命令行模式,输入 wq 并回车(保存并退出)。
################################################################################
################# Arch Linux mirrorlist generated by Reflector #################
################################################################################

# with:       reflector @/etc/xdg/reflector/reflector.conf
# when:       2024-12-17 07:53:18 UTC
# From:       https://archlinux.org/mirrors/status/json/
# Retrieved:  2024-12-17 07:51:28UTC
# Last Check: 2024-12-17 07:45:30 UTC

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch 
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch 
Server = https://repo.huaweicloud.com/archlinux/$repo/os/$arch 
Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch 

创建分区

分区
一块新的硬盘就像刚打好地基的房子,在你开始往里放东西之前,需要先构造好框架和墙壁。分区就是第一层地基,划出分区就是决定划出几个房间。你可以为每个房间(分区)指定用途,卧室、书房或是健身房。

创建完一个分区后就可以选择一种文件系统来进行格式化,文件系统定下之后,就可以放入文件和文件夹等形式的数据了。

观察磁盘情况

root@archiso ~ # lsblk
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0   7:0    0 813.4M  1 loop /run/archiso/airootfs
sda     8:0    0   100G  0 disk
  sda1  8:1    0   20G   0 part
  sda2  8:2    0   40G   0 part
  sda3  8:3    0   40G   0 part
sr0     11:0   1   1.1G  0 rom  /run/archiso/bootmnt

sda1、sda2、sda3 就是 sda 盘的分区(名称不一定是sda),有分区说明该磁盘已被分区,就要考虑是否删除分区进而重新分区(请提前做好数据备份,防止数据丢失!)

如果要删除分区,可以这样做

  1. 首先进入操作界面
root@archiso ~ # cfdisk /dev/sda
  1. 选中分区并删除

  1. 删除所有分区后,写入操作结果并确认

  1. 最后退出操作界面

再检查下磁盘情况

root@archiso ~ # lsblk
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0   7:0    0 813.4M  1 loop /run/archiso/airootfs
sda     8:0    0   100G  0 disk
sr0    11:0    1   1.1G  0 rom  /run/archiso/bootmnt
root@archiso ~ #

sda 盘没有其他分区。

创建「EFI」系统分区

EFI 系统分区
EFI 系统分区(也称为ESP)是一个FAT32格式的物理分区,UEFI 固件从 ESP 分区加载 UEFI 启动程序或者应用。它是一个操作系统独立的分区,是 UEFI 加载的固件和应用程序的存储空间。UEFI 规范要求 ESP 分区必须存在,这是强制性的。
  1. 进入操作界面
root@archiso ~ # cfdisk /dev/sda
  1. 创建新的分区

  1. 分配 500M 给 EFI 系统分区

  1. 更改类型为 EFI System 或者 EFI (FAT-12/16/32)

创建「Swap」分区

Swap 分区

Linux 的交换分区(swap),或者叫内存置换空间(swap space),是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。

交换分区的作用是,当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,也就是常说的 swap out 和 swap in 。

使用 swap 必须要知道它存在的缺点,以便判断何时使用交换分区。使用交换分区的好处当然就是可以一定程度的缓解内存空间紧张的问题。然而,由于 CPU 所读取的数据都来自于内存,交换分区则是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写 swap ,那么对系统的性能肯定有影响,尤其是当系统内存很吃紧的时候,读写 swap 空间发生的频率会很高,导致系统运行很慢。

如果使用是桌面系统,由于系统会自动将不常用的内存数据移到 swap 上,对桌面程序来说,有可能会导致最小化一个程序后,再打开时小卡一下,因为需要将 swap 上的数据重新加载到内存中来。在部署了数据库的系统上,也不建议用交换分区,因为频繁地在内存和磁盘上相互导数据会影响数据库性能。

交换分区大小的设置建议值:

  • 内存小于 4GB 时,推荐不少于 2GB 的 swap 空间
  • 内存 4GB~16GB,推荐不少于 4GB 的 swap 空间
  • 内存 16GB~64GB,推荐不少于 8GB 的 swap 空间
  • 内存 64GB~256GB,推荐不少于 16GB 的 swap 空间
  1. 创建新的分区

  1. 主机内存是4G,这里也分配4G给「Swap」分区

  1. 更改类型为「Linux swap」

创建 Btrfs 文件系统分区

Btrfs 文件系统
Btrfs 是一种支持写入时复制的文件系统,运行在Linux操作系统,采用GPL授权。
Oracle 于 2007 年对外宣布这项计划,并发布源代码,在 2014年8月 发布稳定版。目标是取代当时在 Linux 上广泛使用的 ext3 文件系统,改善文件系统的限制,增加单个文件大小上限支持,总文件系统大小支持以及文件检查支持。Btrfs 还加入了可写快照、快照的快照、内置磁盘阵列,以及子卷等高级文件系统功能。
  1. 创建新的分区

  1. 为新的分区分配空间,因为使用 Btrfs 文件系统,所以根目录(/)和用户主目录(/home)在一个分区上,默认剩余的全部空间即可。

  1. 默认分区类型为 Linux filesystem 或 Linux 即可,写入操作结果并确认

  1. 最后退出操作界面

检查下磁盘情况

root@archiso ~ # fdisk -l
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7D0AE644-FDA9-459A-B6A1-1566EA1F2AA3

Device       Start       End   Sectors  Size Type
/dev/sda1     2048   1026047   1024000  500M EFI System
/dev/sda2  1026048   9414655   8388608    4G Linux swap
/dev/sda3  9414656 209713151 200298496 95.5G Linux filesystem


Disk /dev/loop0: 813.39 MiB, 852901888 bytes, 1665824 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

sda 盘下已成功创建需要的分区。

格式化新创建分区

格式化 EFI 系统分区

命令说明

当你运行 mkfs.fat -F32 /dev/sda1 时,系统会在 /dev/sda1 分区上创建一个 FAT32 文件系统。

  • mkfs.fat:是 mkfs 工具的一个特定版本,专门用于创建 FAT 文件系统。
  • -F32:选项指定要创建的文件系统类型为 FAT32(FAT 文件系统的一个变种)。
  • /dev/sda1:是你想要格式化的分区。
root@archiso ~ # mkfs.fat -F32 /dev/sda1
mkfs.fat 4.2 (2021-01-31)
root@archiso ~ #

格式化 Swap 分区

命令说明

当你运行 mkswap /dev/sda2 时,系统会将 /dev/sda2 分区初始化为交换分区。

  • mkswap:是 Linux 中用于初始化交换分区或交换文件的命令。它会将指定的分区或文件标记为交换空间,并为其写入必要的元数据。
  • /dev/sda2:是你想要初始化为交换空间的分区。
root@archiso ~ # mkswap /dev/sda2
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=aae4660a-9074-47c8-8250-ed5422f134fb
root@archiso ~ #

格式化 Btrfs 文件系统分区

命令说明

当你运行 mkfs.btrfs -f -L JZY /dev/sda3 时,系统会在 /dev/sda3 分区上创建一个 Btrfs 文件系统,并将其标签设置为 JZY。

  • mkfs.btrfs:是用于创建 Btrfs 文件系统的工具。
  • -f:表示强制创建文件系统,即使目标设备上已经存在其他文件系统。
  • -L JZY:用于为文件系统设置一个标签,这里的标签是 JZY,你可以根据需要自定义标签。
  • /dev/sda3:是你想要格式化的分区。
root@archiso ~ # mkfs.btrfs -f -L JZY /dev/sda3
btrfs-progs v6.11
See https://btrfs.readthedocs.io for more information.

Performing full device TRIM /dev/sda3 (95.51GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:
      - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)

Label:              JZY
UUID:               5310e565-748e-4144-b793-63fa41c85d32
Node size:          16384
Sector size:        4096        (CPU page size: 4096)
Filesystem size:    95.51GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP               1.00GiB
  System:           DUP               8.00MiB
SSD detected:       no
Zoned device:       no
Features:           extref, skinny-metadata, no-holes, free-space-tree
Checksum:           crc32c
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1    95.51GiB  /dev/sda3

分区挂载

分区挂载

每块硬盘都分为若干个分区,每个分区都有自己的文件系统。GNU/Linux 使用唯一的树形结构来管理文件,而每个文件系统都挂载于树形结构的某个位置。

正如 Windows 需要有 C: 驱动器一样,GNU/Linux 必须能够将根文件系统挂载于文件树的根(/)上。当根挂载完成之后,就可以将其它文件系统挂载于树形结构各种挂载点上。根结构下的任何目录都可以作为挂载点,也可以将同一文件系统同时挂载于不同的挂载点上。

挂载点实际上就是linux中的磁盘文件系统的入口目录。

常见的挂载目录说明:

  • /:根目录本身,是所有文件系统的起点。(如果下面挂载点没有单独的分区,它们都将在根目录的分区中)
  • /bin:存放基本命令和可执行文件,如ls、cp等,这些是在单用户模式下也必须可用的基本命令。
  • /boot:存放启动Linux时使用的文件,包括内核和引导加载程序的配置文件。需挂载在「EFI」系统分区。
  • /dev:设备文件所在的位置,表示各种硬件设备,例如硬盘、键盘等。
  • /etc:存放系统配置文件,比如网络配置、服务设置等。
  • /home:用户的主目录所在位置,每个用户通常在这个目录下有一个以用户名命名的子目录。
  • /lib:存放共享库和内核模块,这是运行基本命令和启动系统所需的库文件。
  • /media 和 /mnt:用于挂载外部存储设备,如USB驱动器或CD-ROM。/media通常是自动挂载点,而/mnt是手动挂载点。
  • /opt:用于安装附加的应用软件包。
  • /proc:虚拟文件系统,提供有关进程和其他系统信息的数据,内容是临时的,并且只存在于内存中。
  • /root:超级用户(root用户)的主目录。
  • /run:存放系统运行时数据,类似于之前的/var/run。
  • /sbin:存放系统管理员使用的命令和脚本,比如shutdown、reboot等。
  • /srv:存放服务数据,例如Web服务器的内容
  • /sys:另一个虚拟文件系统,提供对硬件设备属性的访问。
  • /tmp:临时文件存放处,重启后一般会被清空。
  • /usr:存放用户程序和文件,进一步分为/usr/bin、/usr/lib、/usr/share等子目录。
  • /var:存放可变数据文件,如日志文件、数据库、缓存等。

请严格按照下列顺序进行操作

将 /mnt 挂载到 Btrfs 分区

命令说明

当你运行 mount -t btrfs -o compress=zstd /dev/sda3 /mnt 时,系统会将 /dev/sda3 分区挂载到 /mnt 目录,并启用 Zstandard 压缩。

  • mount:是 Linux 中用于挂载文件系统的命令。它将一个存储设备(如分区)或文件系统挂载到指定的目录(挂载点),使得该设备或文件系统中的内容可以被访问。
  • -t btrfs:-t 选项用于指定文件系统的类型。这里指定文件系统类型为 btrfs,表示要挂载的是一个 Btrfs 文件系统。
  • -o compress=zstd:-o 选项用于指定挂载时的额外选项。compress=zstd 是 Btrfs 文件系统的一个挂载选项,表示启用压缩功能,并使用 Zstandard (zstd) 压缩算法。
  • /dev/sda3:是目标分区的设备文件路径。你需要确保 /dev/sda3 是一个已经格式化为 Btrfs 文件系统的分区。
  • /mnt: 是挂载点,即文件系统将被挂载到的目录。/mnt 是一个临时挂载点目录,在系统安装过程中使用。
root@archiso ~ # mount -t btrfs -o compress=zstd /dev/sda3 /mnt
root@archiso ~ #

将 /mnt/boot 挂载到 EFI 系统分区上

root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/sda1 /mnt/boot
root@archiso ~ #

检查挂载情况

root@archiso ~ # df -h
Filesystem      Size  Used Avail Use% Mounted on
dev             885M     0  885M   0% /dev
run             965M  9.2M  955M   1% /run
efivarfs        256K   54K  198K  22% /sys/firmware/efi/efivars
/dev/sr0        1.2G  1.2G     0 100% /run/archiso/bootmnt
cowspace        256M  1.1M  255M   1% /run/archiso/cowspace
/dev/loop0      814M  814M     0 100% /run/archiso/airootfs
airootfs        256M  1.1M  255M   1% /
tmpfs           965M     0  965M   0% /dev/shm
tmpfs           965M     0  965M   0% /tmp
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-udev-load-credentials.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-tmpfiles-setup-dev-early.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-network-generator.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-sysctl.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-sysusers.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-tmpfiles-setup-dev.service
tmpfs           965M  2.7M  962M   1% /etc/pacman.d/gnupg
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-tmpfiles-setup.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-networkd.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-firstboot.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-resolved.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-vconsole-setup.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/getty@tty1.service
tmpfs           193M  8.0K  193M   1% /run/user/0
/dev/sda3        96G  5.8M   94G   1% /mnt
/dev/sda1       499M  4.0K  499M   1% /mnt/boot
root@archiso ~ #

启用 Swap 分区

命令说明

与常规文件系统不同,swap分区不需要像磁盘上的其他分区那样挂载到文件系统的某个挂载点上。相反,它是通过内核直接激活并使用的。

当你运行 swapon /dev/sda2 时,系统会将 /dev/sda2 分区作为交换空间启用。

  • swapon:是 Linux 中用于启用交换分区或交换文件的命令。它会将指定的分区或文件标记为交换空间,并将其添加到系统的交换空间中。
  • /dev/sda2:被指定的分区。你需要确保 /dev/sda2 是一个已经初始化为交换空间的分区(使用 mkswap 命令初始化)。
  • free -h:以人类可读的格式显示内存使用情况。
root@archiso ~ # swapon /dev/sda2
root@archiso ~ # free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       517Mi       2.8Gi        18Mi       802Mi       3.3Gi
Swap:          4.0Gi          0B       4.0Gi
root@archiso ~ #

安装 Arch Linux 系统及其它软件

命令说明

当你运行 pacstrap /mnt base base-devel linux linux-firmware dhcpcd vim reflector btrfs-progs 时,系统会将指定的软件包安装到 /mnt 目录中。 示例安装的软件包有:

  • pacstrap: 是 Arch Linux 安装工具 arch-install-scripts 中的一个命令,专门用于在安装过程中将软件包安装到目标系统的根文件系统。
  • base: 包含 Arch Linux 系统的基本组件,如核心工具、库和系统服务,是安装 Arch Linux 的最小必需包组。
  • base-devel: 包含编译和构建软件所需的工具,如 gcc、make、automake 等。需要从源代码编译软件或使用 AUR(Arch User Repository),则需要安装此包组。
  • linux:是 Linux 内核包。
  • linux-firmware : 包含各种硬件设备所需的固件(如无线网卡、显卡所需固件)。
  • dhcpcd: 一个 DHCP 客户端,用于自动配置网络接口。
  • vim: 一个流行的文本编辑器。
  • reflector: 一个用于优化镜像列表的工具,它可以自动选择最快的镜像服务器,从而加快软件包下载速度。
  • btrfs-progs: 这个包提供了管理和维护 Btrfs 文件系统所需的工具,如果不是 Btrfs 文件系统分区,则不需要。
root@archiso ~ # pacstrap /mnt base base-devel linux linux-firmware dhcpcd vim reflector btrfs-progs
==> Creating install root at /mnt
==> Installing packages to /mnt
:: Synchronizing package databases...
 core                                                                                                             116.3 KiB   368 KiB/s 00:00 [#######################################################################################] 100%
 extra                                                                                                              7.6 MiB  5.38 MiB/s 00:01 [#######################################################################################] 100%
 
.....................................................................................................省略.....................................................................................................................................
==> WARNING: Possibly missing firmware for module: 'aic94xx'
==> WARNING: Possibly missing firmware for module: 'bfa'
==> WARNING: Possibly missing firmware for module: 'qed'
==> WARNING: Possibly missing firmware for module: 'qla1280'
==> WARNING: Possibly missing firmware for module: 'qla2xxx'
==> WARNING: Possibly missing firmware for module: 'wd719x'
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: '/boot/initramfs-linux-fallback.img'
  -> Early uncompressed CPIO image generation successful
==> Initcpio image generation successful
(13/15) Reloading system bus configuration...
  Skipped: Running in chroot.
(14/15) Warn about old perl modules
(15/15) Updating the info directory file...
pacstrap /mnt base base-devel linux linux-firmware dhcpcd vim reflector   29.32s user 34.62s system 26% cpu 4:02.84 total
root@archiso ~ #

生成 Fstab 文件

命令说明

当你运行 genfstab -U /mnt > /mnt/etc/fstab 时,系统会扫描 /mnt 目录下挂载的所有分区,并生成对应的 /etc/fstab 文件。生成的 /etc/fstab 文件将包含所有分区的挂载信息。/etc/fstab 文件定义了系统启动时如何挂载各个分区。

  • genfstab:是 Arch Linux 安装工具 arch-install-scripts 中的一个命令,用于生成文件系统表(/etc/fstab)。
  • -U:表示使用分区的 UUID 来标识分区,相比于设备名称(如 /dev/sda1),UUID 更加稳定,不会因硬件变化而改变。
  • /mnt/ > /mnt/etc/fstab:> 是输出重定向符号,表示将 genfstab 的输出写入 /mnt/etc/fstab 文件。/mnt/etc/fstab 是目标系统的 /etc/fstab 文件路径。
root@archiso ~ # genfstab -U /mnt > /mnt/etc/fstab
root@archiso ~ # cat /mnt/etc/fstab
# /dev/sda3 LABEL=JZY
UUID=5310e565-748e-4144-b793-63fa41c85d32       /               btrfs           rw,relatime,compress=zstd:3,space_cache=v2,subvol=/     0 0

# /dev/sda1
UUID=8107-4627          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro   0 2

# /dev/sda2
UUID=aae4660a-9074-47c8-8250-ed5422f134fb       none            swap            defaults        0 0

root@archiso ~ #

change root 并测试 fstab 文件

命令说明

当你运行 arch-chroot /mnt 时,系统会将根目录切换到 /mnt。切换后,所有命令将在目标系统的根文件系统中执行,而不是当前安装环境。可以 exit 退出 chroot 环境。

  • arch-chroot:是 Arch Linux 安装工具 arch-install-scripts 中的一个命令,用于切换根目录(change root)。它是 chroot 的封装工具,专门用于 Arch Linux 安装过程。
  • mount -a:当你运行 mount -a 时,系统会读取 /etc/fstab 文件,并挂载其中定义的所有文件系统。这里用来测试/etc/fstab 文件是否正确。

为什么需要 arch-chroot?

在 Arch Linux 安装过程中,目标系统的根文件系统通常挂载在 /mnt 目录下。为了在目标系统中执行命令(如安装引导加载程序、设置时区、配置网络等),需要将根目录切换到 /mnt。

root@archiso ~ # arch-chroot /mnt
[root@archiso /]# mount -a

设置主机名、时区与语言信息

设置主机名

hostname 和 hosts 的关系
/etc/hostname 是一个纯文本文件,用于存储系统的主机名。文件内容通常只有一行,即系统的主机名。

/etc/hosts 是一个静态的域名解析文件,用于将主机名映射到 IP 地址。在 /etc/hosts 中,通常需要将主机名映射到 127.0.1.1 或 127.0.0.1,以便系统可以通过主机名访问自己。
  1. 编辑 /etc/hostname 文件
[root@archiso /]# vim /etc/hostname

设置自己喜欢的主机名。

  1. 编辑 /etc/hosts 文件:
[root@archiso /]# vim /etc/hosts

你可以复制下方信息,只需要把 myhostname 改成设置的主机名:

127.0.0.1	localhost
::1		localhost
127.0.1.1	myhostname.localdomain	myhostname

设置时区并将将系统时间同步到硬件时间

命令说明

当你运行 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 时,将系统的时区设置为 Asia/Shanghai(上海时区),具体是通过创建一个符号链接,将 /usr/share/zoneinfo/Asia/Shanghai 链接到 /etc/localtime。

  • ln:用于创建文件链接的命令。
  • -s:表示创建符号链接(软链接)。
  • -f:强制创建链接,如果目标路径已存在文件或链接,则会覆盖它。
  • /usr/share/zoneinfo/Asia/Shanghai:这是源文件,包含了上海时区的信息。
  • /etc/localtime:这是目标路径,系统通过这个文件来确定本地时区。

在 Linux 系统中,系统时间和硬件时钟是独立的。系统时间由操作系统维护,而硬件时钟由主板上的电池供电。如果两者不一致,可能会导致时间混乱。当你运行 hwclock –systohc 时,会将系统时间同步到硬件时钟。

  • hwclock:用于读取或设置硬件时钟的命令。
  • –systohc:将系统时间写入硬件时钟。
[root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@archiso /]# hwclock --systohc

这样主机的时间就会与北京时间(UTC+8)同步了。

如果想要使用其他时区,可以 ls /usr/share/zoneinfo/ 查看对应地区。如果想要查看 Asia 地区的时区,可以 ls /usr/share/zoneinfo/Asia/ 查看对应的时区,选择其中一个通过上述方法设置即可。

中国的时区为什么是Asia/Shanghai,而不是Asia/Bejing ?

1949年以前,中国一共分了5个时区,并为国际所接受:

  • 哈尔滨(Asia/Harbin)·长白时区GMT+8:30
  • 上海(Asia/Shanghai)中原标准时区GMT+8
  • 重庆(Asia/Chongqing)陇蜀时区GMT+7
  • 乌鲁木齐(Asia/Urumqi)新藏时区GMT+6
  • 喀什(Asia/Kashgar )昆仑时区GMT+5:30

它是1912年北京观象台制订,后由内政部批准过。而且从国际标准本身的角度来看,北京和上海处于同一时区,只能保留一个。而作为时区代表上海已经足够具有代表性,所以目前还没有Asia/bejing。

冷知识:北京时间 15 点整,其实距离北京当地时间 15 点整还差 14 分 30 秒。

设置语言选项

locale (区域设置)
locale-gen 是一个用于生成或更新系统 locale 数据的命令,通常在 Linux 系统中使用。它根据 /etc/locale.gen 文件中的配置来编译和启用指定的 locale 设置。这个过程涉及到创建必要的文件和数据表,使得系统能够正确地处理不同的字符集、语言和地区特定的行为(如日期格式、数字格式等)。

/etc/locale.conf 是 Arch Linux 系统中的一个配置文件,用于定义系统的区域设置(locale)。这个文件通常包含环境变量的定义,这些变量决定了系统中字符编码、日期格式、数字和货币格式等本地化行为。
  1. 编辑 /etc/locale.gen
[root@archiso /]# vim /etc/locale.gen

可以「shift+:」进入命令行模式,然后「?en_US.UTF-8 UTF-8」、「?zh_CN.UTF-8 UTF-8」找到对应行。

另外「zh_HK.UTF-8 UTF-8」及「zh_TW.UTF-8 UTF-8」分别是香港及台湾的语言,有需要也可以取消注释。

  1. 生成「locale」
[root@archiso /]# locale-gen
Generating locales...
  en_US.UTF-8... done
  zh_CN.UTF-8... done
Generation complete.
[root@archiso /]#
  1. 配置「/etc/locale.conf」
[root@archiso /]# echo 'LANG=en_US.UTF-8'  > /etc/locale.conf
[root@archiso /]#

用户处理

Linux系统的用户和用户组管理

Linux/Unix是一个用户、多任务的操作系统,可以分为:

  • 超级用户root(0)

    在 Linux 系统中,UID为0的用户就是超级用户。超级用户拥有整个系统所有的权限。

    在生产环境中,一般会禁止 root 账号通过 SSH 远程连接服务器,以加强系统安全。在企业工作中,如果没有特殊需求,应该尽量在普通用户下操作任务,而不是在root 账户下。

  • 系统用户用户(1~499)

    这类用户最大特点是安装系统后默认存在,且默认大多数不能登录系统。它们的存在主要是为了方便系统管理,满足相应的系统进程对文件属主的要求。

    由于服务器业务角色的不同,一部分用不到的系统服务会被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务所对应的虚拟用户也可以处理掉(比如注释掉)。

    ps:在部署服务的时侯,一般需要创建虛拟用户,满足服务启动的属主需求!例如在部署 Apache、Nginx、MySQL、NFS、Rsync、 Zabbix、Redis 等服务时就要预先创建好对应的虛拟用户,然后再部署服务。

  • 普通用户(500~65535)

    这类用户一般是由具备系统管理员 root 权限的运维或系统管理人员添加的。这类用户的权限,系统管理人员会按照角色定位进行分配。

在公司的生产环境,对于用户的管理是非常严格的。不同的人员角色会分配不同角色的用户,防止生产环境遭到破坏。

Arch Linux 系统不适合作为服务器使用,用来作为个人电脑还是不错的。但还是不推荐使用 root 作为日常账号使用,所以需要新建普通用户并提权。

设置 root 密码

[root@archiso /]# passwd root
New password:
Retype new password:
passwd: password updated successfully
[root@archiso /]#

新建用户与配置 sudo

命令说明

当你运行 useradd -m -G wheel JZY 时,会创建一个名为 JZY 的新用户,并将该用户添加到 wheel 组。wheel 组是一个特殊的用户组,在某些Linux发行版(如CentOS、RHEL、Arch Linux等)中,只有属于 wheel 组的用户才有权限使用 sudo 或者 su 命令来获取超级用户权限。因此,将用户添加到 wheel 组意味着赋予了该用户执行管理员任务的能力。

  • useradd:这是用来创建新用户账户的命令。
  • -m:这个选项告诉 useradd 创建用户的主目录。通常情况下,用户的主目录会创建在 /home/username 下。如果省略了 -m 选项,而默认配置又不允许自动创建主目录,则用户的主目录可能不会被创建。
  • -G wheel:这个选项用来指定附加组。这里指定了 wheel 组。
  • JZY:即username,这是你想要创建的新用户的用户名。你可以改为其它名称,需使用英文。
  1. 新建用户并设置密码
[root@archiso /]# useradd -m -G wheel JZY
[root@archiso /]# passwd JZY
New password:
Retype new password:
passwd: password updated successfully
[root@archiso /]#
  1. 安装 sudo
pacman 命令

pacman 是 Arch Linux 及其衍生发行版(如 Manjaro)中使用的包管理工具,它负责软件包的安装、更新和管理。
它的语法是: pacman [操作] [目标(可选)]

主要选项有:

  • S, –sync: 用于同步数据库,并从远程仓库下载和安装软件包。
  • U, –upgrade: 从文件系统中的本地文件安装或升级一个或多个软件包。
  • R, –remove: 卸载软件包。
  • Q, –query: 查询已安装的软件包信息。
  • F, –files: 查询文件信息。
  • Si, –info: 显示远程仓库中软件包的详细信息。
  • Qi, –query –info: 显示本地已安装软件包的详细信息。
  • Syu: 更新所有可用的软件包到最新版本(-Sy 同步数据库,-u 升级软件包)。
  • Ss, –sync –search: 在远程仓库中搜索软件包。
  • y: 强制刷新软件包数据库。
  • u: 升级软件包及其依赖项。
  • c: 清理旧的软件包。
  • d: 忽略依赖关系。
  • f: 强制安装,覆盖现有文件。
  • n: 不安装新版本的配置文件。
  • –needed: 仅当未安装时才安装软件包。
  • v: 显示详细的输出信息。
  • –noconfirm: 不提示确认,直接执行。
[root@archiso /]# pacman -S sudo
warning: sudo-1.9.16.p2-2 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (1) sudo-1.9.16.p2-2

Total Installed Size:  7.76 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n] y
(1/1) checking keys in keyring                                                                                              [###########################################################################] 100%
(1/1) checking package integrity                                                                                            [###########################################################################] 100%
(1/1) loading package files                                                                                                 [###########################################################################] 100%
(1/1) checking for file conflicts                                                                                           [###########################################################################] 100%
(1/1) checking available disk space                                                                                         [###########################################################################] 100%
:: Processing package changes...
(1/1) reinstalling sudo                                                                                                     [###########################################################################] 100%
:: Running post-transaction hooks...
(1/4) Reloading system manager configuration...
  Skipped: Running in chroot.
(2/4) Restarting marked services...
  Skipped: Running in chroot.
(3/4) Creating temporary files...
(4/4) Arming ConditionNeedsUpdate...
[root@archiso /]#
  1. 允许 wheel 组用户使用 sudo
命令说明

运行 sudo visudo 时,会使用默认的文本编辑器打开 /etc/sudoers 文件。/etc/sudoers 文件定义了哪些用户或组可以使用 sudo 命令,以及他们可以运行哪些命令。

/etc/sudoers 文件的常见配置示例:

  • 允许用户使用所有命令:JZY ALL=(ALL:ALL) ALL
  • 允许组内的用户使用所有命令:%wheel ALL=(ALL:ALL) ALL
  • 允许用户免密码运行特定命令:JZY ALL=(ALL) NOPASSWD: /usr/bin/apt
  • 允许用户以特定用户身份运行命令:JZY ALL=(alice) /usr/bin/systemctl
[root@archiso /]# sudo visudo

找到 # %wheel ALL=(ALL:ALL) ALL ,取消注释并保存退出。

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL
## Same thing without a passwor
# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL:ALL) ALL
## Uncomment to allow any user to run sudo if they know the password
#Defaults targetpw #Ask for the password of the target user## of the user they are running the command as (root by default).
#ALLALL=(ALL:ALL)ALL# WARNING: only use this together with 'Defaults targetpw

安装微码

微码
微码(Microcode) 是 CPU 制造商(如 Intel 和 AMD)提供的一种低级固件,用于修复 CPU 硬件缺陷、提升性能或增强安全性。微码直接加载到 CPU 中,可以在不修改硬件的情况下调整 CPU 的行为。

更新软件包数据库

[root@archiso /]# pacman -Syu

如果是 inter 处理器

[root@archiso /]# pacman -S intel-ucode

如果是 amd 处理器

[root@archiso /]# pacman -S amd-ucode

等待安装完成即可。

安装引导程序

安装所需软件包

[root@archiso /]# pacman -S os-prober ntfs-3g grub efibootmgr
resolving dependencies...
looking for conflicting packages...

Packages (7) efivar-39-1  fuse-common-3.16.2-1  fuse2-2.9.9-5  efibootmgr-18-3  grub-2:2.12-3  ntfs-3g-2022.10.3-1  os-prober-1.81-2

Total Download Size:    7.66 MiB
Total Installed Size:  36.44 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
 grub-2:2.12-3-x86_64                                                                             6.8 MiB  4.44 MiB/s 00:02 [###########################################################################] 100%
 ntfs-3g-2022.10.3-1-x86_64                                                                     550.9 KiB  1640 KiB/s 00:00 [###########################################################################] 100%
 efivar-39-1-x86_64                                                                             144.7 KiB   524 KiB/s 00:00 [###########################################################################] 100%
 fuse2-2.9.9-5-x86_64                                                                           117.5 KiB  1141 KiB/s 00:00 [###########################################################################] 100%
 efibootmgr-18-3-x86_64                                                                          30.1 KiB   301 KiB/s 00:00 [###########################################################################] 100%
 os-prober-1.81-2-x86_64                                                                         17.0 KiB   298 KiB/s 00:00 [###########################################################################] 100%
 fuse-common-3.16.2-1-x86_64                                                                      2.7 KiB  54.1 KiB/s 00:00 [###########################################################################] 100%
 Total (7/7)                                                                                      7.7 MiB  2.46 MiB/s 00:03 [###########################################################################] 100%
(7/7) checking keys in keyring                                                                                              [###########################################################################] 100%
(7/7) checking package integrity                                                                                            [###########################################################################] 100%
(7/7) loading package files                                                                                                 [###########################################################################] 100%
(7/7) checking for file conflicts                                                                                           [###########################################################################] 100%
(7/7) checking available disk space                                                                                         [###########################################################################] 100%
:: Processing package changes...
(1/7) installing os-prober                                                                                                  [###########################################################################] 100%
(2/7) installing fuse-common                                                                                                [###########################################################################] 100%
(3/7) installing fuse2                                                                                                      [###########################################################################] 100%
(4/7) installing ntfs-3g                                                                                                    [###########################################################################] 100%
(5/7) installing grub                                                                                                       [###########################################################################] 100%
:: Install your bootloader and generate configuration with:
     # grub-install ...
     # grub-mkconfig -o /boot/grub/grub.cfg
Optional dependencies for grub
    dosfstools: For grub-mkrescue FAT FS and EFI support
    efibootmgr: For grub-install EFI support [pending]
    freetype2: For grub-mkfont usage
    fuse3: For grub-mount usage
    libisoburn: Provides xorriso for generating grub rescue iso using grub-mkrescue
    lzop: For grub-mkrescue LZO support
    mtools: For grub-mkrescue FAT FS support
    os-prober: To detect other OSes when generating grub.cfg in BIOS systems [installed]
(6/7) installing efivar                                                                                                     [###########################################################################] 100%
(7/7) installing efibootmgr                                                                                                 [###########################################################################] 100%
:: Running post-transaction hooks...
(1/3) Reloading device manager configuration...
  Skipped: Running in chroot.
(2/3) Arming ConditionNeedsUpdate...
(3/3) Updating the info directory file...
[root@archiso /]#

启用「os-prober」

[root@archiso /]# vim /etc/default/grub

取消注释「GRUB_DISABLE_OS_PROBER=false」,如下所示:

#GRUB_SAVEDEFAUL T=true
# Uncomment to disable submenus in boot menu
#GRUB_DISABLE_SUBMENU=y
# Probing for other operating systems is disabled for security reasons. Read
# documentation on GRUB_DISABLE_oS_PROBER, if still want to enable this
# functionality install os-prober and uncomment to detect and include other
# operating systems.
GRUB_DISABLE_OS_PROBER=false

部署「grub」

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

生成配置文件

[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/amd-ucode.img /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot:  amd-ucode.img initramfs-linux-fallback.img
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Adding boot menu entry for UEFI Firmware Settings ...
done
[root@archiso /]#

检查配置文件

[root@archiso /]# cat /boot/grub/grub.cfg

如果如下图,则说明可以:

重启计算机

退出「chroot」环境

[root@archiso /]# exit
exit
arch-chroot /mnt  18.53s user 10.60s system 2% cpu 17:24.23 total
root has logged off pts/0 from 192.168.9.28.
root@archiso ~ #

卸载新分区并重启

root@archiso ~ # umount -R /mnt
root@archiso ~ # reboot

如果是 Vmware 现在你的主机就会重新启动并进入新系统了。

如果是物理主机,需要设置启动顺序为新系统盘。然后就会进入新系统了。

为系统配置IP

现在不能使用远程工具,需要在主机操作。

启用并启动 systemd-networkd

systemd-networkd
systemd-networkd 是 systemd 项目的一部分,旨在提供一个轻量级且功能强大的网络配置和管理工具。它主要用于管理和配置网络接口、地址、路由以及 DNS 设置。与传统的网络管理工具(如 NetworkManager 或 ifupdown)相比,systemd-networkd 提供了一种更加模块化和集成的方式来进行网络设置。
  1. 设置 systemd-networkd 为开机自启
[JZY@JZY ~]$ sudo systemctl enable systemd-networkd
Created symlink '/etc/systemd/system/dbus-org.freedesktop.network1.service''/usr/lib/systemd/system/systemd-networkd.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/systemd-networkd.service''/usr/lib/systemd/system/systemd-networkd.service'.
Created symlink '/etc/systemd/system/sockets.target.wants/systemd-networkd.socket''/usr/lib/systemd/system/systemd-networkd.socket'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-network-generator.service''/usr/lib/systemd/system/systemd-network-generator.service'.
Created symlink '/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service''/usr/lib/systemd/system/systemd-networkd-wait-online.service'.
[JZY@JZY ~]$
  1. 启动 systemd-networkd 并查看状态
[JZY@JZY ~]$ sudo systemctl start systemd-networkd
[JZY@JZY ~]$ sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Configuration
     Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-12-25 15:58:18 CST; 18h ago
 Invocation: 535f38592c4f4f938d03aa1bd9d723cc
TriggeredBy: ● systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
             man:org.freedesktop.network1(5)
   Main PID: 701 (systemd-network)
     Status: "Processing requests..."
      Tasks: 1 (limit: 4594)
   FD Store: 0 (limit: 512)
     Memory: 2.1M (peak: 13.1M)
        CPU: 2.626s
     CGroup: /system.slice/systemd-networkd.service
             └─701 /usr/lib/systemd/systemd-networkd

Dec 25 15:58:18 JZY systemd[1]: Starting Network Configuration...
Dec 25 15:58:18 JZY systemd-networkd[701]: lo: Link UP
Dec 25 15:58:18 JZY systemd-networkd[701]: lo: Gained carrier
Dec 25 15:58:18 JZY systemd[1]: Started Network Configuration.
Dec 25 15:58:18 JZY systemd-networkd[701]: ens33: Configuring with /etc/systemd/network/ens33.network.
Dec 25 15:58:18 JZY systemd-networkd[701]: ens33: Link UP
Dec 25 15:58:18 JZY systemd-networkd[701]: ens33: Gained carrier
Dec 25 15:58:18 JZY systemd-networkd[701]: ens33: DHCPv4 address 192.168.9.56/24, gateway 192.168.9.1 acquired from 192.168.9.1
Dec 25 15:58:19 JZY systemd-networkd[701]: ens33: Gained IPv6LL
[JZY@JZY ~]$

启用并启动 systemd-resolved

systemd-networkd
systemd-resolved 是 systemd 项目的一部分,主要用于提供网络名称解析服务。它旨在替代传统的 DNS 解析方法(如使用 /etc/resolv.conf 文件),并提供了更现代、灵活和集成的 DNS 解析功能。
  1. 设置 systemd-resolved 为开机自启
[JZY@JZY ~]$ sudo systemctl enable systemd-resolved
Created symlink '/etc/systemd/system/dbus-org.freedesktop.resolve1.service''/usr/lib/systemd/system/systemd-resolved.service'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-resolved.service''/usr/lib/systemd/system/systemd-resolved.service'.
[JZY@JZY ~]$
  1. 启动 systemd-networkd 并查看状态
[JZY@JZY ~]$ sudo systemctl start systemd-resolved
[JZY@JZY ~]$ sudo systemctl status systemd-resolved
● systemd-resolved.service - Network Name Resolution
     Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-12-25 15:57:31 CST; 18h ago
 Invocation: 65d8e7fb7f6b4434b805b05d64640d9c
       Docs: man:systemd-resolved.service(8)
             man:org.freedesktop.resolve1(5)
             https://systemd.io/WRITING_NETWORK_CONFIGURATION_MANAGERS
             https://systemd.io/WRITING_RESOLVER_CLIENTS
   Main PID: 683 (systemd-resolve)
     Status: "Processing requests..."
      Tasks: 1 (limit: 4594)
     Memory: 5.7M (peak: 6.2M)
        CPU: 684ms
     CGroup: /system.slice/systemd-resolved.service
             └─683 /usr/lib/systemd/systemd-resolved

Dec 25 15:57:31 JZY systemd[1]: Starting Network Name Resolution...
Dec 25 15:57:31 JZY systemd-resolved[683]: Positive Trust Anchors:
Dec 25 15:57:31 JZY systemd-resolved[683]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
Dec 25 15:57:31 JZY systemd-resolved[683]: Negative trust anchors: home.arpa 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa 170.0.0.192.in-addr.arpa 171.0.0.192.in-addr.arpa 168.192.in-addr.arpa d.f.ip6.arpa ipv4only.arpa resolver.arpa corp home internal intranet lan local private test
Dec 25 15:57:31 JZY systemd-resolved[683]: Using system hostname 'JZY'.
Dec 25 15:57:31 JZY systemd[1]: Started Network Name Resolution.
Dec 25 15:58:19 JZY systemd-resolved[683]: Detected conflict on JZY IN A 192.168.9.56
Dec 25 15:58:19 JZY systemd-resolved[683]: Hostname conflict, changing published hostname from 'JZY' to 'JZY11'.
  1. 将 /etc/resolv.conf 链接到 systemd-resolved 的配置文件:**
[JZY@JZY ~]$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
[JZY@JZY ~]$
  1. 配置 systemd-resolved 配置文件**
[JZY@JZY ~]$ sudo vim /etc/systemd/resolved.conf
[Resolve]
# 启用 DNS 缓存
Cache=yes

# 启用 mDNS 支持
MulticastDNS=yes

# 启用 LLMNR 支持
LLMNR=yes

# 启用 DNSSEC
DNSSEC=yes

# 设置默认的 DNS 服务器(如果需要)
DNS=223.5.5.5 223.6.6.6

# 设置默认的 Fallback DNS 服务器(当其他 DNS 服务器不可用时使用)
FallbackDNS=8.8.8.8 8.8.4.4
  1. 重启 systemd-resolved
[JZY@JZY ~]$ sudo systemctl restart systemd-resolved

确定网口名称

网络接口

在 Linux 系统中,有许多类型的网络接口。以下是常见的网络接口类型及其对应的名称:

  • 以太网接口:ethX、enXX等。用于有线网络连接。
  • Wi-Fi 接口:wlXXX等。连接 wifi 。
  • 蓝牙接口:bXXX等。连接无线耳机、键盘、鼠标、智能家居设备。
  • 环回接口:lo。它是一个虚拟的网络接口,用于在本机上进行网络通信测试和进程间通信。IPv4 中环回地址的范围是 127.0.0.0/8,最常用的环回地址是 127.0.0.1,对应的主机名是 localhost。对于 IPv6,环回地址是 ::1。
[JZY@JZY ~]$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:07:ad:e0 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    altname enx000c2907ade0

创建网络配置文件

[JZY@JZY ~]$ cd /etc/systemd/network/
[JZY@JZY network]$ sudo touch ens33.network

文件的名称需与网口名称一致。

配置 DHCP

# /etc/systemd/network/ens33.network
[Match]
Name=ens33

[Network]
DHCP=yes

# 让 systemd-resolved 处理 DNS 设置
[DHCP]
UseDNS=yes
[JZY@JZY ~]$ sudo systemctl restart systemd-networkd

使用vim进行编辑。推荐使用 DHCP 配置, Name 的值需是网口名称。

配置静态 IP

首先你要确定你的网关地址,你可以先「DHCP」配置确定。以「Windows」为例:

# /etc/systemd/network/ens33.network
[Match]
Name=ens33

[Network]
Address=192.168.9.57/24
Gateway=192.168.9.1
DNS=223.5.5.5
DNS=223.6.6.6
DNS=8.8.8.8
DNS=8.4.4.4
Domains=example.com

重启「systemd-networkd」并查看「IP」

[JZY@JZY ~]$ sudo systemctl restart systemd-networkd
[JZY@JZY ~]$ sudo ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:07:ad:e0 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    altname enx000c2907ade0
    inet 192.168.9.56/24 metric 1024 brd 192.168.9.255 scope global dynamic ens33
       valid_lft 51611sec preferred_lft 51611sec
    inet6 fe80::20c:29ff:fe07:ade0/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
[JZY@JZY ~]$

如果网口的状态是「DOWN」,要把状态激活:

[JZY@JZY ~]$ sudo ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:0c:29:07:ad:e0 brd ff:ff:ff:ff:ff:ff
[JZY@JZY ~]$ sudo ip link set dev ens33 up
[JZY@JZY ~]$ sudo ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:07:ad:e0 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    altname enx000c2907ade0
    inet 192.168.9.56/24 metric 1024 brd 192.168.9.255 scope global dynamic ens33
       valid_lft 51611sec preferred_lft 51611sec
    inet6 fe80::20c:29ff:fe07:ade0/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever

这里的网络地址是:192.168.9.56

ip 命令

ip 命令是 Linux 系统中用于管理网络接口、路由、隧道等网络配置的强大工具。它取代了旧的 ifconfig、route 等命令,提供了更丰富的功能和更一致的语法。

它的基本语法是:ip [ OPTIONS ] OBJECT { COMMAND | help }

  • OPTIONS: 可选参数,用于修改命令的行为。
  • OBJECT: 要操作的对象,如 link、addr、route 等。
  • COMMAND: 对对象执行的操作,如 show、add、delete 等。
  • help: 显示对象的帮助信息。

它的常用对象和命令:

  1. link

    • 查看网络接口信息:ip link show
    • 启用网络接口:ip link set dev <网口名称> up
    • 禁用网络接口:ip link set dev <网口名称> down
    • 修改接口的最大传输单元:ip link set dev <网口名称> mtu
  2. addr

    • 查看 IP 地址:ip addr show
    • 添加 IP 地址:ip address add <IP地址>/<子网掩码> dev <网口名称>
    • 删除 IP 地址:ip address del <IP地址>/<子网掩码> dev <网口名称>
  3. route

    • 查看路由表:ip route show
    • 添加路由:ip route add <目标网络>/<子网掩码> via <网关> dev <网口名称>
    • 删除路由:ip route del <目标网络>/<子网掩码>
    • 添加默认网关:ip route add default via <网关> dev <网口名称>

常用选项:

  • -s:显示更详细的统计信息。
  • -4:仅显示 IPv4 相关信息。
  • -6:仅显示 IPv6 相关信息。
  • -c:使用颜色输出。
  • -h:以人类可读的格式显示信息。

安装 openssh

确保已安装 openssh

[JZY@JZY ~]$ sudo pacman -S --needed openssh
looking for conflicting packages
-------------------------省略-------------------------------
(4/4) Arming ConditionNeedsUpdate..
[JZY@JZY ~]$

启动「openssh」

[JZY@JZY ~]$ sudo systemctl start sshd
[JZY@JZY ~]$ sudo systemctl status sshd
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; preset: disabled)
     Active: active (running) since Wed 2024-12-25 16:26:28 CST; 21h ago
 Invocation: 3819661993bd4a02b221885e2b3e383a
   Main PID: 857 (sshd)
      Tasks: 1 (limit: 4594)
     Memory: 5M (peak: 22.2M)
        CPU: 499ms
     CGroup: /system.slice/sshd.service
             └─857 "sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups"
-------------------------省略-------------------------------
Dec 26 10:22:54 JZY sshd-session[2459]: pam_unix(sshd:session): session opened for user JZY(uid=1000) by JZY(uid=0)

不建议设置为开机自启动,需要远程时启动 sshd 即可。

s使用 ssh username@IP 远程,这里是 ssh JZY@192.168.9.56

结语

现在你的主机上面已经安装好 Arch Linux 了,但是现在它还远远不能作为个人工作主机,因为缺少很多配置。

选择 Arch Linux 作为个人主机操作系统有许多优势,主要是满足折腾的欲望(笑)。

每天的滚动更新会给你很强的爽感,这也意味着总是可以获得最新的软件包和安全补丁;你也可以根据自己的需求构建一个完全个性化的环境,你可以选择安装你需要的一切,从桌面环境到应用程序;你也可以针对特定硬件和使用场景进行精细调整,从而获得最佳性能; Arch 拥有一个庞大且活跃的社区,用户可以在论坛、IRC 频道和其他社交平台上交流经验、解决问题,还有 Arch Wiki 这个极其详尽且维护良好的知识库。

如果你喜欢折腾,可以尝试下 Arch Linux 。不要忘记每天使用 pacman -Syu 进行更新。


THEEND



© 转载需要保留原始链接,未经明确许可,禁止商业使用。CC BY-NC-ND 4.0