Dawid 이 퇴사한 후 떠 안은 시스템 중 하나가 geo-manager 이다.
IP -> geo resolution service를 제공하는 3rd Party data를 messaging해서 회사 시스템에 Inject하는 시스템이다.

근데, 3rd Party 의 IP coverage가 증가함에 따라 Data Size 가 증가하는데..
그 동안은 주로 데이터를 Inject한 회사 시스템 메모리 사용량을 주로 챙겨보고 있었는데..
지난 주에 새로운 패키지를 Baking 하려다 보니

deb package Install 후 data curruption 되었다는 에러가 나고 Puppet 실행이 fail 하는 문제가 생기기 시작했다.
Sys Admin이 error를 체크 하더니 data file이 8G가 넘어서 deb package 에서 처리를 못해서 생기는 문제라고 한다. :-(  
https://www.gnu.org/software/tar/manual/html_section/Formats.html

 

그러면서 제시해준 해결책이 파일 사이즈를 줄여라...
Puppet Log를 보면서 파일이 1.8G 정도 밖에 되지 않아서 좀 이상하다 싶었는데..
실제로 파일을 gzip으로 압축을 했더니 8G 가 1.8G로 줄어 드는 놀라운 매직(?)이 발생했다.

흠.. 일단 deb packaging에 들어가기 전에 파일을 gzip으로 compress하고, 
deb package 설치 후에 파일 압축을 해제 하면 될 것 같은데.
문제는 그러면 다른 팀 Engineer에게 boot code를 수정하라고 해야 하고..
어쨋든 해당 상황을 공유했더니 postinst/ prerm을  package에 추가 하라는 의견이 나왔다.

찾아 보니

deb 설치 이전/이후에 실행되는 Script들이 pre/postinst 이고,
pre/postrm은 deb package 이외에 cleanup이 필요한 파일들을 설치 이전/이후에 정리해주는 script들이다.

그리고 이 script들은 step 에 맞추어 각 parameter에 맞추어 실행이 되는 것이다.
https://askubuntu.com/questions/101962/how-to-run-a-script-only-during-first-install-of-a-package-and-not-during-upgrad

 

How to run a script only during first install of a package and not during upgrades?

I recently started packaging up some of my software and publishing it on Launchpad. The installation and removal works fine, but upgrading the package from one version to the next version is proble...

askubuntu.com


우리 같은 경우는 일단 postinst.sh 가 필요하고 package가 정상적으로 설치 된 이후에만 실행이 되어야 하기에

첫 번째 파라미터가 configure 일 경우에만 실행이 되도록 작성을 하였다.

#!/bin/bash

set -e

case "$1" in 
      configure)
      .....
esac

exit 0


테스트를 진행해 보니 일단 package가 설치가 되면 해당 script들은 
/var/lib/dpkg/info/패키지이름.postinst 와 같이 저장이 된다.

 

https://www.debian.org/doc/debian-policy/ap-flowcharts.html
그리고 위에 사이트에 있는 그림들 처럼 현재 버전 , 설치 중 버전의 script들을 각 상황에 따라 실행을 하게 된다.

e.g prerm은 이전 설치 버전의 script로 버전 파라미터는 설치 할 버전 ,
      preinst는 설치 하는 버전 package script로 버전 파라미터는 현재 버전으로.

잘 될지는 몇 일 간의 테스트로 결정이 될 듯 한데.
기본적인 테스트에서는 큰 문제는 발견할 수 없었다.

주로 Java/Scala를 사용하고,
docker를 사용한 Cloud 위주로 작업하는 요즈음.. deb packaging을 사용할 일이 앞으로 있을지는 모르지만.
어쨋든 뭐 하나를 또 배운 그런 요즈음 이다.

'개발자세상' 카테고리의 다른 글

Rate Limit  (0) 2022.03.31
[도서리뷰]엔터프라이즈 자바 마이크로 서비스  (0) 2020.07.01
Kotlin  (0) 2018.10.30
Apache 2.0, PHP 7.0 and Ubuntu  (0) 2017.12.20
Java 8 , Reactive  (0) 2017.07.16
Posted by headiron
,