Ubuntu 上で、armhf 版 Debian 10 (buster) の隔離された開発環境を作る(qemu-debootstrap を使用)
【概要】Ubuntu 上に、qemu-debootstrap を使用して armhf 版 Debian 10 (buster) の隔離開発環境を構築する手順を解説する。schroot の設定と SSH リモートアクセスの設定も行う。
【目次】
参考ページ: http://logan.tw/posts/2017/01/21/introduction-to-qemu-debootstrap/
【サイト内の関連ページ】
前準備
Ubuntu のシステム更新
Ubuntu のシステム更新を実行するには、以下のコマンドを使用する。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に確実に反映させるために再起動
sudo shutdown -r now
隔離開発環境の構築
-
qemu-user-static、debootstrap、schroot のインストール
# パッケージリストの情報を更新 sudo apt update sudo apt -y install qemu-user-static debootstrap schroot
-
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
-
インストール完了の確認
-
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
-
schroot の設定
schroot を設定することで、一般ユーザでも chroot を実行できるようになる。
-
/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 の基本動作確認
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 でアカウントを削除した後、再度作成する。
隔離環境内のユーザ設定
隔離環境内で 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 が動作するようになる。sudo を使用しない場合は、この設定は省略できる。
権限を設定する。
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 には隔離環境のパスを指定する。
Match User ai
X11Forwarding yes
AllowTcpForwarding yes
ChrootDirectory /home/buster-armhf
sshd の再起動
設定を反映するため、sshd を再起動する。
sudo service sshd reload
SSH ログインのテスト
設定が正しく行われたことを確認するため、SSH ログインをテストする。
ssh ai@localhost
ログインできない場合は、/etc/ssh/sshd_config の設定および「ディレクトリ権限の設定」を確認する。