4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Raspberry Pi Imagerの詳細な設定で何を行っているのか

Last updated at Posted at 2023-10-14

1. はじめに

 Raspberry Pi Imager v1.7.4やv1.7.5を使っているとき、どういうわけか書き込みエラーで終了することがあった。正確にはベリファイエラーのようである。
 そんなことがあり、Raspberry Pi Imagerについて調べているとバグが多いとか、信用ならないというような否定的な記述もまぁまぁあった。鵜呑みにはできないが、体験からすると懸念材料である。ということで、別の方法でマイクロSDカードに書き込めばよいのではないかと結論に至った。但し、他の書き込みツールには、Raspberry Pi Imagerが持っているユーザー設定やWi-Fi設定などがない。そこで、Raspberry Pi Imagerの歯車マークの「詳細な設定」で、何が行われているのか調べてみた。

2. 方法

 何も設定しない場合と設定を追加した場合で比較する。とはいってもブート領域の以下のファイルくらいしか変化しそうなファイルはない。

  • cmdline.txt
  • config.txt
  • firstrun.sh

3. 変化点

firstrun.shにあった。

3.1 SSHを有効化する

「FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`」の直後に入る
尚、このif文ブロックのすぐ下はユーザー追加用if文ブロックになる。

if [ -f /usr/lib/raspberrypi-sys-mods/imager_custom ]; then
   /usr/lib/raspberrypi-sys-mods/imager_custom enable_ssh
else
   systemctl enable ssh
fi

3.2. ユーザー名とパスワードを追加する

設定に使用したユーザー名は当然アルファベットだが、元のユーザー名を隠すためと分かりやすいよう「ユーザー名」としてある。パスワードは12345678を使った。
SSHを有効化していない場合、「FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`」の直後にユーザー設定用のブロックが追加される。
SSHを有効化している場合、前項のSSHの有効化で書いたif文ブロックが追加される。

#!/bin/bash

set +e

FIRSTUSER=`getent passwd 1000 | cut -d: -f1`
FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`
#
# SSHを有効化している場合、ここにはSSHの有効化のためのif文が入る
#
if [ -f /usr/lib/userconf-pi/userconf ]; then
   /usr/lib/userconf-pi/userconf 'ユーザー名' '$5$RcFPlY3GLZ$U9Xg1c/Z5O1daj3DxZBEkDZ5jf2D2ukqSfOS/KFExX9'
else
   echo "$FIRSTUSER:"'$5$RcFPlY3GLZ$U9Xg1c/Z5O1daj3DxZBEkDZ5jf2D2ukqSfOS/KFExX9' | chpasswd -e
   if [ "$FIRSTUSER" != "ユーザー名" ]; then
      usermod -l "ユーザー名" "$FIRSTUSER"
      usermod -m -d "/home/ユーザー名" "ユーザー名"
      groupmod -n "ユーザー名" "$FIRSTUSER"
      if grep -q "^autologin-user=" /etc/lightdm/lightdm.conf ; then
         sed /etc/lightdm/lightdm.conf -i -e "s/^autologin-user=.*/autologin-user=ユーザー名/"
      fi
      if [ -f /etc/systemd/system/getty@tty1.service.d/autologin.conf ]; then
         sed /etc/systemd/system/getty@tty1.service.d/autologin.conf -i -e "s/$FIRSTUSER/ユーザー名/"
      fi
      if [ -f /etc/sudoers.d/010_pi-nopasswd ]; then
         sed -i "s/^$FIRSTUSER /ユーザー名 /" /etc/sudoers.d/010_pi-nopasswd
      fi
   fi
fi

「\$5\$RcFPlY3GLZ\$U9Xg1c/Z5O1daj3DxZBEkDZ5jf2D2ukqSfOS/KFExX9」が暗号化されたパスワード。2か所ある。
\$5の後の\$から次の\$までがsaltになっている。演算方法は以下のようになる。

openssl passwd -5 -salt=RcFPlY3GLZ 12345678

「-5」オプションはSHA256アルゴリズムを示している。
saltは同じ出力が続かないように使う、自分の閉じた環境なら同じでもいいかもしれない。

3.3. Wi-Fiを設定する

ユーザー設定の直後にWi-Fi設定が追加されていた。
尚、SSIDを「SSID1234」とし、パスワードを「abcdef12345678」とした。

if [ -f /usr/lib/raspberrypi-sys-mods/imager_custom ]; then
   /usr/lib/raspberrypi-sys-mods/imager_custom set_wlan 'SSID1234' '293d937a5dec37d77f5504fe84d4f9072b09151b526d32cb5c4391da59aa1fe6' 'JP'
else
cat >/etc/wpa_supplicant/wpa_supplicant.conf <<'WPAEOF'
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1

update_config=1
network={
	ssid="SSID1234"
	psk=293d937a5dec37d77f5504fe84d4f9072b09151b526d32cb5c4391da59aa1fe6
}

WPAEOF
   chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
   rfkill unblock wifi
   for filename in /var/lib/systemd/rfkill/*:wlan ; do
       echo 0 > $filename
   done
fi

パスワードは暗号化されたものを使う。pskの算出方法は以下

$ wpa_passphrase "SSID1234" "abcdef12345678"

4. 残り

変更することなさそうなので、とりあえず記載だけしておく。

if [ -f /usr/lib/raspberrypi-sys-mods/imager_custom ]; then#
   /usr/lib/raspberrypi-sys-mods/imager_custom set_keymap 'jp'
   /usr/lib/raspberrypi-sys-mods/imager_custom set_timezone 'Asia/Tokyo'
else
   rm -f /etc/localtime
   echo "Asia/Tokyo" >/etc/timezone
   dpkg-reconfigure -f noninteractive tzdata
cat >/etc/default/keyboard <<'KBEOF'
XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""

KBEOF
   dpkg-reconfigure -f noninteractive keyboard-configuration
fi
rm -f /boot/firstrun.sh
sed -i 's| systemd.run.*||g' /boot/cmdline.txt
exit 0

いまのところ以上。余裕ができたらそのうち更新予定。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?