파일 시스템, 리포지터리(저장소), 패키지, 리포지터리 웹 서버 구축(실습&문제)

sso·2025년 3월 21일
0

리눅스 서버

목록 보기
11/40

1. 파일 시스템 (File System)

  • 파티션을 분할, 포맷, 마운트 해야만 파일 시스템 사용이 가능함
  • 파티션 작업을 완료했으면 이후에 리눅스 내에 파일 단위로 저장됨010
    104

-책에내용없음 실습만..-

2. 리포터지터리 (저장소)

  • 인터넷 상의 리눅스 패키지 저장소
  • 소프트웨어 패키지를 저장하고 관리하는 장소, 인터넷 상의 서버에 존재함

    우리가 dnf 를 사용해서 패키지를 다운로드 하는데 그러면 패키지를 어디서 다운받냐?!
    이러면 이제 리포터지터리가서 다운받는것임

dnf 사용해서 설치하면 저장소(리포지터리)가 appstream이란 걸 알 수 있음

2-1. 패키지 종류

  1. 데비안, 우분투 : .deb
  2. 레드햇, 로키 : .rpm (Redhat Package Manager)

2-2. 리포지터리의 패키지 목록

  • 리포터지터리에 존재하는 패키지의 목록
    패키지 파일은 위에서 말했듯이 .rpm 등이 있음
    - 메타 데이터 : 패키지의 이름, 버전, 의존성 등을 포함하는 파일

리포지터리 디렉터리 - /etc/yum.repos.d ➡️ cd /etc/yum.repos.d
appstream 이름 - Rocky-AppStrea.repo

cat Rocky-AppStrea.repo

현재 리포지터리의 메타 데이터의 내용

리포지터리 구성(리포지터리의 메타 데이터)

◈식별자◈
[appstream]

◈이름◈
name=Rocky Linux $releasever - AppStream

◈리포지터리 미러 서버◈
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=AppStream-$releasever

  • 우리나라 리눅스 미러 서버에서 동적(지리적으로 가까운 곳)으로 가져오기 위한 url
  • 미러 서버 - 서버 1개에서 전세계 모든 리눅스에 줄 수 없으니까 리눅스 서버를 거울처럼 똑~같이 다른데에 만들어놓은 서버
  • 우리나라에는 뭐 미러서버가 카카오, 부경대, 카이스트 에 있음, 미러서버는 돈버는것보단 리눅스에 기여하는데 의미가 잇음

◈특정 리포지터리 서버를 직접 지정◈
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/AppStream/$basearch/os/

◈패키지 서명 검증◈
gpgcheck=1

  • gpgkey가 필수로 있어야됨
  • 패키지에 문제가 없는거를 gpgkey를 사용해서 검증해서 다운받을지 말지 검증하는것

◈해당 리포지터리 활성화 여부◈
enabled=1

  • 사용-1, 미사용-0

◈리포지터리 사용 통계를 수집해서 관리자에게 제공 여부◈
countme=1

  • 사용-1, 미사용-0, 사실 지워버려도 문제 없음

◈공식 재단에서 제공하는 키◈
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

2-3. 리포지터리 경로

cd /etc/yum.repos.d

리포지터리 파일은 주소만 있고 인터넷이 있으면 해당 주소를 가지고 인터넷에서 찾아서 설치해줌

2-4. iso 파일로 리포지터리 변경 실습

현재 내가 사용하는 리눅스에서는 기본적으로 가장 가까운 미러리스트(리눅스 패키지 서버)에서 패키지를 다운받도록 되어있어서 rocky linux를 설치한 iso 파일로 리포지터리를 변경해서 다운로드 해보겠다.
(외부와 네트워크 연결이 되어있지 않을 경우 내부에서 패키지를 다운받을 경우)

2-4-1. 설치 디스크 장치(sr0)을 /dvdmount에 마운트

mkdir /dvdmount
mount /dev/sr0 /dvdmount

2-4.2. 실제 리포지터리 디렉터리

cat /etc/yum.repos.d/Rocky-AppStream.repo

2-4-3. 백업 (실습 중 문제 발생 시 복구하기 위함)

pwd > /etc/yum.repos.d
mkdir backup
mv Rocky* backup

2-4-4. 로컬 리포지터리 repo 생성

vi mydvd.repo

패키지는 appstream과 baseos 2개의 패키지를 생성한다.

#구분자
[DVD-AppStream]
#이름은 로키 리눅스 앱스트림이다
name=Rocky Linux AppStream
#지금 로컬에서 가져올거니까 baseurl로 한다.
#인터넷이 아닌 파일에서 가져오기 때문에 파일 프로토콜인 file:// 를 사용함
#리눅스 경로는 /(root)에서 시작하니까 file:///(3개의 슬래쉬)가 됨
#결론은 나의 로컬파일에서 /dvdmount/AppStream을 기본 경로로 설정하겠다는 뜻
baseurl=file///dvdmount/AppStream

[DVD-BaseOS]
name=Rocky Linux BaseOS
baseurl=file:///dvdmount/BaseOS
gpgcheck=0
enabled=1

vi에서 복사 & 붙여넣기

  • 복사 : 특정 위치로 커서를 이동하고 복사할 라인 숫자를 입력 + yy
    ex) 내가 현재까지 5줄을 작성했다면 5 + yy

  • 붙여넣기 : p(paste-붙여넣기) 누르기
    (이때 p는 저 아래에 5 lines yanked 상태에서 방향키를 눌러서 커서 위치 이동시키고 p 누르면 거기에 붙여넣어진다.
    insert 가서 p 백날천날 눌러도 안된다..)

2-4-5. 리포지터리 파일 정상 유무 확인

dnf repolist

문제 없는것을 확인

2-4-6. 로컬 리포지터리를 이용하여 패키지 설치

mc라는 프로그램을 설치하며 내가 생성한 리포지터리가 정상적으로 작동하는지 확인해보겠음

dnf -y install mc

저장소도 DVD-AppStream으로 표시되는것을 보니 내가 생성한 리포지터리가 맞는것을 알 수 있음

설치 된 후 mc를 입력하여 프로그램 실행

해당 프로그램의 설치 경로는 /dvdmount/AppStream/Packages/m/mc 에서 mc-4.8.19-9~~ 이다.

그 후에 내가 작성한 repo 파일의 위치를 변경한 후 설치 명령어 실행 시 작동이 안되는것을 알 수 있다.

3. 패키지 yum, dnf

3-1. yum

  • Yellowdog Updater Modified 노란개 업데이트 라는 말
  • RHEL 7 버전까지는 yum을 사용함
  • 디렉터리

    /etc/yum.repos.d

3-2. dnf

  • Dandified Yum 으로 뜻은 향상화된 yum이라는 뜻
  • RHEL 8 버전 이후부터 등장

3-3. 패키지 파일을 확인하는 명령어

dnf repolist

조회가 된다면 정상이라는 뜻

4. 웹 리포지터리 구축 실습(문제)

4-1. 문제

문제

Server B에 웹 서버 및 리포지터리를 구축하고 Server A에서 사용하도록 설정

A 리포지터리 클라이언트, B 리포지터리 서버

Server B 작업 내용

웹 리포지터리를 구축하기 위해 기본 도구 및 서버 설치

  • dnf -y install yum-utils httpd createrepo
    -- yum-utils 리포지터리 제어 명령어 도구
    -- httpd 웹 서버(Apache 아파치)
    -- createrepo 리포지터리 생성 도구

서버b 방화벽 개방
(a가 다운로드 하려면 b로 와야되니까 방화벽 열어줘야됨 안열어주면 a가 서버b로 접근 못함)

  • firewall-cmd --add-service=http --permanent
  • firewall-cmd --reload

웹서버 다운받았으니까 활성화 해줘야됨 (뭐든지 설치하면 활성화 필수)

  • systemctl --now enable httpd
    -- start + enable = --now enable

크롬에서 192.168.111.200 (서버b ip) 입력하여 테스트 페이지 나왔다면 정상적으로 웹 서버가 열린것임

리포지터리 패키지 파일 다운로드 경로 생성
웹 서버 기본 경로(/var/www/html) 내부에 생성
/var/www/html - 아파치 기본경로(httpd)

  • mkdir /var/www/html/repo

iso(cd)에서 로컬로 리포지터리 다운로드

  • reposync -m --repoid=baseos --newest-only --download-metadata -p /var/www/html/repo
    -- reposync : 외부 저장소에서 리포지터리 받아오기
    -- -m 외부 미러 목록을 사용해서 패키지를 다운로드 하겠다는 의미의 옵션
    -- --repoid=baseos 리포지터리 카테고리 중 baseos만 다운로드 하는 의미
    -- --newest-only 최신버전받기
    -- --download-metadata 리포지터리 구성 정보인 버전, 패키지 이름, 의존성 등을 포함한 메타데이터 다운로드
    -- -p /var/www/html/repo 해당 경로에 다운로드해라

/var/www/html 여기가 내 웹서버 디렉터리임
진짜 내 디렉터리인지 확인

  • vi index.html
    -- 입력 : 4gl Web Server Test
    -- 웹에서 내가 입력한 내용이 표시되는것을 알 수 있음

설치 완료 후 내가 설정한 repo 경로 (/var/www/html/repo) 내에 리포지터들이 있는지 확인

메타데이터를 구축

  • createrepo -g comps.xml /var/www/html/repo/baseos
    -- -g comps.xml 리포지터리의 그룹파일을 /var/www/html/repo/baseos로 설정
    -- /var/www/html/repo/baseos 리포지터리의 기본 경로다!
    (comps.xml은 있다 설치할 때 같이 됏나봄 확인해보면 pwd - /var/www/html에서 ls 하면 보임)
    pool이 완료되었으면 구축 완료된 것으로 확인

리포지터리 구축 완료했으므로 html 웹 서버에서 확인
192.168.111.100/repo

Server A 작업 내용

a에 /etc/yum.repos.d 에 vi remote.repo 라는 파일을 생성
1. baseos 리포지터리는 b에 구성한 웹 서버
2. appstream 리포지터리는 a에 넣어놓은 설치디스크로 해라

appstream 잘 됐는지 보려면 ypbind 설치해보기
baseos 잘 됐는지 보려면 zsh 설치해보기

4-1 나의 실수

당연히 웹으로 연결하니까 mirrorlist 쓰는 줄 알았다. (내 생각에 웹으로 연결하는거면 mirrorlist를 써야한다고 생각했음)
하지만 mirrorlist는 가장 나한테 가까운 미러리스트 서버가서 다운로드 한다는 의미로 결국 mirrorlist를 쓰면 내가 로컬 리포지터리를 구축한 의미가 없어진다.
따라서 나는 내가 구축한 리포지터리를 사용할 것이기 때문에 baseurl을 사용해야함

ypbind와 zsh을 설치하여 리포지터리 정상작동 확인

  • dnf -y install ypbind zsh

4-2. 문제

Server A, B를 초기화 한 후 작업하시오.

1. 본인의 Server B에 웹 서버(httpd)를 설치하고, 해당 웹 서버에서 상대방에게 리포지터리를 제공할 수 있도록 하시오. 이 때 제공하는 리포지터리는 BaseOS 카테고리로서 상대방의 Server A에 위치한 기본 repo 파일을 모두 삭제 후 새로운 web.repo 파일을 작성하여 본인의 Server B를 리포지터리로 지정하여 패키지가 설치 가능하도록 만드시오.
httpd 웹 서버 설치 완료 후 기존의 리포지터리 파일인 /etc/yum.repos.d 내의 모든 파일을 제거하시오.

나의 답

Server B 작업

  1. 웹 서버, 리포지터리 생성 도구, 리포지터리 제어 도구 다운로드
  • dnf -y install httpd createrepo yum-utils
  1. 다른 서버에서 내 서버로 접근이 가능하도록 http 서비스 방화벽 오픈
  • firewall-cmd --add-service=http --permanent
  • firewall-cmd --reload
  1. 웹 서버 활성화
  • systemctl --now enable httpd
  1. iso(cd) 로컬 디렉터리로 마운트
  • mkdir /localmount
  • mount /dev/sr0 /localmount
  1. 기존 리포지터리 파일 삭제
  • cd /etc/yum.repos.d
  • rm -rf ./
  1. 로컬 리포지터리 생성
  • cd /etc/yum.repos.d
  • vi web.repo
    [BaseOS]
    name=Linux BaseOS
    baseurl=file:///var/www/html/repo/BaseOS
    enabled=1
    gpgcheck=0
  1. 웹 서버로 연결 할 repo 디렉터리 생성
  • mkdir /var/www/html/repo
  1. iso(cd)에서 웹 서버 로컬 repo로 리포지터리 다운로드
  • reposync -m --repoid=baseos --newest-only --download-metadata -p /var/www/html/repo
  1. 리포지터리 메타 데이터 구축
  • createrepo -g comps.xml /var/www/html/repo/baseos
  1. 웹에서 Server B IP를 입력하여 리포지터리 구축 완료 확인

Server A 작업

  1. 기존 리포지터리 삭제
  • cd /etc/yum.repos.d
  • rm -rf ./
  1. 로컬 리포지터리 생성
  1. baseos 제공 패키지 설치하여 확인
  • dnf -y install curl

2. 본인의 Server B에 Rocky 8.10 설치 디스크를 삽입 후, /localrepo에 마운트하시오. 이후 AppStream 카테고리의 리포지터리 파일을 다운로드할 수 있도록 해당 디스크 경로로 임의의 리포지터리 파일 local.repo를 생성해 작성하고 테스트하시오.

1번 문제 : 상대방의 Server A -> 본인의 Server B에 리포지터리 요청
2번 문제 : 본인의 Server B -> 본인의 Server B의 디스크에 리포지터리 요청

나의 답

Server B 작업

  1. Rocky 8.10 설치 디스크를 /localrepo에 마운트
  • mkdir /localrepo
  • mount /dev/sr0 /localrepo
  1. 로컬 리포지터리 생성
  • cd /etc/yum.repos.d
  • rm -rf ./
  • vi /etc/yum.repos.d/local.repo
  • [AppStream]
    name=Linux AppStream
    baseurl=file:///localrepo
    enabled=1
    gpgcheck=0
  1. AppStream 파일 설치

3. 이후 본인의 Server B에 telnet-server 패키지가 정상 설치되는지 확인 후, 이상 없이 설치된다면 상대방의 Server A에서 본인의 Server B로 telnet 접속이 가능하도록 설정하고 접속하시오.

나의 답

Server B

  1. telnet-server 설치
  • dnf -y install telnet-server
  1. telnet 방화벽 오픈
  • firewall-cmd --add-service=telnet --permanent
  1. telnet 서비스 실행
  • systemctl --now enable telnet.socket

Server A

  1. Server B로 telnet 접속
  • telnet 192.168.111.200

5. 의존성

  • 나는 ypbind를 설치했는데 자동으로 nss_nis, yp-tools가 설치되었다. 이유는 ypbind를 쓰기 위해서는 해당 패키지가 설치되어야만 사용이 가능하기 때문임
  • 자동으로 필요한 패키지를 설치하는것을 의존성이라고 함
  • 이러한 의존성을 dnf, yum에서 해결하여 사용함
  • 이때 함께 설치된 nss, yp를 종속꾸러미 라고도 함
profile
오늘도 하나씩 해결해 나가자!

0개의 댓글