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 認識されている場合の例であり、すでに/download/app/linuxにダウンロードしていることを前提にしています。
なお、/dev/sdb 型で認識する場合は、途中のマウントフォーマットの部分も修正すること - 各人の責任で使用すること。
2.スクリプトの内容
#!/bin/bash
#-------modify area-----------------------------------------------
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
ファイルを保存したら実行権限を与え、それを実行するだけです。
$ sudo chmod +x aarch-install.sh
# ファイル名をaarch-install.shとした場合
$ sudo aarch-install.sh
終了後は、raspiにSDカードをさして、起動するだけ。最初から無線LANを通じて、SSH接続できます。
余談・・・驚くことに ArchLinuzならば2GBのカードにも作成できる
正確には1.9GBのようだが。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk1 179:0 0 1.9G 0 disk
|-mmcblk1p1 179:1 0 200M 0 part /boot
`-mmcblk1p2 179:2 0 1.7G 0 part /
以下は最新版に更新後のカード使用状況だ。流石にこれ以上小さなカードでは無理のようだ。何しろ/は85%使用しているので
$ uname -a
Linux alarm 5.16.2-2-aarch64-ARCH #1 SMP Fri Jan 21 19:56:06 MST 2022 aarch64 GNU/Linux
$ df -h
Filesystem Size Used Avail Use% Mounted on
dev 1.9G 0 1.9G 0% /dev
run 1.9G 668K 1.9G 1% /run
/dev/mmcblk1p2 1.7G 1.3G 245M 85% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 0 1.9G 0% /tmp
/dev/mmcblk1p1 200M 115M 86M 58% /boot
tmpfs 378M 0 378M 0% /run/user/0
tmpfs 378M 0 378M 0% /run/user/1000
これだけ小さいMicroSDカードに作成しておけば、今流通しているほとんどのカードに dd コマンドで複写できるので、昔のカードの利用、今後のカードの利用に非常に役立つのではなかろうか。
参考
以下の記事を参考にさせていただきました。
コメント