30.7.2004

BADBLOCKS A INSTALACE FREEBSD KROK ZA KROKEM

Filed under: FreeBSD — nax @ 21:39

Předevčírem se mi nějak sesypal disk. Prostě jsem chtěl nainstalovat zdrojáky BSD podle návodu na instalaci FreeBSD sekce H, dal jsem po příslušné úpravě:

cvsup /usr/standard-supfile

no a zrovna když jsem na druhé konzole měnil CFLAGS v make.conf na něco přesně pro Crusoe, tak koukám že nějak moc hrabe disk. Přepnul jsem se na první disk (tam se ty zdrojáky už stahovali minimálně půl hodiny) a jádro tam vypisovalo nějaké errory o disku (moc jsem to nezkoumal, ale nevypadalo to zrovna na nedostatek místa na disku). Když jsem zmáčkl Ctrl+C tak to skončilo s kernel panic. Po rebootu to vždy vyhodilo po připojení partitions kernel panic a šlo to do rebootu a jediné kdy to neudělalo, když jsem dal boot do jednouživatelského režimu.

fsck -y

sem dát musel, protože to házelo opravdu tuny chyb a já sem při tom začínal tušit že s touhle instalací se můžu rozloučit. Sice jsem zkusil nabootovat po tom co to opravilo všechny nesrovnalosti, ale potvrdili se moje nejhorší obavy: nedalo se ani přihlásit (psalo to že chybí nějaká důležitá knihovna).

Měl jsem strach, že v tom notebooku je špatný disk a tak jsem se odhodlal otestovat zápisovým testem ten disk. Našel jsem k tomu hezký návod Testing your hard drive in Linux. Nabootoval jsem tedy z výborného hypermini CD (velikosti vizitky) distribuce BBC LNX a použil jsem tohle:

badblocks -b 4096 -p 3 -c 8000 -w -s /dev/hda1

POZOR! Tohle je destruktivní test, kdy se na disk zapisuje a pak se z něho čte a zjišťuje se jestli je to to co se tam zapsalo. Jak jsem dospěl k hodnotě parametru c? Inu pomocí free jsem si zjistil že mám volných zhruba 70MB RAM, a vypočítal jsem to následovně:
70M /( 2 * 4096 )
V podstatě je žádoucí aby to číslo bylo co nejvyšší aby test trval co nejkratší dobu. Na tom mém notebooku to trvalo řádově hodiny, s tím že ten test proběhl celkem asi 12x.

No a před chvílí jsem se pustil do instalace nového FreeBSD a napadlo mě, že si krok za krokem zaznamenám svůj postup:

* boot 5.2.1-RELEASE-i386-miniinst.iso CD a pak vyndĂĄnĂ­ PCMCIA CD-ROM a mĂ­sto nĂ­ do dĂĄt wifi sĂ­ĹĽovku (jen připomĂ­nĂĄm, Ĺže mĂĄm jen jeden PCMCIA slot). FreeBSD kernel se s ztrĂĄtou jednoho řadiče a objevenĂ­ se onovĂŠ karty vyrovnĂĄ Ăşplně ukĂĄzkově – jen na druhĂŠ konzoly vypĂ­ĹĄe informaci co se stalo a co je to za kartu) je potřeba v Options na volbě Re-scan Devices stisknout mezernĂ­k, aby o novĂŠ kartě vědělo nejen jĂĄdro, ale i ten instalačnĂ­ program běžícĂ­ v userspace.

* Volba Expres setup a na celĂŠ prvnĂ­ polovině disku vytvořit BSD slice (od 63 do 11791583 bloku) celkem 11791521 bloku velkou a typu 165 (obě ty volby mi samozřejmě nabĂ­dlo protoĹže jsem na začátku druhĂŠ poloviny disku měl jiĹž vytvořenou partition pro hibernaci typu 160 – thinkpad hibernation partition).

* Zvolil jsem u výběru co s MBR volbu Standard (druhá v pořadí) aby jen čistě bootoval BSD (na druhé půlce disku chci nainstalovat časem Gentoo a finálně se bude o MBR starat lilo). Při první instalaci jsem zvolil BootMgr (první volbu) ale to má za následek, že tem boot manager vám na začátku nabídne boot ze všech primary partitions (takže je tam vidět i ta hibernační, ale bootovat z ní nejde).

* Tu půlku disku (tedy asi 6GB) sem rozdělil následovně:
ad0s1a / 500M
ad0s1b swap 250M (mĂĄm 128MB RAM, ale 20 z toho zabere procesor pro sw emulaci i386)
ad0s1d /var 200M
ad0s1e /usr zbytek

* Zvolil jsem Minimal a v Custom pak ještě man a info (kromě toho co už bylo vybráno)

* NĂĄsledoval vĂ˝běr mĂŠdia. ProtoĹže jsem doma za firewallem (a nějak jsem se jeĹĄtě pořád nedostal k tomu, abych na serveru rozběhal modul do jĂĄdra umoŞňujĂ­cĂ­ i přes to pouŞívat aktivnĂ­ reĹžim ftp) zvolil jsem FTP passive. Z nabĂ­dnutĂ˝ch serverĹŻ jsem vybral ftp.cz.freebsd.org (3xPgDown) a jelikoĹž jsem udělal po vloĹženĂ­ karty ten Re-scan v Options, tak z nabĂ­dnutĂ˝ch interfacĹŻ vyberu wi0 (btw jako sĂ­ĹĽovĂ˝ interface je tu i firewire – ĹĄkoda Ĺže nemĂĄm v nějakĂŠm počítači druhĂ˝ takovĂ˝ port). Pak stačilo donastavit jmĂŠno a domĂŠnu stroje a uĹž se to instalovalo.

* Po stáhnutí a rozbalení balíků (probíhá automaticky) jsem dal rovnou reboot. Nějak dlouho to vyselo na úvodní obrazovce (bios se zřejmě se ztrátou řadiče nevyrovnal tak hladce jako freebsd) tak jsem to vypnul a znovu zapnul tlačítkem power. Teď už naběhlo samotné freebsd.

* Přihlásil jsem se (při prvotním nastavení systému root nemusí zadat heslo) a hned jsem podle článku na rootu změnil v /etc/login.conf hodnotu :passwd_format na blf. Podle autora článku je to nejsilnější šifrování. Zbytek jsem nechal tak jak je a nastavil jsem heslo roota:
passwd root

* Nainstaloval jsem bash, openssh, screen, wget a cvsup-without-gui
pkg_add -r bash openssh screen cvsup-without-gui

* Změnil jsem default shell roota na svůj oblíbený bash a pro jistotu taky směnil shell druhého roota s názvem toor na /bin/csh (protože bash je jako program externí nainstalovaný v /usr/local/bin/ tak aby se alespoň jeden root mohl přihlásit kdyby se z nějakého důvodu nenamountil svazek /usr)
pw user mod root -s /usr/local/bin/bash
pw user mod toor -s /bin/csh
passwd toor

* Přidal jsem obyčejnĂŠho uĹživatele nax patřícĂ­ho do skupiny wheel (protoĹže jen uĹživatelĂŠ z tĂŠto skupiny mohou udělat su – a tĂ­m se povýťit na roota). Stačí adduser a pak se vĂĄs to postupně zeptĂĄ na vĹĄe potřebnĂŠ.

* Do souboru /etc/rc.conf jsem přidal řádky:
sshd_program=”/usr/local/sbin/sshd”
sshd_enable=”YES”
a pustil /etc/rc.d/sshd start

* Podle již jednou zmíněného článku na rootu jsem vytvořil vše potřebné na sledování změn v konfiguračních souborech:

# mkdir /etc/RCS
# ci /etc/rc.conf
/etc/RCS/rc.conf,v < -- /etc/rc.conf enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >> defaultni /etc/rc.conf s pridanymi vlastnostmi na start sshd
>> .
initial revision: 1.1
done
# co /etc/rc.conf
/etc/RCS/rc.conf,v –> /etc/rc.conf
revision 1.1
done

* Udělal jsem další úpravy do rc.conf ale nejdřív ho vytáhnu ze správy RCS:
# co -l /etc/rc.conf
font8x14=”iso02-8×14″
font8x16=”iso02-8×16″
font8x8=”iso02-8×8″
nfs_server_enable=”NO”
sendmail_enable=”NO”
syslogd_enable=”YES” # Run syslog daemon (or NO).
syslogd_flags=”-ss” # Syslogd flags to not bind an inet socket
clear_tmp_enable=”YES” # Clear /tmp at startup.
moused_enable=”YES”

a po změně tyto zase commitnou:
# ci /etc/rc.conf
Když bych chtěl pak někdy obnovit stav před změnou, tak napíšu:
# co -u /etc/rc.conf

* Vytvořil jsem nový soubor /etc/sysctl.conf s tímto obsahem:
hw.acpi.power_button_state=S5
hw.acpi.sleep_button_state=S4
hw.acpi.lid_switch_state=S4
hw.acpi.standby_state=S4
hw.acpi.suspend_state=S3

* Do souboru /etc/profile jsem si nastavil PS1 (aneb jak bude vypadat vĂ˝zva bashe (mĂĄm pravidlo, Ĺže na kaĹždĂŠm počítači kterĂ˝ spravuji musĂ­ vypadat vĹždy vĂ˝zva shellu jinak – z bezpečnostnĂ­ch dĹŻvodĹŻ: ono zahaltovat ĹĄpatnou maĹĄinu nenĂ­ vĹždy OK)

* Podle MadPenguin FreeBSD Install Guide jdu na kompilaci world:
# cp /usr/share/examples/etc/make.conf /etc/make.conf
# cp /usr/share/examples/cvsup/standard-supfile /usr
# cp /usr/share/examples/cvsup/ports-supfile /usr
# chmod u+w /etc/make.conf /usr/standard-supfile /usrrts-supfile
Pak jsem nastavil v souboru /etc/make.conf
CPUTYPE=i686
CFLAGS= -Wall -pipe -mpreferred-stack-boundary=2 -falign-functions=0 -falign-jumps=0 -falign-loops=0 -O2 -fomit-frame-pointer
Zhruba s těmahle CFLAGS se totiž kompiluje linuxový kernel, když je zaškrtnuté aby byl optimalizován pro procesor Transmeta Crusoe. No a vzhledem k tomu, že Linus Tornvalds, který je otcem a hlavním vývojářem jádra donedávna pracoval právě pro Transmetu myslím, že není lepšího místa než právě tady pro získání optimálního CFLAGS. Jen jsem musel odendat volby:
-msoft-float -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
protože způsobovali pád u některých aplikací z buildworld.

Comments are closed.

Powered by WordPress