예전글을 따라하다 보니 Docker에서 R 패키지를 설치할 때 미러 서버를 인식하지 못하는 부분이 있었다. 그래서 관련 내용도 수정할 겸 다시 정리해 본다.
개인적으로 몇 개의 PC를 사용하더라도 미러 서버를 구축해야 할 이유는 사실 없다. 리눅스라면 도커 빌드를 해야하거나, 리눅스 PC가 많거나, 아니면 외부와 인터넷 연결이 제한된 경우 제한된 목적으로 구축하는게 가장 흔한 이유일 것이라고 본다. R도 마찬가지이다. 이번에 정말로 사용한 이유는 도커에서 R을 이용한 설치 과정이 포함되어 있기 때문이다.
CRAN의 관련 미러 서버 문서 링크와 예시 코드는 다음과 같다. 왠만하면 굳이 건드리지 않아도 된다.
https://cran.r-project.org/mirror-howto.html
rsync -rtlzv --delete cran.r-project.org::CRAN /dir/on/local/disc
나는 리눅스만 이용하고, prelease는 이용하지 않으며, 이전 버젼도 이용하지 않는다. 그래서 exclude 옵션을 이용해서 다음과 같이 수정하였다. 이것을 cron 에 하루에 한 번 혹은 그보다 낮은 빈도로 동작하도록 설정한다.
rsync -trlzv --delete --exclude="bin/*" --exclude="src/base/*" --exclude="src/base-prelease/*" cran.r-project.org::CRAN /home/byun1114/R
exclude 옵션만을 이용하는 경우는 조건이 어렵지 않다. 조건이 한 두개 정도로 적으면 –exclude=” ” 를 반복해서 적용할 수 있다. 그런데 조건이 많아진다면 해당 구절을 txt 파일로 만들고 –exclude-from=”절대경로” 로 하면 깔끔해 진다.
include 옵션을 사용하는 경우는 좀 어려운데 흔히 사용하는 ‘*’이 그대로 사용하면 파일이 제대로 전송이 되지 않는다. 인터넷에서 찾은 글은 ‘**’ 혹은 ‘***’를 를 이용해야 하는 것 같다. 귀한 내용이라서 사라질까봐 동일한 내용을 반복해서 기록해 둔다.
stackoverflow.com/q/48010623
"*" means everything
"dir1" transfers empty directory [dir1]
"dir*" transfers empty directories like: "dir1", "dir2", "dir3", etc...
"file*" transfers files whose names start with [file]
"dir**" transfers every path that starts with [dir] like "dir1/file.txt", "dir2/bar/ffaa.html", etc...
"dir***" same as above
"dir1/*" does nothing
"dir1/**" does nothing
"dir1/***" transfers [dir1] directory and all its contents like "dir1/file.txt", "dir1/fooo.sh", "dir1/fold/baar.py", etc..
그 다음에는 사용하는 컴퓨터에서 R 설정을 변경해 주어야 한다. 내가 Rprofile.site 파일을 수정해 주어야 한다. 파일 위치를 찾아야 하는데 우선 R에서 다음 명령어를 사용하여 R이 설치된 기본 위치를 확인한다.
R.home(component = "home")
[1] "/usr/lib/R"
저 위치에 가서 etc 폴더 하위의 Rprofile.site 파일에서 수정해야 한다고 이전에 기록했었다. 그런데 사실 이 폴더의 파일을 /etc/R/ 폴더와 심볼릭 링크로 되어있다. /usr/lib/R/etc 폴더에 파일을 수정하는 것은 일반적인 환경에서는 동작에 문제가 없으나 도커 빌드 과정에서는 먹히지 않는다. 그래서 통상적인 original 폴더에 파일을 넣어준다. Rprofile.site 파일을 /etc/R 폴더에 복사한다.
local({r <- getOption("repos"); r["CRAN"] <- "http://nuc.work/R"; options(repos=r)})
이렇게 수정한 다음 R 세션을 종료하고 다시 실행하면 secure 어쩌고 하는 경고 메세지가 나온다. 설명에 맞추어서 변경하여 준다.