Ubuntu 上で,armhf 版 Debian 10 (buster) の隔離された開発環境を作る(qemu-debootstrap を使用)
ユースケース: Ubuntu 18.04 上に,効率的かつ安全な armhf 版 Debian 10 (buster) の隔離開発環境を構築する.
【目次】
参考ページ http://logan.tw/posts/2017/01/21/introduction-to-qemu-debootstrap/ の記事
【サイト内の関連ページ】
前準備
Ubuntu のシステム更新
Ubuntu のシステム更新を実行するには, 以下のコマンドを使用する.
sudo apt -y update sudo apt -yV upgrade sudo /sbin/shutdown -r now
隔離開発環境の構築
- qemu-user-static,debootstrap,schroot のインストール
sudo apt -y update sudo apt -y install qemu-user-static debootstrap schroot
- armhf 版 Debian 10 (buster) 環境の構築
設定内容
- アーキテクチャ: armhf ※ arm64 (64ビットモード) も選択可能
- バージョン: Debian 10 (buster)
- 作業ディレクトリ: /home/buster-armhf
- インストールバリアント: minbase と 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
- インストール完了の確認
- armhf 版 Debian 10 (buster) 環境の動作確認として,「uname -m」でアーキテクチャを確認
sudo chroot /home/buster-armhf uname -m exit
- 隔離環境(chroot)の基本的な動作確認
ここでは,nano エディタのインストール,C プログラムの作成,ビルド,実行を試行する.
- まず,管理者権限で隔離環境(chroot)に入り,「uname -m」で確認
sudo chroot /home/buster-armhf uname -m
- nano エディタのインストール
apt update apt upgrade apt install nano
- 動作確認用に,
エディタで次のプログラムを作成.ファイル名は「/tmp/hello.c」とする.
#include<stdio.h> int main() { printf("Hello,World!\n"); printf("sizeof(size_t)=%ld\n", sizeof(size_t)); return 0; }
- コンパイルと実行
cd /tmp gcc -o a.out hello.c ./a.out
- exit コマンドで終了
exit
- まず,管理者権限で隔離環境(chroot)に入り,「uname -m」で確認
schroot の設定
一般ユーザでも chroot が実行できるよう,schroot の設定を行う
- /etc/schroot/chroot.d/buster-armhf の設定内容
「directory=/home/buster-armhf」は実際の作業ディレクトリパスに合わせて変更
「kaneko」は対象ユーザ名に変更(複数ユーザはカンマ区切り)
[buster-armhf] description=Debian GNU/Linux 10 (Buster) type=directory directory=/home/buster-armhf root-users=kaneko users=kaneko
- schroot の基本動作確認
schroot -c buster-armhf -p bash uname -m exit
- root 権限での schroot 動作確認
schroot -c buster-armhf -p bash -u root uname -m exit
リモートアクセスの設定
アクセス用ユーザの作成
SSH リモートアクセス用のユーザアカウントを作成する.
- ユーザ名: ai
- UID: 1234
- ホームディレクトリ: /home/ai
※ 仮想環境用ディレクトリとは別途管理
sudo adduser --uid 1234 --home /home/ai ai

* 再設定が必要な場合は「sudo deluser ai」でアカウントを削除後,再度作成する.

隔離環境内のユーザ設定
隔離環境(chroot)内での 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/sudoers に「Defaults visiblepw」を追記.

適切な権限を設定
sudo chmod 444 /home/buster-armhf/etc/sudoers sudo chmod 444 /home/buster-armhf/etc/sudoers.d/*

ディレクトリ権限の設定
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=/home/buster-armhf」は実際の環境パスに合わせて変更
Match User ai X11Forwarding yes AllowTcpForwarding yes ChrootDirectory /home/buster-armhf

sshd の再起動
sudo service sshd reload

SSH ログインのテスト
ssh ai@localhost
* ログインできない場合は,/etc/ssh/sshd_config の設定および「ディレクトリ権限の設定」を確認する
