Programming/Technic

Cent OS 4를 이용한 RedHat Linux 배포판 만들기 - 1(수정)

minarae7 2013. 12. 6. 13:40
728x90
반응형
# 본문 내용은 Cent OS 4.2의 CD 이미지를 가지고 나에게 맞는 RedHat 기반의 Linux로 다시 패키징하는 작업니다.
# 본문의 내용은 바로 긁어서 붙인 후에 쉘 스크립트로 돌리실 수 있을 것입니다.
# 단, 디렉토리 구조가 맞을 경우에 말입니다.
# (이 스크립트는 CentOS 4.2이 설치된 머신에서 작동하셔야 합니다.)
# 디렉토리 구조는 가장 아래부분에 설명합니다.
#!/bin/sh

# 스크립트에서 사용할 환경변수 선언
export PYTHONPATH=/usr/lib/anaconda
export PATH="$PATH:/usr/lib/anaconda-runtime"
export CENTBASE=/work/make_cd/CentOS/ 

# 이미 작성되어 있을지도 모를 디렉토리 삭제
rm -rf $CENTBASE/CentOS/ 

# 서브 디렉토리에 필요한 디렉토리 생성
mkdir -p $CENTBASE/CentOS/i386
mkdir -p $CENTBASE/CentOS/SRPMS 

# 이미지를 마운트할 디렉토리들 생성
mkdir -p /mnt/disk1/
mkdir -p /mnt/disk2/
mkdir -p /mnt/disk3/
mkdir -p /mnt/disk4/

# Cent OS 4.2의 CD 이미지들을 미리 만들어놓은 디렉토리에 마운트
# ISO 이미지를 마운트할 경우에는 -o loop 이라는 옵션을 줘야함.
mount -o loop /work/ISO/CentOS-4.2-i386-bin1of4.iso /mnt/disk1/
mount -o loop /work/ISO/CentOS-4.2-i386-bin2of4.iso /mnt/disk2/
mount -o loop /work/ISO/CentOS-4.2-i386-bin3of4.iso /mnt/disk3/
mount -o loop /work/ISO/CentOS-4.2-i386-bin4of4.iso /mnt/disk4/

# 마운트 디렉토리들로 이동한 후에 파일을 대상이 되는 디렉토리로 이동.
# $CENTBASE가 기본이 되는 디렉토리이고 설치 CD의 기본은 $CENTBASE/i386이다.
# 따라서 CD의 모든 내용을 이리로 복사한다.
cd /mnt/disk1/
tar -cf - * | ( cd $CENTBASE/CentOS/i386/ ; tar -xpf - )

cd /mnt/disk2/
tar -cf - * | ( cd $CENTBASE/CentOS/i386/ ; tar -xpf - )

cd /mnt/disk3/
tar -cf - * | ( cd $CENTBASE/CentOS/i386/ ; tar -xpf - )

cd /mnt/disk4/
tar -cf - * | ( cd $CENTBASE/CentOS/i386/ ; tar -xpf - )

# SRPM들은 다른 디렉토리로 복사한다.
cd /work/SRPMS/
tar -cf - * | ( cd $CENTBASE/CentOS/SRPMS/ ; tar -xpf - )

cd $CENTBASE

# 복사가 끝난 후에는 이미지들의 마운트를 해지한다.
umount /work/ISO/CentOS-4.2-i386-bin1of4.iso
umount /work/ISO/CentOS-4.2-i386-bin2of4.iso
umount /work/ISO/CentOS-4.2-i386-bin3of4.iso
umount /work/ISO/CentOS-4.2-i386-bin4of4.iso

# old cd install file을 삭제한다. 이미지가 생성되면 다시 생성된다.
# find 명령의 설명은 man 페이지를 참고하기 바란다.
find $CENTBASE/CentOS -name TRANS.TBL -exec rm -f {} \;

# 이 이하에서는 나에게 맞게끔 RPM들을 수정 다시 작성하여 다시 작성된 RPM들을
# RPM들이 저장된 디렉토리 이동시켜 덮어 쓴다.

# - 모든 RPM 파일들을 다시 작성
rpmbuild -ba /usr/src/redhat/SPECS/*
# - 작성된 RPM 중에서 debuginfo는 삭제
find /usr/src/redhat/RPMS -name *debuginfo*.rpm -exec rm -f {} \;
# - 작성된 RPM 파일들을 CD가 만들어질 RPM들이 보관되는 디렉토리로 이동
find /usr/src/redhat/RPMS -name *.rpm -exec cp -f {} $CENTBASE/CentOS/i386/CentOS/RPMS/ \;

# hdlist 파일을 다시 만든다.
# 여기서 수많은 warning과 ignoring 메시지들이 나온다. 무시하면 된다.
# 이 명령은 C 파일을 컴파일한 실행파일이다. 나머지는 python파일임.
/usr/lib/anaconda-runtime/genhdlist $CENTBASE/CentOS/i386

 

# package order file을 생성한다. 그 파일 이름은 날짜로 찍는다.
# package order file은 RPM의 실제 이름과 RPM 파일의 패키징 이름을 매핑시키는 역할을 한다.
/usr/lib/anaconda-runtime/pkgorder $CENTBASE/CentOS/i386 i386 | tee $CENTBASE/CentOS/pkgfile.$(date '+%Y-%m-%d')

# installation files을 다음의 buildinstall 명령으로 업데이트 한다.
# --comp 옵션은 반드시 필요하지 않으며 안 쓸 경우 dist-7.0(CentOS 4.2일 경우)으로 작성.
# --prodpath는 RPMS와 base 디렉토리가 들어있는 디렉토리 경로. 무슨 말인지 모르면 찾아보기 바람. 추후 설명 예정.
/usr/lib/anaconda-runtime/buildinstall --comp dist-9.0 \
   --pkgorder $CENTBASE/CentOS/pkgfile.$(date '+%Y-%m-%d') \
   --version 4 --product 'CentOS' --release 'CentOS 4' \
   --prodpath CentOS $CENTBASE/CentOS/i386

# 이제 CD를 만들기 위해서 파일들을 나누는 작업을 한다.
# --total-discs는 전체 CD가 몇장인지 알려준다.
# --bin-discs는 설치 CD, --src-discs는 SRPM CD가 몇장인지 알려준다.
# --distdir은 설치 CD Base, --srcdir은 SRPM Base 디렉토리이다.
/usr/lib/anaconda-runtime/splittree.py --arch=i386 --total-discs=8 --bin-discs=4 --src-discs=1 \
   --release-string="CentOS-4" \
   --pkgorderfile=$CENTBASE/CentOS/pkgfile.$(date '+%Y-%m-%d') \
   --distdir=$CENTBASE/CentOS/i386 --srcdir=$CENTBASE/CentOS/SRPMS \
   --productpath=CentOS

# 이제 설치 CD를 용량별로 나누었으므로 각 CD마다 installation files를 새로 작성한다.
rm -r $CENTBASE/CentOS/i386-disc1/CentOS/base/hdlist*
/usr/lib/anaconda-runtime/genhdlist --productpath=CentOS \
   --withnumbers --fileorder \
   $CENTBASE/CentOS/pkgfile.$(date '+%Y-%m-%d') \
   $CENTBASE/CentOS/i386-disc[1234]

# CD 이미지 만드는 명령
# 첫번째 CD는 부팅 이미지를 가지고 있어야 되므로 boot 이미지를 같이 굽는다.
# 각 스크립트는 항상 .으로 끝나야 한다.
# mkisofs명령의 옵션은 man 페이지를 참고하기 바람.
cd $CENTBASE/CentOS/i386-disc1/ && mkisofs -R -J -T -v -V "CentOS-4.2-i386-1of4" -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -o /work/OUTPUT/TopFlashCP1of4.iso .

cd $CENTBASE/CentOS/i386-disc2/ && mkisofs -R -J -T -v -V "CentOS-4.2-i386-2of4" -o /work/OUTPUT/TopFlashCP2of4.iso .

cd $CENTBASE/CentOS/i386-disc3/ && mkisofs -R -J -T -v -V "CentOS-4.2-i386-3of4" -o /work/OUTPUT/TopFlashCP3of4.iso .

cd $CENTBASE/CentOS/i386-disc4/ && mkisofs -R -J -T -v -V "CentOS-4.2-i386-4of4" -o /work/OUTPUT/TopFlashCP4of4.iso .
##########################################################################
# Referense : http://bbs.kldp.org/viewtopic.php?t=47141
# 잘못된 부분을 수정하고 필요한 부분을 삽입하였습니다.
##########################################################################

---------------------------------------------------------------------------------------- 
디렉토리 구조를 설명하겠습니다. 여기서부터는 위의 스크립트와 다른 부분이며 이해를 됩기 위해 첨부합니다.

우선 작업 디렉토리는 /work/입니다.
/work/ 밑에는 ISO/와 make_cd/, SRPM/, OUTPUT/이 있습니다.
ISO/는 원본 CD 이미지들이 들어있습니다,
SRPM/에는 원본 CD의 SRPM들이 들어있습니다.
make_cd/가 메인 작업 디렉토리입니다.
마지막으로 OUTPUT/ 디렉토리는 내가 생성한 이미지 파일들이 생성됩니다.
make_cd/ 아래에는 CentOS/라는 디렉토리가 있어야 하며, 위의 스크립트는 이 디렉토리 아래에 저장하고 실행하면 됩니다.
위의 스크립트에서 잘못된 내용이나 의문 사항이 있을 경우에는 minarae@gmail.com로 연락주시기 바랍니다.


728x90
반응형

'Programming > Technic' 카테고리의 다른 글

postfix 접속 서버 설정  (0) 2014.09.01
How to execute node.js from crontab in ubuntu  (0) 2014.07.04
CentOS 5.3에서 아파치 개인 사용자별 설정  (2) 2009.08.28
crontab 설정  (0) 2009.07.06
xen 컴파일 하기~  (0) 2009.06.29