티스토리 뷰

casync 알아보기 (Content Addressable Data Synchronizer) 포스트에서
간략하게 조사 위주로 어떤 것인지 알아보았습니다.

이번에는 이것을 직접 빌드(build)하고 테스트 해보는 과정을 소개하겠습니다.

물론 여느 오픈소스가 그러하듯, 직접 빌드하려 하면 dependency 패키지들의 설치를 수반합니다.

제가 설치 중에 없다고 나왔던 부분들은 나열을 해보겠지만,
제 PC도 이미 상당량의 library 및 그것들의 devel 패키지들이 이미 설치되어 있습니다.
따라서 일부 누락될 수 있습니다.

※Ubuntu Desktop 16.04 64bit 에서 테스트 하였습니다.


casync 빌드 및 설치하기

1. casync Download

 1) github에서 casync를 clone 합니다. (https://github.com/systemd/casync)

 2) dependency 패키지를 우선 설치해줍니다.
     오늘 기준, README.md 를 참조하면 다음 패키지들이 필요하다고 되어있습니다.
     (gcc, liblzma, libcurl, libacl, and optionally libfuse)
     build를 위해서는 devel 패키지가 필요하니 다음과 같은 명령어를 쓸 수 있습니다.

$ sudo apt-get install liblzma-dev libcurl4-openssl-dev libacl1-dev libfuse-dev

  이제 README.md에 명시된 대로 build 명령을 주면 되는데, meson을 이용하고 있습니다.
  문제는 meson 0.40 버젼 이상을 사용해야 한다는 점입니다.
  apt-get으로 설치하는 meson은 버젼이 낮습니다.
  meson을 최신 코드를 받아 빌드하겠습니다.


2. meson Download

 1) github에서 meson을 clone 합니다. (https://github.com/mesonbuild/meson)

 2) git log에서 tag명을 보고, 버젼 릴리즈 시점으로 checkout 합니다.
     (조금이나마 안정성 확보를 위해...)
     저는 git checkout 0.41.1 로 0.41.1 버젼에 맞췄습니다.

 3) dependency 패키지 설치
      python3와 ninja가 필요합니다.
      python3는 sudo apt-get python3 로 설치할 수 있습니다.
      그런데 ninja가 또 버젼문제를 갖습니다...
      ninja 1.5 버젼 이상을 요구하고 있는데 apt-get 으로 받으면 버젼이 너무 낮습니다.
      ninja를 최신 코드를 받아 빌드하겠습니다.


3. ninja Download 및 설치

 1) github에서 ninja를 clone 합니다. (https://github.com/ninja-build/ninja)

 2) ninja를 빌드 & 인스톨합니다.

./configure.py --bootstrap


4. meson 마저 빌드 & 인스톨

 1) 이제 meson을 설치합니다.

$ sudo python3 setup.py install


5. casync 빌드 & 인스톨

$ meson build && ninja -C build && sudo ninja -C build install


설치가 완료되면 casync 명령을 쉘에서 이용할 수 있습니다.

option parameter는 아직 bash auto-completion이 작업되지 않았습니다.
텝키를 아무리 눌러도 하위 파라미터를 미리보기 할수는 아직 없습니다.

상세 옵션 명령어를 보려면, 다음 명령을 이용합니다.

$ casync --help


casync 써보기

1. 단순 디렉토리 직렬화 (Directory serialization)

  이 내용은 tar 명령을 쓴것과 유사합니다.
  그래서인지 예제에도 확장자를 .catar 로 명명하고 있습니다.

  casync 명령으로 "casync 디렉토리"를 직렬화 해 보겠습니다.
  (아까 github에서 clone해 온 소스코드가 있는 디렉토리 입니다.)

  $ casync make <만들파일명> <대상 디렉토리>

$ casync make my_test01.catar ./casync

  다음과 같이 hash 값을 프린트 하며 catar 파일을 생성해 줍니다.


  이렇게 만들어진 catar 파일은 "casync extract (my_test01.catar)" 로
  다시 디렉토리 전체를 추출해 내거나,

  "casync list (my_test01.catar)" 명령으로 디렉토리 내부 파일들을 나열해
  보는 등의 기능이 가능합니다.

  재미있는 기능은 fuse를 이용해, catar 파일을 임의의 path에 mount해서
  일반적인 File Operation으로 볼 수 있다는 점입니다.
  (물론 테스트 해보니 Read-only로 mount 되어 보는것만 가능합니다.)
  "casync mount (my_test01.catar) (mount_dir)" 명령으로 테스트 할 수 있습니다.

  다음은 mount 명령 Test 화면입니다.

1. 한쪽 터미널에서 mount 명령 사용

2. 다른 쪽 터미널을 켜 마운트 한 디렉토리 확인

짜란~

  ※ mount 명령을 실행한 터미널에서 ctrl+c 를 눌러 중단하기 전까지는 mount를 유지합니다.


2. 직렬화 및 chunk 분할, index 만들기

  위의 결과물을 지우고 이번엔 ninja 디렉토리를 chunk로 만들어 보겠습니다.
  (왜냐하면 위에 해보니 명령어에 casync 명령과 casync 디렉토리가 섞여서
   보기 헷갈릴 거 같습니다.)

  $ casync make --store=<만들 chunk 디렉토리 path> <만들 index파일> <대상 디렉토리>

$ casync make --store=./my_chunks.castr ./my_index.caidx ./ninja

  다음은 실제 테스트해 본 예 입니다.

  이는 아까 했던 것과 마찬가지로 내부 File list를 보거나 하는 명령을 수행할 수 있습니다.
  다만 이때는 --store= 옵션을 항상 주어야 합니다.

  "casync list --store=(./my_chunks.castr) (./my_index.caidx)" 이런 형식이 됩니다.


caidx 파일이 HTTP 서버에 있거나, ssh를 통한 원격에 있어도 content를 찾는 등의 기능이 가능합니다.
(그러나 이 부분은 아직 내용 이해가 미흡하여 다음에 다루도록 하겠습니다.)


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함