|
|
Zeile 5: |
Zeile 5: |
|
| |
|
| == Zweck == | | == Zweck == |
| | Betrieb des {{FreeBSD Buildsystem}}s für FreeBSD 9.x: |
| * Daily updates von FreeBSD-'''Source''' (/freebsd/upstream/src/) | | * Daily updates von FreeBSD-'''Source''' (/freebsd/upstream/src/) |
| * Daily updates fon FreeBSD-'''Ports''' (/freebsd/upstream/ports/) | | * Daily updates fon FreeBSD-'''Ports''' (/freebsd/upstream/ports/) |
Zeile 15: |
Zeile 16: |
|
| |
|
|
| |
|
| == Tägliche Updates ==
| |
| Täglich morgens um 03:30 Uhr wird ein Script ausgeführt, welcher folgende Tasks erledigt:
| |
|
| |
| ;sourcen updaten: ''svn update'' in /freebsd/upstream/src/9.1-RELEASE/ (= http://freebsd.uugrn.lan/upstream/src/9.1-RELEASE/)
| |
| ;sourcen als tarball: tar von /freebsd/upstream/src/9.1-RELEASE/ nach /freebsd/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-src.tar (= http://freebsd.uugrn.lan/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-src.tar)
| |
| ;ports updaten: ''portsnap'' in /freebsd/upstream/ports/ (= http://freebsd.uugrn.lan/upstream/ports/)
| |
| ;ports als tarball: tar von /freebsd/upstream/ports/ in /freebsd/upstream/images/ports.tar (= http://freebsd.uugrn.lan/upstream/images/ports.tar)
| |
| ;vanilla image aus aktuellen sourcen erzeugen:
| |
| : '''make buildworld installworld distribution''' in /freebsd/upstream/src/9.1-RELEASE/ (= http://freebsd.uugrn.lan/upstream/src/9.1-RELEASE/)
| |
| : und einpacken als /freebsd/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar (= http://freebsd.uugrn.lan/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar)
| |
| : '''falls''' /freebsd/upstream/src/9.1-RELEASE/UPDATING neuer als /freebsd/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar
| |
| ;uugrn image aus aktuellem vanilla image bauen:
| |
| :* vanilla image entpacken
| |
| :* überflüssige Verzeichnisse entfernen
| |
| :* Anlegen von /alternatives/, /data/ports/
| |
| :* konfigurieren und patchen von /etc/motd, /etc/resolv.conf, /etc/profile, /etc/rc.conf, /etc/periodic.conf, /etc/localtime, /etc/mail/, /etc/crontab, /etc/login.conf,
| |
| :* root-Passwort non-empty setzen
| |
| :* alles einpacken unter /freebsd/uugrn/nightly/images/FreeBSD-9.1-RELEASE-amd64-image-uugrn.tar (= http://freebsd.uugrn.lan/uugrn/nightly/images/FreeBSD-9.1-RELEASE-amd64-image-uugrn.tar)
| |
|
| |
| == Package-Builds ==
| |
| Package-Builds erzeugen für ausgewählte Ports passende Binär-Packages basierend auf den aktuellen Ports. Jeder Build wird dabei bei Bedarf mit einem Script (/build/tools/new_build.sh) in ein komplett eigenständiges Build-Verzeichnis gebootstrappt. Das Buildverzeichnis liegt unter /build/YYYYMMDDHHMMSS/.
| |
|
| |
| Das Buildverzeichnis enthält eine Kopie der aktuellen Buildscripte und ein Unterverzeichnis namens buildroot, welches durch folgende nightly-Tagrballs gebootstrappt wird:
| |
| * vanilla.tar: aktuelles Userland-Image basierend auf aktellsten Sourcen (direkt in .../buildroot/)
| |
| * src.tar: aktuellste Sourcen in .../buildroot/usr/src/
| |
| * ports.tar: aktueller Portsbaum in .../buildroot/usr/ports/
| |
|
| |
| Außerdem wird in .../buildroot/build/ alles an Scripten und Konfiguration abgelegt, was für den Build *innerhalb* dieses chroot() erforderlich ist, u.a. das .../buildroot/build/build.sh, welches mehr oder weniger den vollständugen Build durchführt.
| |
|
| |
| Nach Ende des (erfolgreichen) Builds innerhalb des buildroot/ werden die im Buildroot erzeugten Packages aus "herausgeholt".
| |
|
| |
| Das buildroot wird für alle weiteren Steps nicht mehr weiter verwendet, alle folgenden Schritte basieren ausschließlich auf einem frischen Bootstrap unter der Verwendung der vorkompilierten Pakete.
| |
|
| |
| == Jail-Flavours ==
| |
| Basierend dem aktuellen nightly-Buildworld (/freebsd/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar) werden verschiedene Geschmacksrichtungen und typische Konfigurationen für Jails erzeugt, jeweils aufeinander aufbauend. Dabei werden zunächst lokale Standardeinstellungen vorgenomen und dann nach und nach Packages (und deren Abhängigkeiten) installiert:
| |
|
| |
| ;uugrn/tiny (uugrn/core):
| |
| : Hier wird die nicht weiter konfigurtierte Standard-''world'' (''vanilla.tar'') angepasst für den Betrieb als Jail bei UUGRN
| |
| : Es werden hier *keine* Packages installiert
| |
| ;uugrn/small (uugrn/basic):
| |
| : Enthält ein Minimalset an Tools, die in jedem Jail vorhanden sein sollten.
| |
| : Wird aus tiny.tar erzeugt
| |
| : Packages: ''bash coreutils sudo gsed findutils nano screen portupgrade pkg_cutleaves portaudit''
| |
| ;uugrn/medium:
| |
| : Enthält erweiterte Tools und typische Textconsolen-Anwendungen wie Editoren, E-Mail, ..
| |
| : Wird erzeugt aus small.tar
| |
| : Packages: ''vim-lite emacs-nox11 mc gnupg mutt slrn tin irssi lynx w3m wget rsync procmail figlet fetchmail''
| |
| ;uugrn/large:
| |
| : Enthält mehr Tools und Serversoftware
| |
| : Wird aus medium.tar erzeugt
| |
| : Packages: ''links rar unrar zip zsh gawk ksh93 pwgen muh climm dovecot2 apache22 mod_php5 php5-extensions''
| |
| ;uugrn/huge:
| |
| : Enthält sehr viele Grafik und Multimediaibliotheken und Tools
| |
| : Wird aus large.tar erzeugt
| |
| : Packages (diese ziehen jeweils sehr viele Abhängikeiten mit): ''graphviz ImageMagick''
| |
| ;uugrn/www:
| |
| : Für ein Betrieb eines einfachen Webservers
| |
| : Wird aus small.tar erzeugt
| |
| : Packages: ''apache22''
| |
| ;uugrn/wwwphp:
| |
| : Webserver mit Apache + PHP5
| |
| : Wird aus www.tar erzeugt
| |
| : Packages: ''mod_php5 php5-extensions''
| |
| ;uugrn/mediawiki:
| |
| : Enthält alles, was man für den Betrieb von MediaWiki oder PHP5 basierte CMS-Systeme benötigt
| |
| : wird aus wwwphp.tar erzeugt
| |
| : Packages: (sieht sehr viele Abhängigkeiten nach): ''ImageMagick''
| |
|
| |
| Die hier resultierenden Tarballs heißen vollständig dann z.B. FreeBSD-9.1-RELEASE-amd64-image-uugrn-medium.tar
| |
|
| |
| == Images (tarballs) ==
| |
| Am Ende des Build-Vorgangs wird alles jeweils in tarballs verpackt und für die Veröffentlichung vorbereitet.
| |
|
| |
| Ein typisches images/-Verzeichnis enthält folgende Tarballs:
| |
| <pre>
| |
| -rw-r--r-- 1 root wheel 2818033664 Jun 8 00:29 FreeBSD-9.1-RELEASE-amd64-image-buildroot-noports-nosrc.tar
| |
| -rw-r--r-- 1 root wheel 167 Jun 8 00:30 FreeBSD-9.1-RELEASE-amd64-image-buildroot-noports-nosrc.tar.sha256
| |
| -rw-r--r-- 1 root wheel 671779840 Jun 8 00:31 FreeBSD-9.1-RELEASE-amd64-image-buildroot-packages.tar
| |
| -rw-r--r-- 1 root wheel 6935 Jun 8 00:31 FreeBSD-9.1-RELEASE-amd64-image-buildroot-packages.tar.origins
| |
| -rw-r--r-- 1 root wheel 162 Jun 8 00:31 FreeBSD-9.1-RELEASE-amd64-image-buildroot-packages.tar.sha256
| |
| -rw-r--r-- 1 root wheel 2204937216 Jun 8 00:32 FreeBSD-9.1-RELEASE-amd64-image-buildroot-ports-full.tar
| |
| -rw-r--r-- 1 root wheel 164 Jun 8 00:33 FreeBSD-9.1-RELEASE-amd64-image-buildroot-ports-full.tar.sha256
| |
| -rw-r--r-- 1 root wheel 1347032576 Jun 8 00:52 FreeBSD-9.1-RELEASE-amd64-image-uugrn-huge.tar
| |
| -rw-r--r-- 1 root wheel 1037542912 Jun 8 00:50 FreeBSD-9.1-RELEASE-amd64-image-uugrn-large.tar
| |
| -rw-r--r-- 1 root wheel 1068101120 Jun 8 00:56 FreeBSD-9.1-RELEASE-amd64-image-uugrn-mediawiki.tar
| |
| -rw-r--r-- 1 root wheel 837196800 Jun 8 00:47 FreeBSD-9.1-RELEASE-amd64-image-uugrn-medium.tar
| |
| -rw-r--r-- 1 root wheel 496647168 Jun 8 00:46 FreeBSD-9.1-RELEASE-amd64-image-uugrn-small.tar
| |
| -rw-r--r-- 1 root wheel 342000640 Jun 8 00:46 FreeBSD-9.1-RELEASE-amd64-image-uugrn-tiny.tar
| |
| -rw-r--r-- 1 root wheel 563835392 Jun 8 00:53 FreeBSD-9.1-RELEASE-amd64-image-uugrn-www.tar
| |
| -rw-r--r-- 1 root wheel 662937088 Jun 8 00:54 FreeBSD-9.1-RELEASE-amd64-image-uugrn-wwwphp.tar
| |
| -rw-r--r-- 1 root wheel 341968384 Jun 6 22:59 FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar
| |
| -rw-r--r-- 1 root wheel 1438161920 Jun 6 22:59 FreeBSD-9.1-RELEASE-src.tar
| |
| -rw-r--r-- 1 root wheel 382213632 Jun 6 22:59 ports.tar
| |
| </pre>
| |
|
| |
| === Verwendung der Images ===
| |
| ; FreeBSD-9.1-RELEASE-amd64-image-buildroot*.tar: enthält jeweils eine Auswahl des buildroots, mit dem die Packages gebaut wurden. Das dient vor allem Debugging- und Analysezwecken und allgemein als Referenz für die Herkunft der Packages (d.h. unter welchen konkreten Bedingungen sie gebaut wurden)
| |
| ;FreeBSD-9.1-RELEASE-amd64-image-buildroot-ports-full.tar: /usr/ports mit /usr/ports/distfiles/ und /usr/ports/packages/ jedoch ohne /var/db/ports/ (persistiertes ''make config'' der Ports, die das supporten)
| |
| ; FreeBSD-9.1-RELEASE-amd64-image-uugrn-*.tar: Fertige Jail-Images, die einfach mittels "tar xf" im Hauptverzeichnis eines *neuen* (leeren) Jails entpackt werden können. Ein neues Jail läst sich dann sinngemäß so anlegen und starten:
| |
| <pre>
| |
| # (jail.conf anpassen)
| |
| # zfs create zroot/jails/uug/foo
| |
| # cd /jails/uug/foo && tar xf /freebsd/uugrn/live/images/FreeBSD-9.1-RELEASE-amd64-image-uugrn-small.tar
| |
| # jail -c uug_foo (gemäß jail.conf::uug_foo{})
| |
| </pre>
| |
| ; FreeBSD-9.1-RELEASE-src.tar und ports.tar:
| |
| : sind die zum Zeitpunkt, an dem der Build angelegt wurde aktuellen Sourcen und Ports von FreeBSD. Dienen als Referenz und werden als stabile Version in den Jails verwendet.
| |
| : Werden /freebsd/uugrn/{dev,qa,live}/src/ und /freebsd/uugrn/{dev,qa,live}/ports/ abgelegt und sollten via /alternatives/ports und /alternatives/src in den Jails entsprechend unter /usr/src und /usr/ports (read-only) zugreifbar sein:
| |
| <pre>
| |
| lrwxr-xr-x 1 root wheel 19 Jun 14 2013 /usr/ports -> /alternatives/ports
| |
| lrwxr-xr-x 1 root wheel 25 May 9 2013 /alternatives/ports -> /freebsd/uugrn/live/ports
| |
| drwxr-xr-x 70 root wheel 86 Jun 6 23:40 /freebsd/uugrn/live/ports
| |
| drwxr-xr-x 70 root wheel 86 Jun 6 23:40 /freebsd/uugrn/20140606225918/ports
| |
| </pre>
| |
|
| |
| == Veröffentlichung ==
| |
| === Lokal in /freebsd ===
| |
| Ein Build wird unter /freebsd/uugrn/ veröffentlicht und enthält sieht zB so aus:
| |
|
| |
| <pre>
| |
| # ls -la /freebsd/uugrn/20140606225918/
| |
| total 19
| |
| drwxr-xr-x 5 root wheel 5 Jun 8 00:56 .
| |
| drwxr-xr-x 7 root wheel 14 Jun 8 11:02 ..
| |
| drwxr-xr-x 2 root wheel 20 Jun 8 00:55 images
| |
| drwxr-xr-x 70 root wheel 86 Jun 6 23:40 ports
| |
| drwxr-xr-x 22 root wheel 31 Jun 6 22:59 src
| |
| </pre>
| |
|
| |
| ;images/: enthält eine '''Kopie''' er in /build/20140606225918/images/ erzeugten Tarballs
| |
| ;ports/ und src/: enthalten exakt den Stand von FreeBSD-Sourcen und FreeBSD-Ports, wie sie innerhalb des Builds aktuell waren und genutzt wurden
| |
|
| |
| === FTP-Server ===
| |
| ;Distfiles: Beim Build benötigte (heruntergeladene) Distfiles werden auf den FTP-Server hochgeladen und werden dort unter http://ftp.uugrn.org/pub/FreeBSD/ports/distfiles/ gesammelt. Hier befinden sind üblicherweise auch älte Versionen der jeweiligen Distfiles, z.B. verschiedene Releases von Perl 5.12 bis 5.16 in http://ftp.uugrn.org/pub/FreeBSD/ports/distfiles/perl/
| |
|
| |
| ; Packages: Gebaute Packages werden auf dem FTP-Server an der Stelle abgelegt, wo "pkg_add -r" sie suchen würde: http://ftp.uugrn.org/pub/FreeBSD/ports/amd64/packages-9.1-release/. Hat man in seinem Jail die Variable '''PACKAGEROOT="http://ftp.uugrn.lan"''' gesetzt (und exportiert), dann wird '''pkg_add -r''' die jeweiligen Packages auf dem FTP-Server automatisch an der passenden Stelle finden. Das geht auch externen Systemen aus, die keinen Zugriff auf /freebsd/ oder http://freebsd.uugrn.lan/ haben.
| |
|
| |
|
|
| |
|
Zeile 159: |
Zeile 24: |
|
| |
|
| == siehe auch == | | == siehe auch == |
| | * {{FreeBSD Buildsystem}} |
| * [[FreeBSD]] | | * [[FreeBSD]] |
| :* [[FreeBSD Ports]] | | :* [[FreeBSD Ports]] |