꽃삽질 : ksnip, 그리고 kimageannotator

** 이런 젠장!

꽃삽질은 결국 KDE Neon 팀의 실수 때문임이 오늘 증명되었다.
오늘(21.02.20), libkimageannotator 가 재빌드된 판이 올라왔고, 꾸러미명이 libkimageannotator0 으로 바로잡아졌다.

아 젠장!!
그 덕에 이거 저거 지식은 늘어났다만..


일련의 사건(?)은 ksnip 을 PPA 에 올려보고자하는 객기에서 비롯됐다.
이게 객기임은, 내가 컴파일, 빌드에 대한 지식이 전혀 없기 때문이다.

그럼에도 불구하고, 제작자가 적절한 올린 소스코드가 컴파일에 문제가 없고, 또, 어떤 식으로든 debian 파일만 구한다면, 데비안 꾸러미를 만들고, PPA 에 올리는 일은 그다지 어렵진 않다.

다만.. 어디서든 오류가 하나라도 난다면, 그걸 알아채기가 내 실력으로는 쉽지 않다는게 문제지.


ksnip 을 만들려면 kimageannotator 와 kcolorpicker 가 필요하다. 아마도 이 문제 때문에 이전에 PPA 를 운영하던 Duma 도 더 이상 진행을 하지 못한게 아닐까하고 짐작만 해본다.

ksnip 1.8.1 은 kimageannotator 0.4.1 을, kcolorpicker 0.1.5 를 필요로 한다. 하지만 이 두 개는, 우분투 개발판에도 올라 있지 않다. 오직 이전 판들만 찾을 수 있었다.

이전판의 debian 파일로도 빌드가 가능할까..? 이건 해보지 않고는 모르지만, 해볼 생각도 하지 않았다. 어쩐지 안될 거란 생각이 강했기 때문이리라.

그런데, 우연히 KDE Neon 을 판올림하다가, 마치 기다렸다는 듯이 이 라이브러리를 제공하기 시작했음을 알게됐다.

오호라.. 이건 PPA 를 만들라는 얘기로군. 하고 즐겁게 작업을 시작했다.
그 전에, 이건 확실하진 않긴 하지만, debian 파일은 Public domain 이다. 즉, 저작권 문제를 크게 신경쓰지 않아도 된다.

다시 돌아와서, 코드를 조합하고, 빌드를 해봤다. 문제는 없었다. 그리고 PPA 올려봤는데..

뭔가 애매한 문제가 자꾸 발생하기 시작했다.
그것들이 정확히 뭐였는지는 까먹었는데, 의존성에서, 그리고 꾸러미 이름에서 문제가 생겼다.

KDE Neon 에서 제공하는 kimageannotator 의 데비안 소스 파일을 보면 꾸러미 명이 조금 이상하게 되어 있다.
아래 코드는 debian/control 중 libkimageannotator 에 관한 내용이다.

Package: libkimageannotator0.4.0
Architecture: any
Multi-Arch: same
Depends: libkimageannotator-common (= ${source:Version}),
         ${misc:Depends},
         ${shlibs:Depends}
Description: Image Annotating Library (lib)

음..?
꾸러미명이 libkimageannotator 이 아니고, 아예 판본이 들어간 libkimageannotator0.4.0 이다.

이전판에도 이랬을까?
이전판은 0.3.2 인데, 다행히도 groovy 에서부터 제공하고 있었다. (어
째 현재와 미래와, 심지어 과거까지 왔다갔다하는 느낌이네)
여기선, 이상하게도 libkimageannotator0 으로 돼 있었다.

Package: libkimageannotator0
Architecture: any
Multi-Arch: same
Depends:
 ${shlibs:Depends},
 ${misc:Depends},
 libkimageannotator-common (= ${source:Version}),
Description: Image Annotating Library (lib)

왜 그냥 libkimageannotator 은 아닌지. 의도된 건지, 실수인건지. 내가 알 길은 없다.

이걸 그대로 0.4.1 에 적용하려면, 꾸러미 이름도 마찬가지로 또 바꿔줘야 한다. 즉, libkimageannotator0.4.1 이 돼야했는데.. 그냥 이렇게 갔어도 될 법은 했지만, 왜 그런지 꾸러미 이름을 정상화(어떤 기준으로 감히 정상을 논하는거냐?)해보고 싶었다.

이걸 libkimageannotator 로 바꾸면, 연관된 의존성도 모두 바꿔줘야 한다. 같은 소스에 있는 libkimageannotator-dev 은 물론이고, 궁극 목표인 ksnip 에서도 마찬가지다.

뭐, 이건 별로 어려운게 아니었으니 일사천리로 진행했다.

그런데, 문제는 이 다음에 터져버렸다.


다 만들고, 설치를 해봤다.
그런데??

kde-spectacle 이 삭제돼 버린다. 이른바 의존성 충돌. 아 이런 젠장.
어차피 둘다 똑같은 일을 하는 프로그램이라, ksnip 만으로 만족할 수도 있다. 허나, 있는 걸 못 쓴다면 어쩐지 손해보는 느낌이잖아?

확인해보니, kde-spectacle 은 libkimageannotator0.4.0 을 필요로 한다.
이렇다는 건, libkimageannotator 와 libkimageannotator0.4.0 이 동시에 설치돼야 한다는 상황인데, 과연..???

좀더 살펴보니, 실제로 설치된 파일은 이랬다. 이건 0.4.0 때 상황이다.

ll /usr/lib/x86_64-linux-gnu/libkI*
-rw-r--r-- 1 root root 1222896  2월 12 21:41 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0.4.0

여기에, libkimageannotator-dev 가 설치되면, .so 가 생긴다.

ll /usr/lib/x86_64-linux-gnu/libkI*
lrwxrwxrwx 1 root root      27  2월 12 21:41 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so -> libkImageAnnotator.so.0.4.0
-rw-r--r-- 1 root root 1222896  2월 12 21:41 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0.4.0

0.3.2 때는 이랬다.

ll /usr/lib/x86_64-linux-gnu/libkI*
lrwxrwxrwx 1 root root      27  2월  2 17:17 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so -> libkImageAnnotator.so.0.3.2
-rw-r--r-- 1 root root 1034472  2월  2 17:17 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0.3.2

둘 모두 방식은 같다. 이런 걸 보면, 아무래도 꾸러미 이름을 libkimageannotator0.4.0 으로 지은 건 실수로 보인다.

아무튼, 이름이 libkimageannotator0.4.0 이렇게 돼 있고, kde-spectacle 이 이 꾸러미를 콕 집어 의존하고 있기 때문에 복잡한 문제가 생겨버렸다.
만약 0.4.0 꾸러미가 libkimageannotator 이었거나, libkimageannotator0 이었다면, 내가 만든 0.4.1 이 자연스레 대체할 수 있었을텐데, 요상한 상황이 돼 버렸다.

잠깐 고민하다가, ‘가짜 꾸러미(Dummy Package)를 만들면 이 문제가 해결되지 않을까?’ 기특한 생각에 스스로에게 감탄해버리고 말았다. ㅎㅎ

가짜 꾸러미는 전에 Nimf 에서 봤었는데, 만드는 법은 정말로 간단하다.
control 파일에 이런 식으로 적절히 넣어주면 된다.

Package: libkimageannotator0.4.0-dummy
Architecture: any
Provides: libkimageannotator0.4.0 (= 0.4.0)
Depends: libkimageannotator
Description: Dummy package for kde-spectacle
 This package provides a dummy kde-spectacle for KDE Neon.

설명은 봐도 잘 이해안되는 Debian 문서를 참고..?

가짜 꾸러미는 이렇게 쉽게 만들어졌다. 내가 원했던 그림은, libkimageannotator0.4.0 이 자동으로 삭제되고 libkimageannotator0.4.0-dummy 가 설치되는 자연스러움(?)이었는데, 거기까진 성공하지 못했다. Breaks, Replaces 를 적절히 넣어야 하는 듯 한데..

흠!
이 글을 쓰면서 문득 든 생각인데, 난 Replace/Break 을 libkimageannotator 꾸러미에 넣었었다. 그런데, 그게 아니라 libkimageannotator-common 에 넣어야 할 지도 모른다는 생각이 들었다.

뭘 확실히 알고 하는게 아니고 주먹구구로 하다보니, 그저 몸으로 부딪혀야만 한다는게 슬프다…


이런 우여곡절 끝에, 꾸러미는 완성됐다. 마지막까지 묘한 상황이 벌어지긴 했지만, 일단은 성공은 했다.

kde-spectacle 건도 어영부영 넘어는 갔다. ksnip 을 설치하면 여전히 kde-spectacle 이 지워지긴 하지만, 그 이후에 다시 설치하면 가짜 꾸러미도 함께 설치되면서 작동엔 무리가 없게 된다.

spectacle 이 제대로 일을 하려면, 일단은 가짜 꾸러미가 표면상(?)으로 존재해야하고, 실제로는 libkimageannotator 라이브러리가 있어야 한다.

Spectacle 이 잘 돌아갈 수 있도록, 심볼릭 링크를 만들어 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0 을 향하게끔 해줬다.
작전 성공! kde-spectacle 도 (적어도) 실행에는 문제가 없다. 잘 돌아가는지까지는 열심히 돌려보지 않아서 모르겠지만.

이를 위해 debian/libkimageannotator0.4.0-dummy.postinst 을 만들고, 여기서 심볼릭 링크를 만들게 했다.
용의주도하게(He’s so ambitious, even sews~~~), postrm 까지 만들어, apt remove 시에 불필요한 파일이 잘 지워지게끔까지 신경을 썼다.

그 결과, 이런 환경이 만들어졌다.

ll /usr/lib/x86_64-linux-gnu/libkI*                                                                                      ⏎
lrwxrwxrwx 1 root root   27 2021-02-18 16:16 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0 -> libkImageAnnotator.so.0.4.1
lrwxrwxrwx 1 root root   49 2021-02-18 16:17 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0.4.0 -> /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0
-rw-r--r-- 1 root root 967K 2021-02-16 14:34 /usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0.4.1

/usr/lib/x86_64-linux-gnu/libkImageAnnotator.so.0.4.0 이 가짜 꾸러미에서 설치한 심볼릭 링크다.

아.. 윤스테이 덕에 이 글을 무사히 작성했다. ㅎㅎ
집중했으면 30분쯤이면 마쳤을 글이지만, 한눈 팔며 쓰느라 거의 2시간이 더 걸렸네.
뭔가 빠뜨린 내용도 있겠지만!

이 작업을 하면서, 여러가지 배웠지만, 중요한 사항을 정리해본다.

  • .install 파일의 역할 (이 글에선 이에 대해 언급하진 않았다.)
  • .postinst, .postrm 등의 역할.
  • 가상 꾸러미 역할, 제작, 사용법
  • 각 꾸러미간 연계

이 정도다. install 이나 postinst 등은, 한 소스에서 꾸러미가 하나만 나온다면 그냥 install 자체로도 되는 듯 한데, 두 꾸러미 이상 나올 때는 꾸러미 이름을 앞에 써줘야 한다. 즉, libkimageannotator.install 이런 식이다.

install 파일에 대해선, 컴파일 지식이 필요하다. 따라서, 현 시점에선 내가 더 알 수 있는 방법이 없다.

일단은 여기까지.
좀 더 기운이 나면(?), libkimageannotator(0.4.1)이 libkimageannotator0.4.0(0.4.0)을 대체할 수 있는 방법을 찾아보도록..

안녕하세요. 글 남겨주셔서 고맙습니다.