목차
- 로컬 레포지토리란?
- 로컬 레포지토리 필요성
- 시험 환경
- 캐시 우분투 DEB 패키지 다운로드 파일 삭제
- 로컬 레포지토리를 통해 설치할 DEB 우분투 패키지 다운로드
- dpkg-scanpackages으로 패키지 압축
1. 로컬 레포지토리란?
로컬 레포지토리란 말 그대로 네트워크를 통해 패키지를 다운로드받아 설치하는 방식이 아니라 이미 기존에 로컬에 저장되어있는 우분투 패키지를 검색하고 의존성을 찾아 모든 패키지를 자동으로 설치하는 방식을 의미합니다.
2. 로컬 레포지토리 필요성
그렇다면 흔히 DEB 파일을 다운로드하여 dpkg 명령으로 설치하면 되는데 굳이 로컬레포지토리가 필요한가? 라는 의구심이 생기게됩니다. 다만, dpkg -i 명령으로 일일이 한개씩 모든 패키지를 설치할 수는 없습니다. 예를들어 mariadb 패키지 하나를 설치하려면 이 패키지에 의존성이 포함된 수십개의 패키지를 모두 사전에 설치하여야합니다.
dpkg명령으로 하나씩 설치한다면 오류도 발생할 것이고 제대로 설치가 되지않을 것입니다. 로컬레포지토리는 바로 이러한 해결할 수 있는 해결책입니다. 네트워크를 통해 패키지를 설치하듯이 로컬레포지토리를 참조하면 의존성이 있는 모든 패키지를 자동으로 찾고 설치합니다.
또한, 네트워크를 사용할 수 없는 장소에서 이러한 로컬 레포지토리 방식은 큰 장점이 됩니다.
3. 시험 환경
아래는 이번 예제를 수행할 시험 환경입니다. 만약 똑같은 환경이 아니라면 가상머신에 해당 환경을 구축하여 예제를 따라해보세요.
OS: Linux Ubuntu 20.04 LTS x64
메모리: 8G
디스크: 500G
4. 캐시 우분투 DEB 패키지 다운로드 파일 삭제
우선 로컬 레포지토리에 들어갈 우분투 패키지 DEB 파일들을 다운로드 및 수집해야합니다. 하지만 우리가 리눅스를 이미 설치해서 사용하고 있었다면 불필요한 DEB 캐시 파일들이 이미 저장되어있을 수 있습니다. 이러한 파일들을 먼저 삭제합니다.
$ cd /tmp
$ sudo rm -rf /var/cache/apt/archives/*.deb
$ ls /var/cache/apt/archives/
5. 로컬 레포지토리를 통해 설치할 DEB 우분투 패키지 다운로드
만약 기존 캐시 DEB 파일을 모두 삭제했다면 아래와 같이 로컬 레포지토리에 포함시킬 DEB파일들을 다운로드 합니다.
$ sudo apt-get reinstall --download-only libpcre3-dev openssl libexpat1-dev libtool wget gcc make cmake subversion python3 openssh-server python3-pip unzip libssl-dev python3-mysqldb python3-dev libmysqlclient-dev smartmontools dialog openjdk-8-jdk qemu-kvm
$ ls /var/cache/apt/archives/
6. dpkg-scanpackages으로 패키지 압축
이제 다운로드 받은 DEB 파일들을 dpkg-scanpackages와 zip 명령으로 압축합니다. dpkg-scanpackages는 로컬 레포지토리 설정시 의존성 등의 정보들을 파악하여 정책 파일을 생성합니다. 이후 apt-get install 명령을 수행하면 설치하려는 패키지의 의존성 패키지들을 모두 설치합니다.
$ mkdir -p /tmp/test_packages/debs/amd64
$ sudo cp -R /var/cache/apt/archives/*.deb /tmp/test_packages/debs/amd64/
$ cd /tmp/test_packages/debs/
$ sudo apt-get install dpkg-dev
$ dpkg-scanpackages ./amd64 /dev/null | gzip -9c > Packages.gz
$ gunzip Packages.gz
$ mv Packages ./amd64/
$ cd /tmp/test_packages
$ tar -cvf debs.tar.gz ./debs
자 다음 포스팅에서는 이제 로컬 레포지토리를 설정하는 방법에 대해 알아보도록 하겠습니다.