🐙

Nervesが動作するホスト上でファイル操作をする

2022/06/14に公開

Nervesが動作するホスト(Raspberry Pi等)上のファイルに関する操作をしたくなることがあります。手元のマシンからデバイス上へファイルを配置したり、Livebookをローカルマシンとデバイス上で同期したりなどと言ったことです。

この記事では、rcloneを用いて実現する方法を簡単に紹介します。

rcloneとは

Rcloneとは、さまざまなリモートストレージ上のファイルを扱えるツールです。DropboxやAmazon S3といったクラウドストレージや、WebDAVやSFTPといったプロトコルに対応しています。

インストールと初期設定は、公式記事や「sshfsが開発終了になったので代わりにRcloneを使ってみる / 開発者向けブログ・イベント | GMO Developers」などを参考にすると良いでしょう。

ケーススタディ

ファイルを置く

小さなファイルであればファームウェアイメージに焼き込んでしまえばいいのですが、たとえば機械学習モデルのような大きなファイルではそうも行きません(そもそもrpi4でもファームウェアイメージのサイズは128MBに制限されています)。そこで、Nervesが立ち上がった後にファイルを転送してやる必要があります。

ここではNerves上で動かしたい機械学習モデルを配置してみます。

モデルを置くディレクトリを作成(livebook.nerves.localが、接続先の情報です。以下、同様):

rclone mkdir livebook.nerves.local:/root/models

手元からモデルのファイル(mobilenet.dets)をアップロード:

rclone moveto mobilenet.dets livebook.nerves.local:/root/models/mobilenet.dets

Nervesホスト上に配置されているかを確認:

rclone ls livebook.nerves.local:/root/models
     5464 mobilenet.dets

ファイルを置くことができました。

ファイルを同期する

以前「Nerves上で動作するLivebookをデバイスとローカルマシンとで同期する」という記事で書いた通り、Nerves上で記述したlivebookをリポジトリ管理しようと思うと、デバイス上にあるファイルを手元の開発マシンに同期したくなります。上記の記事ではSFTPのバッチで実現していましたが、rcloneのsyncというコマンドでも実現できます。

ローカルマシン上に同期するディレクトリを作成:

mkdir livebook

Nerves上のLivebookが置かれるディレクトリを同期:

rclone sync livebook.nerves.local:/root/livebook livebook

ローカルマシンの同期先ディレクトリを確認:

tree livebook
livebook
├── samples
│   ├── basics
│   │   ├── blink.livemd
│   │   ├── button.livemd
│   │   ├── pwm.livemd
│   │   ├── spi_rgb_leds.livemd
│   │   └── sys_class_leds.livemd
│   ├── bluetooth
│   │   └── ble_device_with_nerves.livemd
│   ├── debug
│   │   └── diagnostics.livemd
│   ├── networking
│   │   ├── configure_wifi.livemd
│   │   ├── delta_firmware_update.livemd
│   │   ├── erlang_distribution.livemd
│   │   ├── firmware_update.livemd
│   │   ├── nerves_key_provisioning.livemd
│   │   ├── penultimate_update.livemd
│   │   ├── vintage_net.livemd
│   │   └── weather.livemd
│   └── sensors
│       └── bmp280.livemd
└── welcome.livemd

6 directories, 17 files

デバイス上のlivebookを手元に同期することができました。

おわりに

この記事では、Nerves上のファイルを操作する上で使いたくなることが多いだろうケースを2つ紹介しました。Rcloneには他にもたくさんの機能があります。rclone --helpして確かめてみてください。

Discussion