Subsections

Debian GNU/Linux върху SGI MIPS (netboot)

Хардуер

Описаната тук процедура е проведена с:

 ARCH: SGI Indy (SGI-IP22) 
  CPU: MIPS-R4600 V2.0 FPU V2.0 / 100.00 MHz (big endian)
  RAM: 61100032 bytes
 ETH0: SGI Seeq8003
SCSI0: SGI WD93 WD33c93B/13
  SDA: SGI Model: IBMDSAS-3540 (548 MB)
  SDB: HP Model: 1.050 GB #A1 (1050 MB)

По принцип би трябвало със машини от същия модел (Indy) да няма особенни разлики. Предстоят тестове с още няколко машини -- Indy, O2 (FIXME)

SGI INDIGO (моето е с R4000 процесор) за момента не се поддържа (IP-20), но се работи по въпроса, да се надяваме че скоро.. :-)

инсталацията засега е на фаза "`console"' и не включва подкарване на X (FIXME)

Документация

Начало на инсталацията

Изтеглете kernel-а. За съжаление ftp.bg.debian.org не съдържа disks-mips)

boot server: Ще ви трябва още една машина (no matter arch), за да направите инсталацията (моята е Debian в/у i386, т.e. десктоп PC-то ми), като на нея в кернела трябва да имате:

#
# Networking options
#

CONFIG_PACKET=y
CONFIG_FILTER=y

Пак на същата сервизна машина инсталвате DHCP и TFTP демони:

# apt-get install dhcp tftpd

По време на power-on boot на Indy-то има един кратък момент в които се вижда едно бутонче "`stop for maintenance"'. Натискате го и ви излиза системното меню на Indy-то със следните опции:

Start System
Install System Software
Run Diagnostics
Recover System
Enter Command Monitor
Select Keyboard Layout

Е, поне на моето Indy са тези, ще видим по другите SGI машини. (FIXME)

Диагностиката винаги е препоръчителна :) но в случая избирате "`Enter Command Monitor"' и ще ви излезе един промпт, който предлага някои интересни възможности (вж. "`help"')

пишете printenv и си записвате MAC адреса на мрежовата карта на Indy-то. В моя случай -- eaddr=08:00:69:08:28:CA.

Забележка: Ако Indy-то има работеща операционна система преди нашата намеса (примерно някоя версия на IRIX), MAC адреса може да се вземе и като се ping-не машината и после се разгледа arp-таблицата... въпрос на вкус.

На сервизната машина описваме в /etc/dhcpd.conf запис за Indy-то:

---
subnet 192.168.1.0 netmask 255.255.255.0 {}

# Entry for Indy-1 (zirakzigil)

host zirakzigil {
        hardware ethernet 08:00:69:08:28:ca;
        fixed-address 192.168.1.5;
        option host-name "zirakzigil";
        option domain-name-servers 192.168.1.1;
        option routers 192.168.1.1;
}
---

Като параметрите имат следния смисъл:

За повече подробности вижте в dhcpd.conf(8).

Забележка: В случая съм използвал фалшиви IP адреси, но това не значи, че не могат да се ползват и истински. И в двата случая обаче е добре да има изградена мрежова структура (т.е. на IP-то на DNS-a наистина да има DNS, и gateway-я да работи като gateway :)

Изпълнявате на сервизната машина:

# echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc

за подробности: <kernelsource>/Documentation/filesystems/proc.txt, lkml, google

След което си пускате DHCP сървъра:

# /etc/init.d/dhcpd start

Забележка: Ако в мрежата имате друг DHCP сървър, бъдете осторожни :)

Следваща стъпка: редактирате си /etc/inetd.conf файла и добавяте нещо от рода на:

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot

Като /tftpboot е директорията, в която ще седят boot-image-ите (в нашия случай за Indy-то). Подробности: inetd.conf(8), tftpd(8), tftp(1), inetd(8).

След което (ре)стартирате inetd:

# /etc/init.d/inetd stop
# /etc/init.d/inetd start

или

# kill -HUP `ps auwx |grep inetd |grep -v grep |awk '{print $2}'`

Ако трябва да рестартирате inetd на машина, която не е debian.. но след като сте тръгнали да четете тази документация, предполага се, че сте Debian Zealot :-)

Забележка: Лично мнение: с изключение на случаи като този (примерно инсталация на машина, която се нуждае от tfptd или някаква друга специфична inetd услуга) по-добре е да нямате пуснат inetd. Един service по-малко, малко по-спокоен сън :) Все пак, въпрос на личен избор и конкретна ситуация.

Копирате кернела за Indy-то в /tftpboot.

Обратно на Indy Command Monitor промпта пишете:

# setenv netaddr $IP

Като на мястото на $IP слагате IP-то, което трябва да има Indy-то. В моя случай: 192.168.1.5.

bootp()/tftpboot/tftpboot.img

натискате Enter и сте в бизнеса :)

Забележка: добре е да хвърлите един поглед на /var/log/messages за възможни грешки, ако нещо не е наред, да проверите какви са permission-ите на /tftpboot и /usr/sbin/tcpd.

Основни конфигурации

След като кернелът вече е тръгнал и гледаме debian-installer-а на екрана, инсталацията продължава почти като на i386 архитектура. Можете да спрете вече dhcpd и inetd сървърите, няма да ви трябват повече.

Следва избор на клавиатура и partitioning на диска или дисковете. Лично аз съм фен на класическия вариант с command-line fdisk(8), така че отиваме на втората конзола (Alt-F2) и започваме:

Едно бързо dmesg, за да видим какво си е намерил кернела. Ако има нещо важно за процеса на инсталация, което е изпуснато (хардове, мрежова карта, etc.), ще трябва да си търсим или правим друг boot image, което ще го опишем в някоя от следващите версии (FIXME).

В моя случай съм малко зле с обема на дисковете (1x 500MB и 1x 1GB) така че ще разхвърляме различните partition-и на двата диска. След като изтрием (по стандартния за fdisk начин :) всички дялове останали от добрия стар IRIX, имаме нещо от рода на:

# fdisk -l /dev/sda
Disk /dev/sda (SGI disk label): 3 heads, 108 sectors, 3314 cylinders
Units = cylinders of 324 * 512 bytes

----- partitions -----
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----
[...other info here... :-)]
#

тука идва tricky part: Indy-то е Big-Endian машина, така че нещата са малко по-различни от добрия стар i386 (BIOS, MBR, partition table) и в частност ще трябва да направим disklabel.

Първо една бърза сметка: 3 heads * 108 sectors * 3314 cylinders * 512 bytes = 549752832 bytes (524MB), колкото е обема на първия ми диск. Направете два дяла (root+swap) с големина по ваш избор, те не са важни, ще ги използваме само за пример. Ако се съгласите с default-ната стоиност за начален цилиндър на първия дял (т.е. 5-ти цилиндър) и след това си направите още един дял, освен тези sda1 и sda2, ще имаме още два записа в "`partition"' секцията на изхода от командата p на fdisk-a, а примерно:

Pt# Device    Info   Start End     Sectors  Id  System
----------------------------------------------------------
 9: /dev/sda3        0     4       1620     0   SGI volhdr
11: /dev/sda4        0     3313    1073736  6   SGI volume

Приятният момент е, че не трябва да правите на ръка тези два дяла. fdisk (донякъде) ще ги направи вместо вас. Изтриваме всички partition-и от таблицата и започваме наново:

n за нов partition и като ви попита за начален цилиндър на дяла, кажете 101. По този начин цилиндри от 0 до 100 ще бъдат заделени за volume header-a, което са си точно 101 цилиндъра. От там нататък създаваме този дял (sda1) по стандартния начин, като имате предвид че това трябва да ви бъде Linux native дяла (root), и чак след него трябва да е swap дяла. В моя случай на първия ми диск (524MB) нямам много място, така че ще се огранича само с root+swap. Тук е момента за още малко математика:

Имам около 64 MB RAM и искам да си направя swap дял 128 MB. (Доброто старо правило swap-a да е 1x или 2x обема на паметта. Да не говорим че в някои други UNIX-и е почти задължително swap-a да е минимум колкото паметта на машината, иначе ако параметъра swapmem_on е сетнат на 0-а, което осигурява директен mapping м/у паметта и swapa, за да се избегнат по-тежките операции по адресиране на паметта и за да се спести памет от т.нар. псевдо swap, OS-а ще ползва толкова RAM, колкото е голям swap дяла. Long story short: правете си swap дяла поне два пъти колкото RAM-a, изгражда полезни навици.

И така: 128 MB = 134217728 bytes = 262144 sector-а ни трябват за този дял. 262144 / 324 сектора на цилиндър = 809 цилиндъра. Дискът ни има 3314 цилиндъра и ако сложим swap дяла последен, той ще заема цилиндри от 2505 до 3314, което означава, че root дяла трябва да е до 2504-ти цилиндър, което въвеждаме на промпта на fdisk, който още ни чака :)

Следваща стъпка: изтриваме sda9 (volume header-a) и го правим наново пак като sda9 (9-ти partition) с цилиндри от 0 до 100. След това създаваме sda2 със цилиндри от 2505 до 3314, така че накрая имаме:

Pt# Device    Info   Start End     Sectors  Id  System
----------------------------------------------------------
 1: /dev/sda1 boot   101   2504    778896   83  Linux native
 2: /dev/sda2 swap   2505  3313    262116   82  Linux swap
 9: /dev/sda3        0     100     32724     0  SGI volhdr
11: /dev/sda4        0     3313    1073736   6  SGI volume

Лека проверка с v (нямаме неалокирани сектори), w (записваме таблицата на диска и излизаме). В моя случай продължавам с fdisk /dev/sdb, тъй като искам да си направя дялове за /var, /usr и /home. Тъй като този диск не е boot-able, тук нещата са по-прости: създавам си три дяла набързо и имам:

# fdisk -l /dev/hdb
Disk /dev/sdb: 33 heads, 61 sectors, 1019 cylinders
Units = cylinders of 2013 * 512 bytes

Device    Boot  Start  End   Blocks id System
-------------------------------------------------
/dev/sdb1       1      261   262666 83 Linux        (за /home)
/dev/sdb2       262    522   262696 83 Linux        (за /var)
/dev/sdb3       523    1019  500230 83 Linux        (за /usr)

Записваме таблицата с w и се връщаме обратно на първа конзола (Alt-F1).

ВНИМАНИЕ: Описаните по-горе стойности на цилиндри, глави, сектори и така нататък се отнасят конкретно за моите дискове и служат само за пример как трябва да проведете нещата при вас. С изключение на случая, когато имате точно същите дискове (много малко вероятно), тези стойности са напълно неприложими за вашата инсталация, и трябва да пресметнете всичко спрямо вашите параметри.

Продължаваме инсталацията по нормалния начин (указвайки кои са ни root и swap дяловете). Инсталационната програма конкретно при мен не поиска да си намери дяловете на /dev/sdb, така че пак във втора конзола им направих файлови системи (ext3, както и root дяла), дори и така не пожела да ги mount-не през инсталера. Конкретно аз се отказах да пробвам да ги mount-на на ръка в /target, където им е мястото, и оставих тази част за после, инсталирайки само в sda1.

Довършителни процедури

Следващата стъпка е инсталация на кернел върху новата машина: избираме "`from internet"' (FIXME: описание на инсталация от NFS). Настройваме "`network settings"' (или си пускаме пак DHCP сървъра на сервизната машина и му казваме да ползва DHCP). Въпрос на вкус и възможности е от къде ще дръпне кернела и драйверите, аз се съгласих с default-ната стойност http://http.us.debian.org:80. Добрата новина тук е, че http://ftp.bg.debian.org съдържа binary-mips, така че нататък инсталацията ще върви по-бързичко :) За съжаление другият Debian mirror в България, http://debian.ludost.net, засега mirrorва само i386 и source. След конфигуриране на drivers (ако имате нужда) следва инсталацията на Base System по познатия начин от http://ftp.bg.debian.org/debian, като не трябва да се забравя proxy-то (a тъй като аз имам машина с apt-proxy(8) и това е второто Indy което инсталирам, нещата вървят доста бързичко -- въпрос на network setup и bandwidth, както винаги)

Следват make system bootable, и още малко настройки в Command Monitor-a на Indy-то:

setenv OSLoader linux
setenv SystemPartition scsi(0)disk(X)rdisk(0)partition(8)
setenv OSLoadPartition /dev/sda1

Където X е SCSI id-то на /dev/sda диска (това ще ви го каже накрая инсталационната програма).

Чрез едно dmesg(8) на втората конзола преди да reboot-нем виждаме (в моя случай):

Attached scsi disk sda at scsi0, channel 0, id 1, lun 0

Така че при мен настройките трябва да са:

setenv OSLoader linux
setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)
setenv OSLoadPartition /dev/sda1

Boot-ваме, следва base-config(8), т.е. процедираме по стандарния начин за Debian, описваме си apt-sources, и аз лично се лишавам както от услугите на dselect, така и от тези на tasksel, като предпочитам нататък да си инсталирам на ръка. Завършваме с base-config-а по традиционния начин.

Препратки:



Nikola Antonov 2004-10-31