金子邦彦研究室インストールFreeBSDFreeBSD でカスタムカーネルのビルドとインストール

FreeBSD でカスタムカーネルのビルドとインストール

(オプション) カーネルコンフィグファイルの新規作成と編集

カーネルのセキュアレベル

/etc/rc.conf の 「kern_securelevel="-1"」の行を、(必要なら)変更する. /etc/rc.conf の変更を有効にするためには、reboot を行ってください.
参考 Web ページ: https://docs.freebsd.org/ja/books/handbook/security/

カーネルコンフィグファイルの新規作成と編集

下記のamd64のところは,マシンのタイプに応じて,適切に読み替えてください.

cd /usr/src/sys/amd64/conf
cp GENERIC NEWKERNEL
# ここで、NEWKERNEL の編集を行ってください

[image]

カスタムカーネルの構築ですが、昔は、性能向上が目的でした。 現在は、コンピュータは十分速いですが、 セキュリティ向上のために余分な機能を削る という目的で、カスタムカーネルの構築を行なうことをお勧めします.

config を実行する前に、NEWKERNEL の編集を行う.

関連する外部ページ http://www.jp.freebsd.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/kernelconfig.html

/etc/make.conf の設定

/etc/make.conf には、新しいカーネル識別名を書いておきます.

KERNCONF= NEWKERNEL

システムとカーネルのビルドとインストール

/etc/make.conf の設定

/etc/make.conf には、次のような行を追加しておく.

# /etc/make.conf を次のように設定
CFLAGS+=-O2 -fno-strict-aliasing -pipe
NO_PROFILE=true
USA_RESIDENT=NO

[image]

システムのビルド

先ほど、「cd /usr/src; make update」を実行して,ソースコードの更新を行った。更新されたソースコードを使って,システムのビルドを行う.

  1. FreeBSD ハンドブックに目を通す

    作業を行う前に、FreeBSD ハンドブックの Web ページ を読んでおく.役に立つ情報が得られるでしょう.

  2. /usr/src/UPDATING に目を通す
  3. /usr/share/examples/etc/make.conf に目を通す

    /usr/share/examples/etc/make.conf の CFLAGS, NO_PROFILE の行を参考にして,/etc/make.conf を書き換える

  4. (オプション)前回のビルドの結果の消去

    「以前にも,同じマシンで,FreeBSD のシステムのインストール(つまり make buildworld) したことがある」という場合,前回のビルド結果を消しておく操作を行っておく.

    make buildworld により,「前回のビルド結果は自動で消える」はず,とは言え,下記のようなコマンド操作を行っておくと,トラブルが減る(私の経験上)

    cd /usr/obj
    # chflags -R noschg * で "No such file or directory" と出ても無視
    chflags -R noschg *
    rm -rf *
    cd /usr/src
    # make cleandir は2回行う
    make cleandir; make cleandir
    
  5. システムのビルド操作

    ビルドには大体1時間以上かかります. 「script ...」の実行で、以下「exit」までが /var/tmp/makeworld.out に記録されるようになる.これは,エラー時に役立つので便利.

    プロファイル版のライブラリを生成したくない ときは,make buildworld, make installworld の実行時(両方とも)に,「-DNOPROFILE=true」を付ける

    script /var/tmp/makeworld.out
    cd /usr/src
    make -j4 buildworld
    

    [image]
  6. ビルドの結果の確認

    エラーメッセージが出ていないこと

    [image]
  7. script の終了

    exit
    

GENERIC カーネルのバックアップ

今なら「インストールした時点のカーネルのファイル(つまり確実に動くファ イル)」 が残っているので、バックアップしておく.

  1. シングルユーザモードで起動

    カーネルのバックアップは,シングルユーザモードで行ないたい。

    shutdown now
    fsck -p
    mount -u /
    mount -a -t ufs
    swapon -a
    

    [image]

    [image]
  2. GENERIC カーネルのバックアップ操作

    mkdir /boot/GENERIC.BAK
    cd /boot
    tar -cvpf /var/tmp/GENERIC.tar ./kernel
    cd /boot/GENERIC.BAK
    tar -xvpf /var/tmp/GENERIC.tar
    rm /var/tmp/GENERIC.tar
    
  3. マルチユーザモードに移行

    バックアップが終わったので,「exit」でマルチユーザモードに移行する.

    exit
    

カーネルのビルドとインストール

カーネルの構築とインストールを行うが、その前に、上記の「システムのビルド」を済ませておくこと。

  1. カーネルのビルド操作

    GENERIC カーネルを再構築する場合

    GENERIC カーネルを再構築してインストールする場合には 下記のように「KERNCONF=GENERIC」とします.

    カーネルの構築とインストールには、時間がかかります

    script /var/tmp/buildkernel.out
    cd /usr/src
    make -j4 buildkernel KERNCONF=GENRIC
    

    カスタム・カーネルを構築する場合

    KERNCONF=*** のところには、作成したカーネルコンフィグファイルの名前を書く.

    ※ 「カーネルコンフィグファイルを作っていないよ」という場合には,すでにある GENERIC を使いたいので,上の「GENERIC カーネルを再構築する場合」の手順になる.

    script /var/tmp/buildkernel.out
    cd /usr/src
    make -j4 buildkernel KERNCONF=NEWKERNEL
    
  2. script の終了

    exit
    
  3. シングルユーザモードで起動

    カーネルのインストールは,シングルユーザモードで行ないたい。

    shutdown now
    fsck -p
    mount -u /
    mount -a -t ufs
    swapon -a
    
  4. カーネルのインストール操作

    GENERIC カーネルをインストールする場合

    GENERIC カーネルを再構築してインストールする場合には 下記のように「KERNCONF=GENERIC」とします.

    カーネルの構築とインストールには、時間がかかります

    cd /usr/src
    make installkernel KERNCONF=GENERIC
    

    [image]

    カスタム・カーネルをインストールする場合

    KERNCONF=*** のところには、作成したカーネルコンフィグファイルの名前を書く.

    ※ 「カーネルコンフィグファイルを作っていないよ」という場合には,すでにある GENERIC を使いたいので,上の「GENERIC カーネルを再構築する場合」の手順になる.

    cd /usr/src
    make installkernel KERNCONF=NEWKERNEL
    
  5. 再起動

    再起動します.

    sync
    sync
    sync
    sync
    sync
    reboot
    

■ カーネルが起動しない場合

ブートローダ(FreeBSD の新しいバージョンなら、起動時のメニューで 「6. Escape to loader prompt」を選びます

unload
load /boot/GENERIC.BAK/kernel/kernel 
boot

のようにカーネルのファイル名を指定して起動できるので、さっきバックアッ プをとっておいた GENERIC カーネルで起動します.

システムのインストール

  1. シングルユーザモードで起動

    システムのインストールは,シングルユーザモードで行ないたい。

    shutdown now
    fsck -p
    mount -u /
    mount -a -t ufs
    swapon -a
    

    [image]

    [image]
  2. 新カーネルのタイムゾーンの設定

    adjkerntz -i
    

    [image]
  3. システム設定ファイルのバックアップ

    cp -Rp /etc /etc.org
    

    [image]
  4. システム設定ファイルの事前マージ

    mergemaster -p
    

    [image]

    基本は「d」で棄却. 必要なものだけ「m」でマージ.

    [image]
  5. システムのインストール

    make installworld のときは,オプションに -j などを付けてはいけません

    ※ 「make installworld」の実行時に指示が出たら、指示に従うこと

    cd /usr/src
    make installworld
    

    [image]
  6. 再起動

    再起動します.操作ミスで,再起動できなくなることもよくあるので注意(そのときはシングルユーザモードで再起動して,/etc.org を使うなどで対処)

    sync
    sync
    sync
    sync
    sync
    reboot
    
  7. 不要ファイルの削除と,システム設定ファイルの事後マージ

    まず,不要ファイルの削除を行う.

    cd /usr/src
    make delete-old
    

    [image]

    次は mergemaster の実行.

    基本は「d」で棄却. 必要なものだけ「m」でマージ.

    mergemaster -UPi
    

    ※ mergemaster の実行によって /etc, /dev のファイルが新しいファイルに入れ替わってしまうので, 上記の手順では,「cp -Rp /etc /etc.org」 を実行して、コピーを作っています./etc.orgに古いファイルがバックアップ として残るので、必要に応じて、自分でマージを行ってください(つまり、手動でマージします. 問題が起きたときに /etc/etc.org のファイルを見る、という感じでも良いで しょう)。

  8. バージョンの確認

    uname -a
    

    「uname -a」を実行して、バージョンを確認しておく.

(オプション)後処理

# (オプション)古いライブラリの削除
cd /usr/src
make delete-old-libs

# (オプション)sysinstall のインストール
cd /usr/src/release/sysinstall
make all install

注意点

たいていは大丈夫なのですが、 システムの更新の結果,たまに、いくつかのソフトが動かなくなることがあります. (/usr/src/UPDATING を確認)

解決法