프로그래머의 일상: 소프트웨어 패키징하기

지금 일하는 회사에서 판매하는 제품은 대략 개별 linux 에서 쓸 수 있는 패키지로 생성한다. 원래는 Ubuntu 12.04 기반에서 시작한 작업이 Ubuntu 14.04가 나왔고, CentOS 7을 지원하기 시작했고, 그러다가 -_- Centos 6.x 지원도 포함된 상황.

하여간 그래서 겪는 문제가:

  •  서비스를 띄우는 방법이 다르다Ubuntu 12.04 / 14.04, CentOS 6.x는 upstart 기반 (혹은 init script를 써야); 반면에 CentOS 7은 systemd 기반
  • 패키징 방식의 차이: 아시다시피 Ubuntu는 .deb, CentOS는 .rpm 기반
  • 툴 체인 차이 (컴파일러나 cmake 류의 툴의 버전 차이)
  • 라이브러리 버전 문제 / 없는 라이브러리 문제

이걸 해결하려면 대략:

  • upstart / systemd 설정 파일을 각각 생성
  • 패키징 방식 차이는 그나마 cmake의 CPack으로 어느 정도는 해결 가능; 그렇지만 CPack도 버그가 꽤 많다. 특히 RPM 패키징관련해서.
  • 툴 체인 차이는 낮은 쪽 기준으로 빌드되게 하는 수 밖에 없음. (CentOS 6.x의 GCC버전은 v4)
  • 라이브러리 버전 문제: 별 문제 없는 경우도 많은데, 사용해야하는 기능이 더 높은 버전에 있는 경우 CentOS 6.x나 Ubuntu 12.04 용으로 패키징 해서 배포

정도의 작업을 해야 했다.

그리고 이제 Ubuntu 15.04 런치 소식을 보는데 systemd 로 옮겨간 걸 발견. LTS 릴리즈들 지원 기간을 생각하면 그냥 Ubuntu 버전 보고 systemd / upstart 중에 뭘 쓸지 지정해야 할테니 더 귀찮아지기만 할 듯. (그러니까 16.04는 systemd 일거란 얘기니까)