CentOS7でnetatalkに挑戦

さて・・・Storage鯖もいい感じに出来てきたので、
お次はNetaTalkでTimeMachineを・・・。

なんだか色々うまく行かず、Google先生に質問してみたら、hatさんのBlogにウチのリンクが!
(2015/02/18:しかもコメントまで頂戴しちゃって・・・・)
(2015/02/19:またまたご指摘いただきました・・・感謝感謝・・・・・)
(2015/02/26:やっとActiveDirectoryのユーザーから使えるようになりました)
 
 
正直、hatさんのBlogの方が、内容も正確だと思います。
私のは単に作業メモ程度ですが、良かったら読んでやってください。

※ほんとは、素直にSRPMからビルドするのが正道です。
 こんな事は普通やんないですが、私はやってみたかったのでw

 

ウチの環境(インストール時に「WebGUIによる管理」+開発ツールを選択)だと、これが足りずにconfigureで怒られたので、追加でインストールします。
各パッケージ間で依存関係があるので、指定してないパッケージもインストールされますが、そこは気にしない方向でw

yum -y install libdb-devel
yum -y install libacl-devel
yum -y install libpam-develglobus-gssapi-gsi
yum -y install globus-gssapi-gsi-devel
yum -y install avahi-devel
yum -y install dbus-glib-devel
yum -y install cracklib-devel
yum -y install systemtap-sdt-develquota
yum -y install quota-nls
yum -y install quota-nld
yum -y install quota-doc
yum -y install quota-devel
yum -y install quotatool
yum -y install tracker
yum -y install tracker-devel
yum -y install dbus-glib-devel
yum -y install cracklib-devel
yum -y install systemtap-sdt-devel
yum -y install dbus-glib-devel
yum -y install libtdb-devel
yum -y install libgcrypt libgcrypt-devel
yum -y install pam_oath pam_afs_session
yum -y install krb5-pkinit
yum -y install libevent-devel

 
 
さて・・・それでは、コンパイルしていきましょうか。
configureのオプションはこんな感じで付けてみました。

./configure \
  --prefix=/usr \
  --exec-prefix=/usr \
  --datarootdir=/usr/share \
  --sysconfdir=/etc/netatalk \
  --localstatedir=/var \
  --with-init-style=redhat-systemd \
  --without-libevent \
  --without-tdb \
  --with-cracklib \
  --enable-krbV-uam \
  --with-pam-confdir=/etc/pam.d \
  --with-dbus-sysconf-dir=/etc/dbus-1/system.d \
  --with-tracker-pkgconfig-version=0.16

 
日本語で各コンパイルオプションについて解説してるサイトが見当たらないので、ちょっとやってみましょうか・・・と思いましたが、既に有りました・・・orz
こちらのサイトと、
本家Wikiの解説を読むのが一番な訳ではありますが・・・・)
ので、ばっさり削除w
ウチでのconfigureサマリーはこんな感じでした。
色々オプション増やしたお陰で、色々変わりました。
LDAPは色々設定が面倒なのと、Active Directory前提なのでパスしてます。
tcp wrapperについては、良く分かっていませんが、これで良しとしました。

Compilation summary:
Compilation summary:
    CPPFLAGS       = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)
    CFLAGS         = -D_U_="__attribute__((unused))" -g -O2
    LIBS           = -ldl  -lcrack
    PTHREADS:
        LIBS   =
        CFLAGS = -pthread
    TRACKER:
        LIBS   = -Wl,--export-dynamic -pthread -ltracker-sparql-0.16 -lgio-2.0 -lgmodule-2.0 -lgobject-2.0 -lglib-2.0
        CFLAGS = -pthread -I/usr/include/tracker-0.16 -I/usr/include/tracker-0.16/libtracker-sparql -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
    SSL:
        LIBS   =  -L/usr/lib64 -lcrypto
        CFLAGS =  -I/usr/include/openssl
    LIBGCRYPT:
        LIBS   = -lgcrypt -ldl -lgpg-error
        CFLAGS =
    PAM:
        LIBS   =  -lpam
        CFLAGS =
    WRAP:
        LIBS   =
        CFLAGS =
    BDB:
        LIBS   =  -L/usr/lib64 -ldb-5.3
        CFLAGS =
    GSSAPI:
        LIBS   = -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err
        CFLAGS =
    ZEROCONF:
        LIBS   =  -lavahi-common -lavahi-client
        CFLAGS =  -D_REENTRANT
    LIBEVENT:
        LIBS   =
        CFLAGS =
    TDB:
        LIBS   = -ltdb
        CFLAGS =
Configure summary:
    INIT STYLE:
         redhat-systemd
    AFP:
         Extended Attributes: ad | sys
         ACL support: yes
         Spotlight: yes
    CNID:
         backends:  dbd last tdb
    UAMS:
         DHX     (PAM SHADOW)
         DHX2    (PAM SHADOW)
         RANDNUM (afppasswd)
         Kerberos V
         clrtxt  (PAM SHADOW)
         guest
    Options:
         Zeroconf support:        yes
         tcp wrapper support:     no
         quota support:           yes
         admin group support:     yes
         valid shell check:       yes
         cracklib support:        yes
         ACL support:             auto
         Kerberos support:        yes
         LDAP support:            no
         AFP stats via dbus:      yes
         dtrace probes:           yes
    Paths:
         Netatalk lockfile:       /var/lock/netatalk
         init directory:          /usr/lib/systemd/system
         dbus system directory:   /etc/dbus-1/system.d
         pam config directory:    /etc/pam.d
    Documentation:
         Docbook:                 no
[root@nas01 netatalk-3.1.7]# 

 

次にコンパイルとインストールですが、これでOKです。
意味合い的には、前のコマンドが成功したら次へ進め見たいな感じです。最後に”install OK”とエコーされれば全部完了みたいな。

[root@nas01 netatalk-3.1.7]# make && make install && echo "install OK"

インストールが終わったら、いっぺんafpdの状況を確認しましょう。
(ワタクシ的には、/usr/localがちょっと・・・な感じで、あちこち触ったので)
うーむ。”UAM search path” がなんか妙なことになってますが・・・・。

[root@nas01 netatalk-3.1.7]# afpd -V
afpd 3.1.7 - 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: 2.2 3.0 3.1 3.2 3.3 3.4
         CNID backends: dbd last tdb
      Zeroconf support: Avahi
  TCP wrappers support: No
         Quota support: Yes
   Admin group support: Yes
    Valid shell checks: Yes
      cracklib support: Yes
            EA support: ad | sys
           ACL support: Yes
          LDAP support: No
         D-Bus support: Yes
     Spotlight support: Yes
         DTrace probes: Yes

              afp.conf: /etc/netatalk/afp.conf
           extmap.conf: /etc/netatalk/extmap.conf
       state directory: /var/netatalk/
    afp_signature.conf: /var/netatalk/afp_signature.conf
      afp_voluuid.conf: /var/netatalk/afp_voluuid.conf
       UAM search path: /usr/lib/netatalk//
  Server messages path: /var/netatalk/msg/

 

コンパイルが無事通って、バイナリが動きそうな感じがしたら、設定です。
ウチのストレージ鯖は、samba4もいたりして。
winbind動いてるので、そっちに認証させてしまうのが、手間ないかなと思って、/etc/pam.d/netatalkをちょっと編集しました。

#%PAM-1.0
#auth     include system-auth
#account  include system-auth
#password include system-auth
#session  include system-auth

auth       sufficient   pam_winbind.so
auth       required     pam_unix.so
account    sufficient   pam_winbind.so
account    required     pam_unix.so
password   required     pam_unix.so use_authtok
session    required     pam_unix.so

 

configureのオプションで、設定ファイルを指定したので、/etc/netatalkにあるafp.confファイルを編集していきます。
ウチの場合はこんな感じにしてみました。
(netatalkを入れたかったのは、元々TimeMachineを使いたかったからです)

;
; Netatalk 3.x configuration file
;
; Global server settings
 spotlight = yes
 ad domain = admkazuya.org
 k5 keytab = /etc/netatalk/afpserver.keytab
 k5 service = afpserver
 k5 realm = ADMKAZUYA.ORG
 log file = /var/log/netatalk/afp.log
 ; log level = default:debug, afpdaemon:debug, logger:debug, uamsdaemon:debug
 mimic model = RackMac
 uam list = uams_dhx2.so, uams_gss.so, uam_guest.so

 [Homes]
 basedir regex = /external/home

 [Share]
 path = /external/share

 [TimeMachine]
 path = /external/backup/TimeMachine
 time machine = yes
 spotlight = no
 vol size = 524788

 

では起動してみましょう。
ウチはCentOSなので、systemctlコマンドから起動やら状態確認をします。見たところうまく各サービスが起動しているように見えます。

[root@nas01 netatalk]# systemctl status netatalk.service
netatalk.service - Netatalk AFP fileserver for Macintosh clients
   Loaded: loaded (/usr/lib/systemd/system/netatalk.service; disabled)
   Active: active (running) since 木 2015-02-19 20:10:33 JST; 4s ago
     Docs: man:afp.conf(5)
           man:netatalk(8)
           man:afpd(8)
           man:cnid_metad(8)
           man:cnid_dbd(8)
           http://netatalk.sourceforge.net/
  Process: 28415 ExecStart=/bin/sh -c /usr/sbin/netatalk (code=exited, status=0/SUCCESS)
 Main PID: 28417 (netatalk)
   CGroup: /system.slice/netatalk.service
           tq28417 /usr/sbin/netatalk
           tq28418 /usr/sbin/afpd -d -F /etc/netatalk/afp.conf
           tq28419 /usr/sbin/cnid_metad -d -F /etc/netatalk/afp.conf
           tq28420 /bin/dbus-daemon --config-file=/etc/netatalk/dbus-session....
           tq28425 /usr/libexec/dconf-service
           tq28434 /usr/libexec/gvfsd
           tq28439 /usr/libexec/tracker-miner-fs
           tq28441 /usr/libexec//gvfsd-fuse /root/.gvfs -f -o big_writes
           tq28447 /usr/libexec/tracker-store
           tq28466 /usr/libexec/gvfs-udisks2-volume-monitor
           tq28476 /usr/libexec/gvfs-afc-volume-monitor
           tq28481 /usr/libexec/gvfs-mtp-volume-monitor
           tq28485 /usr/libexec/gvfs-goa-volume-monitor
           tq28488 /usr/libexec/goa-daemon
           tq28494 /usr/libexec/gvfs-gphoto2-volume-monitor
           mq28497 /usr/bin/gnome-keyring-daemon --start --foreground --compo...

 2月 19 20:10:33 nas01.admkazuya.org systemd[1]: PID file /var/lock/netatalk...
 2月 19 20:10:33 nas01.admkazuya.org systemd[1]: Started Netatalk AFP filese...
 2月 19 20:10:34 nas01.admkazuya.org goa[28488]: goa-daemon version 3.8.5 st...
 2月 19 20:10:34 nas01.admkazuya.org gnome-keyring-daemon[28497]: couldn't s...
 2月 19 20:10:34 nas01.admkazuya.org gnome-keyring-daemon[28497]: keyring al...
 2月 19 20:10:34 nas01.admkazuya.org gnome-keyring-daemon[28497]: couldn't i...
 2月 19 20:10:34 nas01.admkazuya.org goa[28488]: secret_password_store_sync(...
 2月 19 20:10:34 nas01.admkazuya.org goa[28488]: secret_password_lookup_sync...
 2月 19 20:10:34 nas01.admkazuya.org goa[28488]: /org/gnome/OnlineAccounts/A...
Hint: Some lines were ellipsized, use -l to show in full.
[root@nas01 netatalk]#

 
 

ここまで来たら、Mac側で実際にマウントできるかを確認して行きます。(帰宅後に、キャプチャーなんぞを貼ってみようと思います)

 

さて・・・最後に。
ログのローテート位は仕掛けて起きますか。
/etc/logrotate.dの下に、netatalkってファイル名で一個ファイル作ってください。
(普段のログは、あんまりでないですが、気がついたら超巨大になってたとか、あんまりいい感じしないのでw)

[root@nas01 logrotate.d]# cat netatalk
/var/log/netatalk.log {
    notifempty
    rotate 7
    missingok
    sharedscripts
    copytruncate
}
[root@nas01 logrotate.d]#

 
 
 
 
 

この作業が要るのか、わからなくなってきましたので、「こんな事もやったよ」的な感じで載せておきます。
Active Directory側での作業が一つあります。
netatalkでKerberos認証するときにkeytabファイルを指定するのですが、以下のやり方で生成します。(WindowsServer側での作業になります)
Domain Controllerに管理者権限を持ったアカウントでログインして、以下のコマンドを実行します。
このコマンドを実行したら、カレントディレクトリにafpserver.keytabが出来るので、netatalkを動かすサーバへ転送しておきます。
※しかしこれ、使ってるかどうかが良くわかりません(大汗)

C:\Users\Administrator>ktpass -princ afpserver/nas01.admkazuya.org@ADMKAZUYA.ORG -mapuser administrator@admkazuya.org +rndPass -out afpserver.keytab

実際の出力例はこんな感じです。

C:\Users\Administrator>ktpass -princ afpserver/nas01.admkazuya.org@ADMKAZUYA.ORG -mapuser administrator@admkazuya.org +rndPass -out afpserver.keytab
Targeting domain controller: dc01.admkazuya.org
Using legacy password setting method
Successfully mapped afpserver/nas01.admkazuya.org to Administrator.
WARNING: pType and account type do not match. This might cause problems.
Key created.
Output keytab to afpserver.keytab:
Keytab version: 0x502
keysize 78 afpserver/nas01.admkazuya.org@ADMKAZUYA.ORG ptype 0 (KRB5_NT_UNKNOWN)
 vno 2 etype 0x17 (RC4-HMAC) keylength 16 (0xab97ec5fad3e75023bc662e9bc6f5685)

C:\Users\Administrator>
%d人のブロガーが「いいね」をつけました。