カーネル再構築

gcc のインストール

# sudo apt-get install gcc-4.3 g++-4.3 gcc-4.2 g++-4.2 gcc-4.1 g++-4.1

update-alternativesでgccのバージョンを変更する。

# sudo update-alternatives --config gcc

「gcc の alternatives がありません。」の対処

「gcc の alternatives がありません。」とか言われたらdebianでgccのバージョンを切り替える - kinneko@転職先募集中の日記を参考に、gccのalternativesを作成する。

# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 43 \
--slave /usr/bin/g++ g++ /usr/bin/g++-4.3 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-4.3

# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.2 42 \
--slave /usr/bin/g++ g++ /usr/bin/g++-4.2 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-4.2

# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 41 \
--slave /usr/bin/g++ g++ /usr/bin/g++-4.1 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-4.1

再構築に必要なパッケージのインストール

再構築に必要なパッケージのインストール。

# sudo apt-get install kernel-package libncurses-dev initramfs-tools
# sudo apt-get install unzip zip bison texinfo flex

Linux Kernel 2.6.26.8

ソースファイルの取得

こちらのサイトから最新のソースファイルを取得する。(今回は colinux-0.8.0-20091215.src.tgz を取得)

# cd /usr/src
# sudo wget http://www.henrynestler.com/colinux/autobuild/devel-20091215/colinux-0.8.0-20091215.src.tgz

ソースファイルの解凍とパッチ適用

coLinux のソースファイルを解凍、パッチ適用。

# sudo tar -xvzf colinux-0.8.0-20091215.src.tgz
# cd colinux-20091215
# sudo ./configure
# sudo make kernel
Making Kernel 2.6.26.8あたりで[Ctrl]+C

カーネル設定

デフォルトの設定ファイルのコピー。

# cd ../build/linux-2.6.26.8-source
# sudo cp ../../colinux-20091215/conf/linux-2.6.26.8-config .config

カーネル設定。

# sudo make oldconfig
# sudo make menuconfig
    Processor type and features --->
        Processor family --->
            (*) Opteron/Athlon64/Hammer/K8
    Networking --->
        Networking options --->
            < > The IPv6 protocol
    Device Drivers --->
        [*] Network device support --->
            <*> Universal TUN/TAP device driver support
            < > PPP (point-to-point protocol) support
    File systems --->
        <*> Ext4dev/ext4 extended fs support development (EXPERIMENTAL)
        < > Reiserfs support
        < > JFS filesystem support
        < > XFS filesystem support
        < > OCFS2 file system support
        DOS/FAT/NT Filesystems --->
            (932) Default codepage for FAT
            (euc-jp) Default iocharset for FAT
        [*] Network File Systems --->
            <M> SMB file system support (OBSOLETE, please use CIFS)
                [*] Use a default NLS
                    (cp932) Default Remote NLS Option
            < > NCP file system support (to mount NetWare volumes)
        -*- Native language support --->
            (euc-jp) Default NLS Option
            <*> Japanese charsets (Shift-JIS, EUC-JP)
            <*> NLS UTF-8
    Kernel hacking --->
        [ ] Kernel debugging

コンパイルとパッケージの作成

vmlinuxとinitrd.gz、モジュールファイルの作成。
CONCURRENCY_LEVELで並列コンパイル。
MAKEFLAGSでgcc-4.1とg++-4.1を使うように。

# sudo CONCURRENCY_LEVEL=2 MAKEFLAGS="CC=gcc-4.1 CXX=g++-4.1" make-kpkg --initrd --revision=20091215.1 kernel_image kernel_headers

vmlinuxをリネーム。

# sudo mv vmlinux vmlinux-2.6.26.8-co-0.8.0

モジュールのインストール

コンパイルしたモジュールをインストール。

# cd ..
# sudo dpkg -i linux-image-2.6.26.8-co-0.8.0_20091215.1_i386.deb

モジュールパッケージの作成

再インストールや他のディストリ向けに vmlinux-modules.tar.gz を作成する。

# sudo ar -x linux-image-2.6.26.8-co-0.8.0_20091215.1_i386.deb
# sudo tar -xvzf data.gz
# sudo tar -cvzf vmlinux-modules-2.6.26.8-co-0.8.0.tar.gz lib

ファイルのコピー

以下の三つのファイルをホスト側にコピーする。

  • /boot/initrd.img-2.6.26.8-co-0.8.0
  • /usr/src/linux-2.6.26.8/vmlinux-2.6.26.8-co-0.8.0
  • /usr/src/vmlinux-modules-2.6.26.8-co-0.8.0.tar.gz

あとは以下のようにservice.confを書き換えれば作業完了。
Pathは各自要確認。

service.conf

kernel=D:\Profile\AppData\coLinux\vmlinux-2.6.26.8-co-0.8.0
cobd0=D:\Profile\AppData\coLinux\Ubuntu\rootfs
cobd1=D:\Profile\AppData\coLinux\Ubuntu\swapfs
cobd2=D:\Profile\AppData\coLinux\Ubuntu\userfs
root=/dev/cobd0
ro
initrd=D:\Profile\AppData\coLinux\initrd.img-2.6.26.8-co-0.8.0
mem=256
cocon=100x30
eth0=ndis-bridge,"ローカル エリア接続"
eth1=slirp,,tcp:2222:22
ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

Linux Kernel 2.6.25.20

coLinux devel 0.8.0 ( Linux Kernel 2.6.25.20 )

ソースファイルの取得

こちらのサイトから最新のソースファイルを取得する。(今回は devel-colinux-20091115.tar.gz と linux-2.6.25.20-co-20091115-2.patch.gz を取得)
更に Ring サーバからカーネル 2.6.25.20 を取得する。

# cd /usr/src
# sudo wget http://www.henrynestler.com/colinux/testing/devel-0.8.0/20091115-Snapshot/devel-colinux-20091115.tar.gz
# sudo wget http://www.henrynestler.com/colinux/testing/devel-0.8.0/20091115-Snapshot/kernel-patches/linux-2.6.25.20-co-20091115-2.patch.gz
# sudo wget http://www.ring.gr.jp/pub/linux/kernel.org/kernel/v2.6/linux-2.6.25.20.tar.bz2

ソースファイルの解凍とパッチ

coLinux のソースファイルを解凍。

# sudo tar -xvzf devel-colinux-20091115.tar.gz

Linux カーネルのソースファイルを解凍、パッチ当て。

# sudo sh -c 'bzip2 -dc linux-2.6.25.20.tar.bz2 | tar xvf -'
# cd linux-2.6.25.20
# sudo sh -c 'gzip -cd ../linux-2.6.25.20-co-20091115-2.patch.gz | patch -p1'

uname に表示されるローカルカーネルバージョン。

# sudo sh -c 'echo -co-0.8.0 > localversion-cooperative'

カーネル設定

デフォルトの設定ファイルのコピー。

# sudo cp ../devel-colinux-20091115/conf/linux-2.6.25.20-config .config

カーネル設定。

# sudo make menuconfig
    Processor type and features --->
        Processor family --->
            (*) Opteron/Athlon64/Hammer/K8
    Networking --->
        Networking options --->
            < > The IPv6 protocol
    Device Drivers --->
        [*] Network device support --->
            <*> Universal TUN/TAP device driver support
            < > PPP (point-to-point protocol) support
    File systems --->
        < > Reiserfs support
        < > JFS filesystem support
        < > XFS filesystem support
        DOS/FAT/NT Filesystems --->
            (932) Default codepage for FAT
            (euc-jp) Default iocharset for FAT
        [*] Network File Systems --->
            <M> SMB file system support (OBSOLETE, please use CIFS)
                [*] Use a default NLS
                    (cp932) Default Remote NLS Option
            < > NCP file system support (to mount NetWare volumes)
        -*- Native language support --->
            (euc-jp) Default NLS Option
            <*> Japanese charsets (Shift-JIS, EUC-JP)
    Kernel hacking --->
        [ ] Kernel debugging

コンパイルとパッケージの作成

vmlinuxとinitrd.gz、モジュールファイルの作成。
CONCURRENCY_LEVELで並列コンパイル。
MAKEFLAGSでgcc-4.1とg++-4.1を使うように。

# sudo CONCURRENCY_LEVEL=2 MAKEFLAGS="CC=gcc-4.1 CXX=g++-4.1" make-kpkg --initrd --revision=colinux.1 kernel_image kernel_headers

vmlinuxをリネーム。

# sudo mv vmlinux vmlinux-2.6.25.20-co-0.8.0

モジュールのインストール

デフォルトのモジュールをリネーム。

# sudo mv /lib/modules/2.6.25.20-co-0.8.0 /lib/modules/2.6.25.20-co-0.8.0.old

コンパイルしたモジュールをインストール。

# cd ..
# sudo dpkg -i linux-image-2.6.25.20-co-0.8.0_colinux.1_i386.deb

モジュールパッケージの作成

再インストールや他のディストリ向けに vmlinux-modules.tar.gz を作成する。

# sudo ar -x linux-image-2.6.25.20-co-0.8.0_colinux.1_i386.deb
# sudo tar -xvzf data.gz
# sudo tar -cvzf vmlinux-modules-2.6.25.20-co-0.8.0.tar.gz lib

ファイルのコピー

以下の三つのファイルをホスト側にコピーする。

  • /boot/initrd.img-2.6.25.20-co-0.8.0
  • /usr/src/linux-2.6.25.20/vmlinux-2.6.25.20-co-0.8.0
  • /usr/src/vmlinux-modules-2.6.25.20-co-0.8.0.tar.gz

あとは以下のようにservice.confを書き換えれば作業完了。
Pathは各自要確認。

service.conf

kernel=D:\Profile\AppData\coLinux\vmlinux-2.6.25.20-co-0.8.0
cobd0=D:\Profile\AppData\coLinux\Ubuntu\rootfs
cobd1=D:\Profile\AppData\coLinux\Ubuntu\swapfs
cobd2=D:\Profile\AppData\coLinux\Ubuntu\userfs
root=/dev/cobd0
ro
initrd=D:\Profile\AppData\coLinux\initrd.img-2.6.25.20-co-0.8.0
mem=256
cocon=100x30
eth0=ndis-bridge,"ローカル エリア接続"
eth1=slirp,,tcp:2222:22
ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

参考リンク

coLinuxのメモ - カーネルのコンパイル
CoLinux TIPS - Silicon Linux Wiki