MacOS Mojave์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ธฐ๋ฅ์ ํ์ผ์ ๋ํ ์ ํ์ ์ธ ์ก์ธ์ค๋ฅผ ์ ํํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค(์ต์ํ ๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒฝ์ฐ). ์ ๊ทธ๋ ์ด๋ ์ ์ ๋ฐ์ง ๋ชปํ ๊ถํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋งฅOS 10.14
sudo๋ก ์คํ:
can not obtain extended attribute com.apple.rootless for /Library/Application Support/com.apple.TCC
error: Open: open /Library/Application Support/com.apple.TCC: operation not permitted
error: open /Library/Preferences/com.apple.TimeMachine.plist: operation not permitted
... ๋ค๋ฅธ ๋ง์ ํ์ผ.
restic version
์ ์ถ๋ ฅ0.9.2(์์ ์์ ๊ฐ์ฅ ์ต๊ทผ)
Mojave๋ก ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ๋ช ๋ฌ ์ ์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ bash ์คํฌ๋ฆฝํธ๋ ๋ฃจํธ ๊ถํ์ผ๋ก ์คํ๋ฉ๋๋ค.
RESTIC_PASSWORD_FILE="/path/to/file.txt" \
HOME="/path/to/homedir" \
/usr/local/bin/restic \
--repo sftp:myserver.local:my/repo/path \
--option='sftp.command=ssh -p REDACTEDPORT -i REDACTEDKEYFILE -o identitiesonly=yes -l restic myserver.local -s sftp' \
--exclude-file="${DIR}/global-exclude.txt" \
--exclude-if-present='.norestic' \
backup \
--cleanup-cache \
/ \
&>> /path/to/file.log
์์ ๊ฐ์ด sftp. ์ด์ ๊ณผ ๋์ผํ ๋ฆฌํฌ์งํ ๋ฆฌ.
๋ฃจํธ๋ก ์คํํ ๋ ๋ชจ๋ ํ์ผ์ ์ฝ๊ณ ๋ฐฑ์ ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์์ ๊ฐ์ด
sudo bash restic-backup.sh
(์ ์คํฌ๋ฆฝํธ)
๋ด ์ถ์ธก:
์๋์ค. ์ง๊ธ๊น์ง ์๋ํ ๊ฒ:
setcap
์ฌ์ฉํ ์ ์์ต๋๋ค.ํ๋ฅญํ๊ณ ์์ ์ ์ด๋ฉฐ ์คํฌ๋ฆฝํ ๊ฐ๋ฅํ ์คํ ์์ค ๋ฐฑ์ ์๋ฃจ์ ์ ์ฐพ๊ธฐ ์ํด ์๋ ๊ฐ ๋ ธ๋ ฅํ ๋์ ์ด ์๋ฃจ์ ์ด ๋ฑ ๋ง๋ ์๋ฃจ์ ์ ๋๋ค. ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
์, ๋ถ๋ช ํ ์ ์ฒด ๋์คํฌ ์ก์ธ์ค ์์ ์ ์ํํด์ผ ํฉ๋๋ค. https://www.backblaze.com/blog/mojave-permissions/
์ฌ๋ฐ๋ฅธ restic ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ถ๊ฐํ์ต๋๊น _ํ์คํ_? ์์คํ ํ๊ฒฝ์ค์ ์ ์ ์ฒด ๋์คํฌ ์ ๊ทผ์ ํ์ผ์ ์ถ๊ฐํ ํ ํ์ผ์ ์ด๋ํ๊ฑฐ๋ ์์ฑ(์์ ๊ถ ๋ฑ)์ ๋ณ๊ฒฝํ์ต๋๊น?
(์ ๋ Mac์ด ์์ง๋ง ์์ง Mojave๊ฐ ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค.)
์ ๋ homebrew๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋จผ์ /usr/local/bin/restic
๋ฅผ ์ ์ฒด ๋์คํฌ ์ก์ธ์ค์ ์ถ๊ฐํ๊ณ ์์
์ ์์ํ๊ณ ๋์ผํ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฅผ ์ ๊ฑฐํ๊ณ ์ค์ ๋ฐ์ด๋๋ฆฌ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ์ต๋๋ค(๋ถํํ๊ฒ๋ ์ด ๊ฒฝ๋ก๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค. ๋งค๋ฒ restic updates): /usr/local/Cellar/restic/0.9.2/bin/restic
, ๋ถํํ๋ ๋์ผํ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ ์์, ์ ์ฒด ๋์คํฌ ์ก์ธ์ค์ ๋ฐ์ด๋๋ฆฌ ์ถ๊ฐ, ํฐ๋ฏธ๋๋ก ๋ค์ ์ ํํ๊ณ sudo myscript.sh
์คํํ๋๋ฐ ๋๋ถ๋ถ์ ํ์ผ์์ ์๋ํ์ง๋ง ๋ค๋ฅธ ํ์ผ์์๋ ๊ถํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ฐธ๊ณ ๋ก, ๋ด sftp pubkey ์ธ์ฆ์ด launchctl(๋ฃจํธ)์์ ์คํํ ๋ ์๋์ด ์ค์ง๋์ง๋ง ๋ฃจํธ๋ก ์๋์ผ๋ก ์คํํ ๋๋ ์๋ํ๋ ๋ ๋ค๋ฅธ(Mojave ๊ด๋ จ) ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ด ์ค์ ๊ณผ ๊ด๋ จ์ด ์๋ ๋ฌธ์ ์ธ์ง ํ์ธํ ์ ์์ผ๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ธ์.
ํฅ๋ฏธ๋ก์ด. restic์ ์ง์ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋ฐ/๋๋ FDA์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ์์งํ ์ฌ๊ธฐ ์ด๋์ด ๊ณณ์์ ์ดฌ์ํฉ๋๋ค. Mojave๊ฐ ์์๋ค๋ฉด ์๋ํด ๋ณด์์ ๊ฒ์ ๋๋ค.
์ข์ ์๊ฐ์ ๋๋ค.
๋ด /usr/local/bin/bash
์์ฒด๋ ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค sudo bash myscript.sh
์คํํ ์ ์๊ธฐ ๋๋ฌธ์ FDA์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
FDA์ /usr/local/bin/bash
๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฃผ์ฌ์๊ฐ ์์ต๋๋ค.
ํธ์ง: chmod +x
์ดํ์๋ ๋ด backup.sh
๋ ์ฌ์ ํ FDA์ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค( bash
๋ฐ restic
๋ฐ์ด๋๋ฆฌ ํ ์์๋ค). ์ด์ํ.
EDIT2: ์ฒ ์ ํ ํ๊ธฐ ์ํด bash
๋ฐ restic
๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ชจ๋ FDA์ ์ถ๊ฐํ๋๋ฐ ๋์ผํ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
์๋ง๋ restic๋ณด๋ค ๋ ํฐ ๋ฌธ์ ์ผ ๊ฒ์
๋๋ค /bin/ls
๋ฅผ FDA ๋ชฉ๋ก์ ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
$ sudo /bin/ls /Users/me/Library/Suggestions
ls: Suggestions: Operation not permitted
ํธ์ง: ์ถ์
ํ ํด๊ฒฐ ๋ฐฉ๋ฒ: FDA ๊ถํ์ Terminal.app
๋ฅผ ์ถ๊ฐํ๋ฉด ๊ถํ ์ค๋ฅ๊ฐ ์ฌ๋ผ์ง๋๋ค.
๊ด๋ จ ์ค๋ ๋: https://forums.developer.apple.com/thread/107546
๋๋จธ์ง ๋ฐ์ด๋๋ฆฌ์ backup.sh
์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋ codesign
์๋ํ๊ณ FDA์ ์ถ๊ฐํ์ง๋ง ์ด์ด ์์์ต๋๋ค.
(๊ทธ ์ค๋ ๋์ ์ผ๋ถ๋ฅผ ์ฝ์ ํ) ๋ง์์ฌ. ์ด๊ฒ์ ๋งค์ฐ ์ฑ๊ฐ์ ์ผ์ ๋๋ค. ์กฐ์ฌํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ ๊ทธ๋ ์ด๋๋๋ฉด ๊ณ์ ์กฐ์ฌํ๊ฒ ์ต๋๋ค...
์์ฐ, ์ ๋ณด ์ ๊ณต๊ณผ ๋ฌธ์ ํด๊ฒฐ์ ๋ง์ ์๊ฐ์ ํ ์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ ๋ Mac์ ์ ํ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ๋ถ ๋ชจ๋ ์์๋ผ ์ ์๊ณ ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ์ํด ์ด ๋ฌธ์ ๋ฅผ ๋ฌธ์ํํ ์ ์๋ค๋ฉด ๊ธฐ์ฉ๋๋ค! ๋ค์ ๊ฐ์ฌํฉ๋๋ค!
@mholt ์ํ๋ ๊ฒฝ์ฐ VMware Fusion์ 30์ผ ํ๊ฐํ์ ์ค์นํ๊ณ Mojave๋ฅผ ์ค์นํ ์ ์์ต๋๋ค(Apple์ด ์์ ์ค์น ๊ธฐ๋ฅ์ ์์์ํค์ง ์๋ ํ). ์ด ํ๊ฐํ์ ์ค์ผ์ ์ผ์ผํค์ง ์์ผ๋ฉฐ ๋์ค์ ์ํ์ง ์์ผ๋ฉด ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์์์ System Preferences
-> Security & Privacy
-> Full Disk Access
๋ชฉ๋ก์ Terminal.app
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์ธ๊ธํ์ต๋๋ค. ์๋์ผ๋ก ์คํฌ๋ฆฝํธ( sudo /usr/local/bin/bash mybackup.sh
) ๊ถํ ์ค๋ฅ ์์ด ์๋ํ๋ ๊ฒ ๊ฐ์์ต๋๋ค.
์ด๋ค ์ด์ ์์์ธ์ง ์ค๋ ์์นจ ์๋ํ๋ ์ผ๊ฐ restic ์คํ(๋ฃจํธ ๊ถํ์ผ๋ก ์ผ๊ฐ์ ์คํ๋๋ /Library/LaunchDaemons/com.n8henrie.restic.plist
#$5$#$์ launchd
์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ)์์ ๋ด ๋ก๊ทธ๋ฅผ ํ์ธํ์ ๋ ๊ถํ ์ค๋ฅ๊ฐ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
๋ถํํ๋ ์ด์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. FDA์์ Terminal.app
๋ฅผ ์ฌ์ฉํ๋๋ผ๋ sudo launchctl start com.n8henrie.restic
๋๋ sudo /usr/local/bin/bash mybackup.sh
๋ฅผ ์คํํ ๋ ์ฌ์ ํ ๊ถํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ํ์ง ์๊ฑฐ๋ ๋ฌด์ธ๊ฐ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง: ์, FDA์ Terminal.app
, /usr/local/bin/bash
๋ฐ /usr/local/Cellar/restic/0.9.2/bin/restic
3๊ฐ๋ฅผ ๋ชจ๋ ์ถ๊ฐํ๋๋ฐ ์ด์ ์ค๋ฅ ์์ด ์คํ๋์์ต๋๋ค. ๐คทโโ๏ธ
FWIW, ์ฌ๊ธฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ํ์ผ ๋ชฉ๋ก์ด ํฌํจ๋ ๋ด ๋ก๊ทธ ์ถ๋ ฅ ์ด ์์ต๋๋ค. ๋ณด์๋ค์ํผ ๋ด ์ฌ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๋ช ๊ฐ์ง ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@n8henrie ์ด์ ์ ๋งํฌํ Mac ์ง์ ์ค๋ ๋์์ FDA๋ ์น์ธ๋ ์ฑ์ด Applications ํด๋์ ๋ฑ๋ก๋ .app ๋ฒ๋ค์ด์ด์ผ ํ๋ค๊ณ ์๊ตฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด Terminal.app์ด ์ฑ๊ณตํ ์ด์ ์ผ ์ ์์ต๋๋ค... ํ์ง๋ง 3๊ฐ๋ฅผ ๋ชจ๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๊ทํ์ ๊ฒฝ์ฐ FDA์? ํฅ๋ฏธ๋ก์ด...
@mholt ๋ญ๊ฐ ๋ค๋ฅธ ์ผ์ด ์ผ์ด๋๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ด์ ์ ๋๊ฐ์ด ์ค์ ์ ๊ทธ๋๋ก ๋์๊ณ (FDA์์ 3๊ฐ ๋ชจ๋ ํ๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์) ๋ฐค์ ์คํํด๋ ์ฌ์ ํ ๋์ผํ ์ด์ ํ๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด๊ฒ์ ์ง๊ธ ๋ ๋ฒ ๋ฐ์ํ์ต๋๋ค. ์ ์ ๋์ ์์ ํ ํ ๊ถํ ์ค๋ฅ ์์ด ์คํ๋๊ณ ๋ค์ ๋ํ๋ฉ๋๋ค. restic์ ํ์ผ์ ์ด์ง ์๊ณ ๋ ํ์ผ์ด ๋ณ๊ฒฝ๋์๋์ง ์ฌ๋ถ๋ฅผ ์ด๋ป๊ฒ ๋ ์ ์ ์์ต๋๊น? ์ผ์ข ์ ์บ์์ ๋๊น? ๋ฐ์ ํ๊ฒ ํจ๊ป ์ํ๋๋ ์คํ์ ์๊ณ ์๊ณ ํ์ผ์ ๋ํ ์ค๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฏ๋ก restic์ด ํ์ผ์ ์ด๋ ค๊ณ ์๋ํ์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ค๋ช ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์ข์ ์ง๋ฌธ. ๋๋ restic์ด ์บ์๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ถํ ์ค๋ฅ ๋ฑ์ ๊ฒฝ์ฐ ์บ์๋ฅผ ์ผ๋ง๋ ์ ๊ทน์ ์ผ๋ก ์ค์ํ๋์ง ์ดํด๋ณด์ง ์์์ต๋๋ค.
SO์์์ ๊ด๋ จ ํ ๋ก : https://apple.stackexchange.com/q/338213/27415
์ข์ ์ง๋ฌธ. ๋๋ restic์ด ์บ์๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ถํ ์ค๋ฅ ๋ฑ์ ๊ฒฝ์ฐ ์บ์๋ฅผ ์ผ๋ง๋ ์ ๊ทน์ ์ผ๋ก ์ค์ํ๋์ง ์ดํด๋ณด์ง ์์์ต๋๋ค.
๋ณ๋ง์์ ์. ์บ์์๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํ์ผ๋ง ํฌํจ๋๋ฉฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์๋ ํ์ผ ์์คํ ์ ๋ํ ์ ๋ณด๋ ํฌํจ๋์ง ์์ต๋๋ค.
์ข์์ -- ์, ์ด๊ฒ์ด restic์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ํ์คํ macOS Mojave ๋ฌธ์ ์ ๋๋ค. ์ด ์์ ์์ ๋๋ restic ์์ฒด๊ฐ ๊ณ ์น ์ ์๋ ์ด๋ค ๊ฒ๋ ํ ์ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
ํผ๋๋ฐฑ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๊ธ์ ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๊ฒ ์ต๋๋ค. ๋น์ ์ด ๋ฌผ๊ฑด์ ์ฐพ์ผ๋ฉด ๋ ๋ง์ ์๊ฒฌ์ ์ถ๊ฐํ์ญ์์ค. ๊ฐ์ฌ ํด์!
๋ฌธ์ ๊ฐ ์ด๋ฏธ ์ข
๋ฃ๋ ๊ฒ์ ๋ณด๊ณ ์กฐ๊ธ ๋๋์ต๋๋ค.
์ฃผ์ ํ๋ซํผ๊ณผ์ ์ฃผ์ ๋นํธํ์ฑ ๋ฐ ์ด ์์ ์์ ์ข
๋ฃ
"๋์ ๋์ง ์๊ฒ, ๋ง์์์ ๋ฉ์ด์ง๊ฒ" ํ ์ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ์ฃผ๋ก ์ ํ์ ์ธ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ๋ณด์
๋๋ค.
MacOS ์ฌ์ฉ์๊ฐ ์ทจํ ์ ์๋ ๋ช ๊ฐ์ง ํฉ๋ฆฌ์ ์ธ ๋จ๊ณ๊ฐ ์์ต๋๋ค. ๊ทธ๋๋ก,
๊ฐ์ฅ ์ค์ํ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ฐฑ์
ํ ์ ์๋ ์ฌ์ฉ์์ ๋ฅ๋ ฅ
๋ฐ์ดํฐ(์: ์ฌ์ง)๋ ์ ํ์ฌ ๋ฒ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์๋ฉ๋๋ค.
๋งฅ OS. ๋ฐฑ์
์ํํธ์จ์ด์ ๊ฒฝ์ฐ ์ ์๊ฒ๋ ํฐ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค!
๋ช ๊ฐ์ง ์ ์/๊ฐ๋ฅ์ฑ(์์ ์ ๋๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค):
์ ๋ฐ์ ์ผ๋ก ์ํฉ์ ๋ฃจํธ๊ฐ ์๋ ์ ์ฒด ๋ฐฑ์
๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
Linux์์ SIP๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๋ฃจํธ ๋ฐ ํฉ๋ฆฌ์ ์ผ๋ก ์์ ํ ํํ์ ๊ฒฐ์ ํ๊ณ ๊ถ์ฅํฉ๋๋ค.
FDA๋ setcap
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๋ถํํ๋ ๋ด MacBook์ด ์ด๋ฒ ์ฃผ์ ๋งค์ฅ์ ์์ผ๋ฏ๋ก ํ ์ ์์ต๋๋ค.
์ด ์ค ํ๋์ ๋ํด ์ฆ์ ์์
ํ์ง๋ง ์๊ฐ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋๋ค๋ก๋ถํฐ; ์๋ง๋ ๋๋ ๊ธฐ์ด์์ ๋ฒ์ด๋ ์๊ฑฐ๋ ์๋ง๋ ์ธ๋ถ ์ฌํญ์ ๋ํด ๋ฌด์ง ํ ๊ฒ์
๋๋ค.
๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๋จธ์ง ํ ์ํฌํ๋ก.
๋ด ์ปดํจํฐ๋ฅผ ๋์ฐพ์๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ์ ๋ฐ์ดํธ๊ฐ ๋ ์์ต๋๋ค.
๋ด launchd ์คํฌ๋ฆฝํธ์์ ์ ์ฒด ์์คํ ๋ฐฑ์ ์ ๊ฐ์ ธ์ฌ ๋ ์์ ์ฑ๊ณต์ ๋ณต์ ํ ์ ์์ต๋๋ค.
FDA ๋ชฉ๋ก์ ์๋์ ๋ชจ๋ ํญ๋ชฉ์ ๋์์ ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์คํ์ ์ํด ๋ฒ ์ด ๋ฐ์ด๋๋ฆฌ๋ FDA ๋ชฉ๋ก์ ์ถ๊ฐ๋ ๋ ์ ๋๋ก ์๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ฝ๋ ์ค๊ณ์ ์๋ฌด ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. MacOS์ Homebrew์์ ์ ๊ณตํ๋ ls
๋ฐ์ด๋๋ฆฌ๋ฅผ ๋น๊ตํ์ญ์์ค.
$ codesign -d /bin/ls
Executable=/bin/ls
$ codesign -d /usr/local/opt/coreutils/libexec/gnubin/ls
/usr/local/opt/coreutils/libexec/gnubin/ls: code object is not signed at all
FDA ๋ชฉ๋ก ์ด์ ๋ฐ ์ถ๊ฐ:
$ /bin/ls ~/Library/Mail
ls: Mail: Operation not permitted
$ /usr/local/opt/coreutils/libexec/gnubin/ls ~/Library/Mail
ls: cannot open directory '/Users/n8henrie/Library/Mail': Operation not permitted
$ # Added to FDA
$ /bin/ls ~/Library/Mail
PersistenceInfo.plist V6
$ /usr/local/opt/coreutils/libexec/gnubin/ls ~/Library/Mail
PersistenceInfo.plist V6
๋ํ ls
๊ฐ FDA์ ์๋ ํ bash ์คํฌ๋ฆฝํธ์ ๋ฃ์ ๋ ์ ๋๋ก ์๋ํ๋ฏ๋ก( bash
๋ฅผ ๋ณ๋๋ก ์ถ๊ฐํ ํ์๊ฐ ์์) restic
๋ง ์ถ๊ฐํ๋ฉด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ๋น๊ต๋ฅผ ์ํด FDA์ ์๋ ๊ฒฝ์ฐ ๋ค์ Go ์คํฌ๋ฆฝํธ ์ค๋ฅ๋ฅผ โโ์คํํ์ง๋ง ๋ฐ์ด๋๋ฆฌ๊ฐ FDA์ ์๋ ํ launchd์์ ํธ์ถํ ๋๋ฟ๋ง ์๋๋ผ ์์ฒด์ ์ผ๋ก๋ ์ ์๋ํฉ๋๋ค(launchd / launchctl / ๋ค๋ฅธ ๊ฒ์ ์ถ๊ฐํ ํ์ ์์).
package main
import (
"fmt"
"io/ioutil"
)
func main() {
matches, err := ioutil.ReadDir("/Users/n8henrie/Library/Mail")
if err != nil {
fmt.Println("Err:", err)
} else {
for _, match := range matches {
fmt.Println(match.Name())
}
}
}
์ฐ์ถ:
$ ./gotest
Err: open /Users/n8henrie/Library/Mail: operation not permitted
$ # Add to FDA
$ ./gotest
.DS_Store
PersistenceInfo.plist
V6
๋ค์์ผ๋ก ๋๋ FDA์ ์ถ๊ฐ๋ ๊ฒฝ์ฐ์๋ ํ๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ฅผ ์์๋ผ ์ ์๋์ง ์์๋ณด๊ธฐ ์ํด Restic์ผ๋ก ๋ช ๊ฐ์ง ์คํ์ ํ ๊ฒ์ ๋๋ค.
๋ค, ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค! ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ด๊ฒ ์ต๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์์๋ธ ๋ค์ ์ค๋ช ์์ ๋ช ๊ฐ์ง ๋ฌธ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
~FDA ๋ชฉ๋ก์ restic
๊ฐ ์ถ๊ฐ๋ ์ํ์์ ์๋ก์ด repo์์ Open
์ค๋ฅ๊ฐ ๊ณ์ ๋ฐ์ํฉ๋๋ค.~
์๋ ํธ์ง์ ์ฐธ์กฐํ์ญ์์ค.
$ restic -r /tmp/restic backup ~/Library/Mail -vvv
open repository
enter password for repository:
repository 9ccb5357 opened successfully, password is correct
created new cache in /Users/me/Library/Caches/restic
lock repository
load index files
start scan on [/Users/me/Library/Mail]
start backup on [/Users/me/Library/Mail]
scan: Open: open /Users/me/Library/Mail: operation not permitted
scan finished in 1.849s: 0 files, 0 B
can not obtain extended attribute com.apple.quarantine for /Users/me/Library/Mail:
error: Open: open /Users/me/Library/Mail: operation not permitted
new /Users/me/Library/, saved in 0.012s (0 B added, 13 B metadata)
new /Users/me/, saved in 0.012s (0 B added, 381 B metadata)
new /Users/, saved in 0.013s (0 B added, 379 B metadata)
Files: 0 new, 0 changed, 0 unmodified
Dirs: 3 new, 0 changed, 0 unmodified
Data Blobs: 0 new
Tree Blobs: 4 new
Added to the repo: 1.119 KiB
processed 0 files, 0 B in 0:01
snapshot 4a658c73 saved
$ restic -r /tmp/restic ls latest
enter password for repository:
repository 9ccb5357 opened successfully, password is correct
snapshot 4a658c73 of [/Users/me/Library/Mail] filtered by [] at 2018-11-04 11:30:05.334024 -0700 MST):
/Users
/Users/me
/Users/me/Library
ํธ์ง: ์ด ์๊ฒฌ์ ๋ฌด์ํ์ญ์์ค -- ์ด์ MacOS 10.14.1๋ก ์
๋ฐ์ดํธํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์งํ ์ํฉ์ ํผ๋์ค๋ฝ๊ฒ ๋ง๋๋ ๊ฐํ์ ์ธ ์ค๋ฅ๊ฐ ์ฌ์ ํ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ์ค๋๋ , FDA์ ์ผ๊ด๋๊ฒ ์๋ํ์ง๋ง FDA ์์ด๋ ์คํจํ ์ด์ ์ ๋์ผํ Go ์ฝ๋ (ํ์คํ ํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒ ์ผ๊ณ ๊ป๋ค ์ผฐ๋ค) ๋ FDA์์๋ ๋ ์ด์ ์๋ํ์ง ์์ต๋๋ค . ls
์ ๋์ผํฉ๋๋ค.
์ด์ ํ์ํ์ง ์์ Terminal.app
๊ฐ FDA์ ์ถ๊ฐ๋๋ฉด(๋จ๋
ํญ๋ชฉ์ผ๋ก) ์๋ํฉ๋๋ค.
๐คทโโ๏ธ
Apple ํฌ๋ผ์์ ์ด์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ์ผ๋ฉด ๋ค์ ๋ณด๊ณ ํ๊ฒ ์ต๋๋ค.
EDIT2: ์๋ด์ Macbook์ ์ฌ์ ํ โโ10.14์ ์์ผ๋ฉฐ /bin/ls ~/Library/Mail
๋ FDA์ ์ถ๊ฐ๋ /bin/ls
์ ํจ๊ป ์๋ํ์ง ์์ผ๋ฏ๋ก 10.14.1์์ ์๋ก์ด ๊ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๐
์์ง ์์ ์ค์ ๋๋ค.
๊ณ์ํด์ ๊ฝค ๊ณ ํต์ค๋ฝ์ต๋๋ค. ํ์ง๋ง ๋ง์นจ๋ด ์ ๋ชฉ์ ์ ๋ง๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๊ฒผ์ต๋๋ค.
์ฌ๊ธฐ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ธํ ์ค๋ช ํ์ง๋ง ๊ฒฐ๋ก ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Script Editor.app
๋ฅผ ์ฌ์ฉํ์ฌ AppleScript๋ฅผ ์์ฉ ํ๋ก๊ทธ๋จ ๋ฒ๋ค๋ก ๋ง๋ค ์ ์์ต๋๋ค. AppleScript๋ ๊ทํ์ restic ๋ฐฑ์
์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ(๋ด ๊ฒฝ์ฐ์๋ /path/to/restic-backup.sh
, ์ฌ๊ธฐ์ restic-backup.sh
๋ ๋ด๊ฐ ์ํ๋ ์ค์ ์ผ๋ก restic์ ์คํํ๋ bash ์คํฌ๋ฆฝํธ์), ๊ฒฐ๊ณผ ์ ํ๋ฆฌ์ผ์ด์
๋ฒ๋ค์ FDA์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ณดํธ๋ ํ์ผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ก ์ธํด ์์คํ
์์ค์์ ๋ฐฑ์
์คํ์ ์๋ํํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๋ด์ฅ๋ open
๋ช
๋ น์ ์๋ํ์ง๋ง ์ฌ์ฉ์ ๊ถํ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฏ๋ก ์์ FDA ๋ณดํธ ํ์ผ์ด ๋ฐฑ์
๋๋ ๋์ ๋ฃจํธ๋ง ์ฝ์ ์ ์๋ ํ์ผ(์: ๋ฃจํธ -์์ 0600 ๋ฌผ๊ฑด).
์ด ์์ ์์ ๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ AppleScript๊ฐ sudo
๋ก ๋ฐฑ์
์คํฌ๋ฆฝํธ๋ฅผ ํธ์ถํ๊ณ ์ํธ ์์ด ๋ฃจํธ ๊ถํ์ผ๋ก ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ ๊ถํ์ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌํ๋ ๊ฒ์
๋๋ค( sudo visudo
, NOPASSWD:
, ๋ฑ.).
์๋ฆ๋ต์ง๋ ์์ง๋ง ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ๋ง์ ์ ๋ฌธ ์ง์์ ๊ฐ์ถ MacOS ์ฌ์ฉ์์ ์ ์์ ์ํด ์ด ์ ๋ณด๋ฅผ ๊ณต๊ฐํ๊ณ ์ถ์ต๋๋ค. ๋ ๋ง์กฑ์ค๋ฌ์ด ๊ฒ์ด ์์ผ๋ฉด ์ด ์ ๋ณด๋ฅผ ๋ฌธ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค(์์งํ ์ด ์๋ฃจ์ ์ ๊ทธ๋ค์ง ๋ง์กฑ์ค๋ฝ์ง ์์ ๊ฒ ๊ฐ์ง๋ง).
๋ฏฟ์ ์ ์์ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ๊ณ ํจ์ฌ ๊นจ๋ํ๊ณ ๊ฐ๋จํฉ๋๋ค.
// Runrestic provides a binary to run my restic backup script in MacOS Mojave with Full Disk Access
package main
import (
"log"
"os"
"os/exec"
"path/filepath"
)
func main() {
ex, err := os.Executable()
if err != nil {
log.Fatal(err)
}
dir := filepath.Dir(ex)
script := filepath.Join(dir, "restic-backup.sh")
cmd := exec.Command("/usr/local/bin/bash", script)
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
}
๊ฒฐ๊ณผ ๋ฐ์ด๋๋ฆฌ๋ chown root
๋ฐ chmod 0700
์ผ ์ ์์ผ๋ฉฐ ์ ์ฒด ๋์คํฌ ์ก์ธ์ค์ ์ถ๊ฐํ๋ฉด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ /Library/LaunchDaemons
plist์ ์ถ๊ฐํ์ฌ ์๋์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
์ฒ์ 2๊ฐ์ ์คํ์ ์ง๊ธ๊น์ง ์๋ํ๊ณ ์์ต๋๋ค. ์์ ์ฌ๋ฌ ์๋ชป๋ ์์์ฒ๋ผ ๋๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด์ ฏ๋ฐค ์๋ ์คํ์ด ์๋ํ์ต๋๋ค. ์ ๋ ์ค๋ ์ด ์ ๋ต์ ์๋ด์ Macbook Air์ ๋ฐฐํฌํ๊ณ ์์ต๋๋ค. ๊ฑฐ๊ธฐ์์๋ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด ์ด๊ฒ์ ํฉ๋ฆฌ์ ์ธ ์์ ์ผ๋ก ๊ฐ์ฃผํ๊ณ https://github.com/restic/restic์ ๋ํ ์๊ท๋ชจ ํ๋ณด ์์ ์ ํ ๊ฒ์ ๋๋ค. net (ํฉ๋ฆฌ์ ์ธ ๊ฒฝ์ฐ).
์๋ ํ์ธ์ @n8henrie , ์ด ์ ํํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฐพ์ ํ ์ฌ๊ธฐ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ์ฐ๊ตฌ๋ฅผ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์์ ์๋ฃจ์ (๊ฐ๋จํ Go ๋ฐ์ด๋๋ฆฌ์์ ์ ธ ์คํฌ๋ฆฝํธ ํธ์ถ)์ด ์๋ํ์ง ์์ต๋๋ค. ๋ชจ๋ ํ์ผ์ ์ฑ๊ณต์ ์ผ๋ก ์ก์ธ์คํ๊ณ ์์ต๋๊น?
๋๋ ํนํ stdout/stderr์ด /dev/null์ ํ๊ธฐ๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด restic์ด ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ค๋ ๊ฒฝ์ฐ์๋ stdin์ ์ฝ์ ์ ์์ต๋๋ค. (๋ํ ์ฝ๊ฐ ์ฌ๋ฏธ์์ต๋๋ค. ์ bash๊ฐ /usr/local/bin/bash
์ด๊ณ /bin/bash
๊ฐ ์๋๊ฐ์? ๊ทธ๋ฅ ๊ถ๊ธํฉ๋๋ค.)
์ด์จ๋ ์ค๋ฅ ์ถ๋ ฅ์ ๋ณด๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ต๋๋ค.
cmd := exec.Command("/bin/bash", script)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
๊ทํ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋ณด๊ธฐ ์ ์ ์ ์ ์ฒซ ๋ฒ์งธ ๋ณธ๋ฅ์ RESTic ๋ฐ์ด๋๋ฆฌ ์์ฒด๋ฅผ FDA์ ์ถ๊ฐํ๋ ๊ฒ์ด์์ผ๋ฉฐ 10.14.1(18B75)์์๋ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋จ(์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ํธ์ถํ๋ Go ๋ํผ, ๊ถ๊ทน์ ์ผ๋ก restic์ ํธ์ถํ๋)์ ์ฝ์ ํ๋ฉด ๋ณ๊ฒฝ๋๋ ์ด์ ๊ฐ ํ์คํ์ง ์์ต๋๋ค.
์ด๊ฒ์ด ์ฌ์ ํ ํจ๊ณผ๊ฐ ์์ต๋๊น?
@n8henrie ๊ณ์ํด์ ์์์ ์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ํ๋ค๋ฉด restic ๋ธ๋ก๊ทธ์ ๊ทธ๊ฒ์ ๋ํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ ์๋ ์์ต๋๋ค(๋งค๋ด์ผ์ ์์ ์น์ ์ ์ถ๊ฐ๋ก)... :)
@fd0 ์๊ด์ ๋๋ค!
@armhold ์, ๋งค๋ ฅ์ฒ๋ผ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ ์๋ด์ MBA์์๋ ์๋ํ๊ธฐ ์ ์ ์ฌ๋ถํ ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ด ๊ฒ์ ์๋). ๊ทธ๋ ๋ฅผ ์ํด IIRC๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง๋ ๋ค์ ์ฌ๋ถํ ํ ๋ค์ FDA์ ์ถ๊ฐํ๊ณ ์๋ํ์ต๋๋ค.
์์ ์ :
Thu Nov 15 02:00:00 MST 2018 :: Starting restic-backup.sh
can not obtain extended attribute com.apple.rootless for /Library/Application Support/com.apple.TCC:
error: Open: open /Library/Application Support/com.apple.TCC: operation not permitted
error: open /Library/Preferences/com.apple.TimeMachine.plist: operation not permitted
error: Open: open /Users/me/Library/Application Support/AddressBook: operation not permitted
error: Open: open /Users/me/Library/Application Support/CallHistoryDB: operation not permitted
error: Open: open /Users/me/Library/Application Support/CallHistoryTransactions: operation not permitted
error: Open: open /Users/me/Library/Application Support/MobileSync: operation not permitted
error: Open: open /Users/me/Library/Application Support/com.apple.TCC: operation not permitted
error: Open: open /Users/me/Library/Calendars: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.Home: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.Safari: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.VoiceMemos: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.iChat: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.mail: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.news: operation not permitted
error: Open: open /Users/me/Library/Containers/com.apple.stocks: operation not permitted
can not obtain extended attribute com.apple.quarantine for /Users/me/Library/Cookies:
error: Open: open /Users/me/Library/Cookies: operation not permitted
error: Open: open /Users/me/Library/HomeKit: operation not permitted
error: Open: open /Users/me/Library/IdentityServices: operation not permitted
can not obtain extended attribute com.apple.quarantine for /Users/me/Library/Mail:
error: Open: open /Users/me/Library/Mail: operation not permitted
error: Open: open /Users/me/Library/Messages: operation not permitted
error: Open: open /Users/me/Library/Metadata/CoreSpotlight: operation not permitted
error: Open: open /Users/me/Library/Metadata/com.apple.IntelligentSuggestions: operation not permitted
can not obtain extended attribute com.apple.metadata:com_apple_backup_excludeItem for /Users/me/Library/PersonalizationPortrait:
error: Open: open /Users/me/Library/PersonalizationPortrait: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.AddressBook.plist: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.AddressBook.plist.KaSTvBv: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.AddressBook.plist.M410OmB: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.AddressBook.plist.Sjhd5Xh: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.AddressBook.plist.ceAM0im: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.homed.notbackedup.plist: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.homed.plist: operation not permitted
error: open /Users/me/Library/Preferences/com.apple.mail-shared.plist: operation not permitted
error: Open: open /Users/me/Library/Safari: operation not permitted
can not obtain extended attribute com.apple.metadata:com_apple_backup_excludeItem for /Users/me/Library/Suggestions:
error: Open: open /Users/me/Library/Suggestions: operation not permitted
can not obtain extended attribute com.apple.FinderInfo for /Users/me/Pictures/Photos Library.photoslibrary:
can not obtain extended attribute com.apple.quarantine for /Users/me/Pictures/Photos Library.photoslibrary:
error: Open: open /Users/me/Pictures/Photos Library.photoslibrary: operation not permitted
Files: 179 new, 261 changed, 857338 unmodified
Dirs: 0 new, 0 changed, 0 unmodified
Added to the repo: 266.392 MiB
processed 857778 files, 186.192 GiB in 12:57
snapshot 46831f24 saved
Thu Nov 15 02:12:58 MST 2018 :: restic-backup.sh finished.
Duration: 778 seconds
์์ ํ:
Tue Nov 27 02:00:00 MST 2018 :: Starting restic-backup.sh
Files: 389 new, 2367 changed, 1055845 unmodified
Dirs: 0 new, 0 changed, 0 unmodified
Added to the repo: 430.279 MiB
processed 1058601 files, 295.471 GiB in 18:16
snapshot e58d8f1c saved
Tue Nov 27 02:18:17 MST 2018 :: restic-backup.sh finished.
Duration: 1097 seconds
๋์ผํ ์์ ์ด ์ ์๋ด์ Macbook Air์์๋ ์๋ํ๊ณ ์์ผ๋ฉฐ ๋ ๋ค restic find '/Users/*/Library/Mail' --snapshot latest --host=$(hostname)
๋ก ์๊ฒฉ์์ ํ์ธ๋์์ต๋๋ค(์ฌ๊ธฐ์ ~/Library/Mail
๋ ์์ ์ค๋ฅ ๋ก๊ทธ์์ ๋ณผ ์ ์๋ฏ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ณดํธ๋๋ ๋๋ ํ ๋ฆฌ ์ค ํ๋์
๋๋ค) .
๋๋ ํนํ stdout/stderr์ด /dev/null์ ํ๊ธฐ๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด restic์ด ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ค๋ ๊ฒฝ์ฐ์๋ stdin์ ์ฝ์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ ์ ์ผ๋ก ์คํฌ๋ฆฝํธ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ๋ด ์๋ ๊ฒ์๋ฌผ์์ ๋ณผ ์ ์๋ฏ์ด ๋ด ์ค์ ์ ์์ ํ ์๋ํ๋์ด ์๊ธฐ ๋๋ฌธ์ (๋ฃจํธ ์์ 0600) ํ์ผ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฝ๋๋ก ์ค์ ๋์ด ์์ง๋ง envvar ๋๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์์ ์ฝ์ ์๋ ์์ต๋๋ค. ๋น์ ๋ง์ด ๋ง์, ๋๋ ์ด๊ฒ์ด ๋ํํ ๋ฌผ๊ฑด์ ๋ํด ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ๋ชจ๋ ๊ฒ์ &>> /path/to/file.log
ํ์ผ์ ๊ธฐ๋กํฉ๋๋ค.
(๋ํ ์ฌ๋ฏธ์์ต๋๋ค. bash๊ฐ /usr/local/bin/bash์ด๊ณ /bin/bash๊ฐ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ทธ๋ฅ ๊ถ๊ธํฉ๋๋ค.)
๋๋ Homebrew ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ๋ฒ์ ์ bash๋ฅผ ์ป์ต๋๋ค.
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
$ /usr/local/bin/bash --version
GNU bash, version 4.4.23(1)-release (x86_64-apple-darwin17.5.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
์ด๊ฒ์ &>file.log
์ฐ์ฐ์( 2>&1 >file.log
์ ๋นํด ๋ช ๋ฒ์ ํค ์
๋ ฅ์ ์ ์ฝํจ)์ ๊ฐ์ ๋ณด๋ค ํ๋์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ทํ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋ณด๊ธฐ ์ ์ ์ ์ ์ฒซ ๋ฒ์งธ ๋ณธ๋ฅ์ RESTic ๋ฐ์ด๋๋ฆฌ ์์ฒด๋ฅผ FDA์ ์ถ๊ฐํ๋ ๊ฒ์ด์์ผ๋ฉฐ 10.14.1(18B75)์์๋ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋จ(์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ํธ์ถํ๋ Go ๋ํผ, ๊ถ๊ทน์ ์ผ๋ก restic์ ํธ์ถํ๋)์ ์ฝ์ ํ๋ฉด ๋ณ๊ฒฝ๋๋ ์ด์ ๊ฐ ํ์คํ์ง ์์ต๋๋ค.
๋๋ ๋ํ ์ด๊ฒ์ ๋ํด ์์ ํ ํ์ ํ์ง ๋ชปํฉ๋๋ค. ๋ด ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ bash ์คํฌ๋ฆฝํธ(๋์, ๋ฐฑ์ ๊ฒฝ๋ก ๋ฐ ์ฌ๋ฌ ์ต์ ์ด ํธ์คํธ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ค์ ๋ณต์กํ sftp ๋ช ๋ น)์์ ์ํํ๋ ๋ค๋ฅธ ์ค์ ์ด ๋ง์ด ์์ผ๋ฏ๋ก ๋๋จธ์ง ๋ฐ์ด๋๋ฆฌ ์์ฒด๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์ต์ . ๋๋ ๊ทธ๊ฒ์ ์ฝ๊ฐ ์คํ ํ ์ ์์ต๋๋ค.
์๊ฒ ์ต๋๋ค. ์ค๋ช
๊ฐ์ฌํฉ๋๋ค. ๋ฐฉ๊ธ ์ฌ๊ตฌ์ถ, ์ฌ๋ถํ
+ FDA ์ถ๊ฐ๋ฅผ ์๋ํ์ง๋ง ์ฌ์ ํ operation not permitted
๋ฐ์ต๋๋ค. ๋ํ ์ด์ง ๋ํผ์ ์
ธ ์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋ /Applications๋ก ์ด๋ํ๋ ค๊ณ ์๋ํ์ง๋ง ์ด์ด ์์์ต๋๋ค. ๊ณ์ ํํค์น๊ฒ ์ต๋๋ค.
๋ญ. ๋๋ฅผ ์ํด /Applications์ ์์ ํ์๋ ์์ต๋๋ค.
๋น์ ์ 10.14 ๋๋ 10.14.1์ ์์ต๋๊น? ์ ๋ ํ์์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ฐธ์กฐํ tccutil ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํญ๋ชฉ์ ๋ฏธ๋ฆฌ ์ง์๋ณผ ์๋ ์์ต๋๋ค.
์ ๋ 10.14.1(18B75)์ ์์ต๋๋ค. tccutil ๋ช ๋ น๋ ์๋ํ์ง๋ง ์ด์ด ์์ต๋๋ค. ์ ํ์ด ์ ์ด๋ฌ๋์ง ์์ง๋ง, ์ฌ๊ธฐ์ ๋ฌด์์ ํด์ผ ํ ์ง์ ๋ํ ๋ช ํํ ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒ์ด ์ ๋ง ๋ต๋ตํฉ๋๋ค.
๋ญ. ์ด์ํ๋ค.
์ด์ํ๊ฒ๋ ์๋ํ์ง๋ง ๋๋จธ์ง ๋ฐ์ด๋๋ฆฌ๊ฐ ์ง์ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์๋ํ์ง ์๋ ์ด์ ๋ ๋ถ๋ช ํ์ง ์์ง๋ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ (์ ๋ฅผ ์ํ ๊ฒ์ ๋๋ค).
๋ ๋ค๋ฅธ ๊ฐํ์ ์ค๋ฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค -- ๋ณด๋ฅํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค๋ฅธ ์ฌ๋์ ๋ฌธ์๋ฅผ ์ป์ ์ ์์ ๋๊น์ง ๊ณต์ ๋ฌธ์/์์ฑ
๋์ผํ ์์คํ
์ผ๋ก ์๋ํ๋ ์ปดํจํฐ. ๋๋ 2 for 2์ธ๋ฐ ์ ๊ทธ๋ฐ์ง ๋ชจ๋ฅด๊ฒ ์ด
@armhold์์๋ ์๋ํ์ง ์์ต๋๋ค.
@armhold , ์ ํํ bash ์คํฌ๋ฆฝํธ์ Go ์ฝ๋์ ์ฌ๋ณธ์ ๊ฒ์ํ ์ ์์ต๋๊น?
์ฌ์ฉํ๊ณ ์ด๋ป๊ฒ ์คํํ๊ณ ์์ต๋๊น? ๋ด ๋์์ ์ฌ์์ฐํ ์ ์๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
์ด์ํ๊ฒ๋ ์๋ํ์ง๋ง ๋๋จธ์ง ๋ฐ์ด๋๋ฆฌ๊ฐ ์ง์ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค.
๋ค, ๊ทธ๊ฒ ์ดํด๊ฐ ๋์ง ์์ต๋๋ค. ๋๋จธ์ง ๋ฐ์ด๋๋ฆฌ ์์ฒด๊ฐ ์คํจํ๋ ๊ณณ์์ Go ๋ํผ๊ฐ ์ฑ๊ณตํ๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ญ๊ฐ ๋จ์ด์ ธ ๋ณด์ธ๋ค.
์ฌ์ฉํ๊ณ ์๋ ์ ํํ bash ์คํฌ๋ฆฝํธ์ Go ์ฝ๋์ ์ฌ๋ณธ์ ๊ฒ์ํ๊ณ ์ด๋ป๊ฒ ์คํํ๊ณ ์์ต๋๊น?
๋ฌผ๋ก ์ฌ๊ธฐ ์์ต๋๋ค: https://github.com/armhold/restic-fda.
~/bin
๋๋ ํ ๋ฆฌ์ ์ค์น๋ฉ๋๋ค.~/bin/restic-fda
์ถ๊ฐrestic-fda
๋ฅผ ์คํํ๊ณ ์์ต๋๋ค. error: Open: open /Users/armhold/Library/Application Support/AddressBook: operation not permitted
์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.๋๋ launchctl์ ํตํด ์คํ์ ์๋ํ์ง ์์์ต๋๋ค.
๋ฐฉํ๋ฒฝ์ธ Little Snitch๋ ์ด์ ์ ์ฌํ ์์ ์ ์ํํฉ๋๋ค. ๋๊ฐ๋ ์ฐ๊ฒฐ์ ๊ฒฝ์ฐ "๋จ๋ง์ ํตํ ํฐ๋ฏธ๋"์ด ์ฐ๊ฒฐ์ ๋ง๋ค๋๋ก ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๋ฌป์ต๋๋ค(๋จ์ํ ์ ํ์ด ์๋). ์ฆ Terminal.app์ด ๊ถํ์ ๋ถ์ฌํ๋ ๊ธฐ๋ณธ์ ๋๋ค.
๊ฒฐ๊ตญ ๋ด๊ฐ ํ ๊ฒ์ Platypus ๋ฅผ ์ฌ์ฉํ์ฌ ๋ด ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฑ์ผ๋ก ๋ฌถ๊ณ ์์ฑ๋ ์ฑ์ FDA๋ฅผ ์น์ธํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ Finder๋ฅผ ํตํด ๋ฐฑ์ ์ ์์ํฉ๋๋ค. ์ง๊ธ๊น์ง ์๋ํฉ๋๋ค.
launchctl์ ๋ค์ ๋จ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ฐธ๊ณ ๋ก ์ด๊ฒ์ ์ฌ์ ํ โโ์ ์๊ฒ ํจ๊ณผ์ ์
๋๋ค(์ต์ MacOS ์ดํ ํฌํจ
์
๋ฐ์ดํธ). @armhold์์ ์์์ด ์์ต๋๊น?
์ฌ์ ํ ๋๋ฅผ ์ํด ์๋ํ์ง ์์ต๋๋ค. ๋๋ ํฌ๊ธฐํ๊ณ ํฐ๋ฏธ๋ FDA๋ฅผ ์ฃผ์๋ค.
๋ถํํ๋, ๋๋ ๋ค์ ๋นํฉํ๋ค.
์ ๋ 10.14.2์
๋๋ค. ๋ด restic ๋ฐฑ์
์คํฌ๋ฆฝํธ๋ ์ฌ์ ํ ์๋ํ๊ณ ๋ก๊ทธ์ ๊ถํ ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ @armhold ์ ์คํฌ๋ฆฝํธ๋ ์ด์ ํ
์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ํฌ ์ ์์ต๋๋ค(๋ณดํธ๋ ๋๋ ํ ๋ฆฌ ~/Library/Mail
๋ฅผ ์ฌ๋ ๊ฒ ์ธ์๋ ์๋ฌด ๊ฒ๋ ํ์ง ์์).
๐คทโโ๏ธ
์๋ก์ด ๋ฆฌํฌ์งํ ๋ฆฌ์์ (์๋ํ๋) ๋ํผ๋ฅผ ์คํํด ๋ณด์ จ์ต๋๊น? ๋ด ๋ง์, ์ค๋๋ ํ์ผ์ ๊ฑด๋๋ฐ์ง ์๊ณ ๋ฐ๋ผ์ ์ด๋ฏธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์๋ ๊ฒ์ด ํ์คํฉ๋๊น? restic์ด ํธ๋ฆฌ๋ฅผ ๊ฑท๋ ๋์ ๋ณดํธ๋ ํด๋๋ก ๋ด๋ ค๊ฐ๋ ค๊ณ ์๋ํ๋ ๋์ ์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@mholt ์ด ์ ๋ฌผ๊ณผ ์ ๋ฌผ์ ์ํ๋ ์ด๋ป์ต๋๊น? ์ด๋ป๊ฒ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด ์ทจํ๋ ๋จ๊ณ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
๋ช ๊ฐ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ ํ ์ด ๋์๋ ๋ณด๊ณ ์์ต๋๋ค. ๋งค์ฐ ์ฑ๊ฐ์๊ณ ๋ฌผ๊ฑด์ ํฌ์ฅํ๊ณ ์ด์ง๋ฝํ์ง ์๊ณ ๋ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค.
@rawtaz
์ด ์ ๋ฌผ๊ณผ ์ ๋ฌผ์ ์ํ๋ ์ด๋ป์ต๋๊น? ์ด๋ป๊ฒ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด ์ด๋ค ์กฐ์น๋ฅผ ์ทจํ๋์ง ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น?
์ง๋์ฃผ์ ์ง์ Mojave๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ํ์ง๋ง Relica๋ฅผ ์ค์นํ๊ณ ~/Library/Mail์ ๋ฐฑ์ ํ๋ ค๊ณ ํ ๋ "์์ ์ด ํ์ฉ๋์ง ์์" ์ค๋ฅ๋ฅผ ์ฌํํ ์ ์์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ FDA ํ๋ฉด์ Relica.app
๋ฅผ ์ถ๊ฐํ๊ณ Relica ๋ฐฑ์
์ ๋ค์ ์คํํ์ต๋๋ค.
์ด๋ฒ์๋ ์ค๋ฅ ์์ด ์ฑ๊ณต์ ์ผ๋ก ๋ฐฑ์ ๋์์ต๋๋ค(Relica+restic์์ ๋ง๋ ์ฒซ ๋ฒ์งธ ์ค๋ ์ท์ ๊ถํ ์ค๋ฅ๋ก ์ธํด ๋ฉ์ผ ํด๋๋ฅผ ์ ํ ํ์ํ์ง ์์์ต๋๋ค).
๊ทธ๋์ ์ ๋ ์ด ์ค๋ ๋์ ๊ธฐ์ฌํ ๋ต๋ณ์ด ์์ต๋๋ค. :-/ ๊ทธ๊ฒ์ด _๊ณ์_ ์๋ํ ์ง ํ์ ํ ์ ์์ง๋ง ๋ฌผ๋ก ๊ทธ๋ ๊ฒ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๋ด restic ๋ฐฑ์ ์คํฌ๋ฆฝํธ๋ฅผ FDA์ ์ ๊ณตํ ์ ์๋๋ก .app ๋ฒ๋ค๋ก ๋ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด๋ ๊ฒ ํด์ผ ํ๋ ๊ฒ์ ์ง์ฆ๋์ง๋ง ์์ผ๋ก ๋์๊ฐ ์ ์๋ ์ ์ผํ ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ฒ์์๋ restic ์ด์ง FDA๋ง ์ ๊ณตํ๋ ค๊ณ ํ์ง๋ง ์๋ํ์ง ์์์ต๋๋ค.
๋ํ ๋ฐฑ์
์คํฌ๋ฆฝํธ(restic์ ํธ์ถํ๋ Bash ์คํฌ๋ฆฝํธ) FDA๋ฅผ ์ ๊ณตํ๋ ค๊ณ ์๋ํ์ง๋ง ์๋ํ์ง ์์์ต๋๋ค.
@armhold ์ ๋ํผ๋ฅผ ์๋ํ์ง ์์์ต๋๋ค.
์์์ ์ ์ํ ๋๋ก ์ค๋ฆฌ๋๊ตฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. .app ๋ฒ๋ค์ ์์ฑํ ๋ค์ macOS์ ์์คํ ์ค์ ์์ FDA์ ์ ๊ณตํ ์ ์์ผ๋ฉฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
์ฌ์ฉํ๋ ๋์ ๋ด๊ฐ ์์์ฐจ๋ฆฐ ์ ์ผํ ๋จ์ ์ .app์ด ์์๋ ๋(์ ๋ฅผ ์ํด open -ga ~/Applications/Backup.app
๋ฅผ ์ฌ์ฉํ์ฌ crontab์ ์ํด ์์๋๊ณ ํ์ฌ ์ฐฝ์ด ํฌ์ปค์ค๋ฅผ ์๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๋ด ์ฌ์ฉ์์๊ฒ ์ฌ๊ฐํ ์ฑ๊ฐ์ค ์ ์์ง๋ง ๊ทธ๊ฒ ๋ญ์ง. ์ ์ด๋ ์ฐ๋ฆฌ๋ ๋ค์ ์๋ํ๋ ๋ฐฑ์
์ ๊ฐ์ง๊ณ ์๋ค. ๋๋ -g
์ค์์น๊ฐ ๊ทธ๊ฒ์ ์ฒ๋ฆฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ถํํ๋ ์๋ฌด ๊ฒ๋ ๋ฐ๋์ง ์์๋ค.
.app ๋ฒ๋ค์ ์ญ์ ํ๊ณ (ํด์งํต์ผ๋ก ์ด๋, ํด์งํต ๋น์ฐ๊ธฐ) ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ .app ๋ฒ๋ค๋ก ๊ต์ฒดํ ๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๋งค์ฐ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์์ต๋๋ค. ๋ด ๊ด์ฐฐ์ ๋ฐ๋ฅด๋ฉด ์ด์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ฉด ์์คํ ๊ธฐ๋ณธ ์ค์ ์ FDA ํญ๋ชฉ์ด ์ฌ๋ผ์ง์ง๋ง ์ ํญ๋ชฉ์ ๊ฐ์ ์์น์ ๋ค์ ๋ฃ์ผ๋ฉด ํญ๋ชฉ์ด ๋ค์ ๋ํ๋ ์์คํ ์ด ์ .app์ ์ธ์ํ๊ณ ๊ณ ๋ คํ ๊ฒ์์ ๋ํ๋ ๋๋ค. FDA๋ฅผ ๊ฐ๊ธฐ ์ํด. ๊ทธ๋ฌ๋ ๊ทธ ํ ์ ์ฑ์ ์คํํ์ ๋ ์๋ ์ค๋ฅ๊ฐ ๋ค์ ๋ฐ์ํ์ต๋๋ค. ์์คํ ํ๊ฒฝ์ค์ ์์ ์ฑ์ ๋ํ FDA ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ์ FDA ํญ๋ชฉ์ ์ถ๊ฐํ๋ฉด ์ค๋ฅ๊ฐ ๋ค์ ์ฌ๋ผ์ก์ต๋๋ค. ๋ฐ๋ผ์ ์ง๊ธ์ .app ๋ฒ๋ค์ ๊ต์ฒดํ ๋ ์๋ํ๋๋ก FDA ํญ๋ชฉ๋ ๊ต์ฒดํด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. .app ๋ฒ๋ค์ ์ผ๋ถ๋ง ๊ต์ฒดํด๋ ๊ณ์ ์๋ํ ๊ฒ์ ๋๋ค. AFAICT์ ๋ํ ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํฉ๋๋ค.
restic์ .app ๋ฒ๋ค๋ก ๋ฌถ๊ณ ์ถ์ ์ฌ๋์ ์ํด ๋ช ๋ฌ ์ ์ Go ํ๋ก๊ทธ๋จ์ ๋ํด ๋ช ๊ฐ์ง ์ค์ ์ ๋ณ๊ฒฝํ๊ณ ์ํ๋ ๋๋ก ์คํํ๋ ค๋ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ํฌํจํ์ฌ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ฑํ ๋ค์ ์ผ๋ฐ์ ์ธ ์์ต์๊ฐ ์์ต๋๋ค. ๋ฐฉ๋ฒ: https://medium.com/@mattholt/packaging -a-go-application-for-macos-f7084b00f6b5
10.14.3 -- ๋ฐ์ด๋๋ฆฌ๋ง์ผ๋ก ์คํํ๊ธฐ์๋ ์์ง ์ข์ ์์์ด ์์ต๋๋ค.
$ /bin/ls ~/Library/Mail/
ls: : Operation not permitted
Terminal.app
๊ฐ FDA์ ์ถ๊ฐ๋๋ฉด ์๋ํ์ง๋ง ls
(๋๋ ๋ค๋ฅธ ๋ฐ์ด๋๋ฆฌ)์๋ ์ถ๊ฐ๋์ง ์์ต๋๋ค.
applescript/automator๊ฐ ์๋ํ์ง๋ง ๋ํฌ์ ์์ด์ฝ์ด ํ์๋ฉ๋๋ค. ๋๋ xcode/swift cli๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผํ๊ณ FDA์ ์ถ๊ฐํฉ๋๋ค( /full/path/to
๋ฅผ ์ค์ ๊ฒฝ๋ก๋ก ๋์ฒด).
import Foundation
import os
let task = Process()
task.launchPath = "/full/path/to/bash"
task.arguments = ["/full/path/to/backup_script.sh"]
do{
try task.run()
}
catch{
os_log("error")
}
task.waitUntilExit()
@daviehh ์ฌ๊ธฐ์ ์ด์ด ์์ต๋๋ค.
import Foundation
import os
let task = Process()
task.launchPath = "/bin/ls"
task.arguments = ["/Users/me/Library/Mail"]
do{
try task.run()
}
catch{
os_log("error")
}
task.waitUntilExit()
$ swiftc foo.swift
$ ./foo
ls: Mail: Operation not permitted
$ # add to FDA
$ ./foo
ls: Mail: Operation not permitted
$ sudo ./foo
ls: Mail: Operation not permitted
์ ๋ ์ต๊ทผ์ Restic์ ์ฌ์ฉํ๊ธฐ ์์ํ๊ณ ๋ฃจํธ crontab sudo crontab -e
์์ ํธ์ถ๋ cron ์์
์ผ๋ก ์๋ํ๋๋ก ํ์ฌ sudo ๊ถํ์ผ๋ก๋ง ์ก์ธ์คํ ์ ์๋ ํ์ผ์ ๋ฐฑ์
์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์กฐ๊ธ ๋ ์์ ํ๋ค๊ณ ๋๋ ์ ์๋๋ก ํ์ต๋๋ค. . @n8henrie ์ ๋๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ์ด์ ์๋ํ๋ ์๋ฃจ์
์ด ์์ผ๋ฉฐ ์ด๊ฒ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ์ ์ฉ๋๋์ง ์๊ณ ์ถ์ต๋๋ค.
700
๊ถํ์ด ์๋ $ restic-backup.sh
/Users/myuser/bin
$์ ์์ต๋๋ค(๋ฃจํธ/sudo ์ฝ๊ธฐ/์ฐ๊ธฐ/์คํ๋ง). ๋ด ๋ฃจํธ crontab sudo crontab -e
๋ก ์ด ํ์ผ์ ์คํํฉ๋๋ค. iTerm์ ๊ธฐ๋ณธ ํฐ๋ฏธ๋๋ก ์ฌ์ฉํฉ๋๋ค. Homebrew์ ํจ๊ป restic
๋ฐ zsh
๋ฅผ ์ค์นํ์ต๋๋ค.
macOS ๋ฒ์ 10.14.5
๋ด ๋ฐฑ์ ์คํฌ๋ฆฝํธ ํ์ผ์๋ ๋ค์์ด ์์ต๋๋ค.
#!/usr/local/bin/zsh
restic_path="/usr/local/bin"
logFile="/Users/myuser/Documents/Backups/configurations/Mac/backup_logs/$(date +%F_%H%M)_restic.log"
unset HISTFILE
export RESTIC_REPOSITORY="..."
export AWS_ACCESS_KEY_I'd="..."
export AWS_SECRET_ACCESS_KEY="..."
export RESTIC_PASSWORD="..."
$restic_path/restic --verbose backup /Users/myuser &> $logFile
sudo crontab -e
์์ต๋๋ค.0 */2 * * * /Users/myuser/bin/restic-backup.sh
ํฌ๋ก ==> /usr/sbin/cron
iTerm.app ==> /Applications/iTerm.app
@n8henrie ์ฒ๋ผ ์ค์ ๋ก restic
์ ๊ฐ์ ํ์ผ์ ์ก์ธ์คํ๋ ํ๋ก๊ทธ๋จ์ FDA๊ฐ ํ์ํ ํ๋ก๊ทธ๋จ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋์ ์ด๊ธฐ sudo
์์ฒญ์ ํ๋ ํ๋ก๊ทธ๋จ์๋ FDA๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. cron
์๋ ์ผ์ด์ค์ ๊ฒฝ์ฐ iTerm.app
์
๋๋ค.
์ ์ฉํ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ฑ์ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ฉด ์ฑ ๋๋ ํ ๋ฆฌ ๋ด์ ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋๋ ๋ฐ์ด๋๋ฆฌ์ ์ ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฑ์ ์ง์ ์คํํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ์ค, ์ฑ ์์ฒด๋ ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค. ๋จ์ํ ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ์ํ ์ปจํ ์ด๋ ์ญํ ์ ํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ฅผ ์์์ ์ฑ์ ๋ณต์ฌํ๊ณ ํด๋น ์ฑ์ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ ์ผํ ์ฃผ์ ์ฌํญ์ ์ฑ ๋ด์์ ์คํฌ๋ฆฝํธ ๋๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค ํ์ฉ ๋ชฉ๋ก์ ์ฑ์ ์ ๊ฑฐํ๊ณ ๋ค์ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
@atticusmatticus @russelldavis -- ์ต๊ทผ์ MacOS ์ ๋ฐ์ดํธ ์ค ํ๋๊ฐ ๋ญ๊ฐ๋ฅผ ๋ค์ ๋ณ๊ฒฝํ์ ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค -- ์ ๋ ํ์คํ ๋ ๊ฐ์ง ์ ๋ต์ ๋ชจ๋ ์๋ํ์ง๋ง ์ด์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋ํ ์๋์ ๋ฉ์ท์ง๋ง ์ง๊ธ์ ๋ค์ ์๋ํ๊ณ ์์ต๋๋ค(์ผ์ข ์):
package main
import (
"fmt"
"io/ioutil"
)
func main() {
fmt.Println("Starting...")
matches, err := ioutil.ReadDir("/Users/me/Library/Mail")
if err != nil {
fmt.Println("Err:", err)
} else {
for _, match := range matches {
fmt.Println(match.Name())
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.me.gotest</string>
<key>ProgramArguments</key>
<array>
<string>/Users/me/go/src/github.com/me/gotest/gotest</string>
</array>
<key>StartInterval</key>
<integer>15</integer>
<key>StandardErrorPath</key>
<string>/Users/me/go/src/github.com/me/gotest/stderr.txt</string>
<key>StandardOutPath</key>
<string>/Users/me/go/src/github.com/me/gotest/stdout.txt</string>
</dict>
</plist>
go build
gotest
๋ฐ์ด๋๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.~/Library/LaunchAgents/
์ ๋ณต์ฌlaunchctl load -w ~/Library/LaunchAgents/com.me.gotest.plist
์ด์ ํฅ๋ฏธ๋กญ๊ฒ๋ gotest
๋ฐ์ด๋๋ฆฌ๊ฐ ์์ง๋ง launchd
(๋๋ launchctl
)๊ฐ FDA์ ์ถ๊ฐ๋์ง ์์์ผ๋ฏ๋ก ์ฌ์ ํ ์ง์ ์คํํ ์ ์์ต๋๋ค.
$ ls -l gotest
-rwxr-xr-x 1 me staff 2142552 Jul 2 09:15 gotest
$ ./gotest
Starting...
Err: open /Users/me/Library/Mail: operation not permitted
$ sudo ./gotest
Password:
Starting...
Err: open /Users/me/Library/Mail: operation not permitted
ํ์ง๋ง root๋ก ์คํ ๋์ง ์๋ launchd ๋ฐ๋ชฌ(๊ตฌ์ฑ๋ ๋๋ก 15์ด๋ง๋ค)์์ ์ค๋ฅ ์์ด ์คํ ์ค์
๋๋ค( ~/Library/
not /Library/
๋ฐ launchctl load
not sudo launchctl load
):
$ cat stdout.txt | head
Starting...
.DS_Store
PersistenceInfo.plist
V6
Starting...
.DS_Store
PersistenceInfo.plist
V6
Starting...
.DS_Store
ํฅ๋ฏธ๋กญ๊ฒ๋ ์ฌ๋ถํ ์ ํฌํจํ์ฌ ์ฌ์ ํ ๋ณด๊ณ ์์ต๋๋ค.
||FDA์์ ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋|FDA์์ ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋
---|:---:|:---:
sudo
์์ด ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋ |err|err
sudo
๋ก ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋ |err|err
launchd ์คํ ๋ฐ์ด๋๋ฆฌ ์ด๋|RUNS|err
์ง์ ์ ์ธ ๊ด๋ จ์ ์์ง๋ง FDA ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์๊ณ ์๋ค๊ณ ์๊ฐํ๊ณ ๋ด๊ฐ ์บกํด ๋ป๋ปํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์์ง ์ ์ฉํ ํ ๋ก , ๊ธฐ์ฌ ๋๋ ๋ฌธ์๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
FDA๋ ํ์ดํธ๋ฆฌ์คํธ์ ๋ฑ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์
(๊ฐ๋ด์ ์์๋จ์ ์๋ฏธํจ), ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ํ์ ํ๋ก์ธ์ค ๋ฐ launchd
( launchd.plist
์ ์ํด ์ง์ ์คํ๋๋ ๊ฒฝ์ฐ ํ์ดํธ๋ฆฌ์คํธ ๋ฐ์ด๋๋ฆฌ)์ ๋ํด ์์
ํฉ๋๋ค. launchctl submit
). ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ์์ ์ ํ๋ฆฌ์ผ์ด์
/๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ ํ๋ก์ธ์ค ํธ๋ฆฌ์์ ํ์ดํธ๋ฆฌ์คํธ ๋ฐ์ด๋๋ฆฌ๊ฐ ์คํ๋๋ฉด ์๋ํ์ง ์์ต๋๋ค.
์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
/๋ฐ์ด๋๋ฆฌ๊ฐ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐ๋์๋์ง์ ๋ฐ๋ผ ํ๋ก์ธ์ค ํธ๋ฆฌ ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ๋ด๋นํ๋ launchd
์ธ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
์คํ์์ ๋ฐ์ด๋๋ฆฌ ๊ฒฝ๋ก๊ฐ ์ ํํด์ผ ํ๋ฏ๋ก ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ๋ฐ์ด๋๋ฆฌ launchctl plist์ WorkingDirectory
๊ฐ ์ง์ ๋๊ณ ์๋ ๊ฒฝ๋ก ./some-binary
๊ฐ ์ฌ์ฉ๋๋ฉด ํ์ดํธ๋ฆฌ์คํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค. ์๋ํ์ง๋ ์์ต๋๋ค. /some/path/./some-binary
๋๋ /some/path/../path/some-binary
์ ๊ฒฝ์ฐ์๋ง /some/path/some-binary
.
๋ํ launchd
๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ์คํํ๋๋ผ๋ shebang์ ๋ํด ํ์ดํธ๋ฆฌ์คํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก #!/some/path/some-binary
๋ ์๋ํ์ง ์๊ณ /some/path/some-binary /path/to/script
๋ง ์๋ํฉ๋๋ค.
์, launchd
์์ ์คํํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค.
https://eclecticlight.co/2018/09/06/working-with-mojaves-privacy-protection/
๋ฌธ์์์ ์ต์ํ ๋ช ๊ฐ์ง ์ง์นจ(๋ฐ ์๋ง๋ ์ด ๋ฌธ์ ์ ๋ํ ๋งํฌ)์ ์ ๊ณตํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด์ ๋ฐ์ดํฐ ์์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ฉฐ ๊ด์ฐฎ์ผ๋ฉด ์์ ์ ์์ํ๊ณ ์ถ์ต๋๋ค.
์ด๊ฒ์ Linux์์ ๋ฃจํธ๋ก ์คํํ์ง ์๊ณ ๋ฐฑ์ ํ๋ ์น์ ๊ณผ ๊ฐ์ด ์์ ์๋์ ์๋ก์ด ์์ ์ด์ด์ผ ํฉ๋๊น?
๋๋ ๋ค์ ์ฌํญ์ ์ ์ํ ๊ณํ์ ๋๋ค.
์ด๊ฒ์ด ๋ชจ๋ ์ฌ๋์ ์ดํด์ ๊ฒฝํ์ ๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๊น?
๋ค์ ๋ณต์กํ์ง๋ง ์ง๋ 1๋ ๋์ 2๋์ Macbook์์ ์คํ๋๋ ์ค์ ์ ๋ง์กฑํ์ผ๋ฉฐ ์๋ง๋ ๊ทธ ์ผ๋ถ๋ฅผ ์๋ก ํฌํจํ ๊ฒ์ ๋๋ค. ๋ด ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/restic/restic/issues/2051#issuecomment -442872479์ ์ ์ฌํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํจ๊ณผ์ ์ ๋๋ค. ๋๋ ์ง๊ธ ์ค์น๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ c๋ก ๊ฐ๋ค. ๋ค๋ฅธ ์ฌ๋์ด ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ:
#include <stdlib.h>
int main(void) {
int status = system("./backup.sh");
int ret = WEXITSTATUS(status);
return ret;
}
gcc -Wall -o backup backup.c
ํฅ๋ฏธ๋กญ๊ฒ๋ ์ฌ๋ถํ ์ ํฌํจํ์ฌ ์ฌ์ ํ ๋ณด๊ณ ์์ต๋๋ค.
FDA์์ ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋ FDA๊ฐ ์๋ ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋
sudo
์์ด ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋ err err
sudo
๋ก ๋ฐ์ด๋๋ฆฌ๋ก ์ด๋ err err
launchd ์คํ ์คํ ๋ฐ์ด๋๋ฆฌ RUNS ์ค๋ฅ
๊ฐ์ฌ ํด์!
๋๋ฅผ ์ํ ์๋ฃจ์ ์ -p, --exclude-files, --files-from ์ต์ ์ ์ฌ์ฉํ์ฌ restic์ ์ง์ ํธ์ถํ๊ณ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ด๋ถ ๋๋ ๋ณ๋์ ํ์ผ์ ๋ฃ๋ .plist ํ์ผ์ ๋ง๋๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ๋ฐ์ด๋๋ฆฌ FDA ๊ถํ์ ๋ถ์ฌํ์ญ์์ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.backup_agent</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/restic</string>
<string>backup</string>
<string>-r</string>
<string>s3:https://MY.STORAGE.SERVER/....</string>
<string>-p</string>
<string>.config/backup/restic.pwd</string>
<string>--files-from</string>
<string>.config/backup/backup.lst</string>
<string>--exclude-file</string>
<string>.config/backup/exclude.lst</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>AWS_ACCESS_KEY_ID</key>
<string>XXX</string>
<key>AWS_SECRET_ACCESS_KEY</key>
<string>YYY</string>
</dict>
<key>WorkingDirectory</key>
<string>/Users/ME</string>
<key>StandardErrorPath</key>
<string>/Users/ME/log/backup.log</string>
<key>StandardOutPath</key>
<string>/Users/ME/log/backup.log</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>13</integer>
<key>Weekday</key>
<array>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
<integer>4</integer>
<integer>5</integer>
</array>
</dict>
</dict>
</plist>
FDA์ ์ถ๊ฐํด์ผ ํ๋ ์ฑ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์์ปจ๋, ์ฑ์ด ์คํํ๋ ๊ฒ์ ์ฐพ์ผ์ญ์์ค.
ํ๋ก์ธ์ค๋ฅผ ๊ณ์ ์คํํ๊ณ ์์ pid๊ฐ 1์ด ๋ ๋๊น์ง ํ๋ก์ธ์ค์ ์์ pid๋ฅผ ๊ฑธ์ ์ ์์ต๋๋ค ps ajx
๋ฅผ ํตํด ์์๋๊ฑฐ๋ ps ao pid,ppid,command
๊ฐ ์๋ grep
์
๋๋ค.
๊ฐ๋จํ ๋งํด์:
/usr/sbin/cron
, launchd.plist์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์Program
๋๋ ProgramArguments
์ ๋ฐ์ด๋๋ฆฌ/usr/libexec/sshd-keygen-wrapper
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ํตํด ์คํ๋ฐ๋ผ์ @n8henrie ์ ๊ฒฝ์ฐ ์ค์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.
launchd๋ฅผ ํตํด ์์
์ ์คํํ๋ ๊ฒฝ์ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ: ์ด์ LaunchControl ์๋ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํ ์ ์๋ fdautil
๋ผ๋ ๋์ฐ๋ฏธ๊ฐ ํจ๊ป ์ ๊ณต๋๊ณ fdautil exec
๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ ์คํํ ์ ์์ต๋๋ค. LaunchControl ๋๋ fdautil set
๋ฅผ ํตํด ํ์ฉํ ๋ช
๋ น๋ง ํ์ฉํฉ๋๋ค.
https://www.soma-zone.com/LaunchControl/FAQ.html ์ ์ด์ ๋ํ ์ฝ๊ฐ์ ์ ๋ณด๊ฐ ์์ผ๋ฉฐ ์ฑ์ ๋์๋ง ์ฐฝ์ ์์ธํ ๋ด์ฉ์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ๋ ์ต๊ทผ์ Restic์ ์ฌ์ฉํ๊ธฐ ์์ํ๊ณ ๋ฃจํธ crontab
sudo crontab -e
์์ ํธ์ถ๋ cron ์์ ์ผ๋ก ์๋ํ๋๋ก ํ์ฌ sudo ๊ถํ์ผ๋ก๋ง ์ก์ธ์คํ ์ ์๋ ํ์ผ์ ๋ฐฑ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์กฐ๊ธ ๋ ์์ ํ๋ค๊ณ ๋๋ ์ ์๋๋ก ํ์ต๋๋ค. . @n8henrie ์ ๋๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ์ด์ ์๋ํ๋ ์๋ฃจ์ ์ด ์์ผ๋ฉฐ ์ด๊ฒ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ์ ์ฉ๋๋์ง ์๊ณ ์ถ์ต๋๋ค.๋จผ์ ๋ด ์ค์ ์ ์ฝ๊ฐ์ ๋ฐฐ๊ฒฝ:
700
๊ถํ์ด ์๋ $restic-backup.sh
/Users/myuser/bin
$์ ์์ต๋๋ค(๋ฃจํธ/sudo ์ฝ๊ธฐ/์ฐ๊ธฐ/์คํ๋ง). ๋ด ๋ฃจํธ crontabsudo crontab -e
๋ก ์ด ํ์ผ์ ์คํํฉ๋๋ค. iTerm์ ๊ธฐ๋ณธ ํฐ๋ฏธ๋๋ก ์ฌ์ฉํฉ๋๋ค. Homebrew์ ํจ๊ปrestic
๋ฐzsh
๋ฅผ ์ค์นํ์ต๋๋ค.macOS ๋ฒ์ 10.14.5
restic-backup.sh:
๋ด ๋ฐฑ์ ์คํฌ๋ฆฝํธ ํ์ผ์๋ ๋ค์์ด ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ด ๋ฃจํธ crontab ํ์ผ์
sudo crontab -e
์์ต๋๋ค.0 */2 * * * /Users/myuser/bin/restic-backup.sh
์ ์ฒด ๋์คํฌ ์ก์ธ์ค:
ํฌ๋ก ==>
/usr/sbin/cron
iTerm.app ==>
/Applications/iTerm.app
@n8henrie ์ฒ๋ผ ์ค์ ๋ก
restic
์ ๊ฐ์ ํ์ผ์ ์ก์ธ์คํ๋ ํ๋ก๊ทธ๋จ์ FDA๊ฐ ํ์ํ ํ๋ก๊ทธ๋จ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋์ ์ด๊ธฐsudo
์์ฒญ์ ํ๋ ํ๋ก๊ทธ๋จ์๋ FDA๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.cron
์๋ ์ผ์ด์ค์ ๊ฒฝ์ฐiTerm.app
์ ๋๋ค.