Portupgrade auf ro-gemountetes /usr/ports-Verzeichnis

crotchmaster

happy BSD user
Hi,

ich kämpfe hier seit ein paar Tagen an folgendem Problem. Ich habe einen Fileserver unter FreeBSD 5.4 (compaq1), der sein Verzeichnis /usr/ports readonly via NFS exportiert, zusätzlich exportiert er ein Verzeichnis für die distfiles ebenfalls via NFS, die Clients können darin schreiben. Auf zwei FreeBSD 5.4 Clients werden mit Hilfe des automounters die exportierten Verzeichnisse gemountet. Bei einem 'make install' klappt das auch alles wunderbar. Nur das Portupgrade geht in die Hosen. Durch googlen habe ich herausgefunden, das man in der Datei /usr/local/etc/pkgtools.conf ein paar Variablen setzen soll, wenn das Ports-Verzeichnis ro-gemountet wird. Speziell handelt es sich um PORTS_INDEX und PORTS_DBDIR. Das habe ich gemacht, aber es will trotzdem nicht.

Meine pkgtools.conf sieht so aus:

Code:
module PkgConfig
  ENV['PORTSDIR'] ||= '/usr/ports'
  ENV['PACKAGES'] ||= ENV['PORTSDIR'] + '/packages'
  ENV['PKG_PATH'] ||= ENV['PACKAGES'] + '/All'
  ENV['PORTS_INDEX'] ||='/var/db/pkg/INDEX.local'
  ENV['PORTS_DBDIR'] ||='/var/db/pkg'

  SANITY_CHECK = true

  IGNORE_CATEGORIES = [
  ]

  EXTRA_CATEGORIES = [
  ]

  HOLD_PKGS = [
    'bsdpan-*',
  ]

  USE_PKGS = [
  ]

  USE_PKGS_ONLY = [
  ]

  ALT_PKGDEP = {
  }

  MAKE_ARGS = {
  }

  BEFOREBUILD = {
  }

  BEFOREDEINSTALL = {
  }

  AFTERINSTALL = {
    # Re-enable the X wrapper
    'x11-servers/XFree86-4-Server' => sprintf(
     'cd %s/bin && if [ -x Xwrapper-4 ]; then ln -sf Xwrapper-4 X; fi',
     x11base()),
  }

  PKG_SITES = [
    pkg_site_mirror(),
  ]

  PORTUPGRADE_ARGS = ENV['PORTUPGRADE']

end

folgende Fehlermeldung bekomme ich:
Code:
-su-2.05b# portupgrade -r firefox-1.0_7,1
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 426 packages found (-0 +1) . done]
Updating the ports index ... Generating INDEX.tmp - please wait..ident warning: no id keywords in standard inp             ut
cannot create /mnt/.amd_mnt/compaq1/host/usr/ports/INDEX.tmp.tmp: Read-only file system
Warning: Duplicate INDEX entry: boost-python-1.32.0_2
Warning: Duplicate INDEX entry: freeciv-gtk2-2.0.6
Warning: Duplicate INDEX entry: clearsilver-python-0.9.14
mv: rename /mnt/.amd_mnt/compaq1/host/usr/ports/INDEX.tmp.tmp to /mnt/.amd_mnt/compaq1/host/usr/ports/INDEX.tm             p: No such file or directory
*** Error code 1

Stop in /mnt/.amd_mnt/compaq1/host/usr/ports.
*** Error code 1

Stop in /mnt/.amd_mnt/compaq1/host/usr/ports.
failed to generate INDEX!
index generation error
/usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:482:in `open_db': database file error (PortsDB::DBError)
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:634:in `port'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:822:in `all_depends_list'
        from /usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:915:in `tsort_build'
        from /usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:907:in `each'
        from /usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:907:in `tsort_build'
        from /usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:929:in `sort_build'
        from /usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:933:in `sort_build!'
        from /usr/local/sbin/portupgrade:674:in `main'
        from /usr/local/sbin/portupgrade:207:in `initialize'
        from /usr/local/sbin/portupgrade:207:in `new'
        from /usr/local/sbin/portupgrade:207:in `main'
        from /usr/local/sbin/portupgrade:1845

Irgendwie kann der den Index nicht erzeugen. Er scheint 'mich' ;'( einfach zu ignorieren.

Kann mir hier jemand auf die Sprünge helfen und ein paar Tipps geben?

Gruß c.
 
Den INDEX an sich kannst du ruhig zentral lassen. Wenn das jede Maschine selbst erzeugen muss ... oh weh.

Was woanders hin muss ist die INDEX.db, ich habe also nur einen lokalen Pfad fuer PORTS_DBDIR eingetragen, INDEX an sich wird vom NFS-Server nachm 'make update' erstellt.

Code:
  ENV['PORTSDIR'] ||= '/usr/ports'
  ENV['PACKAGES'] ||= ENV['PORTSDIR'] + '/packages'
  ENV['PKG_PATH'] ||= ENV['PACKAGES'] + '/All'
  ENV['PKG_DBDIR'] ||= '/var/db/pkg'
  ENV['PORTS_DBDIR'] ||= ENV['PKG_DBDIR']
 
Da INDEX und INDEX.db immer die gleichen Daten beinhalten sollten halte ich es für sinnvoll die INDEX.db auch nur auf dem Server zu haben und ebenfalls zu exportieren. Um sie zu erstellen reicht ein beherztes portsdb -u nachdem INDEX aktualisiert wurde.
 
Maledictus hat eigentlich recht, aber ich hatte da grosse Probleme, weil ich eben INDEX, INDEX-5 und INDEX-6 gleichzeitg brauche. Die mit 'make OSVERSION=4xxx index; make OSVERSION=5xx index; make OSVERSION=6xxx index" zu erzeugen ist kein Problem. Aber mit INDEX.db geht das nicht so leicht, oder?
 
Da hast du wiederrum recht, es gibt leider immer nur eine korrespondierende INDEX.db. Wenn man also mehrere Branches (4.x, 5.x, 6.x) fährt sollte man die INDEX.db wohl besser auf den jeweiligen clients bauen...
 
Back
Top