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

ユースケース: Ubuntu 18.04 上に,効率的かつ安全な armhf 版 Debian 10 (buster) の隔離開発環境を構築する.

目次

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

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

サイト内の関連ページ

前準備

Ubuntu のシステム更新

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

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. まず,管理者権限で隔離環境(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 の設定

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

  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. root 権限での 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)内での 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 の設定および「ディレクトリ権限の設定」を確認する