好長(zhǎng)時(shí)間都沒(méi)有更新自己的博客了,我簡(jiǎn)單翻閱了一下自己的更新記錄,上一次更新好像還是在5月份左右,距今也有快半年,這半年也是遇到了很多事情,有不好的,也有好的。這半年我對(duì)在日常生活工作中使用Linux系統(tǒng)產(chǎn)生了一些興趣,從零開(kāi)始折騰這一系列的內(nèi)容,主要從安裝、配置、以及嘗試各種軟件來(lái)取代Windows的主導(dǎo)地位,也產(chǎn)生了一些心得,這里我想分幾篇博客來(lái)聊聊我是如何慢慢使用arch Linux 來(lái)替代以前的Windows機(jī)器
為何選擇arch Linux
我本身有一臺(tái)6年前買(mǎi)的聯(lián)想的筆記本,隨著每次系統(tǒng)的更新,也變得越來(lái)越卡了,終于有一點(diǎn)我忍不了想著要不退回到windows 7吧,windows 10這臺(tái)機(jī)器已經(jīng)有點(diǎn)不行了。恰巧我最近在看一本關(guān)于計(jì)算機(jī)發(fā)展史的書(shū),書(shū)中提到自由軟件運(yùn)動(dòng),那種運(yùn)動(dòng)有一種人人為我,我為人人的理想主義色彩,我想既然不能編寫(xiě)自由軟件造福一方,至少應(yīng)該享受自由軟件帶來(lái)的好處,而且國(guó)內(nèi)經(jīng)常爆出各種軟件竊取用戶(hù)隱私的新聞。何不趁此機(jī)會(huì)轉(zhuǎn)移到自由軟件陣營(yíng)呢?說(shuō)做就做,自由軟件的基礎(chǔ)自然是需要一個(gè)自由的操作系統(tǒng),Linux是目前使用最為廣泛的自由操作系統(tǒng)。在看了各種Linux發(fā)行版本之后我決定使用arch Linux,主要有以下幾個(gè)原因:
- 更新方式比較激進(jìn),arch Linux采用滾動(dòng)更新的方式,這意味著用戶(hù)能享受最新的軟件版本,當(dāng)然過(guò)激的更新行為會(huì)導(dǎo)致一些問(wèn)題,比如常見(jiàn)的滾掛。我自認(rèn)為我不缺少動(dòng)手能力,這個(gè)我有信心能自己解決
- arch Linux 豐富的軟件源使它能夠安裝其他發(fā)行版Linux無(wú)法安裝的軟件
- 豐富的wiki文檔,你能遇到的問(wèn)題幾乎都可以在里面找到答案
- 最小化安裝,arch Linux自身是最精簡(jiǎn)的系統(tǒng),幾乎精簡(jiǎn)到不能再精簡(jiǎn)。因此比起其他發(fā)行版本的Linux來(lái)說(shuō),它提供更高自由度的可配置性。
- 安裝困難,我一直覺(jué)得對(duì)于自己專(zhuān)業(yè)內(nèi)的事情,要做就做最困難的,既然它的安裝使用最為困難,那我就用它,當(dāng)徹底征服了這一塊內(nèi)容,帶來(lái)的成就感是無(wú)法比擬的。而且熟悉了它的安裝過(guò)程,又例如提高對(duì)Linux的認(rèn)識(shí)
基于上述幾點(diǎn)理由,我開(kāi)始了漫長(zhǎng)的折騰之路
arch Linux 安裝
安裝主要參考 arch wiki 好在文檔大部分都有中文版本,對(duì)于英語(yǔ)不好的人來(lái)說(shuō)閱讀起來(lái)也不會(huì)有過(guò)多的阻礙
制作U盤(pán)啟動(dòng)項(xiàng)
首先去官方指定的鏡像站下載安裝包,然后使用相應(yīng)的工作制作U盤(pán)啟動(dòng)項(xiàng),windows上我使用的是rufus、Linux或者mac上直接使用如下命令寫(xiě)入到U盤(pán)
sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync
上述命令的含義是制作一個(gè)鏡像文件,源文件內(nèi)容保存在if參數(shù)所指定的位置,輸出到 of 所指定的位置, status=progress 表示現(xiàn)實(shí)制作進(jìn)度, oflag=sync表示以同步的方式寫(xiě)入,即所有數(shù)據(jù)寫(xiě)入完成命令結(jié)束,而不是剛寫(xiě)入就結(jié)束
需要注意的是,sdx 是u盤(pán)在系統(tǒng)中的命名,一般插入U(xiǎn)盤(pán)后,在shell上使用fdisk -l可以看到,另外有的U盤(pán)可能經(jīng)過(guò)分區(qū),顯示出下面還有sdx1、sdx2等分區(qū),要寫(xiě)到sdx,而不是sdx1或者sdx2
將U盤(pán)插入待裝機(jī)的電腦上,進(jìn)入bios調(diào)整啟動(dòng)順序和安全設(shè)施,如果使用uefi方式啟動(dòng)的話(huà),需要調(diào)整啟動(dòng)方式為uefi only 而不是 legacy/csm
接下來(lái)就可以啟動(dòng)電腦,進(jìn)入arch Linux的安裝界面了

聯(lián)網(wǎng)設(shè)置
進(jìn)入到安裝界面的第一步需要連接上網(wǎng)絡(luò),這里使用 iwctl 進(jìn)行網(wǎng)絡(luò)連接配置
iwctl #進(jìn)入交互式命令行
device list # 列出設(shè)備名,比如無(wú)線(xiàn)網(wǎng)卡一般叫做 wlan0
station wlan0 scan #掃描Wi-Fi
station wlan0 get-networks #列出掃描到的Wi-Fi名稱(chēng),例如要連接到esi-0這個(gè)Wi-Fi
station wlan0 connect esi-0 #嘗試連接,這個(gè)時(shí)候需要輸入密碼
成功后就連上互聯(lián)網(wǎng)了,可以使用 ping archlinux.org 來(lái)試試網(wǎng)絡(luò)是否成功連上
更新系統(tǒng)時(shí)間
后續(xù)在訪問(wèn)https之類(lèi)的站點(diǎn)時(shí)會(huì)驗(yàn)證客戶(hù)端和服務(wù)器的證書(shū)和時(shí)間的,有時(shí)候時(shí)間不統(tǒng)一,在訪問(wèn)時(shí)可能會(huì)報(bào)無(wú)效的證書(shū)之類(lèi)的錯(cuò)誤
使用命令
timedatectl set-ntp true
更新之后可以使用 timedatectl status 檢查服務(wù)狀態(tài)
磁盤(pán)分區(qū)與格式化
根據(jù)arch wiki上的說(shuō)法,采用uefi的啟動(dòng)方式時(shí),至少需要一個(gè)boot或者efi 分區(qū)作為efi系統(tǒng)分區(qū)(大小不能小于280M)、一個(gè)根分區(qū)。
這里假設(shè)硬盤(pán)大小為100G,我采用如下的分區(qū)方案
- efi 分區(qū)
/efi1G - 根分區(qū)
/40G - 用戶(hù)主目錄
/home剩余全部空間,越大越好
跟windows 做類(lèi)比的話(huà),根分區(qū)相當(dāng)于c 盤(pán),主要用來(lái)裝系統(tǒng)相關(guān)的內(nèi)容,用戶(hù)分區(qū)相當(dāng)于D盤(pán)或者其他盤(pán),用來(lái)放用戶(hù)數(shù)據(jù),后續(xù)如果系統(tǒng)掛了,重裝系統(tǒng)的話(huà),不會(huì)破壞用戶(hù)目錄的內(nèi)容,甚至如果用戶(hù)目錄在其他物理盤(pán)上,后面換機(jī)器了直接將這塊盤(pán)掛載到其他機(jī)器上,數(shù)據(jù)直接就能用了
首先將磁盤(pán)分區(qū)表轉(zhuǎn)化為gpt類(lèi)型
lsblk #顯示分區(qū)狀況
parted /dev/sdx #執(zhí)行parted命令, 進(jìn)行磁盤(pán)類(lèi)型變更
(parted)mktable #輸入mktable 修改磁盤(pán)分區(qū)表類(lèi)型
new disk label type? gpt #輸入gpt,修改分區(qū)表為gpt類(lèi)型
quit #最后退出parted交互式命令
接下來(lái)使用cfdisk 命令對(duì)磁盤(pán)進(jìn)行分區(qū)
cfdisk /dev/sdx #使用cfdisd對(duì)磁盤(pán)進(jìn)行分區(qū)

free space 表示未分區(qū)的部分,上下鍵用來(lái)選擇區(qū)域,左右鍵用來(lái)選擇操作
先選擇new新建分區(qū),然后輸入大小,最后回車(chē),重復(fù)幾次這個(gè)操作,按照之前定義的大小來(lái)完成分區(qū)

記得完成之后,將選項(xiàng)調(diào)整到wirte 在退出前將分區(qū)寫(xiě)入到磁盤(pán)。完成之后使用
fdisk -l
查看分區(qū)

接下來(lái)格式化磁盤(pán)中的各個(gè)分區(qū)
- efi 分區(qū)格式化為 vfat 格式
- 根分區(qū)和用戶(hù)分區(qū)格式化為 ext4格式
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda3
mkfs.vfat /dev/sda1
接下來(lái)將磁盤(pán)掛在到當(dāng)前系統(tǒng)的文件目錄下,使磁盤(pán)能正常被系統(tǒng)訪問(wèn)到
mount /dev/sda2 /mnt
mkdir /mnt/efi
mkdir /mnt/home
mount /dev/sda1 /mnt/efi
mount /dev/sda3 /mnt/home
系統(tǒng)安裝
折騰了這么多東西,終于要開(kāi)始正式安裝系統(tǒng)了,arch linux提供了一個(gè)腳本用來(lái)自動(dòng)安裝系統(tǒng)內(nèi)核
pacstrap /mnt base base-devel linux linux-firmware
這句命令可以幫助我們將系統(tǒng)所需要的包安裝到/mnt 這個(gè)目錄也就是磁盤(pán)上
等待一段時(shí)間,安裝就完成了,先別著急重啟,還有一些內(nèi)容需要安裝
pacstrap /mnt dhcpcd vim sudo networkmanager # dhcpcd networkmanager 是網(wǎng)絡(luò)相關(guān)的軟件包,后期缺少可以通過(guò)網(wǎng)絡(luò)下載,聯(lián)網(wǎng)軟件沒(méi)有的話(huà)只能白瞎
系統(tǒng)自身配置
到這里基本已經(jīng)完成了安裝部分的工作了,接下來(lái)要進(jìn)行的就是重啟前的基本配置了
生成磁盤(pán)分區(qū)的記錄文件
genfstab -U /mnt >> /mnt/etc/fstab
生成之后可以使用cat或者 vim 之類(lèi)的命令復(fù)查一下生成的是否有誤

接下來(lái)切換到新安裝的系統(tǒng)上
arch-chroot /mnt
在新系統(tǒng)中先在/etc/hostname中設(shè)置主機(jī)名,在文件中輸入你想要的主機(jī)名,例如叫 arch
接下來(lái)在文件/etc/hosts中設(shè)置與其匹配的條目,可以加入以下內(nèi)容
127.0.0.1 localhost
::1 localhost
127.0.1.1 arch.localdomain arch
接著設(shè)置時(shí)區(qū),在/usr/localtime 下用 /usr 中合適的時(shí)區(qū)創(chuàng)建符號(hào)連接
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
將系統(tǒng)時(shí)間同步到硬件時(shí)間
hwclock --systohc
接下來(lái)進(jìn)行本地化操作,程序如果需要本地化文件,都需要依賴(lài) locale,它規(guī)定了地域、貨幣、時(shí)區(qū)日期的格式、字符排列方式和本地化標(biāo)準(zhǔn)。需要在這兩個(gè)文件中設(shè)置 locale.gen 與 locale.conf
編輯 /etc/locale.gen 然后去掉 en_US.UTF-8 UTF-8 和其他需要的地區(qū)前的注釋?zhuān)缱鳛橹形挠脩?hù)可以去掉 zh_CN.UTF-8 UTF-8 以顯示中文
編輯完成之后使用如下命令生成 locale
locale-gen
在/etc/locale.conf 文件中指定系統(tǒng)使用的語(yǔ)言,這里推薦使用英文,否則在出錯(cuò)的時(shí)候可能會(huì)出現(xiàn)中文亂碼,不便與排錯(cuò)
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
設(shè)置root 密碼
passwd root
根據(jù)cpu的不同,安裝對(duì)應(yīng)的微碼,以確保處理器能穩(wěn)定運(yùn)行
pacman -S intel-ucode #intel
pacman -S amd-ucode #amd
安裝引導(dǎo)程序
為了能在機(jī)器加電之后正常找到Linux所在位置,需要安裝引導(dǎo)程序,來(lái)引導(dǎo)操作系統(tǒng)的啟動(dòng)。
pacman -S grub efibootmgr # 使用grub做引導(dǎo)程序,efibootmgr 是uefi方式啟動(dòng)需要的
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=arch #將啟動(dòng)項(xiàng)取名為arch 啟動(dòng)類(lèi)型為efi的64位系統(tǒng) 系統(tǒng)啟動(dòng)位置在 /efi
接下來(lái)可以稍微對(duì)啟動(dòng)配置做一些修改,編輯 `/etc/default/grub` 文件,去掉 `GRUB_CMDLINE_LINUX_DEFAULT` 一行中最后的 `quit` 參數(shù),同時(shí)把`log level` 的數(shù)值從3改到5,這樣是為了后續(xù)如果出現(xiàn)系統(tǒng)錯(cuò)誤方便排查。同時(shí)加入 `nowatchdog` 參數(shù),這樣可以顯著提升開(kāi)關(guān)機(jī)速度
修改完成之后生成grub所需的配置文件
grub-mkconfig -o /boot/grub/grub.cfg
這樣就完成了安裝
exit
umount -R /mnt
reboot
一切順利的話(huà),重啟之后應(yīng)該就能進(jìn)入系統(tǒng)了。
新系統(tǒng)基礎(chǔ)配置
網(wǎng)絡(luò)配置
之前我們下載了與網(wǎng)絡(luò)相關(guān)的兩個(gè)工具networkmanager和dhcpcd,用來(lái)管理網(wǎng)絡(luò)和dhcp自動(dòng)分配IP地址
systemctl enable --now NetworkManager # 啟動(dòng)networmmanager服務(wù)
nmcli device wifi list # 查看Wi-Fi列表
nmcli device wifi connect ssid password password #連接Wi-Fi,ssid表示W(wǎng)i-Fi名,后面一個(gè)password表示連接wifi的真實(shí)密碼
網(wǎng)絡(luò)連接成功之后,使用pacman將系統(tǒng)更新到最新版本
pacman -Syyu
創(chuàng)建非root用戶(hù)
為了系統(tǒng)安全防止自己某天抽風(fēng)不小心輸入類(lèi)似 rm -rf / 之類(lèi)的危險(xiǎn)命令,平時(shí)最好使用非root登陸。 對(duì)于系統(tǒng)操作使用sudo來(lái)提升權(quán)限
useradd -m -G wheel -s /bin/bash arch
創(chuàng)建一個(gè)名為arch的用戶(hù),將用戶(hù)組歸屬到wheel中,同時(shí)創(chuàng)建用戶(hù)目錄, 并且指定shell使用bash
接下來(lái)使用 passwd arch 來(lái)修改用戶(hù)密碼
由于系統(tǒng)中并沒(méi)有安裝vi,所以默認(rèn)會(huì)使用vi命令的一些命令都會(huì)失效。所以需要將 vi 鏈接到 vim
ln -sf /usr/bin/vim /usr/bin/vi
使用visudo 將文件中 #%whell ALL=(ALL) ALL 這行的注釋去掉
使用su arch 將當(dāng)前用戶(hù)切換到arch??梢允褂妹?code>sudo pacman -Syyu來(lái)更新系統(tǒng),同時(shí)測(cè)試一下輸入用戶(hù)密碼之后能否執(zhí)行一些root命令
設(shè)置交換文件
在桌面環(huán)境中,交換分區(qū)或文件用來(lái)實(shí)現(xiàn)休眠(hibernate)的功能,即將當(dāng)前環(huán)境保存在磁盤(pán)的交換文件或分區(qū)部分。除此之外,某些特定軟件需要 swap 才可以正確運(yùn)行。交換文件與分區(qū)性能相同,且交換文件更為靈活,可隨時(shí)變更大小,增加與刪除
dd if=/dev/zero of=swapfile bs=1M count=4096 status=progress #設(shè)置4G的交換分區(qū),大小根據(jù)系統(tǒng)的實(shí)際內(nèi)存來(lái)決定,一般最好略大于物理內(nèi)存
chmod 600 /swapfile
mkswap /swapfile # 格式化swap文件
swapon /swapfile # 啟用swap文件
最后往/etc/fstab中追加如下內(nèi)容
/swapfile none swap defaults 0 0
開(kāi)啟32位軟件庫(kù)支持與ArchLinuxCN庫(kù)的支持
為了系統(tǒng)的穩(wěn)定,官方關(guān)閉了32位軟件以及aur軟件庫(kù),但是僅僅只依靠官方源中的軟件時(shí)不夠用的,這里我們要打開(kāi)這兩個(gè)庫(kù)
vim /etc/pacman.conf
去掉[multilib]一節(jié)中兩行的注釋?zhuān)瑏?lái)開(kāi)啟 32 位庫(kù)支持。
在文檔結(jié)尾處加入下面的文字,來(lái)開(kāi)啟 ArchLinuxCN 源。
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

執(zhí)行 sudo pacman -Syyu 更新pacman數(shù)據(jù)庫(kù)
然后需要安裝 archlinuxcn-keyring 包以導(dǎo)入 GPG key
sudo pacman -S arhclinuxcn-keyring
有時(shí)候因?yàn)槊荑€環(huán)的問(wèn)題,導(dǎo)致這一步安裝報(bào)錯(cuò),可以依次執(zhí)行下面的命令
sudo pacman -syyu
sudo pacman -S haveged
sudo pacman -Syu haveged
sudo systemctl start haveged
sudo systemctl enable haveged
sudo rm -fr /etc/pacman.d/gnupg
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman-key --populate archlinuxcn
然后再重新安裝,即可解決問(wèn)題
最后安裝 yay 用來(lái)下載archlinuxcn庫(kù)中的軟件
結(jié)尾
至此,已經(jīng)完成了對(duì)系統(tǒng)的安裝到基礎(chǔ)配置,現(xiàn)在已經(jīng)有了一個(gè)基本可用的操作系統(tǒng)了,但是目前系統(tǒng)仍然只有一個(gè)基本的黑框框,作為日常使用還遠(yuǎn)遠(yuǎn)不足,至少還需要一個(gè)桌面環(huán)境,后面的博文會(huì)陸續(xù)介紹我是如何安裝并配置一個(gè)基本的桌面環(huán)境。最后到一個(gè)基本可用于日常生活和工作中的操作系統(tǒng)。
<hr />