「Linuxコマンド - chroot」の版間の差分
128行目: | 128行目: | ||
# ソースコードからインストールしている場合 | # ソースコードからインストールしている場合 | ||
sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ | sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ | ||
--persistent yes --preserve-argv0 yes \ | --persistent yes \ | ||
--preserve-argv0 yes \ | |||
--exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/ | --exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/ | ||
<br> | <br> | ||
176行目: | 177行目: | ||
<br><br> | <br><br> | ||
== 例 : Manjaro ARM (PinePhone) == | == 例 : Manjaro ARM, Mobian (PinePhone) == | ||
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。<br> | x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。<br> | ||
もし、ARM PCを使用している場合は、この操作は行わない。<br> | もし、ARM PCを使用している場合は、この操作は行わない。<br> | ||
184行目: | 185行目: | ||
# ソースコードからインストールしている場合 | # ソースコードからインストールしている場合 | ||
sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ | sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ | ||
--persistent yes --preserve-argv0 yes \ | --persistent yes \ | ||
--preserve-argv0 yes \ | |||
--exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/ | --exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/ | ||
<br> | <br> | ||
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br> | イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br> | ||
<u>この時、img拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。</u><br> | <u>この時、img拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。</u><br> | ||
sudo fdisk -l <Manjaro | sudo fdisk -l <Manjaro ARM または Mobianのイメージファイル名>.img | ||
<br> | <br> | ||
Manjaro | Manjaro ARM、 または、Mobianのイメージファイルをマウントする。<br> | ||
以下の例では、/mntディレクトリにマウントしている。<br> | 以下の例では、/mntディレクトリにマウントしている。<br> | ||
sudo mount -t ext4 -o loop,offset=<ルートファイルシステムのオフセット 例: img拡張子の開始位置と1セクタのサイズを乗算した値> <Manjaro | sudo mount -t ext4 -o loop,offset=<ルートファイルシステムのオフセット 例: img拡張子の開始位置と1セクタのサイズを乗算した値> <Manjaro ARM または Mobianのイメージファイル名>.img /mnt | ||
sudo mount --bind /sys /mnt/sys && sudo mount --make-rslave /mnt/sys && \ | sudo mount --bind /sys /mnt/sys && sudo mount --make-rslave /mnt/sys && \ | ||
207行目: | 209行目: | ||
sudo cp /run/netconfig/resolv.conf /mnt/etc/ | sudo cp /run/netconfig/resolv.conf /mnt/etc/ | ||
<br> | <br> | ||
AArch64命令セットをエミュレートするために必要なファイルを、Manjaro | AArch64命令セットをエミュレートするために必要なファイルを、Manjaro ARM、または、Mobian(PinePhone)のマウント先ディレクトリにコピーする。<br> | ||
# パッケージ管理システムからインストールしている場合 | # パッケージ管理システムからインストールしている場合 | ||
sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/usr/bin/ | sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/usr/bin/ | ||
214行目: | 216行目: | ||
sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/ | sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/ | ||
<br> | <br> | ||
Manjaro | Manjaro ARM、または、Mobian (PinePhone)の環境にchrootする。<br> | ||
sudo chroot /mnt qemu-aarch64 /bin/bash | sudo chroot /mnt qemu-aarch64 /bin/bash | ||
<br> | <br> | ||
以下の例のようなコマンドを実行して、正常に動作するかどうかを確認する。<br> | 以下の例のようなコマンドを実行して、正常に動作するかどうかを確認する。<br> | ||
(root権限で実行されるため、<code>sudo</code>は不要)<br> | (root権限で実行されるため、<code>sudo</code>は不要)<br> | ||
# Manjaro ARM | |||
pcman -Syyu | pcman -Syyu | ||
pacman -S --needed nano | pacman -S --needed nano | ||
# Mobian | |||
apt update | |||
apt upgrade | |||
<br> | <br> | ||
<u>※注意</u><br> | <u>※注意</u><br> | ||
<u> | <u>Manjaro ARMのシステムをアップデートする時、以下に示すようなエラーが発生する場合がある。</u><br> | ||
error: <インストールするパッケージ名>: signature from "Arch Linux ARM Build System <builder@archlinuxarm.org>" is unknown trust | error: <インストールするパッケージ名>: signature from "Arch Linux ARM Build System <builder@archlinuxarm.org>" is unknown trust | ||
<br> | <br> | ||
236行目: | 244行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
Manjaro | Manjaro ARM、または、Mobian (PinePhone)の環境を終了する場合は、ターミナルから<code>exit</code>コマンドを実行した後、<br> | ||
Manjaro | Manjaro ARM、または、Mobian (PinePhone)のイメージファイルをアンマウントする。<br> | ||
sudo umount -dfl /mnt/sys && \ | sudo umount -dfl /mnt/sys && \ | ||
sudo umount -dfl /mnt/dev/pts && \ | sudo umount -dfl /mnt/dev/pts && \ |
2023年11月28日 (火) 17:48時点における版
概要
QEMU-User-Staticのインストール
QEMU-User-Staticは、クロスアーキテクチャの開発者にとって重要なツールである。
これにより、ユーザはchroot環境を作成して、クロスコンパイルされたプログラムを実行することができる。
例えば、ユーザはシステムレベルのエミュレーションのオーバーヘッド無しに、AArch64の実行ファイルを実行することができる。
パッケージ管理システムからインストール
sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64
ソースコードからインストール
ここでは、ARMおよびAArch64向けのQEMU-User-Staticのインストール手順を示す。
なお、他のアーキテクチャにおいても、同様の手順でインストールすることができる。
QEMUのビルドに必要なライブラリをインストールする。
sudo zypper install flex bison automake gcc gcc-c++ make glibc glibc-utils glibc-devel-static glib2-devel glibc-utils ncurses-devel libxml2-devel \ glibc-devel-static glibc-devel-static-32bit glib2-devel glib2-devel-static glib2-devel-32bit \ zlib-devel zlib-devel-32bit zlib-devel-static zlib-devel-static-32bit libpcap-devel-static readline-devel-static xfsprogs-devel \ pcre-devel-static pcre2-devel pcre2-devel-static gmp-devel perl-Text-Markdown # 以下の依存関係のライブラリは不要の可能性がある gtk3-devel libgnutls-devel libnettle-devel libseccomp-devel liburing-devel libgbm-devel glusterfs-devel \ libjpeg8-devel libpng16-devel libpulse-devel alsa-devel libjack-devel spice-protocol-devel libspice-server-devel \ libxkbcommon-devel libxkbcommon-x11-devel libcap-devel libcap-ng-devel libpcap-devel libcurl-devel libudev-devel virglrenderer-devel \ libiscsi-devel libzstd-devel libnfs-devel libvdeplug-devel brlapi-devel libSDL2-devel libSDL2_image-devel librados-devel \ lzfse-devel libmpath0 libcacard-devel lzo-devel snappy-devel libgcrypt-devel libu2f-server-devel libu2f-host-devel \ usbredir-devel libusb-1_0-devel libpmem-devel libkeyutils1 keyutils-devel libselinux-devel fuse-devel fuse3-devel libbpf-devel \ libbd_swap-devel libcapstone-devel libslirp-devel libfdt-devel sphinx libsphinxclient-devel numad libnuma1 numactl libnuma-devel \ librbd-devel rdma-core-devel libnet-devel libfvde-devel libdmmp-devel multipath-tools-devel libssh-devel libssh2-devel \ rpcbind rpcgen readline-devel libyajl-devel libpciaccess-devel device-mapper-devel libtirpc-devel libnl3-devel libpixman-1-0-devel \ libxslt-devel python3-docutils capstone libcapstone4 libcapstone-devel python3-capstone
QEMUのソースコードをダウンロードする。
- QEMUの公式Webサイトから、ソースコードをダウンロードする場合
- QEMUの公式Webサイトにアクセスして、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf qemu-<バージョン>.tar.xz
cd qemu-<バージョン>
- Gitからソースコードをダウンロードする場合
git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
git submodule update --init --recursive
QEMUをQEMU-User-Staticとして、ビルドおよびインストールする。
mkdir build && cd build
--disable-system
オプションを指定する時、softmmuターゲットが無効になる。
ただし、softmmuターゲットがいくつかの共有ライブラリに依存していることは知られている。
--static
オプションを指定した場合、これらのsoftmmuターゲットはリンクエラーを引き起こす。
../configure --prefix=<QEMU-User-Staticのインストールディレクトリ> \ --enable-linux-user --static \ --disable-system --disable-brlapi --disable-cap-ng --disable-capstone \ --disable-curl --disable-curses --disable-docs --disable-gcrypt --disable-gnutls \ --disable-gtk --disable-guest-agent --disable-guest-agent-msi --disable-libiscsi \ --disable-libnfs --disable-mpath --disable-nettle --disable-opengl --disable-pie \ --disable-sdl --disable-spice --disable-tools --disable-vte --disable-werror \ --disable-debug-info --disable-glusterfs \ --disable-blobs \ # QEMU 7.x以前の場合 (QEMU 8.0以降は不要) --extra-ldflags=-latomic \ --target-list=aarch64-linux-user,aarch64_be-linux-user,arm-linux-user,armeb-linux-user # ARM, AArch64のみをインストールする場合 # 全てのアーキテクチャをインストールする場合は、当オプションは付加しない # 以下のオプションは任意である --cross-prefix=$(info)- \ --host-cc=clang \ # Clangを使用してビルドする場合 --host=$(clang --print-target-triple) \ # Clangを使用してビルドする場合 --build=$(TARGETPLATFORM= TARGETPAIR= clang --print-target-triple) \ # Clangを使用してビルドする場合 --cc=clang \ # Clangを使用してビルドする場合 --disable-system # softmmuターゲットを無効にする make -j $(nproc) または ninja -C . make install または ninja -C . install
QEMU-User-Staticの設定スクリプトをコピーする。
mkdir /<QEMU-User-Staticのインストールディレクトリ>/sbin cp /<QEMUのソースコードがあるディレクトリ>/scripts/qemu-binfmt-conf.sh /<QEMU-User-Staticのインストールディレクトリ>/sbin
QEMU-User-Staticの設定スクリプトを、以下に示すように編集する。
この設定は、変数QEMU_PATH
の設定を除いて、不要の可能性が高い。
vi /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh
# /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.shファイル
# 344行目あたり
## 編集前
QEMU_PATH=/usr/local/bin
# 編集後
QEMU_PATH=/<QEMU-User-Staticのインストールディレクトリ>/bin
各アーキテクチャのバイナリフォーマットファイルを生成する。
sudo /<Qemu-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ --systemd ALL \ --persistent yes \ --preserve-argv0 yes \ --exportdir /<Qemu-User-Staticのインストールディレクトリ>/lib/binfmt.d/
次に、QEMU-User-Staticに必要なBinfmtを、pkgs.orgのWebサイトからダウンロードする。
Binfmtは、QEMU-User-Staticのバージョンと異なっていても問題無い。
ダウンロードしたファイルを展開する。
rpm2cpio qemu-linux-user-<バージョン>.x86_64.rpm | cpio -id
展開したディレクトリに移動して、ARMおよびAArch64のBinfmtファイルを/<QEMU-User-Staticのインストールディレクトリ>/binディレクトリにコピーする。
cd qemu-linux-user-<バージョン>.x86_64/usr/bincp qemu-binfmt qemu-arm-binfmt qemu-aarch64-binfmt /<QEMU-User-Staticのインストールディレクトリ>/bin
必要であれば、QEMU-User-Staticのパスを~/.profileファイル等に環境変数PATH
に追記する。
vi ~/.profile
# ~/.profileファイル等
export PATH="/<QEMU-User-Staticのインストールディレクトリ>/bin:/<QEMU-User-Staticのインストールディレクトリ>/sbin:$PATH"
例 : openSUSE Tumbleweed (PinePhone)
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。
もし、ARM PCを使用している場合は、この操作は行わない。
# パッケージ管理システムからインストールしている場合 sudo /usr/sbin/qemu-binfmt-conf.sh # ソースコードからインストールしている場合 sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ --persistent yes \ --preserve-argv0 yes \ --exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。
この時、raw2拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。
sudo fdisk -l <openSUSE Tumbleweedのイメージファイル名>.raw
openSUSE Tumbleweedのイメージファイルをマウントする。
以下の例では、/mntディレクトリにマウントしている。
sudo mount -t btrfs -o loop,offset=<ルートファイルシステムのオフセット 例: raw2拡張子の開始位置と1セクタのサイズを乗算した値> <openSUSE Tumbleweedのイメージファイル名>.raw /mnt sudo mount --bind /sys /mnt/sys && sudo mount --make-rslave /mnt/sys && \ sudo mount --bind /dev /mnt/dev && sudo mount --make-rslave /mnt/dev && \ sudo mount --bind /proc /mnt/proc && sudo mount --make-rslave /mnt/proc && \ sudo mount --bind /dev/pts /mnt/dev/pts # または sudo mount --rbind /sys /mnt/sys && sudo mount --make-rslave /mnt/sys && \ sudo mount --rbind /dev /mnt/dev && sudo mount --make-rslave /mnt/dev && \ sudo mount --rbind /proc /mnt/proc && sudo mount --make-rslave /mnt/proc && \ sudo mount --rbind /dev/pts /mnt/dev/pts sudo cp /run/netconfig/resolv.conf /mnt/etc/
AArch64命令セットをエミュレートするために必要なファイルを、openSUSE Tumbleweed (PinePhone)のマウント先ディレクトリにコピーする。
# パッケージ管理システムからインストールしている場合 sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/usr/bin/ # ソースコードからインストールしている場合 sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/
openSUSE Tumbleweed (PinePhone)の環境にchrootする。
sudo chroot /mnt qemu-aarch64 /bin/bash
以下の例のようなコマンドを実行して、正常に動作するかどうかを確認する。
(root権限で実行されるため、sudo
は不要)
zypper ref zypper dup zypper in nano
openSUSE Tumbleweed (PinePhone)の環境を終了する場合は、ターミナルからexit
コマンドを実行した後、
openSUSE Tumbleweed (PinePhone)のイメージファイルをアンマウントする。
sudo umount -dfl /mnt/sys && \ sudo umount -dfl /mnt/dev/pts && \ sudo umount -dfl /mnt/dev && \ sudo umount -dfl /mnt/proc && \ sudo umount -dfl /mnt
例 : Manjaro ARM, Mobian (PinePhone)
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。
もし、ARM PCを使用している場合は、この操作は行わない。
# パッケージ管理システムからインストールしている場合 sudo /usr/sbin/qemu-binfmt-conf.sh # ソースコードからインストールしている場合 sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ --persistent yes \ --preserve-argv0 yes \ --exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。
この時、img拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。
sudo fdisk -l <Manjaro ARM または Mobianのイメージファイル名>.img
Manjaro ARM、 または、Mobianのイメージファイルをマウントする。
以下の例では、/mntディレクトリにマウントしている。
sudo mount -t ext4 -o loop,offset=<ルートファイルシステムのオフセット 例: img拡張子の開始位置と1セクタのサイズを乗算した値> <Manjaro ARM または Mobianのイメージファイル名>.img /mnt sudo mount --bind /sys /mnt/sys && sudo mount --make-rslave /mnt/sys && \ sudo mount --bind /dev /mnt/dev && sudo mount --make-rslave /mnt/dev && \ sudo mount --bind /proc /mnt/proc && sudo mount --make-rslave /mnt/proc && \ sudo mount --bind /dev/pts /mnt/dev/pts # または sudo mount --rbind /sys /mnt/sys && sudo mount --make-rslave /mnt/sys && \ sudo mount --rbind /dev /mnt/dev && sudo mount --make-rslave /mnt/dev && \ sudo mount --rbind /proc /mnt/proc && sudo mount --make-rslave /mnt/proc && \ sudo mount --rbind /dev/pts /mnt/dev/pts sudo cp /run/netconfig/resolv.conf /mnt/etc/
AArch64命令セットをエミュレートするために必要なファイルを、Manjaro ARM、または、Mobian(PinePhone)のマウント先ディレクトリにコピーする。
# パッケージ管理システムからインストールしている場合 sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/usr/bin/ # ソースコードからインストールしている場合 sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/
Manjaro ARM、または、Mobian (PinePhone)の環境にchrootする。
sudo chroot /mnt qemu-aarch64 /bin/bash
以下の例のようなコマンドを実行して、正常に動作するかどうかを確認する。
(root権限で実行されるため、sudo
は不要)
# Manjaro ARM pcman -Syyu pacman -S --needed nano # Mobian apt update apt upgrade
※注意
Manjaro ARMのシステムをアップデートする時、以下に示すようなエラーが発生する場合がある。
error: <インストールするパッケージ名>: signature from "Arch Linux ARM Build System <builder@archlinuxarm.org>" is unknown trust
この時、/etc/pacman.confファイルを以下に示すように編集する。
sudo vi /etc/pacman.conf
# 42行目あたり
#SigLevel = Required DatabaseOptional # コメントアウトする
SigLevel = Optional TrustAll # 追記する
Manjaro ARM、または、Mobian (PinePhone)の環境を終了する場合は、ターミナルからexit
コマンドを実行した後、
Manjaro ARM、または、Mobian (PinePhone)のイメージファイルをアンマウントする。
sudo umount -dfl /mnt/sys && \ sudo umount -dfl /mnt/dev/pts && \ sudo umount -dfl /mnt/dev && \ sudo umount -dfl /mnt/proc && \ sudo umount -dfl /mnt
例 : Raspbian OS (AArch64)
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。
もし、ARM PCを使用している場合は、この操作は行わない。
# パッケージ管理システムからインストールしている場合 sudo /usr/sbin/qemu-binfmt-conf.sh # ソースコードからインストールしている場合 sudo /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \ --persistent yes --preserve-argv0 yes \ --exportdir /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d/
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。
この時、img3拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。
sudo fdisk -l <Raspbian OS (AArch64)のイメージファイル名>.img
Raspbian OS (AArch64)のイメージファイルをマウントする。
以下の例では、/mntディレクトリにマウントしている。
sudo mount -t ext4 -o loop,offset=<ルートファイルシステムのオフセット 例: img3拡張子の開始位置と1セクタのサイズを乗算した値> <Raspbian OS (AArch64)のイメージファイル名>.raw /mnt
AArch64命令セットを動作させるために必要なライブラリを、Raspbian OS (AArch64)のマウント先ディレクトリにコピーする。
# パッケージ管理システムからインストールしている場合 sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/bin/ # ソースコードからインストールしている場合 sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/
chrootコマンドを実行して、Raspbian OS (AArch64)を起動する。
sudo chroot /mnt qemu-aarch64 /bin/bash
終了する場合は、Raspbian OS (AArch64)のイメージファイルをアンマウントする。
sudo umount -fl /mnt