[Linux] ISO 파일로 패키지 리포지토리 구축하기
On-premise 환경의 패키지 설치
네트워크 연결 제한을 곁들인…
가끔 네트워크 연결이 제한된 On-premise 환경의 서버를 구축할 일이 있다.
이때, ISO 파일을 마운트한 후 Yum Repository로 설정하여 운영체제의 패키지들을 설치할 수 있다.
아래와 같이 생각보다 많은 패키지들을 설치할 수 있다.
- 물론 아래보다 더 많은 패키지들을 다운로드받을 수 있다.
- 각 패키지의 버전은
ISO파일에 포함된 버전으로 고정되므로, 필요 버전을 확인하는 것이 중요하다.
| 카테고리 | 패키지명 | 설명 |
|---|---|---|
| 기본 시스템 관리 도구 | vim | 텍스트 편집기 |
| net-tools | 네트워크 관리 도구 (예: ifconfig, netstat) | |
| curl | URL을 통해 데이터를 전송하는 명령줄 도구 | |
| 네트워크 및 서버 관리 도구 | openssh-server | SSH 서버 패키지, 원격 연결을 위한 필수 패키지 |
| httpd | Apache 웹 서버 | |
| nginx | Nginx 웹 서버 | |
| 데이터베이스 관련 패키지 | mysql-server | MySQL 데이터베이스 서버 |
| mariadb-server | MariaDB 서버 (MySQL의 오픈소스 대체) | |
| postgresql-server | PostgreSQL 데이터베이스 서버 | |
| 개발 도구 | gcc | GNU 컴파일러 컬렉션, C, C++ 개발을 위한 도구 |
| make | 빌드 자동화 도구 | |
| git | 버전 관리 도구 | |
| python3 | Python 프로그래밍 언어 | |
| 웹 애플리케이션 및 프레임워크 | php | PHP 프로그래밍 언어 |
| perl | Perl 프로그래밍 언어 | |
| ruby | Ruby 프로그래밍 언어 |
Yum Repository 설정
Red Hat 계열 리눅스 배포판 중 Rocky 9.5로 테스트를 진행하였다.
대부분 명령어들은 모두 root 권한이 필요하다.
1. ISO 파일 마운트하기
리눅스에서는 자동 마운트가 되지 않으므로, ISO 파일을 서버에 마운트해야 한다.
예를 들어, /mnt/iso 디렉터리를 만들어서 ISO 파일을 마운트할 수 있다.
1
2
$ sudo mkdir /mnt/iso
$ sudo mount -o loop /path/to/your/rocky-linux.iso /mnt/iso
2. Yum Repository 설정
ISO 파일을 Yum Repository로 설정하려면, /etc/yum.repos.d/ 디렉터리에 새로운 repo 파일을 만들어야 한다.
파일의 확장자가 .repo이면 repository 설정 파일로 인식을 한다.
예를 들어, rocky-iso.repo라는 파일을 생성해보자.
1
$ sudo vi /etc/yum.repos.d/rocky-iso.repo
그리고 다음과 같은 내용을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
[rocky-iso-AppStream]
name=Rocky Linux $releasever - AppStream # 리포지토리 이름
baseurl=file:///mnt/iso/AppStream # repository 폴더 경로
enabled=1 # 1 : 사용 // 0 : 사용하지 않음
gpgcheck=0 # GPG 서명을 사용하지 않음
[rocky-iso-BaseOS]
name=Rocky Linux $releasever - BaseOS
baseurl=file:///mnt/iso/BaseOS
enabled=1
gpgcheck=0
3. 마운트된 ISO 파일 사용 확인
아래 명령어를 통해 repository 설정을 확인할 수 있다.
1
2
3
4
$ yum repolist
repo id repo name
rocky-iso-AppStream Rocky Linux 9 - AppStream
rocky-iso-BaseOS Rocky Linux 9 - BaseOS
위처럼 설정한 2 개의 repository가 리스트에 나타나는 것을 확인할 수 있다.
4. ISO 파일을 언마운트하기 (필요시)
만약 서버를 재부팅하거나 마운트를 해제하려면, 아래 명령어로 ISO 파일을 언마운트할 수 있다.
1
$ sudo umount /mnt/iso
(참고) ISO 파일이란
ISO 이미지 파일이라고도 하며,
CD, DVD 또는 Blu-ray와 같은 디스크의 전체 내용을 디지털 형식으로 압축하여 저장한 파일이다.
이 파일은 디스크 이미지를 그대로 복제한 것이므로 실제 디스크와 동일한 구조를 가지고 있다.
즉, 원본 디스크와 같이 부트 로더, 파일 시스템, 프로그램 파일 등 모든 구성 요소를 포함한다.
Windows에서는 더블클릭만으로도 ISO 파일을 가상 드라이브로 마운트하여 사용 가능하다.
사용 예
운영 체제 설치
Linux 배포판, Windows 설치 CD 등 운영 체제 설치 파일을 배포할 때 많이 사용
백업
중요한 데이터를 광학 미디어로 백업할 때 데이터가 손상되지 않고 안전하게 저장 가능
소프트웨어 배포
ISO 파일로 프로그램을 배포하여 사용자가 설치하거나 실행할 수 있음
(참고) Yum Repository 구조
Rocky ISO 폴더에는 AppStream과 BaseOS 폴더가 존재한다.
각 폴더를 Yum Repository로 설정을 하게되는데 각 폴더에 대해 알아보자.
AppStream & BaseOS
이 두 폴더는 서로 보완적인 역할을 하며, 시스템의 핵심 기능과 다양한 응용 프로그램을 설치하는 데 필요하다.
AppStream는 응용 프로그램 및 추가 소프트웨어를 포함하며, 모듈화된 형태로 제공되기도 한다.
BaseOS는 운영 체제의 기본적인 핵심 패키지를 포함한다.
조금 더 자세하게 알아보자면,
AppStream
응용 프로그램 및 소프트웨어 패키지를 포함하는 디렉터리이다.
일반적으로 AppStream에는 다음과 같은 요소들이 포함된다.
응용 프로그램
개발 도구, 데이터베이스 서버, 웹 서버, Python 및 기타 프로그래밍 언어 패키지 등 다양한 애플리케이션들이 포함된다.
도구 및 라이브러리
시스템 관리 및 특정 기능을 수행하는 다양한 도구들과 라이브러리 패키지들이 포함된다.
모듈화된 패키지
AppStream에는 패키지들이 모듈화되어 제공되기도 한다.아래와 같이,
python3패키지의 여러 버전이나,nginx의 다양한 버전이 별도의 모듈로 포함된다.python3,python3.8,python3.11
BaseOS
운영 체제의 핵심 구성 요소를 포함하는 디렉터리이다.
여기에는 시스템이 부팅하고 작동하는 데 필요한 기본적인 패키지들이 포함된다.
커널 및 드라이버
운영 체제의 커널과 하드웨어를 지원하는 드라이버가 포함됨
기본 시스템 도구
시스템 관리, 파일 시스템 관리, 네트워크 관리 도구 등 기본적인 관리 도구들이 포함됨
필수 라이브러리
시스템의 안정적인 실행을 위해 필요한 라이브러리들(예:
glibc,libstdc++등)도 이곳에 포함됨기본적인 시스템 구성 파일
시스템 부팅 및 관리에 필요한 기본적인 파일들도
BaseOS에 포함됨
폴더 구조
AppStream & BaseOS 폴더 모두 Packages와 repodata를 포함하고 있다.
1
2
3
/mnt/iso/BaseOS/
├── Packages/
├── repodata/
Packages
Mount를 해제한 후, 패키지를 설치할려고 하면 아래와 같은 에러가 발생한다.
이를 통해
Packages에는 패키지 설치 파일들이 있는 것을 알 수 있다.1 2 3 4
$ sudo yum install python3.11 ... (생략) Error opening /mnt/iso/AppStream/Packages/p/python3.11-libs-3.11.9-7.el9_5.1.x86_64.rpm: 그런 파일이나 디렉토리가 없습니다 ... (생략)
repodata
이 폴더에는 Repository의 메타데이터가 저장되어 있다.
repomd.xml파일이 주요 메타데이터 파일로 존재하며, 아래와 같은 데이터를 가지고 있다.- 어떤 패키지가 있는지
- 패키지의 버전이 무엇인지
- 패키지를 설치하거나 업데이트 하기 위한 정보