Ubuntu 上で,ARM 版 Rasbian (buster) の隔離された開発環境を作る(qemu-debootstrap を使用)
ユースケース: Ubuntu 18.04 上に,すばやく,ARM 版 Rasbian (buster) の隔離された開発環境を作りたい.
【目次】
【サイト内の関連ページ】
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行.
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
- ARM 版 Rasbian (buster) 環境の作成
* armhf 版 Debian の環境を作成したいときは, 別ページの説明を見てください
ここでの設定
- アーキテクチャ: armel
- バージョン: Rasbian Debain 10 ベース(buster)
- 使用するディレクトリ: /home/raspbian
- インストールするバリアント: minbase と buildd
- ダウンロード元: https://archive.raspbian.org/raspbian に設定
終了まで,しばらく待つ
sudo rm -rf /home/raspbian sudo mkdir /home/raspbian sudo qemu-debootstrap --foreign --arch armel --variant buildd --include=ca-certificates,apt,wget,sudo,vim-tiny,debootstrap buster /home/raspbian https://archive.raspbian.org/raspbian
- 終了の確認
- 確認のため,ARM 版 Rasbian (buster) 環境を有効にし,「uname -m」でアーキテクチャを確認
sudo chroot /home/raspbian uname -m exit
- 隔離された環境(chroot 環境)を使ってみる.
ここでは,nano のインストール, C プログラムの編集とビルドと実行を行ってみる.
- まず,管理者の権限で,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -m」で確認
sudo chroot /home/raspbian 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
- まず,管理者の権限で,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -m」で確認
schroot の設定
schroot を設定し,一般ユーザでも chroot が実行できるようにする
- /etc/schroot/chroot.d/raspbian を次のように設定
「directory=/home/raspbian」のところは,実際に作成したディレクトリに書き換えること
「kaneko」のところは,使用させたいユーザのユーザ名に書き換えること(複数のときは,カンマで区切る)
[raspbian] description=Debian GNU/Linux 10 (Buster) type=directory directory=/home/raspbian root-users=kaneko users=kaneko
- schroot の動作確認
schroot -c raspbian -p bash uname -m exit
- schroot の動作確認.今度は管理者権限を得る
schroot -c raspbian -p bash -u root uname -m exit
リモートログインできるようにする
新規ユーザの作成
これは,SSHによるリモートログインの受付のために用いるユーザである.
- ユーザ名: ai
- ユーザID: 1234
- ホームディレクトリ: /home/ai
仮想マシンのために使用するディレクトリとは別物
sudo adduser --uid 1234 --home /home/ai ai
* やり直すときは「sudo deluser ai」を実行して,アカウントを削除してからやり直す.
隔離された環境(chroot 環境)の中にホームディレクトリを作成.隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)の追加
これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときなどのため,隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)を追加する.
* 上で設定したパスワードと同じパスワードにする必要はない.ユーザID,ホームディレクトリ,ユーザ名は同じにすること.
sudo chroot /home/raspbian rm -rf /home/ai deluser ai adduser --uid 1234 --ingroup sudo --home /home/ai ai exit
/home/raspbian/etc/sudoers の設定
これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときのため.(必要がなければ,この操作は省略すること).
/home/raspbian/etc/sudoers に「Defaults visiblepw」を書き加える.
権限を変えておく
sudo chmod 444 /home/raspbian/etc/sudoers sudo chmod 444 /home/raspbian/etc/sudoers.d/*
ディレクトリの権限の設定
ssh を使ってのリモートログインを受け付けたい. ssh の定めにより,の所有者を root に,権限を「755」に設定する.
sudo chown root:root /home sudo chmod 755 /home sudo chown root:root /home/raspbian sudo chmod 755 /home/raspbian sudo chown root:root /home/raspbian/home sudo chmod 755 /home/raspbian/home sudo chown root:root /home/raspbian/home/ai sudo chmod 755 /home/raspbian/home/ai
/etc/ssh/sshd_config の設定
SSH によるリモートログイン時に chroot が実行されるように,/etc/ssh/sshd_config に次の記述を追加
「ChrootDirectory=/home/raspbian」の「/home/raspbian」のところは,実際に作成したディレクトリに書き換えること
Match User ai X11Forwarding yes AllowTcpForwarding yes ChrootDirectory /home/raspbian
/etc/ssh/sshd_config を変更したので sshd を再起動
sudo service sshd reload
試しに SSH を用いてログインしてみる
ssh ai@localhost
* エラーメッセージが出てログインできない場合には,/etc/ssh/sshd_config の設定,そして,「ディレクトリの権限の設定」を確認する