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
우리 같은 경우는 일단 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 |