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 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 , RPM

I (netbsd u.a.) [pkgsrc]

I solaris ? pkgadd oder IPS

I AIX installp

I MacOS X

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 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 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