FAT32 ブートパーティションに配置されたスクリプトのみを含むソリューションを好むユーザーのために、以下にその方法を示します。[ 編集:ファイルはプロジェクトpi-boot-scriptで利用できるようになりました。]
他の回答で述べたように、Linuxカーネルの起動に使用されるコマンドライン引数が含まれます。これらの引数は/boot/cmdline.txtにあります。
Raspbian Buster(v10.1)2019-09-26でこれをテストしました。新しくフラッシュされたSDカードまたはダウンロードされた.imgディスクイメージで動作し、任意の数のSDカードにフラッシュできます。
1.カーネル引数を編集します
テキストファイル/boot/cmdline.txtを開き、init=
そこからすべての部分を削除して、これを行末に追加します。
init=/bin/bash -c "mount -t proc proc /proc; mount -t sysfs sys /sys; mount /boot; source /boot/unattended"
この行の最後の単語は、/ sbin / initの代わりに、カーネルによって最初のプロセス(PID = 1)として実行されるスクリプトの名前です。カーネル引数のヘルプページには、唯一の引数なしで言う.
スクリプトを呼び出すことはできませんので、初期化実行可能ファイルに渡されますunattended.shそのようなものか。
2.スクリプトをブートパーティションに配置します
次を/ unattended(コマンドラインで入力した名前)としてブートパーティションに保存します。
# 1. MAKING THE SYSTEM WORK. DO NOT REMOVE
mount -t tmpfs tmp /run
mkdir -p /run/systemd
mount / -o remount,rw
sed -i 's| init=.*||' /boot/cmdline.txt
# 2. THE USEFUL PART OF THE SCRIPT
# Example:
[[ -d /boot/payload/home/pi ]] && sudo -u pi cp --preserve=timestamps -r\
/boot/payload/home/pi /home/ && rm -rf /boot/payload/home/pi # A
[[ -d /boot/payload ]] && cp --preserve=timestamps -r /boot/payload/* /\
&& rm -rf /boot/payload # B
ln -s /lib/systemd/system/one-time-script.service\
/etc/systemd/system/multi-user.target.wants/ # C
# 3. CLEANING UP AND REBOOTING
sync
umount /boot
mount / -o remount,ro
sync
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
sleep 5
このスクリプトは、いくつかの必要な準備(第1章)を実行してから、実行したいこと(2)を実行してから、クリーンアップと再起動(3)を実行します。2の下にあるものを、実行したいコマンドに置き換えます。
一部の構成タスクでは、ネットワークやその他のサービスを起動するために通常の起動が必要になる可能性があるため、このバージョンの例(下記で説明)は、Piが再起動したときに実行する適切なスクリプトのみを準備します。
3.スクリプトが必要とする他のファイルをブートパーティションに置きます
...明らかに。
例
私のスクリプトと一緒に、私はLinuxパーティションに移動したいファイルを保持するフォルダーペイロード/をブートパーティションに置きました。上記の無人スクリプトでは、
- 行Aはファイルをpi-userのディレクトリに移動します。例えば、payload / home / pi / .bashrcは/home/pi/.bashrcとしてルートファイルシステムに移動されます。
- 含むLinuxパーティションにラインBの移動ルートが所有するファイル、ペイロードは/ usr / local /ビン/ one-time-script.shなり/usr/local/bin/one-time-script.sh、およびのための同様のペイロード/ lib / systemd / system / one-time-script.service ;
- 次に、行Cはその最後のファイルへのシンボリックリンクを作成するため、次の起動時に構成スクリプトone-time-script.shが実行されます。
このスクリプトは、私が好きなさまざまなカスタマイズを行います。別のFAT32パーティションを作成してフォーマットし、/ etc / fstabに追加して、piユーザーが(アプリケーションログなどに)書き込むことができるようにします。ext4パーティションとファイルシステムをSDカードの残りの部分にサイズ変更します。ロケール、タイムゾーン、ホスト名(CPUシリアル番号に基づく)、WiFi国を変更します。WiFiネットワークとパスフレーズを設定します。SSHをオンにします。SSHセッションの言語設定の問題を修正しました。自動ログインなしでコンソールへの起動を設定します。システムに関するデータをブートパーティション上のファイルに書き込みます。そしてもちろん、そのシンボリックリンクを削除して、起動時に再度実行されないようにします。
ほとんどのユーザーはこれが不要であると感じ、PiBakery、pi-init2、またはカスタムext4イメージを使用することを好みます。これらは優れたソリューションです。私はそれを完全に理解でき、他のソフトウェアを実行する必要がないので、私はこれを好みます。そして、それも機能します。スクリプトを入れた.imgファイルを使用すると、SDカードをフラッシュする+ Piに入れる+実行するために実行するのに6分かかります。
ソース私は、Linuxパーティションのサイズを変更するためにデフォルトで実行されるinit_resize.shスクリプトに、init=
カーネル引数としてのスクリプトのアイデアと、mount
それを機能させるために必要なコマンドを見つけました。