📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の2版が非表示)
39行目: 39行目:


==== ソースコードからインストール ====
==== ソースコードからインストール ====
===== GNU TLS 3.6.14以降のインストール =====
===== GNU TLSのインストール =====
パッケージ管理システムのGNU TLSのバージョンが3.6.14未満の場合は、GNU TLSのソースコードをビルドしてインストールする。<br>
パッケージ管理システムのGNU TLSのバージョンが3.6.14未満の場合は、GNU TLSのソースコードをビルドしてインストールする。<br>
<u>また、GNU TLS 3.6.14(2022/4現在の最新)のビルドでは、Nettle 3.4.1が必要となることに注意する。</u><br>
<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、Nettle、GNU TLSをビルドおよびインストールする。<br>
  # GMP (パッケージ管理システムにあるGMPが古い場合)
  # GMPのインストール (パッケージ管理システムにあるGMPのバージョンが古い場合)
  ../configure --prefix=<Nettle、GMP、GNU TLSのインストールディレクトリ>
  ../configure --prefix=<GMP、Nettle、GNU TLSのインストールディレクトリ>
  make -j $(nproc)
  make -j $(nproc)
  make install
  make install
   
   
  # Nettle (パッケージ管理システムにあるNettleが古い場合)
  # Nettleのインストール (パッケージ管理システムにあるNettleのバージョンが古い場合)
  ../configure --prefix=<Nettle、GMP、GNU TLSのインストールディレクトリ> --enable-openssl --enable-x86-aesni --enable-x86-sha-ni --enable-x86-pclmul
  ../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 TLS
  # GNU TLSのインストール
  ../configure --prefix=<Nettle、GMP、GNU TLSのインストールディレクトリ> --enable-shared
  ../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="<Nettle、GMP、GNU TLSのインストールディレクトリ>/bin:$PATH"
  export PATH="<GMP、Nettle、GNU TLSのインストールディレクトリ>/bin:$PATH"
  export LD_LIBRARY_PATH="<Nettle、GMP、GNU TLSのインストールディレクトリ>/lib64:$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="<Nettle、GMP、GNU TLSのインストールディレクトリ>/lib64/pkgconfig:$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サイト]にアクセスして、ソースコードをダウンロードする。
*: ダウンロードしたファイルを解凍する。
*: ダウンロードしたファイルを解凍する。
*: <code>tar xf qemu-<バージョン>.tar.xz</code>
*: <syntaxhighlight lang="text">
*: <code>cd qemu-<バージョン></code>
tar xf qemu-<バージョン>.tar.xz
cd qemu-<バージョン>
</syntaxhighlight>
*: <br>
*: <br>
* Gitからソースコードをダウンロードする場合
* Gitからソースコードをダウンロードする場合
*: <code>git clone git://git.qemu.org/qemu.git</code>
*: <syntaxhighlight lang="text">
*: <code>cd qemu</code>
git clone git://git.qemu.org/qemu.git
*: <code>git submodule update --init --recursive</code>
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 # 任意 : VFIO (Virtual Function I/O) ユーザサーバー機能を有効にする場合
               --enable-opengl                 \  # OpenGLによるGPUアクセラレーションを有効化
               --enable-libusb           # 不要の可能性あり
              --enable-tpm                     \  # TPM (Trusted Platform Module) エミュレーションを有効化
               --enable-hax               # QEMU 8.2以降は、このオプションは削除された
              --enable-xkbcommon               \  # XKBキーボードマッピングライブラリを有効化
               --target-list=i386-softmmu,i386-linux-user,x86_64-softmmu,x86_64-linux-user     # ターゲットをx86およびx86_64限定する場合
              --enable-bzip2                   \  # bzip2圧縮ライブラリを有効化
               # ターゲットにARMおよびAArch64を追加する場合は、<code>arm-softmmu,arm-linux-user,aarch64-softmmu,aarch64-linux-user</code>を指定する
              --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>
<u>もし、QEMUを/usrディレクトリ以外の場所にインストールした場合、パーミッションの問題が発生する可能性がある。</u><br>
===== セキュリティ設定 : AppArmorを使用している場合 =====
<u>この時、AppArmorの設定を、以下に示すように編集する。</u><br>
QEMUを/usrディレクトリ以外の場所にインストールする場合、パーミッションの問題が発生する可能性がある。<br>
そのため、libVirtにQEMUを実行するためのAppArmorパーミッションを追加する必要がある。<br>
<br>
<br>
AppArmorを使用している場合、libvirtにQEMUを実行するためのAppArmorパーミッションを追加する必要がある。<br>
まず、/etc/apparmor.d/usr.sbin.libvirtdファイルにある最後の <code>}</code> スコープの直前に、以下に示す設定を追記する。<br>
まず、/etc/apparmor.d/usr.sbin.libvirtdファイルにある最後<code>"}"</code>記号の直前に、以下に示す設定を追記する。<br>
以下の例では、QEMUを /home/<ユーザ名>/QEMU/ディレクトリ にインストールしているものとする。<br>
(以下の例では、QEMUを/home/user/QEMUディレクトリにインストールしているものとする)<br>
  sudo vi /etc/apparmor.d/usr.sbin.libvirtd
  sudo vi /etc/apparmor.d/usr.sbin.libvirtd
<br>
<br>
169行目: 197行目:
  # ...略
  # ...略
   
   
  # User Add
   # 例 :
   # 例 :
   /usr/bin/kvm rmix,
   /usr/bin/kvm rmix,
   /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-i386 rmix,
   /home/<ユーザ名>/QEMU/bin/qemu-i386 rmix,
   /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-system-i386 rmix,
   /home/<ユーザ名>/QEMU/bin/qemu-system-i386 rmix,
   /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-x86_64 rmix,
   /home/<ユーザ名>/QEMU/bin/qemu-x86_64 rmix,
   /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-system-x86_64 rmix,
   /home/<ユーザ名>/QEMU/bin/qemu-system-x86_64 rmix,
  }
  }
<br>
<br>
183行目: 210行目:
  # /etc/apparmor.d/abstractions/libvirt-qemuファイル
  # /etc/apparmor.d/abstractions/libvirt-qemuファイル
   
   
# User Add
  /usr/bin/kvm rmix,
  /usr/bin/kvm rmix,
  /home<ユーザ名>/InstallSoftware/QEMU/bin/qemu-i386 rmix,
  /home/<ユーザ名>/QEMU/bin/qemu-i386 rmix,
  /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-system-i386 rmix,
  /home/<ユーザ名>/QEMU/bin/qemu-system-i386 rmix,
  /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-x86_64 rmix,
  /home/<ユーザ名>/QEMU/bin/qemu-x86_64 rmix,
  /home/<ユーザ名>/InstallSoftware/QEMU/bin/qemu-system-x86_64 rmix,
  /home/<ユーザ名>/QEMU/bin/qemu-system-x86_64 rmix,
<br>
<br>
最後に、AppArmorのルールセットを再読み込みする。<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>