Docker

Docker - iCloud 사진 백업

철없는 사내 2023. 1. 8. 23:08
반응형

Docker를 이용한 iCloud 사진 백업 방법 정리.

순서에 따라 진행해도 되지만 Docker에 대한 기본적인 사용방법을 알고 있다는 전재하에 진행합니다.  Docker가 생소하다면 생활코딩 Docker 입문과정만 봐도 됩니다. (전체 1시간 분량 https://www.youtube.com/playlist?list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf

 

생활코딩 Docker 입구 수업

 

www.youtube.com

 

 

1. Docker Host를 운영체제에 맞게 설치합니다. 

https://docs.docker.com/get-docker/

 

Get Docker

 

docs.docker.com

 

2. Docker host에 image를 다운로드 받습니다.  

docker pull boredazfcuk/icloudpd

 

3. image를 실행해서 container 로 만들어야 합니다. 

Run 버튼을 누른다음 Option setting를 눌러 옵션을 넣어 줍니다.

Container name 은 icloudpd 로 넣습니다.


중요
Volumes Host path는
본인 컴퓨터 혹은 나스에 사진을 백업받을 path를 넣고 Container path는 /home/user/iCloud로 넣습니다.

Environment variables 에 apple_id 값에 본인의 apple id를 적어줍니다.

그리고 Run으로 실행

 

만일 CLI에서 입력해야 한다면 다음과 같은 명령어 형식으로 입력합니다. (" 표는 제외) 

docker run --name icloudpd --env=apple_id="본인의 Apple ID" --volume="컴퓨터에 사진을 저장할 경로":/home/user/iCloud -d boredazfcuk/icloudpd:latest

 

4. Docker 에사 icloudpd 로그 선택해서 확인해 보거나 아래 CLI 명령을 입력해서 로그를 확인해 봅니다. 

docker logs icloudpd

아래와 같은 에러와 정보에서 멈춰있어야 합니다. 
ERROR    Keyring file /config/python_keyring/keyring_pass.cfg does not exist

INFO      - Please add the your password to the system keyring using the --Initialise script command line option

INFO      - Syntax: docker exec -it <container name> sync-icloud.sh --Initialise

INFO      - Example: docker exec -it icloudpd sync-icloud.sh --Initialise

 

5.  Terminal을 열어서 다음 명령을 넣어주거나 ssh로 연결한 상태에서 다음과 같이 명령어를 넣어 줍니다. 

 docker exec -it icloudpd sync-icloud.sh --Initialise

정상적으로 실행되었다면 다음과 같은 메시지가 나타납니다. 

docker exec -it icloud_pd sync-icloud.sh --Initialise

2023-01-08 12:13:55 INFO     ***** boredazfcuk/icloudpd container for icloud_photo_downloader started *****
2023-01-08 12:13:55 INFO     ***** For support, please go here: https://github.com/boredazfcuk/docker-icloudpd *****
2023-01-08 12:13:55 INFO     ***** /usr/local/bin/sync-icloud.sh date: 2022/12/28_21:22 *****
2023-01-08 12:13:55 INFO     ***** /usr/local/bin/sync-icloud.sh hash: a4728cb97b760a5c9d7cc3f54cdb2f44 *****
2023-01-08 12:13:55 INFO     Alpine Linux 3.17.0
2023-01-08 12:13:55 INFO     Python version: 3.10.9
2023-01-08 12:13:56 INFO     icloudpd version: 1.7.2
2023-01-08 12:13:56 INFO     pyicloud-ipd version: 0.10.1
2023-01-08 12:13:56 INFO     Running user id: 0
2023-01-08 12:13:56 INFO     Running group id: 0
2023-01-08 12:13:56 INFO     Local user: user:1000
2023-01-08 12:13:56 INFO     Local group: group:1000
2023-01-08 12:13:56 INFO     Force GID: False
2023-01-08 12:13:56 INFO     LAN IP Address: 172.17.0.2
2023-01-08 12:13:56 INFO     Default gateway: 172.17.0.1
2023-01-08 12:13:56 INFO     DNS server: 192.168.65.5
2023-01-08 12:13:56 INFO     IP address for icloud.com: 17.253.144.10
2023-01-08 12:14:25 INFO     Route check to icloud.com successful
2023-01-08 12:14:25 INFO     Apple ID: **********@me.com
2023-01-08 12:14:25 INFO     Authentication Type: 2FA
2023-01-08 12:14:25 INFO     Cookie path: /config/*********mecom
2023-01-08 12:14:25 INFO     Cookie expiry notification period: 7
2023-01-08 12:14:25 INFO     Download destination directory: /home/user/iCloud
2023-01-08 12:14:25 INFO     Folder structure: {:%Y/%m/%d}
2023-01-08 12:14:25 INFO     Directory permissions: 750
2023-01-08 12:14:25 INFO     File permissions: 640
2023-01-08 12:14:25 INFO     Synchronisation interval: 86400
2023-01-08 12:14:25 INFO     Synchronisation delay (minutes): 0
2023-01-08 12:14:25 INFO     Set EXIF date/time: False
2023-01-08 12:14:25 INFO     Auto delete: False
2023-01-08 12:14:25 INFO     Photo size: original
2023-01-08 12:14:25 INFO     Single pass mode: False
2023-01-08 12:14:25 INFO     Skip download check: False
2023-01-08 12:14:25 INFO     Skip live photos: False
2023-01-08 12:14:25 INFO     Number of most recently added photos to download: Download All Photos
2023-01-08 12:14:25 INFO     Downloading photos from album: Download All Photos
2023-01-08 12:14:25 INFO     Stop downloading when prexisiting files count is: Download All Photos
2023-01-08 12:14:26 INFO     Live photo size: original
2023-01-08 12:14:26 INFO     Skip videos: False
2023-01-08 12:14:26 INFO     Convert HEIC to JPEG: False
2023-01-08 12:14:26 INFO     JPEG conversion quality: 90
2023-01-08 12:14:26 INFO     Downloading from: icloud.com
2023-01-08 12:14:26 INFO     Nextcloud synchronisation trigger: Disabled
2023-01-08 12:14:26 INFO     Script launch parameters: --Initialise
2023-01-08 12:14:26 INFO     Group, group:1000, already created
2023-01-08 12:14:26 INFO     User, user:1000, already created
2023-01-08 12:14:26 INFO     Correct owner on icloudpd temp directory, if required
2023-01-08 12:14:26 INFO     Correct group on icloudpd temp directory, if required
2023-01-08 12:14:26 INFO     Correct owner on config directory, if required
2023-01-08 12:14:26 INFO     Correct group on config directory, if required
2023-01-08 12:14:26 INFO     Correct owner on keyring directory, if required
2023-01-08 12:14:26 INFO     Correct group on keyring directory, if required
2023-01-08 12:14:26 INFO     Configure password
2023-01-08 12:14:26 INFO     Keyring file /config/python_keyring/keyring_pass.cfg exists, but does not contain any credentials. Removing
2023-01-08 12:14:26 INFO     Adding password to keyring file: /config/python_keyring/keyring_pass.cfg

그리고 iCloud 비밀번호를 저장할지 물어봅니다 Y를 입력합니다. 

Enter iCloud password for *********@me.com: 
Save password in keyring?  [y/N]: Y

이중인증이 필요하다고 합니다. SMS로 인증번호를 받으려면 0 번을 신뢰할 수 있는 장비로 받으려면 1번을 누릅니다.

그리고 6자리 인증번호를 넣어주고 Sync should now be successful 이 나오면 성공입니다. 

INFO     Generate 2FA cookie using password stored in keyring file
  0: SMS to ********71
  1: Enter two-factor authentication code
Please choose an option: [0]: 1
Please enter two-factor authentication code: ****55
INFO     Two factor authentication cookie generated. Sync should now be successful


6. 백업폴더 등록은 끝났지만 /home/user/iCloud/.mounted 파일을 만들어줘야 합니다. 터미널을 이용해서 다음 명령을 입력하거나 혹은 본인 컴퓨터 혹은 나스에 사진을 백업받을 폴더에 메모장을 이용해서 ".mounted" (확장자가 없음) 파일을 만들어서 넣어줘도 됩니다.

touch /home/user/iCloud/.mounted

 

7. 완료가 되면 다음과 같이 백업 할 파일의 리스트를 만든 다음 다운로드합니다. (리스트 업에 시간이 걸리기 때문에 실제 다운로드 시작은 한참 후에 진행됩니다. 

INFO     Failsafe file /home/user/iCloud/.mounted exists, continuing
INFO     Check for new files using password stored in keyring file
INFO     Generating list of files in iCloud. This may take a long time if you have a large photo collection. Please be patient. Nothing is being downloaded at this time
/home/user/iCloud/2023/01/07/IMG_1129.PNG
/home/user/iCloud/2023/01/07/IMG_1128.PNG
/home/user/iCloud/2023/01/07/IMG_1127.PNG
/home/user/iCloud/2023/01/07/IMG_1126.JPG
/home/user/iCloud/2023/01/07/69477424093__CBEF92D4-B6C9-4B9A-B49D-10EACF0407A3.HEIC
/home/user/iCloud/2023/01/07/69477424093__CBEF92D4-B6C9-4B9A-B49D-10EACF0407A3_HEVC.MOV
/home/user/iCloud/2023/01/07/69477414311__3B11BDE5-B8C9-49AF-A32A-F5D91440B966.HEIC
/home/user/iCloud/2023/01/07/69477414311__3B11BDE5-B8C9-49AF-A32A-F5D91440B966_HEVC.MOV

Update 2023.3.2: iCloudpd를 사용하다 보면 재인증을 해줘야 하는 경우가 생김.

SSH로 나스나 서버에 연결하고 나서 다음 명령어를 넣어서 2중 인증을 갱신해주면 됨.

 sudo docker exec -it icloudpd sync-icloud.sh --Initialise
반응형