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.1: Wo finde ich Informationen über aktuellere OpenBSD-Releases?
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
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)
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
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
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
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
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
2.8.1: Neue Gruppe namens auth
2.8.2: Neues
wscons-Konsolensystem
2.8.3: Kernelkompilierung schlägt wegen
undefinierten Symbolen fehl
2.7.1: Welche großen Probleme treten beim Upgrade von 2.7 auf 2.8 auf?
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
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.
2.4.1: Änderungen an den Manualseiten
2.4.2: Syntax von cap_mkdb wurde geändert
2.4.3: Snake
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.
Lies die Seite Der Entwicklung von -current folgen.
Wenn du weiterhin Option "xkbrules" "xfree86" in deiner /etc/X11/xorg.conf-Konfigurationsdatei verwenden möchtest, musst du sie gegen Option "xkbrules" "xorg" austauschen.
Wenn du Xenocara unbedingt vom Quelltext aus übersetzen willst (mach das nicht, verwende die Snapshots!), lies xenocara/README und release(8)
Kürzlich vorgenommene Änderungen am ahci(4)-Subsystem könnten dazu führen, dass zuvor als wd* (z. B. wd0) erkannte Geräte nun als sd* (z. B. sd0) angesprochen werden.
Dies kann zu einem Problem führen, wenn du von einem frühern Snapshot aktualisieren möchtest. Lies die Ausgabe von dmesg währen des Bootvorgangs. Ein Laufwerk, das vorher wie folgt erkannt wurde:
pciide1 at pci0 dev 31 function 2 "Intel 82801GBM AHCI SATA" rev 0x02: DMA, channel 0 wired to native-PCI, channel 1 wired to native-PCIwird ab jetzt so erkannt:
pciide1: using apic 2 int 11 (irq 11) for native-PCI interrupt
wd0 at pciide1 channel 0 drive 0: <FUJITSU MHV2080BH>
wd0: 16-sector PIO, LBA48, 76319MB, 156301488 sectors
wd0(pciide1:0:0): using PIO mode 4, Ultra-DMA mode 5
ahci0 at pci0 dev 31 function 2 "Intel 82801GBM AHCI SATA" rev 0x02: AHCI 1.1: apic 2 int 16 (irq 11)
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 0 lun 0: <ATA, FUJITSU MHV2080B, 0084> SCSI2 0/direct fixed
sd0: 76319MB, 76319 cyl, 64 head, 32 sec, 512 bytes/sec, 156301488 sec total
Wir empfehlen dir, deine /etc/fstab-Datei so zu editieren, dass alle relevanten /dev/wd-Einträge stattdessen auf /dev/sd-Geräte und -Partitionen zeigen.
Die andere Möglichkeit wäre, ahci mit config(8) oder boot -c zu deaktiveren.
Lies die Manualseiten von ahci(4) und config(8), falls du weitere Details benötigst.
bgpd-Filter, die nur mit prefixlen als Filterparameter arbeiten, müssen nun eine Adressfamilie als Bezeichner wie zum Beispiel inet oder inet6 angeben:
allow from any inet prefixlen 8 - 24
deny from any inet6 prefixlen > 64
Sehr viele Packages benötigen über weitere Abhängigkeiten libexpat. Zum Beispiel die etlichen Packages, die gettext benötigen, benötigen auch libexpat.
Somit musst du unbedingt xbase42.tgz installiert haben, bevor du neue Packages installieren kannst oder dein System auf einen Snapshot upgradest, der neuer ist als deine Packages. Dies gilt selbst wenn deine Packages keine grafischen Ausgaben haben. Lies bitte die FAQ, um zu erfahren, wie du xbase42.tgz in ein bereits installiertes System einbinden kannst. Falls du dies nicht machst und ein Package installieren willst, das libexpat benötigt, wird pkg_add(1) eine Fehlermeldung ausgeben.
Wenn du das erste Mal irgendein X-Dateiset auf deinem System installiert hast, muss der Cache für die Shared Librarys nach der Installation mit ldconfig(8) aktualisiert werden. Um die X-Bibliotheken zum Cache hinzuzufügen:
# ldconfig -m /usr/X11R6/lib
Alternativ dazu kannst du auch das System neustarten - dann wird dieser
Schritt automatisch ausgeführt.
Nachdem du all deine Packages auf eine aktuellere Snapshotversion aktualisiert hast, entferne das alte expat-Package von deinem System:
# pkg_delete expat
Die Geräteerkennung für i386 wurde so verändert, dass apm(4) gegenüber acpi(4) bevorzugt wird. Das bedeutet, dass nur apm aktiviert wird, falls deine Hardware sowohl über APM- als auch ACPI-Geräte verfügt. Falls du aus irgendeinem Grund acpi bevorzugen solltest, deaktiviere apm in deinem acpi-aktivierten Kernel unter Verwendung von config(8) oder boot -c.
Die neuesten Änderungen am wip(4)-Treiber setzen voraus, dass das wpi-firmware-Package auf Revision 2.14.4 aktualisiert wird.
Wie gewöhnlich kannst du eine zusammengestellte Fassung des Firmwares
hier herunterladen:
http://damien.bergamini.free.fr/packages/openbsd/wpi-firmware-2.14.4.tgz
Damit ein Großteil der Aufrufe weiterhin wie erwartet funktionieren, füge die folgende Zeile in deine /etc/sudoers-Datei mit dem Programm visudo(8) ein:
# Defaults specification
Defaults env_keep +="DESTDIR FETCH_CMD FLAVOR FTPMODE MAKE MULTI_PACKAGES OKAY_FILES PKG_DBDIR PKG_DESTDIR PKG_CACHE PKG_PATH PKG_TMPDIR PORTSDIR RELEASEDIR SUBPACKAGE"
FALLS deine Netzwerkkarte dazugehört, musst du auf jeden Fall deine /etc/hostname.deX (Hinweis: Hardlink) und deine pf.conf anpassen.
Nochmals: Dies betrifft nur die Alpha-Plattform.
# rm -rf /usr/include/g++
# cp /usr/src/share/mk/bsd.own.mk /usr/share/mk/
Als nächstes muss gcc3 übersetzt
werden (im gcc3-Verzeichnis), dann der neue ld.so:
cd /usr/src/libexec/ld.so
make clean
make obj
make depend
make
make install
Übersetze nun den Kernel und das System wie
gewohnt.
Vor allem beim enc0-Interface ist besondere Vorsicht geboten, da Floatingstates ein potenzielles Problem für die Filterung von IPsec-Traffic darstellen: Zustände, müssen an ein Interface gebunden werden, um unverschlüsselten Datenverkehr zu verhindern, sollte isakmpd(8) beendet werden. Daher sollten alle Regeln für das enc0-Interface explizit mit keep state (if-bound) versehen werden.
# useradd -u88 -g=uid -c"RIP Daemon" -d/var/empty -s/sbin/nologin _ripd
Mit diesem Schritt werden sowohl der neue Benutzer als auch die zu
ihm gehörende Gruppe hinzugefügt. Eventuell kannst du in deiner
Arbeitsumgebung Copy&Paste für die Zeile verwenden.
# useradd -u89 -g=uid -c"HostState Daemon" -d/var/empty -s/sbin/nologin _hoststated
Mit diesem Schritt werden sowohl der neue Benutzer als auch die zu
ihm gehörende Gruppe hinzugefügt. Eventuell kannst du in deiner
Arbeitsumgebung Copy&Paste für die Zeile verwenden.
Greylisting ist nun der standardmäßige Laufzeitmodus für spamd(8); die Option -g ist überflüssig. Um Greylisting zu deaktiveren und nur noch im Blacklistmodus zu laufen, muss die Option -b übergeben werden. Mit der neuen Option -l wird angegeben, auf welcher Adresse spamd lauschen soll.
spamd-setup(8) kann ebenfalls nur im Blacklistmodus laufen, indem die neue Option -b übergeben wird.
Die spamd.conf(5)-Datei wurde von /etc in /etc/mail verschoben.
Lies bitte die Manualseiten für spamd(8) und spamd-setup(8) um alle Details zu erfahren.
Bisher sah die /etc/hostname.pppoe0-Datei wie folgt aus:
pppoedev ne0
!/sbin/ifconfig ne0 up
!/usr/sbin/spppcontrol \$if myauthproto=pap myauthname=testcaller \
myauthkey=donttell
!/sbin/ifconfig \$if inet 0.0.0.0 0.0.0.1 netmask 0xffffffff
!/sbin/route add default 0.0.0.1
up
Diese Datei sollte mit dem folgenden Beispiel ersetzt werden:
inet 0.0.0.0 255.255.255.255 0.0.0.1 pppoedev ne0 \
authproto pap authname testcaller authkey donttell up
!/sbin/route add default 0.0.0.1
Das physikalische Interface muss ebenfalls auf UP gesetzt werden:
# echo "up" > /etc/hostname.ne0
# useradd -u87 -g=uid -c"DVMRP Daemon" -d/var/empty -s/sbin/nologin _dvmrpd
Folge den Anweisungen unter FAQ 5 - Wie führe ich ein Bootstrap für eine neue Version des Kompilers (gcc) aus? für weiterführende Informationen.
# cd /usr/src/usr.bin/xargs && make obj && make && make install
Führe dann make build aus.
Dies ist die Upgradeanleitung:
Beende den alten ftp-proxy, indem du eine neue /etc/inetd.conf
installierst oder einfach per Hand den Eintrag aus der /etc/inetd.conf
entfernst oder kommentierst.
cp /usr/src/etc/inetd.conf /etc/inetd.conf
Sende dann ein HUP-Signal an inetd mittels kill:
kill -HUP `cat /var/run/inetd.pid`
Starte den neuen ftp-proxy, indem du das neue
/etc/rc-Skript
und die neue
/etc/rc.conf
installierst und danach ftpproxy_flags="" in /etc/rc.conf.local
einträgst.
cp /usr/src/etc/{rc,rc.conf} /etc
echo 'ftpproxy_flags=""' >> /etc/rc.conf.local
Alternativ dazu kann er gestartet werden, indem einfach
/usr/sbin/ftp-proxy in /etc/rc.local aufgerufen wird.
Der neue Proxy verwendet Anker, um Datenverbindungen zu erlauben. Das bedeutet, dass /etc/pf.conf angepasst werden muss. In der NAT-Sektion benötigt man:
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
Diese sind notwendig selbst wenn du sonst kein NAT verwendest. Die
folgende Regel, die eventuell schon für den alten ftp-proxy eingetragen
wurde, muss bleiben:
rdr pass on $int_if proto tcp from $lan to any port 21 -> \
127.0.0.1 port 8021
In dieser Regelsektion wird Folgendes benötigt:
anchor "ftp-proxy/*"
Regeln, die dem Proxy erlauben, FTP-Kontrollverbindungen
(Zielport 21/tcp) aufzubauen, müssen bleiben. Regeln, die
FTP-Datenverbindungen erlauben, werden nicht länger benötigt. Derartige
Regeln können Begriffe wie »user proxy« oder »to port > 49151«
enthalten.
Die übergebenen Kommandoparameter müssen auf ähnliche Weise
sorgfältig überprüft werden, da sich einige geändert haben könnten.
Siehe in der Manualseite von
ftp-proxy
nach.
Ein Fall muss besonders hervorgehoben werden: wenn du alte Clients hast, die auf Datenverbindungen im aktiven Modus aufbauen (20/tcp als Quellport), muss der Parameter -r übergeben werden (den alten Proxy musste man in diesem Fall mit »-u root« aufrufen).
Führe ftp-proxy mit »-d -D7« aus, wenn du Probleme hast und untersuchen möchtest, was gerade passiert.
# rm /usr/lib/libresolv*
# cp /usr/src/etc/etc.mac68k/MAKEDEV /dev
# cd /dev && sh ./MAKEDEV wscons
Ändere in /etc/ttys das getty ttye0 in ttyC0 und reboote nun mit dem neuen Kernel.
Folge den Instruktionen, die in FAQ 5 - Wie führe ich ein Bootstrap für eine neue Version des Kompilers aus? aufgeführt werden, um weitere Details zu erfahren.
Option "XkbLayout" "us"
Option "XkbVariant" "alt-intl"
Option "XkbLayout" "ch"
Option "XkbVariant" "de"
main auth hmac-sha1 enc aes
# 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
# cd /usr/src/lib/libc && make depend && make && env NOMAN=1 make install
# cd /usr/src/usr.bin/make && make depend && make && make install
# cd /usr/src/gnu/usr.bin/binutils
# make -f Makefile.bsd-wrapper depend
# make -f Makefile.bsd-wrapper
# make -f Makefile.bsd-wrapper install
# cd /usr/src && make build
useradd -u86 -g=uid -c"HostAP Daemon" -d/var/empty -s/sbin/nologin _hostapd
als root ausführst.
# cd /usr/src/etc
# cp login.conf /etc
Melde dich danach ab und und wieder an.
# cd /usr/src/usr.bin/mklocale && make obj && make depend && make && make install
Führe danach make build 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.
useradd -u84 -g=uid -c"FTP Daemon" -d/var/empty -s/sbin/nologin _ftp
als root aufrufst.
# 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.
useradd -u85 -g=uid -c"OSPF Daemon" -d/var/empty -s/sbin/nologin _ospfd
als root ausführst.
# cp /usr/src/etc/etc.`machine`/MAKEDEV /dev
Die Unternummern des Devices pty wurde geändert, um die maximale Anzahl der Pseudoterminals von 256 auf 992 zu erhöhen, sodass du eine aktualisierte /dev/MAKEDEV ausführen musst, bevor der neue Kernel gebootet werden kann:
# cp /usr/src/etc/etc.`machine`/MAKEDEV /dev
# cd /dev && ./MAKEDEV pty0
# cd /dev && rm -f [pt]ty[rq]*
# cd /dev && rm -f [pt]tyr*
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
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
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
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
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
Der afsd(8)-Daemon ist bald so weit, 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
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
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
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.
# cd /usr/src && make obj && make cleandir && make includes
# cd /usr/src/lib/libc && make depend && make && env NOMAN=1 make install
# cd /usr/src && make build
Anwender von authpf sollten ihre Ankerregel im
Hauptregelsatz von
anchor authpf
in
anchor "authpf/*"
abändern.
Die Unternummern des Devices svnd wurden geändert, sodass du eine aktualisierte /dev/MAKEDEV nach der Installation des neuen Kernels ausführen musst:
# cp /usr/src/etc/etc.`machine`/MAKEDEV /dev
# cd /dev
# rm svnd* rsvnd*
# ./MAKEDEV vnd
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
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.
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
Das Kommando
join(1)
wurde aktualisiert, sodass 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
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.
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
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.
Du musst /usr/share/mk/bsd.own.mk aktualisieren, um
die USE_GCC3-Definition zu haben:
# cd /usr/src/share/mk
# make install
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.
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, sodass du mit diesem vom Quelltext aus das System neu erzeugen kannst. Dies betrifft nur i386; andere Architekturen sind von dieser Änderung NICHT betroffen.
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, sodass andere Architekturen
dieser bestimmten Erzeugungsreihenfolge nicht folgen müssen.
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.
KerberosIV-basierte Authentifikation wurde entfernt. Dies bedeutet, dass du alle Referenzen auf krb4 in /etc/login.conf entfernen musst.
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.
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.
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
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.
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.
Einige neue Gruppen wurden hinzugefügt:
# 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.
Die Stackprotectionerweiterung propolice wurde in den gcc eingebunden. Dies setzt eine etwas andere Upgradevorgehensweise als sonst voraus:
# cd /usr/src
# make obj
Für ELF-Plattformen (alpha, macppc, sparc, sparc64):
# cd /usr/src/libexec/ld.so
# make depend && make && make install
Für a.out-Plattformen (amiga, hp300, i386, mac68k, mvme68k):
# cd /usr/src/gnu/usr.bin/ld/rtld
# make depend && make && make install
# cd /usr/src/include
# make prereq && make includes
# cd /usr/src/lib/libc
# make depend && make NOMAN=1 && make NOMAN=1 install
Beachte, dass wenn dein Compiler zu alt ist, er nicht in der Lage
sein wird, libc zu übersetzen. In diesem Fall musst du ein
Binaryupgrade mit einem Snapshot machen.
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
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
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
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:
Erzeuge gcc gemäß Sektion 1.8.
Bereite das System gemäß Sektion 1.5 vor.
Bereite alle Ports vor, die Threads verwenden.
Entferne alle ungenutzten Bibliotheken:
# rm /usr/lib/libc_r* /usr/lib/libnpthread*
Binutils/ld wurde geändert, um ELF-Binarys mit einer neuen Sicherheitsfunktionalität auszurüsten. Statt der Datensektion der Binarys und Shared Librarys 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.
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
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.
Einige neue Gruppen wurden hinzugefügt:
# 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.
Die Stackprotectionerweiterung propolice wurde in den gcc eingebunden. Dies setzt eine etwas andere Upgradevorgehensweise als sonst voraus:
# cd /usr/src
# make obj
Für ELF-Plattformen (alpha, macppc, sparc, sparc64):
# cd /usr/src/libexec/ld.so
# make depend && make && make install
Für a.out-Plattformen (amiga, hp300, i386, mac68k, mvme68k):
# cd /usr/src/gnu/usr.bin/ld/rtld
# make depend && make && make install
# cd /usr/src/include
# make prereq && make includes
# cd /usr/src/lib/libc
# make depend && make NOMAN=1 && make NOMAN=1 install
Beachte, dass wenn dein Compiler zu alt ist, er nicht in der Lage
sein wird, libc zu übersetzen. In diesem Fall musst du ein
Binaryupgrade mit einem Snapshot machen.
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
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
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
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:
Erzeuge gcc gemäß Sektion 1.8.
Bereite das System gemäß Sektion 1.5 vor.
Bereite alle Ports vor, die Threads verwenden.
Entferne alle ungenutzten Bibliotheken:
# rm /usr/lib/libc_r* /usr/lib/libnpthread*
Binutils/ld wurde geändert, um ELF-Binarys mit einer neuen Sicherheitsfunktionalität auszurüsten. Statt der Datensektion der Binarys und Shared Librarys 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.
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
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:
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.
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
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.
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 {} \;
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.
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.
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.
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.
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
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:
Kompiliere dein System neu:
# cd /usr/src
# make build
Wenn dein »make build« erfolgreich abgeschlossen wurde, kannst du den nächsten Schritt durchführen: libdl entfernen. Beachte, dass Packages, die gegen libdl gelinkt wurden, hiernach neuinstalliert werden müssen. Wenn du für diesen Schritt noch nicht bereit bist, überspringe ihn erst einmal. Snapshots mit korrekten Packages werden zur Verfügung gestellt.
# rm -f /usr/lib/libdl.* /usr/lib/libdl_pic.a
Generiere deinen Cache für Shared Librarys neu, wenn libdl entfernt wurde:
# ldconfig -R
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
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.
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
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.
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.
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.
Die Version von sendmail(8) ist nun 8.12. Da diese Version von sendmail nicht mehr mit setuid root läuft, entstanden signifikante Änderungen.
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
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.
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"
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.
/etc/primes wurde in /etc/moduli umbenannt. Benenne sie einfach um oder kopiere die neue Datei aus /usr/src/etc.
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:
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"
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.
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:
Ü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
Ü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
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
# 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.)
Ü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
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/
# cd /usr/src && make build
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.
(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
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
Damit Kerberos IV erfolgreich erzeugt werden kann, müssen die folgenden Schritte zuvor befolgt werden:
Beziehe und erzeuge das aktuellste usr.bin/compile_et.
# cd /usr/src/usr.bin/compile_et
# make clean && make depend && make && make install
Beziehe und erzeuge die aktuellste lib/libcom_err.
# cd /usr/src/lib/libcom_err
# make clean && make depend && make && make install
Bereinige und installiere die Kerberos-Headerdateien neu:
# rm -r /usr/include/kerberosIV/*
# cd /usr/src/kerberosIV
# make includes
Erzeuge nun die Kerberos-Bibliotheksdateien neu:
# cd /usr/src/kerberosIV/lib
# make clean && make depend && make && make install
Wenn du kein vollständiges make build durchführst, dann erzeuge Kerberos neu:
# cd /usr/src/kerberosIV
# make cleandir && make depend && make && make install
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
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.
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).
Du musst deine Bootblocks aktualisieren. Lies Section 14.8 der OpenBSD-FAQ, um weitere Details darüber zu erfahren.
Die Standardgruppe des Benutzers daemon wurde von 31 auf 1 umgestellt. Verwende vipw, damit diese Änderung wirksam wird, sodass der Eintrag für den Benutzer daemon wie folgt aussieht:
daemon:*:1:1::0:0:The devil himself:/root:/sbin/nologin
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.
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.
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.
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 immer noch 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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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
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.
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
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.
Du wirst den Inhalt des obj-Verzeichnisses löschen müssen, bevor du
/usr/src/games/snake
upgraden kannst.
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:
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.
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.14 2008/01/13 13:43:34 tobias Exp $
Copyright © 1998-2007, OpenBSD.