The Linux+FreeBSD mini-HOWTO Niels Kristian Bech Jensen nkbj@image.dk v1.11, 30 March 2000 The Linux JF Project, JF@linux.or.jp v1.11j, 30 March 2000 本文書では Linux と FreeBSD を一つのシステム上で利用する方法を述べま す.まずFreeBSDを紹介し,それから2つの OS をどうやって共存させるか(例 えば,スワップの共有)を述べます.本文書を理解するためには,Linux およ びディスクのパーティション分割(fdisk)に関する経験が多少必要になるで しょう.ここで挙げる方法は FreeBSD 2.2.2 でテストしていますが,新しい バージョンのものでも大丈夫だと思います.本文書についてのコメント,疑問 や提案があれば,気軽に電子メールを送ってください.また,NetBSD や OpenBSD を Linux と一緒に使った経験がある方々は是非話をお聞かせくださ い. ______________________________________________________________________ 目次 1. FreeBSD について 2. FreeBSD のハードディスクのラベル付け 2.1 FreeBSD の「スライス」と「パーティション」 2.2 Linux と FreeBSD におけるドライブとパーティションのラベル付け 3. Linux と FreeBSD でのスワップ共有 3.1 Linux のインストール 3.2 FreeBSD のインストール 3.3 Linux で FreeBSD のスワップパーティションを使う設定をする 4. LILO を使って FreeBSD を起動する 5. ファイルシステムのマウント 5.1 Linux で UFS ファイルシステムをマウントする 5.2 FreeBSD で ext2fs ファイルシステムをマウントする 6. 別 OS のバイナリを実行する 6.1 FreeBSD のバイナリを Linux で実行する 6.2 Linux のバイナリを FreeBSD で実行する 7. 情報源 8. クレジットと法的事項 8.1 法的事項 9. 日本語訳について ______________________________________________________________________ 1. FreeBSD について FreeBSD はLinux と良く似たフリーの UNIX ライ クな OS です.両者の主な違いは,Linux のカーネルが一から書かれたのに対 し,FreeBSD は 4.4BSD-lite として知られている, 4.4BSD(Berkeley Software Distribution) の自由に再配布できる部分を元にして作られたこと です.このため,Linux よりも FreeBSD の方が「真」の UNIX(登録商標とし ての)に近いという人もいます.FreeBSD は Intel ベースの PC(i386以降)上 でしか動作しません.しかし,DEC Alpha や Sun Sparc への移植作業が現在 行われています.) NetBSD と OpenBSD は FreeBSD に似ていますが,どちらも複数のプ ラットフォームで動作します.これらの *BSD システムが要求するハードウェ ア性能は Linux と同じくらいです. FreeBSD の開発は Linux の開発とは異 なる形態で行われています.開発者の中心チームは調整役として働き,プロ ジェクトのリーダーシップを執ります.大きな変更は前もってメーリングリス トで議論されます.FreeBSDプロジェクトには(Linux と同じく)二つの開発ツ リー(「-CURRENT(最新)」 と「-STABLE(安定)」)があります.「-CURRENT」の 開発ツリーでは新しい機能の開発が行われています.「-STABLE」のツリーで の開発は主にバグ修正と十分テストされた新機能に限定されています. FreeBSD は Linux と同様,自由に利用および配布(再配布)できます.システ ムのほとんどの部分は BSD copyright に基づいてリリースされています.GPL や他の open-source ライセンスに従う部分も あります. FreeBSD についての詳しい情報は FreeBSD プロジェクトのホームページ にあります.(全システムも入手できます.) 最 新の「-STABLE」リリースと「-CURRENT」開発コードのスナップショットは Walnut Creek CDROM が CD-ROM で販売していま す.(ここのウェブサーバと ftp サーバは FreeBSD です.) 2. FreeBSD のハードディスクのラベル付け Linux と FreeBSD はハードディスクやパーティションにそれぞれ異なる方法 でラベルを付けます.この章では,両者の主な違いを解説します. FreeBSD のラベル付けは,今まで使われてきた BSD のラベル付けのスタイルを PC の fdisk によるパーティションに当てはまるよう移植したものです.従って,こ の方法は NetBSD, OpenBSD, Ultrix, Digital Unix, SunOS, Solaris 等,他 の BSD ベースの UNIX システムとよく似ています. 2.1. FreeBSD の「スライス」と「パーティション」 FreeBSD はPCハードディスクのパーティションテーブルの4つのエントリーの うち1つのエントリーを用います.FreeBSD の用語では,この基本パーティ ションを「スライス」と呼びます.そして,disklabelというプログラムを 使って,この基本パーティション内に8つの論理パーティションを作成しま す.FreeBSD の用語では,この論理パーティションを「パーティション」と呼 びます.この概念は,Linux (や DOS) が拡張パーティション内で論理パー ティションを扱うことと似ています.Linux (や DOS) で作成した拡張パー ティション内には,FreeBSD をインストールすることはできません.Linux の fdisk プログラムは,メインメニューではFreeBSD のスライス内の BSD パー ティションを表示しませんが,`b'コマンドを与えると BSD のディスクラベル 情報を表示します.fdisk の出力は以下のようになります (/dev/hda4が FreeBSD のスライスです). bash# fdisk /dev/hda Command (m for help): p Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 27 54400+ 83 Linux native /dev/hda2 28 28 55 56448 83 Linux native /dev/hda3 56 56 403 701568 83 Linux native /dev/hda4 404 404 621 439488 a5 BSD/386 Command (m for help): b Reading disklabel of /dev/hda4 at sector 1624897. BSD disklabel command (m for help): p 8 partitions: # size offset fstype [fsize bsize cpg] a: 64512 1624896 4.2BSD 0 0 0 # (Cyl. 404 - 419) b: 104832 1689408 swap # (Cyl. 420 - 445) c: 878976 1624896 unused 0 0 # (Cyl. 404 - 621) e: 64512 1794240 4.2BSD 0 0 0 # (Cyl. 446 - 461) f: 645120 1858752 4.2BSD 0 0 0 # (Cyl. 462 - 621) BSD disklabel command (m for help): q bash# 以下の例で示すように,最初の列の`a'から`f'までの文字は,1つの FreeBSD スライスでは同じラベルになります.BSD の用語では3つの特別なパーティ ションがあります.`a' はルートパーティションを示し,`b'はスワップパー ティションを示し,`c'はスライス全体を示します.これらの文字を異なる型 のパーティションに割り当てる「標準の」方法については FreeBSD のドキュ メントを参照してください. 2.2. Linux と FreeBSD におけるドライブとパーティションのラベル付け Linux と FreeBSD では,ハードディスクのラベルはそれぞれ以下のように付 けられます. Linux FreeBSD 最初の IDE ドライブ /dev/hda /dev/wd0 2番目の IDE ドライブ /dev/hdb /dev/wd1 最初の SCSI ドライブ /dev/sda /dev/sd0 2番目の SCSI ドライブ /dev/sdb /dev/sd1 IDE のディスク上では,パーティション(FreeBSD のスライス)は以下のように ラベル付けがされます(/dev/hdaを例にしています). Linux FreeBSD 最初の基本パーティション /dev/hda1 /dev/wd0s1 2番目の基本パーティション /dev/hda2 /dev/wd0s2 3番目の基本パーティション /dev/hda3 /dev/wd0s3 4番目の基本パーティション /dev/hda4 /dev/wd0s4 筆者の FreeBSD のスライス内のパーティションは以下のようにラベル付けさ れています.これはデフォルトの設定です.FreeBSD をカスタマイズしてイン ストールした場合には,ラベルの付き方は変わるかもしれません.(例では /dev/hda4が FreeBSD のスライスです.) Linux のラベル FreeBSDのラベル FreeBSD のマウントポイント /dev/hda5 /dev/wd0s4a / /dev/hda6 /dev/wd0s4b swap /dev/hda7 /dev/wd0s4e /var /dev/hda8 /dev/wd0s4f /usr もし Linux で dmesg を実行すると以下のような結果になります. (Linux の カーネルは UFS ファイルシステム サポートを有効にして構築しておく必要が あります.詳しくは``Linux の インストール''の章を見てください.) Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > FreeBSD が/dev/sd1s3 スライス(Linux 用語では /dev/sdb2)にインストール されていて,/dev/sdb2 が 2つの論理パーティション(/dev/sdb5 と/dev/sdb6)を含む拡張パーティションである場合には,先程の例は次のよう になります. Linux のラベル FreeBSDのラベル FreeBSD のマウントポイント /dev/sdb7 /dev/sd1s3a / /dev/sdb8 /dev/sd1s3b swap /dev/sdb9 /dev/sd1s3e /var /dev/sdb10 /dev/sd1s3f /usr この場合には dmesg の出力は次のようになります. Partition check: sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 > FreeBSD のパーティションの後に Linux の拡張パーティションを置いている とトラブルの元となります.Linux インストール用ブートフロッピーに入って いるほとんどのカーネルは UFS のサポートが有効になっていないため,スラ イス内の FreeBSD パーティションを認識しません.例えば /dev/hda3 を FreeBSD のスライス,/dev/hda4 を Linux の拡張パーティションとした場合 Partition check: hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 > のように見えるべきものが Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 > のように見えてしまいます. このようなことが起こるとデバイスの割り当てが狂ってしまい,データを壊す こともあり得ます.ですから FreeBSD スライスは必ず Linux 拡張パーティ ションよりも後に置き,FreeBSD をインストールした後は Linux 拡張パー ティション内の論理パーティションの構成は絶対に変えないことをお勧めしま す. 3. Linux と FreeBSD でのスワップ共有 この章では Linux と FreeBSD でスワップパーティションを共有する方法を述 べます.同様のことを実現する他の方法もあるかもしれません.FreeBSD を Linux の前にインストールすることもできますが,FreeBSD スライスのパー ティションの順序には注意してください. 3.1. Linux のインストール 最初に,Linux を普通にインストールします.ハードディスクには FreeBSD のスライスに割り当てる分は残しておかなければなりません.Linux のスワッ プパーティションは作る必要はありませんが,もし必要ならば,FreeBSD に割 り当てる予定のパーティションを指定しておきます.こうしておけば,後で Linux のスワップパーティションを削除して, FreeBSD で用いることができ ます. Linux のインストールが終ったら,次はカーネルを再構築します.カーネル再 構築が初めてならば,The Linux Kernel HOWTOを読むといいでしょう.カーネ ルは,UFS ファイルシステム(読み出しのみ) と BSD ディスクラベル(FreeBSD のパーティションテーブル)を両方ともサポートするようにしておかなければ なりません. UFS filesystem support (read only) (CONFIG_UFS_FS) [N/y/m/?] y BSD disklabel (FreeBSD partition tables) support (CONFIG_BSD_DISKLABEL) [N/y/?] (NEW) y 新しいカーネルをインストールして,コンピュータを再起動します.Linux ス ワップパーティションを作った場合には,/etc/fstabファイルから swapを含 む行を削除します.新しいカーネルが入っていて Linux のブートフロッピー ディスクがあることを確認してください.以上で FreeBSD をインストールす る準備ができました. 3.2. FreeBSD のインストール FreeBSD の文書に従って,FreeBSD をインストールします.Linux のスワップ パーティションを作った場合には,これを消去します(FreeBSD のfdisk を 使って構いません).FreeBSD スライスでの,パーティションの順番には注意 してください.デフォルトのラベル指定を行った場合には,2番目のパーティ ションがスワップになります.FreeBSD を全てインストールし, Linux の ブートフロッピーディスクを使ってLinux をブートします. 3.3. Linux で FreeBSD のスワップパーティションを使う設定をする Linux が起動したらdmesgを実行します.出力は次のようになります. Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > この出力は /dev/hda4 がFreeBSDのスライスであり, /dev/hda5, /dev/hda6, /dev/hda7, /dev/hda8 が FreeBSD のパーティションであることを表していま す.スワップがスライス内の2番目のパーティションであれば, /dev/hda6が スワップということになります. スワップパーティションを有効にするため,Linux の /etc/fstabに次の行を 追加します. /dev/hda6 none swap sw 0 0 FreeBSD ではどんなパーティションでもスワップとして使うことができます が, Linux のスワップパーティションには特別な印(signature)が書かれてい なければなりません.この印はmkswapが作成します.スワップパーティション を共有すると,FreeBSD がこの印を壊してしまいますから,Linux を起動する たびに毎回mkswapを実行しなければなりません.これを自動的に行うために, 起動時にswaponを実行するスクリプトを見つけて変更します. Red Hat Linux の場合には/etc/rc.d/rc.sysinitです.以下の行を swapon -a の前に挿入し ます. awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab これによって,起動時に毎回/etc/fstabに記述されている全てのスワップパー ティションに対して,mkswapが実行されるようになります.これはコメントア ウトされている(行の先頭の文字が``#''である)場合には実行されません. Linux を再起動した後,freeコマンドでスワップの大きさを確認します.ま た,FreeBSD を起動して,きちんと動作しているかどうかを確認します.うま く動作しない場合には,たぶん間違ったパーティションをスワップとして使っ ていると思われます.こうなってしまった場合には,FreeBSD を再インストー ルするしか方法はありません.経験は偉大な教師です. :-) 4. LILO を使って FreeBSD を起動する LILO を使って FreeBSD を起動するのは簡単です.LILOを使うのならば, FreeBSD のブートセレクタ(Booteasy)をインストールしてはいけません.以下 の記述を/etc/lilo.confに加え,liloを実行します(ここでは/dev/hda4 がFreeBSDのスライスであるものとします). other=/dev/hda4 table=/dev/hda label=FreeBSD FreeBSD が2番目の SCSI ディスクにインストールされている場合には,以下 のような記述になります(FreeBSD の主パーティションは/dev/sdb2 と仮定し ます). other=/dev/sdb2 table=/dev/sdb loader=/boot/chain.b label=FreeBSD 5. ファイルシステムのマウント 5.1. Linux で UFS ファイルシステムをマウントする 残念ながら,Linux 2.0.xx カーネルの UFS ドライバは FreeBSD をサポート していません.FreeBSD の ファイルシステムをマウントしようとしてもエ ラーメッセージだけが出力されます(実際にはファイルシステムはマウントさ れていますが,何もすることができない状態です.)この問題は 新しい Linux カーネルでは解決されています(バージョン 2.1.87 以降). Linux 2.0.xx カーネル(xx <= 30)用の別バージョンのドライバを metalab.unc.edu (かつての sunsite.unc.edu です) で入手することができま す.これは U2FS と呼ばれるもので,最新バージョンは u2fs-0.4.3.tar.gz です.2.0.31 より新しいバージョン用 (2.1.xx 用ではなく 2.0.xx 用です) のU2FS(ufs-0.4.4.tar.gz)はこのサイト で入手でき ます.このサイトには他にも U2FS(と UFS)に関する情報があります. それから,U2FS ファイルシステムとBSD ディスクラベルのサポートを有効に して,新しいカーネルを作成します.詳しくは``Linux のインストール''の章 を参照してください. U2FSファイルシステム を使う場合には,UFS ファイル システムのサポートはカーネルから外しても構いません. 新しいカーネルをインストールすれば,以下のコマンドで UFS パーティショ ン(スワップパーティションを除く,FreeBSD の全てのパーティション)をマウ ントすることができるようになります. mount -t u2fs /dev/hda8 /mnt バージョン 2.1.87 以降の Linux カーネルを使っている場合には, mount -t ufs /dev/hda8 /mnt というコマンドを使います.バージョン 2.1.112 以降の Linux カーネルでは 以下に示すように -o ufstype=44bsd をコマンドに追加しなければなりませ ん: mount -t ufs -o ufstype=44bsd /dev/hda8 /mnt UFS (および U2FS)ドライバは読み込み専用です.つまり,UFS ファイルシス テムを読むことはできますが,ここに書き込みはできません.Linux カーネル のバージョン 2.1.112 以降では実験的な読み書き可能なドライバが読み込み 専用ドライバに置き換わっています.バージョン 2.1.127 から FreeBSD パー ティションへの書き込みがサポートされました. 5.2. FreeBSD で ext2fs ファイルシステムをマウントする FreeBSD で ext2fs ファイルシステムをマウントするには,ext2fs をサポー トしたカーネルを構築しなければなりません.どうやってカーネル再構築を行 うかについては,FreeBSD ハンドブック を参照してください.ext2fs をサポー トするには,以下の行を新しいカーネルのカーネルコンフィギュレーション ファイルに追加します. options "EXT2FS" 新しいカーネルで起動した後,次のコマンドで ext2fs ファイルシステムをマ ウントすることができます. mount -t ext2fs /dev/wd0s3 /mnt 2.2.8 以前の FreeBSD にはバグがあるので,これに該当するバージョンを 使っている場合には,FreeBSD をシャットダウンする前に全ての ext2fs ファ イルシステムをアンマウントしなければなりません.ext2fs ファイルシステ ムをマウントしたままで FreeBSD をシャットダウンすると,FreeBSD は UFS ファイルシステムの sync を行うことができません.その結果,次回の FreeBSD の起動時にfsckが実行されることになります.このバグは umount -a -t ext2fs という行を /etc/rc.shutdown ファイルに追加すれば回避できます.このバグ は FreeBSD-3.x では直っています. 6. 別 OS のバイナリを実行する 6.1. FreeBSD のバイナリを Linux で実行する iBCS パッケージが Linux 上での FreeBSD バイナリの実行をサポートしてい ます.しかし,これは古い上にメンテナンスもされていません.筆者は実行す ることができませんでした.もし,うまく動かすことができた方がいらっしゃ ればぜひ教えてください. 6.2. Linux のバイナリを FreeBSD で実行する FreeBSD では Linux のバイナリ(a.out, ELF 形式の両方)を実行することがで きます.これを行うためには,以下の3つの手順を行う必要があります. 1. Linux 互換を有効にします.これを行うには(FreeBSD 2.2.2の場合 --- 他 のバージョンでは細かい部分が異なるかもしれません) /etc/rc.confを編 集し, linux_enable="NO" の部分を linux_enable="YES" としてシステムを再起動します.Linux のバイナリサポートを呼び出す別の方 法として,/usr/bin/linuxコマンドを実行する方法があります.こちらの方法 なら再起動する必要はありませんし,常に Linux バイナリサポートをロード しておく必要はありません(つまりメモリを節約できます).新しい FreeBSD カーネルを構築するならば,FreeBSD のカーネル設定ファイルに options COMPAT_LINUX という行を追加するのを忘れないでください. 2. Linux バイナリにライブラリがダイナミックリンクされている場合には, Linux の共有ライブラリをインストールする必要があります.これは, FreeBSD 2.2.{2, 5, 6} ではlinux_lib-2.4.tgzパッケージとして入ってい ます(新しいバージョンが入手可能かもしれません).パッケージをインス トールするには,次のコマンドを実行します. pkg_add /linux_lib-2.4.tgz はパッケージが置かれているディレクトリです. pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz を実行するか /stand/sysinstall を再実行することでネットワークからイン ストールすることもできます.``Configure'', ``Packages'' を入力して,メ ニューを使います.スタティックリンクされた Linux のバイナリを実行する 場合には,以下のコマンドで実行します. brandelf -t Linux <スタティックリンクされたLinuxのバイナリの名前> 3. 実行したい Linux のプログラムをインストールします.インストール先は ext2fs ファイルシステムでも UFS ファイルシステムでも構いません. FreeBSD での ext2fs ファイルシステムの利用については,``FreeBSD で ext2fs ファイルシステムをマウントする''の章を参照してください. 筆者はこの方法で Linux 版の Applixware 4.3 と Netscape 3.01 (どちらも ELF 形式)を FreeBSD 2.2.2 上で実行させることに成功しました.(もちろ ん, FreeBSD 用の Netscape 4 があることは知っています.) Linux 用の acroread と StarOffice 3, 4 も FreeBSD 上で動作しました.StarOffice 5 は Linux のネイティブスレッドに依存しており,現在は FreeBSD 上では動作 しません.この話題についての詳細な情報については,FreeBSD の関連ドキュ メントを参照してください. 7. 情報源 この mini-HOWTO 文書の最新版(SGML や PostScript 形式を含みます)はこの サイト にあります.また,本文書は JF プロ ジェクト の一環として,藤原輝嘉が日本語に 翻訳しています. こちら に は,Linux と FreeBSD の違いに関する記事がいくつかあります. FreeBSD に関する詳しい情報はこのサイト で入手 することができます(FreeBSD のシステム全部を入手することもできます).ま た, Walnut Creek CDROM からシステムの CD-ROM を 購入することもできます(ここのサーバは FreeBSD で稼働しています). The Linux Kernel HOWTO (およびこの mini-HOWTO)は The Linux Documentation Project の一環としてリリース されています. 8. クレジットと法的事項 新米 FreeBSD ユーザの質問に答えてくださったデンマーク *BSD ユーザーグ ループ の皆さんと,U2FS があることを教えてくだ さった Takeshi Okazaki 氏,貴重な提案をしてくださった David O'Brien 氏 に感謝します. 8.1. 法的事項 訳注: 著作権表示については,訳も一応挙げておきますがあくまで参考です. 正式には原文のライセンスに従ってください. Trademarks are owned by their owners. Although the information given in this document is believed to be correct, the author will accept no liability for the content of this document. Use the tips and examples given herein at your own risk. (登録商標はそれぞれの権利者が所有しています. 本文書に記載された情報は正しいものであると考えていますが,著者は本文書 の内容に関する責任は一切負いません.ここで述べているテクニックや例は読 者自身の責任において使用してください.) Copyright (C) 1997-2000 by Niels Kristian Bech Jensen. This document may be distributed only subject to the terms and conditions set forth in the LDP License at http://www.linuxdoc.org/COPYRIGHT.html . (本文書は http://www.linuxdoc.org/COPYRIGHT.html の条項および条件に基づいての み配布することができます.) 9. 日本語訳について 日本語訳は Linux Japanese FAQ Project が行いました.翻訳に関するご意見 は JF プロジェクト 宛に連絡してください. 改訂履歴を以下に示します. v1.0, 5 September 1997 - v1.10, 15 January 1999 翻訳: 藤原輝嘉 訳語統一: 長谷川靖 v1.11, 30 March 2000 翻訳: 藤原輝嘉