䏿¨æ¥ãããã«Raspberry Pi OSã®ã¢ãããã¼ããªãªã¼ã¹ãããã¾ããã
ããä»åããªããªããã¯ãã«ãªå¤æ´ãå ¥ã£ã¦ãããpiã¦ã¼ã¶ã¼ããã³ããã©ã«ããã¹ã¯ã¼ãã廿¢ããã¾ãããããã¯ã¤ã®ãªã¹ãªã©ã§æ±ºã¾ã£ããIoT製åã«ããã©ã«ããã¹ã¯ã¼ããè¨å®ãããªãã¨ããæ³å¾ã«å¯¾ããåãçµã¿ããããä¸çä¸ã®ããã©ã«ããã¹ã¯ã¼ãã§åä½ããç£è¦ã«ã¡ã©ãäºã ã¿ãããªãã¿ã以åããåå¨ãã¦ãããã¨ãèããã¨ãå¿ è¦ãªã¢ãããã¼ãã¨è¨ãããã®ã§ãã
ããã©ã«ããã¹ã¯ã¼ãã®å»æ¢ã ãã§ã¯ãªãpiã¦ã¼ã¶ã¼ãã¨å»æ¢ããã¦ãã¾ã£ããããæ°ãããªãªã¼ã¹ã§ã¯ãååèµ·åæã«ã¦ã¼ã¶ã¼åã»ãã¹ã¯ã¼ãã®è¨å®ãå¿ è¦ã«ãªãã¾ãããã¹ã¯ãããçã®å ´åã¯ãä»ã¾ã§èµ·åãã¦ããã¦ã£ã¶ã¼ããå°ç¨ã®èæ¯ä¸ã§èµ·åãã¦ãã»ããã¢ãããä¿ãããã«ãªã£ã¦ãã¾ããLiteçã®ã»ãããCUIã§è¨å®ãåºãããã«ãªã£ã¦ãã¾ãããªã®ã§ãæåã§ã»ããã¢ããããåã«ã¯ã¡ãã£ã¨æéãå¢ããã ãã§ãã¿ã¾ãããåå¿è ããããã°ãããã©ã«ãã¦ã¼ã¶ã¼ã¨ãã¹ã¯ã¼ãã¯ï¼ãã¨ãªããªããªãå¯è½æ§ãããã®ã§ãã¨ãã«åé¡ã¯ãªãããã§ãã
ãããã¬ã¹ã§ã¶ã¯ã¶ã¯ã»ããã¢ãããããå¢ã¯ã©ãããã°ããã®ãã«ã¤ãã¦ã¯ãããã°ã§ãè¨åãããããã«ãRaspberry Pi Imagerã使ã£ã¦ã«ã¹ã¿ãã¤ãºã»ããã¢ãããããããã¦ã¼ã¶ã¼åã®è¨å®ã«ã¤ãã¦ã¯/boot/userconf(.txt)ã«ã¦ã¼ã¶ã¼æ å ±ãæ¸ãã°OKã®ããã§ãã
ç§å人çã«ã¯ãæè¿ã¯Raspberry Pi Imagerãä½¿ãæ¹åã«åãæ¿ãã£ã¦ããã®ã§ãã«ã¹ã¿ãã¤ãºã»ããã¢ããã§ããããªã¨æã£ã¦ãã¾ãã
ææµRPi OSåæã»ããã¢ããã®ã¢ãããã¼ã
以åã¯ãã¤ã¡ã¼ã¸ãç¼ãããã¨ã«/boot/sshãé
ç½®ããååèµ·åå¾ã«ä»¥ä¸ã®ã¹ã¯ãªããï¼ãã¾ã¨ããfunctionåãããã®ï¼ããªã¢ã¼ãããå©ãã¦ãããç¨åº¦ã®åæè¨å®ããã¦ãã¾ããããã®ãã¨ããã«SSHã§ãã°ã¤ã³ãã¦ãã¹ã¯ã¼ããè¨å®ããããAnsible Playbookã§vimã¨NetworkManagerã®å°å
¥ãããããã¦ãã¾ãããããã¦ã¿ãã¨ã¾ãã¾ãæéã§ããããã®ã¹ã¯ãªããã¯ä½ããã®çç±ã§SSHã§ããªãã£ãã¨ãã¯ç大ã«ã³ã±ã¾ãã
ã
function first_ssh_to_pi(){
export SSH_TO_PI="ssh [email protected]"
# pubkey
expect -c "
spawn ssh-copy-id -i $HOME/.ssh/id_ed25519 [email protected]
expect \"password:\"
send \"raspberry\n\"
expect \"$\"
exit 0
"
# Locale
${=SSH_TO_PI} "sudo raspi-config nonint do_change_locale ja_JP.UTF-8 UTF-8"
# Timezone
${=SSH_TO_PI} 'sudo timedatectl set-timezone Japan'
# Wi-Fi
${=SSH_TO_PI} "sudo raspi-config nonint do_wifi_country JP"
${=SSH_TO_PI}
}Raspberry Pi Imagerãªãæ¸ãè¾¼ãã¨ãã«ä¸éãã«ã¹ã¿ã ã§ã§ããã®ã§ãã©ããã£ã¦ããã®ã/bootãè¦ãã¦ã¿ã¾ããã
/boot/cmdline.txtãè¦ãã¨ã以ä¸ã®ä¸æã追è¨ããã¦ãã¾ãã/boot/firstrun.shãå®è¡ããããã«ãsystemdのカーネルコマンドラインãæ´»ç¨ãã¦ããããã§ãããããªã®ããã®ããã¹ããã
systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target
/boot/firstrun.shã¯Raspberry Pi Imagerã«ãã£ã¦çæããããã¡ã¤ã«ã§ãã«ã¹ã¿ã å 容ãä¸éãè¨è¿°ããã¦ãã¾ããã¦ã¼ã¶ã¼åããã¹ã¯ã¼ããSSHéµãªã©å人çãªå 容ãããããå«ã¾ããã®ã§è²¼ããªãã§ãããã¹ã¯ãªããã®æå¾ã¯èªå£ããããã«ãªã£ã¦ãã¾ããåãã
rm -f /boot/firstrun.sh sed -i 's| systemd.run.*||g' /boot/cmdline.txt exit 0
â¦â¦ä»¥ä¸ãè¸ã¾ãã¦ãImagerã使ããªãã§ã¤ã¡ã¼ã¸ãæ¸ãè¾¼ãã ã¨ãã¯ãä»ã¾ã§ä½¿ã£ã¦ããfirst_ssh_to_piã使ãããImagerãåããfirstrun.shãæåãã¦ãããã¤ãã³ãã¼ï¼cmdlineã®è¿½è¨ãããããã«å¤ããã°è¯ãããã§ãããããªæãã®functionãæ¸ãã¦ã¿ã¾ããã
function pi-firstrun(){
# Macãããªã人ã¯/Volumes/bootã®é¨åã¯é©å½ã«æ¸ãæããã$1ã¨ãã§å¼æ°åãã°ããã¨æã
CMDLINE=/Volumes/boot/cmdline.txt
TEST=`grep firstrun $CMDLINE`
if [ "$TEST" = "" ] ; then
echo -n " systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target" >> $CMDLINE
# é©å½ãªã¨ããã«firstrun.shãé
ç½®ãã¦ããããã
cp $HOME/Scripts/script-for-pi-firstrun/firstrun.sh /Volumes/boot/firstrun.sh
fi
}ããã§ãã¤ã¡ã¼ã¸ãæ¸ãè¾¼ãã ãã¨ã®ä½æ¥ã¯pi-firstrunã®å®è¡ã¨ãèµ·åå¾ã®Ansible Playbookã®å®è¡ã ãã«ãªãã¾ãããæä½æ¥ãããªãæ¸ã£ã¦ããã§ããã
firstrun.shå®è¡æç¹ã§ã¤ã³ã¿ã¼ãããã«ç¹ãã£ã¦ãããªãããããã¯ã¼ã¯ã®æ¥ç¶ã確èªãã¦aptãå®è¡ã§ããããã«ããã°ãAnsible Playbookã®å®è¡ããä¸è¦ã«ã§ããå¯è½æ§ã¯ããããã§ããæªæ¤è¨¼ãªã®ã§ã§ãããã¾ãããã°ã§ããã¾ããã
ææ
piã¦ã¼ã¶ã¼åé¤ã¯ãªããªããã©ã¹ãã£ãã¯ãªå¤æ´ã§ããã䏿¹ã§ããã以å¤ã§ä½¿ãæ £ããã¦ã¼ã¶ã¼åã使ããããã«ãªãï¼ä»¥åãããæéããããã°ä½¿ãã¾ããããæéãªã®ã§èª°ããã£ã¦ãªãã£ãã¨æãï¼ã®ã§ãsshããã¨ãã«ãpi@ãã®æéµãæ¸ã£ãã®ã¯ã¢ãªããªã¨æã£ã¦ãã¾ãã
ã»ããã¢ããæ¸ã¿ã®ç°å¢ã§ããã¦ã¼ã¶ã¼å夿´ãå®è¡ã§ããã³ãã³ããç¨æããã¦ãããããªã®ã§ã夿´ãããæ¹ã¯å ¬å¼ããã°ã®æé ãåèã«å®è¡ããã¨è¯ãã§ãããã
追è¨: ã¡ãªã¿ã«
ã¦ã¼ã¶ã¼è¨å®ç»é¢ã§pi/raspberryãè¨å®ãããã¨ã¯ã§ãã¾ãããè¨å®æã«è¦åããã¾ãã俺ã¯å¤§ä¸å¤«ã¨ããæ£å¸¸æ§ãã¤ã¢ã¹ãããªããªã®æ¹ã®ã¿å ã«é²ããã¨ãã§ãã¾ãã