1.はじめに

 

何台も運用しがちなラズパイだからこそ、同じ作業を繰り返すことになる。だったらインストールスクリプトがあったら便利ではないかと!

もち、いちいちインストールすることは勉強になりますから、決して無駄にはなりませんが。

fdiskによる領域確保のところが、sgdsikのように自動化できればよいのだろうけど、うまく行かないのでここだけ対話型の処理を行っている。sgdiskコマンドはGPTパーティションにしか対応していないようだから。したがって、以下のスクリプトは領域を確保した後の実行になる

MicroSDカードの種類にもよるが、最短で10分くらいでできるようだ。

2022/07/06 追記

  • raspberry pi os並に、一発で無線LANを使用できるよう、スクリプトに修正を加えた。
  • 従来dhcpcdを利用していましたが、default で起動するsystemd-networkdを利用して、無線LANの設定をする仕様に変更しました。

2022/08/20 追記

  • SDカードの認識形式には、 mmcblk0 型(ノートPC型)と sdx 型(デスクトップ型)があり、いちいち複数ヶ所を修正する面倒をなくした。
  • 無線LANを、DHCPでも設定できるようにした。

2022/09/24 追記

  • コードの一部に誤りがありましたので、修正しました。誤っていたのは/etc/fstabを強制的に書き換える部分で、1〜2行目をコメントしました。

留意点

  • 修正エリアは、各人の使用環境に応じて、必ず修正すること。
  • 以下の例は、 SDcardを/dev/mmcblk0 認識されている場合の例であり、すでに $HOME/download/app/linuxにダウンロードしていることを前提にしています。
  • vfat でのフォーマットには、dosfstools のインストールが必要です。
  • 各人の責任で使用すること。

 

2.スクリプトの内容

#!/bin/bash
#-------修正箇所-----------------------------------------------
disk_case=1  # ターゲットドライブの形式 1:mmcblk0 2:sdx
drive=/dev/mmcblk0 #ターゲットドライブの名称
# ターゲットドライブ /dev/sdb型の場合は /dev/sdb となる。またフォーマット、マウントを修正する必要がある。
dir=/home/usr/download/app/linux # full path ダウンロード先 /で終了しないこと。
aarch=ArchLinuxARM-rpi-aarch64-latest.tar.gz # file name
#aarch=ArchLinuxARM-rpi-armv7-latest.tar.gz # ファイル名(32ビットの場合)
SSID_A=Buffalo-A-xxxx
SSID_G=Buffalo-G-xxxx
passphrase=xxxxxxxxxxxxx
static=1 # static adress:1 dhcp:2
iface=wlan0 # interface
ip_a=xxx.xxx.xxx.xxx # static ip_address
gway=xxx.xxx.xxx.xxx  # gateway
dns=$gway 8.8.8.8 # dns server
# その他----
# 途中 bsdtar コマンドを使用するが、ubuntuでは標準でインストールされていないので 
# sudo apt install libarchive-toolsでインストールしておくこと。
#---------------ここまで----------------------------------------------

set -e
lsblk
read -p "インストール先${drive}は正しいですか?インストールを開始しますか?(Y/n): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

#-- format & mount file system
#fdisk $drive # https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4 参照
if [ $disk_case -eq 1 ]; then 
	mkfs.vfat ${drive}p1
	mkfs.ext4 ${drive}p2
#-- disk mount
	mount ${drive}p2 /mnt
	mkdir /mnt/boot
	mount ${drive}p1 /mnt/boot
else
	mkfs.vfat  ${drive}1
	mkfs.ext4  ${drive}2
#-- disk mount
	mount ${drive}2 /mnt
	mkdir /mnt/boot
	mount ${drive}1 /mnt/boot
fi

#-- install
lsblk
read -p "確認:領域確保・マウントポイントは正しいですか?インストールを続行しますか?(Y/n): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

bsdtar xpf $dir/$aarch -C  /mnt

#--modify fstab
rm /mnt/etc/fstab
cat << EOS >> /mnt/etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
/dev/mmcblk1p1	/boot	vfat	defaults	0	0
/dev/mmcblk1p2	/	ext4	defaults	0	0
EOS

# wlan0 & systemd-netwarkd setting
if [ $static -eq 2 ]; then
cat << EOS >> /mnt/etc/systemd/network/20-wireless.network
[Match]
Name=$iface

[Network]
DHCP=yes
IgnoreCarrierLoss=3s
EOS
else
# wlan0 & systemd-wirelessnetworkd setting
cat << EOS >> /mnt/etc/systemd/network/20-wireless.network
[Match]
Name=$iface

[Network]
Address=$ip_a/24
Gateway=$gway
DNS=$dns
EOS
fi

# wlan0 & systemd-wirelessnetworkd setting
wpa_passphrase $SSID_A $passphrase > /mnt/etc/wpa_supplicant/wpa_supplicant-$iface.conf
wpa_passphrase $SSID_G $passphrase >> /mnt/etc/wpa_supplicant/wpa_supplicant-$iface.conf
cd /mnt/etc/systemd/system/multi-user.target.wants
ln -s /usr/lib/systemd/system/wpa_supplicant@.service wpa_supplicant@$iface.service

cd $HOME


#-- umount filesystem
umount -r /mnt/boot/ /mnt

 

3.実行

ファイルを保存したら実行権限を与え、それを実行するだけです。

$ sudo chmod +x aarch-install.sh
# ファイル名をaarch-install.shとした場合

$ sudo aarch-install.sh

終了後は、raspiにSDカードをさして、起動するだけ。最初から無線LANを通じて、SSH接続できます。

 

参考

以下の記事を参考にさせていただきました。

https://qiita.com/yoshiki9636/items/21d37ac6f6593c880efa

Comments powered by CComment

関連記事
最も読まれた記事
クラウドタグ