Pierwsze kłopoty

Posted on Mon 21 November 2005 in SGI O2 z OpenBSD • 3 min read

Zainstalowanie OpenBSD na Siliconowym O2 nie jest sprawą tak do końca trywialną, jak chcieliby ją przedstawić deweloprzy tego systemu. Właściwie mogę powiedzieć, że więcej pomógł mi przypadek i jedno krótkie zdanie niż dokumentacja.

Przygotowania do instalacji zacząłem od wypalenia płytki z obrazem ISO OpenBSD 3.8 dla platformy MIPS64. Zajęło mi to kilka minut bo obraz ma jakieś 8MB, za co należy się chwała deweloperom. Przy pierwszej próbie nauczyłem się, żeby nie oszczędzać i nie wypalać płytki na CD-RW bo stary CD z O2-ki nie czyta takich "dziwnych" wynalazków.

Wysmażyłem więc drugą płytkę już jak pan Bóg przykazał na normalnym CD i na najniższej, jaką się dało włączyć, prędkości. Po uruchominiu sprzętu, nacisnąłem Esc przy pierwszych komunikatach PROM i wybrałem opcję 2 czyli instalację oprogramowania z nośnika:

From the System Maintenance Menu, select '2' (or click on the appropriate icon if in graphics console) to Install System Software.

następnie instalkę z CD-ROM. System zbootował się i rozpocząłem instalację. Jedną z kilkunastu.

Nie ma to jak dokładne czytanie dokumentacji w pliku INSTALL.sgi znajduje się bardzo ważna sekcja, którą tu zacytuję:

Disk numbering

SGI numbers their disks 1-n depending on their position in the
backplane. For example, on the O2, the slot closest to the CPU
is numbered 1 and the next 2 if the CPU is a R5000. On R1x000
models, slot 1 is lost due to the larger heatsink on the CPU.
Normally the kernel translates the slot numbers to disk numbers
by subtracting 1 from the slot number, eg slot 1 becomes sd0.
However on an O2 with a R1x000 cpu, 2 is subtracted from the
slot number to compensate for the lost slot.
When the kernel searches for the boot device it uses the ARCBios
environment variable OsLoadPartition. Since the disk number in
the variable is the absolute number, in contrast to the kernels
relative numbers, the kernel will not be able to find the boot
device if the disk slots are not filled from the lowest and up.
An empty slot before the boot device will confuse the lookup.

Wyposażony w informację o problemach z numeracją dysków pomyślnie zainstalowałem OpenBSD. Gdy przyszło do pierwszego restartu okazało się, że nie tak znów pomyślnie. System zaiweszął się z następującym komunikatem:

Starting up the system...
Exception:
Status register: 0x34050082
Cause register: 0x8008
Exception PC: 0x0, Exception RA: 0x800103a8
Read TLB miss exception, bad address: 0x0
Saved user regs in hex (&gpda 0x81060d78, &_regs 0x81060f78):
arg: 81070000 0 81054780 8105ff60
tmp: 81070000 a13fb1ba a13fb0d4 7 a13fb0d0 1 2 3
sve: 81070000 409b2dfc 0 4604ae8d 0 40c987e5 0 3f3f7d8e
t8 81070000 t9 0 at 0 v0 40a3b3a4 v1 0 k1 1
gp 81070000 fp 0 sp 0 ra 0
PANIC: Unexpected exception

Z początku sądziłem, że przyczyną jest właśnie ta cholerna numeracja dysku. Zacząłem więc próbować różnych ustawień zmiennych OSLoadPartition i SystemPartition w PROM-ie. Nic to nie dawało.

Postanowiłem więc uniknąć problemu instalując OpenBSD na pierwszym dysku pierwszego kontrolera SCSI. Zrobiłem to ale efekt był identyczny: PANIC.
Wziąłem się za szukanie odpowiedzi w sieci i znalazłem jedną, jedyną wzmiankę, która zasugerowała mi w czym jest problem. Była to odpowiedź Bernd Ahlersa na email użytkownika, którego maszyna podobnie jak moja zawieszała się przy starcie. Jedno zdanie, które miało wymiar cudu:
I bet you've deleted the default p partition in disklabel. Don't do that.
Bernd
Bingo! Podczas instalacji należy za pomocą narzędzia disklabel stworzyć nową konfigurację dysku. Przy poprzednich próbach wykasowałem partycję "p", uznając ją za dodaną z difoltu czyli zbędną. Stworzyłem kilka partycji, oddzielnie dla poszczególnych systemów plików: /usr, /var/, /tmp, itd. I to okazało się błędem. Należało więc przywrócić partycję "p". Mogłem dodać ją ręcznie ale nie wiedziałem jakie powinny być jej parametry. Przy kolejnych próbach okazywało się, że disklabel już został zapisany trwale na dysku i proces instalacyjny nie dodaje mi już mojej upragnionej partycji "p". Tragedia!
Postanowiłem pójść po najmniejszej linii oporu i użyłem magicznego:
cat /dev/zero > /dev/sd0c
czyli zapisałem zerami początkowe sektory dysku, mając nadzieję, że przy okazji zniszczyłem zapis disklabela.
Tak się rzeczywiście stało. Przy kolejnej instalce disklabel stworzył mi partycję "p". Jej parametry są następujące:
#   size   offset        fstype
p: 3135           0  unknown    # Cyl     0 -     5*

czyli 5 cylindrów.

Ponownie skonfigurowałem dysk tworząc odpowiednie partycje, doprowadziłem instalację do końca i po restarcie wszystko zadziałało!

Do zapamiętania!

  1. Nie usuwaj partycji "p" stworzonej przez disklabel!
  2. Zawsze dodaj partycję "swap"!
  3. Instaluj system na pierwszym dysku pierwszego kontrolera SCSI, unikniesz grzebania w zmiennych ARCS (w PROM-ie)!