Author: byun1114

  • BOINC@HOME

    도커에서 BOINC@HOME을 실행하는 방법. GPU는 사용하는 것으로 한다.

    sudo docker run --privileged --dns=8.8.8.8 -it --gpus all --name boinc debian

    컨테이너 기본 설정은 평소와 같으나 repo에 contrib을 추가한다. 수작업으로 해줘도 되지만 편하게 하려면 apt-add-repository를 이용하면 된다. 사용하려면 software-properties-common 를 설치해야 한다.

    echo 'Acquire::http::Proxy "http://rcc.work:3142";' > /etc/apt/apt.conf
    rm -rf /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 
    
    echo 192.168.126.37 rcc.work >> /etc/hosts
    
    apt -y update && apt -y upgrade
    
    apt -y install software-properties-common
    apt-add-repository contrib
    
    apt -y update && apt -y upgrade
    apt -y install boinc boinc-client-nvidia-cuda

    컨테이너 시작시에 boinc을 시작하게 하기 위해서 .bashrc 에 다음의 내용을 추가한다. 작업 디렉토리는 원하는 것으로 해도 되지만 다른 도커 이미지 설명을 보면 /var/lib/boinc을 이용하는 것 같다. 그래서 이를 이용하도록 한다. 이것을 지정하기 않으면 실행 디렉토리를 기본으로 하여 다시 작업 파일을 받아오기 때문에 중복이 된다.

    cd /root
    boinc --dir /var/lib/boinc &

    이 다음부터는 컨테이너에서 해도 되고 밖에서 명령어를 실행시켜 줘도 된다.

    우선 Project를 추가하기 위해서는 account key를 알아야 한다.

    $ boinccmd --lookup_account https://einstein.phys.uwm.edu/ ID PASSWORD

    프로젝트를 추가한다.

    $ boinccmd --project_attach https://einstein.phys.uwm.edu/ account_key

    처음에 파일 받아오는데 시간이 걸리므로 느긋하게 기다리면 된다.

    주소를 입력할 때 https로 해줘야 한다. http로 하면 2번 등록되어있다는 메세지가 계속 생성된다.

    이렇게 여러 번 시도해 보았는데 CPU로 계산은 할 수 있어도 GPU는 계산을 하지 못했다. OpenCL과 관련된 문제인 것 같았는데 해결책을 찾을 수 없었다. 그래서 boinc 의 docker 이미지를 이용했다.

     sudo docker run -d \
      --gpus all \
      --name boinc2 \
      --net=host \
      --pid=host \
      --dns=8.8.8.8 \
      -v /opt/appdata/boinc:/var/lib/boinc \
      -e BOINC_GUI_RPC_PASSWORD="123" \
      -e BOINC_CMD_LINE_OPTIONS="--allow_remote_gui_rpc" \
      boinc/client:nvidia
  • NFS (Network File System) 사용하기

    PACS 데이터를 일단 받아두기 위해서는 큰 용량이 필요하다. 어떻게 구현하는 것이 좋을지 고민하다가 HP ML110 G7을 이용하는 것이 가장 좋을 것 같다는 결론에 이르렀다. iSCSI, NFS, CIFS 등의 프로토콜을 이용할 수 있을 것이다. CIFS는 속도가 느리다는 평이 있다. iSCSI는 작은 파일을 다루는데 좋다고 하지만, 설정이 복잡했다. 오래되고 사용하기 쉬운 NFS를 이용해 보기로 했다.

    NFS를 사용하기 위해서는 NFS를 이용할 수 있는 패키지를 설치해야 한다.

    $ sudo apt install nfs-common

    TrueNAS에서도 NFS를 이용할 수 있도록 설정한다. Services에 들어가서 NFS를 사용하도록 설정하고, Action 버튼을 눌러서 설정을 확인한다. 특별히 더 해주지 않아도 잘 된다.

    다음으로는 Sharin / NFS에서 ADD를 누른 다음 원하는 최상위 디렉토리를 설정해 준다.

    showmount를 통해서 방금 설정했던 디렉토리가 제대로 보이는지 확인해 본다.

    $ showmount -e 10.10.10.99
    Export list for 10.10.10.99:
    /mnt/share/byun1114/PACS (everyone)
    

    마운트를 위한 폴더를 하나 만들고 마운트 시킨다.

    $ sudo mount 10.10.10.99:/mnt/share/byun1114/PACS /home/byun1114/ext

  • SNOMED 코드 치환

    Athena 에서 SNOMED 코드를 검색하면 편하다. 링크를 타고 다른 것들도 검색해 볼 수 있다. 그런데 검색을 하면 시간이 많이 소요된다. 이럴 경우에는 SNOMED 파일을 받아서 직접 검색을 하면 빠르다. 이렇게 vocabulary 파일을 받아서 DB에 import 할 경우 다음 사항을 고려해야 한다.

    • CSV가 아닌 TSV로 파일이 생성된다. 수 많은 콤마가 있는 것을 고려하면 당연한 것이다.
    • 겹 따옴표와 홑 따옴표가 모두 사용된다. 이것은 import 과정에서 예외 처리에 영향을 미쳐서 불완전하게 데이터가 들어온다.

    concept_name에서 따옴표는 대세에 영향을 주지 않기 때문에 삭제한 후 import 시키도록 한다.

    sed -i "s/\"//g" CONCEPT.csv
    sed -i "s/\'//g" CONCEPT.csv
  • Orthanc

    최근 버전 업그레이드 됨에 따라서 원격 접속이 매우 제한된 것 같다. HTTPS를 지원하지 못하면 원격 접속을 이용할 수 없게 된다. Orthanc 에서는 리버스 프록시와 자체적으로 지원하는데 자체적으로 지원하는 방법을 이용을 아무리 해봐도 안되었다. 그래서 익숙한 nginx 를 이용하여 리버스 프록시로 구현하였다.

    Web 화면보다는 Rest API가 더 중요하기 때문이 이를 이용할 수 있도록 설정을 하는 것을 목표로 했다.

    늘 하듯이 도커 이미지를 이용하여 컨테이너를 생성하고 orthanc와 필요한 패키지들을 설치한다. Orthanc 도움말을 보면 성능을 위해서는 SQLite가 아닌 MySQL이나 PostgreSQL을 이용하라고 한다. PostgreSQL을 좋아하기 때문에 이를 이용하기 위해서 설치한다.

    sudo docker run -it -p 8042:8042 -p 4242:4242 -p 443:443 --name orthanc --restart always -v /home/ysrcc/ext:/root/OrthancStorage debian
    
    echo 'Acquire::http::Proxy "http://rcc.work:3142";' > /etc/apt/apt.conf
    rm -rf /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 
    apt -y update && apt -y upgrade
    
    apt -y install locales
    sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen
    locale-gen
    
    apt -y install orthanc orthanc-postgresql \
            procps nano ftp curl postgresql nginx sudo

    웹 접속에서는 문제가 생기지 않는데 curl 명령어를 이용할 경우 주소가 일치하지 않으면 인증서와 관련된 오류가 생긴다. -k 를 이용하여 검증을 안함으로 해도 되기는 하지만, 정석대로 인증서를 이용하는 것을 전제로 한다.

    인증서는 다음과 같이 생성한다.

    openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /tmp/private.key -out /tmp/certificate.crt -subj "/CN=10.10.10.171"
    cat /tmp/private.key /tmp/certificate.crt > /tmp/certificate.pem

    /etc/orthanc/orthanc.json 에서 다음의 내용을 수정한다. 리버스 프록시를 이용하여 접속을 할 것이기 때문에 설정을 건드릴 부분이 별로 없다.

    "StorageDirectory" : "/root/OrthancStorage",
    ...
    "DefaultEncoding" : "Korean",
    
    or
    
    sed -i 's/Latin1/Korean/g' /etc/orthanc/orthanc.json

    /etc/orthanc/postgresql.json 파일에서 다음을 수정한다. username과 password 부분을 수정한다.

    "EnableIndex" : true,
    "Username" : "postgres",
    "Password" : "postgres",

    설정을 했으면 PostgreSQL 에서도 수정해야 한다는 것을 알 수 있다.

    $ service postgresql start
    $ sudo -u postgres psql
    # \password postgres
    # create database orthanc_db;
    # \q

    nginx.conf 파일에서 gzip off로 설정한다. 미리 작성한 파일을 가져와도 된다.

    http {
          ...
          gzip off;
          ...
    }
    
    or
    
    curl -s http://rcc.work:3143/nginx_orthanc.conf > /etc/nginx/nginx.conf

    /etc/nginx/sites-available/default 를 다음과 같이 수정한다.

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
            listen 443 ssl default_server;
            listen [::]:443 ssl default_server;
            ssl_certificate /tmp/certificate.crt;
            ssl_certificate_key /tmp/private.key;
            ssl_protocols TLSv1.3;
            ssl_prefer_server_ciphers on;
            ssl_ciphers "TLS-AES-128-GCM-SHA256:ECDHE-RSA-AES128-SHA256";
    
            root /var/www/blog;
    
            index index.html index.htm index.nginx-debian.html;
    
            server_name _;
    
            location / {
                    proxy_pass http://localhost:8042;
                    proxy_set_header HOST $host;
                    proxy_set_header X-Real-IP $remote_addr;
            }
    
    or
    
    curl -s http://rcc.work:3143/default_orthanc > /etc/nginx/sites-available/default

    컨테이너가 예기치 않게 종료될 수 있으므로 .bashrc 에 다음을 추가해서 실행시에 문제가 없도록 한다.

    echo "cd /root" >> /root/.bashrc
    echo "service postgresql start" >> /root/.bashrc
    echo "service nginx start" >> /root/.bashrc
    echo "Orthanc /etc/orthanc/ &" >> /root/.bashrc