ubuntu의 nginx package를 custom하기

nginx 패키지를 자신에 맞게 custom해야하는 경우가 발생한다.
설치 위치(Install Path), 패키지 명등을 변경해야하는 경우가 발생하는데 nginx-1.18.0 케이스에 대해서 아래와 같이 custom이 가능하다.
custom하는 방법을 간단하게 정리한다.

1. Package Build에 사용하는 파일 다운로드

https://packages.ubuntu.com/focal-updates/nginx-full

사이트에서 3가지 파일을 다운받는다.

# wget http://archive.ubuntu.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-0ubuntu1.3.dsc
# wget http://archive.ubuntu.com/ubuntu/pool/main/n/nginx/nginx_1.18.0.orig.tar.gz
# wget http://archive.ubuntu.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-0ubuntu1.3.debian.tar.xz

 

2. 아래와 같이 명령어를 실행해서 build 환경을 만들어 준다.

# xz -dc nginx_1.18.0-0ubuntu1.3.debian.tar.xz |tar xvf -
# tar xvzf nginx_1.18.0.orig.tar.gz
# mv nginx-1.18.0/* .

 

3. 설치 Path 변경

작업 전 debian 디렉토리로 이동해서 작업한다.

# cd debian

 

1. usr/sbin -> home/system/nginx/sbin

find . -type f -exec perl -pi -e 's/usr\/sbin/home\/system\/nginx\/sbin/g' {} \;


2. etc/nginx -> home/system/nginx/etc

find . -type f -exec perl -pi -e 's/etc\/nginx/home\/system\/nginx\/etc/g' {} \;


3. var/log/nginx -> home/system/nginx/log

find . -type f -exec perl -pi -e 's/var\/log\/nginx/home\/system\/nginx\/log/g' {} \;


4. var/www -> home/system/nginx/www

find . -type f -exec perl -pi -e 's/var\/www/home\/system\/nginx\/www/g' {} \;


5. usr/share/nginx -> home/system/nginx/share

find . -type f -exec perl -pi -e 's/usr\/share\/nginx/home\/system\/nginx\/share/g' {} \;


6. var/lib/nginx -> home/system/nginx/lib

find . -type f -exec perl -pi -e 's/var\/lib\/nginx/home\/system\/nginx\/lib/g' {} \;


7. usr/lib/nginx/modules -> home/system/nginx/lib/modules

find . -type f -exec perl -pi -e 's/usr\/lib\/nginx\/modules/home\/system\/nginx\/lib\/modules/g' {} \;


8. change prefix prefix=/home/system/nginx/share -> prefix=/home/system/nginx

find . -type f -exec perl -pi -e 's/prefix\=\/home\/system\/nginx\/share/prefix\=\/home\/system\/nginx/g' {} \;

9. change modules link dir because changed prefix

sed -i 's/home\/system\/nginx\/share\/modules/home\/system\/nginx\/modules/g' nginx-common.links

지금 상태에서 build를 하면 설치 위치가 변경된 Nginx 패키지가 생성된다.

 

4. 패키지 명칭 변경

예: nginx-full -> encicle-nginx-full

설정 파일의 내용 변경

find . -type f -exec perl -pi -e 's/libnginx-mod/encicle-libnginx-mod/g' {} \;

sed -i 's/nginx-doc/encicle-nginx-doc/g' control

sed -i 's/nginx-common/encicle-nginx-common/g' control

sed -i 's/nginx-core/encicle-nginx-core/g' control

sed -i 's/nginx-full/encicle-nginx-full/g' control

sed -i 's/nginx-light/encicle-nginx-light/g' control

sed -i 's/nginx-extras/encicle-nginx-extras/g' control

sed -i 's/Package:\ nginx/Package:\ encicle-nginx/g' control

sed -i 's/name\=nginx/name\=encicle-nginx/g' rules

sed -i 's/package\ nginx/package\ encicle-nginx/g' rules

sed -i 's/package\=nginx/package\=encicle-nginx/g' rules

sed -i "s/dbgsym-migration='nginx/dbgsym-migration='encicle-nginx/g" rules

sed -i "s/'nginx-common\ /'encicle-nginx-common\  /g" dh_nginx

 

위 변경된 내용에 맞게 파일명 변경

rename 's/libnginx-mod/encicle-libnginx-mod/' *

rename 's/^nginx/encicle-nginx/' *

 

5. 패키지 빌드하기

# cd ../

# ls
root@homemachine:~/nginx-build/ubuntu-nginx_1.18.0# ls
CHANGES     LICENSE  auto  configure  debian  man           nginx_1.18.0-0ubuntu1.3.debian.tar.xz  nginx_1.18.0.orig.tar.gz
CHANGES.ru  README   conf  contrib    html    nginx-1.18.0  nginx_1.18.0-0ubuntu1.3.dsc            src

# apt-get install build-essential fakeroot dpkg-dev

# dpkg-buildpackage -rfakeroot -b

 

빌드가 완료된 후, 아래 명령어로 생성된 패키지 확인이 가능하다.

# ls ../
encicle-libnginx-mod-http-auth-pam-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
encicle-libnginx-mod-http-auth-pam_1.18.0-0ubuntu1.3_amd64.deb
encicle-libnginx-mod-http-cache-purge-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
encicle-libnginx-mod-http-cache-purge_1.18.0-0ubuntu1.3_amd64.deb
encicle-libnginx-mod-http-dav-ext-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
..
encicle-libnginx-mod-stream_1.18.0-0ubuntu1.3_amd64.deb
encicle-nginx-common_1.18.0-0ubuntu1.3_all.deb
encicle-nginx-core-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
encicle-nginx-core_1.18.0-0ubuntu1.3_amd64.deb
encicle-nginx-doc_1.18.0-0ubuntu1.3_all.deb
encicle-nginx-extras-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
encicle-nginx-extras_1.18.0-0ubuntu1.3_amd64.deb
encicle-nginx-full-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
encicle-nginx-full_1.18.0-0ubuntu1.3_amd64.deb
encicle-nginx-light-dbgsym_1.18.0-0ubuntu1.3_amd64.ddeb
encicle-nginx-light_1.18.0-0ubuntu1.3_amd64.deb
encicle-nginx_1.18.0-0ubuntu1.3_all.deb
nginx_1.18.0-0ubuntu1.3_amd64.buildinfo
nginx_1.18.0-0ubuntu1.3_amd64.changes
ubuntu-nginx_1.18.0

 

이후 Build된 파일을 설치하면서 변경된 Path에 올바르게 설치되는지 확인한다.