쿠버네티스 폐쇄망 설치를 위해서 필요한 데비안 계열과 레드햇 계열의 패키지 파일들을 따로 띄워야하는 불편함을 없애기 위하여 하나의 서버에 띄우는 과정
일반적으로 공중망에 연결되어있다면 필요한 파일마다 인터넷에서 다운로드 받아오면 되지만 폐쇄망으로 설치하게 된다면 필요한 파일들은 전부 다 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 0cat <<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에 대해서 더 알아보고 변경할 예정이다.
좋은 글 잘 읽었습니다, 감사합니다.