폐쇄망 서버에 .deb 를 옮겨 설치할 때, 파일을 한 디렉터리에 모으고 dpkg-scanpackages 로 Packages.gz 색인을 만들면 apt 가 저장소로 인식한다. 의존성 해결을 apt 가 하므로 dpkg -i 로 하나씩 넣는 것보다 낫다. 원래 기록의 dpkg-sanpackages 와 ./dev/null 은 오타이며 아래는 바로잡은 명령이다.
dpkg-dev 패키지sudo apt -y install dpkg-dev
mkdir -p ~/repo
cd ~/repo
apt-get download PACKAGE
의존성까지 받으려면 --download-only 로 설치 시늉을 하고 캐시에서 꺼낸다.
sudo apt-get clean
sudo apt-get -y install --download-only PACKAGE
cp /var/cache/apt/archives/*.deb ~/repo/
cd ~/repo
dpkg-scanpackages --multiversion . /dev/null | gzip -9c > Packages.gz
아키텍처별로 디렉터리를 나누려면 -a amd64 를 주고 하위 디렉터리에 각각 만든다.
mkdir -p amd64
dpkg-scanpackages -a amd64 . /dev/null | gzip -9c > amd64/Packages.gz
~/repo 디렉터리를 통째로 옮겨 /opt/repo 에 둔 경우다.
sudo vi /etc/apt/sources.list.d/local.list
deb [trusted=yes] file:/opt/repo ./
아키텍처별 디렉터리로 만들었으면 file:/opt/repo amd64/ 처럼 적는다. trusted=yes 는 서명 검증을 건너뛰므로 로컬 파일에만 쓴다.
sudo apt update
apt-cache policy PACKAGE
sudo apt -y install PACKAGE
Get:1 file:/opt/repo ./ PACKAGE 처럼 로컬 경로에서 받아지면 된다.