본문 바로가기
개발/Linux

CentOS7 Live CD iso 커스텀하기

by lucidmaj7 2020. 9. 9.
728x90
반응형

매우 오래전부터 리눅스 배포판 설치 디스크는 라이브 부팅이라는 기능을 제공해 왔다. 말 그대로 설치가 필요없이 CD로 부팅을 하면 리눅스를 사용할 수 있는 기능이다.(물론 모든 기능은 아니지만) 이러한 기능은 윈도우에 익숙한 개인사용자들에게 리눅스를 보다 더 가깝고 쉽게 체험해 볼 수 있는 기회를 제공하였고,  리눅스 서버의 복구나, PC복구 등에도 간이로 사용 할 수 있어 유용한 기능이 되었다.(Windows PE와 비슷?)

최근 회사에서 이러한 라이브 CD에 몇가지 필요한 툴이나 파일을 포함하여 서버 복구 등에 사용할 수 있도록 커스텀 해 볼 일이 생겨 조사해본 것을 포스팅하려 한다. 이러한 내용은 찾으면 잘 나오진 않아 좀 구글링 좀 했다.

(아무튼 난 성공하였다.... )

다음 과정은 CentOS7 기준으로 설명한다.

 

1. squashfs-tools 설치

과정에 앞서 CentOS7에 squashfs-tools를 설치해 준다. 아마 기본으로 설치가 되어있지 않은 듯 하다. squashfs-tools는 라이브OS의 루트 파티션을 담고 있는 squashfs.img를 생성하기 위한 툴을 제공한다.

yum install -y squashfs-tools

 

2. CentOS 7 ISO다운로드

커스텀할 라이브CD이미지인 CenOS7 Live CD이미지를 다운로드 한다. 적절한 위치에 CentOS-7-x86_64-LiveGNOME-2003.iso를 다운로드 하였다.

3. 작업 경로 생성

이제 커스텀 작업을 하기 위해 이미지의 파일을 추출하고, 마운트 하는 등에 필요한 경로들을 생성해준다.

  • iso : 원본ISO 마운트
  • new_iso : 새로 만들 iso 타겟 경로
  • new_squashfs : 새로 만들 squashfs 타겟 경로
  • squashfs : 원본 squashfs 마운트 경로
  • root : ext3fs.img 마운트 경로
[root@localhost centos_custom]# mkdir iso
[root@localhost centos_custom]# mkdir new_iso
[root@localhost centos_custom]# mkdir new_squashfs
[root@localhost centos_custom]# mkdir root
[root@localhost centos_custom]# mkdir squashfs

4. 원본 ISO마운트

다운받은 라이브CD iso파일을 앞서 생성한 iso폴더에 마운트 해준다. 마운트 명령어 예는 다음과 같다.

[root@localhost centos_custom]# mount CentOS-7-x86_64-LiveGNOME-2003.iso ./iso

 

5. iso 파일 복사하기

마운트된 iso이미지의 내부에 있는 파일을 모조리 iso_new폴더에 복사해준다. 복사 명령은 다음과 같다.  iso_new는 새로운 iso이미지가 될 폴더이다.

[root@localhost centos_custom]# cp -a ./iso/* ./new_iso/

복사 후 new_iso의 디렉터리 구조는 다음과 같다.

6. squashfs.img 마운트하기

LiveOS/squashfs.img 파일을 우리가 생성한 squashfs폴더에 마운트해준다. 마운트 명령어 예는 다음과 같다.

[root@localhost centos_custom]# mount ./new_iso/LiveOS/squashfs.img ./squashfs

 

7. suqashfs.img 폴더 복사하기

squashfs.img에는 ext3fs.img라는 파일이 있다. 이 파일은 라이브 부팅된 리눅스 루트 파티션을 담고 있다. 즉 이 파일의 내용을 수정하면 우리가 원하는 목적을 달성할 수 있는 것 이다.

마운트한 squashfs.img는 readonly이므로 수정이되지 않아 squashfs.img의 내부 모든 파일을 새로 생성한 new_squashfs 폴더에 복사 해준다. 복사 명령어 예는 다음과 같다.

[root@localhost centos_custom]# cp -a ./squashfs/* ./new_squashfs

 

8. ext3fs.img 마운트하기

계속 마운트를 하는데 이번이 마지막이다. new_squashfs에 ext3fs.img 파일을 앞서 생성한 root 디렉터리에 마운트한다. 마운트 명령어 예는 다음과 같다.

[root@localhost centos_custom]# mount new_squashfs/LiveOS/ext3fs.img ./root

마운트 후 root폴더를 보면 리눅스의 그 루트 폴더인 것을 볼 수 있다. 우리는 여기를 커스텀하면된다.

9. 파일 추가하기

테스트 목적으로 임의의 폴더를 하나 생성해 보았다. hello라는 폴더를 최상단에 만들었다.

 

10. ext3fs.img 마운트 해제하기

파일 변경 작업이 완료 되었으면 ./root에 마운트한 ext3fs.img를 마운트 해제한다.

[root@localhost centos_custom]# umount ./root/

 

11. squashfs.img파일 다시 만들기

우리가 수정한 ext3fs.img가 들어있는 new_suqashfs폴더의 내용을 squashfs.img파일로 다시 만들어 줘야한다. 그 명령어는 다음과 같다.

mksquashfs ./new_squashfs ./squashfs.img

(mksquashfs작업은 병렬로 진행되나...듀얼코어인 관계로 너무 느리다..)

완료되면 뭔가 정보가 표시된다. 대충성공;;

이렇게 생성된 squashfs.img파일을 새로운 iso를 위한 폴더인 앞서 만든 iso_new/LiveOS/squashfs.img에 덮어 써준다.

[root@localhost centos_custom]# cp squashfs.img new_iso/LiveOS/squashfs.img
cp: overwrite `new_iso/LiveOS/squashfs.img'? y

복사가 끝나면 드디어 iso파일만 생성해주면된다.

12. iso파일 만들기

우리가 최종적으로 작업한 iso_new폴더를 iso이미지로 변환하는 작업을 해줘야 한다.

그 명령어는 다음과 같다.

mkisofs -o Custom-CentOS.iso \
              -J -r -hide-rr-moved -hide-joliet-trans-tbl -V CentOS-7-x86_64-GNOME-2003 \
              -b isolinux/isolinux.bin -c isolinux/boot.cat \
              -no-emul-boot -boot-load-size 4 -boot-info-table \
              ./new_iso

작업이 완료되면 Custom-CentOS.iso파일이 생성된 것을 볼 수 있다. 이 것이 우리가 커스텀한 라이브 CD이다.

13. 테스트

생성된 iso를 KVM의 VM에서 부팅해 보았다.

 부팅화면이 뜨고 라이브 부팅이 정상적으로 되었다. 

루트파티션에는 우리가 생성한 hello폴더가 들어있음을 확인 할 수 있었다.

 

참고

https://vittegleo.com/post/custom-centos-live-cd/

 

Custom CentOS Live CD

This is a tutorial on creating a custom CentOS live CD. A custom live CD can be useful for many different purposes. I will just cover my specific use case in the post below, but you should be able to follow along and customize where you see fit. If you fol

vittegleo.com

728x90
반응형

댓글