Post

[Linux] ISO 파일로 패키지 리포지토리 구축하기

On-premise 환경의 패키지 설치

네트워크 연결 제한을 곁들인…

가끔 네트워크 연결이 제한된 On-premise 환경의 서버를 구축할 일이 있다.

이때, ISO 파일을 마운트한 후 Yum Repository로 설정하여 운영체제의 패키지들을 설치할 수 있다.

아래와 같이 생각보다 많은 패키지들을 설치할 수 있다.

  • 물론 아래보다 더 많은 패키지들을 다운로드받을 수 있다.
  • 각 패키지의 버전은 ISO 파일에 포함된 버전으로 고정되므로, 필요 버전을 확인하는 것이 중요하다.
카테고리패키지명설명
기본 시스템 관리 도구vim텍스트 편집기
 net-tools네트워크 관리 도구 (예: ifconfig, netstat)
 curlURL을 통해 데이터를 전송하는 명령줄 도구
네트워크 및 서버 관리 도구openssh-serverSSH 서버 패키지, 원격 연결을 위한 필수 패키지
 httpdApache 웹 서버
 nginxNginx 웹 서버
데이터베이스 관련 패키지mysql-serverMySQL 데이터베이스 서버
 mariadb-serverMariaDB 서버 (MySQL의 오픈소스 대체)
 postgresql-serverPostgreSQL 데이터베이스 서버
개발 도구gccGNU 컴파일러 컬렉션, C, C++ 개발을 위한 도구
 make빌드 자동화 도구
 git버전 관리 도구
 python3Python 프로그래밍 언어
웹 애플리케이션 및 프레임워크phpPHP 프로그래밍 언어
 perlPerl 프로그래밍 언어
 rubyRuby 프로그래밍 언어

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 폴더에는 AppStreamBaseOS 폴더가 존재한다.

각 폴더를 Yum Repository로 설정을 하게되는데 각 폴더에 대해 알아보자.

AppStream & BaseOS

이 두 폴더는 서로 보완적인 역할을 하며, 시스템의 핵심 기능과 다양한 응용 프로그램을 설치하는 데 필요하다.

AppStream응용 프로그램 및 추가 소프트웨어를 포함하며, 모듈화된 형태로 제공되기도 한다.

BaseOS는 운영 체제의 기본적인 핵심 패키지를 포함한다.

조금 더 자세하게 알아보자면,

AppStream

응용 프로그램 및 소프트웨어 패키지를 포함하는 디렉터리이다.

일반적으로 AppStream에는 다음과 같은 요소들이 포함된다.

  • 응용 프로그램

    개발 도구, 데이터베이스 서버, 웹 서버, Python 및 기타 프로그래밍 언어 패키지 등 다양한 애플리케이션들이 포함된다.

  • 도구 및 라이브러리

    시스템 관리 및 특정 기능을 수행하는 다양한 도구들과 라이브러리 패키지들이 포함된다.

  • 모듈화된 패키지

    AppStream에는 패키지들이 모듈화되어 제공되기도 한다.

    아래와 같이, python3 패키지의 여러 버전이나, nginx의 다양한 버전이 별도의 모듈로 포함된다.

    • python3, python3.8, python3.11

BaseOS

운영 체제의 핵심 구성 요소를 포함하는 디렉터리이다.

여기에는 시스템이 부팅하고 작동하는 데 필요한 기본적인 패키지들이 포함된다.

  • 커널 및 드라이버

    운영 체제의 커널과 하드웨어를 지원하는 드라이버가 포함됨

  • 기본 시스템 도구

    시스템 관리, 파일 시스템 관리, 네트워크 관리 도구 등 기본적인 관리 도구들이 포함됨

  • 필수 라이브러리

    시스템의 안정적인 실행을 위해 필요한 라이브러리들(예: glibc, libstdc++ 등)도 이곳에 포함됨

  • 기본적인 시스템 구성 파일

    시스템 부팅 및 관리에 필요한 기본적인 파일들도 BaseOS에 포함됨

폴더 구조

AppStream & BaseOS 폴더 모두 Packagesrepodata를 포함하고 있다.

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 파일이 주요 메타데이터 파일로 존재하며, 아래와 같은 데이터를 가지고 있다.

    • 어떤 패키지가 있는지
    • 패키지의 버전이 무엇인지
    • 패키지를 설치하거나 업데이트 하기 위한 정보
This post is licensed under CC BY 4.0 by the author.