-책에내용없음 실습만..-
우리가 dnf 를 사용해서 패키지를 다운로드 하는데 그러면 패키지를 어디서 다운받냐?!
이러면 이제 리포터지터리가서 다운받는것임
dnf 사용해서 설치하면 저장소(리포지터리)가 appstream이란 걸 알 수 있음
리포지터리 디렉터리 - /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
cd /etc/yum.repos.d
리포지터리 파일은 주소만 있고 인터넷이 있으면 해당 주소를 가지고 인터넷에서 찾아서 설치해줌
현재 내가 사용하는 리눅스에서는 기본적으로 가장 가까운 미러리스트(리눅스 패키지 서버)에서 패키지를 다운받도록 되어있어서 rocky linux를 설치한 iso 파일로 리포지터리를 변경해서 다운로드 해보겠다.
(외부와 네트워크 연결이 되어있지 않을 경우 내부에서 패키지를 다운받을 경우)
mkdir /dvdmount
mount /dev/sr0 /dvdmount
cat /etc/yum.repos.d/Rocky-AppStream.repo
pwd > /etc/yum.repos.d
mkdir backup
mv Rocky* backup
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에서 복사 & 붙여넣기
dnf repolist
문제 없는것을 확인
mc라는 프로그램을 설치하며 내가 생성한 리포지터리가 정상적으로 작동하는지 확인해보겠음
dnf -y install mc
저장소도 DVD-AppStream으로 표시되는것을 보니 내가 생성한 리포지터리가 맞는것을 알 수 있음
설치 된 후 mc를 입력하여 프로그램 실행
해당 프로그램의 설치 경로는 /dvdmount/AppStream/Packages/m/mc 에서 mc-4.8.19-9~~ 이다.
그 후에 내가 작성한 repo 파일의 위치를 변경한 후 설치 명령어 실행 시 작동이 안되는것을 알 수 있다.
/etc/yum.repos.d
dnf repolist
조회가 된다면 정상이라는 뜻
문제
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 설치해보기
당연히 웹으로 연결하니까 mirrorlist 쓰는 줄 알았다. (내 생각에 웹으로 연결하는거면 mirrorlist를 써야한다고 생각했음)
하지만 mirrorlist는 가장 나한테 가까운 미러리스트 서버가서 다운로드 한다는 의미로 결국 mirrorlist를 쓰면 내가 로컬 리포지터리를 구축한 의미가 없어진다.
따라서 나는 내가 구축한 리포지터리를 사용할 것이기 때문에 baseurl을 사용해야함
ypbind와 zsh을 설치하여 리포지터리 정상작동 확인
- dnf -y install ypbind zsh
Server A, B를 초기화 한 후 작업하시오.
1. 본인의 Server B에 웹 서버(httpd)를 설치하고, 해당 웹 서버에서 상대방에게 리포지터리를 제공할 수 있도록 하시오. 이 때 제공하는 리포지터리는 BaseOS 카테고리로서 상대방의 Server A에 위치한 기본 repo 파일을 모두 삭제 후 새로운 web.repo 파일을 작성하여 본인의 Server B를 리포지터리로 지정하여 패키지가 설치 가능하도록 만드시오.
httpd 웹 서버 설치 완료 후 기존의 리포지터리 파일인 /etc/yum.repos.d 내의 모든 파일을 제거하시오.
나의 답
Server B 작업
- 웹 서버, 리포지터리 생성 도구, 리포지터리 제어 도구 다운로드
- dnf -y install httpd createrepo yum-utils
- 다른 서버에서 내 서버로 접근이 가능하도록 http 서비스 방화벽 오픈
- firewall-cmd --add-service=http --permanent
- firewall-cmd --reload
- 웹 서버 활성화
- systemctl --now enable httpd
- iso(cd) 로컬 디렉터리로 마운트
- mkdir /localmount
- mount /dev/sr0 /localmount
- 기존 리포지터리 파일 삭제
- cd /etc/yum.repos.d
- rm -rf ./
- 로컬 리포지터리 생성
- cd /etc/yum.repos.d
- vi web.repo
[BaseOS]
name=Linux BaseOS
baseurl=file:///var/www/html/repo/BaseOS
enabled=1
gpgcheck=0
- 웹 서버로 연결 할 repo 디렉터리 생성
- mkdir /var/www/html/repo
- iso(cd)에서 웹 서버 로컬 repo로 리포지터리 다운로드
- reposync -m --repoid=baseos --newest-only --download-metadata -p /var/www/html/repo
- 리포지터리 메타 데이터 구축
- createrepo -g comps.xml /var/www/html/repo/baseos
- 웹에서 Server B IP를 입력하여 리포지터리 구축 완료 확인
Server A 작업
- 기존 리포지터리 삭제
- cd /etc/yum.repos.d
- rm -rf ./
- 로컬 리포지터리 생성
- vi web.repo
- [BaseOS]
name=Linux BaseOS
baseurl=http://192.168.111.200/repo/baseos
enabled=1
gpgcheck=0
- 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 작업
- Rocky 8.10 설치 디스크를 /localrepo에 마운트
- mkdir /localrepo
- mount /dev/sr0 /localrepo
- 로컬 리포지터리 생성
- 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
- AppStream 파일 설치
3. 이후 본인의 Server B에 telnet-server 패키지가 정상 설치되는지 확인 후, 이상 없이 설치된다면 상대방의 Server A에서 본인의 Server B로 telnet 접속이 가능하도록 설정하고 접속하시오.
나의 답
Server B
- telnet-server 설치
- dnf -y install telnet-server
- telnet 방화벽 오픈
- firewall-cmd --add-service=telnet --permanent
- telnet 서비스 실행
- systemctl --now enable telnet.socket
Server A
- Server B로 telnet 접속
- telnet 192.168.111.200