Ubuntu18.04でOneDriveを使うための手順

はじめに

Ubuntu用にOneDriveの公式クライアントが用意されていないため、代りにOneDrive Free Clientとういうものを使いました。使って見たところ問題なく動作しており、同期が反映されるまでの時間も数十秒〜分程度と割と短いです。OneDrive Free ClientをUbuntu18.04で使えるようにするまでの手順と使い方をメモします。

環境と事前準備

以降の手順はUbuntu18.04で行いました。また、OneDrive Free Clientは動作のために以下のパッケージが必要になるため先にインストールします。
– libcurl
– SQLite3
– Digital Mars D Compiler (以降、DMD)

なお、OneDrive Free Clientは、現在GitHub上に以下の2つリポジトリがあります。
元々は1番目のリンク先がオリジナルだったみたいですが、どうやら現在はメンテナンスされておらず、2番目のリンク先が引き継いでいるようです。そのため、以降では2番目のリンクのものを使います。
1. OneDrive Free Client (by skilion)
2. OneDrive Free Client (by abraunegg)

まず、以下のコマンドでOneDrive Free Clientが動作に必要なパッケージをインストールします。

$ sudo apt install libcurl4-openssl-dev libsqlite3-dev


続いて、以下のコマンドでD言語とそのコンパイラであるDMDをインストールします。

$ curl -fsS https://dlang.org/install.sh | bash -s dmd
Downloading https://dlang.org/d-keyring.gpg
######################################################################## 100.0%
Downloading https://dlang.org/install.sh
######################################################################## 100.0%
The latest version of this script was installed as ~/dlang/install.sh.
It can be used it to install further D compilers.
Run `~/dlang/install.sh --help` for usage information.

Downloading and unpacking http://downloads.dlang.org/releases/2.x/2.081.1/dmd.2.081.1.linux.tar.xz
######################################################################## 100.0%
Using dub 1.10.0 shipped with dmd-2.081.1

Run `source ~/dlang/dmd-2.081.1/activate` in your shell to use dmd-2.081.1.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.


上記最後にRun `source ~/dlang/dmd-2.081.1/activate` in your shell to use dmd-2.081.1.という内容があり、これは以下のコマンドを実行せよという指示になりますので、指示通りに実行します。以下のコマンドでアクティベートします。

$ source ~/dlang/dmd-2.081.1/activate
(dmd-2.081.1)

すると、以下のようにターミナルのユーザ名の前にDMDのバージョンが表示されるようになります。(dmd-2.081.1)がdmdのバージョンです。これはよくRubyやPythonなどでも、ディレクトリ毎に使用するバージョンを切り替えることがあると思いますが、それと同じことになります。

(dmd-2.081.1)user@user:~$ 



この状態で、以降のステップを実行します。
ちなみに、以降の作業が終わったら、以下のようにdeactivateで非アクティベートできます。

(dmd-2.081.1)user@user:~$ deactivate
user@user:~$


DMDのインストールがうまくいかない場合

いくつか他のWebサイトを見ると、DMDのインストール方法として以下のコマンド実行が記載されていましたが、Ubuntu18.04で以下を実行すると、以下の様なエラーが表示されてしまいました。

$ sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list
sudo apt-get update && sudo apt-get -y --allow-unauthenticated install --reinstall d-apt-keyring
sudo apt-get update && sudo apt-get install dmd-compiler dub
W: GPG エラー: http://netcologne.dl.sourceforge.net/project/d-apt d-apt InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY EBCF975E5BA24D5E
E: リポジトリ http://netcologne.dl.sourceforge.net/project/d-apt d-apt InRelease は署名されていません。ubuntu status
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。


また、以下のようにパッケージ d-apt-keyring が見つかりませんというようなエラーも出ました。

$ sudo apt-get -y --allow-unauthenticated install --reinstall d-apt-keyring
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ d-apt-keyring が見つかりません


調べた結果、上記のコマンドはすでにメンテナンスされていないリポジトリに載っていた方法で、Ubuntu18.04ではうまくいかないようです。そのため、Ubuntu18.04の場合はすでに上に載せたcurlを使った方法を使ってみてください。どうやら2018年5月ぐらいに変更されたそうです。

OneDrive Free Clientのダウンロードとインストール

適当なディレクトリに移動して(以下ではホームディレクトリに移動)、git cloneでOneDrive Free Clientを持ってきます。

(dmd-2.081.1)user@user:~$ cd
(dmd-2.081.1)user@user:~$ cgit clone https://github.com/abraunegg/onedrive.git


続いてダウロードしてできたonedriveディレクトリに移動して、make

(dmd-2.081.1)user@user:~$ cd onedrive
(dmd-2.081.1)user@user:~/onedrive$ $ make
dmd -g -ofonedrive -O -L-lcurl -L-lsqlite3 -L-ldl -J. src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d
sed "s|@PREFIX@|/usr/local|g" systemd.units/onedrive.service.in > onedrive.service
sed "s|@PREFIX@|/usr/local|g" systemd.units/onedrive@.service.in > onedrive@.service


そしてmake installを実行します。

(dmd-2.081.1)user@user:~/onedrive$ sudo make install
mkdir -p /var/log/onedrive
chown root.users /var/log/onedrive
chmod 0775 /var/log/onedrive
install -D onedrive /usr/local/bin/onedrive
install -D -m 644 logrotate/onedrive.logrotate /etc/logrotate.d/onedrive
mkdir -p /usr/lib/systemd/user/
chown root.root /usr/lib/systemd/user/
chmod 0755 /usr/lib/systemd/user/
cp -raf *.service /usr/lib/systemd/user/
chmod 0644 /usr/lib/systemd/user/onedrive*.service


以上でOneDrive Free Clientのダウンロードとインストールは完了です。

初回起動時のアカウントログイン

初めてOneDrive Free Clientを起動すると、以下のように表示されたURLにアクセスするよう指示がでます。マイクロソフトアカウントにログインして認証するためのURLです。なお、OneDrive Free Clientは、以下のようにonedriveコマンドで起動します。

$ onedrive
Authorize this app visiting:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&scope=files.readwrite%20files.readwrite.all%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient

Enter the response uri: 


指示通りに表示されたURLにブラウザでにアクセスすると、以下のようにマイクロソフトアカウントのログイン画面がでるので、ユーザ名とパスワードを入力してログインします。

ログイン後、アクセスを許可するか聞かれるので「はい」をクリックします。

「はい」をクリックすると、以下のように真っ白なページにリダイレクトされます。これは正常でこの真っ白なページのURLをコピーします。 

コピーしたURLは以下のような形式になっていると思います。

https://login.microsoftonline.com/common/oauth2/nativeclient?code=xxxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxx


ターミナルに戻って、Enter the response uri: の後にコピーしたURLを貼り付けてEnterすると、以下のように表示されます。

$ onedrive
Authorize this app visiting:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&scope=files.readwrite%20files.readwrite.all%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient

## 以下の Enter the response uri: の後にコピーしたURLを貼り付けてEnter
Enter the response uri: https://login.microsoftonline.com/common/oauth2/nativeclient?code=xxxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxx

--synchronize or --monitor missing from your command options or use --help for further assistance

No OneDrive sync will be performed without either of these two arguments being present


これでインストールは完了です。以降に基本的な使い方を載せます。

OneDrive Free Clientの基本的な使い方

ローカルとリモートを同期する

以下で同期を開始します。なお、同期開始すると、ホームディレクトリにOneDriveという名前のディレクトリが作成されて、そこにOneDrive上のファイルが全てダウンロード開始されます。OneDrive上に大量のファイルがある場合は、ネット環境を確認してから実行したほうがいいと思います。

$ onedrive --synchronize
Initializing the Synchronization Engine ...
Syncing changes from OneDrive ..


指定したディレクトリのみ同期する

以下のように--single-directory dir_nameというように同期したいディレクトリを指定(以下ではdir_nameという名前のディレクトリを指定)すれば、そのディレクトリのみ同期されるようになります。

$ onedrive --synchronize --single-directory dir_name


リモート上の変更をダウンロードせず、ローカルの変更をアップロードのみ行う

以下のように--upload-onlyをつけると、ローカルの変更のアップロードのみ行います。

$ onedrive --synchronize --upload-only


用途としては、複数あるサーバのログをOneDrive上一箇所に同期して集めたい場合など有効かもしれません。複数ある各サーバのログを全てのサーバがそれぞれ保持する必要はないのでOneDrive上にあるファイルを各サーバがダウンロードして同期する必要はないものの、各サーバのログファイルをアップロードだけさせてOneDrive上に集めることができます。

OneDrive Free Clientのログファイル

公式サイトによると、ログファイルは/var/log/onedrive/というディレクトリ配下に作成されるそうですが、何故か私の環境では作成されず、ホームディレクトリ配下にonedrive.logという名前のファイルが作成されてそこにログが追記されていっています。このリポジトリが現在も頻繁に更新中なので、ここに記載した情報と異なっていく可能性高いです。また新しい情報があれば更新します。

OneDrive Free Clientのアンインストール方法

アンインストールする場合は、gitでクローンしてインストールしたonedriveのディレクトリに移動して、make uninstallを実行します。また、関連ファイルを削除します。

$ cd ~/onedrive
$ sudo make uninstall
$ rm -rf ~/.config/onedrive


まとめ

ここで載せたOneDrive Free Clientは、現在も頻繁に更新されておりこの記事の内容と変わってくる可能性高いです。また更新あれば修正、追記します。

SPONSORED LINK

この投稿へのコメント

  1. ゴロー said on 2018年7月28日 at 20:54

    こんばんわ。
    LinuxMint19でOnedriveを使いたくて検索していたところ、こちらの記事がとても参考になりました。
    ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL