로컬 패키지 저장소에 "릴리스" 파일을 생성하는 방법은 무엇입니까?

로컬 패키지 저장소에 "릴리스" 파일을 생성하는 방법은 무엇입니까?

문맥

로컬 패키지 저장소를 통해 내가 제어하는 ​​서버에서 APT 인스턴스에 패키지 및 구성 세트를 제공할 수 있으며, 이를 통해 모든 클라이언트는 일반 명령만 사용하여 이 소프트웨어를 설치할 수 있습니다 apt install(저장소가 추가된 경우 /etc/apt/sources.list{,.d/}).

로컬 패키지 저장소를 만들기 위해 다음을 따랐습니다.이 튜토리얼bipmedia.com의 콘텐츠에는 일반적으로 다음이 포함됩니다.

  1. generate.deb
  2. Apache2 웹 서버에 .deb 저장
  3. 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.

  1. aptftp.conf저장소의 루트 디렉터리에 파일을 만듭니다.

    APT::FTPArchive::Release {
      Origin "Your origin";
      Label "Your label";
      Suite "unstable";
      Codename "sid";
      Architectures "amd64 i386 source";
      Components "main";
      Description "Your description";
    };
    

    적절한 값을 사용하세요(적어도 "원본", "레이블", "설명"을 변경하고 호스팅 바이너리와 일치하도록 "아키텍처"를 조정하세요).

  2. 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필요하지 않은 경우 제거).

  3. 저장소에서 데이터베이스를 지웁니다.

    rm -f packages-i386.db packages-amd64.db
    
  4. 패키지 디렉터리 생성:

    apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
    
  5. 파일 생성 Release:

    apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release
    
  6. 서명:

    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단계를 다시 실행해야 합니다.

관련 정보