1. 程式人生 > >Linux核心編譯及CentOS系統安裝

Linux核心編譯及CentOS系統安裝

1、程式包的編譯安裝

命令:./configure, make, make install
(1)./configure:檢查編譯環境的依賴關係,並設定編譯引數;
(2)make:編譯過程,make不是編譯工具,而是專案構建工具,其呼叫各所需的編譯工具執行編譯操作;
(3)make install:把編譯好的檔案(檔案包括:二進位制檔案、庫檔案、幫助文件、配置檔案)複製到編譯時指定目錄下。
前提:準備好開發環境(開發工具,開發庫),安裝後的標頭檔案放置在/usr/include。
開源軟體提供的是軟體的原始碼,我們需要將其編譯為可執行二進位制格式,各開源軟體的發行版在製作時都以“通用”為目標,我們需要自己將原始碼手動編譯為適合自己需要的版本。

2、Linux核心編譯準備

(1)前提
1)準備好開發環境;
2)獲取目標主機上硬體裝置的相關資訊;
3)獲取到目標主機系統功能的相關資訊,例如要啟用的檔案系統;
4)獲取核心原始碼包:www.kernel.org
(2)準備開發環境
1)CentOS 6.7所用包組如下:
Development Tools
Server Platform Development
Desktop Platform Development
2)CentOS 7所用包組如下:
Development Tools
Server Platform Development
Desktop Platform Development
額外需要軟體包:ncurses-devel
(3)獲取目標主機上硬體裝置的相關資訊:
1)CPU:
~]# cat /proc/info


~]# lscpu
~]# x86info -a
2)PCI裝置:
~]# lspci:顯示PCI資訊,選項:-v,-vv;
~]# lsusb:示USB資訊,選項:-v,-vv;
~]# lsblk:顯示塊裝置或光碟機資訊‘’
3)瞭解全部硬體裝置資訊:hal(hardware abstract layer,硬體抽象層)
~]# hal-device

3、核心編譯過程

~]# tar  xf  linux-3.10.67.tar.xz  -C  /usr/src
~]# cd  /usr/src
~]# ln  -s  linux-3.10.67  linux
~]# cd  linux				
~]# make menuconfig       	  配置核心選項
~]# make  [-j #]			      編譯核心,可使用-j指定編譯執行緒數量
~]# make modules_install	      安裝核心模組
~]# make install			      安裝核心,自動生成grub配置選項
重啟系統,選擇使用新核心;

(1)screen命令:
開啟screen:~]# screen
拆除screen:Ctrl+a, d
列出screen:~]# screen -ls
連線至screen:~]# screen -r SCREEN_ID
關閉screen:~]# exit
(2)過程的詳細說明:
1)配置核心選項
支援“更新”模式進行配置:在已有的.config檔案的基礎之上進行“修改”配置;
(a) make config:基於命令列以遍歷的方式去配置核心中可配置的每個選項;
(b) make menuconfig:基於cureses的文字配置視窗;
© make gconfig:基於GTK開發環境的視窗介面,包組“桌面平臺開發” 並不依賴於GNome桌面,只要有GTK庫即可;
(d) make xonfig:基於QT開發環境的視窗介面,KDE桌面開發庫;
支援“全新配置”模式進行配置:
(a) make defconfig:基於核心為目標平臺提供的“預設”配置為模板進行配置;不會讀取.config;
(b) make allnoconfig:所有選項均為“no”;
2)編譯
(a) 多執行緒編譯:make [-j #]
(b) 編譯核心中的一部分程式碼:
(i) 只編譯某子目錄中的相關程式碼:
# cd /usr/src/linux
# make path/to/dir/
(ii)只編譯一個特定的模組
# cd /usr/src/linux
# make path/to/dir/file.ko
© 交叉編譯:目標平臺與當前編譯操作所在的平臺不同;
# make ARCH=arch_name
要獲取特定目標平臺的使用幫助:
# make ARCH=arch_name help
3)在執行過編譯操作的核心原始碼樹上做重新編譯:
事先清理操作:
# make clean:清理編譯生成的絕大多數檔案,但會保留config,及編譯外部模組所需要的檔案;
# make mrproper:清理編譯生成的所有檔案,包括配置生成的config檔案及某些備份檔案;
# make distclean:相當於mrproper,額外清理各種patches以及編輯器備份檔案。

4、CentOS 系統安裝

(1)系統安裝程式
安裝程式為anaconda,bootloader啟動後,載入kernel,載入根檔案系統,然後啟動anaconda安裝程式。anaconda有兩種安裝介面:tui,基於cureses的文字配置視窗,gui,圖形安裝介面。
(2)CentOS的安裝過程啟動流程
MBR階段用到boot.cat檔案,Stage2階段用到isolinux/isolinux.bin檔案,配置檔案:isolinux/isolinux.cfg。
每個對應的選單選項:
載入核心:isolinux/vmlinuz;
向核心傳遞引數:append initrd=initrd.img;
裝載根檔案系統,並啟動anaconda;
anaconda的預設介面是圖形介面:512MB+記憶體空間;
若需要顯式指定啟動TUI介面,則在選單介面按下ESC鍵,向啟動核心傳遞一個引數"text"即可:boot: linux text
注意:上述內容一般位於引導裝置,例如可通過光碟、U盤或網路等,後續的anaconda及其安裝用到的程式包等可以來自於程式包倉庫,此倉庫的位置可以為:本地光碟、本地硬碟、ftp server、http server、nfs server;如果想手動指定安裝倉庫,則按下ESC鍵後,輸入:boot: linux method
(3)anaconda的工作過程
1)安裝前配置階段
(a) 安裝過程使用的語言;
(b) 鍵盤型別;
© 安裝目標儲存裝置:Basic Storage(本地磁碟)、Special Storage(iSCSI);
(d) 設定主機名;
(e) 配置網路介面;
(f) 配置時區;
(g) 配置管理員密碼;
(h) 設定分割槽方式及MBR的安裝位置;
(i) 建立一個普通使用者;
(j) 選定要安裝的程式包;
2)安裝階段
(a) 在目標磁碟建立分割槽並執行格式化;
(b) 將選定的程式包安裝至目標位置;
© 安裝bootloader;
3)首次啟動
(a) 禁用iptables;
(b) 禁用selinux;
© core dump;
(4)anaconda的配置方式
1)互動式配置方式;
2)支援通過讀取配置檔案中事先定義好的配置項自動完成配置,遵循特定的語法格式,此檔案即為kickstart檔案;
(5)安裝引導選項
boot: text:文字安裝方式
boot method:手動指定使用的安裝方法
與網路相關的引導選項:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
遠端訪問功能相關的引導選項:
vnc
vncpassword='PASSWORD'
啟動緊急救援模式:rescue
裝載額外驅動:dd
相關安裝過程可以參考官方網站:www.redhat.com/docs 中的《installation guide》。
ks:指明kickstart檔案的位置;

ks=
DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
Hard Drive: ks=hd:/DEVICE/PATH/TO/KICKSTART_FILE
HTTP Server: ks=http://HOST[:PORT]/PATH/TO/KICKSTART_FILE
FTP Server:  ks=ftp://HOST[:PORT]/PATH/TO/KICKSTART_FILE
HTTPS Server:   ks=https://HOST[:PORT]/PATH/TO/KICKSTART_FILE

(6)kickstart檔案的格式
1)命令段:指定各種安裝前配置選項,如鍵盤型別等,分為必備命令和可選命令。
2)程式包段:指明要安裝程式包,以及包組,也包括不安裝的程式包。

%packages
@group_name
package
-package
%end

3)指令碼段:
%pre:安裝前指令碼,執行環境為執行安裝介質上的微型Linux系統環境;
%post:安裝後腳本,執行環境為安裝完成的系統;
4)命令段中的必備命令:
authconfig:認證方式配置
authconfig --enableshadow --passalgo=sha512
bootloader:定義bootloader的安裝位置及相關配置
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
keyboard:設定鍵盤型別
keyboard us
lang:語言型別
lang zh_CN.UTF-8
part:分割槽佈局;
part /boot --fstype=ext4 --size=500
part pv.008002 --size=51200
rootpw:管理員密碼
rootpw --iscrypted $6$4Yh15kMGDWOPtbbW$SGax4DsZwDAz4201.O97WvaqVJfHcISsSQEokZH054juNnoBmO/rmmA7H8ZsD08.fM.Z3Br/67Uffod1ZbE0s.
timezone:時區
timezone Asia/Shanghai
5)分割槽相關的其它指令
clearpart:清除分割槽
clearpart --none --drives=sda:清空磁碟分割槽;
volgroup:建立卷組
volgroup myvg --pesize=4096 pv.008002
logvol:建立邏輯卷
logvol /home --fstype=ext4 --name=lv_home --vgname=myvg --size=5120
生成加密密碼的方式:
~]# openssl passwd -1 -salt `openssl rand -hex 4`
6)可選命令
install OR upgrade:安裝或升級;
text:安裝介面型別,text為tui,預設為GUI;
network:配置網路介面;
network --onboot yes --device eth0 --bootproto dhcp --noipv6
firewall:防火牆:firewall --disabled
SELinux:selinux --disabled
halt、poweroff或reboot:安裝完成之後的行為;
repo:指明安裝時使用的repository;
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
url: 指明安裝時使用的repository,但為url格式;
url --url=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-x86_64/
7)系統安裝完成之後禁用防火牆
CentOS 6:
# service iptables stop
# chkconfig iptables off
CentOS 7:
# systemctl stop firewalld.service
# systemctl disable firewalld.service
8)系統安裝完成後禁用SELinux
編輯/etc/sysconfig/selinux或/etc/selinux/config檔案,修改SELINUX引數的值為下面其中之一:permissive或disabled;
selinux立即生效:
# getenforce
# setenforce 0
9)定製kickstart檔案
# yum install system-config-kickstart
# system-config-kickstart
檢查語法錯誤:
# ksvalidator
10)建立光碟映象
~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/