상세 컨텐츠

본문 제목

Raspberry Pi jessie - Mac Time Machine, Netatalk 3.1

raspberrypi/etc

by ZelKun 2016. 10. 17. 09:00

본문

반응형

##구성하고 백업을 시작하니 하드 파티션이 깨진건가... 뭔가 애매한 상황이 발생했습니다

##안정성 확보가 최우선이네요...

##좀더 테스트하면서 상황을 봐야겠습니다


## 11/17 추가 ##

##한달정도 사용해보니 알아서 백업도 잘되는것 같네요

##다시 복구할일이 없어서 복구 테스트는 못해보고... 계속 백업하는걸보면 되겠죠..

   

윈도우는 전혀 안쓰는 기능인 백업을 맥에서는 사용하고 있습니다..

   

여러가지 이유가 있겠지만

클린설치 후 프로그램을 다시 설치하려니 귀찮더라구요..

근데 USB를 이용한 외장하드는 매우 불편하기 때문에

Raspberry Pi를 사용해서 네트워크 드라이브를 이용해보기로 했습니다

   

근데 그닥 평이 안좋은거 같은것 같기도.. 일단 써보고나서 판단하기로 했습니다

   

Raspberry Pi 가 2개가 있는데

하나는 RetroPie와 KODI가 설치되있고 외장하드를 연결해놓은 pi는

아무래도 외장하드 2개는 전력이 딸려서 안될거란 판단이들어

서버 개발용(?)으로 안쓰고 있는 pi를 사용했습니다

(혹시몰라 외장하드 2개연결해봤는데 하난 인식이 안되네요)

   

우선 외장하드를 포멧합니다

전 이미 백업용으로 쓰던 하드라 포멧은 진행하지 않았습니다

   

  • 외장하드 포멧

   

디스크 유틸리티를 실행합니다

   

사이드 메뉴에서 해당 외장하드를 선택하고 지우기를 클릭하면 됩니다

외장하드를 연결안해서 SD카드로 대체 했습니다

   

팝업메뉴에 이름은 영문으로 하셔야 속이 편합니다 대충 TimeMachine 정도면 되겠네요

포멧은 OS X Extended (Journaled) - Mac OS 확장 (저널링) 으로 하시면 됩니다

macOs Sierra (10.12) 부턴 설계 메뉴도 나오나 보네요 (뭔진 아직 모르겠네요)

이제 pi에 외장하드를 연결하고 설치를 진행합니다

   

  • Raspberry Pi

   

user:~ user$ ssh pi@rasp2-dev 

pi@rasp2-dev's password: 

   

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

   

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Sat Oct 15 17:27:45 2016 from 25.78.71.58

pi@rasp2-dev:~ $ 

ssh 를 통해 접속했습니다

ssh 계정@ip&domain

   

mount를 위한 외장하드 정보를 확인합니다

pi@rasp2-dev:~ $ blkid

/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="6E59-706C" TYPE="vfat" PARTUUID="5f9fde37-01"

/dev/mmcblk0p2: UUID="323da9d8-a783-4e42-9b1f-0c4d7a1a04bc" TYPE="ext4" PARTUUID="5f9fde37-02"

/dev/sda1: LABEL="EFI" UUID="67E4-17ED" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="bebf1e58-d2f1-4d73-920f-7c6a1a5f4df5"

/dev/sda2: UUID="5f0022eb-1f1c-43ed-a4cb-a522f9245801" LABEL="TimeMachine" TYPE="hfsplus" PARTLABEL="TimeMachine" PARTUUID="90dc17af-b5dd-41b7-9818-e63c80a0ef01"

pi@rasp2-dev:~ $ 

LABEL기준으로 확인하면 됩니다

장치 경로, UUID, LABEL, TYPE 등등 보이네요

그중 눈에 띄는게 UUID와 TYPE

TYPE을 보니 hfsplus 라고 되어있네요 그냥은 못쓰니 패키지를 설치합니다

   

  • hfsplus 패키지 설치

   

pi@rasp2-dev:~ $ sudo apt-get install hfsplus hfsprogs hfsutils

Reading package lists... Done

Building dependency tree       

Reading state information... Done

The following extra packages will be installed:

  libhfsp0

Suggested packages:

  hfsutils-tcltk

The following NEW packages will be installed:

  hfsplus hfsprogs hfsutils libhfsp0

0 upgraded, 4 newly installed, 0 to remove and 81 not upgraded.

Need to get 285 kB of archives.

After this operation, 598 kB of additional disk space will be used.

Do you want to continue? [Y/n] y

root 권한이 필요합니다

sudo apt-get install hfsplus hfsprogs hfsutils

y를 입력하고 설치합니다

   

  • mount 디렉토리 생성

   

mount를 위한 디렉토리를 만들어줍니다

어디다 만들까 하다가 /mnt 에 많이들 만드는것 같아

저도 /mnt에다 만들었습니다 물론 root 권한이 필요합니다

   

sudo mkdir /mnt/TimceMachine

pi@rasp2-dev:~ $ sudo mkdir /mnt/TimeMachine

pi@rasp2-dev:~ $ ls -al /mnt

total 12

drwxr-xr-x  3 root root 4096 Oct 15 23:41 .

drwxr-xr-x 21 root root 4096 Jul 26 20:07 ..

drwxr-xr-x  2 root root 4096 Oct 15 23:41 TimeMachine

pi@rasp2-dev:~ $ 

  

ls를 통해 디렉토리를 확인해 봤습니다

역시나 root 권한으로 되있네요

   

  • 외장하드 mount

mount는 명령어를 이용하는 수동과 설정을 통항 자동 2가지로 구분할 수 있겠네요

자동으로 하는방법중 유명한건 역시 fstab 이 있는데 부팅할때 외장하드인식이 안되면 부팅이 안됩니다

키보드연결해서 수습(?) 하면되지만 귀찮거든요

그래서 전 rc.local에다 script로 자동 mount하도록 사용합니다

   

부팅할때 있으면 mount하고 없으면 skip 하는거에요

/etc/init.d/에 스크립트를 직접짜서 넣으면 좋겠지만 아직 능력이 안되네요

   

  1 proc            /proc           proc    defaults          0       0

  2 /dev/mmcblk0p1  /boot           vfat    defaults          0       2

  3 /dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

  4 # a swapfile is not a swap partition, no line here

  5 #   use  dphys-swapfile swap[on|off]  for that

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

"/etc/fstab" 5L, 302C                                         1,1           All

sudo vim /etc/fstab 으로 수정할 수 있습니다

   

 14 # Print the IP address

 15 _IP=$(hostname -I) || true

 16 if [ "$_IP" ]; then

 17   printf "My IP address is %s\n" "$_IP"

 18 fi

 19 

 20 #/etc/init.d/logmein-hamachi start

 21 

 22 #MACBOOK TIMEMACHINE

 23 UUID="5f0022eb-1f1c-43ed-a4cb-a522f9245801" #UUID

 24 MCMD="mount -t hfsplus -o force,rw,users,auto" #mount 옵션

 25 if blkid | grep $UUID > /dev/null; then #UUID확인

 26         MPATH="$(blkid | grep $UUID | cut -d: -f1 | awk '{ print $1}')"

 27         UPATH="/mnt/TimeMachine"    

 28         echo "$MCMD $MPATH $UPATH"

 29         $MCMD $MPATH $UPATH     

 30 else                

 31         echo "not TimeMachine"

 32 fi      

 33 

 34 exit 0

~                                                                               

                                                              33,0-1        Bot

sudo vim /etc/rc.local 로 수정할 수 있습니다

   

편의상 rc.local 을 이용했습니다

pi를 가끔 들고나갈거라 부팅안되면 짜증나거든요 특히 외장하드 없이가면...


#MACBOOK TIMEMACHINE

UUID="5f0022eb-1f1c-43ed-a4cb-a522f9245801" #UUID

MCMD="mount -t hfsplus -o force,rw,users,auto" #mount 옵션

if blkid | grep $UUID > /dev/null; then #UUID 확인

MPATH="$(blkid | grep $UUID | cut -d: -f1 | awk '{ print $1}')"

UPATH="/mnt/TimeMachine"

echo "$MCMD $MPATH $UPATH"

$MCMD $MPATH $UPATH

else

echo "not TimeMachine"

fi

경로가 바뀌면 머리아파질 수도 있으니 UUID를 이용했습니다

mount 옵션이 많은데... mount 한건좋은데 계속 read-only system 으로 쓰기가 안되더라구요..

force,rw 만 넣으면 root계정만 읽고, 쓰기가 되니 users를 추가해서 pi도 사용할 수 있게 했습니다

auto옵션이 뭐였는진 기억이 안나네요.. force,rw 는 안찾아봐도.. 강제 읽고(read),쓰기(write)

이제 부팅할때 외장하드가 연결되 있으면 mount할거에요

   

혹시 제대로 실행되는지 테스트를 하시려면 명령어를 터미널에서 미리 테스트해봐도 됩니다

blkid | grep '5f0022eb-1f1c-43ed-a4cb-a522f9245801' | cut -d: -f1 | awk '{ print $1}')

   

pi@rasp2-dev:~ $ blkid | grep '5f0022eb-1f1c-43ed-a4cb-a522f9245801' | cut -d: -f1 | awk '{ print $1}'

/dev/sda2

pi@rasp2-dev:~ $ 

외장하드 경로만 추출되는게 확인되네요

   

이제 테스트겸 재부팅을 해봅니다


  •  외장하드 소유권


다좋은데 mount를 하면 pi계정에서 수정이 안되네요 

users, uid, umask 등등 옵션에 넣어봤는데도 안되네요 (되다안되는건가..)

속편하게 소유권을 pi 계정으로 넘겨줍니다 

sudo chown -R pi /mnt/TimeMachine 


(아니면 root계정으로 사용해도 됩니다 - http://zelkun.tistory.com/66 )   


  • Netatalk 패키지 설치

   

sudo apt-get install netatalk 패키지 관리자로 설치해서 사용할 수 있지만..

버전이 2.5 정도로 낮네요 3.x 버전이랑 설정 차이가 있어서 헷갈리네요

2.5 버전 설치하고 삽질하다 3.1 버전을 설치했습니다

소스로 직접설치해야 해서 머리가 더아프지만...

설정은 금방끝나네요

   

우선 sourceforge 에서 패키지를 다운받습니다

Downloads 로 이동해서 받았습니다

cd ~/Downloads

wget https://sourceforge.net/projects/netatalk/files/netatalk/3.1.10/netatalk-3.1.10.tar.gz

pi@rasp2-dev:~/Downloads wget https://sourceforge.net/projects/netatalk/files/netatalk/3.1.10/netatalk-3.1.10.tar.gz

--2016-10-16 00:48:57--  https://sourceforge.net/projects/netatalk/files/netatalk/3.1.10/netatalk-3.1.10.tar.gz

Resolving sourceforge.net (sourceforge.net)... 216.34.181.60

Connecting to sourceforge.net (sourceforge.net)|216.34.181.60|:443... connected.

HTTP request sent, awaiting response... 302 Found

Location: https://sourceforge.net/projects/netatalk/files/netatalk/3.1.10/netatalk-3.1.10.tar.gz/download [following]

--2016-10-16 00:48:58--  https://sourceforge.net/projects/netatalk/files/netatalk/3.1.10/netatalk-3.1.10.tar.gz/download

Connecting to sourceforge.net (sourceforge.net)|216.34.181.60|:443... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://downloads.sourceforge.net/project/netatalk/netatalk/3.1.10/netatalk-3.1.10.tar.gz?r=&ts=1476546539&use_mirror=jaist [following]

--2016-10-16 00:48:59--  http://downloads.sourceforge.net/project/netatalk/netatalk/3.1.10/netatalk-3.1.10.tar.gz?r=&ts=1476546539&use_mirror=jaist

Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59

Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://jaist.dl.sourceforge.net/project/netatalk/netatalk/3.1.10/netatalk-3.1.10.tar.gz [following]

--2016-10-16 00:49:00--  http://jaist.dl.sourceforge.net/project/netatalk/netatalk/3.1.10/netatalk-3.1.10.tar.gz

Resolving jaist.dl.sourceforge.net (jaist.dl.sourceforge.net)... 150.65.7.130, 2001:df0:2ed:feed::feed

Connecting to jaist.dl.sourceforge.net (jaist.dl.sourceforge.net)|150.65.7.130|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 2493009 (2.4M) [application/x-gzip]

Saving to: 'netatalk-3.1.10.tar.gz'

   

netatalk-3.1.10.tar 100%[=====================>]   2.38M   186KB/s   in 21s    

   

2016-10-16 00:49:21 (116 KB/s) - 'netatalk-3.1.10.tar.gz' saved [2493009/2493009]

   

pi@rasp2-dev:~/Downloads $ 

파일을 다운받고 앞축을 풀어줍니다

tar -zxf netatalk-3.1.10.tar.gz

pi@rasp2-dev:~/Downloads $ ls -al

total 2448

drwxr-xr-x  2 pi pi    4096 Oct 16 00:52 .

drwxr-xr-x 31 pi pi    4096 Oct 16 00:34 ..

-rw-r--r--  1 pi pi 2493009 Sep 12 19:15 netatalk-3.1.10.tar.gz

pi@rasp2-dev:~/Downloads $ tar -zxf netatalk-3.1.10.tar.gz 

pi@rasp2-dev:~/Downloads $ ls -al

total 2452

drwxr-xr-x  3 pi pi    4096 Oct 16 00:54 .

drwxr-xr-x 31 pi pi    4096 Oct 16 00:34 ..

drwxr-xr-x 14 pi pi    4096 Sep 12 19:01 netatalk-3.1.10

-rw-r--r--  1 pi pi 2493009 Sep 12 19:15 netatalk-3.1.10.tar.gz

pi@rasp2-dev:~/Downloads $ cd netatalk-3.1.10/

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $ ls

abigen.sh   config.guess  CONTRIBUTORS  etc         macros       test

aclocal.m4  config.h.in   COPYING       include     Makefile.am  test-driver

AUTHORS     config.sub    COPYRIGHT     install-sh  Makefile.in  VERSION

bin         configure     depcomp       libatalk    man          ylwrap

compile     configure.ac  distrib       libevent    missing

config      contrib       doc           ltmain.sh   NEWS

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $ ./configure --with-init-style=debian-sysv --with-tracker-pkgconfig-version=0.14

cd netatalk-3.1.10

설치를 위해 환경설정을 해줍니다

./configure --with-init-style=debian-sysv --with-tracker-pkgconfig-version=0.14

그리고 make 를 진행해야하는데

중간쯤 가다가 의존성 패키지가 없어서 멈춰버리네요

checking for Berkeley DB headers in /usr/include/db4.8... no

checking for Berkeley DB headers in /usr/include/db48... no

checking for Berkeley DB headers in /usr/include/db4.7... no

checking for Berkeley DB headers in /usr/include/db47... no

checking for Berkeley DB headers in /usr/include/db4.6... no

checking for Berkeley DB headers in /usr/include/db46... no

checking for Berkeley DB headers in /usr/include/db4... no

configure: error: Berkeley DB library required but not found!

pi@rasp2-dev:~/netatalk-3.1.10 $ 

   

참고한 사이트는 이걸 다 설치하라고 하네요

sudo apt-get install avahi-daemon bison build-essential checkinstall cracklib-runtime db-util db5.1-util groff libacl1 libacl1-dev libattr1 libavahi-client-dev libavahi-client3 libavahi-common3 libc6 libcomerr2 libcrack2 libcrack2-dev libcups2 libdb-dev libdb5.1 libdbus-1-dev libdbus-glib-1-dev libevent-dev libgcc1 libgcrypt11-dev libgcrypt11 libglib2.0-dev libgnutls26 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5-dev libldap-2.4-2 libldap2-dev libpam-cracklib libpam-modules libpam0g libpam0g-dev libssl-dev libtool libtracker-extract-0.14-0 libtracker-extract-0.14-dev libtracker-miner-0.14-0 libtracker-miner-0.14-dev libtracker-sparql-0.14-0 libtracker-sparql-0.14-dev libwrap0 libwrap0-dev lsof netbase perl procps quota rc systemtap-sdt-dev tracker tracker-explorer tracker-extract tracker-gui tracker-miner-fs tracker-utils zlib1g

그냥 다 설치합니다

진행하다보면 이미 있는것도 있더라구요..

   

    Options:

         Zeroconf support:        yes

         tcp wrapper support:     no

         quota support:           yes

         valid shell check:       yes

         cracklib support:        no

         ACL support:             auto

         Kerberos support:        auto

         LDAP support:            no

         AFP stats via dbus:      no

         dtrace probes:           no

    Paths:

         Netatalk lockfile:       /var/lock/netatalk

         init directory:          /etc/init.d

    Documentation:

         Docbook:                 no

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $

이제 make를 진행할 수 있습니다

Makefile이 만들어졌거든요

   

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $ make && sudo make install

make  all-recursive

make[1]: Entering directory '/home/pi/Downloads/netatalk-3.1.10'

Making all in libevent

make[2]: Entering directory '/home/pi/Downloads/netatalk-3.1.10/libevent'

/bin/mkdir -p ./include/event2

echo '/* event2/event-config.h' > include/event2/event-config.h

echo ' *' >> include/event2/event-config.h

echo ' * This file was generated by autoconf when libevent was built, and post-' >> include/event2/event-config.h

echo ' * processed by Libevent so that its macros would have a uniform prefix.' >> include/event2/event-config.h

echo ' *' >> include/event2/event-config.h

echo ' * DO NOT EDIT THIS FILE.' >> include/event2/event-config.h

echo ' *' >> include/event2/event-config.h

echo ' * Do not rely on macros in this file existing in later versions.'>> include/event2/event-config.h

make && sudo make install

   

매우 오래걸리니 바람이라도 쐬고 오시길..

   

make[1]: Leaving directory '/home/pi/Downloads/netatalk-3.1.10/test'

make[1]: Entering directory '/home/pi/Downloads/netatalk-3.1.10'

make[2]: Entering directory '/home/pi/Downloads/netatalk-3.1.10'

make  install-exec-hook

make[3]: Entering directory '/home/pi/Downloads/netatalk-3.1.10'

Running ldconfig to ensure libraries installed in system library directories are added to the dynamic linker cache ... done

make[3]: Leaving directory '/home/pi/Downloads/netatalk-3.1.10'

make[2]: Nothing to be done for 'install-data-am'.

make[2]: Leaving directory '/home/pi/Downloads/netatalk-3.1.10'

make[1]: Leaving directory '/home/pi/Downloads/netatalk-3.1.10'

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $ 

드디어 설치가 끝났네요

   

afpd -version

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $ afpd -version

afpd 3.1.10 - 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 

   

              afp.conf: /usr/local/etc/afp.conf

           extmap.conf: /usr/local/etc/extmap.conf

       state directory: /usr/local/var/netatalk/

    afp_signature.conf: /usr/local/var/netatalk/afp_signature.conf

      afp_voluuid.conf: /usr/local/var/netatalk/afp_voluuid.conf

       UAM search path: /usr/local/lib/netatalk//

  Server messages path: /usr/local/var/netatalk/msg/

   

pi@rasp2-dev:~/Downloads/netatalk-3.1.10 $ 

3.1.10 버전 설치가 끝났네요

   

  • Netatalk 설정

   

이제 afpd.conf를 수정해줍니다

혹시 모르니 백업먼저..

sudo cp /usr/local/etc/afp.conf /usr/local/etc/afp.conf.bk

sudo vim /usr/local/etc/afp.conf

  1 ;

  2 ; Netatalk 3.x configuration file

  3 ;

  4 

  5 [Global]

  6 ; Global server settings

  7 hostname = rasp2-dev

  8 spotlight = no

  9 

 10 [Homes]

 11 ; basedir regex = /xxxx

 12 basedir regex = /home

 13 

 14 ; [My AFP Volume]

 15 ; path = /path/to/volume

 16 

 17 [Time Machine]

 18 path = /mnt/TimeMachine

 19 time machine = yes

~                                                                              

~                                                                              

                                                             1,1           All

; 이 주석인가 보네요

   

[Time Machine]

path = /mnt/TimeMachine

time machine = yes

요정도 적어주면 됩니다

   

  • Netatalk 시작

   

pi@rasp2-dev:~ $ sudo service netatalk start

pi@rasp2-dev:~ $ 

netatalk 를 실행합니다


그리고 부팅시 자동 시작을 위해 시작 서비스에도 등록합니다

sudo update-rc.d netattalk defaults

  • 네트워크 드라이브

   

이제 Finder에서 공유목록에 pi가 잡히는걸 볼 수 있습니다

사이드 메뉴에 떡하니 보이네요

더블클릭으로 직접 연결해도 되지만

   

메뉴 -> 이동 -> 서버에 연결 (K)

   

서버 주소 에 pi 의 ip를 넣어줍니다

TimeMachine으로 직접 연결해도 됩니다

   

연결중 메뉴와 함께 서버 인증을 하면

   

   

바탕화면에 연결된게 떡하니 보이네요

   

  • Time Machine 설정

   

시스템 환경설정에서 Time Machine 을 클릭합니다

   

백업 디스크 선택

   

Time Machine 이 보이네요 rasp2-dev 에서라고 적혀있는걸보니 네트워크드라이브가 맞겠죠

   

연결정보를 입력하면

   

연결된것을 볼수 있어요

화면에선 체크를 꺼놨는데.. 자동으로 백업이 켜있어 바로 백업을 시작할거에요

수동으로 하실분은 체크를 꺼주시는게 좋습니다

다시 디스크 선택을 클릭하면

   

백업 디스크 등록된걸 볼수있습니다

   

수동으로 하실분은 메뉴막대를 이용하면 편합니다

지금 백업을 클릭하면 백업을 시작합니다

   

백업을 클릭해놨더니 메뉴가 바껴서 나오네요

   

그리고.. hamachi를 자동시작하게 하려로 rc.local에 명령어 한줄 넣어놨었는데..

sudo update-rc.d logmein-hamachi defaults 명령으로 등록할 수 있었나봐요.. 대박..

좋은걸 배웠네요

   

추가/삭제

sudo update-rc.d script defaults

sudo update-rc.d script remove

   

   


반응형

관련글 더보기

댓글 영역