ラズパイでGoogle Driveを使う

nozzle

結論

Rclone を systemd で自動起動してマウントするのが良い。
だから、google-drive-ocamlfuse とか rc.local の記事は見なくていいよ。

まとめ

google-drive-ocamlfuse

  • マウントする
  • GoogleDrive 内のファイルを直接操作できる
  • ストレージ要らず
  • インターネットによるネットワーク接続で操作が重い
  • ラズパイが熱を持つ

Rclone

  • 同期する
  • マウントもできる
  • 片方向の同期しかできない
  • ストレージを圧迫する
  • 操作が軽い

google-drive-ocamlfuse

公式

Installation | google-drive-ocamlfuse

インストール

bash
sudo add-apt-repository ppa:alessandro-strada/ppa
sudo apt update
sudo apt install google-drive-ocamlfuse

でも ppa の参照先増やしたくないねって人は

bash
sudo apt upgrade
sudo apt install opam mccs
opam init --solver=mccs
opam update
opam install depext
opam depext google-drive-ocamlfuse
opam install google-drive-ocamlfuse

ってやればopam経由でインストールできる。

参考:SSH 接続の Raspberry Pi に Google Drive をマウントする | Qiita

認証

bash
google-drive-ocamlfuse

って出たらブラウザが立ち上がって認証トークンがでてできる。

SSH 接続でやりたい人は上の参考記事を参照するとできる。
偽のブラウザ作ってブラウザの表示をターミナルに出すっていう発想がすごいよね。

マウントする

title
google-drive-ocamlfuse [マウントしたいフォルダ]
~/.opam/default/bin/google-drive-ocamlfuse [マウントしたいフォルダ]     # opam経由でインストールした人

これやったらラズパイが 52℃ くらいになってびっくりしました。

Rclone

公式

Rclone Downloads v1.54.1 | Rclone

インストール

bash
curl https://rclone.org/install.sh | sudo bash

認証

Google Drive についての Rclone 公式の説明
Google Drive | Rclone

rclone config

基本指示にしたがえばできる。
client_id, client_secret, root_folder_id, service_account_file は空欄でいい。
Auto config の設定もしなくていいし、team drive の設定もしなくていい。

URL にアクセスして、出てきた認証コードをターミナルに打ち込むとできる。

使い方

ミスるとデータが消えるから注意が必要

基本

bash
rclone sync [同期元] [同期先] --dry-run     # 同期は行わずに、実行時に起きるファイル操作を確認する
rclone sync [同期元] [同期先]               # 同期を行う

もし、rclone にgdrive-remoteと登録してて、ラズパイ上の./gdrive-localっていうフォルダに同期させたいなら、rclone sync gdrive-remote: ./gdrive-localでできる。

オプション

bash
rclone sync [同期元] [同期先]

マウント(実験的機能)

bash
rclone mount [同期元] [同期先]                          # これでいい
rclone --vfs-cache-mode writes mount [同期元] [同期先]  # こっちはエラーが減るらしいけど試してない

マウントもできた。

自動マウント設定

結論

rc.local ではなく、systemd を使おう。

rc.local

~/etc/rc.localというファイルにコマンドを書き込むと、起動時に実行してくれる。

/etc/rc.local
[任意のコマンド]

しかし、コマンドの実行者が管理者になってしまうところは留意しなくてはならない。

rclone の場合、mount を実行した人が管理者なら、マウントしたディレクトリも全部管理者のものになってしまい、ファイルを参照できなくなってしまう。

おまけに一部の OS では非推奨らしい。

RedHat、CentOS 7 系より rc.local を利用しないことが推奨されている

引用元:【Linux】【rc.local】Linux OS 起動時に自動的に実行する設定を入れる | 100%レンタルサーバーを使いこなすサイト

systemd

hogehoge.service というファイルを作って systemd に管理してもらう。

マウントするスクリプトを作る

/home/[user]/shellscript/hoge.sh
#!/bin/bash
rclone mount [同期元のフォルダ] [同期先のフォルダ]

rclone のコンフィグファイルの権限を変更する

bash
sudo chmod 755 ~/.config/rclone/rclone.config

service ファイルを作る。

ディレクトリを間違えてetc/systemd/hogehoge.serviceとしないように注意。(1 敗)

/etc/systemd/system/hogehoge.service
[Unit]
Description=To mount Google Drive
After=network.target                # ネットワーク接続後に実行する

[Service]
ExecStart=/home/[user]/shellscript/hoge.sh
Type=simple
User=[ユーザ名]

[Install]
WantedBy=multi-user.target

[Service]のユーザオプションのおかげでちゃんと一般ユーザ権限のディレクトリとしてマウントできる。

自動起動の設定

bash
sudo systemctl daemon-reload            # serviceファイルを読み込む
sudo systemctl status hogehoge.service  # hogehoge.serviceが読み込まれたか確認する
sudo systemctl enable hogehoge.service  # hogehoge.serviceを起動時に実行するようにする
sudo systemctl disable hogehoge.service # 起動しないようにする(メモ)

マウントしたディレクトリを確認

df -hすればいい
参考:Linux のファイルシステムコマンドまとめ | NARAZUKE

raspberrypi google drive 01

できました。