LinuxZelfstudiegroep Utrecht (LZU) 6 mei 2006 - Lpi

advertisement
LinuxZelfstudiegroep Utrecht (LZU)
6 mei 2006
Package management (overzicht)
Installeren van een gebruikersvriendelijke Linux-distributie gaat tegenwoordig haast vanzelf, ook gaat het
toevoegen en weer verwijderen van bijbehorende programma's uiterst eenvoudig. Omdat je ook nog met enkele
muisklikken de hele distro, systeem en applicaties, up-to-date kunt houden is Linux voor “standaard”
eindgebruikers een probleemloos, robuust en stabiel systeem.
Power-users zullen vaak liever de software zelf compileren zodat ze de programma's zelf naar hun hand
kunnen zetten en verbeteringen aanbrengen om daarmee te bijdragen aan de bloei van de open software.
Een derde groep gebruikers legt zich niet neer bij de keuzen van de distributeur, heeft hardware- en softwarewensen die de distributeur niet heeft kunnen voorzien, maar mist de kennis om zijn systeem daaraan aan te
passen. Speciaal voor deze laatste groep besteedt cd LZU vandaag aandacht aan het installeren van
programma's op een Linux systeem.
We zullen de drie belangrijkste methoden gaan bekijken: de tarball, pakketmanagers (RPM en APT) en het
veelbelovende autopackage.
1. De tarball
tar is een oeroud utility om een aantal files en directories in één enkele file op te bergen, zodanig dat je die
files later en elders weer terug kunt toveren, met hun oorspronkelijke namen en in de zelfde directories. Het
alternatief voor tar is cpio, en pax combineert beide rivalen.
Deze tar-archieven zijn eigenlijk de standaardmanier om met unix een applicatie mee te distribueren dat wil
zeggen als brontekst. Je vindt er dan alle benodigde programma-tekst en een Makefile, aan de hand waarvan
het programma make is staat is de applicatie te compileren en te installeren.
Wat is compileren eigenlijk precies?
Bij het compileren wordt de broncode zoals die door de programmeur is geschreven omgezet naar de machineinstructies voor een bepaalde processor, voor de Pentium II bij voorbeeld, of alleen naar de instructies die een
intel-80486 kan uitvoeren, of naar de instructie-set van een Strongarm of Symbian in je PDA of mobieltje.
Voor een aantal zaken moet het programma de hulp van het operatingsysteem inroepen door middel van
system-calls. Het resultaat van een compiler bestaat dus uit machine-code specifiek voor één processor (bij
voorbeeld. Pentium) en systeem-aanroepen specifiek voor één operating-systeem. Merk op: het broncodeprogramma was in hoge mate onafhankelijk van processor en Operating-systeem.
Compileren van programma's voor een andere Linuxdistributie dan waarvoor de tarball getest is vereist soms
enige kleine aanpassingen. Wil je een programma naar een sterk afwijkend systeem overzetten dan kost dat
meestal erg veel werk. Met noemt dit “porting” of, in een stuitend beroerde vertaling “poorten” van software1.
Problemen
De meeste problemen worden veroorzaakt doordat moderne feature-rijke applicaties ervan uitgaan dat
bepaalde files en vooral veel “shared objectmodules” al aanwezig zijn.
♦ Files als configuratiefiles en binaries (elk unix-programma kan, net als de shell, andere programma's
starten). Die files dienen op de standaard plaats in de Linux-directory-boom aanwezig te zijn, maar
helaas, die standaard unix-directoryboom (FHS) is op dit moment aan het veranderen, daar zijn goede
redenen voor maar het geeft wel groeipijn.
♦ Object-modules zijn brokstukken gecompileerde programmacode die klaarstaan om door door
programma's gebruikt te worden. Deze “shared object”, *.so files hebben enorme voordelen maar
leiden ook tot de meeste installatieproblemen, de zogenaamde dependency's.
2. De pakketmanagers
Om installatie van bijgeleverde software te vereenvoudigen wordt deze software opgedeeld in pakketten. Er
zijn twee belangrijke pakketformaten met bijbehorende pakketmanagers: RPM (van RedHat, Fedora, SuSE,
Mandriva) en APT (Debian, Ubuntu, Knoppix). De belangrijkste kenmerken zijn:
1. Beide systemen distribueren pakketten met binaire (reeds gecompileerde) programma's, wat erg veel tijd
besparen kan.
1 Dit heeft natuurlijk niets te maken met in- en uitgangen van een PC: de parallelle- seriële en tcp/ip- poorten, maar alles
met de portability en het Franse porter.
2. Beide systemen kennen de afhankelijkheden in termen van pakketten (pakket X heeft pakket Y nodig,
pakket Y heeft de pakketten Z1 en Z2 nodig etc.)
3. Beide systemen houden een database bij van alle geïnstalleerde pakketten plus voldoende gegevens om die
pakketten ook weer te verwijderen zonder andere pakketten daarmee onklaar te maken.
4. Bij beide systemen heb je een bronnenlijst nodig, een lijst van “repositories” waarvandaan de pakketten
geladen kunnen worden: de installatie-CD, de site van de distributeur met de mirrors en sites van derden.
Je mag beide pakketten niet door elkaar gebruiken, ze weten van elkaar niet wat ze geïnstalleerd hebben! Wel
lukt het soms om een distro-vreemd pakket te converteren of anderszins te gebruiken.
De pakketmanagers bieden de veiligste, snelste meest ongecompliceerde manier om de software van je
distributie te installeren, upgraden en weer te verwijderen. Ook kun je met veel distro's, met een of twee
opdrachten het hele systeem plus alle applicaties up-to-date maken. Alle beveiligings-patches en bugfixes en
uitbreidingen een één klap. Dat is echt iets bijzonders!
3. Autopackage
Je download een autopakket ( abc.package), zet de execute-rechten (een van meet af aan ingebouwde unixbeveiliging) en start de packagefile. Klaar is Kees! Je hoeft niet te zoeken naar een pakket speciaal voor de
juiste release van jouw distro, .package-files zijn voor alle distro's (op intel-processortypen) geschikt.
Hoe werkt dat?
• Als het de eerste keer is dat je een *.package start zal de autopackage-clientsoftware zelf automatisch
geïnstalleerd worden.
• Autopackage vertrouwt niet met de een database van alles wat er al aanwezig zou zijn maar kijkt bij elke
installatie opnieuw of hij de benodigde files vinden kan. Het ontbrekende haalt hij zelf via Internet uit
andere auto-pakketten, indien aanwezig.
• Veel problemen worden veroorzaakt doordat er te weinig aandacht besteed wordt aan de binaire
portabiliteit van software. De standaard binaire API lijkt er voorlopig alleen voor Red Hat, Asianux en
SuSE te zijn. Een autopackage maken begint dan ook met het te verbeteren van die binaire portabiliteit van
het pakket:
• Relocatability: door absolute padnamen in de broncode te vervangen door prefix-macro's zodat je
tijdens installatie nog kunt kiezen tussen bij voorbeeld installeren in /usr/bin of /usr/share/bin of
/usr/local/bin óf, als je geen root mag, worden in je homedir: $HOME/bin.
• Dependenties: door onnodige dependenties te verwijderen. Vaak blijven niet meer gebruikte
dependenties achter bij het ontwikkelen van een applicatie, die zelf ook weer een lawine aan
afhankelijkheden kunnen veroorzaken. Autopackage heeft software om die op te sporen en op te ruimen.
Voordelen:
Het grote voordeel van Autopackage is dat nu de maker van de software zelf één pakket kan samenstellen dat
door iedereen onmiddellijk gebruikt kan worden zonder afhankelijk te zijn van de goede wil en tijdschema's
van de distributeurs. Voor de samenstellers van de CD's van computertijdschriften kan het ook een oplossing
zijn, die persen nu een aantal versies van een pakket op de CD en bereiken daarmee nóg niet alle lezers. Uiterst
simpele installatie is een doelstelling die ruim gehaald is.
Nadelen:
Als nadelen worden genoemd het niet ondersteunen van digitale handtekeningen. Dat dit bij ms-windows niet
werkt is een zwak excuus, in .rpm's zit het wel ingebakken. Integratie met de bestaande pakketten ontbreekt al
wordt daar aan gewerkt. Er zijn nog te weinig autopackages om echt door te breken, al zijn er wel enkele
belangrijke onder: Abiword, Firefox, de Gimp en onze Belasting-”disktte”.
Conclusie
Wie zich houdt bij de softwarepakketten die voor zijn distro-versie zijn gemaakt kan deze zeer eenvoudig
installeren en up-to-date houden. Wie zich in het systeem wil verdiepen geniet alle vrijheid die vrije, open
software te bieden heeft.
4. Details
Tarballs compileren
De opdracht tar wordt gevolgd door óf een 'c' (create), 't' (table, inhoud) of 'x' (extract), daarna eventueel een
'z' of 'j' voor gzip- of bzip2-compressie, daarna 'f archiefnaam':
tar tzvf abc.package.gz
: laat zien wat erin zit
tar xjvf abc.pakketx.bz2
: extract naar een directory in de current-directory
cd
nieuwe dir
./config
: meestal is er een interactief shellscript om te configureren.
make
: compileer a.d.h.v. Makefile. Make zal ook compileren als een
: source-module aaa.c nieuwer is als het objectmodule aaa.o.
su make install
(of het alternatief:
sudo make install)
Ga als 'root' (Administrator) werken om te kunnen installeren in
systeem directories zoals /usr/bin, /usr/man en /etc
(Als sudo ingesteld is (bij ubuntu de standaard) kan je als root
installeren via 'sudo' waardoor je tijdelijk super user rechten krijgt).
Shared object (.so)
ldd
/usr/local/bin/abc
: toont alle *.so 's van abc
De runtime loader ld.so zoekt achtereenvolgens in $LD_LIBRARY_PATH, in /etc/ld.so.cache en de
standaard /lib en /usr/lib naar de benodigde so-modules. De opdracht ldconfig maakt de
ld.so.cache aan de hand van /etc/ld.so.conf om het laden te versnellen.
apt (*.deb)
De populairste GUI's voor APT zijn aptitude en vooral synaptic.
Maar apt is vooral geliefd om zijn command apt-get. Hier een paar voorbeelden:
apt-get
install
pakket
: installeer een pakket
apt_get update
: synchroniseer met repositories (uit sources.list)
apt-get
: maak daarna alle pakketten up-to-date
upgrade
In /etc/apt/sources.list bij voorbeeld:
deb
deb
deb
deb
cdrom:/media/cdrom
file:/debian
http://non-us.debian.org/debian-non-US
ftp://nonus.debian.org/debian-non-us
Een bepaald apt-pakket installeren buiten de repositories om gaat met:
dpkg -i pakket.deb
Conversie van pakketten gaat met:
alien [--to-deb] [--to-rpm] [--to-tgz] [--to-slp] [options] file [...]
rpm
Gui's voor rpm-package management zijn: Kpackage (KDE) en gnorpm (gnome). Feitelijk is rpm veel meer
te vergelijken met dkpg. Het installeert en houdt een database bij. Maar het lost geen dependencies op.
Daarom worden er andere systemen bovenop deze rpm database gebruikt die dit wel doen zoals Yast en You
(SuSE), urpmi (Mandriva), yum (Fedora) en apt-rpm (Fedora en SuSE en andere).
Enkele voorbeelden van het gebruik van RPM:
rpm
-Uvh
rpm
-ivh
rpm
-qa
rpm
-l
pakket ...
*.rpm
: Update of installeer pakket(ten)
: Installeer de nieuwe pakketten
: list alle geïnstalleerde pakketten
pakket
: list files in dit pakket
Fedora gebruikt veelal de opdracht yum met de eenvoudige parameters install, update, remove etc. Mandriva
kent vanouds de opdracht urpmi met soortgelijke parameters.
Indien er speciale repositories hiervoor beschikbaar zijn kan elke rpm-gebaseerde distributie (zoals Fedora,
SuSE, en Mandriva) het pakket apt4rpm gebruiken, waarmee je de zelfde apt-get -opdrachten voor rpm's ter
beschikking krijgt als die voor .deb's in Debian, Ubuntu, Mepis enz. zie: http://apt4rpm.sourceforge.net/ of
http://ftp.gwdg.de/pub/linux/suse/apt
autopackage
Voor de eindgebruiker kán het niet eenvoudiger:- laad; maak uitvoerbaar; start. - Dat je de middelste stap
nooit veilig kunt weglaten wordt op een ander OS nog dagelijks aangetoond. :)
GUI, GTK en Qt:
Start->systeem->“manage 3e party software”
(list en remove packages)
CLI: de opdracht met de opties:
: package install|verify|remove|log|list|info|help
*.package-files zijn tar-archieven voorafgegaan door een stukje shellscript. Je kunt ze dus lezen!2
Zie verder: http:autopackage.org/faq.html
Alternatieven voor autopackage: “Zero-install” en “Kpackage”
Intro tot de commandline: CLI
♦Open eerst een console (een scherm waarin tekstuele opdrachten ingevoerd kunnen worden).
♦Help voor elke opdracht vind je met «man opdracht» bij voorbeeld. man rpm
Makkelijker leesbaar kan ook via #rpm of ##rpm in de adresregel van Konqueror (de KDE file-manager).
♦Met “pijl omhoog” haal je eerdere opdrachten terug uit de historie; verander en voer nog eens uit.
♦Selecteer ergens op het scherm een stukje tekst en plak dat met de middenmuisknop in de commandline.
♦Tik na een paar tekens een [Tab], de shell zal dan de opdracht- of bestandsnaam aanvullen!
♦Besef wel dat je in zo'n shell binnen een bepaalde omgeving werkt waardoor meer of minder mag.
via 'whoami' kan je vragen wie je bent
via 'env' kan je zien hoe veel instellingen (de environment) voor de gebruiker gezet zijn
via 'su' (switch user) kan je gaan werken al een andere gebruiker (zoals in su <usernaam> )
via 'su - ' ga je werken als roor (administrator) en door het streepje neem je diens environment over.
♦In het kader van deze cursus kan je bijvoorbeeld onderstaand commando gebruiken:
nice -n 12 sudo make &
Start make met lage prioriteit (nice -12) en in achtergrond zodat
je ongestoord door kan werken want make kan uren duren.
LZU/nllgg
2 Zoniet, volg dan de LZU-shell en script-cursus via email [email protected]
Download