banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Bản dịch tài liệu RPM Guide from docs.fedoraproject.org  XML
  [Question]   Bản dịch tài liệu RPM Guide from docs.fedoraproject.org 18/05/2007 05:19:19 (+0700) | #1 | 59836
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Bản tiếng Anh các bạn có thể xem tại:
http://docs.fedoraproject.org/drafts/rpm-guide-en/
Sau đây tớ xin dịch tóm tắt lại tài liệu này. Bài dịch của tớ chú trọng cú pháp lệnh, giải nghĩa các tham số và lưu ý khi thực hiện các lệnh nên một số phần lý thuyết các bạn vui lòng đọc trên site. Đây cũng là lần đầu tiên tớ viết bài dịch nên rất mong sự đóng góp và thông cảm của tất cả các bạn. Xin chân thành cảm ơn.

Chương 1. Giới thiệu về RPM

Chương này sẽ bao gồm các vấn đề sau:
  • Lịch sử quản lý gói

  • Giới thiệu tính năng RPM

  • Làm quen với công nghệ RPM

Một vài trình quản lý sẵn có cho Linux để track và thao tác với các ứng dụng đã được cài đặt trên hệ thống. Phần lớn sử dụng trình quản lý gói Linux đó là RPM Package Manager, gọi tắt là RPM.
Mặc dù ban đầu RPM được dùng để phát triển Red Hat Linux, nhưng ngày nay một loạt các tính năng công nghệ và sự điều chỉnh hợp lý đã làm cho RPM trở thành một chuẩn cho các phần mềm đóng gói dùng trên phần lớn các distro của Linux.

1.1 Sự cần thiết cho hệ thống quản lý gói trên Linux

1.2 RPM Design Goals


1.2.1. Sự thuận tiện khi cài đặt từ RPM

+ Việc cài đặt 1 gói sử dụng RPM chỉ cần 1 lệnh đơn:
Code:
rpm –U <tên file.RPM>

Trong khi cài đặt 1 gói từ nguồn, cần ít nhất 6 bước:
Code:
tar zxf software_package 
cd software_package 
./configure 
make 
su 
make install

Các phần 1.2.2 đến 1.2.8 các bạn đọc trên site

1.3 Công nghệ RPM

Khi làm việc với các gói RPM, hiểu được khái niệm gói là then chốt. Một gói RPM được cung cấp dưới dạng một file nén, chứa 1 hay nhiều file, với thông tin cài đặt rõ ràng từ những file đó, bao gồm sở hữu và quyền được apply với mỗi file trong suốt quá trình cài đặt. Chỉ dẫn cũng có thể chứa những đoạn script để chạy sau khi cài đặt hoặc trước khi gỡ bỏ

Để thuận tiện trong việc cài đặt và quản lý, các gói này được gán nhãn, với khả năng định danh cao. Thông thường, một gói gồm 4 phần như sau:

• kernel-smp-2.4.18-3.athlon.RPM
• kernel-smp-2.4.18-3.i586.RPM
• kernel-smp-2.4.18-3.i686.RPM
• kernel-source-2.4.18-3.i386.RPM
• rootfiles-7.2-1.noarch.RPM
Cấu trúc đặt tên file của 1 gói là:
name-version-release.architecture.RPM
Thông thường tên định danh chính là tên ứng dụng hoặc tên gói khi nó được cài đặt trên hệ thống.
Trường thứ 2 chính là phiên bản, trường này định nghĩa số phiên bản của phần mềm chứa đựng file gói
Mọi tên file gói còn có 1 trường thứ 3 gọi là “Trường phát hành”. Trường này lưu giữ ngày phát hành phiên bản phần mềm mà file gói chứa đựng. Các file gói chứa đựng cả phần mềm và chỉ dẫn về cách cài đặt. Với những gói đặc biệt, đôi khi trong file chỉ dẫn bao gồm luôn các lỗi từng phát sinh, và các bugs đã được fix trong các phiên bản trước
Trường cuối cùng trong tên file gói chính là kiểu kiến trúc, định danh các loại hệ thống và file đó tương thích. Ví dụ gói kernel-smp-2.4.18-3.athlon
Có dụng ý được sử dụng trên máy AMD Athlon CPU

RPM hỗ trợ nhiều loại kiến trúc khác nhau. Bảng sau liệt kê các kiến trúc có thể cho các nền tảng khác nhau với phiên bản RPM.\

Platform Architectures
Intel compatible 32-bit i386, i486, i586, i686, athlon
Intel compatible 64-bit ia64
HPAlpha (formerly Digital, Compaq) alpha, alphaev5, alphaev56, alphapca56, alphaev6, alphaev67
Sparc/Ultra Sparc (Sun) sparc, sparcv9, sparc64
ARM armv3l, armv4b, armv4l
MIPS mips, mipsel
Power PC ppc, ppciseries, ppcpseries, ppc64
Motorola 68000 series m68k, m68kmint
SGI MIPS Sgi
IBM RS6000 rs6000
IBM S/390 i370, s390x, s390
Platform independent noarch
 

Chú ý rằng 4 trường trong tên gói RPM được ngăn cách với nhau bởi dấu gạch ngang (-) hoặc dấu chấm (.). Cuối cùng luôn nhớ rằng tất cả các tên file gói RPM đều sử dụng phần mở rộng “.RPM” để biểu thị đó là một gói RPM.

1.4 Tóm tắt:

Hệ thống RPM được tạo ra không phải để giải quyết những vấn đề mang tính lý thuyết. Thay vào đó, nó là kết quả của những kinh nghiệm thực hành trong sự cố gắng quản lý các hệ thống với nhiều ứng dụng. Các gói RPM được xây dựng trên các hệ thống cũ hơn, được tạo ra để giải quyết một số vấn đề về quản trị hệ thống. RPM sẽ còn phát triển hơn nữa, và cố gắng để trở thành một giải pháp quản lý gói hoàn chỉnh

Phần lớn các hệ điều hành khác không hỗ trợ nhiều hơn 1,2 bộ vi xử lý. Linux thì có và còn có thể hơn nữa. Phần lớn các hệ điều hành khác cũng không bao gồm nhiều ứng dụng, linux thì có từ Open Office đến Apache Web server. Cuối cùng các hệ điều hành khác thường cung cấp các ứng dụng mã nguồn đóng, còn linux thì lại có đến hàng trăm mã nguồn mở.

Tóm tắt các tính năng của RPM:
+ hỗ trợ đa kiến trúc
+ Cho phép nhiều phiên bản phần mềm chạy song song
+ 1 file cho cả 1 chương trình
+ Yêu cầu chỉ 1 lệnh khi thực hiện
+ sử dụng mã nguồn mở

Hết chương 1.

Chương 2: Khái quát về RPM

Chương này bao gồm các vấn đề:
  • Hiểu biết về file gói

  • Querying the RPM database

  • Chạy các lệnh RPM

Làm việc với các gói, file, lệnh, database có thể rất phức tạp. Có hàng nghìn file trong hàng trăm gói cài đặt trên hệ thống của bạn. Bạn cần vài cách để quản lý tất cả. Hệ thống RPM có thể giúp bạn làm điều đó.
Chương này sẽ cung cấp một cái nhìn khái quát về các thành phần tạo nên hệ thống RPM cho việc quản lý gói: file gói, cơ sở dữ liệu và lệnh RPM

2.1 Hiểu biết về file gói

RPM cung cấp khả năng cài đặt, nâng cấp, gỡ bỏ các gói. Thông thường mỗi gói là một ứng dụng và các file cần thiết liên kết với ứng dụng đó. Ví dụ máy chủ web Apache sẽ có một số file cấu hình, một tập hợp lớn các file tài liệu và bản thân Apache. Tất cả nằm trong một gói RPM
Một thuận lợi chính của hệ thống RPM đó là: Một file RPM là một gói hoàn chỉnh

2.1.1 Định dạng file RPM

Một file gói RPM chứa 4 phần. Phần đầu là sự nhận biết chính, nó đánh dấu file như một gói RPM. Các phần sau lần lượt là: signature, header, và payload. Mỗi phần đều chứa những thông tin quan trọng về gói, mặc dù phần chứa nội dung thực sự về gói chính là payload.
Signature: giúp xác nhận tính toàn vẹn của một gói. Nó không kiểm tra lỗi trong các ứng dụng phần mềm. Thay vào đó, nó đảm bảo rằng bạn đã tải xuống một tài liệu RPM hợp lệ
Header: có thể chứa những khối dữ liệu thuộc về gói hoặc không. Nó chứa đựng những thông tin như là: thông điệp bản quyền, số phiên bản, hoặc tóm tắt về gói
Payload: chứa những file thực sự được sử dụng trong gói. Những file này được cài đặt khi bạn cài đặt gói

2.1.2 RPM nhị phân và RPM nguồn

Có 2 loại chính của các gói RPM, đó là RPM nhị phân và RPM nguồn. Một gói RPM nhị phân được biên dịch riêng cho một kiến trúc đặc biệt. Phần lớn những gói RPM nhị phân chứa đựng các ứng dụng hoàn chỉnh, số còn lại cung cấp các thư viện. Một số các chương trình, phần lớn là games sử dụng các thư viện này để nâng cao multimedia. RPM cung cấp các thư viện cho phép nhiều ứng dụng chia sẻ các thư viện giống nhau

2.1.3 Các gói RPM nguồn

Theo quy ước, các gói RPM nguồn có tên file kết thúc bằng .src.RPM
Các gói RPM nguồn chứa đựng tất cả các lệnh, thường là các scripts cần thiết để tạo lại các gói RPM nhị phân. Có gói RPM nguồn có nghĩa là bạn có thể tạo lại các gói RPM nhị phân bất cứ lúc nào. Đây là một điểm rất quan trọng của hệ thống RPM.

Ngoài ra nếu các bạn để ý trên các site cho download sẽ thấy có các gói kết thúc bằng: ppc.rpm (dành cho Pocket PC), và noarch.rpm (Không phụ thuộc vào kiến trúc - no architect).

2.2 Querying the RPM database

Cơ sở dữ liệu RPM chứa thông tin về tất cả các gói RPM cài đặt trên hệ thống của bạn. Bạn có thể sử dụng cơ sở dữ liệu này để query những gì đã cài đặt
Cơ sở dữ liệu RPM được lưu trong /var/lib/RPM và chứa đựng các file như sau:

• Basenames
• Conflictname
• __db.001
• __db.002
• __db.003
• Dirnames
• Filemd5s
• Group
• Installtid
• Name
• Packages
• Providename
• Provideversion
• Pubkeys
• Requirename
• Requireversion
• Sha1header
• Sigmd5
• Triggername
 

File __db.001 và các file tương tự là các file khóa của hệ thống RPM. Phần lớn các file quan trọng là các packages. Các file khác như name, provide name, group tồn tại nhằm làm tăng tốc độ truy cập với những loại thông tin đặc biệt

2.3 Chạy các lệnh RPM

2.3.1 Làm việc với lệnh rpm

Các tham số chính của RPM:

Upgrade/install -U --upgrade
Install -I --install
Remove -e --erase
Query -q --query
Verify -V --verify
Check signature -K --checksig
Freshen (upgrade) already-installed package -F --freshen
Initialize database None --initdb
Rebuild database None –rebuilddb
 

Để install hay upgrade một gói sử dụng lệnh:
Code:
rpm –U <tên file.RPM>

Để chi tiết hơn, bạn gõ lệnh
Code:
rpm –uvh <tên file.RPM>

Với tham số -h (hence), lệnh RPM sẽ in ra một loạt các hash mark, để thông báo rằng lệnh vẫn đang được chạy. Với tham số -v (verbose message), lệnh này sẽ cung cấp nhiều thông báo chi tiết hơn.
Để remove một gói, các bạn dùng tham số -e:
Code:
rpm –e <tên gói>

Lưu ý rằng, khi bạn cài đặt 1 gói, thì tên file sẽ có phần mở rộng “RPM”, còn khi gỡ bỏ hoặc xóa một gói thì sẽ không có phần mở rộng này. Tên file và tên gói không bắt buộc phải tương ứng, nhưng thông thường thì chúng giống nhau.

Để liệt kê tất cả các gói đã được cài đặt trên hệ thống của bạn:
Code:
rpm –qa

Thường thì danh sách này rất dài, và để sử dụng lệnh này một cách có hiệu quả hơn, chúng ta dùng:
Code:
rpm –qa | more


2.3.2 Các lệnh rpm khác

Hệ thống RPM còn có một số lệnh như: RPM build và RPM2cpio
RPMbuild giúp build một gói RPM
RPM2cpio sẽ export 1 file gói RPM theo một định dạng mà cpio chỉ định. Lệnh cpio làm việc với nhiều gói sao lưu. Bạn có thể liệt kê các file riêng lẻ trong 1 file nén cpio.
Để liệt kê các file trong 1 gói RPM, sử dụng lệnh:
Code:
rpm2cpio package_file.RPM | cpio –t


Lệnh rpm2cpio cũng có thể extract 1 file đơn từ gói RPM với tùy chọn –ivd
Code:
rpm2cpio xcopilot-0.6.6-3.i386.RPM | cpio –ivd


Hết chương 2.

Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Bản dịch tài liệu RPM Guide from docs.fedoraproject.org 18/05/2007 22:36:44 (+0700) | #2 | 60016
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Chương 3: Sử dụng RPM

Chương này bao gồm các vấn đề:
  • Cài đặt và nâng cấp phần mềm

  • Gỡ bỏ phần mềm


3.1 Lệnh rpm

Tất cả những gì bạn làm với gói RPM đều yêu cầu lệnh rpm. Những tác vụ thông thường như cài đặt và gỡ bỏ phần mềm có thể thao tác nhanh và hiệu quả. Cơ bản về lệnh rpm không quá khó, bạn có thể thực hiện những tác vụ cơ bản sau khi đọc xong chương này.

3.2 Nâng cấp và cài đặt phần mềm

3.2.1 Nâng cấp với lệnh rpm

Hầu hết các bước cài đặt sử dụng lệnh rpm với tùy chọn –U, cú pháp cơ bản là:
Code:
rpm –U package_name

Bạn cũng có thể sử dụng tùy chọn dài hơn là --upgrade thay thế cho –U

3.2.1.1 Kiểm tra một gói đã được cài đặt hay chưa

Bạn dùng lệnh
Code:
rpm –q <tên gói>

Nếu gói đó chưa được cài đặt bạn sẽ nhận được thông báo:
Code:
Package <tên gói> is not installed

3.2.1.2 Lấy thông tin phản hồi trong suốt quá trình cài đặt và nâng cấp

Tùy chọn –h đi với lệnh rpm sẽ in ra những ký hiệu #, còn được gọi là hash marks. Những hask marks này cung cấp một vài sự xác nhận rằng lệnh rpm vẫn đang được chạy. Điều này là quan trọng khi những gói lớn sẽ mất nhiều thời gian để cài đặt hoặc nâng cấp
Code:
rpm -Uh jikes-1.16-1.i386.rpm 
You'll see this output: 
########################################### [100%] 
########################################### [100%]

Nếu gói đó không được tạo chính xác, bạn sẽ nhìn thấy những cảnh báo như sau:
Code:
########################################### [100%] 
warning: user cabbey does not exist - using root 
warning: user cabbey does not exist - using root 
warning: user cabbey does not exist - using root 
########################################### [100%]

Bạn có thể cài đặt một gói nhiều hơn một lần. Nhưng khi upgrade nó sẽ remove tất cả các version khác của gói đó. Đây là một trong nhiều lý do sử dụng tùy chọn –U
Thêm vào các hash marks bạn có thể lấy được thông tin chi tiết hơn khi thực hiện lệnh rpm. Tùy chọn –v đi với lệnh rpm sẽ in ra thông tin chi tiết về lệnh đang chạy, cú pháp như sau:
Code:
rpm -Uhv jikes-1.16-1.i386.rpm

Với tùy chọn –v bạn sẽ nhìn thấy output như sau:
Code:
Preparing... ########################################### [100%] 
1:jikes ########################################### [100%]

Muốn có nhiều thông tin hơn nữa bạn có thể dùng tham số -vv (double verbose)
Code:
rpm -Uhvv jikes-1.16-1.i386.rpm
D: ============== jikes-1.16-1.i386.rpm 
D: Expected size: 702988 = lead(96)+sigs(100)+pad(4)+data(702788) 
D: Actual size: 702988 
D: jikes-1.16-1.i386.rpm: MD5 digest: OK (2dba32192eca23eb480d1d02a9b6c022) 
D: added binary package [0] 
D: found 0 source and 1 binary packages 
D: opening db environment /var/lib/rpm/Packages joinenv 
D: opening db index /var/lib/rpm/Packages rdonly mode=0x0 
D: locked db index /var/lib/rpm/Packages 
D: ========== +++ jikes-1.16-1 
D: opening db index /var/lib/rpm/Depends create mode=0x0 
D: Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 YES (rpmlib provides) 
D: opening db index /var/lib/rpm/Providename rdonly mode=0x0 
D: opening db index /var/lib/rpm/Pubkeys rdonly mode=0x0 
D: read h# 9 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: ld-linux.so.2 YES (db provides) 
D: read h# 9 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: libc.so.6 YES (db provides) 
D: read h# 9 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: libm.so.6 YES (db provides) 
D: read h# 633 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: libstdc++-libc6.2-2.so.3 YES (db provides) 
D: read h# 9 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: libc.so.6(GLIBC_2.0) YES (db provides) 
D: read h# 9 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: libc.so.6(GLIBC_2.1) YES (db provides) 
D: read h# 9 Header V3 DSA signature: NOKEY, key ID 897da07a 
D: Requires: libc.so.6(GLIBC_2.1.3) YES (db provides) 
D: Requires: rpmlib(CompressedFileNames) <= 3.0.4-1 YES (rpmlib provides) 
D: closed db index /var/lib/rpm/Pubkeys 
D: closed db index /var/lib/rpm/Depends 
D: closed db index /var/lib/rpm/Providename 
D: closed db index /var/lib/rpm/Packages 
D: closed db environment /var/lib/rpm/Packages 
D: ========== recording tsort relations 
D: ========== tsorting packages (order, #predecessors, #succesors, tree, depth)D: 0 0 0 0 0 +jikes-1.16-1 
D: installing binary packages 
D: opening db environment /var/lib/rpm/Packages joinenv 
D: opening db index /var/lib/rpm/Packages create mode=0x42 
D: getting list of mounted filesystems 
D: sanity checking 1 elments 
D: opening db index /var/lib/rpm/Name create mode=0x42 
D: read h# 707 Header sanity check: OK 
D: computing 3 file fingerprints 
Preparing... D: computing file dispositions 
D: opening db index /var/lib/rpm/Basenames create mode=0x42 
########################################### [100%] 
package jikes-1.16-1 is already installed 
D: closed db index /var/lib/rpm/Basenames 
D: closed db index /var/lib/rpm/Name 
D: closed db index /var/lib/rpm/Packages 
D: closed db environment /var/lib/rpm/Packages

Chú ý: Mặc dùng hầu hết các ứng dụng trên Linux và Unix sử dụng dấu trừ (-) để thực hiện lệnh. Nhưng với rpm, nhiều chương trình lại dùng hai dấu trừ (--) để gán cho một tham số dài hơn. Chẳng hạn khi bạn dùng: -U và –upgrade là tương đương.

Một tùy chọn hiếm khi sử dụng là –percent. Tùy chọn này in ra phần trăm hoàn thành của lệnh rpm. Tùy chọn này sẽ có ích khi bạn dùng lệnh rpm trong một vài lệnh khác, như là GUI tạo từ Perl, Python …
Cú pháp cơ bản là:
Code:
rpm -U --percent jikes-1.16-1.i386.rpm

Khi chạy lệnh này bạn sẽ nhìn thấy output như sau:
Code:
%% 0.000000 
%% 2.661902 
%% 5.318614 
%% 10.632039 
%% 15.945465 
%% 18.602177 
%% 23.915603 
%% 29.229028 
%% 34.542453 
%% 39.855879 
%% 45.169304 
%% 50.482729 
%% 53.139442 
%% 55.796154 
%% 61.109580 
%% 66.423005 
%% 71.736430 
%% 74.393143 
%% 79.706568 
%% 82.363281 
%% 87.676706 
%% 90.333419 
%% 95.646844 
%% 98.303557 
%% 99.422736 
%% 99.910411 
%% 99.994892 
%% 100.000000

3.2.1.3 Tác vụ cài đặt chi tiết

Khi một lệnh rpm cài đặt một gói, nó sẽ đi qua các bước sau:
+ Kiểm tra gói và các file muốn cài
+ Thực hiện preinstallation trước khi cài
+ Giải nén và đặt các file vào đúng vị trí
+ Thực hiện post-processing
+ Cập nhật rpm database
Khi kiểm tra 1 gói, rpm sẽ check tất cả các gói phụ thuộc vào nó. Các gói phụ thuộc, hiểu đơn giản là nó phải được cài trước khi gói chính có thể cài.
Ngoài ra khi check 1 gói, rpm cũng check tất cả các gói conflict với nó. Ví dụ khi bạn thử cài đặt 1 phiên bản cũ của một gói đè lên một phiên bản mới hơn.
Sau khi check, lệnh rpm sẽ thi hành các tác vụ preinstallation. Sau khi các công việc này hoàn tất, lệnh rpm sẽ bắt tay vào công việc và cài đặt các file trong gói. Các files này được lưu dưới định dạng nén bên trong file rpm.
Sau khi cài đặt, có thể có 1 vài tác vụ post-processing được thực hiện. Cuối cùng nó sẽ update RPM database để phản ánh các thông tin về gói mới. Việc này rất quan trọng, và cho phép bạn track packages.

3.2.1.4 Taking a Test Drive

Để test install or upgrade nhưng không tiến hành cài đặt bạn dùng tham số --test
Code:
rpm -U --test jikes-1.16-1.i386.rpm

Lệnh này sẽ không in ra output nếu quá trình test install hoặc upgrade diễn ra êm ả. Nếu không, bạn sẽ nhận được thông báo lỗi. Nếu gói đó đã được cài đặt bạn sẽ nhìn thấy thông báo như sau:
Code:
package jikes-1.16-1 is already installed

Nếu bạn biết về phần mềm bạn đang cài đặt, bạn có thể xác định các gói phụ thuộc khi nhìn thoáng qua. Ví dụ nếu bạn biết Ruby là một ngôn ngữ scripting, bạn có thể đoán rằng những gói bắt đầu với eruby như eruby-devel-0.9.8-2.i386.rpm, sẽ phụ thuộc vào gói ruby cơ bản.
Để làm điều này, bạn query cho bất kỳ gói ruby nào bằng lệnh
Code:
rpm -q ruby

Nếu bạn chưa cài đặt gói ruby bạn sẽ nhận được thông báo
Code:
package ruby is not installed

Chú ý: phần lớn các gói sử dụng tên viết thường (lowercase names), do đó bạn có thể expect rằng Ruby scripting language bắt đầu bởi ruby
Các gói phụ thuộc có thể trở thành cơn ác mộng đối với bạn, khi mà một gói phụ thuộc vào 1 số gói khác, và các gói này lại phụ thuộc vào 1 số gói khác
Lúc này bạn sẽ cần đến tuỳ chọn –test, bạn có thể check các gói phụ thuộc trước khi thử cài đặt. Ví dụ nếu bạn thử cài đặt gói eruby-devel-0.9.8-2.i386.rpm, bạn có thể chạy:
Code:
rpm -U --test eruby-devel-0.9.8-2.i386.rpm

Sau đó bạn sẽ nhìn thấy thông báo sau:
Code:
error: Failed dependencies: 
eruby-libs = 0.9.8 is needed by eruby-devel-0.9.8-2

Bây giờ bạn có thể biết rằng gói eruby-devel-0.9.8-2.i386.rpm phụ thuộc vào eruby-libs.
Lúc này bạn có thể test xem gói này có làm việc tốt không bằng lệnh
Code:
rpm -U --test eruby-libs-0.9.8-2.i386.rpm

Oa, lúc này output cho bạn biết gói này lại phụ thuộc vào các gói khác:
Code:
error: Failed dependencies: 
ruby-libs >= 1.6.4 is needed by eruby-libs-0.9.8-2 
libruby.so.1.6 is needed by eruby-libs-0.9.8-2


3.2.1.5 Cài đặt hoặc nâng cấp nhiều gói cùng một lúc


Bạn có thể làm việc này bằng lệnh:
Code:
rpm -U package1.rpm package2.rpm .. package100.rpm

3.2.1.6 Cài đặt trên một thư mục khác

Tùy chọn --prefix và --relocate đi với lệnh rpm sẽ chỉ định một thư mục cài đặt cho gói:
Code:
rpm -U --prefix /new/directory package.rpm\

rpm -i --relocate /old/directory=/new/directory package.rpm

3.2.1.7 Forcing the Issue

Tùy chọn --replacepkgs đi với lệnh rpm để thay thế hoặc cài lại, các gói này có thể đã được cài
Tùy chọn --replacefiles đi với lệnh rpm sẽ ghi đè bản thân các file bởi một gói khác
Tùy chọn --justdb sẽ cập nhật cơ sở dữ liệu rpm mà không cài đặt các files. Bạn cần phải log in với quyền root để thực hiện việc này.
Tùy chọn --excludepath sẽ chặn không cài tất cả các file với đường dẫn sau đó, ví dụ:
Code:
rpm -U --excludepath /usr/lib eruby-devel-0.9.8-2.i386.rpm

Lệnh này sẽ cài đặt hoặc nâng cấp tất cả các files trong gói ngoại trừ các file được đặt trong thư mục bắt đầu bằng /usr/lib
Tùy chọn --allfiles sẽ cài đặt tất cả các file trong gói, bất kể file đó đã tồn tại hay chưa trên ổ cứng của bạn
Tùy chọn --oldpackage sẽ cho phép bạn cài đặt một phiên bản cũ hơn đè lên 1 phiên bản gần đó

Để tổ hợp các tùy chọn này, bạn có thể sử dụng --force, tùy chọn này sẽ bao gồm cả 3 tùy chọn: --replacepkgs, --replacefiles, and --oldpackage
Tùy chọn --nodeps sẽ bỏ qua sự kiểm tra các gói phụ thuộc và cài đặt tùy ý.

3.2.2 Nâng cấp các gói

Lệnh rpm –U thực hiện cùng lúc 2 công việc: cài đặt các gói mới, và nâng cấp các gói cũ

3.2.1.1 Tùy chọn khi nâng cấp

Chú ý khi nâng cấp, tùy chọn --noscripts chỉ bỏ qua các scripts của những gói mới, nếu một gói cũ được removed thì những đoạn scripts gỡ bỏ cài đặt cho gói này vẫn được thi hành.
Khi nâng cấp bạn cũng có thể sử dụng tùy chọn --repackage để tạo một gói, một file rpm, từ bất kỳ gói nào nó sẽ xóa. Chú ý rằng tùy chọn này không tạo một gói hoàn chỉnh. Bạn sẽ không thể cài đặt lại một gói được tạo bởi tùy chọn --repackage. Tốt nhất là sử dụng tùy chọn này để sao lưu gói cũ, từ đó tạo 1 gói để làm việc. Hãy cẩn thận với tùy chọn này.
Ví dụ:
Code:
rpm -U --repackage jpilot-0.99.2-8.i386.rpm

3.2.2.2 Smart Upgrades

3.2.3 Freshening up
Quá trình làm mới có nghĩa là cài đặt một phiên bản mới của một gói nếu bạn đã cài một phiên bản cũ của gói đó. Quá trình này rất giống với quá trình nâng cấp ngoại trừ là: làm mới sẽ yêu cầu bạn đã cài một phiên bản trước đó của gói, còn nâng cấp có thể cài một gói lần đầu tiên. Cú pháp cơ bản của lệnh này với tùy chọn –F
Code:
rpm -F package_name

Bạn cũng có thể sử dụng tùy chọn dài hơn: --freshen

3.2.4 Cài đặt các gói
Cú pháp:
Code:
rpm –i filename.rpm

Ví dụ:
Code:
rpm –i jikes-1.16-1.i386.rpm

Bạn nên sử dụng tùy chọn –U thay vì –i. Một lý do chính là rpm –i cho phép bạn cài nhiều instances của gói giống nhau. Đây không phải là điều bạn muốn

3.2.5 Cài đặt qua Internet

3.2.5.1 Sử dụng FTP

Chìa khóa để tạo những giao thức làm việc với lệnh rpm là bạn cần tạo một URL để remote tên file, cú pháp như sau:
Code:
rpm -i ftp://hostname/path/to/file/filename.rpm

Ví dụ, lệnh sau sẽ tải xuống một gói từ IBM FTP Server:
Code:
rpm -i ftp://www-126.ibm.com/pub/jikes/jikes-1.16-1.src.rpm

Nhiều FTP Server yêu cầu bạn nhập username và pass. Nếu bạn không nhập đúng, nó sẽ thông báo lỗi dữ liệu
Bạn có thể chèn username vào ngay trước host name và ngăn cách chúng bằng ký hiệu @, ví dụ:
Code:
rpm -i ftp://unclejoe@www-126.ibm.com/pub/jikes/jikes-1.16-1.src.rpm

Sau khi nhập username, lệnh rpm sẽ yêu cầu bạn nhập password, nhưng bạn cũng có thể chèn luôn vào lệnh rpm, và ngăn cách với username bởi dấu hai chấm(smilie
Code:
rpm -i ftp://unclejoe:workers@www-126.ibm.com/pub/jikes/jikes-1.16-1.src.rpm

Trong trường hợp này: username là: unclejoe, và password là workers

3.2.5.2 Cài đặt sử dụng HTTP

Lệnh rpm hỗ trợ giao thức HTTP, sử dụng bởi nhiều Web servers. Cũng giống như FTP, bạn phải đưa vào một URL định danh file:
Code:
rpm –i http://ftp.redhat.com/pub/contrib/noarch/SRPMS/Squeak-sources-3-1.src.rpm

3.2.6 Cài đặt các gói RPM nguồn

Các gói rpm nguồn chứa đựng mã nguồn sử dụng để build một ứng dụng hoặc thư viện chương trình, và các đoạn scripts sử dụng để build phần mềm trong ứng dụng hoặc thư viện đó. Những đoạn scripts này được gọi là phương pháp xây dựng phần mềm

Các gói rpm nguồn thường chứa mã nguồn chương trình. Chúng có thể cũng chứa các bản vá mã nguồn, các đoạn scripts để build chương trình, hoặc các file đặc biệt sử dụng cho môi trường desktop, các icons, và các file khác được coi như là một phần của mã nguồn.
Chú ý rằng:
Một bản vá là một file chỉ chứa những phần khác nhau của một phiên bản với một phiên bản khác.
Trong hầu hết các trường hợp thì mỗi file rpm sẽ có file nguồn rpm tương ứng

Phần mềm mã nguồn mở:
Linux và hàng nghìn ứng dụng chạy trên Linux được gọi là các phần mềm mã nguồn mở. Đó là bởi vì mã nguồn của Linux và các phần mềm ứng dụng này sẵn có để dùng, nhưng chúng được sử dụng dưới các loại giấy phép mã nguồn mở khác nhau. Xem thêm tại: www.opensource.org/licenses

3.3 Gỡ bỏ phần mềm


Để remove một gói bạn sử dụng tùy chọn –e (viết tắt của erase):
Code:
rpm -e package_name

Chú ý rằng khi xóa hoặc remove các gói, bạn phải sử dụng tên gói, chứ không phải tên file rpm
Ví dụ:
Code:
rpm -e jikes-1.16-1

Luôn nhớ rằng bạn phải log in với quyền root, hoặc super user để remove phần lớn các gói. Đó là bởi vì các file gói này được bảo vệ. Thêm vào đó, cơ sở dữ liệu rpm cũng được bảo vệ
Khi remove một gói, đầu tiên lệnh rpm sẽ kiểm tra tất cả các gói phụ thuộc vào gói mà bạn định remove. Điều này rất quan trọng để đảm bảo bạn không tình cờ remove đi những gói cần thiết cho phần còn lại của hệ thống.
Cũng giống như khi cài đặt, lệnh rpm cũng hỗ trợ tùy chọn --test khi remove. Ví dụ nếu bạn muốn thử remove một gói quan trọng như
syslinux-1.75-3, bạn có thể sử dụng tùy chọn --test:
Code:
rpm -e --test syslinux-1.75-3

Lệnh này sẽ gây lỗi như sau:
Code:
error: Failed dependencies: 
syslinux is needed by (installed) mkbootdisk-1.4.8-1

3.3.1 Kiểm tra các gói vừa được remove

Sau khi chạy lệnh rpm –e bạn có thể dùng rpm –q để kiểm tra cách gói vừa được remove. Nếu rpm chỉ ra rằng gói đó chưa được cài đặt -> chứng tỏ bạn đã xóa thành công.
Code:
# rpm -q jikes 
jikes-1.16-1 
# rpm -e jikes-1.16-1 
# rpm -q jikes 
package jikes is not installed


3.3.2 Remove nhiều gói cùng lúc

Code:
rpm -e aspell-en-ca-0.33.7.1-16 aspell-en-gb-0.33.7.1-16


3.3.3 Tùy chọn khi remove gói

Tùy chọn --nodeps sẽ bỏ qua việc test các gói phụ thuộc, sử dụng tùy chọn này khi bạn thực sự, thực sự muốn uninstall một gói
Tùy chọn --nopreun sẽ không chạy pre-uninstallation scripts
Tùy chọn --nopostun sẽ không chạy post-uninstallation scripts

3.4 Các tùy chọn lệnh rpm khác

Tùy chọn --quiet sẽ không hiển thị phần lớn các thông tin đầu ra ngoại trừ các lỗi
Tùy chọn --version sẽ in ra số phiên bản của lệnh và sau đó thoát luôn
Code:
rpm --version 
RPM version 4.1


3.5 Tóm tắt

Chương này nói về các phần dễ của việc quản lý gói với các thao tác cơ bản như: cài đặt, gỡ bỏ, hay nâng cấp phần mềm
Bảng sau tóm tắt lại các lệnh cơ bản:

Command Usage
rpm –i install_options package_files Install packages.
rpm –e remove_options packages Erase, remove, packages.
rpm –U install_options package_files Upgrade or install packages. Use this option for installations.
rpm –Uvh install_options package_files Upgrade or install packages with extra output. This is the recommended command to install packages.
rpm –F install_options package_files Freshen packages.

Khi quản lý các hệ thống hiện đại thì sẽ có nhiều phức tạp hơn. Trong chương tới chúng ta sẽ nói về các gói phụ thuộc, và sự phức tạp khi một gói phụ thuộc vào một số gói khác, và chúng lại phụ thuộc vào một số gói khác nữa.

Hết chương 3.



Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Bản dịch tài liệu RPM Guide from docs.fedoraproject.org 06/06/2007 21:27:57 (+0700) | #3 | 63429
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Chương 4: Using the RPM database

Chương này sẽ bao gồm:
  • Querying cơ sở dữ liệu RPM

  • Lấy thông tin từ file RPM

  • Tìm ra các file trong một gói trên hệ thống của bạn

  • Xác minh các gói đã cài đặt

  • Sao lưu cơ sở dữ liệu RPM

  • Sửa chữa cơ sở dữ liệu RPM

Mọi gói được cài đặt bằng RPM đều được lưu trong cơ sở dữ liệu RPM. Hệ thống RPM sẽ bao gồm các các lệnh để query database này để tìm ra những gói đã được cài đặt và cung cấp thông tin chi tiết về các gói đó.
Chương này sẽ bao gồm cả 2 vấn đề: querying cơ sở dữ liệu RPM và làm việc với các files trong gói RPM.

4.1 .Querying the RPM database

4.1.1. Querying Packages

Cú pháp cơ bản như sau:
Code:
rpm -q package_name

Bạn cần cung cấp tên của gói để query, ví dụ:
Code:
rpm -q telnet-0.17

Lệnh này sẽ trả về tên của gói nếu nó đã được cài đặt, chẳng hạn:
Code:
telnet-0.17-20

Nếu gói đó chưa được cài đặt, bạn sẽ nhận được thông báo sau:
Code:
telnet-0.17 is not installed


4.1.2. Querying everything

Tuỳ chọn -a đi với lệnh rpm để query tất cả các gói
Code:
rpm -qa

Lệnh này sẽ trả về tất cả các gói được cài đặt trên hệ thống của bạn, mỗi gói trên một dòng như sau:
Code:
words-2-17 
kudzu-0.99.23-1 
openldap-2.0.11-13 
rpm-4.0.3-1.03 
kernel-smp-2.4.7-10 
quota-3.01pre9-3 
expat-1.95.1-7 
groff-perl-1.17.2-3 
perl-DateManip-5.39-5 
perl-libnet-1.0703-6 
perl-URI-1.12-5 
perl-XML-Parser-2.30-7 
perl-XML-Twig-2.02-2 
a2ps-4.13b-15 
4Suite-0.11-2 
XFree86-xfs-4.1.0-3 
ghostscript-6.51-12 
tcl-8.3.3-65 
portmap-4.0-38 
bind-utils-9.1.3-4 
ftp-0.17-12 
micq-0.4.6.p1-2


4.1.3 Refining the query

4.1.3.1. Piping the output to grep

Giả dụ bạn biết rằng hầu hết các gói sử dụng ngôn ngữ scripting Python đều có “py” trong tên của chúng, khi đó bạn có thể tìm tất cả các gói này bằng cách sử dụng lệnh sau:
Code:
rpm -qa | grep py

Lệnh này sẽ trả về:
Code:
python-2.2.1-17 
pygtk2-1.99.12-7 
pyxf86config-0.3.1-2 
rpm404-python-4.0.4-8x.27 
python-devel-2.2.1-17 
gnome-python2-gtkhtml2-1.99.11-8 
orbit-python-1.99.0-4 
gnome-python2-canvas-1.99.11-8 
gnome-python2-bonobo-1.99.11-8 
gnome-python2-1.99.11-8 
pyOpenSSL-0.5.0.91-1 
rpm-python-4.1-1.06 
pygtk2-devel-1.99.12-7 
kdesdk-kspy-3.0.3-2 
mod_python-3.0.0-10 
gnome-python2-gconf-1.99.11-8 
libxslt-python-1.0.19-1 
python-tools-2.2.1-17 
libxml2-python-2.4.23-1 
pygtk2-libglade-1.99.12-7 
python-optik-1.3-2 
kfloppy-3.0.3-3


4.1.3.2. Querying with WildCards

Lệnh rpm hỗ trợ một vài tuỳ chọn tìm kiếm. Bạn có thể đưa vào một wildcards trong lệnh rpm -qa, chẳng hạn:
Code:
$ rpm -qa "send*" 
sendmail-cf-8.11.6-3 
sendmail-8.11.6-3

Lệnh này tìm kiếm tất cả các tên gói bắt đầu với “send”. Bạn có thể đảo ngược lại với một ký hiệu chấm than:
Code:
$ rpm -qa '!send*'

Lệnh này tìm kiếm tất cả các gói không bắt đầu với send

4.1.4 Tìm kiếm các file trong một gói

Một vấn đề thông thường với việc quản lý gói đó là khi bạn muốn lần theo các file trên hệ thống của bạn, rồi tìm các gói sở hữu các file đó.
Bạn có thể dùng
Code:
rpm -qf filename

để query tất cả các gói sở hữu một file đặc biệt
Ví dụ bạn có thể sử dụng một vài lệnh để xác định những gói cung cấp chương trình grep.
Đầu tiên bạn cần biết chính xác đường dẫn của file
Code:
which grep

Lệnh này sẽ trả về đường dẫn của grep:
Code:
/bin/grep

Bây giờ bạn có thể kiếm tra những gói chứa file grep bằng lệnh sau:
Code:
rpm -qf /bin/grep 
grep-2.4.2-7

Bạn có thể gộp hai lệnh này thành một, như sau:
Code:
rpm -qf `which grep`
grep-2.4.2-7

Nếu không có gói nào chứa đựng file này, bạn sẽ nhận được thông báo như sau:
Code:
# rpm -qf mail 
file mail is not owned by any package


4.2. Lấy thông tin từ các gói
4.2.1 Miêu tả các gói
Tùy chọn –i đi với rpm sẽ miêu tả thông tin về gói. Bạn cũng có thể sử dụng --info thay cho –i
Code:
rpm –qi package

Lưu ý: Thứ tự của các tùy chọn trong 1 dòng lệnh là rất quan trọng. Nhớ rằng lệnh rpm có cấu trúc chung như sau:
rpm –<tùy chọn chính> -<tùy chọn mở rộng> <tên gói hoặc tên file>
Lệnh rpm –i sẽ cài đặt một gói. Lệnh rpm –q sẽ query một gói. Nếu bạn nhầm lẫn và đặt tùy chọn –i trước tùy chọn –q, nó sẽ thực hiện một hành động khác
Khi bạn thực hiện hành động này hãy chú ý về thứ tự các tuỳ chọn. Ví dụ khi bạn thực hiện lệnh này với gói tcsh shell
Code:
# rpm -qi tcsh-6.10-6 
Name : tcsh Relocations: (not relocateable) 
Version : 6.10 Vendor: Red Hat, Inc. 
Release : 6 Build Date: Sun 24 Jun 2001 10:45:29 
PM CDT 
Install date: Fri 14 Dec 2001 10:45:39 AM CST Build 
Host: porky.devel.redhat.com 
Group : System Environment/Shells Source RPM: tcsh-6.10-6.src.rpm 
Size : 764000 License: distributable 
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> 
URL : http://www.primate.wisc.edu/software/csh-tcsh-book/ 
Summary : An enhanced version of csh, the C shell. 
Description : 
Tcsh is an enhanced but completely compatible version of csh, the C 
shell. Tcsh is a command language interpreter which can be used both 
as an interactive login shell and as a shell script command processor. 
Tcsh includes a command line editor, programmable word completion, 
spelling correction, a history mechanism, job control and a C language 
like syntax.

Từ sự miêu tả này, bạn sẽ tìm thấy nhiều thông tin về gói như xuất xứ của chúng

4.2.2 Nhóm các gói

Các gói rpm có thể được đặt trong một nhóm, với một tên tùy ý được đặt cho một tập hợp các gói đó.
Để liệt kê danh sách tất cả các gói trong một nhóm, bạn dùng lệnh
Code:
rpm –qg <tên nhóm>

Ví dụ:
Code:
# rpm -qg "System Environment/Shells" 
bash-2.05b-5 
sh-utils-2.0.12-3 
ash-0.3.8-5 
tcsh-6.12-2


4.2.3 Danh sách file trong một gói
Tùy chọn –l (--list) đi với rpm sẽ liệt kê danh sách các file trong 1 gói:
rpm –ql <tên gói>
Ví dụ:
Code:
# rpm -ql tcsh 
/bin/csh 
/bin/tcsh 
/usr/share/doc/tcsh-6.10 
/usr/share/doc/tcsh-6.10/FAQ 
/usr/share/doc/tcsh-6.10/Fixes 
/usr/share/doc/tcsh-6.10/NewThings 
/usr/share/doc/tcsh-6.10/complete.tcsh 
/usr/share/doc/tcsh-6.10/eight-bit.txt 
/usr/share/doc/tcsh-6.10/tcsh.html 
/usr/share/doc/tcsh-6.10/tcsh.html/header.html 
/usr/share/doc/tcsh-6.10/tcsh.html/index.php 
/usr/share/doc/tcsh-6.10/tcsh.html/lists.html 
/usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man 
/usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man2html 
/usr/share/doc/tcsh-6.10/tcsh.html/top.html 
/usr/share/locale/de/LC_MESSAGES/tcsh 
/usr/share/locale/el/LC_MESSAGES/tcsh 
/usr/share/locale/es/LC_MESSAGES/tcsh 
/usr/share/locale/fr/LC_MESSAGES/tcsh 
/usr/share/locale/it/LC_MESSAGES/tcsh 
/usr/share/locale/ja/LC_MESSAGES/tcsh 
/usr/share/man/man1/tcsh.1.gz

Bạn có thể liệt kê danh sách các file của nhiều hơn một gói:
Code:
rpm –q –filebypkg <gói 1> <gói 2>

Bạn có thể thử tùy chọn –v(verbose) để lấy được nhiều thông tin hơn từ gói
Ví dụ:
Code:
# rpm -qlv tcsh 
lrwxrwxrwx 1 root root 4 Jun 24 2001 /bin/csh -> tcsh 
-rwxr-xr-x 1 root root 288604 Jun 24 2001 /bin/tcsh 
drwxr-xr-x 2 root root 0 Jun 24 2001 /usr/share/doc/tcsh-6.10 
-rw-r--r-- 1 root root 8306 Aug 25 2000 /usr/share/doc/tcsh-6.10/FAQ 
-rw-r--r-- 1 root root 64761 Nov 19 2000 /usr/share/doc/tcsh-6.10/Fixes 
-rw-r--r-- 1 root root 6518 Oct 2 1998 /usr/share/doc/tcsh-6.10/NewThings 
-rw-r--r-- 1 root root 41328 Nov 19 2000 /usr/share/doc/tcsh-6.10/complete.tcsh 
-rw-r--r-- 1 root root 4668 Jun 24 2001 /usr/share/doc/tcsh-6.10/eight-bit.txt 
drwxr-xr-x 2 root root 0 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html 
-rw-r--r-- 1 root root 124 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html/header.html 
lrwxrwxrwx 1 root root 8 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html/index.php -> top.html 
-rw-r--r-- 1 root root 911 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html/lists.html 
-rw-r--r-- 1 root root 0 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man 
-rw-r--r-- 1 root root 22542 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man2html 
-rw-r--r-- 1 root root 693 Jun 24 2001 /usr/share/doc/tcsh-6.10/tcsh.html/top.html 
-rw-r--r-- 1 root root 45861 Jun 24 2001 /usr/share/locale/de/LC_MESSAGES/tcsh 
-rw-r--r-- 1 root root 47566 Jun 24 2001 /usr/share/locale/el/LC_MESSAGES/tcsh 
-rw-r--r-- 1 root root 47413 Jun 24 2001 /usr/share/locale/es/LC_MESSAGES/tcsh 
-rw-r--r-- 1 root root 47156 Jun 24 2001 /usr/share/locale/fr/LC_MESSAGES/tcsh 
-rw-r--r-- 1 root root 48264 Jun 24 2001 /usr/share/locale/it/LC_MESSAGES/tcsh 
-rw-r--r-- 1 root root 18682 Jun 24 2001 /usr/share/locale/ja/LC_MESSAGES/tcsh 
-rw-r--r-- 1 root root 62399 Jun 24 2001 /usr/share/man/man1/tcsh.1.gz



4.2.4 Danh sách các file cấu hình của một gói


Dùng –c (configfiles)
Code:
rpm –qc <tên gói>

Ví dụ:
Code:
# rpm -qc bash 
/etc/skel/.bash_logout 
/etc/skel/.bash_profile 
/etc/skel/.bashrc

Lệnh này sẽ liệt kê các file cấu hình trong gói bash
Có 1 vài gói có thể không có file cấu hình, khi đó sẽ không có output.
Nhưng có một số gói khác lại có khá nhiều file cấu hình, như sendmail mail tranfer agent
Code:
# rpm -qc sendmail 
/etc/aliases 
/etc/mail/Makefile 
/etc/mail/access 
/etc/mail/domaintable 
/etc/mail/helpfile 
/etc/mail/local-host-names 
/etc/mail/mailertable 
/etc/mail/sendmail.mc 
/etc/mail/statistics 
/etc/mail/trusted-users 
/etc/mail/virtusertable 
/etc/rc.d/init.d/sendmail 
/etc/sendmail.cf 
/etc/sysconfig/sendmail 
/usr/lib/sasl/Sendmail.conf

4.2.5 Danh sách các tài liệu cho một gói

Tương tự, tùy chọn –d(--docfiles) sẽ liệt kê danh sách các tài liệu trong một gói
Code:
rpm –qd <tên gói>

Ví dụ:
Code:
For example: 
# rpm -qd tcsh 
/usr/share/doc/tcsh-6.10/FAQ 
/usr/share/doc/tcsh-6.10/Fixes 
/usr/share/doc/tcsh-6.10/NewThings 
/usr/share/doc/tcsh-6.10/complete.tcsh 
/usr/share/doc/tcsh-6.10/eight-bit.txt 
/usr/share/doc/tcsh-6.10/tcsh.html/header.html 
/usr/share/doc/tcsh-6.10/tcsh.html/index.php 
/usr/share/doc/tcsh-6.10/tcsh.html/lists.html 
/usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man 
/usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man2html 
/usr/share/doc/tcsh-6.10/tcsh.html/top.html 
/usr/share/man/man1/tcsh.1.gz

Bạn có thể sử dụng tuỳ chọn -v với tất cả các lệnh liệt kê file để lấy được nhiều thông tin hơn

4.2.6. Danh sách trạng thái của các file trong một gói:
Code:
rpm –qs <tên gói>

Ví dụ:
Code:
# rpm -qs tcsh 
normal /bin/csh 
normal /bin/tcsh 
normal /usr/share/doc/tcsh-6.10 
normal /usr/share/doc/tcsh-6.10/FAQ 
normal /usr/share/doc/tcsh-6.10/Fixes 
normal /usr/share/doc/tcsh-6.10/NewThings 
normal /usr/share/doc/tcsh-6.10/complete.tcsh 
normal /usr/share/doc/tcsh-6.10/eight-bit.txt 
normal /usr/share/doc/tcsh-6.10/tcsh.html 
normal /usr/share/doc/tcsh-6.10/tcsh.html/header.html 
normal /usr/share/doc/tcsh-6.10/tcsh.html/index.php 
normal /usr/share/doc/tcsh-6.10/tcsh.html/lists.html 
normal /usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man 
normal /usr/share/doc/tcsh-6.10/tcsh.html/tcsh.man2html 
normal /usr/share/doc/tcsh-6.10/tcsh.html/top.html 
not installed /usr/share/locale/de/LC_MESSAGES/tcsh 
not installed /usr/share/locale/el/LC_MESSAGES/tcsh 
not installed /usr/share/locale/es/LC_MESSAGES/tcsh 
not installed /usr/share/locale/fr/LC_MESSAGES/tcsh 
not installed /usr/share/locale/it/LC_MESSAGES/tcsh 
not installed /usr/share/locale/ja/LC_MESSAGES/tcsh 
normal /usr/share/man/man1/tcsh.1.gz


4.2.7 Danh sách các scripts:
Code:
rpm –q  --script <tên gói>

Ví dụ:
Code:
# rpm -q --scripts tcsh 
postinstall scriptlet (through /bin/sh): 
if [ ! -f /etc/shells ]; then 
echo "/bin/tcsh" >> /etc/shells 
echo "/bin/csh" >> /etc/shells 
else 
grep '^/bin/tcsh$' /etc/shells > /dev/null || echo "/bin/tcsh" >> /etc/shell 
s 
grep '^/bin/csh$' /etc/shells > /dev/null || echo "/bin/csh" >> /etc/shells 
fi 
postuninstall scriptlet (through /bin/sh): 
if [ ! -x /bin/tcsh ]; then 
grep -v '^/bin/tcsh$' /etc/shells | grep -v '^/bin/csh$'> /etc/shells.rpm 
mv /etc/shells.rpm /etc/shells 
fi

Một ví dụ khác:
Code:
# rpm -q --scripts sendmail 
preinstall scriptlet (through /bin/sh): 
/usr/sbin/useradd -u 47 -d /var/spool/mqueue -r -s /dev/null mailnull >/dev/null 
2>&1 || : 
postinstall scriptlet (through /bin/sh): 
# 
# Convert old format to new 
# 
if [ -f /etc/mail/deny ] ; then 
cat /etc/mail/deny | \ 
awk 'BEGIN{ print "# Entries from obsoleted /etc/mail/deny"} \ 
{print $1" REJECT"}' >> /etc/mail/access 
cp /etc/mail/deny /etc/mail/deny.rpmorig 
fi 
for oldfile in relay_allow ip_allow name_allow ; do 
if [ -f /etc/mail/$oldfile ] ; then 
cat /etc/mail/$oldfile | \ 
awk "BEGIN { print \"# Entries from obsoleted /etc/mail/$oldfile 
\" ;} \ 
{ print \$1\" RELAY\" }" >> /etc/mail/access 
cp /etc/mail/$oldfile /etc/mail/$oldfile.rpmorig 
fi 
done 
# 
# Oops, these files moved 
# 
if [ -f /etc/sendmail.cw ] ; then 
cat /etc/sendmail.cw | \ 
awk 'BEGIN { print "# Entries from obsoleted /etc/sendmail.cw" ;} \ 
{ print $1 }' >> /etc/mail/local-host-names 
cp /etc/sendmail.cw /etc/sendmail.cw.rpmorig 
fi 
# 
# Rebuild maps (next reboot will rebuild also) 
# 
{ /usr/bin/newaliases 
for map in virtusertable access domaintable mailertable 
do 
if [ -f /etc/mail/${map} ] ; then 
/usr/bin/makemap hash /etc/mail/${map} < /etc/mail/${map} 
sleep 1 
fi 
done 
} > /dev/null 2>&1 
/sbin/chkconfig --add sendmail 
preuninstall scriptlet (through /bin/sh): 
if [ $1 = 0 ]; then 
/etc/rc.d/init.d/sendmail stop >/dev/null 2>&1 
/sbin/chkconfig --del sendmail 
fi 
postuninstall scriptlet (through /bin/sh): 
if [ "$1" -ge "1" ]; then 
/etc/rc.d/init.d/sendmail condrestart >/dev/null 2>&1 
fi 
exit 0

4.2.8 Liệt kê những thay đổi trong gói:
Cú pháp cơ bản:
Code:
rpm -q -changelog package_name

Ví dụ:
Code:
# rpm -q --changelog bash 
* Fri Aug 23 2002 Bob Marley <bob@marley.com.> 
- re-bzip the docs, something was corrupted 
* Thu Aug 22 2002 Peter Tosh <peter@tosh.com> 2.05b-4 
- Fix history substitution modifiers in UTF-8 (bug #70294, bug #71186). 
- Fix ADVANCE_CHAR at end of string (bug #70819). 
- docs: CWRU/POSIX.NOTES no longer exists, but ship POSIX. 
* Wed Aug 07 2002 Jimmy Cliff <jimmy@cliff.com> 2.05b-3 
- Fixed out of memory problem with readline. 
* Tue Jul 23 2002 Jimmy Cliff <jimmy@cliff.com> 2.05b-2 
- Added symlink for sh.1 in man1 section so that man sh works (#44039).

4.2.9 Combining Queries

Lệnh rpm rất linh động trong việc cho phép bạn tổ hợp các tuỳ chọn

4.2.9.1Liệt kê miêu tả gói và các file tài liệu
sử dụng tuỳ chọn -qdi
Ví dụ:
Code:
# rpm -qdi grep 
Name : grep Relocations: /usr 
Version : 2.5.1 Vendor: Red Hat, 
Inc. 
Release : 4 Build Date: Sat 20 Jul 
2002 01:08:48 AM CDT 
Install date: Sat 05 Oct 2002 12:21:58 PM CDT Build 
Host: stripples.devel.redhat.com 
Group : Applications/Text Source RPM: grep-2.5.1- 
4.src.rpm 
Size : 475770 License: GPL 
Signature : DSA/SHA1, Tue 03 Sep 2002 04:17:47 PM CDT, Key ID 
219180cddb42a60ePackager : Red Hat, Inc. 
<http://bugzilla.redhat.com/bugzilla>


4.2.9.2 Liệt kê trạng thái của các file cấu hình:

Để liệt kê trạng thái của tất cả các file cấu hình, hãy sử dụng tuỳ chọn -qcsf khi đi với tên file, và -qcs khi đi với tên gói:
Ví dụ:
Code:
# rpm -qcsf /bin/bash 
normal /etc/skel/.bash_logout 
normal /etc/skel/.bash_profile 
normal /etc/skel/.bashrc


4.2.9.3 Liệt kê các gói đã được cài đặt gần đây:

Để liệt kê danh sách các gói được cài đặt gần đây sử dụng tùy chọn –last. Điều này rất hữu ích khi gần đây bạn cài đặt hoặc nâng cấp nhiều gói nhưng có vài điều không mong muốn xảy ra. Nếu bạn không thể nhớ tên các gói, hãy sử dụng tùy chọn này đi với lệnh rpm để liệt kê ra các gói đảo ngược lại thứ tự cài đặt
Code:
rpm -qa --last | head
rpm -qa --last | head 
comps-8.0-0.20020910 Sat 05 Oct 2002 01:17:30 PM CDT 
tkinter-2.2.1-17 Sat 05 Oct 2002 01:16:58 PM CDT 
tix-8.2.0b1-74 Sat 05 Oct 2002 01:16:52 PM CDT 
tclx-8.3-74 Sat 05 Oct 2002 01:16:44 PM CDT 
python-tools-2.2.1-17 Sat 05 Oct 2002 01:16:41 PM CDT 
mx-2.0.3-6 Sat 05 Oct 2002 01:16:34 PM CDT 
libxslt-python-1.0.19-1 Sat 05 Oct 2002 01:16:31 PM CDT 
librpm404-devel-4.0.4-8x.27 Sat 05 Oct 2002 01:16:27 PM CDT 
itcl-3.2-74 Sat 05 Oct 2002 01:16:12 PM CDT 
gnumeric-1.0.9-2 Sat 05 Oct 2002 01:15:46 PM CDT


4.3 Lấy thông tin từ các file của gói:

Tuỳ chọn -p đi với lệnh rpm sẽ cung cấp thông tin về các file của gói
Cú pháp cơ bản là:
Code:
rpm –qp option_query_options filename.rpm

Để liệt kê danh sách các file cấu hình trong một gói, hãy tổ hợp các tuỳ chọn -q, -p, -c
Code:
rpm -qpc telnet-server-0.17-23.i386.rpm

Liệt kê danh sách các file trong một gói rpm, hãy dùng tổ hợp các tùy chọn: -q, -p, -l
Code:
rpm -qpl telnet-server-0.17-23.i386.rpm 
/etc/xinetd.d/telnet 
/usr/sbin/in.telnetd 
/usr/share/man/man5/issue.net.5.gz 
/usr/share/man/man8/in.telnetd.8.gz 
/usr/share/man/man8/telnetd.8.gz

4.4 Xác nhận các gói rpm đã được cài đặt

Cú pháp cơ bản:
Code:
rpm -V verify_options package_name

Lệnh này sẽ chỉ đưa ra các vấn đề. Ví dụ, nếu quá trình cài đặt telnet-server bị lỗi một vài file, lệnh rpm -V sẽ cho bạn biết như sau:
Code:
# rpm -V telnet-server 
missing c /etc/xinetd.d/telnet 
missing /usr/sbin/in.telnetd 
missing d /usr/share/man/man5/issue.net.5.gz

Trong ví dụ này, c và d lần lượt là các file cấu hình và file tài liệu
4.4.1 Xác nhận hệ thống toàn vẹn
Sử dụng tuỳ chọn -a
Code:
rpm -Va
SM5....T c /usr/share/info/dir 
.......T c /etc/krb5.conf 
.......T /usr/share/pixmaps/gnome-default-dlg.png 
.......T /usr/share/pixmaps/gnome-error.png 
.......T /usr/share/pixmaps/gnome-info.png 
.......T /usr/share/pixmaps/gnome-question.png 
.......T /usr/share/pixmaps/gnome-warning.png 
S.5....T c /etc/sysconfig/pcmcia 
.....U.. /dev/winradio0

Mỗi dòng ở output sẽ cho biết vấn đề của file đó. Lệnh rpm sử dụng các mã ký tự để chỉ ra các loại vấn đề
S
File size differs.
M
File mode differs.
5
The MD5 checksum differs.
D
The major and minor version numbers differ on a device file.
L
A mismatch occurs in a link.
U
The file ownership differs.
G
The file group owner differs.
T
The file time (mtime) differs.
4.4.2 Kiểm soát các xác nhận
Code:
--nodeps 
Don't verify dependencies. 
--nodigest 
Don't verify the package or header digests. 
--nofiles 
Don't verify the file attributes. 
--noscripts 
Don't try to verify the scripts. 
--nosignature 
Don't verify the package or header signatures. 
--nolinkto 
Don't verify the link file attribute. 
--nomd5 
Don't verify the MD5 digest file attribute. 
--nosize 
Don't verify the file size attribute. 
--nouser 
Don't verify the file owner attribute. 
--nogroup 
Don't verify the file group owner attribute. 
--nomtime 
Don't verify the file mtime attribute. 
--nomode 
Don't verify the file mode attribute. 
--nordev 
Don't verify the file rdev attribute. 
-a 
Verify all packages in a given group. 
-g group 
Verify all packages in a given group. 
-p file 
Verify the given RPM file.

4.5 Làm việc với rpm database

Rpm database được lưu ở /var/lib/rpm. Các file trong thư mục này là Berkely DB files như:
Code:
# file /var/lib/rpm/* 
/var/lib/rpm/Basenames: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/Conflictname: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/__db.001: data 
/var/lib/rpm/__db.002: X11 SNF font data, LSB first 
/var/lib/rpm/__db.003: X11 SNF font data, LSB first 
/var/lib/rpm/Dirnames: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Filemd5s: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Group: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/Installtid: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Name: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/Packages: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/Providename: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/Provideversion: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Requirename: Berkeley DB (Hash, version 7, native byte-order) 
/var/lib/rpm/Requireversion: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Sha1header: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Sigmd5: Berkeley DB (Btree, version 8, native byte-order) 
/var/lib/rpm/Triggername: Berkeley DB (Hash, version 7, native byte-order)

Mỗi file là một database tách biệt theo định dạng Berkeley DB ngoại trừ một số file dữ liệu
Thư viện Berkeley DB: thư viện này cung cấp một database API đơn giản. Nó không phải là database quan hệ kiểu truyền thống. Thay vào đó, giá trị dữ liệu được lưu trong một số lượng lớn các bảng băm theo từng cặp đôi Tên/ Giá trị. Loại database này thuận tiện khi tìm kiếm một named entry nhưng lại rất lâu khi lặp qua tất cả các entries.
Thư viện này là một định dạng mã nguồn mở và bạn có thể lấy về các thư viện API lập trình cho C, C++, java, Python, Perl...
Cơ sở dữ liệu rpm thực sự là một số các Berkeley DB databases, mỗi loại được thiết kế cho một kiểu khác nhau của query

4.5.1 Backup database

Bạn có thể backup database bằng lệnh
Code:
# cd /var/lib 
# tar cvf rpmdb.tar ./rpm 
# gzip rpmdb.tar

Đoạn lệnh này tạo 1 tar archive từ nội dung của thư mục rpm (nơi rpm database được lưu). Sau đó nén lại bằng lệnh gzip
Bạn có thể thêm tuỳ chọn -z vào lệnh tar để tạo một file nén luôn mà không cần dùng gzip


4.5.2 Xây dựng lại cơ sở dữ liệu rpm


Trong một vài trường hợp rpm database bị gián đoạn, bạn có thể sử dụng tuỳ chọn –rebuilddb để build lại database này
Cú pháp:
Code:
rpm --rebuilddb

Lệnh này sẽ rebuild rpm database từ các gói đã cài đặt, chỉ những file được yêu cầu, còn lại các file khác có thể được tạo lại từ packages file. Trước khi thực hiện lệnh này bạn nên back up rpm database
Để kiểm tra lệnh rpm –-rebuilddb không gây ra thiệt hại nào với rpm database, bạn hãy kiểm tra với một danh sách file query tất cả các gói và sau đó kiểm tra kết quả của lệnh rpm –rebuilddb với một danh sách file khác
Một kỹ thuật khác có thể được dùng để cứu các rpm database đó là các tiện ích db_dump và db_load đi cùng với rpm. Dumping và restoring có thể fix các file gián đoạn

4.5.3 Tạo một rpm database mới

Nếu tất cả các cách trên thất bại, bạn có thể dùng - - initdb để tạo 1 new empty rpm database. Database này sẽ không có bất cứ một thông tin nào về các gói đã được cài đặt trên hệ thống của bạn.
Code:
rpm --initdb

Bạn có thể sử dụng tùy chọn --dbpath để tạo 1 rpm database trong một thư mục khác
Code:
mkdir /tmp/rpm 
rpm --initdb --dbpath /tmp/rpm

Hết chương 4
Let's build on a great foundation!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|