Ubuntu 22.04 でOneDriveを使う
はじめに
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
を以下の様に修正する。
log_dir = "/path/to/location/"
再認証
パスワードを変更するなどして再認証が必要になった場合は、以下を実行する。
- サービスで同期している場合は、停止する。
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
を実行する。
sync_dir="~/MyDirToSync"
skip_dir
同期から除外するディレクトリをWindowsのワイルドキャラクターで指定できる。
sync_dir
からの相対パス。
設定ファイルに複数回登場しても良い。
これの設定を変えた場合は、onedrive --synchronize --resync
を実行する。
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
を実行する。
skip_file = "~*|.~*|*.tmp|*.swp"
skip_file = "*.blah"
skip_file = "never_sync.file"
skip_dotfiles
"true"
に設定すると.
から開始されるファイルとフォルダを除外する。
skip_dotfiles = "true"
monitor_interval
--monitor
で起動している場合の同期の間隔を秒数で指定する。
monitor_interval = "600"
monitor_fullscan_frequency
--monitor
で起動している場合に、同期を何回実行した後にデータのフルスキャンを実行するか指定する。
以下のような場合は、300秒*24回で120分毎にフルスキャンされる。
monitor_interval = "300"
monitor_fullscan_frequency = "24"
--synchronize
の場合は、すべてフルスキャンされるのでこの設定は無効になる。
min_notify_changes
通知を実行するまでに、何個の変更が必要かを設定する。
min_notify_changes = "5"
operation_timeout
タイムアウトと見なすまでの秒数を指定する。
operation_timeout = "3600"
skip_symlinks
シムリンクの取り扱いを決める。
-
"true"
: シムリンクをアップロードしない。 -
"false"
: リンク先の実体をアップロードする。
skip_symlinks = "false"
sync_list
ファイル
特定のディレクトリとファイルのみを同期させたい場合に、~/.config/onedrive/sync_list
を作成する。
*
はワイルドキャラクターを表す。
!
or -
が先頭につくとその項目を除外する。
これの設定を変えた場合は、onedrive --synchronize --resync
を実行する。
# 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
# 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
が同期されるようになる。
sync_root_files = "true"
.nosync
ディレクトリを同期から外したい場合は、
-
~/.config/onedrive/config
にskip_dir
を設定する -
~/.config/onedrive/sync_list
を作成する
の2種類がある。
その他、.nosync
という名前の空のファイルをディレクトリに置く事でも実現できる。
.nosync
ファイルを置いたら、コマンドラインで--check-for-nosync
を渡すか、~/.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