Linux に Time Machine 用バックアップサーバを構築する

Linux に Time Machine 用バックアップサーバを構築する

Netatalk で AFP ファイル共有サーバを構築

Mac を使う上で最も簡単なバックアップ方法は Time Machine を利用した方法ですが、Time Machine のすべての機能を使用するためには、Apple Time Capsule などの Time Machine 対応製品を購入する必要があります。

しかし、Unix 上でオープンソースのソフトウェアとして提供されている「Netatalk」で AFP 共有サーバを構築することで Time Machine の機能を全て利用することができます。

今回は CentOS 6 に「Netatalk」をインストールします。

まず、Mac はメタデータ、リソースフォークなどの独自のファイル管理機能を持つため、Linux 側のファイルシステムをファイルやディレクトリのメタ情報を柔軟に設定する拡張ファイル属性(extended attributes(EA))を有効にして、マウントしなければなりません。

また、複数の Mac や Windows で使用することを考えると、ユーザ毎にディスクの使用量に制限を掛けた方がよいため、ディスククォータ機能も有効にしてマウントします。

ルートファイルシステムはディスククォータ機能を有効にできないことと、管理を容易にするため、今回は AFP ファイル共有サーバ用のファイルシステムを作成してから進めます。

こちらのサイトで丁寧に解説されているので、参考にさせていただきました。

http://www003.upp.so-net.ne.jp/hat/netatalk/andsamba.html

Source Forge の Netatalk のドキュメントも参考になります。(英語ですが)

http://netatalk.sourceforge.net/3.1/htmldocs/

1. Netatalk 用新規ファイルシステムを作成

Netatalk で使用するファイルシステムを作成します。Gparted などの GUI ツールや fdisk, parted で作成しましょう。使用中のディスクに余裕がなければ、既存のファイルシステムを縮小する必要があります。

ここで作成した新規ファイルシステムのデバイス名は覚えておきましょう。(/dev/sdb2 など)

2. 作成したファイルシステムを拡張ファイル属性、ディスククォータを有効にしてマウント

まず、作成したファイルシステムの UUID を確認します。ここで先ほど確認したデバイス名から UUID を見つけます。

#blkid で新規ファイルシステムの UUID を確認
blkid | grep /dev/sdb2
/dev/sdb2: UUID="ac0d9c56-0d7d-407e-8725-b619379f33ac" TYPE="ext4"

マウントディレクトリを作成します。

#マウントするディレクトリを作成
mkdir -p /mntp/AFP_disk

/etc/fstab に拡張ファイル属性、ディスククォータを有効にしてマウントするよう追記します。

/etc/fstab の最終行に以下を追加

UUID=ac0d9c56-0d7d-407e-8725-b619379f33ac /mntp/AFP_disk ext4 defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,user_xattr 1 2

マウントします。

#/etc/fstab に記述されたすべてのファイルシステムをマウント
mount -a

マウントオプションが有効になっているか確認します。

#マウントオプションが有効になっているか確認
mount | grep /dev/sdb2

以下のようになっていれば OK

/dev/sdb2 on /mntp/AFP_disk type ext4 (rw,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,user_xattr)

 

2. Netatalk をインストール

まず、Netatalk をインストールに必要なソフトウェア、ライブラリをインストールします。

下記のソフトウェア、ライブラリが必要となります。

  • Berkeley DB
  • Libgcrypt

また、必須ではありませんが、下記のソフトウェア、ライブラリも利用できます。

  • Avahi or mDNSresponderPOSIX for Bonjour (aka Zeroconf)

Bonjour 用のデーモンです。Bonjour を有効にしておくと、かなり便利なため強く推奨します。

  • Tracker for Spotlight support

Spotlight で検索できるようになります。CentOS ではパッケージが配布されていないそうです。

  • libacl-devel

ACL 関連のライブラリです。

今回は、Time Machine 専用で使うので Tracker はインストールせず、Berkeley DB、Libgcrypt、Avahi、libacl-devel のインストールを行います。最初からインストールされていれば不要です。

 

Berkeley DB のインストール

yum でインストールします。

#db4-devel のインストール
yum install db4-devel

Libgcryptのインストール

yum でインストールします。

#libgcrypt-devel をインストール
yum install libgcrypt libgcrypt-devel

Avahi deamon のインストール

yum でインストールします。

#avahi のインストール
yum install avahi nss-mdns avahi-tools avahi-devel

Zeroconf に対応させるために、avahi-devel、nss-mdns と avahi-tools も入れておきます。

libacl-devel のインストール

yum でインストールします。

#libacl-devel のインストール
yum install libacl-devel

quota-devel のインストール

yum でインストールします。

#libacl-devel のインストール
yum install quota-devel

 

Netatalk のソースファイルのダウンロード

続いて、任意のディレクトリにソースファイルをダウンロードします。最新版はhttp://netatalk.sourceforge.net で公開されています。

#Netatalk のソースファイルをダウンロード
wget -O netatalk-3.1.1.tar.gz 'http://downloads.sourceforge.net/project/netatalk/netatalk/3.1.1/netatalk-3.1.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fnetatalk%2Ffiles%2Fnetatalk%2F3.1.1%2F&ts=1400944545&use_mirror=jaist'

ダウンロードしたソースファイルを解凍します。

#ソースファイルを解凍
tar xzvf ./netatalk-3.1.1.tar.gz

Configure とインストール

./configure で設定します。基本的にライブラリはインストールされていれば自動で認識して有効化されるみたいです。今回は自動で認識しないオプションをつけておきます。

cd ./netatalk-3.1.1
./configure 
--with-init-style=redhat-sysv 
--with-pam-confdir=/etc/pam.d 
--with-dbus-sysconf-dir=/etc/dbus-1/system.d

configure を実行して表示された結果の Configure summary を確認し、自分が有効にしたオプションが有効になっているか確認します。

Configure summary:
    INIT STYLE:
         redhat-sysv
    AFP:
         Extended Attributes: ad | sys
         ACL support: yes
         Spotlight: no
    CNID:
         backends:  dbd last tdb mysql
    UAMS:
         DHX     ( SHADOW)
         DHX2    ( SHADOW)
         RANDNUM (afppasswd)
         clrtxt  ( SHADOW)
         guest
    Options:
         Zeroconf support:        yes
         tcp wrapper support:     no
         quota support:           yes
         admin group support:     yes
         valid shell check:       yes
         cracklib support:        no
         ACL support:             auto
         Kerberos support:        yes
         LDAP support:            no
         AFP stats via dbus:      no
         dtrace probes:           no
    Paths:
         Netatalk lockfile:       /var/lock/netatalk
         init directory:          /etc/rc.d/init.d
    Documentation:
         Docbook:                 no

 

Configure がうまく成功していれば、make して、インストールします。

#ビルド
make
#インストール
make install

 3. Netatalk の設定

AFP の設定

デフォルトでは、/usr/local/etc/afp.conf にあります。しかし、これでは少々使い難いので、/etc にリンクを貼っておきましょう。

#/etc/afp.conf で編集できるようにする
ln -s /usr/local/etc/afp.conf /etc/afp.conf

デフォルトの設定は以下のようになっています。

;
; Netatalk 3.x configuration file
;
[Global]
; Global server settings
; [Homes]
; basedir regex = /xxxx
; [My AFP Volume]
; path = /path/to/volume

今回はログの設定と、Time Machine 用の設定を行います。

ログの設定

※設定しなければ syslog にログが出力されます。

[Global]
log file = /var/log/netatalk.log

 Time Machine 用設定

上のほうで Time Machine 用に作成したファイルシステムのパスを指定します。また、Time Machine 機能を有効にします。

[My Time Capsule]
path = /mntp/AFP_disk
    time machine = yes

また、ファイヤーウォールに TCP  548 ポートを公開するよう設定します。

#TCP 548 ポートを公開するよう登録
iptables -A INPUT -p tcp -m tcp --dport 548 -j ACCEPT

 

また、avahi-daemon を使って Bonjour で配信するために、ファイヤーウォールに UDP  5353 ポートを公開するよう設定します。

#UDP 5353 ポートを公開するよう登録
iptables -A INPUT -p udp -m udp --dport 5353 -j ACCEPT

 

4. Netatalk の起動、停止

configure する際に 「–with-init-style= 」オプションを入れている場合、使用している OS に合わせたスクリプトファイルが作成されています。

起動、停止は service コマンドや /etc/init.d/netatalk を利用します。

#Netatalk の起動
service netatalk start

#Netatalk の停止
service netatalk stop

5. Time Machine でバックアップできる確認

まずは、Finder で AFP ボリュームに接続できるか確認します。もし、Bonjour で表示されない場合、Finder の「サーバへ接続」から接続します。⌘+K で接続できます。

ユーザ認証は Linux ユーザアカウントで認証します。

 

netatalk_time_machine3

接続できれば、「システム環境設定」から「Time Machine」を開き、「ディスクを選択」をクリックします。

netatalk_time_machine1

利用可能なディスクに AFP ボリュームが表示されていることを確認し、選択して「ディスクを使用」をクリックして、Time Machine バックアップが可能か確認します。

netatalk_time_machine2