--- title: FreeBSD gyorstalpaló Linux® felhasználók számára authors: - author: Ferrell, John copyright: 2008 A FreeBSD Dokumentációs Projekt trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"] --- = FreeBSD gyorstalpaló Linux(R) felhasználók számára :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :images-path: articles/linux-users/ ifdef::env-beastie[] ifdef::backend-html5[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] :imagesdir: ../../../images/{images-path} endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [.abstract-title] Kivonat Ez a cikk azért íródott, hogy röviden megismertesse a FreeBSD alapjait a középhaladó-haladó Linux(R) felhasználókkal. _Fordította: Páli Gábor, utolsó ellenõrzés: 2010.11.28._ ''' toc::[] [[intro]] == Bevezetés Ebben a leírásban a FreeBSD és a Linux(R) közti alapvetõ eltéréseket igyekszünk szemléltetni, aminek révén a középhaladó és haladó Linux(R) felhasználók pillanatok alatt bepillantást nyerhetnek a FreeBSD alapjaiba. Ez egyszerûen csak egy szakmai jellegû bevezetés, és nem foglalkozik a két rendszer felépítése közti "filozófiai" különbségekkel. A leírás feltételezi, hogy korábban már telepítettük a FreeBSD rendszert. Amennyiben ezt még nem tettük volna meg, vagy segítségre lenne szükségünk a telepítésben, akkor olvassuk el a FreeBSD kézikönyv extref:{handbook}install[A FreeBSD telepítése, install] címû fejezetét. [[shells]] == Parancsértelmezõk: hova tûnt a Bash? A Linuxról áttérõ felhasználók gyakran meglepõdnek azon, hogy a FreeBSD-ben nem a Bash az alapértelmezett parancsértelmezõ. Sõt, a Bash még az alaprendszerben sem található meg. Helyette a man:tcsh[1] az alapértelmezett parancsértelmezõ a FreeBSD-ben. Természetesen a Bash, a többi szintén közkedvelt parancsértelmezõhöz hasonlóan megtalálható a FreeBSD <>. Ha más parancsértelmezõket is telepítettünk, akkor a man:chsh[1] parancs segítségével tudjuk megváltoztatni az alapértelmezett parancsértelmezõnket. A `root` felhasználó alapértelmezett parancsértelmezõjének megváltoztatását azonban nem javasoljuk. Ennek oka, hogy azok a parancsértelmezõk, amelyek nem részei az alaprendszernek, általában a [.filename]#/usr/local/bin# vagy a [.filename]#/usr/bin# könyvtárakban találhatóak, és bizonyos vészhelyzetekben elõfordulhat, hogy ezeket az állományrendszereket nem tudjuk csatlakoztatni. Ilyen esetekben a `root` sem lesz képes elérni a saját alapértelmezett parancsértelmezõjét, amivel lényegében megakadályozzuk, hogy be tudjon jelentkezni. Erre a célra a `root` felhasználó egy alternatíváját, a `toor` felhasználót hozták létre, amelyet az alaprendszeren kívül található parancsértelmezõkkel is használhatunk. A extref:{faq}[toor hozzáférésérõl, TOOR-ACCOUNT] a GYIK biztonsági kérdésekkel foglalkozó részében tudhatunk meg többet (angolul). [[software]] == Csomagok és portok: szoftverek telepítése FreeBSD alatt A szoftverek telepítésének hagyományos UNIX(R)-os megoldásain (a forrás letöltésén, kitömörítésén, a forráskód módosításán és lefordításán) túl az alkalmazások telepítésének további két módját is felkínálja a FreeBSD: ezek a csomagok és a portok. A rendszerhez elérhetõ összes port és csomag teljes listáját http://www.freebsd.org/ports/[ezen] a címen érhetjük el. [[packages]] === Csomagok A csomagok lényegében elõre lefordított alkalmazások, amelyek megfelelnek a Debian/Ubuntu rendszerekben megtalálható [.filename]#.deb#, vagy a Red Hat/Fedora rendszerekben megtalálható [.filename]#.rpm# állományoknak. A csomagok a man:pkg_add[1] segítségével telepíthetõek. Például az alábbi parancs az Apache 2.2 alkalmazást rakja fel: [source,shell] .... # pkg_add /tmp/apache-2.2.6_2.tbz .... Az `-r` kapcsolóval arra utasítjuk a man:pkg[add] programot, hogy magától töltse le és telepítse a csomagot, valamint annak függõségeit: [source,shell] .... # pkg_add -r apache22 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache22.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8_1.tbz... Done. [nyissz] To run apache www server from startup, add apache22_enable="YES" in your /etc/rc.conf. Extra options can be found in startup script. .... [NOTE] ==== Ha a FreeBSD valamelyik kiadását használjuk (6.2, 6.3, 7.0 stb., tehát CD-rõl telepítettük), akkor a `pkg_add -r` az adott kiadáshoz tartozó csomagokat fogja letölteni. Ezek a csomagok azonban _nem feltétlenül_ az alkalmazás legújabb verziójához tartoznak. Ezt az alapértelmezett viselkedést felül tudjuk bírálni, ha a `PACKAGESITE` környezeti változót az link:ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/[ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/] értékre állítjuk, és így például a 6.X sorozathoz készült legfrissebb csomagokat tölthetjük le. A FreeBSD különbözõ változatairól a link:{version-guide}[Válasszuk ki a nekünk igazán megfelelõ FreeBSD verziót!] címû cikkben olvashatunk bõvebben. ==== A csomagok használatával kapcsolatban a FreeBSD kézikönyvében kaphatunk részletesebb felvilágosítást, lásd extref:{handbook}ports[A csomagrendszer használata, packages-using]. [[ports]] === Portok A FreeBSD-ben az alkalmazások telepítésének másik módja a Portgyûjtemény használata. A Portgyûjtemény lényegében [.filename]#Makefile# állományok és javítások gyûjteménye, amelyek a különféle alkalmazások forráskódját készítik fel arra, hogy a FreeBSD-n is használhatóak legyenek. Amikor telepítünk egy portot, akkor a rendszer elõször letölti az alkalmazás forráskódját, elvégzi a szükséges módosításokat, lefordítja a forrást és végül telepíti az alkalmazást (valamint mindezt megteszi az összes függõsége esetében). A Portgyûjtemény, vagy gyakran egyszerûen csak a "portfa", a [.filename]#/usr/ports# könyvtárban található. Itt nyilván feltételezzük, hogy a Portgyûjteményt is kiválasztottuk a FreeBSD telepítése során. Amennyiben a Portgyûjteményt még nem telepítettük volna, a man:sysinstall[8] segítségével feltehetjük a telepítõlemezrõl, vagy esetleg a man:csup[1], illetve man:portsnap[8] használatával letölthetjük a FreeBSD Projekt valamelyik szerverérõl. A Portgyûjtemény telepítésének részletes bemutatása megtalálható a kézikönyv extref:{handbook}ports[4.5.1. szakaszában, ports-using]. A telepítéshez (általában) csak be kell lépnünk az adott port könyvtárába és el kell indítanunk a fordítást. A következõ példában az Apache 2.2 alkalmazást telepítjük a Portgyûjteménybõl: [source,shell] .... # cd /usr/ports/www/apache22 # make install clean .... A portok alkalmazásának egyik legnagyobb elõnye, hogy a szoftverek telepítése során testre tudjuk szabni azok beállításait. Például amikor az Apache 2.2 alkalmazást portként telepítjük, a `WITH_LDAP` man:make[1] változó megadásával engedélyezhetjük a mod_ldap használatát: [source,shell] .... # cd /usr/ports/www/apache22 # make WITH_LDAP="YES" install clean .... A Portgyûjteménnyel kapcsolatos további információk tekintetében olvassuk el a FreeBSD kézikönyv extref:{handbook}ports[A Portgyûjtemény használata, ports-using] címû szakaszát. [[which]] === Portok vagy csomagok, mégis melyiket használjam? A csomagok tulajdonképpen elõre lefordított portok, ezért igazából csak abban van köztük különbség, hogy forrásból (portok) vagy binárisan telepítjük-e az alkalmazásokat. Mindegyik módszernek megvannak a maga elõnyei: .Csomagok (bináris) * Gyorsabb telepítés (a nagyobb alkalmazások lefordítása viszont nagyon sokáig is eltarthat). * Nem szükséges megértenünk a szoftverek lefordításának mikéntjét. * Nem kell fordítóprogramokat telepítenünk a rendszerünkre. .Portok (forrás) * A telepítés beállításait tetszõlegesen szabályozhatjuk. (A csomagok általában szabványos beállításokkal készülnek. A portok esetében azonban lehetõségünk van ezeket kedvünk szerint megváltoztatni, mint például további modulok fordítását kérni, vagy átállítani a telepítés alapértelmezett helyét.) * Ha késztetést érzünk, akkor akár a saját javításainkat is beletehetjük a forráskódba. Ha nincsenek különös igényeink, akkor a csomagok minden bizonnyal tökéletesen megfelelnek számunkra. Amikor viszont valamit külön be szeretnénk állítani, akkor ahhoz a portokat érdemes választanunk. (Ne felejtsük el azonban, hogy ha elsõsorban a csomagokhoz ragaszkodunk, de mégis módosítanunk kell valamit bennük, akkor a `make package` parancs kiadásával a portokból is tudunk csomagot készíteni, majd átmásolni azokat más szerverekre.) [[startup]] == A rendszer indítása: hova lettek a futási szintek? A Linux(R) a SysV rendszerindítási sémáját alkalmazza, miközben a FreeBSD a hagyományos BSD típusú man:init[8] megoldást. A BSD típusú man:init[8] esetén nincsenek futási szintek és nem létezik [.filename]#/etc/inittab# állomány. Helyette az man:rc[8] vezérli a rendszer indítását. Az [.filename]#/etc/rc# szkript beolvassa az [.filename]#/etc/defaults/rc.conf# és [.filename]#/etc/rc.conf# állományokat, amelyekbõl megállapítja, hogy milyen szolgáltatásokat indítson el. A megadott szolgáltatásokat ezután az [.filename]#/etc/rc.d# és a [.filename]#/usr/local/etc/rc.d# könyvtárakban található megfelelõ indítószkriptek segítségével indítja el. Ezek a szkriptek hasonlóak a Linux(R) rendszereken az [.filename]#/etc/init.d# könyvtárban található szkriptekhez. **** _A szolgáltatások indításáért felelõs szkriptek miért két különbözõ helyen találhatóak?_ Az [.filename]#/etc/rc.d# könyvtárban található szkriptek az "alaprendszer" részei (mint például a man:cron[8], man:sshd[8], man:syslog[3] és a többi). A [.filename]#/usr/local/etc/rc.d# könyvtárban pedig a felhasználó által telepíthetõ alkalmazások, például az Apache, Squid stb. szkriptjei találhatóak. _Mi a különbség az "alaprendszerben" található és a felhasználó által telepített alkalmazások között?_ A FreeBSD-t egy összefüggõ operációs rendszerként fejlesztik. Ezt másképpen úgy lehetne fogalmazni, hogy a rendszermagot, a rendszerszintû függvénykönyvtárakat és a hozzájuk tartozó programokat (mint például a man:ls[1], man:cat[1], man:cp[1] stb.) együtt fejlesztik és adják ki. Ezt nevezzük az "alaprendszernek". A felhasználó által telepíthetõ alkalmazások lényegében azok, amelyek nem részei ennek az "alaprendszernek", például az Apache, X11, Mozilla Firefox stb. Ezek általában a FreeBSD <> telepíthetõek. Mivel a felhasználók által telepített alkalmazásokat igyekszünk elkülöníteni az "alaprendszertõl", ezért ezek a [.filename]#/usr/local/# könyvtárba kerülnek. Ennek következtében a felhasználók által telepített binárisok a [.filename]#/usr/local/bin# könyvtárban, míg a hozzájuk tartozó konfigurációs állományok a [.filename]#/usr/local/etc# könyvtárban találhatóak, és így tovább. **** A szolgáltatásokat az [.filename]#/etc/rc.conf# állományban (lásd man:rc.conf[5]) tudjuk engedélyezni a `SzolgáltatásNév_enable="YES"` sor megadásával. A rendszer alapértelmezett beállításait az [.filename]#/etc/defaults/rc.conf# állományban találhatjuk meg, ezeket az [.filename]#/etc/rc.conf# állományban tudjuk felülbírálni. Az alkalmazásokhoz tartozó szolgáltatások engedélyezésének lépéseihez pedig a telepítésük után ne felejtsük el átolvasni a hozzájuk tartozó dokumentációt. Az [.filename]#/etc/rc.conf# állományból származó most következõ rövid kódrészlet az man:sshd[8] és Apache 2.2 szolgáltatásokat engedélyezi, valamint az Apache számára beállítja az SSL használatát. [.programlisting] .... # az SSHD engedélyezése sshd_enable="YES" # az Apache és benne az SSL támogatásának engedélyezése apache22_enable="YES" apache22_flags="-DSSL" .... Miután az [.filename]#/etc/rc.conf# állományban engedélyeztük a szolgáltatásokat, a parancssorból el is tudjuk indítani ezeket (a rendszer újraindítása nélkül): [source,shell] .... # /etc/rc.d/sshd start .... Ha egy szolgáltatást nem engedélyeztünk, akkor a parancssorból a `forcestart` paraméter megadásával tudjuk elindítani: [source,shell] .... # /etc/rc.d/sshd forcestart .... [[network]] == A hálózat beállítása [[interfaces]] === Hálózati interfészek A hálózati csatolófelületekre a Linux esetén alkalmazott általános _ethX_ alakú azonosítók helyett a FreeBSD az adott hálózati kártya meghajtójának nevével és utána egy sorszámmal hivatkozik. Az man:ifconfig[8] itt látható kimenetében két Intel(R) Pro 1000 hálózati kártya jelenik meg (em0 és em1): [source,shell] .... % ifconfig em0: flags=8843 mtu 1500 options=b inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255 ether 00:50:56:a7:70:b2 media: Ethernet autoselect (1000baseTX ) status: active em1: flags=8843 mtu 1500 options=b inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255 ether 00:50:56:a7:03:2b media: Ethernet autoselect (1000baseTX ) status: active .... [[ipaddress]] === Az IP-cím beállítása Az interfészekhez az man:ifconfig[8] paranccsal tudunk IP-címet rendelni. Az IP-címek beállítása azonban csak akkor marad meg az újraindítást követõen is, ha felvesszük az [.filename]#/etc/rc.conf# állományba. A most következõ példában megadunk egy hálózati nevet, IP-címet és egy alapértelmezett átjárót: [.programlisting] .... hostname="szerver1.minta.com" ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0" defaultrouter="10.10.10.1" .... DHCP esetén használjuk a következõt: [.programlisting] .... hostname="szerver1.minta.com" ifconfig_em0="DHCP" .... [[firewall]] == Tûzfalak Hasonlóan a Linuxban található IPTABLES megoldáshoz, a FreeBSD is kínál fel rendszermagszintû tûzfalazást. A FreeBSD jelen pillanatban három tûzfalat támogat: * extref:{handbook}firewalls[IPFIREWALL, firewalls-ipfw] * extref:{handbook}firewalls[IPFILTER, firewalls-ipf] * extref:{handbook}firewalls[PF, firewalls-pf] Az IPFIREWALL, avagy IPFW (az IPFW szabályrendszereit az man:ipfw[8] paranccsal tudjuk kezelni) a FreeBSD fejlesztõi által készített és karbantartott tûzfal. A forgalomszabályozás megvalósításához és különbözõ típusú hálózati kapcsolatok szimulációjához az IPFW kiegészíthetõ a man:dummynet[4] használatával. Ez az IPFW szabály engedélyezi a beérkezõ SSH-kapcsolatokat: [.programlisting] .... ipfw add allow tcp from any to me 22 in via $ext_if .... Az IPFILTER tûzfalat Darren Reed dolgozta ki. Nem csak FreeBSD alatt találkozhatunk vele, több operációs rendszerre is portolták, többek közt NetBSD-re, OpenBSD-re, SunOS-re, HP/UX-ra és Solarisra. Ez az IPFILTER parancs engedélyezi a beérkezõ SSH-kapcsolatokat: [.programlisting] .... pass in on $ext_if proto tcp from any to any port = 22 .... Az utolsó tûzfal, a PF, az OpenBSD Projekt fejlesztése. A PF eredetileg az IPFILTER leváltására készült. Emiatt a PF szabályainak megadási módja nagyon hasonlít az IPFILTER esetében megismertekhez. A minõségalapú (QoS) forgalomszabályozás létrehozásához a PF az man:altq[4] megoldásával egészíthetõ ki. Ez a PF parancs engedélyezi a beérkezõ SSH-kapcsolatokat: [.programlisting] .... pass in on $ext_if inet proto tcp from any to ($ext_if) port 22 .... [[updates]] == A FreeBSD frissítése A FreeBSD rendszer háromféleképpen frissíthetõ: forráskódból, binárisan és telepítõlemezek használatával. A forráskódon keresztüli frissítés ugyan a legbonyolultabb ezek közül, azonban ez kínálja fel egyben a legnagyobb rugalmasságot is. Ennek során szinkronizálnunk kell a FreeBSD forráskódjának nálunk levõ (helyi) másolatát a FreeBSD CVS (Concurrent Versioning System) szervereivel. Miután ez megtörtént, le tudjuk fordítani a rendszermagot és a hozzá tartozó programokat. A források frissítésével kapcsolatban olvassuk el a FreeBSD kézikönyv extref:{handbook}updating-upgrading[frissítésrõl szóló fejezetét, updating-upgrading]. A bináris frissítés a Linux(R) típusú rendszereken elérhetõ `yum` vagy `apt-get` parancsok esetén megszokottakhoz hasonló. A man:freebsd-update[8] parancs letölti a frissítéseket és telepíti ezeket. Ez a frissítési folyamat a man:cron[8] használatával ütemezhetõ. [NOTE] ==== Amikor a man:cron[8] segítségével ütemezzük a frissítéseket, a man:crontab[1] állományban lehetõség szerint a `freebsd-update cron` parancsot használjuk, ezáltal igyekezzünk csökkenteni annak valószínûségét, hogy egyszerre több számítógép is ugyanakkor terhelje a szervert. [.programlisting] .... 0 3 * * * root /usr/sbin/freebsd-update cron .... ==== Az utolsó frissítési módszer, a telepítõlemezek használata lényegében egy egyértelmû folyamat. Indítsuk el számítógépünket a telepítõlemezrõl, és a telepítõben válasszuk a frissítés (upgrade) opciót. [[procfs]] == procfs: eltûnt, de nem nyomtalanul A Linux(R) alatt a [.filename]#/proc/sys/net/ipv4/ip_forward# használatával tudjuk megmondani, hogy az IP-csomagok továbbítása engedélyezett-e rendszerünkben. Mivel a man:procfs[5] a FreeBSD jelenlegi verzióiban már elavultnak számít, ezért ezt a man:sysctl[8] paranccsal nézhetjük meg a rendszer egyéb beállításai mellett. (A `sysctl` viszont Linux(R) alatt is egyaránt megtalálható.) Ha az IP-csomagok továbbításáról szóló példánál maradunk, akkor az alábbi módon kérdezhetjük le, hogy engedélyezett-e a FreeBSD rendszerünkön: [source,shell] .... % sysctl net.inet.ip.forwarding net.inet.ip.forwarding: 0 .... Az `-a` paraméter megadásával a rendszer összes jelenlegi beállítását le tudjuk kérdezni: [source,shell] .... % sysctl -a kern.ostype: FreeBSD kern.osrelease: 6.2-RELEASE-p9 kern.osrevision: 199506 kern.version: FreeBSD 6.2-RELEASE-p9 0: Thu Nov 29 04:07:33 UTC 2007 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC kern.maxvnodes: 17517 kern.maxproc: 1988 kern.maxfiles: 3976 kern.argmax: 262144 kern.securelevel: -1 kern.hostname: server1 kern.hostid: 0 kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 } kern.posix1version: 200112 ... .... [NOTE] ==== Bizonyos `sysctl`-értékek írásvédettek. ==== Adódhatnak olyan alkalmak, amikor mégis szükségünk lehet a procfs használatára, mint például régi szoftverek futtatása, a rendszerhívások nyomkövetése a man:truss[1] segítségével, vagy a extref:{handbook}linuxemu[bináris Linux kompatibilitás, linuxemu] használata. (Noha a bináris Linux kompatibilitás egy saját procfs állományrendszert, egy man:linprocfs[5] rendszert használ.) A procfs típusú állományrendszerek csatlakoztatásához a következõt kell megadnunk az [.filename]#/etc/fstab# állományban: [source,shell] .... proc /proc procfs rw,noauto 0 0 .... [NOTE] ==== A `noauto` beállítás megadásával megakadályozzuk, hogy a [.filename]#/proc# a rendszerindítás során magától csatlakoztatódjon. ==== A procfs típusú állományrendszereket így lehet csatlakoztatni: [source,shell] .... # mount /proc .... [[commands]] == Gyakori parancsok [[packageCommands]] === A csomagok kezelése [.informaltable] [cols="1,1,1", frame="none", options="header"] |=== | Linuxos parancs (Red Hat/Debian) | A FreeBSD-s megfelelõje | Leírás |`yum install csomag` / `apt-get install csomag` |`pkg_add -r csomag` |A _csomag_ telepítése egy távoli számítógéprõl |`rpm -ivh csomag` / `dpkg -i csomag` |`pkg_add -v csomag` |Csomag telepítése |`rpm -qa` / `dpkg -l` |`pkg_info` |A telepített csomagok megjelenítése |=== [[systemCommands]] === A rendszer kezelése [.informaltable] [cols="1,1,1", frame="none", options="header"] |=== | Linuxos parancs | A FreeBSD-s megfelelõje | Leírás |`lspci` |`pciconf` |A PCI-os eszközök megjelenítése |`lsmod` |`kldstat` |A betöltött rendszermagmodulok felsorolása |`modprobe` |`kldload` / `kldunload` |Modulok betöltése és eltávolítása |`strace` |`truss` |A rendszerhívások nyomkövetése |=== [[conclusion]] == Lezárás Bízunk benne, hogy ez a leírás eleget mutatott be ahhoz, hogy elkezdjünk ismerkedni a FreeBSD-vel. Ha az érintett témák még jobban érdekelnek minket, vagy olyanról szeretnénk többet megtudni, ami itt nem szerepelt, akkor mindenképpen olvassunk bele a extref:{handbook}[FreeBSD kézikönyvbe].