2014 年,我們在 CentOS 6.x 上面實作了 用「仿 AirPort Time Capsule」讓 OS X 執行 Time Machine 來備份,現在升級到了 CentOS 7.x,當然也要把它同步升級囉。
事前準備
我們是以 CentOS 7.0 x86_64 Minimal 版為基礎,安裝步驟請參閱 CentOS 7.0 不完全安裝手冊 系列文章。
- CentOS 7.0 不完全安裝手冊 - 簡介
- CentOS 7.0 不完全安裝手冊 - 事前準備
- CentOS 7.0 不完全安裝手冊 - Step 1 系統安裝選單
- CentOS 7.0 不完全安裝手冊 - Step 2 選擇初始語言
- CentOS 7.0 不完全安裝手冊 - Step 3 設定「網路與主機名稱」
- CentOS 7.0 不完全安裝手冊 - Step 4 設定「日期時間」
- CentOS 7.0 不完全安裝手冊 - Step 5 設定「鍵盤配置」
- CentOS 7.0 不完全安裝手冊 - Step 6 設定「語言支援」
- CentOS 7.0 不完全安裝手冊 - Step 7 設定「安裝來源」
- CentOS 7.0 不完全安裝手冊 - Step 8 設定「軟體選擇」
- CentOS 7.0 不完全安裝手冊 - Step 9 設定「安裝目的地」
- CentOS 7.0 不完全安裝手冊 - Step 10 開始複製檔案
編譯與安裝套件
要提供 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 的設定值相同。
編輯 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 撰文。
藉由您的資訊,安裝在nvidia Jetson nano Ubuntu 18.04 aarch64上成功。使用的netatalk為系統自帶的netatalk 2.2.6,設定檔方面儘客製化的些微修改。Mojave 10.14.5可以正確備份於其上。萬分感謝!
回覆刪除