10.2. Linux® バイナリ互換機能の設定
戻る〓 | 第10章 Linux® バイナリ互換機能 | 〓次へ

## 10.2. Linux® バイナリ互換機能の設定

Linux® ライブラリは、デフォルトでは FreeBSD にインストールされません。 また、Linux® バイナリ互換機能も、デフォルトでは有効ではありません。 Linux® ライブラリは、手動もしくは FreeBSD Ports Collection を使ってインストールできます。

port を構築する前に、 `linux` カーネルモジュールを読み込んでください。 このモジュールを読み込んでいないと、構築に失敗してしまいます。

    # kldload linux

64 ビットの互換機能を使うには、以下を実行してください。

    # kldload linux64

以下のようにしてモジュールが読み込まれていることを確認してください。

    % kldstat
          Id Refs Address    Size     Name
          1    2 0xc0100000 16bdb8   kernel
          7    1 0xc24db000 d000     linux.ko

Linux® ライブラリおよびバイナリの基本セットを FreeBSD システムにインストールする最も簡単な方法は、 emulators/linux_base-c7 package または port を使う方法です。port をインストールするには、 以下のコマンドを実行してください。

    # pkg install emulators/linux_base-c7

起動時から Linux® 互換機能を有効にする場合には、 `/etc/rc.conf` に以下の行を追加してください。

    linux_enable="YES"

64 ビットのコンピュータでは、 `/etc/rc.d/abi` により 64 ビット互換のためのモジュールは自動的に読み込まれます。

Linux® バイナリ互換機能のレイヤには、(64 ビット x86 ホストにおける) 32 および 64 ビット Linux バイナリのサポートが追加されたため、 エミュレーション機能をカスタムカーネルに静的にリンクする必要はありません。

### 10.2.1. 手動によるライブラリの追加のインストール

Linux® バイナリ互換機能を設定した後に、Linux® アプリケーションが必要な共有ライブラリが存在しないというエラーを出した場合には、 Linux® バイナリがどの共有ライブラリを必要としているかを確認して、 手動でインストールしてください。

Linux® システムで、`ldd` を使うことにより、 アプリケーションが必要とする共有ライブラリを調べることができます。 たとえば、`linuxdoom` が必要とする共有ライブラリを調べるには、 Doom がインストールされている Linux® システム上で、以下のコマンドを実行してください。

    % ldd linuxxdoom
    libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
    libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
    libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Linux® システムでの出力の最後のカラムに表示されているすべてのファイルを FreeBSD システムの `/compat/linux` の下にコピーしてください。コピーしたら、 最初のカラムに示されるファイル名でコピーしたファイルに対してシンボリックリンクを張ってください。 この例では、FreeBSD システムで以下のようになります。

    /compat/linux/usr/X11/lib/libXt.so.3.1.0
    /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
    /compat/linux/usr/X11/lib/libX11.so.3.1.0
    /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
    /compat/linux/lib/libc.so.4.6.29
    /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

`ldd` の出力の最初のカラムに表示されているメジャーバージョンが同じ Linux® 共有ライブラリが既にインストールされている場合は、 最後のコラムにある名前のファイルを新たにコピーする必要はありません。 既にあるライブラリで動作するはずです。 ただ、新しいバージョンの共有ライブラリがある場合には、 コピーすることをお奨めします。 新しいライブラリにシンボリックリンクを変更したら、 古いライブラリは削除してかまいません。

たとえば、以下のライブラリがすでに FreeBSD システムに存在するとします。

    /compat/linux/lib/libc.so.4.6.27
    /compat/linux/lib/libc.so.4 -> libc.so.4.6.27

そして、`ldd` の出力が以下のように、 バイナリが新しいバージョンを必要とする場合を考えます。

    libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

存在しているライブラリの最後の番号が 1 つか 2 つ古いだけなので、 わずかに古いライブラリでもプログラムは動作するはずです。 しかしながら、`libc.so` を新しいバージョンに置き換えるのが安全です。

    /compat/linux/lib/libc.so.4.6.29
    /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

通常は、Linux® のバイナリが必要とする共有ライブラリを探す必要があるのは、 FreeBSD のシステムに Linux® のプログラムをインストールする最初の数回だけです。 それが過ぎれば、十分な Linux® の共有ライブラリがシステムに存在するので、 新しくインストールした Linux® のバイナリも追加の作業をせずに動作させることができるようになります。

### 10.2.2. Linux® の ELF バイナリのインストール

ELF のバイナリを使うためには、 追加の作業が必要です。 マークのない (unbranded) ELF バイナリを実行しようとすると、 以下のようなエラーメッセージが表示されてしまうことでしょう。

    % ./my-linux-elf-binary
    ELF binary type not known
    Abort

FreeBSD のカーネルが FreeBSD の ELF バイナリと Linux® のバイナリとを見分けられるようにするために、brandelf(1) を以下のようにして使ってください。

    % brandelf -t Linux my-linux-elf-binary

GNU のツール群が ELF バイナリに自動的に適切なマークを付加するようになったので、 この作業は通常必要ありません。

### 10.2.3. Linux® RPM ベースのアプリケーションのインストール

Linux® RPM ベースのアプリケーションをインストールするには、 最初に archivers/rpm4 package または port をインストールしてください。 インストールすると、このコマンドを `root` 権限で使うことで、 `.rpm` をインストールできます。

    # cd /compat/linux
    # rpm2cpio < /path/to/linux.archive.rpm | cpio -id

必要に応じて、インストールした ELF バイナリに `brandelf` を実行してください。 綺麗にアンインストールできないかもしれませんので注意してください。

### 10.2.4. ホストネームリゾルバの設定

DNS がうまく動作しなかったり、 以下のようなエラーメッセージが表示される場合は、 `/compat/linux/etc/host.conf` ファイルを以下のように設定する必要があります。

    resolv+: "bind" is an invalid keyword resolv+:
    "hosts" is an invalid keyword

ファイルの内容を以下のように設定してください。

    order hosts, bind
    multi on

この設定では `/etc/hosts` を最初に検索し、 次に DNS を検索するように指定します。 `/compat/linux/etc/host.conf` が存在しない場合には、 Linux® アプリケーションは `/etc/host.conf` を使用しようとし、 FreeBSD の文法とは互換性がないと警告を出力します。 `/etc/resolv.conf` を利用してネームサーバの設定をしていない場合には、 `bind` を削除してください。

戻る〓 | 上に戻る | 〓次へ
第10章 Linux® バイナリ互換機能〓 | ホーム | 〓10.3. 高度なトピックス

本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。