it-swarm-vi.com

Làm cách nào để thiết lập kho lưu trữ APT?

Tôi muốn thiết lập một kho lưu trữ APT trên một máy chủ sẽ cung cấp một vài gói.

Có cách nào để thiết lập một mà không cần cài đặt bất kỳ phần mềm nào trên máy chủ không?

Làm thế nào để các tập tin phải được tổ chức?


Chỉnh sửa: Tôi phải làm gì đó sai ... ai đó có thể vui lòng giúp tôi không? Tôi có kho lưu trữ tại http://quickmediasolutions.com/apt/dists

Tôi không chắc chắn ở đâu hoặc cái gì, nhưng cái gì đó được cấu hình sai. Tôi hiện chỉ có một gói và nó dành cho tất cả các kiến ​​trúc.

Đây là những gì đã được thêm vào /etc/apt/sources.list của tôi:

deb http://quickmediasolutions.com/apt stable main
52
Nathan Osman

Thiết lập một kho lưu trữ tầm thường rất dễ dàng bằng cách sử dụng các gói quét dpkg. Trang này giải thích cách thiết lập repo tầm thường và cái này giải thích cách sử dụng nó (cuộn xuống ví dụ 4).

26
Michael Crenshaw

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 tệp *.deb 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 khóa ký gpg 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 $KEYNAME duy nhất khi được yêu cầu. (Các ví dụ khác giả sử "dpkg1" làm 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 thư mục kho lưu trữ /apt/ mới trên máy chủ web của bạn, nhưng xóa khóa secret.gpg sau khi khởi tạo .

Cập nhật tập lệnh CGI

Đây là tập lệnh 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 dòng gpg 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 gốc tài liệu). Chỉ xóa 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ỳ tệp *.deb nào mà bạn thả vào, nhưng cũng tìm kiếm đệ quy (bắt đầu từ một cấp lên) cho người khác và liên kết chúng vào. (Cần .htaccess Options FollowSymLinks).

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ì đó là kho lưu trữ apt "tầm thường", nó cần mục apt-sources.list 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 cờ trusted=yes theo thói quen cho mọi thứ hoặc nếu bạn không thực sự chắc chắn về gói Origin.

Để sử dụng

Đối với người dùng cuối, chỉ cần thả HEADER.html vào thư mục kho lưu trữ. Apaches mod_auto_index sẽ thêm vào 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 tập tin 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à cái nĩa 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.)

40
mario

Vâng. Bạn có thể làm được việc này. Bạn chỉ cần sắp xếp các tệp theo đúng cách và tạo các tệp chỉ mục. Nếu bạn đặt cấu trúc thư mục bên trong thư mục gốc của máy chủ web, các gói chỉ có thể được truy cập qua máy chủ web.

Ở đây là một mô tả chi tiết về cách tổ chức các tệp và cách tạo các tệp chỉ mục.

Bạn cũng có thể sử dụng một công cụ có tên reprepro nếu bạn sẵn sàng cài đặt một gói đó. Điều này sẽ làm cho chính quyền thuận tiện hơn một chút.

7
txwikinger

Có lẽ bạn cũng có thể xem xét một Launchpad PPA

2
ups

Đối với bất kỳ ai phải đối mặt với lỗi này sau khi làm theo câu trả lời của mario:

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

làm như sau:

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

Tôi đặt các tệp *.deb của mình trong thư mục debs.

0
theeminence