Ubuntu 上で,ARM 版 Rasbian (buster) の隔離された開発環境を作成する方法(qemu-debootstrap 使用)

ユースケース: Ubuntu 18.04 上に,迅速に,ARM 版 Rasbian (buster) の隔離された開発環境を構築する方法を説明します.

目次

  1. 前準備
  2. 隔離された開発環境の構築
  3. schroot の設定
  4. リモートログイン環境の構築

サイト内の関連ページ

前準備

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. 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
    
  3. 構築完了の確認
  4. アーキテクチャの確認:ARM 版 Rasbian (buster) 環境で「uname -m」を実行
    sudo chroot /home/raspbian
    uname -m
    exit
    
  5. 構築した環境(chroot 環境)の動作確認.

    ここでは,以下の操作を実施します:nano エディタのインストール,C プログラムの作成,ビルド,実行.

    1. 管理者権限で chroot 環境に入り,「uname -m」でアーキテクチャを確認
      sudo chroot /home/raspbian
      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
      

schroot の設定

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

  1. /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
    
  2. schroot の動作確認
    schroot -c raspbian -p bash
    uname -m
    exit
    
  3. 管理者権限での動作確認
    schroot -c raspbian -p bash -u root
    uname -m
    exit
    

リモートログイン環境の構築

新規ユーザの作成

SSHリモートログイン用のユーザを作成します.

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

* 再設定する場合は「sudo deluser ai」でアカウントを削除後,再度実行してください.

chroot 環境内のユーザ設定

chroot 環境内での sudo 実行権限を持つユーザアカウントを作成します.

* ホスト環境のパスワードと同一である必要はありませんが,ユーザ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 リモートログイン用の権限設定: 所有者を 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」は実際の構築ディレクトリに合わせて設定

Match User ai
        X11Forwarding yes
        AllowTcpForwarding yes
        ChrootDirectory /home/raspbian

sshd の再起動

sudo service sshd reload

SSH ログインのテスト

ssh ai@localhost

* ログインできない場合は,/etc/ssh/sshd_config の設定および「ディレクトリ権限の設定」を確認してください