Linuxターミナルから無料クラウド・ストレージを利用する

## テキストベースのコマンドで、バッチ処理による自動化も可能

主要なクラウド・ストレージといえば[Google Drive][1]や[OneDrive][2]、[iCoud Drive][3]、[Dropbox][4]など、良く知られたサービスがいくつもあります。
今やスマートフォンなどでは特に意識することも無く、外部ストレージやバックアップ・デバイスとして使われいるのではないでしょうか？

一方LinuxではブラウザやGUIアプリの利用環境を持たない、ターミナルからテキストベースのインターフェースのみで運用しているケースがかなり多いはずです。
その場合クラウドストレージのセットアップとその活用方法に関しては情報も少なく、またひと手間かかることから面倒に感じて、積極的に活用されていないこともあると思います。

しかしテキストベースの強みとして、シェルスクリプトで実行することにより、一連のバッチ処理に組み込むことによる省力化も期待できます。
そこで今回はLinuxターミナルでのクラウドストレージの活用を提案するべく、無料で20GBまで利用できるサービスである[MEGA][5]を実例として、実際にセットアップを行ってみたいと思います。

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/da9b48b0-553c-a0bd-53c8-401961262be5.png)][5]

[1]: https://drive.google.com
[2]: https://onedrive.live.com
[3]: https://www.icloud.com/iclouddrive
[4]: https://www.dropbox.com
[5]: https://mega.nz

## Linux対応パッケージの入手

[公式の配布ページ][6]にアクセスするとテキストベースのコマンド[MEGA CMD][7]の各ディストリビューションに対応したパッケージが多数用意されています。
ここからダウンロードして、ご自身の利用しているディストリビューションで用意されているパッケージマネージャでインストールすれば話は早いと思います。

ここからは誰でも気軽に試せるように、Googleの無料サービス[Google Cloud Shell][8]をターゲットにしてセットアップを実演したいと思います。
なおMEGAとGoogleアカウントのサインアップは済んでいるものとさせていただきます。

https://shell.cloud.google.com/?show=terminal

Cloud Shellでは[Debian][9]用のパッケージが利用可能です。

[6]: https://mega.nz/linux/repo/
[7]: https://mega.nz/cmd
[8]: https://shell.cloud.google.com/?show=terminal
[9]: https://www.debian.org/

## ターミナル画面でセットアップを完結

Cloud Shellはコンテナ型仮想環境のため、パッケージマネージャでインストールすると永続化出来ないため、ユーザーのホームディレクトリ配下にインストールします。

MEGA CMDの依存関係を解決するために、いくつか必要なパッケージが有りますが、ほとんどはすでにシステムにインストールされています。

```shell
apt list | grep -E '^(libc6|libgcc-s1|libpcrecpp0v5|libssl1.1|libstdc++6|zlib1g|apt-transport-https|gpg|libc-ares2)/'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/926dfa8e-dc1a-7195-cd78-1130667839ee.png)

実際に追加インストールしなければならないパッケージは、この中では`libc-ares2`のみです。
まず準備としてダウンロード用のディレクトリをホームディレクトリ直下に`pkgs`という名前で作成して、カレントディレクトリとします。

```shell
mkdir -v ~/pkgs; cd ~/pkgs
```

次に`libc-ares2`と**MEGA CMD**のパッケージをそれぞれ`apt-get`と`wget`コマンドでダウンロードします。
パッケージのバージョンは2022年4月時点のものです。

```shell
apt download libc-ares2

wget https://mega.nz/linux/repo/Debian_11/amd64/megacmd_1.5.0-10.1_amd64.deb
```

準備が出来たところで、`dpkg`コマンドでインストールを実行します。
アンインストールの際にはディレクトリ一括削除で出来るように、今回はホームディレクトリ直下に専用のディレクトリを`mega`という名前で作成してインストールします。

```shell
dpkg --install --force-all --root=${HOME}/mega --recursive ${HOME}/pkgs
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/1fd39590-9690-2c37-5d9a-781240ce889d.png)

`dpkg`はパッケージの依存関係を総合的に解析してチェックすることが出来ないため、依存関係に関するエラーが出力されますが、前述した通り実際には必要なパッケージはすでに揃っているので問題はありません。
エラーを抑制できれば良いのですが、方法は分かりませんでした。
また下記のコマンドで必要なパッケージがインストールされていることを確認できます。

```shell
dpkg --list --no-pager --root=${HOME}/mega
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/36ece628-7cff-e3fd-e36d-7ebfc79b170b.png)

後は環境変数を設定すれば、プレフィックスの`mega-`から始まる様々なコマンドが利用できるようになります。

```shell
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/mega/usr/lib/x86_64-linux-gnu:${HOME}/mega/opt/megacmd/lib

PATH=${PATH}:${HOME}/mega/usr/bin
```

よく使用するのであれば、`.bash_login`などで自動実行するとよいでしょう。

## 基本的な使用方法の抜粋

主なコマンドを抜粋して下記に表示します。

|コマンド名       |機能                                          |
|----------------|---------------------------------------------|
|mega-login      |MEGAのクラウドストレージにログイン               |
|mega-ls         |クラウドのファイル・ディレクトリの一覧表示         |
|mega-get        |クラウドからローカルへのダウンロード              |
|mega-put        |ローカルからクラウドへのアップロード              |
|mega-cp         |クラウド内でのファイル・ディレクトリのコピー       |
|mega-mv         |クラウド内でのファイル・ディレクトリの移動・名前変更|
|mega-rm         |クラウド内でのファイル・ディレクトリの削除         |
|mega-mkdir      |クラウド内でのディレクトリの作成                  |
|mega-cmd        |対話モードへの移行                              |

下記のコマンドを実行しておけば、Bashにて上記のコマンドを入力する際にオプションやクラウドのファイル・ディレクトリの補完機能が働くようになります。

```shell
source ~/mega/etc/bash_completion.d/megacmd_completion.sh
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/1970d567-ca57-3260-26f5-dff7dba9a188.png)
これもよく使う場合は自動実行に追加しておくとよいでしょう。

余談ですがワンライナーだとログインする際パスワードが表示され、入力履歴にも残りますので、セキュリティ上少々懸念が有ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/6df0ffec-30d1-89b9-05b6-3b169e2b67e0.png)

対話モードでは`mega-`プレフィックス無しでコマンドを実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/eefc6b76-4396-a7af-137e-95124035d989.png)

対話モードでは`login`の際には対話的にパスワードを入力できるのでセキュリティ上は安心だと思います。

ただし、対話モードではリダイレクトやパイプを使って、標準出力を再利用することは出来ないようです。また終了すると入力履歴はクリアされ、永続化されません。

## まとめ

この機会にターミナル環境でも、クラウドを活用してデータのバックアップや共有、ローカルのストレージの容量の確保のために活用されてはいかがでしょう。