Linuxコマンド - chroot

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要



QEMUのインストール

QEMU-User-Staticは、クロスアーキテクチャの開発者にとって重要なツールである。
これにより、ユーザはchroot環境を作成して、クロスコンパイルされたプログラムを実行することができる。

例えば、ユーザはシステムレベルのエミュレーションのオーバーヘッド無しに、AArch64の実行ファイルを実行することができる。

ソースコードからインストール

QEMUのビルドに必要なライブラリをインストールする。

sudo zypper install flex bison automake gcc gcc-c++ make glibc glibc-utils glibc-devel-static glib2-devel glibc-utils gtk3-devel ncurses-devel \
                    libxml2-devel libgnutls-devel gmp-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 libcap-devel libcap-ng-devel libpcap-devel libcurl-devel libudev-devel virglrenderer-devel xfsprogs-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 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 \
                    pcre-devel-static pcre2-devel pcre2-devel-static capstone libcapstone4 libcapstone-devel python3-capstone


QEMUのソースコードをダウンロードする。

  • パッケージ管理システムからダウンロードする場合
    sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64

  • QEMUの公式Webサイトから、ソースコードをダウンロードする場合
    QEMUの公式Webサイトにアクセスして、ソースコードをダウンロードする。
    ダウンロードしたファイルを解凍する。
    tar xf qemu-<バージョン>.tar.xz
    cd qemu-<バージョン>

  • Gitからソースコードをダウンロードする場合
    git clone git://git.qemu.org/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のインストールディレクトリ> \
--static \
--disable-bsd-user --disable-guest-agent --disable-strip --disable-spice \
--disable-kvm --disable-xen \
--enable-linux-user \
--disable-tools \
--disable-system (AArch64のみをインストールする場合は、--target-list=aarch64-linux-userオプションを指定する)

make -j $(nproc)
make install


ファイル名がコンフリクト(衝突)を起こさないように、ファイル名を変更する。
以下の例では、ファイル名に-staticサフィックスを追加している。

cd /<QEMU-User-Staticのインストールディレクトリ>/bin

bash -c 'for i in *; do cp ${i} ${i}-static; done'



例 : openSUSE Tumbleweed (PinePhone)

AArch64命令セットを動作させるために必要なライブラリをインストールする。

sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64


x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。
もし、ARM PCを使用している場合は、この操作は行わない。

sudo /usr/sbin/qemu-binfmt-conf.sh


イメージファイルのルートファイルシステムにおいて、オフセットを確認する。
この時、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 --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/


openSUSE Tumbleweed (PinePhone)の環境にchrootする。

sudo chroot /mnt qemu-aarch64 /bin/bash


openSUSE Tumbleweed (PinePhone)の環境を終了する場合は、ターミナルからexitコマンドを実行した後、
openSUSE Tumbleweed (PinePhone)のイメージファイルをアンマウントする。

sudo umount -fl /mnt



例 : Raspbian OS (AArch64)

AArch64命令セットを動作させるために必要なライブラリをインストールする。

sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64


以下のコマンドを実行する。

sudo qemu-binfmt-conf.sh


イメージファイルのルートファイルシステムにおいて、オフセットを確認する。
この時、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/


chrootコマンドを実行して、Raspbian OS (AArch64)を起動する。

sudo chroot /mnt qemu-aarch64 /bin/bash


終了する場合は、Raspbian OS (AArch64)のイメージファイルをアンマウントする。

sudo umount -fl /mnt