X

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 ユーザアカウントで認証します。

 

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

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

 

 

 

 

 

 

View Comments (11)

  • 使っているのはおそらくCentOS 6だと思いますが、そもそもCentOS 6にはTrackerパッケージがないと思います。

    quotaを想定しているのに、Configure summaryで
    quota support: no
    になっているのはマズイです。
    たぶんquota-develがインストールされていません。

    設定ファイルのインストール場所を変更したいなら、configureオプションで--sysconfdir=を使います。

    Configure summaryで、
    Zeroconf support: yes
    になっているので/etc/avahi/services/afpd.serviceを用意する必要はありません。
    自動的に宣伝されます。宣伝するホスト名を変更したい場合はafp.confの[Global]セクションでhostname = を使います。

    起動にservice netatalk startを使っているのに、停止にservice netatalk stopを使わないのは不自然です。

    • コメントありがとうございます。
      ご指摘していただいた点について回答させていただきます。

      1.今回インストールしたOSは仰るとおり CentOS6 です。
      Tracker については事前に調べてみたんですが、確かにパッケージが見当たりませんでした。今回は必要じゃなかったので、紹介だけにしとくつもりだったんですが、書き方が悪かったですね。記事中の文章を修正しました。

      2.quota については、仰るとおり Configure summary のところが quota support: no になっておりました。quota-devel は最後にインストールしまして、間違って quota-devel をインストールする前の結果を更新せずに載せておりました。修正させていただきました。また、quota-devel についても追記しています。

      3.設定ファイルの場所は確かにコンパイルする際に指定すればいいのですが、リンク貼るのが癖になっているのでこういう書き方をしました。

      4.Zeroconf についてですが、自分の環境ではなかなか Bonjour で見えてこなかったので、avahi の方の設定を行いました。何が原因か探ってみたいと思います。

      5.起動、停止のコマンドは仰るとおりです。単純なミスなので修正しました。

      コメントを頂いて HAT さんのサイトを拝見させていただいていただきましたが、大変丁寧に解説されていらっしゃり、とても参考になりました。
      誠に勝手ですが、参考 URL としてご紹介させていただきました。
      私自身、Netatalk をインストールするのは初めてで、メモ感覚で記事を書いていたため、間違いがたくさんあり、大変お恥ずかしいです。

      ご指摘ありがとうございました。

      • Zeroconfはnetatalkを起動した瞬間にBonjourで見える筈なので、何か変ですね。netatalkよりも先にAvahiを起動しておく必要がありますが、そのあたりは大丈夫でしょうか。あと、まだfirewallを開いてなかったとか。

        あと、ACLを使うのならfstabに設定するか、tune2fsコマンドで有効にしておく必要があります。
        しかしながら、TimeMachine専用ならばACL自体が必要ないです。

  • もしnetatalk側に問題があって、ちゃんと宣伝項目をAvahiに伝えられていなかったとすると、その設定は危険です。

    そのafpd.serviceファイルの設定だと、AFPサーバの存在を宣伝していますが、Time Machineボリュームの存在を宣伝していません。

    システムがクラッシュして修復ディスクから起動した場合、Time Machineボリュームの場所が見つかりません。従って復旧できません。バックアップしている意味がないです。

    この問題は早めに解決すべきです。
    ネットワーク上で宣伝されている情報を調べるツールがあるので、これを使ってTime Machineボリュームが宣伝されていることを確認してください。
    Bonjour Browser 1.5.6
    http://www.tildesoft.com/

    • コメントありがとうございます。
      リプライが遅くなってすみません。記事のミスを指摘していただいた点は修正しましました。
      Netatalk 側の Bonjour 配信がうまくいっていなかったのは、SELinux の影響のようでした。正しい SELinux の設定を行ったところ、Netatalk だけで Bonjour 配信することができました。ありがとうございました。
      また、ACL については、とりあえず Time Machine 用として使うつもりなのですが、ゆくゆくは他の用途にも使おうと考えていたので一応 configure する際に有効にしておきました。ただ、ファイルサーバは Samba をメインで使っていますので、使う機会は来ないかもしれません。
      細かいところまでご指摘いただきありがとうございます。大変参考になります。

  • おっしゃるとおりです。SELinuxが有効になっているとD-Busを封じてAvahiで宣伝できないことがありますね。すっかり忘れていました。
    ウチのページの「トラブルシュート」の項に追記しておきました。
    http://www003.upp.so-net.ne.jp/hat/netatalk/andsamba.html

    Time Machineを使う場合、avahiの設定ファイルを自分で記述するのは危険です。
    adiskも宣伝しないと肝心な時に復旧できないし、サーバ名を変えたりすると問題が発生したりします。

    Time Machine with Netatalk:HAT blog
    http://hatx.blog.so-net.ne.jp/2008-02-13

    Time Machineサーバ名に注意:HAT blog
    http://hatx.blog.so-net.ne.jp/mavericks_tm_name

    Bonjourの該当部分の説明は危険なので、バッサリ削除したほうがいいと思います。

    • コメントありがとうございます。
      Time Machine で使う場合、AFP サーバ名と一致していないと正常動作しないのですね。大変勉強になります。

      Bonjour の設定の部分は削除いたしました。
      ありがとうございました。

  • Finderからサーバーへ接続で接続は出来たのですが、Time Machineの利用可能ディスクにAFPボリュームが出てきません。
    このような場合、どのような設定ミス等があるのかご教授いただけると助かります。

    • ご質問ありがとうございます。また、ご返信が遅くなり申し訳ございません。
      ご質問されてから時間が経っており、すでに解決されているかもしれませんが、お答えさせていただきます。

      Finderからサーバへ接続できたということは、AFPボリュームとしては動作しているようですね。だとすると、Time Machine用の設定が抜けている可能性が考えられます。例えば、afp.confの中で time machine = yes が記載されているか確認してはどうでしょうか。また、Bonjour を無効にしている場合、自動検知されない可能性があるので、Bonjour が有効になっているか確認してはどうでしょうか。

      僭越ながらお力になれれば幸いです。

Related Post