그냥 설정 간단하지만 서명 저장소를 웹 서버에 있습니다. 대부분의 다른 자습서는 다소 날짜가 많거나 번거롭기 때문에 여기서 절차를 복제하려고 시도합니다. 초기 구성에는 약간의 노력이 필요하지만 간단한 빌드 스크립트를 사용하면 쉽게 관리 할 수 있습니다. 새 *.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 (스크립트 언어 앱 패키징을위한 더 게으른 접근법)