Nervesが動作するホスト上でファイル操作をする
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