UUGRN:Buildsystem

Aus UUGRN
Version vom 23. August 2013, 23:43 Uhr von Rabe (Diskussion | Beiträge) (Ein Überblick und Anfang, was das Buildsystem ist und was es bereits leistet. Es fehlen noch etliche Aspekte, zB die Rolle von ftp.uugrn.org)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Ein wichtiger Bestandteil der UUGRN-Infrastruktur ist das Buildsystem. Hier werden alle Aspekte der FreeBSD Systempflege verwaltet, zum Beispiel

Hauptkomponenten

Das Buildsystem für FreeBSD 9.x existiert im Jail fbsd9. Dieses Jail ist aktuell auf top3offline beheimatet, könnte aber insgesamt auf jedem anderen FreeBSD 9.x-System laufen.

Verzeichnisse

Auf (nahezu) allen Jail existiert ein Verzeichnis /freebsd. Dieses ist überall read-only gemountet, lediglich in fbsd9 ist es read-write verfügbar, da es hier maintaint wird.

Hier existiert /freebsd/upstream welches vor allem src/ und ports/ enthält, welche täglich durch svn und portsnap aktualisiert werden

Images

Basierend auf dem aktuellen Stand von upstream/src und upstream/ports werden täglich (nightly-Builds) entsprechende tarballs erzeugt. Diese sollten tagesaktuell sein, die "buildworld"-Images werden nur bei Bedarf neu erzeugt.

Vanilla
Das vanilla-Image ist das unverfälsche Ergebnis von "make buildworld installworld distribution" ohne irgendwelche weiteren Anpassungen.
UUGRN
Das uugrn-Image basiert auf dem vanilla-Image und wird durch zahlreiche Schritte für den Betrieb bei UUGRN optimiert, zB /freebsd, Zeitzone, DNS, Mail, cron, periodic, …. Das UUGRN-Image ist das Basis-Image für UUGRN-Jails, jedoch ohne Zusatzsoftware.
Verzeichnisbaum
/freebsd/upstream/images/
├── 9.1-RELEASE
│   ├── FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar
│   ├── FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar.sha256
│   ├── FreeBSD-9.1-RELEASE-src.tar
│   └── FreeBSD-9.1-RELEASE-src.tar.sha256
├── ports.tar
└── ports.tar.sha256
/freebsd/uugrn/nightly/images/
├── FreeBSD-9.1-RELEASE-amd64-image-uugrn.tar
└── FreeBSD-9.1-RELEASE-amd64-image-uugrn.tar.sha256


Nightly-Builds

# ===============================================
# NIGHTLY Build
# 
# 1)    update sources (svn up)                 tarball
# 2)    update ports (portsnap)                 tarball
# 3)    build vanilla-image                     tarball
# 4)    customize/build jail-image              tarball
# 5)    customize/build uugrn-image             tarball
# 6)    checksum, upload to FTP
# 7)    pre-fetch distfiles of active ports
# ===============================================


Package-Build

Neben den täglichen Updates basierend auf /usr/src existiert auch ein eigener Mechanismus zum Bau von vorkompilierten Packages, basierend auf /usr/ports.

Jeder Build findet in einem eigenen chroot-Verzeichnis statt. Ein solches chroot wird in mehren Stufen erzeugt, ausgehend von den Upstream-Images (/usr/src, /usr/ports und "world", dem Ergebnis von "make buildworld distribution" auf /usr/src).

Die Vorgehensweise umfasst grob:

/build/tools/new_build.sh

  • Neuen Build erzeugen unter Verwendung
    • des vanilla-Images, also dem aktuellen Userland-Image aus den nightly-Builds
    • des ports-Images, also dem tagesaktuellen Stand von /usr/ports (portsnap)
    • des src-Images, also dem tagesaktuellen Stand von /usr/src (subversion)
  • Build-chroot anlegen
  • Images reinkopieren
  • Build-Scripte und Dateien nach chroot/build/ kopieren
  • run.sh-Script anlegen, über das man eine shell im chroot/ bekommt (/build/tools/new_build.sh)


Beispiel-Terminalausgabe von /build/tools/new_build.sh
[root@fbsd9 /build]# tools/new_build.sh
2013-08-24 00:48:22: 1) set up /build/20130824004822/
/build/20130824004822
2013-08-24 00:48:22: 2) set up /build/20130824004822//root/
2013-08-24 00:48:22:    --> create /build/20130824004822/
2013-08-24 00:48:22:    --> populate /build/20130824004822//root/ from /freebsd/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-amd64-image-vanilla.tar
2013-08-24 00:48:29:    --> populate /usr/src/ from /freebsd/upstream/images/9.1-RELEASE/FreeBSD-9.1-RELEASE-src.tar
2013-08-24 00:48:56:    --> populate /usr/ports/ from /freebsd/upstream/images/ports.tar
/usr/ports
/usr/ports/packages
/usr/ports/distfiles
2013-08-24 00:49:24:    --> populate chroot/root/
/build/files/.vimrc -> /build/20130824004822//root//root/.vimrc
2013-08-24 00:49:24:    --> populate chroot/build/
/build
/build/files/build.sh -> /build/20130824004822//root//build/build.sh
/build/files/var_db_ports.tar -> /build/20130824004822//root//build/var_db_ports.tar
2013-08-24 00:49:24:    --> populate /var/db/ports
2013-08-24 00:49:24:    --> populate chroot/etc/
/etc/resolv.conf -> /build/20130824004822//root//etc/resolv.conf
/etc/make.conf -> /build/20130824004822//root//etc/make.conf
2013-08-24 00:49:24: 3) create /build/20130824004822//run.sh

/build/YYYYMMDDHHMMSS/run.sh

  • mounten von /dev
  • starten einer Shell (csh)
Terminalausgabe run.sh
[root@fbsd9 /build]# /build/20130824004822/run.sh
root@fbsd9:/ # 

/build/build.sh

  • manuelle Ausführung von /build/build.sh
    • bootstrappen von portuppgrade
    • Bau von essenziellen Packages in den gewünschen Versionen (db46, sqlite3, apache24, mysql55, perl5.14)
    • (Neu) Bau von allen anderen Packages, ca 50-100 Packages werden derzeit explizit gebaut was mit Abhängigkeiten ca 800 Packages ergibt

UUGRN-Jail Prototypen

Basierend auf dem uugrn-Basisimage und den Packages aus dem package-Build werden verschiedene Jail-Images erzeugt:

small
(basiert auf uugrn) bash coreutils sudo gsed findutils nano screen portupgrade pkg_cutleaves portaudit
medium
(basiert auf small) vim-lite emacs mc gnupg mutt slrn tin irssi lynx w3m wget rsync procmail figlet fetchmail
large
(basiert auf medium) links rar unrar zip zsh gawk ksh93 pwgen unix2dos muh climm graphviz ImageMagick dovecot2 apache24 php5 php5-extensions
webstatic
(basiert auf uugrn): apache24
webphp
(basiert auf webstatic): php5 php5-extensions ImageMagick