Django 어플리케이션을 Apache 서버에서 구동 시키기 위해 Debian 패키지를 만드는 방법입니다. 


이 글에서는 바이너리 패키지를 만드는 방법에 대한 설명만 하도록 하겠습니다. 


deb 패키징을 하려는 어플리케이션이  /home/USERNAME/Workspace/myapp 폴더라고 가정하고 진행하겠습니다.  (django 어플리케이션을 패키징 하는 것이므로 settings.py나 manage.py와 같은 파일들이 들어 있을 겁니다. ) 

myapp 이란 django 어플리케이션을 djangoapp이란 이름이로 패키지를 하는 절차입니다. 


작업을 진행하기 앞서 패키징을 진행할 위치에서 필요한 폴더를 만들고 작업하려는 파일들을 복사해 주어야 합니다. 

$ mkdir ./debian

$ mkdir -p ./debian/usr/share

$ mkdir -p ./debian/etc/init.d

$ mkdir -p ./debian/usr/share/doc/djangoapp

$ cp -r /home/USERNAME/Workspace/myapp ./debian/usr/share/


그 다음 패키징과 관련된 파일들을 넣어줄 'DEBIAN' 폴더도 만들어 줍시다. 


$ mkdir ./debian/DEBIAN



추천은 저를 춤추게 합니다 ^^



DEBIAN 폴더


이 폴더는 아래 파일들을 포함하고 있어야 합니다. 

  • control
  • config
  • conffiles
  • templates
  • postinst
  • postrm
  • preinst
  • prerm

각 파일들을 어떻게 작성해야 하는지 차례대로 알아봅시다. 


control 

이 파일은 패키징에 매우 중요한 파일입니다. 패키지에 대한 정보와 디펜던시(dependency)정보 등을 기술해줍니다. 우리는 바이너리(binary)패키지만 할 것이므로 아래와 같이만 기술해주면 됩니다. 


디펜던시(depends)에 이 패키지를 실행하기 위해 필요한 패키지 들을 나열해 주면 됩니다. 


config

패키지를 설치하기 전에 입력받아야 할 값이 있다면 이 파일에서 질문을 지정해주면 됩니다. 예를 들어 이름을 묻고 싶다면 아래와 같이 작성하세요. 


이 파일에는 질문에 대한 내용이 안보이죠? 그 내용은 아래 나오는 'templates'파일에서 기술하면 됩니다. 


templates

질문을 입력받기 위한 내용입니다. 일반적인 경우 입력 받을 일이 없으니 참고만 하세요. 


conffiles 

이 파일에는 패키지를 설치 할 때 일반적으로 '/etc' 하위 폴더에 넣어 줄 설정 파일과 관련된 정보를 기술해 줍니다. 우리는 django(장고) 시작 스크립트(script)apache(아파치) 설정 파일에 대한 정보를 입력해 주면 됩니다. 


아파치 설정 파일은 아파치 버전에 따라 다르겠지만,  버전 2.2.22 를 사용중인 저의 경우 'site-available'에 설정 파일을 넣어주고 'enable'시켜주는 방식이라 저 폴더에 넣어줬습니다. 


preinst

파일 이름에서 느낄 수 있는 것 처럼 설지를 진행하기 이전에 수행할 작업을 기술해 주는 파일 입니다. 


혹시나 이미 설치가 되어있어서 동작 중이었다면 동작을 중단 하도록 해줬습니다. 


postinst 

이 파일은 패키지를 압축을 푼 다음에 수행할 작업을 기술해 주는 파일입니다. 


설치시에 입력받았던 이름을 사용해서 무언가를 할 수 도 있습니다. 

그 외에도 필요한 폴더를 생성한다거나 다른 명령을 실행 하도록 지정 하는것도 가능합니다. 

( 'a2ensite'는 아파치의 'sites-available' 폴더에 넣어주었던 파일을 사용하도록 지정해 주는 명령어입니다.)


설치가 성공했다면 서비스를 시작하도록 해줍시다. 


prerm

이 패키지를 제거하는 명령어를 실행 했을 때 설치된 패키지를 제거하기 전에 수행할 작업을 기술해 주는 파일입니다. 


postrm

이 패키지를 제거하는 명령어를 실행 했을 때 설치된 패키지를 제거한 다음에 수행할 작업을 기술해 주는 파일입니다. 


여기까지가 'debian/DEBIAN'폴더에 넣어주어야 하는 파일들입니다. 



웹 서버(아파치) 설정

위에서 아파치 폴더의 'sites-available' 폴더에 넣어줬던 파일에 대한 설명입니다. 


호스트 이름, 포트 명과 같은 서버 설정 정보와 'root'폴더를 지정해줍니다. 

그 아래 정보들은 django(장고)를 apache(아파치)에서 구동되도록 하기 위한 설정 들입니다. 참고만 하세요. 



Django(장고) init.d 스크립트 

시작 스크립트는 './debian/etc/init.d' 폴더에 넣어주면 됩니다. 


저는 웹 페이지 경로를 '/var/www/' 로 지정해 주었습니다. 이를 위해서 '/usr/share/myapp' 폴더의 링크를 '/var/www/djangoapp/myapp'에 만들어 주어야 합니다. 

위의 'DEBIAN/postinst' 에 예제로 적어놓은것 처럼 'postinst'에 지정해 주셔도 됩니다. 



Debian doc 파일들 

해당 패키지에 대한 문서 파일들을 작성해 주어야 합니다. 


changelog (changelog.Debian) 

changelog는 2개의 파일이 필요하지만 초기 설치이므로 같은 내용으로 작성해줍시다. 


이 파일은 은근 문법을 따집니다. 빈 줄을 제거하지 마시고 잘 넣어보시고 그래도 잘 되지 않는다면 changelog 문서를 참고하세요. 

작성한 파일은 './debian/usr/share/doc/djangoapp/'폴더로 복사한 다음 'gz'파일로 압축해 줍니다. 


$ cp changelog changelog.Debian ./debian/usr/share/doc/djangoapp/

$ gzip --best ./debian/usr/share/doc/djangoapp/changelog


copyright

copyright정보를 기술해 주는 파일입니다. 


이 파일도 changelog와 동일하게 복사하고 'gz'파일로 만들어 줍니다. 


$ cp copyright ./debian/usr/share/doc/djangoapp/

$ gzip --best ./debian/usr/share/doc/djangoapp/changelog.Debian



패키지 빌드 실행 


debian은 파일의 권한(permission)을 755(-rwxr-xr-x)나 644(-rw-r--r--)로 할 것을 권장합니다. 

파일의 권한을 목적에 맞게 지정해 줍시다. 


$ find ./debian -type d | xargs chmod 755


이런 식으로 chmod 명령으로 파일 권한을 주시면 됩니다. 


준비를 다 했다면 패키지 빌드를 수행해 봅시다. 


$ fakeroot dpkg-deb --build debian

$ mv debian.deb djangoApp_1.0-1.deb

$ lintian djangoApp_1.0-1.deb


dpkg-deb 명령으로 빌드를 수행하고, 그 결과 생성된 파일을 원하는 이름으로 수정 한 다음 lintian명령으로 패키지에 문제가 없는지 검사하는 순서로 진행하시면 됩니다. 

lintian명령 수행 결과 맨 앞에 'W'로 표시된 'Warning'은 수정하는게 좋지만 수정하지 않아도 배포는 가능하고, 'E'로 표시되는 'Error'는 모두 수정하셔야만 됩니다. 

'Error'가 없다면 deb파일을 배포할 준비가 완료 된겁니다. 


참고한 글 

Posted by KT한
,