【步驟一】安裝centos7
下載ios(https://www.centos.org/download/)阿蝶,在虛擬機(jī)安裝惊暴。
【步驟二】更新源
centos7 修改yum源為阿里源穷劈,某下網(wǎng)絡(luò)下速度比較快 首先是到 yum源設(shè)置文件夾里
#cd /etc/yum.repos.d
#sudo mv CentOS-Base.repo CentOS-Base.repo.bak
#sudo wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#yum clean all
#yum makecache
【步驟三】安裝圖形界面和修改運(yùn)行級(jí)別
CentOS7系統(tǒng)如果用mini鏡像安裝或者服務(wù)器版本安裝,默認(rèn)是沒(méi)有安裝圖形界面的冤荆。如果需要額外去安裝圖形界面朴则,可以手動(dòng)來(lái)安裝CentOS Gnome GUI包。然后會(huì)總結(jié)一下钓简,在CentOS7系統(tǒng)中的系統(tǒng)運(yùn)行級(jí)別的設(shè)置以及如何切換乌妒。
命令行下安裝 Gnome 包
#yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
如果你想在系統(tǒng)下次啟動(dòng)的時(shí)候自動(dòng)進(jìn)入圖形界面,那么我們需要更改系統(tǒng)的運(yùn)行級(jí)別外邓,輸入下面的命令來(lái)啟用圖形界面撤蚊。
#ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
順便總結(jié)下CentOS7下運(yùn)行級(jí)別的修改,systemd使用比sysvinit的運(yùn)行級(jí)別更為自由的target概念作為替代损话。比如侦啸,第三運(yùn)行級(jí)別multi-user.target槽唾,第五運(yùn)行級(jí)別graphical.target。兩種表示方式:
1光涂、runlevel3.target -> multi-user.target
2庞萍、runlevel5.target -> graphical.target
注:前者使用符號(hào)鏈接指向了后面的 target 切換運(yùn)行級(jí)別:
1、systemctl isolate multi-user.target
2顶捷、systemctl isolate runlevel3.target
3挂绰、systemctl isolate graphical.target
4屎篱、systemctl isolate runlevel5.target
修改開(kāi)機(jī)默認(rèn)運(yùn)行級(jí)別 systemd使用鏈接來(lái)指向默認(rèn)的運(yùn)行級(jí)別服赎,由/etc/systemd/system/default.target文件決定。 設(shè)置開(kāi)機(jī)運(yùn)行級(jí)別3
1交播、rm /etc/systemd/system/default.target
2重虑、ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
3、ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system /default.target
4秦士、sytemctl set-default multi-user.target
設(shè)置開(kāi)機(jī)運(yùn)行級(jí)別5
1缺厉、ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
2、ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
3隧土、systemctl set-default graphical.target
查看當(dāng)前運(yùn)行級(jí)別:runlevel
【步驟四】下載源碼
1.或許你不需要整個(gè)內(nèi)核的源代碼
如果你需要編譯一個(gè)內(nèi)核的驅(qū)動(dòng)程序(模塊)提针,很可能你并不需要安裝整個(gè)內(nèi)核源代碼。也許你只需要安裝 kernel-devel 這個(gè)組件曹傀。然而辐脖,假若你肯定須要完整的源代碼目錄樹(shù),請(qǐng)遁從第二部份的指示皆愉。
CentOS-7 只有一個(gè) kernel-devel 組件:
kernel-devel(64 位元的結(jié)構(gòu))
CentOS-6 只有一個(gè) kernel-devel 組件:
kernel-devel(32 及 64 位元的結(jié)構(gòu))
你可以這樣安裝 kernel-devel 組件:
[root@host]# yum install kernel-devel
如果你的內(nèi)核因?yàn)閬?lái)自較舊的目錄樹(shù)而未被 yum 列出嗜价,你可以手動(dòng)式地從 CentOS Vault下載它。
CentOS-7:請(qǐng)?jiān)?7.N.YYMM/os/x86_64/Packages/ 或 7.N.YYMM/updates/x86_64/Packages/ 目錄內(nèi)找尋 kernel-devel-版本.x86_64.rpm幕庐。當(dāng)你安裝了合適的 kernel[-類(lèi)型]-devel-版本.結(jié)構(gòu).rpm 組件久锥,請(qǐng)嘗試編譯你的模塊。這樣做是應(yīng)該行得通的异剥。假若事實(shí)并非如此瑟由,請(qǐng)?zhí)峁┓答伣o模塊的開(kāi)發(fā)者,因?yàn)檫@是設(shè)計(jì)所有新內(nèi)核模塊時(shí)應(yīng)采用的編譯方式冤寿。
2.如果你真的需要整個(gè)內(nèi)核的源代碼
如果你真的因?yàn)槟硞€(gè)原因需要整個(gè)內(nèi)核的源代碼歹苦,它是有被提供的。
以一個(gè)不是 root 用戶(hù)的戶(hù)口疚沐,創(chuàng)建一個(gè)以 ~/rpmbuild 為基礎(chǔ)的目錄樹(shù):
[user@host]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
我們強(qiáng)烈推薦你不要以root 的身份創(chuàng)建組件暂氯。(見(jiàn):Building Source RPM as non-root under CentOS)
要在 CentOS-7 安裝源代碼組件及工具:
以 root 的身份安裝 rpm-build、redhat-rpm-config亮蛔、asciidoc痴施、hmaccalc、perl-ExtUtils-Embed、pesign辣吃、xmlto动遭、audit-libs-devel、binutils-devel神得、elfutils-devel厘惦、elfutils-libelf-devel、ncurses-devel哩簿、newt-devel宵蕉、numactl-devel、pciutils-dedvel节榜、python-devel 及 zlib-devel 組件:
[root@host]# yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
[root@host]# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
[root@host]# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
從這些地方找尋內(nèi)核的源代碼組件:
? http://vault.centos.org/7.N.YYMM/os/Source/SPackages/
? http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/
(請(qǐng)以相關(guān)的副版本編號(hào)羡玛、年度及月份取代 N.YYMM。)
以一個(gè)不是 root的普通戶(hù)口宗苍,執(zhí)行以下指令來(lái)安裝源代碼組件:
[user@host]$ rpm -i http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-514.21.1.el7.src.rpm 2>&1 | grep -v exist(我安裝時(shí)候稼稿,最新的是這個(gè):http://vault.centos.org/7.3.1611/updates/Source/SPackages/kernel-3.10.0-514.21.2.el7.src.rpm)
現(xiàn)在源代碼組件已經(jīng)安裝了,請(qǐng)解壓及預(yù)備源代碼文件:
[user@host]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
$(uname -m) 這個(gè)值將目標(biāo)結(jié)構(gòu)設(shè)置為你的現(xiàn)有內(nèi)核的結(jié)構(gòu)讳窟。一般來(lái)說(shuō)這是可行的让歼,因?yàn)槎鄶?shù)人需要以 i686 或 x86_64 為目標(biāo)。
現(xiàn)在內(nèi)核的源代碼目錄樹(shù)可以在 ~/rpmbuild/BUILD/kernel/linux/ 這個(gè)目錄內(nèi)找得到丽啡。
【步驟五】修改和打補(bǔ)丁編譯
在使用rpmbuild 自動(dòng)構(gòu)建內(nèi)核rpm包時(shí),首先讀取SEPCS目錄下的kernel.spec 配置文件谋右,解壓SOURCES 目錄中的內(nèi)核源碼包,并打上對(duì)應(yīng)的patch 文件, 配置后進(jìn)行編譯生成rpm包, 因此修改內(nèi)核源碼有2種方式。
1碌上、直接解壓內(nèi)核tar.xz包,修改編輯完成后直接打包覆蓋原有的tar.zx包倚评,執(zhí)行rpmbuild命令構(gòu)建。
2馏予、解壓內(nèi)核tar.zx包,備份需要修改的源文件,修改后對(duì)比源文件生成patch補(bǔ)丁,并在kernel.spec配置中指定補(bǔ)丁文件,執(zhí)行rpmbuild構(gòu)建天梧。
第一種方式解壓打包比較繁瑣,不如制作patch補(bǔ)丁來(lái)的方便,在大版本不變的情況下只需要引入patch文件即可,通用性更好.推薦使用霞丧。
[root@localhost ~]# cd rpmbuild/SOURCES/
[root@localhost SOURCES]# tar -xf linux-3.10.0-327.36.3.el7.tar.xz -C /tmp
解壓內(nèi)核源碼包到/tmp下呢岗,這里以修改TCP參數(shù)頭文件tcp.h為例。
[root@localhost ~]# cd /tmp/linux-3.10.0-327.36.3.el7/include/net
[root@localhost net]# cp tcp.h tcp_orig.h
進(jìn)入需要修改的文件目錄,備份源文件為tcp_orig.h蛹尝,此時(shí)可對(duì)tcp.h 進(jìn)行參數(shù)修改,完成后后豫,在內(nèi)核源碼包根路徑下,使用diff生成patch補(bǔ)丁文件突那。
[root@localhost ~]# cd /tmp/linux-3.10.0-327.36.3.el7/
[root@localhost linux-3.10.0-327.36.3.el7]# diff -up include/net/tcp_orig.h include/net/tcp.h >> /tmp/custom.patch
生成patch文件, 第一個(gè)參數(shù)為原始文件,第二個(gè)為修改后的文件挫酿,如需要對(duì)文件夾下大量文件修改,可以先備份目錄后修改,使用以下命令生成批量文件補(bǔ)丁愕难,將patch補(bǔ)丁復(fù)制到rpmbuild源碼包目錄早龟。
[root@localhost ~]diff -uprN include_orig/net include/net >> /tmp/custom.patch
[root@localhost ~] cp /tmp/custom.patch /root/rpmbuild/SOURCES/
[root@localhost ~] vim /root/rpmbuild/SPECS/kernel.spec
編輯spec配置文件惫霸,查找ApplyOptionPatch開(kāi)頭的行,新增一行自定義補(bǔ)丁
ApplyOptionalPatch linux-kernel-test.patch
ApplyOptionalPatch debrand-single-cpu.patch
ApplyOptionalPatch debrand-rh_taint.patch
ApplyOptionalPatch debrand-rh-i686-cpu.patch
ApplyOptionalPatch custom.patch //新增加行
繼續(xù)查找Patch1開(kāi)頭的行,增加一行自定義補(bǔ)丁,Patch后面的數(shù)字為優(yōu)先級(jí),可以自定義葱弟。
# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch
Patch1000: debrand-single-cpu.patch
Patch1001: debrand-rh_taint.patch
Patch1002: debrand-rh-i686-cpu.patch
Patch4000: custom.patch //新增加行
完成后壹店,可以將custom.patch 和 kernel.spec 文件保留作備用。
[root@localhost ~] cd ~/rpmbuild/SPECS
[root@localhost rpmbuild] rpmbuild -bb --target=$(uname -m) SPECS/kernel.spec
使用rpmbuild -bb 命令直接構(gòu)建二進(jìn)制rpm安裝包芝加,會(huì)自動(dòng)解壓內(nèi)核至BUILDS文件夾硅卢,并根據(jù)kernel.spec配置打補(bǔ)丁等操作,等待結(jié)束藏杖,會(huì)在RPMS目錄中生成修改完成后的RPM包将塑,將包復(fù)制到目標(biāo)服務(wù)器執(zhí)行。
rpm -Uvh kernel-3.10.0-327.36.3.el7.x86_64.rpm 重啟并進(jìn)行驗(yàn)證.
硬件配置對(duì)內(nèi)核編譯時(shí)間影響較大制市,從幾十分鐘甚至幾個(gè)小時(shí)抬旺,建議使用i7級(jí)別以上的多核CPU提高效率弊予。