[CentOS 7] Mac 最強大的後盾,Time Machine 自動備份的實作

by 2月 17, 2016 1 意見            

2014 年,我們在 CentOS 6.x 上面實作了 用「仿 AirPort Time Capsule」讓 OS X 執行 Time Machine 來備份,現在升級到了 CentOS 7.x,當然也要把它同步升級囉。

事前準備


我們是以 CentOS 7.0 x86_64 Minimal 版為基礎,安裝步驟請參閱 CentOS 7.0 不完全安裝手冊 系列文章。

編譯與安裝套件


要提供 Time Machine 服務,需要兩個主要的套件:

avahi

負責 mDNS 及 DNS-SD,類似 samba 的 nmb 服務,用來處理廣播主機名稱。

netatalk

負責 AFP (Apple Filing Protocol),類似 samba 的 smb 服務,用來分享目錄檔案。

avahi 比較沒什麼問題,直接從 CentOS 官方套件庫安裝就可以了。

但是,netatalk 就比較麻煩了,因為現在還沒有善心人士幫忙打包成 rpm 檔或是放到套件庫去,所以我們必須自己從原始碼自己編譯,更詳細的說明請參閱 Netatalk - Netatalk 3.1.8 SRPM for Fedora and CentOS

先安裝所有需要的套件。
sudo yum install -y rpm-build gcc make wget avahi-devel cracklib-devel dbus-devel dbus-glib-devel libacl-devel libattr-devel libdb-devel libevent-devel libgcrypt-devel krb5-devel mysql-devel openldap-devel openssl-devel pam-devel quota-devel systemtap-sdt-devel tcp_wrappers-devel libtdb-devel tracker-devel bison docbook-style-xsl flex dconf

下載 netatalk 原始碼,會產生一個用來編譯的 rpmbuild 目錄。
sudo rpm -ivh http://www003.upp.so-net.ne.jp/hat/files/netatalk-3.1.8-0.1.4.fc24.src.rpm

開始編譯成 for CentOS 7 的 rpm 套件檔,這邊要花掉不少時間,喝杯茶等它一下吧。
rpmbuild -bb ~/rpmbuild/SPECS/netatalk.spec

要看到「exit 0」這個訊息才是正確編譯完成。

它會編譯三個檔案出來,我們要安裝的是沒有 devel 跟 debuginfo 的 rpm 檔案。
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/netatalk-3.1.8-0.1.4.el7.centos.x86_64.rpm


設定相關服務


新增 avahi 的 AFP 設定檔。
sudo vi /etc/avahi/services/afpd.service

加入下列設定。
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
</service-group>

編輯 netatalk 設定檔。
sudo vi /etc/netatalk/afp.conf

加入下列設定,path 是 Time Machone 備份用的自訂目錄,valid users 是允許存取的使用者帳號,別忘了依實際需求修改。
[Time Machine]
path = /home/timemachine
valid users = heracles
time machine = yes

新增 netatalk 的 AFP 服務設定檔。
sudo vi /etc/netatalk/afpd.conf

加入下列設定。
- -transall -uamlist uams_randnum.so,uams_dhx.so,uams_dhx2.so -nosavepassword -advertise_ssh

根據 afp.conf 的設定值,建立 Time Machine 專用的儲存目錄,並修改使用者 / 群組的擁有權。
mkdir -p /home/timemachine
chown heracles:heracles /home/timemachine

新增 nettalk 的分享目錄設定檔。
sudo vi /etc/netatalk/AppleVolumes.default

加入下列設定。
  • 第一個參數是指定備份用目錄,要和 afp.conf 的設定值相同。
  • 第二個參數是在 Mac 上看到的自訂名稱。 
  • 第三個參數是使用者帳號,要和 afp.conf 的設定值相同。
/home/timemachine TimeMachine allow:heracles options:usedots,upriv,tm dperm:0775 fperm:0660 cnidscheme:dbd volsizelimit:200000

編輯 nsswitch 設定檔。
sudo vi /etc/nsswitch.conf

加入下列設定。
hosts:        files mdns4_minimal dns mdns mdns4

打開防火牆的通訊埠。
sudo firewall-cmd --zone=public --permanent --add-port=548/tcp
sudo firewall-cmd --zone=public --permanent --add-port=548/udp
sudo firewall-cmd --zone=public --permanent --add-port=5353/tcp
sudo firewall-cmd --zone=public --permanent --add-port=5353/udp
sudo firewall-cmd --zone=public --permanent --add-port=49152/tcp
sudo firewall-cmd --zone=public --permanent --add-port=49152/udp
sudo firewall-cmd --zone=public --permanent --add-port=52883/tcp
sudo firewall-cmd --zone=public --permanent --add-port=52883/udp
sudo firewall-cmd --reload

啟動服務,並且讓它們在開機後自動啟動。
sudo systemctl enable avahi-daemon
sudo systemctl enable netatalk
sudo systemctl start avahi-daemon
sudo systemctl start netatalk

確認這兩個服務已經正確啟動即可。



在 Mac 上設定 Time Machine 功能


打開「系統偏好設定」。

找到「Time Machine」。

可以看到我目前使用的是在 CentOS 6 架設上的服務,點選「選擇磁碟」。

找到在 CentOS 7 架設的新主機,點選「使用磁碟」。

因為已經有舊的備份了,系統會詢問我們要兩台同時備份,或是取代舊的,我要把舊主機換下來,所以選擇「取代 CentOS TimeCapsule」。

輸入在 netatalk 上指定的帳號密碼。

這樣子就完成切換到新 Time Machine 的所有步驟。
047

最後就是等 Time Machine 自動執行備份的工作了。


初次備份要比較多時間,之後就幾乎很無感了。


參考資料


圖片來源

  • avahi、netatalk 官網。

更新紀錄

  • 2016/02/17 撰文。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

1 則留言 :

  1. 藉由您的資訊,安裝在nvidia Jetson nano Ubuntu 18.04 aarch64上成功。使用的netatalk為系統自帶的netatalk 2.2.6,設定檔方面儘客製化的些微修改。Mojave 10.14.5可以正確備份於其上。萬分感謝!

    回覆刪除