GrADS 인터프리터는 어떤 명령줄을 넣고 엔터를 치는 순간에 내부 명령/함수로 존재하는지 아니면 입력된 것과 동일한 이름을 가진 스크립트 파일이 존재하는지 찾습니다. 이 글에서는 스크립트 파일들을 넣어둔 디렉토리를 정의하는 방법과 관련해서 간단히 정리해보려고 합니다. 사용자가 스크립트 형태로 작성해둔 파일은 GrADS 인터프리터에서 명령어(*.gs)나 함수(*.gsf)로 사용할 수 있는데요, 대부분 사용자들은 GASCRP 쉘 환경변수를 설정해서 정의하고 있을겁니다. 스크립트 파일이 /opt/grads/script에 있고 bash를 사용하고 있다면 다음과 같이 정의하겠죠.

export GASCRP=/opt/grads/script

그리고 시스템 관리자가 미리 넣어둔 스크립트들 외에 본인이 파일을 더 추가하고 싶을 때, 많은 분들이 기존 스크립트를 전부 복사해서 본인 홈디렉토리에 넣고 환경변수를 다시 설정한 다음 본인이 원하는 파일을 추가해서 사용하시더라고요. 이런 식으로요.

cp /opt/grads/script/*.* /home/user/opt/grads/script/
export GASCRP=/home/user/opt/grads/script
cp new_thing.gs /home/user/opt/grads/script/

하지만 이렇게 하다보면 불편한 점이 있습니다. 시스템관리자가 스크립트 파일을 업데이트하는 경우 사용자의 환경에서는 반영되지 않는 문제가 있습니다. 또한 복사하는 과정에서 스크립트 파일 이름이 동일한 경우에는 덮어써지거나 복사가 안되서 어느 한 쪽이 동작되지 않는 문제도 있습니다. 그리고 한 디렉토리에 수 십개 이상 스크립트 파일이 쌓이게 되면 관리하기 불편하죠. 그래서 여러개의 스크립트 디렉토리를 설정하는 방법을 알아두면 좋습니다. (쉘에서 PATH 설정하는 형식과는 조금 다릅니다.) 다음과 같이 환경변수를 설정하면 됩니다.

export GASCRP=“/opt/grads/script /home/user/opt/grads/script”

이렇게 하면 동시에 여러 스크립트 디렉토리를 설정할 수 있습니다. 인터프리터에서 스크립트 파일을 찾는 순서는 빈칸으로 구분된 디렉토리 리스트의 맨 앞부터이기 때문에 위의 예시에서 동일한 이름의 스크립트 파일이 두 디렉토리 모두에 들어있다면 /opt/grads/script에 있는 것을 불러오개 됩니다. 이것은 읽기 권한만 있고 쓰기 권한이 없는 스크립트중 일부만 개인적으로 수정해서 사용하고 싶을 때도 이용할 수 있겠죠.

cp /opt/grads/script/something.gs /home/user/opt/grads/script/
vi /home/user/opt/grads/script/something.gs
export GASCRP=“/home/user/opt/grads/script /opt/grads/script”

이렇게 하면 내가 변경한 something.gs 파일을 우선 불러오게 됩니다. 필요 없어지거나 다시 원래 스크립트를 사용하고 싶을 때는 수정한 파일만 삭제하면 됩니다.

더 자세한 정보는 이 링크에서 보실 수 있습니다.

대기 자료 표출에 이용되는 GrADS (cola.gmu.edu/grads/downloads.php), 2.2.1 버전 Mac용  배포판(binary builds)을  실행시키면 라이브러리를 제대로 찾지 못하는 문제가 있다.

dyld: Library not loaded: /Users/jma/grads/supplibs/lib/libpng15.15.dylib

배포판을 빌드할 때 절대경로로 라이브러리를 참조하면서 생긴 문제인듯 하다. 다음과 같이 바이너리가 참조하는 라이브러리 경로를  확인해보면 다른 라이브러리들에도 문제가 있는걸 확인할 수 있다.

otool -l ./grads-2.2.1/bin/grads

 

나는 소스 가져와서 직접 빌드하는게 더 귀찮을것 같아서 하나씩 경로를  바꿨다...

export PATH_SUPPLIBS="GrADS 웹사이트에서 다운로드 받은 supplibs 디렉토리"

install_name_tool -change /Users/jma/grads/supplibs/lib/libncurses.5.dylib ${PATH_SUPPLIBS}/lib/libncurses.5.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libpng15.15.dylib ${PATH_SUPPLIBS}/lib/libpng15.15.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libz.1.dylib /usr/lib/libz.1.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libhdf5.101.dylib ${PATH_SUPPLIBS}/lib/libhdf5.101.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libnetcdf.7.dylib ${PATH_SUPPLIBS}/lib/libnetcdf.7.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libhdf5_hl.100.dylib ${PATH_SUPPLIBS}/lib/libhdf5_hl.100.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libcurl.4.dylib ${PATH_SUPPLIBS}/lib/libcurl.4.dylib ./grads-2.2.1/bin/grads
install_name_tool -change /Users/jma/grads/supplibs/lib/libtiff.3.dylib ${PATH_SUPPLIBS}/lib/libtiff.3.dylib ./grads-2.2.1/bin/grads

문제 없이 잘 돌아가고는 있는데 공유하기에는 뭔가 개운치 않은 해결책이라서 그냥 혼자 쓰고 있었지만, 오늘 메일링리스트를 보니 한국분들 중에도 같은 문제로 고생하는 분도 있지 않을까 싶어서 간단히 정리하였다.

 

이 글은 2020년 12월 22일에 작성되었고, 아마도 이후에 수정된 배포판이 다운로드 웹사이트에 다시 올라오지 않을까 싶다.

+ Recent posts