Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
VMwareを利用した make world マシンの構築
[go: Go Back, main page]

VMware - VMwareを利用した make world マシンの構築

一覧 | RSS | TOP | 検索 | 更新履歴

VMwareを利用した make world マシンの構築

現在ではFreeBSD-updateを使っていますのでmake worldしていません。 このため下記のコンテンツは現状に即していない可能性がありますが更新されません(2005/05/01)

わたしの環境では Libretto70 (Pentium MMX 120 Mhz,HDD 1.6GB) が サーバとなってがんばってくれています。 しかし Libretto 70 ではmake worldするディスクも時間もありません^^

しかし OpenSSL で Security Advisory がでるとmake worldが 必要となってしまい、そのたびに SNAPSHOT から OS を再インストール していました(しかも1年に数回あった年もありました、しくしく)

そのうち Libretto 以外にも FreeBSD が増殖してきましたがいずれも make world するだけのディスクはないというのはしくしくな状況になってしまいました。

Desktop の WindowsXP には HDD があまっていましたのでこち らで make world 用のマシンを立ち上げてみました。

書いてみたらハンドブックの「複数のマシンで追っかける」をほとんどそのままですね、違う点は実際のファイルも掲載しているということでしょうか。

VMware Virtual machine の作成

以下のような構成で VM を作成しました

VMwareバージョン4.5.1 build-7568
memory256MB
HDD4.0GB
デバイスAudioなし/USBなし

mini image から FreeBSD のインストール

いずれかの FTP サイトから起動イメージをダウンロードしてきます。 すぐ4-stableにアップグレードするのでフルパッケージはいりません、 4.9-i386-mini.isoをダウンロードしてきましょう。

例)
ftp://ftp2.jp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/4.9/4.9-i386-mini.iso (206MB)

インストール方法は Custom を選択します

Partition領域すべて & Set Bootable
BootManagerBootMgr
Label/3839M
swap256M
DistributionsMinimal
MediaFTPを選択FTPサイトは適切に
Network interfacelnc0
ネットワークの設定適切に

最低限の管理作業 & package のインストール

参考)
blanktime="off"
defaultrouter="xx.xx.xx.xx"
hostname="xxxxxxx"
ifconfig_lnc0="inet xx.xx.xx.xx  netmask 0xffffff00"
kern_securelevel_enable="NO"
keymap="jp.106"
nfs_server_enable="YES"        # 後のために NFS Server も起動しておきます
nfs_reserved_port_only="YES"
rpc_lockd_enable="YES"
portmap_enable="YES"
sendmail_enable="NONE"         # いらないので sendmail は停止させます
sshd_enable="YES"              # sshd を使用できるようにします

X を使うわけではないので VMware-tools のインストールは行っていません。

ここで上記を反映させるためにいったん再起動します

ソースの取得

cvsupで4-stableのソースを取り寄せます。いまインストールした FreeBSD の /usr/share/examples/cvsup/stable-supfile にサンプルがありますからこれを参考にして自分の supfile を作成します。supfile についてはハンドブックの 「CVSupを使う」を参考にしてください。

例)
*default  host=cvsup4.jp.FreeBSD.org <- 適切に選んでください
*default  base=/usr
*default  prefix=/usr
*default  release=cvs
*default  tag=RELENG_4
*default  delete use-rel-suffix

cvsroot-all  <-- サンプルに追加しました
src-all
doc-all      <-- サンプルに追加しました

わたしは履歴を残すために以下のような簡単なスクリプトを実行して 4-stable のソースと同期をとっています。

# mkdir /var/log/cvsupdate <- ログ用のディレクトリを作成する
# sh cvsupdate
(どれくらいかかるかは忘れました...)

cvsupdate の内容
#!/bin/sh
filename=/var/log/cvsupdate/`date +"%Y%m%d"`.log
echo start script log to $filename
echo --- start cvsup --- >> $filename
echo `date` >> $filename
cvsup -g -L 2 /etc/cvsupfile >> $filename 2>&1

make.conf & Kernel config file の作成

make.conf と(Libetto 用の) Kernel config file を作成します。 以下の項目をカスタマイズしてるだけでほとんどデフォルトです。

例) make.conf
#
# name:    /etc/make.conf
#
# Created: 2002/04/12 Yuji Tanaka
# Notes:
#
 
# To configure Kernel configuration file
KERNCONF=GENERIC    <-- ちなみに build マシンは GENERIC です
#KERNCONF=IPFW      <-- Libretto 用の config file です
                    <-- まずはコメントアウトしています
# To configure C Compiler options
#CFLAGS=-O -pipe
#COPTFLAGS=-O -pipe

# To avoid building various parts of the base system:
#NO_SHAREDOCS=  true    # do not build the 4.4BSD legacy docs
#NO_X=          true    # do not compile in XWindows support (e.g. doscmd)
NOGAMES=        true    # do not build games (games/ subdir)
NOINFO=         true    # do not make or install info files
NOPROFILE=      true    # Avoid compiling profiled libraries
COMPAT4X=       yes
SUP_UPDATE=     yes
SUPFLAGS=       -g -L 2
SUPHOST=        cvsup2.jp.FreeBSD.org
SUPFILE=        /etc/cvsupfile
PORTSSUPFILE=   /etc/cvsupfile
DOCSUPFILE=     /etc/cvsupfile

ここでは build マシンに注目しているので Libretto 用の kernel config file については割愛します。

buildworld & buildkernel

コンソールから make buildworld を実行します。make world についてはハンドブックの「make worldの利用」を参考にしてください。

# script /var/log/makeworld/yyyymmdd.log
# cd /usr/obj
# chflags -R noschg usr
# rm -rf usr
# cd ../src
# time make buildworld
(HostOS が Celeron 2.0GHz で 2時間くらいでしょうか)
# make buildkernel
(HostOS が Celeron 2.0GHz で 30 分くらいでしょうか)

build 用マシンに installkernel & installworld

ここで VMware の機能で「Save Snapshot」を行います。万が一起動しな かったときに簡単に戻せるようにです。

# time make installkernel
# time make installworld
(HostOS が Celeron 2.0GHz で 9 分くらいでしょうか)
# mergemaster
# cd /usr/src/release/sysinstall
# make all install

再起動してちゃんと起動してくることを確認します。起動しなかった ら VMware の機能で「Revert Snapshot」してインストール前に戻して ください。

Libretto 用 kernel の作成

make.conf を書き換えて Libretto 用 kernel を作成します

例) make.conf
# To configure Kernel configuration file
#KERNCONF=GENERIC   <-- コメントアウトします
KERNCONF=IPFW       <-- 有効にします

# make buildkernel

NFS の設定

/etc/exports を記述します。かなり「ざる」な設定になっていますが build 用のマシンは常に起動しているわけでもないのでかまわないということに しています。

例) /etc/exports
/ -alldirs -maproot=0 <Librettoのホスト名>

例) /etc/hosts
xx.xx.xx.xx  <Librettoのホスト名>

すでに /etc/rc.conf には NFS Server を起動するように記述してありま すので再起動を行うと mountd, nfsd, portmap などが起動するはずです。 再起動して、NFS関連のプロセスが起動していることを確認してください (または rc.network を見て手動で起動してください)。

NFS関連のプロセス)
# ps ax
 PID  TT  STAT      TIME COMMAND
  66  ??  Is     0:00.02 /usr/sbin/portmap
  68  ??  Is     0:00.05 mountd -r
  71  ??  Is     0:00.04 nfsd: master (nfsd)
  73  ??  I      0:00.02 nfsd: server (nfsd)
  74  ??  I      0:00.01 nfsd: server (nfsd)
  75  ??  I      0:00.01 nfsd: server (nfsd)
  76  ??  I      0:00.00 nfsd: server (nfsd)
  77  ??  Is     0:00.01 rpc.lockd
  79  ??  Is     0:00.01 rpc.statd

Libretto から mount

Libretto から NFS mount してみます。

# mkdir /usr/obj /usr/src (もし存在しなければ)
# mount -t nfs <build 用 FreeBSD>:/usr/obj /usr/obj
# mount -t nfs <build 用 FreeBSD>:/usr/src /usr/src

ls /usr/src などとやって mount できていることを確認してください。

Libretto に installkernel & installworld

installkernel するときは make.conf が build 用 FreeBSD と同じであり、 KERNCONF=IPFW (Libretto 用 kernel) が有効になっていることを確認して ください。

# time make installkernel
(3分くらいでしょうか)
# time make installworld
(30分くらいでしょうか)

ハンドブックによるとシングルユーザモードで行わなければいけないこと になっていますが 4-stable でパッチをあてる目的程度でしたらマルチ ユーザモードでも問題ないようです。というかシングルユーザモードで やったことありません(いばることじゃありませんが)

# cd /
# rm -rf etc.old (存在していれば)
# cp -Rp etc etc.old
# mergemaster
# cd /usr/src/release/sysinstall
# make install

build 用マシンと違ってこちらの mergemaster はちょっとした緊張感 が伴います。というのも実際に稼動しているマシンなのでそれなりに /etcを書き換えているからです。まちがって /etc/passwd や /etc/hosts を上書きしたりしないようにしましょう (かなり悲しいことになります)。

わたしは以下のようなポリシーでやっています

Libretto で umount

まず Libretto で umount してから再起動します。

Libretto より先に build 用 FreeBSD をシャットダウンしてはいけません。 これをやると Libretto のシャットダウンができなくなってしまうので気をつけて ください。そんなときはおちついて build 用 FreeBSD を起動します(;;)。 これはバージョンアップしたからではありませんww。

ports バージョンアップ

関連リンク