MINI-FAQ: OpenBSD upgraden - Alte Releases

Hier aufgeführte Releases: 2.3 bis 3.6

Kjell Wooding <kjell@openbsd.org>
Aktualisiert: $OpenBSD: upgrade-old.html,v 1.1 2005/12/07 15:31:45 saad Exp $


Dieses Dokument enthält Einträge der Mini-FAQ über das Upgraden von OpenBSD-Releases, die nicht mehr aktiv unterstützt werden. Lies die Seite Der Entwicklung von -current folgen, um Informationen für das aktuelle Release zu erhalten.

1.0: Allgemeine Fragen über das Upgrade

1.1: Wo finde ich Informationen über aktuellere OpenBSD-Releases?

Von 3.7 auf 3.8 upgraden

Von 3.6 auf 3.7 upgraden

2004-10-27 - Flagday für die Verarbeitung von Exceptions (amd64, cats, hppa, sgi, sparc64)
2004-10-29 - Wechsel auf gcc3 (macppc)
2004-11-11 - Verhaltensänderung vom bgpd
2004-11-24 - Neuer Benutzer und neue Gruppe: _ftp
2004-12-30 - Wechsel auf gcc3 (i386)
2005-01-18 - Neuer Benutzer und neue Gruppe: _ospfd
2005-01-24 - pfsync nimmt syncdev statt syncif
2005-02-02 - POSIX-konforme hexadezimale und oktale Konstanten in (k)sh

Von 3.5 auf 3.6 upgraden

3.5.1: Unternummern des pty-Devices geändert
3.5.2: Neuer Benutzer und neue Gruppe namens _dhcp
3.5.3: Neuer Benutzer und neue Gruppe namens _mopd
3.5.4: Neuer Benutzer und neue Gruppe namens _tftpd
3.5.5: Neuer Benutzer und neue Gruppe namens _rbootd
3.5.6: cksum nach /bin verschoben
3.5.7: Neuer Benutzer und neue Gruppe namens _afs
3.5.8: Neuer Benutzer und neue Gruppe namens _ppp
3.5.9: Neuer Benutzer und neue Gruppe namens _ntp
3.5.10: Flagday für Versionserhöhung der Bibliotheken
3.5.11: Änderungen in PF-Anker

Von 3.4 auf 3.5 upgraden

3.4.1: Unternummern des svnd-Devices geändert
3.4.2: Neuer Benutzer und neue Gruppe namens _pflogd
3.4.3: Interfacecloning
3.4.4: Neuer Benutzer und neue Gruppe namens _bgpd
3.4.5: Neue Version von join(1)
3.4.6: Übersetzungsänderung von sudo
3.4.7: Neuer Benutzer und neue Gruppe namens _tcpdump
3.4.8: Änderungen an machdep.c (i386)
3.4.9: Aktualisierte bsd.own.mk
3.4.10: Wechsel auf gcc3 (sparc64)

Von 3.3 auf 3.4 upgraden

3.3.1: W^X-Unterstützung für i386
3.3.2: Änderung am mquery-syscall
3.3.3: i386-Flagday: Änderung an exe addr/MAXDSIZ
3.3.4: Entfernung der KerberosIV-Authentikation
3.3.5: Änderung an config
3.3.6: Verwende __attribute__((bounded)) bei bestimmten Funktionen
3.3.7: Neuer Benutzer und neue Gruppe namens _syslogd
3.3.8: Verwende das Formatattribut __kprintf__ in Kernelheader

Von 3.2 auf 3.3 upgraden

3.2.1: Neues Perl
3.2.2: Neue Gruppen: _radius, _token und _shadow
3.2.3: Wichtige Compileränderungen
3.2.4: Neuer Benutzer und neue Gruppe namens _spamd
3.2.5: Alias für ipv6-icmp
3.2.6: Neue Gruppe namens _lkm
3.2.7: Neue libpthread
3.2.8: Linkeränderungen für ELF-Architekturen
3.2.9: Entfernung von /var/at und Änderungen an Crontabs

Von 3.1 upgraden

3.1.1: Neue Benutzer/Gruppen
3.1.2: NNeue Gruppe für crontab(1) und at(1)
3.1.3: Neue Binutils
3.1.4: Neue S/Key-Konfiguration
3.1.5: Neue Rechte für lp*
3.1.6: atrun(8) wird nicht mehr benötigt
3.1.7: nat.conf in pf.conf eingebunden
3.1.8: Neuer fbtab-Eintrag für xdm benötigt
3.1.9: Verwende __attribute__((sentinel)) mit bestimmten Funktionen

Von 3.0 upgraden

3.0.1: Neues Schlüsselwort wird von mtree(8) unterstützt
3.0.2: Entfernung von libdl auf ELF-Plattformen
3.0.3: Neues Regressionframework
3.0.4: Konfigurationsdateien von ssh nach /etc/ssh/ verschoben

Von 2.9 upgraden

2.9.1: Neue Benutzer/Gruppen: proxy, smmsp und popa3d
2.9.2: Neuer Paketfilter: pf
2.9.3: Änderungen an make
2.9.4: Erzeugung bricht wegen KerberosV-Fehlern ab
2.9.5: Neue Version von sendmail
2.9.6: /etc/primes verschoben

Von 2.8 upgraden

2.8.1: Neue Gruppe namens auth
2.8.2: Neues wscons-Konsolensystem
2.8.3: Kernelkompilierung schlägt wegen undefinierten Symbolen fehl

Von 2.7 upgraden

2.7.1: Welche großen Probleme treten beim Upgrade von 2.7 auf 2.8 auf?

Von 2.6 upgraden

2.6.1: Termcap-Einträge sind zu lang.
2.6.2: Mein pn- (oder mx-, al-, ax-) Device wird nicht mehr vom Kernel erkannt.
2.6.3: Von gcc 2.95.1 auf 2.95.2 upgraden
2.6.4: Kerberos upgraden.
2.6.5: M4 upgraden.
2.6.6: Sendmail upgraden.
2.6.7: Nach dem Upgraden booten die Kernel nicht mehr, die Unterstützung für apm(8) beinhalten.
2.6.8: Standardgruppe des Benutzers daemon geändert

Von 2.5 upgraden

2.5.1: Welche großen Probleme treten beim Upgrade von 2.5 auf 2.6 auf?
2.5.2: Wie upgrade ich von gcc auf egcs

2.5.2.1 - i386 und sparc werden nicht mehr per #define definiert
2.5.2.2 - Erzeugungsphase bricht bei xlint ab
2.5.2.3 - Coredump bei uthread_autoinit.c
2.5.2.4 - egcs scheint viel langsamer zu sein als gcc
2.5.2.5 - egcs generiert größeren Code als gcc
2.5.2.6 - Nach der Installation von egcs hatte ich nur noch wenig Plattenspeicher übrig
2.5.2.7 - Meine Erzeugungsphase bricht während libcurses ab
2.5.2.8 - make obj schlägt fehl

2.5.3: Mein make build bricht mit Fehlern über unimplemented syscall ab
2.5.4: Verweis auf das neue 2.6-Verzeichnis.
2.5.5: Nach einem (U)pgrade schlägt das Entpacken von base26.tar.gz mit einer Meldung fehl.

Von 2.4 upgraden

2.4.1: Änderungen an den Manualseiten
2.4.2: Syntax von cap_mkdb wurde geändert
2.4.3: Snake

Von 2.3 upgraden

2.3.1: Neuer Benutzer: named
2.3.2: Ich habe versucht, das System zu erzeugen, doch schlägt der Prozess fehl, wenn ssleay kompiliert werden soll.
2.3.3: Ich habe versucht, dass System zu erzeugen, doch schlägt der Prozess fehl, wenn ich das System für die PowerPC-Architektur erstelle.

 

1.0: Allgemeine Fragen über das Upgrade

1.1: Wo finde ich Informationen über aktuellere OpenBSD-Releases?

Lies die Seite Der Entwicklung von -current folgen.

Von 3.7 auf 3.8 upgraden

2005-03-29 - Flagday für die Verarbeitung von Exceptions (i386)

OpenBSD/i386 wurde auf die DWARF-basierte Verarbeitung von Exceptions umgestellt. Um upzugraden musst du zunächst gcc3 übersetzen und installieren und dann eine neue Version der libstdc++ installieren:
     # cd /usr/src/gnu/lib/libstdc++
     # make -f Makefile.bsd-wrapper cleandir
     # make -f Makefile.bsd-wrapper obj
     # make -f Makefile.bsd-wrapper
     # make -f Makefile.bsd-wrapper install

2005-03-31 - Flagday für mmap(2) (vax)

Die Begrenzung des virtuellen Speichers hat sich für OpenBSD/vax geändert. Die Tatsache, dass OpenBSD/vax statisch gelinkt wird, setzt eine spezielle Vorgehensweise voraus. Die folgenden Schritte müssen befolgt werden, um ein brauchbares System zu erzeugen.

2005-04-13 - Neuer Benutzer und neue Gruppe: _hostapd

Der neue, privilegiengetrennte HostAP-Daemon benötigt einen neuen Benutzer und eine neue Gruppe mit dem Namen _hostapd. Füge den Benutzer und die Gruppe hinzu, indem du
    useradd -u86 -g=uid -c"HostAP Daemon" -d/var/empty -s/sbin/nologin _hostapd
als root ausführst.

2005-05-27 - Aus pf log-all wird log (all)

Das pf.conf(5)-Schlüsselwort log-all wurde entfernt. Die neue Syntax für diese Funktionalität ist nun log (all).

2005-06-01 - mmap wird nun vom rlimit datasize berücksichtigt

Anonyme Speicherallokierung mittels mmap(2) wird nun bei der Auswertung der Ressourcenbegrenzung für die Datengröße von Prozessen berücksichtigt. Daraus folgt, dass Prozesse nun scheinbar mehr Speicher als sonst in Anspruch nehmen; die alten Ressourcenbegrenzungen könnten somit zu klein sein. Um das Problem mit den Ressourcenbegrenzungen zu lösen, aktualisiere die /etc/login.conf:
     # cd /usr/src/etc
     # cp login.conf /etc
Melde dich danach ab und und wieder an.

2005-06-09 - Konfigurationsänderung vom bgpd

Die bgpd.conf(5)-Schlüsselwörter network connected [set ...] und network static [set ...] sind veraltet. Sie sollten jeweils mit network inet connected [set ...] und network inet static [set ...] ausgetauscht werden.

2005-08-02 - Neue Funktionalitäten in crunchgen

Eine Aktualisierung von crunchgen(1) fand statt, um zusätzliche Bibliotheksverzeichnisse zu verarbeiten. Starte unbedingt neu und installiere wieder crunchgen, bevor du ein Release oder eines der Installationsmedien erstellst.

2005-08-06 - LC_CTYPE-Locales erstellen

Übersetze und installiere mklocale(1).
     # cd /usr/src/usr.bin/mklocale && make obj && make depend && make && make install
Führe danach make build aus.

Von 3.6 auf 3.7 upgraden

2004-10-29 - Wechsel auf gcc3 (macppc)

OpenBSD/macppc wurde auf gcc3 umgestellt. Um upzugraden, Folgendes ausführen:
    # rm -rf /usr/include/g++
Als nächstes muss gcc3 erzeugt werden (unter Verwendung des gcc3-Verzeichnisses) und danach wie gewöhnlich der Kernel und das System.

2004-11-11 - Verhaltensänderung vom bgpd

Das neue rde route-age [evaluate|ignore] änderte das Verhalten vom bgpd. Bisher war evaluate der implizierte Standard; jetzt ist es ignore. Die Auswertung des Routenalters wird nicht im RFC 1771 bestimmt. Das resultiert nun in nicht deterministischen Entscheidungen im Vorzug für stabiliere Verbindungen.

2004-11-24 - Neuer Benutzer und neue Gruppe: _ftp

Der FTP-Daemon wird überarbeitet, um Privilegientrennung zu verwenden. Aus diesem Grund ist ein neuer Benutzer und eine neue Gruppe mit dem Namen _ftp notwendig. Füge den Benutzer und die Gruppe hinzu, indem du
    useradd -u84 -g=uid -c"FTP Daemon" -d/var/empty -s/sbin/nologin _ftp
als root aufrufst.

2004-12-30 - Wechsel auf gcc3 (i386)

OpenBSD/i386 wurde auf gcc3 umgestellt. Um upzugraden, führe Folgendes aus:
    # rm -rf /usr/include/g++
Als nächstes muss gcc3 erzeugt werden (unter Verwendung des gcc3-Verzeichnisses) und danach wie gewöhnlich der Kernel und das System.

2005-01-18 - Neuer Benutzer und neue Gruppe: _ospfd

Der bald erscheinende ospf-Daemon benötigt seinen eigenen Benutzer und seine eigene Gruppe namens _ospfd. Füge sie hinzu, indem du
    useradd -u85 -g=uid -c"OSPF Daemon" -d/var/empty -s/sbin/nologin _ospfd
als root ausführst.

2005-01-24 - pfsync nimmt syncdev statt syncif

Wenn das pfsync-Device konfiguriert wird, so muss syncdev statt dem veralteten Schlüsselwort syncif genutzt werden.

2005-02-02 - POSIX-konforme hexadezimale und oktale Konstanten in (k)sh

Sowohl sh(1) als auch ksh(1) interpretieren nun C-ähnliche hexadezimale (0x...) und oktale (0...) Konstanten in arithmetischen Ausdrücken. Daraus folgt, dass das MAKEDEV-Skript aktualisiert werden muss:
     # cp /usr/src/etc/etc.`machine`/MAKEDEV /dev

Von 3.5 auf 3.6 upgraden

3.5.1: Unternummern des pty-Devices geändert (2004-04-11)

Die Unternummern des Devices pty wurde geändert, um die maximale Anzahl der Pseudoterminals von 256 auf 992 zu erhöhen, so dass du eine aktualisierte /dev/MAKEDEV ausführen musst, bevor der neue Kernel gebootet werden kann:

3.5.2: Neuer Benutzer und neue Gruppe namens _dhcp (2004-04-12)

Die etlichen dhcp-bezogenen Daemons werden überarbeitet, um ihre Privilegien fallenzulassen oder Privilegientrennung zu verwenden. Aus diesem Grund werden ein neuer Benutzer und eine neue Gruppe namens _dhcpd benötigt. Füge die Gruppe hinzu, indem du

  # groupadd -g 77 _dhcp
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _dhcp:*:77:77::0:0:DHCP programs:/var/empty:/sbin/nologin

3.5.3: Neuer Benutzer und neue Gruppe namens _mopd (2004-04-14)

Der mopd(8)-Daemon lässt nun seine Privilegien nach der Initialisierung fallen und benötigt einen neuen Benutzer und eine neue Gruppe namens _mopd. Füge die Gruppe hinzu, indem du

  # groupadd -g 78 _mopd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _mopd:*:78:78::0:0:MOP Daemon:/var/empty:/sbin/nologin

3.5.4: Neuer Benutzer und neue Gruppe namens _tftpd (2004-04-17)

Der tftpd(8)-Daemon lässt nun seine Privilegien nach der Initialisierung fallen und benötigt einen neuen Benutzer und eine neue Gruppe namens _tftpd statt wie bisher nobody. Füge die Gruppe hinzu, indem du

  # groupadd -g 79 _tftpd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _tftpd:*:79:79::0:0:TFTP Daemon:/var/empty:/sbin/nologin

3.5.5: Neuer Benutzer und neue Gruppe namens _rbootd (2004-04-30)

Der rbootd(8)-Daemon lässt nun seine Privilegien nach der Initialisierung fallen und verwendet danach die Rechte vom Benutzer _rbootd und der Gruppe _rbootd. Füge die Gruppe hinzu, indem du

  # groupadd -g 80 _rbootd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _rbootd:*:80:80::0:0:rbootd Daemon:/var/empty:/sbin/nologin

3.5.6: cksum verschoben (2004-05-02)

Das Werkzeug cksum(1) wurde von /usr/bin nach /bin verschoben. Nachdem ein make build erfolgreich ausgeführt wurde, führe Folgendes als root aus:

  # rm -f /usr/bin/cksum /usr/bin/sum

3.5.7: Neuer Benutzer und neue Gruppe namens _afs (2004-05-06)

Der afsd(8)-Daemon ist bald soweit, dass seine Privilegien getrennt werden können. Ein neuer Benutzer und eine neue Gruppe namens _afs werden hierfür benötigt. Füge die Gruppe hinzu, indem du

  # groupadd -g 81 _afs
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _afs:*:81:81::0:0:afs Daemon:/var/empty:/sbin/nologin

Du musst den Besitzer des Caches ändern, indem du Folgendes ausführst:

  # chown -R _afs:_afs /var/spool/afs

3.5.8: Neuer Benutzer und neue Gruppe namens _ppp (2004-05-06)

Das pppoe(8)-Program lässt nun seine Privilegien fallen und läuft mit den Rechten des Benutzers _ppp und der Gruppe _ppp weiter. Füge die Gruppe hinzu, indem du

  # groupadd -g 82 _ppp
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _ppp:*:82:82::0:0:PPP utilities:/var/empty:/sbin/nologin

3.5.9: Neuer Benutzer und neue Gruppe namens _ntp (2004-05-30)

Das bald erscheinende Programm ntpd(8) benötigt einen neuen Benutzer und eine neue Gruppe namens _ntp. Füge die Gruppe hinzu, indem du

  # groupadd -g 83 _ntp
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _ntp:*:83:83::0:0:NTP Daemon:/var/empty:/sbin/nologin

3.5.10: Flagday für Versionserhöhung der Bibliotheken (2004-07-13)

Bibliotheks- und Systeminterfaceänderungen machten es notwendig, eine Erhöhung aller Obernummern jeder einzelnen Bibliothek durchzuführen. Die folgenden Schritte müssen befolgt werden, um ein brauchbares System zu erhalten.

3.5.11: Änderungen in PF-Anker (2004-08-07)

Anwender von authpf sollten ihre Ankerregel im Hauptregelsatz von

     anchor authpf
in
     anchor "authpf/*"
abändern.

Von 3.4 auf 3.5 upgraden

3.4.1: Unternummern des svnd-Devices geändert (2003-10-10)

Die Unternummern des Devices svnd wurden geändert, so dass du eine aktualisierte /dev/MAKEDEV nach der Installation des neuen Kernels ausführen musst:

Dies betrifft alle, die svnd-Devices verwenden; dazu gehören auch alle, die make release ausführen.

3.4.2: Neuer Benutzer und neue Gruppe namens _pflogd (2003-10-23)

Der pflogd(8)-Daemon läuft nun im privilegiengetrennten Modus und benötigt einen neuen Benutzer und eine neue Gruppe namens _pflogd. Füge die Gruppe hinzu, indem du

  # groupadd -g 74 _pflogd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _pflogd:*:74:74::0:0:pflogd privsep:/var/empty:/sbin/nologin

3.4.3: Interfacecloning (2003-12-07)

Viele Pseudonetzwerktreiber (wie zum Beispiel gif(4), lo(4) und tun(4)) wurden verschoben, um Cloning zu unterstützten, d. h. die Erstellung und Entfernung von Devices je nach Bedarf. Wenn du auf diese Interfaces angewiesen bisst, so musst du aktualisierte Versionen von ifconfig(8) und netstart(8) übersetzen und installieren, bevor du mit deinem neuen Kernel neustartest.

Übersetze und installiere zunächst deinen neuen Kernel wie gewühnt und führe dann Folgendes aus:

  # cd /usr/src && make includes
  # cd sbin/ifconfig
  # make obj depend
  # make
  # make install
  # cp /usr/src/etc/netstart /etc
      
Starte nun deine Maschine neu und setze die Übersetzung des neuen Userlands fort.

3.4.4: Neuer Benutzer und neue Gruppe namens _bgpd (2003-12-17)

Der neue bgpd(8)-Daemon läuft nun im privilegiengetrennten Modus und benötigt einen neuen Benutzer und eine neue Gruppe namens _bgpd. Füge die Gruppe hinzu, indem du

  # groupadd -g 75 _bgpd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _bgpd:*:75:75::0:0:BGP Daemon:/var/empty:/sbin/nologin

3.4.5: Neue Version von join(1) (2003-12-28)

Das Kommando join(1) wurde aktualisiert, so dass es dem POSIX-Standard beim Schreiben von nicht zutreffenden Zeilen folgt. Hieraus folgt, dass security(8) aktualisiert werden muss:

  # cp /usr/src/etc/security /etc
     

3.4.6: Übersetzungsänderung von sudo (2004-01-15)

Die Art und Weise, wie das Kommando sudo(8) übersetzt wird, wurde geändert. Ein Nebeneffekt hiervon ist, dass du Folgendes ausführen musst:

  # rm -f /usr/obj/usr.bin/sudo/*
     
bevor du erfolgreich ein »make build« aufrufen kannst. Wenn du diesen Schritt nicht ausführst, wird die Erzeugungsphase während dem Versuch, Objektverzeichnisse zu erstellen, abbrechen.

3.4.7: Neuer Benutzer und neue Gruppe namens _tcpdump (2004-01-19)

Das tcpdump(8)-Kommando läuft nun im privilegiengetrennten Modus und benötigt einen neuen Benutzer und eine neue Gruppe namens _tcpdump. Füge die Gruppe hinzu, indem du

  # groupadd -g 76 _tcpdump
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _tcpdump:*:76:76::0:0:tcpdump:/var/empty:/sbin/nologin

3.4.8: Änderungen an machdep.c (i386) (2004-02-01)

Eine Änderung an machdep.c setzt voraus, dass binutils neu erzeugt wird, bevorder Kernel kompiliert werden kann. Dies betrifft nur i386.

  # cd /usr/src/gnu/usr.bin/binutils
  # make -f Makefile.bsd-wrapper cleandir
  # make -f Makefile.bsd-wrapper obj
  # make -f Makefile.bsd-wrapper depend
  # make -f Makefile.bsd-wrapper
  # make -f Makefile.bsd-wrapper install

Du kannst nun den Kernel und das restliche System wie in der Sektion 1.5 beschrieben neu erzeugen.

3.4.9: Aktualisierte bsd.own.mk (2004-02-20)

Du musst /usr/share/mk/bsd.own.mk aktualisieren, um die USE_GCC3-Definition zu haben:

    # cd /usr/src/share/mk
    # make install

3.4.10: Wechsel auf gcc3 (sparc64) (2004-02-20)

OpenBSD/sparc64 wurde auf gcc3 umgestellt. Um upzugraden, führe Folgendes aus:

    # rm -rf /usr/include/g++
Als nächstes muss gcc3 erzeugt werden (unter Verwendung des gcc3-Verzeichnisses) und danach wie gewöhnlich der Kernel und das System.

Von 3.3 auf 3.4 upgraden

3.3.1: W^X-Unterstützung für i386 (2003-04-16)

Um die »Schreibbar oder ausführbar«- (Writable xor eXecute) Unterstützung für i386 zu aktivieren, wurde OpenBSD/i386 vom a.out-Binaryformat auf das ELF-Binaryformat umgestellt. Die Flexibilität von ELF ermöglicht bessere Kontrolle über das Layout der Binary, wodurch die Unterstützung für W^X ermöglicht wurde. Kompatibilität für a.out existiert nur in begrenzter Form. Staische a.out-Binarys werden wie bisher funktionieren; dynamische a.out-Binary aber WERDEN NICHT UNTERSTÜTZT.

QUELLTEXT-UPGRADES VON a.out -> ELF WERDEN NICHT UNTERSTÜTZT. INSTALLIERE EINEN SNAPSHOT, so dass du mit diesem vom Quelltext aus das System neu erzeugen kannst. Dies betrifft nur i386; andere Architekturen sind von dieser Änderung NICHT betroffen.

3.3.2: Änderung am mquery-syscall (2003-04-28)

Die Parameter für den mquery-Systemaufruf wurden geändert, so dass sie mit denen von mmap() übereinstimmen. Diese Änderung setzt voraus, dass das System in der richtigen Reihenfolge upgegradet wird:

      1. Erzeuge und boote den neuen Kernel.
      2. (cd /usr/src && sudo make includes)
      3. (cd /usr/src/libexec/ld.so && make && sudo make install)
      4. »make build«
      
Nur i386 verwendet mquery, so dass andere Architekturen dieser bestimmten Erzeugungsreihenfolge nicht folgen müssen.

3.3.3: i386-Flagday: Änderung an exe addr/MAXDSIZ (2003-05-05)

Um MAXDSIZ zu ermöglichen, wieder auf 1 G geändert zu werden, musste die Basisadresse aller Binarys von 0 auf 0x1c000000 geändert werden. Die Kombination dieser Änderungen erfordert eine Aktualisierung vom Snapshot. Das Aktualisieren anhand des Quelltextes wird nicht unterstützt. Dies betrifft nur i386.

3.3.4: Entfernung der KerberosIV-Authentikation (2003-05-13)

KerberosIV-basierte Authentifikation wurde entfernt. Dies bedeutet, dass du alle Referenzen auf krb4 in /etc/login.conf entfernen musst.

3.3.5: Änderung an config (2003-05-23)

Das Verschieben von swapgeneric.c benötigte eine Änderung an config(8). Bevor du einen neuen Kernel erzeugen kannst, musst du zunächst eine aktualisierte config(8) übersetzen und installieren:

  # cd /usr/src/usr.sbin/config
  # make clean
  # make obj
  # make
  # make install
Wende nun config für deine Kernelkonfiguration an und führe make depend im Kompiliationsverzeichnis deines Kernels aus, wie es weiter oben beschrieben wurde.

3.3.6: Verwende __attribute__((bounded)) bei bestimmten Funktionen (2003-06-26)

Von nun an wird __attribute__((bounded)) verwendet, um falsche Funktionsargumente abzufangen, die Pufferlängen als einen ihrer Parameter haben.

Du musst gcc wie in der Sektion 1.8 der Mini-FAQ beschrieben neu erzeugen, bevor du mit make build fortfahren kannst.

3.3.7: Neuer Benutzer und neue Gruppe namens _syslogd (2003-07-31)

Der syslogd(8)-Daemon läuft nun im privilegiengetrennten Modus und benötigt einen neuen Benutzer und eine neue Gruppe namens _syslogd. Füge die Gruppe hinzu, indem du

  # groupadd -g 73 _syslogd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _syslogd:*:73:73::0:0:Syslog Daemon:/var/empty:/sbin/nologin

3.3.8: Verwende das Formatattribut __kprintf__ in Kernelheader (2003-08-23)

Ein neues Formatattribut namens __kprintf__ wird nun in Kernelheaderdateien verwendet, damit gcc die Formaterweiterungen von printf(9) im Kernel erkennt.

Du musst gcc gemäß der Sektion 1.8 der Mini-FAQ neu erzeugen, bevor du mit make build fortfahren kannst. Du musst gcc nur ein einziges Mal aus den current-Sourcen übersetzen, um ebenfalls das __bounded__-Attribut zu unterstützen; dies wird in der Sektion 3.3.6 beschrieben.

Von 3.2 auf 3.3 upgraden

3.2.1: Neues Perl (2002-11-05)

Perl wurde auf Version 5.8.0 aktualisiert.
In Perl 5.8.0 wurde die API der XS-Module aufgrund der Änderung von stdio in PerlIO (siehe die Manualseite von perldelta für weitere Informationen) geändert. Dies bedeutet, dass alle XS-Module (Perls .so-Dateien), die du installiert hast, neu erzeugt werden müssen. Wenn du Fehler wie zum Beispiel Undefined symbol "perl_get_sv" erhalten hast, dann ist genau das der Grund dafür. Wenn die einzigen Module, die du installier hast, aus Packages stammen oder über das Portssystem installiert wurden, so kannst du dein System nach XS-Modulen durchsuchen, indem du Folgendes aufrufst:

	# grep '\.so' /var/db/pkg/p5-*/+CONTENTS | cut -d: -f1 | sort -u
      
Du kannst dann die problematischen Module mittels pkg_delete -f entfernen und sie dann vom Ports-Tree aus neu übersetzen und installieren.

3.2.2: Neue Gruppen: _radius, _token und _shadow (2002-11-21)

Einige neue Gruppen wurden hinzugefügt:

Du musst diese Gruppen anlegen und die Rechte einige Dateien anpassen, bevor du »make build« ausführen kannst. Die folgenden Kommandos (ausgeführt als root) werden diese Aufgabe erledigen:
	  # groupadd -g 63 _radius
	  # chgrp _radius /etc/raddb /etc/raddb/servers
	  # chmod g+x /etc/raddb
	  # chmod g+r /etc/raddb/servers

	  # groupadd -g 64 _token
	  # chgrp _token /etc/activ.db /etc/crypto.db /etc/snk.db
	  # chmod 0640 /etc/activ.db /etc/crypto.db /etc/snk.db

	  # groupadd -g 65 _shadow
	  # chgrp _shadow /etc/spwd.db
	  # chmod 0640 /etc/spwd.db
	
Kümmere dich nicht um Fehlermeldungen, die sagen, dass eine Datei nicht gefunden werden konnte. Diese Fehlermeldungen sagen nur aus, dass du keine token- oder radius-Authentifizierung eingerichtet hast.

3.2.3: Wichtige Compileränderungen (2002-12-02)

Die Stackprotectionerweiterung propolice wurde in den gcc eingebunden. Dies setzt eine etwas andere Upgradevorgehensweise als sonst voraus:

3.2.4: Neuer Benutzer und neue Gruppe namens _spamd (2002-12-24)

Ein neuer Benutzer und eine neue Gruppe namens _spamd wurden für den spamd(8)-Daemon hinzugefügt. Füge die Gruppe hinzu, indem du

  # groupadd -g 62 _spamd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _spamd:*:62:62::0:0:Spam daemon:/var/empty:/sbin/nologin

3.2.5: Alias für ipv6-icmp (2002-12-30)

Ein neuer Alias (icmp6) für ipv6-icmp wurde zur /etc/protocols hinzugefügt. Wenn du das icmp6-Alias nutzen möchtest (wird in den Regressiontests für pfctl(8) verwendet), musst du die ipv6-icmp-Zeile in /etc/protocols ändern, indem du das Schlüsselwort icmp6 vor der Raute (#) hinzufügst. Die Zeile sollte dann wie folgt aussehen:

  ipv6-icmp 58    IPv6-ICMP icmp6 # ICMP for IPv6

3.2.6: Neue Gruppe namens _lkm (2003-01-05)

Die _lkm-Gruppe verwaltet den Zugriff auf /dev/lkm. modstat(8) ist nun setgid _lkm.

Du musst diese Gruppe hinzufügen und die Rechte von /dev/lkm anpassen, bevor du ein »make build« durchführen kannst. Die folgenden Kommandos (ausgeführt als root) werden diese Aufgabe erledigen:

  # groupadd -g 61 _lkm
  # chgrp _lkm /dev/lkm

3.2.7: Neue libpthread (2003-01-14)

Sowohl libc_r als auch libnpthread wurden entfernt und mit libpthread ersetzt. Programme, die Threads verwenden, sollten weiterhin mit der Option -pthread kompiliert werden können; der Kompiler wird sich darum kümmern.

Bevor du libc_r und libnpthread entfernst, müssen Applikationen mit libpthread neu erzeugt werden. Die hierfür empfohlene Befehlsreihenfolge ist:

  1. Erzeuge gcc gemäß Sektion 1.8.

  2. Bereite das System gemäß Sektion 1.5 vor.

  3. Bereite alle Ports vor, die Threads verwenden.

  4. Entferne alle ungenutzten Bibliotheken:

      # rm /usr/lib/libc_r* /usr/lib/libnpthread*
    

3.2.8: Linkeränderungen für ELF-Architekturen (2003-01-17)

Binutils/ld wurde geändert, um ELF-Binarys mit einer neuen Sicherheitsfunktionalität auszurüsten. Statt der Datensektion der Binarys und »shared libraries« zu erlauben, als ausführbar vom Linker markiert zu werden, hat sich das Layout so geändert, dass nur die passenden Sektionen des Programmimages als ausführbar markiert werden können. Diese Änderung betrifft nur ELF-basierte Architekturen: alpha, sparc, sparc64 und macppc.

Es wird empfohlen, dass binutils vor dem Rest des Systems neu erzeugt wird.

  # cd /usr/src/gnu/usr.bin/binutils
  # make -f Makefile.bsd-wrapper cleandir
  # make -f Makefile.bsd-wrapper obj
  # make -f Makefile.bsd-wrapper depend
  # make -f Makefile.bsd-wrapper
  # make -f Makefile.bsd-wrapper install

Erzeuge das System dann gemäß der Sektion 1.5 neu.

3.2.9: Entfernung von /var/at und Änderungen an Crontabs (2003-02-19)

Der Inhalt von /var/at wurde in /var/cron eingebunden, da at ebenfalls bereits in cron eingegliedert wurde. Des Weiteren wurden die Allow- und Denydateien von cron in cron.allow und cron.deny umbenannt, um POSIX zu entsprechen und auch die Konsistenz mit at.allow und at.deny zu bewahren.

Erzeuge zuerst dein System gemäß Sektion 1.5 neu, verschiebe die exististierenden Dateien und starte dann cron wie folgt neu:

  # mv /var/at/* /var/cron
  # mv /var/cron/jobs /var/cron/atjobs
  # mv /var/cron/allow /var/cron/cron.allow
  # mv /var/cron/deny /var/cron/cron.deny
  # rm -rf /var/at 
  # kill `cat /var/run/cron.pid`
  # /usr/sbin/cron

Ignoriere alle Warnungen über fehlende Allow- oder Denydateien. Nicht alle hier aufgelisteten Dateien befinden sich in der Standardinstallation.

Wenn du nicht bereits eine cron.deny-Datei hast (sie wurde vor OpenBSD 3.3 nicht installiert) musst du crontab als normaler Benutzer aufrufen (also nicht als Administrator).

  # install -c -o root -g crontab -m 660 /dev/null /var/cron/cron.deny

Von 3.2 upgraden

3.2.1: Neues Perl (2002-11-05)

Perl wurde auf Version 5.8.0 aktualisiert.
In Perl 5.8.0 wurde die API der XS-Module aufgrund der Änderung von stdio in PerlIO (siehe die Manualseite von perldelta für weitere Informationen) geändert. Dies bedeutet, dass alle XS-Module (Perls .so-Dateien), die du installiert hast, neu erzeugt werden müssen. Wenn du Fehler wie zum Beispiel Undefined symbol "perl_get_sv" erhalten hast, dann ist genau das der Grund dafür. Wenn die einzigen Module, die du installier hast, aus Packages stammen oder über das Portssystem installiert wurden, so kannst du dein System nach XS-Modulen durchsuchen, indem du Folgendes aufrufst:

	# grep '\.so' /var/db/pkg/p5-*/+CONTENTS | cut -d: -f1 | sort -u
      
Du kannst dann die problematischen Module mittels pkg_delete -f entfernen und sie dann vom Ports-Tree aus neu übersetzen und installieren.

3.2.2: Neue Gruppen: _radius, _token und _shadow (2002-11-21)

Einige neue Gruppen wurden hinzugefügt:

Du musst diese Gruppen anlegen und die Rechte einige Dateien anpassen, bevor du »make build« ausführen kannst. Die folgenden Kommandos (ausgeführt als root) werden diese Aufgabe erledigen:
	  # groupadd -g 63 _radius
	  # chgrp _radius /etc/raddb /etc/raddb/servers
	  # chmod g+x /etc/raddb
	  # chmod g+r /etc/raddb/servers

	  # groupadd -g 64 _token
	  # chgrp _token /etc/activ.db /etc/crypto.db /etc/snk.db
	  # chmod 0640 /etc/activ.db /etc/crypto.db /etc/snk.db

	  # groupadd -g 65 _shadow
	  # chgrp _shadow /etc/spwd.db
	  # chmod 0640 /etc/spwd.db
	
Kümmere dich nicht um Fehlermeldungen, die sagen, dass eine Datei nicht gefunden werden konnte. Diese Fehlermeldungen sagen nur aus, dass du keine token- oder radius-Authentifizierung eingerichtet hast.

3.2.3: Wichtige Compileränderungen (2002-12-02)

Die Stackprotectionerweiterung propolice wurde in den gcc eingebunden. Dies setzt eine etwas andere Upgradevorgehensweise als sonst voraus:

3.2.4: Neuer Benutzer und neue Gruppe namens _spamd (2002-12-24)

Ein neuer Benutzer und eine neue Gruppe namens _spamd wurden für den spamd(8)-Daemon hinzugefügt. Füge die Gruppe hinzu, indem du

  # groupadd -g 62 _spamd
als root ausführst, und erstelle den Benutzereintrag unter Verwendung von vipw(8):
  _spamd:*:62:62::0:0:Spam daemon:/var/empty:/sbin/nologin

3.2.5: Alias für ipv6-icmp (2002-12-30)

Ein neuer Alias (icmp6) für ipv6-icmp wurde zur /etc/protocols hinzugefügt. Wenn du das icmp6-Alias nutzen möchtest (wird in den Regressiontests für pfctl(8) verwendet), musst du die ipv6-icmp-Zeile in /etc/protocols ändern, indem du das Schlüsselwort icmp6 vor der Raute (#) hinzufügst. Die Zeile sollte dann wie folgt aussehen:

  ipv6-icmp 58    IPv6-ICMP icmp6 # ICMP for IPv6

3.2.6: Neue Gruppe namens _lkm (2003-01-05)

Die _lkm-Gruppe verwaltet den Zugriff auf /dev/lkm. modstat(8) ist nun setgid _lkm.

Du musst diese Gruppe hinzufügen und die Rechte von /dev/lkm anpassen, bevor du ein »make build« durchführen kannst. Die folgenden Kommandos (ausgeführt als root) werden diese Aufgabe erledigen:

  # groupadd -g 61 _lkm
  # chgrp _lkm /dev/lkm

3.2.7: Neue libpthread (2003-01-14)

Sowohl libc_r als auch libnpthread wurden entfernt und mit libpthread ersetzt. Programme, die Threads verwenden, sollten weiterhin mit der Option -pthread kompiliert werden können; der Kompiler wird sich darum kümmern.

Bevor du libc_r und libnpthread entfernst, müssen Applikationen mit libpthread neu erzeugt werden. Die hierfür empfohlene Befehlsreihenfolge ist:

  1. Erzeuge gcc gemäß Sektion 1.8.

  2. Bereite das System gemäß Sektion 1.5 vor.

  3. Bereite alle Ports vor, die Threads verwenden.

  4. Entferne alle ungenutzten Bibliotheken:

      # rm /usr/lib/libc_r* /usr/lib/libnpthread*
    

3.2.8: Linkeränderungen für ELF-Architekturen (2003-01-17)

Binutils/ld wurde geändert, um ELF-Binarys mit einer neuen Sicherheitsfunktionalität auszurüsten. Statt der Datensektion der Binarys und »shared libraries« zu erlauben, als ausführbar vom Linker markiert zu werden, hat sich das Layout so geändert, dass nur die passenden Sektionen des Programmimages als ausführbar markiert werden können. Diese Änderung betrifft nur ELF-basierte Architekturen: alpha, sparc, sparc64 und macppc.

Es wird empfohlen, dass binutils vor dem Rest des Systems neu erzeugt wird.

  # cd /usr/src/gnu/usr.bin/binutils
  # make -f Makefile.bsd-wrapper cleandir
  # make -f Makefile.bsd-wrapper obj
  # make -f Makefile.bsd-wrapper depend
  # make -f Makefile.bsd-wrapper
  # make -f Makefile.bsd-wrapper install

Erzeuge das System dann gemäß der Sektion 1.5 neu.

3.2.9: Entfernung von /var/at und Änderungen an Crontabs (2003-02-19)

Der Inhalt von /var/at wurde in /var/cron eingebunden, da at ebenfalls bereits in cron eingegliedert wurde. Des Weiteren wurden die Allow- und Denydateien von cron in cron.allow und cron.deny umbenannt, um POSIX zu entsprechen und auch die Konsistenz mit at.allow und at.deny zu bewahren.

Erzeuge zuerst dein System gemäß Sektion 1.5 neu, verschiebe die exististierenden Dateien und starte dann cron wie folgt neu:

  # mv /var/at/* /var/cron
  # mv /var/cron/jobs /var/cron/atjobs
  # mv /var/cron/allow /var/cron/cron.allow
  # mv /var/cron/deny /var/cron/cron.deny
  # rm -rf /var/at 
  # kill `cat /var/run/cron.pid`
  # /usr/sbin/cron

Ignoriere alle Warnungen über fehlende Allow- oder Denydateien. Nicht alle hier aufgelisteten Dateien befinden sich in der Standardinstallation.

Wenn du nicht bereits eine cron.deny-Datei hast (sie wurde vor OpenBSD 3.3 nicht installiert) musst du crontab als normaler Benutzer aufrufen (also nicht als Administrator).

  # install -c -o root -g crontab -m 660 /dev/null /var/cron/cron.deny

Von 3.1 upgraden

3.1.1: Neue Benutzer/Gruppen

Einige neue Benutzer/Gruppen wurden hinzugefügt. Für die Unterstützung von authpf(8) wird eine neue Gruppe benötigt. Auch für die Unterstützung von sshd(8)s Funktionalität der Privilegientrennung wurde ein neuer Benutzer und eine neue Gruppe namens sshd dem System hinzugefügt. Weitere neue Benutzer für Systemdienste wurden hinzugefügt; sie haben einen vorangesetzten Unterstrich. Füge die folgenden Benutzer mittels vipw(8) hinzu:

  sshd:*:27:27::0:0:sshd privsep:/var/empty:/sbin/nologin
  _portmap:*:28:28::0:0:portmap:/var/empty:/sbin/nologin
  _identd:*:29:29::0:0:identd:/var/empty:/sbin/nologin
  _rstatd:*:30:30::0:0:rpc.rstatd:/var/empty:/sbin/nologin
  _rusersd:*:32:32::0:0:rpc.rusersd:/var/empty:/sbin/nologin
  _fingerd:*:33:33::0:0:fingerd:/var/empty:/sbin/nologin
  _x11:*:35:35::0:0:X server:/var/empty:/sbin/nologin

Füge die folgenden Gruppen in /etc/group hinzu:

  sshd:*:27:
  _portmap:*:28:
  _identd:*:29:
  _rstatd:*:30:
  _rusersd:*:32:
  _fingerd:*:33:
  _sshagnt:*:34:
  _x11:*:35:
  authpf:*:72:

3.1.2: Neue Gruppe für crontab(1) und at(1)

Das crontab(1)- und das at(1)-Kommando sind nicht länger setuid root; sie sind nun setgid crontab.

Bevor du »make build« ausführen kannst, musst du die Gruppe crontab-Gruppe hinzufügen. Ergänze deine /etc/group-Datei um folgende Zeile:

  crontab:*:66:

Das »make build« wird einige - aber nicht alle - Rechte für dich aktualisieren. Nachdem »make build« abgeschlossen wurde, musst du folgende Befehle manuell ausführen (unter der Annahme, dass du /bin/csh verwendest):

  # chgrp crontab /var/at/at.{allow,deny} /var/cron/{allow,deny}
  # chmod 0640 /var/at/at.{allow,deny} /var/cron/{allow,deny}
  # foreach f ( /var/cron/tabs/* )
	  set u=`basename $f`
 	  chown $u:crontab $f
    end

Beachte, dass du vermutlich nicht alle Allow-/Denydateien hast; das ist kein Problem.

3.1.3: Neue Binutils

Eine neue Version der binutils (2.11.2) wurde in den Tree eingebunden; eine Aktualisierung von libiberty ist notwendig. Um diese Bibliothek zu erzeugen, befolge folgende Schritte:

  # cd /usr/src/gnu/egcs/libiberty
  # make -f Makefile.bsd-wrapper cleandir
  # make -f Makefile.bsd-wrapper obj
  # make -f Makefile.bsd-wrapper depend
  # make -f Makefile.bsd-wrapper
  # make -f Makefile.bsd-wrapper install

3.1.4: Neue S/Key-Konfiguration

Die alte S/Key-Datenbankdatei /etc/skeykeys wurde mit dem Verzeichnis /etc/skey ausgetauscht. In diesem Verzeichnis stellt jede Datei einen Eintrag dar, die dem Benutzer gehört, der von ihr beschrieben wird. Du kannst /etc/skeykeys in das neue Format konvertieren, indem du Folgendes (als root) ausführst:

  # skeyinit -C
  # mv /etc/skeykeys /etc/skeykeys.OLD

Beachte, dass alle Programme von Drittanbietern, die S/Key direkt ansprechen, neu erzeugt werden müssen.

3.1.5: Neue Rechte für lp*

Das Spoolverzeichnis, das von lpd genutzt wird, muss ein Gruppenschreibreicht für die Gruppe daemon haben, damit lpr auf die Spooldateien zugreifen kann. Außerdem müssen die Dateien im Spoolverzeichnis dem Benutzer daemon und der Gruppe daemon gehören. Dies kann wie folgt erreicht werden:

 # find /var/spool/output /var/spool/lpd -type d \
	-execdir chgrp daemon {} \; -execdir chmod g+rwx {} \;
 # find /var/spool/output /var/spool/lpd -type f \
	-execdir chown daemon:daemon {} \;

3.1.6: atrun(8) wird nicht mehr benötigt

Das Kommando atrun(8) wird nicht mehr benötigt. Seine Funktionalität wurde in cron(8) eingebunden. Du solltest den /usr/libexec/atrun-Job aus roots crontab mit dem folgenden Befehl (aufgerufen als root) entfernen:

      # crontab -e
    

Du möchtest eventuell auch die Verzeichnisse /usr/libexec/atrun, /usr/share/man/cat8/atrun.0 und /var/at/spool entfernen.

3.1.7: nat.conf in pf.conf eingebunden

Die Datei /etc/nat.conf wurde nun in /etc/pf.conf eingebunden. Du musst die NAT-Regeln in der pf.conf zwischen den Scrubregeln und den Filterregeln einfügen.

Außerdem hat pfctl(8) eine neue Option (-f), um die Regelsätze zu laden; die Optionen -R und -N haben jetzt andere Bedeutungen. Lies unbedingt die Manualseite und aktualisiere deine /etc/rc.

3.1.8: Neuer fbtab-Eintrag für xdm benötigt

login(1) setzt voraus, dass /dev/wsmouse dem neuen _x11-Benutzer gehört, der notwendig ist, damit xdm auf vielen Architekturen seine Privilegien abgeben kann. Die Änderung an /etc/fbtab ist plattformunabhängig. Die Datei wird mit folgenden Aufrufen erstellt (unter der Annahme, dass die Quellen sich in /usr/src befinden):

  # cat /usr/src/etc/fbtab.head > /etc/fbtab
  # cat /usr/src/etc/etc.`uname -m`/fbtab >> /etc/fbtab
  # cat /usr/src/etc/fbtab.tail >> /etc/fbtab

Wenn du selbst angepasste Einträge in der /etc/fbtab hast, musst du sie manuell in die neue Datei einbinden.

3.1.9: Verwende __attribute__((sentinel)) mit bestimmten Funktionen

Um vor der Verwendung bestimmter exec(3)-Funktionen ohne terminierendem NULL-Pointer zu warnen, wurde __attribute__((sentinel)) eingefügt.

Du musst gcc gemäß der Sektion 1.8 der Mini-FAQ neu erzugen, bevor du mit make build fortfahren kannst.

Von 3.0 upgraden

3.0.1: Neues Schlüsselwort wird von mtree(8) unterstützt

Du musst eine neue Version des mtree(8)-Werkzeuges übersetzen und installieren, bevor ein »make build« erfolgreich durchgeführt werden kann.

  # cd /usr/src/usr.sbin/mtree
  # make cleandir
  # make obj
  # make depend
  # make
  # make install

3.0.2: Entfernung von libdl auf ELF-Plattformen

ELF-basierte Plattformen (alpha, macppc und sparc64) verwenden libdl nicht mehr. Das Upgrade eines libdl-Systems auf ein Nicht-libdl-System kann am besten mit diesen Schritten durchgeführt werden:

3.0.3: Neues Regressionframework

Eine neue Infrastruktur für Regressiontests wurde eingeführt; außerdem wurde bsd.regress.mk hinzugefügt. Du musst diese Datei installiere, bevor du make obj aufrufst.

  # cd /usr/src/share/mk
  # make install

3.0.4: Konfigurationsdateien von ssh nach /etc/ssh/ verschoben

Du musst zuerst /etc/ssh erstellen; siehe dafür Sektion 1.13.

Kompiliere dein System neu:

  # cd /usr/src
  # make build

Verschiebe deine /etc/ssh*_*-Dateien in das neu erstellte /etc/ssh/-Verzeichnis.

  # cd /etc
  # mv ssh*_* ssh/

Du musst deine rc-Skripte entsprechend anpassen, damit diese Änderungen auch dort wiedergespiegelt werden.

Aktualisiere deine HostKey-Zeilen in deiner sshd_config, damit sie auf den neuen Ort zeigen. Zum Beispiel:

  HostKey /etc/ssh_host_key

sollte wie folgt geändert werden:

  HostKey /etc/ssh/ssh_host_key

Starte danach deinen sshd-Daemon neu.

Von 2.9 upgraden

2.9.1: Neue Benutzer/Gruppen: proxy, smmsp und popa3d.

Mit der Einbindung vom Paketfilter pf(4) als Firewallpackage und seiner ftp-proxy(8)-Umgebung, wurden zuerst ein neuer Benutzer und eine neue Gruppe mit dem Namen proxy dem System hinzugefügt. Um diese zusätzlichen Programme unterstützen zu können, muss der folgende Benutzer mittels vipw(8): eingetragen werden:

proxy:*:71:71::0:0:Proxy Services:/nonexistent:/sbin/nologin

Füge ebenfalls die Gruppe proxy in die /etc/group ein:

proxy:*:71:

Zweitens wird als Teil des Sendmail-8.12-Upgrades sendmail nicht mehr setuid root ausgeführt. Sowohl ein neuer Benutzer als auch eine neue Gruppe namens smmsp wurden dem System hinzugefügt. Füge eine Zeile wie die folgende in deine /etc/group ein:

smmsp:*:25:

Führe dann vipw(8) aus und trage die folgende Zeile für den smmsp-Benutzer ein:

smmsp:*:25:25::0:0:Sendmail Message Submission Program:/nonexistent:/sbin/nologin

Stelle sicher, dass diese Zeile vor der ersten yp(8)-Einstellungszeile steht.

Zu guter letzt wurden ein neuer Benutzer und eine neue Gruppe für den popa3d-Server von Solar Designer hinzugefügt, der als Teil des Basissystems ausgeliefert wird. Füge die Folgende Zeile in /etc/group ein:

popa3d:*:26:

Verwende dann vipw(8), um Folgendes einzutragen

popa3d:*:26:26::0:0:POP3 server:/var/empty:/sbin/nologin

2.9.2: Neuer Paketfilter: pf

Das IPF-Firewallpackage, das Teil früherer OpenBSD-Releases war, wurde mit einer völlig neuen Suite mit dem Namen pf(4) ausgetauscht. Das bedeutet, dass viele Änderungen gemacht werden müssen.

Erstens: pf baut auf einer neuen Devicedatei auf. Um sicherzustellen, dass dieses spezielle Device erstellt wird, führe Folgendes aus:

  # cd /dev
  # cp /usr/src/etc/etc.`machine`/MAKEDEV ./
  # ./MAKEDEV all

Zweitens: einige Dateisystemänderungen fanden statt. Als Referenz soll diese Liste der Binarys dienen, die ersetzt wurden:

ALT:
/sbin/ipf /sbin/ipfstat /sbin/ipnat /usr/sbin/ipfs
/usr/sbin/ipftest /usr/sbin/ipmon /usr/sbin/ipresend
/usr/sbin/ipsend /usr/sbin/iptest
NEU:
/sbin/pfctl
/usr/libexec/ftp-proxy

Ähnlich verhält es sich mit den Devices:

ALT: /dev/ipl /dev/ipnat /dev/ipstate /dev/ipauth
NEU: /dev/pf

Und schlussendlich die Filterkonfigurationsdateien:

ALT: /etc/ipf.rules /etc/ipnat.rules
NEU: /etc/pf.conf /etc/nat.conf

Die alten Beispielkonfigurationsdateien für ipfilter können entfernt werden:

  # rm -rf /usr/share/ipf

Ein Mechanismus für das sichere Aktivieren von pf wurde in die Dateien /etc/rc und /etc/rc.fon eingebunden. Du musst diese Dateien aktualisieren, damit sie den neuen Einhängemechanismus beinhalten. Wenn du möchtest, dass pf aktiviert wird, setze PF=YES in /etc/rc.conf.

2.9.3: Änderungen an make

Es wurden Änderungen an make(1) und seinen Datendateien gemacht, welche Probleme in der Erzeugungsphase hervorrufen können. Diese kennzeichnen sich normalerweise dadurch, dass Fehler in bsd.own.mk während dem Erzeugen entstehen. Um diese Probleme zu umgehen, solltest du zuerst die Datendateien aktualisieren:

  # cd /usr/src/share/mk
  # make install

Übersetze und installiere danach das neue make.

  # cd /usr/src/usr.bin/make
  # make clean && make obj && make depend && make
  # make install

Fahre nun mit deinem Upgrade fort.

2.9.4: Erzeugung bricht wegen KerberosV-Fehlern ab

Bevor du das gesamte System übersetzen kannst, musst du zunächst KerberosV übersetzen.

Zuerst sei gesagt, dass es ein neues KerberosV-Konfigurationsverzeichnis in /etc gibt. Wenn du es nicht bereits gemacht hast, verwende die mtree(8)-Prozedur gemäß Sektion 1.13, um es zu erstellen:

Erzeuge nun KerberosV

  # cd /usr/src/kerberosV
  # make obj
  # cd lib/roken
  # make 
  # cd ../../usr.bin/asn1_compile
  # make
  # make install

Du musst eventuell auch deine /etc/login.conf aktualisieren, damit sie die Tatsache wiederspiegelt, dass die Datei /usr/libexec/auth/login_krb-or-pwd in login_krb4-or-pwd umbenannt wurde.

2.9.5: Neue Version von sendmail

Die Version von sendmail(8) ist nun 8.12. Da diese Version von sendmail nicht mehr mit setuid root läuft, entstanden signifikante Änderungen.

  1. Sowohl ein neuer Benutzer als auch eine neue Gruppe (smmsp) wurden hinzugefügt. Falls du es noch nicht getan hast, folge den Anweisungen in Sektion 2.9.1, um sie anzulegen.
  2. Einige Änderungen fanden an der Dateihierarchie statt; einschließlich eines neuen Verzeichnisses namens /var/spool/clientmqueue und neuen Rechten für /var/spool/mqueue. Diese Änderungen können anhand der mtree(8)-Prozedur gemäß Sektion 1.13 durchgeführt werden.
  3. Füge Folgendes zur crontab(1) von root hinzu. Diese Zeile ist notwendig, da sendmail nicht länger setuid root läuft und sich daher darauf verlässt, dass dieser Teil richtig ausgeführt wurde:

    # sendmail clientmqueue runner
    */30    *       *       *       *       /usr/sbin/sendmail -L sm-msp-queue -Ac -q
    
  4. Upgrade sendmail:

      # cd /usr/src/gnu/usr.sbin/sendmail
      # make clean && make obj && make depend && make && make install
    

    Hinweis: Die Dateien submit.cf und localhost.cf wurden in dein /etc/mail-Verzeichnis installiert. Die erste der beiden Dateien (submit.cf) - in der Sendmaildokumentation wird sie als Clientkonfigurationsdatei beschrieben - wird von den MUAs verwendet, die E-Mails lokal über sendmail versenden wollen. Aufgrund der Rechteänderungen, die weiter oben erläutert wurden, werden keine root-Rechte benötigt; die sendmail-Binary ist set-groupid für die Gruppe smmsp. Die zweite Datei (localhost.cf) ist eine OpenBSDfizierte Datei, die sendmail so ausführt, dass nur auf dem Localhost-Interface Mails vom lokalen Host akzeptiert werden, nicht aber Verbindungen vom Netzwerk (was du aber sehr wahrscheinlich möchtest, wenn du z. B. smtpd(8) auf dem SMTP-Port deines Interfaces lauschen lassen möchtest, das für andere Rechner erreichbar ist). Wirf einen Blick in die Datei SECURITY im Verzeichnis /usr/src/gnu/usr.sbin/sendmail/sendmail, wenn du weitere Informationen benötigst.

    Dir wird dringend dazu geraten, dass du deine Sendmailkonfigurationsdateien in /etc/mail generierst und aktualisierst. Du kannst funktionierende Konfigurationsdateien in /usr/share/sendmail/cf vorfinden. Beachte, dass localhost.cf aus openbsd-localhost.mc generiert wird.

  5. Wenn du sendmail ohne die Option -bd in /etc/rc.conf einträgst - dies ist die Einstellung der Standardinstallation - wirst du die Datei localhost.cf verwenden. Editiere rc.conf, damit folgende Zeile genutzt wird:

    # For normal use: "-L sm-mta -bd -q30m"
    sendmail_flags="-L sm-mta -C/etc/mail/localhost.cf -bd -q30m"
    
  6. Sobald deine Konfigurationsdatei bereit ist, beende das bereits laufende sendmail mit kill(1):

      kill `sed 1q /var/run/sendmail.pid`
    

    Starte das neue sendmail mit den passenden Optionen, z. B.:

      /usr/sbin/sendmail -L sm-mta -bd -q30m
    

    für eine Konfiguration, die E-Mails von anderen Rechnern akzeptiert, oder

      /usr/sbin/sendmail -L sm-mta -C/etc/mail/localhost.cf -bd -q30m
    

    damit nur lokale E-Mails akzeptiert werden.

    Hinweis: die Option -bd wird nun in beiden Fällen benötigt.

Das neue sendmail sollte nun laufen.

2.9.6: /etc/primes verschoben

/etc/primes wurde in /etc/moduli umbenannt. Benenne sie einfach um oder kopiere die neue Datei aus /usr/src/etc.

Von 2.8 upgraden

2.8.1: Neue Gruppe namens auth

Eine neue Gruppe namens auth mit der gid 11 wurde dem System hinzugefügt. Schreibe eine Zeile wie die folgende in deine /etc/group:

  auth:*:11:

2.8.2: Neues wscons-Konsolensystem

Der pcvt-Konsolentreiber wurde gegen das wscons-Konsolensystem ausgetauscht. Bevor wscons eingesetzt werden kann, musst du neue wscons-bezogene Gerätedateien erstellen. Stelle sicher, dass du das neueste MAKEDEV installierst hast, und erstelle alle Gerätedateien:

 # cp /usr/src/etc/etc.i386/MAKEDEV /dev/MAKEDEV
 # cd /dev
 # ./MAKEDEV all

Wenn du X verwendest, dann musst du die Pointer-Sektion deiner XF86Config-Datei so ändern, dass sie Folgendes enthält:

    Protocol    "wsmouse"
    Device      "/dev/wsmouse"

2.8.3: Kernelkompilierung schlägt wegen undefinierten Symbolen fehl

Das Programm config(8) wurde aktualisiert. Das Erzeugen mit dem alten config wird Fehler wie die folgenden verursachen:

  Undefined symbol `_pdevnames_size' referenced
  Undefined symbol `_pdevnames' referenced

Um diese zu beheben, kompiliere und installiere das neue config:

  # cd /usr/src/usr.sbin/config
  # make clean && make depend && make
  # make install

Kompiliere nun einen neuen Kernel wie zuvor.

Von 2.7 upgraden

2.7.1: Welche großen Probleme treten beim Upgrade von 2.7 auf 2.8 auf?

Signifikante gcc-Änderungen wurden vollzogen, die das Erstellen von libc-Bibliotheken, die auf sich selbst verweisen, zu einfach gemacht haben. Aus diesem Grund sollten Upgrades genau so durchgeführt werden, wie hier beschrieben:

  1. Entferne Objektdateien aus deinem Source-Tree und lade 2.8-Quelltext herunter.
  2. Übersetze und instaliere einen neuen Linker. Dies muss vor einer vollständigen Erzeugung des gccs gemacht werden.

      $ cd /usr/src/gnu/usr.bin/ld
      $ make clean && make obj && make
      $ sudo make install
    
  3. Übersetze und installiere den neuen gcc. Verwende die BOOTSTRAP-Prozedur, um Dinge zu beschleunigen.
  4. Übersetze einen neuen Kernel. Installiere ihn aber noch nicht

      $ cd /usr/src/sys/arch/`machine`/conf
      $ config GENERIC
      $ cd ../compile/GENERIC
      $ make clean && make depend && make
    
  5. Aufgrund einiger libc-Änderungen könnte es vorkommen, dass dein System beim Hochfahren hängt; Abhilfe schafft der /etc/resolv.conf-Eintrag lookup file bind. Füge diese Zeile ein, wenn es für deine Maschine notwendig ist.

      # echo "lookup file bind" >> /etc/resolv.conf
    
  6. Instaliere den neuen Kernel und starte neu
      # cd /usr/src/sys/arch/`machine`/compile/GENERIC
      # mv /bsd /bsd.old
      # mv bsd /bsd
      # chown root.wheel /bsd
      # shutdown -r now
    

    (Wenn dieser Schritt fehlschlägt, dann kannst du das System wiederherstellen, indem du den alten Kernel (bsd.old) über den boot>-Prompt bootest.)

  7. Übersetze und installiere das neue make (und Supportdateien). Überspringe nicht den »make depend«-Schritt.

      $ cd /usr/src/usr.bin/make
      $ make clean && make obj && make depend && make
      $ sudo make install
      $ cd /usr/src/share/mk
      $ sudo make install
    
  8. Installiere den aktuellsten mtree und stelle sicher, dass die notwendige Verzeichnisstruktur vorliegt.

      $ cd /usr/src/etc/mtree
      $ sudo install -c -o root -g wheel -m 444 4.4BSD.dist /etc/mtree
      $ sudo mtree -qdef /etc/mtree/
    
  9. Führe make build aus
      # cd /usr/src && make build
    
  10. Aktualisiere /etc, /var und /dev/MAKEDEV manuell.

Von 2.6 upgraden

2.6.1: Termcap-Einträge sind zu lang.

Es gibt eine neue termcaps.master-Datei. Du musst die Dateien terminfo und termcaps mit der aktuellen Version von tic(1) generieren. Wenn du mittels make build upgradest, dann wird die richtige Version von tic(1) automatisch für dich aufgerufen. Wenn nicht, dann wirst du den folgenden Fehler erhalten:

    terminfo.src is corrupt! You need to update /usr/bin/tic

In diesem Fall musst du entweder tic(1) neu übersetzen und installieren (stelle sicher, dass du die aktuelle Version von libcurses verwendest) oder erzeuge einfach die Version von tic(1) in deinem Source-Tree.

2.6.2: Mein pn- (oder mx-, al-, ax-) Device wird nicht mehr vom Kernel erkannt.

(Hinweis: pn wird für das einfache Verständnis im folgenden Text verwendet. Es steht für pn, mx, al oder ax [jenachdem, welches gerade zutrifft].)

Diese vier Treiber wurde mit einem vereinheitlichten dc-Treiber ausgetauscht. Du musst alle Vorkommnisse von pn*, mx, al und ax aus deinen Konfigurationsdateien entfernen. Betroffen sind davon unter anderem:

Wenn du einen angepassten Kernel modifizierst, stelle sicher, dass du das dcphy-Device in deiner Kernelkonfiguration wie folgt eingebunden hast:

dcphy*  at mii? phy ?                           # Digital Clone PHYs

Wenn du schon dabei bist, möchtest du wahrscheinlich auch Folgendes mit eintragen:

ukphy*  at mii? phy ?                           # "unknown" PHYs

2.6.3: Von gcc 2.95.1 auf 2.95.2 upgraden

Die gcc-Version 2.95.2 wurde in den OpenBSD-Source-Tree um den 19. Januar 2000 herum übernommen. Damit gcc ordnungsgemäß funktioniert, wird eine aktuellere (nach 2.6) libiberty benötigt. Um diese Bibliothek zu erzeugen, führe folgende Befehle aus:

	cd /usr/src/gnu/egcs/libiberty
	make -f Makefile.bsd-wrapper clean
	make -f Makefile.bsd-wrapper obj
	make -f Makefile.bsd-wrapper
	make -f Makefile.bsd-wrapper install

HINWEIS: Auf mips-basierten Architekturen wie z. B. pmax muss explizit ldconfig aufgerufen werden, wenn neue Bibliotheken erzeugt wurden.

Nachdem libiberty erzeugt wurde, kannst du mit einem standardmäßigen gcc-Bootstrap fortfahren:

   cd /usr/src/gnu/egcs/gcc
   make -f Makefile.bsd-wrapper clean
   make -f Makefile.bsd-wrapper obj
   make -f Makefile.bsd-wrapper -DBOOTSTRAP
   make -f Makefile.bsd-wrapper -DBOOTSTRAP install
   make -f Makefile.bsd-wrapper clean
   make -f Makefile.bsd-wrapper 
   make -f Makefile.bsd-wrapper install

2.6.4: Kerberos upgraden.

Damit Kerberos IV erfolgreich erzeugt werden kann, müssen die folgenden Schritte zuvor befolgt werden:

2.6.5: M4 upgraden.

Die Version von m4, die mit OpenBSD 2.6 ausgeliefert wurde, wird in eine Endlosschleife geraten, wenn die .mc-Dateien von sendmail in .cf-Dateien umgewandelt werden. Du musst deshalb die neue Version von m4 installieren, bevor du ein make build ausführen kannst. Mit anderen Worten:

    # cd /usr/src/usr.bin/m4
    # make && make install && make cleandir

2.6.6: Sendmail upgraden.

In sendmail 8.10.X haben sich die Orte (und Namen) der Konfigurationsdateien von sendmail geändert. Alles - bis auf die PID-Dateien - befindet sich nun in /etc/mail. Zusätzlich haben sich die Namen einiger Dateien geändert.

ALT NEU
/etc/sendmail.cf /etc/mail/sendmail.cf
/etc/sendmail.cw /etc/mail/local-host-names
/etc/sendmail.ct /etc/mail/trusted-users
/etc/sendmail.oE /etc/mail/error-header
/etc/aliases /etc/mail/aliases
/etc/service.switch /etc/mail/service.switch
/etc/userdb /etc/mail/userdb
/usr/share/misc/sendmail.hf /etc/mail/helpfile

Es gibt einige Wege, wie man von der alten Sendmailkonfiguration zur neuen wechselt; die ersten Schritte sind allerdings immer die gleichen.

  1. Aktualisiere /etc/rc, so dass nach /etc/mail/sendmail.cf und nicht nach /etc/sendmail.cf gesucht wird.
  2. mv /etc/sendmail.cf /etc/mail/sendmail.cf
    Dies ist der Weg mit dem geringsten Widerstand: so musst du jedenfalls nicht die Pfadangaben der anderen Dateien ändern.
  3. Oder erzeuge eine neue .cf-Datei aus deiner .mc-Quelldatei. Beachte, dass du nicht mehr folgende Zeile angeben musst:
    include(`../m4/cf.m4')
    da diese von make aus eingebunden wird. Beachte des Weiteren, dass wenn du Maschinen in die Klasse w (über »Cw Maschinenname«) einbinden willst, du dies jetzt in der LOCAL_CONFIG-Sektion machen musst (wirf einen Blick in openbsd-lists.mc, um ein Beispiel davon zu sehen).

2.6.7: Nach dem Upgraden booten die Kernel nicht mehr, die Unterstützung für apm(8) beinhalten.

Du musst deine Bootblocks aktualisieren. Lies Section 14.8 der OpenBSD-FAQ, um weitere Details darüber zu erfahren.

2.6.8: Standardgruppe des Benutzers daemon geändert

Die Standardgruppe des Benutzers daemon wurde von 31 auf 1 umgestellt. Verwende vipw, damit diese Änderung wirksam wird, so dass der Eintrag für den Benutzer daemon wie folgt aussieht:

daemon:*:1:1::0:0:The devil himself:/root:/sbin/nologin

Von 2.5 upgraden

2.5.1: Welche großen Probleme treten beim Upgrade von 2.5 auf 2.6 auf?

Perl und make

Die aktuellste Version von Perl (5.005_03) benötigt eine neue Version von make, um richtig erzeugt werden zu können. Du musst make vor der Erzeugung des neuen Perls übersetzen und installieren. Führe Folgendes aus:

# cd /usr/src/usr.bin/make
# make clean && make && make install

Führe den Prozess fort und erzeuge wieder das neue Perl. Du musst das obj-Verzeichnis von Perl manuell leeren, bevor du mit der Erzeugungsphase beginnst.

Perl-Entwickler sollten sich die aktuellsten Änderungen genau ansehen. Eine E-Mail von millert@openbsd.org:

The version of perl in the OpenBSD source tree (post 2.5) has been
upgraded to 5.005_03.  The build method has changed somewhat but
most of that should be invisible.  The important changes that affect
people are as follows:

1) Perl lib files have moved from /usr/lib/perl5 to the more correct
/usr/libdata/perl5
2) The default site_perl directories now live in /usr/local.  Ie:
if you install a perl module, it will place itself in
/usr/local/libdata/perl5/site_lib.  This makes it easy to
see what non-stock modules you have.  It also means that we
can have perl modules in the ports system easily.
3) The perl library man pages are now install in /usr/share/man/cat3p
You'll need to update your man.conf based on the src/etc/man.conf
to take advantage of them.  This means you can now do
"man 3p less" and get info on the less pragma but "man less"
will still get you the less pager manpage.

If you have modules or other non-stock perl files the simplest thing
to do is to move /usr/lib/perl5 to /usr/libdata/perl5 and add a link
from /usr/lib/perl5 to /usr/libdata/perl5.  Alternately, you could
just edit the installed Config.pm file and fix up the paths there.

Compileränderung: egcs ersetzt gcc

Diese Änderung ist sehr wahrscheinlich die signifikanteste Änderung, der du begegnen wirst. Lies die Sektion 2.5.2, um eine ausführliche Beschreibung zu erhalten.

Kernelstruktur - statfs - geändert

Die statfs-Struktur wurde am 31. Mai geändert. Du musst deinen Kernel neu erzugen, bevor du ein make build ausführen kannst. Siehe 2.5.3 für weitere Details.

2.5.2: Wie upgrade ich von gcc auf egcs

Die sicherste Weg ist, über einen aktuellen Snapshot upzugraden - wenn einer verfügbar ist. Sieh erst nach, ob ein neuer Snapshot vorliegt! Den neuen Compiler vom alten aus zu bootstrappen wird als letzte Möglichkeit betrachtet.

Beachte zuerst, dass einige Plattformen noch nicht erfolgreich bootstrappen konnten. Bis zum heutigen Tag sollten die folgenden erfolgreich gebootstrappt werden können, wenn du vorsichtig vorgehst:

mips und rs6000 haben Probleme.

Um zu überprüfen, ob deine Plattform gebootstrappt werden kann, beziehe und installiere den egcs-Snapshot, der aus der Portskollection installiert werden kann. Wenn dieser funktioniert, dann wird es der im Tree befindliche vermutlich auch tun. Dies ist die sicherste Vorgehensweise.

Bevor wir nun auch nur einen Schritt weitergehen, stelle zunächst sicher, dass deine Kopien von binutils, gas und ld auf dem aktuellsten Stand sind. Beachte, dass es von gas und ld zwei Kopien im Tree gibt. Für i386 und sparch werden die Binutils-Version nicht genommen. Überprüfe /usr/src/gnu/usr.bin/gas und /usr/src/gnu/usr.bin/ld stattdessen.

Die folgenden Anweisungen beziehen sich auf den ursprünglichen Snapshot (egcs-990517). Seitdem wurde ein zweiter Snapshot (egcs-990608) in den Tree übernommen. Wenn du von einem reinen 2.5-System kommst, wird es sehr unwahrscheinlich sein, dass du direkt die aktuellste Version kompilieren kannst. In diesem Fall musst du zur früheren Version mit diesen Anweisungen bootstrappen.

Von espie@openbsd.org:

Today, the compiler changes.

Exit gcc 2.8.1, enter egcs... or more precisely, gcc 2.95 prerelease.

This is probably going to be a rough ride, but I can't work out all
the kinks on every architecture by myself.

I'm going to start importing stuff *now*. There will be a second message
to tech@ once things are settled...

Thanks to everyone who helped me sorting stuff out, most especially
niklas, turan, and millert.

Why the switch
--------------
as most of you already know, egcs is now the *official* compiler supported
by the FSF.  The upcoming july release as been re-christened gcc 2.95.

Just looking at the log messages will show you many improvements:
support for newer processors is better, C++ is more accurately matching
the ANSI/ISO standards, Fortran 77 is more closely integrated.
There are also countless bug-fixes and code generation improvements.

Also the development is more open. There is a cvs tree, there are several
mailing-lists available, and we are cooperating closely with the egcs
team. More precisely, I've been feeding patches back to the egcs team
so that OpenBSD configurations are officially supported.
Also, the development team is highly responsive to bug-reports, and problems
get fixed.

There also is a band-wagon phenomenon: everyone is switching to egcs,
which means lots of code to test the compiler on, and that we can benefit
from related projects.

Why now
-------
egcs-1.1 was unfit for some purposes. Specifically, code size on i386
was larger than gcc 2.8.1, which yielded floppy-disks problems. 
At 2.5 freeze, the only code fit to include was a somewhat unstable
snapshot.  In the interest of stability, after much pondering, egcs was
not put into 2.5.

Right now, the egcs project is going through a release cycle which will
yield egcs 1.2.  Judging from their time schedule, there is ample margin
between egcs 1.2 and the next release of OpenBSD.  Also, we want to get
in now, so that we get a chance to report problems on less frequently 
used architectures, and get everything fixed for 1.2.

egcs `feature freeze' is supposed to occur on may 7th, and the current
snapshot 19990502 looks solid.

What works and what doesn't
---------------------------
egcs runs an i386 OpenBSD system without problems.  m68k works as well,
with a few work-arounds linked to obscure bugs that will get fixed.
sparc seems to be running as well.  There is some linker trouble on some 
other arches that needs to be fixed before our next release.

Right now, constructors across dynamic libraries are not quite ready.

egcs now features a stand-alone cpp which is going to be better than
the current hackish solution we use. This means a few interface changes
and possibly weird warnings.

Keeping gcc 2.8.1 ?
-------------------
due to size constraints, as soon as egcs is imported, gcc is going
to move to cvs Attic.  If you don't want to deal with egcs now, you'll
have to be careful through your cvs updates.
Some Makefiles are bound to change: includes, gnu/usr.bin, and gnu/lib.
xlint and cpp.sh are going to change as well.

How to bootstrap the compiler
-----------------------------
the simplest way is probably to trust the various arch maintainers
and download a snapshot.

If you want to do stuff the hard way, you must first remake proper
obj dirs:
cd /usr/src
make obj

If you run i386, gas must be up-to-date.
If you run sparc, ld must be up-to-date.

then build libiberty:
cd /usr/src/gnu/egcs/libiberty
make -f Makefile.bsd-wrapper clean
make -f Makefile.bsd-wrapper depend
make -f Makefile.bsd-wrapper 
make -f Makefile.bsd-wrapper install

then the C compiler:
cd /usr/src/gnu/egcs/gcc
make -f Makefile.bsd-wrapper clean
make -f Makefile.bsd-wrapper depend
make -f Makefile.bsd-wrapper 
make -f Makefile.bsd-wrapper install

rebuild the C compiler with the new version:
cd /usr/src/gnu/egcs/gcc
make -f Makefile.bsd-wrapper clean
make -f Makefile.bsd-wrapper depend
make -f Makefile.bsd-wrapper 
make -f Makefile.bsd-wrapper install

rebuild the includes
cd /usr/src/include
make includes

build all egcs libraries and install them
cd /usr/src/gnu/egcs
make -f Makefile.bsd-wrapper clean
make -f Makefile.bsd-wrapper depend
make -f Makefile.bsd-wrapper 
make -f Makefile.bsd-wrapper install

install the new cpp driver
cd /usr/src/usr.bin/cpp
make install

then you're all set, and a standard make build should work...

[Anmerkung des Autors: Nun, so richtig funktioniert es nicht. Das Programm xlint kann nicht erzeugt werden. Die Behebung des Problems ist aber recht einfach. Führe einfach make && make install im /usr/src/usr.bin/xlint/xlint-Verzeichnis aus, bevor du ein make build aufrufst und weiter forsetzst. Wirf einen Blick auf 2.5.2.2.]

If it doesn't, you're using an arch that didn't go through make build yet.
The most probably occurrence is an Internal Compiler Error, as known as an
ICE.

First try to see if the ICE will go away with -O1 or -O0. In that case, you
can put a work-around in the Makefile until it's fixed 
(see /usr/src/lib/libm/Makefile for an example of how to put in such
work-arounds for m68k).

Then the error needs to be reported to the egcs-bugs mailing list.

At a minimum, you must run the source through the same compiler invocation,
with an addition of -v -save-temps to the options.

-v yields the precise sequence of commands invoked by gcc. -save-temps
will give you a pre-processed C file (.i) or C++ (.ii) that the egcs people
can make sense of... you can't ask them to run OpenBSD on their boxes.

If you have more time, you can try to trim down the pre-processed C file to
the bare minimum that triggers the bug. Dichotomy works nicely.

Wenn du diese ganze Prozedur durchgeführt hast und immernoch alles funktioniert, dann: glückwunsch. Wenn nicht, dann solltest du die folgenden Sektionen nach Ratschlägen durchsuchen. Probleme, die hier nicht aufgelistet werden, sollten an tech@openbsd.org gesendet werden.

2.5.2.1 - i386 und sparc werden nicht mehr per #define definiert

Das stimmt. Der Kompiler egcs verwendet die sauberen __i386__ und __sparc__. Wenn du Quelltext kompilieren musst, dier auf den alten Definitionen basiert, dann füge -Dsparc oder -Di386 an die passende Stelle in deiner Makefile an.

2.5.2.2 - Erzeugungsphase bricht bei xlint ab

Dies liegt an semantischen Unterschieden im cpp. Die Umgehung des Problems ist aber recht einfach; ein ähnliches Problem mit cap_mkdb wird in 2.4.2 beschrieben.

Führe folgende Befehle aus:

# cd /usr/src/usr.bin/xlint/xlint
# make && make install

rufe nun erneut make auf; die Erzeugungsphase sollte forgesetzt werden.

2.5.2.3 - Coredump bei uthread_autoinit.c

Du bist Opfer eines Linkerbugs geworden. Hier ist die relevante Nachricht:

From: Marc Espie <Marc.Espie@liafa.jussieu.fr>
Subject: egcs core-dumping on uthread_autoinit.c

If this happens to you, this is a known linker problem... the cc1 you have
was linked in a weird way.

Initially, I made cc1 link against static /usr/lib/libiberty.a to avoid this
problem, but this was cutting things too close, and the bug reappeared,
probably thanks to unrelated changes in libc or elsewhere...

The tree has been patched with a work-around in

src/gnu/egcs/f/lang-options.h

make sure you have the kludged version of that file (at least rev 1.2),
recompile and reinstall cc1, the problem should go away.

What's going on is that the 386 linker gets something wrong because of
the huge strings array in toplev.c, and something gets mislinked, so
that
void f(void) __attribute((constructor)) {}
kills cc1.

As a work-around, I've killed Fortran options help texts, until someone finds
where the linker errs.
2.5.2.4 - egcs scheint viel langsamer zu sein als gcc

Das stimmt; es gibt aber einen Grund. Der Kompiler egcs führt mehr Optimierungen durch. Datenablage und andere derartige Funktionalitäten sind mit egcs-kompilierten Code besser.

2.5.2.5 - egcs generiert größeren Code als gcc

Ja, in der Tat. Dies ist insbesondere dann auffällig, wenn die alte gcc-Option -O2 angegeben wurde. Mit egcs wurde eine neue Option eingeführt: -Os optimiert auf Größe. Diese Option ist im Großen und Ganzen mit dem Verhalten der alten -O2 vergleichbar.

2.5.2.6 - Nach der Installation von egcs hatte ich nur noch wenig Plattenspeicher übrig

egcs installiert in ein anderes Unterverzeichnis als gcc 2.8.1. Du solltest gcc deinstallieren, sobald egcs gebootstrappt wurde und voll funktionsfähig ist.

Ein ähnlicher Hinweis sagte, dass die Perländerungen, die in 2.5.1 besprochen wurden, darauf verwiesen haben, dass das /usr/lib/perl5-Verzeichnis entfernt werden konnte. Der neue Ort für diese Daten ist /usr/libdata/perl5.

2.5.2.7 - Meine Erzeugungsphase bricht während libcurses ab

Die Bibliothek libcurses baut nun auf der aktuellsten Version von cpp auf. Beziehe die aktuellste Version, erzeuge cpp neu und setze die Erzeugungsphase fort. Zum Beispiel:

# cd /usr/src/usr.bin/cpp && make install

Und probiere danach wieder make build.

2.5.2.8 - make obj schlägt fehl

Wenn dein make obj fehlschlägt und davon berichtet, dass Fehler in einer Makefile bestehen, dann sind deine Makefiles wahrscheinlich verarltet. Zum Beispiel:

===> lib/libkvm
"Makefile", line 30: Malformed conditional ((${UVM} == "yes"))
"Makefile", line 30: Missing dependency operator
"Makefile", line 32: if-less endif
"Makefile", line 32: Need an operator
Fatal errors encountered -- cannot continue

Dies kann behoben werden, indem die Makefile-Includes neu erzeugt werden. Führe Folgendes aus:

cd /usr/src/share/mk && make install

und versuche erneut, make build auszuführen.

2.5.3: Mein make build bricht mit Fehlern über unimplemented syscall ab

Kurze Antwort:

Die Kernelstruktur statfs hat sich geändert. Du musst den Kernel neukompilieren, bevor du ein make build aufrufen kannst.

Lange Antwort:

Die Kernelstruktur statfs hat sich geändert. Der neue struct statfs hat folgende Funktionalitäten:

Weitere Veränderungen:

2.5.4: Verweis auf das neue 2.6-Verzeichnis.

Wenn du auf 2.6 upgradest, dann musst du einen einfachen Verweis für gcc erstellen.

   cd /usr/lib/gcc-lib
   ln -s ${ARCH}-unknown-openbsd2.5 ${ARCH}-unknown-openbsd2.6

2.5.5: Nach einem (U)pgrade schlägt das Entpacken von base26.tar.gz mit einer Meldung fehl:

tar: Unable to remove directory ./usr/include/machine <Directory not empty>

Unter 2.5 war /usr/include/machine ein Verzeichnis und /usr/include/i386 ein Verweis auf dieses. Unter 2.6 ist es genau andersherum.

Um dieses Problem zu beheben, musst du die Shell aufrufen, das /usr/include/machine-Verzeichnis entfernen und das Upgrade erneut durchführen.

Von 2.4 upgraden

2.4.1: Änderungen an den Manualseiten

Einige Manualseiten wurden aus Sektion 1 in andere Sektionen verschoben. Unglücklicherweise bleiben die alten Manualseiten in Sektion 1, wodurch Benutzer nicht die aktuellste Version der Seite sehen werden.

Die folgenden Seiten sollten entfernt werden:

/usr/share/man/cat1/ipf.0
/usr/share/man/cat1/ipnat.0
/usr/share/man/cat1/ipsecadm.0

2.4.2: Syntax von cap_mkdb wurde geändert

Symptom:

Ein make build endet mit einem Fehler wie diesem:

cap_mkdb -i -f terminfo terminfo.src
cap_mkdb: illegal option -- i
usage: cap_mkdb [-v] [-f outfile] file1 [file2 ...]
*** Error code 1

Korrektur:

Die Syntax, mit der man cap_mkdb aufruft, hat sich geringfügig verändert. Vor dem Aufruf von make build solltest du cap_mkdb aus den aktuellsten Quelltexten heraus neu erzeugen:

# cd /usr/src/usr.bin/cap_mkdb
# make clean && make && make install

Das make build sollte dann durchlaufen.

2.4.3: Snake

Du wirst den Inhalt des obj-Verzeichnisses löschen müssen, bevor du /usr/src/games/snake upgraden kannst.

Von 2.3 upgraden

2.3.1: Neuer Benutzer: named

Nach der Veröffentlichung von 2.3 wurde der DNS-Daemon named in ein Chrootjail gesperrt. Damit diese Änderung funktioniern kann, muss der Benutzer named angelegt werden. Wenn du dies noch nicht gemacht hast, musst du diesen Benutzer anlegen, um sicherzustellen, dass alle Verzeichnis während des Erzeugungsprozesses wie erwartet angelegt werden.

Füge den folgenden Eintrag in /etc/passwd mittels vipw(8) ein:

named:*:70:70::0:0:BIND Daemon:/var/named:/sbin/nologin

Das Folgende muss in /etc/group eingetragen werden:

named:*:70:

2.3.2: Ich habe versucht, das System zu erzeugen, doch schlägt der Prozess fehl, wenn ssleay kompiliert werden soll.

Dir fehlt vermutlich ein Eintrag für den Benutzer named in deiner Passwortdatei.

Kurze Antwort:

Erstelle vor der Erzeugungsphase den Benutzer.

Lange Antwort:

Der Benutzer named wird benötigt, damit die Rechte korrekt gesetzt werden können. Wenn der Benutzer nicht vorliegt, dann wird ein Teil des Erzeugungsprozesses fehlschlagen. Wenn du die Erzeugung in einer Datei protokolliert hast (zum Beispiel mit dem Aufruf make build &>/tmp/build.log), dann wirst du folgende Nachricht vorfinden:

(cd /usr/src/etc && make DESTDIR=/ distrib-dirs)
install -d -o root -g wheel -m 755 /
mtree -def mtree/4.4BSD.dist -p // -u

mtree: unknown user named
mtree: failed at line 1632 of the specification
*** Error code 1 (ignored)

Unglücklicherweise haben wir nicht festgestellt, dass die Erzeugung normal weitergeführt wurde; es wurde vollkommen missachtet, dass ein Fehler auftrat.

Wenn der Benutzer named vorliegt, wird mtree normal funktionieren:

missing: ./var/named (created)
missing: ./var/named/dev (created)
missing: ./var/named/etc (created)
missing: ./etc/afs (created)
missing: ./etc/ssl (created)
missing: ./etc/ssl/private (created)
missing: ./usr/obj (not created: File exists)
missing: ./usr/share/doc/html (created)
missing: ./usr/share/doc/html/lynx_help (created)
missing: ./usr/share/doc/html/lynx_help/keystrokes (created)
missing: ./usr/share/doc/usd/13.viref (created)
missing: ./usr/share/man/cat4/powerpc (created)
missing: ./usr/share/man/man4/alpha (created)
missing: ./usr/share/man/man4/pmax (created)
missing: ./usr/share/man/man4/powerpc (created)
missing: ./usr/share/tmac/mdoc (created)
missing: ./var/www/htdocs/manual/vhosts (created)
missing: ./usr/include/ssl (created)

Der Grund für den Fehler ist, dass das Verzeichnis /usr/include/ssl niemals erstellt wurde. Ohne diese Headerdateien kann ssleay nicht übersetzt werden.

Korrektur:

Erstelle den Benutzer und die Gruppe mit dem Namen named. Entferne /usr/include/ssl und /var/named und alle anderen Verzeichnisse aus der vorherigen Liste, die versehentlich beim Aufruf von make build als normale Datei angelegt worden sind.

2.3.3: Ich habe versucht, dass System zu erzeugen, doch schlägt der Prozess fehl, wenn ich das System für die PowerPC-Architektur erstelle.

Dein Verzeichnisbaum ist unvollständig. Genauer gesagt: das Verzeichnis /usr/share/man/cat4/powerpc fehlt.

Schnelle Korrektur:

Erstelle das Verzeichnis und fahre mit der Kompilierung fohrt.

Vollständige Korrektur:

Erstelle den gesamten Verzeichnisbaum. Führe dafür Folgendes aus:

# cd /usr/src/etc && make DESTDIR=/ distrib-dirs

Du wirst vermutlich eine Ausgabe wie die folgende sehen:

install -d -o root -g wheel -m 755 /
mtree -def mtree/4.4BSD.dist -p // -u

missing: ./var/named (created)
missing: ./var/named/dev (created)
missing: ./var/named/etc (created)
missing: ./etc/afs (created)
missing: ./etc/ssl (created)
missing: ./etc/ssl/private (created)
missing: ./usr/obj (not created: File exists)
missing: ./usr/share/doc/html (created)
missing: ./usr/share/doc/html/lynx_help (created)
missing: ./usr/share/doc/html/lynx_help/keystrokes (created)
missing: ./usr/share/doc/usd/13.viref (created)
missing: ./usr/share/man/cat4/powerpc (created)
missing: ./usr/share/man/man4/alpha (created)
missing: ./usr/share/man/man4/pmax (created)
missing: ./usr/share/man/man4/powerpc (created)
missing: ./usr/share/tmac/mdoc (created)
missing: ./var/www/htdocs/manual/vhosts (created)
missing: ./usr/include/ssl (created)

Beachte, dass /usr/share/man/cat4/powerpc eines der Verzeichnisse war, die mit diesem Prozess angelegt wurden.

--

$OpenBSD: upgrade-old.html,v 1.1 2005/12/07 15:31:45 saad Exp $
Copyright © 1998-2003, Kjell Wooding.
Sende bitte Kommentare, Fragen oder Anregungen an kjell@openbsd.org