빌드시 필요 패키지 버전에 대해 어떻게 관리하시나요?
글쓴이: kmssu4305 / 작성시간: 월, 2019/04/29 - 6:05오후
안녕하세요 패키지 혹은 커널 빌드 시에
개발자들간의 빌드 환경을 일치시키는 것과 관련하여 현재 여러분들은
어떤 방법을 사용하고 계신지 궁금해서 여쭙습니다.
처음 게시하는 글이라 주제나 방식이 맞는지 모르겠네요.
궁금한 내용은 다음과 같습니다.
linux 환경에서 어떤 프로그램을 빌드하고 싶을 때 필요한 패키지들이
있다고 가정해 봅시다. 커널 빌드를 예로 들면 build-essential libncurses5 libncurses5-dev 등이 있겠죠.
문제는 apt-get으로 받는 패키지들이 향후 업데이트되어 버전이 변경이 되었을 때 과연
이전에 빌드하였던 방식대로 되지 않는다면 어떻게 관리 하는것이 좋은가 하는 것입니다.
이러한 현상은 아마 커널 빌드보다는 그 이외의 창작물에 대해서 자주 발생할 것 같습니다.
기존에 잘 빌드 되었다고해서 새로운 호스트PC에 프로그램 소스를 받아 빌드할 때는 관련된 패키지의
버전이 달라져서 빌드에 실패할 수 있기 때문이죠.
제가 생각하기로는 SVN 같은 공간에 커널, 혹은 개발중인 프로그램을 올려두고 관련된 패키지들도
같이 업로드를 하여 이후 개발자가 한번에 다 받아 빌드과정에서 필요 패키지를 설치하는 방향을 생각중인데요.
혹시 이와 비슷한 개념을 사용중인 오픈소스가 있거나 위와같은 상황에서 다른 해결 방법을 사용하시는
분들은 어떤 방식으로 해결하셨는지 궁금합니다. :)
Forums:
한가지 방법으론 컨테이너 툴로 빌드 환경을 가상화
한가지 방법으론 컨테이너 툴로 빌드 환경을 가상화 시키면 됩니다.
예로 2.6 커널은 gcc 최신 버전에서 빌드가 안되는데 우분투 14.04 컨테이너 내부에서 빌드하고 커널 이미지만 외부 볼륨에 넣어주면 됩니다. 이건 컨테이너가 동작할 수 있는 모든 플랫폼에서 동일한 빌드환경을 제공하는 거라 개발자간에 환경이 달라도 의존성 문제가 생기지 않습니다.
라이브러리의 경우 릴리즈 버전에 따라 tarball로 압축해서 제공하고 master 브랜치는 의존성을 항상 최신으로 관리합니다.
---------------
Happy Hacking!
오.. 컨테이너 툴로 빌드 환경을 가상화 시키는
오.. 컨테이너 툴로 빌드 환경을 가상화 시키는 방법은 처음 들어봤습니다.
관련 자료들을 찾아봐야겠군요! 감사합니다. :)
텔레그램의 경우, kmssu4305님께서 말씀하신
텔레그램의 경우, kmssu4305님께서 말씀하신 방법과 유사한 방법으로 빌드하는 것 같습니다.
스태틱 링킹하는 것 같습니다.
https://github.com/telegramdesktop/tdesktop
그리고 또 다른 방법으로는 kmssu4305님께서 만드신 소프트웨어가 library-1.1.1 버전에서 빌드하여 작동하고 library-1.2 에서는 빌드되지 않을 때, 조건부 컴파일로 버전별로 처리하는 방법도 있습니다. 이러한 방법을 권장합니다. 하지만 정답은 없고 윗분이 말씀하신 컨테이너 방법도 있고, kmssu4305님께서 상황에 맞게 여러 방법 중에 선택하시면 되겠습니다.
아래는 GTK 버전 >= 3.22 에서 컴파일 에러가 나서
GTK < 3.22, GTK >= 3.22 일 때 조건부 컴파일을 하는 예입니다.
의견 감사합니다!
의견 감사합니다!
만약에 이렇게 빌드를 한다고 가정한다면 개발자 입장에서 빌드에 필요한 패키지의 버전별로
모두 대응을 해주어야 해서 코드의 변경이 자주 일어나야하지 않을까요?
혹시 이런 방법을 사용하셨을 때 버전별로 대응을 해주어야하는 빈도는 어느정도 인지 경험이 있으시다면
공유 부탁드립니다 :) (당연히 패키지마다, 버전마다 경우는 다르겠지만 참고를 하고싶어서요ㅎㅎ)
nimf 프로젝트의 경우,
nimf 프로젝트의 경우,
gcc 관련 4년 동안 2건.
라이브러리 관련 4년 동안 6건 있었습니다.
아래는 라이브러리 관련 상세
GTK 3건, GLib 1건. Qt 2건
빌드에 사용된 라이브러리는 13개.
libglib2.0-dev,
libgtk-3-dev,
libgtk2.0-dev,
libqt4-dev,
qtbase5-dev, qtbase5-private-dev,
libappindicator3-dev,
libhangul-dev,
libanthy-dev,
librime-dev (>= 1.2.9),
libxkbcommon-dev (>= 0.5.0),
libwayland-dev,
libxklavier-dev,
libm17n-dev,
댓글 달기