FreeBSD Ports und Packages CCC Stuttgart
Kurt Jaeger, [email protected]
http://nepustil.net/
Stuttgart, 10. September 2009 Ubersicht¨
I Allgemein
I FreeBSD
I Ports
I Packages
I Zusammenfassung Kurzvorstellung
I Gesch¨aftsf¨uhrereines regionalen ISPs
I FreeBSD und Linux Anwender seit ca. 1992
I Kundenserver mit FreeBSD und Linux und Windows und Solaris und ...
I /sw Allgemein
I Was ist ein Betriebssystem ?
I Kernel (Systemprogramm mit Sonderrechten)
I Userspace (Systemprogramme ohne Sonderrechte)
I Anwendungen
I Was sind Anwendungen ?
I OpenOffice
I mplayer
I ...
I Was ist eine Distribution ?
I Packagemanagement Welche Packagemanagement Systeme gibt es ?
I debian pkg [debian]
I Redhat Package Manager, RPM
I pkgsrc (netbsd u.a.) [pkgsrc]
I solaris ? pkgadd oder IPS
I AIX installp
I MacOS X Fink
I http://www.openpkg.org/
I http://www.macports.org/
I Microsoft Installer, .msi
I ...
I FreeBSD Ports und Packages Warum Packagemanagement ?
¨ I Bei jeder Anderung das ganze Betriebssystem ¨uberschreiben ?
I Und dann auch noch die Anwendungen ?
I Braucht viel Bandbreite
I Wahnsinnig viel Plattenplatz ¨ ¨ I Uberschreiben von lokalen Anderungen ?
I dauert sehr lang
I braucht einen Reboot
I Optimierung! ¨ I Viele Anderungen lassen sich eingrenzen Warum ¨uberhaupt Anderungen¨ ?
I Fehler
I Funktion
I Sicherheit
I Wartung
I Hardware¨anderungen
I Performance
I Haftung Was sind die Unterschiede ?
I Freie Software vrs. binary-only: Beides
I build from source vrs. binaries: From Source
I Multiplattform oder nicht: Multiplattform
I Multi-OS: Teilweise
I Stabilit¨atoder Aktualit¨at:Aktualit¨at FreeBSD
I Betriebssystem: Kernel und Drumherum!
I Anwendungen: Ports
I Fertig compiliert: Packages
I Build-from-Source
I Release-Management Release-Management
I CURRENT
I STABLE – ABI Stabilit¨at
I RELEASE
I Patches Siehe auch [release] Vorgehen bei einem Release
I Feature Freeze
I Ports Freeze
I BETA, RC (release candidate), RELEASE, Patches
I Wie lange wird welche Version gepflegt ? [support]
I MFC: Merge from CURRENT Ports ?
Verzeichnis: /usr/ports/
I Makefile und Mk/*
I INDEX*
I UPDATING
I UIDs und GIDs
I 63 Verzeichnisse, z.B. security/, databases/, usw
I ca. 20600 Ports
I http://www.freshports.org/
I /usr/ports/distfiles/
I St¨andige Updates Wie baut man selbst einen Port ?
Beispiel: cd /usr/ports/www/p5-HTML-Perlinfo make install
I Das holt ggf. alle Abh¨angigkeiten und baut sie!
I Leider fragen manche Abh¨angigkeiten nach!
I Sinnvolle Defaults make ?
I Programm, um in definierten Schritten Source Code zu ¨ubersetzen in Programme
I Variante: bsd-make http://www.freebsd.org/doc/en/books/pmake/
I Nicht dasselbe wie gnu-make! Unterschiede siehe [make1, make2]
I Viele Macros f¨urPorts /usr/ports/Mk Was passiert bei einem make install ?
I fetch
I extract
I patch
I configure
I build
I install Weitere Targets
I deinstall
I reinstall
I package
I config
I all == check-sanity fetch checksum extract patch configure build man 7 ports make config ?
I Varianten des Pakets, z.B. mit SSL oder Perl oder LDAP
I Auswahl abgelegt in /var/db/ports/port/options WITH DEBUG=true WITH IPV6=true WITHOUT POLICY=true
I Problem: initiale interaktive Abfrage Zahlen und Fakten
I fbsd6/i386, fbsd7/amd64, fbsd8/i386 I ca. 1450 Ports I ca. 4-5 GB Sources I ca. 2.5 GB Packages als Ergebnis, bis zu 200MB (netbeans)
I Auf einer 2GHz P4 Maschine: 2-3 Wochen f¨urinitialen Lauf Hauptverz¨ogerung: ”make config” Abfragen! und unresolved dependencies
I OpenOffice: ca. 10 GB f¨urden Build! I JDKs: 2-5 GB I Browser usw: meist 200-500 MB I Peak-Memory ca. 1 GB (!) I Upgrades nach initialem Lauf: Meist ein paar Stunden, ca. 10-20 Upgrades Upgrades
I Ports verwenden CVS
I CVS-Server: einige Mirrors
I Vorgehen: cd /usr/ports csup -L 2 /root/ports-supfile make fetchindex portupgrade -arR -m BATCH=yes
I in ca. 1/4 der F¨alle: pkgdb -F
I wenn alles gut ging: packages bauen
I einmal im Monat /usr/ports/UPDATING anschauen
I Ziel: alles automatisch im Cron Was steht in /root/ports-supfile ?
*default host=cvsup.se.FreeBSD.org *default base=/usr *default prefix=/usr *default release=cvs tag=. date=2009.09.06.19.45.57 *default delete use-rel-suffix *default compress Beispiel pkgdb -F Packages ?
I tar Files
I Ein wenig Meta-Information, alles ASCII!
I /var/db/pkg/pkgdb.db
I /var/db/pkg/port-version/
I /var/db/pkg/port-version/+CONTENTS Eine Liste aller Files und Details mit Checksummen
I pkg create -j -b
I pkg add
I pkg delete
I pkg info -W /usr/local/bin/wasndas
I alle Pfade auch per environment konfigurierbar Unterschiedliche Versionen derselben Software ?
I gnupg1 vrs. gnupg2: Parallel verf¨ugbar als gpg und gpg2
I mysql 5.0.x vrs. 5.1.x: Konflikt
I openoffice2 vrs. 3: Parallel
I jdk: jdk16, openjdk6, diablo-jdk16: Parallel via JAVA HOME
I Je nach Einzelfall Umgang mit Sicherheitsl¨ucken ?
I Vulnerabilities and Exposures Markup Language
I http://www.vuxml.org/
I security/vuxml
I make -DDISABLE VULNERABILITIES Eigene Ports
[porters]
I Makefile, pkg-descr
I make makesum
I portlint -A .
I Als SHAR verpacken
I mittels send-pr versenden Beispiel: www/p5-HTML-Perlinfo Warum build from source ?
I Abh¨angigkeitsgraphen, keine Listen
I Wann bricht es ? ¨ I Verstehen der Anderungen
I Frequenz
I Umfang
I Abh¨angigkeiten
I Vollst¨andigkeit
I Erfahrung sammeln in der Softwareentwicklung
I Welche Apps auf Arch xyz ?
I Welche Apps auf FBSD Version abc ?
I Wie h¨aufigist der gesamte Baum konsistent ? Verwendung ?
I Build from Source ist aufwendig
I Also nicht auf jedem Rechner alles bauen
I Referenz-Rechner
I FreeBSD:
I ports-mgmt/tinderbox
I Ports Cluster [fehler]
I Konsistente Builds
I Diese als Packages einpacken
I Tausch der aktualisierten Packages auf Zielhosts (cmppp) Hinzuf¨ugenund l¨oschen von Ports ?
I Schnell mal testen ? make all-depends-list make package-depends-list
I siehe /usr/ports/Mk/bsd.port.mk f¨urmehr Details
I Einfacher Fall: Paket h¨angt von nix ab
I Komplizierter Fall: Paket h¨angtvon anderen Dingen ab
I Zur¨uckschneiden des Paket-Baums ?
I /usr/ports/distfiles/ aufr¨aumen ? Dependency Hell
[dependency]
I Architektur (i386, amd64, ...)
I Build und Runtime
I Libraries, Programmbibliotheken
I shared libraries
I Welche Compiler ?
I Aufrufoptionen ?
I Konfigurations-Optionen ?
I Welche Tools ?
I Threads ?
I Wie oft dasselbe in verschiedenen Versionen ? Kombinatorische Explosion shared libraries ?
I Zur Laufzeit hinzugelinkte Programmteile
I Endung: .so
I z.B. mplayer: 74 Libraries!
I Aber mit Versionsnummern! libtcl84.a libtcl84.so libtcl84.so.1 ¨ I Uberhaupt: Versionsnummern!
I Hauptspeicher, Plattenplatz
I lookup Prozesse
I /etc/libmap.conf
I Versionierung von libraries
I Was ist eine API, was ist eine ABI ?
I Mix von static and dynamic linking ? [shared] Wann bricht eine Paketverwaltung ?
I Zwei Anwendungen
I installieren Files
I mit demselben Pfad
I relevante Unterschiede
I Quell-Files sind nicht mehr zug¨anglich
I Komplexit¨at, z.B. databases/mysql-connector-java Note: this port now installs the pre-compiled driver without the option of compiling from source, because compilation requires a mix of Java-5 and Java-6 that is not supported by bsd.java.mk
I Generell: Java: Timezones und Sommerzeit
I CPAN und PEAR und ...
I Local Changes Kurz gesagt: Oft! Zusammenfassung
I Ports und Packages
I Build-from-Source
I Aktualit¨at
I Funktioniert gut seit ca. 10 Jahren
I CPU/Platten/IO-Aufwendig
I Verstehen der Dependency Hell
I Softwareentwicklung und Grundlagen Links 1 pkgcompare http://en.wikipedia.org/wiki/Package manager http://distrowatch.com/dwres.php?resource=package- management debian http://www.debian.org/doc/manuals/apt- howto/index.en.html pkgsrc http://www.netbsd.org/docs/software/packages.html openpkg http://www.openpkg.org/documentation/thesis/ release http://www.atarininja.org/index.py/entries/freebsd/ what-freebsd-stable-branch-means.1024px support http://people.freebsd.org/˜linimon/schedule/schedule.html make1 http://www.wgdd.de/?p=28 make2 http://lists.freebsd.org/pipermail/freebsd- questions/2007-April/147533.html Links 2
porters http://www.freebsd.org/doc/en/books/porters- handbook/ dependency http://en.wikipedia.org/wiki/Dependency hell fehler http://pointyhat.freebsd.org/errorlogs/#errorlist shared http://www.princeton.edu/˜jdonald /research/shared libraries/cs518 report.pdf