piuparts
Package Installation, UPgrading, And Removal Testing Suite
패키지 설치, 업그레이드, 삭제 테스트 툴
root 권한 필요
debootstrap으로 디폴트는 sid chroot 생성
미지정 시 /etc/apt/sources.list의 첫 미러 선택
# 일반 사용법
piuparts foo.deb
# dist 설정 가능
piuparts foo.deb -d testing
# dist 여러 개 설정 시 순서대로 업그레이드 실행
piuparts foo.deb -d stable -d testing -d unstable
# 미러 설정 가능
piuparts foo.deb -m http://...
# 테스트 종류
. 설치-삭제 테스트 (-no-upgrade-test)
install > remove > purge
. 설치-업그레이드-삭제 테스트
레포에서 install > 인풋 파일 install > remove > purge
# config 파일이 남겨졌을 때 테스트 (-install-remove-install)
. 설치-삭제 테스트
install > remove > install > purge
. 설치-업그레이드-삭제 테스트
레포 install > remove > 인풋 파일 install > purge
. dist 업그레이드 테스트
레포 install > remove > distupgrade > install
# pbuilder
pbuilder를 통해 매 실행 시 chroot 환경 구축 대신 tarball을 초기 chroot로 설정 가능.
# pbuilder 환경 구축
pbuilder --create
# pbuilder 환경 업데이트
pbuilder --update
# pbuilder 환경을 사용한 piuparts 실행
piuparts foo.deb -p
-p: /var/cache/pbuilder/base.tgz 사용
-b(--basetgz): tarball 파일 직접 지정
-s(--save): 실행 후 chroot tarball 저장
pbuilder는 cdebootstrap을 지원하지만 piuparts는 경고 메시지 출력 가능
debootstrap 사용 또는 'warn-on-debsums-errors' 옵션같은거 사용할 것
# 커스텀 스크립트 추가
piuparts 내부에서 실행할 커스텀 쉘 스크립트 추가 가능
'scriptsdir=/baz.sh' (여러 번 가능)
/etc/piuparts/scripts* 참고
알파벳 순서로 실행
python, perl 스크립트 등 실행 원하는 경우 chroot 환경에 해당 런타임 설치 필요
. 환경 내부 변수
. PIUPARTS_OBJECTS: 현재 대상 패키지 또는 .changes 파일
. PIUPARTS_TEST: 테스트 종류. install / upgrade / distupgrade
. PIUPARTS_PHASE: install / upgrade / distupgrade
. PIUPARTS_DISTRIBUTION, _NEXT, _PREV
. 스크립트 prefix
. post_chroot_unpack: chroot update 전
. post_setup_*: chroot setup 후, 메타데이터 저장 전
. pre_test_*: 각 테스트 전. 메타데이터 저장 후
. is_testable_*: 설치 전. 스크립트가 실패하면 설치 취소됨.
piuparts로 테스트가 어려운 패키지(usrmerge), 외부 리소스 다운로드 패키지, 버그있는 패키지에 사용
. pre_install_*: 설치 전. PIUPARTS_TEST 및 PIUPARTS_PHASE 활용해서 어느 설치 전인지 구분 가능
. post_install_*, pre_remove_*, post_remove_*, post_purge_*
. post_test_*: 각 테스트의 마지막. 검증용 chroot의 메타데이터 비교 전
. pre_distupgrade_*, post_distupgrade_*
# master-slave 구조의 분산 테스팅
piuparts 테스트가 여러 번 수행되므로 부하를 줄이기 위해 master-slave 구조로 여러 slave 장치 사용 가능
ssh를 통해 연결되며 결과물만을 전송