Chỉ cần thiết lập một kho lưu trữ đơn giản nhưng đã ký trên máy chủ web. Bởi vì hầu hết các hướng dẫn khác có phần lỗi thời hoặc cồng kềnh, tôi sẽ cố gắng sao chép quy trình tại đây. Cấu hình ban đầu cần một chút nỗ lực, nhưng tập lệnh xây dựng đơn giản giúp dễ quản lý. Và bạn chỉ có thể thả vào các *.deb
tệp mới , sau đó cập nhật hoặc để một công việc định kỳ xử lý việc đó.
Tạo một số khóa ký
Trước tiên, bạn cần tạo một gpg
khóa ký cho các gói và kho lưu trữ của bạn. Biến nó thành (4) khóa ký RSA, không có mật khẩu và cung cấp cho nó một mã duy nhất $KEYNAME
khi được yêu cầu. (Các ví dụ khác giả sử " dpkg1
" là tên khóa.)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Tôi nói không có mật khẩu, vì máy chủ web của bạn không có khỉ dựng sẵn để gõ liên tục. Và các gói và kho lưu trữ đã ký chỉ nhằm thỏa mãn các khiếu nại của người quản lý cập nhật về điều đó. Chỉ cần tải cả hai khóa lên /apt/
thư mục kho lưu trữ mới trên máy chủ web của bạn, nhưng xóa secret.gpg
khóa sau khi khởi tạo.
Cập nhật tập lệnh CGI
Đây là kịch bản shell / CGI cập nhật đơn giản cho nó:
#!/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
Ba gpg
dòng chỉ cần được thực thi một lần, để khởi tạo thiết lập GPG trong một số thư mục $GNUPGHOME
(phía trên thư mục gốc). Xóa chỉ secret.gpg
sau khi thành công.
Một tính năng độc đáo của tập lệnh shell nhỏ này là nó chấp nhận bất kỳ *.deb
tệp nào bạn thả vào, nhưng cũng tìm kiếm đệ quy (bắt đầu từ một cấp độ trở lên) cho các tệp khác và liên kết chúng vào. ( Options FollowSymLinks
Cuối cùng cần .htaccess .)
Bạn có thể thực thi tập lệnh này theo cách thủ công dưới dạng CGI hoặc theo công việc định kỳ. Nhưng ẩn nó, hoặc tốt hơn là di chuyển nó ra khỏi tài liệu gốc.
Bởi vì nó là một kho lưu trữ apt "tầm thường", nó cần có apt-sources.list
mục sau :
deb http://example.org/deb/ ./ # Simple signed repo
Điều đó phù hợp với các kho lưu trữ kiến trúc đơn và nếu bạn không mong đợi hàng trăm gói.
Ký gói
Việc ký các gói riêng lẻ của bạn cũng không đáng kể, khi bạn đã thiết lập các khóa gpg của mình:
dpkg-sig -k dpkg1 -s builder *.deb
(Điều này nên được thực hiện trên máy trạm nơi các gói được xây dựng, không phải trên máy chủ web của kho lưu trữ.)
Kho lưu trữ chưa ký
Nếu bạn không cần các gói đã ký, thì bạn có thể cắt tập lệnh cập nhật xuống chỉ:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Người dùng trung bình vẫn có thể sử dụng nhưng cần cờ tùy chỉnh cho apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Nhưng vui lòng không sử dụng trusted=yes
cờ theo thói quen cho tất cả mọi thứ hoặc nếu bạn không thực sự chắc chắn về nguồn gốc gói.
Để sử dụng
Đối với người dùng cuối, chỉ cần thả một HEADER.html
vào thư mục kho lưu trữ. Apaches mod_auto_index
sẽ trả trước ghi chú đó:
<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>
Lựa chọn thay thế
Có một vài công cụ để tự động hóa quản lý kho lưu trữ những ngày này. Và thậm chí còn có kho lưu trữ trực tuyến và dịch vụ xây dựng gói ( gemfury , packagecloud , bintray , v.v.)
Một thay thế khá thuận tiện là prm . Đó là tập lệnh Ruby, xây dựng các repos APT và YUM phức tạp. (Nhưng chúng ta chỉ hy vọng RPM cuối cùng sẽ chết sớm thôi ..) - Nó được cài đặt tốt nhất cho mỗi gem install prm
.
Và tôi cũng đã viết một kịch bản nhỏ để tự động hóa điều này tương tự: http://apt.include-once.org/apt-phparchive - Xin lưu ý rằng nó không quá mạnh mẽ và được viết bằng PHP (lần đầu tiên, đây là sự trùng hợp), và ban đầu được dùng cho các gói DEB và RPM-over-APT và Phar.
Vì điều này liên quan chặt chẽ với câu hỏi ban đầu, nên cũng có các công cụ để xây dựng các gói Debian dễ dàng hơn. Hơi lỗi thời: EPM . Nhiều thông tin hơn: FPM . Và ngã ba cá nhân của tôi: XPM (cách tiếp cận lười biếng hơn để đóng gói các ứng dụng ngôn ngữ kịch bản.)