Linux OneDrive利用手順

概要

GitHubで公開されているLinux上でOneDriveを利用できるソフトウェアのインストール手順について記載します。
対象のGithub URL

実装方法

  • Podmanコンテナで実装する。

  • 環境はRocky Linux 8

本体のGithubの手順だと一部上手くいかなかったため成功した手順を記載する。

1.Podman環境変数の設定

OneDriveを使いたい一般ユーザーで作業を行う。

export ONEDRIVE_DATA_DIR="${HOME}/OneDrive"
export ONEDRIVE_CONF_DIR="${HOME}/.config/onedrive"
export ONEDRIVE_UID=`id -u`
export ONEDRIVE_GID=`id -g`

ONEDRIVE_DATA_DIRで指定するのは、OneDriveで本体データを格納する先を指定する。

ONEDRIVE_CONF_DIRで指定するのは、OneDriveのコンフィグやOneDrive認証で生成されたトークンなどが入るディレクトリを指定する。
GitHubのドキュメントだと設定しなくてもいいようなのですが、私の環境だとうまくいかなかったので指定しています。

Onedrive データ連携ディレクトリの作成

mkdir -pv ${ONEDRIVE_DATA_DIR}
mkdir -pv ${ONEDRIVE_CONF_DIR}

Onedirve Podamanを初回起動する。

podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \
-v "${ONEDRIVE_CONF_DIR}:/onedrive/conf:U,Z" \
-v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \
-e PODMAN=1 \
--userns=keep-id \
--label "io.containers.autoupdate=image" \
docker.io/driveone/onedrive:latest

コンテナが正常にビルドされるとOneDrive認証設定に移行する。

Authorize this app visiting:

### 以下のURLをブラウザにコピー&ペーストして通常通りMicrosoftのアカウント認証を行う。
### 実行毎で変わると思うので各自出力された値をブラウザにいれる。
https://login.microsoftonline.com/common/oauth2/v2.0/XXXXXXX=https://login.microsoftonline.com/common/oauth2/nativeclient
### Microsoftの認証が完了すると最後に白い画面になるのでその画面のURLを以下のコピーしてエンターを押す。
Enter the response uri: 

成功すると以下の出力が出てくる。

Application has been successfully authorised, however no additional command switches were provided.

Please use --help for further assistance in regards to running this application.

そして成功するとそのままオンラインデータのダウンロードが始まるのでCtrl+p, Ctrl+qで コンテナから離脱する

2.OneDriveイメージのブート起動

OneDriveをシステムブートと合わせて起動するように設定します。

systemd 用のUnitファイルを作成

cd /tmp
podman generate systemd --new --restart-policy on-failure --name -f onedrive

以下のようにUnitファイルが生成されます。

/tmp/container-onedrive.service

Sudo実行ユーザーでの作業

生成したUnitファイルをsystemdのuserディレクトリへ移動させてsystemdデーモンを再読み込みさせる

sudo cp -ivZ /tmp/container-onedrive.service /usr/lib/systemd/user/
sudo systemctl daemon-reload

一般ユーザー権限でOneDriveのsystemdを起動する。

生成したUnitファイルを所定のディレクトリに移動できたらOneDriveを実行したいユーザーに戻り以下のコマンドを実行する。

systemctl --user enable container-onedrive.service

Podmanコマンドで起動しているOneDriveコマンドを一旦停止してサービスとして起動する

podman stop -f name=onedrive
systemctl --user start container-onedrive

サービス起動を確認

systemctl --user status container-onedrive.service
podman ps -f name=onedrive

サービスの停止する場合は以下の通り

systemctl --user stop container-onedrive

3. Podmanイメージの自動アップデート

podman-auto-update.timerブート起動に設定

systemctl --user enable podman-auto-update.timer

podman-auto-update.timerを起動

systemctl --user start podman-auto-update.timer
systemctl --user status podman-auto-update.timer

autoupdate ラベルが付いたコンテナは、次にスケジュールされたタイマーで更新されます

systemctl --user list-timers --all

Podmanを使う事で結構簡単にRootless環境でOneDriveを実行出来るようになったのでセキュリティと構築の容易さはとても上がったと感じます。

以上、利用予定の方の役にやてば幸いです。

この記事が気に入ったらサポートをしてみませんか?