FreeBSD/Ports/readonly: Unterschied zwischen den Versionen
Rabe (Diskussion | Beiträge) K (→UUGRN:Jails: linkfix) |
Rabe (Diskussion | Beiträge) K (hat „FreeBSD Ports/readonly“ nach „FreeBSD/Ports/readonly“ verschoben: subartikel) |
(kein Unterschied)
|
Aktuelle Version vom 13. April 2009, 17:40 Uhr
Default[Bearbeiten]
Die Standardkonfiguration der Ports Infrastruktur ist, dass alle "beweglichen Daten" unterhalb von /usr/ports geschrieben und gespeichert werden. Ansich muss man sich hierbei keine großen Gedanken machen, für den Standardfall ist das gut.
Problem[Bearbeiten]
Hat man allerdings sehr viele Systeme zu betreuen, so wird man schnell merken, dass es sehr aufwendig ist, für jedes einzelne System eigene Ports zu verwalten, schon allein der Speicherhunger durch die tausenden kleinen Dateien und Verzeichnisse und die daraus resultierenden Wartezeiten bei Update, Backup und eigentlich allen Dateisystemoperationen auf den Ports können den Wunsch nach einer zentralen Pflege sinnvoll erscheinen lassen.
Naive Idee[Bearbeiten]
Naiv könnte man jetzt /usr/ports per NFS einfach freigeben und auf allen Systemen verwenden. Wehe dem, wenn auf 2 Maschinen parallel Ports konpiliert werden, womöglich noch mit überlappenden Abhängigkeiten, da kann ein "make clean" auf einem System den laufdenden Buildprozess auf dem anderen System zu einem hässlichen Ende führen. Möglicherweise hat man sogar noch verschiedene Rechnerarchitekturen und zum Schluss versucht ein Port bereits fertig kompilierten Code einer amd64 Architektur auf einem i386-System einzuspielen. Will man alles nicht.
Intelligenterer Ansatz[Bearbeiten]
Man setzt die Ports auf read-only für alle Systeme und zwingt jedes System dazu, erforderliche Schreibzugriffe ausserhalb von /usr/ports durchzuführen. Es gibt allerdings einige Stellen, wo im Standardfall davon ausgegangen wird, dass /usr/ports schreibbar ist. Glücklicherweise gibt es für alles Knobs und Flags.
- WRKDIRPREFIX
- Arbeitsverzeichnisse ("work/") unterhalb von /var/tmp Erstellen. Weiterer Vorteil: bei abgebrochenen Kompilierläufen muss man nicht überall in den Ports die diversen /work/-Verzeichnisse wegputzen, einfach rm -Rf /var/tmp/usr/ports/abc/xyz/ reicht.
- DISTDIR und PACKAGES
- Heruntergeladene Sourcen ("distfiles") sowie lokal kompilierte Packages z.B. in /data/ports abgelegen und speichern.
- INDEX
- Die folgenden Zeilen erzwingen den Port-Index in /data/ports. Leider scheinen die verschiedenen Tools auf verschiedene Variablen zu achten, weswegen es hier leichte Redundanzen gibt.
UUGRN:Jails[Bearbeiten]
Auf top.uugrn.org wird das Verzeichnis /usr/ports per mount_null r/o in alle Jail gemountet.
- /etc/fstab
# Device Mountpoint FStype Options Dump Pass# [...] /usr/ports /data/jails/verein.uugrn.org/usr/ports nullfs ro 2 0 /usr/ports /data/jails/intern.uugrn.org/usr/ports nullfs ro 2 0 /usr/ports /data/jails/shell.uugrn.org/usr/ports nullfs ro 2 0 [...]
Somit ist z.B. in shell.uugrn.org das Verzeichnis /usr/ports read-only verfügbar. Damit die Ports dort wie gewohnt funktionieren, sind, wie oben beschrieben, alle für Schreibzugriff erforderliche Verzeichnisse nach /data/ports oder /var/tmp ausgelagert.
- /etc/profile
- Wird von Tools verwendet, die NICHT innerhalb eines make-Kontexts ausgeführt werden.
# ---- Ports r/o ---- export WRKDIRPREFIX=/var/tmp export DISTDIR=/data/ports/distfiles/ export PACKAGES=/data/ports/packages/ export PORTS_INDEX=/data/ports/INDEX export PORTS_DBDIR=/data/ports/
- /etc/make.conf
- Wird im make-Kontext benötigt und zugegriffen.
# /usr/ports ist read-only in den Jails. WRKDIRPREFIX=/var/tmp DISTDIR=/data/ports/distfiles/ PACKAGES=/data/ports/packages/ INDEXDIR=/data/ports PORTS_INDEX=/data/ports/INDEX PORTS_DBDIR=/data/ports/