2013年4月21日日曜日

SynapticでインストールできるSATAなしカーネル

Basix用にSATA無しカーネルパッケージを作ってみました。
前回はLinuxMint用に作ったカーネルをそのままBasixにインストールしてしまいましたが、ディストリビューションによって採用しているカーネルのバージョンが違うのでどうかな、とは思っていました。
そこで今回は仮想マシン上のBasix自身でカーネルを作ってみました。
追伸:LinuxMint13 MATEやXFCE用も作ってみました。ディレクトリ名などの「basix」を「mint13mate」や「mint13xfce」に読み替えれば大体作業OKです。

1.環境構築

VMware上にBasixをインストールしてアップデートをかけた後、コピペのため、「open-vm-toolbox」(Mintの場合はついでに「ibus」「linux-generic-pae」)をインストールして、その後再起動します。
その上で、某誌を参考にカーネル構築環境をインストールします。
~$ sudo apt-get update
~$ sudo apt-get upgrade
~$ sudo apt-get install dpkg-dev libncurses5-dev kernel-package dh-make debhelper libelf-dev flex bison libgtk2.0-dev libnewt-dev python-dev libdw-dev binutils-dev asciidoc
~$ mkdir rebuild
~$ cd rebuild/
~/rebuild$ 
~/rebuild$ apt-get source linux-image-$(uname -r)
~/rebuild$ cd linux-3.5.0/
※LinuxMintの場合には /etc/apt/sources.list にソースパッケージのリポジトリがないのでこんな感じで追加しておかなければなりません。
deb-src http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse

2.設定

現在の環境から設定ファイルをコピーして、設定を行います。
~/rebuild/linux-3.8.0$ cp /boot/config-3.8.0-22-generic .config
~/rebuild/linux-3.8.0$ make oldconfig
~/rebuild/linux-3.8.0$ make menuconfig
メニュー画面が出たら、「General setup」を選択して、『(Ubuntu 3.8.0-22.33-generic 3.8.11) Arbitrary version signature』を選んで、generic の部分を nosata に書き換え、その後ろを3.8.0-22に変更します3.8.11に戻します。(カーソル移動キーは聞かないので、BSで一旦3.5.8.11も消して修正します)
変更後は、『(Ubuntu 3.8.0-22.33-nosata 3.8.0-22)(Ubuntu 3.8.0-22.33-nosata 3.8.11)』になっているはずです。
この「3.8.0-223.8.11」が後でパッケージ名称の「linux-image-3.8.0-22-nosatalinux-image-3.8.11-nosata」になるようです。-nosataの部分はmakeの際にコマンドラインで--append_to_versionで指定した内容みたいです。
その後、Device Driver を選択して、
  • Serial ATA and Parallel ATA drivers
  • Fusion MPT device support
を外します。
外したら、exitを選択していってファイルを保存して終了します。
※make menuconfig の前に、 .config ファイルを直接編集して、「CONFIG_RTS5139=m」という行を「CONFIG_RTS5139=n」に変更します。そうしないと、カーネル構築中に
ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined!
というエラーが出てコンパイルが止まります。

3.コンパイル(パッケージ生成)

以下の手順でカーネルパッケージを生成します。--revisionの部分がSynapticで表示されるバージョンのようです
~/rebuild/linux-3.8.0$ sudo make-kpkg clean
~/rebuild/linux-3.8.0$ sudo make-kpkg --initrd kernel-image kernel-headers --append_to_version="-nosata" --revision=3.8.0-22.38 -j2

4.ローカルリポジトリ作成

自前ローカルリポジトリを作成することにしました。
サーバはすでにApache2が稼働している(けどなにもドキュメントがない)玄箱Debian(squeeze)です。
まずはサーバである玄箱Debian側の作業です。
$ ssh 192.168.x.x(玄箱Debianのアドレス)
$ cd /var/www(WebサーバのDocumentRoot)
$ sudo mkdir basix
$ sudo chown user.user
$ chmod 755 basix
$ cd basix
$ mkdir unstable
次にカーネルパッケージを生成した側の作業で、単に作成したカーネルパッケージを転送します。
$ scp *nosata* tom@192.168.1.5:/var/www/ubuntu/dists/raring/unstable/binary-i386
再び玄箱Debian側の作業です。apt-ftparchiveコマンドはそれぞれのPackages.gz ファイルが置かれるところで実行しないとSynapticでダウンロードする際にパスが合わなくなってしまうようで、ダメみたいです。
$ ssh 192.168.x.x
$ cd /var/www/ubuntu/dists/raring/unstable/binary-i386
$ apt-ftparchive packages . | gzip -c9 > Packages.gz

5.ターゲット側でカスタムカーネルパッケージをインストールする

ターゲット側の環境で /etc/apt/sources.list に以下の内容を追加
deb http://192.168.x.x/basix ./
これでターゲット側において、Synapticパッケージマネージャで「nosata」などで検索すれば、カスタムカーネルパッケージをインストールできるようになりました。
lubuntuの場合のリポジトリの追加はこんな感じでやりました。
<2014.1.12追記>再度カーネルバージョンアップする効率的な方法がいまひとつです。結局、ディスク容量に余裕を持たせた別のマシン(仮想マシン)でカーネルパッケージを作ってインストールしています。

0 件のコメント: