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

 
(同じ利用者による、間の53版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
 
chrootコマンドは、UNIXおよびLinuxシステムで使用される重要なツールである。<br>
プロセスとその子プロセスのルートディレクトリを変更する機能を持つ。<br>
<br>
chrootの主な目的は、指定したディレクトリを新しいルートディレクトリとして設定して、そこから下のファイルシステムツリーのみにアクセスを制限することである。<br>
これにより、特定のプロセスやユーザを隔離された環境で実行することが可能になる。<br>
<br>
この機能は、セキュリティ強化、システム修復、クロス開発環境の構築等の様々な用途に活用されている。<br>
例えば、システム管理者がセキュリティ上の理由から特定のサービスを制限された環境で動作させる場合や、開発者が異なるシステム環境をシミュレートしたい場合にchrootが役立つ。<br>
<br>
chrootの使用にはroot権限が必要である。<br>
<br>
新しいルートディレクトリを指定した後、その環境内で実行するコマンドを指定する。<br>
<br>
# 基本的な構文
sudo chroot <新しいルートディレクトリ> <コマンド>
<br>
ただし、chrootコマンドには一定の制限がある。<br>
例えば、chrootされた環境からホストシステムのプロセスやファイルシステムに直接アクセスすることはできない。<br>
また、chrootはファイルシステムレベルの分離のみを提供しており、完全な仮想化やコンテナ化とは異なることに注意が必要である。<br>
<br>
chrootは強力なツールであるが、適切に使用しないとセキュリティリスクを生む可能性がある。<br>
そのため、使用する場合は十分な知識と注意が必要となる。<br>
特に、chrootされた環境から脱出する方法 (chroot jail breaking) についての理解が重要である。<br>
<br><br>
<br><br>


== QEMUのインストール ==
== QEMU-User-Staticのインストール ==
QEMU-User-Staticは、クロスアーキテクチャの開発者にとって重要なツールである。<br>
QEMU-User-Staticは、クロスアーキテクチャの開発者にとって重要なツールである。<br>
これにより、ユーザはchroot環境を作成して、クロスコンパイルされたプログラムを実行することができる。<br>
これにより、ユーザはchroot環境を作成して、クロスコンパイルされたプログラムを実行することができる。<br>
<br>
<br>
例えば、ユーザはシステムレベルのエミュレーションのオーバーヘッド無しに、AArch64の実行ファイルを実行することができる。<br>
例えば、ユーザはシステムレベルのエミュレーションのオーバーヘッド無しに、AArch64の実行ファイルを実行することができる。<br>
<br>
==== パッケージ管理システムからインストール ====
sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64
<br>
<br>
==== ソースコードからインストール ====
==== ソースコードからインストール ====
ここでは、ARMおよびAArch64向けのQEMU-User-Staticのインストール手順を示す。<br>
なお、他のアーキテクチャにおいても、同様の手順でインストールすることができる。<br>
<br>
QEMUのビルドに必要なライブラリをインストールする。<br>
QEMUのビルドに必要なライブラリをインストールする。<br>
  sudo zypper install flex bison automake gcc gcc-c++ make glibc glibc-utils glib2-devel gtk3-devel ncurses-devel libxml2-devel \
# SUSE
                     libgnutls-devel gmp-devel libnettle-devel libseccomp-devel liburing-devel libgbm-devel glusterfs-devel \
  sudo zypper install flex bison automake gcc gcc-c++ make gmp-devel gmp-devel-32bit                     \
                     libjpeg8-devel libpng16-devel libpulse-devel alsa-devel libjack-devel spice-protocol-devel libspice-server-devel \
                     glibc glibc-utils glibc-devel-static glibc-devel-static glibc-devel-static-32bit    \
                     libxkbcommon-devel libcap-devel libcap-ng-devel libpcap-devel libcurl-devel libudev-devel virglrenderer-devel xfsprogs-devel \
                     glib2-devel glib2-devel-32bit glib2-devel-static ncurses-devel ncurses-devel-32bit  \
                     libiscsi-devel libzstd-devel libnfs-devel libvdeplug-devel brlapi-devel libSDL2-devel libSDL2_image-devel librados-devel \
                     libxml2-devel libxml2-devel-32bit libpcap-devel-static                              \
                     lzfse-devel libmpath0 libcacard-devel lzo-devel snappy-devel libgcrypt-devel libu2f-server-devel libu2f-host-devel \
                     zlib-devel zlib-devel-32bit zlib-devel-static zlib-devel-static-32bit              \
                     usbredir-devel libusb-1_0-devel libpmem-devel libkeyutils1 keyutils-devel libselinux-devel fuse-devel fuse3-devel libbpf-devel \
                     readline-devel-static pcre-devel-static pcre2-devel pcre2-devel-static              \
                     libbd_swap-devel libcapstone-devel libslirp-devel libfdt-devel sphinx libsphinxclient-devel  numad libnuma1 numactl libnuma-devel \
                     libbpf-devel-static sysprof-devel xfsprogs-devel perl-Text-Markdown
                    librbd-devel rdma-core-devel libnet-devel libfvde-devel libdmmp-devel multipath-tools-devel libssh-devel libssh2-devel
<br>
<br>
QEMUのソースコードをダウンロードする。<br>
QEMUのソースコードをダウンロードする。<br>
* パッケージ管理システムからダウンロードする場合
*: <code>sudo zypper install </code>
*: <br>
* QEMUの公式Webサイトから、ソースコードをダウンロードする場合
* QEMUの公式Webサイトから、ソースコードをダウンロードする場合
*: [https://www.qemu.org/download/ QEMUの公式Webサイト]にアクセスして、ソースコードをダウンロードする。
*: [https://www.qemu.org/download/ QEMUの公式Webサイト]にアクセスして、ソースコードをダウンロードする。
32行目: 56行目:
*: <br>
*: <br>
* Gitからソースコードをダウンロードする場合
* Gitからソースコードをダウンロードする場合
*: <code>git clone git://git.qemu.org/qemu.git</code>
*: <code>git clone https://gitlab.com/qemu-project/qemu.git</code>
*: <code>cd qemu</code>
*: <code>cd qemu</code>
*: <code>git submodule update --init --recursive</code>
*: <code>git submodule update --init --recursive</code>
42行目: 66行目:
ただし、softmmuターゲットがいくつかの共有ライブラリに依存していることは知られている。<br>
ただし、softmmuターゲットがいくつかの共有ライブラリに依存していることは知られている。<br>
<code>--static</code>オプションを指定した場合、これらのsoftmmuターゲットはリンクエラーを引き起こす。<br>
<code>--static</code>オプションを指定した場合、これらのsoftmmuターゲットはリンクエラーを引き起こす。<br>
  ../configure --prefix=<QEMU-User-Staticのインストールディレクトリ> \
  ../configure --prefix=<QEMU-User-Staticのインストールディレクトリ>                               \
--static \
              --enable-linux-user --static                                                     \
--disable-bsd-user --disable-guest-agent --disable-strip --disable-spice \
              --disable-system --disable-brlapi --disable-cap-ng --disable-capstone            \
  --enable-linux-user (もしかしたら --enable-linux-useかも) \
              --disable-curl --disable-curses --disable-docs --disable-gcrypt --disable-gnutls \
  --disable-tools \
              --disable-gtk --disable-guest-agent --disable-guest-agent-msi --disable-libiscsi \
  --disable-system (AArch64のみをインストールする場合は、--target-list=aarch64-linux-userオプションを指定する)
              --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                                        \
              --extra-ldflags=-latomic                                                        \
              --disable-blobs                                                                  \ # QEMU 7.x以前の場合 (QEMU 8.0以降は不要)
              --target-list=aarch64-linux-user,aarch64_be-linux-user,arm-linux-user,armeb-linux-user  # ARM, AArch64のみをインストールする場合
                                                                                                      # <u>全てのアーキテクチャをインストールする場合は、当オプションは付加しない</u>
              # 以下のオプションは任意である
              --cross-prefix=$(info)-                        \
              --host-cc=clang                                \  # Clangを使用してビルドする場合
              --host=$(clang --print-target-triple)          \ # Clangを使用してビルドする場合
              --build=$(TARGETPLATFORM= TARGETPAIR= clang --print-target-triple) \ # Clangを使用してビルドする場合
              --cc=clang                                        # Clangを使用してビルドする場合
   
make -j $(nproc) または ninja -C . -j $(nproc)
make install    または ninja -C . install
<br>
QEMU-User-Staticの設定スクリプトをコピーする。<br>
mkdir    /<QEMU-User-Staticのインストールディレクトリ>/sbin
mkdir -p /<QEMU-User-Staticのインストールディレクトリ>/lib/binfmt.d
cp /<QEMUのソースコードがあるディレクトリ>/scripts/qemu-binfmt-conf.sh  /<QEMU-User-Staticのインストールディレクトリ>/sbin
<br>
QEMU-User-Staticの設定スクリプトを、以下に示すように編集する。<br>
<u>この設定は、変数<code>QEMU_PATH</code>の設定を除いて、不要の可能性が高い。</u><br>
vi /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh
<br>
<syntaxhighlight lang="sh">
# /<QEMU-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.shファイル
   
   
  make -j $(nproc)
  # 344行目あたり
  make install
## 編集前
QEMU_PATH=/usr/local/bin
# 編集後
QEMU_PATH=/<QEMU-User-Staticのインストールディレクトリ>/bin
</syntaxhighlight>
<br>
各アーキテクチャのバイナリフォーマットファイルを生成する。<br>
sudo /<Qemu-User-Staticのインストールディレクトリ>/sbin/qemu-binfmt-conf.sh \
      --systemd ALL        \
      --persistent yes    \
      --preserve-argv0 yes \
      --exportdir /<Qemu-User-Staticのインストールディレクトリ>/lib/binfmt.d/
<br>
<del>次に、QEMU-User-Staticに必要なBinfmtを、[https://pkgs.org/download/qemu-linux-user pkgs.orgのWebサイト]からダウンロードする。</del><br>
<del>Binfmtは、QEMU-User-Staticのバージョンと異なっていても問題無い。</del><br>
<del>ダウンロードしたファイルを展開する。</del><br>
<del>rpm2cpio qemu-linux-user-<バージョン>.x86_64.rpm | cpio -id</del>
<br>
<del>展開したディレクトリに移動して、ARMおよびAArch64のBinfmtファイルを/<QEMU-User-Staticのインストールディレクトリ>/binディレクトリにコピーする。</del><br>
<del>cd qemu-linux-user-<バージョン>.x86_64/usr/bin</del>
<del>cp qemu-binfmt qemu-arm-binfmt qemu-aarch64-binfmt /<QEMU-User-Staticのインストールディレクトリ>/bin</del>
<br>
必要であれば、QEMU-User-Staticのパスを~/.profileファイル等に環境変数<code>PATH</code>に追記する。<br>
vi ~/.profile
<br>
<syntaxhighlight lang="sh">
# ~/.profileファイル等
export PATH="/<QEMU-User-Staticのインストールディレクトリ>/bin:/<QEMU-User-Staticのインストールディレクトリ>/sbin:$PATH"
</syntaxhighlight>
<br><br>
 
== QEMUバイナリフォーマット設定スクリプト (binfmt登録スクリプト) ==
==== スクリプトの実行 ====
このシェルスクリプトは、"binfmt script" や "QEMU binfmt setup" と略称されることもある。<br>
<br>
QEMUバイナリフォーマット設定スクリプトは、異なるアーキテクチャのバイナリをLinuxカーネルのbinfmt_misc機能を使用して自動的に実行できるように設定するものである。<br>
<br>
各オプションの意味を以下に示す。<br>
* --qemu-path <パス>
*: QEMUインタープリタのインストールパスを指定する。
*: デフォルトでは環境変数<code>$QEMU_PATH</code>の値が使用される。
*: <br>
* --qemu-suffix <サフィックス>
*: QEMUインタープリタ名に接尾辞を追加する。
*: 例えば、複数バージョンのQEMUを区別する際に使用する。
*: <br>
* --debian
*: /procディレクトリに直接書き込まず、Debian / Ubuntu系のupdate-binfmtsコマンド用のテンプレートファイルを生成する。
*: <br>
* --systemd <各アーキテクチャ名>
*: /procディレクトリに直接書き込まず、systemd-binfmt.service用の設定ファイルを生成する。
*: <各アーキテクチャ名>には、具体的なアーキテクチャ (例: aarch64) を指定すると、そのアーキテクチャのみの設定を生成する。
*: また、<各アーキテクチャ名> に <code>ALL</code> を指定すると、全てのサポートCPUの設定を生成する。
*: <br>
* --exportdir <パス>
*: 設定ファイルの出力先ディレクトリを指定する。
*: デフォルトは以下の通り。
** systemdモード
**: /etc/binfmt.d
** debianモード
**: /usr/share/binfmts
*: <br>
* セキュリティ・動作関連オプション
*: <br>
* --credential <yes または no>
*: 重要なセキュリティオプション
** yes
**: 実行されるバイナリに基づいてクレデンシャル (UID / GID) やセキュリティトークンが計算される。
** no (デフォルト)
**: インタープリタのクレデンシャルが使用される。
*: <br>
*: binfmt_miscの <code>O</code> および <code>C</code> フラグに対応し、setuid / setgidバイナリの安全な実行に関連する。
*: <br>
* --persistent <yes または no>
*: パフォーマンスとメモリに関するオプション
** yes
**: binfmt設定時にインタープリタがメモリにロードされ、常駐する。以降の実行はこのオープンファイルからクローンされる。
**: yesを指定すると、インタープリタファイルが削除されても動作し続けるが、メモリを消費する。コンテナ環境で有用である。
** no (デフォルト)
**: 実行の度にインタープリタファイルが読み込まれる。
*: <br>
* --preserve-argv0 <yes または no>
** yes
**: 元のプログラム名を argv[0] として保持する。
** no (デフォルト)
**: インタープリタ名が argv[0] になる。
**: プログラムが自分の名前を参照する動作に影響する。
*: <br>
* --ignore-family <yes または no>
** yes
**: ホストCPUが同じファミリーのプログラムをネイティブに実行できないと仮定する。(例: RISC-V 64ホスト上でRISC-V 32プログラムも変換)
** no (デフォルト)
**: 同じファミリー内は互換性があると仮定する。
<br>
# 使用例
# systemd環境で全アーキテクチャの設定を生成
sudo ./qemu-binfmt-conf.sh --systemd ALL --persistent yes
# Debian環境でARM64のみ設定
sudo ./qemu-binfmt-conf.sh --debian --systemd aarch64 --credential yes
# Docker等でpersistentモードを使用
./qemu-binfmt-conf.sh --persistent yes --credential yes
<br>
このスクリプトは、クロスプラットフォーム開発やDockerでのマルチアーキテクチャビルドにも使用されることもある。<br>
<br>
==== binfmt_miscの登録の解除 ====
<code>--persistent yes</code> で実行した後、メモリ上のインタープリタを削除するには、binfmt_miscの登録を解除する必要がある。<br>
<br>
* 方法1
*: 個別のアーキテクチャを削除
# 特定のアーキテクチャを削除 (例:aarch64)
echo -1 | sudo tee /proc/sys/fs/binfmt_misc/qemu-aarch64
<br>
* 方法2
*: 全てのbinfmt登録を一括削除
*: <code>-1</code> を書き込むと登録が削除され、persistent設定でメモリに常駐していたインタープリタも解放される。
*: 再度使用する場合は、スクリプトを再実行する必要がある。
# 全てのbinfmt_misc登録を削除
echo -1 | sudo tee /proc/sys/fs/binfmt_misc/status
<br>
* 方法3
*: systemdを使用している場合
# systemd-binfmtサービスを停止 (全ての登録が削除される)
  sudo systemctl stop systemd-binfmt.service
# または再起動 (設定ファイルを削除してから)
sudo rm /etc/binfmt.d/qemu-*.conf
sudo systemctl restart systemd-binfmt.service
<br>
* 方法4
*: Debian / Ubuntu系でupdate-binfmtsを使用
# 特定のアーキテクチャを無効化
sudo update-binfmts --disable qemu-aarch64
# 完全に削除
sudo update-binfmts --package qemu-aarch64 --remove qemu-aarch64 /usr/bin/qemu-aarch64-static
<br>
==== binfmt_miscの確認方法 ====
登録状況を確認する。<br>
<br>
<br>
ファイル名がコンフリクト(衝突)を起こさないように、ファイル名を変更する。<br>
# 登録されているbinfmt一覧
以下の例では、ファイル名に-staticサフィックスを追加している。<br>
  ls /proc/sys/fs/binfmt_misc/
  cd /<QEMU-User-Staticのインストールディレクトリ>/bin
   
   
  bash -c "for i in *; do cp $i $i-static; done"
  # 特定の登録の詳細
cat /proc/sys/fs/binfmt_misc/qemu-aarch64
<br><br>
<br><br>


== 例 : openSUSE Tumbleweed (PinePhone) ==
== 例 : openSUSE Tumbleweed (PinePhone) ==
AArch64命令セットを動作させるために必要なライブラリをインストールする。<br>
sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64
<br>
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。<br>
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。<br>
もし、ARM PCを使用している場合は、この操作は行わない。<br>
もし、ARM PCを使用している場合は、この操作は行わない。<br>
  sudo qemu-binfmt-conf.sh
# パッケージ管理システムからインストールしている場合
  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/
<br>
<br>
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br>
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br>
75行目: 273行目:
  sudo mount -t btrfs -o loop,offset=<ルートファイルシステムのオフセット  例: raw2拡張子の開始位置と1セクタのサイズを乗算した値> <openSUSE Tumbleweedのイメージファイル名>.raw /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 /sys  /mnt/sys  && sudo mount --make-rslave /mnt/sys  && \
  sudo mount --rbind /dev  /mnt/dev  && sudo mount --make-rslave /mnt/dev  && \
  sudo mount --rbind /dev  /mnt/dev  && sudo mount --make-rslave /mnt/dev  && \
83行目: 286行目:
<br>
<br>
AArch64命令セットをエミュレートするために必要なファイルを、openSUSE Tumbleweed (PinePhone)のマウント先ディレクトリにコピーする。<br>
AArch64命令セットをエミュレートするために必要なファイルを、openSUSE Tumbleweed (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/
# ソースコードからインストールしている場合
sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/
<br>
<br>
openSUSE Tumbleweed (PinePhone)の環境にchrootする。<br>
openSUSE Tumbleweed (PinePhone)の環境にchrootする。<br>
  sudo chroot /mnt qemu-aarch64 /bin/bash
  sudo chroot /mnt qemu-aarch64 /bin/bash
<br>
以下の例のようなコマンドを実行して、正常に動作するかどうかを確認する。<br>
(root権限で実行されるため、<code>sudo</code>は不要)<br>
zypper ref
zypper dup
zypper in nano
<br>
<br>
openSUSE Tumbleweed (PinePhone)の環境を終了する場合は、ターミナルから<code>exit</code>コマンドを実行した後、<br>
openSUSE Tumbleweed (PinePhone)の環境を終了する場合は、ターミナルから<code>exit</code>コマンドを実行した後、<br>
openSUSE Tumbleweed (PinePhone)のイメージファイルをアンマウントする。<br>
openSUSE Tumbleweed (PinePhone)のイメージファイルをアンマウントする。<br>
  sudo umount -fl /mnt
  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
<br><br>
<br><br>


== 例 : Raspbian OS (AArch64) ==
== 例 : Manjaro ARM, Mobian (PinePhone) ==
AArch64命令セットを動作させるために必要なライブラリをインストールする。<br>
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。<br>
  sudo zypper install qemu-arm qemu-linux-user qemu-uefi-aarch64
もし、ARM PCを使用している場合は、この操作は行わない。<br>
# パッケージ管理システムからインストールしている場合
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/
<br>
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br>
<u>この時、img拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。</u><br>
sudo fdisk -l <Manjaro ARM または Mobianのイメージファイル名>.img
<br>
Manjaro ARM、 または、Mobianのイメージファイルをマウントする。<br>
以下の例では、/mntディレクトリにマウントしている。<br>
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/
<br>
AArch64命令セットをエミュレートするために必要なファイルを、Manjaro ARM、または、Mobian(PinePhone)のマウント先ディレクトリにコピーする。<br>
# パッケージ管理システムからインストールしている場合
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/
<br>
Manjaro ARM、または、Mobian (PinePhone)の環境にchrootする。<br>
sudo chroot /mnt qemu-aarch64 /bin/bash
<br>
以下の例のようなコマンドを実行して、正常に動作するかどうかを確認する。<br>
(root権限で実行されるため、<code>sudo</code>は不要)<br>
# Manjaro ARM
pcman -Syyu
pacman -S --needed nano
# Mobian
apt update
apt upgrade
 
<br>
<u>※注意</u><br>
<u>Manjaro ARMのシステムをアップデートする時、以下に示すようなエラーが発生する場合がある。</u><br>
error: <インストールするパッケージ名>: signature from "Arch Linux ARM Build System <builder@archlinuxarm.org>" is unknown trust
<br>
<br>
以下のコマンドを実行する。<br>
<u>この時、/etc/pacman.confファイルを以下に示すように編集する。</u><br>
  sudo qemu-binfmt-conf.sh
sudo vi /etc/pacman.conf
<br>
<syntaxhighlight lang="ini">
# 42行目あたり
#SigLevel    = Required DatabaseOptional  # コメントアウトする
SigLevel    = Optional TrustAll          # 追記する
</syntaxhighlight>
<br>
Manjaro ARM、または、Mobian (PinePhone)の環境を終了する場合は、ターミナルから<code>exit</code>コマンドを実行した後、<br>
Manjaro ARM、または、Mobian (PinePhone)のイメージファイルをアンマウントする。<br>
  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
<br><br>
 
== 例 : Raspberry Pi OS (AArch64) ==
x86またはx64のPCを使用している場合、ARMバイナリのQEMU変換を設定する。<br>
もし、ARM PCを使用している場合は、この操作は行わない。<br>
# パッケージ管理システムからインストールしている場合
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/
<br>
<br>
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br>
イメージファイルのルートファイルシステムにおいて、オフセットを確認する。<br>
<u>この時、img3拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。</u><br>
<u>この時、img拡張子の開始位置と1セクタのサイズを乗算して、ルートファイルシステムのオフセットを求める。</u><br>
  sudo fdisk -l <Raspbian OS (AArch64)のイメージファイル名>.img
  sudo fdisk -l <Raspbian OS (AArch64)のイメージファイル名>.img
<br>
<br>
Raspbian OS (AArch64)のイメージファイルをマウントする。<br>
Raspberry Pi OS (AArch64) のイメージファイルをマウントする。<br>
以下の例では、/mntディレクトリにマウントしている。<br>
以下の例では、/mntディレクトリにマウントしている。<br>
  sudo mount -t ext4 -o loop,offset=<ルートファイルシステムのオフセット  例: img3拡張子の開始位置と1セクタのサイズを乗算した値> <Raspbian OS (AArch64)のイメージファイル名>.raw /mnt
  sudo mount -t ext4 -o loop,offset=<ルートファイルシステムのオフセット  例: img拡張子の開始位置と1セクタのサイズを乗算した値> \
            <Raspberry Pi OS (AArch64) のイメージファイル名>.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/
<br>
<br>
AArch64命令セットを動作させるために必要なライブラリを、Raspbian OS (AArch64)のマウント先ディレクトリにコピーする。<br>
AArch64命令セットを動作させるために必要なライブラリを、Raspberry Pi OS (AArch64) のマウント先ディレクトリにコピーする。<br>
# パッケージ管理システムからインストールしている場合
  sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/bin/
  sudo cp /usr/bin/qemu-aarch64-binfmt /usr/bin/qemu-aarch64 /mnt/bin/
# ソースコードからインストールしている場合
sudo cp /<QEMU-User-Staticのインストールディレクトリ>/bin/qemu-aarch64 /mnt/usr/bin/
<br>
<br>
chrootコマンドを実行して、Raspbian OS (AArch64)を起動する。<br>
chrootコマンドを実行して、Raspberry Pi OS (AArch64) を起動する。<br>
  sudo chroot /mnt qemu-aarch64 /bin/bash
  sudo chroot /mnt qemu-aarch64 /bin/bash
<br>
<br>
終了する場合は、Raspbian OS (AArch64)のイメージファイルをアンマウントする。<br>
終了する場合は、Raspberry Pi OS (AArch64) のイメージファイルをアンマウントする。<br>
  sudo umount -fl /mnt
  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
<br><br>
 
== エラー関連 ==
==== ロケールの警告 ====
chrootコマンドを実行して異なるアーキテクチャのイメージファイルにアクセスする時、以下に示す警告が表示される場合がある。<br>
この警告メッセージは、ホスト側のx64システムとchroot先の環境の間で、ロケール設定の不一致が起きているためである。<br>
bash: warning: setlocale: LC_CTYPE: cannot change locale (ja_JP.UTF-8): No such file or directory
<br>
* 方法 1
*# まず、localesパッケージをインストールする。
*#: <code>apt update</code>
*#: <code>apt install locales</code>
*# 次に、ロケールの自動生成を行う。
*#: <code>dpkg-reconfigure locales</code>
*: <br>
* 方法 2
*# ロケール設定ファイルを編集して、<code>ja_JP.UTF-8 UTF-8</code> のコメントアウトを外して有効化する。
*#: <code>vi /etc/locale.gen</code>
*# 変更を反映する。
*#: <code>locale-gen</code>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]