2011년 8월 4일 목요일

솔라리스 패키지 만들기

o reference
http://www.sunfreeware.com/pkgadd.html
http://www.ibiblio.org/pub/packages/solaris/sparc/html/creating.solaris.packages.html


아래는 wget-1.12를 예로 한것임.


1. source를 다운받기
---------------------------
GNU 사이트에서 wget 다운받은후 솔라리스 시스템내 적당한 디렉토리에 복사
(예에서는 ~/work 에 소스저장, ~/destdir에 임시설치파일 저장, ~/pkg에 결과물저장)




2. 기존 작업 내역 삭제하기
--------------------------
% cd /var/spool/pkg/
% /bin/rm -rf $(wget-1.12)/                           # $(wget-1.12)은 해당 패키지명
NOTE. 수행하지 않는 경우 이후 패키지 작업시 pkgmk 명령에서 에러가 남


% cd ~/work/
% /bin/rm -rf $(wget-1.12)/                           # $(wget-1.12)은 해당 패키지명
% cd ~/destdir/
% /bin/rm -rf $(wget-1.12)/                           # $(wget-1.12)은 해당 패키지명
NOTE. 깔끔하게 새롭게 시작하자.




3. 압축 해제 & 컴파일 & 임시 디렉토리에 설치
--------------------------------------------
% cd ~/work/
% gzip -dc $(wget-1.12.tar.gz) | tar -xof -   # $(wget-1.12.tar.gz) 은 해당 압축 파일명
% cd $(wget-1.12)/                                     # $(wget-1.12) 은 압축 해제 디렉토리명
% script $(wget-1.12-compile.out)               # $(wget-1.12-compile.out) 은 컴파일 로그 저장 파일명
% date;uname -a;cc -V                              # 이 세가지를 로그 시작부분에 저장하자.
% ll
% ./configure --prefix=/usr/local                 # configure 는 패키지에 따라서 적당히 수정 가능
                                                                # (prefix는 반드시 /usr/local)
% date
% make
% date
% make DESTDIR=~/destdir/$(wget-1.12) install               # $(wget-1.12)은 해당 패키지명
            (INSTALLROOT 인 경우도 있음. ex: autoconf, Makefile 확인할것)
% date
% exit                                                       # 로그저장 끝
% (로그 파일 확인하고 에러가 발생시 처음부터 다시 수행)


4. 패키지 만들기
----------------
% cd ~/destdir/$(wget-1.12)/usr/local/             # $(wget-1.12)은 해당 패키지명
% (script 명령어로 수행시 make_package에서 에러가 나므로 로그는 화면 출력 내용을 저장하는 방식으로 기록)
% date;uname -a
% ls -al
% make_packge $(wget-1.12)                          # ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/make_package 
                                                                     # $(wget-1.12)은 해당 패키지명
% (결과 화면 확인)
% date                                                           # 여기까지 출력 내용을 로그로 기록
% ($(wget-1.12)-package.out 파일에 로그 기록)




패키징 예)
% date;uname -a
2011년 6월 16일 목요일 오전 11시 06분 56초
SunOS comsapp 5.8 Generic_108528-26 sun4u sparc SUNW,Sun-Fire-880
% make_package wget-1.12
Please give the name for this package [wget]: 
Now enter the real name for this package [wget]: 
What architecture did you build the package on? [sun4u]: 
Enter the version number of the package [1.12]: 
What category does this package belong to? [application]: 
Who is the vendor of this package? [GNU]: 
Enter the email adress for contact []: 
Enter your own name []: june
What is the basedir this package will install into? [/usr/local]: 
How should i call the packagefile? [wget-1.12-sol8-sun4u-local]: 


Now creating pkginfo file
Done.
Building package
## 패키지 프로토타입 파일에서 pkgmap 작성 중
## pkginfo 파일 처리 중
## pkgmap의 9 항목 볼륨화 시도
부분  1 -- 1472 블록, 13 항목
## 1개의 부분 패키징
/var/spool/pkg/wget/pkgmap
/var/spool/pkg/wget/pkginfo
/var/spool/pkg/wget/reloc/bin/wget
/var/spool/pkg/wget/reloc/etc/wgetrc
/var/spool/pkg/wget/reloc/lib/charset.alias
/var/spool/pkg/wget/reloc/share/info/wget.info
## 제어 스크립트 검증 중
## 패키징 완료


다음과 같은 패키지를 사용할 수 있습니다.
 1  wget     wget
 (sun4u) 1.12


처리할 패키지(들)를 선택하십시오.(또는 모든 패키지를
처리하려면'all'을 입력하십시오.) (default: all) [?,??,q]: 
패키지 인스턴스 전송 중
Done. (/tmp/wget-1.12-sol8-sun4u-local.gz)
% date
2011년 6월 16일 목요일 오전 11시 07분 01초




5. 설치테스트
-------------
% mv /tmp/wget-1.12-sol8-sun4u-local.gz ~/pkg/
% cd ~/pkg
% gzunzip $(wget-1.12-sol8-sun4u-local.gz)                # $(wget-1.12-sol8-sun4u-local.gz) 은 결과물 파일
% su
(input root password)
# (로그는 화면 출력 내용을 저장하는 방식으로 기록)
# date;uname -a
# pkgadd -d $(wget-1.12-sol8-sun4u-local)                 # $(wget-1.12-sol8-sun4u-local) 은 패키지 설치에 사용되는 파일
# date
# ($(wget-1.12)-package_install.out 파일에 화면 출력결과를 기록할것)




설치 예)
# date;uname -a
2011년 6월 16일 목요일 오전 11시 20분 15초
SunOS comsapp 5.8 Generic_108528-26 sun4u sparc SUNW,Sun-Fire-880
# pkgadd -d wget-1.12-sol8-sun4u-local


다음과 같은 패키지를 사용할 수 있습니다.
 1  wget     wget
 (sun4u) 1.12


처리할 패키지(들)를 선택하십시오.(또는 모든 패키지를
처리하려면'all'을 입력하십시오.) (default: all) [?,??,q]: 


패키지 예 (을)를 에서 처리 중


wget
(sun4u) 1.12
GNU
디렉토리 (을)를 패키지의 기본 디렉토리로 사용
## 패키지 정보 처리 중
## 시스템 정보 처리 중
  3개 패키지 경로 이름이 이미 제대로 설치되어 있습니다.
## 디스크 공간 요구 검증 중
## 이미 설치되어 있는 패키지와의 충돌 여부를 확인하고 있습니다.
## setuid/setgid 프로그램 점검


wget(을)를 (으)로 설치


## 1째 (전체: 1) 부분 설치
/usr/local/bin/wget
/usr/local/etc/wgetrc
/usr/local/lib/charset.alias
/usr/local/share/info/wget.info
[ 클래스 검증 ]


(이)가 성공적으로 설치되었습니다.
# date
2011년 6월 16일 목요일 오전 11시 20분 43초




6. 설치 검증
------------
% pkginfo wget                         # wget 는 설치패키지명
application wget       wget


%pkginfo -l wget                       # wget 는 설치패키지명
패키지 인스턴스:  wget
      이름:  wget
      범주:  application
  아카이브:  sun4u
      버전:  1.12
기본 디렉토리:  /usr/local
    판매자:  GNU
    PSTAMP:  june
  INSTDATE:  6월 16 2011 11:20
      상태:  설치 완료
      파일:        9 installed pathnames
                   3 shared pathnames
                   5 directories
                   1 executables
                1398 blocks used (approx)




7. 작업 파일 삭제
-----------------
필수 작업은 아님.


% cd /var/spool/pkg/
% /bin/rm -rf $(wget-1.12)/                           # $(wget-1.12)은 해당 패키지명
NOTE. 수행하지 않는 경우 이후 패키지 작업시 pkgmk 명령에서 에러가 남


% cd ~/work/
% /bin/rm -rf $(wget-1.12)/                           # $(wget-1.12)은 해당 패키지명


% cd ~/destdir/
% /bin/rm -rf $(wget-1.12)/                           # $(wget-1.12)은 해당 패키지명


8. 최종 결과물 보존
-------------------
~/pkg/$(wget-1.12-sol8-sun4u-local) 잘 보관!


Date: 2011.08.04 : 작성
Date: 2011.08.10 : make DESTDIR=... 이외에 INSTALLROOT 가 있는 경우가 있음