Chuẩn bị kỳ thi LPI 101: Cài đặt Linux và quản lý gói phần mềm

Chủ đề 102 (LPIC-1) Quản trị trình độ sơ cấp

Trong hướng dẫn này, Ian Shields tiếp tục chuẩn bị cho bạn tham gia kỳ thi 101 (LPIC-1) về quản trị trình độ sơ cấp của Viện Linux chuyên nghiệp (Linux Professional Institute®-LPI). Trong hướng dẫn thứ hai này của loạt năm bài hướng dẫn, Ian giới thiệu cho bạn về cài đặt Linux và quản lý gói phần mềm. Đến cuối hướng dẫn này, bạn sẽ biết cách Linux sử dụng các phân vùng đĩa, cách Linux khởi động và cách cài đặt và quản lý các gói phần mềm.

Ian Shields, Lập trình viên cao cấp, IBM

Ian Shields làm việc cho rất nhiều dự án Linux trên vùng Linux của developerWorks. Ông là một lập trình viên cao cấp của IBM tại Khu vực Tam giác nghiên cứu (Research Triangle Park - RTP), bang Bắc Carolina (NC). Ông đã đến với IBM ở Canberra, Úc, như là một kỹ sư hệ thống vào năm 1973, và từ đó đã làm việc về các hệ thống thông tin liên lạc và điện toán mọi nơi tại Montreal, Canada, và RTP, NC. Ông đã có một số bằng sáng chế và đã xuất bản một số bài báo. Ông tốt nghiệp đại học ngành toán học thuần tuý và triết học tại Đại học Quốc gia Úc. Ông có bằng thạc sĩ và tiến sĩ khoa học máy tính của Đại học Bắc Carolina.



08 08 2010

Trước khi bạn bắt đầu

Tìm hiểu xem các hướng dẫn có thể dạy cho bạn những gì và làm thế nào để bạn có thể tiếp thu được nhiều nhất từ các hướng dẫn đó.

Về loạt bài này

Viện Linux chuyên nghiệp (LPI) cấp chứng chỉ quản trị hệ thống Linux ở các trình độ sơ cấp và trình độ trung cấp. Để đạt được chứng chỉ mỗi cấp, bạn phải vượt qua hai kỳ thi LPI. Trước khi bạn tham gia kỳ thi, hãy nghiên cứu các hướng dẫn chuẩn bị cho kỳ thi LPI (LPI exam prep tutorials) trên developerWorks để chuẩn bị cho mỗi chủ đề có trong kỳ thi này.

Năm hướng dẫn sau đây giúp bạn chuẩn bị cho kỳ thi đầu tiên trong hai kỳ thi của nhà quản trị hệ thống trình độ sơ cấp của LPI, đó là kỳ thi LPI 101. Một loạt bài hướng dẫn đồng hành đang được phát triển cho kỳ thi trình độ sơ cấp thứ hai, kỳ thi LPI 102. Cả hai kỳ thi kỳ thi 101 và 102 là bắt buộc cho chứng chỉ trình độ sơ cấp. Chứng chỉ trình độ sơ cấp còn được gọi là chứng chỉ cấp 1. Để vượt qua cấp 1, bạn cần có khả năng để:

  • Làm việc tại các dòng lệnh Linux.
  • Thực hiện các nhiệm vụ bảo trì mức dễ: trợ giúp những người dùng, thêm những người dùng vào một hệ thống lớn hơn, sao lưu và phục hồi và tắt và khởi động lại.
  • Cài đặt và đặt cấu hình một máy trạm (bao gồm cả X) và kết nối nó với một mạng LAN hoặc kết nối một máy tính độc lập qua modem tới mạng Internet.
Bảng 1. Kỳ thi LPI 101: Các hướng dẫn và các chủ đề
Hướng dẫnChủ đềTóm tắt
Chuẩn bị cho kỳ thi LPI 101:
Phần cứng và kiến trúc.
Chủ đề 101Tìm hiểu cách cấu hình phần cứng hệ thống của bạn với Linux. Đến cuối hướng dẫn này, bạn sẽ biết cách Linux cấu hình phần cứng có trong một máy tính cá nhân (PC) hiện đại như thế nào và bạn sẽ phải xem xét ở đâu khi có trục trặc.
Chuẩn bị kỳ thi LPI 101:
Cài đặt Linux và quản lý gói.
Chủ đề 102(Hướng dẫn này). Giới thiệu về cài đặt Linux và quản lý gói. Đến cuối hướng dẫn này, bạn sẽ biết cách Linux sử dụng các phân vùng đĩa, cách Linux khởi động và cách cài đặt và quản lý các gói phần mềm như thế nào.
Chuẩn bị kỳ thi LPI 101:
Các lệnh GNU và UNIX.
Chủ đề 103Sắp có!
Chuẩn bị kỳ thi LPI 104:
Linux, các hệ thống tập tin và FHS.
Chủ đề 104Sắp có!
Chuẩn bị kỳ thi LPI 110:
Hệ thống Window X.
Chủ đề 110Sắp có!

Trong mỗi chủ đề của kỳ thi, các chủ đề con có trọng số, phản ánh tầm quan trọng của chúng trong chủ đề.

LPI không công nhận bất kỳ tài liệu hay kỹ thuật luyện thi riêng biệt nào của một bên thứ ba. Để biết thêm chi tiết, xin vui lòng liên hệ với info@lpi.org.

Về hướng dẫn này

Chào mừng bạn đến với "Cài đặt Linux và quản lý gói phầm mềm", hướng dẫn thứ hai trong năm hướng dẫn được thiết kế để chuẩn bị cho bạn về kỳ thi LPI 101. Trong hướng dẫn này, bạn sẽ tìm hiểu về các lĩnh vực sau đây trong cài đặt Linux và quản lý gói:

Bảng 2. Kỳ thi LPI 101, chủ đề 102: Các chủ đề con và các trọng số
Chủ đề conTrọng sốTóm tắt
1.102.1
Thiết kế bố trí đĩa cứng
5Bạn sẽ học thiết kế một lược đồ phân vùng đĩa cho một hệ thống Linux, bao gồm bố trí hệ thống tập tin hoặc vùng tráo đổi cho các phân vùng riêng hoặc các đĩa và điều chỉnh thiết kế theo mục đích sử dụng của hệ thống. Bạn sẽ học cách đặt thư mục /boot trên một phân vùng sao cho tuân thủ các yêu cầu của BIOS cho việc khởi động.
1.102.2
Cài đặt trình quản lý khởi động
1Bạn sẽ học cách lựa chọn, cài đặt và cấu hình một trình quản lý khởi động. Bạn sẽ học cách để cung cấp các vị trí khởi động thay thế và các tùy chọn khởi động từ sao lưu dự phòng (ví dụ, bằng cách sử dụng một đĩa mềm khởi động).
1.102.3
Tạo và cài đặt chương trình từ mã nguồn
5Bạn sẽ học cách để xây dựng (build) và cài đặt một chương trình chạy được từ mã nguồn. Bạn sẽ học cách để giải nén một tập tin nguồn và tùy chỉnh tập tin Make (Makefile), ví dụ như thay đổi các đường dẫn hoặc bổ sung thêm các thư mục được gộp thêm..
1.102.4
Quản lý thư viện chia sẻ
3Bạn sẽ học cách để xác định các thư viện dùng chung mà các chương trình chạy được phụ thuộc vào chúng và cài đặt chúng khi cần thiết. Bạn cũng sẽ biết các thư viện hệ thống được lưu giữ ở đâu.
1.102.5
Sử dụng quản lý gói Debian
8Bạn sẽ học cách để thực hiện quản lý gói bằng cách sử dụng trình quản lý gói của Debian. Bạn sẽ sử dụng dòng lệnh và các công cụ tương tác để cài đặt, nâng cấp hoặc gỡ bỏ các gói, cũng như tìm các gói có chứa các tập tin hoặc các phần mềm cụ thể. Bạn sẽ tìm hiểu cách để xác định thông tin gói như là phiên bản, nội dung, các phụ thuộc, tính toàn vẹn gói và trạng thái cài đặt. Bạn sẽ tìm hiểu cách thực hiện điều này cho cả các gói đã cài đặt và gói chưa được cài đặt.
1.102.6
Sử dụng Trình quản lý gói Red Hat (Red Hat Package Manager -RPM)
8Bạn sẽ học cách để thực hiện quản lý gói cho các bản phân phối Linux có sử dụng các Trình quản lý gói của Red Hat (RPM) cho bản phân phối gói. Bạn sẽ có thể cài đặt, cài đặt lại, nâng cấp và gỡ bỏ các gói, cũng như có được thông tin trạng thái và thông tin phiên bản của gói. Bạn sẽ học cách xác định thông tin gói như phiên bản, trạng thái, các phụ thuộc, tính toàn vẹn và các chữ ký. Bạn sẽ biết cách xác định một gói cung cấp những tập tin nào, cũng như tìm ra gói nào có cung cấp một tập tin cụ thể.

Điều kiện cần có trước

Để tiếp thu được nhiều nhất từ hướng dẫn này, bạn cần phải có một kiến thức cơ bản về Linux và một hệ thống Linux đang hoạt động, trên hệ thống đó bạn có thể thực hành các lệnh được trình bày trong hướng dẫn này. Bạn cũng cần hiểu được những tác động của BIOS đối với các ổ đĩa cứng như đã trình bày trong hướng dẫn đầu tiên trong loạt bài này, "Chuẩn bị cho kỳ thi LPI 101 (chủ đề 101): Phần cứng và kiến trúc."


Bố trí đĩa cứng

Phần này trình bày các tài liệu cho chủ đề 1.102.1 cho kỳ thi quản trị trình độ sơ cấp (LPIC-1) 101. Chủ đề này có trọng số 5.

Phần này cho bạn thấy làm thế nào để bố trí các hệ thống tập tin Linux của bạn trên ổ đĩa cứng của bạn và phát triển những gì bạn đã học về các đĩa cứng trong hướng dẫn đầu tiên trong loạt bài này, "Chuẩn bị cho kỳ thi LPI 101 (chủ đề 101): Phần cứng và kiến trúc."

Một hướng dẫn sắp tới "Chuẩn bị cho kỳ thi LPI 101 (chủ đề 104): Các thiết bị, các hệ thống tập tin Linux và FHS" đi sâu hơn vào hệ thống tập tin và các công cụ để tạo các phân vùng của các kiểu khác nhau..

Tổng quan về hệ thống tập tin

Một hệ thống tập tin Linux có chứa các tập tin được sắp xếp trên một đĩa hoặc thiết bị lưu trữ khối khác trong các thư mục. Như với nhiều hệ thống khác, các thư mục trên hệ thống Linux có thể chứa các thư mục khác gọi là các thư mục con. Không giống như một hệ thống Microsoft® Windows® với khái niệm về các hệ thống tập tin riêng biệt trên các chữ cái ổ đĩa khác nhau (A:, C:, v.v), một hệ thống tập tin Linux là một cây duy nhất với thư mục / là thư mục root của nó.

Bạn có thể tự hỏi tại sao bố trí đĩa lại quan trọng khi hệ thống tập tin chỉ là một cây lớn. Vâng, điều thực sự xảy ra là mỗi thiết bị khối, chẳng hạn như một phân vùng ổ cứng, CD-ROM hoặc đĩa mềm, thực tế có một hệ thống tập tin trên đó. Bạn tạo khung nhìn cây duy nhất của hệ thống tập tin bằng cách lắp (mount) các hệ thống tập tin trên các thiết bị khác nhau tại một điểm trong cây đó được gọi là một điểm lắp (mount point).

Thông thường, bạn bắt đầu quá trình lắp đặt này bằng cách lắp hệ thống tập tin trên một phân vùng ổ cứng nào đó thành thư mục /. Bạn có thể lắp tiếp các phân vùng ổ cứng khác thành thư mục /boot, /tmp hoặc /home. Ví dụ, bạn có thể lắp hệ thống tập tin trên một ổ đĩa mềm thành thư mục /mnt/floppy và hệ thống tập tin trên đĩa CD-ROM thành thư mục /media/cdrom1. Bạn cũng có thể lắp các tập tin từ các hệ thống khác, sử dụng một hệ thống tập tin nối mạng như NFS. Còn có các kiểu lắp tập tin khác nhau, nhưng ở đây cung cấp cho bạn một ý tưởng của quá trình này. Trong khi quá trình lắp đặt thực tế chỉ lắp hệ thống tập tin (filesystem) trên một thiết bị nào đó, người ta thường nói đơn giản rằng bạn "lắp thiết bị". Điều này được hiểu là "lắp hệ thống tập tin trên thiết bị đó".

Bây giờ, giả sử bạn vừa lắp hệ thống tập tin gốc (/) và bạn muốn lắp thêm một đĩa CD-ROM IDE là /dev/hdd, tại điểm lắp đặt /media/cdrom. Điểm lắp đặt này phải tồn tại trước khi bạn lắp đĩa CD-ROM tới đó. Khi bạn lắp đĩa CD-ROM, các tập tin và các thư mục con trên đĩa CD-ROM trở thành các tập tin và thư mục con nằm trong và bên dưới thư mục /media/cdrom. Bất kỳ các tập tin hoặc các thư mục con nào đã có trong thư mục /media/cdrom không còn nhìn thấy nữa, mặc dù chúng vẫn còn tồn tại trên thiết bị khối có chứa điểm lắp đặt /media/cdrom. Nếu đĩa CD-ROM được tháo lắp đặt (unmount), thì các tập tin và các thư mục con ban đầu lại trở nên nhìn thấy được. Bạn nên tránh vấn đề này bằng cách không đặt các tập tin khác vào một thư mục dự định để sử dụng như một điểm lắp đặt.

Bảng 1 cho thấy các thư mục cần thiết trong / theo Tiêu chuẩn hệ thống phân cấp các hệ thống tập tin (Filesystem Hierarchy Standard –FHS) (để biết thêm chi tiết về FHS, xem Tài nguyên).

Bảng 3. Các thư mục FHS trong /
Thư mụcMô tả
binCác tập tin nhị phân của lệnh chủ yếu.
bootCác tập tin tĩnh của bộ nạp khởi động.
devCác tập tin thiết bị.
etcCấu hình hệ thống đặc thù riêng của máy chủ.
libCác mô đun nhân và các thư viện chia sẻ chủ yếu.
mediaĐiểm lắp đặt cho các phương tiện lưu trữ tháo lắp được.
mntĐiểm lắp đặt để lắp một hệ thống tập tin tạm thời.
optGói phần mềm ứng dụng nâng cấp.
sbinCác tập tin nhị phân hệ thống chủ yếu.
srvDữ liệu cho các dịch vụ được hệ thống này cung cấp.
tmpCác tập tin tạm thời.
usrHệ thống phân cấp thứ cấp.
varDữ liệu thay đổi.

Các phân vùng

Hướng dẫn đầu tiên trong loạt bài này, "Chuẩn bị cho kỳ thi LPI 101 (chủ đề 101): Phần cứng và kiến trúc" đã nói đến các phân vùng trên một đĩa cứng và bây giờ chúng ta sẽ đi vào chi tiết hơn.

Ổ cứng IDE đầu tiên trên một hệ thống Linux là /dev/hda và ổ đĩa SCSI đầu tiên là /dev/sda. Một ổ đĩa cứng được định dạng thành các cung (sector) 512 byte. Tất cả các cung trên một đĩa con phẳng có thể đọc mà không cần di chuyển đầu từ tạo thành một rãnh (track). Các đĩa thường có nhiều hơn một đĩa con phẳng. Tập tin hợp các rãnh trên các đĩa con phẳng khác nhau có thể được đọc mà không cần di chuyển đầu từ được gọi là một trụ (cylinder). Hình học của một ổ đĩa cứng được biểu diễn bằng số trụ, số rãnh (hay số đầu - head) cho mỗi trụ và các cung cho mỗi rãnh.

Các hạn chế về kích thước có thể của mỗi một trong các giá trị này được sử dụng với hệ điều hành DOS trên các hệ thống máy PC đã dẫn đến việc BIOS dịch các giá trị hình học đĩa sao cho các ổ đĩa cứng lớn hơn có thể được hỗ trợ. Cuối cùng, ngay cả phương thức này cũng không đủ. Nhiều phát triển gần đây trong công nghệ ổ đĩa đã dẫn đến việc đánh địa chỉ khối logic (logical block addressing - LBA), do đó, các số đo hình học đĩa CHS ít quan trọng và hình học được thông báo trên một đĩa có thể ít hoặc không liên quan gì đến bố trí thực tế của một đĩa hiện đại. Những đĩa lớn đang sử dụng hiện nay đã thúc đẩy sự mở rộng LBA được biết đến như là LBA48, trong đó dành đến 48 bit cho số lượng cung.

Không gian trên một ổ đĩa cứng được chia (hoặc được phân vùng) thành các phân vùng (partitions). Các phân vùng không được đè lên nhau; không gian còn chưa phân bổ cho một phân vùng được gọi là không gian tự do. Mỗi phân vùng có một tên như /dev/hda1, /dev/hda2, /dev/hda3, /dev/sda1 và v.v. Các ổ đĩa IDE bị giới hạn không quá 63 phân vùng, trong khi các ổ đĩa SCSI bị giới hạn không quá 15. Phân vùng thường được phân bổ như là một số nguyên của các trụ (dựa trên khái niệm có thể không chính xác về trụ).

Nếu hai chương trình phân vùng khác nhau có các cách hiểu khác nhau về hình học đĩa danh nghĩa, thì có thể một chương trình phân vùng thông báo một lỗi hay một vấn đề trục trặc với các phân vùng do chương trình phân vùng kia tạo ra. Bạn cũng có thể thấy loại vấn đề này khi một đĩa được chuyển từ một hệ thống này sang một hệ thống khác, nhất là khi các khả năng của BIOS là khác nhau. Bạn có thể xem hình học đĩa danh nghĩa trên một hệ thống Linux bằng cách xem tập tin đặc biệt về hình học thích hợp trong hệ thống tập tin /proc, ví dụ như /proc/ide/hda/geometry. Đây là hình học được sử dụng bởi các công cụ phân vùng như fdisk và parted. Liệt kê 1 cho thấy việc sử dụng lệnh cat để hiển thị tập tin /proc/ide/hda/geometry, tiếp theo là các thông báo thông tin được tạo ra bằng cách sử dụng công cụ phân vùng parted.

Liệt kê 1. Hình học của đĩa cứng
[root@lyrebird root]# cat /proc/ide/hda/geometry
physical     19457/255/63
logical      19457/255/63
[root@lyrebird root]# parted /dev/hda
GNU Parted 1.6.3
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software, covered by the GNU General Public License.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU General Public License for more details.

Using /dev/hda
Information: The operating system thinks the geometry on /dev/hda is
19457/255/63.  Therefore, cylinder 1024 ends at 8032.499M.
(parted)

Lưu ý rằng, trong Liệt kê 1, parted đã tính toán một vị trí danh nghĩa cho điểm kết thúc của trụ 1024. Trụ 1024 rất quan trọng trong một số hệ thống cũ, ở đây BIOS chỉ có thể khởi động các phân vùng hoàn toàn nằm trong phạm vi 1024 trụ đầu tiên của một đĩa. Điều này có nhiều khả năng xảy ra trong một BIOS không có hỗ trợ LBA. Nó thường không phải là một vấn đề trong các máy tính hiện đại, mặc dù bạn cần phải biết rằng sự hạn chế như thế này có thể tồn tại.

Có ba loại phân vùng: phân vùng chính, phân vùng logic và phân vùng mở rộng. Bảng phân vùng được đặt trong bản ghi khởi động chủ (MBR) của một đĩa. MBR là cung đầu tiên trên đĩa, vì vậy bảng phân vùng không phải là một phần rất lớn của đĩa. Điều này giới hạn số lượng các phân vùng chính trên một đĩa không quá bốn. Khi cần nhiều hơn bốn phân vùng, như thường hay xảy ra, một trong những phân vùng chính, thay vào đó, phải trở thành một phân vùng mở rộng. Một đĩa có thể chứa chỉ một phân vùng mở rộng.

Một phân vùng mở rộng không có gì hơn là một thùng chứa các phân vùng logic. Lược đồ phân vùng này ban đầu được sử dụng với MS DOS và PC DOS và cho phép hệ điều hành DOS, Windows hoặc các hệ thống Linux sử dụng các đĩa của máy PC.

Linux đánh số các phân vùng chính hay mở rộng từ 1 đến 4, do đó, dev hda có thể có bốn phân vùng chính, /dev/hda1, /dev/hda2, /dev/hda3 và /dev/hda4. Hoặc nó có thể có một phân vùng chính duy nhất /dev/hda1 và một phân vùng mở rộng /dev/hda2. Nếu các phân vùng logic được xác định, chúng được đánh số bắt đầu từ 5, do đó, phân vùng logic đầu tiên trên /dev/hda sẽ là /dev/hda5, ngay cả khi không có các phân vùng chính và một phân vùng mở rộng (/dev/hda1) trên đĩa.

Liệt kê 2 cho thấy kết quả đầu ra từ lệnh con p của công cụ phân vùng parted, lệnh con p hiển thị thông tin phân vùng cho đĩa của Liệt kê 1. Lưu ý rằng hệ thống này có các hệ thống tập tin Windows và Linux khác nhau trên đó.

Liệt kê 2. Hiển thị bảng phân vùng với parted
(parted) p
Disk geometry for /dev/hda: 0.000-152627.835 megabytes
Disk label type: msdos
Minor    Start       End     Type      Filesystem  Flags
1          0.031  16300.327  primary   ntfs        boot
2      16300.327  25846.765  primary   fat32       lba
3      25846.765  26842.983  primary   ext3
4      26842.983 152625.344  extended              lba
5      26843.014  28898.173  logical   linux-swap
6      28898.205  48900.981  logical   ext3
7      48901.012  59655.432  logical   ext3
8      59655.463  75657.678  logical   ext3
9      75657.709  95001.569  logical   ext3        boot
10     95001.601 122997.656  logical   reiserfs
11    122997.687 152625.344  logical   ext3

Bố trí không gian đĩa

Như đã đề cập ở trên, một hệ thống tập tin của hệ thống Linux là một cây lớn duy nhất có gốc tại thư mục /. Khá rõ ràng là tại sao dữ liệu trên các đĩa mềm hoặc đĩa CD-ROM phải được lắp vào, nhưng có lẽ không mấy rõ ràng là tại sao bạn nên xem xét phân tách dữ liệu được lưu trữ trên các ổ cứng. Một số lý do tốt để phân tách các hệ thống tập tin là:

  • Các tập tin khởi động. Một số tập tin phải có thể truy cập được bởi BIOS hoặc bộ nạp khởi động lúc khởi động.
  • Nhiều ổ đĩa cứng. Thông thường mỗi ổ cứng sẽ được chia thành một hoặc nhiều phân vùng, mỗi phân vùng có một hệ thống tập tin phải được lắp đặt vào một nơi nào đó trong cây hệ thống tập tin.
  • Các tập tin có thể chia sẻ được. Một số ảnh hệ thống có thể chia sẻ các tập tin tĩnh như các tập tin chương trình chạy được. Các tập tin động như là các thư mục nhà của người dùng hoặc các tập tin lưu trữ tạm thư (spool mail) cũng có thể được chia sẻ, sao cho người dùng có thể đăng nhập vào bất kỳ máy nào trong một số máy trên mạng và vẫn sử dụng cùng một thư mục nhà và hệ thống mail.
  • Tiềm năng tràn bộ nhớ. Nếu một hệ thống tập tin có thể chiếm đến 100 phần trăm dung lượng của nó, thì một ý tưởng tốt là phân tách hệ thống tập tin này khỏi các tập tin cần thiết để chạy hệ thống.
  • Các hạn ngạch. Các hạn ngạch giới hạn số lượng không gian mà những người dùng hay các nhóm người dùng có thể sử dụng trong một hệ thống tập tin.
  • Lắp đặt chỉ đọc. Trước khi có việc ghi nhật ký các hệ thống tập tin, việc khôi phục lại hệ thống tập tin sau khi một hệ thống bị sự cố thường mất một thời gian dài. Vì vậy, các hệ thống tập tin ít khi thay đổi (chẳng hạn như là một thư mục của các chương trình chạy được) có thể được lắp đặt chỉ đọc để không làm lãng phí thời gian cho việc kiểm tra nó sau khi hệ thống bị treo.

Ngoài việc sử dụng hệ thống tập tin đã trình bày cho đến nay, bạn cũng cần phải xem xét việc bố trí không gian trao đổi trên đĩa. Đối với một hệ thống Linux, vùng trao đổi thường là một, hoặc có thể nhiều, phân vùng dành riêng.

Thực hiện các lựa chọn

Giả sử bạn đang thiết lập một hệ thống có ít nhất một ổ đĩa cứng và bạn muốn khởi động từ ổ đĩa cứng đó. (Hướng dẫn này không trình bày việc thiết lập cho một máy trạm không đĩa cứng được khởi động qua mạng Lan hoặc xem xét việc sử dụng một hệ thống Linux đĩa CD hoặc DVD trực tiếp). Mặc dù, có thể thay đổi các kích thước của phân vùng về sau này, nhưng điều này luôn cần một số nỗ lực, do đó việc thực hiện trước các lựa chọn tốt là rất quan trọng. Chúng ta hãy bắt đầu.

Điều cần quan tâm đầu tiên của bạn là đảm bảo rằng hệ thống của bạn có khả năng khởi động được. Một số hệ thống cũ hơn có một hạn chế là BIOS chỉ có thể khởi động từ một phân vùng hoàn toàn nằm trong phạm vi 1024 trụ đầu tiên của đĩa. Nếu bạn có một hệ thống như vậy, thì bạn phải tạo một phân vùng mà cuối cùng sẽ được lắp vào như là /boot để lưu giữ các tập tin then chốt để khởi động hệ thống. Một khi chúng đã được nạp, hệ thống Linux sẽ tiếp quản hoạt động của đĩa và giới hạn 1024 trụ sẽ không ảnh hưởng đến hoạt động tiếp theo của hệ thống. Nếu bạn cần tạo một phân vùng cho thư mục /boot, khoảng 100 megabyte (MB) thường là đủ.

Điều xem xét tiếp theo của bạn có nhiều khả năng là số lượng không gian tráo đổi cần thiết. Với giá cả bộ nhớ hiện nay, không gian tráo đổi là vùng nhớ thứ cấp rất chậm. Trước đây, một quy tắc ngón tay cái phổ biến là tạo không gian tráo đổi tương đương với số lượng RAM thực có. Hiện nay, bạn có thể xem xét việc phân bổ khoảng 500 MB cho một máy trạm và có lẽ 1 GB cho một máy chủ. Nếu các trường hợp đặc biệt đòi hỏi, bạn có thể cần phải tăng thêm các giá trị này, nhưng nếu bạn làm thế, có khả năng hệ thống của bạn sẽ không thực hiện tốt lắm và bạn nên thêm bộ nhớ thực sự. Có thể sử dụng một tập tin tráo đổi, nhưng một phân vùng dành riêng cho không gian tráo đổi sẽ thực hiện công việc tốt hơn.

Bây giờ chúng ta đến với một điểm rẽ nhánh. Việc sử dụng một máy trạm cá nhân có xu hướng khó dự báo hơn nhiều so với sử dụng một máy chủ. Ưu tiên của tôi, đặc biệt là với những người dùng mới, là phân bổ hầu hết các thư mục tiêu chuẩn (/usr, /opt, /var, v.v) vào một phân vùng lớn duy nhất. Điều này đặc biệt có ích cho những người mới sử dụng, có thể không có một ý tưởng rõ ràng về những gì sẽ được cài đặt dưới các thư mục đó. Một máy trạm làm việc đang chạy một màn hình nền đồ họa và một số phải chăng các công cụ phát triển, có thể sẽ đòi hỏi không gian đĩa là 2 hoặc 3 GB cộng thêm không gian cho các nhu cầu của người dùng. Một số công cụ phát triển lớn hơn có thể yêu cầu một vài gigabyte cho mỗi công cụ. Tôi thường bố trí một khoảng không gian đâu đó giữa 10 GB và 20 GB cho mỗi hệ điều hành và tôi để phần còn lại của đĩa của tôi tự do để tải các bản phân phối khác.

Tải công việc của máy chủ sẽ ổn định hơn và việc chạy cạn kiệt không gian trong một hệ thống tập tin cụ thể nhiều khả năng sẽ thảm khốc hơn. Vì vậy, đối với chúng, nói chung bạn sẽ tạo nhiều phân vùng, lan rộng qua nhiều đĩa, có thể sử dụng phần cứng hoặc phần mềm RAID hoặc các nhóm đĩa logic.

Bạn cũng sẽ muốn xem xét khối lượng công việc trên một hệ thống tập tin cụ thể và liệu hệ thống tập tin đó có được chia sẻ giữa một số hệ thống không hay chỉ do một hệ thống sử dụng. Bạn có thể sử dụng kết hợp cả kinh nghiệm, các công cụ lập kế hoạch và sự tăng trưởng ước tính để xác định cách phân bổ tốt nhất cho hệ thống của bạn.

Bất kể bạn đang cấu hình một máy trạm hay một máy chủ, bạn sẽ có một số tập tin nào đó là duy nhất cho mỗi hệ thống nằm trên ổ đĩa cục bộ. Thông thường, chúng bao gồm thư mục /etc cho các tham số hệ thống, thư mục /boot cho các tập tin cần thiết trong lúc khởi động, thư mục /sbin cho tập tin cần thiết cho quá trình khởi động hoặc phục hồi hệ thống, thư mục /root làm thư mục nhà của người sử dụng root, thư mục /var/lock cho các tập tin khóa, thư mục /var/run cho thông tin hệ thống đang chạy và thư mục /var/log cho các tập tin nhật ký cho hệ thống này. Các hệ thống tập tin khác, chẳng hạn như là thư mục /home cho các thư mục nhà của người dùng, thư mục /usr, /opt, /var/mail hay thư mục /var/spool/news có thể ở trên phân vùng riêng biệt, hoặc mạng đã lắp đặt, theo nhu cầu và sở thích cài đặt của bạn.


Các trình quản lý khởi động

Phần này trình bày các tài liệu cho chủ đề 1.102.1 cho kỳ thi quản trị trình độ sơ cấp (LPIC-1) 101. Chủ đề này có trọng số 1.

Phần này thảo luận về quá trình khởi động của máy PC và hai bộ nạp khởi động chính được sử dụng trong Linux: LILO và GRUB. Chúng tôi sẽ trình bày cách lựa chọn trình quản lý khởi động và phục hồi khi có lỗi.

Tổng quan về quá trình khởi động

Trước khi chúng ta đi vào LILO và GRUB, hãy xem lại một máy PC bắt đầu hoặc khởi động như thế nào. Mã, được gọi là BIOS (viết tắt của Basic Input Output Service - Dịch vụ vào ra cơ bản) được lưu trữ trong bộ nhớ không thay đổi như một bộ nhớ ROM, EEPROM, hoặc bộ nhớ cực nhanh (flash). Khi PC đã được cấp điện hoặc khởi động lại, mã này được thực thi. Thông thường nó thực hiện một quá trình tự kiểm tra khi khởi động (POST) để kiểm tra máy PC. Cuối cùng, nó nạp cung đầu tiên từ bản ghi khởi động chính (MBR) trên ổ đĩa khởi động.

Như đã thảo luận trong phần trước về Các phân vùng, MBR cũng chứa bảng phân vùng, do đó số lượng mã thực thi trong MBR là nhỏ hơn 512 byte, không lấy gì làm nhiều lắm. Lưu ý rằng tất cả các đĩa, thậm chí một đĩa mềm, cũng chứa mã thực thi trong MBR của nó, ngay cả khi mã đó chỉ đủ để đưa ra một thông báo như "không có đĩa khởi động trong ổ đĩa A:". Mã được BIOS nạp từ cung đầu tiên này được gọi là bộ nạp khởi động giai đoạn đầu tiên hoặc bộ nạp khởi động giai đoạn 1.

MBR của ổ đĩa cứng tiêu chuẩn được các hệ điều hành MS DOS, PC DOS, Windows sử dụng sẽ kiểm tra bảng phân vùng để tìm một phân vùng chính trên ổ đĩa khởi động có đánh dấu là tích cực (active), nạp cung đầu tiên từ phân vùng đó và chuyển điều khiển đến phần đầu của mã đã nạp. Đoạn mã mới này còn được gọi là bản ghi khởi động phân vùng (partition boot record). Bản ghi khởi động phân vùng thực sự là một bộ nạp khởi động giai đoạn 1 khác, nhưng bản ghi này có đủ thông minh để nạp một tập tin hợp các khối từ phân vùng đó. Mã mới này được gọi là bộ nạp khởi động giai đoạn 2. Khi được MS-DOS và PC-DOS sử dụng, bộ nạp khởi động giai đoạn 2 bắt đầu ngay việc nạp phần còn lại của hệ điều hành. Đây là cách hệ điều hành của bạn tự kéo lên bằng quá trình tự mồi cho đến khi nó hoàn thành và chạy.

Quy trình này hoạt động tốt với một hệ thống có một hệ điều hành duy nhất. Điều gì xảy ra nếu bạn muốn có nhiều hệ điều hành, ví dụ như Windows 98, Windows XP và ba bản phân phối Linux khác nhau? Bạn có thể sử dụng một số chương trình (như các chương trình FDISK của DOS) để thay đổi phân vùng tích cực và khởi động lại. Thật là nặng nề. Hơn nữa, một đĩa có thể chỉ có bốn phân vùng chính và MBR tiêu chuẩn chỉ có thể khởi động một phân vùng chính. Nhưng ví dụ giả định của chúng ta đã nói đến năm hệ điều hành, mỗi hệ điều hành lại cần một phân vùng. Thế đấy!

Giải pháp nằm ở chỗ sử dụng một số mã đặc biệt cho phép người dùng lựa chọn hệ điều hành để khởi động. Các ví dụ có:

  1. Loadlin, một chương trình thi hành được trên DOS được gọi từ một hệ thống DOS đang chạy để khởi động một phân vùng Linux. Giải pháp này đã rất phổ biến khi thiết lập một hệ thống có nhiều lựa chọn khởi động là một quá trình phức tạp và nhiều rủi ro.
  2. Trình quản lý khởi động (Boot Manager) OS/2, một chương trình được cài đặt trong một phân vùng chuyên dụng nhỏ. Phân vùng này được đánh dấu là tích cực và quá trình khởi động MBR tiêu chuẩn bắt đầu chạy trình quản lý khởi động, trong đó đưa ra một trình đơn cho phép người dùng lựa chọn hệ điều hành để khởi động.
  3. Một bộ nạp khởi động thông minh, một chương trình có thể cư trú trên một phân vùng của hệ điều hành và được hoặc bản ghi khởi động phân vùng của một phân vùng tích cực hoặc bản ghi khởi động chính gọi ra. Các ví dụ gồm có:
    • BootMagic™, một phần của Norton PartitionMagic™
    • Bộ nạp LILO (LInux LOader) - Bộ nạp Linux.
    • Bộ nạp GRUB (GRand Unified Boot) - Bộ nạp khởi động thống nhất tổng quát.

Rõ ràng là nếu bạn có thể điều khiển hệ thống trong một chương trình có nhiều hơn 512 byte mã để thực hiện nhiệm vụ của nó, thì cũng không quá khó để cho phép khởi động từ phân vùng logic hoặc khởi động từ các phân vùng không nằm trên ổ đĩa khởi động. Tất cả các giải pháp ấy cho phép các khả năng này, hoặc là vì chúng có thể nạp một bản ghi khởi động từ phân vùng tùy ý, hoặc do chúng có một số hiểu biết về tập tin hoặc các tập tin nào phải nạp để bắt đầu quá trình khởi động.

Từ đây trở đi, chúng ta sẽ tập trung vào LILO và GRUB vì đây là những bộ nạp khởi động có trong hầu hết các bản phân phối Linux. Quá trình cài đặt cho bản phân phối của bạn có lẽ sẽ cung cấp cho bạn một lựa chọn thiết lập bộ nạp khởi động. Cả hai bộ nạp khởi động sẽ làm việc với các ổ đĩa hiện đại nhất. Hãy nhớ rằng công nghệ đĩa đã tiến bộ nhanh chóng, vì vậy bạn nên luôn luôn chắc chắn rằng bộ nạp khởi động đã chọn của bạn, cũng như bản phân phối Linux (hoặc hệ điều hành khác) đã chọn của bạn, cũng như BIOS hệ thống của bạn sẽ làm việc với đĩa mới tinh của bạn. Nếu không chắc như vậy có thể dẫn đến mất dữ liệu.

Bộ nạp giai đoạn 2 đã sử dụng trong LILO và GRUB cho phép bạn chọn để nạp cái nào trong số một vài hệ điều hành hoặc phiên bản. Tuy nhiên, LILO và GRUB khác nhau đáng kể ở chỗ rằng khi có sự thay đổi hệ thống, bạn bắt buộc phải sử dụng một lệnh để tái tạo lại thiết lập khởi động LILO mỗi khi bạn nâng cấp nhân hệ điều hành hoặc thực hiện các thay đổi khác nào đó cho hệ thống của bạn, trong khi GRUB có thể thực hiện điều này thông qua một tập tin văn bản cấu hình mà bạn có thể chỉnh sửa được. LILO đã được dùng một thời gian. Còn GRUB mới hơn. GRUB ban đầu bay giờ đã trở thànhGRUB di sản và GRUB 2 đang được phát triển dưới sự bảo trợ của Quỹ phần mềm tự do (Free Software Foundation) (xem Tài nguyên).

LILO

LILO (hay LInux Loader), bộ nạp Linux là một trong hai bộ nạp khởi động Linux phổ biến nhất. LILO có thể được cài đặt vào MBR của ổ đĩa cứng có khả năng khởi động của bạn hoặc vào bản ghi khởi động phân vùng của một phân vùng. Nó cũng có thể được cài đặt trên các thiết bị tháo rời như đĩa mềm, đĩa CD hoặc thanh nhớ USB. Thực hành trên một đĩa mềm hoặc thanh nhớ USB là một ý tưởng tốt nếu bạn chưa quen thuộc với LILO, vì thế đó là những gì mà chúng ta sẽ làm trong các ví dụ.

Trong khi cài đặt Linux, bạn thường sẽ chỉ rõ hoặc LILO hoặc GRUB làm trình quản lý khởi động. Nếu bạn chọn GRUB, thì có thể LILO không được cài đặt. Nếu như vậy, thì bạn sẽ cần phải cài đặt gói cho LILO. Chúng tôi sẽ giả định rằng bạn đã có các gói LILO đã được cài đặt. Xem các phần về quản lý gói dưới đây trong hướng dẫn này nếu bạn cần trợ giúp về điều này.

Chức năng chính của lệnh lilo nằm trong /sbin/lilo, là viết một bản ghi khởi động giai đoạn 1 và tạo một tập tin ánh xạ (/boot/map) bằng cách sử dụng thông tin cấu hình thường được đặt trong /etc/lilo.conf. Chúng tôi sẽ nói đến một số công dụng phụ sau. Trước tiên chúng ta hãy nhìn vào một tập tin cấu hình LILO điển hình có thể được sử dụng trên một hệ thống khởi động kép với Windows và Linux.

Liệt kê 3. Ví dụ /etc/lilo.conf
prompt
timeout=50
compact
default=linux
boot=/dev/fd0
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
password=mypassword
restricted

image=/boot/vmlinuz-2.4.21-32.0.1.EL
        label=linux
        initrd=/boot/initrd-2.4.21-32.0.1.EL.img
        read-only
        append="hdd=ide-scsi root=LABEL=RHEL3"

other=/dev/hda1
        loader=/boot/chain.b
        label=WIN-XP

Bộ các tùy chọn đầu tiên ở trên là các tùy chọn toàn cục để điều khiển cách LILO hoạt động. Bộ thứ hai và thứ ba cung cấp các tùy chọn cho mỗi ảnh hệ thống cho hai hệ điều hành mà chúng ta muốn cho phép LILO khởi động, trong ví dụ này là Red Hat Enterprise Linux 3 hoặc Windows XP.

Trong ví dụ của chúng ta các tùy chọn toàn cầu là:

prompt (dấu nhắc)
bắt buộc hiển thị một dấu nhắc khởi động.
timeout (thời gian chờ)
chỉ rõ, theo đơn vị phần mười giây, thời gian chờ trước khi hệ thống mặc định sẽ được tự động nạp. Ví dụ của chúng ta có timeout=50 là tương đương với một thời gian chờ 5 giây.
compact
cố gắng để hợp nhất các yêu cầu đọc cho các cung kề nhau. Việc này tăng tốc thời gian nạp và giữ cho tập tin ánh xạ nhỏ hơn.
default (mặc định)
chỉ rõ hệ điều hành nào sẽ được nạp theo mặc định. Nếu không được chỉ rõ, hệ điều hành đầu tiên được sử dụng. Trong ví dụ của chúng ta, hệ thống Linux sẽ được nạp nếu người dùng không chọn cách khác trong thời gian chờ 5 giây.
boot (khởi động)
chỉ rõ LILO sẽ được cài đặt ở đâu. Trong ví dụ của chúng ta, đó là đĩa mềm, /dev/fd0. Để cài đặt trong MBR của ổ cứng đầu tiên hãy chỉ rõ boot=/dev/hda. Hệ thống RHEL 3 của chúng ta thực tế nằm trên thư mục /dev/hda11, vì vậy chúng ta sẽ ghi rõ boot=/dev/hda11 là chúng ta muốn cài LILO vào phân vùng này. Nếu bỏ qua tham số này, LILO sẽ cố gắng sử dụng cung khởi động của thiết bị hiện được lắp vào gốc (/).
map (ánh xạ)
chỉ rõ vị trí của tập tin ánh xạ được LILO sử dụng để cung cấp các dấu nhắc của người sử dụng và nạp các hệ điều hành được quy định trong các phần cho mỗi ảnh của lilo.conf. Theo mặc định là /boot/map.
install (cài đặt)
chỉ rõ các tập tin mới để cài đặt thành cung khởi động. Mặc định là /boot/boot.b, được cung cấp như một phần của gói LILO.
message (thông báo)
chỉ rõ một thông báo được hiển thị trước dấu nhắc khởi động. Thông báo này có chiều dài không quá 65.535 byte. Nếu hệ thống của bạn sẽ hiển thị một nền đồ họa với một trình đơn LILO, bạn có thể tìm thấy /boot/message có chứa một tập tin hình ảnh. Trên một số hệ thống Red Hat đây sẽ là một tập tin ảnh 300x200 pixel (điểm ảnh) theo định dạng PCX. Trên các hệ thống SUSE bạn có thể tìm thấy tập tin này được thay thế bằng một ảnh bitmap VGA 16 màu 640x480 pixel. Trong trường hợp này, bạn cũng sẽ tìm thấy một số tham số bổ sung. Hãy kiểm tra tài liệu tham khảo đi kèm với hệ thống của bạn. Ví dụ, hệ thống SUSE SLES9 của tôi có tham số này trong /usr/share/doc/packages/lilo/README.bitmaps.
lba32
chỉ rõ rằng LILO nên sử dụng chế độ LBA32 cho đĩa hơn là sử dụng CHS hoặc việc đánh địa chỉ cung tuyến tính.
password (mật khẩu)
chỉ rõ một mật khẩu phải được nhập vào trước khi khởi động một ảnh. Lưu ý rằng mật khẩu này là văn bản rõ, do đó các thuộc tính của tập tin /etc/lilo.conf sẽ chỉ cho phép người dùng root được xem tập tin. Nó không nên giống như như mật khẩu root của bạn. Cả hai mật khẩu và tùy chọn tiếp theo, bị hạn chế (restricted), thực sự là các ví dụ về các tuỳ chọn cho mỗi ảnh có thể được quy định trong phần toàn cầu cho thuận tiện. Nếu có quy định như vậy, cùng các giá trị giống nhau áp dụng cho tất cả các ảnh, trừ khi bị ghi đè lên một phần hình ảnh riêng.
restricted (bị hạn chế)
giảm nhẹ yêu cầu mật khẩu, chỉ yêu cầu mật khẩu khi người dùng cố gắng đưa vào các tham số bổ sung thêm trong quá trình khởi động. Bạn có thể sử dụng điều này để cho phép một người dùng khởi động bình thường mà không cần nhập một mật khẩu nhưng phải cung cấp một mật khẩu để khởi động vào chế độ người dùng đơn.

Phần tiếp theo đưa ra các tùy chọn cho mỗi ảnh cho hệ thống Linux RHEL3 của chúng ta.

image (ảnh)
chỉ rõ rằng phần này dành cho một hệ thống Linux sẽ được nạp từ một tập tin. Tham số này là một ảnh nhân Linux.
label (nhãn)
là một nhãn tùy chọn mà bạn có thể nhập vào thay cho tên ảnh đầy đủ để chọn ảnh này.
initrd
là tên của đĩa RAM ban đầu, trong đó có các mô đun cần thiết cho nhân trước khi hệ thống tập tin của bạn được lắp vào.
read-only (chỉ đọc)
chỉ rõ rằng hệ thống tập tin gốc ban đầu nên được lắp vào ở chế độ chỉ đọc. Các giai đoạn khởi động sau sẽ thường sẽ lắp lại nó ở chế độ đọc-viết sau khi đã kiểm tra.
append (nối thêm)
chỉ rõ các tùy chọn được chuyển tiếp đến nhân. Ví dụ của chúng ta chỉ rõ rằng sẽ sử dụng mô phỏng SCSI cho /dev/hdd (các nhân 2.4 và trước đó xử lý các thiết bị quang chẳng hạn như đĩa CD-ROM theo cách này). Nó cũng quy định rằng phân vùng với nhãn RHEL3 phải được lắp vào như là thư mục gốc (/).

Phần cuối cùng đưa ra các tùy chọn cho mỗi ảnh cho hệ thống không phải Linux của chúng ta.

other (khác)
chỉ rõ tên của thiết bị có chứa thiết bị (hoặc tập tin) có cung khởi động của hệ thống đã được nạp.
loader (bộ nạp)
chỉ rõ bộ nạp sẽ được sử dụng. LILO hỗ trợ chain.b, đơn giản chỉ nạp bản ghi khởi động phân vùng từ một phân vùng là một phân vùng có khả năng khởi động được và một biến thể, /boot/os2_d.b có thể được dùng để khởi động OS/2 từ một ổ đĩa cứng thứ hai.
label (nhãn)
là một nhãn tùy chọn mà bạn có thể nhập vào thay cho tên ảnh đầy đủ để chọn ảnh này.

Bây giờ, khi chúng ta đưa một đĩa mềm trắng vào ổ đĩa chúng ta có thể chạy lệnh lilo (/sbin/lilo) để tạo ra một đĩa mềm khởi động như trong Liệt kê 4. Lưu ý rằng lệnh lilo có năm mức chi tiết thông báo hoạt động. Mỗi mức cần thêm một tùy chọn –v.

Liệt kê 4. Tạo một đĩa mềm khởi động bằng lilo
[root@lyrebird root]# lilo -v -v
LILO version 21.4-4, Copyright (C) 1992-1998 Werner Almesberger
'lba32' extensions Copyright (C) 1999,2000 John Coffman

Reading boot sector from /dev/fd0
Merging with /boot/boot.b
Secondary loader: 11 sectors.
Mapping message file /boot/message
Compaction removed 43 BIOS calls.
Message: 74 sectors.
Boot image: /boot/vmlinuz-2.4.21-32.0.1.EL
Setup length is 10 sectors.
Compaction removed 2381 BIOS calls.
Mapped 2645 sectors.
Mapping RAM disk /boot/initrd-2.4.21-32.0.1.EL.img
Compaction removed 318 BIOS calls.
RAM disk: 354 sectors.
Added linux *
Boot other: /dev/hda1, on /dev/hda, loader /boot/chain.b
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added WIN-XP
/boot/boot.0200 exists - no backup copy made.
Map file size: 8192 bytes.
Writing boot sector.

Chúng ta bây giờ có một đĩa mềm LILO có khả năng khởi động. Nếu LILO gặp một lỗi, bạn có thể thấy một thông báo lỗi và cung khởi động sẽ không được ghi. Ví dụ, nếu chúng ta đã bỏ qua tùy chọn lba32 từ tập tin /etc/lilo.conf của chúng ta, thì chúng ta có thể thấy kết quả đầu ra như trong Liệt kê 5. Đây sẽ là một lời khuyên để thử các tùy chọn linear (tuyến tính) hoặc lba32. Trong trường hợp này, chúng ta sử dụng dòng lệnh để xác định tùy chọn -l, tương đương với quy định tùy chọn tuyến tính trong lilo.conf. Nếu chúng ta đã làm điều này lại một lần nữa với tùy chọn -L, thì lilo sẽ thành công và kết quả đầu ra sẽ như trong liệt kê trước đó.

Liệt kê 5. Ví dụ /etc/lilo.conf không đúng
[root@lyrebird root]# lilo
Warning: device 0x030b exceeds 1024 cylinder limit
Fatal: geo_comp_addr: Cylinder number is too big (16284 > 1023)
[root@lyrebird root]# lilo -l
Warning: device 0x030b exceeds 1024 cylinder limit
Fatal: sector 261613688 too large for linear mode (try 'lba32' instead)

Khi bạn đã thử xong đĩa mềm khởi động của bạn, hãy thay đổi mục boot=/dev/fd0 trong tập tin lilo.conf của bạn để cài đặt LILO vào MBR hoặc một bản ghi khởi động phân vùng. Ví dụ, boot=/dev/hda sẽ cài đặt LILO vào bản ghi khởi động chính của đĩa cứng IDE đầu tiên của bạn.

Bây giờ bạn đã được giới thiệu về LILO và tập tin cấu hình của nó, bao gồm cách làm thế nào để ghi đè lên một số tùy chọn cấu hình từ dòng lệnh lilo. Bạn sẽ tìm thêm nhiều thông tin hơn trong trang hướng dẫn sử dụng lilo bằng cách sử dụng lệnh man lilo. Thậm chí, bạn sẽ tìm thấy nhiều thông tin phong phú hơn trong hướng dẫn sử dụng dạng tập tin postscript được cài đặt với gói lilo. Tập tin postscript này sẽ được cài đặt trong thư mục tài liệu tham khảo của bạn, nhưng vị trí chính xác có thể thay đổi tùy từng hệ thống. Một cách để xác định vị trí của tập tin này là lọc danh sách gói thông qua lệnh grep. Liệt kê 6 hiển thị kết quả lệnh này cho hệ thống RHEL3 dựa trên lệnh rpm mà chúng ta đang sử dụng trong ví dụ này.

Liệt kê 6. Xác định vị trí tập tin hướng dẫn sử dụng LILO với lệnh rpm.
[ian@lyrebird ian]$ rpm -ql lilo | grep ".ps$"
/usr/share/doc/lilo-21.4.4/doc/Technical_Guide.ps
/usr/share/doc/lilo-21.4.4/doc/User_Guide.ps

Các lệnh phụ của LILO

LILO có một số lệnh phụ.

lilo -q
sẽ hiển thị thông tin từ tập tin ánh xạ
lilo -R
sẽ thiết lập lilo để tự động khởi động hệ thống đã chọn chỉ trong lần khởi động lại tiếp theo. Điều này rất thuận tiện cho việc khởi động lại tự động các hệ thống từ xa.
lilo -I
sẽ hiển thị thông tin về đường dẫn của một nhân
lilo -u
sẽ gỡ bỏ cài đặt lilo và khôi phục lại bản ghi khởi động trước đó.

Khi LILO khởi động một hệ thống Linux bạn có thể muốn cung cấp thêm các tham số lúc khởi động. Ví dụ, nếu việc khởi động đồ họa của bạn đã không làm việc, bạn có thể muốn khởi động trong chế độ 3 hoặc trong chế độ người sử dụng duy nhất để khôi phục. Bất kỳ văn bản nào bạn gõ sau tên nhãn sẽ được chuyển đến nhân. Chẳng hạn, trong ví dụ của chúng ta, chúng ta sẽ chọn hệ thống RHEL đơn giản bằng cách gõ "linux". Để khởi động trong chế độ 3 hoặc chế độ người dùng đơn lẻ, chúng ta sẽ gõ một trong những chuỗi kí tự sau cho phù hợp.

linux 3
linux single

Hãy nhớ rằng với LILO bạn phải chạy lệnh lilo bất cứ khi nào bạn cập nhật tập tin cấu hình (/etc/lilo.conf). Bạn cũng nên chạy lệnh lilo nếu bạn thêm, di chuyển hay xóa các phân vùng hoặc thực hiện bất kỳ thay đổi khác nào có thể làm mất hiệu lực bộ nạp khởi động đã tạo ra.

GRUB

GRUB hay bộ nạp khởi động thống nhất tổng quát là một bộ nạp khác trong hai bộ nạp khởi động Linux phổ biến nhất. Cũng giống như với LILO, GRUB có thể được cài đặt vào MBR của ổ đĩa cứng có khả năng khởi động của bạn hoặc vào bản ghi khởi động phân vùng của một phân vùng. Nó cũng có thể được cài đặt trên các thiết bị tháo lắp như đĩa mềm, đĩa CD hoặc thanh nhớ USB. Thực hành trên một đĩa mềm hoặc thanh nhớ USB là một ý tưởng tốt nếu bạn chưa quen thuộc với GRUB, vì thế đó là những gì mà chúng ta sẽ làm trong các ví dụ.

GRUB hay GNU GRUB bây giờ được phát triển dưới sự bảo trợ của Quỹ phần mềm tự do (Free Software Foundation). Một phiên bản mới là GRUB 2 đang được phát triển, vì vậy các phiên bản GRUB 0.9x ban đầu bây giờ đang được biết đến như là Grub di sản (Grub Legacy).

Trong khi cài đặt Linux, bạn sẽ thường chỉ rõ hoặc LILO hoặc GRUB làm một trình quản lý khởi động. Nếu bạn chọn LILO, thì GRUB có thể không được cài đặt. Nếu như vậy thì bạn sẽ cần phải cài đặt gói cho GRUB. Chúng tôi sẽ giả định rằng bạn đã cài đặt các gói GRUB. Xem các phần quản lý các gói dưới đây, trong hướng dẫn này nếu bạn cần giúp đỡ về điều này.

GRUB có một tập tin cấu hình thường được lưu trữ trong /boot/grub/grub.conf. Nếu hệ thống tập tin của bạn hỗ trợ liên kết biểu tượng, giống như hầu hết các hệ thống tập tin Linux, thì nhiều khả năng là bạn sẽ có /boot/grub/menu.lst như là một liên kết biểu tượng đến /boot/grub/grub.conf.

Lệnh grub (/sbin/grub hoặc trên một số hệ thống, ở /usr/sbin/grub) là một trình shell nhỏ, nhưng khá mạnh, hỗ trợ một số lệnh để cài đặt GRUB, khởi động hệ thống, định vị và hiển thị các tập tin cấu hình và các nhiệm vụ tương tự. Trình shell này chia sẻ nhiều mã với bộ nạp khởi động GRUB giai đoạn hai, vì vậy nó rất có ích để tìm hiểu về GRUB mà không cần phải khởi động một môi trường GRUB giai đoạn thứ hai. GRUB giai đoạn 2 chạy hoặc trong chế độ trình đơn hoặc chế độ lệnh, để cho phép bạn chọn một hệ điều hành từ một trình đơn, hoặc để chỉ rõ các lệnh riêng lẻ để nạp một hệ thống. Ngoài ra còn có một số lệnh khác như grub-install sử dụng trình shell grub và giúp cho tự động hóa các nhiệm vụ như việc cài đặt GRUB.

Liệt kê 7 cho thấy một phần của một tập tin cấu hình GRUB. Khi bạn nhìn vào nó, hãy nhớ một điều quan trọng -- GRUB đếm các ổ đĩa, các phân vùng và những thứ cần phải được đếm bắt đầu từ 0 thay vì 1.

Liệt kê 7. Ví dụ cấu hình GRUB /boot/grub/menu.lst.
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd1,5)
#          kernel /boot/vmlinuz-version ro root=/dev/hdc6
#          initrd /boot/initrd-version.img
#boot=/dev/hdc6
default=2
timeout=10
splashimage=(hd0,6)/boot/grub/splash.xpm.gz
password --md5 $1$/8Kl21$3VPIphs6REHeHccwzjQYO.

title Red Hat Linux (2.4.20-31.9)
        root (hd0,6)
        kernel /boot/vmlinuz-2.4.20-31.9 ro root=LABEL=RH9 hdd=ide-scsi
        initrd /boot/initrd-2.4.20-31.9.img

title Red Hat Linux (2.4.20-6)
        root (hd0,6)
        kernel /boot/vmlinuz-2.4.20-6 ro root=LABEL=RH9 hdd=ide-scsi
        initrd /boot/initrd-2.4.20-6.img

title Red Hat Enterprise Linux WS A (2.4.21-32.0.1.EL)
        root (hd0,10)
        kernel /boot/vmlinuz-2.4.21-32.0.1.EL ro root=LABEL=RHEL3 hdd=ide-scsi
        initrd /boot/initrd-2.4.21-32.0.1.EL.img

title		Ubuntu, kernel 2.6.10-5-386 
root		(hd1,10)
kernel		/boot/vmlinuz-2.6.10-5-386 root=/dev/hdb11 ro quiet splash
initrd		/boot/initrd.img-2.6.10-5-386
savedefault
boot

title		Ubuntu, kernel 2.6.10-5-386 (recovery mode)
lock
root		(hd1,10)
kernel		/boot/vmlinuz-2.6.10-5-386 root=/dev/hdb11 ro single
initrd		/boot/initrd.img-2.6.10-5-386
boot

title Win/XP
        rootnoverify (hd0,0)
        chainloader +1
        
title Floppy
        root (fd0)
        chainloader +1

Cũng như với tập tin cấu hình LILO, bộ các tùy chọn đầu tiên ở trên điều khiển cách GRUB hoạt động. Đối với GRUB, bộ tùy chọn này được gọi là các lệnh trình đơn và chúng phải xuất hiện trước các lệnh khác. Những phần còn lại cung cấp các tùy chọn cho mỗi ảnh của từng hệ điều hành mà chúng ta muốn cho phép GRUB khởi động. Lưu ý rằng "tiêu đề" được xem là một lệnh trình đơn. Mỗi cá thể tiêu đề được tiếp nối bằng một hoặc nhiều lệnh chung hoặc lệnh mục trình đơn. Ví dụ LILO của chúng ta là một ví dụ cơ sở điển hình cho một hệ thống khởi động kép với Windows và Linux. Ví dụ này xuất phát từ cùng một hệ thống mà chúng ta đã sử dụng trước đây, nhưng ở đây chúng tôi đã thêm một vài hệ điều hành nữa, để chỉ cho bạn thấy rõ một số sức mạnh của một bộ nạp khởi động. Bạn sẽ nhận ra nhiều loại phần tử giống nhau xuất hiện trong cả hai tập tin cấu hình LILO và GRUB. Bạn có thể muốn suy nghĩ về những gì sẽ cần phải thay đổi nếu bạn bổ sung thêm các hệ điều hành nữa ở đây vào ví dụ LILO ở trên.

Các lệnh trình đơn áp dụng cho tất cả các phần khác trong ví dụ của chúng ta là:

#
Bất kỳ dòng nào bắt đầu với một dấu # là một chú thích và được GRUB bỏ qua. Tập tin cấu hình đặc biệt này ban đầu được tạo ra bởi Anaconda, một trình cài đặt của Red Hat. Bạn có lẽ sẽ tìm thấy các chú thích bổ sung vào tập tin cấu hình GRUB của bạn nếu bạn cài đặt GRUB khi bạn cài đặt Linux. Các chú thích này thường sẽ được dùng như các trợ giúp cho chương trình nâng cấp hệ thống, sao cho cấu hình GRUB của bạn có thể được giữ theo kịp hiện trạng các nhân đã nâng cấp. Hãy chú ý đến bất kỳ dấu nào dành cho mục đích này nếu bạn tự chỉnh sửa tập tin cấu hình.
default (mặc định)
chỉ rõ phải nạp hệ thống nào nếu người dùng không thực hiện một sự lựa chọn trong khoảng thời gian chờ. Trong ví dụ của chúng ta, default=2 có nghĩa là sẽ nạp mục thứ ba. Hãy nhớ rằng GRUB đếm từ 0 thay vì 1. Nếu không quy định gì, thì giá trị mặc định là khởi động mục đầu tiên, số hiệu mục là 0.
timeout (thời gian chờ)
chỉ rõ một thời gian chờ tính bằng giây trước khi khởi động mục mặc định. Lưu ý rằng LILO đếm thời gian chờ theo từng phần mười giây trong khi GRUB sử dụng toàn bộ một giây.
splashimage (hình ảnh động)
Chỉ rõ hình ảnh nền sau hay hình ảnh động (splash), được hiển thị với trình đơn khởi động. GRUB nói đến ổ cứng đầu tiên như là (hd0) và phân vùng đầu tiên trên ổ đĩa đó như là (hd0, 0), do đó đặc tả splashimage=(hd0,6)/boot/grub/splash.xpm.gz có nghĩa là sử dụng tập tin /boot/grub/splash.xpm.gz đã đặt trên phân vùng 7 của ổ cứng đầu tiên. Hãy nhớ rằng đếm từ 0. Cũng lưu ý rằng hình ảnh là một tập tin XPM được nén bằng gzip. Hỗ trợ hiển thị hình ảnh động là một miếng vá (patch) có thể có hoặc không có trong bản phân phối của bạn.
password (mật khẩu)
xác định một mật khẩu phải được nhập vào trước khi một người dùng có thể mở khóa trình đơn và hoặc sửa một dòng cấu hình hoặc nhập vào lệnh GRUB. Như với LILO, mật khẩu này có thể là văn bản rõ. GRUB cũng cho phép các mật khẩu được lưu trữ như là một mã MD5, như trong ví dụ của chúng ta. Điều này phần nào an toàn hơn và hầu hết các quản trị viên sẽ thiết lập một mật khẩu. Nếu không có mật khẩu, người dùng có quyền truy cập đầy đủ vào dòng lệnh GRUB.

Ví dụ chúng ta cho thấy năm bản phân phối Linux (ba bản Red Hat và hai bản Ubuntu) cộng với một bản Windows XP và một tùy chọn khởi động từ đĩa mềm. Các lệnh được sử dụng trong các phần này là:

title (tiêu đề)
là một tiêu đề mô tả được hiển thị như là mục trình đơn khi Grub khởi động. Bạn sử dụng các phím mũi tên để di chuyển lên và xuống lướt qua danh sách tiêu đề và sau đó nhấn phím Enter để chọn một mục cụ thể.
root
chỉ rõ phân vùng sẽ được khởi động. Giống như với hình ảnh động, hãy nhớ rằng số đếm bắt đầu từ 0, do đó, hệ thống Red Hat đầu tiên được quy định như là root (hd0,6) thực tế ở trên phân vùng 7 của ổ cứng đầu tiên (trong trường hợp này là /dev/hda7), trong khi hệ thống Ubuntu đầu tiên được quy định như là root (hd1,10) sẽ ở trên ổ đĩa cứng thứ hai (/dev/hdb11). GRUB sẽ cố gắng lắp phân vùng này để kiểm tra nó và đưa ra các giá trị cho hệ điều hành được khởi động trong một số trường hợp.
kernel (nhân)
chỉ rõ ảnh nhân nào được nạp và bất kỳ các tham số nhân nào cần thiết. Điều này cũng tương tự như một sự kết hợp của ảnh LILO và các lệnh nối thêm. Chúng ta có hai nhân Red Hat 9 khác nhau, cộng với một nhân trạm làm việc Linux 3 doanh nghiệp của Red Hat và một mức của hệ thống Ubuntu với hai bộ các tham số nhân khác nhau trong ví dụ này.
initrd
là tên của đĩa RAM ban đầu trong đó có các môđun cần thiết cho nhân trước khi hệ thống tập tin của bạn được lắp vào.
savedefault (mặc định lưu trữ)
được hiển thị ở đây để minh hoạ. Nếu lệnh trình đơn default=saved được chỉ rõ và lệnh savedefault được chỉ định cho một hệ điều hành, thì việc khởi động hệ điều hành đó sẽ làm cho nó trở thành mặc định cho đến khi một hệ điều hành khác được chỉ định là savedefault được khởi động. Trong ví dụ này, đặc tả default=2 sẽ ghi đè lên bất kỳ giá trị mặc định nào đã lưu.
boot (khởi động)
là một tham số tùy chọn ra lệnh cho GRUB khởi động hệ điều hành đã chọn. Đây là hành động mặc định khi tất cả các lệnh cho một sự lựa chọn đã được xử lý.
lock (khóa)
được sử dụng trong ví dụ này với hệ thống Ubuntu thứ hai. Hệ thống này sẽ khởi động trong chế độ người sử dụng đơn, cho phép một người dùng thực hiện các thay đổi cho một hệ thống mà thông thường chỉ hạn chế cho quyền truy cập root. Nếu tùy chọn này được chỉ rõ, thì bạn cũng nên chỉ định một mật khẩu trong các tùy chọn ban đầu, nếu không, người dùng có thể chỉnh sửa tùy chọn khóa của bạn và khởi động hệ thống, hay thêm " single " (đơn) tới một trong những mục khác. Cũng có khả năng chỉ định một mật khẩu khác cho từng mục riêng lẻ nếu bạn muốn.
rootnoverify (không kiểm tra root)
tương tự như root, ngoại trừ GRUB không cố gắng lắp hệ thống tập tin hoặc kiểm tra các tham số của nó. Điều này thường được sử dụng cho các hệ thống tập tin như là NTFS không được GRUB hỗ trợ. Bạn cũng có thể sử dụng điều này nếu bạn muốn GRUB nạp bản ghi khởi động chính trên một ổ đĩa cứng, ví dụ để truy cập vào một tập tin cấu hình khác hoặc để nạp lại bộ nạp khởi động trước đó của bạn.
chainloader (bộ nạp dây chuyền)
chỉ rõ rằng tập tin khác sẽ được nạp như là một tập tin giai đoạn 1. Giá trị "+1" tương đương với 0+1 có nghĩa là nạp một cung bắt đầu từ cung 0, tức là, nạp cung đầu tiên từ thiết bị được chỉ định bởi root hoặc rootnoverify.

Bây giờ bạn có một số ý tưởng về những gì bạn có thể tìm thấy trong một tập tin boot/grub/grub.conf (hay /boot/grub/menu.lst) điển hình. Có rất nhiều các lệnh GRUB khác cung cấp việc kiểm soát rộng rãi trong quá trình khởi động cũng như trợ giúp về cài đặt grub và các nhiệm vụ khác. Bạn có thể tìm hiểu thêm về những điều này trong hướng dẫn sử dụng GRUB có sẵn trên hệ thống của bạn bằng cách sử dụng lệnh info grub.

Bây giờ chúng ta có một tập tin cấu hình GRUB, chúng ta cần tạo một đĩa mềm khởi động để thử nó. Cách đơn giản nhất để làm điều này là sử dụng lệnh grub-install như hiển thị trong Liệt kê 8. Nếu bạn đang cài đặt GRUB vào một đĩa mềm hoặc vào một phân vùng, thì trước tiên bạn cần chạy lệnh bỏ lắp đặt (unmount). Điều này không áp dụng khi bạn đang cài đặt GRUB trong MBR của một ổ cứng, bởi vì bạn chỉ lắp các phân vùng (/dev/hda1, /dev/hda2, v.v) và mà không phải là toàn bộ ổ đĩa cứng (/dev/hda).

Liệt kê 8. Cài đặt GRUB vào đĩa mềm.
[root@lyrebird root]# umount /dev/fd0
umount: /dev/fd0: not mounted
[root@lyrebird root]# grub-install /dev/fd0
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/hda
(hd1)   /dev/hdc
(hd2)   /dev/sda

Lưu ý: Bạn cũng có thể sử dụng tên thiết bị GRUB (fd0) thay cho /dev/fd0, nhưng nếu bạn làm thế bạn phải bọc xung quanh nó bằng các dấu nháy để tránh việc shell diễn dịch các dấu ngoặc đơn. Ví dụ:

grub-install '(fd0)'

Nếu bạn đã bắt đầu với một đĩa mềm rỗng và bây giờ lắp nó, bạn sẽ khám phá ra rằng nó vẫn còn là rỗng. Điều đã xảy ra là GRUB đã viết một bộ nạp giai đoạn 1 đã tùy chỉnh vào cung đầu tiên của đĩa. Điều này không hiển thị trong hệ thống tập tin. Bộ nạp giai đoạn 1sẽ nạp giai đoạn 2 và tập tin cấu hình từ ổ đĩa cứng của bạn. Hãy thử khởi động từ đĩa mềm và bạn sẽ thấy rất ít hoạt động vào ra (IO) trước khi trình đơn của bạn được hiển thị.

Ánh xạ thiết bị nói cho bạn biết cách GRUB sẽ khớp khung nhìn bên trong của nó về các đĩa của bạn (fd0, hd0, HD1) với khung nhìn của Linux (/dev/fd0, /dev/hda, /dev/hdb) như thế nào. Trên một hệ thống có một hoặc hai ổ đĩa cứng IDE và có lẽ một ổ đĩa mềm, nhiều khả năng điều này là đúng đắn. Nếu đã có một ánh xạ thiết bị, GRUB sẽ sử dụng lại nó mà không cần khảo sát thử. Nếu bạn vừa mới thêm một ổ đĩa mới và muốn bắt buộc tạo ra một ánh xạ thiết bị mới hãy thêm tùy chọn --resize cho lệnh grub-install. Ví dụ:

Một khi bạn đã kiểm tra đĩa mềm khởi động của bạn, bạn đã sẵn sàng để cài đặt GRUB trong MBR của ổ đĩa cứng của bạn. Đối với các ổ đĩa cứng IDE đầu tiên, bạn sẽ sử dụng:

grub-install /dev/hda
hoặc
grub-install '(hd0)'

Để cài đặt nó vào bản ghi khởi động phân vùng cho phân vùng 11, hãy sử dụng:

grub-install /dev/hda11
hoặc
grub-install '(hd0,10)'

Hãy nhớ rằng số đếm GRUB bắt đầu từ 0.

Cập nhật hệ thống

Hầu hết các bản phân phối cung cấp các công cụ để cập nhật hệ thống. Những công cụ này thường nhận biết bộ nạp khởi động đang sử dụng và thường sẽ cập nhật tự động tập tin cấu hình của bạn. Nếu bạn xây dựng nhân tùy chỉnh riêng của bạn hoặc thích sử dụng một tập tin cấu hình với các tên hoặc vị trí không tiêu chuẩn, thì bạn có thể cần phải tự mình cập nhật tập tin cấu hình.

  • Nếu bạn sử dụng LILO, thì bạn phải chạy lệnh lilo bất cứ khi nào bạn cập nhật tập tin cấu hình của bạn hoặc tiến hành thay đổi, ví dụ như thêm một ổ cứng hoặc xóa một phân vùng.
  • Nếu bạn sử dụng GRUB, bạn có thể chỉnh sửa tập tin /boot/grub/grub.conf để thực hiện các thay đổi của bạn và bộ nạp giai đoạn 2 GRUB sẽ đọc tập tin đó khi bạn khởi động lại. Bình thường bạn không cần phải cài đặt lại GRUB chỉ vì bạn thêm một nhân mới. Tuy nhiên, nếu bạn di chuyển một phân vùng hoặc thêm các ổ đĩa, bạn có thể cần phải cài đặt lại GRUB. Hãy nhớ rằng bộ nạp giai đoạn 1 là rất nhỏ, do đó nó chỉ đơn giản có một danh sách các địa chỉ khối cho bộ nạp giai đoạn 2. Di chuyển phân vùng và các địa chỉ thay đổi, vì thế giai đoạn 1 không còn có thể xác định vị trí bộ nạp giai đoạn 2 nữa. Chúng tôi sẽ trình bày một số chiến lược khôi phục và tiếp theo cũng thảo luận về các bộ nạp giai đoạn 1.5 của GRUB.

Khôi phục

Bây giờ chúng ta sẽ xem xét một số thứ có thể diễn ra không đúng với việc thiết lập khởi động được chuẩn bị kỹ lưỡng của bạn, đặc biệt là khi bạn cài đặt và khởi động nhiều hệ điều hành. Điều đầu tiên cần nhớ là chống lại sự hoang mang ban đầu của bạn. Việc khôi phục thường chỉ bằng một vài bước. Ở đây chúng tôi sẽ cung cấp cho bạn một vài chiến lược để giúp bạn vượt qua nhiều loại khủng hoảng.

Những chiến lược và công cụ này sẽ cho bạn thấy rằng bất cứ ai có quyền truy cập vật lý vào máy tính đều có khá nhiều quyền lực. Tương tự như vậy, bất cứ ai có quyền truy cập vào một dòng lệnh grub cũng có quyền truy cập vào các tập tin trên hệ thống của bạn mà không cần có quyền sở hữu hoặc các quyền an ninh khác do hệ thống đang chạy cung cấp. Hãy ghi nhớ điều này khi bạn chọn bộ nạp khởi động của mình. Sự lựa chọn giữa LILO hay GRUB phần lớn là vấn đề sở thích cá nhân. Với những gì bạn đã tìm hiểu được và những gì chúng tôi đang chỉ ra cho bạn, bạn sẽ được trang bị đầy đủ để chọn bộ nạp phù hợp nhất với các nhu cầu cụ thể và phong cách làm việc của bạn.

Sự cài đặt khác phá hủy MBR của bạn.

Đôi khi bạn sẽ cài đặt hệ điều hành khác và vô tình ghi đè lên MBR của bạn. Một số hệ thống, chẳng hạn như DOS và Windows, luôn luôn cài đặt MBR riêng của chúng. Thường là rất dễ dàng hồi phục lại từ tình huống này. Nếu bạn tập thói quen tạo một đĩa mềm khởi động mỗi khi bạn chạy lilo hoặc cài đặt lại GRUB, bạn sẽ được an toàn. Đơn giản chỉ cần khởi động vào hệ thống Linux của bạn từ đĩa mềm và chạy lại lệnh lilo hoặc grub-install.

Nếu bạn không có một đĩa mềm khởi động, nhưng bạn vẫn còn có hầu hết mọi bản phân phối Linux có sẵn, bạn thường có thể khởi động môi trường cài đặt Linux ở chế độ khôi phục. Khi bạn làm như vậy, hệ thống tập tin gốc trên đĩa cứng của bạn hoặc sẽ được lắp vào một điểm khôi phục lạ lùng nào đó hoặc ổ đĩa vẫn hoàn toàn chưa được lắp vào. Bạn có thể sử dụng lệnh chroot để làm cho điểm lắp đặt kỳ cục này trở thành thư mục gốc (/) của bạn. Sau đó chạy lệnh lilo hoặc grub-install để tạo ra một đĩa mềm khởi động mới hoặc cài đặt lại MBR. Tôi thích tạo ra một đĩa mềm và sử dụng nó để khởi động và đảm bảo chắc chắn rằng tất cả là tốt trước khi tôi tiếp tục và viết lại MBR, nhưng bạn có thể có nhiều can đảm hơn tôi. Liệt kê 9 cho thấy một ví dụ sử dụng môi trường mà chúng ta đã sử dụng cho các ví dụ cấu hình ở trên của chúng ta. Trong ví dụ này, tôi đã khởi động một đĩa khởi động Linux bản doanh nghiệp của Red Hat. Đĩa khởi động này đã lắp thư mục /dev/hda11 tại /mnt/sysimage. Hầu hết các môi trường cứu hộ sẽ ném bạn vào trong một màn hình lớn với một dấu nhắc, thay vì màn hình đồ họa mà bạn đã quen thuộc. Hãy nghĩ về màn hình này như một cửa sổ đầu cuối mà bạn đã đăng nhập vào với quyền root. Nói cách khác, phải rất cẩn thận với những gì bạn viết vào ổ cứng của mình. Trong Liệt kê 9, mục người dùng sẽ được hiển thị bằng chữ đậm.

Liệt kê 9. Sử dụng một đĩa cứu hộ và lệnh chroot.
sh-3.00# chroot /mnt/sysimage
sh-2.05b# lilo
Added linux *
Added WIN-XP
sh-2.05b# grub-install '(fd0)'
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/hda
(hd1)   /dev/hdc
(hd2)   /dev/sda
sh-2.05b#

Một khi bạn có đĩa mềm khởi động của mình, hãy nhấn Ctrl-d để thoát ra khỏi môi trường lệnh chroot và sau đó khởi động lại hệ thống của bạn, nhớ lấy phương tiện cài đặt của bạn ra khỏi ổ. Nếu bạn không có một đĩa cài đặt CD hay DVD tiện dụng, có rất nhiều đĩa CD LINUX khôi phục và hoạt động có sẵn trực tuyến và cũng có một số đĩa mềm hoặc thanh nhớ USB. Hãy xem Tài nguyên.

Mặc dù nằm ngoài phạm vi của hướng dẫn này, bạn có thể cũng muốn biết rằng hoàn toàn có thể để cho MBR của bạn khởi động một hệ thống Windows 2000 hoặc Windows XP và cài đặt Lilo hoặc GRUB trên một bản ghi khởi động phân vùng. Chương trình khởi động ntldr cũng có thể nạp dây chuyền các cung khởi động khác, mặc dù việc thiết lập có thể phải khéo léo một chút. Bạn sẽ cần phải sao chép cung khởi động vào một phân vùng Windows và chỉnh sửa tập tin ẩn boot.ini để thực hiện việc này.

Bạn đã di chuyển một phân vùng.

Nếu bạn đã di chuyển một phân vùng và đã quên thiết lập khởi động của bạn, bạn có một vấn đề tạm thời. Thông thường, LILO hoặc GRUB từ chối nạp. LILO có lẽ sẽ in một chữ 'L' để chỉ ra rằng giai đoạn 1 đã được nạp và sau đó dừng lại. GRUB sẽ đưa ra cho bạn một thông báo lỗi. Điều đã xảy ra ở đây là bộ nạp giai đoạn 1 có một danh sách các cung cần nạp để nhận được bộ nạp giai đoạn 2, có lẽ đã nạp các cung từ các địa chỉ nó có, nhưng các cung này không còn có chữ ký giai đoạn 2 nữa. Nếu bạn tạo một mềm đĩa khởi động bằng cách sử dụng các phương pháp vạch ra ở trên, hãy nhớ rằng tất cả những thứ mà lilo hoặc grub-install đặt trên đĩa mềm chỉ là một cung khởi động duy nhất, do đó đĩa mềm khởi động của bạn có thể sẽ không giúp được gì. Như trong ví dụ trước, có khả năng bạn sẽ cần phải khởi động một loại môi trường cứu hộ và tạo lại đĩa mềm khởi động của bạn bằng LILO hoặc GRUB. Sau đó hãy khởi động lại, kiểm tra hệ thống của bạn và cài đặt lại bộ nạp khởi động vào MBR.

Bạn có thể đã nhận thấy rằng các ví dụ cấu hình của chúng tôi đã sử dụng các nhãn (label) cho các phân vùng. Ví dụ,

append="hdd=ide-scsi root=LABEL=RHEL3"
hoặc
kernel /boot/vmlinuz-2.4.20-31.9 ro root=LABEL=RH9 hdd=ide-scsi

Tôi thường sử dụng các nhãn như vậy để giúp tránh các vấn đề khi tôi di chuyển các phân vùng. Bạn vẫn cần phải cập nhật tập tin cấu hình GRUB hoặc LILO và chạy lại lilo, nhưng bạn không cần phải cập nhật /etc/fstab cũng được. Điều này đặc biệt tiện dụng nếu tôi tạo ra một ảnh phân vùng trên một hệ thống và khôi phục lại nó tại một vị trí khác trên hệ thống khác.

Sử dụng một phân vùng /boot.

Một cách tiếp cận khác để khôi phục hoặc có lẽ là tránh phải khôi phục, là sử dụng một phân vùng tách riêng cho thư mục /boot. Phân vùng này không cần phải rất lớn, có thể là 100MB hoặc tương đương. Đặt phân vùng này ở đâu đó, nơi ít có khả năng bị di chuyển và nơi ít có khả năng có số phân vùng của nó bị dịch chuyển do sự thêm vào hoặc gỡ bỏ các phân vùng khác. Trong một môi trường hỗn hợp Windows và Linux, /dev/hda2 thường là một lựa chọn tốt dành cho phân vùng cho /boot.

Một lý do khác để có một phân vùng /boot nảy sinh khi phân vùng gốc của bạn sử dụng một hệ thống tập tin không được bộ nạp khởi động hỗ trợ. Ví dụ, rất hay có một phân vùng /boot được định dạng ext2 hoặc ext3 khi phân vùng gốc (/) sử dụng LVM.

Nếu bạn có nhiều bản phân phối trên hệ thống của bạn, đừng chia sẻ phân vùng /boot giữa chúng. Hãy nhớ thiết lập LILO hoặc GRUB để khởi động từ phân vùng mà sau đó sẽ được lắp đặt như là /boot. Ngoài ra hãy nhớ rằng các chương trình cập nhật cho một bản phân phối thường sẽ cập nhật cấu hình GRUB hoặc LILO cho hệ thống đó. Trong một môi trường có nhiều hệ thống bạn có thể muốn giữ một hệ thống có phân vùng /boot của riêng mình làm hệ thống chính và cập nhật thủ công tập tin cấu hình bất cứ khi nào một bản cập nhật của một trong những hệ thống của bạn yêu cầu nó. Cách tiếp cận khác là để cho mỗi hệ thống cài đặt một bộ nạp khởi động vào bản ghi khởi động phân vùng riêng của nó và để cho hệ thống chính của bạn chỉ đơn giản nạp dây chuyền các bản ghi khởi động phân vùng cho các hệ thống riêng lẻ, mang lại cho bạn một quá trình hai giai đoạn.

Xây dựng một đĩa mềm khởi động độc lập.

Cuối cùng, hãy xem xét thêm một chút về thiết lập GRUB và làm thế nào để tạo một đĩa mềm khởi động độc lập để giúp bạn có được một dấu nhắc GRUB, bất kể có vấn đề gì đã xảy ra cho ổ cứng của bạn.

Hãy nhớ lại tất cả mọi thứ về các trụ trên ổ đĩa cứng. Mặc dù bạn có thể nghĩ về một trụ như một thực thể tưởng tượng với các ổ đĩa hiện đại, nhiều khía cạnh của hệ thống tập tin của bạn không quên chúng. Đặc biệt, bạn sẽ thấy rằng phân vùng sử dụng một số nguyên các trụ, tiếp giáp ranh giới hình trụ với nhau. Trong một phân vùng, nhiều hệ thống tập tin cũng quản lý không gian theo đơn vị trụ. Trên nhiều hệ thống UNIX và Linux, cách bố trí của hệ thống tập tin được lưu trữ trong một siêu khối (superblock), là đơn vị phân bổ đầu tiên trong hệ thống tập tin. Đối với các hệ thống như các hệ thống tập tin ext2 hoặc ext3 và các ổ cứng lớn vừa phải, không gian đĩa sẽ được chia thành nhiều phần với một bản sao của siêu khối ở đầu của mỗi phần. Điều này sẽ giúp khôi phục nếu bạn vô tình can thiệp vào các ranh giới phân vùng bằng một chương trình như fdisk.

Một lợi ích khác của thiên hướng dùng trụ là có một số không gian ở phần đầu của một đĩa ngay sau MBR. GRUB lợi dụng điều này bằng cách nhúng một bộ nạp khởi động giai đoạn 1.5 vào không gian này hay vào một không gian khác tương tự chưa sử dụng trên một phân vùng bất cứ khi nào có thể. Bộ nạp giai đoạn 1.5 hiểu hệ thống tập tin trên phân vùng có chứa giai đoạn 2, do đó nó được bảo vệ nhiều hơn một chút khỏi các vấn đề liên quan đến di chuyển các tập tin.

Tất cả những điều này là suôn sẻ và tốt đẹp, nhưng nó có liên quan đến một đĩa mềm khởi động ra sao. Vâng, một đĩa mềm không có nhiều không gian, cũng không có nhiều ý niệm về các trụ, vì vậy nếu bạn muốn khởi động cả hai giai đoạn 1 và giai đoạn 2 của GRUB từ đĩa mềm bạn cần cài đặt giai đoạn 1 và sau đó sao chép giai đoạn 2 vào các cung ngay sau cung khởi động. Liệt kê 10 cho thấy một ví dụ về cách thực hiện điều này. Sử dụng một đĩa mềm trống vì quá trình này sẽ phá hủy dữ liệu. Bạn nên sao chép các tập tin đi kèm với bản phân phối grub của bạn chứ không phải là các tập tin từ thư mục boot/grub của bạn vì /boot/grub/stage2 đã được sửa đổi để làm việc với các phân vùng ổ cứng của bạn. Bạn sẽ phải thấy các tập tin giai đoạn 1 và giai đoạn 2 ban đầu trong một thư mục con của thư mục /usr/share/grub. Trong ví dụ của chúng ta các tập tin này đang có trong thư mục /usr/share/grub/i386-redhat.

Liệt kê 10. Tạo một đĩa mềm khởi động GRUB.
[root@lyrebird root]# ls /usr/share/grub
i386-redhat
[root@lyrebird root]# cd /usr/share/grub/i386-redhat
[root@lyrebird i386-redhat]# ls -l st*
-rw-r--r--    1 root     root          512 Aug  3  2004 stage1
-rw-r--r--    1 root     root       104092 Aug  3  2004 stage2
[root@lyrebird i386-redhat]# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
[root@lyrebird i386-redhat]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

203+1 records in
203+1 records out

Nếu bạn đã định dạng đĩa mềm của bạn trước khi bạn đã làm điều này và bây giờ bạn cố gắng để lắp đĩa mềm, lệnh mount sẽ đưa ra cho bạn một lỗi. Việc sao chép giai đoạn 2 ngay sau cung khởi động của đĩa mềm (seek=1) đã phá hủy hệ thống tập tin trên đĩa mềm của bạn.

Nếu bây giờ bạn khởi động đĩa mềm này, bạn sẽ thấy rằng có độ trễ trong khi nó nạp giai đoạn 2 từ đĩa mềm này. Bạn có thể khởi động đĩa mềm này trong một máy PC tùy ý; nó không buộc phải là một máy tính có một hệ thống Linux trên đó. Khi bạn khởi động đĩa mềm, bạn sẽ nhận được một dấu nhắc khởi động GRUB. Nhấn phím tab để xem danh sách các lệnh sẵn có cho bạn. Hãy thử chạy lệnh help commandname để nhận được trợ giúp về lệnh có tên là commandname (tên lệnh). Liệt kê 11, minh họa dòng lệnh GRUB.

Liệt kê 11. Các dòng lệnh GRUB.
    GRUB  version 0.93  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub>
 Possible commands are: blocklist boot cat chainloader clear cmp color configfi
le debug device displayapm displaymem dump embed find fstest geometry halt help
 hide impsprobe initrd install ioprobe kernel lock makeactive map md5crypt modu
le modulenounzip pager partnew parttype password pause quit read reboot root ro
otnoverify savedefault serial setkey setup terminal terminfo testload testvbe u
nhide uppermem vbeprobe

grub> help rootnoverify
rootnoverify: rootnoverify [DEVICE [HDBIAS]]
    Similar to `root', but don't attempt to mount the partition. This
    is useful for when an OS is outside of the area of the disk that
    GRUB can read, but setting the correct root device is still
    desired. Note that the items mentioned in `root' which derived
    from attempting the mount will NOT work correctly.

grub> find /boot/grub/grub.conf
 (hd0,2)
 (hd0,6)
 (hd0,7)
 (hd0,10)
 (hd1,7)

grub>

Trong ví dụ này, chúng ta đã thấy rằng có các tập tin cấu hình GRUB trên bốn phân vùng khác nhau trên ổ cứng đầu tiên của chúng ta và một phân vùng khác trên ổ đĩa cứng thứ hai. Chúng ta có thể nạp trình đơn GRUB từ một trong những tập tin cấu hình đó bằng cách sử dụng lệnh configfile. Ví dụ:

configfile (hd0,2)/boot/grub/grub.conf

Lệnh này sẽ nạp trình đơn cho tập tin cấu hình đó và chúng ta có thể có khả năng khởi động hệ thống từ điểm này. Bạn có thể tìm hiểu các lệnh grub này trong tài liệu hướng dẫn sử dụng GRUB. Hãy thử gõ lệnh info grub trong một cửa sổ đầu cuối Linux để mở hướng dẫn sử dụng.

Thêm một điểm cuối cùng trước khi chúng ta rời khỏi GRUB. Chúng ta đã nói rằng tập tin GRUB giai đoạn 2 đã phá hủy hệ thống tập tin trên đĩa mềm này. Nếu bạn muốn có một đĩa mềm khôi phục GRUB để nạp các tập tin GRUB, bao gồm một tập tin cấu hình từ đĩa mềm, thì bạn có thể thực hiện điều này bằng cách sử dụng các bước sau:

  1. Sử dụng lệnh mkdosfs để tạo ra một hệ thống tập tin FAT của DOS trên đĩa mềm và sử dụng tùy chọn -R để dự trữ đủ số cung dành cho tập tin giai đoạn 2.
  2. Lắp đĩa mềm vào hệ thống tập tin.
  3. Tạo một thư mục /boot/grub trên đĩa mềm.
  4. Sao chép các tập tin GRUB giai đoạn 1, giai đoạn 2 và grub.conf vào thư mục boot/grub trên đĩa mềm. Cũng sao chép tập tin hình ảnh động của bạn nếu bạn muốn có một tập tin đó.
  5. Chỉnh sửa tập tin grub.conf của bạn trên đĩa mềm để nó tham khảo đến tập tin hình ảnh động trên đĩa mềm này.
  6. Chạy lệnh bỏ lắp đặt đĩa mềm.
  7. Sử dụng shell của lệnh grub để thiết lập GRUB trên đĩa mềm bằng cách sử dụng người root GRUB và các lệnh setup.

Chúng ta minh họa điều này trong Liệt kê 12.

Liệt kê 12. Cài đặt GRUB vào một đĩa mềm với một hệ thống tập tin.
[root@lyrebird root]# mkdosfs -R 210 /dev/fd0
mkdosfs 2.8 (28 Feb 2001)
[root@lyrebird root]# mount /dev/fd0 /mnt/floppy
[root@lyrebird root]# mkdir /mnt/floppy/boot
[root@lyrebird root]# mkdir /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/stage1 /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/stage2 /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/splash* /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/grub.conf /mnt/floppy/boot/grub
[root@lyrebird root]# umount /dev/fd0
[root@lyrebird root]# grub
Probing devices to guess BIOS drives. This may take a long time.

    GRUB  version 0.93  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> root (fd0)
 Filesystem type is fat, using whole disk

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/fat_stage1_5" exists... no
 Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.c
onf "... succeeded
Done.

Với những công cụ này bây giờ bạn có đủ trang bị để khôi phục hầu hết những sai sót với một bộ nạp khởi động.


Tạo và cài đặt các chương trình

Phần này trình bày các tư liệu dành cho chủ đề 1.102.1 của kỳ thi quản trị trình độ sơ cấp (LPIC-1) 101. Chủ đề này có trọng số 5.

Trong phần này, bạn sẽ học cách để xây dựng và cài đặt một chương trình chạy được từ mã nguồn. Bạn sẽ tìm hiểu cách giải nén các bó mã nguồn điển hình và tùy chỉnh các tập tin Make.

Tại sao bạn lại muốn cài đặt một chương trình từ mã nguồn? Các lý do thường thấy gồm có:

  1. Bạn cần một chương trình chưa có trong bản phân phối của bạn.
  2. Bạn cần một chương trình chỉ có sẵn ở dạng mã nguồn.
  3. Bạn cần một số tính năng của một chương trình chỉ có sẵn bằng cách xây dựng lại chương trình đó từ mã nguồn.
  4. Bạn muốn tìm hiểu thêm về cách một chương trình hoạt động hoặc bạn muốn tham gia vào việc phát triển của nó.

Tất cả đều là các lý do thích đáng để xem xét việc cài đặt một chương trình từ mã nguồn.

Tải về và giải nén

Bất kể động cơ thúc đẩy bạn xây dựng từ mã nguồn ra sao, bạn sẽ cần có được mã nguồn trước khi bạn có thể xây dựng nó. Bạn có thể tìm gói đó trên một trang web được thiết kế các dự án lưu trữ, chẳng hạn như SourceForge.net của Tập đoàn công nghệ nguồn mở (Open Source Technology Group) (xem Tài nguyên) hoặc một trang web dành riêng cho một gói cụ thể.

Trong phần này chúng ta sẽ xem xét chủ yếu các gói được phân phối như là các khối tập tin nén (tarballs). Lệnh tar (viết tắt của Tape ARchive) được sử dụng để tạo và thao tác các kho lưu trữ (archives) từ các tập tin trong một cây thư mục. Mặc dù tên như thế, các tập tin có thể được lưu trữ trên bất kỳ môi trường lưu trữ nào. Thực ra, việc lưu trữ chúng trên đĩa còn cho phép thao tác, chẳng hạn như xoá một phần của một kho lưu trữ, điều này thậm chí không làm được trên băng từ. Lệnh tar tự nó không nén dữ liệu, nó chỉ lưu dữ liệu dưới một dạng từ đó các tập tin ban đầu, các cấp phép truy cập và cơ cấu thư mục có thể được phục hồi lại. Lệnh tar có thể được sử dụng kết hợp với một chương trình nén, thông thường là gzip hoặc bzip2 để tạo ra một kho lưu trữ nén để tiết kiệm không gian lưu trữ cũng như thời gian truyền dẫn. Một kho lưu trữ nén như vậy là một khối tập tin nén (tarball).

Bên cạnh các tarball đơn giản, mã nguồn cho một chương trình cụ thể có thể được đóng gói cho bản phân phối của bạn trong một gói mã nguồn, ví dụ như một RPM nguồn (hoặc SRPM). Chúng ta sẽ thảo luận về quản lý gói sau trong hướng dẫn này. Bây giờ, chỉ cần nhớ kiểm tra tìm một gói mã nguồn cho bản phân phối của bạn xem có sẵn một gói như thế hay không, bởi vì đó thường là một cách dễ dàng hơn để xây dựng một chương trình và nó được điều chỉnh sẵn để thích ứng với sự bố trí hệ thống tập tin do bản phân phối của bạn sử dụng.

Trước khi bạn tải về, hãy cố gắng tìm hiểu càng nhiều càng tốt về gói đó. Nếu có tài liệu hướng dẫn cài đặt hoặc xây dựng, hãy kiểm tra tài liệu để xem xem bạn sẽ cần gói khác để xây dựng nó không. Thông thường, bạn cũng sẽ cần phải cài đặt một số thư viện và có thể là các công cụ phát triển trước khi bạn có thể xây dựng thành công chương trình đã chọn của bạn. Điều này đặc biệt có khả năng là đúng nếu chương trình của bạn sử dụng bất kỳ bộ công cụ đồ họa nào. Đôi khi bạn sẽ bắt đầu quá trình xây dựng và chỉ sau đó phát hiện ra rằng bạn cần một gói cụ thể. Đừng lo lắng, đây không phải là chuyện hiếm. Bạn chỉ cần xác định vị trí và cài đặt các gói đang thiếu và cố gắng làm lại cho đến khi bạn có tất cả các gói cần thiết.

Bạn thường sẽ tải về bằng cách sử dụng trình duyệt của bạn hoặc có thể là một chương trình ftp. Gói của bạn có thể sẽ có một tên kết thúc bằng một trong các đuôi dạng tar, tar.gz, tar.Z, tgz hoặc tar.bz2. Đôi khi bạn sẽ tải về một gói phần mềm bằng cách sử dụng CVS (hệ thống phiên bản đồng quy). Một ví dụ có thể là GNU GRUB 2 từ Quỹ phần mềm Tự do (xem Tài nguyên). Trong trường hợp này, mã nguồn tải về của bạn sẽ được giải nén rồi. Ðôi khi, bạn có thể tìm thấy một phần mở rộng .zip biểu thị một tập tin nén.

Các tập tin nén tar

Các tập tin nén tar hoặc các khối tập tin nén (tarball) là dạng phổ biến nhất của bản phân phối mã nguồn dành cho nguồn mã không sử dụng quản lý gói như RPM của Red Hat, hoặc quản lý gói của Debian. Các tập tin này được tạo ra bằng cách sử dụng lệnh tar để lưu trữ một cây thư mục và tất cả các tập tin trong một tập tin duy nhất. Tập tin này thường sẽ được nén bằng một số dạng chương trình nén, thường là compress, gzip hoặc bzip2. Vì việc lưu trữ và nén là một hoạt động phổ biến như vậy, nên lệnh tar GNU đã có trên hầu hết hệ thống Linux cũng có thể xử lý nén và giải nén bằng cách sử dụng chương trình nén compress, gzip hoặc bzip2. Nếu phiên bản tar cụ thể của bạn không xử lý được một kiểu nén cụ thể, thì các hệ thống UNIX và Linux làm việc rất tốt với các đường ống (xử lý tuần tự), sẽ cho phép một số lệnh vận hành theo trình tự dãy trên một nguồn đầu vào, do đó một tiến trình hai giai đoạn có thể hoàn thành một cách thủ công những việc mà tar làm cho bạn bên dưới vỏ bọc ngoài của nó.

Để minh hoạ, giả sử chúng ta tải về dự án hình học tương tác Tiến sĩ Geo (Dr. Geo) (xem Tài nguyên). Tại thời điểm viết bài này, chúng tôi tải về drgeo-1.1.0.tar.gz. Phần mở rộng gz cho chúng ta biết tập tin này được nén bằng gzip. Trước tiên chúng tôi sẽ cho bạn thấy làm thế nào để trích xuất tập tin tar từ tập tin nén và sau đó làm thế nào để trích xuất các tập tin từ kho lưu trữ tar. Sau đó, chúng tôi sẽ cho bạn thấy làm thế nào để giải nén và trích xuất chỉ bằng một lệnh đơn hay một đường ống.

Để chỉ trích xuất kho lưu trữ tar chúng ta sử dụng lệnh gunzipg như trong Liệt kê 13.

Liệt kê 13. Giải nén gói mã nguồn Tiến sĩ Geo.
[ian@localhost ~]$ ls drgeo*
drgeo-1.1.0.tar.gz
[ian@localhost ~]$ gunzip drgeo-1.1.0.tar.gz
[ian@localhost ~]$ ls drgeo*
drgeo-1.1.0.tar

Lưu ý rằng tập tin tar.gz của chúng ta hiện đã được thay thế bằng một tập tin .tar thuần túy. Đối với phần mở rộng khác đã đề cập ở trên, bạn sẽ sử dụng một trong các lệnh sau (nếu thích hợp) để trích xuất tập tin nén tar.

uncompress drgeo-1.1.0.tar.Z
gunzip drgeo-1.1.0.tar.Z
gunzip drgeo-1.1.0.tar.gz
gunzip drgeo-1.1.0.tgz
bunzip2 drgeo-1.1.0.tar.bz2

Bạn sẽ nhận thấy rằng lệnh gunzip sẽ xử lý .Z, .tar.gz và .tgz. Thực vậy, hệ thống của bạn thậm chí có thể hoàn toàn không có các chương trình nén và giải nén ở trên đã cài đặt.

Để trích xuất các tập tin từ kho lưu trữ tar, bạn sử dụng lệnh tar. Dạng thông thường, tar -xvf filename.tar, được hiển thị trong Liệt kê 14. Tùy trường hợp, bạn có thể dùng đường ống để lọc kết quả đầu ra qua bộ lọc để phân thành từng trang

Liệt kê 14. Trích các tập tin từ kho lưu trữ Tiến sĩ Geo.
[ian@localhost ~]$ tar -xvf drgeo-1.1.0.tar |more
drgeo-1.1.0/
drgeo-1.1.0/po/
drgeo-1.1.0/po/ChangeLog
drgeo-1.1.0/po/Makefile.in.in
drgeo-1.1.0/po/POTFILES.in
drgeo-1.1.0/po/drgeo.pot
drgeo-1.1.0/po/az.po
drgeo-1.1.0/po/ca.po
drgeo-1.1.0/po/cs.po
...

Tùy chọn -x báo cho tar trích xuất các tập tin. Tùy chọn -v báo cho tar cần báo cáo kết quả đầy đủ chi tiết. Và tùy chọn -f, phối hợp với một tên tập tin (trong trường hợp này là drgeo-1.1.0.tar) báo cho tar biết trích xuất các tập tin từ tập tin lưu trữ nào.

Các gói hoạt động tốt sẽ tạo ra một thư mục để lưu trữ các tập tin của gói đó trong đó. Trong ví dụ của chúng ta, đây là thư mục drgeo-1.1.0. Đôi khi, một gói phần mềm sẽ không làm được điều này, vì vậy bạn có thể muốn kiểm tra trước khi xổ ra rất nhiều tập tin trên thư mục nhà của bạn. Để làm điều này, hãy sử dụng lệnh tar với tùy chọn -t để hiển thị bảng nội dung, thay vì sử dụng tùy chọn -x để trích xuất ra. Nếu bạn cũng bỏ tùy chọn -v, bạn sẽ có đủ kết quả đầu ra để biết các tập tin nào sẽ được tạo ra và liệu một thư mục sẽ được tạo ra không, hay là tất cả mọi thứ sẽ được xổ vào thư mục hiện tại.

Bây giờ chúng ta đã thấy làm thế nào để trích xuất một tarball theo hai bước, có lẽ bạn đang thắc mắc về tuyên bố rằng có thể thực hiện được chỉ bằng một bước không. Có thể làm được như vậy. Nếu bạn thêm tùy chọn -z vào lệnh tar thì nó có thể giải nén và trích xuất kho lưu trữ đã nén bởi gzip chỉ bằng một lệnh duy nhất. Ví dụ:

tar -zxvf drgeo-1.1.0.tgz
hoặc
tar -zxvf drgeo-1.1.0.tar.Z

Để thực hiện điều tương tự với một tài liệu lưu trữ được nén bằng bzip2, hãy sử dụng tùy chọn -j thay vì tùy chọn -z. Ví dụ:

tar -jxvf drgeo-1.1.0.tar.bz2

Bạn cũng có thể sử dụng tùy chọn -c với bất kỳ các lệnh giải nén nào ở trên để chuyển hướng tập tin đã giải nén tới đầu ra tiêu chuẩn, rồi sau đó bạn đặt đường ống cho đầu ra tiêu chuẩn làm đầu vào tiêu chuẩn cho lệnh tar. Chú ý rằng thao tác này sẽ để lại tập tin ban đầu của bạn nguyên vẹn, thay vì trích xuất nó thành một tập tin .tar lớn hơn. Một số ví dụ là:

bunzip2 -c drgeo-1.1.0.tar.bz2 | tar -xvf -
uncompress -c drgeo-1.1.0.tar.Z | tar -xvf -
gunzip -c drgeo-1.1.0.tar.Z | tar -xvf -
gunzip -c drgeo-1.1.0.tar.gz | tar -xvf -
gunzip -c drgeo-1.1.0.tgz | tar -xvf -

Lưu ý:

  1. Giá trị - cho một tên tập tin lưu trữ báo cho tar sử dụng đầu vào tiêu chuẩn làm tập tin lưu trữ. Phiên bản tar của bạn có thể làm điều này theo mặc định, trong trường hợp đó bạn không cần phải chỉ định tùy chọn -f nữa. Cắt bỏ tùy chọn f - ở đuôi các lệnh nói trên.
  2. Lệnh zcat thực hiện các chức năng giống như gunzip -c.

Các cây CVS

Đôi khi mã cho dự án mà bạn cần không được đóng gói trong một búi tập tin nén mà có sẵn thông qua CVS (hệ thống phiên bản đồng quy). Tại thời điểm viết bài này, một ví dụ là dự án GRUB 2 mà chúng ta đã thảo luận trong phần Các trình quản lý khởi động. Liệt kê 15, chỉ ra một ví dụ.

Liệt kê 15. Tải GRUB2 bằng CVS.
[ian@attic4 ~]$ export CVS_RSH="ssh"
[ian@attic4 ~]$ cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/grub co grub2
cvs server: Updating grub2
U grub2/.cvsignore
U grub2/AUTHORS
U grub2/COPYING
U grub2/ChangeLog
U grub2/DISTLIST
U grub2/INSTALL
U grub2/Makefile.in
U grub2/NEWS
...

Lệnh xuất khẩu báo cho CVS biết cách kết nối với máy chủ từ xa (sử dụng trình shell an toàn hay ssh trong trường hợp này). Lệnh cvs kiểm tra dự án GRUB 2 (tùy chọn). Bạn sẽ tìm thấy tất cả các tập tin dự án trong thư mục GRUB2 mà lệnh cvs đã tạo ra cho bạn.

Các tập tin Zip

Đôi khi bạn sẽ tìm thấy mã nguồn được đóng gói thành một tập tin zip. Đây có thể là trường hợp của một gói làm việc trên cả Windows cũng như các hệ thống Linux hay UNIX. Chương trình PKZIP ban đầu đã được PKWARE, Inc phát triển cho các hệ thống DOS và bây giờ đã có trên nhiều nền tảng khác. Nhiều hệ thống Linux có một phiên bản được Info-ZIP tạo ra.

Liệt kê 16 cho thấy cách sử dụng lệnh unzip để trích xuất mã nguồn cho chương trình lộn trái mặt cầu và trình tiện ích bảo vệ màn hình (screensaver).

Liệt kê 16. Giải nén mã nguồn chương trình lộn trái mặt cầu.
[ian@attic4 ~]$ unzip sphereEversion-0.4-src.zip
Archive:  sphereEversion-0.4-src.zip
   creating: sphereEversion-0.4-src/
  inflating: sphereEversion-0.4-src/Camera.h
  inflating: sphereEversion-0.4-src/drawutil2D.h
  inflating: sphereEversion-0.4-src/drawutil.h
  inflating: sphereEversion-0.4-src/fontdata.h
  inflating: sphereEversion-0.4-src/fontDefinition.h
  inflating: sphereEversion-0.4-src/generateGeometry.h
  inflating: sphereEversion-0.4-src/global.h
  inflating: sphereEversion-0.4-src/mathutil.h
  inflating: sphereEversion-0.4-src/Camera.cpp
  inflating: sphereEversion-0.4-src/drawutil2D.cpp
  inflating: sphereEversion-0.4-src/drawutil.cpp
  inflating: sphereEversion-0.4-src/fontdata.cpp
  inflating: sphereEversion-0.4-src/generateGeometry.cpp
  inflating: sphereEversion-0.4-src/main.cpp
  inflating: sphereEversion-0.4-src/mathutil.cpp
  inflating: sphereEversion-0.4-src/README.TXT
  inflating: sphereEversion-0.4-src/Makefile

Xây dựng chương trình

Bây giờ bạn có các tập tin mã nguồn của mình đã giải nén vào một cây thư mục, chúng ta hãy xem làm thế nào để xây dựng chương trình (hay các chương trình).

Điều tra mã nguồn

Trước khi bạn bắt đầu xây dựng, bạn nên xem qua những gì bạn đã giải nén. Đặc biệt, hãy tìm tài liệu hướng dẫn cài đặt. Thường sẽ có một tập tin README hoặc INSTALL hoặc có lẽ là cả hai, nằm trong thư mục gốc của dự án mới của bạn. Nếu gói dành cho nhiều nền tảng, bạn cũng có thể tìm thấy các tập tin dành riêng cho từng nền tảng như README.linux hoặc INSTALL.linux.

Cấu hình

Bạn thường sẽ tìm thấy một kịch bản lệnh cấu hình trong thư mục mã nguồn chính. Kịch bản lệnh này được thiết kế để thiết lập một tập tin Make (Makefile) được tùy chỉnh cho hệ thống của bạn. Các nhà phát triển thường tạo ra nó bằng cách sử dụng chương trình autoconf (cấu hình tự động) của GNU. Kịch bản lệnh cấu hình sẽ khảo sát hệ thống của bạn để xác định các khả năng của nó. Tập tin (hoặc các tập tin) Make được thiết lập sẽ xây dựng dự án trên hệ thống riêng của bạn.

Một kịch bản lệnh cấu hình phức tạp có thể kiểm tra nhiều khía cạnh về hệ thống của bạn, bao gồm những thứ như kiểu bộ vi xử lý, liệu đó có phải là một hệ thống 32-bit hay 64-bit không và v.v. Một kịch bản lệnh cấu hình đơn giản có thể làm thêm một chút ít ngoài việc tạo các tập tin Make.

Nếu bạn không có một tập tin gọi là configure (cấu hình) trong thư mục dự án chính của bạn, hãy kiểm tra tài liệu hướng dẫn của bạn để xem xem có một phương pháp thay thế không. Nếu bạn làm như thế, hãy thử chuyển đến thư mục chính của dự án và chạy

./configure --help

Lệnh này sẽ cung cấp cho bạn một số sự trợ giúp về các tùy chọn cấu hình có sẵn. Rất nhiều, chẳng hạn như tùy chọn -- prefix, sẽ xuất hiện trong hầu hết các kịch bản lệnh cấu hình. Một số dường như là đặc thù riêng cho chương trình cụ thể bạn đang xây dựng. Lưu ý những tùy chọn cấu hình bạn muốn thay đổi.

Lưu ý: Nếu dự án của bạn không có một kịch bản lệnh cấu hình, thế thì nhiều khả năng sẽ có một Makefile sẽ làm việc được trên hầu hết các nền tảng hoặc một dạng quy trình cài đặt khác. Ví dụ, một gói chỉ sử dụng các kịch bản lệnh Python và các tập tin dữ liệu có thể không cần phải được xây dựng, do đó nó chỉ có một kịch bản lệnh cho cài đặt.

Trong hướng dẫn cho Chủ đề 104, chúng tôi sẽ trình bày tiêu chuẩn hệ phân cấp các hệ thống tập tin (FHS). Lúc này chúng tôi lưu ý rằng các chương trình cục bộ cần phải có các tập tin thi hành được được lưu trữ trong cây /usr/local tại /usr/local/bin và các trang hướng dẫn sử dụng tại /usr/local/man. Các kịch bản lệnh cấu hình nhiều khả năng có một tùy chọn --prefix (tiền tố) để chỉ định vị trí cài đặt. Nếu chương trình không tuân thủ FHS, bạn có thể cần phải chỉ định tùy chọn này khi bạn chạy kịch bản lệnh cấu hình nó. Nếu bạn đang xây dựng một sản phẩm để thay thế cho một sản phẩm đã cài đặt, bạn có thể cần phải cài đặt nó với /opt hoặc /usr làm tiền tố.

Ngoài việc có thể xác định một tiền tố, bạn có thể tìm thấy các tùy chọn khác có liên quan đến vị trí của các thành phần cụ thể, chẳng hạn như --mandir hoặc --infodir để xác định vị trí của các trang hướng dẫn sử dụng và các trang thông tin tương ứng.

Một khi bạn đã xem xét lại các tùy chọn có khả năng và đã xác định rõ bất kỳ những gì mà bạn có thể cần phải thay đổi, hãy chạy kịch bản lệnh configure (cấu hình), thêm bất cứ tùy chọn nào mà bạn cần. Hãy nhớ thêm ./ trước lệnh cấu hình bởi vì thư mục dự án của bạn có thể sẽ không ở trong đường dẫn của bạn. Ví dụ, bạn có thể chạy

./configure
hoặc
./configure --prefix /usr/local

Khi bạn chạy lệnh cấu hình, bạn sẽ thường thấy các thông báo cho biết bạn có loại hệ thống nào và các công cụ cần thiết nào đã có hay chưa. Nếu mọi thứ thông suốt, bạn cần phải nhận được một Makefile được xây dựng vào cuối của quá trình cấu hình.

config.cache

Khi kịch bản lệnh cấu hình hoàn thành, nó sẽ lưu trữ thông tin về cấu hình trong một tập tin có tên là config.cache sẽ nằm trong cùng thư mục như kịch bản lệnh cấu hình.

Nếu bạn cần phải chạy ./configure một lần nữa, hãy chắc chắn gỡ bỏ tập tin config.cache trước đã (sử dụng lệnh rm), bởi vì lệnh cấu hình sẽ sử dụng các thiết lập từ config.cache nếu nó hiện có và nó sẽ không kiểm tra lại hệ thống của bạn

Liệt kê 17 cho thấy một số kết quả đầu ra từ bước cấu hình cho gói Tiến sĩ Geo mà chúng ta đã giải nén ở trên.

Liệt kê 17. Cấu hình Tiến sĩ Geo.
[ian@localhost ~]$ cd drgeo-1.1.0
[ian@localhost drgeo-1.1.0]$ ./configure | less
checking for XML::Parser... ok
checking for iconv... /usr/bin/iconv
checking for msgfmt... /usr/bin/msgfmt
checking for msgmerge... /usr/bin/msgmerge
checking for xgettext... /usr/bin/xgettext
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for g++... g++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
...
checking for guile... /usr/bin/guile
checking for guile-config... no
configure: error: guile-config required but not found

Kịch bản lệnh cấu hình kiểm tra một số các chương trình chuyển đổi đồ họa là một phần của gói netpbm. Có một cảnh báo vì không tìm thấy trên hệ thống một chương trình chuyển đổi khả dĩ. Ngoài ra còn có một cảnh báo rằng việc sử dụng tiền tố /usr/local sẽ đòi hỏi quyền truy cập của root (ở bước cài đặt). Do đây là lần đầu tiên chạy cấu hình, nên có một số thông báo lỗi liên quan đến các Makefile hiện chưa có, nhưng sẽ có nếu chúng ta đã chạy cấu hình một lần nữa. Cuối cùng, kịch bản lệnh cấu hình thông báo thành công.

Lệnh make và các Makefile

Một khi bước cấu hình hoàn thành, bạn cần phải có một tập tin có tên là Makefile trong thư mục dự án của bạn. Tập tin này được gọi là tập tin make (make file) bởi vì một chương trình có tên là make (chế tạo) được sử dụng để xử lý nó và xây dựng chương trình của bạn. Bạn cũng có thể có vài tập tin make nữa trong các thư mục con.

Một tập tin make (tập tin chế tạo) có chứa các quy tắc, đó là các hướng dẫn để nói cho chương trình chế tạo biết làm thế nào để xây dựng các thứ cần thiết. Tập tin này cũng chứa các đích (target), để nói cho chương trình chế tạo biết xây dựng cái gì. Chương trình chế tạo phân tích tập tin chế tạo (make) và xác định trình tự theo đó các mục phải được xây dựng. Ví dụ, nếu người ta xây dựng một tập tin có thể thi hành được từ ba tập tin đối tượng, thì các tập tin đối tượng này phải được xây dựng trước khi chúng có thể được liên kết thành một tập tin thi hành được. Một tập tin chế tạo có thể thực hiện các nhiệm vụ cài đặt cũng như xây dựng chương trình của bạn. Tập tin chế tạo thường có sẵn các đích với một số chức năng như dưới đây:

make (tạo chương trình)
không có tùy chọn nào, sẽ chỉ xây dựng chương trình. Về mặt kỹ thuật lệnh này sẽ xây dựng một đích mặc định, thường có nghĩa là chỉ xây dựng chương trình từ mã nguồn.
make install (tạo chương trình cài đặt)
sẽ cài đặt chương trình mà bạn xây dựng. Bạn có thể cần quyền root cho việc này nếu bạn đang cài đặt trong /usr/local.
make clean (tạo chương trình xóa)
sẽ xóa các tập tin do quá trình chế tạo tạo ra.
make all (tạo tất cả)
đôi khi được dùng để thực hiện một bó chức năng của tập tin chế tạo với một đích duy nhất.

Tham khảo tài liệu hướng dẫn của dự án của bạn để xem xem có các đích bổ sung hoặc những thứ khác thêm vào mà bạn cần phải làm không.

Bây giờ tập tin Make chính của bạn đã được tạo ra, hãy sử dụng lệnh make, thường là không có tùy chọn thêm, để xây dựng các tập tin thi hành được, các trang hướng dẫn sử dụng và các phần khác của chương trình. Tùy thuộc vào tốc độ của hệ thống của bạn và mức độ phức tạp của quá trình xây dựng, việc tạo chương trình có thể chỉ mất một vài phút, hoặc có thể mất nhiều thời gian hơn với một dự án phức tạp.

Đôi khi chương trình xây dựng của bạn có thể không hoạt động. Các lý do thường gặp bao gồm:

  • Thiếu các gói cần có trước.
  • Sai mức các gói cần có trước.
  • Sai giá trị của một số tham số mà bạn cần chuyển để cấu hình hay chế tạo.
  • Thiếu trình biên dịch.
  • Các lỗi trong kịch bản lệnh cấu hình hoặc Makefile đã tạo ra.
  • Các lỗi mã nguồn.

Trong ví dụ Tiến sĩ Geo của chúng ta, đã tìm thấy một trong những vấn đề này ở bước cấu hình, nhưng không phải luôn là như vậy. Khi bạn có được nhiều kinh nghiệm hơn với Linux, bạn sẽ thường có thể xác định và sửa chữa những vấn đề này. Đôi khi bạn có thể cần phải xem trang các câu hỏi thường gặp (FAQ) hoặc danh sách gửi thư hỗ trợ gói đó. Những trường hợp khác bạn có thể cần xác định rõ những gì bạn đang thiếu và cài đặt nó.

Cài đặt

Nếu mọi việc đều ổn với bước xây dựng của bạn, bạn đã sẵn sàng để cài đặt. Các bước xây dựng sẽ xây dựng tất cả các tập tin bạn cần, nhưng chúng chưa được đặt vào đúng vị trí, sẵn sàng để sử dụng. Ví dụ, các tập tin nhị phân cần phải được sao chép vào /usr/local/bin và các trang hướng dẫn sử dụng vào /usr/local/man và v.v.

Trừ khi bạn đã chỉ rõ một tùy chọn --prefix, có khả năng sẽ được sao chép vào cây /usr/local. Bạn sẽ cần quyền người dùng root để ghi vào cây /usr/local trong hệ thống tập tin của bạn. Nếu bạn chưa đăng nhập như là người dùng root, hãy sử dụng lệnh su để đạt được quyền root. Bạn sẽ được nhắc đưa vào mật khẩu của người dùng root. Sau đó hãy sử dụng lệnh make install để cài đặt chương trình vừa được xây dựng của bạn. Tuỳ theo độ lớn của chương trình, việc cài đặt có thể mất một vài giây đến vài phút để hoàn tất. Chúng tôi chỉ ra một phần của kết quả đầu ra cho việc cài đặt Tiến sĩ Geo trong Liệt kê 18.

Liệt kê 18. Cài đặt Tiến sĩ Geo.
[ian@attic4 drgeo-1.1.0]$ su
Password:
[root@attic4 drgeo-1.1.0]# make install
Making install in po
make[1]: Entering directory `/home/ian/drgeo-1.1.0/po'
if test -n ""; then \
   /usr/local/share; \
else \
  /bin/sh ../mkinstalldirs /usr/local/share; \
fi
installing az.gmo as /usr/local/share/locale/az/LC_MESSAGES/drgeo.mo
installing ca.gmo as /usr/local/share/locale/ca/LC_MESSAGES/drgeo.mo
installing cs.gmo as /usr/local/share/locale/cs/LC_MESSAGES/drgeo.mo
installing da.gmo as /usr/local/share/locale/da/LC_MESSAGES/drgeo.mo
installing de.gmo as /usr/local/share/locale/de/LC_MESSAGES/drgeo.mo
installing el.gmo as /usr/local/share/locale/el/LC_MESSAGES/drgeo.mo
installing en_CA.gmo as /usr/local/share/locale/en_CA/LC_MESSAGES/drgeo.mo
installing en_GB.gmo as /usr/local/share/locale/en_GB/LC_MESSAGES/drgeo.mo
...
/usr/bin/install -c drgeo /usr/local/bin/drgeo
/bin/sh ./mkinstalldirs /usr/local/share/applications
 /usr/bin/install -c -m 644 drgeo.desktop /usr/local/share/applications/drgeo.desktop
make[2]: Leaving directory `/home/ian/drgeo-1.1.0'
make[1]: Leaving directory `/home/ian/drgeo-1.1.0'
[root@attic4 drgeo-1.1.0]# exit
exit
[ian@attic4 drgeo-1.1.0]$

Cũng như sao chép các tập tin, việc tạo trình cài đặt cũng phải đảm bảo chắc rằng các tập tin được cài đặt có quyền sở hữu và các quyền hạn thích hợp. Sau khi trình cài đặt kết thúc, chương trình được cài đặt và sẵn sàng để sử dụng hoặc có thể tùy chỉnh trước khi sử dụng.

Lưu ý: Rất dễ dàng mắc các lỗi có thể gây tổn hại cho hệ thống của bạn trong khi bạn có đặc quyền root, do đó, nhớ bỏ chế độ root bằng cách sử dụng lệnh exit hoặc trong bash shell, bằng cách nhấn ctrl-d.

Chạy chương trình

Nếu chương trình của bạn đã sẵn sàng chạy, bạn có thể thử nó bằng cách gõ tên chương trình, trong ví dụ của chúng ta là drgeo. Hình 1 cho thấy một màn hình Tiến sĩ Geo hiển thị một trong những ví dụ kèm theo với chương trình.

Hình 1. Chạy chương trình Tiến sĩ Geo
Truy cập vào các thiết lập BIOS

Bạn có thể cần phải làm một số việc khác trước khi chạy một chương trình.

  • Đọc trang hướng dẫn sử dụng nếu trang đó là một phần của gói. Hãy thử lệnh man programname.
  • Tùy chỉnh các tập tin cấu hình, ví dụ trong /etc.
  • Cấu hình một chương trình chẳng hạn như một daemon của máy chủ để khởi chạy tự động.

Trong phần này chúng tôi đã trình bày các cài đặt tương đối dễ từ mã nguồn. Trong các phần tiếp theo chúng tôi sẽ nói thêm về các thư viện và quản lý thư viện cũng như các gói và làm thế nào để cài đặt chúng.


Quản lý thư viện chia sẻ

Phần này trình bày các tư liệu cho chủ đề 1.102.4 cho kỳ thi quản trị trình độ sơ cấp (LPIC-1) 101. Chủ đề này có trọng số 3.

Trong phần này, bạn sẽ tìm hiểu cách để xác định các thư viện chia sẻ mà các chương trình thi hành được phụ thuộc vào chúng. Bạn sẽ tìm hiểu các thư viện hệ thống được lưu giữ ở đâu. Chúng tôi sẽ trình bày việc cài đặt các gói, bao gồm các thư viện chia sẻ, trong các phần tiếp theo của hướng dẫn này.

Các chương trình thi hành được tĩnh và động

Các hệ thống Linux có hai kiểu chương trình thi hành được.

  1. Các chương trình thi hành được liên kết tĩnh (statically linked) chứa tất cả các hàm thư viện mà chúng cần để thi hành. Tất cả các hàm thư viện được liên kết vào chương trình thi hành được này. Chúng là những chương trình đầy đủ, chạy không phụ thuộc vào thư viện bên ngoài. Một lợi thế của các chương trình liên kết tĩnh là chúng sẽ làm việc mà không cần cài đặt các điều kiện cần có trước.
  2. Các chương trình thi hành được liên kết động (dynamically linked) là các chương trình nhỏ hơn nhiều, chưa đầy đủ, theo nghĩa rằng chúng đòi hỏi các hàm từ các thư viện chia sẻ bên ngoài để chạy. Ngoài việc là nhỏ hơn, các chương trình liên kết động cho phép một gói chỉ rõ các thư viện cần có trước mà không cần phải chứa sẵn các thư viện trong gói. Việc sử dụng liên kết động cũng cho phép nhiều chương trình đang chạy chia sẻ một bản sao của một thư viện thay vì chiếm bộ nhớ để chứa nhiều bản sao của cùng một mã. Với những lý do này, hầu hết các chương trình hiện nay sử dụng liên kết động.

Một ví dụ đáng chú ý trên một hệ thống Linux điển hình là lệnh ln (/bin/ln), tạo ra các liên kết giữa các tập tin, hoặc các liên kết cứng (hard) hoặc các liên kết mềm (soft) (hoặc biểu tượng (symbolic)). Các thư viện chia sẻ thường bao gồm các liên kết biểu tượng giữa một tên chung cho thư viện và một cấp cụ thể của thư viện, do đó nếu các liên kết không làm việc, thì lệnh ln có thể không chạy. Để tránh khỏi khả năng này, hệ thống Linux có một phiên bản liên kết tĩnh của chương trình ln dưới dạng chương trình sln (/sbin/sln). Liệt kê 19 minh họa sự khác biệt lớn về độ lớn giữa hai chương trình.

Liệt kê 19. Độ lớn của chương trình sln và ln.
[ian@lyrebird ian]$ ls -l /sbin/sln; ls -l /bin/ln
-rwxr-xr-x    1 root     root       457165 Feb 23  2005 /sbin/sln
-rwxr-xr-x    1 root     root        22204 Aug 12  2003 /bin/ln

Lệnh ldd

Ngoài việc biết rằng một chương trình liên kết tĩnh có thể sẽ lớn, làm thế nào để chúng ta nói một chương trình là liên kết tĩnh hay không? Và nếu nó là liên kết động, làm thế nào để chúng ta biết nó cần những thư viện nào? Câu trả lời cho cả hai câu hỏi trên là lệnh ldd hiển thị thông tin về các thư viện cần thiết của một chương trình thi hành được. Liệt kê 20 hiển thị kết quả đầu ra của lệnh ldd cho các chương trình thi hành được ln và sln.

Liệt kê 20. Kết quả đầu ra của lệnh ldd cho chương trình sln và ln.
[ian@lyrebird ian]$ ldd /sbin/sln /bin/ln
/sbin/sln:
        not a dynamic executable
/bin/ln:
        libc.so.6 => /lib/tls/libc.so.6 (0x00ebd000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00194000)

Do lệnh ldd thực tế chỉ quan tâm đến liên kết động, nó cho chúng ta biết rằng sln là chương trình liên kết tĩnh bằng cách nói cho chúng ta rằng đó "không phải là một chương trình thi hành được động", đồng thời cho chúng ta biết tên của hai thư viện chia sẻ (libc.so.6 và ld- linux.so.2) mà lệnh ln cần, cũng như tìm các thư viện này ở đâu. Lưu ý rằng .so biểu thị rằng chúng là các đối tượng chia sẻ (shared objects) hoặc các thư viện động. Trong Liệt kê 21 chúng ta sử dụng lệnh ls -l để chỉ ra rằng các .so này thực là các liên kết biểu tượng với các phiên bản cụ thể của các thư viện.

Liệt kê 21. Các liên kết biểu tượng của thư viện.
[ian@lyrebird ian]$ ls -l /lib/tls/libc.so.6; ls -l /lib/ld-linux.so.2
lrwxrwxrwx    1 root   root       13 May 18 16:24 /lib/tls/libc.so.6 -> libc-2.3.2.so
lrwxrwxrwx    1 root   root       11 May 18 16:24 /lib/ld-linux.so.2 -> ld-2.3.2.so

Nạp động

Theo nội dung phần trước bạn có thể ngạc nhiên khi biết rằng ld-linux.so, trông giống như một thư viện chia sẻ, thực tế là một tập tin thi hành được theo đúng nghĩa. Đây là mã có trách nhiệm nạp tự động. Nó đọc các thông tin tiêu đề từ tập tin thi hành được theo định dạng liên kết và thi hành được (Executable and Linking Format) hay (ELF). Từ thông tin này nó xác định các thư viện nào là cần thiết và cần phải nạp các thư viện nào. Sau đó nó thực hiện liên kết động để cố định tất cả các con trỏ địa chỉ trong tập tin thi hành được của bạn và các thư viện đã nạp sao cho chương trình sẽ chạy.

Bạn sẽ không tìm thấy một trang hướng dẫn sử dụng cho ld-linux.so, nhưng bạn sẽ tìm thấy nó được nói đến trong mục hướng dẫn sử dụng cho ld.so, man ld.so. Liệt kê 22 minh họa việc sử dụng tùy chọn --list ld-linux.so để hiển thị thông tin tương tự cho lệnh ln mà chúng ta đã hiển thị với lệnh ldd trong Liệt kê 20.

Liệt kê 22. Sử dụng ld-linux.so để hiển thị các yêu cầu thư viện.
[ian@lyrebird ian]$ /lib/ld-linux.so.2 --list /bin/ln
        libc.so.6 => /lib/tls/libc.so.6 (0x00a83000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00f2c000)

Lưu ý rằng các địa chỉ dưới dạng số hệ đếm 16 là khác nhau giữa hai danh sách. Nhiều khả năng chúng sẽ khác nếu bạn chạy lệnh ldd hai lần.

Cấu hình thư viện động

Vậy thì làm thế nào mà bộ nạp động biết tìm các tập tin thi hành được ở đâu? Cũng giống như với nhiều thứ trong Linux, có các tập tin cấu hình trong /etc. Thực vậy, có hai tập tin cấu hình, /etc/ld/so/conf và /etc/ld.so.cache. Liệt kê 23 cho thấy nội dung của /etc/ld.so/conf trên hai hệ thống khác nhau. Lưu ý rằng trên hệ thống attic4 (chạy Fedora Core 4), /etc/ld.so/conf xác định rằng cần phải có tất cả các tập tin .conf từ các thư mục con ld.so.conf.d. Các nội dung thực tế của etc/ld.so.conf có thể khác trên hệ thống của bạn.

Liệt kê 23. Nội dung của etc/ld.so.conf.
[ian@lyrebird ian]$ cat /etc/ld.so.conf
/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/qt-3.1/lib
[
[ian@attic4 ~]$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

Việc nạp các chương trình cần phải nhanh chóng, do đó tập tin ld.so.conf được xử lý theo lệnh ldconfig để xử lý tất cả các thư viện từ ld.so.conf.d cũng như những thư viện từ các thư mục tin cậy, /lib và /usr/lib. Bộ nạp động sử dụng tập tin ld.conf.cache để định vị các tập tin được nạp và được liên kết động. Nếu bạn thay đổi tập tin ld.co.conf (hoặc thêm tập tin bao gồm mới vào ld.so.conf.d thì bạn phải chạy lệnh ldconfig (với quyền của root ) để xây dựng lại tập tin ld.conf.cache của bạn.

Thông thường, bạn sử dụng lệnh ldconfig không có các tham số để xây dựng lại ld.so.cache. Có một vài tham số khác mà bạn có thể xác định để ghi đè lên hành vi mặc định này. Như thường lệ, hãy thử dùng lệnh man ldconfig để biết thêm thông tin. Chúng tôi minh họa việc sử dụng các tham số -p để hiển thị các nội dung của ld.so.cache trong Liệt kê 24.

Liệt kê 24. Sử dụng lệnh ldconfig để hiển thị ld.so.cache.
[ian@lyrebird ian]$ /sbin/ldconfig -p | more
768 libs found in cache `/etc/ld.so.cache'
        libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2
        libz.so.1 (libc6) => /usr/lib/libz.so.1
        libz.so (libc6) => /usr/lib/libz.so
        libx11globalcomm.so.1 (libc6) => /usr/lib/libx11globalcomm.so.1
        libxsltbreakpoint.so.1 (libc6) => /usr/lib/libxsltbreakpoint.so.1
        libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1
        libxmms.so.1 (libc6) => /usr/lib/libxmms.so.1
        libxml2.so.2 (libc6) => /usr/lib/libxml2.so.2
        libxml2.so (libc6) => /usr/lib/libxml2.so
        libxmltok.so.0 (libc6) => /usr/lib/libxmltok.so.0
        libxmlparse.so.0 (libc6) => /usr/lib/libxmlparse.so.0
        libxml.so.1 (libc6) => /usr/lib/libxml.so.1
        libxerces-c.so.24 (libc6) => /usr/lib/libxerces-c.so.24
        ...
        lib-gnu-activation-20030319.so (libc6) => /usr/lib/lib-gnu-activation-20030319.so
        ld-linux.so.2 (ELF) => /lib/ld-linux.so.2

Nếu bạn đang chạy một ứng dụng cũ cần một phiên bản cũ cụ thể của một thư viện chia sẻ, hoặc nếu bạn đang phát triển một thư viện chia sẻ hoặc phiên bản mới của một thư viện chia sẻ, bạn có thể muốn ghi đè lên các đường dẫn tìm kiếm mặc định mà bộ nạp sử dụng. Điều này cũng có thể cần thiết bởi các kịch bản lệnh có sử dụng các thư viện chia sẻ đặc thù riêng của sản phẩm được cài đặt trong cây /opt.

Cũng giống như bạn có thể thiết lập biến PATH để chỉ rõ một đường dẫn tìm kiếm cho các tập tin thi hành được, bạn có thể thiết lập biến LD_LIBRARY_PATH với một danh sách các thư mục được phân tách bằng dấu hai chấm. Các thư mục này của cần được tìm kiếm cho các thư viện chia sẻ trước khi những thư mục hệ thống được quy định tại ld.so.cache. Ví dụ, bạn có thể sử dụng một lệnh như

export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/AgentController/lib

Trong các phần còn lại của hướng dẫn này, chúng ta sẽ xem xét quản lý gói.


Quản lý gói Debian

Phần này trình bày các tài liệu cho chủ đề 1.102.5 cho kỳ thi quản trị trình độ sơ cấp (LPIC-1) 101. Chủ đề này có trọng số 8.

Trong phần trên chúng ta đã tìm hiểu về cài đặt chương trình từ mã nguồn. Trong phần này, bạn sẽ tìm hiểu về một biện pháp thay thế khác được hầu hết các bản phân phối hiện nay sử dụng, đó là quản lý gói (package management), trong đó các chương trình hoặc bộ chương trình đã xây dựng sẵn được phân phối như là một gói, sẵn sàng để cài đặt trên một bản phân phối cụ thể. Trong phần này và phần tiếp theo chúng ta sẽ xem xét việc quản lý gói, tập trung vào hai hệ thống quản lý gói được sử dụng rộng rãi. Chúng là Công cụ đóng gói nâng cao (Advanced Packaging Tool) hay APT do Debian phát triển và Trình quản lý gói Red Hat (Red Hat Package Manager) hay RPM do Red Hat phát triển.

Tổng quan về quản lý gói

Trong ví dụ Tiến sĩ Geo ở phần trên, bước cấu hình ban đầu của chúng ta lúc đầu thất bại vì chúng ta đã không có một chương trình cụ thể cần có trước. Các công cụ quản lý gói chính thức hóa khái niệm điều kiện cần có trước và các phiên bản và tiêu chuẩn hóa các vị trí tập tin trên hệ thống của bạn, cũng như cung cấp một cơ chế theo vết giúp bạn xác định những gói nào đã được cài đặt. Kết quả là cài đặt, duy trì và gỡ bỏ phần mềm dễ dàng hơn.

Trong khi bạn có thể vẫn muốn cài đặt các chương trình từ mã nguồn với các lý do được liệt kê trong phần trước, nhiều khả năng bạn sẽ thực hiện hầu hết việc bảo trì hệ thống và cài đặt chương trình của bạn bằng cách sử dụng trình quản lý gói đã được thiết lập cho bản phân phối của bạn.

Từ quan điểm người dùng, chức năng quản lý gói cơ sở được các lệnh cung cấp. Như các nhà phát triển Linux đã nỗ lực phấn đấu để làm cho Linux dễ dàng sử dụng hơn, các công cụ cơ sở đã được bổ sung bằng các công cụ khác, bao gồm các công cụ với giao diện đồ họa, che giấu bớt những sự phức tạp của các công cụ cơ sở đối với người dùng cuối. Trong hai phần này, chúng tôi tập trung vào các công cụ cơ sở, mặc dù chúng tôi sẽ đề cập đến một số các công cụ khác để cho bạn có một điểm bắt đầu để tìm hiểu về chúng.

Cài đặt các gói Debian

Chúng ta hãy quay trở lại vấn đề mà chúng ta đã gặp ở trên với mã nguồn chương trình Tiến sĩ Geo. Như đã xảy ra, vấn đề này đã xuất hiện trên một hệ thống Fedora Core 4 trong đó sử dụng quản lý gói RPM. May mắn cho phần này của hướng dẫn, tôi cũng thiếu một số thành phần guile trên một hệ thống Ubuntu dựa trên Debian, nơi tôi đã cố gắng cài đặt chương trình Tiến sĩ Geo. (Guile là một phần mở rộng về ngôn ngữ lập trình, cho phép gọi sử dụng các hàm viết bằng ngôn ngữ lập trình khác - N.D). Lần này lỗi được hiển thị trong Liệt kê 25.

Liệt kê 25. Thiếu chức năng guile.
ian@attic4:~$ cd drgeo-1.1.0
ian@attic4:~/drgeo-1.1.0$ ./configure
checking for perl... /usr/bin/perl
checking for XML::Parser... ok
checking for iconv... /usr/bin/iconv
checking for msgfmt... /usr/bin/msgfmt
...
checking for guile... no
configure: error: guile required but not found
i

Gói chúng ta cần là gói guile. Chúng ta có thể cài đặt gói đó bằng cách sử dụng lệnh apt-get như trong Liệt kê 26. Lưu ý việc sử dụng lệnh sudo, là một phương thức Ubuntu thông thường để làm việc này với quyền root

Liệt kê 26. Cài đặt guile sử dụng lệnh apt-get.
ian@attic4:~$ sudo apt-get install guile
Reading package lists... Done
Building dependency tree... Done
Note, selecting guile-1.6 instead of guile
Suggested packages:
  guile-1.6-doc
The following NEW packages will be installed:
  guile-1.6
0 upgraded, 1 newly installed, 0 to remove and 24 not upgraded.
Need to get 31.5kB of archives.
After unpacking 209kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com hoary/main guile-1.6 1.6.7-1ubuntu1 [31.5kB]
Fetched 31.5kB in 0s (37.4kB/s)

Preconfiguring packages ...
Selecting previously deselected package guile-1.6.
(Reading database ... 84435 files and directories currently installed.)
Unpacking guile-1.6 (from .../guile-1.6_1.6.7-1ubuntu1_i386.deb) ...
Setting up guile-1.6 (1.6.7-1ubuntu1) ...
i

Từ kết quả đầu ra chúng ta thấy rằng lệnh apt-get đã đọc một danh sách gói từ một nơi nào đó (sẽ nói thêm về việc này ngay sau đây), đã xây dựng một cây phụ thuộc, đã xác định rằng guile-doc được khuyến cáo dùng cho việc cài đặt với guile và đã tải về gói guile từ Internet. Sau đó gói guile đã được giải nén, cài đặt và thiết lập. Lưu ý rằng phần mở rộng được dùng cho các gói Debian là .deb. Tên tập tin đầy đủ của gói guile của chúng ta là guile-1.6_1.6.7-1ubuntu1_i386.deb.

Nếu lệnh apt-get thông báo rằng gói bạn đang cố gắng cài đặt phụ thuộc vào các gói khác, nó cũng sẽ tự động lấy về và cài đặt chúng. Trong ví dụ của chúng ta, chỉ guile được cài đặt, bởi vì tất cả phụ thuộc đã được thỏa mãn. Căn cứ vào lời khuyên trong kết quả đầu ra, chúng ta có thể cài đặt guile-doc (hay guile-1.6.doc).

Giả sử rằng, thay vì cài đặt guile-doc, chúng ta muốn tìm hiểu xem liệu việc cài đặt guile-doc có phụ thuộc vào gói khác không. Chúng ta có thể sử dụng tùy chọn -s (viết tắt của simulate (mô phỏng)) trên lệnh apt-get. Có một số tùy chọn khác có chức năng tương đương, chẳng hạn như --just-print và \--dry-run. Hãy xem các trang hướng dẫn sử dụng để biết chi tiết đầy đủ. Không có gì ngạc nhiên là tài liệu tham khảo cho một gói mà chúng ta vừa cài đặt không có bất cứ điều kiện cần có trước nào, do đó, trong Liệt kê 27 chúng tôi minh họa một ví dụ có ích hơn một chút với việc cài đặt mô phỏng của gói ssl-cert, đòi hỏi có gói openssl.

Liệt kê 27. Cài đặt mô phỏng hay chạy khô cert-ssl.
ian@attic4:~$ sudo apt-get -s install ssl-cert
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  openssl
Suggested packages:
  ca-certificates
The following NEW packages will be installed:
  openssl ssl-cert
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Inst openssl (0.9.7e-3 Ubuntu:5.04/hoary)
Inst ssl-cert (1.0-11 Ubuntu:5.04/hoary)
Conf openssl (0.9.7e-3 Ubuntu:5.04/hoary)
Conf ssl-cert (1.0-11 Ubuntu:5.04/hoary)

Chúng ta thấy hai gói mới cần thiết phải có và chúng ta thấy thứ tự trong đó chúng sẽ được cài đặt và cấu hình.

Danh sách tài nguyên của gói: apt-setup

Chúng tôi đã đề cập rằng apt-get đọc một danh sách các gói từ một nơi nào đó. Nơi đó chính là /etc/apt/sources.list. Đây là danh sách mà bạn có thể tự mình chỉnh sửa, nhưng có lẽ bạn sẽ thích thiết lập bằng cách sử dụng lệnh apt-setup. Lệnh apt-setup là một công cụ tương tác biết các vị trí của các kho lưu trữ APT chính. Bạn có thể truy cập các mã nguồn của gói trên một đĩa CD-ROM, hệ thống tập tin cục bộ của bạn hoặc thông qua mạng khi sử dụng http hoặc ftp.

Nếu bản phân phối của bạn đã cài đặt một tập tin /etc/apt/sources.list cho bạn, thì có thể đĩa CD-ROM của bạn không phải là nguồn gốc cho các gói. Điều này có thể bất tiện, đặc biệt trong giai đoạn đầu thử nghiệm với một hệ thống mới khi bạn có thể muốn thêm nhiều gói, phần lớn các gói đó chưa được cập nhật. Trong trường hợp này, bạn có thể sử dụng lệnh

apt-cdrom add

để thêm đĩa CD-ROM của bạn vào danh sách các nguồn tài nguyên của gói.

Lệnh Apt-get và các công cụ khác mà chúng ta sẽ tìm hiểu về chúng, có sử dụng một cơ sở dữ liệu cục bộ để xác định những gói nào đã được cài đặt. Chúng có thể kiểm tra các mức đã được cài đặt so với các mức sẵn có. Để làm điều này, thông tin về các mức có sẵn được lấy từ các nguồn được liệt kê trong /etc/apt/sources.list và được lưu trữ trên hệ thống cục bộ của bạn. Nếu bạn cập nhật tập tin /etc/apt/sources.list, thì sau đó bạn nên chạy lệnh

apt-get update

Lệnh này sẽ đưa ra dữ liệu đã lưu trữ của bạn về các mức gói có sẵn được cập nhật. Nói chung, bạn nên thường xuyên làm việc này trước khi cài đặt bất kỳ phần mềm mới nào.

Gỡ bỏ hoặc nâng cấp các gói

Trước khi rời khỏi lệnh apt-get, chúng tôi sẽ đề cập đến hai lựa chọn có ích khác.

Nếu bạn cài đặt một gói phần mềm và sau đó muốn gỡ bỏ cài đặt nó, bạn sử dụng tùy chọn remove với lệnh apt-get. Liệt kê 28 cho thấy cách gỡ bỏ gói guile được chúng ta đã cài đặt ở trên.

Liệt kê 28. Gỡ bỏ gói guile.
ian@attic4:~$ sudo apt-get remove guile
Reading package lists... Done
Building dependency tree... Done
Note, selecting guile-1.6 instead of guile
The following packages will be REMOVED:
  guile-1.6
0 upgraded, 0 newly installed, 1 to remove and 24 not upgraded.
Need to get 0B of archives.
After unpacking 209kB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 84455 files and directories currently installed.)
Removing guile-1.6 ...

Tùy chọn khác mà chúng tôi sẽ đề cập đến là tùy chọn upgrade (nâng cấp). Tùy chọn này nâng cấp tất cả các gói đã cài đặt trên hệ thống của bạn lên các mức mới nhất. Đừng nhầm lẫn tùy chọn này với tùy chọn update (cập nhật), chỉ đơn thuần là làm mới các thông tin về các gói có sẵn.

Để biết thêm thông tin về các khả năng và các tùy chọn khác cho lệnh apt-get, hãy xem trang hướng dẫn sử dụng.

Tập tin apt.conf

Nếu bạn kiểm tra trang hướng dẫn sử dụng cho lệnh apt-get, bạn sẽ thấy có nhiều tùy chọn. Nếu bạn sử dụng lệnh apt-get rất nhiều và bạn tìm thấy các tùy chọn mặc định không theo ý thích của bạn, bạn có thể thiết lập các mặc định mới trong /etc/apt/apt.conf. Một chương trình apt-config có sẵn cho các kịch bản lệnh để điều tra tập tin apt.conf. Xem các trang hướng dẫn sử dụng cho apt.conf và apt-config để biết thêm thông tin.

Thông tin gói Debian

Bây giờ chúng ta sẽ xem xét một số công cụ để nhận được thông tin về các gói. Một số trong các công cụ này cũng làm các việc khác nữa, nhưng chúng ta sẽ tập trung ở đây về các khía cạnh thông tin.

Trạng thái gói với công cụ dpkg

Một công cụ khác là một phần của hệ thống APT là công cụ dpkg. Đây là một công cụ quản lý gói mức trung, có thể cài đặt và gỡ bỏ các gói cũng như hiển thị thông tin trạng thái. Cấu hình của dpkg có thể được điều khiển bởi /etc/dpkg/dpkg.cfg. Những người sử dụng cá nhân cũng có thể có một tập tin dpkg.cfg trong thư mục nhà của mình để cung cấp thêm cấu hình. Nếu bạn không có cả hai tập tin này, hãy xem tập tin /usr/share/doc/dpkg/dpkg.cfg để làm ví dụ.

Công cụ dpkg sử dụng nhiều tập tin trong cây /var/lib/dpkg trong hệ thống tập tin của bạn. Cụ thể là, tập tin /var/lib/dpkg/status chứa thông tin trạng thái về các gói trên hệ thống của bạn. Liệt kê 29 cho thấy việc sử dụng dpkg -s để hiển thị trạng thái của gói guile sau khi chúng ta cài đặt nó. Hãy nhớ rằng chúng ta thực tế đã cài đặt guile-1.6. Chúng ta thấy trong Liệt kê 29 rằng chúng ta cần phải cung cấp tên đầy đủ, không chỉ là dạng tên viết tắt.

Liệt kê 29. Trạng thái gói guile.
ian@attic4:~$ dpkg -s guile
Package `guile' is not installed and no info is available.

Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
ian@attic4:~$ dpkg -s guile-1.6
Package: guile-1.6
Status: install ok installed
Priority: optional
Section: interpreters
Installed-Size: 204
Maintainer: Rob Browning <rlb@defaultvalue.org>
Architecture: i386
Version: 1.6.7-1ubuntu1
Provides: guile
Depends: guile-1.6-libs, libc6 (>= 2.3.2.ds1-4), libguile-ltdl-1
Suggests: guile-1.6-doc
Conflicts: libguile-dev (<= 1:1.4-24)
Description: The GNU extension language and Scheme interpreter
 Guile is a Scheme implementation designed for real world programming,
 providing a rich Unix interface, a module system, an interpreter, and
 many extension languages.  Guile can be used as a standard #! style
 interpreter, via #!/usr/bin/guile, or as an extension language for
 other applications via libguile.

Các gói và các tập tin trong đó

Bạn sẽ thường muốn biết có cái gì trong một gói hoặc một tập tin cụ thể đến từ gói nào. Đây là hai nhiệm vụ của dpkg. Liệt kê 30 minh họa việc sử dụng dpkg -L để liệt kê các tập tin (bao gồm cả thư mục) được gói guile cài đặt.

Liệt kê 30. Có gì trong gói guile?
root@attic4:~# dpkg -L guile-1.6
/.
/usr
/usr/bin
/usr/bin/guile-1.6-snarf
/usr/bin/guile-1.6-tools
/usr/bin/guile-1.6
/usr/bin/guile-1.6-config
/usr/share
/usr/share/guile
/usr/share/guile/1.6
/usr/share/guile/1.6/scripts
/usr/share/guile/1.6/scripts/autofrisk
/usr/share/guile/1.6/scripts/display-commentary
/usr/share/guile/1.6/scripts/doc-snarf
/usr/share/guile/1.6/scripts/frisk
/usr/share/guile/1.6/scripts/generate-autoload
/usr/share/guile/1.6/scripts/lint
/usr/share/guile/1.6/scripts/PROGRAM
/usr/share/guile/1.6/scripts/punify
/usr/share/guile/1.6/scripts/read-scheme-source
/usr/share/guile/1.6/scripts/snarf-check-and-output-texi
/usr/share/guile/1.6/scripts/snarf-guile-m4-docs
/usr/share/guile/1.6/scripts/use2dot
/usr/share/doc
/usr/share/doc/guile-1.6
/usr/share/doc/guile-1.6/copyright
/usr/share/doc/guile-1.6/changelog.Debian.gz
/usr/lib
/usr/lib/menu
/usr/lib/menu/guile-1.6

Để tìm gói nào có chứa một tập tin cụ thể, hãy sử dụng tùy chọn -S của dpkg, như trong Liệt kê 31. Tên của gói được liệt kê bên trái.

Liệt kê 31. Gói nào chứa một tập tin?
ian@attic4:~$ dpkg -S /usr/share/guile/1.6/scripts/lint
guile-1.6: /usr/share/guile/1.6/scripts/lint

Bạn có thể nhận thấy rằng danh sách trong Hình 30 đã không bao gồm /usr/bin/guile, nhưng lệnh which guile nói rằng đây là chương trình sẽ được chạy nếu bạn gõ guile. Khi điều này xảy ra bạn có thể cần phải làm thêm một số công việc thăm dò để tìm xem một gói xuất phát từ đâu. Ví dụ, bước thiết lập cài đặt có thể thực hiện các nhiệm vụ như tạo liên kết biểu tượng chưa được liệt kê như là một phần của các nội dung gói. Một phần vừa thêm vào hệ thống Linux là hệ thống các lựa chọn thay thế được quản lý bằng lệnh update-alternatives. Trong Liệt kê 32, chúng ta chỉ ra cách sử dụng lệnh ls để xem lệnh guile nào được liên kết biểu tượng đến nó. Liên kết đến thư mục /etc/alternatives là một lời cảnh báo rằng chúng ta đang sử dụng hệ thống các lựa chọn thay thế, vì vậy chúng ta sử dụng lệnh update-alternatives để tìm thêm thông tin và cuối cùng chúng ta có thể sử dụng lệnh dpkg -S để xác nhận rằng lệnh guile đến từ gói guile-1.6. Thiết lập cho hệ thống các lựa chọn thay thế đã được thực hiện bằng một kịch bản lệnh sau cài đặt, là một phần của gói guile-1.6.

Liệt kê 32. Một cách sử dụng dpkg-S phức tạp hơn
ian@attic4:~$ ls -l $(which guile)
lrwxrwxrwx  1 root root 23 2005-09-06 23:38 /usr/bin/guile -> /etc/alternatives/guile
ian@attic4:~$ update-alternatives --display guile
guile - status is auto.
 link currently points to /usr/bin/guile-1.6
/usr/bin/guile-1.6 - priority 160
 slave guile-config: /usr/bin/guile-1.6-config
 slave guile-snarf: /usr/bin/guile-1.6-snarf
 slave guile-tools: /usr/bin/guile-1.6-tools
Current `best' version is /usr/bin/guile-1.6.
ian@attic4:~$ dpkg -S /usr/bin/guile-1.6
guile-1.6: /usr/bin/guile-1.6

Cấu hình lại các gói Debian.

APT có một khả năng gọi là debconf được sử dụng để cấu hình các gói sau khi chúng được cài đặt. Các gói có sử dụng tính năng này (và không phải tất cả các gói đều sử dụng) có thể được cấu hình lại sau khi chúng được cài đặt. Cách dễ nhất để làm điều này là sử dụng lệnh dpkg-reconfigure. Ví dụ, lệnh adduser có thể tạo các thư mục nhà, cho phép tất cả người dùng hệ thống có quyền đọc. Bạn có thể không muốn điều này vì lý do riêng tư. Hình 2 minh họa câu hỏi cấu hình có thể áp dụng được với gói adduser. Chạy dpkg-reconfigure adduser (với quyền root) để tạo ra màn hình này.

Hình 2. Sử dụng dpkg-reconfigure
Sử dụng dpkg-reconfigure

Sử dụng dselect

Ở trên, chúng ta đã nói rằng trạng thái của các gói được giữ trong /var/lib/dpkg/status. Chúng ta cũng nói rằng dpkg đã có thể làm nhiều hơn là chỉ hiển thị thông tin gói. Bây giờ chúng ta sẽ xem qua lệnh dselect cung cấp một giao diện toàn màn hình dựa trên văn bản (sử dụng ncurses) với các chức năng quản lý gói của dpkg. Bạn có thể sử dụng dselect để cài đặt hoặc gỡ bỏ các gói cũng như để kiểm soát các cờ trạng thái chỉ báo các gói có cần được duy trì cập nhật hay chỉ giữ nguyên trong trạng thái hiện tại của chúng hay không, ví dụ thế. Nếu bạn chạy lệnh dselect (với quyền root), bạn sẽ thấy một màn hình tương tự như màn hình của Hình 3.

Hình 3. Chạy dselect
Chạy dselect

Sử dụng chế độ Select của dselect

Bạn có thể xem và thay đổi trạng thái của từng gói bằng cách chọn tùy chọn Select (chọn) mà chúng tôi đã tô đậm trong Hình 3. Sau đó bạn sẽ thấy một màn hình trợ giúp. Nhấn phím space để thoát khỏi trợ giúp bất cứ lúc nào bạn muốn. Rồi bạn sẽ thấy một danh sách các gói và các nhóm gói.

Bạn có thể tìm kiếm các gói bằng cách sử dụng / theo sau là một chuỗi tìm kiếm. Hình 4 cho thấy kết quả tìm kiếm "guile".

Hình 4. Màn hình lựa chọn cho dselect
Màn hình lựa chọn cho dselect

Các trạng thái chọn gói

Trạng thái chọn gói cho mỗi gói có thể được nhìn thấy dưới một tiêu đề hơi bí hiểm là EIOM. Những chữ cái này là viết tắt của Error, Installed state, Old markMark (Lỗi, trạng thái đã cài đặt, dấu cũ, dấu). Bạn có thể sử dụng phím "v" để chuyển đổi giữa dạng hiển thị ngắn gọn này và dạng hiển thị trạng thái đó bằng các từ đầy đủ.

Cột thứ tư, hay cột M, là cột mà bây giờ chúng ta xem xét. Cột này mô tả những gì sẽ xảy ra sau khi chúng ta kết thúc với màn hình lựa chọn và di chuyển đến màn hình cài đặt. Các dấu có ý nghĩa như sau:

Dấu *
Cài đặt hoặc nâng cấp lên phiên bản mới nhất.
Dấu =
Giữ gói này ở trạng thái và phiên bản hiện tại của nó.
Dấu - (gạch ngang)
Xóa gói nhưng giữ cấu hình của nó trong trường hợp nó được cài đặt lại sau này.
Dấu _ (gạch dưới)
Xoá gói này và dọn dẹp cấu hình.

Để thay đổi dấu, nhấn phím tương ứng, ngoại trừ việc bạn nhấn phím "+" để đánh dấu một gói cho việc cài đặt hoặc nâng cấp. Khi bạn kết thúc, nhấn Enter để xác nhận các thay đổi lựa chọn gói của bạn hoặc nhấn "X" (chữ hoa X) để hủy bỏ mà không lưu các thay đổi. Việc này sẽ đưa bạn trở lại màn hình của Hình 3, với tùy chọn Install (cài đặt) được chọn. Nhấn Enter để cài đặt hoặc nâng cấp hệ thống của bạn.

Nếu bất cứ lúc nào bạn cần giúp đỡ, hãy gõ "?" (dấu hỏi). Nhấn phím khoảng trống để quay lại trợ giúp.

Nâng cấp Debian với các công cụ khác

Bây giờ chúng ta đã thấy rằng dselect có thể giúp bạn cài đặt hoặc gỡ bỏ các gói riêng lẻ cũng như nâng cấp tất cả các gói trên hệ thống của bạn lên mức mới nhất. Nếu bạn muốn làm điều này từ dòng lệnh, bạn có thể sử dụng apt-get dselect-upgrade, để thực hiện đúng các dấu trạng thái mà chúng ta thấy đã thiết lập với dselect.

Ngoài dselect, có một số giao diện tương tác quản lý gói khác cho các hệ thống Debian, bao gồm aptitude (kỹ năng), synaptic (tiếp hợp) gnome-apt và wajig. Synaptic là một ứng dụng đồ họa để sử dụng với hệ thống Window X. Hình 5 hiển thị giao diện người dùng synaptic với người bạn cũ của chúng ta, gói guile, được đánh dấu để cài đặt.

Hình 5. Cài đặt guile khi sử dụng synaptic
Cài đặt guile khi sử dụng synaptic

Nút Apply (Áp dụng) sẽ cài đặt guile và cập nhật bất kỳ các gói nào khác nào đã lập lịch trình để cập nhật. Nút Reload (Nạp lại) sẽ làm mới các danh sách gói. Nếu bạn đang sử dụng các giao diện GUI, bạn có thể thấy synaptic dễ sử dụng hơn apt-get, dpkg hay dselect.

Tìm các gói Debian

Trong chủ đề cuối cùng của chúng ta về quản lý gói Debian, chúng ta sẽ xem xét cách để tìm các gói. Thông thường, apt-get và các công cụ khác mà chúng ta đã xem xét sẽ biết về bất kỳ gói Debian nào mà bạn có thể cần từ danh sách các gói có sẵn. Một lệnh mà chúng tôi vẫn chưa sử dụng là apt-cache, nó có ích cho việc tìm kiếm thông tin gói trên hệ thống của bạn. Lệnh apt-cache có thể tìm kiếm bằng cách sử dụng các biểu thức chính quy (mà chúng ta sẽ tìm hiểu thêm về chúng trong hướng dẫn cho Chủ đề 103). Giả sử chúng ta muốn tìm tên của gói chứa bộ nạp Linux. Liệt kê 33 cho thấy cách chúng ta có thể thực hiện việc này.

Liệt kê 33. Tìm kiếm bộ nạp Linux với lệnh apt-cache
ian@attic4:~$ apt-cache search "linux loader"
lilo - LInux LOader - The Classic OS loader can load Linux and others
lilo-doc - Documentation for LILO (LInux LOader)

Chúng ta đã thấy ở trên là dselect và synaptic cũng cung cấp các công cụ tìm kiếm. Nếu bạn sử dụng synaptic, lưu ý rằng bạn có các tùy chọn với các trình đơn tìm kiếm để xác định liệu chỉ tìm kiếm các tên gói hay cả các mô tả gói nữa.

Nếu bạn vẫn không thể tìm thấy gói này, bạn có thể có khả năng tìm nó ở gói trong danh sách các gói trên trang web Debian (xem Tài nguyên), hay ở nơi khác trên Internet.

Nếu bạn tìm thấy và tải về một tập tin .deb, bạn có thể cài đặt nó bằng cách sử dụng dpkg -i. Ví dụ, ví dụ Tiến sĩ Geo của chúng ta đã có sẵn như là một gói .deb từ kho gói Debian chính thức.

Liệt kê 34. Cài đặt Tiến sĩ Geo từ một gói .deb
ian@attic4:~$ ls drg*.deb
drgeo_1-1.0.0-1_i386.deb
ian@attic4:~$ sudo dpkg -i drgeo_1-1.0.0-1_i386.deb
Password:
Selecting previously deselected package drgeo.
(Reading database ... 84435 files and directories currently installed.)
Unpacking drgeo (from drgeo_1-1.0.0-1_i386.deb) ...
Setting up drgeo (1.0.0-1) ...

Lưu ý rằng khối tập tin nén (tarball) mã nguồn cho gói này đã ở một mức cao hơn (1.1.0) so với gói deb (1.0.0-1). Nếu bạn đã cài đặt Tiến sĩ Geo và, vì lý do nào, nó không làm việc, bạn có thể cần phải thử cài đặt từ mã nguồn.

Nếu vẫn thất bại, còn có một nguồn khả dĩ khác cho các gói. Giả sử bạn tìm một chương trình được đóng gói như là một RPM chứ không phải là một .deb. Bạn có thể sử dụng chương trình alien có thể chuyển đổi giữa các định dạng gói. Bạn nên đọc tài liệu hướng dẫn của alien một cách cẩn thận bởi vì không phải tất cả các tính năng của tất cả các hệ quản lý gói có thể được alien chuyển đổi sang định dạng khác.

Có rất nhiều điều về hệ thống quản lý gói Debian chưa được trình bày ở đây. Ngoài ra còn có nhiều điều về Debian hơn là về hệ thống quản lý gói của nó. Xem Tài nguyên để có các đường liên kết bổ sung.


Trình quản lý gói Red Hat (RPM)

Phần này trình bày các tài liệu cho chủ đề 1.102.6 cho kỳ thi quản trị trình độ sơ cấp (LPIC-1) 101. Chủ đề này có trọng số 8.

Trong phần trước đây về quản lý gói Debian, chúng tôi đã cung cấp cho bạn một tổng quan về quản lý gói ngắn gọn. Trong phần này chúng tôi sẽ tập trung vào trình quản lý gói Red Hat (Red Hat Package Manager) hay RPM do Red Hat phát triển. RPM và APT có nhiều điểm tương đồng. Cả hai có thể cài đặt và gỡ bỏ các gói. Cả hai đều lưu giữ một cơ sở dữ liệu của các gói đã cài đặt. Cả hai đều có chức năng dòng lệnh cơ sở cũng như các công cụ khác để cung cấp giao diện người dùng thân thiện hơn. Cả hai có thể lấy về các gói từ Internet. Nói chung, không có nhiều chương trình để xử lý với các gói RPM như là với các gói APT, mặc dù lệnh rpm có những tính năng phong phú. Một sự khác biệt nữa là RPM không duy trì các thông tin về các gói có sẵn trên hệ thống của bạn với cùng một quy mô như dpkg đã làm.

Red Hat đã giới thiệu RPM vào năm 1995. RPM hiện là hệ thống quản lý gói được sử dụng để đóng gói trong Cơ sở tiêu chuẩn Lunux (Linux Standard Base-LSB). Các tùy chọn của lệnh rpm được nhóm lại thành ba nhóm con dành cho:

  • Truy vấn và kiểm tra các gói.
  • Cài đặt, nâng cấp và gỡ bỏ các gói.
  • Thực hiện các chức năng linh tinh khác.

Chúng ta sẽ tập trung vào hai nhóm con đầu tiên trong hướng dẫn này. Bạn sẽ tìm thấy thông tin về các chức năng linh tinh khác trong các trang hướng dẫn sử dụng cho lệnh rpm.

Chúng ta cũng nên lưu ý rằng lệnh rpm là tên lệnh cho lệnh chính được sử dụng với gói RPM, trong khi .rpm là phần mở rộng được sử dụng cho các tập tin RPM. Vì vậy, "một rpm" hay "xxx rpm" nói chung sẽ nói đến một tập tin RPM, trong khi "rpm" thường sẽ nói đến lệnh.

Cài đặt và gỡ bỏ các gói RPM

Như chúng ta đã làm trong phần trước, chúng ta sẽ xem xét những vấn đề chúng ta đã gặp phải khi cài đặt Tiến sĩ Geo trên một hệ thống Fedora Core 4 trong phần Tạo và cài đặt các chương trình. Bạn có thể nhớ lại từ Liệt kê 17, chúng ta đã đang thiếu lệnh guile-config.

.

Bắt đầu với lệnh rpm

Lệnh rpm có thể cài đặt các gói từ hệ thống tập tin cục bộ hoặc từ Internet bằng cách sử dụng hoặc là http hoặc ftp. Liệt kê 35 hiển thị việc cài đặt gói guile-devel bằng lệnh rpm -ivh và từ nguồn trên mạng cho gói đó.

Liệt kê 35. Cài đặt guile-devel bằng lệnh rpm
[root@attic4 ~]# rpm -ivh http://download.fedora.redhat.com/pub/fedora\
> /linux/core/4/i386/os/Fedora/RPMS/guile-devel-1.6.7-2.i386.rpm
Retrieving http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/
RPMS/guile-devel-1.6.7-2.i386.rpm
Preparing...                ########################################### [100%]
   1:guile-devel            ########################################### [100%]

Lưu ý rằng tùy chọn -v cho kết quả đầu ra với báo cáo đầy đủ chi tiết và tùy chọn -h hiển thị dấu thăng (#) để biểu hiện tiến độ. Nếu bạn muốn xem xét các gói trước khi cài đặt từ mạng, bạn có thể muốn tải nó về trước đã và sau đó cài đặt. Một chút nữa, chúng ta sẽ nói về việc xem xét các gói, nhưng bây giờ, chúng ta hãy sử dụng lệnh wget để lấy về gói đó và sau đó cài đặt nó từ hệ thống tập tin cục bộ của chúng ta mà không sử dụng các tùy chọn -vh. Kết quả đầu ra được thể hiện trong Liệt kê 36..

Liệt kê 36. Cài đặt guile-devel từ một tập tin
[root@attic4 ~]# wget http://download.fedora.redhat.com/pub/fedora/\
> linux/core/4/i386/os/Fedora/RPMS/guile-devel-1.6.7-2.i386.rpm
--22:29:58--  http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/
RPMS/guile-devel-1.6.7-2.i386.rpm
           => `guile-devel-1.6.7-2.i386.rpm'
Resolving download.fedora.redhat.com... 209.132.176.221
Connecting to download.fedora.redhat.com[209.132.176.221]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 481,631 [application/x-rpm]

100%[====================================>] 481,631      147.12K/s    ETA 00:00

22:30:02 (140.22 KB/s) - `guile-devel-1.6.7-2.i386.rpm' saved [481,631/481,631]

[root@attic4 ~]# ls guil*
guile-devel-1.6.7-2.i386.rpm
[root@attic4 ~]# rpm -i guile-devel-1.6.7-2.i386.rpm

Không có các dấu thăng và không có thông báo nào.

Cài đặt lại một tập tin rpm

Nếu bạn đã tự mình thực hiện các lệnh ở trên, bạn đã thấy một lỗi khi cài đặt lần thứ hai (hoặc lần cài đặt đầu nếu bạn đã có guile-devel đã cài đặt rồi). Nó nói rằng guile-devel đã được cài đặt rồi. Để tránh điều này, bạn cần sử dụng tùy chọn -e để gỡ bỏ (hay xóa) tập tin rpm ấy trước khi cài đặt lại nó như trong Liệt kê 37. Điều này cũng sẽ được áp dụng nếu bạn cần phải cài đặt lại một tập tin rpm vì bạn vô tình xóa một số tập tin của nó.

Liệt kê 37. Gỡ bỏ guile-devel
[root@attic4 ~]# rpm -e guile-devel

Cài đặt cưỡng bức một tập tin rpm

Đôi khi việc gỡ bỏ một tập tin rpm là không thực tế, nhất là khi có những chương trình khác trên hệ thống phụ thuộc vào nó. Ví dụ, nếu bạn đã cố gắng để gỡ bỏ gói guile thay vì gói guile-devel, bạn có thể thấy kết quả đầu ra như Liệt kê 38, ở đó nhiều gói đã cài đặt có các phụ thuộc vào gói guile, do đó việc gỡ bỏ là không được phép.

Liệt kê 38. Cố gắng gỡ bỏ guile.
[root@attic4 ~]# rpm -q -R guile-devel
/bin/sh
/usr/bin/guile
guile = 5:1.6.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
[root@attic4 ~]# rpm -e guile
error: Failed dependencies:
        libguile-ltdl.so.1 is needed by (installed) g-wrap-1.3.4-8.i386
        libguile-ltdl.so.1 is needed by (installed) gnucash-1.8.11-3.i386
        libguile.so.12 is needed by (installed) g-wrap-1.3.4-8.i386
        libguile.so.12 is needed by (installed) gnucash-1.8.11-3.i386
        libqthreads.so.12 is needed by (installed) g-wrap-1.3.4-8.i386
        libqthreads.so.12 is needed by (installed) gnucash-1.8.11-3.i386
        guile is needed by (installed) g-wrap-1.3.4-8.i386
        guile = 5:1.6.7 is needed by (installed) guile-devel-1.6.7-2.i386
        /usr/bin/guile is needed by (installed) guile-devel-1.6.7-2.i386

Khỏi cần phải nói, để gỡ bỏ tất cả các gói cùng với các phụ thuộc vào nó như trường hợp này là không thực tế. Câu trả lời là cài đặt cưỡng bức tập tin rpm bằng cách sử dụng tùy chọn --force. Trong Liệt kê 39 chúng tôi minh họa việc cài đặt lại cưỡng bức guile-devel từ tập tin mà chúng tôi tải về cho Liệt kê 36.

Liệt kê 39. Cài đặt guile-devel với tùy chọn --force.
[root@attic4 ~]# rpm -ivh --force guile-devel-1.6.7-2.i386.rpm
Preparing...                ########################################### [100%]
   1:guile-devel            ########################################### [100%]

Gỡ bỏ cưỡng bức một tập tin rpm

Có một sự thay thế cho cài đặt cưỡng bức bằng tùy chọn --force mà bạn có thể cần trong một số trường hợp. Bạn có thể loại bỏ một tập tin rpm bằng cách sử dụng tùy chọn --nodeps để vô hiệu hóa việc kiểm tra phụ thuộc nội bộ. Thông thường bạn nên làm điều này chỉ khi bạn biết bạn đang làm gì và chỉ khi bạn có ý định sửa chữa các vấn đề về phụ thuộc bằng cách cài đặt lại gói đó. Một ví dụ có thể là khi bạn cần trở lại mức trước đó của một gói vì một lý do nào đó và muốn chắc chắn rằng tất cả các dấu vết các phiên bản sau này đã được gỡ bỏ. Lệnh mà bạn sẽ sử dụng để gỡ bỏ gói guile mà không kiểm tra phụ thuộc là

rpm -e --nodeps guile

Cũng có thể sử dụng tùy chọn --nodeps khi cài đặt một tập tin rpm. Một lần nữa, điều này không được khuyến khích, nhưng đôi khi có thể cần thiết:

Nâng cấp các gói bằng RPM

Bây giờ bạn biết cách để cài đặt và gỡ bỏ một gói bằng RPM, chúng ta hãy xem xét việc nâng cấp một gói bằng RPM lên một mức mới hơn. Điều này tương tự như cài đặt, chỉ trừ việc chúng ta sử dụng tùy chọn -U hay -F thay cho tùy chọn -i. Sự khác biệt giữa hai tùy chọn này là tùy chọn -U sẽ nâng cấp một gói hiện có hoặc cài đặt gói nếu nó vẫn chưa được cài đặt, trong khi tùy chọn -F sẽ chỉ nâng cấp hay làm mới một gói đã được cài đặt. Vì vậy, tùy chọn -U thường được sử dụng, nhất là khi dòng lệnh chứa một danh sách các gói. Bằng cách này, các gói chưa được cài đặt sẽ được cài đặt trong khi các gói đã cài đặt được nâng cấp. Liệt kê 40 cho thấy hiệu quả của nỗ lực để nâng cấp guile-devel lên mức mà nó đã có ở đó rồi và sau đó gỡ bỏ nó và thử lại bản nâng cấp (mà bây giờ làm việc như bản cài đặt).

Liệt kê 40. Nâng cấp guile-devel.
[root@attic4 ~]# rpm -Uvh  guile-devel-1.6.7-2.i386.rpm
Preparing...                ########################################### [100%]
        package guile-devel-1.6.7-2 is already installed
[root@attic4 ~]# rpm -e guile-devel
[root@attic4 ~]# rpm -Uvh  guile-devel-1.6.7-2.i386.rpm
Preparing...                ########################################### [100%]
   1:guile-devel            ########################################### [100%]

Truy vấn các gói RPM

Trong các ví dụ của chúng ta bạn có thể nhận thấy rằng việc cài đặt một tập tin rpm đòi hỏi tên đầy đủ của tập tin của gói đó (hoặc URL), chẳng hạn như guile-devel-1.6.7-2.i386.rpm. Mặt khác, việc gỡ bỏ tập tin rpm chỉ đòi hỏi tên gói, chẳng hạn như guile-devel. Cũng giống như với APT, RPM duy trì cơ sở dữ liệu nội bộ của các gói đã cài đặt của bạn, cho phép bạn thao tác các gói đã cài đặt bằng cách sử dụng tên gói. Trong phần này của hướng dẫn, chúng tôi sẽ xem xét một số thông tin có sẵn cho bạn từ cơ sở dữ liệu này bằng cách sử dụng tùy chọn -q (viết tắt của query - truy vấn) của lệnh rpm.

Truy vấn cơ sở đơn giản chỉ hỏi rằng một gói đã được cài đặt hay chưa. Thêm vào tùy chọn -i và bạn sẽ nhận được thông tin về gói đó. Lưu ý rằng bạn cần phải có quyền người dùng root để cài đặt, nâng cấp hoặc gỡ bỏ các gói, nhưng những người sử dụng không phải root đều có thể thực hiện các truy vấn đến cơ sở dữ liệu tập tin rpm.

Liệt kê 41. Hiển thị thông tin về guile-devel.
[ian@attic4 ~]$ rpm -q guile-devel
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -qi guile-devel
Name        : guile-devel                  Relocations: (not relocatable)
Version     : 1.6.7                             Vendor: Red Hat, Inc.
Release     : 2                             Build Date: Wed 02 Mar 2005 11:04:14 AM EST
Install Date: Thu 08 Sep 2005 08:35:45 AM EDT      Build Host: porky.build.redhat.com
Group       : Development/Libraries         Source RPM: guile-1.6.7-2.src.rpm
Size        : 1635366                          License: GPL
Signature   : DSA/SHA1, Fri 20 May 2005 01:25:07 PM EDT, Key ID b44269d04f2a6fd2
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary     : Libraries and header files for the GUILE extensibility library.
Description :
The guile-devel package includes the libraries, header files, etc.,
that you will need to develop applications that are linked with the
GUILE extensibility library.

You need to install the guile-devel package if you want to develop
applications that will be linked to GUILE. You also need to install
the guile package.

Các gói RPM và các tập tin trong chúng

Bạn thường sẽ muốn biết những gì có trong một gói hoặc một tập tin cụ thể đến từ gói nào. Để lập danh sách các tập tin trong gói guile-devel, hãy sử dụng tùy chọn -ql như trong Liệt kê 42. Có rất nhiều tập tin trong gói này, do đó chúng tôi chỉ hiển thị một phần của kết quả đầu ra.

Liệt kê 42. Hiển thị thông tin về guile-devel.
[ian@attic4 ~]$ rpm -ql guile-devel
/usr/bin/guile-config
/usr/bin/guile-snarf
/usr/include/guile
/usr/include/guile/gh.h
/usr/include/guile/srfi
/usr/include/guile/srfi/srfi-13.h
/usr/include/guile/srfi/srfi-14.h
/usr/include/guile/srfi/srfi-4.h
/usr/include/libguile
/usr/include/libguile.h
...

Bạn có thể giới hạn các tập tin được liệt kê, ví dụ chỉ liệt kê các tập tin cấu hình bằng cách thêm tùy chọn -c vào truy vấn của bạn. Tương tự, tùy chọn -d giới hạn hiển thị chỉ các tập tin tài liệu hướng dẫn.

Truy vấn các tập tin gói

Các lệnh truy vấn gói ở trên truy vấn cơ sở dữ liệu RPM để tìm gói đã cài đặt. Nếu bạn chỉ vừa tải về một gói và muốn nhận được cùng các thông tin như thế, bạn có thể làm điều này bằng cách sử dụng tùy chọn -p (viết tắt của package file - tập tin gói) cho truy vấn của bạn cùng với việc chỉ rõ tên file (tập tin) gói (giống như được sử dụng cho việc cài đặt gói). Liệt kê 43 lặp lại các truy vấn của Liệt kê 41 đối với tập tin gói thay vì cơ sở dữ liệu RPM.

Liệt kê 42. Hiển thị thông tin về tập tin gói guile-devel.
[ian@attic4 ~]$ rpm -qp guile-devel-1.6.7-2.i386.rpm
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -qpi guile-devel-1.6.7-2.i386.rpm
Name        : guile-devel                  Relocations: (not relocatable)
Version     : 1.6.7                             Vendor: Red Hat, Inc.
Release     : 2                             Build Date: Wed 02 Mar 2005 11:04:14 AM EST
Install Date: (not installed)               Build Host: porky.build.redhat.com
Group       : Development/Libraries         Source RPM: guile-1.6.7-2.src.rpm
Size        : 1635366                          License: GPL
Signature   : DSA/SHA1, Fri 20 May 2005 01:25:07 PM EDT, Key ID b44269d04f2a6fd2
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary     : Libraries and header files for the GUILE extensibility library.
Description :
The guile-devel package includes the libraries, header files, etc.,
that you will need to develop applications that are linked with the
GUILE extensibility library.

You need to install the guile-devel package if you want to develop
applications that will be linked to GUILE. You also need to install
the guile package.

Truy vấn tất cả các gói đã cài đặt

Tùy chọn -a áp dụng truy vấn của bạn cho tất cả các gói đã cài đặt. Điều này có thể tạo ra khá nhiều kết quả đầu ra, vì vậy bạn sẽ thường sử dụng nó kết hợp với một hoặc nhiều bộ lọc, chẳng hạn như sort để sắp xếp danh sách, more hoặc less để phân từng trang, wc để nhận được tổng số đếm gói hay tập tin, hoặc grep để tìm kiếm các gói nếu bạn không chắc chắn về tên. Liệt kê 43 hiển thị các truy vấn như sau:

  1. Một danh sách có xếp thứ tự tất cả các gói trên hệ thống.
  2. Một số đếm của tất cả các gói trên hệ thống.
  3. Một số đếm của tất cả các tập tin trong tất cả các gói trên hệ thống.
  4. Một số đếm tất cả các tập tin tài liệu hướng dẫn được cài đặt với các gói RPM.
  5. Một lệnh tìm kiếm tất cả các gói mà tên của chúng có chứa "guile" (không phân biệt chữ hoa chữ thường).
Liệt kê 43. Các truy vấn với tất cả các gói.
[ian@attic4 ~]$ rpm -qa | sort | more
4Suite-1.0-8.b1
a2ps-4.13b-46
acl-2.2.23-8
acpid-1.0.4-1
alchemist-1.0.36-1
alsa-lib-1.0.9rf-2.FC4
alsa-utils-1.0.9rf-2.FC4
...
[ian@attic4 ~]$ rpm -qa | wc -l
874
[ian@attic4 ~]$ rpm -qal | wc -l
195681
[ian@attic4 ~]$ rpm -qald | wc -l
31881
[ian@attic4 ~]$ rpm -qa | grep -i "guile"
guile-devel-1.6.7-2
guile-1.6.7-2

Sử dụng lệnh rpm -qa có thể dễ dàng quản trị nhiều hệ thống. Nếu bạn chuyển hướng đầu ra đã sắp thứ tự thành một tập tin trên một máy tính, sau đó làm giống như vậy trên máy khác, thì bạn có thể sử dụng chương trình diff để tìm các sự khác biệt.

Tìm chủ sở hữu của một tập tin

Giả sử rằng bạn có thể liệt kê tất cả các gói và tất cả các tập tin trong một gói, bây giờ bạn có tất cả các thông tin bạn cần để tìm gói nào có chứa một tập tin đã cho. Tuy nhiên, lệnh rpm cung cấp một tùy chọn -f để giúp bạn định vị gói có chứa tập tin. Trong ví dụ Tiến sĩ Geo của chúng ta trong phần Tạo và cài đặt các chương trình, chúng ta cần tập tin guile-config. Bây giờ chúng ta có gói guile-devel đã cài đặt, đây là một tập tin thi hành được trên đường dẫn của chúng ta. Liệt kê 44 cho thấy cách sử dụng lệnh which để có được đường dẫn đầy đủ cho lệnh guile-config và một lời khuyên có ích cho việc sử dụng kết quả đầu ra này làm đầu vào cho lệnh rpm -qf. Lưu ý rằng các dấu nháy bao quanh `which guile-config` là các dấu nháy ngược. Một cách khác để viết lệnh bash này là dùng $ (which guile-config).

Liệt kê 44. Gói nào có chứa tập tin guile-config.
[ian@attic4 ~]$ which guile-config
/usr/bin/guile-config
[ian@attic4 ~]$ rpm -qf `which guile-config`
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -qf $(which guile-config)
guile-devel-1.6.7-2

Các phụ thuộc gói RPM

Trên đây chúng ta đã thấy rằng chúng ta không thể xóa gói guile do các phụ thuộc. Ngoài các tập tin, một gói RPM có thể chứa các khả năng bất kỳ nào đó mà những gói khác có thể phụ thuộc vào. Trong ví dụ của chúng ta nhiều gói khác đã yêu cầu các khả năng được gói guile cung cấp. Và chúng ta không thể cài đặt guile-devel nếu chúng ta vẫn chưa cài đặt guile trên hệ thống của chúng ta. Và một khi guile-devel được cài đặt, nó đưa ra một lý do nữa, tại sao guile không thể bị gỡ bỏ.

Thông thường, tất cả những điều này kết thúc tốt đẹp. Nếu bạn cần phải cài đặt một vài gói cùng một lúc, một số trong các gói đó có thể phụ thuộc vào các gói khác, chỉ cần cung cấp toàn bộ danh sách cho lệnh rpm -Uvh của bạn và nó sẽ phân tích các phụ thuộc và thực hiện các cài đặt theo đúng thứ tự.

Ngoài việc cố gắng để xóa bỏ một gói đã cài đặt và nhận được một thông báo lỗi, lệnh rpm cung cấp một tùy chọn để điều tra các gói đã cài đặt hoặc các tập tin gói để tìm ra chúng phụ thuộc vào hoặc đòi hỏi các khả năng nào. Đây là tùy chọn --requires. có thể được viết tắt là -R. Liệt kê 45 cho thấy các khả năng mà guile-config đòi hỏi. Thêm tùy chọn -p và sử dụng tên tập tin RPM đầy đủ nếu bạn muốn truy vấn tập tin gói thay vì cơ sở dữ liệu RPM.

Liệt kê 45. guile-config đòi hỏi gì.
[ian@attic4 ~]$ rpm -qR guile-devel
/bin/sh
/usr/bin/guile
guile = 5:1.6.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

Ngoài ra, để tìm ra một gói yêu cầu các khả năng nào, bạn có thể tìm ra những gói nào đòi hỏi một khả năng đã cho (giống như đã làm khi bạn cố gắng gỡ bỏ một gói). Liệt kê 46 minh họa điều này cho hai trong số những khả năng mà guile-devel yêu cầu. Do kết quả đầu ra này có thể có trùng lặp, nên chúng tôi cũng chỉ ra cho bạn cách lọc kết quả đầu ra thông qua lệnh sortuniq để mỗi gói cần thiết được liệt kê chỉ một lần.

Liệt kê 46. Cái gì cần /usr/bin/guile và guile.
[ian@attic4 ~]$ rpm -q --whatrequires /usr/bin/guile guile
guile-devel-1.6.7-2
g-wrap-1.3.4-8
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -q --whatrequires /usr/bin/guile guile | sort|uniq
guile-devel-1.6.7-2
g-wrap-1.3.4-8

Tính toàn vẹn gói RPM.

Để đảm bảo tính toàn vẹn của các gói RPM, các gói sẽ bao gồm một mã MD5 hoặc SHA1 và chúng có thể được ký bằng số. Các gói được ký bằng số cần một khoá công khai để kiểm tra. Để kiểm tra tính toàn vẹn của một tập tin gói RPM, hãy sử dụng tùy chọn --checksig (viết tắt là -K) của lệnh rpm. Thông thường bạn sẽ thấy việc thêm tùy chọn -v để nhận được báo cáo đầy đủ hơn là rất có ích.

Liệt kê 47. Kiểm tra tính toàn vẹn của tập tin gói guile-devel.
[ian@attic4 ~]$ rpm --checksig guile-devel-1.6.7-2.i386.rpm
guile-devel-1.6.7-2.i386.rpm: (sha1) dsa sha1 md5 gpg OK
[ian@attic4 ~]$ rpm -Kv guile-devel-1.6.7-2.i386.rpm
guile-devel-1.6.7-2.i386.rpm:
    Header V3 DSA signature: OK, key ID 4f2a6fd2
    Header SHA1 digest: OK (b2c61217cef4a72a8d2eddb8db3e140e4e7607a1)
    MD5 digest: OK (cf47354f2513ba0c2d513329c52bf72a)
    V3 DSA signature: OK, key ID 4f2a6fd2

Bạn có thể nhận được một dòng kết quả giống như sau:

V3 DSA signature: NOKEY, key ID 16a61572

Điều này có nghĩa rằng bạn có một gói đã ký, nhưng bạn không có khóa công khai cần thiết trong cơ sở dữ liệu RPM của bạn. Lưu ý rằng các phiên bản RPM trước đó có thể trình bày kết quả kiểm tra khác đi.

Nếu một gói được ký và bạn muốn kiểm tra nó với một chữ ký, thì bạn sẽ cần phải xác định vị trí tập tin chữ ký phù hợp và nhập khẩu nó vào cơ sở dữ liệu RPM của bạn. Trước tiên bạn cần tải về khóa này và sau đó kiểm tra dấu vân tay của nó trước khi nhập khẩu bằng cách sử dụng lệnh rpm --import. Để biết thêm thông tin hãy xem các trang hướng dẫn sử dụng lệnh rpm. Bạn cũng sẽ tìm thấy nhiều thông tin hơn về các tập tin nhị phân đã ký tại www.rpm.org.

Kiểm tra một gói đã cài đặt

Tương tự như kiểm tra tính toàn vẹn của một tập tin rpm, bạn cũng có thể kiểm tra tính toàn vẹn của các tập tin đã cài đặt của bạn bằng cách sử dụng lệnh rpm -V. Bước này đảm bảo chắc chắn rằng các tập tin chưa bị thay đổi kể từ khi chúng đã được cài đặt từ tập tin rpm. Như hiển thị trong Liệt kê 49 không có kết quả đầu ra nào từ lệnh này nếu gói đó vẫn còn tốt.

Liệt kê 48. Kiểm tra gói guile-devel đã cài đặt.
[ian@attic4 ~]$ rpm -V guile-devel

Chúng ta hãy chuyển thành người dùng root và gỡ bỏ hoàn toàn thư mục /usr/bin/guile-config và thay thế /usr/bin/guile-snarf bằng một bản sao của /bin/bash và thử lại. Các kết quả được hiển thị trong Liệt kê 49.

Liệt kê 49. Can thiệp vào gói guile-devel.
[root@attic4 ~]# rm /usr/bin/guile-config
rm: remove regular file `/usr/bin/guile-config'? y
[root@attic4 ~]# cp /bin/bash /usr/bin/guile-snarf
cp: overwrite `/usr/bin/guile-snarf'? y
[root@attic4 ~]# rpm -V guile-devel
missing     /usr/bin/guile-config
S.5....T    /usr/bin/guile-snarf

Kết quả đầu ra này chỉ ra cho chúng ta thấy rằng /usr/bin/guile-snarf gặp lỗi các kiểm tra tổng MD5, độ lớn tập tin và mtime. Bạn có thể sửa chữa điều này bằng cách xóa các gói và cài đặt lại hoặc cài đặt cưỡng bức như chúng ta đã thấy ở trên. Chắc chắn có một thông báo lỗi nếu bạn gỡ bỏ gói này, vì một trong các tập tin của nó bây giờ đang thiếu.

Cấu hình gói RPM

RPM hiếm khi cần cấu hình. Trong các phiên bản lệnh rpm cũ hơn, bạn có thể thay đổi mọi thứ trong /etc/rpmrc để kiểm soát hoạt động thời gian chạy thi hành. Trong các phiên bản gần đây, tập tin này đã được chuyển đến /usr/lib/rpm/rpmrc, ở đó nó được tự động thay thế khi gói rpm được nâng cấp, vì thế làm mất đi bất kỳ các thay đổi nào mà bạn có thể đã thực hiện. Nếu cần thiết bất kỳ cấu hình nào riêng cho hệ thống thì nó vẫn có thể thêm vào /etc/rpmrc, trong khi cấu hình riêng cho mỗi người sử dụng sẽ thêm vào .rpmrc. trong thư mục nhà của người dùng. Bạn có thể tìm tài liệu hướng dẫn về định dạng của những tập tin này trong cuốn sách RPM tối đa (Maximum RPM) (xem Tài nguyên).

Nếu bạn muốn xem cấu hình rpmrc, thậm chí còn có một tùy chọn lệnh rpm cho điều đó. Hãy sử dụng lệnh:

rpm rpm --showrc

Các kho lưu trữ và các công cụ khác

Bây giờ bạn có thể đang tự hỏi tất cả các gói rpm đến từ đâu, bạn tìm thấy chúng như thế nào và bạn quản lý cập nhật hệ thống của bạn như thế nào. Nếu bạn có một bản phân phối dựa trên gói RPM, nhiều khả năng nhà phân phối của bạn sẽ duy trì một kho lưu trữ các gói. Nhà phân phối của bạn cũng có thể cung cấp một công cụ để cài đặt các gói từ kho lưu trữ hoặc cập nhật toàn bộ hệ thống của bạn. Những công cụ này có thể là đồ họa hoặc dòng lệnh hoặc cả hai. Có một số ví dụ sau:

  • YaST (SUSE).
  • up2date (Red Hat).
  • yum - Trình cập nhật Chó vàng đã cải biên (Yellow Dog Updater Modified) (Fedora và những hệ thống khác).
  • Quản lý phần mềm Mandrake (Mandriva)

Thông thường các công cụ này sẽ xử lý cập nhật nhiều gói theo cách tự động hoặc bán tự động. Chúng cũng có thể cung cấp các khả năng để hiển thị nội dung của các kho lưu trữ hoặc tìm kiếm các gói. Tham khảo tài liệu hướng dẫn cho bản phân phối của bạn để biết thêm chi tiết.

Nếu bạn không thể tìm thấy một gói RPM cụ thể thông qua các công cụ hệ thống của bạn, thì một nguồn tài nguyên tốt khác để định vị các gói RPM là máy chủ Rpmfind.Net (xem Tài nguyên).

Hướng dẫn tiếp theo trong loạt bài này trình bày Chủ đề 103 - Các lệnh GNU và Unix.

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Tải về đĩa CD-Rom cứu hộ hệ thống, một trong nhiều công cụ có sẵn trực tuyến để giúp bạn khôi phục một hệ thống sau khi một sự cố.
  • Duyệt qua SourceForge.net, một kho lưu trữ lớn các dự án mã nguồn mở cho nhiều nền tảng.
  • Tiến sĩ Geo, hình học tương tác là một dự án mã nguồn được sử dụng làm một ví dụ trong hướng dẫn này.
  • Truy cập vào Info-ZIP để có được các chương trình Zip và Unzip cho Linux và nền tảng khác.
  • Chương trình mặt ngoài quả cầu (Sphere Eversion Program) cho bạn thấy làm thế nào để lộn bên trong một quả cầu ra ngoài mà không rách hoặc làm nhầu nó. Kết quả trái với trực giác của chương trình này được mô tả trong một đoạn video được gọi là "Bên ngoài vào trong".
  • Nhận các gói Debian từ trang chủ Debian.
  • Xây dựng dự án phát triển tiếp theo của bạn trên Linux với phần mềm dùng thử của IBM, có sẵn để tải trực tiếp từ developerWorks.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=505376
ArticleTitle=Chuẩn bị kỳ thi LPI 101: Cài đặt Linux và quản lý gói phần mềm
publish-date=08082010