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

ユースケース: Ubuntu 18.04 上に,すばやく,armhf 版 Degian 10 (buster) の隔離された開発環境を作りたい.

目次

  1. 前準備
  2. 隔離された開発環境を作る
  3. schroot の設定
  4. リモートログインできるようにする

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

サイト内の関連ページ

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行.

Ubuntu のインストールは別ページ »で説明

sudo apt -y update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now

隔離された開発環境を作る

  1. qemu-user-static, debootstrap, schroot のインストール
    sudo apt -y update
    sudo apt -y install qemu-user-static debootstrap schroot
    
  2. 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
    
  3. 終了の確認
  4. 確認のため,armhf 版 Debian 10 (buster) 環境を有効にし,「uname -m」でアーキテクチャを確認
    sudo chroot /home/buster-armhf
    uname -m
    exit
    
  5. 隔離された環境(chroot 環境)を使ってみる.

    ここでは,nano のインストール, C プログラムの編集とビルドと実行を行ってみる.

    1. まず,管理者の権限で,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -m」で確認
      sudo chroot /home/buster-armhf
      uname -m
      
    2. nanoエディタをインストールしてみる
      apt update
      apt upgrade
      apt install 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;
      }
      
    4. コンパイルして実行
      cd /tmp
      gcc -o a.out hello.c
      ./a.out
      
    5. exit で終了
      exit
      

schroot の設定

schroot を設定し,一般ユーザでも chroot が実行できるようにする

  1. /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
    
  2. schroot の動作確認
    schroot -c buster-armhf -p bash
    uname -m
    exit
    
  3. schroot の動作確認.今度は管理者権限を得る
    schroot -c buster-armhf -p bash -u root
    uname -m
    exit
    

リモートログインできるようにする

新規ユーザの作成

これは,SSHによるリモートログインの受付のために用いるユーザである.

sudo adduser --uid 1234 --home /home/ai ai

* やり直すときは「sudo deluser ai」を実行して,アカウントを削除してからやり直す.

隔離された環境(chroot 環境)の中にホームディレクトリを作成.隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)の追加

これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときなどのため,隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)を追加する.

* 上で設定したパスワードと同じパスワードにする必要はない.ユーザID,ホームディレクトリ,ユーザ名は同じにすること.

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 の設定

これは,隔離された環境(chroot 環境)の中で,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」の「/home/buster-armhf」のところは,実際に作成したディレクトリに書き換えること

Match User ai
        X11Forwarding yes
        AllowTcpForwarding yes
        ChrootDirectory /home/buster-armhf

/etc/ssh/sshd_config を変更したので sshd を再起動

sudo service sshd reload

試しに SSH を用いてログインしてみる

ssh ai@localhost

* エラーメッセージが出てログインできない場合には,/etc/ssh/sshd_config の設定,そして,「ディレクトリの権限の設定」を確認する