Gentoo Logo

Disclaimer : This document is not valid and is not maintained anymore.


[ << ] [ < ] [ Về đầu ] [ > ] [ >> ]


1. Giới thiệu về Portage

Nội dung:

1.a. Giới thiệu Portage

Portage có lẽ là đổi mới đáng chú ý nhất trong quản lý phần mềm. Với tính mềm dẻo cao và một lượng đáng kể các tính năng, nó thường được xem là công cụ quản lý phần mềm tốt nhất cho Linux.

Portage được viết hoàn toàn bằng PythonBash do đó người dùng có thể xem được vì chúng đều là scripting language.

Hầu hết người dùng sẽ làm việc với Portage thông qua công cụ emerge. Chương này sẽ không lặp lại những thông tin về emerge đã có trong man page. Để có danh sách đầy đủ các tùy chọn của emerge, vui lòng xem man page:

Mã 1.1: Đọc man page của emerge

$ man emerge

1.b. Cây Portage

Ebuild

Khi nói về các gói phần mềm, chúng ta thường ám chỉ tên phần mềm mà người dùng có thể dùng thông qua cây Portage. Cây Portage là một tập các ebuild, những tập tin chứa mọi thông tin cần thiết để quản lý phần mềm (cài đặt, tìm kiếm, truy vấn ...). Những ebuild này mặc định nằm trong /usr/portage.

Bất cứ khi nào bạn yêu cầu Portage thực hiện vài hành động liên quan đến các nhãn phần mềm, nó sẽ dùng những ebuild trên hệ thống làm cơ sở. Do đó điều quan trọng là bạn cần thường xuyên cập nhật những ebuild trên hệ thống của bạn để Portage biết về những phần mềm mới, những cập nhật bảo mật ...

Cập nhật cây Portage

Cây Portage được cập nhật bằng rsync, một tiện ích truyền tập tin tăng tiến có tốc độ nhanh. Việc cập nhật đơn giản là dùng lệnh emerge và tùy chọn --sync:

Mã 2.1: Cập nhật cây Portage

# emerge --sync

Nếu do firewall hoặc vì lý do nào khác bạn không thể dùng rsync, bạn vẫn có thể cập nhật cây Portage thông qua các bản sao cây Portage được cập nhật hằng ngày. Công cụ emerge-webrsync sẽ tự động lấy về và cài đặt các bản cập nhật mới cho cho hệ thống của bạn:

Mã 2.2: Chạy emerge-webrsync

# emerge-webrsync

1.c. Quản lý phần mềm

Tìm phần mềm

Để tìm phần mềm trên cây Portage, bạn có thể dùng tiện ích tìm sẵn có bên trong emerge. Mặc định emerge --search sẽ trả về tên các gói trùng khớp (một phần hoặc toàn bộ) với chuỗi tìm kiếm.

Ví dụ, để tìm mọi gói trong tên có chữ "pdf":

Mã 3.1: Tìm các gói có chữ pdf

$ emerge --search pdf

Nếu bạn muốn tìm dựa trên mô tả luôn, bạn có thể dùng tùy chọn --searchdesc (hoặc -S):

Mã 3.2: Tìm các gói liên quan đến pdf

$ emerge --searchdesc pdf

Khi bạn xem kết quả, bạn sẽ chú ý rằng chúng đưa ra rất nhiều thông tin. Các thông tin đều được mô tả rõ ràng nên chúng tôi sẽ không đi sâu vào giải thích ý nghĩa của chúng:

Mã 3.3: Ví dụ kết quả 'emerge --search'

*  net-print/cups-pdf
      Latest version available: 1.5.2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 15 kB
      Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
      Description: Provides a virtual printer for CUPS to produce PDF files.
      License:     GPL-2

Cài đặt phần mềm

Khi bạn tìm được phần mềm bạn thích, bạn có thể dễ dàng cài đặt nó bằng emerge: chỉ cần thêm vào tên gói. Ví dụ, để cài đặt gnumeric:

Mã 3.4: Cài đặt gnumeric

# emerge gnumeric

Vì nhiều ứng dụng phụ thuộc vào các ứng dụng khác, bất cứ hành động định cài đặt phần mềm nào cũng có thể dẫn đến việc cài đặt vài phần mềm phụ thuộc. Đừng lo lắng, Portage có thể xử lý tốt các phụ thuộc. Nếu bạn muốn biết Portage sẽ cài đặt những gì khi bạn yêu cầu cài đặt một phần mềm nhất định, hãy thêm tùy chọn --pretend. Ví dụ:

Mã 3.5: Giả vờ cài gnumeric

# emerge --pretend gnumeric

Khi bạn yêu cầu cài đặt phần mềm, nó sẽ tải về mã nguồn cần thiết từ Internet (nếu cần) và lưu vào (mặc định) trong /usr/portage/distfiles. Sau đó nó sẽ bung mã nguồn ra, biên dịch và cài đặt phần mềm. Nếu bạn chỉ muốn tải mã nguồn về mà không cài đặt, hãy thêm tùy chọn --fetchonly vào lệnh emerge:

Mã 3.6: Tải về mã nguồn gnumeric

# emerge --fetchonly gnumeric

Tìm tài liệu các gói đã cài đặt

Nhiều gói đi kèm với tài liệu riêng. Đôi khi USE flag doc xác định xem có cần cài đặt tài liệu hay không. Bạn có thể kiểm tra xem có dùng USE flag doc hay không bằng lệnh emerge -vp <tên gói>.

Mã 3.7: Kiểm tra xem có dùng USE flag doc hay không

(Dĩ nhiên alsa-lib chỉ là một ví dụ)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.9_rc3  +doc -jack 674 kB

Bạn có thể bật hoặc tắt USE flag doc, hoặc toàn cục trong tập tin /etc/make.conf, hoặc cho từng gói trong tập tin /etc/portage/package.use. Chương USE Flag sẽ đề cập chi tiết vấn đề này.

Khi đã cài đặt xong, tài liệu thường nằm trong thư mục con có tên là tên gói, nằm trong thư mục /usr/share/doc. Bạn cũng có thể liệt kê danh sách tất cả các tập tin được cài đặt bằng công cụ equery, một phần của gói app-portage/gentoolkit.

Mã 3.8: Tìm tài liệu của gói

# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3
total 28
-rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
-rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x  2 root root 8560 May 17 21:54 html
-rw-r--r--  1 root root  196 May 17 21:54 TODO.gz

(Thay vì vậy, dùng equery để tìm tập tin:)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.9_rc3
* Contents of media-libs/alsa-lib-1.0.9_rc3:
/usr
/usr/bin
/usr/bin/alsalisp
(Phần kết quả còn lại bị cắt bớt)

Xóa phần mềm

Khi bạn muốn xóa phần mềm khỏi hệ thống, hãy dùng emerge --unmerge. Nó sẽ xóa mọi tập tin thuộc về gói phần mềm đó khỏi hệ thống trừ những tập tin cấu hình của phần mềm đó nếu bạn đã thay đổi nội dung sau khi cài đặt. Việc để lại những tập tin cấu hình sẽ cho phép bạn chạy phần mềm đó lại nếu một mai bạn quyết định cài lại phần mềm đó.

Tuy nhiên có một cảnh báo lớn: Portage sẽ không kiểm tra xem gói phần mềm bạn định xóa có cần thiết cho phần mềm nào khác trên hệ thống hay không. Nhưng nó sẽ cảnh báo bạn khi bạn muốn xóa một phần mềm quan trọng, có thể phá hỏng toàn hệ thống nếu bạn lỡ tay xóa phần mềm đó.

Mã 3.9: Xóa gnumeric khỏi hệ thống

# emerge --unmerge gnumeric

Khi bạn xóa một gói phần mềm khỏi hệ thống, các gói phụ thuộc của nó, được cài đặt tự động, sẽ vẫn nằm trên hệ thống. Để xác định những phụ thuộc có thể xóa, hãy dùng tính năng --depclean của emerge. Chúng ta sẽ nói về nó sau.

Cập nhật hệ thống

Để giữ cho hệ thống hoạt động tốt (không kể đến việc cài đặt các bản cập nhật mới nhất), bạn cần cập nhật hệ thống thường xuyên. Vì Portage chỉ kiểm tra những ebuild trong cây Portage, trước tiên bạn nên cập nhật cây Portage. Sau khi đã cập nhật cây Portage, bạn có thể cập nhật hệ thống với lệnh emerge --update world. Trong ví dụ kế, chúng tôi sẽ dùng tuỳ chọn --ask để báo Portage hiển thị danh sách các gói cần cài đặt trước và hỏi lại để xác nhận xem bạn có muốn tiếp tục cài đặt không:

Mã 3.10: Cập nhật hệ thống

# emerge --update --ask world

Portage sẽ tìm những phiên bản mới của các ứng dụng đã được cài đặt trên hệ thống. Tuy nhiên, nó chỉ kiểm tra phiên bản của những ứng dụng được cài đặt trực tiếp, không phải các ứng dụng phụ thuộc. Nếu bạn muốn cập nhật từng gói phần mềm một trên hệ thống, bạn nên thêm đối số --deep:

Mã 3.11: Cập nhật toàn bộ hệ thống

# emerge --update --deep world

Vì các bản cập nhập bảo mật thường xuất hiện trong các gói mà bạn không trực tiếp cài đặt vào hệ thống (nhưng được cài vào do là gói cần thiết cho các gói khác), do đó ít nhất bạn nên chạy lệnh này thỉnh thoảng một lần.

Nếu bạn thay đổi USE flag sau đó, bạn có thể cần thêm --newuse. Portage sẽ kiểm tra những gói cần cài đặt mới hoặc cài đặt lại:

Mã 3.12: Thực hiện cập nhật toàn bộ

# emerge --update --deep --newuse world

Metapackage

Vài gói trong cây Portage không có nội dung thật sự mà được dùng để cài đặt một tập hợp các gói khác. Ví dụ, gói kde sẽ cài đặt toàn bộ môi trường KDE vào hệ thống bằng cách lấy các gói liên quan đến KDE về dưới dạng gói phụ thuộc.

Nếu bạn muốn loại bỏ gói dạng này khỏi hệ thống, chạy emerge --unmerge với gói đó không có tác động gì vì những gói phụ thuộc vẫn còn trên hệ thống.

Portage có thể loại bỏ các gói phụ thuộc mồ côi, nhưng vì sự hiện diện có sẵn của phần là loại phụ thuộc rất động, bạn nên cập nhật toàn bộ hệ thống trước, bao gồm cả những thay đổi xảy ra do thay đổi USE flag Sau đó bạn có thể chạy emerge --depclean để loại bỏ những phụ thuộc mồ côi. Khi hoàn tất, bạn cần xây dựng lại các ứng dụng đã liên kết động với những phần mềm đã bị loại bỏ, nhưng không còn cần nó nữa.

Tất cả mọi việc được xử lý với ba lệnh sau:

Mã 3.13: Loại bỏ các phụ thuộc mồ côi

# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild

revdep-rebuild nằm trong gói gentoolkit; đừng quên emerge nó trước khi dùng:

Mã 3.14: Cài đặt gói gentoolkit

# emerge gentoolkit

1.d. Khi Portage than phiền...

Giới thiệu SLOT, Virtual, Branch, Architecture và Profile

Như đã nói, Portage cực kỳ mạnh và hỗ trợ nhiều tính năng mà các công cụ quản lý phần mềm khác thiếu. Để hiểu điều này, chúng tôi sẽ giải thích một vài mặt của Portage mà không đi sâu vào chi tiết.

Với Portage, các phiên bản khác nhau của một gói có thể cùng tồn tại trên hệ thống. Trong khi những bản phân phối khác thường đặt tên những gói của họ theo phiên bản (như freetypefreetype2), Portage dùng kỹ thuật gọi là SLOT. Mỗi ebuild khai báo một SLOT nhất định cho phiên bản của nó. Ebuild với SLOT khác nhau sẽ có thể cùng tồn tại trên hệ thống. Ví dụ, gói freetypeSLOT="1"SLOT="2".

Ngoài ra còn có các gói cung cấp cùng tính năng nhưng cài đặt khác nhau. Ví dụ, metalogd, sysklogdsyslog-ng đều là system logger. Những ứng dụng phụ thuộc vào "một system logger" không thể phụ thuộc vào, ví dụ, metalogd, vì các system logger khác cũng là một lựa chọn tốt. Portage sử dụng virtual: mỗi system logger cung cấp virtual/syslog để ứng dụng có thể phụ thuộc vào virtual/syslog thay vì một system logger cụ thể.

Phần mềm trong cây Portage có thể nằm trong nhiều nhánh khác nhau. Theo mặc định, hệ thống chỉ chấp nhận những gói mà Gentoo cho là ổn định. Hầu hết các phần mềm mới khi được thêm vào, đều được thêm vào nhánh thử nghiệm, nghĩa là cần nhiều kiểm tra hơn trước khi có thể đánh dấu phần mềm đó là "ổn định". Mặc dù bạn thấy những ebuild cho những phần mềm này trong cây Portage, Portage sẽ không cập nhật lên những phiên bản này hoặc sử dụng những phần mềm này khi nào chúng vẫn còn chưa được đưa vào nhánh ổn định.

Vài phần mềm chỉ có cho một vài kiến trúc máy tính. Hoặc phần mềm không hoạt động trên kiến trúc khác, hoặc cần kiểm tra kỹ, hoặc developer đã thêm phần mềm vào không thể bảo đảm nó hoạt động trên các kiến trúc khác.

Mỗi bản cài đặt Gentoo dựa vào một profile nhất định, chứa nhiều thông tin, trong đó có danh sách các phần mềm cơ bản để hệ thống có thể hoạt động.

Blocked Package

Mã 4.1: Portage cảnh báo về blocked package (với --pretend)

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

Mã 4.2: Portage cảnh báo về blocked package (không có --pretend)

!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers. 

Ebuild chứa những thông tin cho phép Portage biết những gói phụ thuộc của ebuild đó. Có hai loại phụ thuộc: phụ thuộc khi dựng phần mềm, được khai báo trong DEPEND và phụ thuộc khi sử dụng phần mềm, khai báo trong RDEPEND. Khi một trong những phụ thuộc này đánh dấu một gói hoặc một gói ảo nào đó không tương thích, nó sẽ đánh dấu gói đó là blocked package nếu gói đó đã được cài đặt.

Để sửa lỗi này, bạn có thể chọn không cài đặt phần mềm đó, hoặc xóa phần mềm bị block đi. Trong ví dụ trên, bạn có thể chọn không cài đặt postfix hoặc xóa ssmtp trước.

Cũng có thể hai gói chưa được cài đặt lại block nhau. Trong trường hợp hiếm hoi này, bạn nên tìm hiểu tại sao cần cài đặt cả hai. Hầu hết trường hợp, bạn chỉ có thể làm việc với một trong hai gói mà thôi. Nếu không, vui lòng thông báo lỗi trên Hệ thống theo dõi lỗi của Gentoo.

Masked Package

Mã 4.3: Portage cảnh báo về masked package

!!! all ebuilds that could satisfy "bootsplash" have been masked. 

Mã 4.4: Portage cảnh báo về masked package - nguyên nhân

!!! possible candidates are:

- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- media-video/ati-gatos-4.3.0 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)

Khi bạn muốn cài đặt một gói không sẵn sàng cho hệ thống của bạn, bạn sẽ nhận được lỗi "masked package". Bạn nên thử cài đặt một phiên bản khác của ứng dụng nếu có cho hệ thống của bạn, hoặc đợi đến khi gói đó có thể sử dụng. Gói bị đánh dấu là masked package có lý do của nó:

  • ~arch keyword nghĩa là ứng dụng chưa được kiểm tra cẩn thận để có thể cho vào nhánh ổn định. Hãy chờ vài ngày hoặc vài tuần và thử lại.
  • -arch keyword hoặc -* keyword nghĩa là ứng dụng không hoạt động trên kiến trúc của bạn. Nếu bạn tin rằng nó hoạt động được, hãy thông báo trên bugzilla.
  • missing keyword nghĩa là ứng dụng chưa được kiểm tra trên kiến trúc của bạn. Hãy yêu cầu architecture porting team kiểm tra gói đó, hoặc bạn hãy kiểm tra và thông báo cho họ trên bugzilla.
  • package.mask nghĩa là gói bị hỏng, không ổn định hoặc tệ hơn và được đánh dấu đừng-nên-sử-dụng.
  • profile nghĩa là gói đó không thích hợp với profile của bạn. Ứng dụng đó có thể làm hỏng toàn hệ thống nếu bạn cài đặt nó hoặc đơn giản là nó không tương thích với profile bạn dùng.

Phụ thuộc bị thiếu

Mã 4.5: Portage cảnh báo thiếu phụ thuộc

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".

!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem. 

Ứng dụng bạn định cài cần những gói khác không sẵn sàng cho hệ thống của bạn. Vui lòng kiểm tra bugzilla xem có ai thông báo về vấn đề này chưa. Nếu chưa, vui lòng thông báo. Trừ khi bạn đang trộn nhiều nhánh với nhau, điều này không được xảy ra, bởi vậy nó là lỗi.

Tên ebuild nhập nhằng

Mã 4.6: Portage cảnh báo về nhập nhằng tên ebuild

!!! The short ebuild name "aterm" is ambiguous.  Please specify
!!! one of the following fully-qualified ebuild names instead:

    dev-libs/aterm
    x11-terms/aterm

Ứng dụng bạn muốn cài đặt có cùng tên với một gói khác. Bạn cần xác định nhóm ứng dụng của nó luôn. Portage sẽ cho bạn biết những khả năng có thể có để bạn chọn.

Phụ thuộc vòng

Mã 4.7: Portage cảnh báo về phụ thuộc vòng

!!! Error: circular dependencies: 

ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2 

Hai gói (hoặc nhiều hơn) bạn muốn cài phụ thuộc lẫn nhau và không thể được cài đặt. Điều này thường là lỗi trong cây Portage. Vui lòng rsync và thử lại. Bạn cũng có thể kiểm bugzilla xem có ai thông báo chưa. Nếu chưa, vui lòng thông báo lỗi.

Fetch failed

Mã 4.8: Portage cảnh báo lấy tập tin gặp lỗi

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

Portage không thể tải về mã nguồn cần thiết cho ứng dụng của bạn và sẽ tiếp tục cài đặt các ứng dụng khác (nếu có thể). Lỗi này thường do mirror chưa được đồng bộ, hoặc vì ebuild trỏ đến một địa chỉ sai. Server chứa mã nguồn có thể bị tắt vì lý do gì đó.

Hãy thử lại một giờ sau để xem vấn đề còn tồn tại hay không.

Bảo vệ profile hệ thống

Mã 4.9: Portage cảnh báo về gói được profile bảo vệ

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

Bạn đã yêu cầu loại bỏ một gói thuộc những gói cốt lõi của hệ thống. Profile của bạn đã chỉ rõ gói này là cần thiết và không được loại khỏi hệ thống.


[ << ] [ < ] [ Về đầu ] [ > ] [ >> ]


Bản in

View all

Cập nhật 16 Tháng hai 2006

The original version of this document was last updated February 9, 2013

Tóm tắt: Chương này giải thích những bước "đơn giản" người dùng cần biết để quản lý phần mềm trên hệ thống.

Sven Vermeulen
Author

Roy Marples
Author

Daniel Robbins
Author

Chris Houser
Author

Jerry Alexandratos
Author

Seemant Kulleen
Gentoo x86 Developer

Tavis Ormandy
Gentoo Alpha Developer

Jason Huebel
Gentoo AMD64 Developer

Guy Martin
Gentoo HPPA developer

Pieter Van den Abeele
Gentoo PPC developer

Joe Kallar
Gentoo SPARC developer

John P. Davis
Editor

Pierre-Henri Jondot
Editor

Eric Stockbridge
Editor

Rajiv Manglani
Editor

Jungmin Seo
Editor

Stoyan Zhekov
Editor

Jared Hudson
Editor

Colin Morey
Editor

Jorge Paulo
Editor

Carl Anderson
Editor

Jon Portnoy
Editor

Zack Gilburd
Editor

Jack Morgan
Editor

Benny Chuang
Editor

Erwin
Editor

Joshua Kinard
Editor

Tobias Scherbaum
Editor

Xavier Neys
Editor

Grant Goodyear
Reviewer

Gerald J. Normandin Jr.
Reviewer

Donnie Berkholz
Reviewer

Ken Nowack
Reviewer

Lars Weiler
Contributor

Nguyễn Thái Ngọc Duy
Translator

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.