SlideShare a Scribd company logo
1 of 73
Download to read offline
Debian Packaing
Debian Packaing Advanced
2018.04.05
Infrastructure Development Team. 심경섭
목차
I. 개요
II. Files in Debian Directory
III. QnA
개요
개요
• Debian directory 안의 주요 파일 확장자들에 대해서 확인
• Debian Helper 의 역할에 대해서 확인
• Debian Package 의 설치 프로세스에 대해서 확인
Files in Debian Directory
compat
• debian helper 의 버전
• 최신 버전으로 사용하는 것이 좋음
• 버전에 따라 빌드되는 내용이 다름
compat version 9
compat version 9
compat version 1
compat version 1
install
• dh_install 의 실행 결과로 파일을 옮겨줌
• 단일 패키지인 경우, install 만 사용
• 다중 패키지인 경우, [패키지명].install 을 사용
install
install
install
install
install (override)
install (override)
install (override)
init.d or service
• InitV system 을 사용하면, init.d 파일을 만들어 서비스를 등록
• Systemd 를 사용하면, service 파일을 만들어 서비스를 등록
• ”/etc/init.d/” 경로로 자동으로 파일을 이동시켜줌
[패키지].init.d
[패키지].service
기타
interface up/down
• interface 의 up/down 이벤트에 따른 처리 로직을 등록
• if-down, if-post-down, if-pre-up, if-up 에 대한 처리 가능
• 예를 들어, ssh 는 if-up 이 되면, ssh 서비스를 재시작함
interface up/down
cron
• Cron 설정 파일을 자동으로 등록
• [패키지].cron.daily / *.cron.weekly / *.cron.d/ 와 같은 형식
logcheck / logrotate
• logcheck 와 logroate 설정 파일을 시스템에 등록
• /etc/logcheck/ 디렉토리와 /etc/logrotate.d/ 디렉토리에 저장됨
• [패키지].logcheck.[옵션] / [패키지].logrotate
modules
• 커널 모듈이 로드될 수 있도록 해줌
• [패키지].modprobe
• dh_make 에서 모듈로 설정하는 것을 권장
modules
modules
trigger
• 특정 파일이나 디렉토리의 변화를 trigger 로 설정
• 설정된 내용에 변화가 생기면 별도의 처리를 수행
• interest 와 activate 가 있음
trigger 종류
• interest, interest-await, interest-noawait
• activate, activate-await, activate-noawait
• activate, activate-await 는 같음
• noawait 는 trigger 를 유발한 작업의 완료를 기다리지 않음
trigger 종류
trigger interest
• trigger 파일에 설정 파일이나 디렉토리를 설정
• preinst, postinst, prerm, postrm 등에 trigger 에 대한 이벤트를 설정
trigger interest
trigger activate
• 패키지의 상태가 변경됐을 때, trigger 를 활성화 함
• unpack, configure, remove, purge, deconfigure 의 상태 변화시
pre/post, inst/rm
• Maintainer 를 위한 script 목록
• dh_installdeb 에서 불리는 기능
• 패키지 설치 전/후, 삭제 전/후의 명령을 등록할 수 있음
pre/post, inst/rm
• Install 파일처럼 [패키지].preinst, [패키지].postrm 로 사용
• 시스템 설정 파일은 직접 건드리지 않도록 설정
• 업그레이드 프로세스를 고려해서 잘 설계해야함
preinst
postinst
prerm
postrm
#DEBHELPER#
• 다른 debhelper 명령에 의해서 치환되는 토큰
• 삭제하게 되면, 치환되지 않음
install Process
install Process
install Process
install Process
install Process
install Process
maintscript
• dpkg-maintscript-helper 에 의해서 관리됨
• 설정 파일 및 링크 파일을 관리함
• #DEBHELPER# 의 토큰과 치환됨
maintscript
maintscript
maintscript
maintscript (removing conffile)
• 설정 파일 내용
• rm_conffile [설정 파일] [이전 버전] [패키지] -- ”$@”
• ex) rm_conffile /etc/kssim.conf 2.0.0 kssim -- “$@”
maintscript (removing conffile)
• 처리 과정
• preinst 에서 파일 수정이나 이름 변경을 확인
• 사용자가 별도로 수정한 경우, [패키지].dpkg-backup 으로 이름 변경
• 수정하지 않았으면, [패키지].dpkg-remove 로 이름 변경
• postinst 에서 후처리
• dpkg-backup 파일이 있으면, 원복하고 패키지의 최신 설정을 dpkg-backup 으로 변경
• dpkg-remove 는 삭제
• 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복
• dpkg-remove 는 삭제
maintscript (renaming conffile)
• 설정 파일 내용
• mv_conffile [예전 설정 파일] [새로운 설정 파일] [이전 버전] [패키지] -- “$@”
• ex) mv_conffile /etc/kssim.conf /etc/kssim1.conf 2.0.0 kssim -- ”$@”
maintscript (renaming conffile)
• 처리 과정
• preinst 에서 파일 이름 변경을 확인
• 사용자가 별도로 수정한 경우, 파일을 건드리지 않음
• 수정하지 않았으면, [패키지].dpkg-remove 로 이름 변경
• postinst 에서 후처리
• dpkg-remove 는 삭제
• 이전 설정 파일이 남아있으면, 새로운 설정 파일 이름으로 변경
• 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복
• dpkg-remove 가 원복됨
maintscript (switch symlink to directory)
• 설정 파일 내용
• symlink_to_dir [원본 경로] [링크 경로] [버전] [패키지] -- “$@”
• ex) symlink_to_dir /usr/kssim /usr/share/kssim [2.0.0] [패키지] -- “$@”
maintscript (switch symlink to directory)
• 처리 과정
• preinst 에서 이전 파일을 가리키는 링크가 있는 지 확인
• 없으면, 아무것도 하지 않음
• 있으면, [경로].dpkg-backup 으로 변경
• postinst 에서 후처리
• dpkg-backup 은 삭제
• 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복
• dpkg-backup 이 원복됨
maintscript (switch directory to symlink)
• 설정 파일 내용
• dir_to_symlink [원본 경로] [링크 경로] [버전] [패키지] -- “$@”
• ex) dir_to_symlink /usr/kssim /usr/share/kssim [2.0.0] [패키지] -- “$@”
maintscript (switch directory to symlink)
• 처리 과정
• preinst 에서 아래 조건을 검사후, 해당하면 아무 작업하지 않음
• 디렉토리가 존재하는지
• conffiles 을 가지고 있는지
• 다른 패키지가 소유한 경로를 포함하고 있는지
• 로컬로 생성된 경로를 포함하고 있는지
• 해당하지 않으면, [원본경로].dpkg-backup 으로 변경 후, 원본경로를 다시 생성
maintscript (switch directory to symlink)
• 처리 과정
• postinst 에서 [원본경로].dpkg-backup 이 있고, [원본경로]가 있는 경우,
• [원본경로]에 새로 생성된 파일을 [링크 경로]로 옮김
• 비어있는 [원본 경로]를 [링크 경로]의 심볼릭 링크로 변경
• [path-name].dpkg-backup 파일 삭제
• 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복
• [pathname].dpkg-backup 의 경로를 [pathname] 으로 변경
maintscript (build dependency)
• control 파일의 dpkg 에 대한 빌드 의존성 필요
• rm_conffile 과 mv_conffile 은 1.15.7.2 이상
• symlink_to_dir 과 dir_to_symlink 는 1.17.14 이상
• Pre-Depends: dpkg (>= 1.17.14)
설정 파일 관리
• Debian Package 에서 설정 파일을 관리하는 방법이 몇가지 있음
• conffiles
• debconf-generated configuration files
• ucf (update configuration file)
conffiles
• compat 2 이하에서는 [패키지].conffiles 로 관리했음
• compat 3 이후는 /etc 디렉토리 하위에 설치되는 녀석에 자동 적용
• 사용자가 커스터마이징 한 내용과 패키지에서 설치되는 내용을 관리
conffiles
debconf-generated configuration files
• debconf 를 사용해서 만들어지는 설정 파일
• [패키지].config 형태로 내용을 작성
• 패키지 설치시 사용자에게 입력을 받아 설정을 만듬
• 또는 패키지 설치 당시 환경에 따라 설정을 만듬
debconf-generated configuration files
UCF (Udpate Configuration File)
• Debian 에서 Configuration 파일을 업데이트하는 방법중 하나
• 통상적으로 /usr/share/ 하위의 파일을 보존하는 용도로 사용
• [패키지].ucf 파일을 만들어서 관리
• Control 파일의 의존성 중, ${misc:Depends} 에 포함됨
• debhelper 에서 처리되어 #DEBHELPER# 로 치환됨
UCF (Udpate Configuration File)
• 아래와 같은 ucf 명령어를 debhelper 가 wrapping
• ucf /usr/share/kssim/conf /etc/kssim.conf
• “/etc/ucf.conf” 에서 기본 설정 값들을 처리할 수 있음
UCF (Udpate Configuration File)
QnA
참고자료
• https://www.debian.org/doc/debian-policy
KOREA
U.S.A.
JAPAN
Yeouido, Seoul www.pentasecurity.co.kr (HQ)
Houston, Texas www.pentasecurity.com
Shinjuku-Ku, Tokyo www.pentasecurity.co.jp
Copyright 2017 Penta Security Systems Inc. All rights reserved.

More Related Content

What's hot

ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)
Chulgyu Shin
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
sprdd
 
Gluster fs guide(v1.0)
Gluster fs guide(v1.0)Gluster fs guide(v1.0)
Gluster fs guide(v1.0)
sprdd
 
Glusterfs 구성제안 및_운영가이드_v2.0
Glusterfs 구성제안 및_운영가이드_v2.0Glusterfs 구성제안 및_운영가이드_v2.0
Glusterfs 구성제안 및_운영가이드_v2.0
sprdd
 
Glusterfs 소개 v1.0_난공불락세미나
Glusterfs 소개 v1.0_난공불락세미나Glusterfs 소개 v1.0_난공불락세미나
Glusterfs 소개 v1.0_난공불락세미나
sprdd
 
Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0
sprdd
 
X1 미디어변환 아카이빙 제안서-v1.0_20111110
X1 미디어변환 아카이빙 제안서-v1.0_20111110X1 미디어변환 아카이빙 제안서-v1.0_20111110
X1 미디어변환 아카이빙 제안서-v1.0_20111110
seungil
 

What's hot (18)

ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)
 
파일 전송 SFTP 서버 솔루션 - CrushFTP (old version)
파일 전송 SFTP 서버 솔루션 - CrushFTP (old version)파일 전송 SFTP 서버 솔루션 - CrushFTP (old version)
파일 전송 SFTP 서버 솔루션 - CrushFTP (old version)
 
리눅스 시작하기
리눅스 시작하기리눅스 시작하기
리눅스 시작하기
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차A - 비교하기와 되돌리기
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차A - 비교하기와 되돌리기Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차A - 비교하기와 되돌리기
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차A - 비교하기와 되돌리기
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
 
Aspera product introduce
Aspera product introduceAspera product introduce
Aspera product introduce
 
시그니처 기반 IT 인프라 자산수집 솔루션
시그니처 기반 IT 인프라 자산수집 솔루션시그니처 기반 IT 인프라 자산수집 솔루션
시그니처 기반 IT 인프라 자산수집 솔루션
 
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
파일 전송 SFTP 서버 솔루션 - CrushFTP - old version
 
Gluster fs guide(v1.0)
Gluster fs guide(v1.0)Gluster fs guide(v1.0)
Gluster fs guide(v1.0)
 
Glusterfs 구성제안 및_운영가이드_v2.0
Glusterfs 구성제안 및_운영가이드_v2.0Glusterfs 구성제안 및_운영가이드_v2.0
Glusterfs 구성제안 및_운영가이드_v2.0
 
Glusterfs 소개 v1.0_난공불락세미나
Glusterfs 소개 v1.0_난공불락세미나Glusterfs 소개 v1.0_난공불락세미나
Glusterfs 소개 v1.0_난공불락세미나
 
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
 
Linux tutorial
Linux tutorialLinux tutorial
Linux tutorial
 
Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0
 
시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203
 
R hive tutorial 1
R hive tutorial 1R hive tutorial 1
R hive tutorial 1
 
X1 미디어변환 아카이빙 제안서-v1.0_20111110
X1 미디어변환 아카이빙 제안서-v1.0_20111110X1 미디어변환 아카이빙 제안서-v1.0_20111110
X1 미디어변환 아카이빙 제안서-v1.0_20111110
 

Similar to Debian packaging - Advanced

Python packaging
Python packagingPython packaging
Python packaging
Ji Hun Kim
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
Yunkyu Choi
 
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
Tommy Lee
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
Dabi Ahn
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
NAVER D2
 
How to patch linux kernel
How to patch linux kernelHow to patch linux kernel
How to patch linux kernel
Kangmin Park
 

Similar to Debian packaging - Advanced (20)

Python packaging
Python packagingPython packaging
Python packaging
 
Debian 패키지 관리 프로세스
Debian 패키지 관리 프로세스Debian 패키지 관리 프로세스
Debian 패키지 관리 프로세스
 
데비안 패키지 관리하기.
데비안 패키지 관리하기.데비안 패키지 관리하기.
데비안 패키지 관리하기.
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
 
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
 
Hadoop distributed file system rev3
Hadoop distributed file system rev3Hadoop distributed file system rev3
Hadoop distributed file system rev3
 
Window에서 Rcplex 설치 가이드
Window에서 Rcplex 설치 가이드Window에서 Rcplex 설치 가이드
Window에서 Rcplex 설치 가이드
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 
linux1
linux1linux1
linux1
 
Git
GitGit
Git
 
Git
Git Git
Git
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
 
Python Packaging & Debian Packaging
Python Packaging & Debian PackagingPython Packaging & Debian Packaging
Python Packaging & Debian Packaging
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
How to patch linux kernel
How to patch linux kernelHow to patch linux kernel
How to patch linux kernel
 
Ubuntu packaging - deploy package
Ubuntu packaging - deploy packageUbuntu packaging - deploy package
Ubuntu packaging - deploy package
 
Git
GitGit
Git
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
 

More from 경섭 심

More from 경섭 심 (6)

More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)
 
Main Variable Program
Main Variable ProgramMain Variable Program
Main Variable Program
 
Python comparing
Python comparingPython comparing
Python comparing
 
Python coroutine
Python coroutinePython coroutine
Python coroutine
 
Effective Python 2st (Decorator & Generator)
Effective Python 2st (Decorator & Generator)Effective Python 2st (Decorator & Generator)
Effective Python 2st (Decorator & Generator)
 
Effective Python 1st (Test & Style)
Effective Python 1st (Test & Style)Effective Python 1st (Test & Style)
Effective Python 1st (Test & Style)
 

Recently uploaded

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Recently uploaded (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 

Debian packaging - Advanced

  • 1. Debian Packaing Debian Packaing Advanced 2018.04.05 Infrastructure Development Team. 심경섭
  • 2. 목차 I. 개요 II. Files in Debian Directory III. QnA
  • 4. 개요 • Debian directory 안의 주요 파일 확장자들에 대해서 확인 • Debian Helper 의 역할에 대해서 확인 • Debian Package 의 설치 프로세스에 대해서 확인
  • 5. Files in Debian Directory
  • 6. compat • debian helper 의 버전 • 최신 버전으로 사용하는 것이 좋음 • 버전에 따라 빌드되는 내용이 다름
  • 11. install • dh_install 의 실행 결과로 파일을 옮겨줌 • 단일 패키지인 경우, install 만 사용 • 다중 패키지인 경우, [패키지명].install 을 사용
  • 19. init.d or service • InitV system 을 사용하면, init.d 파일을 만들어 서비스를 등록 • Systemd 를 사용하면, service 파일을 만들어 서비스를 등록 • ”/etc/init.d/” 경로로 자동으로 파일을 이동시켜줌
  • 23. interface up/down • interface 의 up/down 이벤트에 따른 처리 로직을 등록 • if-down, if-post-down, if-pre-up, if-up 에 대한 처리 가능 • 예를 들어, ssh 는 if-up 이 되면, ssh 서비스를 재시작함
  • 25. cron • Cron 설정 파일을 자동으로 등록 • [패키지].cron.daily / *.cron.weekly / *.cron.d/ 와 같은 형식
  • 26. logcheck / logrotate • logcheck 와 logroate 설정 파일을 시스템에 등록 • /etc/logcheck/ 디렉토리와 /etc/logrotate.d/ 디렉토리에 저장됨 • [패키지].logcheck.[옵션] / [패키지].logrotate
  • 27. modules • 커널 모듈이 로드될 수 있도록 해줌 • [패키지].modprobe • dh_make 에서 모듈로 설정하는 것을 권장
  • 30. trigger • 특정 파일이나 디렉토리의 변화를 trigger 로 설정 • 설정된 내용에 변화가 생기면 별도의 처리를 수행 • interest 와 activate 가 있음
  • 31. trigger 종류 • interest, interest-await, interest-noawait • activate, activate-await, activate-noawait • activate, activate-await 는 같음 • noawait 는 trigger 를 유발한 작업의 완료를 기다리지 않음
  • 33. trigger interest • trigger 파일에 설정 파일이나 디렉토리를 설정 • preinst, postinst, prerm, postrm 등에 trigger 에 대한 이벤트를 설정
  • 35. trigger activate • 패키지의 상태가 변경됐을 때, trigger 를 활성화 함 • unpack, configure, remove, purge, deconfigure 의 상태 변화시
  • 36. pre/post, inst/rm • Maintainer 를 위한 script 목록 • dh_installdeb 에서 불리는 기능 • 패키지 설치 전/후, 삭제 전/후의 명령을 등록할 수 있음
  • 37. pre/post, inst/rm • Install 파일처럼 [패키지].preinst, [패키지].postrm 로 사용 • 시스템 설정 파일은 직접 건드리지 않도록 설정 • 업그레이드 프로세스를 고려해서 잘 설계해야함
  • 40. prerm
  • 42. #DEBHELPER# • 다른 debhelper 명령에 의해서 치환되는 토큰 • 삭제하게 되면, 치환되지 않음
  • 49. maintscript • dpkg-maintscript-helper 에 의해서 관리됨 • 설정 파일 및 링크 파일을 관리함 • #DEBHELPER# 의 토큰과 치환됨
  • 53. maintscript (removing conffile) • 설정 파일 내용 • rm_conffile [설정 파일] [이전 버전] [패키지] -- ”$@” • ex) rm_conffile /etc/kssim.conf 2.0.0 kssim -- “$@”
  • 54. maintscript (removing conffile) • 처리 과정 • preinst 에서 파일 수정이나 이름 변경을 확인 • 사용자가 별도로 수정한 경우, [패키지].dpkg-backup 으로 이름 변경 • 수정하지 않았으면, [패키지].dpkg-remove 로 이름 변경 • postinst 에서 후처리 • dpkg-backup 파일이 있으면, 원복하고 패키지의 최신 설정을 dpkg-backup 으로 변경 • dpkg-remove 는 삭제 • 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복 • dpkg-remove 는 삭제
  • 55. maintscript (renaming conffile) • 설정 파일 내용 • mv_conffile [예전 설정 파일] [새로운 설정 파일] [이전 버전] [패키지] -- “$@” • ex) mv_conffile /etc/kssim.conf /etc/kssim1.conf 2.0.0 kssim -- ”$@”
  • 56. maintscript (renaming conffile) • 처리 과정 • preinst 에서 파일 이름 변경을 확인 • 사용자가 별도로 수정한 경우, 파일을 건드리지 않음 • 수정하지 않았으면, [패키지].dpkg-remove 로 이름 변경 • postinst 에서 후처리 • dpkg-remove 는 삭제 • 이전 설정 파일이 남아있으면, 새로운 설정 파일 이름으로 변경 • 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복 • dpkg-remove 가 원복됨
  • 57. maintscript (switch symlink to directory) • 설정 파일 내용 • symlink_to_dir [원본 경로] [링크 경로] [버전] [패키지] -- “$@” • ex) symlink_to_dir /usr/kssim /usr/share/kssim [2.0.0] [패키지] -- “$@”
  • 58. maintscript (switch symlink to directory) • 처리 과정 • preinst 에서 이전 파일을 가리키는 링크가 있는 지 확인 • 없으면, 아무것도 하지 않음 • 있으면, [경로].dpkg-backup 으로 변경 • postinst 에서 후처리 • dpkg-backup 은 삭제 • 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복 • dpkg-backup 이 원복됨
  • 59. maintscript (switch directory to symlink) • 설정 파일 내용 • dir_to_symlink [원본 경로] [링크 경로] [버전] [패키지] -- “$@” • ex) dir_to_symlink /usr/kssim /usr/share/kssim [2.0.0] [패키지] -- “$@”
  • 60. maintscript (switch directory to symlink) • 처리 과정 • preinst 에서 아래 조건을 검사후, 해당하면 아무 작업하지 않음 • 디렉토리가 존재하는지 • conffiles 을 가지고 있는지 • 다른 패키지가 소유한 경로를 포함하고 있는지 • 로컬로 생성된 경로를 포함하고 있는지 • 해당하지 않으면, [원본경로].dpkg-backup 으로 변경 후, 원본경로를 다시 생성
  • 61. maintscript (switch directory to symlink) • 처리 과정 • postinst 에서 [원본경로].dpkg-backup 이 있고, [원본경로]가 있는 경우, • [원본경로]에 새로 생성된 파일을 [링크 경로]로 옮김 • 비어있는 [원본 경로]를 [링크 경로]의 심볼릭 링크로 변경 • [path-name].dpkg-backup 파일 삭제 • 패키지 설치가 실패하면, postrm 에서 원래 설정으로 원복 • [pathname].dpkg-backup 의 경로를 [pathname] 으로 변경
  • 62. maintscript (build dependency) • control 파일의 dpkg 에 대한 빌드 의존성 필요 • rm_conffile 과 mv_conffile 은 1.15.7.2 이상 • symlink_to_dir 과 dir_to_symlink 는 1.17.14 이상 • Pre-Depends: dpkg (>= 1.17.14)
  • 63. 설정 파일 관리 • Debian Package 에서 설정 파일을 관리하는 방법이 몇가지 있음 • conffiles • debconf-generated configuration files • ucf (update configuration file)
  • 64. conffiles • compat 2 이하에서는 [패키지].conffiles 로 관리했음 • compat 3 이후는 /etc 디렉토리 하위에 설치되는 녀석에 자동 적용 • 사용자가 커스터마이징 한 내용과 패키지에서 설치되는 내용을 관리
  • 66. debconf-generated configuration files • debconf 를 사용해서 만들어지는 설정 파일 • [패키지].config 형태로 내용을 작성 • 패키지 설치시 사용자에게 입력을 받아 설정을 만듬 • 또는 패키지 설치 당시 환경에 따라 설정을 만듬
  • 68. UCF (Udpate Configuration File) • Debian 에서 Configuration 파일을 업데이트하는 방법중 하나 • 통상적으로 /usr/share/ 하위의 파일을 보존하는 용도로 사용 • [패키지].ucf 파일을 만들어서 관리 • Control 파일의 의존성 중, ${misc:Depends} 에 포함됨 • debhelper 에서 처리되어 #DEBHELPER# 로 치환됨
  • 69. UCF (Udpate Configuration File) • 아래와 같은 ucf 명령어를 debhelper 가 wrapping • ucf /usr/share/kssim/conf /etc/kssim.conf • “/etc/ucf.conf” 에서 기본 설정 값들을 처리할 수 있음
  • 71. QnA
  • 73. KOREA U.S.A. JAPAN Yeouido, Seoul www.pentasecurity.co.kr (HQ) Houston, Texas www.pentasecurity.com Shinjuku-Ku, Tokyo www.pentasecurity.co.jp Copyright 2017 Penta Security Systems Inc. All rights reserved.