LinuxでOneDriveを利用できるようにします。ubuntu22.04にインストールしてあるdockerを使用して実現します。通常のインストール方法は以前記事にしました。
githubの説明を参考にして進めます。OneDriveの設定が保存されるvolumeを作成するとあります。
docker volume create onedrive_conf
ここでは、volumeを作成するコマンドは使用しないことにして、自分で指定することにします。このコマンドを使用するとデフォルトでは、下記のディレクトリにvolumeが作成されます。
/var/lib/docker/volumes
次に環境変数の設定をして、これを元にディレクトリを作成します。また、潜在的なユーザーまたはグループの競合を回避するために、コマンド出力で指定された実際のUIDおよびGIDを置き換えることにします。
ONEDRIVE_DATA_DIR→OneDriveのデータを格納するディレクトリ。
ONEDRIVE_CONF_DIR→OneDriveのコンフィグやOneDrive認証で生成されたトークンなどが含まれるディレクトリ。
export ONEDRIVE_CONF_DIR="/root/onedrive/conf"
export ONEDRIVE_DATA_DIR="/root/onedrive/data"
mkdir -p ${ONEDRIVE_CONF_DIR}
mkdir -p ${ONEDRIVE_DATA_DIR}
export ONEDRIVE_UID=`id -u`
export ONEDRIVE_UID=`id -g`
準備ができたのでdockerコマンドを入力します。
docker run -it --name onedrive \
-v "${ONEDRIVE_CONF_DIR}:/root/onedrive/conf" \
-v "${ONEDRIVE_DATA_DIR}:/root/onedrive/data" \
-e "ONEDRIVE_UID=${ONEDRIVE_UID}" \
-e "ONEDRIVE_GID=${ONEDRIVE_GID}" \
driveone/onedrive:latest
エラーが発生しました。
usermod: no changes
ROOT level privileges prohibited!

ディレクトリの所有権を変更してもエラーは直りませんでした。仕様なので一般ユーザーで作業することにします。
例:chown -R www-data:www-data /root/onedrive
起動しないコンテナを削除します。
docker rm onedrive
一般ユーザーをdockerのメンバーにします。念のため確認もします。
usermod -aG docker mamushi
cat /etc/group | grep docker
メモ:グループから除外するには次のコマンドを入力します。
gpasswd -d mamushi docker
rootからログアウトします。
exit
SSH接続したユーザーに切り替わりました。同様にして環境変数を定義してdockerコマンドを入力します。
export ONEDRIVE_CONF_DIR="${HOME}/onedrive/conf"
export ONEDRIVE_DATA_DIR="${HOME}/onedrive/data"
mkdir -p ${ONEDRIVE_CONF_DIR}
mkdir -p ${ONEDRIVE_DATA_DIR}
export ONEDRIVE_UID=`id -u`
export ONEDRIVE_UID=`id -g`
docker run -it --name onedrive \
-v "${ONEDRIVE_CONF_DIR}:/home/mamushi/onedrive/conf" \
-v "${ONEDRIVE_DATA_DIR}:/home/mamushi/onedrive/data" \
-e "ONEDRIVE_UID=${ONEDRIVE_UID}" \
-e "ONEDRIVE_GID=${ONEDRIVE_GID}" \
driveone/onedrive:latest
うまくいくとURLが表示されるので、これをブラウザにコピペしてアクセスします。

マイクロソフトのログイン画面が表示されるので、使用したいOneDriveを含むアカウント情報を入力します。

空白のページが表示されます。この空白のページのURLをメモしておきます。

このURLを先のDockerコマンドを入力して表示されているレスポンスURLの所に貼り付けます。
