從LFS到自己的Linux發行版—系列教程之一:一步一步帶你體驗LFS8.2

關聯文章:

LFS技術細節解析(1):Linux shell硬盤自動分區腳本詳解
LFS技術細節解析(2):echo命令實現Linux shell人機交互詳解


文章目錄

前言

第一步:LFS準備工作

第二步:LFS你的的Linux系統

第三步:開啓你的Linux系統

結語


前言

       這一陣,美國製裁中興、禁售芯片事件,跌宕起伏、峯迴路轉,至今大戲未到結局,也不斷地撩撥着國人的神經。由此也引發了我們對核心技術、核心能力的深刻反思,並認識到中國作爲一個世界級的大國,核心技術、核心能力不是什麼都能買到的,必須牢牢掌握在自己手裏。這既是產業結構調整的需要,也是國家安全的保障。多一家聯想電腦不多,可以賺錢;少一家華爲通訊不行,那可能要命。

       操作系統,作爲信息產業的重要基礎軟件,也必須要牢牢掌握在自己手裏。我們用的各種終端設備的操作系統不是我們可控的,弊端多了去、大家都知道,什麼後門、什麼信息泄露。舉個通俗點的例子,以後進入5G、物聯網時代了,我們上下班開的汽車也是自動駕駛了,如果用的還是安卓或者其他主流操作系統(無論哪個,都操控在美國人手裏),如果中美矛盾激化、激活車輛操作系統的後門,那我們只能等着撞車了。

       基於這些認識,我們從內核開始編制一個閉源的操作系統、並推廣使用,當然是天大的好事;但事實上,這是一個比造原子彈的曼哈頓工程要大得多的工程,迭代時間也不會比從Win3.1到Win10短多少。那麼,有沒有一個現成的、又自主可控(正如倪光南老爺子四處奔走、竭力推廣)的操作系統可以爲我所用呢?答案是,有,那就是GNU/Linux。首先,它是自由軟件,不需要授權、沒有專利限制,可以自主使用和改造;其次,它是開源軟件,每個部件的源代碼都清清楚楚的放在那裏(主要是各代碼託管網站),有沒有後門、會不會信息泄露你可以查個一清二楚。

       如果你把從源代碼開始編譯構建一個操作系統的工作當成廚師做一桌菜的話,LFS就是一份“菜譜”。 從今天開始,我準備一步一步帶着大家從開源軟件的源代碼(大廚的“食料”)開始,基於最新版的LFS(大廚的最新版“菜譜”)編譯出能運行的Linux操作系統、構建出能作爲桌面日常使用的Linux操作系統、打包成可以在電腦上安裝的Linux操作系統、直至讓你做出跟Deepin Linux一樣好用的GNU/Linux發行版。這更是我們一步一步實踐的過程,也是我們逐步深入學習的過程。希望在走完這個過程後,我們的技術、能力能達到爲GNU/Linux操作系統添磚加瓦,甚至走的更遠,作爲一份子編制出我們自己的操作系統。

       下面是我基於LFS-8.2-systemd(以下簡稱LFS8.2)已經編譯構建好的Linux系統。完美無瑕,啓動了,登錄了,可以上網了,你看:

       你心動了嗎? 不急, 跟着我,你只要12小時,不要驚訝、就12小時,你也能編譯、構建出能運行的Linux操作系統。作爲《從LFS到自己的Linux發行版》系列教程的開篇,本教程會以最低難度、最明確步驟爲宗旨,跟你一步一步體驗基於LFS8.2編譯、構建出能運行的Linux系統,讓你對LFS有個初步認識;力爭帶你一次成功,讓你樹立信心、獲得成就感。

 


 第一步:LFS準備工作

       工欲善其事、必先利其器。爲了順利地編譯構建你的Linux操作系統,我們該做好一些準備工作,免得過程中出問題、從頭再來,這樣的話12小時可是不能完成我們的LFS的啊。

  • 平臺準備:在我們日常使用的裝有windows操作系統的電腦任意硬盤上,準備100G硬盤空間用於存放虛擬機(在這個電腦硬盤講TB的年代,爲了將來的編譯不出問題還是多準備點吧),下載虛擬機軟件VMware Workstation Pro 15.5.0(點此下載)並安裝。由於Windows10系統的原因,比VMware Workstation Pro 15.5.0更早的版本已經不能在Windows10系統下使用。另外注意,你的電腦電源管理是否設置了休眠,如果是的話請取消這樣的設置。                                                                 

  • 虛擬機準備:我已經配置好了編譯構建Linux系統所需的虛擬機(即宿主機),並把該虛擬機Deepin上傳到我的百度網盤。你要做的是,下載該虛擬機(點此下載),解壓到準備好的硬盤空間。例如下圖(我的硬盤空間爲G盤根目錄):

     

  • 打開虛擬機:用虛擬機軟件VMware Workstation打開之前下載解壓的虛擬機Deepin(就像用軟件Word打開doc文檔一樣,一層層目錄逐步深入尋找並打開),並啓動、登錄,用戶名、密碼都爲lfser。如果你的電腦內存大於4G,在打開虛擬機Deepin前調整內存配置到計算機內存的一半,以改善虛擬機Deepin的使用體驗、使其更流暢。

  • 在虛擬機Deepin中複製必須的文件:把虛擬機Deepin桌面上文件夾LFS-8.2-systemd全家桶中的硬盤分區腳本disk-partition.sh、LFS源代碼包lfs-packages-8.2.tar、內核配置文件myconfig-4.15.3和宿主機環境檢查腳本version-check.sh等四個文件複製到lfser的home(即主目錄)中。LFS-8.2-systemd全家桶文件夾中除了這四個文件,LFS8.2手冊、參考文檔、LFS8.2源代碼等都收納其中。 

     

  • 虛擬機Deepin中打開終端:雙擊虛擬機Deepin底部任務欄上的    圖標打開深度終端。至此,我們爲LFS8.2所做的準備工作全部完畢。                                                                                                                                                   

        


第二步:LFS你的的Linux系統

       這一節,我們的基於LFS8.2編譯構造自己的Linux操作系統的工作都將在虛擬機Deepin中進行。

  • 打開源代碼:桌面上文件夾LFS-8.2-systemd全家桶中找到文件LFS_code-3.1.3,雙擊並選“顯示”,系統自動加載代碼編輯器Visual Studio Code並打開該代碼文件。如下圖(不完全一樣): 

  • 從代碼文件LFS_code-3.1.3中複製代碼並運行:代碼中指明“從此行開始可以複製全部代碼,粘貼到shell中 ,直至LFS重啓”之前的代碼需要逐行復制粘貼到深度終端中並回車運行(行首爲“#”字符的是註釋行,不必複製,如複製,粘貼後也必須回車),並根據shell的輸出進行人機對話、其中運行“sudo su”命令時需要輸入管理員lfser的密碼lfser;之後的代碼一次全部複製並粘貼到深度終端中運行,在虛擬機重啓前不要關機(你的電腦、虛擬機Deepin都不要關閉)。

     

           深度終端運行這些代碼期間,在不斷地進行源代碼的編譯、Linux系統的構建,你會持續地看到終端出現如下的滾屏:

           在此期間,你不要在深度終端輸入任何字符,也儘量不要在虛擬機Deepin中打開其他窗口。你最好是把虛擬機Deepin最小化到你電腦的任務欄上,以免由於虛擬機Deepin內存不足或者CPU高佔用而導致出現問題。

           爲了直觀地瞭解虛擬機Deepin在這運行的12小時中,深度終端到底做了些什麼,把我基於LFS8.2並做了適當調整的一部分代碼粘貼於下面,本文不做詳深度解析(那正是下一篇所要呈現給大家的),如果暫時不想了解,儘管可以路過:

#############################################################
#####                LFS,let's go!                      #####
#############################################################

##########       II. Preparing for the Build       ##########

########## Chapter 2. Preparing the Host System 

bash version-check.sh

##########

sudo su

#apt-get update

#apt-get install  m4 bison texinfo g++ -y

#ln -fs /bin/bash /bin/sh

#bash version-check.sh

#############################################################
##### 從此行開始可以複製全部代碼,粘貼到shell中 ,直至LFS重啓 #####
#############################################################

fdisk -l

bash disk-partition.sh

mkfs -v -t ext4 /dev/sdb1

mkswap /dev/sdb2

##########

export LFS=/mnt/lfs

##########

mkdir -pv $LFS
mount -v -t ext4 /dev/sdb1 $LFS

/sbin/swapon -v /dev/sdb2

########## Chapter 3. Packages and Patches

mkdir -v $LFS/sources

chmod -v a+wt $LFS/sources

tar xvf lfs-packages-8.2.tar
cp -R lfs-packages-8.2/* $LFS/sources
cp myconfig-4.15.3 $LFS/sources
rm -rf lfs-packages-8.2

pushd $LFS/sources
md5sum -c md5sums
popd

########## Chapter 4. Final Preparations 

mkdir -v $LFS/tools

ln -sv $LFS/tools /

##########

groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
echo "lfs:123456" | chpasswd

chown -v lfs $LFS/tools

chown -v lfs $LFS/sources

su - lfs

##########


#
#
#
#   此處省略2800行
#
#
#


##########

grub-install /dev/sdb

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,1)

menuentry "GNU/Linux, Linux 4.15.3-lfs-8.2-systemd" {
        linux   /boot/vmlinuz-4.15.3-lfs-8.2-systemd root=/dev/sdb1 ro clocksource=acpi_pm
}
EOF

##########   Chapter 9. The End 

cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="8.2-systemd"
ID=lfs
PRETTY_NAME="Linux From Scratch 8.2-systemd"
VERSION_CODENAME="Gu"
EOF

echo 8.2-systemd > /etc/lfs-release

##########

logout

umount -v $LFS/dev/pts
umount -v $LFS/dev
umount -v $LFS/run
umount -v $LFS/proc
umount -v $LFS/sys
umount -v $LFS

shutdown now

#############################################################
#####                 LFS,that's enjoy!                 #####
#############################################################

       需要複製粘貼到深度終端的全部代碼,我已經上傳到百度網盤,可以下載(點此下載)、在下一篇開始前提前閱讀一下,並與LFS8.2手冊做個對比,看有什麼不同。注意,無論是在你電腦的Windows系統中,還是虛擬機Deepin中,打開、編輯代碼的最好工具是各種代碼編輯器,推薦Visual Studio Code,據說sublime也是編程神器,但我使用後感覺老是提醒升級、影響工作;千萬不要用Word、WPS等文檔編輯器去打開、編輯代碼;在網頁、PDF文檔中複製的代碼,也需要粘貼在代碼編輯器並加以檢查後才能使用。      

       你的虛擬機在運行12小時後,基於LFS8.2的Linux系統已經構建好,虛擬機Deepin會自動關機、並等你開啓你的Linux系統。(如果你的虛擬機窗口最小化到你電腦的任務欄了,那麼雙擊任務欄上的虛擬機圖標,)你會看到如下窗口:

 


第三步:開啓你的Linux系統

       上節,我已經說了,你的電腦(當然是虛擬機Deepin)在把代碼全部複製粘貼到深度終端並運行約12小時後,已經完全編譯構建好了一個基於LFS8.2的Linux操作系統。那麼,深度終端到底做了些什麼、你的電腦到底發生了哪些變化呢?

      下面這張圖是,我們的虛擬機Deepin剛剛開啓的時候的系統目錄:

        可以看出,內置磁盤只有一個:系統盤。

        再下面一張圖,是基於LFS8.2編譯構建Linux操作系統後的虛擬機Deepin的系統目錄:

       可以看出,內置磁盤有兩個:系統盤、45GB卷(從名字可以看出已經分區、格式化並掛載),多出了一個內置磁盤45GB卷。這個多出來的內置磁盤,就是我們通過把代碼複製粘貼到深度終端並回車運行,把虛擬機上已經有的第二硬盤進行了分區,並對分區進行了格式化、掛載,形成了可以被電腦所用的硬盤分區。

       那麼,這個之前剛剛分區、格式化的硬盤分區(即45GB卷)現在裏面有什麼呢?我們再看下圖:

       哇,裏面不再是像剛剛被格式化、空空如也的樣子了,裏面已經有bin、boot和home等一系列目錄,儼然是一個完整的Linux操作系統。對,這就是深度終端在運行12小時後編譯構建完成的Linux系統,只等你開啓。

       下面,你跟着我一起來開啓你的Linux系統吧。

  • 進入虛擬機Deepin的BIOS設置狀態:我們的虛擬機Deepin的BIOS默認設置從第一硬盤啓動,如果現在馬上開機(當然是虛擬機Deepin),那麼所運行的還是第一硬盤所裝的Deepin 15.5操作系統,並不是你所編譯構建的Linux系統。下面,我們就來設置吧。在虛擬機軟件VMware Workstation的菜單欄,點啓動按鈕(紅色箭頭)右邊的小三角,即出現啓動菜單,在該菜單選“打開電源時進入固件”選項,虛擬機Deepin即進入BIOS設置狀態:      

  • 設置虛擬機Deepin從第二硬盤啓動:進入了BIOS設置狀態、並設置成如下圖第二硬盤Hard Drive (0,1)在上、第一硬盤Hard Drive (0,0)在下的狀態,並保存、退出,虛擬機Deepin即自動重啓。                                   

      
  • 啓動你的Linux系統:虛擬機Deepin的BIOS設置完畢、保存退出後,你的電腦 (虛擬機Deepin)即自動重啓,並很快進入你的 Linux系統登錄狀態:                                                                                                                                                

 

  • 登錄你的Linux系統:你的電腦進入登錄狀態,輸入用戶名root(還沒創建其他用戶,現在只能以root用戶登錄)和密碼asd123asd(這個密碼是我在代碼中設置的,你可以在代碼中設置任意密碼,或者在登陸後輸入命令passwd root重新設置),你的Linux系統真的登錄成功了。                                               

 

  • 試用你的Linux系統:在登錄成功後,除了登錄信息,電腦顯示的就是一個黑乎乎的屏幕,她真的能爲我們所用嗎?能連接網絡嗎?我們在電腦中輸入命令ping www.baidu.com來檢查一下網絡是否連接,看看出現什麼情況。噢 ,她已經聯網了,ping出了百度網的網址、已經接收了4個 信息包(4 packets received),當然她還能接收更多信息包,但我按Ctrl+c鍵人爲地停止了這個過程 。  

       That's Wonderful!這真是令人激動的時刻。

 


 結語

       你跟我一起,一步一步走來,真的從源代碼開始,編譯構造出了你的Linux操作系統 。儘管這個系統還很單薄、功能不是特別多,還不能輸入、顯示漢字,還沒有視窗、還不能用鼠標;你的這個Linux操作系統的編譯構造過程,是用我配置好的虛擬機Deepin,把我根據LFS8.2手冊整理並適當改造了的代碼直接輸入深度終端,體驗了一次編譯構造Linux系統的過程,你對編譯構造的原理還不是很明瞭。

 

       這正是我以後要跟你們繼續做的事情:詳細瞭解從源代碼到你的Linux系統的編譯構造過程,基於BLFS構造出能用於工作的功能豐富的Linux系統,把你的Linux系統裝入U盤並能在別的電腦(不是虛擬機、也不是限於自己的電腦)、爲別人所用,直至最終構造出像Deepin Linux 一樣好用的、有完整的包管理機制的Linux操作系統。

      

       這裏要順便表揚一下Deepin Linux 。在我試用過的GNU/Linux操作系統中,這個Linux系統是最接地氣的,完全開箱即用,中文、輸入法及常規軟件統統搞定,我用這個系統進行LFS時,只做了三項簡單設置:一、通過深度軟件商店安裝了Visual Studio Code這個代碼編輯器;二、通過深度終端安裝了g++等四個LFS編譯環境必須的軟件;三、通過深度終端對sh指向由dash改爲bash。這個系統,還特別漂亮,用來有蘋果系統的感覺。真不愧是我們自主操作系統的佼佼者!

       

       如果我們一步一步走過了上述的全部過程,我相信對你我都有所裨益,能深刻理解操作系統構造原理,有能力去爲GNU/Linux這個偉大的自由開源軟件添磚加瓦,甚至走的更遠,去創造出完全爲我們所有的操作系統。等着那一天! 

      

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章