1.8 2006-02-16
Silicon Graphics Machine -- Cài đặt Arcboot Cài đặt arcboot

Ở phần trước, chúng tôi đã hướng dẫn cách tạo kernel, sau đó chép nó vào volume header bằng dvhtool. Có hai vấn đề với hệ thống này:

  • Nót không được hỗ trợ trên mọi hệ thống SGI
  • Nó cần một volume header khá lớn

Để khởi động máy, bootloader, arcboot được dùng cho mục đích này. Thay vì đặt kernel trực tiếp vào volume header, chúng ta sẽ để nó trong /boot (nằm trong một phân vùng EXT2/3), và cho arcboot (nằm trong volume header, thay cho kernel) biết nơi cần tìm. Vậy bước đầu tiên là emerge vài công cụ để có thể dùng lát nữa...

# emerge dvhtool arcboot

Nó sẽ cài đặt hai công cụ, arcboot nằm trong volume header để nạp kernel, và dvhtool để giúp đặt arcboot vào volume header.

Chương trình chúng ta cần, nằm trong /usr/lib/arcboot -- trên hệ thống IP32 (Indy, Indigo 2, Challenge S), nó tên là arcboot.ip22. Các hệ thống khác cũng tương tự. Chúng ta sẽ chép tập tin này vào volume header.

# dvhtool --unix-to-vh /usr/lib/arcboot/arcboot.ip?? arcboot

Sau đó chúng ta có thể kiểm tra sự tồn tại của tập tin đó trong volume header.

# dvhtool --print-volume-directory
----- directory entries -----
Entry #0, name "linux", start 4, bytes 3262570
Entry #1, name "newlinux", start 6377, bytes 7619627
Entry #3, name "arcboot", start 21260, bytes 51448
#
Chú ý, trong trường hợp này, chúng ta có hai kernel cũ trogn volume header, linuxnewlinux. Nó nằm đó từ trước khi cài đặt arcboot. Sự hiện diện của nó không gây ra vấn đề gì cả -- chừng nào còn có arcboot, mọi thứ vẫn ổn.
Cấu hình arcboot

Nếu bạn từng thiết lập Linux Loader (lilo), bạn sẽ thấy rằng arcboot dùng cú pháp tương tự như thế trong tập tin cấu hình. Tuy nhiên cần nhớ rằng, arcboot cần tập tin cấu hình của nó nằm trong phân vùng EXT2/3 như /etc/arcboot.conf. Cách dễ nhất để làm là bảo đảm /boot là một phân vùng EXT2/3 và có một tập tin tên là arcboot.conf trong thư mục /boot/etc. Tập tin cấu hình ví dụ nằm ở /etc/arcboot.conf.sample.

(Tạo thư mục /boot/etc)
# mkdir /boot/etc

(Đặt tập tin cấu hình vào)
# cp /etc/arcboot.conf.sample /boot/etc/arcboot.conf

(Tạo symlink về /etc)
# ln -s /boot/etc/arcboot.conf /etc/arcboot.conf

(... và một symlink trong /boot, trỏ đến chính nó)
# (cd /boot; ln -s . boot)

Bạn có thể sửa lại /etc/arcboot.conf theo ý thích. Theo ý kiến cá nhân thì có thể thiết lập hai kernel: new, kernel được cập nhật thường xuyên, có thể chạy, cũng có thể không chạy; và working, kernel ổn định. Tập tin arcboot.conf cho cấu hình trên sẽ giống như thế sau.

# arcboot.conf
#
# copyright 2002 Guido Guenther <agx@sigxcpu.org>
#
label=working
        image=/vmlinux
        append="root=/dev/sda3"

# backup version
label=new
        image=/vmlinux-new
        append="root=/dev/sda3"

Khi đã thiết lập xong, bạn cần tin chỉnh một chút trong SGI PROM để có thể hoạt động. Phần này được đề cập trong phần Khởi động lại hệ thống, không phải phần kế tiếp.

Cobalt MicroServer -- Cài đặt CoLo Cài đặt CoLo

Với Cobalt server, những máy này có ít firmware trên chip hơn. Cobalt BOOTROM đơn giản, so với SGI PROM, và có nhiều hạn chế nghiêm trọng.

  • Chỉ cho phép kernel tối đa 675KB. Kích thước hiện tại của Linux 2.4 làm cho khó có thể tạo được một kernel với kích thước cho phép. Linux 2.6 thì hoàn toàn không thể.
  • Kernel 64-bit không được hỗ trợ bởi stock firmware (mặc dù vẫn đang được thử nghiệm trên Cobalt ở thời điểm này)
  • Shell cực kỳ đơn giản

Để vượt qua những hạn chế này, một firmware khác, tên là CoLo (Cobalt Loader) được dùng. Đây là BOOTROM image có thể dùng để ghi vào chip của Cobalt server, hoặc nạp từ firmware cũ.

Tài liệu này sẽ hướng dẫn thiết lập CoLo để được nạp từ firmware cũ. Làm như vậy sẽ an toàn hơn, và bạn được khuyến khích dùng cách này để cài đặt CoLo. Bạn có thể muốn ghi CoLo vào chip trên server, thay thế hoàn toàn firmware gốc -- tuy nhiên bạn sẽ phải tự làm hết. Nếu có gì đó sai, bạn sẽ phải gỡ (vật lý) BOOTROM cũ ra và tự lập trình lại BOOTROM bằng stock firmware. Nếu bạn không chắc mình biết làm điều này thì ĐỪNG làm theo cách này. Chúng tôi không chịu trách nhiệm nếu có gì xảy ra khi bạn bỏ qua lời khuyên này.

Giờ chúng ta sẽ cài đặt CoLo. Trước hết hảy emerge gói này.

# emerge colo

Sau khi đã cài đặt, bạn có thể xem trogn thư mục /usr/lib/colo, tìm hai tập tin, colo-chain.elf: "kernel" để stock firmware nạp, và colo-rom-image.bin: ROM image để cài flash vào BOOTROM. Chúng ta sẽ mount /boot và dump bản sao nén của colo-chain.elf vào /boot.

# gzip -9vc /usr/lib/colo/colo-chain.elf > /boot/vmlinux.gz
Cấu hình CoLo

Giờ, khi hệ thống khởi động lại, nó sẽ nạp CoLo, chia menu trên LCD. Tùy chọn đầu (và là tùy chọn mặc định sau khoảng 5 giây) là khởi động đĩa cứng. Hệ thống sau đó sẽ mount phân vùng Linux đầu tiên nó tìm thấy vào, và chạy script default.colo. Cú pháp script này được mô tả đầy đủ trong tài liệu CoLo (xem /usr/share/doc/colo-X.YY/README.shell.gz -- X.YY là phiên bản cài đặt). Nó rất đơn giản.

Một mẹo nhỏ: khi cài đặt kernel, tốt nhất nên tạo hai kernel, kernel.gz.working -- kernel ổn định, dùng để làm việc, và kernel.gz.new -- kernel mới tạo xong. Bạn có thể symlink đến kernel "new" và "working", hoặc đổi tên kernel image.
#:CoLo:#
mount hda1
load /kernel.gz.working
execute root=/dev/hda3 ro console=ttyS0,115200
CoLo sẽ từ chối nạp script không bắt đầu bằng dòng #:CoLo:#. Hãy nghĩ rằng nó giống như #!/bin/sh đối với shell script.

Bạn có thể hỏi, cấu hình & kernel nào sẽ được dùng để khởi động, khi thời gian mặc định trôi qua. Đây là cấu hình tôi dùng trên Cobalt server của tôi:

Chú ý, bạn cần dùng CoLo v1.12 hoặc 1.13 thì mới có thể dùng lệnh menu. Ví dụ sau không hoạt động với v1.11. Lệnh menu được thay bằng lệnh select trong CoLo v1.14. Nếu bạn cài đặt bằng tay, hãy xem menu.colo trong thư mục examples trong thư mục cài đặt CoLo.
#:CoLo:#

lcd "Mounting hda1"
mount hda1
menu "Which Kernel?" 50 Working working New new
lcd "Loading Linux" {menu-option}
load /kernel.gz.{menu-option}
lcd "Booting..."
execute root=/dev/hda5 ro console=ttyS0,115200
boot

Script trên yêu cầu người dùng chọn kernel muốn dùng (hoặc New, hoặc Working), sau đó nạp vmlinux.gz.new hoặc vmlinux.gz.working, tùy vào quyết định của người dùng. Nếu không chọn sau 5 giây, tùy chọn đầu sẽ được dùng.

Thiết lập Serial Console

Bản cài đặt Linux, vào lúc này, có thể hoạt động tốt, nhưng ngầm định rằng bạn đăng nhập vào bằng terminal vật lý. Với máy Cobalt, đều này rất tệ -- vì không có cái gì gọi là terminal vật lý.

Những ai có framebuffer có thể bỏ qua phần này nếu thích.

Trước hết, hãy mở trình soạn thảo và sửa /etc/inittab. Trong tập tin này bạn sẽ thấy những dòng giống như sau:

# SERIAL CONSOLE
#c0:12345:respawn:/sbin/agetty 9600 ttyS0 vt102

# TERMINALS
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

# What to do at the "Three Finger Salute".
ca:12345:ctrlaltdel:/sbin/shutdown -r now

Hãy uncomment dòng c0. Mặc định, nó được đặt dùng baud rate 9600 bps. Với Cobalt server, bạn có thể muốn đổi sang 115200 để khớp với baud rate do BOOT ROM quy định. Đây là cấu hình trên máy tôi. Trên máy headless (như Cobalt), bạn nên comment những dòng dành cho local terminal (c1 đến c6) vì nó có thể phản ứng kỳ lạ nếu không thể mở /dev/ttyX.

# SERIAL CONSOLE
c0:12345:respawn:/sbin/agetty 115200 ttyS0 vt102

# TERMINALS -- These are useless on a headless qube
#c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:12345:respawn:/sbin/agetty 38400 tty2 linux
#c3:12345:respawn:/sbin/agetty 38400 tty3 linux
#c4:12345:respawn:/sbin/agetty 38400 tty4 linux
#c5:12345:respawn:/sbin/agetty 38400 tty5 linux
#c6:12345:respawn:/sbin/agetty 38400 tty6 linux

Cuối cùng ... chúng ta cần cho hệ thống biết rằng local serial port có thể được tin cậy là một terminal an toàn. Tập tin cần chỉnh là /etc/securetty. Nó chứa danh sách các terminal hệ thống tin tưởng. Chúng ta chỉ cần thêm hai dòng, cho phép serial line được dùng với đăng nhập root.

(/dev/ttyS0 -- tên mặc định của serial port thứ nhất)
# echo 'ttyS0' >> /etc/securetty

(Sau này, Linux gọi nó là /dev/tts/0 -- vậy thì thêm luôn)
# echo 'tts/0' >> /etc/securetty
Khởi động lại hệ thống

Hãy thoát khỏi môi trường chroot và unmount toàn bộ các phân vùng. Sau đó gõ lệnh bạn đã đợi từ lâu: reboot.

# exit
cdimage ~# cd
cdimage ~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot
Người dùng Cobalt: Phần còn lại của chương này để cập cách thiết lập cho SGI PROM để có thể khởi động arcboot. Nó không dành cho Cobalt server. Thật ra bạn đã làm xong hết rồi -- không cần cấu hình gì nữa, bạn có thể bỏ qua phần kế và tiếp tục với Hoàn tất Cài đặt Gentoo.
Tinh chỉnh SGI PROM

Khi bạn đã khởi động lại, hãy vào System Maintenance Menu và chọn Enter Command Monitor (5). Nếu bạn muốn kiểm tra bản cài đặt Gentoo của mình, bạn có thể chỉ cần chạy boot -f <tên kernel>. Để luôn khởi động hệ thống với Gentoo, bạn cần đặt vài biến trong SGI PROM:

1) Start System
2) Install System Software
3) Run Diagnostics
4) Recover System
5) Enter Command Monitor

Option? 5
Command Monitor.  Type "exit" to return to the menu.

(<root device> = Phân vùng gốc của Gentoo, vd /dev/sda3)
>> setenv OSLoadPartition <root device>

(Liệt kê danh sách kernel, gõ "ls")
>> setenv OSLoader <tên kernel>
>> setenv OSLoadFilename <tên kernel>

(Khai báo tham số kernel)
>> setenv OSLoadOptions <các tham số kernel>

(Cung cấp vị trí Volume Header)
>> setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)

(Tự động khởi động Gentoo)
>> setenv AutoLoad Yes

(Đặt múi giờ)
>> setenv TimeZone EST5EDT

(Dùng serial console - nếu dùng đồ họa thì dùng "g" thay vì
"d1" (một))
>> setenv console d1

Giờ bạn đã sẵn sàng để vui với Gentoo! Hãy khởi động Gentoo và hoàn tất cài đặt với Hoàn tất cài đặt Gentoo.