오늘은 offline에서도 유용하게 Repositry를 사용할 수 있게 만드는 패키징 방법에 대해서 알아보도록 하겠다.
먼저 간단하게 사용방법을 알아보자

인터넷이 안되는 환경에서 offline 패키징을 해와서 webserver에 올리고 ubuntu나 RHEL이 설치 된 서버에서 각각 배포를 진행하는 형태라고 생각하면 좋을 것 같다.
이런 부분을 진행하기 위해서 인터넷이 되는 환경에서 파일을 다운로드 하는 방법과 apt와 yum을 명령어를 사용하기 위해 metadata를 생성하는 것 까지 진행 해보도록 하겠다.
먼저 Rhel계열 부터 진행하도록 하겠다.
RHEL/centos 계열은 8버전 기준으로 작성
ubuntu는 20.04 버전 기준으로 작성 진행 하도록 하겠습니다.
RHEL – offline Package
먼저 yum 패키징을 하기 위한 yum-utils 패키지 설치를 진행한다.
$ sudo yum install yum-utils createrepo
이후 디렉토리를 하나 생성하여 거기에 파일을 다운로드 진행할 수 있도록 하겠다.
$ sudo mkdir ~/repo
$ cd ~/repo
$ yum download --resolve [패키지명]
이렇게 하면 파일이 다운로드 되게 되는데 이 파일들에 패키지가 여러가지라면 의존성을 맞춰줘야 한다. 그걸 위해서 metadata를 생성해줘야 하는데 아래와 같이 명령어를 입력하면 된다.
$ createrepo ~/repo
이러면 metadata가 생성되게 되고 offline에서도 생성될 수 있게 구성되게 된다.
ubuntu – offline Package
ubuntu는 복잡해서 단순하게 할 수 있도록 shell scrpit를 작성하게 되었다.
패키지를 다운로드 할 수 있도록 패키지 설치를 진행해보도록 하겠다.
$ sudo apt-get update
$ sudo apt-get install dpkg-dev
아래와 같이 패키지 설치를 하고 난 이후에 shell-scrpit를 생성하고 동작 시키면 패키지 다운로드 부터 의존성 까지 한번에 해결되는 process가 생성되게 된다.
cat << 'EOF' > download_and_generate.sh
#!/bin/bash
# Script to download dependencies and generate metadata
# Set the working directory
WORK_DIR="$HOME/local-repo"
mkdir -p $WORK_DIR
cd $WORK_DIR
# Function to download a package and its dependencies
download_deps() {
local package=$1
echo "Downloading: $package"
apt-get download $package 2>/dev/null
local depends=$(apt-cache depends $package | grep 'Depends' | sed "s/.*Depends: //" | sed 's/<[^>]*>//g' | tr '\n' ' ')
for dep in $depends
do
# Check if the dependency has already been processed
if ! grep -q "^$dep$" downloaded.txt; then
echo $dep >> downloaded.txt
download_deps $dep
fi
done
}
# Initialize the file to track downloaded packages
echo "" > downloaded.txt
# Process each package name provided as a command line argument
for pkg in "$@"
do
if ! grep -q "^$pkg$" downloaded.txt; then
echo $pkg >> downloaded.txt
download_deps $pkg
fi
done
# Use dpkg-scanpackages to create the Packages.gz file
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
echo "Package metadata has been generated."
# Clean up temporary file
rm downloaded.txt
# Print completion message
echo "All tasks have been completed."
EOF
# Grant execute permission to the script
chmod +x download_and_generate.sh
- WORK_DIR= <어디에 다운로드 할것인지>
그리고 아래와 같이 script를 실행시켜주면 된다.
$ ./download_and_generate <패키지명1> <패키지명2>
위와 같이 script를 실행하면 파일 다운로드 및 의존성까지 같이 다운로드 되게 된다.
이렇게 offline 패키지 까지 알아 봤으니 다음 글에서는 어떻게 사용 할 수 있는 지 알아보도록 하겠다.
이상으로 글을 마치도록 하겠습니다.