エンジョイAsobi

スマホとWindowsとLinuxを遊ぶ。

Ubuntu

Ubuntuのカーネル再構築

投稿日:2014年2月23日 更新日:

実験用に作ったUbuntu13.10の仮想マシン上で、Linuxカーネルの再構築を試しました。

まずカーネルのビルド環境を構築。
元がサーバー版Ubuntuだったので、ビルド環境なんてほぼ何も入っておらず。コマンド一発であれこれ一気にパッケージが入りました。

~>$ sudo apt-get build-dep linux-image-$(uname -r) 
Reading package lists… Done 
Building dependency tree 
Reading state information… Done 
Picking ‘linux’ as source package instead of ‘linux-image-3.11.0-17-generic’ 
The following NEW packages will be installed: 
  apparmor-easyprof asciidoc binutils binutils-dev bison build-essential cpp cpp-4.8 
  debhelper dh-apparmor docbook-dsssl docbook-utils docbook-xml docbook-xsl dpkg-dev 
  flex g++ g++-4.8 gcc gcc-4.8 gettext ghostscript gsfonts intltool-debian jadetex 
  kernel-wedge libasan0 libasprintf-dev libatomic1 libaudit-dev libbison-dev 
  libc-dev-bin libc6-dev libcloog-isl4 libcupsfilters1 libcupsimage2 libdpkg-perl 
  libdw-dev libdw1 libelf-dev libexpat1-dev libfl-dev libgcc-4.8-dev libgettextpo-dev 
  libgettextpo0 libgmp10 libgomp1 libgs9 libgs9-common libicu48 libijs-0.35 libisl10 
  libitm1 libjbig2dec0 libkpathsea6 liblcms2-2 libmpc3 libmpfr4 libnewt-dev libosp5 
  libostyle1c2 libpaper-utils libpaper1 libpci-dev libpng12-dev libpoppler43 
  libptexenc1 libpython-dev libpython2.7-dev libquadmath0 libsgmls-perl libslang2-dev 
  libsp1c2 libstdc++-4.8-dev libtsan0 libunistring0 libunwind8 libunwind8-dev libxaw7 
  libxml2-utils libxmu6 libxslt1.1 linux-libc-dev luatex m4 make makedumpfile 
  openjade pkg-config po-debconf poppler-data python-dev python2.7-dev sgml-data 
  sgmlspl sharutils sp tex-common texlive-base texlive-binaries 
  texlive-fonts-recommended texlive-generic-recommended texlive-latex-base 
  texlive-latex-recommended tipa transfig ttf-marvosym xdg-utils xmlto xsltproc 
  zlib1g-dev 
0 upgraded, 111 newly installed, 0 to remove and 0 not upgraded. 
Need to get 143 MB of archives. 
After this operation, 399 MB of additional disk space will be used. 
Do you want to continue [Y/n]? 

apt-get build-depは、指定したパッケージのビルドに必要とされているパッケージをまとめてインストールしてくれるコマンドです。便利ですが、何か今回はやけに一気にたくさん入った感じがします。texなんて他の用途では要らないのになと思いつつ。

続いてカーネルのソースを取得しました。

ソースを取得する方法は複数あるようですが、gitで最新のソースを取得する方法を選択しました。

どのgitリポジトリをgit cloneするかは、

http://kernel.ubuntu.com/git

を見て選択。

~>$ mkdir kernel 
~>$ cd kernel 
~/kernel>$ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-saucy.git

ところが!これすごく時間がかかりました。

正確には測り損ねましたが、概ね2時間半かかってやっと完了。長かった…。

ここで試しにビルド。

ソースに変更を加えるなら本来ここですが、まずビルド環境ができているか確認するため、git cloneしたそのままビルドしてみました。

~/kernel>$ cd ubuntu-saucy/ 
~/kernel/ubuntu-saucy>$ fakeroot debian/rules clean 
~/kernel/ubuntu-saucy>$ fakeroot debian/rules binary-headers binary-generic

ビルド完了までまた長くて。

カーネルのビルドに延々待たされました。

しかしここで一つ疑問が!

ホストOS側でタスクマネージャー開いて見ていましたが、ビルド中のCPU使用率がほんの一桁%までしか上がらない。

仕事でARMのLinuxカーネルは何度もビルドしていますが、こんなにCPU使用率が低いことはありません。いつもmakeに-jつけてマルチスレッド処理させて、概ね80%前後までブン回してます。ARMとAMD64の違いはあるものの、それが原因でCPU使用率にこんなに差がつくとも思えない。

一桁%までしかCPU使用率が上がらないということは、CPUリソースを遊ばせているわけで、時間を損している気がします。まあ今はとりあえず進めるとして、いずれどうすればよいか調べねば。

結局、38分かかってビルド完了。

ビルドに成功してれば、一階層上のディレクトリに.debファイルができています。

~/kernel/ubuntu-saucy>$ cd .. 
~/kernel>$ ls -l *.deb 
-rw-r–r– 1 nashi nashi  1173674 Feb 23 22:50 linux-headers-3.11.0-18-generic_3.11.0-18.32_amd64.deb 
-rw-r–r– 1 nashi nashi 12737546 Feb 23 22:12 linux-headers-3.11.0-18_3.11.0-18.32_all.deb 
-rw-r–r– 1 nashi nashi 14730844 Feb 23 22:49 linux-image-3.11.0-18-generic_3.11.0-18.32_amd64.deb 
-rw-r–r– 1 nashi nashi 33968350 Feb 23 22:50 linux-image-extra-3.11.0-18-generic_3.11.0-18.32_amd64.deb 
-rw-r–r– 1 nashi nashi   121016 Feb 23 22:50 linux-tools-3.11.0-18-generic_3.11.0-18.32_amd64.deb

さっそく正しくビルドできたかインストールしてみました。

ただ万一を考えてHyper-Vマネージャーからチェックポイントを作ってから試しました。こういう時VMで環境を作っていると便利。

~/kernel>$ sudo dpkg -i linux-headers-3.11.0-18-generic_3.11.0-18.32_amd64.deb linux-headers-3.11.0-18_3.11.0-18.32_all.deb linux-image-3.11.0-18-generic_3.11.0-18.32_amd64.deb 
~/kernel>$ sudo reboot

再起動後にバージョンを確認してみると、

~>$ uname -r 
3.11.0-18-generic

再構築前は 3.11.0-17-generic だったので、ちゃんと差し替わってる。dmesgもおかしなログは無いようだ。

あっさりビルドしたカーネルで起動してくれた。

ビルド時のCPU使用率に疑問はあるものの、これでカーネルに手を加えて実験してみる環境が手に入ったようだ。

-Ubuntu

関連記事

Hyper-VでUbuntu 14.04を試す(1)

ついにリリースされました、Ubuntu 14.04。 実験用にインストールした13.10はともかく、実用に使っていた12.04マシンの調子が最近悪くて。インストールし直したかったけど、あと少しで14. …

Windows 8.1上でHyper-Vを試す ~Ubuntuの仮想マシンを作る(2)~

前回、空の仮想マシンを作るところまで書きました。 (なんか長かった…)。 続いてUbuntuを仮想マシンにインストールします。 Ubuntuのインストールを開始するには、まずHyper-Vマネージャー …

Windows 8.1上でHyper-Vを試す ~ネットワークがつながらない~

前回、Hyper-V上の仮想マシンにUbuntuをインストールしたところまで書きました。 インストールが完了して、さっそく仮想マシンにSSHからログインしてあれこれ設定しようとしました。しかし、 SS …

カーネルモジュールのビルド

前回、OOM Killerの発動を検知するテスト用のカーネルモジュールをビルドしたと書きました。前回は長くなるのを避けてビルド手順を端折ったので、改めて記録しておきます。ここを見ながらビルドしました。 …

OOM Killerの発動を検知したい

今回はプログラムの話。タイトル通り、LinuxのOOM Killerが発動したことを検知したいという話です。組み込みでLinuxを使っていると、OOM Killerが動き出すこと自体異常事態なので、検 …