年轻人的第一套Linux系统:献给ArchLinux

先别废话,这篇文章写得是什么?
以在虚拟机里安装Arch Linux的过程为主线,分享Linux的学习方法和操作系统安装心得,授人以鱼不如授人以渔。

也就是看这篇文章学不会Arch Linux的安装是吧?
不但能学会Arch Linux的安装,还能学会一整套操作系统安装思想,一通百通。学会在虚拟机中安装Arch Linux,就一定能在物理机上安装;有了这套思想,也一定能安装其他操作系统,以及解决安装过程中出现的问题。

看进度条觉得废话一定不少,是吧?
的确,这不是一个纯粹的安装教程,每一步都有一些方法性的思考,而不是简单给几个命令。这位作者写得简约而全面:https://www.jianshu.com/p/7c78dc4c53e5。虽然是2018年的文章,但是今天看来基本不过时。ArchLinux最好的安装教程是官方Installation Guide。Arch Linux的更新变化比较大,所以必须参考官方文档。中文教程也很有参考价值,官方更新影响比较大的是一些包和工具的名字,我看过一篇2012年的博客,基本的安装流程思路依然适用。

不是安装教程,那我还听你扯什么?拜拜。
操作系统安装的思路都是相通的,您研究了Arch Linux的安装,这就是一种学习力,那么再去安装其他Linux发行版,安装Windows,将会无比的顺滑和愉悦。即便是源码编译Linux,也不会制造更多障碍。学习Linux最好的方法就是动手安装并配置一次Arch Linux。

听说Arch Linux的安装挺复杂的吧?
您一定听过小马过河的故事吧?做任何事情,最难的都是迈出第一步。真正走出去了,那就车到山前必有路了。

那我们开始安装Arch Linux吧,有点等不及了。
我们需要一些准备工作,假设您具备如下条件:

  • 顺畅的网络,这点很重要。Arch的安装过程必须联网下载最新安装包;
  • 虚拟机软件;
  • 基本的Linux使用经验(会用ls,cat等命令,知道参数选项是怎么回事,能够看懂教程里用的命令是怎么回事);
  • 基本的Vim使用经验(Vim是Linux下的编辑器,和Windows下面的记事本、Word的使用习惯有很大的差别。能够在Vim里完成查找、输入、剪切、粘贴、退出等操作。这里可以用在线Linux环境学习Vim的基本使用https://www.shiyanlou.com/courses/2)
  • 用搜索引擎解决问题的能力和习惯

原来是把Arch Linux安装到虚拟机里,我还以为是安装到物理机呢。没意思,走了!
除非您的电脑上只运行一套Arch Linux,否则我都建议您在虚拟机中安装。安装到虚拟机里是最好且最安全的学习方法,您可以反复安装,并且不会心疼硬盘的数据以及反复格式化带来的损耗。假设Linux是你的生产环境,那么安装Ubuntu LTS这种开箱即用out of the box是最省心的,因为您的主要精力应该花在业务上,而不是去折腾平台;如果Linux不是您的生产环境,那么无论如何你都会用到Windows,或者一定有某些任务需要回归Windows,不管是游戏,还是Adobe全家桶,还是办公。如果只是为了学习使用Linux,虚拟机是最实用且有效的方案。

我的电脑硬件性能强悍,我可以在Arch Linux上安装一个虚拟机,用来运行Windows,在虚拟机运行那些必须在Windows下使用的软件。
这真是一个好的解决方法。祝您玩的开心。

其实我的电脑硬件资源很紧张,只有4G内存,256G的机械硬盘。听说Linux比较高效,想换一套Linux来提升硬件的性能。
操作系统也是一个软件,需要使用内存。所谓Linux高效,是指Linux系统本身占据的资源比较少,可以把更多的内存留给应用软件。想获得流畅的使用体验,最经济的办法是加装一个同型号4G内存条,更换一块固态硬盘。

用什么虚拟机软件?
VMware或Virtual Box。前者是收费的,我们可以以学习的用途掩耳盗铃;后者是免费的,而且比Vmware免费的VM Player要强大。Virtual Box常常有未知的报错,很多时候,修理的难度比重新制造的难度还要高。解决未知错误最好的办法是更改软件版本或者更换软件。

我还是一个小白,安装过程能不能说得详细点?图文步骤那种。
研究表明,婴儿学步车对婴儿学走路的帮助是极为有限的。把人扔到游泳池里学会游泳的速度比穿着救生衣、绑着背漂学习快得多。很多文章、视频教程都会写“零基础”、“小白”、“包教包会”。小白是一种空杯心态,stay foolish,stay hungry,这对学习是有帮助的;但是如果一直把自己摆到小白的位置,那成长和进步是有限的。如果以自己是小白而指望别人手把手教你,这既浪费你的时间,也浪费别人的精力,只能大家图一热闹。我反对“零基础”这种提法,因为大部分“零基础”的教学要么是重复发明轮子,低质量的同质化输出;要么就是涉嫌欺诈消费者,夸大宣传效果。

所以呢?可不可以做图文教程?
本文不配图,老实说这也不是一篇图文安装教,主要是通过Arch Linux的安装梳理操作系统安装的思路,一通百通。就像你学透了C和C++,再去学习Java,Python都不会有什么障碍。如果你从Python入门,那么学习C/C++,Java,还会感觉有明显的学习曲线。

我已经查了很多发行版的资料,我知道Arch Linux的安装难度是比较高的。老实交代,标榜Arch Linux为年轻人第一套Linux发行版是不是虚荣心作祟,是不是故弄玄虚?都是自己人,别装孙子。
不是故弄玄虚。Arch Linux的安装肯定比Ubuntu,Windows的安装要复杂,但是学习的过程总是痛苦的。至于您能不能完成,这依然是一个小马过河的难题。借用技术文档里最爱用的一句话Get your feet wet,能不能趟过这条河,下水才能知道。

为什么选择Arch Linux,而不是Ubuntu/Debian/CentOS/OpenSuse等?
既然我们都聊Arch Linux的事了,我们就不在Linux和Unix的源流以及Linux的发行版上多浪费口舌了。现在大部分Linux发行版的安装过程比较友好,隐藏了大量技术细节,比如Ubuntu,您可以点几个按钮便实现轻松的无人值守安装。工具的作用就是把手工输入的命令变成友好的图形界面。Arch Linux的安装是比较原始的,没有图形界面,每一步都是命令,所以我们可以学到很多系统安装的故事。

看了这篇文章,我能不能独立完成安装Arch Linux呢?
假设你具备基本的Linux使用经验与Vim的使用经验,假设你具备利用搜索引擎解决问题的能力和习惯,那么你一定可以完成Arch的安装,而且可以把Arch自定义成你想要的样子。开始吧!


开始安装

  1. 下载镜像。在archlinux.org下载安装最新的安装包,32bit或者64bit,如你所需。如果是在虚拟机中运行,我想32bit版本是足够的,因为我只给它准备了2G内存。在系统之家、雨林木风等盗版镜像网站下载的Windows镜像是包含完整Windows系统的,但这个archlinx的镜像只是一个用于提供安装环境的linux系统,我们在后续安装的过程中要联网下载各种模块,所以Arch Linux安装必须有良好的网络环境。
  2. 浏览官方文档Installation Guide。计算机任何学科的学习都绕不开英语,这是我们必须面对的事实。由于Arch更新很频繁,很多中文教程中使用的命令一不小心就会过时,所以提前看一下官方文档是很有必要的。
    我的英语不太好,不想读英文文档,也看不下去英文文档,怎么办?
    不看英文文档,在中文互联网世界里也能解决Arch Linux的大部分问题,但是学习Linux就一定要敢于用英语。注意,学Linux的英语!=学英语。我们要的英语是读懂官方文档,而不是和外国人日常交流。如果和外国人交流,你需要学生活英语,学旅游英语,练习口语,掌握日常词汇,知道怎么点菜,怎么买东西;可是读官方英文文档,这些能力都不需要,您只需要高中的英语语法知识(连CET4都不需要)以及技术词汇的储备,大部分人都是具备这样的英语水平的,我们不看英文文档是因为对英语的恐惧以及对便利的中文资料的依赖。即便Arch这种相对生僻的领域,也已经有了成熟的中文资料。英文只是一个工具,它只是你的一个武器,是你的助手,不可怕吧?
    读官方文档,只需要查几个不认识的动词,副词、形容词可以不管,硬着头皮读下去就能读通了。您读完一份官方文档,会发现大部分技术文档用的词汇都差不多,来回来就那么几个动词,再读其他文档就很轻松了。
    如果你具备高中英语水平,无论你的英文成绩怎么样,你都不需要再去学习任何英语课程。打开官方文档,硬着头皮读下去就是了。不需要每个词都查,只查动词
    比如抽一个安装条目,set the keyboard layout,设置键盘布局。set是很基础的动词,设置,我们常常见到setting之类的目录;layout是布局,如果您做网页设计,对于layout这个词一定不陌生。如果您对于键盘布局这个概念不了解,那么这不是英文制造的障碍,而是技术名词本身的障碍。
    直接以Installation Guide为例,这里安装分了五步:
    • pre-installation 安装前的准备工作(下载系统,分区,格式化磁盘)。
    • installation 安装
    • configure system 配置系统
    • reboot 重启
    • post-installation 安装后的配置工作
      install是安装的意思,installation是install的名词。如果您安装过大量非国产软件,对这个词不会陌生;如果您恰巧不认识这个词,可以查在线词典,这个词您在接下来的文档中会反复看到,保准您不会再忘记;configure是配置,在Windows里面有很多.conf结尾或者名为config的文件,这就是配置文件,如果您恰巧不认识这个词,可以查在线词典,下次见面就认得了;system,系统,这是中学词汇;reboot,重启,Linux下面有一个reboot命令。pre-installation,post-installation是两个复合词,用了pre和post这两个词根,pre表示之前,准备工作;post表示之后,善后工作。如果您不知道何为词根,也不了解这种长长的单词的构词方法,也没关系,只要知道pre和post是什么意思就可以了,管它什么词根呢!这堆单词的障碍主要在技术名词,如果您平常读中文文档,也会顺手看英文的名词,那么读起技术文档将会非常愉悦。
      我们再挑一个看起来非常恐怖的句子,也是正式安装步骤的第一句:
      It is recommended to verify the image signature before use, especially when downloading from an HTTP mirror, where downloads are generally prone to be intercepted to serve malicious images.
      我从技术文档里脱离上下文环境直接择出来这么一个句子,其实阅读难度要增大了一倍,您理解的如何?如果您能够基本理解大意,那么您阅读英文文档的能力已经非常的强,可以跳过下面的废话;如果您阅读出现了一些障碍,我们看看障碍在哪里。
      障碍可能在prone,这个单词要查一下;intercept,malicious,如果研究网络安全,这两个词不会陌生,intercept是劫持,malicious是恶意软件,恶意程序,如果对网络安全不熟悉,这两个词要查一下;
      障碍可能在verify image signature,验证数字签名。verify是验证,查完之后就可以一直认得了;signature,数字签名。什么是数字签名?如果不知道数字签名,那这个障碍在于技术本身,而不是语言。
      HTTP mirror,mirror是镜子,这是指http镜像服务器。什么是http?什么是镜像服务器?如果不知道,那么障碍在于这些技术名词,而不是语言。如果您去查这些技术名词,往往都是有英文译名的,这样反过来帮助您了解英文名词。
      如果recommend,especially,generally有障碍,那么可能需要多花点功夫学习英语单词了,因为这是中学词汇;
      这个句子的语法成分并不简单,它用了插入语,用了where引导的定语从句,但是您根本不需要研究这些。您只需要知道大意:网上下载的镜像最好做一下数字签名验证,防止下载的镜像被恶意攻击或者篡改。
      我们只需要读懂技术文档的意思,我们并不需要研究英语。
      下面我会按照技术文档里的5步来说明以Arch Linux为例的操作系统的安装流程:
  3. pre-installation
    Linux和Windows的安装准备工作是相同的,主要需要解决两个问题:
    第一,创造安装环境。
    第二,在硬盘上准备安装空间。

什么是安装环境?一套用来安装新的操作系统的精简版的操作系统。
我们之所以能使用电脑这一堆硬件,是因为硬件上有操作系统;我们现在重新安装操作系统,也必须一个操作系统内进行,要不然我们用不了这堆硬件。
这就像买口罩,去药店买口罩必须戴口罩,可家里又没有口罩,那怎么去买口罩呢?答案是戴着一个简易的口罩到药店去买合格的口罩。药店里售卖的合格口罩是完整的操作系统,安装环境是家里自制的建议口罩,它功能不完善,但是能够勉强应付去药店这段路的需求。如果没有这个简易口罩,咱们连门都出不了。
Windows上实现这个功能的是Windows PE(windows pre-installation environment),这是一个具有有限功能的小型Windows系统,它可以是xp版本的,也可以是win7,win8,win10版本的。我们刻录安装盘,就是给U盘里装一个操作系统,只不过这个操作系统是Windows PE,一个简化版的Windows系统,我们通过U盘里的这个系统来操作电脑的硬件,把另一个系统部署到电脑硬盘上,同时完成引导的设置,让电脑启动的时候能够找到硬盘上新系统的位置,加载操作系kernel。一个操作系统本质上和一个hello world程序并没有区别,都是一段可执行程序。Arch的安装环境是root@archiso,大部分的Linux安装都使用这种光盘系统(当然这种系统也可以被烧录在U盘里),区别在于有的Linux会像Windows一样预先下载好新系统的镜像,比如Ubuntu;有的会在光盘系统中根据需求下载系统模块,比如Arch。

既然烧录就是在U盘里安装操作系统,那可不可以直接把Arch Linux安装在U盘里?
当然可以,只要你的U盘有2G以上的空间,原则上是够的,但是U盘的访问速度太慢了,比硬盘慢很多,所以只能装Win PE这种精简的系统,在安装系统时候简单用用,或者用于硬盘上操作系统的修复,或者在你使用图书馆、宾馆等未知系统环境安全性的场合提供一个临时系统环境。

什么叫在硬盘上准备空间?
安装操作系统其实就是把编译的操作系统机器码存储在硬盘里,然后安装引导程序,告诉主板该到硬盘的哪个位置加载系统源码到内存里。安装一个程序,一个游戏也是类似的,把机器码存放到硬盘里,只不过它是告诉操作系统的文件管理程序要到哪些位置找机器码。
Windows安装前也需要划分硬盘空间,并对硬盘进行格式化formation。格式化可以用图书馆来类比,数据是图书馆里的书,格式化就是图书馆里的书架。给您一层图书馆空间用来放书,不同人会有不同书架的方案,有的人用高高的书架,有的人用矮矮的书架;有的人布置的很密,有的人布置的很宽敞。不同的布置方案就是文件系统,书架上的书就是数据。Windows用的文件系统是NTFS(New Technology File System,从Windows NT时代开始引入,现在成为Windows的通用操作系统。Windows NT以前用的是FAT32,Windows95和Dos兼容时用的是FAT16。除非兼容Dos环境,否则不会用FAT来格式化分区);Linux支持很多种文件系统类型,但是推荐采用ext4文件系统(Extended File System 4th,从ext、ext2、ext3一路发展过来,是Linux原生的文件系统;大部分Linux发行版推荐的文件系统都是ext4)

我不想用ext4格式化分区,可以用别的文件系统格式吗?
当然可以,但如果您不知道该用其他什么方案的话,ext4这个默认选项一定是不会错的。

Windows上分区和格式化都是在图形界面软件里完成的,甚至可以一键帮你分成4个区。如果在原有Windows系统里重装Windows,那么硬盘还是NTFS分区,连格式化都不需要;Arch里面需要用cfdisk(或fdisk,parted等等)先分区,然后用mkfs.ext4,mkfs.vfat这些工具进行格式化。
所谓格式化就是给图书馆里安装书架;
所谓书架,就是文件系统;
所谓文件系统就是虚拟文件在物理存储介质上的分布和管理方案。
这时候你可能有很多问题:

  • 除了ext,ext2,ext3,ext4,Linux上还有哪些文件系统?
  • Linux能否安装在NTFS文件系统的磁盘上?
  • Linux文件系统的架构和设计理念是什么?
  • 那些云存储Linux服务器,存储的都是PB级的数据,它们用的文件系统也是ext4吗?
  • Linux的ext4和Windows NTFS有什么本质区别吗,为什么不用相同的文件系统呢?
  • ......

你可能还有其他很多暂时解决不了的问题,我的建议是先不要去解决。我们的主线任务是完成Arch的安装,只要能将任务推进下去,现在不深究原理。猎人准备到森林里打兔子,它看见狐狸子就追狐狸,看见梅花鹿又放弃狐狸去追梅花鹿,追了一天,结果什么都没打到。没有什么问题是可以刨根问底的,如果一直沿岔路钻下去,我们一辈子都研究不完。
这些问题可以等着以后有时间回过头再深究;如果你不做Linux的运维,文件系统设计,其中大部分问题甚至永远不需要深究。学习最重要的一个原则就是不忘初心,不要忘记你是为了什么出发的。就比如我现在扯了这么多闲篇,我已经忘记了我本来要写的是一个Arch虚拟机安装方案了。

假设你已经在官网上下载好了arch最新的发行版的iso;
假设你对下载下来的文件已经做过数字签名验证,验证无误;如果你以前没有做过数字签名验证,可以不做,因为去做数字签名验证的过程你又会有如下的问题:

  • 在Windows和Linux系统中有什么原生工具可以进行数字签名比对?
  • 什么是数字签名Signature?
  • 数字签名都有哪些算法?什么是PGP?实现PGP除了GnuPG还有其他的工具吗?Windows上如何做PGP验证?
  • 什么是非对称加密?什么是公钥和私钥?非对称加密的数学基础是什么?
  • ......

网络学习资源很丰富,所以专注这种能力就更加可贵。这些问题又够你研究一天了,结果天都黑了,Arch还没有装起来。

假设你在虚拟机中安装,已经配置好了虚拟机,并把iso加载到虚拟机系统的光驱里,并且设置好了系统启动顺序。如果你没有对虚拟机做额外的设置,那么虚拟机的启动方式应该是BIOS+MBR分区,而不是UEFI+GPT分区。这时候你可能还有很多问题:

  • 什么是UEFI?什么是GPT?什么是MBR?GPT分区和MBR分区有什么区别?
  • BIOS为什么又称为legacy?
  • ......

请把这些问题放一放,现在我们要启动系统了。屏幕上跳动一连串代码后,我们进入了root@archiso。这很酷,系统为你自动登录了账户,还是无密码的root账户。
Installation Guide上pre-installation里的后续步骤如下,大部分中文安装教程也都是参照这个顺序来的:

  • set keyboard layout
  • verify the boot mode
  • connect to the internet
  • update the system clock
  • partition the disk
  • format the partition
  • mount file system

必要的步骤已经被加粗了,7步变成了3步,也就是分区、格式化、挂载。我们看一看那些可以跳过的步骤:

  • set keyboard layout设置键盘布局。假设不做什么操作,那么系统用的就是美式键盘布局,也就是我们熟悉的qwer。当然有一些人用的不是qwer键盘,比如日语键盘,法语键盘或者其他改键方案。不管您用到用不到这一步,反正我是用不到,无视这一步。
  • verify the boot mode。确认你的主板到底是UEFI方式启动还是BIOS启动。如果你是虚拟机,我相信您大概率是是BIOS启动。可以通过这个命令验证是否为BIOS启动:
ls /sys/firmware/efi/efivars

如果你通过UEFI启动,这个目录就不是空的;如果你通过BIOS启动,这个命令执行是无结果的。不管您愿不愿意做,反正我是不需要。

  • connect to the internet联网。Arch Linux的安装过程必须联网。我们安装Windows是不需要联网的,所有的系统文件都在光盘、U盘里刻录好了。Arch的更新是非常频繁的,没有稳定版一说,所以安装的时候需要从软件源联网下载。简单来说,联不上网就没办法安装Arch。假设你在物理机上安装,你可以用wifi-menu工具连接无线,或者用dhcpcd自动获取ip地址。当然也有可能你用的是固定ip上网,statci ip,尽管这样的奢侈在我们国家很难得,这时候需要你在archiso下做配置。可是你为什么不在虚拟机里安装呢?
    假设你在虚拟机里安装,只要你的笔记本电脑能联网,你的虚拟机系统就能通过NAT或者bridge上网,除非你在虚拟机设置中改动了默认设置,不允许虚拟机联网。如果你的笔记本电脑没联网,那您得想办法联上网络。假设你只需要基础版的Linux,您自己指定驱动程序,你不用图形界面,你不需要man这种系统帮助工具,你也不需要vim等编辑器,大概需要下载200M数据。如果下载图形界面,各种工具软件,那么下载量就在1G往上了。幸运的是,国内的Linux软件源速度都很快,不限速。你下得多快,它就给的多快。通过ping命令测试网络联通状况:
ping -c 4 www.baidu.com

ping是一个用来测试网络联通状况的工具。Windows下面ping默认是发送4个数据包,Linux下ping如果不设置数据包,它会一直发送数据包。c是count,-c 4这个参数就是发送4个包的意思。国内测速用baidu,外网测速用google。

  • update the system clock 校正系统时间,连接网络授时服务器校准系统时间。不管您是否需要,反正我是不需要。
  • partition the disk 分区
    硬盘分区分为主分区primary和扩展分区extend。通过BIOS启动只能使用MBR分区表,使用MBR的硬盘只能划分出4个主分区。Windows上很多分区软件可以一键分成C、D、E、F四个区,为什么不分成5个区?因为最多只能分成4个主分区。如果要更多的分区,需要把一块分区设置成扩展分区extend,这块扩展分区是可以划分成多个逻辑分区的。这种分区限制是由BIOS决定的,和Linux还是Windows无关。
    操作系统必须安装在主分区里,假设你装Windows+Linux的双系统,Windows用了4个主分区,那么Linux就无法安装了。这时候需要在Windows里用逻辑分区来腾出一块主分区给Linux用。
    Linux下面分区方案很多,很多方案会推荐/home,/boot,/var,/usr,swap应该如何如何,看得初学者眼花缭乱。简而言之:可以,但是没必要。
    Linux必要的分区就是根分区/以及swap。只需要分这两个区,都设置为主分区。
    swap类似于Windows中的虚拟内存,当RAM空间耗尽时,可以用一部分硬盘空间来实现内存功能,防止系统或者软件崩溃。

我的电脑是2G内存,我是否可以设置100G的swap,让我的电脑获得102G内存的愉悦体验?
不可以。swap只是用来应急的,也就是你的系统内存耗尽时,才会用硬盘空间来保命。硬盘的访问速度非常慢,即便是固态硬盘,RAM的访问速度也是其1000倍,所以这只能是个应急方案。很多大型图形处理软件或者计算程序是非常吃内存的,没有启动之前,系统使用的内存只有3G,8G内存非常充裕;但是启动之后,8G内存可能瞬间就爆满,这时候就需要swap来做一个缓冲。

swap分区该设置多大?我听说一般设置成系统内存的两倍。
是的,一般设置为系统内存的两倍。系统1G内存,swap设置成2G。4G内存,swap设置成8G;但如果你的系统内存是32G甚至是128G,你就没必要把swap设置成64G,256G,你的系统根本用不完那些RAM,只需要设置几G的RAM以备极端情况就可以了。

archiso自带的分区工具有很多:fdisk,cfdisk,parted。如果这不是一道面试题或者你必须给出答案的场合,我认为这些工具没什么区别,它们都可以完成分区的任务。如果想用GPT的分区表,使用parted;如果是MBR分区表,fdisk是极好的。

我是BIOS+MBR的启动模式,但是用parted对硬盘分区可以吗?
当然可以。现在fdisk也可以划分gpt的分区表,只不过没那么方便。

不管用什么工具,操作思路是相同的,手法是类似的。首先查看硬盘情况,确定硬盘的名称:

fdisk -l 

假设你在物理机上安装,这个命令执行下来可能会看到sda,sdb,loop等,注意看每个存储设备的容量。一般sda是主硬盘,sdb是U盘。
假设你在虚拟机里安装,一般只有sda,loop,airoot等分区,sda就是主硬盘,记住这个名字,其他的可以忽略。
注意上面的命令,选项是字母l,list,不是阿拉伯数字1,列出所有的硬盘存储设备。Linux命令行工的选项基本都有对应的英文单词多取首字母,而且很多选项里是相通的。比如l,list,在很多工具里都是用来列表显示;v,verbose,用来显示详细的执行信息;
v,version,显示软件的版本;h,help,显示帮助信息。比如:

tar -zxvf example.tar.gz

这是一个解压tar.gz文件的命令,我们在Linux上用源码安装软件的时候,下载的源代码常常是tar.gz的格式。z,gzip,通过gzip解压gz的压缩包;x,extract,tar是封包工具,现在提取tar包中内容;v,verbose,显示详细信息;f,file,指定文件名,也就是解压的路径及解压后的文件名。大部分选项都是有对应的英文单词的,这样记起来不容易混。

硬盘是hard drive,hd,为什么这里显示的是sda,sdb?
以前确实是hda,hdb划分的,Windows下有些分区软件还是这么称呼的;现在大部分硬盘用的SATA接口驱动,所以Linux称SATA drive,sd。具体源流等您以后有时间可以慢慢查。

下面开始正式分区,只需要分/和swap。现在我们不熟练,只分两个区;等您用得熟练了,随心所欲,还是只分两个区。鸡蛋不放在同一个篮子里,一个分区数据数据损坏而另一个没有损坏的可能性不是没有,但是不高。很多时候,对抗风险最好的工具就是运气。

fdisk /dev/sda

Linux系统下万物皆文件,硬盘也被当做一个文件来管理。不过它不是txt、mp3这种普通文件,它是设备文件,都在/dev这个目录,device,设备目录下面。如果您的主硬盘不是sda,那需要改一下硬盘名。当然,如果您在虚拟机安装Arch的话,它很难不是sda。
命令执行后进入一个纯命令行工具,输入m,manual,查看帮助文档,会提示所有的参数,每个功能都是按一个字母:
n,new,新建分区;
d,delete,删除分区;
p,print,打印目前分区表;
w,write,保存分区修改;
q,quit,退出。
一般地,n,新建一个分区。系统会要求您选择primary(p) or extended(e),输入p,选择主分区。后面就是卷标,分区大小之类的。再new一个分区给swap。
Linux分区工具都是指定起始位置和结束位置来确定容量的。建议先划分swap分区,然后把剩下的都给/。
/和swap分好后,输入p,查看分区是否正确。确认后w,保存分区更改。使用命令查看sda的分区情况:

fdisk -l /dev/sda

如果分区正确并且保存了修改,这里应该能够看到sda1,sda2这两个分区了。记住哪个分区是swap,假设sda1是swap分区。下面开始格式化操作,也就是给这个分区里安放不同类型的书架。
swap分区:

mkswap  /dev/sda1 #格式化swap分区
swapon /dev/sda1 #激活swap分区

/分区(也称根分区):

mkfs.ext4 /dev/sda2

:可不可以使用mkfs.ext3来格式化 /dev/sda2?
:当然可以,你甚至可以mkfs.ext,但是建议您mkfs.ext4。

:sda1和sda2的卷标搞混了怎么办?
:那您将拥有50G的虚拟内存以及2G的C盘。

格式化后进行目录的挂载mount操作,这是Linux的一大特色操作。Linux下万物皆文件,您可以用fdisk操作/dev/sda这个设备文件,但是您无法直接读取硬盘里存储的文件,需要把/dev/sda挂载在/mnt目录下,挂载之后才能进行读写操作。

:挂载mount听起来很抽象,能否打个比方?
:硬盘的存储格式和Linux的文件系统是不同的,挂载就是把硬盘里面的文件存储表读到Linux文件系统里。比如有的图书馆用很高的书架,需要搬梯子够最上面的书;有的图书馆用很矮的书架,只有一人高。不同的书架,就是不同的格式化方法,比如NTFS,ext4;图书馆用的图书管理系统类似Linux文件系统,不管你用什么书架,怎么摆,这本书的编号都是按照中图法固定的。挂载就是把不同的书架都纳入到相同的图书管理系统下管理。

:/dev/sda2一定要挂载到/mnt目录下吗?
:不一定,你可以挂载到任何已经存在的目录下面,但挂载/dev/sda后这个目录后,目录下原有的文件就不能访问了。如果挂载到/home,那么对/home所有的读写操作实际都映射到对/dev/sda2进行,原先/home中存储的内容反而无法读写了。如果想要读写,必须unmount。为了管理挂载的文件,Linux专门准备了/mnt用于挂载各类设备文件。现在Ubuntu支持U盘的热拔插,要是以前得经过如下操作:

mkdir /mnt/usb #在/mnt下建立目录用于挂载U盘
mount /dev/sdb /mnt/usb #假设U盘的盘符是sdb
unmount /dev/sdb /mnt/usb #使用完毕后解挂U盘

swap分区是不需要挂载的,因为我们不会对swap进行读写操作。将/dev/sda2挂载到/mnt目录下,这样我们往/mnt写入入数据就等于往新系统的/里写入数据。

mount /dev/sda2 /mnt 

记得不要挂载错了盘符。挂载是为了往/dev/sda2里写入系统文件,后面还要通过genfstab生成文件表,那时候会自动识别哪里是系统盘,哪里是swap。


4. installation 正式安装

  • select the mirrors配置下载源
    我们在Windows上如何下载软件呢?第一种,通过腾讯软件管家之类的管家类软件下载,Ubuntu上也有类似的软件管家;第二种,在华军软件园等软件下载网站下载,Linux上的软件下载大部分都是类似这种形式,不过这样的软件下载地址叫软件源,而且是无广告、无插件、无盗版的;第三种,在软件的官网上下载。Linux也会遇到类似的情况,有些软件我们想下载源码进行编译,可以到软件官网上去找。
    注意 ,相当一部分Linux都是没有图形界面的,完全工作在命令行下,所以第一种、第三种这种依赖图形界面的下载方法并不主流,最万能的是通过包管理工具从软件源下载。Arch Linux使用的包管理软件叫pacman,它类似于一个命令行的软件管家,可以下载、安装、升级、卸载系统中的软件。pacman会从镜像地址列表 /etc/pacman.d/mirrorlist 寻找可用的下载地址。mirrorlist里有上百个源的地址,pacman会按照从上到下的顺序使用,所以我们应该把速度最快的源调到上面。国内访问速度最快的源当然是国内的源,比如清华、科大、阿里云、163等。/etc/pacman.d/mirrorlist里每一个源的格式是两行,一行国家名,一行地址:
## China
Server = http://mirrors.163.com/archlinux/$repo/os/$arch

有的安装教程说找5个China的源,还有工具可以根据访问情况自动把mirrorlist的源进行排序。作为年轻人的第一套Linux,我觉得可以先不折腾,直接把清华源、科大源、阿里源调到最上面就行了。2个源就绰绰有余了,互为补充;1个源肯定是不够的,难免有些包清华的源没有及时更新,如果是访问下面德国、荷兰的源就会很慢;再多也只是获取心理上的安全感和满足感。修改mirrorlist需要基本的vim操作。

  • install essential packages 安装必要的包
    Arch的安装是高度自定义的。给这个新系统里安装软件的工具是pacstrap,官方文档推荐安装的是3个包:
pacstrap base linux linux-firmware

base是Linux最基本的工具集,里面只有20多个常用的包;
linux是linux的最新kernel。Arch的kernel更新以激进著称,永远跟上最新版本。linux的kernel前脚更新,Arch后脚就给你推送最新的kernel。目前Arch的kernel版本是5.6,要知道,还有相当多的Linux发行版用的是3.x时代的kernel。
linux-firmware是常用的驱动合集。
如果您在虚拟机中安装,这三个包至少可以让Arch Linux系统运行起来。base肯定是不够的,你至少还需要一款文本编辑器、一款网络管理软件、一个文件管理软件,才能保证Arch的基本使用,所以顺手安装以下软件:

pacstrap base linux linux-firmware vim dhcpcd netctl networkmanager

这个过程需要从软件源下载大量数据,对网络要求较高。如果你甚至要安装一个图形界面,那么下载的数据可能要在1G往上了。即便如此,这样的安装包也比Windows要小很多。

问:可不可以不装linux这个包?
答:可以,linux这个包用的是kernel.org的kernel。由于Linux是开源的,这个世界上有不同的kernel。当然了,由于kernel维护的工作量很大(基本上=windows操作系统的开发和维护量),所以kernel并不是很多,但是你仍然可以选择非kernel.org的kernel。

问:可不可以不装linux-firmware这个包?
答:可以,linux-firmware相当于一个万能驱动的包。如果你知道哪几样驱动可以保证你的电脑基本运行,您可以手动安装几个驱动而未必要安装这个包。前提是您知道需要安装哪些驱动。

base这个包里到底都有哪些软件?
arch所有包的内容都可以在archlinux.org里查到,直接看包里的源码

pkgname=base
pkgver=2
pkgrel=2
pkgdesc='Minimal package set to define a basic Arch Linux installation'
url='https://www.archlinux.org'
arch=('any')
license=('GPL')
depends=(
  # very very base
  'filesystem' 'gcc-libs' 'glibc' 'bash'

  # POSIX tools
  'coreutils' 'file' 'findutils' 'gawk' 'grep' 'procps-ng' 'sed' 'tar'

  # standard linux toolset
  'gettext' 'pciutils' 'psmisc' 'shadow' 'util-linux' 'bzip2' 'gzip' 'xz'

  # distro defined requirements
  'licenses' 'pacman' 'systemd' 'systemd-sysvcompat'

  # networking, ping, etc
  'iputils' 'iproute2'
)
optdepends=('linux: bare metal support')

可以看到几个很熟悉的名字,bash,grep,gawk,sed,tar,pacman,gzip等等。

问:有没有比最小安装方案还小的安装方案?
答:有,那就是不安装。


5. configure system配置系统
经过或许不漫长的下载和安装后,Linux系统文件已经安装在/mnt也就是/dev/sda2也就是硬盘的系统分区里了。

  • 生成fstab。file system table,类似于Windows上的分区表,在操作系统启动的时候,告诉引导程序swap在哪个分区,/在哪个分区等等。
genfstab -U /mnt >> /mnt/etc/fstab

gen,generate,生成。U这个参数是指用uuid来标记分区,也可以换成L,label,用sda1,sda2这样的标签来标记分区。生成成功后检查/mnt/etc/fstab是否成功生成,如果生成失败需要重新生成一下。

cat /mnt/etc/fstab #生成成功的话会显示文件内容
  • arch-chroot 以root的身份进入新系统。
    最重要的两件事:
    1 设置root的密码,同时设置普通账户;
    2 安装引导程序,比如grub。现在我们是通过archiso的chroot进入新系统的,如果没有安装引导,我们是无法开机时进入系统的;
    3 其他可以但没必要的配置,比如配置时区,配置地区,配置键盘方案。这些都可以进入系统后再配置。
arch-chroot /mnt

使用这个命令后,便以root用户身份进入了安装在/mnt的新系统中。

passwd root #给root用户设置密码
useradd -m newman #创建newman新用户
passwd newman #为新用户设置密码

以后重启就可以用newman这个用户名来登录。为了方便安装软件,我们需要给newman设置sudo权限,但是Arch此时是没有安装sudo的。
安装sudo

pacman -S sudo

sudo的配置文件在/etc/sudoers中。在配置文件中添加一行:

newman ALL=(ALL) ALL

你说配置文件在/etc/sudoers中,要是你打错了字母,或者我看错了字母怎么办?是不是就找不到这个配置文件了?
的确如此,在互联网上找资料,很难保证作者不会打错字,尤其是一串很长的命令,所以最靠谱的方法就是自己学会找配置文件。/etc下面是Linux的各种配置文件,假设我们不知道sudo的配置文件到底是哪个,但是我们相信sudo的配置文件应该是和sudo有关的,比如sudoer,sudoers,sudo.conf等等。这时候通过ls /etc | grep "sudo"去筛选出所有和sudo有关的文件,再根据文件的命名去找准确的配置文件名。

配置文件里修改的内容如果你写错了怎么办?比如多写了一个空格,或者大小写写错了,这是一个很容易犯的错误。
这样的笔误的确很常见。修改配置文件最好的办法就是按照配置文件里原有的格式修改。您用vim打开配置文件后,就会看到原来的配置文件里面已经有了一行root ALL=(ALL) ALL,参照着root用户的方案在下面追加一行就可以了。

安装引导程序grub,同时配置grub。grub是Linux里最常用的引导程序。

pacman -S grub
grub-install -o /boot/grub/grub.cfg

这个时候,您将拥有一个只有命令行的archlinux系统,并且可以newman这个用户名登录。您可以重启了,但是在重启之前需要再检查两件事:

  • grub,grub-mkconfig执行了吗?
  • vim,dhcpcd,netctl安装了吗?

哎呀,我忘记安装grub了,怎么办?
现在发现还来得及,请安装grub。没有安装grub或其他引导程序,重启还是进入安装光盘里的root@archiso。

不用grub来引导可以吗?
当然可以,可以用其他引导程序。引导管理程序就是在操作系统没有接管硬件之前,告诉主板去哪里找到操作系统,并请操作系统出面接手硬件管理工作。您可以安装其他引导程序,比如更加古老原始的LILO以及syslinux,或者在Mac上为双系统准备的Clover,但是用grub肯定不会错。全球30亿人在用的产品未必是最好的,但是绝对不差。

我安装了grub,但是忘记了grub-mkconfig,怎么办?
在这种情况下重启,您会进入一个空的grub引导程序,但是这个grub并不知道该到哪里引导操作系统。grub是一个命令行工具,输入exit退出grub,这时候系统会返回安装光盘的引导画面。重新进入root@archiso,完成配置操作。

mount /dev/sda2 /mnt
arch-root /mnt
grub-mkconfig -o /boot/grub/grub.cfg

以后想通过安装光盘修复原有的操作系统,只需要mount挂载和arch-root这两步,就可以修复操作系统里的文件了。在root@archiso里通过arch-chroot /mnt进入系统,使用体验和你待会重启以后的体验是差不多的。您可以测试前面安装的vim,sudo,dhcpcd等工具是否成功安装了。如果待会重启发现Arch无法联网,又没有任何网络配置工具,那会是一件非常尴尬的事情。您还得通过启动光盘进入root@archiso。
简单总结一下全新硬盘中BIOS+MBR安装最新Arch的过程:

  1. 硬盘分区(fdisk),分出/和swap
  2. 分区格式化(mkfs.ext4,mkswap,swapon)
  3. 挂载分区(mount)
  4. 修改Pacman为国内源(选3个China的源放在最上面)
  5. 下载最新的系统安装包及工具软件(pacstrap)
  6. arch-root /mnt进入系统
  7. passwd root并配置其他用户
  8. 安装grub,配置grub
  9. 生成文件分区表(genfstab)
  10. reboot

周末不上班,很多人有比较大块的时间去完成一个项目,比如重新收拾布置房间,做一个手工,再比如安装体验一次Arch Linux,这样的文化称之为weekend project。对于学习Linux,Arch Linux是一次很棒的体验。您可以在虚拟机里反复重新安装配置Arch Linux,每次回答一些以前提出的疑问。年轻人第一套Linux发行版,祝您旅途愉快。

你可能感兴趣的:(年轻人的第一套Linux系统:献给ArchLinux)