쿠버네티스 폐쇄망 설치를 위해서 필요한 데비안 계열과 레드햇 계열의 패키지 파일들을 따로 띄워야하는 불편함을 없애기 위하여 하나의 서버에 띄우는 과정
일반적으로 공중망
에 연결되어있다면 필요한 파일마다 인터넷에서 다운로드 받아오면 되지만 폐쇄망
으로 설치하게 된다면 필요한 파일들은 전부 다 local repositry로 구성해 놔야 설치가 가능하다.
ubuntu
등.deb
파일centos
, rocky
, rhel
등.rpm
파일미리 다운로드를 받거나 준비하는 패키지 파일안에 있어야한다. 해당 글에서는 미리 다운로드 받고 구성하는 과정을 작성했다.
각각의 설치에 필요한 테스트용 패키지 파일들은 작성중을 참고한다.
ubuntu20.04에서는
createrepo-c
가 없기 때문에 불가능하거나 방법을 더 찾아봐야한다.
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list 2>/dev/null
echo "deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list 2>/dev/null
apt-get -y install dpkg dpkg-dev zstd createrepo-c nginx
mkdir -p /data/localrepo/ubuntu22
mkdir -p /data/localrepo/centos8
mv [ 압축한 ubuntu 패키지 파일 ] /data/localrepo/ubuntu22
mv [ 압축한 centos8 패키지 파일 ] /data/localrepo/centos8
cd /data/localrepo/ubuntu22
tar -zxvf [ ubuntu 패키지 파일 ].tgz
cd /data/localrepo/centos8
tar -zxvf [ centos8 패키지 파일].tgz
cp -r /etc/apt/sources.list.d/ /etc/apt/sources.list.d.back
cp /etc/apt/sources.list /etc/apt/sources.list.back
sed -i 's/^deb/#deb/' /etc/apt/sources.list
rm -rf /etc/apt/sources.list.d
mkdir /etc/apt/sources.list.d
echo "deb [trusted=yes] http://자신의 ip/ubuntu22 ./" | sudo tee /etc/apt/sources.list.d/local-to-file.list
vi /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf -> include /etc/nginx/conf.d/local-repo.conf
vi /etc/nginx/conf.d/local-repo.conf
systemctl restart nginx
local-repo.conf
server {
listen "80";
server_name localhost;
location /ubuntu22 {
alias "/data/localrepo/ubuntu22";
autoindex on;
# 혹시 안된다면 위의 2개의 설정을 주석처리하고 아래 구문을 주석 해제
#root "/data/localrepo/ubuntu22";
}
location /centos8 {
alias "/data/localrepo/centos8";
autoindex on;
# 혹시 안된다면 위의 2개의 설정을 주석처리하고 아래 구문을 주석 해제
#root "/data/localrepo/centos8";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
cd /data/localrepo/ubuntu22 && dpkg-scanpackages -m . | gzip -9c > Packages.gz
createrepo_c /data/localrepo/centos8
apt update
apt list | grep [테스트용 deb 파일]
Epel 외부 repositroy에 의존하고 있다.
sudo setenforce 0
cat <<EOF > /etc/yum.repos.d/nginx-stable.repo
[nginx-stable]
name=nginx-stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
module_hotfixes=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
cat <<EOF > /etc/yum.repos.d/nginx-mainline.repo
[nginx-mainline]
name=nginx-mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch
enabled=0
gpgcheck=1
module_hotfixes=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
dnf clean metadata
dnf config-manager --set-enabled powertools
dnf install -y epel-release epel-next-release
dnf install -y nginx zstd tar xz createrepo dpkg*
cp -r /etc/yum.repos.d /etc/apt/yum.repos.d.back
rm -rf /etc/yum.repos.d
mkdir /etc/yum.repos.d
tee /etc/yum.repos.d/local-repo.repo <<EOF
[local-repo]
name=Local Repo configure
baseurl=http://자신의 ip/centos8
gpgcheck=0
enabled=1
EOF
cd /data/localrepo/ubuntu22 && dpkg-scanpackages -m . | gzip -9c > Packages.gz
createrepo /data/localrepo/centos8
dnf clean metadata
dnf list | grep [테스트용 deb 파일]
Centos에서 cd /data/localrepo/ubuntu22 && dpkg-scanpackages -m . | gzip -9c > Packages.gz
실행 시 혹시나 uses unknown compression for member 'control.tar.zst', giving up
를 볼 수 있다
이럴 땐 /data/localhost/centos8
로 이동 후 아래 스크립트를 한 번 실행해 준 후 다시 명령어를 시도한다.
#!/bin/bash
FILE_PATH_DEB=./*.deb
for ITEM in $FILE_PATH_DEB; do
ar x $ITEM
if [ -e control.tar.zst ]; then
zstd -d < control.tar.zst | xz > control.tar.xz
fi
if [ -e data.tar.zst ]; then
zstd -d < data.tar.zst | xz > data.tar.xz
fi
rm -f $ITEM
if [ -e control.tar.xz ]; then
ar -m -c -a sdsd $ITEM debian-binary control.tar.xz data.tar.xz
fi
if [ -e control.tar.zst ]; then
rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst
elif [ -e control.tar.xz ]; then
rm debian-binary control.tar.xz data.tar.xz
else
rm debian-binary
fi
done
Centos에서 nginx 설정을 바꾸고나면 다 맞게되어있어도 재시작이 안되는 경우가 있는데
왜 그런지를 모르겠다 그냥 reboot
한 번 하면 제대로 작동은 한다.
저렇게 nginx 설정으로 proxy를 나눠주는 방식이 싫다면 그냥 모든 파일을 /data/localrepo
에 몰아 넣어두고 local-repo.conf
를 변경해주면 된다.
이러한 방식으로 했다면 위에서 따라하는 과정들 중 경로 부분들에 대해서는 전부 맞춰서 변경해야한다.
local-repo.conf
server {
listen "80";
server_name localhost;
location / {
root "/data/localrepo";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Nginx 프록시로 나누는 방식으로 했다면 브라우저 화면에서도 모든 파일이 보이지만
한 곳에 몰아넣고 하는거라면 브라우저 화면에 403
이 떠도 그러려니하자 이 부분은 추후에 nginx에 대해서 더 알아보고 변경할 예정이다.
좋은 글 잘 읽었습니다, 감사합니다.