💿

Ubuntu 22.04 でOneDriveを使う

2022/06/23に公開

はじめに

Ubuntu 22.04 でOneDriveを使うための必要なことをまとめてみます。
基本的にGithubのドキュメントを抜粋してコピーしただけです。

Configuration and Usage of the OneDrive Free Client

環境

Ubuntu 22.04 LTS

Install

以下のコマンドを実行

wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list
sudo apt-get update
sudo apt install onedrive

認証

onedriveコマンドを引数なしで実行する
そうするとブラウザが立ち上がり指示に従う。
最後に空白のページが表示されるのでそのURLをコマンド("Enter the response uri:")に渡す。

$ onedrive
Authorize this app visiting:

https://.....

Enter the response uri:

コマンド

onedrive --display-config # 設定の表示
onedrive --synchronize # 同期の開始
onedrive --synchronize --local-first # as the 'source of truth
onedrive --synchronize --single-directory '<dir_name>' # 1つのディレクトリのみ同期
onedrive --synchronize --download-only # ダウンロードのみの同期
onedrive --synchronize --upload-only # アップロードのみの同期
onedrive --synchronize --upload-only --no-remote-delete # アップロードのみでローカルになりファイルを削除しない
onedrive --synchronize --verbose # 詳細ログの表示

ログの設定

--enable-loggingを渡すと/var/log/onedrive/にログが書き込まれる。
アクセス権限が必要。
以下のようなコマンドで設定する。

sudo mkdir /var/log/onedrive
sudo chown root.users /var/log/onedrive
sudo chmod 0775 /var/log/onedrive

アカウントがusersグループに所属している必要がある。
確認して所属してないようならば、追加する。

cat /etc/group | grep users # 確認
sudo usermod -a -G users <your-user-name> # 追加

独自のディレクトリにログを保存したい場合は、~/.config/onedrive/configを以下の様に修正する。

~/.config/onedrive/config
log_dir = "/path/to/location/"

再認証

パスワードを変更するなどして再認証が必要になった場合は、以下を実行する。

  1. サービスで同期している場合は、停止する。
  2. onedrive --reauth

設定

設定ファイルは、以下のどちらかに置く

  • '~/.config/onedrive'
  • '/etc/onedrive'

デフォルトのひな型を取ってくる場合は、以下のようなコマンドを実行する。

mkdir -p ~/.config/onedrive
wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/onedrive/config
nano ~/.config/onedrive/config

sync_dir

同期先のディレクトリを指定する。
デフォルトでは、"~/OneDrive"が同期されるようになる。
これの設定を変えた場合は、onedrive --synchronize --resyncを実行する。

~/.config/onedrive/config
sync_dir="~/MyDirToSync"

skip_dir

同期から除外するディレクトリをWindowsのワイルドキャラクターで指定できる。
sync_dirからの相対パス。
設定ファイルに複数回登場しても良い。
これの設定を変えた場合は、onedrive --synchronize --resyncを実行する。

~/.config/onedrive/config
skip_dir = "SomeDir|OtherDir|ThisDir|ThatDir"
skip_dir = "/Path/To/A/Directory"
skip_dir = "/Another/Path/To/Different/Directory"

skip_file

同期から除外するディレクトリをWindowsのワイルドキャラクターで指定できる。
設定ファイルに複数回登場しても良い。
これの設定を変えた場合は、onedrive --synchronize --resyncを実行する。

~/.config/onedrive/config
skip_file = "~*|.~*|*.tmp|*.swp"
skip_file = "*.blah"
skip_file = "never_sync.file"

skip_dotfiles

"true"に設定すると.から開始されるファイルとフォルダを除外する。

~/.config/onedrive/config
skip_dotfiles = "true"

monitor_interval

--monitorで起動している場合の同期の間隔を秒数で指定する。

~/.config/onedrive/config
monitor_interval = "600"

monitor_fullscan_frequency

--monitorで起動している場合に、同期を何回実行した後にデータのフルスキャンを実行するか指定する。

以下のような場合は、300秒*24回で120分毎にフルスキャンされる。

~/.config/onedrive/config
monitor_interval = "300"
monitor_fullscan_frequency = "24"

--synchronizeの場合は、すべてフルスキャンされるのでこの設定は無効になる。

min_notify_changes

通知を実行するまでに、何個の変更が必要かを設定する。

~/.config/onedrive/config
min_notify_changes = "5"

operation_timeout

タイムアウトと見なすまでの秒数を指定する。

~/.config/onedrive/config
operation_timeout = "3600"

シムリンクの取り扱いを決める。

  • "true": シムリンクをアップロードしない。
  • "false": リンク先の実体をアップロードする。
~/.config/onedrive/config
skip_symlinks = "false"

sync_listファイル

特定のディレクトリとファイルのみを同期させたい場合に、~/.config/onedrive/sync_listを作成する。

*はワイルドキャラクターを表す。
! or -が先頭につくとその項目を除外する。

これの設定を変えた場合は、onedrive --synchronize --resyncを実行する。

~/.config/onedrive/sync_list
# sync_list supports comments
#
# The ordering of entries is highly recommended - exclusions before inclusions
#
# Exclude temp folders under Documents
!Documents/temp*
# Exclude my secret data
!/Secret_data/*
#
# Include my Backup folder
Backup
# Include Documents folder
Documents/
# Include all PDF documents
Documents/*.pdf
# Include this single document
Documents/latest_report.docx
# Include all Work/Project directories
Work/Project*
notes.txt
# Include /Blender in the ~OneDrive root but not if elsewhere
/Blender
# Include these names if they match any file or folder
Cinema Soc
Codes
Textbooks
Year 2
~/.config/onedrive/sync_list
# sync_list supports comments
#
# The ordering of entries is highly recommended - exclusions before inclusions
#
# Exclude temp folders under Documents
!Documents/temp*
# Exclude my secret data
!/Secret_data/*
#
# Include everything else
/*

sync_listで同期を制御している場合に、sync_dirにファイルを追加・削除するとsync_listを修正する必要がある。
その手間を軽減したい場合は、~/.config/onedrive/configに以下を設定すると、強制的にsync_dirが同期されるようになる。

~/.config/onedrive/config
sync_root_files = "true"

.nosync

ディレクトリを同期から外したい場合は、

  • ~/.config/onedrive/configskip_dirを設定する
  • ~/.config/onedrive/sync_listを作成する

の2種類がある。

その他、.nosyncという名前の空のファイルをディレクトリに置く事でも実現できる。
.nosyncファイルを置いたら、コマンドラインで--check-for-nosyncを渡すか、~/.config/onedrive/configに以下を設定する。

~/.config/onedrive/config
check_nosync = "true"

再同期 --resync

以下を変更した場合は、--resyncが必要になる。

  • sync_dir
  • skip_dir
  • skip_file
  • drive_id
  • sync_list

--resyncが必要かどうかは、--display-sync-statusで確認できる。
--resyncを実行すると場合によってはデータが失われるのでバックアップを取る。

サービスとして実行する

サービスとして実行するには、例えば以下の3つの方法で実現できる。

  • init.d
  • systemd
  • runit

init.d

サービスを登録・実行する。

chkconfig onedrive on
service onedrive start

ログを見るならば、以下を実行する。

tail -f /var/log/onedrive/<username>.onedrive.log

systemd

サービスを登録・実行する。

su - root
systemctl --user enable onedrive
systemctl --user start onedrive

ログを見るならば、以下を実行する。

journalctl --user-unit=onedrive -f

Discussion