Kiszolgálók üzemeltetése Iványi Péter
Fordítás • Linuxon a C fordító – gcc • GNU Compiler Collection • C, C++, Object-C, Java, Fortran, Ada nyelveket tud kezelni • 42 féle rendszerre és processzorra tud kódot generálni
• Például: gcc -o hello.exe hello.c
Történet • Unix-on bár alapvetően hasonlóak, de mindig volt valami eltérés – Más fejléc file nevek – A fejléc file-okban a függvényeknek egy kicsit más a neve – A file-ok máshol voltak – Terminál és processzus kezelés is másképpen történt
• POSIX segített, de – Új lehetőségeket vezetett be – Különböző időben
Nagy változatosság
Történet • Fejlesztőknek ismernie kellett a rendszereket • #ifdef is használható, de túl kusza kódott eredményezett • 1992-ben négy rendszer – – – –
Metaconfig configure GNU Autoconf Imake, X Window része
Configure programok • Két részre osztják a szoftver elkészítését – Konfigurálás – Fordítás (build) • Mindegyik Makefile-okat használ • A make program lehetőségeit használják ki
• configure – script, nem bináris – Nem interaktív, maguktól határozza meg a rendszer lehetőségeit – cross-compiler lehetőséget is biztosít
Fordítás • Autotools – A fordítás egyszerűsítése • Felismeri a rendszer sajátosságait és a megfelelő beállításokat alkalmazza
– A fordítási mechanizmus hordozhatósága • Akár különböző architektúrák között
– Shell scriptekből áll, illetve vezérlik – Tulajdonképpen Makefile-okat hoz létre
make • Makefile – Függőségek definíciója, illetve – Hogyan kell a függőségeket feloldani úgy, hogy egy célt elérjünk
• A make program a célt frissíti (update) úgy, hogy amitől függ a létezése azokat is frissíti – Up-to-date azt jelenti, hogy az időbélyege frissebb • Sajnos (!)
Függőségek all: foo foo: foo.o bar.o baz.o
all
.c.o: $(CC) $(CFLAGS) -c $< -o $@ .l.c:
foo
$(LEX) $< && mv lex.yy.c $@
foo.o
bar.o
baz.o
foo.c
bar.c
baz.c baz.l
Szabályok • A célok (target) file-ok • A Makefile azt adja meg, hogyan lehet a file-t létrehozni • A szabály után shell parancsok végzik el a feladatot • A parancsoknak 0-val kell kilépniük (nincs hiba) • Vannak feltétel nélküli szabályok is clean: rm -f *.o
Szintakszis • Megjegyzés sor # karakterrel kezdődik • Szintakszis: target1: dep1 dep2 ... depN
cmd1 cmd2 ... cmdN
Makrók • Makrók dollár jellel ‘$’ kezdődnek • Szintakszisa: $(…) • Értékadás: CC = ec++
• Használata $(CC) $(CFLAGS) -c $< -o $@
Makrók • $@ – A cél neve
• $< – A szabályhoz tartozó első függőség
all: dummy @echo "$@ depends on dummy" dummy: touch $@
$ make touch dummy all depends on dummy
Speciális szabály • Egyszerűsítés: – Kevesebbet kelljen írni, – wildcard minta alapján több file esetén alkalmazható • Ha más szabály nem vonatkozik rá, akkor a .o file-ok .c filetól függnek .c.o: $(CC) $(CFLAGS) -c $< -o $@
make alkalmazása • Gyakorlaton megnézzük egy „Hello World” programmal
Autoconf programok configure --prefix=/home/peteri/local make make install
Debian csomagok • Minden szüskséges file összessége ami egy programhoz, szolgáltatáshoz szükséges • Bináris csomag – Futtatható file-ok – Konfigurációs file-ok – Dokumentáció
• Forrás (source) csomagok – A forráskódot tartalmazza
Csomag nevek csomag_verzió-debianverzió_arch.deb • csomag: a csomag neve • verzió : bármi lehet, nincs szabványosítva • debianverzió : a debian verzió, fejlesztő adja
meg • arch : processzor típus
control file • Megadja főbb információkat Package: myhello Priority: optional Section: devel Maintainer: Senki Alfonz <[email protected]> Architecture: i386 Version: 1.0 Depends: libc6 (>= 2.1) Description: Hello program Sajat fejlesztesu hello program
Függőségek • Példák: Depends: foo (>= 1.2), libbar1 (= 1.3.4) Conflicts: baz Recommends: libbaz4 (>> 4.0.7) Suggests: quux Replaces: quux (<< 5), quux-foo (<= 7.6)
control file Package: myhello Priority: optional Section: devel Maintainer: Senki Alfonz <[email protected]> Architecture: i386 Version: 1.0 Depends: libc6 (>= 2.1) Description: Hello program Sajat fejlesztesu hello program
Priority • Required – A rendszer működéséhez kell
• Important – A legtöbb unix fontos eszköze, programja
• Standard – Szabványos programok Linux-on, web browser, e-mail program, ftp, stb
Priority • Optional – Valószínűleg szükség lesz rá, X window, TeX
• Extra – A magasabb szintű csomagokkal ütközhet – Speciális tudást igényelhet – Speciális igényei lehetnek
script-ek • preinst: – A file-ok kicsomagolása előtt fut le – Például leállít szolgáltatásokat
• postinst: – A file-ok kicsomagolása után fut le – Konfigurálja a csomagot vagy elindítja a szolgáltatást
script-ek • prerm: – A file-ok eltávolítása előtt fut le
• postrm: – A file-ok eltávolítása után fut le
Csomag készítés dpkg-buildpackage -rfakeroot
• Törli a forrás kódból generált file-okat • Újrafordítja a programot • Újraépítí a csomagot