logo
Etusivu
Käsikirja
Opinnäytetyö
Tiedostot
Linkit
Muuta

LeHTori

Käsikirja

2 FreeBSD Käyttöjärjestelmä

2.1 Esitellään FreeBSD

2.2 Asennetaan FreeBSD

2.3 Yleistä UNIX järjestelmistä

2.4 Peruskomennot

2.5 Komentotulkit

2.6 Ohjelmien asentaminen ja päivittäminen

2.7 Käynnistysjonot

2.8 Asetustiedostot

2.9 Levykiintiö eli quota

2.10 FreeBSD:n kerneli

2.11 Yhteyden jakaminen NATD:llä

2.12 Palomuuriohjelmistot

2.13 Cvsup ja verkosta päivittäminen

2.14 Käyttöjärjestelmän päivittäminen

2.15 XFree86 Ikkunointijärjestelmä

2.16 Sysinstall Ohjelmisto

2.17 Yleisiä ongelmia

2.18 Muuta

2.19 Levyjärjestelmän laitteiden-nimet

3 Asennetut palvelinohjelmistot ja niiden käyttäminen

3.1 Samba ja toimialuepalvelin

3.2 Squid, Internetin välityspalvelin (proxy)

3.3 Apache, Web-palvelin

3.4 Postfix, Sähköpostipalvelin

3.5 Popd, Sähköpostin hakupalvelin

3.6 Openwebmail

3.7 Bind9, DNS-palvelin

3.8 OpenSSH

3.9 OpenSSL sertifikaatti


2.10 FreeBSD:n kerneli

Mikä on Kerneli?

Kerneli on elintärkeä ydin tietokoneesi käyttöjärjestelmässä, se tarjoaa perustoiminnot kaikkiin osiin käyttöjärjestelmääsi. Kernel sisältää ajurit, jolla tietokoneesi keskustelee eri laitteidesi kanssa, kuten äänikortit, kiintolevyt ja jne.

Mitä tarkoitetaan kernelin kääntämisellä?

Kernelin kääntämisellä tarkoitetaan järjestelmäsi ytimen asetusten, muokkaamista. Käytännössä tämä tarkoittaa, että ytimeesi lisätään tai poistetaan laitteiden "ajureita" tai erilaisia asetuksia.

Kääntäminen nopeasti: Ensiksi tehdään sopiva asetustiedosto, jonka jälkeen kääntäjällä käännetään lähdekoodisi binaariksi, mikäli kääntäminen onnistui. Asennetaan uusi kerneli, joka sisältää uudet asetukset.

FreeBSD:n kerneli pitää sisällään perusasetukset, mikäli haluat esimerkiksi tuen äänikortille suoraan kerneliisi. Sinun kannattaa kääntää ytimesi uudelleen.

Miksi kääntää kerneli uudelleen?

- Lisää laitetukea, laitteille jota voit tarvita
- Nopeampi käynnistys aika koneellesi
- Pienempi muistinkulutus, turha laite tuki pois.

Kuinka voin asentaa kernelin lähdekoodin kääntämistä varten tietokoneeseeni?

Ensimmäisen kerran käännettäessä kerneliä on helpoin asentaa lähdekoodi sysinstall ohjelmistolla

Ohje lähdekoodin sysintallilla hakemiseksi:

Käynnistä sysinstall /stand/sysinstall

Seuraa kuvia:

Valitse sys kohta välilyönnillä.

Tämän jälkeen järjestelmä kysyy sinulta mistä lähdekoodi asennetaan. Valitse mediaksesi sinulle sopivin (kernelin lähdekoodi tulee minimal cd:nkin mukana, ainoastaan bootonly ei sisällä lähdekoodia kernelistä). Helpointa on kuitenkin hakea se FreeBSD:n FTP palvelimelta.

Vinkkin!

Koko järjestelmän päivittäminen samalla, kun käännän kernelin.

FreeBSD:llä "maailman rakentaminen" eli järjestelmän lähdekoodi päivitys on myös joskus hyvä idea. Tällä toiminolla voit päivittää järjestelmäsi hakemalla uuden lähdekoodin ja kääntämällä sen vanhan järjestelmäsi päälle. Etuina ovat mm. RELENG_ versiot sisältävät valmiiksi kaikki tietoturva päivitykset, kyseiseen FreeBSD:n version lähdekoodin. Uusissa versioissa Kernelin laitetuki on parempi. Rakentamalla optimoidun järjestelmän voit saavuttaa lisää nopeutta sovellutustesi käyttöön.

Maailman yhteydessä rakennetaan ja asennetaan seuraavat: Järjestelmän ohjelmien uudet binaarit, korjaukset käynnistysjonoihin ja uusi kernel.

Lue lisää järjestelmän lähdekoodi päivityksestä

Mistä löytyvät kernelin asetustiedostot?

Kernelin oletus asetustiedosto löytyvät "/usr/src/sys/i386/conf/"

Yleistä: GENERIC tiedostossa löytyy GENERIC kernelin, asetukset. Olen muokannut itse GENERIC kernelin asetustiedosta sopivan asetustiedoston, josta olen kääntänyt myöhemmin kernelin.

Olen tehnyt kääntämisen helpottamiseksi valmiit malli asetustiedostot kuvauksineen. Tiedoston on tarkoitus helpottaa kääntämästäsi. HUOM tiedostot ei välttämättä sovellu koneesi asetuksille. Niiden tarkoitus on selventää FreeBSD kernelin asetustiedoston asetuksia!!

Käy laitteistosi asetukset huolella läpi ennen kuin käännät kernelisi, mikäli poistat kernelistäsi tärkeitä laitetukia, joita järjestelmäsi tarvitsi käynnistyäkseen. Voi olla ettei järjestelmäsi enää käynnisty tai esim. Verkko ei toimi.

Mistä tiedän mitä rivejä tarvitsen kerneliini?

dmesg komennolla löydät nykyisen järjestelmäsi lataamien laitteiden nimet, sekä tiedot. Esim. dmesg |grep laite. (Vinkki verkortin näkee nopeitin ifconfig komenolla).

Lisää rivejä löydät eri laitteille NOTES tiedostosta "/usr/src/sys/i386/conf/NOTES"

Hieman kernelin laitetuesta

Laitteiden tuki UNIX järjestelmissä ilmoitetaan piirin mukaan, tämä tarkoittaa käytännössä sitä, että laitteen Valmistajan nimellä ei ole väliä vaan piirillä jota laitteesi käyttää.

Vaihe 1

Tehdään muutokset kokoonpano tiedostoihin, joista muodostetaan myöhemmin käännettävä aineisto. Aloita kopioimalla cp GENERIC uusinimi tiedostoksi. Tämän jälkeen editoi uuden kernelisi asetustiedoston sisältö. Kaikki eivät välttämättä halua tietenkään karsia laitetukea kernelistään pois voit myös lisäillä sitä lisäämällä rivejä kernelin loppuun. Tämä sopii yleensä hyvin aloittelijoille, joille kaikki on vielä uutta ja outoa. Huom. älä editoi suoraan GENERIC tiedostoa sillä mikäli päivität lähdekoodiasi kaikki tiedostoon tekemäsi muutokset häviävät ja tiedosto korvataan uudella tiedostolla.

Esimerkki Kernelit

5.x "Muokkaamani asetustiedosto selityksineen 5.x FreeBSD:n kernelille" lataa tiedosto Huomio 5.3 FreeBSD:t sarjasta ylöspäin pcm ajuri muuttui nimelle sound, eli korja device pcm device sound:iksi . !!!!

4.x " Muokkaamani asetustiedosto selityksineen 4.x FreeBSD:n kernelille" lataa tiedosto. Toimii 4.8 sarjasta ylöspäin

Huom. Varmista, että esimerkkien kernelit sopivat koneesi laitteistolle.

Muutamia rivejä joita vakio kernelistä ei löydy, mutta joita olen itse käyttänyt

5.x Sarjan kernelistä löytyvät ominaisuudet.

device		acpi		#Acpi intel/Microsoft/Compaq/Toshiba kehittämä
				 virran hallitan
			 tuki 
options	ACPI_DEBUG	#virhe tilassa päälle acpi

Kaikkien FreeBSD:n sarjoista löytyvät ominaisuudet (4.8 sarjasta ylöspäin)

device		atapicam	#scsi emulaatio polttavalle cd/dvd asemalle
				 tarvitsee scsi väylän tuen (4.8 sarjan
				 FreeBSD:stä ylöspäin) ilman kernelin patchimistä.
device	pcm			#äänikortti tuki
options	QUOTA		#Levyrajoitukset käytettäväksi
options	COMPAT_LINUX	#Linux Emulaatio päälle
options	LINPROCFS	#Linux Procfs tiedostojärjestelmä
device		ehci		#USB 2 Väylän tuki Tarvitsee toimiakseen USB
				 väylän tuen
options	IPFIREWALL	#Ipfw palomuurin tuki
options	IPDIVERT	#Tuki Divert soketeille (Mahd. NATD:n)
options	DUMMYNET	#IPFW liikenteen rajoitin tuki

Lisää laitteita ja asetuksia löydät NOTES tiedostosta /usr/src/sys/i386/conf/ hakemistosta

Käännetään Kerneli

Yleistä: Varsinkin alkuun kun olet uusikäyttäjä FreeBSD:n kanssa. Törmäät usein ongelmiin kernelin kanssa, ennen kuin opit ymmärtämään FreeBSD:n kernelin idean ja toiminnan. Monelle Windows Käyttälle Kerneli tuntuu aivan uudelta asialta, koska Windows maailmassa kerneliä ei pääse näpelöimään, toisin kuin Unix järjestelmillä.

Kaksi vaihtoehtoa kääntää kerneli:

Traditionaalinen tapa

Traditionaalinen eli vanha tapa jossa kernelin asetustiedostosta muodostetaan "aineisto" config komennolla, jonka jälkeen rakennetaan varsinainen kerneli.

Uusi tapa

Järjestelmä muodostaa aineiston itse ja kääntää kernelin. Erona lähinnä traditionaaliseen tapaan on, ettei sinun tarvitse luoda config komenolla ensiksi käännettäviä asetustiedostoja. "Tokihan muitakin eroja löytyy

Virheistä yleisesti

Virheitä ilmaantuessa on hyvä lukea kääntäjän näyttämiä tapahtumia, siitä selviää yleensä virheen todellinen syy. Virheiden yleisin syy on käyttäjälle asetustiedostoon jääneet pienet virheet. Tavallisimpia tälläsiä virheitä ovat esim. USB ohjaimelle löytyvä tuki, mutta usb väylältä puuttuu tuki. "USB ohjain ja väylä tarvitsevat molemmat toisiaan toimiakseen"

Tarkemmin virheistä

Config Virheet

Vaiheeseen 3 ja uudella tavalla käännettävän kernelin perus config herjaukset

Pari tavallisinta virheilmoitusta esimerkkeinä, joita config komento antaa:
config: koe:2: syntax error

Tässä koe nimisessä kernel tiedostossa oli rivillä kaksi syntaksi virhe. Eli esim. kirjoitusvirhe jossakin sanassa.

koe: unknown option "acpi"

Kernelissäsi oli tuntematon option rivi. Eli option "acpi":tä ei ole olemassakaan. Tässä tapauksessa optionin pitäisi olla device acpi

config: Error: device "acpi_debug" is unknown
config: 1 errors

Kernelissäsi oli tuntematon device rivi nimeltä "acpi_debug" eli device acpi_debug:ia ei ole olemassakaan. Tässä tapauksessa meillä olisi tullut olla options ACPI_DEBUG

Ongelmatilanteita kernelin kääntämisen aikana

Vaiheisiin 4 ja 5 ja uudella tavalla käännettäessä tulevat kääntäjän antamat herjaukset

Käytätkö make.conf tiedostossa optimointeja -O2 -O3 ? nämä joskus jostain syystä särkevät jonkun laiteajurin koodia. Yleensä ongelmaa ei ole

Kernelissäsi on tuki jollekkin laitteelle, joka tarvitsee toista laitetta toimiakseen. Näissä tilanteissa joudut hieman lukemaan virheilmoitusta. Mahdolliset laiteisto riippuvuudet kuten "USB väylälle oleva tuki, mutta usb ohjaimen tuki puuttuu ja jne."

Esimerkki ongelma tilanne ja toinen laite tarvitsee toista:

ehci.o: In function `ehci_init':
ehci.o(.text+0x214): undefined reference to `usb_delay_ms'
ehci.o(.text+0x24f): undefined reference to `usb_delay_ms'
ehci.o(.text+0x320): undefined reference to `usb_allocmem'
ehci.o(.text+0x49c): undefined reference to `usb_delay_ms'
ehci.o(.text+0x50a): undefined reference to `usb_freemem'
ehci.o: In function `ehci_intr1': 
ehci.o(.text+0x610): undefined reference to `usb_schedsoftintr'
ehci.o: In function `ehci_pcd': 
ehci.o(.text+0x82d): undefined reference to `usb_transfer_complete'
ehci.o: In function `ehci_idone': 
ehci.o(.text+0x9c8): undefined reference to `usb_transfer_complete'
ehci.o: In function `ehci_waitintr': 
ehci.o(.text+0xa1c): undefined reference to `usb_delay_ms'
ehci.o(.text+0xa76): undefined reference to `usb_transfer_complete'
ehci.o: In function `ehci_allocm': 
ehci.o(.text+0xb03): undefined reference to `usb_allocmem'
ehci.o: In function `ehci_freem': 
ehci.o(.text+0xb24): undefined reference to `usb_freemem'
ehci.o: In function `ehci_allocx': 
ehci.o(.text+0xb6d): undefined reference to `M_USB'
ehci.o: In function `ehci_open': ehci.o(.text+0xd98): undefined reference to `usb_allocmem' ehci.o: In function `ehci_root_ctrl_transfer': ehci.o(.text+0x1040): undefined reference to `usb_insert_transfer' ehci.o: In function `ehci_root_ctrl_start': ehci.o(.text+0x1936): undefined reference to `usb_delay_ms' ehci.o(.text+0x1983): undefined reference to `usb_delay_ms' ehci.o(.text+0x1a79): undefined reference to `usb_transfer_complete' ehci.o: In function `ehci_root_intr_transfer': ehci.o(.text+0x1b40): undefined reference to `usb_insert_transfer' ehci.o: In function `ehci_root_intr_abort': ehci.o(.text+0x1bc2): undefined reference to `usb_transfer_complete' ehci.o: In function `ehci_alloc_sqh': ehci.o(.text+0x1c33): undefined reference to `usb_allocmem' ehci.o: In function `ehci_alloc_sqtd': ehci.o(.text+0x1d13): undefined reference to `usb_allocmem' ehci.o: In function `ehci_abort_xfer': ehci.o(.text+0x208d): undefined reference to `usb_schedsoftintr' ehci.o(.text+0x20d8): undefined reference to `usb_transfer_complete' ehci.o: In function `ehci_timeout': ehci.o(.text+0x2139): undefined reference to `usb_add_task' ehci.o: In function `ehci_device_ctrl_transfer': ehci.o(.text+0x2170): undefined reference to `usb_insert_transfer' ehci.o: In function `ehci_device_request': ehci.o(.text+0x2563): undefined reference to `usb_transfer_complete' ehci.o: In function `ehci_device_bulk_transfer': ehci.o(.text+0x2590): undefined reference to `usb_insert_transfer' ehci.o: In function `ehci_device_bulk_start': ehci.o(.text+0x2631): undefined reference to `usb_transfer_complete' ppc.o: In function `ppcintr': ppc.o(.text+0xeb1): undefined reference to `isa_dmadone' ppc.o: In function `ppc_write': ppc.o(.text+0x1052): undefined reference to `isa_dmastart' ppc.o(.text+0x10b4): undefined reference to `isa_dmadone' ppc.o: In function `ppc_attach': ppc.o(.text+0x1787): undefined reference to `isa_dma_acquire' ppc.o(.text+0x179a): undefined reference to `isa_dmainit' sio.o: In function `sioprobe': sio.o(.text+0x62c): undefined reference to `isa_irq_pending' sio.o(.text+0x7ec): undefined reference to `isa_irq_pending' sio.o(.text+0x810): undefined reference to `isa_irq_pending' sio.o(.text+0x850): undefined reference to `isa_irq_pending' *** Error code 1 Stop in /usr/obj/usr/src/sys/koe.c *** Error code 1 Stop in /usr/src. *** Error code 1 Stop in /usr/src.

EHCI olisi tarvinnut tukea usb väyllälle ja sio taas isa väylälle. Tiedostojen nimistä voi yleensä päätellä jo paljon ongelmallisista riveistä.

Traditionaalinen tapa:

editoituasi sinulle sopivan kernelin voit config komenolla muodostaa käännettävän aineiston ../compile/tiedostosi nimiseen kansioon, mikäli kaikki tiedostossasi on kunnossa. Tiedostosi virheistä config komento ilmoittaa millä rivillä virhe on korjaa virhe, jonka jälkeen uudelleen config.

Vaihe 2

Config komento ja sen käyttö:
config tiedostosi_nimi

Esim. onnistuneesta kokoonpanosta:
Kernel build directory is ../compile/koe
Don't forget to do a ``make depend''

tässä esimerkissä kernelin tiedoston nimi oli koe jolloin ../compile/koe kansio luotiin ja muodostettiin sinne käännettävä aineisto.

Vaihe 3

Siirrytään hakemistoon jossa aineistosi sijaitsee: eli Kernelin rakennus hakemistoon, josta compile imoitti onnistuneen
cd ../compile/kernelisi

Vaihe 4

Rakennetaan kaikki riippuvuudet kerneliisi:
make depend

Vaihe 5

Rakennetaan varsinainen kernelisi:
make

Vaihe 6

Asennettaan uusi kernelisi
make install

Vaihe 7

Käynnistetään koneesi uudelleen
reboot -n

"Uusi tapa" New WAY

Yleistä: FreeBSD 4.2 Versiosta lähtien on tullut mahdolliseksi kernelin kääntäminen myös uudella tavalla. Uudessa tavassa editoit Vaihe 1 mukaisesti uuden kernelisi asetustiedoston ja seuraat seuraavia ohjeita:

Huom. Asetustiedoston tulee löytyä /usr/src/sys/i386/conf/ polusta ja sinun tulee olla polussa /usr/src aloitettaessa kääntäminen.

Vaihe 2

Aloitetaan muokkaamasi asetustiedoston rakentaminen KERNELIKSI.
make buildkernel KERCONF=asetustiedosto

Onnistunut kääntö ilmoitetaan seuraavasti:


--------------------------------------------------------------
>>> Kernel build for koe completed on Sun May  2 13:30:07 EEST 2004
--------------------------------------------------------------

Ongelmia Kääntämisessä

Huom. mikäli kääntämisesi pysähtyy heti alkuun ja saat ilmoituksen config errorista tai vastaavasta lue Traditionaalisen tavan vaihe 2. Kernelisi asetustiedosta löytyy virhe.

Esimerkki virhe ilmoitus kuinka make buildkernel ilmoittaa Config tiedostossa olevasta syntaksi virheestä. Lue lisää Config virheistä

config: /usr/src/sys/i386/conf/koe:280: syntax error
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

Muut virheet: Lue kappale ongelma tilanteita kernelin kääntämisen aikana

Vaihe 3

make installkernel KERNCONF=asetustiedosto

Mitä jos jokin meni pieleen eikä järjestelmäsi käynnisty enää tai jokin laite ei toimi?

Kuinka voin ladata vanhan kerneli:n?

5.x Versiot FreeBSD:stä:


mukaan valitse 6 eli loader prompt

kirjoita:
load kernel.old

tämän jälkeen käynnistyksen yhteydessä vanha kernelisi latautuu uudestaan.

4.x Versiot FreeBSD:stä

Käynnistyksen yhteydessä välilyönti näppäintä ennen (ennen kuin kernelisi ladataan):
load kernel.old

Vanhan kernelin takaisin vaihtaminen

5.x
rm -rf /boot/kernel poistetaan kerneli
mv /boot/kernel.old /boot/kernel nimetään vanha kerneli uudeksi

4.x
rm -rf /kernel poistetaan kerneli
mv /kernel.old /kernel nimetään vanha kerneli uudeksi

Hieman virheen analysoinnista:

Yleistä: Mikäli sinulla on ongelma joka liittyy käynnistykseen tai jonkun laitteen toimintaan. Lue tarkkaan mahdolliset virheilmoitukset niistä yleensä selviää mikä laite aiheuttaa ongelman ja mistä se mahdollisesti johtuu. Seuraavassa tyypillisempiä ongelmia kun laitetta ei löydy tai jokin ei toimi.

Laitetta ei löydy

Näppäimistö:

PS/2 jätitkö näppäimistö ohjaimen tai tuen näppäimistölle pois? "
USB väyläiset näppäimistöt tarvitsevat tuen usb väylälle ja USB näppäimistölle. Käynnistyykö usb daemonisi ? löytyykö usb ohjaimesi kernelistäsi.

Hiiri:

Ps/2: Jäikö Ps/2 hiiren tuki vahingossa pois? Käynnistyykö Moused ?
USB:Jäikö tuki USB väylälle pois tai USB hiirelle ? käynnistyykö usbd ?
SARJA hiiri: Muistitko jättää sarjaportille tuen kerneliin? Onko sio pois käytöstä ?

Verkkokortti:

Löytääkö ifconfig komento laitettasi, mikäli ei löydä verkkokortin ajuri ei ole kernelissä mukana.

Kiintolevy:

kiintolevysi löytyvät, mutta juuriosio ei suostu kiinnittymään yleinen syy on että ufs tiedosto järjestelmän tuki on karsittu pois tai tiedostojärjestelmän tuki jota käytät juuri osiollasi.

Mounting root from ufs:/dev/kiintolevysi jälkeen kernelin tiedot ovat ladattu alkaa vaihe jossa ajatetaan fsck ynnä muut.

Usein käynnistys tyssää kohtaan jossa pääosio ei suostu kiinnittymään. Kyseessä ei ole kuitenkaan ongelma joka johtuisi kernelistä. Vaan ongelma johtuu siitä ettei tiedostojärjestelmä tullut puhtaaksi fsck:ta ajatettaessa tällöin sinun täytyy puhdistaa tiedostojärjestelmäsi itse fsck komennolla. Komento kyselee yleensä tehtävistä korjauksista.

siirry single tilaan hyväksymällä /bin/sh shelliksesi ja kirjoita fsck komento.

käynnistä koneesi uudelleen.

Kernel panics "paniikit":

Kernel paniikit ovat harvinaisia ja niitä syntyy vain kun järjestelmäsi suorittaa vakavan virheen ytimessään eikä voi toipua siitä. Ota laitteen tiedot ylös ja mieti mahdollisia asetuksia joita, muutit sille.

daemon

Tero Asikainen, Mika Mähönen ja Markku Hämäläinen