WSL2(Ubuntu)上でDropboxを使う方法


WSLに何らかのクラウドストレージを同期させたいと思い、Linux CUI環境で利用する手段を公式が用意してくれているDropboxを選択しました。
基本的には以下にある参考記事の通りなんですが、WSLでやるとなると何かと手順が増えるので備忘録を兼ねて記事にしました。

参考記事：[Dropbox を Linux (CUI環境)で利用する](https://tm.root-n.com/server:dropbox:etc:dropbox_on_linux)
# 前提
WSL自体は現時点(2022/12/16)で最新のバージョン(1.0.3.0)にしています。バージョンが古い場合は`wsl  --update`してください。
ディストリビューションは Ubuntu 22.04 を使用しています。
<details>
<summary> 動作確認環境の詳細 </summary>

```
C:\>wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
 ---　以下省略　---
```
```bash
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
```
</details>

# ブラウザのインストール
WSL上のUbuntuからDropboxのアカウントにログインするために何らかのブラウザが必要です。
もうすでにWSLにブラウザがある場合はこのセクションは飛ばしてください。
方法は色々とあると思いますが、今回はMicrosoftのサイトの[ドキュメント](https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/gui-apps#install-google-chrome-for-linux)にあったChromeのインストール方法がシンプルかつ分かりやすかったのでそれを採用しました。
```
cd /tmp
sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt install --fix-broken -y
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
無事インストールできたら以下のコマンドでChromeが立ち上がるはずです。
```
google-chrome
```
最初に起動するとデフォルトのブラウザにするかと聞かれると思うので、そのように設定してください。


# Dropbox daemon のインストール
起動させると特定ディレクトリのファイルを同期してくれるDropbox daemonをインストールします。[Dropbox公式](https://www.dropbox.com/install-linux)のものです。
```
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
```
以下コマンドで起動開始されます。
```
~/.dropbox-dist/dropboxd
```
デフォルトのブラウザでDropboxのログインをしていない状態だとブラウザが開いてログインを求められます。
無事ログインできればホームディレクトリに「`Dropbox`」というディレクトリが作成されてその中でファイルが同期できているはずです。

# Dropbox管理コマンドのインストール
dropboxをCUI環境で使用するのに色々と便利な管理コマンド(dropbox.py)をインストールします。これも[公式](https://www.dropbox.com/install-linux)が出しているやつです。
同期の開始や停止、ステータスの確認、同期対象の除外などができます。
下のコマンドでインストールできます。
```
wget -O dropbox.py "http://www.dropbox.com/download?dl=packages/dropbox.py"
chmod a+x dropbox.py
```
↓動作確認
```
$ ./dropbox.py help
Dropbox command-line interface

commands:
--- 以下省略 ---
```
# Dropboxの自動起動設定
WSLを起動するたびにdropboxを起動させるのは面倒なので、`systemd`を用いてDropboxの自動起動設定を行います。
## systemdプロセスを使えるようにする
このセクションは少し本題から逸れます。
`systemctl`コマンドを実行して以下のようなエラーが返ってくる場合はここで説明する設定を行ってください。問題なく動く場合はスキップしてください。
```
$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
```
これを解決する手順は[Microsoft公式](https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/)にあります。
まず、`/etc/`下に`wsl.conf`を以下のように作成or編集します。
```
sudo vim /etc/wsl.conf
```
```conf:wsl.conf
[boot]
systemd=true
```
その後、Ubuntuから一旦抜けて、WSLディストリビューションの再起動を行います。
```
C:\>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
C:\>wsl -t Ubuntu
この操作を正しく終了しました。
C:\>wsl -d Ubuntu
```
これで`systemctl`が使えるようになっているはずです。

## 自動起動の有効化
`dropbox.service`というファイルを設定します。
```
sudo vi /lib/systemd/system/dropbox.service
```
<ユーザー名>には現在のlinux userの名前を指定してください
```:dropbox.service
[Unit]
Description=Dropbox Daemon

[Service]
User=<ユーザー名>
WorkingDirectory=/home/<ユーザー名>/
Type=forking
ExecStart=python3 /home/<ユーザー名>/Dropbox/dropbox.py start
Restart=always

[Install]
WantedBy=multi-user.target
```
以下コマンド有効化、そして起動できます。
```
sudo systemctl daemon-reload
sudo systemctl enable dropbox
sudo systemctl start dropbox
```
↓確認
```
systemctl status dropbox.service
```
これでWSLが起動すると自動でDropboxの同期を開始してくれるようになっていると思います。

---
### 最後に
今年9月にWSLでSystemdのサポートが開始されたりとWSLの有用性がかなり上がってきているなと言う印象ですね。無限の可能性を感じてしまいます。