金子邦彦研究室インストールFreeBSDFreeBSD のシステム更新

FreeBSD のシステム更新

はじめに

セキュリティ上の理由で、 FreeBSD システムは、適宜、更新した方が良いです. 以下、システム全体(カーネルとライブラリなど)等のシステム更新の手順を説明する.

注意点

カーネルの更新に失敗すると、FreeBSD の起動ができなくなってしまいますので、以下の手順では「インストール時点 のカーネルをバックアップしておいて、いざというときは、それを起動」する 手順も書いています

どうしても起動で きなくなったなったときは FreeBSD CD-ROM で起動して、必要なファイルは 吸い出すこともできる(少し面倒くさいですが)。 だから、それほど、心配する必要はありません。 自信は無いが、カーネルの更新にチャレンジしたい方は、 大事なファイルはバックアップしておくことを考えてください。


前準備

方針の決定

「最新」のソースコードを取得して,システムを更新するのですが,「最新」という意味が

のどれかになる.どれにするか決めておくこと.

/etc/src.conf の設定

/etc/src.conf は次のように設定されていること.

SUP_UPDATE= yes
SUP= /usr/bin/csup
SUPFLAGS= -g -L 2

SUPHOST= cvsup3.jp.FreeBSD.org
SUPFILE= /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile

PORTSNAP_UPDATE=yes
PORTSNAP=/usr/sbin/portsnap

SUPFLAGS に書いている引数の意味は次の通りです.

CVSタグの設定法

最初に、/usr/share/examples/cvsup/stable-supfile, /usr/share/examples/cvsup/standard-supfile を確認.

CVS タグ が書いてある. タグとは、「*default release=cvs tag=???」の行のことである.

「release=cvs tag=.」のように書いてあるはずです. 「.」が CURRENT という意味になる.

タグの詳しい意味については、http://www.freebsd.org/releng/index.htmlや、 FreeBSD ハンドブックの CVS タグの章 を見て下さい。

  • 「current の最新」を追いかける場合

    standard-supfileを確認の上,設定する.

    ソースコードの更新

    以下のようにコマンドを実行して,ソースコードを更新します.

    cd /usr/src
    make update
    

    [image]

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

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

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

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

    下記の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 を確認)

    解決法