前言

岚的声明

本文为折腾日记,它只是因为我而写下的,不具备权威性,我也无法保证正确,仅供参考

上一篇文章中,我们介绍了Linux的起源、发展以及如何选择适合自己的发行版。本文将介绍Linux的基本安装与配置,帮助读者更好地了解和使用Linux系统
本文并不会去介绍某一发行版的安装,官方文档已经足够详细,我将会介绍安装通用步骤都做了什么,并引出一些基本概念

与前文相同,本文将Linux用于指代基于Linux内核的操作系统

参考资料

安装

准备

  • 工具:U盘(虚拟机无需)、Linux发行版映像、Rufus/Etcher、充足的磁盘空间、以及一双手
  1. 刻录LiveCD:使用Rufus或Etcher将Linux发行版映像刻录到U盘上
  2. 重启计算机,进入BIOS/UEFI设置,启动LiveCD
  3. 使用手机或其他设备打开对应发行版的官方文档,通常会提供详细的安装指南和常见问题解答

LiveCD是一个完整的可引导安装程序(类似WinPE),它包含一个完整的操作系统,允许用户从储存设备将操作系统载入到内存运行,而非从硬盘驱动器载入。LiveCD通常用于演示操作系统、系统安装、修复系统故障等场景

分区

  • 分区前请备份重要数据,分区操作不可逆

  • 分区工具:

    • 一般而言,Linux发行版提供的安装映像会自带分区工具,eg.cfdisk(交互式)fdisk(命令行)parted(交互式)gparted(图形化) 等;有关工具如何使用,这里不做介绍
    • 替代方案:使用WinPE进行分区再后进入LiveCD进行安装
  • 分区方案:

    • 通常,UEFI设备建议使用GPT分区表,建议分区方案为:
      • 根分区:推荐格式:ext4根分区,建议大小为16GB以上,用于存放/目录下的文件
      • EFI分区:推荐格式:fat32;EFI启动分区,建议大小为300MB,用于存放EFI启动文件,其会挂载到根分区/boot/efi目录
      • /home:推荐格式:ext4;用户主目录,用于存放/home目录下的文件,需要将其挂载到根分区/home目录
      • 交换分区:推荐格式:swap;交换分区,用于在物理内存不足时提供额外的内存空间,建议大小为物理内存的1.5倍
    • Legacy BIOS设备建议使用MBR分区表,建议分区方案为:
      • 根分区:推荐格式:ext4根分区,建议大小为16GB以上,用于存放/目录下的文件
      • BIOS分区:推荐格式:xfs;BIOS启动分区,建议大小为300MB,用于存放BIOS启动文件,其会挂载到根分区/boot目录
      • /home:推荐格式:ext4;用户主目录,用于存放/home目录下的文件,需要将其挂载到根分区/home目录
      • 交换分区:推荐格式:swap;交换分区,用于在物理内存不足时提供额外的内存空间,建议大小为物理内存的1.5倍
    • Legacy BIOS设备分区方案与UEFI引导设备分区方案类似,区别在于分区表格式Boot分区不同
  • Linux分区方案较为灵活,例如/home可以合并到根分区中,或者增加/tmp/var等分区用于存放临时文件和变量文件,独立分区可以增强安全性,便于备份维护;也可以不使用交换分区,在稍后配置swap文件或ZRAMEFI分区使用fat32格式可以与Windows系统共用

  • 挂载分区:

    • 使用对应命令将分区挂载到对应目录,例如:
      1
      2
      3
      4
      5
      6
      7
      8
      # 挂载根分区到/mnt
      mount /dev/sda1 /mnt
      # 挂载启动分区到/mnt/boot/efi
      mount /dev/sda2 /mnt/boot/efi
      # 挂载用户主目录到/mnt/home
      mount /dev/sda3 /mnt/home
      # 挂载交换分区到/mnt/swap
      mount /dev/sda4 /mnt/swap
    • 使用lsblk命令查看分区情况,确保分区挂载正确
  • 磁盘与分区:

    • 磁盘通常指存储设备,分区操作是使用分区表磁盘划分为多个逻辑分区,用户可以为每个分区指定文件系统挂载点,以便在操作系统中进行访问和管理

其他文件系统eg.btrfsxfszfs等也可以根据个人需求进行选择,不同文件系统具有不同的特性,例如btrfs具有快照、压缩、RAID、子卷等功能;特性不同的文件系统最优分区方案也不同,如btrfs通常是根分区配合子卷

网络

  • 确保网络连接正常,可以使用ping bing.com命令测试网络连接
  • 连接网络:
    • 多数安装映像会自动连接有线网络,无线网络需要手动连接;若未提供交互式网络连接工具,可以使用iwnmcli等工具进行连接
  • 更新时间以确保Live环境时间准确:
    • 使用timedatectl命令更新时间

    有关网卡驱动问题:如果遇到在LiveCD中无法连接网络,可以尝试使用官方提供的离线安装映像,或者使用有线网络进行安装

安装

  • 配置镜像源:
    • 国内用户通常难以连接官方镜像,可以使用国内镜像源进行安装,eg. 校园网联合镜像站,按照对应文档进行配置
    • 配置完成后,便可以开始安装;交互式安装工具会自动从配置的镜像源下载并安装软件包
  • 更新缓存:
    • 使用对应包管理命令更新软件包缓存
  • 安装软件包,除必须软件包外,其他可稍后安装:
    • base:基础软件包,包括系统核心、基本工具、库等 必须
    • base-devel:开发软件包,包括编译器、构建工具、库等 必须
    • linux:内核软件包,包括内核、模块等 必须
    • linux-firmware:内核固件软件包,包括内核固件等 必须
    • grub:引导程序软件包,包括引导程序等 必须
    • efibootmgr:EFI引导管理器软件包,用于管理EFI引导项
    • sudo:权限管理软件包,用于管理用户权限
    • networkmanager:网络管理器软件包,用于管理网络连接
    • ALSA:音频系统软件包,用于管理音频设备
    • pulseaudio:音频服务器软件包,用于管理音频流
    • vim:文本编辑器软件包,用于编辑文本文件
    • 其他软件包,根据需要的软件包进行安装,eg.gnomeplasmafirefox
  • 包管理:
    • 包管理(Package Management)是用于统一管理软件包的工具,它旨在自动处理软件包的安装、更新、卸载等操作,并解决软件包之间的依赖关系;通常包管理会从 储存库(Repository) 中下载软件包及其元数据(版本号、校验信息、依赖关系等),然后自动处理软件包的安装、更新、卸载等操作

    Linux软件包小科普:Linux软件包通常具有庞大的依赖关系,例如安装A软件包需要B软件包,安装B软件包需要C软件包,幸运的是,现在大多数包管理会自动解决依赖关系,无需手动安装依赖包

交互式安装结束

  • 从此开始,多数交互式安装程序会自动完成安装并进入系统,无需手动干预

Chrooting

  • 安装了基本软件包后,此时Linux系统已经可以运行,但是由于还没有配置引导程序,所以无法从硬盘启动;此时通过LiveCD进入Chroot环境,进一步配置系统

  • 记得先复制DNS信息

    1
    cp --dereference /etc/resolv.conf /mnt/etc/
  • 进入Chroot环境的方法请参照官方文档,一些发行版提供快捷设置Chroot环境的脚本,如arch-chroot;这里着重介绍手动设置Chroot环境的方法:

    1. 挂载必须的文件系统:
    • /proc/,伪文件系统,由内核提供,用于提供进程信息、内核参数等
    • /sys/,伪文件系统,类似 /proc/,但更结构化
    • /dev/,设备文件系统,用于提供设备文件
    • /run/,临时文件系统,用于运行时数据,如PID文件、锁文件等
    1
    2
    3
    4
    5
    6
    7
    mount -t proc none /mnt/proc
    mount --rbind /sys /mnt/sys
    mount --make-rslave /mnt/sys
    mount --rbind /dev /mnt/dev
    mount --make-rslave /mnt/dev
    mount --bind /run /mnt/run
    mount --make-slave /mnt/run

    –make-rslave:将挂载点设置为从属挂载点,用于安装systemd时避免挂载点被破坏

    1. 修改根目录:
    1
    chroot /mnt /bin/bash
    1. 设置环境变量:
    1
    2
    source /etc/profile
    export PS1="(chroot) ${PS1}"

Fstab

  • fstab文件通常列出所有可用的磁盘分区和其他类型的文件系统以及可能不是基于磁盘的数据源,并告诉它们如何初始化或以其他方式集成到更大的文件系统结构中;一般而言,/etc/fstab文件中每行包含6个字段,分别是:
    • <device>:用于指明要挂载的设备或远程文件系统,可以是设备路径、UUID、分区标签
    • <dir>:用于指明挂载点,即 <device> 挂载到何处
    • <type>:用于指明文件系统类型,eg. ext4vfatswap
    • <options>:用于指明mount命令的参数,用半角逗号分隔,如 defaultsnoatimenodiratime,不同文件系统支持的参数不同,请参考对应文件系统文档
    • <dump>:用于指明是否使用dump备份文件系统,0表示不备份,1表示备份
    • <fsck>:用于指明文件系统检查的顺序,0表示不检查,1表示优先检查,2表示次优先检查
    • 示例:
      1
      2
      3
      4
      5
      # <device>                                <dir> <type>          <options>                                        <dump> <fsck>
      UUID=0a3407de-014b-458b-b5c1-848e92a327a3 / ext4 defaults,noatime,nodiratime 0 1
      UUID=CBB6-24F2 /boot vfat defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0 2
      UUID=f9fe0b69-a280-415d-a03a-a32752370dee none swap defaults 0 0
      UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults,noatime,nodiratime 0 2
  • 交互式安装的发行版会自动配置fstab文件;其余发行版请参考官方文档或手动编辑fstab文件

配置

  • 这一步会配置系统的一些基本设置,如时区、主机名、用户名、密码等,许多系统会提供交互式工具进行配置
  • 时间:
    1
    2
    3
    4
    # 设置时区
    ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
    # 同步时间
    hwclock --systohc
    • 这会根据/etc/localtime文件中的时区设置系统时间,并同步到硬件时钟
  • 本地化:
    1
    2
    3
    4
    # 设置本地化
    vim /etc/locale.gen #把你需要的语言取消注释,eg. en_US.UTF-8 UTF-8、zh_CN.UTF-8 UTF-8
    locale-gen
    echo "LANG=en_US.UTF-8" > /etc/locale.conf
    • 这会根据/etc/locale.gen文件中的设置生成本地化文件,并设置系统默认本地化为en_US.UTF-8

    不建议设置/etc/lacale.conf为任何非英文值,这会导致 TTY(终端) 显示乱码

  • 键盘布局:
    1
    echo "KEYMAP=us" > /etc/vconsole.conf
    • 这会设置系统默认键盘布局为us,即美式键盘布局;可以根据个人需求进行修改
  • 主机名:
    1
    echo "hostname" > /etc/hostname
    • 这会设置系统主机名为hostname;1~63个字符,只能包含a-z0-9以及-,不能以-开头
  • Initramfs:
    • 这一步会生成initramfs,不同系统生成initramfs的方法不同,请参考官方文档

    initramfs是为了避免将大量驱动程序硬编码到内核导致内核过大、用于启动时推断根文件系统位置、以及实现休眠挂起等问题而诞生的;它是一个临时根文件系统,在系统启动时加载,用于加载内核模块、挂载根文件系统和查找设备等

  • User:
    • 这一步会配置用户,包括创建用户、设置密码等;一定不要忘记设置Root密码和用户密码,否则无法进入系统
    1
    2
    3
    4
    5
    6
    # 配置Root密码
    passwd root
    # 创建用户并加入wheel组
    useradd -m -G wheel 用户名
    # 设置用户密码
    passwd 用户名
    • 配置sudo,确保你安装了sudo!!
    1
    2
    3
    4
    # 编辑sudoers文件
    vim /etc/sudoers
    # 取消注释以下行,不要使用%wheel ALL=(ALL) NOOPASSWD: ALL!!
    %wheel ALL=(ALL) ALL
    • 这会配置sudo,允许wheel组中的用户使用sudo命令;一定不要使用「%wheel ALL=(ALL) NOOPASSWD: ALL」,这会导致wheel组中的用户可以无密码使用sudo命令,存在安全风险

    sudo(substitute user, do)不同于susudo允许用户以其他用户的身份执行命令,而不是完全切换到其他用户;这可以限制用户的权限,防止用户执行危险命令

引导程序

  • 引导程序(bootloader) 是负责启动操作系统的软件;在计算机启动阶段,操作系统和加载程序并未在RAM中运行,此时计算机会执行引导ROM中的程序(eg.BIOSUEFI),该程序会初始化硬件,定位并加载引导程序,称为第一阶段引导引导程序(eg.GRUBrEFInd)加载操作系统并使操作系统初始化,称为第二阶段引导
  • 引导程序通常安装在MBR/ESP中,MBR是计算机启动时首先读取的512字节的扇区,ESPEFI系统分区,用于存放EFI引导程序
  • 这里主要讲讲广泛使用的**GRUB 2(以下简称GRUB)**的安装配置:
    1. 使用包管理器安装GRUBUEFI系统需要额外安装efibootmgr多系统需要安装os-prober
    2. 写入GRUBMBR/ESP确保你的分区正确挂载!!
    1
    2
    3
    4
    # 安装GRUB到MBR
    grub-install --target="CPU架构与系统平台 eg. i386-pc" "Boot分区 eg. /dev/sda1"
    # 安装GRUB到ESP
    grub-install --target="CPU架构与系统平台 eg. x86_64-efi" --efi-directory="ESP分区挂载点 eg. /boot/efi" --bootloader-id="引导程序名称 eg. Arch"
    1. 配置GRUB
    1
    2
    # 编辑GRUB配置文件
    vim /etc/default/grub
    1
    2
    3
    4
    5
    6
    # GRUB配置文件示例
    GRUB_DEFAULT=0 # 默认启动项,0表示第一个启动项
    GRUB_TIMEOUT=5 # 启动等待时间,单位为秒,-1表示无限等待
    GRUB_CMDLINE_LINUX="quiet splash" # 内核参数,quiet表示不输出内核信息,splash表示显示启动画面
    GRUB_DEVICE="设备 eg. /dev/sda" # 系统设备,用于查找根文件系统
    GRUB_DISABLE_OS_PROBER=false # 是否禁用os-prober,false表示不禁用,true表示禁用
    1
    2
    # 生成GRUB配置文件
    grub-mkconfig -o "grub安装点 eg. /boot/efi/grub/grub.cfg"
    • 此命令会根据 /etc/default/grub文件中的配置生成GRUB配置文件,并保存到 grub安装点
    1. 检查一下GRUB是否正确安装:
    1
    2
    # 查看GRUB安装点
    ls "grub安装点 eg. /boot/efi/grub"

第二阶段引导硬件已经初步初始化,因此可以实现图形化,这意味着你可以通过配置文件自定义引导程序界面,如GRUB主题字体背景

重启

  • 使用Ctrl+D组合键退出Chroot环境,使用reboot命令重启系统,进入BIOS/UEFI界面,将引导程序设置为第一个启动位置,保存设置并重启系统,进入Linux系统

    Linux安装完成后LiveCD也不要丢弃,它可以作为系统修复的环境,类似WinPE