このブログ、RaspberryPi
のネタを書くときに少なくとも2回ぐらいは再インストールしていることが多いです。そんな中、少し前にネットでZennをみていたらソラコムのMAXさんの以下のような記事を見つけました。
自分もRaspberryPi
をよくインストールしては削除するといったことをやっていますが、設定に関しては結構短縮できるように努力はしていましたが、そこまでの省力化はできておらず、手作業がかなり残っていました。そんな中、先程の情報からraspi-config
コマンドに-nonint
オプションを使用することでメニュー操作をすることなく設定できることを知りました。
通常は以下のようなことを毎回やっていました。
- SDカードメモリへ
RaspberryPi OS
のイメージを書き込み - SDカードの/bootへ``ssh```という名前の空ファイルをコピー
- SDカードの/bootへ無線LANの設定ファイル
wpa_supplicant.conf
をコピー - SDカードを挿してRaspberryPiを起動
raspi-config
での設定(ここで再起動される)- apt関連のパッケージの設定
ここで一番面倒だったのは、ユーザ操作が必要なraspi-configでの設定
でした。この部分がかなり省力化できるのであれば、apt
でのパッケージ設定に関してもスクリプト化してしようかなと思ったわけです。
設定をスクリプト化してみた
上記の手順の5と6の処理部分をスクリプトにしています。以下のファイルを作成して、SDカードの/bootの領域にコピーすればOKです。
RaspberryPiSetup.sh
#!/bin/bash sudo raspi-config nonint do_change_locale ja_JP.UTF-8 sudo raspi-config nonint do_change_timezone Asia/Tokyo sudo raspi-config nonint do_wifi_country JP sudo raspi-config nonint do_vnc 0 sudo apt update && \ sudo apt install -y xrdp vim && \ sudo apt -y upgrade && \ sudo systemctl reboot
スクリプトの実行方法
SDカードからRaspberryPi
を起動後に、以下のように実行すれば自動的に設定を行い再起動を行ってくれます。
設定スクリプトの起動方法
$ sudo bash /boot/RaspberryPiSetup.sh
実行時の注意点
このスクリプトを実行するとlocale設定の部分でperlのWARNINGが発生しています。
ただ、再起動すると特に問題はなくなりますので、そのままにしていても問題はないようです。(スクリプトの処理が正常終了すると再起動がかかります)
raspi-config
から設定できる項目
raspi-configの設定できるものとしては以下のようなものがあります。大まかにget系とdo系の2種類があります。get系は現在の情報を取得し、do系は設定の変更を行います。設定項目の有効化は0、無効化は1になるのが注意点です。
参考
設定値一覧
# 1|0 -> 1=false/off 0=true/on raspi-config nonint get_can_expand raspi-config nonint do_expand_rootfs raspi-config nonint get_hostname raspi-config nonint do_hostname "yourhostname" raspi-config nonint get_boot_cli raspi-config nonint get_autologin raspi-config nonint do_boot_behaviour B1 raspi-config nonint do_boot_behaviour B2 raspi-config nonint do_boot_behaviour B3 raspi-config nonint do_boot_behaviour B4 raspi-config nonint get_boot_wait raspi-config nonint do_boot_wait 1|0 raspi-config nonint get_boot_splash raspi-config nonint do_boot_splash 1|0 raspi-config nonint get_overscan raspi-config nonint do_overscan 1|0 raspi-config nonint get_pixdub raspi-config nonint do_pixdub 1|0 raspi-config nonint get_camera raspi-config nonint do_camera 1|0 raspi-config nonint get_ssh raspi-config nonint do_ssh 1|0 raspi-config nonint get_vnc raspi-config nonint do_vnc 1|0 raspi-config nonint get_spi raspi-config nonint do_spi 1|0 raspi-config nonint get_i2c raspi-config nonint do_i2c 1|0 raspi-config nonint get_serial raspi-config nonint get_serial_hw raspi-config nonint do_serial 1|0 raspi-config nonint get_onewire raspi-config nonint do_onewire 1|0 raspi-config nonint get_rgpio raspi-config nonint do_rgpio 1|0 raspi-config nonint get_blanking raspi-config nonint do_blanking 1|0 raspi-config nonint get_pi_type raspi-config nonint is_pi raspi-config nonint is_pifour raspi-config nonint is_fkms raspi-config nonint get_config_var arm_freq /boot/config.txt raspi-config nonint do_overclock None|Modest|Medium|High|Turbo raspi-config nonint get_config_var gpu_mem /boot/config.txt raspi-config nonint get_config_var gpu_mem_256 /boot/config.txt raspi-config nonint get_config_var gpu_mem_512 /boot/config.txt raspi-config nonint get_config_var gpu_mem_1024 /boot/config.txt raspi-config nonint do_memory_split 16|32|64|128|256 raspi-config nonint get_config_var hdmi_group /boot/config.txt raspi-config nonint get_config_var hdmi_mode /boot/config.txt raspi-config nonint get_wifi_country # find wifi countries here /usr/share/zoneinfo/iso3166.tab raspi-config nonint do_wifi_country "yourcountry" raspi-config nonint do_pi4video V1 raspi-config nonint do_pi4video V2 raspi-config nonint do_pi4video V3 raspi-config nonint get_pi4video raspi-config nonint get_overlay_now raspi-config nonint get_overlay_conf raspi-config nonint get_bootro_conf raspi-config nonint enable_overlayfs raspi-config nonint disable_overlayfs raspi-config nonint enable_bootro raspi-config nonint disable_bootro raspi-config nonint is_uname_current raspi-config nonint list_wlan_interfaces raspi-config nonint is_installed realvnc-vnc-server raspi-config nonint is_installed xscreensaver vcgencmd get_mem gpu | cut -d = -f 2 | cut -d M -f 1 echo \"$SUDO_USER:%s\" | chpasswd
おわりに
これでRaspberryPi
における手作業をかなり減らすことに成功しました。今後はこれを改良しながら設定を行っていきたいと思います。
情報を公開してくれたMAX さんありがとうございます。