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用のイメージ作成
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 /



