Chương 4. Nâng cấp từ bản phát hành trước

Mục lục

4.1. Chuẩn bị nâng cấp
4.1.1. Sao lưu bất kỳ dữ liệu hay thông tin cấu hình
4.1.2. Thông báo trước
4.1.3. Chuẩn bị phục hồi
4.1.4. Chuẩn bị môi trường an toàn để nâng cấp
4.2. Kiểm tra trạng thái hệ thống
4.2.1. Xem lại hành vi bị hoãn trong bộ quản lý gói
4.2.2. Tắt ghim phiên bản trong APT
4.2.3. Kiểm tra trạng thái gói
4.2.4. Phần proposed-updates
4.2.5. Nguồn không chính thức và bản chuyển ngược
4.3. Bỏ dấu trên gói bằng tay
4.4. Chuẩn bị nguồn cho APT
4.4.1. Thêm nguồn Internet APT
4.4.2. Thêm nguồn APT cho máy nhân bản cục bộ
4.4.3. Thêm nguồn APT từ đĩa CD/DVD
4.5. Nâng cấp gói
4.5.1. Thu phiên chạy
4.5.2. Cập nhật danh sách gói
4.5.3. Đảm bảo có đủ sức chứa để nâng cấp
4.5.4. Trước tiên nâng cấp aptitude và/hay apt
4.5.5. Sử dụng với apt danh sách các gói tự động cài đặt của aptitude
4.5.6. Nâng cấp hệ thống tối thiểu
4.5.7. Nâng cấp phần hệ thống còn lại
4.5.8. Vấn đề có thể gặp trong khi nâng cấp
4.6. Nâng cấp hạt nhân và các gói liên quan
4.6.1. Cài đặt siêu gói hạt nhân
4.6.2. Số thứ tự thiết bị khác
4.6.3. Vấn đề đặt thời gian khởi động
4.7. Việc cần làm trước khi khởi động lại
4.7.1. Chạy lại lilo
4.8. Tiến trình khởi động hệ thống bị treo ở Đang đợi hệ thống tập tin gốc
4.8.1. Cách tránh vấn đề này trong khi nâng cấp
4.8.2. Cách giải quyết vấn đề sau khi nâng cấp
4.9. Chuẩn bị cho bản phát hành kế tiếp
4.10. Gói quá cũ
4.10.1. Gói giả

4.1. Chuẩn bị nâng cấp

Trước khi nâng cấp, khuyên người dùng cũng đọc thông tin trong Chương 5, Vấn đề lenny cần ghi nhớ. Chương đó diễn tả các vấn đề có thể gặp mà không phải liên quan trực tiếp đến quá trình nâng cấp, nhưng vẫn còn có thể cần biết trước khi bắt đầu.

4.1.1. Sao lưu bất kỳ dữ liệu hay thông tin cấu hình

Trước khi nâng cấp hệ thống, rất khuyên người dùng tạo một bản sao lưu hoàn toàn, hoặc ít nhất sao lưu bất kỳ dữ liệu hay thông tin cấu hình không nên mất. Các công cụ và quá trình nâng cấp vẫn hơi tin cậy, nhưng một sự thất bại phần cứng ở giữa việc nâng cấp có thể gây ra một hệ thống rất bị hại.

Dữ liệu chính nên sao lưu là nội dung của thư mục /etc, /var/lib/dpkg, /var/lib/aptitude/pkgstates và kết xuất của câu lệnh dpkg --get-selections "*" (hai dấu nháy kép vẫn đáng kể).

Quá trình nâng cấp chính nó không sửa đổi gì trong thư mục /home (thư mục chính của mỗi người dùng). Tuy nhiên, một số ứng dụng nào đó (v.d. thuộc về bộ ứng dụng Mozilla, và môi trường GNOME and KDE) được biết là ghi đè lên thiết lập người dùng đã tồn tại bằng giá trị mặc định mới khi một phiên bản mới của ứng dụng được khởi chạy đầu tiên bởi một người dùng. Để phòng ngừa, khuyên người dùng sao lưu các tập tin và thư mục bị ẩn (“tập tin chấm”) trong thư mục chính của mỗi người dùng. Bản sao lưu này có thể giúp phục hồi hoặc tạo lại thiết lập cũ. Quản trị cũng có thể muốn cho các người dùng biết về trường hợp này.

Mỗi thao tác cài đặt gói phải được chạy với quyền siêu người dùng: có nên đăng nhập dưới root (người chủ) hoặc sử dụng lệnh su hay sudo để lấy được quyền truy cập cần thiết.

Việc nâng cấp có một số điều kiện tiên quyết: người dùng nên kiểm tra trước khi thật thực hiện tiến trình nâng cấp.

4.1.1.1. Kiểm tra lại hạt nhân thích hợp

Phiên bản lenny của glibc không hoạt động được với hạt nhân cũ hơn 2.6.8 trên bất cứ kiến trúc nào, và một số kiến trúc nào đó có nhiều nhu cầu hơn. Rất khuyên quản trị nâng cấp lên và thử một hạt nhân etch phiên bản 2.6.18 hay 2.6.24, hoặc một hạt nhân riêng ít nhất phiên bản 2.6.18 trước khi khởi chạy tiến trình nâng cấp.

4.1.2. Thông báo trước

Khuyên quản trị thông báo trước cho mọi người dùng biết về bất kỳ quá trình nâng cấp dự định, dù người dùng đang truy cập đến hệ thống thông qua một kết nối ssh nên thấy ít trong khi nâng cấp, và nên có thể tiếp tục làm việc.

Muốn thực hiện thêm bước phòng ngừa thì sao lưu hoặc tháo gắn kết phân vùng /home) trước khi nâng cấp.

Nâng cấp lên lenny thì rất có thể là cũng cần phải nâng cấp hạt nhân, do đó cần phải khởi động lại hệ thống (bình thường sau khi nâng cấp xong).

4.1.3. Chuẩn bị phục hồi

Do rất nhiều thay đổi trong hạt nhân (so etch với lenny) đối với trình điều khiển, phát hiện phần cứng và đặt tên và sắp đặt các tập tin thiết bị, thật sự rủi ro là người dùng có thể gặp khó khăn trong việc khởi động lại hệ thống sau khi nâng cấp. Rất nhiều vấn đề có thể gặp đã được diễn tả trong chương này, và những chương kế tiếp của Ghi chú Phát hành này.

Vì lý do đó hợp lý là người dùng hay quản trị đảm bảo có thể phục hồi nếu hệ thống không khởi động lại được hoặc, đối với hệ thống quản lý từ xa, không chạy mạng được.

Nếu quản trị nâng cấp từ xa qua một liên kết ssh, rất khuyên quản trị cũng thực hiện những bước phòng ngừa cần thiết để có khả năng truy cập đến máy phục vụ qua một thiết bị nối tiếp từ xa. Vẫn có thể là, sau khi nâng cấp hạt nhân và khởi động lại hệ thống, một số thiết bị sẽ bị thay tên (như diễn tả trong Phần 4.6.2, “Số thứ tự thiết bị khác”) thì quản trị cần phải sửa chữa cấu hình hệ thống thông qua một bàn giao tiếp cục bộ. Hơn nữa, nếu hệ thống bị tình nguyện cờ khởi động lại ở giữa quá trình nâng cấp, quản trị có thể cần phải phục hồi dùng một bàn giao tiếp cục bộ.

Cái hiển nhiện nhất để thử đầu tiên để khởi động lại bằng hạt nhân cũ. Tuy nhiên, vì các lý do khác nhau diễn tả ở nơi khác của tài liệu này, sự thử này không phải đảm bảo thành công.

Nếu nó không thành công, quản trị cần một phương pháp khác để khởi động hệ thống để truy cập và sửa chữa nó. Một lựa chọn là sử dụng một ảnh cứu đặc biệt hay một đĩa CD Linux Động. Sau khi khởi động từ đó, quản trị nên có khả năng gắn kết hệ thống tập tin gốc và chroot vào nó để xem xét và sửa chữa vấn đề.

Một lựa chọn khác có thể khuyến khích là sử dụng chế độ cứu của Bộ Cài Đặt Debian lenny. Lợi ích khi sử dụng bộ cài đặt là người dùng có thể chọn trong nhiều phương pháp cài đặt khác nhau một phương pháp riêng lẻ thích hợp nhất với trường hợp đó. Để tìm thêm thông tin, xem phần “Phục hồi một hệ thống bị hỏng” trong Chương 8 của Sổ tay Cài đặt (dịch sang tiếng Việt) vàHỏi Đáp Cài đặt Debian.

4.1.3.1. Trình bao gỡ lỗi trong khi khởi động dùng initrd

Công cụ initramfs-tools bao gồm một trình bao gỡ lỗi[2] trong mỗi initrd nó tạo. Nếu (ví dụ) initrd không thể gắn kết hệ thống tập tin gốc, nó sẽ mở trình bao gỡ lỗi này mà có sẵn các lệnh cơ bản để tìm vết của vấn đề và (có thể) sửa chữa nó.

Các cái cơ bản cần kiểm tra: có những tập tin thiết bị đúng trong thư mục /dev; những mô-đun nào được nạp (cat /proc/modules); kết xuất của lệnh dmesg về lỗi nạp trình điều khiển. Kết xuất của dmesg cũng hiển thị tập tin thiết bị nào được gán cho đĩa nào; quản trị cũng nên so thông tin đó với kết xuất của câu lệnh echo $ROOT để kiểm tra hệ thống tập tin gốc nằm trên thiết bị mong đợi.

Nếu quản trị có phải sửa chữa được vấn đề, việc gõ lệnh thoát exit sẽ thoát khỏi trình bao gỡ lỗi và tiếp tục lại tiến trình khởi động ở điểm thời nó thất bại trước. Tất nhiên, quản trị cũng cần phải sửa chữa vấn đề cơ sở và tạo lại initrd để mà khởi động được về sau.

4.1.4. Chuẩn bị môi trường an toàn để nâng cấp

Việc nâng cấp bản phân phối nên được làm hoặc cục bộ từ một bàn giao tiếp ảo chế độ văn bản (hay một thiết bị cuối nối tiếp được kết nối trực tiếp), hoặc từ xa thông qua một liên kết ssh.

Để tăng hệ số an toàn khi nâng cấp từ xa, khuyên quản trị chạy tiến trình nâng cấp trên bàn giao tiếp ảo được chương trình screen cung cấp, mà hiệu lực chức năng tái kết nối an toàn và đảm bảo tiến trình nâng cấp không phải bị gián đoạn thậm chí nếu quá trình kết nối từ xa không thành công.

[Quan trọng]Quan trọng

Không nên nâng cấp dùng telnet, rlogin, rsh, hay một buổi hợp đăng nhập X được quản lý bởi xdm, gdm, kdm v.v. trên máy đang nâng cấp. Đó là vì mỗi dịch vụ như vậy sẽ bị chấm dứt trong quá trình nâng cấp, mà có thể gây ra một hệ thống không thể tới được mà chưa được nâng cấp hoàn toàn.

4.2. Kiểm tra trạng thái hệ thống

Quá trình nâng cấp diễn tả trong chương này đã được thiết kế cho việc nâng cấp từ hệ thống etch « thuần »: hệ thống không chứa gói thuộc nhóm ba. Để nâng cấp một cách tin cậy nhất, quản trị cũng có thể gỡ bỏ các gói nhóm ba khỏi hệ thống trước khi bắt đầu nâng cấp.

Thủ tục này cũng giả sử hệ thống đã được cập nhật lên bản phát hành điểm mới nhất của etch. Không hay chưa chắc thì quản trị nên theo những hướng dẫn trong Phần A.1, “Nâng cấp hệ thống etch”.

4.2.1. Xem lại hành vi bị hoãn trong bộ quản lý gói

Trong một số trường hợp nào đó, sử dụng apt-get thay cho aptitude để cài đặt gói có thể làm cho aptitude thấy một gói nào đó là “chưa dùng” và định thời nó bị gỡ bỏ. Thông thường, quản trị nên kiểm tra hệ thống vẫn “sạch” và được cập nhật hoàn toàn trước khi tiếp tục nâng cấp.

Do đó, quản trị nên kiểm tra có hành vi bị hoãn trong bộ quản lý gói aptitude. Vẫn có một gói định thời gỡ bỏ hay cập nhật trong bộ quản lý gói thì nó có thể ảnh hưởng âm đến quá trình nâng cấp. Ghi chú rằng chỉ có thể sửa chữa trường hợp này nếu tập tin liệt kê các nguồn sources.list vẫn còn chỉ tới etch;, không phải tới bản ổn định (stable) hay lenny; xem Phần A.2, “Kiểm tra danh sách nguồn”.

Để thực hiện thủ tục xem lại này, hãy khởi chạy aptitude trong “chế độ trực quan” và bấm phím g (“Đi”). Nếu nó hiển thị hành vi nào, quản trị nên xem lại và sửa chữa hoặc thực hiện chúng. Không có hành vi đề xuất thì chương trình hiển thị một thông điệp: “Không có gói nào được định cài đặt, gỡ bỏ hoặc nâng cấp”.

4.2.2. Tắt ghim phiên bản trong APT

Nếu người dùng đã cấu hình APT để cài đặt một số gói nào đó từ một bản phát hành khác với bản ổn định (stable), v.d. từ bản thử (testing), thì có lẽ người dùng cần phải sửa đổi cấu hình ghim phiên bản trong APT (cất giữ trong /etc/apt/preferences) để cho phép nâng cấp gói lên phiên bản trong bản phát hành ổn định mới. Có thể tìm thêm thông tin về chức năng ghim phiên bản APT trong apt_preferences(5).

4.2.3. Kiểm tra trạng thái gói

Bất chấp phương pháp dùng để nâng cấp, khuyên người dùng trước tiên kiểm tra trạng thái về tất cả các gói, và thẩm tra mọi gói đều có tình trạng có thể nâng cấp. Theo đây có câu lệnh sẽ hiển thị gói nào có trạng thái « Nửa cài đặt » hay « Lỗi cấu hình » hay bất cứ trạng thái lỗi nào.

# dpkg --audit

Cũng có thể kiểm tra trạng thái về tất cả các gói trên hệ thống dùng dselect, aptitude, hay câu lệnh như

# dpkg -l | pager

hay

# dpkg --get-selections "*" > ~/curr-pkgs.txt

Có nên gỡ bỏ bất kỳ tình trạng giữ lại trước khi nâng cấp. Nếu gói nào chủ yếu để nâng cấp vẫn còn bị giữ lại, thì việc nâng cấp sẽ không thành công.

Ghi chú rằng aptitude sử dụng một phương pháp khác để đăng ký các gói bị giữ lại, so với apt-getdselect. Người dùng có thể tìm những gói bị giữ lại trong aptitude dùng câu lệnh

# aptitude search "~ahold" | grep "^.h"

Muốn kiểm tra những gói nào bị giữ lại trong apt-get thì dùng câu lệnh

# dpkg --get-selections | grep hold

Nếu người dùng đã sửa đổi và biên dịch lại gói nào một cách cục bộ, vẫn không thay đổi tên nó hoặc đặt thời điểm vào phiên bản, người dùng phải đặt tình trạng giữ lại cho nó, để ngăn cản nó được nâng cấp.

Trong aptitude, tình trạng gói “giữ lại” có thể được thay đổi dùng câu lệnh

# aptitude hold tên_gói

Thay thế từ hold (giữ lại) bằng unhold (bỏ giữ) để bỏ đặt tình trạng “giữ lại”.

Vẫn có gì cần sửa chữa thì người dùng nên kiểm tra tập tin sources.list vẫn còn tham chiếu đến etch như diễn tả trong Phần A.2, “Kiểm tra danh sách nguồn”.

4.2.4. Phần proposed-updates

Nếu tập tin /etc/apt/sources.list chứa phần proposed-updates, người dùng nên gỡ bỏ tập tin này trước khi thử nâng cấp hệ thống. Đây là một bước phòng ngừa để giảm sự có thể bị xung đột.

4.2.5. Nguồn không chính thức và bản chuyển ngược

Nếu hệ thống chứa gói nào khác Debian, ghi chú rằng các gói như vậy có thể bị gỡ bỏ trong quá trình nâng cấp, do quan hệ phụ thuộc bị xung đột. Nếu những gói này đã được cài đặt bằng cách thêm một kho gói bổ sung vào tập tin /etc/apt/sources.list, người dùng nên kiểm tra nếu kho gói đó cũng cung cấp các gói được biên dịch cho lenny, và sửa đổi dòng nguồn một cách tương ứng, cùng lúc với sửa đổi các dòng nguồn về gói Debian.

Hệ thống etch có lẽ cũng chứa phiên bản “mới” chuyển ngược không chính thức của gói có phải thuộc về Debian. Gói như vậy rất có thể gây ra vấn đề trong quá trình nâng cấp, vì kết quả là hai tập tin bị xung đột nhau[3]. Phần 4.5.8, “Vấn đề có thể gặp trong khi nâng cấp” có vài thông tin về cách giải quyết hai tập tin bị xung đột (nếu trường hợp này xảy ra).

4.2.5.1. Dùng gói backports.org

backports.org là một kho gói bán chính thức duy trì bởi các nhà phát triển Debian GNU/Linux, mà cung cấp các gói mới cho bản phát hành ổn định (stable), dựa vào xây dựng lại các gói từ kho gói “thử” (testing).

Kho backports.org chứa chính các gói từ bản “thử” (testing) mà vẫn có số thứ tự phiên bản bị giảm, để bảo vệ đường dẫn nâng cấp từ bản chuyển ngược etch lên lenny. Tuy nhiên, có chỉ vài gói chuyển ngược được tạo từ bản “bất định” (unstable): các bản cập nhật bảo mật và những ngoại lệ Firefox, hạt nhân Linux, OpenOffice.org và X.Org.

If you do not use one of these exceptions, you can safely upgrade to lenny. If you use one of these exceptions, set the Pin-Priority (see apt_preferences(5)) temporarily to 1001 for all packages from lenny, and you should be able to do a safe dist-upgrade too.

4.3. Bỏ dấu trên gói bằng tay

Để ngăn cản aptitude gỡ bỏ một số gói nào đó mà được lấy do quan hệ phụ thuộc, người dùng cần phải tự bỏ dấu tự động khỏi mỗi gói. Trong bản cài đặt môi trường đồ họa, trường hợp này bao gồm OpenOffice và Vim:

# aptitude unmarkauto openoffice.org vim

Và các ảnh hạt nhân 2.6 được cài đặt dùng một siêu gói hạt nhân:

# aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6.*' | cut -f1)
[Ghi chú]Ghi chú

Cũng có thể xem lại những gói đánh dấu tự động trong aptitude bằng cách chạy câu lệnh:

# aptitude search '~i~M'

4.4. Chuẩn bị nguồn cho APT

Trước khi khởi chạy tiến trình nâng cấp, người dùng cần phải thiết lập tập tin cấu hình apt về danh sách các gói: /etc/apt/sources.list.

apt sẽ xem xét mọi gói được tìm thông qua một dòng “deb”, và cài đặt gói có số thứ tự phiên bản cao nhất, cũng gán quyền ưu tiên cho dòng đầu của tập tin (do đó khi có nhiều địa chỉ máy nhân ban, bình thường đặt tên một đĩa cứng cục bộ, sau đó các đĩa CD-ROM, và các máy nhân bản HTTP/FTP).

[Mẹo]Mẹo

Có lẽ người dùng cần thêm một ngoại lệ kiểm tra GPG cho các đĩaDVDCD-ROM. Thêm vào tập tin cấu hình /etc/apt/apt.conf dòng theo đây (nếu nó chưa nằm trong /etc/apt/apt.conf.d/00trustcdrom):

APT::Authentication::TrustCDROM "true";

Tuy nhiên, dòng này không phù hợp với tập tin ảnh đĩa DVD/CD-ROM.

Mỗi bản phát hành có một tên mã (v.d. etch, lenny) và một tên trạng thái (tức là oldstable [ổn định cũ], stable [ổn định], testing [thử], unstable [bất định]). Tham chiếu đến một bản phát hành theo tên mã có lợi ích là dễ phân biệt các bản phát hành khác nhau. Người dùng có thể theo dõi các thông báo phát hành tìm tên mã mới và tự cập nhật hệ thống. Tuy nhiên, người dùng phân biệt theo tên trạng thái sẽ thấy rất nhiều bản cập nhật gói ngay khi bản mới được phát hành.

4.4.1. Thêm nguồn Internet APT

Cấu hình mặc định được thiết lập để cài đặt từ các máy phục vụ Debian chính, nhưng người dùng cũng có thể sửa đổi tập tin /etc/apt/sources.list để sử dụng máy nhân bản khác, tốt hơn một máy nhân bản gần chỗ người dùng trên mạng.

Có thể tìm các địa chỉ máy nhân bản HTTP/FTP Debian ở http://www.debian.org/distrib/ftplist (xem phần “list of Debian mirrors” [danh sách các máy nhân bản Debian]). Máy nhân bản HTTP thường chạy nhanh hơn máy nhân bản FTP.

Ví dụ, giả sử máy nhân bản Debian gần nhất là http://mirrors.kernel.org. Khi xem xét nó dùng trình duyệt Web hay một chương trình FTP, người dùng sẽ thấy những thư mục chính được sắp đặt như thế:

http://mirrors.kernel.org/debian/dists/lenny/main/binary-ia64/...
http://mirrors.kernel.org/debian/dists/lenny/contrib/binary-ia64/...

Để sử dụng máy nhân bản này với apt, người dùng nên thêm vào tập tin sources.list dòng này:

deb http://mirrors.kernel.org/debian lenny main contrib

Ghi chú rằng đoạn « dists » được thêm ngầm, và các đối số đằng sau tên bản phát hành được dùng để mở rộng đường dẫn ra nhiều thư mục.

Sau khi thêm các nguồn mới, hãy tắt mỗi dòng “deb” đã tồn tại trong sources.list bằng cách ghi một dấu thăng (#) vào trước.

4.4.2. Thêm nguồn APT cho máy nhân bản cục bộ

Thay vào sử dụng máy nhân bản HTTP/FTP, người dùng cũng có thể sửa đổi tập tin /etc/apt/sources.list để sử dụng kho nhân bản trên một đĩa cục bộ (có thể gắn kết thông qua NFS).

Ví dụ, kho nhân bản gói có thể nằm dưới /var/ftp/debian/, với các thư mục chính:

/var/ftp/debian/dists/lenny/main/binary-ia64/...
/var/ftp/debian/dists/lenny/contrib/binary-ia64/...

Để sử dụng kho cục bộ này với apt, hãy thêm vào tập tin sources.list dòng này:

deb file:/var/ftp/debian lenny main contrib

Ghi chú rằng đoạn « dists » được thêm ngầm, và các đối số đằng sau tên bản phát hành được dùng để mở rộng đường dẫn ra nhiều thư mục.

Sau khi thêm các nguồn mới, hãy tắt mỗi dòng “deb” đã tồn tại trong sources.list bằng cách ghi một dấu thăng (#) vào trước.

4.4.3. Thêm nguồn APT từ đĩa CD/DVD

Nếu người dùng chỉ muốn sử dụng các đĩa CD, hãy ghi chú tắt (đặt # vào trước) những dòng “deb” đã tồn tại trong tập tin /etc/apt/sources.list.

Kiểm tra tập tin /etc/fstab chứa một dòng hiệu lực gắn kết ổ đĩa CD ở điểm lắp /cdrom (điểm lắp /cdrom chính xác cần thiết cho apt-cdrom). Ví dụ, nếu /dev/hdc là ổ đĩa CD, /etc/fstab nên chứa một dòng như thế:

/dev/hdc /cdrom auto defaults,noauto,ro 0 0

Ghi chú rằng không cho phép khoảng cách nằm giữa các từ defaults,noauto,ro trong trường thứ tư.

Để thẩm tra chức năng, nạp một đĩa CD và thử chạy:

# mount /cdrom    # câu lệnh này gắn kết đĩa CD tới điểm lắp
# ls -alF /cdrom  # câu lệnh này nên hiển thị thư mục gốc của đĩa CD
# umount /cdrom   # câu lệnh này sẽ tháo gắn kết đĩa CD

Sau đó thì chạy:

# apt-cdrom add

cho mỗi đĩa CD nhị phân Debian, để thêm dữ liệu về mỗi đĩa CD vào co sở dữ liệu của APT.

4.5. Nâng cấp gói

Phương pháp khuyến khích để nâng cấp từ một bản phát hành Debian GNU/Linux trước là sử dụng công cụ quản lý gói aptitude. Chương trình này cài đặt gói một cách an toàn chạy trực tiếp apt-get.

Đừng quên gắn kết tất cả các phân vùng cần thiết (đặc biệt phiên bản gốc và /usr) với quyền đọc-ghi, dùng một câu lệnh như :

# mount -o remount,rw /điểm_lắp

Sau đó thì người dùng nên kiểm tra những mục nhập nguồn APT (trong /etc/apt/sources.list) tham chiếu đến hoặc “lenny” hoặc “stable”. Không nên có nguồn nào vẫn còn chỉ tới etch.

[Ghi chú]Ghi chú

Dòng nguồn cho một đĩa CD thường tham chiếu đến “unstable”; dù trường hợp này có thể xuất hiện lộn xộn, không nên sửa đổi nó.

4.5.1. Thu phiên chạy

Rất khuyên người dùng sử dụng chương trình /usr/bin/script để thu một bản sao của phiên chạy nâng cấp. Như thế, nếu một vấn đề xảy ra, có một bản sao mọi hành vi, và nếu cần, người dùng có thể cung cấp thông tin chính xác trong một báo cáo lỗi hay báo cáo nâng cấp. Để bắt đầu thu, hãy gõ câu lệnh:

# script -t 2>~/upgrade-lenny.time -a ~/upgrade-lenny.script

hay tương tự. Đừng để bản sao vào một thư mục tạm thời như /tmp hay /var/tmp (các tập tin trong hai thư mục này có thể bị xoá trong khi nâng cấp hoặc khi nào khởi động lại).

Bản sao này cũng cho phép xem lại thông tin đã cuộn qua màn hình. Chỉ chuyển đổi sang VT2 (dùng tổ hợp phím Alt+F2) và, sau khi đăng nhập, dùng câu lệnh less -R ~root/upgrade-lenny.script để xem tập tin đó.

Sau khi nâng cấp xong, người dùng có thể dừng chạy script bằng cách gõ lệnh thoát exit vào dấu nhắc.

Có đặt cờ -t trong câu lệnh script nói trên thì người dùng cũng có thể sử dụng chương trìnhscriptreplay để phát lại toàn bộ phiên chạy.

# scriptreplay ~/upgrade-lenny.time ~/upgrade-lenny.script

4.5.2. Cập nhật danh sách gói

Trước tiên nên lấy danh sách các gói sẵn sàng cho bản phát hành mới. Việc này được làm bằng cách chạy câu lệnh cập nhật:

# aptitude update

Việc chạy câu lệnh này lần đầu tiên cập nhật các nguồn mới sẽ in ra một số cảnh báo liên quan đến tính sẵn sàng của các nguồn. Những cảnh báo này vô hại và chỉ xuất hiện một lần.

4.5.3. Đảm bảo có đủ sức chứa để nâng cấp

Trước khi nâng cấp hệ thống, người dùng cần phải kiểm tra có đủ sức chứa còn lại trên đĩa cứng, đặc biệt khi khởi chạy tiến trình nâng cấp hệ thống đầy đủ diễn tả trong Phần 4.5.7, “Nâng cấp phần hệ thống còn lại”. Trước tiên, bất cứ gói nào cần cài đặt được lấy từ mạng và cất giữ trong thư mục /var/cache/apt/archives (cũng trong thư mục con partial/ trong khi tải về), do đó người dùng cần phải kiểm tra có đủ sức chứa còn lại trên phân vùng đó (phân vùng hệ thống tập tin chứa /var) để tải về tạm thời tất cả các gói cần cài đặt vào hệ thống. Sau khi tải về, rất có thể là cần thêm sức chứa trống trong các phiên bản hệ thống tập tin khác để cài đặt cả hai các gói đã nâng cấp (mà có thể chứa các tập tin nhị phân lớn hơn hay dữ liệu bổ sung) và các gói mới được lấy cho quá trình nâng cấp. Nếu hệ thống không có đủ sức chứa trống, kết quả có thể là một quá trình nâng cấp chưa xong, một trường hợp có thể khó phục hồi.

Cả hai aptitudeapt sẽ hiển thị thông tin chi tiết về sức chứa trống trên đĩa mà cần thiết để cài đặt. Trước khi khởi chạy tiến trình nâng cấp, người dùng có thể thấy sự ước lượng này bằng cách chạy câu lệnh:

# aptitude -y -s -f --with-recommends dist-upgrade
[ ... ]
XXX gói được nâng cấp, XXX mới được cài đặt, XXX cần gỡ bỏ và XXX không được nâng cấp.
Cần phải lấy xx.xMB/yyyMB kho. Sau khi giải nén AAAMB sẽ được chiếm.
Nên tải về / cài đặt/ gỡ bỏ các gói.
[Ghi chú]Ghi chú

Việc chạy câu lệnh này ở đầu của quá trình nâng cấp cũng có thể xuất một lỗi, vì lý do diễn tả trong các phần kế tiếp. Trong trường hợp đó, người dùng cần phải đợi đến khi hoàn tất quá trình nâng cấp hệ thống tối thiểu (xem Phần 4.5.6, “Nâng cấp hệ thống tối thiểu”) và hoàn tất nâng cấp hạt nhân trước khi chạy lại câu lệnh này để ước lượng sức chứa còn trống trên đĩa.

Không có đủ sức chứa để nâng cấp thì trước tiên người dùng phải giải phóng thêm sức chứa. Ví dụ :

  • Gỡ bỏ các gói được tải về trước đây để cài đặt (trong thư mục /var/cache/apt/archives). Làm sạch vùng nhớ tạm gói bằng cách chạy câu lệnh apt-get clean hay aptitude clean để gỡ bỏ tất cả các tập tin gói đã tải về trước.

  • Gỡ bỏ các gọi bị quên. Nếu người dùng đã cài đặt gói popularity-contest, cũng có thể sử dụng popcon-largest-unused để liệt kê những gói không dùng mà chiếm sức chứa nhiều nhất. Cũng có thể sử dụng deborphan hay debfoster để tìm các gói quá cũ (xem Phần 4.10, “Gói quá cũ” ). Hoặc người dùng có thể khởi chạy aptitude trong “chế độ trực quan” và tìm các gói quá cũ dưới tiêu đề “Gói cũ và tạo cục bộ”.

  • Gỡ bỏ các gói chiếm quá nhiều sức chứa mà hiện thời không phải cần thiết (lúc nào cũng có thể phục hồi sau khi nâng cấp). Người dùng có thể liệt kê những gói chiếm nhiều sức chứa nhất trên đĩa, dùng dpigs (sẵn sàng trong gói debian-goodies) hay wajig (chạy câu lệnh wajig size).

    You can list packages that take up most of the disk space with aptitude. Start aptitude into “visual mode”, select ViewsNew Flat Package List (this menu entry is available only after etch version), press l and enter ~i, press S and enter ~installsize, then it will give you nice list to work with. Doing this after upgrading aptitude should give you access to this new feature.

  • Gỡ bỏ khỏi hệ thống các bản dịch và tập tin địa hoá mà không cần thiết. Người dùng có thể cài đặt gói localepurge và cấu hình nó để giữ trong hệ thống chỉ một số miền địa phương đã chọn (v.d. tiếng Việt, tiếng Anh và tiếng Nga). Thủ tục này sẽ giảm sức chứa trên đĩa được chiếm ở /usr/share/locale.

  • Tạm thời di chuyển sang một hệ thống khác, hoặc gỡ bỏ hẳn, các bản ghi hệ thống nằm dưới /var/log/.

  • Dùng một thư mục /var/cache/apt/archives tạm thời: có thể đặt một thư mục nhớ tạm mà tạm thời, từ một hệ thống khác (vật chứa USB, đĩa cứng tạm thời, hệ thống đang được dùng v.v.).

    [Ghi chú]Ghi chú

    Không nên dùng một sự gắn kết NFS vì kết nối qua mạng có thể bị gián đoạn trong quá trình nâng cấp.

    Ví dụ, nếu có một ổ đĩa USB được gắn kết đến /media/usbkey:

    1. gỡ bỏ các gói đã tải về trước đây để cài đặt:

      # apt-get clean

    2. sao chép thư mục /var/cache/apt/archives sang vật chứa USB:

      # cp -ax /var/cache/apt/archives /media/usbkey/

    3. gắn kết thư mục nhớ tạm vẫn tạm thời đến thư mục hiện thời:

      # mount --bind /media/usbkey/archives /var/cache/apt/archives

    4. sau khi nâng cấp thì phục hồi thư mục /var/cache/apt/archives gốc:

      # umount /media/usbkey/archives

    5. gỡ bỏ /media/usbkey/archives còn lại.

    Người dùng có thể tạo thư mục nhớ tạm vẫn tạm thời trên hệ thống tập tin nào được gắn kết trên hệ thống.

Ghi chú rằng để gỡ bỏ gói một cách an toàn, khuyên người dùng chuyển đổi tập tinsources.list về etch như diễn tả trong Phần A.2, “Kiểm tra danh sách nguồn”.

4.5.4. Trước tiên nâng cấp aptitude và/hay apt

Several bug reports have shown that the versions of the aptitude and apt packages in etch are often unable to handle the upgrade to lenny. In lenny, apt is better at dealing with complex chains of packages requiring immediate configuration and aptitude is smarter at searching for solutions to satisfy the dependencies. These two features are heavily involved during the dist-upgrade to lenny, so it is necessary to upgrade these two packages before upgrading anything else.

The following command will upgrade both aptitude and apt:

# aptitude install aptitude apt dpkg

This step will also automatically upgrade libc6 and locales. At this point, some running services will be restarted, including xdm, gdm and kdm. As a consequence, local X11 sessions might be disconnected.

[Ghi chú]Upgrading with apt

Please note that using apt-get is not recommended for the upgrade from etch to lenny. If you do not have aptitude installed you are recommended to install it first.

If you want to perform the upgrade with apt or if the upgrade with aptitude failed and you want to try the upgrade with apt' dependency chain resolution algorithm, you should run:

# apt-get install apt

Note that you will have to adapt other aptitude commands to use apt-get instead.

4.5.5. Sử dụng với apt danh sách các gói tự động cài đặt của aptitude

Phần mềm aptitude bảo tồn một danh sách các gói đã được tự động cài đặt (v.d. do quan hệ phụ thuộc với một gói khác). Trong lenny, apt cũng có tính năng này.

Lần đầu tiên chạy phiên bản lenny của aptitude thì nó đọc danh sách các gói tự động cài đặt, và chuyển đổi nó để sử dụng với phiên bản lenny của apt. Người dùng đã cài đặt aptitude về trước thì cần phải chạy ít nhất một câu lệnh aptitude để sơ khởi quá trình chuyển đổi này. Thí dụ, tìm kiếm một gói không tồn tại:

# aptitude search "?false"

4.5.6. Nâng cấp hệ thống tối thiểu

Do một số sự xung đột gói giữa etch và lenny, việc chạy câu lệnh aptitude dist-upgrade một cách trực tiếp sẽ thường gỡ bỏ rất nhiều gói mà người dùng muốn giữ. Vì lý do đó, khuyên người dùng chạy một quá trình nâng cấp có hai phần riêng: trước tiên một việc nâng cấp tối thiểu để giải quyết trường hợp xung đột, và sau đó một việc dist-upgrade đầy đủ.

Trước tiên, chạy câu lệnh:

# aptitude safe-upgrade

Kết quả là nâng cấp những gói có thể nâng cấp được mà không cần gỡ bỏ hay cài đặt gói khác nào.

Bước kế tiếp vẫn biến đổi phụ thuộc vào tập hợp gói được cài đặt hiện thời. Ghi chú Phát hành này chỉ có thể cung cấp lời khuyên chung về phương pháp nên dùng, nhưng nếu chưa chắc, rất khuyên người dùng xem lại danh sách các gói nên gỡ bỏ tùy theo mỗi phương pháp, trước khi tiếp tục.

Phương pháp này có thể gỡ bỏ một số gói thường dùng, bao gồm base-config, hotplug, xlibs, netkit-inetd, python2.3, xfree86-commonxserver-common. Để tìm thêm thông tin về những gói đã lỗi thời trong lenny, xem Phần 4.10, “Gói quá cũ”.

4.5.7. Nâng cấp phần hệ thống còn lại

Sau đó thì có thể tiếp tục phần chính của quá trình nâng cấp. Chạy câu lệnh:

# aptitude dist-upgrade

Câu lệnh này sẽ nâng cấp hoàn toàn hệ thống, tức là cài đặt phiên bản mới nhất của mọi gói sẵn sàng, và giải quyết mọi quan hệ phụ thuộc có thể biến đổi trong bản phát hành khác nhau. Nếu cần thiết, nó sẽ cài đặt một số gói mới (thường là phiên bản thư viện mới, hay gói bị thay tên), và gỡ bỏ gói quá cũ nào bị xung đột.

Khi nâng cấp từ một bộ đĩa CD/DVD, người dùng sẽ được nhắc nạp một đĩa nào đó ở vài điểm thời trong quá trình nâng cấp. Có lẽ cần phải nạp nhiều lần cùng một đĩa, do các gói liên quan đến nhau mà được chia ra các đĩa khác nhau.

Gói được cài đặt hiện thời mà không thể nâng cấp mà không thay đổi trạng thái cài đặt của một gói khác, sẽ còn lại ở phiên bản hiện thời (đánh dấu là “giữ lại”). Vẫn còn có thể cài đặt phiên bản mới bằng cách sử dụng aptitude để tự chọn những gói phiên bản mới, hoặc bằng cách thử chạy câu lệnh aptitude -f install tên_gói để cài đặt mỗi gói phiên bản mới.

4.5.8. Vấn đề có thể gặp trong khi nâng cấp

Nếu một thao tác dùng aptitude, apt-get hay dpkg không thành công và xuất lỗi

E: Hết chỗ tạo sơ đồ bộ nhớ động (Dynamic MMap)

thì không đủ sức chứa nhớ tạm mặc định. Quản trị có thể giải quyết vấn đề này bằng cách gỡ bỏ hay tắt ghi chú các dòng không cần thiết trong tập tin /etc/apt/sources.list, hoặc tăng kích cỡ vùng nhớ tạm (đặt APT::Cache-Limit trong tập tin cấu hình /etc/apt/apt.conf. Câu lệnh theo đây sẽ đặt một giá trị nên đủ để nâng cấp:

# echo 'APT::Cache-Limit "12500000";' >> /etc/apt/apt.conf

Câu lệnh này giả sử chưa đặt biến này trong tập tin đó.

Đôi khi cần phải hiệu lực tùy chọn APT::Force-LoopBreak trong APT để có khả năng tạm thời gỡ bỏ một gói chủ yếu do một vòng lặp Xung đột/Phụ thuộc trước. aptitude sẽ thông báo về vòng lặp này và hủy bỏ quá trình nâng cấp. Vẫn còn có thể giải quyết vấn đề này bằng cách xác định tùy chọn -o APT::Force-LoopBreak=1 trên dòng lệnh aptitude.

Một trường hợp ít xảy ra là hệ thống có cấu trúc quan hệ phụ thuộc quá bị hỏng mà cần quản trị tự can thiệp. Có thể sử dụng aptitude hoặc

# dpkg --remove tên_gói

để loại trừ một số gói phạm lỗi, hoặc

# aptitude -f install
# dpkg --configure --pending

Trong trường hợp rất khó, bạn có thể cần phải ép buộc cài đặt lại, dùng một câu lệnh như

# dpkg --install /đường/dẫn/tới/tên_gói.deb

Trường hợp tập tin bị xung đột không nên xảy ra khi nâng cấp từ một hệ thống etch “thuần”, nhưng vẫn còn có thể xảy ra nếu hệ thống chứa bản chuyển ngược không chính thức. Sự xung đột giữa các tập tin sẽ gây ra một lỗi như :

Đang giải nén <tên_gói1> (từ <tập_tin_gói1>) ...
dpkg: gặp lỗi khi xử lý <tên_gói1> (--install):
 đang thử ghi đè lên `<tên_tập_tin>',
 mà cũng nằm trong gói <tên_gói2>
dpkg-deb: tiến trình con dán bị tín hiệu giết (Ống dẫn bị vỡ)
 Gập lỗi khi xử lý:
 <tên_gói1>

Quản trị cũng có thể thử giải quyết một trường hợp các tập tin bị xung đột bằng cách ép buộc gỡ bỏ gói có tên trên dòng cuối cùng của thông điệp lỗi:

# dpkg -r --force-depends tên_gói

Sau khi sửa chữa, quản trị nên có thể tiếp tục lại quá trình nâng cấp bằng cách lặp lại những câu lệnh aptitude diễn tả trước.

Trong khi nâng cấp, tiến trình sẽ hỏi câu về cách cấu hình (lại) vài gói. Khi quá trình hỏi nếu tập tin nào trong thư mục /etc/init.d hay /etc/terminfo, hoặc tập tin /etc/manpath.config, nên được thay thế bằng phiên bản của phần mềm quản lý gói, thường nên đồng ý để đảm bảo hệ thống vẫn thống nhất. Lúc sau, cũng có thể hoàn nguyên mỗi phiên bản cũ, vì nó sẽ được lưu với một phần mở rộng .dpkg-old.

Chưa chắc nên làm gì thì viết tên của gói hay tập tin đó, và tháo gỡ trường hợp vào một lúc sau. Cũng có thể tìm kiếm qua tập tin typescript để xem lại thông tin đã cuộn qua trên màn hình trong khi nâng cấp.

4.6. Nâng cấp hạt nhân và các gói liên quan

Phần này giải thích cách nâng cấp hạt nhân, và diễn tả một số vấn đề liên quan đến quá trình nâng cấp này. Quản trị có dịp cài đặt một của những gói linux-image-* được Debian cung cấp, hoặc biên dịch một hạt nhân riêng từ mã nguồn.

Ghi chú rằng rất nhiều thông tin trong phần này dựa vào giả sử rằng quản trị sẽ sử dụng một của những hạt nhân Debian kiểu mô-đun, cùng với initramfs-toolsudev. Nếu quản trị chọn sử dụng một hạt nhân riêng mà không cần thiết một initrd, hoặc sử dụng một bộ tạo ra initrd khác, một số thông tin ở đây có thể không còn thích hợp lại.

4.6.1. Cài đặt siêu gói hạt nhân

Khi chạy quá trình nâng cấp bản phát hành (dist-upgrade) từ etch lên lenny, rất khuyên quản trị cài đặt một siêu gói (metapackage) linux-image-2.6-* mới. Gói này cũng có thể được tự động cài đặt bởi tiến trình dist-upgrade. Quản trị có thể kiểm tra nó đã được cài đặt bằng cách chạy câu lệnh:

# dpkg -l "linux-image*" | grep ^ii

Không có kết xuất gì thì quản trị cần phải tự cài đặt một gói linux-image-2.6-*. Để thấy danh sách các gói linux-image-2.6-* sẵn sàng, chạy câu lệnh:

# apt-cache search linux-image-2.6- | grep -v transition

Chưa chắc về gói nào nên chọn thì chạy câu lệnh uname -r và tìm một gói có tên tương tự. Ví dụ, nếu thấy chuỗi « 2.6.18-6-686 », khuyên quản trị cài đặt gói linux-image-2.6-686. (Ghi chú rằng mùi vị k7 không còn tồn tại lại: quản trị hiện thời sử dụng mùi vị hạt nhân 386 thì nên dùng mùi vị 686 để thay thế.) Cũng có thể sử dụng công cụ apt-cache để hiển thị một mô tả chi tiết về mỗi gói, để giúp chọn gói thích hợp nhất. Ví dụ :

# apt-cache show linux-image-2.6-686

Sau đó thì có nên sử dụng câu lệnh cài đặt aptitude install để cài đặt nó. Một khi cài đặt hạt nhân mới, quản trị nên khởi động lại càng sớm càng có thể, để lợi dụng phiên bản hạt nhân mới.

Cho quản trị liều lĩnh hơn, có một phương pháp dễ để biên dịch hạt nhân riêng trên Debian GNU/Linux. Hãy cài đặt công cụ kernel-package và đọc các tài liệu hướng dẫn trong thư mục /usr/share/doc/kernel-package.

Nếu có thể, tốt hơn khi nâng cấp gói hạt nhân một cách riêng với quá trình dist-upgrade chính, để tránh bị đứng với một hệ thống tạm thời không khởi động được. Ghi chú rằng thao tác này chỉ nên được làm đằng sau quá trình nâng cấp tối thiểu diễn tả trong Phần 4.5.6, “Nâng cấp hệ thống tối thiểu”.

4.6.2. Số thứ tự thiết bị khác

lenny cung cấp một cơ chế phát hiện phần cứng mà mạnh mẽ hơn các bản phát hành trước. Tuy nhiên, cơ chế này có thể sửa đổi thứ tự phát hiện thiết bị trên hệ thống, mà ảnh hưởng đến thứ tự gán tên thiết bị. Ví dụ, nếu có hai bộ tiếp hợp liên quan đến hai trình điều khiển khác nhau, thì hai chuỗi eth0eth1 có thể tham chiếu đến hai thiết bị bị trao đổi, so với bản phát hành trước. Ghi chú rằng dùng cơ chế mới (v.d.) việc chuyển đổi bộ tiếp hợp Ethernet trong một hệ thống lenny đang chạy có kết quả là bộ tiếp hợp mới sẽ cũng nhận một tên giao diện mới.

Đối với thiết bị mạng, quản trị có thể tránh trường hợp này bằng cách sử dụng các quy tắc của udev, chính xác hơn thông qua những lời xác định ở /etc/udev/rules.d/70-persistent-net.rules[4]. Hoặc quản trị có thể sử dụng tiện ích ifrename để đóng kết mỗi thiết bị vật lý tới một tên riêng vào lúc khởi động. Xem ifrename(8)iftab(5) để tìm thêm thông tin. Hai phần mềm khác nhau (udevifrename) không nên được dùng đồng thời.

Đối với thiết bị lưu trữ, quản trị có thể tránh trường hợp thay đổi thứ tự này bằng cách sử dụng gói công cụ initramfs-tools và cấu hình nó để nạp các mô-đun trình điều khiển thiết bị lưu trữ theo thứ tự được nạp hiện thời. Để làm như thế, hãy tìm thứ tự theo đó các thiết bị lưu trữ được nạp vào hệ thống bằng cách xem lại kết xuất của lsmod. Công cụ lsmod liệt kê các mô-đun theo thứ tự nạp đảo ngược, tức là mô-đun thứ nhất trong danh sách là mô-đun được nạp cuối cùng. Ghi chú rằng phương pháp này chỉ có tác động với thiết bị mà hạt nhân đến theo một thứ tự ổn định (v.d. thiết bị PCI).

Tuy nhiên, việc gỡ bỏ và nạp lại mô-đun sau khi khởi động đầu tiên sẽ ảnh hưởng đến thứ tự này. Hơn nữa, hạt nhân trên máy có thể liên kết tĩnh một số trình điều khiển, và các tên này sẽ không xuất hiện trong kết xuất của lsmod. Quản trị cũng có thể xem lại bản ghi /var/log/kern.loghay kết xuất của dmesg để thử phân biệt những tên trình điều khiển này và thứ tự nạp.

Hãy thêm những tên mô-đun này vào /etc/initramfs-tools/modules theo thứ tự nên nạp vào lúc khởi động. Một số tên mô-đun có thể thay đổi giữa etch và lenny. Ví dụ, sym53c8xx_2 đã trở thành sym53c8xx.

Sau đó thì quản trị cần phải tạo ra lại (các) ảnh initramfs bằng cách chạy câu lệnh update-initramfs -u -k all.

Một khi chạy một hạt nhân lenny và udev, quản trị cũng có thể cấu hình lại hệ thống để truy cập đến đĩa theo một biệt hiệu không phụ thuộc vào thứ tự nạp trình điều khiển. Các biệt hiệu này nằn trong cây thư mục /dev/disk/.

4.6.3. Vấn đề đặt thời gian khởi động

Nếu khởi động hệ thống dùng một initrd được tạo dùng initramfs-tools, trong một số trường hợp các tập tin thiết bị được udev tạo quá trễ để văn lệnh khởi động xử lý.

Trường hợp này thường ngụ ý khi không khởi động được vì không thể gắn kết hệ thống tập tin gốc, và màn hình hiển thị một trình bao gỡ lỗi. Tuy nhiên, nếu quản trị kiểm tra về sau, tất cả các thiết bị cần thiết có phải nằm trong /dev. Trường hợp này đã xảy ra khi hệ thống tập tin gốc nằm trên một đĩa USB hay một mảng RAID, đặc biệt khi dùng LILO.

Có thể chỉnh lại vấn đề này bằng cách sử dụng tham số khởi động rootdelay=9 (khoảng đợi khởi động: 9 giây). Điều chỉnh giá trị này để thích hợp với trường hợp riêng.

4.7. Việc cần làm trước khi khởi động lại

Khi câu lệnh aptitude dist-upgrade đã chạy xong, hoàn tất quá trình nâng cấp “hình thức”, nhưng vẫn có một số công việc cần làm trước khi khởi động lại.

4.7.1. Chạy lại lilo

Nếu hệ thống sử dụng lilo là công cụ nạp khởi động (nó là bộ nạp khởi động cho một số bản cài đặt etch) rất khuyên quản trị chạy lilo lần nữa sau khi nâng cấp:

# /sbin/lilo

Ghi chú rằng cần phải chạy lại lilo thậm chí nếu hạt nhân chưa được nâng cấp, vì giai đoạn thứ hai của lilo sẽ thay đổi so quá trình nâng cấp gói.

Hơn nữa, hãy xem lại nội dung của tập tin cấu hình /etc/kernel-img.conf và kiểm tra nó chứa chuỗi do_bootloader = Yes (làm bộ nạp khởi động = Có). Do đó, bộ nạp khởi động lúc nào cũng chạy sau khi nâng cấp hạt nhân.

Gặp vấn đề nào khi chạy lilo thì hãy so sánh các liên kết tượng trưng trong cây thư mục / mà chỉ tới vmlinuzinitrd với nội dung của tập tin cấu hình /etc/lilo.conf.

Nếu người dùng quên chạy lại lilo trước khi khởi động lại, hoặc hệ thống tình cờ được khởi động lại trước khi người dùng có thể tự làm như thế, hệ thống có thể sẽ không khởi động được. Thay cho dấu nhắc lilo, người dùng sẽ chỉ thấy LI khi khởi động hệ thống[5]. Xem Phần 4.1.3, “Chuẩn bị phục hồi” để tìm thông tin về cách phục hồi từ trường hợp này.

4.8. Tiến trình khởi động hệ thống bị treo ở Đang đợi hệ thống tập tin gốc

Thủ tục để phục hồi từ tập tin /dev/hda đã trở thành /dev/sda

Một số người dùng đã thông báo rằng quá trình nâng cấp có thể gây ra hạt nhân không tìm được phân vùng gốc của hệ thống sau khi khởi động lại hệ thống.

Trong trường hợp như vậy, tiến trình khởi động hệ thống sẽ treo ở thông điệp theo đây:

Đang đợi hệ thống tập tin gốc...

và sau vài giây nữa, một dấu nhắc hộp bận thô sẽ xuất hiện.

Vấn đề này có thể xảy ra khi quá trình nâng cấp hạt nhân giới thiệu sử dụng trình điều khiển IDE của thế hệ kế tiếp. Quy ước đặt tên đĩa IDE cho trình điều khiển cũ là hda, hdb, hdc, hdd. Trình điều khiển mới sẽ đặt tên cùng những đĩa đó sda, sdb, sdc, sdd. Vấn đề xuất hiện khi quá trình nâng cấp không tạo ra một tập tin /boot/grub/menu.lst mới để tùy theo quy ước đặt tên mới. Trong khi khởi động, Grub sẽ gửi một phân vùng gốc hệ thống qua cho hạt nhân mà hạt nhân vẫn còn không tìm được.

Người dùng đã gặp vấn đề này nên nhảy tới Phần 4.8.2, “Cách giải quyết vấn đề sau khi nâng cấp”. Để tránh vấn đề này trước khi nâng cấp, đọc nữa nhé.

4.8.1. Cách tránh vấn đề này trong khi nâng cấp

Vẫn có thể tránh vấn đề này một cách hoàn toàn bằng cách sử dụng một bộ nhận diện cho hệ thống tập tin gốc mà không biến đổi giữa hai việc khởi động. Có hai phương pháp có thể làm như thế: đặt nhãn hệ thống tập tin, hoặc sử dụng bộ nhận diện duy nhất toàn thể (UUID). Hai phương pháp này được hỗ trợ trong Debian kể từ 4.0.

Hai phương pháp này có lợi ích và bất lợi. Phương pháp đặt nhãn vẫn dễ đọc hơn, nhưng cũng có thể gặp vấn đề nếu một hệ thống tập tin khác cùng máy có nhãn đó. Phương pháp UUID ít đẹp hơn, nhưng rất ít có thể tạo hai UUID xung đột.

Trong các mẫu thí dụ dưới đây, giả sử hệ thống tập tin gốc nằm trên /dev/hda6. Cũng giả sử hệ thống có bản cài đặt udev và hệ thống tập tin kiểu ext2 hay ext3.

Để thực hiện phương pháp đặt nhãn:

  1. Đặt nhãn hệ thống tập tin (tên có số tối đa 15 ký tự) bằng cách chạy câu lệnh: e2label /dev/hda6 rootfilesys

  2. Chỉnh sửa tập tin /boot/grub/menu.lst và sửa đổi dòng:

    # kopt=root=/dev/hda6 ro

    thành

    # kopt=root=LABEL=rootfilesys ro

    [Ghi chú]Ghi chú

    Không nên gỡ bỏ dấu # ở đầu dòng: nó cần còn lại.

  3. Cập nhật những dòng hạt nhân (kernel) trong tập tin lines in menu.lst bằng cách chạy câu lệnh update-grub.

  4. Chỉnh sửa tập tin /etc/fstab và sửa đổi dòng mà gắn kết phân vùng /, v.d.

    /dev/hda6     /     ext3  defaults,errors=remount-ro 0 1

    thành

    LABEL=rootfilesys     /     ext3  defaults,errors=remount-ro 0 1

    Thay đổi đáng kể là cột bên trái: không nên sửa đổi cột khác nào trên dòng này.

Để thực hiện phương pháp UUID:

  1. Find out the universally unique identifier of your filesystem by issuing: ls -l /dev/disk/by-uuid | grep hda6. You can also use vol_id --uuid /dev/hda6 (in etch) or blkid /dev/hda6 (if already upgraded to lenny).

    Kết quả nên một dòng tương tự với:

    lrwxrwxrwx 1 root root 24 2008-09-25 08:16 d0dfcc8a-417a-41e3-ad2e-9736317f2d8a -> ../../hda6

    UUID là tên của liên kết tượng trưng chỉ tới /dev/hda6, tức là: d0dfcc8a-417a-41e3-ad2e-9736317f2d8a.

    [Ghi chú]Ghi chú

    UUID của mỗi hệ thống tập tin là một chuỗi riêng biệt.

  2. Chỉnh sửa tập tin /boot/grub/menu.lst và sửa đổi dòng:

    # kopt=root=/dev/hda6 ro

    thành

    # kopt=root=UUID=d0dfcc8a-417a-41e3-ad2e-9736317f2d8 ro

    [Ghi chú]Ghi chú

    Không nên gỡ bỏ dấu # ở đầu dòng: nó cần còn lại.

  3. Cập nhật những dòng hạt nhân (kernel) trong tập tin lines in menu.lst bằng cách chạy câu lệnh update-grub.

  4. Chỉnh sửa tập tin /etc/fstab và sửa đổi dòng mà gắn kết phân vùng /, v.d.

    /dev/hda6     /     ext3  defaults,errors=remount-ro 0 1

    thành

    UUID=d0dfcc8a-417a-41e3-ad2e-9736317f2d8  /  ext3  defaults,errors=remount-ro 0 1

    Thay đổi đáng kể là cột bên trái: không nên sửa đổi cột khác nào trên dòng này.

4.8.2. Cách giải quyết vấn đề sau khi nâng cấp

4.8.2.1. Lời giải 1

Phương pháp này thích hợp khi Grub hiển thị giao diện trình đơn để chọn mục nhập từ đó người dùng muốn khởi động. Không có trình đơn xuất hiện thì hãy thử bấm phím Esc trước khi hạt nhân khởi động, để ép buộc trình đơn xuất hiện. Vẫn còn không thành công thì thử Phần 4.8.2.2, “Lời giải 2” hay Phần 4.8.2.3, “Lời giải 3”.

  1. Trong trình đơn Grub, hãy tô sáng mục nhập từ đó cần khởi động. Bấm phím e để chỉnh sửa các tùy chọn liên quan đến mục nhập này. Kết quả nên tương tự với:

    root (hd0,0)
    kernel /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro
    initrd /initrd.img-2.6.26-1-686

  2. Tô sáng dòng

    kernel /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro

    bấm phím e và thay thế hdX bằng sdX (X đại diện chữ a, b, c hay d phụ thuộc vào hệ thống. Trong mẫu thí dụ này, dòng này trở thành:

    kernel /vmlinuz-2.6.26-1-686 root=/dev/sda6 ro

    Sau đó, bấm phím Enter để lưu lại thay đổi. Nếu dòng khác nào bao gồm hdX, cũng nên sửa đổi nó. Không nên sửa đổi mục nhập tương tự với root (hd0,0). Một khi sửa đổi xong và lưu lại, bấm phím b: hệ thống nên khởi động như bình thường.

  3. Một khi khởi động được, người dùng cần phải sửa chữa bền bỉ vấn đề đó. Nhảy tới Phần 4.8.1, “Cách tránh vấn đề này trong khi nâng cấp” và áp dụng một của hai thủ tục đề xuất.

4.8.2.2. Lời giải 2

Khởi động từ vật chứa cài đặt Debian GNU/Linux (đĩa CD/DVD) và khi được nhắc, chọn mục rescue (cứu) để khởi chạy chế độ cứu. Chọn ngôn ngữ, địa điểm và bố trí bàn phím, sau đó cho phép nó cấu hình mạng (bất chấp thành không hay không). Sau một thời gian, nó nên nhắc người dùng chọn phân vùng cần sử dụng làm hệ thống tập tin gốc. Các lựa chọn đề xuất sẽ hình như :

/dev/ide/host0/bus0/target0/lun0/part1
/dev/ide/host0/bus0/target0/lun0/part2
/dev/ide/host0/bus0/target0/lun0/part5
/dev/ide/host0/bus0/target0/lun0/part6

Nếu người dùng biết phân vùng nào là hệ thống tập tin gốc, chọn phân vùng thích hợp. Không thì chỉ thử phân vùng thứ nhất. Nếu phần mềm than phiền về một phân vùng hệ thống tập tin không hợp lệ, chỉ thử phân vùng kế tiếp, v.v. Thử lần lượt phân vùng nọ sau phân vùng kia không nên làm hại phân vùng, và nếu chỉ có một hệ điều hành được cài đặt trên đĩa thì dễ tìm phân vùng hệ thống tập tin đúng. Nếu có nhiều hệ điều hành được cài đặt vào đĩa, tốt hơn khi người dùng biết phân vùng nào là đúng.

Một khi chọn phân vùng, người dùng sẽ thấy một số tùy chọn khác nhau. Bật tùy chọn sẽ thực hiện một trình bao trong phân vùng đã chọn. Nếu phần mềm than phiền rằng nó không thể làm như thế, thử tùy chọn này trong một phiên bản khác.

Sau đó thì quản trị nên có quyền truy cập đến trình bao dưới người dùng root (người chủ) trên hệ thống tập tin gốc được gắn kết đến /target. Quản trị cần quyền truy cập đến nội dung của các thư mục /boot, /sbin/usr trên đĩa cứng, mà giờ nên sẵn sàng dưới /target/boot, /target/sbin/target/usr. Nếu thư mục như vậy cần được gắn kết từ phiên bản khác, hãy làm như thế (xem /etc/fstab để tìm biết phân vùng nào nên gắn kết).

Nhảy tới Phần 4.8.1, “Cách tránh vấn đề này trong khi nâng cấp” và áp dụng một của hai thủ tục đề xuất để sửa bền bỉ vấn đề này. Sau đó, gõ lệnh exit để thoát khỏi trình bao cứu, và chọn mục reboot để khởi động hệ thống như bình thường (đừng quên gỡ bỏ vật chứa có khả năng khởi động).

4.8.2.3. Lời giải 3

  1. Khởi động từ bản phát hành CD-Động (LiveCD), v.d. Debian Động, Knoppix hay Ubuntu Động.

  2. Gắn kết phiên bản chứa thư mục /boot. Không biết thư mục nào thì sử dụng kết xuất của lệnh dmesg để tìm biết nếu đĩa được biết như là hda, hdb, hdc,hdd hay sda, sdb, sdc, sdd. Một khi biết đĩa nào cần thao tác, v.d. sdb, chạy câu lệnh theo đây để thấy bảng phân vùng của đĩa và tìm phân vùng đúng: fdisk -l /dev/sdb

  3. Giả sử đã gắn kết phân vùng đúng dưới /mnt, và phân vùng này chứa thư mục /boot và nội dung của nó, hãy chỉnh sửa tập tin /mnt/boot/grub/menu.lst.

    Tìm phần tương tự với:

    ## ## End Default Options ##
    
    title           Debian GNU/Linux, kernel 2.6.26-1-686
    root            (hd0,0)
    kernel          /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro
    initrd          /initrd.img-2.6.26-1-686
    
    title           Debian GNU/Linux, kernel 2.6.26-1-686 (single-user mode)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.26-1-686 root=/dev/hda6 ro single
    initrd          /initrd.img-2.6.26-1-686
    
    ### END DEBIAN AUTOMAGIC KERNELS LIST

    và thay thế mỗi chuỗi hda, hdb, hdc, hdd bằngsda, sdb, sdc, sdd như thích hợp. Không nên sửa đổi dòng tương tự với:

    root            (hd0,0)

  4. Khởi động lại hệ thống, gỡ bỏ đĩa CD-Động, và hệ thống nên khởi động đúng.

  5. Một khi khởi động được, áp dụng một của hai thủ tục đề xuất dưới Phần 4.8.1, “Cách tránh vấn đề này trong khi nâng cấp” để sửa chữa bền bỉ vấn đề này.

4.9. Chuẩn bị cho bản phát hành kế tiếp

Sau khi nâng cấp, có vài việc có thể làm để chuẩn bị cho bản phát hành kế tiếp.

  • Nếu siêu gói ảnh hạt nhân mới đã được lấy do quan hệ phụ thuộc với gói cũ, nó sẽ được đánh dấu là « đã tự động cài đặt », mà nên được sửa chữa (chạy câu lệnh):

    # aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6-*' | cut -f1)
    
  • Gỡ bỏ các gói quá cũ và không dùng như diễn tả trong Phần 4.10, “Gói quá cũ”. Cũng nên xem lại những tập tin cấu hình được chúng dùng và có dịp tẩy mỗi gói để cũng gỡ bỏ các tập tin cấu hình (và dữ liệu liên quan khác).

4.10. Gói quá cũ

Cũng như giới thiệu vài nghìn gói mới, lenny gỡ bỏ và bỏ sót hơn hai nghìn gói cũ đã nằm trong etch. Nó không cung cấp đường dẫn nâng cấp cho gói quá cũ. Dù không có gì ngăn cản người dùng tiếp tục sử dụng gói quá cũ, Dự án Debian thường dừng cung cấp hỗ trợ bảo mật cho nó, một năm sau khi phát hành lenny[6], và không phải thông thường cung cấp hỗ trợ khác nào đã ra đời. Khuyên quản trị thay thế mỗi gói như vậy bằng một gói xen kẽ sẵn sàng (nếu có).

Có rất nhiều lý do gói bị gỡ bỏ khỏi bản phát hành: gói đó không còn được duy trì lại bởi dự án gốc; không còn có lại một Nhà phát triển Debian quan tâm đến duy trì gói đó; chức năng được gói đó cung cấp đã bị thay thế bằng một gói phần mềm/phiên bản mới; hoặc gói đó không còn thích hợp lại với lenny do lỗi nội bộ. Trong trường hợp cuối cùng, gói đó có thể vẫn còn nằm trong bản phân phối “bất định” (unstable).

Dễ phát hiện những gói nào “quá cũ” trong một hệ thống đã cập nhật, vì giao diện quản lý gói sẽ đánh dấu chúng một cách tương ứng. Trong aptitude, danh sách các gói như vậy được hiển thị dưới tiêu đề “Gói cũ và tạo cục bộ”. dselect cung cấp một danh sách tương tự mà có thể chứa nội dung khác.

Hơn nữa, nếu người dùng đã sử dụng aptitude để tự cài đặt gói trong etch, nó đã theo dõi những gói đã cài đặt bằng tay và có khả năng đánh dấu « quá cũ » những gói được lấy chỉ do quan hệ phụ thuộc mà không còn cần thiết lại nếu một gói nào đó bị gỡ bỏ. Cũng như vậy, aptitude, khác với deborphan, sẽ không đánh dấu gói « quá cũ » mà được người dùng tự động cài đặt, như trái ngược với gói được tự động cài đặt do quan hệ phụ thuộc.

Cũng có công cụ bổ sung để tìm các gói quá cũ, v.d. deborphan, debfoster hay cruft. deborphan rất khuyến khích, dù trong chế độ mặc định nó chỉ thông báo các thư viện quá cũ : những gói trong phần thư viện “libs” hay phần thư viện cũ “oldlibs” mà không dùng bởi gói khác nhau. Không nên mù quáng gỡ bỏ những gói được tìm bởi công cụ như vậy, đặc biệt nếu phần mềm sử dụng tùy chọn khác mặc định cũng năng nổ mà có khuynh hướng xuất kết quả dương giả. Rất khuyên người dùng tự xem lại những gói đề xuất gỡ bỏ (tức là nội dung, kích cỡ và mô tả về mỗi gói) trước khi thật sự gỡ bỏ chúng.

Hệ thống Theo dõi Lỗi Debian thường cung cấp thông tin bổ sung về lý do gỡ bỏ một gói nào đó. Khuyên người dùng xem lại cả hai những báo cáo lỗi được lưu trữ về gói chính nó, và những báo cáo lỗi được lưu trữ về gói-giả ftp.debian.org.

The list of obsolete packages includes:

  • apache (1.x), phần mềm tiếp sau làapache2

  • bind (8), successor is bind9

  • php4, phần mềm tiếp sau là php5

  • postgresql-7.4, phần mềm tiếp sau là postgresql-8.1

  • exim (3), successor is exim4

4.10.1. Gói giả

Một số gọi nào đó từ etch đã bị chia ra vài gọi khác nhau trong lenny, thường để cải tiến khả năng bảo tồn hệ thống. Để làm dễ dàng đường dẫn nâng cấp trong các trường hợp như vậy, lenny thường cung cấp các gói “giả”: gói trống cùng tên với gói cũ trong etch với quan hệ phụ thuộc mà gây ra cài đặt gói mới. Sau khi nâng cấp, các gói “giả” được thấy là quá cũ thì có thể được gỡ bỏ an toàn.

Hậu hết (nhưng không phải tất cả các) mô tả về gói giả cũng ngụ ý mục đích của nó. Tuy nhiên, các mô tả gói về gói giả không phải thống nhất, do đó cũng có ích để sử dụng deborphan với tùy chọn --guess (đoán) để phát hiện gói giả trong hệ thống. Ghi chú rằng một số gói giả nào đó không dự định được gỡ bỏ sau khi nâng cấp, vì chúng được dùng để theo dõi phiên bản sẵn sàng hiện thời của một chương trình nào đó trong thời gian.



[2] Cũng có thể tắt tính năng này bằng cách thêm tham số panic=0 vào các tham số khởi động.

[3] Hệ thống quản lý gói Debian bình thường không cho phép Gói 1 gỡ bỏ hoặc thay thế một tập tin thuộc về Gói 2, nếu nó chưa xác định để thay thế Gói 2.

[4] Những quy tắc ở đó được tự động tạo ra bởi văn lệnh /etc/udev/rules.d/75-persistent-net-generator.rules để có tên bền bỉ cho mỗi giao diện mạng. Hãy xoá liên kết tượng trưng này để tắt chức năng đặt tên thiết bị bền bỉ cho NIC bởi udev.

[5] Để tìm thêm thông tin về các mã lỗi của lilo, xem Tài liệu Làm thế nào Đĩa Khởi động Linux.

[6] Hoặc miễn là không có bản phát hành nữa trong khoảng thời gian đó. Bình thường chỉ hai bản phát hành ổn định được hỗ trợ nhau vào một lúc nào đó.