문맥
로컬 패키지 저장소를 통해 내가 제어하는 서버에서 APT 인스턴스에 패키지 및 구성 세트를 제공할 수 있으며, 이를 통해 모든 클라이언트는 일반 명령만 사용하여 이 소프트웨어를 설치할 수 있습니다 apt install
(저장소가 추가된 경우 /etc/apt/sources.list{,.d/}
).
로컬 패키지 저장소를 만들기 위해 다음을 따랐습니다.이 튜토리얼bipmedia.com의 콘텐츠에는 일반적으로 다음이 포함됩니다.
- generate.deb
- Apache2 웹 서버에 .deb 저장
- Package.gz 파일 생성
내 시도
바이너리 패키지 파일 생성
.deb를 생성하려면 소프트웨어 파일이 필요하고 메타데이터가 포함된 DEBIAN 폴더를 생성한 후 다음 명령을 사용하여 코드를 컴파일하고 패키지를 어셈블합니다.
dpkg-deb --build [
source code tree with DEBIAN directory
]
Apache2 서버를 사용하여 저장소 파일 제공
이 부분은 제가 해결하려는 문제와 관련이 없기 때문에 건너뛰겠습니다.
Packages.gz 파일 생성(리포지토리 메타데이터)
.deb
작업 디렉터리가 위 파일이 포함된 Apache 서버의 루트 폴더인 개방형 셸 인스턴스의 경우 다음을 호출했습니다.
dpkg-scanpackages debian /dev/null | gzip -9c >debian/Packages.gz
질문
apt update
클라이언트 시스템을 호출 하면 다음과 같이 불평합니다.
W: The repository 'http://example.com packages/ Release' does not have a Release file.
이 필요한 파일이 내 로컬 저장소에 없습니다. 그것은 패킷 체크섬을 위한 등록인 것처럼 보이지만 인터넷에서 검색한 후에는 해당 주제에 대한 지식이 매우 부족하여 이를 생성하는 방법을 찾을 수 없습니다.
노트:내 /etc/apt/sources.list
파일에는 다음 줄이 있습니다.
deb http://example.com packages/
질문
Release
로컬 APT 패키지 저장소용 파일을 생성하는 방법은 무엇입니까 ?
답변1
이 문제를 해결하는 방법에는 여러 가지가 있습니다 apt-ftparchive
.
aptftp.conf
저장소의 루트 디렉터리에 파일을 만듭니다.APT::FTPArchive::Release { Origin "Your origin"; Label "Your label"; Suite "unstable"; Codename "sid"; Architectures "amd64 i386 source"; Components "main"; Description "Your description"; };
적절한 값을 사용하세요(적어도 "원본", "레이블", "설명"을 변경하고 호스팅 바이너리와 일치하도록 "아키텍처"를 조정하세요).
aptgenerate.conf
다음 옆에 일치하는 파일을 만듭니다 .Dir::ArchiveDir "."; Dir::CacheDir "."; TreeDefault::Directory "pool/"; TreeDefault::SrcDirectory "pool/"; Default::Packages::Extensions ".deb"; Default::Packages::Compress ". gzip bzip2"; Default::Sources::Compress ". gzip bzip2"; Default::Contents::Compress "gzip bzip2"; BinDirectory "dists/unstable/main/binary-amd64" { Packages "dists/unstable/main/binary-amd64/Packages"; Contents "dists/unstable/Contents-amd64"; SrcPackages "dists/unstable/main/source/Sources"; }; BinDirectory "dists/unstable/main/binary-i386" { Packages "dists/unstable/main/binary-i386/Packages"; Contents "dists/unstable/Contents-i386"; SrcPackages "dists/unstable/main/source/Sources"; }; Tree "dists/unstable" { Sections "main"; # contrib non-free"; Architectures "amd64 i386 source"; };
(
i386
필요하지 않은 경우 제거).저장소에서 데이터베이스를 지웁니다.
rm -f packages-i386.db packages-amd64.db
패키지 디렉터리 생성:
apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
파일 생성
Release
:apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release
서명:
gpg -u yourkeyid -bao dists/unstable/Release.gpg dists/unstable/Release gpg -u yourkeyid --clear-sign --output dists/unstable/InRelease dists/unstable/Release
(적절한 ID로 교체
yourkeyid
)
리포지토리를 변경할 때마다 3~6단계를 다시 실행해야 합니다.