Docker - iCloud 사진 백업
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