APT 리포지토리를 설정하는 방법?


52

몇 가지 패키지를 제공 할 서버에 APT 저장소를 설정하고 싶습니다.

서버에 소프트웨어를 설치하지 않고 설정하는 방법이 있습니까?

파일을 어떻게 구성해야합니까?


편집 : 나는 뭔가 잘못하고 있어야합니다 ... 누군가 나를 도울 수 있습니까? http://quickmediasolutions.com/apt/dists에 리포지토리가 있습니다.

어디서 또는 무엇을 잘 모르겠지만 무언가 잘못 구성되어 있습니다. 나는 현재 하나의 패키지 만 가지고 있으며 모든 아키텍처에 적용됩니다.

내 추가 된 내용은 다음과 같습니다 /etc/apt/sources.list.

deb http://quickmediasolutions.com/apt stable main

다운로드 한 응용 프로그램이 어떤 종류의 라이센스를 편집하고 추가 할 수 있습니까? 개인 용도입니까, 아니면 배포 할 계획입니까?
Jorge Castro

@ 조지 : 무슨 뜻인가요? 어떤 응용 프로그램?
Nathan Osman

1
패키지가 OSS인지 확인하려고했지만 런치 패드를 사용할 수 있습니다.
Jorge Castro

@ 조지 : 아니오, 그것은 OSS가 아닙니다. (실제로 필자가 작성한 유일한 앱이 아닙니다.)
Nathan Osman

답변:


26

dpkg-scanpackages를 사용하면 간단한 저장소를 쉽게 설정할 수 있습니다. 이 페이지는 어떻게 사소한 REPO를 설정 설명하고 이 하나 를 사용 (예 4 아래로 스크롤)하는 방법을 설명합니다.


작동하는 데 약간의 문제가 있습니다. 질문에 대한 내 업데이트를 참조하십시오.
Nathan Osman

1
"자동"리포지토리를 설정하려는 것 같습니다. 하나 또는 여러 개의 패키지의 경우 사소한 저장소를 사용하는 것이 훨씬 좋습니다. Packages.gz 및 deb를 quickmediasolutions.com/apt/binary로 이동하십시오 . 그런 다음 소스는입니다 deb http://quickmediasolutions.com/apt binary/.
Michael Crenshaw

2
사소한 repos는 고정 할 때 문제가 발생하지만 몇 패키지에 대해 repo를 설정하는 가장 빠르고 쉬운 방법입니다. 2-3 개의 패키지에 대해서만 풀링 된 저장소를 설정하는 것은 어리석은 것처럼 보입니다.
Tim Post

조지,이 일을 할 수 있었습니까?
Michael Crenshaw

@mac : 음 .... 아직 시도 할 시간이 없었습니다. :) 모든 것을 PPA에 업로드하는 것만으로 끝났습니다.
Nathan Osman

40

그냥 설정 간단하지만 서명 저장소를 웹 서버에 있습니다. 대부분의 다른 자습서는 다소 날짜가 많거나 번거롭기 때문에 여기서 절차를 복제하려고 시도합니다. 초기 구성에는 약간의 노력이 필요하지만 간단한 빌드 스크립트를 사용하면 쉽게 관리 할 수 ​​있습니다. 새 *.deb파일을 넣은 다음 업데이트하거나 cron 작업이 처리하도록 할 수 있습니다.

일부 서명 키 생성

먼저 gpg패키지 및 저장소에 대한 서명 키 를 작성 해야합니다. 암호가없는 (4) RSA 서명 키로 만들고 $KEYNAME요청시 고유하게 만드십시오 . 추가 예제는 " dpkg1"를 키 이름으로 가정 합니다.)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

귀하의 웹 서버에는 반복적으로 입력 할 원숭이가 내장되어 있지 않기 때문에 비밀번호가 없습니다. 서명 된 패키지 및 리포지토리는 업데이트 관리자의 불만 사항을 만족시키기위한 것입니다. 두 키를 /apt/웹 서버 의 새 리포지토리 디렉토리에 업로드하고 초기화 후에secret.gpg 키를 삭제하십시오 .

CGI 스크립트 업데이트

다음은 간단한 업데이트 셸 / CGI 스크립트입니다.

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

gpg일부 디렉토리 $GNUPGHOME(문서 루트 위) 에서 GPG 설정을 초기화하려면 세 줄을 한 번만 실행하면 됩니다. secret.gpg성공한 후에 만 삭제하십시오 .

이 작은 쉘 스크립트의 고유 한 기능 중 하나는 삽입 한 모든 *.deb파일을 허용 하지만 다른 레벨을 재귀 적으로 검색하고 (한 레벨에서 시작하여) 심볼릭 링크하는 것입니다 ( Options FollowSymLinks결국 .htaccess 필요 ).

이 스크립트를 CGI 또는 cron-job별로 수동으로 실행할 수 있습니다. 그러나 그것을 숨기거나 문서 루트에서 벗어나십시오.

"사소한"적절한 저장소이므로 다음 apt-sources.list항목 이 필요합니다 .

deb http://example.org/deb/  ./    # Simple signed repo

단일 아키텍처 저장소에 적합하며 수백 개의 패키지를 기대하지 않는 경우에 적합합니다.

패키지 서명

gpg 키를 설정하면 개별 패키지에 서명하는 것도 간단합니다.

dpkg-sig -k dpkg1 -s builder *.deb

(이것은 저장소 웹 서버가 아닌 패키지가 빌드 된 워크 스테이션에서 수행되어야합니다.)

서명되지 않은 저장소

서명 된 패키지가 필요하지 않은 경우 업데이트 스크립트를 다음과 같이 줄일 수 있습니다.

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

여전히 일반 사용자가 사용할 수 있지만 다음에 대한 사용자 정의 플래그가 필요합니다 apt.sources.

deb [trusted=yes] http://apt.example.org/deb/ ./

그러나 trusted=yes모든 것을 위해 또는 패키지 출처에 대해 실제로 확실하지 않은 경우 플래그를 습관적으로 사용하지 마십시오 .

유용성을 위해

최종 사용자의 HEADER.html경우 리포지토리 디렉토리에 드롭하십시오 . 아파치 (Apache) mod_auto_index는 다음과 같이 덧붙 입니다.

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>

대안

요즘 저장소 관리를 자동화하는 몇 가지 도구가 있습니다. 심지어 저장소 온라인 스터 및 패키지 빌드 서비스 (가 gemfury , packagecloud는 , bintray 등)

  • 오히려 편리한 대안은 prm 입니다. 복잡한 APT 및 YUM 저장소를 빌드하는 Ruby 스크립트입니다. (단, RPM이 곧 언젠가는 종료되기를 바랍니다.)-별로 설치하는 것이 가장 좋습니다 gem install prm.

  • 그리고 나는 또한 자동화하는 작은 스크립트를 작성했습니다이 유사 : http://apt.include-once.org/apt-phparchive - 제발하지가 지나치게 강력하고 (한번, 이것은 우연입니다) PHP로 작성된 아니라고, 원래 DEB, RPM-over-APT 및 Phar 번들을위한 것입니다.

이것은 원래의 질문과 밀접한 관련이 있기 때문에 데비안 패키지를보다 쉽게 ​​구축 할 수있는 도구도 있습니다. 다소 오래된 것 : EPM . 훨씬 더 현대적인 : FPM . 그리고 내 개인적인 포크 : XPM (스크립트 언어 앱 패키징을위한 더 게으른 접근법)


1
해당 리포지를 사용하려면 gpg 키를 어떻게 추가합니까?
브루스 선

1
일반적으로wget …/public.gpg -O- | apt-key add -
마리오

여러 아키텍처를 지원하려면 무엇을 변경해야합니까?
starbeamrainbowlabs

1
@starbeamrainbowlabs 완전히 확실하지는 않지만 dpkg-scanpackages -m충분 하다고 생각 합니다. 여전히 동일한 릴리스 파일의 모든 아키텍처를 나열합니다. 그러나 각 .deb에 고유 한 이름이 있거나 별개의 하위 디렉토리 (amd64 /, all /)에 저장되어 있으면 문제가 해결됩니다. 더 복잡한 저장소 도구 중 하나를 선택하십시오.
마리오

7

예. 당신은 이것을 할 수 있습니다. 파일을 올바른 방식으로 구성하고 색인 파일을 작성하면됩니다. 웹 서버의 문서 루트에 디렉토리 구조를 넣으면 웹 서버를 통해 패키지에 액세스 할 수 있습니다.

다음 은 파일 구성 방법 및 색인 파일 작성 방법에 대한 자세한 설명입니다.

하나의 패키지를 기꺼이 설치하려는 경우 reprepro 라는 도구를 사용할 수도 있습니다 . 이렇게하면 관리가 좀 더 편리해집니다.


@txwikinger : 패키지를 설치할 수없는 이유는 서버가 centOS를 실행하고 있기 때문입니다. :)
Nathan Osman

잘. 당신은 필요하지 않습니다. 다른 컴퓨터에서 모든 것을 만들고 전체 트리를 centos 서버로 재 동기화 할 수 있습니다
txwikinger

네, 레프 레프로 사용을 확실히 두 번째로하겠습니다. 그것은 당신의 인생을 훨씬 쉽게 만들어 줄 것입니다. 서명 키를 더 잘 보호 할 수 있도록 다른 컴퓨터에서 리포지토리를 만드는 기능 일 수도 있습니다.
andol

@andol & @txwikinger : 노력하고 있지만 문제가 발생합니다. 업데이트 된 질문을 참조하십시오.
Nathan Osman

dists 파일에는 여전히 ./binary-<specific arch>가 필요합니다.
andol


0

mario의 답변을 따른 후이 오류가 발생하면

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

다음을 수행하십시오.

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

*.deb파일을 debs폴더에 넣었습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.