Ubuntu 上で armhf 版 Debian 10 (buster) の隔離開発環境を構築する(debootstrap と qemu-user-static を使用)

【目次】

  1. この記事で実現できること
  2. 前準備
  3. 隔離開発環境の構築
  4. schroot の設定
  5. リモートアクセスの設定

【この記事で使うツールについての前提(2026年6月時点)】

【この記事で実現できること】

【概要】Ubuntu 上で debootstrap と qemu-user-static を使用し、armhf 版 Debian 10 (buster) の隔離開発環境を構築する手順を解説する。schroot の設定と SSH によるリモートアクセスの設定についても説明する。

【前提条件】

参考ページ: http://logan.tw/posts/2017/01/21/introduction-to-qemu-debootstrap/

【サイト内の関連ページ】

この記事で実現できること

この記事では、x86_64 の Ubuntu PC 上に armhf(32 ビット ARM)の Debian 10 (buster) 環境を作り、その中で ARM 向けのビルドや実行を行えるようにする。異なるアーキテクチャのバイナリは qemu-user-static によってエミュレーションで実行されるため、実機の ARM デバイスがなくても開発・テストができる。

前準備

Ubuntu のシステム更新

Ubuntu のシステム更新を行うには、以下のコマンドを実行する。

Ubuntu のインストール手順は別ページ »で説明している。

# パッケージリストの情報を更新
sudo apt update
# インストール済みパッケージを包括的に更新(依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に反映させるため再起動
sudo shutdown -r now

隔離開発環境の構築

この章では、debootstrap(Debian 環境構築ツール)と qemu-user-static(異なるアーキテクチャのバイナリを実行するためのエミュレータ)を組み合わせ、Ubuntu 上に ARM 環境を構築する。構築した環境は chroot(ルートディレクトリを変更して隔離された環境に入るコマンド)で利用する。

  1. qemu-user-static、binfmt-support、debootstrap、schroot のインストール

    各パッケージの役割は以下のとおりである。

    • qemu-user-static: 異なるアーキテクチャのバイナリを実行するためのエミュレータ
    • binfmt-support: 拡張子やアーキテクチャに応じて実行するプログラムを自動で振り分ける仕組み(binfmt_misc)を管理するツール。これにより chroot 内の armhf バイナリが qemu-user-static 経由で自動実行される
    • debootstrap: Debian 系 Linux の最小構成環境を構築するツール
    • schroot: 一般ユーザでも chroot を安全に実行できるようにするツール
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install qemu-user-static binfmt-support debootstrap schroot
    
    qemu-user-static、debootstrap、schroot のインストール画面
  2. armhf 版 Debian 10 (buster) 環境の構築

    以下の設定で環境を構築する。

    • アーキテクチャ: armhf(ARM Hard Float、32 ビット ARM プロセッサ向け。arm64 も選択可能)
    • バージョン: Debian 10 (buster)
    • 作業ディレクトリ: /home/buster-armhf
    • インストールバリアント: buildd(パッケージビルド用の最小構成)
    • パッケージソース: http://archive.debian.org/debian(buster は EOL のためアーカイブから取得する。Raspbian を使用する場合は「https://archive.raspbian.org/raspbian」を指定する)

    buster は qemu-user-static と binfmt が設定済みであれば、debootstrap がエミュレーションを使ってそのまま環境を構築する(以前の qemu-debootstrap と同じ結果になる)。インストールの完了には時間がかかる。

    sudo rm -rf /home/buster-armhf
    sudo mkdir /home/buster-armhf
    sudo debootstrap --arch armhf --variant buildd --include=ca-certificates,apt,wget,sudo,debootstrap buster /home/buster-armhf http://archive.debian.org/debian
    
    debootstrap コマンドの実行画面
  3. インストール完了の確認

    インストール完了画面
  4. armhf 版 Debian 10 (buster) 環境の動作確認

    uname -m コマンドを実行し、アーキテクチャを確認する(uname -m はマシンのアーキテクチャ名を表示するコマンド)。「armv7l」と表示されれば成功である。

    sudo chroot /home/buster-armhf
    uname -m
    exit
    
    uname -m コマンドの実行結果
  5. 隔離環境(chroot)の動作確認

    ここでは、nano エディタのインストール、C プログラムの作成、ビルド、実行を通じて、環境が正しく動作することを確認する。

    1. 管理者権限で隔離環境(chroot)に入り、uname -m でアーキテクチャを確認する。

      sudo chroot /home/buster-armhf
      uname -m
      
      chroot 環境への移行と uname -m の実行結果
    2. nano エディタのインストール

      apt update
      apt upgrade
      apt install nano
      
      nano エディタのインストール画面
    3. 動作確認用のプログラムを作成する。エディタを使用し、ファイル名を /tmp/hello.c として保存する。

      #include<stdio.h>
      int main() {
          printf("Hello,World!\n");
          printf("sizeof(size_t)=%ld\n", sizeof(size_t));
          return 0;
      }
      
      nano エディタでの hello.c 編集画面
      hello.c ファイルの保存確認
    4. コンパイルと実行

      sizeof(size_t) の値が 4 と表示されれば、32 ビット ARM 環境で正しくコンパイルされている(32 ビット環境では size_t が 4 バイトになる)。

      cd /tmp
      gcc -o a.out hello.c
      ./a.out
      
      gcc によるコンパイルと実行結果
    5. exit コマンドで隔離環境から抜ける。

      exit
      
      exit コマンドの実行

schroot の設定

schroot を設定することで、sudo を使わずに一般ユーザでも chroot を実行できるようになる。複数ユーザでの開発環境共有にも便利である。

  1. /etc/schroot/chroot.d/buster-armhf の作成

    以下の内容で設定ファイルを作成する。

    • directory: 作業ディレクトリのパス
    • root-users: 管理者権限で chroot を実行できるユーザ(複数指定時はカンマ区切り)
    • users: 一般権限で chroot を実行できるユーザ(複数指定時はカンマ区切り)
    [buster-armhf]
    description=Debian GNU/Linux 10 (Buster)
    type=directory
    directory=/home/buster-armhf
    root-users=kaneko
    users=kaneko
    
    schroot 設定ファイルの内容
  2. schroot の動作確認(一般ユーザ権限)

    schroot -c buster-armhf -p bash
    uname -m
    exit
    
    schroot の基本動作確認
  3. schroot の動作確認(root 権限)

    schroot -c buster-armhf -p bash -u root
    uname -m
    exit
    
    root 権限での schroot 動作確認

リモートアクセスの設定

SSH ログイン時に自動的に隔離環境(chroot)に入るよう設定する。リモートからの ARM 開発環境へのアクセスが可能になる。

【セキュリティに関する注意】SSH 経由で chroot 環境にアクセスできるようにする設定である。本番環境や外部に公開するサーバでは、ファイアウォール設定やアクセス制限を適切に行うこと。

アクセス用ユーザの作成

SSH リモートアクセス用のユーザアカウントを以下の設定で作成する。

sudo adduser --uid 1234 --home /home/ai ai
adduser コマンドの実行

再設定が必要な場合は、sudo deluser ai でアカウントを削除した後、再度作成する。

deluser コマンドの実行

隔離環境内のユーザ設定

隔離環境内で sudo を実行できるようにするため、隔離環境内にも同一のユーザアカウントを作成する。UID、ホームディレクトリ、ユーザ名はホスト側と同一に設定する。パスワードはホスト側と異なる値を設定することも可能である。

sudo chroot /home/buster-armhf
rm -rf /home/ai
deluser ai
adduser --uid 1234 --ingroup sudo --home /home/ai ai
exit
隔離環境内でのユーザ作成

/home/buster-armhf/etc/sudoers の設定

隔離環境内での sudo 実行を可能にするため、/home/buster-armhf/etc/sudoersDefaults visiblepw を追記する。この設定により、パスワード入力時に端末にパスワードが表示される環境でも sudo が動作する。sudo を使用しない場合は、この設定を省略できる。

sudoers ファイルの編集

権限を設定する。

sudo chmod 444 /home/buster-armhf/etc/sudoers
sudo chmod 444 /home/buster-armhf/etc/sudoers.d/*
sudoers ファイルの権限設定

ディレクトリ権限の設定

SSH で chroot を使用するには、chroot 先までのディレクトリが root 所有かつ他ユーザに書き込み権限がない必要がある。以下のコマンドで所有者を root に、権限を 755 に設定する。

sudo chown root:root /home
sudo chmod 755 /home
sudo chown root:root /home/buster-armhf
sudo chmod 755 /home/buster-armhf
sudo chown root:root /home/buster-armhf/home
sudo chmod 755 /home/buster-armhf/home
sudo chown root:root /home/buster-armhf/home/ai
sudo chmod 755 /home/buster-armhf/home/ai
ディレクトリ権限の設定

/etc/ssh/sshd_config の設定

SSH ログイン時に自動的に chroot を実行するため、/etc/ssh/sshd_config のファイル末尾に以下を追記する。ChrootDirectory には隔離環境のパスを指定する。

Match User ai
        X11Forwarding yes
        AllowTcpForwarding yes
        ChrootDirectory /home/buster-armhf
sshd_config の設定

sshd の再起動

設定を反映するため、sshd を再起動する。

sudo service sshd reload
sshd の再起動

SSH ログインのテスト

SSH ログインをテストする。

ssh ai@localhost

ログインできない場合は、/etc/ssh/sshd_config の設定および「ディレクトリ権限の設定」の内容を確認する。

SSH ログインのテスト