(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 slrn
từ 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 libc6
khô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. ( libc6
là 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 libc6
hơ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 slrn
như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ự slrn
phụ 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 slrn
có 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 slrn
là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-src
dò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-src
dò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 deb
dòng tương ứng để tải xuống các nguồn, mặc dù apt-cache policy
sử dụng thông tin đó, vì vậy nếu bạn không có các deb
dòng tương ứng , thì apt-cache policy
sẽ 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 deb
dò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/preferences
hoặc tương tự. Một mục trong /etc/apt/preferences
như 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 update
sau đó.
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/changelog
tậ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 debuild
từ devtools
gó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 debuild
xem Phụ thuộc bản dựng trong debian/control
tệ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-dep
là 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-dep
sẽ 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/patches
thư 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.