Kiszolgálók üzemeltetése Iványi Péter
Linuxon a C fordító gcc Fordítás 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
Autotools A fordítás egyszerűsítése Fordítás 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
Makefile make 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.c.o: $(CC) $(CFLAGS) -c $< -o $@.l.c: $(LEX) $< && mv lex.yy.c $@ all foo foo.o bar.o baz.o foo.c bar.c baz.c baz.l
A célok (target) file-ok Szabályok 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 <tab> cmd1 <tab> cmd2 <tab>... <tab> cmdn
Makrók Makrók dollár jellel $ kezdődnek Szintakszisa: $( ) Értékadás: CC = ec++ Használata $(CC) $(CFLAGS) -c $< -o $@
$@ $< A cél neve Makrók A szabályhoz tartozó első függőség all: dummy @echo "$@ depends on dummy" dummy: touch $@ $ make touch dummy all depends on dummy
Egyszerűsítés: Kevesebbet kelljen írni, Speciális szabály 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 <senki@debian.org> Architecture: i386 Version: 1.0 Depends: libc6 (>= 2.1) Description: Hello program Sajat fejlesztesu hello program
Példák: Függőségek 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 <senki@debian.org> Architecture: i386 Version: 1.0 Depends: libc6 (>= 2.1) Description: Hello program Sajat fejlesztesu hello program
Required Priority 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
Optional Priority 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
preinst: script-ek 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
prerm: script-ek 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