ラズパイzero で Google Drive のマウント

ラズパイzero で Google Drive のマウント

ラズパイzero の残り容量が少なく
撮影した動画を転送後に削除していかないと容量がいっぱいになる

しかし処理に時間がかかりそうなので
Google Drive をラズパイzero にマウントする

まず Google Drive でアップロード用のディレクトリ作成

新規 > フォルダ
で任意のフォルダを作成

今回は
raspizero
とした

次に
SSH接続のRaspberry PiにGoogle Driveをマウントする

を参考に
google-drive-ocamlfuseのインストール

sudo apt-get install opam mccs
opam init --solver=mccs

まで実行したところフリーズしたので

google-drive-ocamlfuseでGoogleドライブをマウント

を参考に
ubuntu で先に認証をしておく

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

でインストール

google-drive-ocamlfuse

で認証

mkdir google-drive

で同期ディレクトリの作成

次にマウントフォルダの指定

google-drive-ocamlfuse 複数のGoogleDriveアカウントをubuntuで使う

を参考に

vim .gdfuse/default/config

で設定ファイルを開き

56行目の

root_folder=

で作成した Google Drive のフォルダIDを書き込む

あとは

google-drive-ocamlfuse google-drive/

でマウント

これで
cp コマンドなどでここへファイルをコピーすると
Google Drive にファイルがコピーされる

次に
Raspberry Pi 3 Model BにGoogleドライブをマウントする

を参考に
ラズパイzero にインストール

sudo apt-get upgrade
sudo apt-get install opam
opam init
opam update
opam install depext
opam depext google-drive-ocamlfuse
opam install google-drive-ocamlfuse

を実行

かなり時間がかかり
私の環境の場合1時間以上かかった

次に
SSH接続のRaspberry PiにGoogle Driveをマウントする

を参考に
偽のfirefox を作成し認証に介入

次に

nano firefox

でファイルを作成

#! /bin/sh
echo $* > /dev/stderr

として保存し

chmod 777 firefox 

で権限付与

PATH=`pwd`:$PATH ~/.opam/system/bin/google-drive-ocamlfuse


URLが端末に表示されるので
これを
ubuntu の firefox で開く

すると認証画面になるので
これを認証ししばらくすると

Access token retrieved correctly.

と表示されれば成功

これで次に Google Drive で書き込むフォルダの指定をするので

nano .gdfuse/default/config

で設定ファイルを開き

56行目の

root_folder=


ubuntuのときと同じように
作成した Google Drive のフォルダIDを書き込む

次にマウントするディレクトリの作成

mkdir googleDrive

そしてマウント

~/.opam/system/bin/google-drive-ocamlfuse ~/googleDrive/

これでマウントができたので
試しに

cp test2.wav googleDrive/

というようにファイルを
コピーしてみるとアップロードされているのがわかる

なお、マウントしてるか確認するには
df コマンドを使う

df -h

今回の場合

ファイルシス               サイズ  使用  残り 使用% マウント位置
/dev/root                    5.7G  4.4G  1.1G   81% /
devtmpfs                     152M     0  152M    0% /dev
tmpfs                        185M     0  185M    0% /dev/shm
tmpfs                        185M  5.2M  180M    3% /run
tmpfs                        5.0M  4.0K  5.0M    1% /run/lock
tmpfs                        185M     0  185M    0% /sys/fs/cgroup
/dev/mmcblk0p6                68M   24M   45M   35% /boot
//192.168.1.6/pizero_photo   916G   48G  869G    6% /mnt/nas
tmpfs                         37M  4.0K   37M    1% /run/user/1000
/dev/mmcblk0p5                30M  398K   28M    2% /media/pi/SETTINGS1
google-drive-ocamlfuse       100G   20G   81G   20% /home/pi/googleDrive

となり
マウントできているのが確認できる

とりあえず自宅での場合は定期的にバックアップをし
外出先で撮影するなら
容量をもっと大きなmicroSD にして
帰宅したら Google Drive に転送するようにすれば
ネットワーク遅延などは気にせずバックアップができそう

ラズパイ撮影データを Google Drive へ保存

ラズパイ撮影データを Google Drive へ保存

外付けHDDに保存するのは屋内ではできるけど
外での撮影には向かない

このためクラウドにデータを保存することに

候補としては
AmazonS3
Google Drive
iCloud

S3 は使用した分課金となるので
今回は
Google Drive へ保存

料金については
【2020年10月最新版】Google ドライブの価格を徹底調査してみた!

S3の料金をシミュレーションしました

iCloud ― 料金プラン・ストレージ容量 まとめ

を参考に

ラズベリーパイZERO-WHでカメラ画像をGoogleDriveにアップロードする(python+pydrive)

を参考に設定

python3 が必要なので

sudo apt update
sudo apt upgrade
sudo apt install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

で必要なパッケージのインストール

次に Github から pyenv を取得

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

次にパスを通す

sudo nano ~/.bash_profile

でファイルを作成し開く

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

を追記して保存

設定反映のため

source ~/.bash_profile

で再読み込み

pyenv --version

でバージョン確認

今回は

pyenv 1.2.21

となった

次に
【Raspberry Pi】Raspberry Piで撮影した画像をGoogle Driveにアップロードさせてみる ~PyDrive編~

を参考に

PyDrive のインストール

pip3 install google-api-python-client
pip3 install PyDrive

次に
Google Developers Console
へアクセス

ラズパイで撮影した動画をグーグルドライブにアップロードする

を参考に
プロジェクトを作成し
Google Drive API を有効化する

APIとサービスの有効化
をクリック

Drive で検索

Google Drive API
をクリック

有効にする
をクリック

次に認証情報の作成

認証情報をクリック

認証情報を作成 > OAuth クライアントIDをクリック

参考サイトではその他だったけど
見当たらないので
アプリケーションの種類を
デスクトップアプリにして
名前は任意のものにして作成をクリック

これで
OAuth クライアントが作成される

もし忘れたとしても
OAuth クライアントIDの
編集アイコンや
ダウンロードアイコンでファイルをダウンロードすれば
確認ができる

次にGoogle Drive へのアップロード

以前、ラズパイで認証しようとしたら
失敗したので
Ubuntu で行う

sudo apt install python3-pip
pip install --upgrade pip

としたが

You are using pip version 8.1.1, however version 20.2.4 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

となってしまう

【Python】pip install –upgrade pip が成功しない場合の対処法

によれば
sudo をつければよいらしいが

sudo: pip: コマンドが見つかりません

となってしまうが

python3 -m pip install --upgrade pip

で成功

ラズパイと同じように環境を整えておく

pip install --upgrade google-api-python-client
pip install PyDrive


Ubuntu にも
PyDrive のインストール

を参考に
PyDrive をインストールしておく

まず認証情報を記載したファイルの作成

vim settings.yaml

内容は

client_config_backend: settings
client_config:
  client_id: <クライアントID>
  client_secret: <クライアントシークレット>

save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json

get_refresh_token: True
  - https://www.googleapis.com/auth/drive.file
  - https://www.googleapis.com/auth/drive.install

次に

vim test.py

でファイル作成

ソースは

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

def main():
    #  Google Drive 
    gauth = GoogleAuth()
    gauth.CommandLineAuth()
    drive = GoogleDrive(gauth)

    #  file upload
    f = drive.CreateFile({"title": "TEST.TXT"})
    f.SetContentString("Hello Drive")
    f.Upload()

これで

python test.py

を実行したが認証画面がでない

Python, PyDriveでGoogle Driveのダウンロード、アップロード、削除など

を参考に

vim auth.py

でファイルを作成

import os

from pydrive.auth import GoogleAuth

os.chdir(os.path.dirname(os.path.abspath(__file__)))

gauth = GoogleAuth()
gauth.LocalWebserverAuth()

で保存し

python auth.py

とすることで認証画面の表示と認証を行うことができた

次にファイルのアップロードテスト

【Python/PyDrive】Google Driveにファイルをアップロード/ダウンロード

を参考に

vim upload.py

でファイルを作成

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()

drive = GoogleDrive(gauth)

filepath = 'test.jpg'
title = 'test.jpg'
file = drive.CreateFile({'title': title, 'mimeType': 'image/jpeg'})
file.SetContentFile(filepath)
file.Upload()

として保存

あとは
手持ちの画像ファイルを
test.jpg として保存し

python upload.py

とすると
Google Drive に test.jpg がアップロードされる

これで ubuntu でPyDrive が使えるようになったので
次にラズパイでも実験

必要なファイルを

mkdir zerodrive
cd zerodrive/
cp upload.py zerodrive/
cp settings.yaml zerodrive/
cp test.jpeg zerodrive/

でまとめて

scp /home/snowpool/zerodrive/* pi@192.168.1.8:/home/pi/

でまとめて転送

しかし、そのまま実行しても認証画面がでてしまい
エラーになる

ubuntu で認証した結果は
credentials.json
に保存されているので
これを転送

scp /home/snowpool/credentials.json   pi@192.168.1.9:/home/pi/

さらに python で実行しても
ラズパイのデフォルトは 2.7 系なので

python3 upload.py

というように実行しないとエラーになってしまう

これで画像をGoogle Drive に保存できたので
次は動画のアップロード