Linux入門之一步一步安裝系統
1.1引言
為什麼是Gentoo?
在以往,學習Linux可以從安裝linux系統開始,但是現在Linux系統安裝變得越來越簡單,但是為了學習,我們必須挑一個有點兒挑戰性的linux發行版,Gentoo是一個安裝稍為麻煩的linux發行版本,正好適合我們來學習安裝系統。
Gentoo的安裝基本上是依賴網路的,因此在安裝前,我們必須保證我們的計算機能連線上網路。
我們用Vmware虛擬一臺計算機來安裝系統,這樣更方便學習和遊戲,在Linux下學習,在Windows下游戲,學習遊戲兩不誤。
1.2安裝前的準備工作
1. 下載vmware workstation
可以在這裡下載:http://www.vmware.com/cn/products/workstation/workstation-evaluation
2. 下載gentoo所需要的檔案
1. 啟動計算機所需要的啟動CD
[點選下載當前使用的啟動CD](http://distfiles.gentoo.org/releases/x86/autobuilds/20160621/install-x86-minimal-20160621.iso)
2. stage,stage的檔案檔案包含了安裝gentoo的基本環境,linux檔案目錄結構。
[點選下載當前使用的版本](http://distfiles.gentoo.org/releases/x86/autobuilds/20160628/stage3-i686-20160628.tar.bz2)
3. portage,是一個軟體檔案快照,是gentoo軟體包管理的倉庫目錄
[點選下載當前使用的portage](http://gentoo.osuosl.org/snapshots/portage-20160602.tar.bz2)
4. xshell 為了方便控制虛擬機器,我們需要一個終端模擬器,xshell正是我們所需
[在這裡可以下載到它](http://xshell.en.softonic.com/)
3. 知識點
(1). 我們下載的是基於x86架構的安裝包,在這裡我們可以學習到用什麼來區分架 構,例如:X86,SPARC, MIPS等,這些標識主要是用來區分cpu的指令集的不同體系, 不同型號的cpu有不同的指令集,因此我們選擇安裝包時就需要選擇和cpu指令匹配的包。
(2). 幾乎所有的個人電腦(PC)都是X86(X86_64)的。
(3). 64位和32位的區別是cpu匯流排的寬度不同,cpu匯流排又有資料匯流排、控制匯流排和地址匯流排之分,資料匯流排位數越多代表一次傳輸的資料量越大(吞吐量);地址匯流排位數越多能訪問到的記憶體地址就越多(可以支援更大的記憶體)。
1.3啟動虛擬機器
1. 根據vmware新建嚮導建立新的虛擬機器
下圖是光碟映像的選擇,正是我們下載的install CD
圖1.3.1
我選擇了網路橋接方式,等同於把虛擬機器和主機接著同一個集線器般,這樣方便分配IP地址。
圖1.3.2
圖1.3.3
2.啟動虛擬機器
當出現下圖畫面時,直接按回車.
Install CD裝載預設的核心,返回一個root shell給使用者 。
看到上圖的畫面時,虛擬機器啟動已成功,這是一個基於LiveCD的linux系統。
現在輪到Xshell出馬了,不知道你有沒有安裝好了Xshell?
為了使用Xshell,我們得開啟LiveCD的sshd服務,還得設定root密碼,LiveCD預設root是空密碼。
我們進入虛擬機器,敲入以下命令:
passwd root #輸入任意能記住的密碼
vi /etc/ssh/sshd_config #修改sshd配置檔案,具體修改看下圖
/etc/init.d/sshd start #啟動sshd服務
sshd_config配置裡的第44行改為PermitRootLogin yes,允許root通過ssh遠端登入本機
第72行開啟PasswordAuthentication yes
呼叫xshell,建立新連線,具體參考下面圖示:
上圖Name為任意詞,Host請填入虛擬機器的IP,可以通過在虛擬機器內敲入:
ifconfig
為迎合使用偏好和更顯高大上,xshell可作以下配置:
1.4 硬碟操作
1. 硬碟操作指的是對硬碟進行格式化和分割槽。
Linux比較流行的格式是ext3,ext4,xfs,這可以和windows的NTFS,FAT作對比。
EXT3/EXT4/XFS等格式在Linux下稱為檔案系統。
我們可以通過Linux提供的工具:FDISK,GDISK等,對硬碟進行分割槽和格式化。
2. 很多人會覺得這一步有點難,難在使用windows太久了,習慣了windows的設定。
- Linux檔案系統沒有盤的稱呼,它只有一個符’/’, 叫根,樹根的根,它也像樹根一樣,是所有檔案的起源。
- 訪問任何一個Linux檔案,它的絕對路徑必定是在’/’開始的。
- Linux任何一個常規目錄都可以成為類似於windows的碟符,之所用用常規來形容,是因為有的目錄是比較特殊的,如/dev,是硬體裝置掛載目錄,/dev裡面的檔案就是系統所能訪問的硬體裝置,這也是Linux有別於window的一個地方,Linux把硬體當作一個檔案去使用,當你操作(讀寫)硬體時,就像操作檔案般簡單。又如/proc, 這是一個記憶體裡的資料對映的檔案的目錄,裡面檔案的內容如實反映了當前系統核心的設定,讀寫/proc檔案就能和核心實時互動。
- 硬碟分割槽後可以隨意掛載在Linux的目錄下,一個成功的掛載方案的前提是:根目錄’/’下面必須有分割槽掛載。也就是說,如果硬碟只有一個分割槽,這個分割槽就必須掛在’/’下面,如果硬碟有兩個分割槽,除了掛載在’/’下的分割槽,另外一個分割槽可以任意掛載到Linux的常規目錄下,例如:/home。
- 分割槽的掛載其實就是等於為硬碟分配一個碟符,像windows般, 分割槽掛載在’/’下面,我們可以稱呼這個分割槽為’/’盤(根盤),但我建議還是忘掉windows關於碟符這樣的稱呼。
- Linux有一個標準去規範檔案目錄:Filesystem Hierarchy Standard (FHS),我們暫時只需要知道幾個重要的目錄:
(1) / : root根目錄;
(2) /usr : unix software resource, 是Linux軟體安裝和執行的目錄;
(3) /etc : Linux軟體的配置檔案目錄
3. fdisk和gdisk都是可以對硬碟進行分割槽和格式化的工具,怎樣區別這兩個工具呢?
- 首先,我們要知道,硬碟要有一個表格去記錄:分幾個區?每個區的大小?
- 於是,就有不同的分割槽記錄方法,主要是MBR(Master Boot Record)和GPT(GUID partition table)
- MBR方式只規劃一個很少的空間(64位元組)去記錄分割槽表格,這個空間大小僅能記錄4組分割槽資訊,因此,MBR方式只能把一個硬碟分成4個區,有時候4個區可能不能滿足需求,聰明的人們想出了一種間接記錄的方法,這就有了主分割槽和擴充套件(邏輯)分割槽的稱呼,擴充套件分割槽的意思是在分割槽裡額外擴展出一個空間去記錄硬碟分割槽表,擴展出來的新的記錄空間就不用受MBR 64byte大小的限制,可以分割出多個邏輯分割槽。這就是等於先在MBR裡記錄一條資訊,指出更詳細的分割槽表格請到擴充套件分割槽的空間查詢,這種間接的方法就像C語言的指標。
- GPT方式沒有MBR的限制,GPT使用了34個相當於MBR區塊大小的空間,用來記錄分割槽表格,而且GPT不同於MBR僅有一個區塊被破壞就死翹翹,GPT除了使用硬碟開始的34個區塊記錄分割槽表格外,還使用了硬碟最後的33個區塊來備份表格。為什麼是33個區塊,不是34個備份區塊? 因為GTP第1個區塊是用來存放開機管理程式的,這也是為了相容MBR, MBR本身大小是512位元組,但是預留了446位元組是用來儲存開機程式的。
- 開機管理程式(boot loader)是存在放硬碟開始的第一(0號)個區塊裡
(1) 為什麼要在第一個區塊呢?當然是為了方便讀取和記憶。
(2) 什麼程式會去讀取boot loader呢? 答案是BIOS,相信大家都認識了,BIOS是寫在主機板ROM上的一個程式,只要主機板一通電,BIOS就會自動執行。
4. 說了這麼長,那麼FDISK和GDISK有什麼區別?
區別就是FDISK只能認識MBR分割槽表格
而GDISK認識的是GPT
5. 開始硬碟操作
我們保守一點,採用FDISK對硬碟進行分割。
lsblk #輸入這個命令可以列出當前可系統裡面的儲存裝置
fdisk /dev/sda #上圖列出的sda,路徑是在/dev下面的
在下面我把硬碟分割成兩個盤,一個是1024M大小,另一個是39G大小
最後按w儲存,硬碟分割槽完成,接下來進行硬碟的格式化
上圖中,我使用一個命令,mkfs.xfs 將/dev/sda2格式化為xfs格式, 其中mkfs.xfs可以設定很多引數去改變硬碟的效能,不過我們用預設的引數就已經很理想了,我的計劃是把/dev/sda2掛載在 / 下面。
我再用mkswap 把/dev/sda1格式化成swap格式的分割槽,這個是用於虛擬記憶體的,當實體記憶體不足時,系統會使用這個虛擬記憶體空間(用硬碟來模擬記憶體,所以叫虛擬記憶體)。
直至此,硬碟的分割槽和格式化完畢,接下來進行Gentoo系統環境的安裝,stage的安裝。
1.5 安裝前序
我們下載一個工具winscp將1.2.2小節提及到的檔案傳輸至虛擬機器裡
winscp下載
mount /dev/sda2 /mnt/gentoo #把硬碟sda2這個分割槽掛載到/mnt/gentoo這個目錄
#然後我們開啟winscp將方件偉輸到/mnt/gentoo目錄下
cd /mnt/gentoo #進入到gentoo目錄,經過硬碟掛載後,/mnt/gentoo目錄相當於硬碟的分割槽碟符
tar xvf stage3-i686-20160628.tar.bz2 #解壓stage包,tar命令相當於window的rar,是包管理命令
tar xvf portage-20160602.tar.bz2 -C /usr
#安裝Portage快照,一個用來告訴Portage哪些軟體標題可用於安裝、哪些配置檔案可以由管理員選擇等等的檔案集合。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf #選擇映象檔案
cp -L /etc/resolv.conf /mnt/gentoo/etc/ #複製DNS資訊
#下面命令是掛載必要的檔案系統
mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys #/sys 是和 /proc 類似的檔案系統
mount --make-rslave /mnt/gentoo/sys #--make-rslave操作是稍後安裝systemd支援時所需要的。
mount --rbind /dev /mnt/gentoo/dev #--make-rslave有繫結掛載的意思
mount --make-rslave /mnt/gentoo/dev
經過上面的準備(安裝),已經為我們創造了一個新的linux環境,接下來我們就進入這個新的環境
1.6 進入新環境 chroot
現在所有的分割槽已經初始化,並且基礎環境已經安裝,是時候進入到新的安裝環境了。這意思著會話將把根(所能訪問到的最頂層位置)從當前的安裝環境(安裝CD或其他安裝媒介)變為安裝系統(叫做初始化分割槽)。因此叫作change root或chroot。
完成chroot有三個步驟:
使用chroot將根位置從/(在安裝媒介裡)更改成/mnt/gentoo/(在分割槽裡)
使用source命令將一些設定(那些在/etc/profile中的)重新載入到記憶體中
更改主提示符來幫助我們記住當前會話在一個chroot環境裡面。
chroot /mnt/gentoo /bin/bash
source /etc/profile #profile 是系統關於環境引數的變數設定
export PS1="(chroot) $PS1" #PS1變數是命令提示字元,就是我們按完enter後再次出現的字元
echo "Asia/Shanghai" > /etc/timezone #更改/新增時區
# 配置地區
# 地區不只是指定系統應該使用的與系統進行互動的語言,同時也指定了字串排序,日期和時間的顯示等規則。
sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
#複製上面的命令把/etc/locale.gen檔案 en_US.UTF-8 UTF-8 前面的#去掉
locale-gen #執行locale-gen,它將生成/etc/locale.gen檔案中指定的所有地區。
env-update && source /etc/profile && export PS1="(chroot) $PS1"
#執行上面這條命令再次更新系統環境,我們可以通過set這個命令可以檢視當前系統環境所有變數
swapon /dev/sda1 #將虛擬記憶體開啟,避免編譯軟體時實體記憶體不足,造成編譯失敗
通過以上幾步,我們基本完成了gentoo系統的配置,接下來我們進行最重要的一步,那就是安裝kernel,嚴格來說Linux只是一個kernel。
1.7 安裝kernel
沒有kernel,系統就沒法啟動,更不要說執行。可能你會問:我們並沒有安裝kernel,為什麼現在我們可以執行系統? 其實,我們是用了liveCD裡面的kernel,chroot進入的gentoo環境也是因為LiveCD裡有編譯好kernel,也因為有這個kernel,LiveCD才能提供一個miniLinux的環境。
在以往,kernel編譯和安裝是最難的一步,不過在gentoo裡,可以通過genkernel這工具用來自動化生成並安裝Linux核心,簡單到傻瓜化。
1. 下面我們學習一下手動安裝kernel
手動配置核心經常被Linux使用者認為是最困難的步驟。事實並非如此——但是當您手動配置幾次核心之後,你就不會再覺得它有多麼難了:)
無論如何,有一件事是真實的:當手動配置核心時,瞭解(硬體)系統是至關重要的。大多數資訊可以通過安裝包含lspci命令的sys-apps/pciutils來收集:
emerge –ask sys-apps/pciutils #這條命令用來安裝pciutils
除此之外還可以執行lsmod來檢視安裝CD使用什麼核心模組,它可能對啟用什麼提供了一個好的暗示。
首先我們得下載kernel的原始碼:
emerge –ask sys-kernel/gentoo-sources
下面是一個關於核心配置的連線:
核心配置指導
因為Linux核心配置有很多很多的章節,所以在這裡就不再討論了。
2. 真正方便的安裝方法是genkernel all
手動配置的確很麻煩,但通過手動配置無疑能對硬體有更深的認識,亦能初步瞭解kernel的架構。
genkernel的方法很簡單,它是將所有的硬體驅動,用到的不用到的都編譯成模組,在系統啟動時動態檢測計算機需要用到的驅動,然後再載入。
emerge --ask sys-kernel/genkernel #安裝genkernel軟體
genkernel all #自動編譯和安裝kernel
kernel安裝好後,linux系統算是初步安裝完畢,接下來進行幾項系統配置。
1.8 系統配置
1. /etc/fstab
這個檔案是linux系統關於硬碟分割槽掛載的配置檔案
檔案記錄分割槽掛載點(掛在哪個目錄下),分割槽的格式,分割槽的掛載屬性(是否可以讀寫)等等
#通過下面的方法編輯/etc/fstab檔案,加入我們要掛載的硬碟:
cat > /etc/fstab <<eof
/dev/sda2 / xfs noatime 0 1
/dev/sda1 swap swap defaults 0 0
eof
# 'cat >' 的意思是把標準輸出輸入 '>' 後面的檔案; '<<eof' 的意思是輸入'eof'結束輸出
# fstab 共有六個欄位
#第一個欄位是對分割槽的描述,也就是裝置檔案的路徑
#第二個欄位是分割槽掛載點,也就是分割槽應該掛載到的地方
#第三個欄位給出分割槽所用的檔案系統
#第四個欄位給出的是掛載分割槽時mount命令所用的掛載選項。由於每個檔案系統都有自己的掛載選項,我們建議你閱讀#mount手冊(man mount)以獲得所有掛載選項的列表。多個掛載選項之間是用逗號分隔的。
#第五個欄位是給dump使用的,用以決定這個分割槽是否需要dump。一般情況下,你可以把該欄位設為0(零)。
#第六個欄位是給fsck使用的,用以決定系統非正常關機之後檔案系統的檢查順序。根檔案系統應該為1,而其它的應該#為2(如果不需要檔案系統自檢的話可以設為0)。
2. 網路資訊
nano -w /etc/conf.d/hostname #nano是一個簡易編輯器,需要按ctrl+x退出
# 設定主機名變數,選擇主機名
nano -w /etc/conf.d/net
# 複製下面幾行到shell,設定ip地址和路由
cat > /etc/conf.d/net <<eof
config_eth0="192.168.1.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.1.1"
eof
#注意上面的eth0是網絡卡介面名,可能有別於eth0,先用ifconfig看看
ifconfig | head -n 1| cut -d ':' -f 1
#用上面這條命令可以輸出第一個網絡卡介面名,如果不是eth0,就用它把eth0替換掉
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default
#這三條命令可以讓eth0在電腦啟動時自動啟動,記得用你的網絡卡名替代eth0.
passwd #敲入這個命令設定root密碼,請記著你所設定的密碼。
3.安裝bootloader
我們在硬碟分割槽時提到boot loader, 它是用來引導作業系統啟動的,所以boot loader一般是安裝在硬碟的第一塊空間上-MBR,如果以GPT方式記錄分割槽的,boot loader也是需要安裝到硬碟第一塊區間上的。
Boot loader有很多選擇,針對不同的BIOS,有另一種BIOS叫UEFI(Unified Extensible Firmware Interface),它是配合GPT來使用。不同的BIOS有不同的boot loader選擇,GRUB2支援目前所有的BIOS,所以我們選擇GRUB2 作為系統的Bootloader。
GRUB2安照很簡單,通過下面這條命令就可以完成安裝
emerge –ask sys-boot/grub:2
安裝好GRUB2,需要配置使它能進入工作狀態,下面這條命令是把GRUB2放到MBR的頭部中。
grub2-install /dev/sda
下面的命令則是配置GRUB2的,它會自動尋找編譯好了的kernel,生成配置檔案。
grub2-mkconfig -o /boot/grub/grub.cfg
4. 安裝完畢
經過一番折騰,Linux安裝完畢,reboot!