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에 올바르게 설치되는지 확인한다.