概要
-
Raspberry Pi OSの2020年12月2日(
Release date: December 2nd 2020
)から、64bitベータ版がオモテから消えましたよね? -
Raspberry Pi OSイメージ作成スクリプトのpi-genのarm64というブランチで、raspiosの64bitを作成しよう。
-
現在、Troubleshootingのところで、下のようにあるので、x86_64ではうまく動かないっぽい?
Please note there is currently an issue when compiling with a 64 Bit O
-
以前のメモ: [メモ] Raspbian: 最新イメージ作成
-
結果
- ラズパイ4BとSSDで、Liteと通常Desktopのイメージが30分程度(APTキャッシュサーバ使用で、初回ではないので、外部からのダウンロード時間は含まれてない、と思う)
環境
- Raspberry Pi 4
- USB-SATA & SSD
- Docker使用
手順(概要)
- ビルド環境準備
- OS (Ubuntu arm64 か、Raspberry Pi OS 64bitベータ版)
- dockerインストール
- apt-cacher-ng : APTのキャッシュサーバ
-
RPi-Distro/pi-gen
-
config
ファイル作成 - スクリプトをちょいと変更
- スクリプト実行
-
手順(詳細)
注意点
- build-docker.sh でビルド時、
deploy
フォルダが存在してると、生成物がうまくコピーされないので、削除しておく
ビルド環境準備
-
ベースOSを焼く
- imgファイルを入手
-
Raspberry Pi Imagerで、
- CHOOSE OS => Use custom にて、イメージファイルを指定。(zipのままいける。)
-
dockerインストール
例# Docker # https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker ${USER} # docker-compose sudo apt update sudo apt install -y python3-pip libffi-dev sudo pip3 install docker-compose
-
apt-cacher-ng : APTのキャッシュサーバ
pi-gen: イメージ作成
-
キホン (実際には、
echo "IMG_NAME='raspios64'" > config
の代わりに、config
をうまく編集・設定してから、やる)例# レポジトリをクローン、ついでに、arm64ブランチをCheckout git clone https://github.com/RPi-Distro/pi-gen.git -b arm64 cd pi-gen git reset --hard # リセット git clean -fdx # クリーン # config 作成 (必要最小限) echo "IMG_NAME='raspios64'" > config # スクリプト変更 i386のイメージを持ってきてしまうのをなおす sed -i -e 's@i386/@@g' build-docker.sh # ビルドスクリプト実行 time bash ./build-docker.sh 2>&1 | tee ../build.log # deployフォルダの中に、zipファイルがある、はず
-
config
を設定する
config
ファイルを編集することで、初期設定ができる。(時間帯、言語、キーボードとか、ラズパイの公式イメージは、英国がデフォルト。)-
IMG_NAME
(必須): 生成物のファイル名に使用される -
APT_PROXY
: aptキャッシュサーバ指定 -
DEPLOY_ZIP
: 1:ZIPで出力(既定値) / 0:imgで出力 -
LOCALE_DEFAULT
: 言語(既定値:en_GB.UTF-8
) -
KEYBOARD_KEYMAP
: キーマップ(既定値:gb
) -
KEYBOARD_LAYOUT
: キーレイアウト(既定値:English (UK)
) -
TIMEZONE_DEFAULT
: タイムゾーン (既定値:Europe/London
) -
FIRST_USER_NAME
: ユーザ(既定値:pi
) -
FIRST_USER_PASS
: ユーザパスワード(既定値:raspberry
) -
WPA_ESSID
WPA_PASSWORD
WPA_COUNTRY
: Wifi設定 -
ENABLE_SSH
: SSH 1:有効 / 0:無効(既定値)
config例IMG_NAME=orenoraspios64 APT_PROXY=http://172.17.0.1:3142 DEPLOY_ZIP=0 LOCALE_DEFAULT=en_US.UTF-8 KEYBOARD_KEYMAP=us KEYBOARD_LAYOUT="English (US)" TIMEZONE_DEFAULT="America/Los_Angeles" ENABLE_SSH=1 FIRST_USER_NAME=`ore` FIRST_USER_PASS=`orenopasuwa-do` WPA_ESSID=wifi-ssid WPA_PASSWORD=wifi-no-password WPA_COUNTRY=US ENABLE_SSH=1
-
Liteイメージだけ作りたい。
-
build-docker.sh
を実行する前に、↓をする
touch ./stage3/SKIP ./stage4/SKIP ./stage5/SKIP
rm -rfv ./stage3/EXPORT* ./stage4/EXPORT* ./stage5/EXPORT*
- 説明
- 下の、機械翻訳したところみると、
stage
X(X=0,1,2,3,4,5)フォルダごとにすすむ。 - stage2で、Lite、stage4で、通常デスクトップ版、stage5がFullといってるイメージ
- stage*/のフォルダ内に、
SKIP
というファイルがあると、処理されずに次のステージにいく。 -
EXPORT_IMAGE
という設定ファイルがあると、そこでの結果をimgに出力する
- 下の、機械翻訳したところみると、
パッケージを追加したい
- うまい段階の
stageX/00-install-packages/
フォルダの中の、00-packages
または、00-packages-NR
に、記述する。 - ``-NR
のほうは、
--no-install-recommends`オプション付きとのこと。 - 例
-
stage4/00-install-packages/00-package
に、fcitx-mozc
とか、追加してみてはどうだろうか?
-
その他
- deployフォルダの削除は忘れずに
メモ)2020-12-16 (一部)日本語訳 ~ www.DeepL.com/Translator(無料版)で翻訳
-
image
が画像
と訳されてたところを、イメージ
に変更
How the build process works (ビルドプロセスの仕組み)
以下のような手順でイメージを構築していきます。
-
すべてのステージディレクトリを英数字順にループします。
-
このステージディレクトリに
"SKIP"
というファイルが含まれている場合は、次のディレクトリに移動します。 -
prerun.sh
スクリプトの実行。これは通常、ステージ間でビルドディレクトリをコピーするために使用されます。 -
各ステージのディレクトリでは、各サブディレクトリをループして、それに含まれるインストールスクリプトをそれぞれ実行してください。これらのスクリプトには、先頭に 2 桁の数字を入れて名前を付ける必要があります。いくつかの異なるファイルやディレクトリがあり、ビルドプロセスの異なる部分を制御するために使用できます。
-
00-run.sh
- unix シェルスクリプト。実行可能にする必要があります。 -
00-run-chroot.sh
- イメージのビルドディレクトリの chroot で実行される unix シェルスクリプト。実行するためには実行可能にする必要があります。 -
00-debconf
- このファイルの内容は、ロケールなどを設定するために debconf-set-selections に渡されます。 -
00-packages
- インストールするパッケージのリスト。1 行に複数個、スペースで区切って書くことができます。 -
00-packages-NR
- 00-packages と同じですが、apt-get の --no-install-recommends -y パラメータを使ってインストールされます。 -
00-patches
- quilt を使って適用されるパッチファイルを含むディレクトリ。もし 'EDIT' という名前のファイルがディレクトリ内にある場合、ビルドプロセスは bash セッションで中断され、パッチを作成/修正できるようになります
-
-
ステージディレクトリに
"EXPORT_NOOBS"
または"EXPORT_IMAGE"
というファイルがある場合、このステージをイメージのリストに追加して生成します。 -
指定したステージのイメージを生成する
詳細については、build.sh
を調べてみることをお勧めします。
Stage Anatomy (ステージの詳細)
Raspbian Stage Overview(概要)
Raspbian のビルドは論理的にわかりやすく、モジュール化するためにいくつかの段階に分けられています。これは初期の複雑さの原因となりますが、メンテナンスを簡素化し、より簡単なカスタマイズを可能にしています。
-
Stage 0 - bootstrap
このステージの主な目的は、使用可能なファイルシステムを作成することです。これは主にdebootstrap
を使用することで達成されます。これは Debian システム上でbase.tgz
として使用するのに適した最小限のファイルシステムを作成します。この段階では、apt の設定も行い、debootstrap
が見逃したraspberrypi-bootloader
をインストールします。ミニマルコアはインストールされていますが、設定はされていません。 -
Stage 1 - truly minimal system (真のミニマムシステム)
このステージでは、/etc/fstab のようなシステムファイルをインストールしてシステムを起動可能にし、ブートローダを設定し、ネットワークを操作可能にし、raspi-config のようなパッケージをインストールします。この段階では、システムはローカルコンソールに起動し、そこからシステムの設定やインストールに必要な基本的なタスクを実行する手段を持っています。これは、システムができる限り最低限のものであり、伝統的な意味では、おそらくまだ実際には使えないでしょう。それでも、最低限のことをしたいのであれば、これは最低限のことであり、残りの部分はシステム管理者として自分で合理的に行うことができます。 -
Stage 2 - lite system
このステージでは Raspbian-Lite イメージを生成します。最適化されたメモリ機能のインストール、timezone と charmap のデフォルト設定、fake-hwclock と ntp のインストール、無線 LAN と bluetooth のサポート、dphys-swapfile、その他ハードウェア管理のための基本的な機能のインストールを行います。また、必要なグループを作成し、πユーザに sudo と標準コンソールのハードウェア権限グループへのアクセス権を与えます。
基本的なPythonやLuaパッケージ、build-essential
パッケージなど、ミニマムなシステムでの開発にはあまり意味のないツールがいくつかあります。pi-gen と一緒である必要はありませんが、これらはより重要なパッケージと一緒にまとめられています。これらは Raspbian のターゲット層にとっては理解できるものですが、もし本当にミニマルなものと Raspbian-Lite の中間のものを探していたならば、ここからトリミングを始めることになります。 -
Stage 3 - desktop system
ここでは、X11とLXDE、Webブラウザ、開発用のgit、RaspbianのカスタムUIの強化など、完全なデスクトップシステムを手に入れることができます。これは基本的なデスクトップシステムで、いくつかの開発ツールがインストールされています。 -
Stage 4 - Normal Raspbian image
4GB のカードに収まるように設計されています。これはシステムドキュメントのように、Raspbian を新しいユーザに優しいものにするためのほとんどのものをインストールする段階です。 -
Stage 5 - The Raspbian Full image
Raspbianのフルイメージ。より多くの開発ツール、メールクライアント、Scratchのような学習ツール、sonic-pi
のような専門的なパッケージ、オフィスの生産性など。
Stage specification (仕様)
指定したステージまでビルドしたい場合(ライトシステムの場合はステージ2までビルドするなど)、インクルードしないようにしたい./stage
ディレクトリにSKIP
という名前の空のファイルをそれぞれ配置します。
そして、SKIP_IMAGES という空のファイルを ./stage4 と ./stage5 (ステージ2までビルドする場合)、または ./stage2 (ミニマムシステムをビルドする場合) に追加します。
# Example for building a lite system ライトシステムの構築例
echo "IMG_NAME='Raspbian'" > config
touch ./stage3/SKIP ./stage4/SKIP ./stage5/SKIP
touch ./stage4/SKIP_IMAGES ./stage5/SKIP_IMAGES
sudo ./build.sh # or ./build-docker.sh
lite システムの上に (例えば) 更なる設定を構築したい場合は、./stage3
と ./stage4
の内容を削除して、同じフォーマットで独自の内容に置き換えることもできます
Skipping stages to speed up development (ステージをスキップして開発を加速させる)
特定のステージでの作業であれば、推奨される開発プロセスは以下のようになります。
-
EXPORT_*
ファイルを含むディレクトリにSKIP_IMAGES
というファイルを追加します(現在はstage2、stage4、stage5) - ビルドしたくないステージに
SKIP
ファイルを追加します。例えば、ライトイメージをベースにしている場合、ステージ3、4、5に追加します。 - build.sh を実行してすべてのステージをビルドします。
- ビルドに成功した初期のステージに
SKIP
ファイルを追加します。 - ラストステージの修正
-
sudo CLEAN=1 ./build.sh
を使って、最後のステージだけを再構築します。 - イメージに満足したら、
SKIP_IMAGES
ファイルを削除して、テスト用にイメージをエクスポートします。