Kjell Wooding
<kjell@openbsd.org>
Aktualizováno:
$OpenBSD: upgrade-minifaq.html,v 1.2 2003/11/09 23:58:56 horacio Exp $
Český překlad: Miloš Urbánek
<milos_at_openbsd.cz>
Cílem těchto Mini-FAQ je pokusit se adresovat problémy, kterým uživatelé čelí nejčastěji při upgrade mezi různými verzemi OpenBSD, nebo mezi verzemi a -current. Ačkoliv lze tyto FAQ stěží považovat za Mini, tento dokument si ponechal jméno Mini-FAQ svého předchůdce z historických důvodů a také kvůli konzistenci. Informace o starších verzích lze nalézt v odděleném dokumentu.
Upgrade-MiniFAQ jsou určeny pro pokročilé uživatele. Pokud jste začátečník, nebo si úplně nerozumíte s vaším kompilátorem a toolchain, pak upgrade ze zdrojových kódů není určen pro vás. Nainstalujte si místo toho binární release nebo snapshot a pak aplikujte relevantní instrukce níže pro upgrade /etc.
1.1: Terminologie. Co je -current?
Co jsou to snapshoty? Co je to -stable?
1.2: Jaká je nejjednodušší cesta pro upgrade na
-current?
1.3: Hledal jsem, ale žádné snapshoty na FTP jsem nenašel.
Kam se poděly?
1.4: Jak získám poslední verzi zdrojových kódů?
1.5: OK, mám zdrojáky. Jak je teď vybuilduji?
1.6: Pustil jsem make build, ale skončil v půli cesty.
Musím to celé zase pustit nanovo?
1.7: V průběhu buildování se objevují chyby. Co s tím?
1.8: Existuje standardní způsob, jak upgradovat
kompilátor, gcc?
1.9: Jaký je nejlepší způsob pro upgrade
/etc, /var a /dev?
1.10: Jak vyčístím ten nepořádek ze stromu se zdrojovými
kódy?
1.11: Musím být root, abych mohl pustit make
build?
1.12: Proč nevidím nová zařízení?
1.13: Je jednoduchý způsob, jak změnit souborovou
hierarchii?
1.14: Po provedení upgrade ps hlásí
"proc size mismatch."
1.15: Jak mohou upgradovat na poslední snapshot?
3.4.1: Změna minor number u zařízení svnd
3.4.2: Nový uživatel a skupina _pflogd
3.3.1: Podpora i386 W^X
3.3.2: Změna syscallu mquery
3.3.3: i386 flag day, změna exe addr/MAXDSIZ
3.3.4: Změna config
3.3.5: Použití __attribute__((bounded)) u určitých
funkcí
3.3.6: Nová uživatel a skupina _syslogd
3.3.7: Nový formátovací atribut __kprintf__
v kernel headers
3.2.1: Nový Perl
3.2.2: Nové skupiny _radius, _token a _shadow
3.2.3: Důležité změny v kompilátoru
3.2.4: Nový uživatel a skupina _spamd
3.2.5: Alias pro ipv6-icmp
3.2.6: Nová skupina _lkm
3.2.7: Nová libpthread
3.2.8: Změny linkeru pro ELF architektury
3.2.9: Odstranění /var/at a změny v crontabu
3.1.1: Noví uživatelé/skupiny
3.1.2: Nová skupina crontab(1) a at(1)
3.1.3: Nové Binutils
3.1.4: Nová konfigurace S/Key
3.1.5: Nová práva pro lp*
3.1.6: atrun(8) není potřeba
3.1.7: nat.conf zakomponován do pf.conf
3.1.8: Nová položka v souboru fbtab pro xdm
3.1.9: Použití __attribute__((sentinel)) pro určité
funkce
3.0.1: Nová klávesnice podporována v mtree(8)
3.0.2: Odstranění libdl na ELF platformách
3.0.3: Nový regression framework
3.0.4: ssh config files přesunuty do /etc/ssh/
2.9.1: Noví uživatelé/skupiny - proxy,
smmsp a popa3d
2.9.2: Nový packet filter: pf
2.9.3: Změny v make
2.9.4: Build neproběhne kvůli chybě v KerberosV
2.9.5: Nová verze sendmail
2.9.6: /etc/primes přesunuty
Informace ohledně upgrade pro OpenBSD 2.3 až 2.8 byly přesunuty do separátního dokumentu . Tenhle dokument byl už moc velký.
Před verzí OpenBSD 2.7 se vývoj OpenBSD realizoval z jednoho, nerozvětveného stromu zdrojových kódů. Počínaje 2.7, byla přidána tzv. patch branch -- větev oprav.
V přibližně šesti-měsíčních intervalech jsou vydávány nové verze -- release OpenBSD. Jejich číslování je prováděno běžným způsobem (2.x, 3.x). Nejaktuálnější verze OpenBSD je vždy uvedena na vrchu tohoto dokumentu.
-current, zkratka pro openbsd-current, reprezentuje nejaktuálnější (do posledního okamžiku) verzi stromu zdrojových kódů OpenBSD, obsažených v CVS repozitáři. Jedná se o strom zdrojových kódů, se kterým pracují nejčastěji vývojáři OpenBSD. Verze -current obsahuje veškerý kód, který je plánován pro budoucí verzi OpenBSD. Čas od času dobrodruhové zapomenou na stabilní verze OpenBSD a rozběhnou na svém počítači openbsd-current, obykle proto, aby mohli s výhodou použít nové vlastnosti a možnosti, které nejsou dosud k dispozici v nové formální verzi. Upgrade na -current nedoporučujeme uživatelům bez náležitých technických znalostí.
Mezi formálními verzemi je vytvářena řada tzv. snapshotů, které jsou k dispozici na FTP serverech. Snapshoty jsou v podstatě testovací -current verze zdrojových kódů. Protože snapshoty odrážejí nejaktuálnějí stav vývoje OpenBSD, není možné garantovat, že budou fungovat korektně (nebo budou vůbec fungovat). Snapshoty jsou docela užitečné, když se chcete od formální verze OpenBSD (nebo starší verze -current) dostat k nejaktuálnější verzi systému. Pokud se rozhodnete běžet na -current doporučujeme vám sledovat konferenci source-changes. Do této konference jsou automaticky odesílány krátké zprávy o změnách, obsahující hodnotnou informaci o provedené změně, např. vylepšené podpoře konkrétního hardware, či nové vlastnosti apod.
Počínaje OpenBSD 2.7, byla vytvořena větev patchů -- patch branch (nazývaná také jako -stable). Tato větev zdrojových kódů obsahuje v základě release, ke kterému se vztahuje a důležité opravy nebo záplaty (důležité jsou zejména opravy chyb, plus další opravy, které jsou zřejmé a jednoduché, ale nezaslouží si separátní položku v errata).
The ports tree -- strom portů je integrální část systému. Strom portů byste měli aktualizovat ve stejném čase jako zbytek celého systému, postupujíce podle pravidel pro aktualizaci ostatních částí systému; tj. měli byste běžet pouze -stable porty a -stable systém nebo -current porty a -current systém.
V důsledku změn v knihovnách je přímý přesun z release na -current někdy nesnadný. Nejméně bolestivá cesta při upgrade na -current je provést nejprve upgrade na poslední snapshot. Jakmile máte jednou nainstalovaný snaphot, poslední zdrojové kódy si stáhnete a vybuildujete. Tato procedura by měla eliminovat většinu problémů, vzniklých kvůli nekompatibilitě toolchain a knihoven.
Snapshoty jsou odstraňovány jakmile zastarají (a nejsou již důležité). Pokud nejsou k dispozici žádné snapshoty, měli byste provést upgrade na poslední release a provést build ze zdrojových kódů.
Krátká odpověď: http://www.openbsd.org/cs/anoncvs.html
Příklad. Pro stažení celého stromu zdrojových kódů pomocí CVS: (za použití shellu ksh). Ostatní nahraďte setenv místo export)
# export CVSROOT=anoncvs@anoncvs.ca.openbsd.org:/cvs # export CVS_RSH=/usr/bin/ssh # cd /usr # cvs -q get -P src
Poznamenejme, že takto stáhnete -current. To jste zřejmě nechtěli. Pro stažení verze např. 3.2-stable použijte
# cvs -q get -rOPENBSD_3_2 -P src
Základní instrukce jsou v /usr/src/Makefile. Zde uvádíme sumář aktivit.
Smažte staré objektové soubory.
Pokud máte odděleně vytvořený adresář /usr/obj, smažte jej a znovu vytvořte symbolické odkazy:
# rm -rf /usr/obj/* # cd /usr/src # make obj
Pokud máte pocit, že tento krok trvá moc dlouho, může se vám hodit umístění /usr/obj na oddělený diskový oddíl a použití newfs namísto rm. Já například používám:
# umount /usr/obj # newfs wd0h # mount /usr/obj # make obj
Pokud máte strach, že vám nějaké objektové soubory zůstaly ve stromě se zdrojovými kódy, spusťte:
# cd /usr/src # find . -type l -name obj | xargs rm # make cleandir # rm -rf /usr/obj/* # make obj
Proveďte jakékoliv konfigurační změny, které jsou specifické pro danou verzi. Kupříkladu uživatelé verze 2.3 musí přidat uživatele a skupinu named předtím než provedou přesun k 2.4 a pozdější. Podívejte se do sekce Mini-FAQ specifické pro danou verzi OpenBSD.
Ujistětě se, že jsou vytvořeny všechny důležité adresáře. To je zejména důležité při upgrade ze starších verzí, ale je to také nutné občas i v jiných případech. Nejjednodušší cesta jak to zjistit je provést:
# cd /usr/src/etc && DESTDIR=/ make distrib-dirs
Zkompilujte nové jádro.
# cd /usr/src/sys/arch/`machine`/conf
Většina uživatelů použije GENERIC:
# config GENERIC # cd ../compile/GENERIC
Poznámka: Čistý sadomasochista si bude chtít jistě zkompilovat vlastní jádro. V takovém případě je nejlepší začít od jádra GENERIC a jeho konfiguraci ořezat. Vhodná je následující procedura:
# cp GENERIC MYKERNEL # vi MYKERNEL (oeditujte MYKERNEL podle libovůle) # config MYKERNEL # cd ../compile/MYKERNEL
V každém případě:
# make clean && make depend && make (pouze pro architekturu arc) zkopírujte bsd.ecoff na váš oddíl s FAT # cp /bsd /bsd.old && cp bsd /bsd # chown root:wheel /bsd (pokud jste kompilovali jako někdo jiný) (reboot)
Kompilace systému.
# cd /usr/src # make build
Aktualizujte/etc a /dev ručně. Tyto dva adresáře nejsou automaticky aktualizovány. Vyberte si adresář, který má dost místa, aby se do něj vešly /, /dev, /var, a /etc. V následujícím příkladě použijeme /home/newroot
# mkdir /home/newroot # export DESTDIR=/home/newroot # cd /usr/src/etc && make distribution-etc-root-var
Nyní porovnejte soubory v /home/newroot s těmi, co se nainstalovaly. Nahraďte či zaktualizujte soubory podle nutnosti.
# rm -rf /home/newroot (poté co jste hotovil)
Proveďte reboot, abyste se ujistili, že soubory v /etc jsou korektní
My bychom to udělali, ale pokud chcete opravdu začít tam, kde jste skončili, udělejte:
# cd /usr/src # make -n build
Takto zjistíte, co dělá make build. Kupříkladu, nám říká:
(cd /usr/src/share/mk && make install) (cd /usr/src/include; make prereq; make includes) make cleandir (cd /usr/src/lib && make depend && make && make install) (cd /usr/src/gnu/lib && make depend && make && make install) (cd /usr/src/kerberosIV/lib && make depend && make && make install) (cd /usr/src/gnu/usr.bin/perl && make -f Makefile.bsd-wrapper config.sh && make -f Makefile.bsd-wrapper depend && make -f Makefile.bsd-wrapper perl.lib && make -f Makefile.bsd-wrapper install.lib) make depend && make && make install
Chcete-li začít, kde jste skončili, vyberte jednodušše příkazy od bodu, kde jste předtím skončili.
Pokud aplikujete tuto proceduru, můžete si vytvořit vlastní target v makefajlu. Jednoduše zkopírujte položku pro build (do build-noclean, kupříkladu), a smažte odkaz na make cleandir.
Pokud vám skončí make build s chybou, je to možná kvůli tomu, že jste zapomněli předtím smazat staré objektové soubory. Podívejte se na 1.5 pro detaily.
Pokud jsi si jisti, že váš strom je čistý a prostý všech těch objektových souborů a pořád máte problémy s make build, stala se pravděpodobně jedna z následujících věcí:
Pokud jste vyzkoušeli všechny uvedené alternativy a problém přetrvává po několik dnů, pošlete mail do misc@openbsd.org. Ujistětě se, že zašlete všechny chybové hlášky, případně informace o vašem nastavení.
Protože upgrade kompilátoru je svým způsobem podobný problému slepice a vejce, změny ve kompilátoru, který je ve stromu se zdrojovými kódy vyžadují trochu více pozornosti. Obecně můžete provést některou z těchto procedur:
(ano, níže buildujete dvakrát)
# rm -r /usr/obj/gnu/egcs/gcc/* # cd /usr/src/gnu/egcs/gcc # make -f Makefile.bsd-wrapper clean # make -f Makefile.bsd-wrapper obj # make -f Makefile.bsd-wrapper depend # make -f Makefile.bsd-wrapper # make -f Makefile.bsd-wrapper install # make -f Makefile.bsd-wrapper clean # make -f Makefile.bsd-wrapper depend # make -f Makefile.bsd-wrapper # make -f Makefile.bsd-wrapper install
A pak zase spusťte jako obvykle make build.
Tento postup můžete urychlit za použití tzv. BOOTSTRAP procedury:
# 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
Krátká odpověď: ručně.
Dlouhá odpověď:
Podle nepsaného zákona software v OpenBSD nemodifikuje soubory v /etc automaticky. To znamená, že je vždy na administrátorovi, aby udělal změny sám. Upgrade není žádnou vyjímkou. Pro aktualizaci souborů v tomto adresáři nejprve zjistětě, k jakým změnám došlo v základních (distribučních) souborech a poté manuálně provědte potřebné změny.
Chcete-li např. zjistit, jaké soubory se nedávno změnily, udělejte:
# cd /usr/src/etc # ls -lt |more
Chcete-li vidět všechny změny v /etc mezi libovolnými verzemi OpenBSD, použijte CVS. Pro výpis změn mezi 3.1 a 3.2, udělejte:
# cd /usr/src/etc # cvs diff -u -rOPENBSD_3_1 -rOPENBSD_3_2
Poté, co jste identifikovali potřebné změny, aplikujte je do vašeho lokálního stromu, při zachování všech lokálních nastavení, které jste provedli dříve.
Typické změny v /etc mezi verzemi OpenBSD jsou:
Nejdůležitější věc, kterou musíte udělat je smazat vaše obj adresáře. Zde je procedura, která zaktualizuje zdrojové kódy a zároveň odstraní všechny zbylé obj soubory:
# cd /usr/src # cvs -q -d anoncvs@some.anon.server:/cvs up -Pd # find . -type l -name obj | xargs rm # make -k cleandir # rm -rf /usr/obj/* # make obj
Pokud máte pořád problémy, možná budete potřebovat přidat volby -I ! -I CVS -I obj do vašich aktualizačních příkazů pro CVS. Tímto identifikujete zbytkový "bordýlek" ve vašich zdrojových kódech.
Ačkoliv určité kroky procesu make build potřebují privilegia superuživatele, samotný build proces obsahuje vazbu na příkaz sudo(8) který tento proces dostatečně zjednoduší.
Pokud máte dobře nastavený soubor /etc/sudoers, můžete použít sudo následujícím způsobem:
Skript /dev/MAKEDEV není aktualizován automaticky během make build build procesu. Obecně platí, že je dobré zkopírovat a spustit tento skript z vašeho stromu se zdrojovým kódem během provádění upgrade:
# cd /dev # cp /usr/src/etc/etc.`machine`/MAKEDEV ./ # ./MAKEDEV all
Čas od času jsou přidány/odstraněny soubory a adresáře ze souborové hierarchie. Rovněž se může změnit nastavení práv na části nebo celém filesystému. Jednoduchý způsob, jak zajistit, že souborová hierarchie je up-to-date je použít program mtree(8).
Nejprve stáhntětě aktuální zdrojové kódy, a pak:
# cd /usr/src/etc/mtree # install -c -o root -g wheel -m 600 special /etc/mtree # install -c -o root -g wheel -m 444 4.4BSD.dist /etc/mtree # mtree -qdef /etc/mtree/4.4BSD.dist -p / -u
Vaše souborová hierarchie by nyní měla být up-to-date.
Vás userland a kernel nejsou v souladu. Obé musí být zkompilováno ze stejných zdrojových kódů, jelikož mezi nimi existují určité závislosti. Překompilujte kernel nebo userland z těch samých zdrojových kódů a problém bude opraven.
Protože jste právě udělali jednu z chyb, je právě teď ideální čas, abyste si tento dokument přečetli celý znovu, abyste tak předešli případným dalším chybám a problémům.
Instalace snapshotu je dobrý způsob, jak zůstat up-to-date. Požadujeme po vás, abyste snapshoty testovali, obzvlášť v čase, kdy vychází beta-verze, abychom si mohli být všichni jisti, že další verze OpenBSD bude mít nejvyšší kvalitu. Instalace snapshotu je také mnohem méně náročná než vybuildování celého systému ze zdrojových kódů.
Nejjednodušší cesta, jak se dostat ke -current je stáhnout boot image a připravit se podle návodu ve FAQ. Jakmile nabootujete, vyberte si volbu "(U)pgrade" a následujte instrukce.
Existuje několik způsobů, jak zpustit upgrade program. Obykle je nejjednodušší nabootovat z floppy nebo CD-ROM, či umístit -current bsd.rd do vašeho / a nabootovat jej místo /bsd. Jiné možnosti zahrnjí nabootování ze sítě či magnetické pásky. Ne všechny metody jsou k dispozici pro všechny architektury, odkazujeme vás proto na instalační instrukce pro další informace.
I když upgrade ručně z místa občas funguje, není to doporučovaný postup. Jediná bezpečná cesta pro provedení upgrade je nabootovat z nového instalačního/upgrade média jak popsáno výše.
Ve všech případech musít provést upgrade /etc, /var and /dev ručně.
Minor number zařízení svnd bylo změněno, budete muset zaktualizovat /dev/MAKEDEV poté, co nainstalujete nové jádro:
# cp /usr/src/etc/etc.`machine`/MAKEDEV /dev
# cd /dev
# rm svnd* rsvnd*
# ./MAKEDEV vnd
Démon pflogd(8) nyní běží se separovanými privilegii, a tudíž je třeba nového uživatele a skupinu. Skupinu přidáte spuštěním příkazu
# groupadd -g 74 _pflogdjako root a přidáním uživatelovy položky za pomocí vipw(8):
_pflogd:*:74:74::0:0:pflogd privsep:/var/empty:/sbin/nologin
Pro zapnutí podpory Writable xor eXecute na platformě i386 se OpenBSD/i386 přesunulo od formátu a.out pro spustitelné soubory k formátu ELF. Flexibilita ELFu umožňuje lepší kontrolu nad rozvržením spustitelného programu a umožňuje podporu W^X support. a.out kompatibilita je pouze k dispozici v omezené podobě. Statické binární a.out soubory budou fungovat jako dříve, dynamické a.out binárky NEJSOU podporovány.
UPGRADE zdrojových kódů z a.out -> na ELF NENÍ podporován. INSTALACE SNAPSHOTU a vybuildování systému ze zdrojových kódů je jedna z možností, které budou fungovat. Výše uvedené platí pouze pro i386, ostatních platforem se to netýká.
Parametry systémového volání mquery byly změněny tak, aby odpovídali volání mmap(). Je zapotřebí provést upgrade systému ve správném pořadí:
1. Vybuildujte a nabootujte nové jádro.
2. (cd /usr/src && sudo make includes)
3. (cd /usr/src/libexec/ld.so && make && sudo make install)
4. 'make build'
mquery používá pouze platforma i386, ostatní architektury
nemusí striktně následovat výše uvedené instrukce.
Proto, aby MAXDSIZ mohla být nastavena zpět na 1G, byla změněna bázová adresa všech spustitelných souborů z 0 na 0x1c000000. Kombinace těchto změn vyžaduje provést update ze snapshotu. Update ze zdrojových kódů není podporován. Změna postihuje pouze i386.
Přesunutí swapgeneric.c si vyžádalo změnu do config(8). Před vybuildováním jádra musíte nejprve vybuildovat a nainstalovat aktualizovaný config(8):
# cd /usr/src/usr.sbin/config # make clean # make obj # make # make installNyní pustťe config na konfiguraci vašeho jádra a spusťte "make depend" v adresáři, kde kompilujete jádro jak uvedeno výše.
__attribute__((bounded)) se nyní používá pro detekci nesprávných argumentů
u funkcí, které jako jeden z parametrů mají délku bufferu.
Budete muset vybuildovat gcc podle sekce
1.8
těchto Mini-FAQ předtím, než se pustíte do make build.
Démon syslogd(8) nyní běží s privilege separation a je nutné, abyste vytvořili uživatele a skupinu _syslogd. Skupinu přidáte takto:
# groupadd -g 73 _syslogdjako root, uživatele přidáte za použití vipw(8):
_syslogd:*:73:73::0:0:Syslog Daemon:/var/empty:/sbin/nologin
V kernel headers se používá nový formátovací atribut __kprintf__
proto, aby gcc vědělo o rozšířeních formátu v rámci kernelového
printf(9).
Budete muset vybuildovat gcc podle instrukcí v sekci1.8
těchto Mini-FAQ předtím, než spustíte make build.
Musíte taktéž vybuildovat gcc z aktuálních zdrojových kódů, abyste
získali podporu pro atribut __bounded__ uvedený v sekci
3.3.5.
Perl byl aktualizován na verzi 5.8.0.
V Perlu 5.8.0 se změnilo API modulu XS module v důsledku přechodu
od stdio k PerlIO (viz perldelta manual page pro více informací).
To znamená, že jakýkoliv XS modul (perl .so soubory) který máte
nainstalován
MUSÍ být znovu vybuildován. Pokud uvidíte chybu typu
Undefined symbol "perl_get_sv" pak je to právě tento problém.
Pokud jste moduly, které máte, instalovali pomocí packages či
portů, pak můžete zkontrolovat XS moduly ve vašem systému pomocí:
# grep '\.so' /var/db/pkg/p5-*/+CONTENTS | cut -d: -f1 | sort -u
Poté můžete odstranit zbývající moduly pomocípkg_delete -f
a vybuildovat/nainstalovat je opět z ports tree.
Bylo přidáno několik nových skupin:
# 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.dbNic si nedělejte z hlášek, které vám říkají, že soubor nebyl nalezen. To pouze znamená, že jste nenastavili token či radius autentizaci.
Ochrana stacku propolice byla přidána do gcc. Budete muset lehce pozměnit postup upgrade:
# cd /usr/src
# make obj
Pro ELF platformy (alpha, macppc, sparc, sparc64):
# cd /usr/src/libexec/ld.so
# make depend && make && make install
Pro a.out platformy (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
Pokud máte příliš starý kompilátor, nebudete moci vybuildovat libc.
V takovém případě vám nezbývá, než provést upgrade ze snapshotu.
Byly přidány nový uživatel a skupina _spamd pro démon spamd(8). Spusťte jako root
# groupadd -g 62 _spamda přidejte entry pomocí vipw(8):
_spamd:*:62:62::0:0:Spam daemon:/var/empty:/sbin/nologin
Byl přidán nový alias pro ipv6-icmp, icmp6 do /etc/protocols. Pokud chcete použít icmp6 alias (použitý v pfctl(8) regression testech) musítě modifikovat řádku v ipv6-icmp /etc/protocols, přidáním keywordu icmp6 před #. Řádka bude vypadat takto:
ipv6-icmp 58 IPv6-ICMP icmp6 # ICMP for IPv6
Nová skupina _lkm řídí přístup k zařízení /dev/lkm. modstat(8) jež je nyní setgid _lkm.
Přidejte skupinu a upravte práva na /dev/lkm předtím než pustíte "make build". Použijte tyto příkazy jako root:
# groupadd -g 61 _lkm # chgrp _lkm /dev/lkm
libc_r a libnpthread byly odstraněny a nahrazeny libpthread. Multithreadové programy by i nadále měly být kompilovány s volbou -pthread; aby kompilátor provedl vše správně.
Před odstraněním libc_r a libnpthread musí být threadované aplikac překompilovány s libpthread. Doporučená sekvence:
vybuildovat gcc podle 1.8.
vybuildovat system podle 1.5.
vybuildovat všechny multithreadové porty.
odstranit nepoužívané knihovny:
# rm /usr/lib/libc_r* /usr/lib/libnpthread*
Binutils/ld byly změněny, aby poskytly nové bezpečnostní možnosti pro spustitelné programy formátu ELF. Namísto toho, aby datová sekce spustitelných programů byla označena jako executable linkerem, změnilo se rozvržení binárních souborů tak, aby bylo třeba označit jako executable pouze odpovídající sekce programu. Změna postihuje ELF platformy: alpha, sparc, sparc64, macppc.
Doporučujeme předělat binutils předtím než předěláte celý systém.
# 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
Poté předělejte celý systém podle 1.5
Obsah /var/at byl spojen s /var/cron a at bylo integrováno do cron. Navíc soubory allow a deny pro cron byly přejmenovány na cron.allow a cron.deny, aby odpovídaly POSIXu a byly konzistentní s at.allow a at.deny.
Nejprve předělejte systém podle 1.5 Poté přesuňte existující soubory a restartujte crona:
# 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
Ignorujte hlášky o chybějícíh allow či deny souborech. Ne všechny jsou součástí defaultní instalace.
Pokud ještě nemáte soubor cron.deny (nebyl instalován před OpenBSD 3.3) budete ho muset vytvořit, abyste mohl spustit crontab jako jiný uživatel než root.
# install -c -o root -g crontab -m 660 /dev/null /var/cron/cron.deny
Bylo přidáno několik nových uživatlů a skupin: Podpora pro authpf(8) -- zapotřebí nová skupina. Rovněž podpora pro separaci privilegií v sshd(8) vyžaduje uživatele a skupinu sshd. Další uživatelé a skupiny pro systémové služby byly přidány s příponou "_". Přidejte následující položky do vipw(8):
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
Přidejte do /etc/group:
sshd:*:27: _portmap:*:28: _identd:*:29: _rstatd:*:30: _rusersd:*:32: _fingerd:*:33: _sshagnt:*:34: _x11:*:35: authpf:*:72:
Programy crontab(1) a at(1) už nemusí být setuid root, nyní jsou setgid crontab.
Než pustíte "make build", přidejte skupinu crontab. Přidejte do /etc/group:
crontab:*:66:
"make build" zaktualizuje některá, ale ne všechna práva. Po doběhnutí "make build" pusťte ručně (předpokládejme shell /bin/csh):
# 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
Pravděpodobně nebudete mít všechny allow/deny soubory, což není problém.
Byly přidány nové binutils (2.11.2), což si vyžádalo aktualizovat libiberty. Předělejte tuto knihovnu v několika krocích:
# 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
Starý databázový soubor S/Key, /etc/skeykeys, byl nahrazen ze adresář, /etc/skey, kde každý soubor je vlastněn uživatelem, ke kterému přísluší. /etc/skeykeys můžete zkonvertovat do nového formátu pomocí (jako root):
# skeyinit -C # mv /etc/skeykeys /etc/skeykeys.OLD
Poznamenejme, že programy třetích stran, které používají přímo S/Key budou muset být překompilovány.
Spool adresáře používané lpd nyní musí být zapisovatelné skupinou daemon na to, aby lpr mohlo spoolovat soubory. Navíc musí být soubory ve spool adresáři vlastněny uživatelem a skupinou daemon. Toho lze dosáhnout takto:
# 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 {} \;
Příkazu atrun(8) již není zapotřebí. Jeho funkcionalita byla zahrnuta do programu cron(8). Měli byste odstranit job /usr/libexec/atrun z crontabu uživatele root za použití:
# crontab -e
Rovněž odstraňte /usr/libexec/atrun, /usr/share/man/cat8/atrun.0 a adresář /var/at/spool.
/etc/nat.conf byl sloučen s /etc/pf.conf. Musíte vložit pravidla z nat.conf do pf.conf hned po pravidlech scrub a před filtrovací pravidla.
pfctl(8) má novou volbu pro nahrání sady pravidel, -f, a volby -R and -N mají nyní nový význam. Přečtětě si man page a zaktualizujte /etc/rc.
login(1) potřebuje změnit vlastníka /dev/wsmouse na nového uživatele _x11, který je používán xdm pro revokaci privilegií na řadě platforem. Změna do /etc/fbtab je na platformě závislá. Soubor je vytvořen pomocí:
# 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
Pokud máte vlastní změny v /etc/fbtab, musíte je spojit dohromady s novým souborem ručně.
Existuje nový atribut __attribute__((sentinel)) v gcc, který se
používá, pokud určité funkce typu
exec(3)
jsou použity bez ukončovacího ukazatele na NULL.
Budete muset předělat gcc podle
1.8
těchto Mini-FAQ, předtím než se pustíte do make build.
Musíte předělat a nainstalovat novou verzi utility mtree(8), předtím než pustíte "make build".
# cd /usr/src/usr.sbin/mtree # make cleandir # make obj # make depend # make # make install
ELF platformy (alpha, macppc and sparc64) už nepoužívají libdl. Pro upgrade následujte tyto kroky:
Rekompilace systému:
# cd /usr/src # make build
Pokud jste úspěšně provedli "make build", můžete smazat libdl. Packages, které byly slinkovány s libdl musí být přeinstalovány. Pokud na to nejste připraveni, přeskočte následující krok. Snapshoty s opravenými balíky budou brzo k dispozici.
# rm -f /usr/lib/libdl.* /usr/lib/libdl_pic.a
Po odstranění libdl regenerujte cache sdílených knihoven:
# ldconfig -R
Do bsd.regress.mk byla přidána nová infrastruktura pro regresní testování. Před spuštěním make obj si nainstalujte tento soubor.
# cd /usr/src/share/mk # make install
Nejdříve vytvořte /etc/ssh/ podle sekce 1.13
Rekompilujte váš systém:
# cd /usr/src # make build
Přesuňte soubory /etc/ssh*_* do nového adresáře /etc/ssh:
# cd /etc # mv ssh*_* ssh/
Budete muset změnit vaše rc skripty.
Zaktualizujte řádky HostKey v sshd_config. Například:
HostKey /etc/ssh_host_key
se změní na:
HostKey /etc/ssh/ssh_host_key
Poté restartujte sshd.
First, with the addition of the pf(4) firewalling package, and its ftp-proxy(8) suite, a new user and group named proxy were added to the system. To support this addition, add the following user entry using vipw(8):
proxy:*:71:71::0:0:Proxy Services:/nonexistent:/sbin/nologin
Also add the proxy group to /etc/group:
proxy:*:71:
Second, as part of the Sendmail 8.12 upgrade, sendmail no longer runs setuid root. Both a new user and a new group, named smmsp, have been added to the system. Add a line like the following to your /etc/group:
smmsp:*:25:
Then, run vipw(8) and add the following line for the smmsp user:
smmsp:*:25:25::0:0:Sendmail Message Submission Program:/nonexistent:/sbin/nologin
Make sure this line appears before any yp(8) settings line.
Finally, a new user and group were added for Solar Designer's popa3d server, now part of the core system. Add the following to /etc/group:
popa3d:*:26:
And using vipw(8), add
popa3d:*:26:26::0:0:POP3 server:/var/empty:/sbin/nologin
The IPF firewalling package that has been part of previous OpenBSD releases has been replaced with an all-new firewalling suite called pf(4). As a result, a number of changes need to be made.
First, pf depends on a new device file. To ensure that this special device is created, do the following:
# cd /dev # cp /usr/src/etc/etc.`machine`/MAKEDEV ./ # ./MAKEDEV all
Second, a number of filesystem change have occurred. For your reference, the following binaries have been replaced:
OLD: /sbin/ipf /sbin/ipfstat /sbin/ipnat /usr/sbin/ipfs /usr/sbin/ipftest /usr/sbin/ipmon /usr/sbin/ipresend /usr/sbin/ipsend /usr/sbin/iptest NEW: /sbin/pfctl /usr/libexec/ftp-proxy
Similarly, for the devices:
OLD: /dev/ipl /dev/ipnat /dev/ipstate /dev/ipauth NEW: /dev/pf
And finally, the filter configuration files:
OLD: /etc/ipf.rules /etc/ipnat.rules NEW: /etc/pf.conf /etc/nat.conf
The old ipfilter sample configuration files may be removed:
# rm -rf /usr/share/ipf
A mechanism for safely enabling pf has been added to the /etc/rc and /etc/rc.conf files. You will need to update these files to include the new hooking mechanism. If you wish to enable pf, set PF=YES in /etc/rc.conf.
There have been changes to make(1) and its data files which may cause difficulties in the build process. This usually manifests as errors from bsd.own.mk during the build. To avoid these issues, first update the data files:
# cd /usr/src/share/mk # make install
Then build and install the new make.
# cd /usr/src/usr.bin/make # make clean && make obj && make depend && make # make install
Now proceed with your upgrade.
Before you try building the whole system, you need to first build KerberosV.
First, there is a new KerberosV configuration directory in /etc. If you have not already done so, use the mtree(8) procedure described in section 1.13 to create it:
Now, build KerberosV
# cd /usr/src/kerberosV # make obj # cd lib/roken # make # cd ../../usr.bin/asn1_compile # make # make install
You may also need to update your /etc/login.conf, to reflect that the file /usr/libexec/auth/login_krb-or-pwd has been renamed to login_krb4-or-pwd.
sendmail(8) has been upgraded to version 8.12. As this version of sendmail no longer runs setuid root, significant changes have resulted.
Add the following to root's crontab(1). This is necessary since sendmail is no longer setuid root, and relies on this entry to do parts of its job:
# 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
Note: The files submit.cf and localhost.cf have been installed to your /etc/mail directory. The first of these, submit.cf (referred to as the "client" configuration file in current sendmail documentation) is used by mail user agents that want to submit mail locally for delivery via sendmail. Due to the permissions changes described above, this does not require root privileges; the sendmail binary is set-groupid to group smmsp. The second file, localhost.cf, is an OpenBSD-ism that runs sendmail only listening on the localhost interface to accept mail from the local host but not accept connections from the network (you almost certainly want this if you also use e.g., smtpd(8) listening on the SMTP port on your outside interface). For more details, see the file SECURITY in /usr/src/gnu/usr.sbin/sendmail/sendmail.
It is highly recommended that you regenerate and update your sendmail configuration files in /etc/mail. You can find some working configuration files in /usr/share/sendmail/cf. Note that localhost.cf is generated from openbsd-localhost.mc.
If you were running sendmail without the -bd option in /etc/rc.conf, as the default installation settings do, you will need to use localhost.cf. Edit rc.conf to use the following:
# For normal use: "-L sm-mta -bd -q30m" sendmail_flags="-L sm-mta -C/etc/mail/localhost.cf -bd -q30m"
Once your configuration file is ready, kill(1) the existing sendmail:
kill `sed 1q /var/run/sendmail.pid`
Restart the new sendmail with the appropriate options, for example:
/usr/sbin/sendmail -L sm-mta -bd -q30m
for a configuration accepting mail from outside, or
/usr/sbin/sendmail -L sm-mta -C/etc/mail/localhost.cf -bd -q30m
for a local mail-only configuration.
Note: the -bd flag is now needed in both cases.
The new sendmail should now be running.
/etc/primes has been renamed to /etc/moduli. Simply copy this file from its old location or from /usr/src/etc.
Originally [OpenBSD: upgrade-minifaq.html,v 1.177 ]
$Translation: upgrade-minifaq.html,v 1.3 2003/11/09 21:15:46 certik Exp $
$OpenBSD: upgrade-minifaq.html,v 1.2 2003/11/09 23:58:56 horacio Exp $
Copyright © 1998-2003, Kjell Wooding.
Please send any comments, questions, or suggestions to kjell@openbsd.org