Raspberry Piを車載していろいろやる

  • Raspberry Pi Zero W / Raspbian Stretch

BluetoothとWiFiの同時利用

  • 両方ONになっていると外からping打ったときの応答がやたら遅い
    • 2.4GHz帯の干渉?
  • とりあえず作業時のみ % sudo rfkill block bluetooth して様子見
  • リブートしても覚えてる()ので戻すには % sudo rfkill unblock bluetooth

rootfsをUSBメモリに移す

  • メンテ時バラしてmicroSD抜くのがだるいのでUSBメモリに移す
  • 64GBのUSBメモリを使用

  • fdiskでパーティションを切り直す
    • 操作前
      Disk /dev/sda: 58.9 GiB, 63199772672 bytes, 123437056 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: dos
      Disk identifier: 0x00000000
      
      Device     Boot Start       End   Sectors  Size Id Type
      /dev/sda1       32768 123427394 123394627 58.9G  7 HPFS/NTFS/exFAT
    • 操作後
      Disk /dev/sda: 58.9 GiB, 63199772672 bytes, 123437056 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: dos
      Disk identifier: 0x00000000
      
      Device     Boot    Start       End   Sectors  Size Id Type
      /dev/sda1          32768  16809983  16777216    8G 83 Linux
      /dev/sda2       16809984 123427394 106617411 50.9G  7 HPFS/NTFS/exFAT
  • fdisk時に「Re-reading the partition table failed.: デバイスもしくはリソースがビジー状態です」と言われた
  • この時点では/dev/sda2が見えないのでパーティションテーブルを読み直す
    • % sudo partprobe
    • partprobeしないままmke2fsするとデバイス全体をext4でフォーマットしちゃう
  • ↑たぶんアンマウントしないでfdiskしたため

  • /dev/sda1をフォーマット rootfs ext4
    • % sudo mke2fs -t ext4 -L rootfs /dev/sda1
  • /dev/sda2をフォーマット データ用(音楽ファイル) exFAT
    • % sudo mkexfatfs -n Music_OnBoard /dev/sda2
  • /dev/sda1を/mntにマウントしてコピー
    • % sudo mount /dev/sda1 /mnt
    • % sudo rsync -axv / /mnt
    • % sudo rsync -axXv / /mnt
  • /mnt/etc/fstabを編集
    • /dev/sda1 / ext4 defaults,noatime 0 1
  • /boot/cmdline.txtを編集
    • バックアップ % sudo cp /boot/cmdline.txt /boot/cmdline.sd
    • root=/dev/sda1
      • GPTにしとけばPARTUUIDとか使えた
  • おもむろにリブート

pingできなくなる

% ping 8.8.8.8
ping: socket: 許可されていない操作です
  • 元のrootfsをマウントしてみる
    % sudo mount /dev/mmcblk0p2 /mnt
    % sudo getcap /mnt/bin/ping
    /mnt/bin/ping = cap_net_raw+ep
    % sudo getcap /bin/ping
    %
  • Capabilities - ArchWiki

Extended attributes are copied automatically by cp -a, but some other programs require a special flag: rsync -X.

  • -X オプションつけて rsync やりなおし

  • カーネルのイメージはSD上の /boot にあるので,別のRasPiでアップデートしたりするとカーネルとモジュールのバージョンが合わなくなって良くないかも

bootもUSBメモリに持っていく

  • documentation/README.md at master · raspberrypi/documentation

  • /bootのマウントに失敗して起動中に止まる
    • fstabの/bootのところを直す
  • なぜかHDMIに映像が出なくなる(コンポジットには出ている)
  • 起動に要する時間が20秒程度伸びる感じ

  • /bootをSDカード,/をUSBメモリにした場合
    % systemd-analyze time
    Startup finished in 4.024s (kernel) + 25.385s (userspace) = 29.409s

参考

ブートメッセージを表示しない

コンソールのフォント変更

起動時にrfkillの状態を復元しない

起動を高速化

不要サービスを停止

% sudo systemctl disable apt-daily.timer
% sudo systemctl disable apt-daily-upgrade.timer
% sudo systemctl disable raspi-config.service
% sudo systemctl disable triggerhappy.service
% sudo systemctl disable keyboard-setup.service

ntpd -> systemd-timesyncd

  • /etc/systemd/timesyncd.conf にNTPサーバを追記
% sudo systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: inactive (dead)
Condition: start condition failed at Fri 2019-11-08 23:43:07 JST; 1s ago
           └─ ConditionFileIsExecutable=!/usr/sbin/ntpd was not met
↑とのことなので apt remove ntp

その他