DebianやUbuntuでソースを取得してコンパイルする

debianのapt系コマンドでソースやその依存ライブラリなどを自動で取得してコンパイルし、debファイルを作成する方法。ここではUbuntuのnetwork-adminというIPアドレスやDNSサーバの設定をするツールのソースを持ってきてコンパイルしてdebファイルをつくってみる。


network-admin

まずこのツールがどのパッケージにあるかを調べる。

gnome-system-toolsというパッケージにnetwork-adminが含まれている。そこでこのパッケージのソースを持ってくる。

つぎにこれをコンパイルするのに必要な開発用ライブラリやツールなどをインストールする。

fakerootを使うのでインストールする。

以下のコマンドでコンパイルしてdebを作成する。

成功すれば、1つ上のディレクトリにdebファイルが作成される。これをインストールするにはdpkg -iコマンドを使う。

もとに戻すには以下のコマンドを使う。

apt-getでkernelをアップグレードから除外する

vmwareでlinuxを動かしていると、カーネルのアップグレードがあるたびに面倒なことになるので、apt-get upgradeしたときカーネルをアップグレードしない方法を調べてみた。

ここではdebianを使って行った。

$ cat /etc/debian_version
4.0
$ uname -r
2.6.18-6-486

# apt-get upgrade -s
Reading package lists... Done
Building dependency tree... Done
The following packages will be upgraded:
cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2 libfreetype6 libfreetype6-dev libtiff4 libxml2
libxml2-utils libxslt1.1 linux-image-2.6.18-6-486 linux-source-2.6.18 openssh-client openssh-server python-libxml2
xsltproc

upgrade に-sをつけてシミュレーションで動かすと、inux-image-2.6.18-6-486とlinux-source-2.6.18がアップグレード対象であることがわかる。

wajigを使ってholdする

# apt-get install wajig

# wajig hold linux-image-2.6.18-6-486 linux-source-2.6.18
The following packages are on hold:
linux-image-2.6.18-6-486
linux-source-2.6.18

これでこれら2つのパッケージはアップグレードされないと思うので再び以下のように確認してみる。

# apt-get upgrade -s
Reading package lists... Done
Building dependency tree... Done
The following packages have been kept back:
linux-image-2.6.18-6-486 linux-source-2.6.18
The following packages will be upgraded:
cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2 libfreetype6 libfreetype6-dev libtiff4 libxml2
libxml2-utils libxslt1.1 openssh-client openssh-server python-libxml2 xsltproc

2つのパッケージがkept backになっているのでアップグレードされないのだろう。wajigはdpkgレベルで動くものらしく、上記のholdコマンドはたぶん以下のようにdpkgの–get-selectionsや–set-selectionsを使っていると思われる。

# dpkg --get-selections | grep hold
linux-image-2.6.18-6-486 hold
linux-source-2.6.18 hold

wajigでholdしたものは以下のようにして元に戻す。

# wajig unhold linux-image-2.6.18-6-486 linux-source-2.6.18
The following packages are still on hold:

/etc/apt/preferencesを使う方法

aptにはパッケージをpinする機能があるらしく、以下のような手順で実現した。

# dpkg-query --list|grep linux-image
ii linux-image-2.6-486 2.6.18+6etch3 Linux kernel 2.6 image on x86
ii linux-image-2.6.18-6-486 2.6.18.dfsg.1-22 Linux 2.6.18 image on x86
# dpkg-query --list|grep linux-source
ii linux-source-2.6.18 2.6.18.dfsg.1-22 Linux kernel source for version 2.6.18 with

# vi /etc/apt/preferences

# apt-get upgrade -s
Reading package lists... Done
Building dependency tree... Done
The following packages will be upgraded:
cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2 libfreetype6 libfreetype6-dev libtiff4 libxml2
libxml2-utils libxslt1.1 openssh-client openssh-server python-libxml2 xsltproc

2つのパッケージがアップグレード対象から消えた。