– 35 – image=/boot/vmlinuz-2.4.20 initrd=/boot/initrd-2.4.20.img root=/dev/hda1 label=linux-2.4.20 read-only image=/boot/vmlinuz initrd=/boot/initrd-2.4.26.img root=/dev/hda1 label=linux read-only Sau khi đã lưu trữ (save) cấu hình của /etc/lilo.conf ở trên, chạy lệnh: # /sbin/lilo để đăng ký nhân mới cho LILO. Đối với giải pháp đề phòng trường hợp không thể dùng LILO để khởi động vào nhân mới, xem chi tiết ở phần 9.1.2 ở trên. 10 Khởi động lại máy và chỉnh lý nếu gặp trục trặc Tới đây, bạn cần khởi động lại máy với nhân mới. Nếu không có gì trở ngại, máy sẽ khởi động vào Linux bình thường. Bạn có thể kiểm lại xem nhân mình đang chạy có đúng phiên bản vừa được biên dịch hay không bằng cách chạy: $ uname -r hoặc, $ cat /proc/version Nếu kết quả báo phiên bản nhân cũ thì có nghĩa trình khởi động (LILO hoặc GRUB) đã không khởi động nhân vừa được biên dịch. Bạn nên kiểm tra lại các file cấu hình (lilo.conf hoặc grub.conf) cho đúng theo chi tiết đã nêu ở trên. 10.1 Bị treo khi khởi động vào linux Trở ngại trong giai đoạn khởi động vào Linux thông thường do cấu hình trình khởi động không đúng và trình khởi động được cài lên không đúng phân vùng khởi động 31 hoặc boot partition 31 – 36 – MBR bị hỏng (hiếm thấy trong quá trình biên dịch lại và cài nhân mới nếu thực hiện đúng quy cách). Trong trường hợp này, bạn phải: • dùng đến đĩa mềm "cấp cứu" được tạo ở phần ?? để khởi động vào Linux • Đến giai đoạn này bạn hẳn phải biết vị trí của phân vùng gốc 32 (/) trên đĩa cứng để kết nối phân vùng 33 của đĩa cứng: # mount /dev/hdXy /mount/point/somewhere trong đó X là ví trí đĩa cứng trên máy, y là vị trí phân vùng gốc trên đĩa cứng này. • đổi root (chroot) trở thành phân vùng gốc của đĩa cứng: # chroot /mount/point/somewhere trong đó /mount/point/somewhere là nơi đĩa cứng của bạn được kết nối 34 . • kiểm tra lại cấu hình của trình khởi động và cài đặt lại cho máy (xem phần 9.1.1 hoặc 9.1.2 tùy theo trình khởi động bạn dùng là GRUB hay LILO). Điểm cần chú ý ở đây cho GRUB là bạn phải chạy lệnh: # /sbin/grub-install /dev/hdX trong đó /dev/hdX là tên thiết bị đĩa chứa MBR cho hệ thống (thường là đĩa đầu tiên trên máy 35 ). Lệnh trên sẽ thiết lập lại bản ghi khởi động 36 và loại bỏ các trường hợp MBR bị hỏng. Tương tự cho LILO, bạn phải chạy lệnh: # /sbin/lilo. 10.2 Bị treo trong quá trình nhân được load Nếu bạn vướng vào các trở ngại trong giai đoạn nhân được tải lên thông thường là do các drivers tối cần thiết để mount filesystems trên máy bị thiếu. Giả sử bạn dùng ext3 cho phân vùng gốc 37 (/) chứa nhân. Để có thể kết nối phân vùng gốc 38 này, modul ext3 phải được biên dịch và initrd phải tải module này lên. Tương tự ứng dụng cho các trường hợp dùng filesystem khác và cũng thiếu module. root partition 32 mount partition 33 mount 34 Primary Master 35 boot record 36 root partition 37 mount root partition 38 – 37 – Trong trường hợp này, bạn cần ghi phần lỗi được báo trong khi khởi động vào nhân mới để xác định lỗi này thuộc phần nào của cấu hình biên dịch nhân Linux và từ đó điều chỉnh lại và biên dịch lại cho thích ứng. Nói một cách tổng quát, bạn phải: • khởi động lại máy vào phiên bản cũ của kernel (hoặc khởi động vào phiên bản cũ của nhân nếu bạn dùng biện pháp dự phòng đã được đề cập ở phần 9.1.1 và 9.1.2 ở trên) • chọn lựa và chỉnh định cấu hình biên dịch nhân Linux lại (xem phần 7.2.2 để tránh lặp lại bước lựa chọn cấu hình một cách không cần thiết). • thực hiện lại các bước đã nêu ra trong phần 8 và 9 ở trên 11 Vá và biên dịch nhân Mã nguồn của nhân Linux thường được "vá" rồi biên dịch lại nhiều hơn là được biên dịch từ trọn bộ mã nguồn tải về từ http://sources.redhat.com/bzip2/kernel nếu bạn đã quen thuộc với quy trình tái biên dịch hoặc bạn có nhu cầu phải cập nhập ker nel của máy thường xuyên. Tại sao lại cần "vá"? Mã nguồn của Linux kernel cần được vá vì các lý do thường gặp như sau: • mã nguồn của nhân Linux ker nel cập nhật. Bạn đã có sẵn mã nguồn của nhân Linux (cũ hơn) trên máy. Muốn nâng cấp phiên bản nhân của Linux, bạn chỉ cần tải các "miếng vá 39 " về để vá (thay vì phải tải trọn bộ mã nguồn của nhân Linux cho phiên bản mới). • một số "drivers" được cập nhật. Để xử dụng các driver mới này (và các drivers này cần được biên dịch để nối với các thư viện hiện hành trên máy), bạn chỉ cần tải các "miếng vá" của những drivers này để vá nhân Linux và biên dịch lại chúng. 11.1 Các điểm quan trọng trước khi vá Tương tự như phần 6.2, 6.3 và 6.4 ở trên, quy trình tải các miếng vá cho nhân Linux y hệt như tải trọn bộ gói mã nguồn của nhân Linux. Điểm khác biệt là bạn phải tải các hồ sơ khởi đầu bằng patch và chọn cho đúng các "miếng vá" cần thiết cho nhân cần được vá. Điểm tối yếu cần ghi nhớ là khi vá mã nguồn của nhân Linux, bạn phải vá đúng thứ tự và đầy đủ các miếng vá cho đến đúng phiên bản cần có. Ví dụ, bạn đang có phiên bản nhân là 2.4.20 trên máy và bạn muốn biên dịch lại phiên bản kernel của máy trở thành 2.4.26. Thay vì tải trọn bộ mã nguồn của nhân 2.4.26 và biên dịch lại (như đã trình bày trong suốt bài viết này), bạn có thể tải các bản vá 2.4.21, 2.4.22, 2.4.23, 2.4.24, 2.4.25 và 2.4.26 về máy. Tổng cộng dung lượng các bản vá này chỉ là một phần rất nhỏ so với trọn bộ gói mã nguồn 2.4.26. Tất nhiên bạn đã có mã nguồn của kernel 2.4.20 trên máy. patches 39 – 38 – 11.2 Tải, xả và vá Các miếng vá thường được nén ở hai dạng: .gz hoặc .bz2 như gói mã nguồn. Bạn có thể tùy chọn và có thể tải các miếng vá này về bất cứ nơi nào trên máy. Sau khi tải chúng về, bạn có thể thực hiện quy trình tương tự như sau: Giả định các bản vá được nén ở dạng .bz2, nơi chứa mã nguồn của nhân Linux ở /usr/src và thực tính của các miếng vá này đã được kiểm tra. Trong ví dụ này, giả định phiên bản đang dùng trên máy là 2.4.20 và phiên bản cần được vá sẽ là 2.4.26. Chuyển vào thư mục /usr/src: $ cd /usr/src xả nén các miếng vá ở dạng .bz2 vào thư mục /usr/src. Lặp lại cho đến khi xả hết các miếng vá: $ tar xfvj /path/to/patch/patch-x.xx.xx ./ Dọn dẹp sạch sẽ mã nguồn nhân hiện có trên máy, giả định phiên bản mã nguồn hiện có là 2.4.20: $ cd ./kernel-2.4.20 $ make mrproper Lưu một bản mã nguồn kernel 2.4.20 trong thư mục /usr/src đề phòng cho sự cố trong quá trình vá (nếu bạn không lưu một bản mã nguồn nguyên thủy của nhân 2.4.20 trên máy, hoặc bản mã nguồn 2.4.20 này cũng đã được vá trước đây). $ tar cvf /linux-2.4.20.tar ./ Vá các miếng vá theo đúng thứ tự và theo dõi bất cứ lỗi nào được báo: $ patch -p1 < /patch-2.4.21 $ patch -p1 < /patch-2.4.22 $ patch -p1 < /patch-2.4.23 $ patch -p1 < /patch-2.4.24 $ patch -p1 < /patch-2.4.25 $ patch -p1 < /patch-2.4.26 hoặc thực hiện kiểu "lười" như sau: tạo một biến môi trường PATCH 40 tạm thời chứa tên các miếng vá theo đúng thứ tự, tách rời bằng khoảng trống 41 : việc định nghĩa biến PATCH trong 2 dòng chỉ là thuận tiện khi dàn trang, tác giả dùng duy nhất 1 hàng. 40 Kết quả hoàn toàn như nhau. space 41 – 39 – $ export PATCH="patch-2.4.21 patch-2.4.22 patch-2.4.23 " $ export PATCH="$PATCH patch-2.4.24 patch-2.4.25 patch-2.4.26" Chạy vòng lặp: $ for item in $PATCH; do patch -p1 < /$item; done Nếu trong khi vá không có gì trở ngại, bạn sẽ thấy các thông tin tương tự: patching file xxx patching file yyy cho đến khi kết thúc. Nếu trong khi vá bị báo lỗi, bạn phải ngưng bước vá (Ctrl-C) và kiểm tra xem bạn có dùng đúng bản vá và thực hiện các bản vá đúng thứ tự phiên bản hay không. Không nên tiếp tục với bước vá khi gặp lỗi vì chắc chắn bạn sẽ gặp trở ngại trong giai đoạn biên dịch sau này. Để tránh các trở ngại về sau, nếu bị báo lỗi trong khi vá, cách tốt nhất bạn nên xoá trọn bộ thư mục chứa mã nguồn của nhân Linux (đang được vá và bị lỗi) và xả gói mã nguồn nguyên thủy hoặc gói bạn vừa lưu trữ ở trên rồi thử lại. Xoá thư mục chứa mã nguồn vừa vá và bị tr ục trặc, thư mục linux-2.4.20 được dùng như một ví dụ ở đây: $ cd /usr/src $ rm -rf ./linux-2.4.20 Xả gói mã nguồn được lưu trữ ở trên: $ tar xvf linux-2.4.20 $ cd ./linux-2.4.20 và sau đó lặp lại bước vá theo đúng thứ tự các miếng vá. Sau khi vá thành công, bạn nên thực hiện hai bước kế tiếp như sau trước khi bắt tay vào việc chuẩn bị cấu hình biên dịch mã nguồn nhân Linux: Đổi tên thư mục chứa mã nguồn cho đúng phiên bản đã được vá (giúp bạn nhận diện phiên bản của mã nguồn đang có trên máy đã được vá tới phiên bản nào): $ cd /usr/src $ mv ./linux-2.4.20 ./linux-2.4.26 chỉnh giá trị "VERSION" trong file Makefile chính của mã nguồn Linux. Thư mục chứa mã nguồn lúc này đã được đổi tên thành linux-2.4.26: . các bước đã nêu ra trong phần 8 và 9 ở trên 11 Vá và biên dịch nhân Mã nguồn của nhân Linux thường được "vá" rồi biên dịch lại nhiều hơn là được biên dịch từ trọn bộ mã nguồn tải về. phần lỗi được báo trong khi khởi động vào nhân mới để xác định lỗi này thuộc phần nào của cấu hình biên dịch nhân Linux và từ đó điều chỉnh lại và biên dịch lại cho thích ứng. Nói một cách tổng. do thường gặp như sau: • mã nguồn của nhân Linux ker nel cập nhật. Bạn đã có sẵn mã nguồn của nhân Linux (cũ hơn) trên máy. Muốn nâng cấp phiên bản nhân của Linux, bạn chỉ cần tải các "miếng