오늘은 드디어 여행 사진을 보정하려고 했으나, 맥북의 디스크 용량이 너무 부족해서 진행이 어려웠다. 결국 용량 문제를 해결하기 위해서 서버 컴퓨터의 스토리지를 네트워크로 연결하는 방법까지 알아보게 되었다.

  1. Apple Filing Protocol
  2. Install Netatalk 3 on Ubuntu
  3. Mount AFP Remote Volume

Apple Filing Protocol

오늘 처음 알게 된 프로토콜인데, 애플의 독점 파일 서비스 프로토콜로, 가장 흔한 예로는 맥을 Time Machine과 연결할 때에 이용하는 것으로 보인다. 특이한 점으로는 Spotlight와 Avahi(Bonjour)를 지원하는 등 맥의 기능을 대부분 지원하는 점이 있다. 또, 파일의 전송 속도 역시 SMBv3과 비교할 수 있을 만큼 빠르다고 알려져 있다. 개인적으로 SMB와 NFS에는 조금 안좋은 기억이 있기도 하고, 새로운걸 설정해보고 싶은 마음에 이번에는 AFP를 선택해 보았다.

Install Netatalk 3 on Ubuntu

Netatalk는 AFP 서버의 오픈 소스 구현체로, Linux / BSD / UNIX에서 이용할 수 있다. Ubuntu에 기본 패키지로 들어있을 만큼1 유서깊은 구현체인 것으로 보여서 우선은 이걸로 시도해 보았다. 기본적인 내용은 공식 매뉴얼을 참고했고, 매뉴얼에 빠진 부분(ㅠㅠ)을 노가다로 채워보았다.

설치는 다음과 같이 빌드하면 끝!

$ sudo apt install -y build-essential \
                      libevent-dev \
                      libssl-dev \
                      libgcrypt-dev \
                      libkrb5-dev \
                      libpam0g-dev \
                      libwrap0-dev \
                      libdb-dev \
                      libdb++-dev \
                      libtdb-dev \
                      libmysqlclient-dev \
                      avahi-daemon \
                      libavahi-client-dev \
                      libacl1-dev \
                      libldap2-dev \
                      libcrack2-dev \
                      systemtap-sdt-dev \
                      libdbus-1-dev \
                      libdbus-glib-1-dev \
                      libglib2.0-dev \
                      libio-socket-inet6-perl \
                      tracker \
                      libtracker-sparql-2.0-dev \
                      libtracker-miner-2.0-dev
# 아래 미러에서 직접 다운로드
# https://sourceforge.net/projects/netatalk/files/netatalk/3.1.12/netatalk-3.1.12.tar.gz/download?use_mirror=jaist&download=
$ tar xf nettalk-3.1.12.tar.gz
$ cd nettalk-3.1.12
$ ./configure \
        --with-init-style=debian-systemd \
        --without-libevent \
        --with-cracklib \
        --without-ldap \ # 저는 안 써요
        --without-kerberos \ # 저는 안 써요
        --with-pam-confdir=/etc/pam.d \
        --with-dbus-daemon=/usr/bin/dbus-daemon \
        --with-dbus-sysconf-dir=/etc/dbus-1/system.d \
        --with-tracker-pkgconfig-version=2.0
        --enable-debian \
        --enable-zeroconf
$ make -j10
$ sudo make install

다만 이대로는 아직 사용할 수가 없고, 서버 설정을 해 주어야 한다. /usr/local/etc/afp.conf를 뜯어고치자!

[Global]
hostname = Shared # <-- 컴퓨터 이름 같은 역할
hosts allow = 0.0.0.0/0 # <-- ACL을 간단하게 CIDR로 설정 가능하다
afp listen = 1.23.45.67:548 # <-- IP:PORT 형태로 Address를 지정해줘도 되고(여러 개도 가능)
afp interfaces = enp0s31f6 # <-- NIC를 지정해주어도 된다.
mimic model = TimeCapsule6,116 # <-- TimeCapsule인 척 해서, 타임캡슐로 사용할 수 있다.
zeroconf = yes # <-- Bonjour (Avahi) 를 이용해서 설정을 단순화
uam list = uams_dhx.so uams_dhx2.so # <-- 암호화 scheme인데, 사실 실제 사용하는지는 잘..
spotlight = yes # <-- Spotlight Indexing 여부
log file = /var/log/netatalk.log
fqdn = my.some.domain:548 # <-- 이렇게 fqdn을 지정해줄 수도 있다.

[Shared] # <-- 이후에 경로명이 됩니다
path = /mnt/ssd2/shared # <-- 서버에서의 실제 디렉토리 경로
valid users = lucent # <-- 유저 제한 ACL

이제 설정까지 고쳤으면, 서비스만 실행하면 끝!!

$ sudo systemctl enable netatalk.service
$ sudo systemctl enable avahi-daemon.service
$ sudo systemctl start netatalk.service
$ sudo systemctl start avahi-daemon.service
$ sudo ufw allow 548/tcp # 방화벽 허용

Mount AFP Remote Volume

맥에서 리모트 디렉토리에 연결하는 방법은 GUI를 이용하면 된다. Finder에서 CMD+K를 누르고, 도메인이나 IP 주소를 입력한 다음 엔터! afp://12.34.56.78afp://my.domain 같이 입력하면 된다. 여기까지 성공했다면 로그인 창이 나타나는데, 여기에는 리눅스 계정의 정보를 입력하면 된다.

  1. 근데 현재 apt install로 설치하면 제대로 설치되지 않는 문제가 있다.