Windows Subsystem for Linux(WSL)を使ったmac TimeMachineバックアップ環境の構築

## 前書き
macのバックアップといえば、Time Machineですが、バックアップ先として通常は、以下の選択肢となると思いいます。

- 外付けドライブを利用
- Time Machine のバックアップ先として共有されている Mac
- Time Machine対応のnasを利用
- AirMac Time Capsule
- Linuxでafp(netatalk)を利用
- ~~windows 共有ドライブを利用~~ 
  (macOS catalina10.15では利用できなくなっているように思います。)
  
我が家は元々Windowsの共有ドライブをファイル保存先としていたので、追加投資無しで、なんとかならないかと考え、Windows Subsystem for Linux(WSL) ＋ ubuntu + netatalkを試してみました。
また、VirtualBoxなどを利用したLinux環境も考えましたがWSLを利用した環境の方がリソースの無駄が少ないと判断しました。

## 1.試した環境
- windows10 home 64ビット  
    Microsoft Windows [Version 10.0.19041.208]
- Windows Subsystem for Linuxはubunts  
    VERSION="16.04.6 LTS (Xenial Xerus)"
- macOS    
    Catalina 10.15.4       

## 2.注意事項
予めWindowsにて、WSLを利用できるようにしておき、ubuntuをインストールしておきます。
更にubuntuを最新化します。
`$sudo apt-get update`
`$sudo apt-get upgrade`

## 3.ubuntuへのnetatalkのインストール

`$sudo apt-get install netatalk`
:
Do you want to continue? [Y/n] y
:

インストールが完了したら、netatalkのバージョンを確認します。
Timemachineを利用するには2.2以上のバージョンが必要です。

2系がインストールされた場合は
`$ afpd -v` 
3系がインストールされた場合は
`$ netatalk -v`

*私の環境ではいろいろとやっているうちに3系をインストールしてしまったようです。

２系の場合のメッセージ（以下は2.2.6が入っている）    
    
    afpd 2.2.6 - Apple Filing Protocol (AFP) daemon of Netatalk

    This program is free software; you can redistribute it and/or modify it under
    the terms of the GNU General Public License as published by the Free Software
    Foundation; either version 2 of the License, or (at your option) any later
    version. Please see the file COPYING for further information and details.

    afpd has been compiled with support for these features:

          AFP versions: 1.1 2.0 2.1 2.2 3.0 3.1 3.2 3.3
    DDP(AppleTalk) Support: Yes
         CNID backends: dbd last tdb

                 afpd.conf: /etc/netatalk/afpd.conf
       AppleVolumes.system: /etc/netatalk/AppleVolumes.system
      AppleVolumes.default: /etc/netatalk/AppleVolumes.default
        afp_signature.conf: /etc/netatalk/afp_signature.conf
          afp_voluuid.conf: /etc/netatalk/afp_voluuid.conf
             afp_ldap.conf: /etc/netatalk/afp_ldap.conf
           UAM search path: /usr/lib/netatalk/
      Server messages path: /etc/netatalk/msg/
                  lockfile: /var/run/afpd.pid

3系の場合のメッセージ（以下は3.1.11が入っている）    

    netatalk 3.1.11 - Netatalk AFP server service controller daemon

    This program is free software; you can redistribute it and/or modify it under
    the terms of the GNU General Public License as published by the Free Software
    Foundation; either version 2 of the License, or (at your option) any later
    version. Please see the file COPYING for further information and details.

    netatalk has been compiled with support for these features:

      Zeroconf support: Avahi
     Spotlight support: No

                  afpd: /usr/local/sbin/afpd
            cnid_metad: /usr/local/sbin/cnid_metad
              afp.conf: /usr/local/etc/afp.conf
    netatalk lock file: /var/lock/netatalk

※万が一、2.2より低いバージョンになっていた場合は、netatalkのサイトから最新ソースでインストールすることを考えていました。
 http://netatalk.sourceforge.net/

## 4.netatalkの設定
以下は、LinuxにマウントされているeドライブにTime Machine用フォルダを作成してバックアップ設定を行う例です。

### バックアップディレクトリの作成
`$ mkdir -p /mnt/e/timemachine/(ユーザ名)`

### 設定を変更するため、netatalkを停止する
`$ sudo service netatalk stop`
    
    Stopping Netatalk Daemons: afpd cnid_metad papd timelord atalkd.

### 設定の変更
`$ sudo vim /etc/netatalk/afpd.conf`

最後尾に以下を追記
    
    # for Timemachine
    - -tcp -noddp -uamlist uams_dhx.so,uams_dhx2_passwd.so -nosavepassword

`$ sudo vim /etc/netatalk/AppleVolumes.default`

最後尾あたりを以下のように編集

    #~/                     "Home Directory"		<- コメントアウト
	:
    # for TimeMachine
    /mnt/e/timemachine/(ユーザ名) "TimeMachine for (ユーザ名)" allow:(ユーザ名) cnidscheme:dbd volsizelimit:512000 options:usedots,upriv,tm

*ホームディレクトリは必要がないのでコメントアウトする
*volsizelimit = 容量制限のサイズ（512,000MiB = 500GiB）

## 5.netatalkの起動
`$ sudo service netatalk start`

    Starting Netatalk services (this will take a while):  cnid_metad afpd.

この際にwindowsファイアウォールからafpポートの開放を聞いてくるので、開放する

### ipアドレスの確認

`$ ip a`

    17: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 group default qlen 1
    link/ether XX:XX:XX:XX:XX:XX
    inet 192.168.0.XX/24 brd 192.168.0.255 scope global dynamic ← IPアドレスは192.168.0.XX
    :

## 6.macからの接続
finderからcommand + kでafpへ接続する

`afp://(サーバのIPアドレス)/`
または
`afp://(サーバのホスト名).local/`

id/passwordを聞いてくるので、bashのアカウントとパスワードを入力

システム設定変更 -> Time Machine -> ディスクを選択 -> 「TimeMachine for (ユーザ名)」を選択する
もし上手くいかない場合、下記の操作が必要かも知れない

macのターミナル.appから下記を実行

`$ defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1`

sudoは不要（Time Machineを設定するユーザ毎に実行する必要があるため）
設定後はOS再起動が必要
関係なかったら下記のコマンドで元に戻しておく

`$ defaults delete com.apple.systempreferences TMShowUnsupportedNetworkVolumes`

## 7.netatalk serviceの自動起動の設定

以下のコマンドをwindowsのタスクスケジューラに設定して自動起動するようにします。
［タスクスケジューラ］を開き、以下のコマンドを登録します。
トリガーはログイン時としました。

`bash.exe -c "sudo service netatalk start"`

上記のコマンドで自動起動しようとするとパスワードの入力が必要になるため、bashから以下の設定を実施

`$ sudo visudo`

最後尾へ以下を追記

    hogeuser ← 対象ユーザを設定 ALL=NOPASSWD: /usr/sbin/service

## 所感

約２６６GBのバックアップで１２時間程度掛かりました。
WSL2を利用するとIOが高速になるようなので、いつか時間ができたら試してみたいと考えています。

## 参考にしたサイト
- Time Machine で使えるバックアップディスク    
  https://support.apple.com/ja-jp/HT202784
- Timemachineバックアップ方法    
  https://gist.github.com/gb-swatanabe/2983a3e8d21ae44534b1    
  ※多くのコマンドを引用させていただきました。
- bashの自動起動方法    
https://blog.fileshelfplus.com/windows/157
- sudoでパスワードを不要にする方法    
    https://qiita.com/RyodoTanaka/items/e9b15d579d17651650b7