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 Python
và Bash 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 |
# 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
# 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
|
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ư freetype và
freetype2), 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 freetype có SLOT="1" và 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, sysklogd và syslog-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 ]
[ > ]
[ >> ]
Tài liệu này sử dụng giấy phép Creative Commons -
Attribution / Share Alike.
|