自宅のサーバーが古くなり、いつ故障してもおかしくない状況なので少しずつ移行をはじめています。新サーバーでは原則ルールとして Docker コンテナでの再構築に取り組んでいるため、それぞれの機能をメモしていこうと思います。
今回は Netatalk について。
Netatalk とは
netatalkはUnix系OS上でMac OSやOS Xに対してAFPによるファイルサーバの機能を提供するオープンソースのソフトウェアである。 かつてはAppleTalkも実装したが、この機能は削除された。
MacのローカルファイルシステムであるHFSやHFS+は、リソースフォークやFinder情報といったメタデータをもつ。更に最近のOS Xでは拡張属性 (EA)も扱う。netatalkは、こうしたApple独自のメタデータを完全に保存することを目的として設計されたファイルサーバソフトウェアである。 メタデータは可能な限りサーバ側のファイルシステムの拡張属性に保存する。これが出来ない場合は隠しファイルを作って保存する。 また、バックアップソフトウェアであるTime Machineの保存先として利用することもできる。
引用の通り、macOS 向けのファイル共有プロトコルです。Mac は賢いので Windows の共有フォルダ(SMB)も普通に使えるのですが、.DS_Store
といったゴミファイルが見えてしまったりと煩わしい点も若干あるので、より純粋なファイル共有プロトコルを採用します。
余談になりますが、自宅には一応Windowsもあるので、結局は Samba も構築することになります。
Docker Image の選定
ここでは Docker そのものの利用について触れません。docker run
や docker-compose up
のコマンドを用いたことがある方を想定しています。
Image を Dockerfile
で新規構築してもよいのですが、先人たちの優れたコンテナが登録されていることも多々あるため、まずは DockerHub で検索します。環境変数での設定可能箇所が多いほど、柔軟で使いやすいコンテナであることが多いです。
❯ docker search netatalk
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/odarriba/timemachine Lastest Netatalk with configurable user/pa... 22 [OK]
docker.io docker.io/cptactionhank/netatalk 13 [OK]
docker.io docker.io/cilix/netatalk Docker image designed to make it easy to h... 1 [OK]
docker.io docker.io/ironicbadger/build-netatalk3-debian Builds v3 of netatalk for Debian from source 1 [OK]
docker.io docker.io/r1kelsey/netatalk 1 [OK]
docker.io docker.io/chattaway/netatalk netatalk 0 [OK]
(2016/09/17 18:00現在)
Stars の数が一定数あるものを選びます。必ずしも Star が多からよいというわけではなく、少ないものでも日が浅いだけで高品質なものが埋もれている可能性はありますが、品質を測る一定の目安にはなるはずです。
一番多い odarriba/timemachine
は timemachine 目的に特化しているみたいなので、今回選定対象からは外しました。そして選択したのがこちら。
下記の通り docker-compose.yml
を作成したところ、正常に動作しました。
docker-compose.yml:
version: '2'
services:
netatalk:
image: cptactionhank/netatalk:latest
container_name: netatalk
network_mode: host
env_file: credential.env #パスワード系のファイルは外部に
environment:
- AVAHI=1
ports:
- "548:548"
volumes:
- /your/media/path:/media/share
restart: always
credential.env (docker-compose.yml の中に書いても構いません):
AFP_USER=username
AFP_PASSWORD=password
AFP_UID=1000
AFP_GID=1000
Netatalk 動作仕様の簡単なメモ
- デフォルト設定 (afp.conf) では、
/media/share
のみが共有されるようになっています - 1組(のみ?)のユーザーID/パスワードを環境変数で設定しなければ動作しません
- 標準設定では不足する場合、
/etc/afp.conf
を volume mount (-v) で置換することで自由に設定可能です
凝った使い方をしなければこれだけで十分な気がします。
コンテナ設定のポイント
- 環境変数にて
AVAHI=1
を設定すると Auto Discovery が有効になります。Finderの左メニューに「共有」として自動検出されるものです。 network_mode: host
オプションにて、ホストマシンの Interface に bind します。これをせずに通常の起動でコンテナの仮想NICに bind した場合、avahi による Auto Discovery が機能しません。-
この時、Finderから「サーバへ接続(Command + K)」を選択してホストマシンのIPアドレス指定 (afp://IP_Address/) すれば接続することはできますが不便です。
-
まとめ
DockerHub のイメージを利用して簡単に Mac ファイル共有サーバーを作成しました。なお、この方法で作成したネットワークパスを TimeMacahine 保存場所としても利用できるはずです。
参考リンク
GitHub - cptactionhank/docker-netatalk: Docker container running Netatalk