Ubuntu ServerにGoogle Driveをマウント(rclone)

# はじめに
+ Ubuntu ServerのCUI環境で、Google Driveをマウントさせる方法
+ マウントさせるだけなので、本体側の容量は食わないし、iPhoneなどスマホにGoogle Driveアプリがあれば同期ができる
+ 設定中にオプションの選択があるが、Google Drive以外も対応しているようだ

# 環境
+ Ubuntu Server24.04 LTS
+ GoogleアカウントでGoogle Driveが使用できる
+ GUIはmacOS(Homebrewが使用できること)

# 手順
#### Ubuntu Server側
+ rcloneのインストール
```sh:
sudo apt update
sudo apt install -y rclone
```
ずらずらずら
+ rcloneの設定
```sh:
rclone config
```
##### ここからrcloneのセットアップをQA式で行う
+ configファイルが無いので新しく作成
→[n]
```sh:
YYYY/MM/DD HH:mm:SS NOTICE: Config file "/home/hogehoge/.config/rclone/rclone.conf" not found - using defaults
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
```
+ remoteに名前をつける
→[gdrive]（任意）
```sh:
Enter name for new remote.
name> gdrive
```
+ ストレージの種類を選択する
→ google driveなので[18]または[drive]と入力
```sh:
Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
```
+ クライアントID
→何も入力しないで[Enter]
```
Option client_id.
Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a value. Press Enter to leave empty.
client_id> 
```
+ クライアントsecret
→何も入力しないで[Enter]

```sh:
Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_secret> 
```
+ scope
→フルアクセスなので[1]
```sh:
Option scope.
Scope that rclone should use when requesting access from drive.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
....
scope> 1
```
+ service_account_file
→何も入力しないで[Enter]
```sh:
Option service_account_file.
Service Account Credentials JSON file path.
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a value. Press Enter to leave empty.
service_account_file> 
```
+ Edit advanced config?
→[n]
```sh:
Edit advanced config?
y) Yes
n) No (default)
y/n> n
```

+ Use auto config?
→CUIで作業しているので[n]
```sh:
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine

y) Yes (default)
n) No
y/n> n
```
+ 認証トークンが表示される("XXXxxxXXXxxYYYYYYYY"の部分）
この行を控えておく
```sh:
Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
	rclone authorize "drive" "XXXxxxXXXxxYYYYYYYY"
Then paste the result.
Enter a value.
config_token>
```
#### macOS(GUI）
+ GUI環境（今回はmacOS）のターミナルで以下のコマンドを入力
以下のようにzsh: command not found: rcloneが出た場合は
rcloneをbrewでインストールする
```zsh:
rclone authorize "drive" "XXXxxxXXXxxYYYYYYYY"
zsh: correct rclone to _rclone [nyae]? n
zsh: command not found: rclone
```
+ macOSにrcloneをインストール
```zsh:
brew install rclone
```
ずらずらずら
+ 改めてrcloneコマンドをトークン付きで実行
ブラウザが開き、googleアカウントにログインし、rcloneを信頼しますか？にOKするとブラウザに
[Success!]
All done. Please go back to rclone.
と表示されればOK
![スクリーンショット 2025-05-18 13.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/2b073d3d-15d0-4eea-89f6-c028c4b4b945.png)
macOSのターミナルに認証トークンが表示されるのでコピーする。
```zsh:
rclone authorize "drive" "XXXxxxXXXxxYYYYYYYY"
...
Paste the following into your remote machine --->
xxyyYYYYYYYYYaaaaaaaaaaAAAA
aaaaaaaaaaAAAAxxyyYYYYYYYYY
xxyyYYYYYYYYYaaaaaaaaaaAAAA
aaaaaaaaaaAAAAxxyyYYYYYYYYY
<---End paste
```
#### Ubuntu Server側
+ 先ほどの認証トークンをUbuntuにペーストする
```sh:
config_token> xxyyYYYYYYYYYaaaaaaaaaaAAAA
aaaaaaaaaaAAAAxxyyYYYYYYYYY
xxyyYYYYYYYYYaaaaaaaaaaAAAA
aaaaaaaaaaAAAAxxyyYYYYYYYYY
```
+ Google Drive の「共有ドライブ（旧：Team Drive）」を使うか？という確認
→[n]
```sh:
Configure this as a Shared Drive (Team Drive)?

y) Yes
n) No (default)
y/n> n
```
+ 設定完了
→[y]
```
Configuration complete.
Options:
- type: drive
- scope: drive
- token: {"access_token":"***********","expiry":"YYYY-MM-DDTHH:mm:SS.sssssss+09:00"}
- team_drive: 
Keep this "gdrive" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y
```
+ 現在の設定表示
→OKだったら[q]でquit
```sh:
Current remotes:

Name                 Type
====                 ====
gdrive               drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
```
### Ubuntu Serverでマウントさせる
+ このままだとrcloneの設定が終わっただけ。マウントさせる必要がある、
システムの/mntなどにマウントさせようとするとsu権限が必要なので、
ユーザーのディレクトリにマウントさせる。
rcloneコマンドはフォアグラウンドで実行されるので、確認は別のターミナルで行う。
```sh:~
#ユーザーディレクトリで作業
cd ~/
mkdir mnt/gdrive
rclone mount gdrive: ~/mnt/gdrive --vfs-cache-mode writes
```
+ 別のターミナルでdfを実行して、gdriveがマウントされていればOK
 cd ~/gdriveに入るとGoogle Driveの中身が見える
```sh:
$ df
Filesystem                        1K-blocks     Used Available Use% Mounted gdrive:                           104857600 56285924  48571676  54% /home/hogehoge/gdrive
```
#### 常時マウントさせる
+ systemd サービスファイルを作成
```sh:
sudo pico /etc/systemd/system/rclone-gdrive.service
```
+ 中身
 ※userは[hogehoge]としています。適宜変えてください
 --allow-otherオプションは全ユーザーにマウントファイルのアクセスを許可する
```sh:
[Unit]
Description=Mount Google Drive (rclone)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=hogehoge
ExecStart=/usr/bin/rclone mount gdrive: /home/hogehoge/mnt/gdrive \
  --config=/home/hogehoge/.config/rclone/rclone.conf \
  --vfs-cache-mode writes \
  --dir-cache-time 1h \
  --poll-interval 15s \
  --umask 002 \
  --allow-other
ExecStop=/bin/fusermount -u /home/hogehoge/mnt/gdrive
Restart=on-failure

[Install]
WantedBy=default.target
```
+ --allow-other オプションを有効にした場合
/etc/fuse.conf ファイルを編集
```sh:/etc/fuse.conf
sudo nano /etc/fuse.conf
```
+ user_allow_otherの部分のコメントアウトを外す
```sh:/etc/fuse.conf
user_allow_other
```
### systemctlに反映
```sh:
# 設定をリロード
sudo systemctl daemon-reload
# 起動時にデーモン起動有効
sudo systemctl enable rclone-gdrive.service
# デーモン再起動
sudo systemctl restart rclone-gdrive
# リアルタイムでログを確認
sudo journalctl -u rclone-gdrive.service -f
```
+ デーモン起動確認
デーモンとしてrcloneが動いていることを確認する。Actime: active (running) であればOK。
```sh:
sudo systemctl status rclone-gdrive
● rclone-gdrive.service - Mount Google Drive (rclone)
     Loaded: loaded (/etc/systemd/system/rclone-gdrive.service; enabled; preset: enabled)
     Active: active (running) since Sun yyyy-MM-DD HH:mm:SS JST; 30s ago
```
+ マウント確認
dfでgdriveにマウントを確認できる
```sh:
df
...
gdrive:        104857600 56285924  48571676  87% /home/mnt/gdrive
```
```sh:
cd ~/mnt/gdrive
```
Google Driveの中身が見えていればOK。