Làm cách nào tôi có thể cài đặt nhiều phiên bản phần mềm gần đây hơn những gì Debian cung cấp?


26

Giả sử tôi muốn có phiên bản phần mềm gần đây hơn phiên bản hệ điều hành hiện tại, tôi có thể làm gì?

Các trường hợp cần xem xét:

  1. Có các nguồn chính thức / chính thức của các gói bổ sung có sẵn cho phiên bản HĐH đó. Ví dụ: backports.org cho Debian hoặc PPA cho Ubuntu.
  2. Không có phiên bản mới hơn của gói có sẵn cho phiên bản HĐH đó, nhưng có nhiều phiên bản gần đây hơn dành cho các phiên bản gần đây hơn của HĐH. Đây là trường hợp tiêu chuẩn cho backporting.
  3. Không có phiên bản đóng gói của các phiên bản mới hơn của phần mềm có sẵn. Các tùy chọn có sẵn là để gói phiên bản mới hơn.

Per Hãy biên soạn một danh sách các câu hỏi và câu hỏi kinh điển vì đây được dự định là nơi để đưa ra các câu trả lời chính tắc cho phần sau. Câu trả lời có lẽ nên được thực hiện trên cộng đồng wiki.


Đây là phân phối cụ thể cao. Tốt hơn làm cho nó một câu hỏi cho mỗi phân phối.
Gilles 'SO- ngừng trở nên xấu xa'

2
@Gilles Câu hỏi không phân phối cụ thể. Tôi nghĩ sẽ tốt hơn nếu có một câu hỏi, với câu trả lời cho các bản phân phối khác nhau.
Faheem Mitha

Một ví dụ về những gì đã làm và không hoạt động: Đối với Debian 8 tôi muốn MySQL 5.6. (Nhưng thông thường MySQL 5.5 chỉ có thể cài đặt được cho Debian 8. Tôi cần 5.6 để có thể so sánh với những thứ khác mà tôi đang làm.) Tôi đã cố gắng cài đặt backport 5.6 nhưng nó đã bị hỏng. Một số loại tệp trùng lặp đang được tải thông báo lỗi. Tôi đã báo cáo nhưng sau đó phải làm gì? Giải pháp: Tôi phát hiện ra rằng bạn có thể tải xuống MySQL 5.6 cụ thể cho Debian 8 trực tiếp từ trang web MySQL. Điều đó đã làm việc, NHƯNG ... hãy chắc chắn đọc bình luận LÀM VIỆC
Chế độ xem hình elip

Câu trả lời:


33

(Nếu bạn có câu hỏi / nhận xét về câu trả lời này, vui lòng thêm nhận xét. Hoặc, nếu bạn có đủ đại diện, bạn có thể ping tôi trong trò chuyện.)

Cài đặt trực tiếp các gói nhị phân từ phiên bản Debian mới hơn - không phải là câu trả lời.

Giả sử bạn đang chạy một số phiên bản phân phối dựa trên Debian. Bạn muốn có một phiên bản gần đây của một gói hơn là có sẵn cho bạn. Điều đầu tiên mà mọi người mới bắt đầu đều cố gắng thực hiện để cài đặt gói nhị phân trực tiếp trên phiên bản Debian của bạn. Điều này có thể hoặc không hoạt động, tùy thuộc vào phiên bản bạn đang chạy và gói mới hơn bao nhiêu. Nói chung, thủ tục này sẽ không hoạt động tốt.

Ví dụ, xem xét trường hợp một người đang cố gắng cài đặt gói nhị phân từ thử nghiệm / không ổn định trực tiếp trên ổn định. Điều này rất có thể sẽ không diễn ra tốt đẹp, trừ khi thử nghiệm / không ổn định xảy ra rất gần với ổn định tại thời điểm đó. Lý do liên quan đến bản chất của phân phối nhị phân dựa trên Linux như Debian. Các hệ điều hành như vậy phụ thuộc rất nhiều vào các thư viện dùng chung và các phụ thuộc này thường phụ thuộc rất chặt chẽ vào phiên bản; thường là nhiều hơn mức cần thiết Debian hiện không có cách tốt để làm cho các phụ thuộc phiên bản trở nên "chặt chẽ" - một cách ngắn gọn để nói rằng sự phụ thuộc phiên bản chính xác là hạn chế khi cần thiết.

Điều này có ý nghĩa gì với người dùng? Ví dụ, giả sử bạn đang cố gắng cài đặt nói slrntừ Debian không ổn định sang Debian ổn định. Điều này sẽ trông như thế nào?

# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.

Mặc dù lỗi được tạo ra bởi apt, không có gói bị hỏng ở đây. Vì vậy, những gì đã đi sai? Vấn đề là phiên bản libc6không ổn định slrnđược biên dịch lại khác nhau (và có số phiên bản cao hơn) so với phiên bản có sẵn trên Debian ổn định. ( libc6là thư viện GNU C. Thư viện C là trung tâm của bất kỳ hệ điều hành nào giống Unix và thư viện GNU C là phiên bản mà các hệ điều hành dựa trên Linux thường sử dụng.)

Do đó, không ổn định slrnđòi hỏi một phiên bản được đánh số cao libc6hơn so với có sẵn cho ổn định. Lưu ý rằng bởi vì một gói đã được biên dịch dựa trên phiên bản cao hơn của thư viện không nhất thiết yêu cầu phiên bản cao hơn của thư viện đó, nhưng nó thường là như vậy.

Cú pháp

apt-get install slrn/unstable

có nghĩa là: sử dụng không ổn định slrnnhưng đối với tất cả các gói khác chỉ sử dụng các phiên bản từ ổn định. Để chính xác hơn, nó sử dụng số ưu tiên. Xem man apt_preferencesđể biết chi tiết.

Ai cũng có thể làm

apt-get install -t unstable slrn

Điều này có nhiều khả năng làm việc, nhưng bạn thường không muốn làm điều đó. Tại sao?

Điều này có nghĩa là: tạm thời xử lý tất cả các gói không ổn định trên cơ sở bình đẳng với các gói ổn định. Do đó, điều này sẽ kéo theo sự slrnphụ thuộc của không ổn định từ không ổn định nếu chúng có số phiên bản cao hơn và chúng thường sẽ như vậy. Điều này thường sẽ bao gồm thư viện GNU C vì những lý do đã được giải thích. Bây giờ, cách tiếp cận này nói chung sẽ "thành công", theo đó, các phụ thuộc sẽ được thỏa mãn theo định nghĩa (không ổn định slrncó các phụ thuộc được thỏa mãn không ổn định), nhưng bạn kết thúc với một gói hỗn hợp đột nhiên bị buộc phải chạy với các phiên bản của thư viện khác với những gì họ được xây dựng cho. Điều này có lẽ sẽ không kết thúc tốt.

Câu trả lời là ... BACKPORTS!

Vì vậy, cách chính xác để làm điều này là gì? Đó là xây dựng lại các nguồn Debian của các phiên bản gần đây hơn trên hệ thống của bạn, thường được gọi là "backporting". Hãy xem xét các trường hợp sau:

Có các nguồn chính thức / chính thức của các gói bổ sung có sẵn cho phiên bản Debian đó.

Nơi đầu tiên để tìm là Debian Backports , đây là trang web chính thức cho backport Debian.

Ví dụ cụ thể:

Thêm dòng backport thích hợp cho bản phát hành và cập nhật của bạn để tìm các gói mới sau đó cài đặt một cái gì đó từ backport một cách rõ ràng (vì backport bị vô hiệu hóa theo mặc định).

echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git

Điều này sẽ có phiên bản ổn định mới nhất của git có các tính năng mới hữu ích hơn so với phiên bản ổn định đi kèm (ví dụ 'bao gồm' cho phép bạn kết hợp nhiều tệp cấu hình hoặc thay đổi tên người dùng của mình cho ~ / work / dự án / vs ~ / Personal / dự án /).

Một nơi khác để xem xét là các PPA khác nhau của các nhà bảo trì Ubuntu. Bạn có thể thực hiện tìm kiếm "packagename PPA".

Không có phiên bản mới hơn của gói có sẵn cho phiên bản HĐH đó, nhưng có nhiều phiên bản gần đây hơn dành cho các phiên bản / phiên bản mới hơn của HĐH. Đây là trường hợp tiêu chuẩn cho backporting.

Backporting có nghĩa là bạn xây dựng lại các nguồn Debian từ phiên bản Debian mới hơn trên phiên bản bạn đang chạy. Thủ tục này có thể dễ dàng hoặc liên quan và khó khăn tùy thuộc vào gói. Dưới đây là một phác thảo về cách làm điều này.

Hướng dẫn Backporting ngắn gọn cho người mới bắt đầu

Để cụ thể, tôi sẽ cho rằng bạn đang chạy ổn định Debian hiện tại, hiện đang khò khè. Tôi sẽ sử dụng gói slrnlàm ví dụ.

Đầu tiên, lưu ý rằng tất cả các tệp đóng gói Debian nằm trong debian/thư mục con của thư mục nguồn.

Bước đầu tiên là kiểm tra xem có phiên bản mới hơn không. Bạn có thể làm điều này bằng cách sử dụng apt-cache policy.

apt-cache policy slrn

slrn:
  Installed: 1.0.0~pre18-1.3
  Candidate: 1.0.0~pre18-1.3
  Version table:
     1.0.1-10 0
         50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
         50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
 *** 1.0.0~pre18-1.3 0
        500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status
     1.0.0~pre18-1.1 0
        500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages

Chúng tôi muốn backport 1.0.1-10.

BƯỚC 1:

Lưu ý: Đảm bảo rằng các deb-srcdòng cho phiên bản nguồn bạn muốn tải xuống xuất hiện trong /etc/apt/sources.list. Ví dụ: nếu bạn muốn tải xuống phiên bản không ổn định slrn, bạn cần deb-srcdòng không ổn định hoặc nó sẽ không hoạt động. Lưu ý rằng bạn không cần các debdòng tương ứng để tải xuống các nguồn, mặc dù apt-cache policysử dụng thông tin đó, vì vậy nếu bạn không có các debdòng tương ứng , thì apt-cache policysẽ không hiển thị cho bạn (các) phiên bản có liên quan. Nếu bạn có các debdòng, đừng quên ghim các phiên bản mới hơn bằng cách sử dụng một mục trong /etc/apt/preferenceshoặc tương tự. Một mục trong /etc/apt/preferencesnhư thế này (cho không ổn định) sẽ làm việc, ví dụ.

Package: *
Pin: release a=unstable
Pin-Priority: 50

Nếu bạn thêm dòng vào /etc/apt/sources.list, đừng quên chạy apt-get updatesau đó.

Tải về các nguồn cho slrn. Một nơi tốt là /usr/local/src/slrn.

apt-get source slrn=1.0.1-10

BƯỚC 2:

Thay đổi số phiên bản một chút, để phân biệt backport của bạn với phiên bản ngược dòng. Chạy dch -i, nó sẽ tự động thêm một mục vào debian/changelogtập tin. Sau đó thay đổi mục để trông giống như thế này, ví dụ.

slrn (1.0.1-10.username) UNRELEASED; urgency=low

  * Backport to wheezy.

 -- User <user@domain>  Sun, 02 Feb 2014 23:54:13 +0530

BƯỚC 3:

Cố gắng xây dựng các nguồn. Nếu các gói cần thiết cho bản dựng không có sẵn, thì lần thử sẽ thất bại. Thay đổi thư mục vào thư mục nguồn. Sử dụng debuildtừ devtoolsgói.

cd slrn-1.0.1/
debuild -uc -us

Nếu các phụ thuộc xây dựng được thỏa mãn, thì các nguồn sẽ xây dựng và tạo ra một số tranh luận ở cấp trên thư mục nguồn; trong trường hợp này /usr/local/src/slrn.

BƯỚC 4:

Giả sử các phụ thuộc xây dựng không hài lòng. Sau đó, bạn cần phải cố gắng cài đặt các phụ thuộc xây dựng. Điều này có thể hoặc không thể hoạt động, vì các phụ thuộc có thể không có sẵn cho phiên bản của bạn, hoặc nếu có, có thể không có sẵn trong phiên bản phù hợp.

Lưu ý: Thật không may, các gói Debian không yêu cầu các phiên bản phụ thuộc xây dựng cao hơn mức cần thiết. Debian không có cách tự động để kiểm tra điều này và thường các nhà bảo trì gói không quan tâm miễn là nó hoạt động trên phiên bản / bản phát hành tương ứng. Do đó, hãy có thái độ hoài nghi đối với các phiên bản phụ thuộc và sử dụng thông thường. Ví dụ, các gói được sử dụng rộng rãi như Python và các công cụ GNU sẽ không phụ thuộc vào các phiên bản phụ thuộc rất cụ thể của chúng, bất kể gói đóng gói Debian liệt kê gì.

Trong mọi trường hợp, bạn có thể thử cài đặt chúng

apt-get build-dep slrn=1.0.1-10

Nếu điều này thành công, hãy thử xây dựng lại gói (BƯỚC 2). Nếu thất bại, thì công việc tiếp theo là cần thiết. Lưu ý rằng hãy debuildxem Phụ thuộc bản dựng trong debian/controltệp và bạn có thể thay đổi các tùy chọn này nếu cần. Vì vậy, hãy để chúng tôi nói về điều đó bây giờ. Dưới đây là các phụ thuộc xây dựng cho slrn.

Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
 exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
 libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews

Một cách khác để sử dụng apt-get build-deplà cài đặt chúng bằng tay, bằng cách thực hiện

apt-get install debhelper libslang2-dev ...

Nếu bạn bắt đầu thay đổi các giá trị này trong tệp điều khiển, thì bạn nên chuyển sang cài đặt thủ công, vì khi đó apt-get build-depsẽ không còn thực hiện đúng.

Không có phiên bản đóng gói của các phiên bản mới hơn của phần mềm có sẵn. Các tùy chọn có sẵn là để gói phiên bản mới hơn.

Trong nhiều trường hợp, người ta có thể sử dụng lại bao bì từ các phiên bản trước của phần mềm kết hợp với các nguồn mới hơn. Cách tiếp cận này có thể gặp vấn đề, đáng chú ý là các bản vá được áp dụng cho các phiên bản phần mềm trước đó có thể không áp dụng ở đây, vì vậy người ta có thể cần phải đồng bộ lại chúng với các nguồn. Định dạng nguồn 3.0 (quilt) hiện đang trở thành tiêu chuẩn sử dụng quilt và các bản vá được đặt trong debian/patchesthư mục.

Tuy nhiên, một cuộc thảo luận chi tiết về những vấn đề này nằm ngoài phạm vi của bài đăng này.


Đây thực sự là phân phối chung (chỉ có các bộ lặp mã cho các nội dung mới hơn có thể được gọi khác nhau hoặc bạn sẽ phải lấy nội dung từ các vị trí đặc biệt). Kiểm tra hướng dẫn phân phối của bạn.
vonbrand

2

Một cách luôn hoạt động, không chỉ trong Debian, là tự mình biên dịch phần mềm cần thiết. (Tôi đã làm điều này trong nhiều năm nay trên Debian, cả khi tôi cần một phiên bản mới hơn có sẵn và khi phần mềm hoàn toàn không được cung cấp).

Tôi lưu trữ các gói được biên dịch cục bộ trong /use/localviệc sử dụng stow, cho phép tôi lưu trữ tất cả các tệp liên quan đến một gói trong cây thư mục con và sau đó tạo liên kết tượng trưng cho cây đó. Điều đó làm cho việc quản lý các gói được biên dịch trở nên dễ dàng: Các tệp được cài đặt không xung đột với các tệp do Debian cung cấp và tôi có thể xóa gói bằng một lệnh.

Các bước để biên dịch và cài đặt một gói, some_softwarethường là một biến thể sau:

  1. Tải .tartập tin vv vào /usr/local/src/.

  2. Tạo một tệp /usr/local/packages/some_softwaremô tả nơi tôi đã tải xuống phần mềm, nó làm gì, phiên bản nào và có ghi chú những gì tôi phải làm để biên dịch phần mềm (xem bên dưới).

  3. Giải nén nội dung của .tartập tin vào /usr/local/tmp/some_software.

  4. Ngoài ra, nếu biên dịch từ kho lưu trữ, hãy kiểm tra kho lưu trữ trong thư mục con phù hợp (ví dụ /usr/local/git/some_software) và biên dịch ở đó,

  5. cdvào thư mục này, nhìn vào README, INSTALLv.v.

  6. Trong hầu hết các trường hợp, có một tập lệnh autotools cho configuregói. Gọi với ./configure --prefix /usr/local/stow/some_software-versioncác tập tin được cài đặt trong thư mục con này. Nếu không, hãy đọc Makefilevà tìm ra cách đặt đường dẫn cho các tệp đã cài đặt.

  7. Biên dịch với make.

  8. Cài đặt với make install.

  9. cd /usr/local/stow, sau đó stow some_software-version

  10. Kiểm tra nếu nó hoạt động.

Việc biên dịch thường không hoạt động trong lần thử đầu tiên: Gói có thể cần các thư viện và các tệp bao gồm tương ứng, do đó người ta phải cài đặt các ...-devgói chính xác từ Debian. Hoặc gcccó thể khiếu nại về nội dung mà phiên bản khác gccmà tác giả của gói đã sử dụng không phàn nàn. Vì vậy, đôi khi người ta phải đọc mã và sửa chúng, nhưng điều đó không xảy ra quá thường xuyên.


Ý định của câu hỏi này, mặc dù có lẽ điều này không rõ ràng, là để mô tả cách cài đặt các gói phần mềm cho Debian. Có lẽ tôi nên làm cho câu hỏi rõ ràng hơn. Có stowtạo các gói Debian không? Từ trang người đàn ông, nó không giống như nó.
Faheem Mitha

@FaheemMitha Stow không biết về các gói Debian. Nó chỉ quản lý các liên kết tượng trưng từ một tập hợp các thư mục cài đặt riêng biệt đến một thư mục duy nhất.
Kusalananda

@FaheemMitha: Nếu bạn muốn biến phần mềm tự biên dịch thành gói Debian , thì bạn phải tự đóng gói phần mềm, giống như trình bảo trì gói Debian. Nhưng đó là quá nhiều rắc rối nếu bạn sẽ là người dùng duy nhất, việc cài đặt nó /usr/localrất đơn giản và stowgiúp quản lý các tệp được lưu trữ ở đó. Hoặc đặt khác đi: Phần mềm không phải ở trong gói Debian để sử dụng nó trên Debian.
dirkt

Có một lợi thế lớn để đóng gói phần mềm dưới dạng gói Debian, ngay cả khi chỉ sử dụng cục bộ: nếu bạn mô tả chính xác các phụ thuộc, cài đặt gói sẽ đảm bảo các phụ thuộc vẫn được cài đặt ...
Stephen Kitt

@StephenKitt: Nếu khóa học đóng gói phần mềm đúng cách như gói Debian là giải pháp ưu việt. Nhược điểm là phải đầu tư thời gian để đóng gói đúng cách ...
dirkt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.