MINI-FAQ: Upgrade OpenBSD

Poslední OpenBSD Release - 3.3

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.

Obecné otázky ohledně upgrade

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?

Upgrade z 3.4

3.4.1: Změna minor number u zařízení svnd 3.4.2: Nový uživatel a skupina _pflogd

Upgrading z 3.3

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

Upgrade z 3.2

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

Upgrade z 3.1

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

Upgrade z 3.0

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/

Upgrade z 2.9

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

Upgrade z dřívějších verzí

Informace ohledně upgrade pro OpenBSD 2.3 až 2.8 byly přesunuty do separátního dokumentu . Tenhle dokument byl už moc velký.

 

Obecné otázky ohledně upgrade

1.1: Terminologie. Co je to -current? Co to jsou snapshoty? Co to je -stable?

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.

1.2: Jaká je nejlepší cesta při upgrade na -current?

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.

1.3: Hledal jsem, ale žádné snapshoty na FTP jsem nenašel. Kam se poděly?

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ů.

1.4: Jak získám poslední verzi 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

1.5: Dobře, mám zdrojové kódy. Jak je vybuilduji?

Základní instrukce jsou v /usr/src/Makefile. Zde uvádíme sumář aktivit.

  1. 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
    
  2. 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.

  3. 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
    
  4. 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)
    
  5. Kompilace systému.

      # cd /usr/src
      # make build
    
  6. 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)
    
  7. Proveďte reboot, abyste se ujistili, že soubory v /etc jsou korektní

1.6: Pustil jsem make build, ale zastavil se v půli. Mám to celé pustít znovu?

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.

1.7: Dostávám chyby během buildování. Co mám dělat?

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í:

  1. Přihodil se vám známý problém při upgrade. Ujistěte se, že jste si přečetli odpovídající sekci tohoto dokumentu (případně jeho anglického originálu) a že jste náležitě použili uvedené instrukce.
  2. Objevili jste nový problém při upgrade. To je důsledek vašeho života na hraně s -current. Snažte se prosondovat misc@ a tech@ pro možné workarounds.
  3. Někdo patrně svojí změnou narušil zdrojové kódy. Tento typ chyby se vyskytuje zřídka a obvykle je okamžitě opraven. Zkuste počkat pár hodin a poté stáhněte zdrojové kódy znovu. Pokud můžete čekat déle, zkuste stáhnout zdrojové kódy o den či dva později.

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í.

1.8: Provádím upgrade na novou verzi kompilátoru (gcc). Existuje standardní postup?

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

1.9: Jaká je nejlepší cesta pro upgrade /etc, /var, a /dev?

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:

1.10: Jak smažu všechen ten nepořádek z mých zdrojových kódů?

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.

1.11: Musím být root pro puštění make build?

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:

1.12: Proč nevidím nová zařízení?

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

1.13: Existuje jednoduchý způsob jak provést změny v souborové hierarchii?

Č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.

1.14: Po provedení upgrade ps hlásí "proc size mismatch."

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.

1.15: Jak můžu provést upgrade na poslední snapshot?

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ě.

Upgrade z 3.4

3.4.1: minor number změny u zařízení svnd (2003/10/10)

Minor number zařízení svnd bylo změněno, budete muset zaktualizovat /dev/MAKEDEV poté, co nainstalujete nové jádro:

Tento problém postihuje kohokoliv, kdo používá snd zařízení, což je každý, kdo spustí make release.

3.4.2: Nový uživatel a skupina _pflogd (2003/10/23)

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 _pflogd
jako 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

Upgrade z 3.3

3.3.1: Podpora W^X na i386 (2003/04/16)

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á.

3.3.2: změna syscallu mquery (2003/04/28)

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.

3.3.3: i386 flag day, změna exe addr/MAXDSIZ (2003/05/05)

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.

3.3.4: Změna v config (2003/05/23)

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 install
Nyní 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.

3.3.5: Použití __attribute__((bounded)) u určitých funkcí (2003/06/26)

__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.

3.3.6: Nový uživatel a skupina _syslogd (2003/07/31)

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 _syslogd
jako root, uživatele přidáte za použití vipw(8):
  _syslogd:*:73:73::0:0:Syslog Daemon:/var/empty:/sbin/nologin

3.3.7: Použití formátovacího atributu __kprintf__ v kernel headers (2003/08/23)

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.

Upgrade z 3.2

3.2.1: Nový Perl (2002/11/05)

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.

3.2.2: Nové skupiny _radius, _token a _shadow (2002/11/21)

Bylo přidáno několik nových skupin:

Budete muset přidat výše uvedené skupiny a upravit práva pro některé soubory předtím, než pustíte "make build". Následující příkazy spusťte jako root:
	  # 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
	
Nic si nedělejte z hlášek, které vám říkají, že soubor nebyl nalezen. To pouze znamená, že jste nenastavili token či radius autentizaci.

3.2.3: Důležité změny v kompilátoru (2002/12/02)

Ochrana stacku propolice byla přidána do gcc. Budete muset lehce pozměnit postup upgrade:

3.2.4: Nový uživatel a skupina _spamd (2002/12/24)

Byly přidány nový uživatel a skupina _spamd pro démon spamd(8). Spusťte jako root

  # groupadd -g 62 _spamd
a přidejte entry pomocí vipw(8):
  _spamd:*:62:62::0:0:Spam daemon:/var/empty:/sbin/nologin

3.2.5: Alias pro ipv6-icmp (2002/12/30)

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

3.2.6: Nová skupina _lkm (2003/01/05)

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

3.2.7: Nová libpthread (2003/01/14)

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:

  1. vybuildovat gcc podle 1.8.

  2. vybuildovat system podle 1.5.

  3. vybuildovat všechny multithreadové porty.

  4. odstranit nepoužívané knihovny:

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

3.2.8: Změny v linkeru pro platformy s ELF (2003/01/17)

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

3.2.9: Odstranění /var/at a změny v crontabu (2003/02/19)

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

Upgrade z 3.1

3.1.1: Noví uživatelé skupiny

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:

3.1.2: Nové skupiny pro crontab(1) a at(1)

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.

3.1.3: Nové Binutils

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

3.1.4: Nová konfigurace S/Key

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.

3.1.5: Nová práva pro lp*

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 {} \;

3.1.6: atrun(8) již netřeba

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.

3.1.7: nat.conf sloučen s pf.conf

/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.

3.1.8: Zapotřebí nová položka ve fbtab pro xdm

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ě.

3.1.9: Použití __attribute__((sentinel)) pro určité funkce

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.

Upgrade z 3.0

3.0.1: Nová klíčová slova pro mtree(8)

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

3.0.2: Odstranění libdl na ELF platformách

ELF platformy (alpha, macppc and sparc64) už nepoužívají libdl. Pro upgrade následujte tyto kroky:

3.0.3: Nový regresní framework

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

3.0.4: konfigurační soubory ssh config přesunuty do /etc/ssh/

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.

Upgrading from 2.9

2.9.1: New users/groups - proxy, smmsp, and popa3d.

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

2.9.2: New packet filter: pf

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.

2.9.3: Changes to make

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.

2.9.4: Build fails because of KerberosV errors

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.

2.9.5: New sendmail version

sendmail(8) has been upgraded to version 8.12. As this version of sendmail no longer runs setuid root, significant changes have resulted.

  1. Both a new user and a new group (smmsp) have been added. If you have not yet done so, follow the procedure in section 2.9.1 to create them.
  2. Several changes to the file hierarchy have occurred, including a new /var/spool/clientmqueue directory and new permissions for /var/spool/mqueue. These changes can both be made using the mtree(8) procedure described in section 1.13.
  3. 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
    
  4. 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.

  5. 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"
    
  6. 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.

2.9.6: /etc/primes Moved

/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

Poznámky k českému překladu zašlete na milos_at_openbsd.cz