工作要應付客戶千奇百怪的問題,所以複製相同的環境變成很重要的一個課題。
之前就有遇到一個問題,客戶端使用Fedora 14,告知我們kernel version是2.6.35。
我去kernel.org抓下kernel 2.6.35的版本來修改,但是客戶那邊卻回覆我們與他們使用的kernel不同(比較後得知)。怕有些地方會出問題,所以請我們跟他們要用相同的檔案!
原因是因為每一個發行版本都會去將使用的kernel version做自己的一些patch,像著名的RHEL(CentOS)就是patch到跟2.6.18的kernel差非常多XD
那如何取得發行版本所使用的真正kernel source呢!?
Debian系列很簡單,只要透過 apt-get source 套件名稱 即可。
Redhat系列就相對麻煩,因為必須要透過RPMS來取得source code(有錯請告知^^)。
所以進入主題了,如何透過RPMS來取得source code呢!?
1. 取得RPMS的spec
~$ rpm -ivh kernel-2.6.35.6-45.fc14.src.rpm
這時候就會有kernel source以及相當多的patch被放在 ~/rpmbuild/BUILD下面
以及被放在~/rpmbuild/SPECS下面的kernel.spec
2. 透過spec,讓rpmbuild做到將kernel patch完畢然後停止,不然等rpmbuild做完,他也會順道將BUILD底下的東西砍光...
~$ rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec
-bp : Executes the "%prep" stage from the spec file. Normally this involves unpacking the sources and applying any patches.
所以就作到這邊就好! patch好的kernel source就會被放在 ~/rpmbuild/BUILD下面^^
雖然rpm -ivh *.src.rpm會將source and patch放置到BUILD下面,但是避免手動patch出錯,這樣的方式是比較快而且正確的。不然以前都傻傻的rpmbuild到make時強制中斷XD