📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の2版が非表示) | |||
| 39行目: | 39行目: | ||
==== ソースコードからインストール ==== | ==== ソースコードからインストール ==== | ||
===== GNU | ===== GNU TLSのインストール ===== | ||
パッケージ管理システムのGNU TLSのバージョンが3.6.14未満の場合は、GNU TLSのソースコードをビルドしてインストールする。<br> | パッケージ管理システムのGNU TLSのバージョンが3.6.14未満の場合は、GNU TLSのソースコードをビルドしてインストールする。<br> | ||
<u> | <u>GNU TLS 3.6.14 (2022/4 現在の最新) のビルドでは、Nettle 3.4.1が必要となることに注意する。</u><br> | ||
<br> | <br> | ||
GNU TLSのビルドに必要なライブラリをインストールする。<br> | GNU TLSのビルドに必要なライブラリをインストールする。<br> | ||
sudo zypper install libtasn1-devel libunistring-devel unbound-devel p11-kit-devel gmp-devel libnettle-devel | sudo zypper install libtasn1-devel libunistring-devel unbound-devel p11-kit-devel libidn2-devel trousers-devel \ | ||
gmp-devel libnettle-devel # GMP, Nettleをパッケージ管理システムからインストールする場合 | |||
<br> | <br> | ||
GNU TLSのソースコードをダウンロードする。<br> | GNU TLSのソースコードをダウンロードする。<br> | ||
| 55行目: | 56行目: | ||
*: https://gnutls.org/download.html | *: https://gnutls.org/download.html | ||
<br> | <br> | ||
GMP、Nettle、GNU TLSをビルドおよびインストールする。<br> | |||
# | # GMPのインストール (パッケージ管理システムにあるGMPのバージョンが古い場合) | ||
../configure --prefix=< | ../configure --prefix=<GMP、Nettle、GNU TLSのインストールディレクトリ> | ||
make -j $(nproc) | make -j $(nproc) | ||
make install | make install | ||
# | # Nettleのインストール (パッケージ管理システムにあるNettleのバージョンが古い場合) | ||
../configure --prefix=< | ../configure --prefix=<GMP、Nettle、GNU TLSのインストールディレクトリ> \ | ||
--enable-openssl \ | |||
--enable-x86-aesni \ | |||
--enable-x86-sha-ni \ | |||
--enable-x86-pclmul | |||
make -j $(nproc) | make -j $(nproc) | ||
make install | make install | ||
# GNU | # GNU TLSのインストール | ||
../configure --prefix=< | ../configure --prefix=<GMP、Nettle、GNU TLSのインストールディレクトリ> \ | ||
--enable-shared | |||
make -j $(nproc) | make -j $(nproc) | ||
make install | make install | ||
| 74行目: | 80行目: | ||
vi ~/.profile | vi ~/.profile | ||
<br> | <br> | ||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | # ~/.profileファイル | ||
export PATH="< | export PATH="<GMP、Nettle、GNU TLSのインストールディレクトリ>/bin:$PATH" | ||
export LD_LIBRARY_PATH="< | export LD_LIBRARY_PATH="<GMP、Nettle、GNU TLSのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH" | ||
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)" | export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)" | ||
export PKG_CONFIG_PATH="< | export PKG_CONFIG_PATH="<GMP、Nettle、GNU TLSのインストールディレクトリ>/lib64/pkgconfig:$PKG_CONFIG_PATH" | ||
</syntaxhighlight> | |||
<br> | <br> | ||
PCを再起動する。<br> | PCを再起動する。<br> | ||
<br> | <br> | ||
===== QEMUのインストール ===== | ===== QEMUのインストール ===== | ||
QEMUのビルドに必要なライブラリをインストールする。<br> | QEMUのビルドに必要なライブラリをインストールする。<br> | ||
| 105行目: | 112行目: | ||
*: [https://www.qemu.org/download/ QEMUの公式Webサイト]にアクセスして、ソースコードをダウンロードする。 | *: [https://www.qemu.org/download/ QEMUの公式Webサイト]にアクセスして、ソースコードをダウンロードする。 | ||
*: ダウンロードしたファイルを解凍する。 | *: ダウンロードしたファイルを解凍する。 | ||
*: < | *: <syntaxhighlight lang="text"> | ||
tar xf qemu-<バージョン>.tar.xz | |||
cd qemu-<バージョン> | |||
</syntaxhighlight> | |||
*: <br> | *: <br> | ||
* Gitからソースコードをダウンロードする場合 | * Gitからソースコードをダウンロードする場合 | ||
*: < | *: <syntaxhighlight lang="text"> | ||
git clone git://git.qemu.org/qemu.git | |||
cd qemu | |||
git submodule update --init --recursive | |||
</syntaxhighlight> | |||
<br> | <br> | ||
QEMUをビルドおよびインストールする。<br> | QEMUをビルドおよびインストールする。<br> | ||
| 117行目: | 129行目: | ||
../configure --prefix=<QEMUのインストールディレクトリ> \ | ../configure --prefix=<QEMUのインストールディレクトリ> \ | ||
--enable-trace-backends=simple \ | --enable-trace-backends=simple \ # テキストベースのトレース機能を有効化 | ||
--enable-kvm --enable-spice --enable-spice-protocol --enable-usb-redir | --enable-kvm \ # KVMによるハードウェア仮想化支援を有効化 | ||
--enable-opengl --enable-tpm --enable-xkbcommon --enable-bzip2 --enable-sdl \ | --enable-spice \ # SPICEプロトコルによるリモートデスクトップ機能を有効化 | ||
--enable-gtk --enable-vdi --enable-qcow1 --enable-tools --enable-fdt | --enable-spice-protocol \ # SPICEプロトコルのライブラリサポートを有効化 | ||
--audio-drv-list=oss,alsa,sdl,pa | --enable-usb-redir \ # ホストUSBデバイスのゲストへの転送機能を有効化 (SPICE経由でリモートからもリダイレクト可能な方式) | ||
--enable-vfio-user-server | --enable-opengl \ # OpenGLによるGPUアクセラレーションを有効化 | ||
--enable-libusb | --enable-tpm \ # TPM (Trusted Platform Module) エミュレーションを有効化 | ||
--enable-hax | --enable-xkbcommon \ # XKBキーボードマッピングライブラリを有効化 | ||
--target-list=i386-softmmu,i386-linux-user,x86_64-softmmu,x86_64-linux-user | --enable-bzip2 \ # bzip2圧縮ライブラリを有効化 | ||
# | --enable-sdl \ # SDLによるグラフィック・オーディオ出力を有効化 | ||
--enable-gtk \ # GTKツールキットによるGUIウィンドウ表示を有効化 | |||
--enable-vdi \ # VirtualBoxのVDI形式ディスクイメージ対応を有効化 | |||
--enable-qcow1 \ # 旧形式qcow1ディスクイメージのサポートを有効化 | |||
--enable-tools \ # qemu-img等の補助ツール群のビルドを有効化 | |||
--enable-fdt \ # FDT (Flattened Device Tree) サポートを有効化 | |||
--audio-drv-list=oss,alsa,sdl,pa # オーディオドライバとしてOSS, ALSA, SDL, PulseAudioを指定 | |||
# 下記のオプションは任意 または 指定不可 | |||
--enable-vfio-user-server # 任意 : VFIO (Virtual Function I/O) ユーザサーバ機能を有効にする場合 | |||
# 仮想マシンへの直接パススルーをユーザスペースで実現するプロトコル | |||
# 主にリモートPC上のデバイスを仮想マシンにアタッチしたり、ソフトウェアでエミュレートしたデバイスをVFIOデバイスとして公開する場合に使用 | |||
--enable-libusb # ローカルでUSBを直接パススルーする方式 | |||
# <code>--enable-usb-redir</code> オプションを指定している場合は不要 | |||
--enable-hax # QEMU 8.2以降は、このオプションは指定不可 | |||
--target-list=i386-softmmu,i386-linux-user,x86_64-softmmu,x86_64-linux-user # ターゲットをx86およびx86_64に限定する場合 | |||
# ターゲットにARM EABIHFおよびAArch64を追加する場合は、<code>arm-softmmu,arm-linux-user,aarch64-softmmu,aarch64-linux-user</code> を指定する | |||
make -j $(nproc) または ninja -j $(nproc) | make -j $(nproc) または ninja -j $(nproc) | ||
| 132行目: | 160行目: | ||
<br> | <br> | ||
<u>※注意</u><br> | <u>※注意</u><br> | ||
<u><code>--enable-vfio-user-server</code>オプションは、QEMUのコンフィギュレーションにおいて、VFIOをユーザ空間で使用するためのサーバ機能を有効にする。<br></u> | <u><code>--enable-vfio-user-server</code> オプションは、QEMUのコンフィギュレーションにおいて、VFIOをユーザ空間で使用するためのサーバ機能を有効にする。<br></u> | ||
<br> | <br> | ||
<u>VFIO-userは、QEMUの比較的新しい機能であり、以下に示すような目的がある。</u><br> | <u>VFIO-userは、QEMUの比較的新しい機能であり、以下に示すような目的がある。</u><br> | ||
| 157行目: | 185行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
===== セキュリティ設定 : AppArmorを使用している場合 ===== | |||
QEMUを/usrディレクトリ以外の場所にインストールする場合、パーミッションの問題が発生する可能性がある。<br> | |||
そのため、libVirtにQEMUを実行するためのAppArmorパーミッションを追加する必要がある。<br> | |||
<br> | <br> | ||
まず、/etc/apparmor.d/usr.sbin.libvirtdファイルにある最後の <code>}</code> スコープの直前に、以下に示す設定を追記する。<br> | |||
まず、/etc/apparmor.d/usr.sbin. | 以下の例では、QEMUを /home/<ユーザ名>/QEMU/ディレクトリ にインストールしているものとする。<br> | ||
sudo vi /etc/apparmor.d/usr.sbin.libvirtd | sudo vi /etc/apparmor.d/usr.sbin.libvirtd | ||
<br> | <br> | ||
| 169行目: | 197行目: | ||
# ...略 | # ...略 | ||
# 例 : | # 例 : | ||
/usr/bin/kvm rmix, | /usr/bin/kvm rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-i386 rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-system-i386 rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-x86_64 rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-system-x86_64 rmix, | ||
} | } | ||
<br> | <br> | ||
| 183行目: | 210行目: | ||
# /etc/apparmor.d/abstractions/libvirt-qemuファイル | # /etc/apparmor.d/abstractions/libvirt-qemuファイル | ||
/usr/bin/kvm rmix, | /usr/bin/kvm rmix, | ||
/home<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-i386 rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-system-i386 rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-x86_64 rmix, | ||
/home/<ユーザ名> | /home/<ユーザ名>/QEMU/bin/qemu-system-x86_64 rmix, | ||
<br> | <br> | ||
AppArmorの設定を反映させるため、ルールセットを再読み込みする。<br> | |||
sudo systemctl reload apparmor | sudo systemctl reload apparmor | ||
<br> | |||
===== セキュリティ設定 : SELinuxを使用している場合 ===== | |||
QEMUを/usrディレクトリ以外の場所にインストールする場合、SELinuxによるアクセス拒否が発生する可能性がある。<br> | |||
そのため、QEMUバイナリに適切なセキュリティコンテキスト(ラベル)を付与する必要がある。<br> | |||
<br> | |||
まず、現在のSELinuxモードを確認する。<br> | |||
getenforce | |||
<br> | |||
<u>Permissive</u> または <u>Disabled</u> と表示された場合は、設定は不要である。<br> | |||
<u>Enforcing</u> と表示された場合は、以下に示す設定が必要となる。<br> | |||
<br> | |||
====== ファイルコンテキストの設定 ====== | |||
QEMUバイナリに適切なコンテキストを設定する。<br> | |||
以下の例では、QEMUを /home/<ユーザ名>/QEMU/ディレクトリにインストールしているものとする。<br> | |||
<br> | |||
sudo semanage fcontext -a -t qemu_exec_t "/home/<ユーザ名>/QEMU/bin/qemu-system-.*" | |||
sudo semanage fcontext -a -t qemu_exec_t "/home/<ユーザ名>/QEMU/bin/qemu-i386" | |||
sudo semanage fcontext -a -t qemu_exec_t "/home/<ユーザ名>/QEMU/bin/qemu-x86_64" | |||
<br> | |||
関連ライブラリやデータファイルにも必要に応じて設定する。<br> | |||
sudo semanage fcontext -a -t qemu_exec_t "/home/<ユーザ名>/QEMU/libexec(/.*)?" | |||
sudo semanage fcontext -a -t virt_image_t "/home/<ユーザ名>/QEMU/share(/.*)?" | |||
<br> | |||
====== コンテキストの適用 ====== | |||
設定したコンテキストを実際のファイルに適用 (再ラベル付け) する。<br> | |||
sudo restorecon -Rv /home/<ユーザ名>/QEMU/ | |||
<br> | |||
====== 設定の確認 ====== | |||
コンテキストが正しく設定されたかどうかを確認する。<br> | |||
ls -Z /home/<ユーザ名>/QEMU/bin/ | |||
<br> | |||
正しく設定されていれば、<u>qemu_exec_t</u> ラベルが表示される。<br> | |||
<br> | |||
====== ブール値の調整(必要に応じて) ====== | |||
状況によっては、SELinuxのブール値を変更する必要がある。<br> | |||
<br> | |||
仮想化関連のブール値を確認する。<br> | |||
getsebool -a | grep virt | |||
<br> | |||
必要に応じて有効化する。<br> | |||
sudo setsebool -P virt_use_nfs on # NFSを使用する場合 | |||
sudo setsebool -P virt_use_samba on # Sambaを使用する場合 | |||
sudo setsebool -P virt_sandbox_use_all_caps on # 特権が必要な場合 | |||
<br> | |||
====== 上記で解決しない場合 : カスタムポリシーモジュールの作成 ====== | |||
上記の設定でもアクセス拒否が発生する場合は、カスタムポリシーを作成する。<br> | |||
<br> | |||
拒否ログを確認する。<br> | |||
sudo ausearch -m avc -ts recent | |||
<br> | |||
ログからポリシーモジュールを自動生成する。<br> | |||
sudo ausearch -m avc -ts recent | audit2allow -M qemu_custom | |||
<br> | |||
モジュールをインストールする。<br> | |||
sudo semodule -i qemu_custom.pp | |||
<br> | <br> | ||