Arch! 從安裝開始

Empаthy發表於2021-04-28

Arch! 從安裝開始

事實上Arch的安裝Arch Wiki Installation Guide,已經非常詳細了

但是初次面對這些東西時肯定非常迷茫,根本不知道這些東西是在幹嘛?為什麼要這麼幹?

但是我可以跟你保證這一定不會很難

我之所以覺得不難並不是因為我有多麼會裝(系統

事實上我就安裝過兩次Arch

第一次是什麼也不懂的時候

第二次是裝了固態想遷移系統的時候

但是每次安裝完我基本都忘了要怎麼安裝了,下一次安裝依然需要看Arch Wiki一步一步來

我覺得並不需要把安裝命令像背八股一樣背下來

我之所以覺得不難,更多是因為我看得懂怎麼安裝

我知道它在幹什麼

你覺得難大概是因為你根本不知道它在做什麼,只有一頭霧水

那麼這篇就是大概解釋每一個操作背後的東西,希望可以幫助你更加了解Arch的安裝

所以十分羅嗦如果你是想找一個安裝記錄作為參考那麼顯然這篇博文不是你想要的。。。

寫在一切之前

第一篇博文就用來佈道咯-。-

不過我一直不喜歡討論Linux/Windows or 不同發行版之間的好壞之類的東西

不同的人總是會有不同的看法

我覺得你用一個你覺得順手的工具就行

不同的發行版/系統就跟不同的手機品牌一樣

你可能會在某一個方面被吸引但是同樣也要承受它的其他缺點

但是你最終乾的還是那些事

所以沒必要在這方面進行過多討論(雖然但是不管你使用什麼發行版都可以試試ArchWiki

我也不會把細節過多聚焦在如何安裝上

例如我直接跳過了怎麼製作usb映象

因為這些東西隨便找個教程都能翻到

你在B站甚至可以看到視訊

你對著視訊一個命令一個命令敲也能順利安裝下來

我更多的還是針對新手,想講講Arch為什麼需要這樣安裝

也就是其他發行版下一步下一步的背後到底是在幹什麼

所以不用擔心,基本不需要Linux基礎

基本所有用到的命令都會解釋一下

如果有一點點Linux使用基礎可能會提升你的閱讀體驗

當然如果你基本會使用Linux了,那可能會破壞你的閱讀體驗

我希望能給那些對Arch感興趣但網上清一色評價Arch難裝而被勸退Arch的新手一點幫助

Arch本就是使用者導向的系統,親民是Arch的最大特性

目前現有的教程顯然對剛接觸Linux的人還是有點難度

所以就補全一下這方面的東西吧

最後,希望這篇博文對你有所幫助

你看到了什麼?

如果你成功製作了usb映象並選擇啟動到了Live環境,你看到了什麼?

醜陋的大黑框??

它可以被看作是Linux的PE

但其實它比PE要強很多

因為Live環境本身就是一個完整的Linux環境

而且還內建一些工具幫助你把安裝Arch到本機上

未來你可能還需要用它來幫你完成修復系統、重置root密碼、給軟體包降級之類的操作(具體請看ArchWiki裡的chroot詞條,以後有機會的話會水一篇

當然我再怎麼說你也不一定會喜歡這個醜陋無比的傢伙,肯定想著為什麼Arch官方不願意提供一個圖形化的LiveCD?

事實上我之前提到過Live環境本身就是一個完整的Linux環境,所以你其實可以根據archiso自己定製一個

當然我知道你可能不會定製,但是不用擔心

因為社群已經有不少定製的Live環境了,有些甚至直接演化成了一個基於Arch的發行版,例如Archcraft最初便只是一個定製的archiso

所以你現在看到的其實就是一個沒有桌面環境以及圖形服務的完整的ArchLinux系統,它能幫助你把Arch安裝到電腦上

連線網際網路

如果你是用網線進行的連線的那麼恭喜你,這一步什麼事都不用幹

如果你需要用wifi上網則需要使用iwctl這個工具

這個工具的使用我也不展開說,但是依舊可以告訴你需要做那些事,首先iwctl需要使用命令來使用

那麼我們需要連線到網路,要連線網路首先就需要掃描周圍的wifi,但是你直接輸入scan命令是不行的

因為他不知道你要對那個網路卡操作,所以首先你要使用命令看看有那些裝置

如果你只有一個無線網路卡那麼裝置名應該是wlan0

這下你已經基本掌握了iwctl的使用方法

至於具體的命令你不知道,而我也早忘了

所以當我們想使用的時候為什麼不查下wiki或者是百度呢?

因為你可能就用這麼一次,也沒必要記住吧?

連線完後你需要測試一下是否成功連線到到網路

可以使用廣為人知的ping命令,當然也可以使用curl,wget...

但我們的目的都是驗證一下我們有沒有成功連上網路

ping通說明網路連線正常,按ctrl+c退出

然後你如果是按wiki來的,那麼接下來wiki上有個同步系統時間的操作

timedatectl set-ntp true

其實在Live環境中我不知道這個操作有什麼必要性

基本不會影響到我們的系統安裝,例如我這次的安裝便沒有進行這個操作

設定分割槽

這個也是必不可少的一步

Linux基本都需要3個分割槽(建議這個順序作為待會兒劃分分割槽時的順序

EFI引導分割槽(你能不能開機,或者多系統時在開機介面能不能看到你的Arch就靠他了,但老式機使用MBR引導不需要這個分割槽,或者你已經有了也不需要建立EFI分割槽

SWAP分割槽,現在比較流行的是不用SWAP分割槽而是用SWAP檔案代替,我覺得沒什麼區別,在這裡不展開討論,好奇的話可以使用搜尋引擎詳細瞭解

根分割槽,Linux一般不會想Windows一樣分好幾個不同的盤,就跟你的手機一樣,Linux的儲存是一體的

那麼我們怎麼進行分割槽能?有兩個工具一個是fdisk一個是cfdisk

前者依靠命令操作,後者有一個圖形介面依靠上下左右和enter操作

但是跟你的習慣相反其實前者更好操作一點,因為或者的選項有太多相同型別

不去找別人安裝的教程然後看別人的圖操作很容易心裡沒底,而前者則是wiki上用的

只要知道在幹什麼就行,命令可以直接參考wiki上的操作

首先我們可能有多個硬碟

所以我們要看看我們的硬體名,方便後續操作

對指定的那個硬碟使用fdisk後

你會發現有兩塊命令

第一塊你自己讀就好了,什麼意思一目瞭然

第二塊其實是告訴你還沒有建立磁碟分割槽表(一般是新裝的硬碟或者是虛擬機器安裝會這樣,如果原來使用過刪了一部分空間安裝則不需要這個操作

現代的裝置一般選擇GPT分割槽表,關於各個不同的分割槽表區別感興趣自查

那麼怎麼建立分割槽表?這時你會發現括號裡寫著m for help

是的,其實之前的所有軟體都有help操作

所以你如果用過一次了下一次也不用再查wiki用內建引數來尋找提示就能幫助你進行操作了

例如這次他便提示我們只需要按下g然後敲下回車就能建立GPT分割槽表了

第一步就完成了,然後檢視wiki發現分割槽主要有兩個引數,一個是檔案系統,一個是大小

檔案系統是我們待會兒格式化時建立的,現在連分割槽都還沒建立

所以我們要建立三個大小不一樣的分割槽

分割槽大小根據wiki的推薦即可

怎麼分割槽顯然你可以在它的help裡看見是字母n

但是敲完字母n以後我估計你又不知道它在搞什麼名堂了

如果你遇到了Partition type,那麼選擇預設的主要分割槽即可

擴充套件分割槽顯然不是我們今天的目的

然後你可能會遇到Partition number這個是讓你給你的分割槽編號

這個我們也不需要要,直接回車讓它給你編就行

然後fdisk就會讓你選擇啟示扇區和終止扇區來進行磁碟分割槽

雖然很科學但顯然你也沒接觸過扇區這個概念

雖然可以百度然後換算來分割槽,但是我們其實還可以用更符合人類操作習慣的方式

就是像往常一樣制定分割槽大小劃分分割槽

怎麼做?

還是什麼也不輸入直接回車,第一個扇區會選擇你能劃分的最小扇區

然後選擇最後一個扇區的時候是可以用+/-操作的

指的是離你之前選擇的扇區的距離,後面加上K,M,G之類的字母則可以用大小來劃分

所以到這裡,使用fdisk劃分分割槽你也會了

所以現在應該也明白了為什麼要最後劃分根分割槽,因為可以直接敲回車,使用剩下的所以分割槽

至此分割槽工作結束

別忘了按w儲存退出fdisk,不然就會白忙活

那麼就要開始格式化分割槽了,也就是給分割槽適配它應該使用的檔案系統

這個按照

格式化分割槽按照Wiki的檔案系統,要求輸入wiki上寫好的兩行命令即可

當然EFI分割槽的格式化命令沒有給出

直接用fat格式就行

也就是使用以下命令

mkfs.fat /dev/*efi_partition*

格式化到此也就結束了

下面就是掛載磁碟了

掛載這個操作其實你經常用到,只不過你的桌面環境幫你把這一步完成了而已

例如你插入u盤,你必須掛載u盤才能對於u盤進行訪問讀寫

我們現在則相反,我們是在一個u盤裡的作業系統,我們需要把剛分好區格式化的硬碟掛載到我們現在載入的系統上進行讀寫

一般Linux用來掛載的目錄都是跟目錄下的mnt目錄,也就是mount的縮寫

我使用了cd也就是change directory的縮寫進行了更換目錄,更換到了/

是的其實第一個/不是一個分割符號,而是一個存在的目錄,是所有目錄的起始目錄

也就是我們一直所說的根目錄

那麼我們之前一直在那裡呢?

我們一直在根目錄下的root目錄裡

也就是/root下面

這個就是root使用者的家目錄

其他使用者的家目錄是/home/使用者名稱

家目錄類似Windows的User目錄,是存放使用者的配置檔案已經日常給類使用檔案的地方

假設我現在的使用者叫empathy

我的桌面是什麼目錄呢?

在/home/empathy/Desktop裡

家目錄實際上就是一個環境變數

環境變數就是可以以變數形式傳遞給系統或者應用的一些引數

例如path, 如果你在Windows下給gcc設定過環境變數你應該對它會有點印象

這個變數下的目錄就是當使用者要求系統執行程式時(命令本質就是系統自帶的基本程式

如果沒有給出這個程式的路徑,系統就會在path目錄下面尋找,並匹配執行

home這個變數我們也可以直接打出來看看(bash下變數使用$表示,有別於Windows的前後兩個%

看的非常清楚

那麼你應該對linux的目錄結構有了初步瞭解

瞭解了家目錄、根目錄以及通常用於掛載的目錄

所以可以開始掛載操作了

掛載所使用的命令就是mount非常直接沒有使用任何縮寫

我們先掛載一下根目錄

mount /dev/*root_partition* /mnt

掛載後大概長這樣

然後掛載一下efi目錄,掛載前先在/mnt下建立一個叫efi的資料夾

建立資料夾需要的命令是mkdir,make dirctory的縮寫

然後正常掛載即可

如果你用的是之前已有的efi分割槽那麼需要找一下,可以使用lsblk查詢

mkdir /mnt/efi
mount /dev/*root_partition* /mnt/efi

和硬碟相關的操作結束了

那麼折騰了半天硬碟,顯然應該往裡面寫入東西了

安裝

我們需要使用pacstrap往我們新系統的根目錄也就是掛載在/mnt的目錄安裝最基本的而系統

pacstrap是一個用來給你制定位置安裝一些基礎包的指令碼

我們現在安裝系統需要的基本軟體包就要用到他

如果你看了一個比較老的教程

那麼以往這個地方可能會有一步需要編輯/etc/pacman.d/mirrorlist這個檔案

並將這個操作稱之為「換源」

源簡單來說就是你下載東西用的網頁

但是顯然Arch是一個國外的發行版,所以我們在連線他預設的源是會遇到困難

但是不用擔心,國內有一些伺服器儲存了國外的源裡的東西,並不斷保持更新

就相當於在國內開了加分店,使你的連線更方便了

(我們一連入網就有個應用在後臺幫我們根據連線速度更換了映象源

「映象源」的概念如果不太懂還是建議使用搜尋引擎

上面的一切概念最後其實就是一行命令

pacstrap /mnt base linux linux-firmware

也可以不一樣,例如linux就可以替換成其他核心,詳細見wiki

或者你也可以自己安裝一些你需要的軟體包,例如一個終端下的文字編輯器

這三個包baselinuxlinux-firmware

分別是基礎軟體包,系統核心,以及常規硬體的韌體

顯然系統最基本的部分差不多弄好了

但是有個問題,就是我們雖然現在手動進行了掛載操作,但顯然重啟以後就沒了

但是我之前說過的儲存裝置需要掛載後才能讀寫

fstab檔案就負責幹這事兒

這個也很簡單按照wiki上的原封不動的打上去就行

genfstab -U /mnt >> /mnt/etc/fstab

>>其實就是輸出重定向,我們是把genfstab -U /mnt這條命令產生的內容輸出到了/mnt/etc裡的fstab檔案裡

-U這個引數就是使用UUIDs(通用唯一識別碼)作為原始檔標識的意思

然後我們指定了/mnt目錄告訴是為了告訴系統/mnt下的掛載就是我們要記錄的掛載情況

接下來就用到了之前提過一嘴的chroot操作切換根目錄

也就是說我們會切換到我們新安裝的系統上,使用arch-chroot /mnt命令

然後在新系統裡要進行一些基礎性的設定

設定

更改時區並同步硬體時鐘,不然會因為時間不同步而無法聯網

這兩步操作我也記不來

按wiki給的輸入即可

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

不要一直傻敲,還容易敲錯,用tab補全就行

然後就是本地化

這個地方需要用到文字編輯器

我們之前用pacstrap只下了三個必備的包

所以我們需要用pacman

pacman不同於pacstrap, pacman是一個給本地安裝軟體包的東西

這個概念可太易懂了,不就是App store嗎?

pacman有很多功能,我們目前只需要用它下載軟體包,傳遞-S引數即可

下面給出示例

pacman -S package1 package2 package3

這下你就學會了怎麼使用pacman下載軟體包了(其他使用方法請自行查閱

例如終端下的文字編輯器我喜歡使用vim,可以這麼下載pacman -S vim

如果你之前不瞭解vim那麼我建議你使用nano

nano的使用方法在你開啟nano後就有提示,我建議你自己讀一下

安裝好後去可以進行地區設定了

首先類似fstab, 地區的設定主要是這個檔案/etc/locale.conf

但是在建立並編輯這個檔案之前我們需要讓系統幫我生成一下基本的區域設定

使用locale-gen命令就能生成了,但是系統並不知道你需要的區域有那些

所以我們需要對它的生成進行指導,需要編輯/etc/locale.gen檔案

只需要把我們需要的區域設定前面的註釋去掉即可,shell中一切以#開頭的東西都會被當作是註釋(當然有一個特例,就是第一行以#!開頭的語句,感興趣可以自己瞭解

我們將來可能使用的區域設定以及相關變數主要是en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8

我們只需要把它們前面的#號刪掉即可

然後就可以使用locale-gen命令生成了

然後再往/etc/locale.conf寫入LANG=en_US.UTF-8(這裡如果你使用中文會導致tty亂碼,只能用英語

然後我們要設定一個主機名

需要寫入到/etc/hostname檔案裡

直接寫入你想要的名字就行,例如我寫的是mn1I(注意Linux是大小寫敏感的,mn1I和mn1i不一樣)

然後就是解析本地域名,像wiki上的那樣寫入hosts就行,不過注意中間的空白是tab製表符而非空格

這一步目前其實沒什麼用,但是後續在本地使用「web server」之類的東西就會出現問題了,就不展開細講了

然後就是設定root密碼

這個密碼忘了會有點麻煩,務必設定個你不會忘記的密碼

然後基本就安裝好了,但是如果你這是退出chroot環境重啟會有兩個問題

就是我們新系統沒有裝網路相關的包,意味著我們需要進入系統後進行安裝

但是進入系統後安裝軟體包的前提是我們有網路...所以會陷入一個迴圈

為了打破這個迴圈我們需要現在進行安裝

另一個則是我們沒有安裝起動器

所以現在重啟系統是沒辦法正確讀到我們新裝的系統的

所以我們還需安裝一個啟動器

啟動器需要安裝這兩個包grub,efibootmgr(當然你也可以不用grub,但目前grub應該是最受歡迎的起動管理器

當然如果你是多系統還需要使用os-prober幫你尋找適配其他系統,如果你有Windows系統還需要安裝ntfs-3g

因為Windows的檔案系統和Linux不一樣,不安裝這個包你就無法正常訪問使用ntfs檔案系統的分割槽

現在grub就在你的系統上了

但是這還不夠,因為開機讀取的不是你的系統分割槽,而是引導分割槽

所以我們需要用我們安裝好的grub工具把grub啟動器安裝到引導分割槽上

所以這個時候你去可以去ArchWiki看grub詞條,這也是Archwiki的強大之處了

不止是系統本身的東西,很多軟體包的使用都可以在Archwiki中查詢到

按照上面推薦的使用下面的命令就可以(把esp換成你的efi分割槽的位置,例如我是/efi,各個引數的含義其實很直白,具體的作用還請參考wiki

grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB

但是這只是安裝完成了而已

完成安裝之後,grub在每次啟動的時候載入配置檔案 /boot/grub/grub.cfg

所以我們還需要生成grub的配置檔案

grub-mkconfig -o /boot/grub/grub.cfg

然後就需要安裝聯網用的軟體包了,當然你也可以安裝其他需要使用的軟體包

例如base-devel裡是開發相關的基礎元件(gccmakesudo...都在這個包裡),不安裝也沒事,但是很多依賴都在這個包裡,建議現在就安裝上

不過你也可以進入新系統後安裝,必要的就是這兩個包dhcpcdwpa_supplicant前者主要是用於分配ip

後者使用來連線wifi的,如果你只用有線網可以只安裝前者

然後就基本告一段落了

你的系統安裝就完全結束了

我們只需要

至於圖形介面和桌面環境之類的東西也不會難倒你

不過就是使用pacman安裝軟體包而已

最後就只需使用exit推出chroot

umount 加上-a引數取消所有掛載

這一步有些分割槽不能取消掛載沒關係(能取消才怪了

你覺得不妥也可以先取消掛載 /mnt/boot然後再取消掛載/mnt也行

reboot重啟即可

最後

總結一下

其實說下來也就分為四類操作,有些操作需要交替執行

聯網->分割槽->安裝軟體包->配置

這下我想你應該知道安裝Arch大概都是在幹什麼了吧,Happy hacking

相關文章