매우 오래전부터 리눅스 배포판 설치 디스크는 라이브 부팅이라는 기능을 제공해 왔다. 말 그대로 설치가 필요없이 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폴더가 들어있음을 확인 할 수 있었다.
참고
'개발 > Linux' 카테고리의 다른 글
NodeJS 바이너리 설치하기 / CentOS (0) | 2020.12.28 |
---|---|
Metasploit Framework 설치하기 / CentOS7 (0) | 2020.11.04 |
qemu libvirt 가상머신 생성하기 virsh 명령어 (0) | 2020.08.31 |
CentOS7 exFAT 파일시스템 마운트하기 / exfat-utils fuse-exfat (0) | 2020.08.28 |
CentOS7 호스트네임(hostname) 변경 / hostnamectl (0) | 2020.07.29 |
댓글