Ubuntu 上で、armhf 版 Debian 10 (buster) の隔離された開発環境を作る(qemu-debootstrap を使用)

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

【目次】

  1. 前準備
  2. 隔離開発環境の構築
  3. schroot の設定
  4. リモートアクセスの設定

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

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

前準備

Ubuntu のシステム更新

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

Ubuntu のインストール手順は別ページ »に記載している。

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

隔離開発環境の構築

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

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install qemu-user-static debootstrap schroot
    
    qemu-user-static、debootstrap、schroot のインストール画面
  2. armhf 版 Debian 10 (buster) 環境の構築

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

    • アーキテクチャ: armhf(arm64 も選択可能)
    • バージョン: Debian 10 (buster)
    • 作業ディレクトリ: /home/buster-armhf
    • インストールバリアント: buildd
    • パッケージソース: http://ftp.jp.debian.org/debian(Raspbian 向けには「https://archive.raspbian.org/raspbian」を指定する)

    インストールの完了には時間を要する。

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

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

    uname -m コマンドでアーキテクチャを確認する。

    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. コンパイルと実行

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

      exit
      
      exit コマンドの実行

schroot の設定

schroot を設定することで、一般ユーザでも 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. root 権限での schroot 動作確認

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

リモートアクセスの設定

アクセス用ユーザの作成

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 によるリモートアクセスに必要な権限を設定する。SSH の要件に従い、所有者を 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 ログインのテスト