SDカード上のExt4 FSが壊れてカーネルパニック
[ 4.686189] Run /sbin/init as init process
[ 4.690349] with arguments: [ 4.693331] /sbin/init
[ 4.696046] with environment:
[ 4.699218] HOME=/
[ 4.701585] TERM=linux
[ 4.844857] EXT4-fs error (device mmcblk0p2): ext4_lookup:1752: inode #5496: comm init: iget: checksum invalid
[ 4.874319] EXT4-fs error (device mmcblk0p2): ext4_lookup:1752: inode #5496: comm init: iget: checksum invalid
/sbin/init: error while loading shared libraries: libapparmor.so[ 4.885876] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
[ 4.899099] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00 ]---
.1: cannot open shared object file: Error 74
SDが壊れてhassのwebhookにデータが飛んでこなくなったので再構築がてらメモ
BuildrootでSD用のイメージ作成
GitHub - bakueikozo/buildroot_am3352_aki
cd ~/
sudo apt -y install build-essential bc libssl-dev unzip ncurses-dev
git clone git@github.com:bakueikozo/buildroot_am3352_aki.git
cd buildroot_am3352_aki
make akiduki_am3352_defconfig
make menuconfig
rootfsのサイズを拡大
Filesystem images -> exact size -> 1200M
イメージサイズを拡大
vim board/akiduki_am3352/genimage.cfg
# size = 512MB => 1536MB
make
Debian に置き換える
debootstrap で rootfs を作成する
cd ~/
sudo apt-get install debootstrap qemu-user-static
sudo qemu-debootstrap --verbose --arch=armhf --variant=buildd \
bookworm rootfs-debian-armhf \
http://ftp.jp.debian.org/debian/
# 時代はbookworm (Debian 12)に
chrootでDebianイメージ内のセットアップ
sudo chroot ./rootfs-debian-armhf /bin/bash
apt update
apt upgrade -y
apt install -y ifupdown iproute2 iputils-ping net-tools dnsutils sudo vim screen tcpdump ca-certificates locales locales-all avahi-daemon kmod fdisk e2fsprogs curl wget openssh-server udev
echo "Asia/Tokyo" > /etc/timezone
cp /usr/share/zoneinfo/Japan /etc/localtime
locale-gen en_US.UTF-8
locale-gen ja_JP.UTF-8
ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyS0.service
apt clean
chrootから抜ける
SDカードイメージのrootfsを差し替え
cp ~/buildroot_am3352_aki/output/images/sdcard.img ~/debian.img
sudo losetup -f ~/debian.img -P --show
sudo mkfs.ext4 -L rootfs -F /dev/loop0p2
sudo mkdir /mnt/rootfs
sudo mount /dev/loop0p2 /mnt/rootfs
sudo rsync -av ~/rootfs-debian-armhf/ /mnt/rootfs/
sudo umount /mnt/rootfs
sync; sync; sync;
sudo losetup -d /dev/loop0
~/debian.imgのrootfsがDebianに差し替わったのであとは焼くだけ。
ssh-copy-id debian@akiduki.local
ssh debian@akiduki.local
sudo fdisk /dev/mmcblk0 <<EOF
p
d
2
n
p
2
32769
p
w
EOF
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 1 32768 32768 16M c W95 FAT32 (LBA)
/dev/mmcblk0p2 32769 62552063 62519295 29.8G 83 Linux
Command (m for help): The partition table has been altered.
Syncing disks.
パーティションを32GBいっぱいまでexpand
fsもexpand
sudo /sbin/resize2fs /dev/mmcblk0p2
HomeAssistant Pythonスクリプト用セットアップ
GitHub - unlimish/GetSmartMeterData: Get SmartMeter Data for WI-SUN · GitHub
1. 必要なパッケージ全部入れる
sudo apt update && sudo apt install python3-serial python3-pip git -y
sudo pip3 install requests
2. スクリプト clone
git clone https://github.com/unlimish/GetSmartMeterData.git
3. 設定書き換え(B_ROUTE_ID, B_ROUTE_PW)
nano GetSmartMeterData/GetSmartMeterData.py
4. 動作確認(手動起動してログ見る)
cd GetSmartMeterData && sudo python3 GetSmartMeterData.py
5. 動いたら systemd サービス化(自動起動)
sudo tee /etc/systemd/system/smartmeter.service <<'EOF'
[Unit]
Description=Wi-SUN SmartMeter Data
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/debian/GetSmartMeterData/GetSmartMeterData.py
Restart=always
RestartSec=30
User=root
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now smartmeter
6. 全部確認できたら FSをread-only 化
sudo sed -i 's|\(/dev/mmcblk0p2.*\)\(defaults\)|\1\2,noatime,ro,commit=600|' /etc/fstab
sudo reboot
設定が書き換え必要になったときは
sudo mount -o remount,rw /
# 書き込み作業をする
sudo mount -o remount,ro /