make buildworld

Petr Řehoř Petr.Rehor at i.cz
Tue May 11 10:24:12 CEST 2004


> na serveru kvuli jedne aplikaci potrebuji zvysit THREAD_KEYS_MAX 
> (definovano v /usr/include/pthread.h).
> Zatim si to delam rucne, ale pri poslednim upgrade jsem zapomnel a 
> problem byl na svete.
> Je nejaka moznost, jak takoveto zmeny nekde trvale poznamenat, aby po 
> pristim cvsupu a upgrade bylo vse jak ma byt?

WARNING: Nejak se mi to vymklo z rukou a je to trochu delsi :-)

Ja k tomuto ucelu pouzivam /usr/src/release ktere je urcene k vyrobeni
instalacnich CD. Mam v tomto adresari pripraveny skript release.sh kterym
to cele spoustim:

#!/bin/sh

BASE=4.8
RELEASETAG=RELENG_4_8
BUILDNAME=${BASE}-RELEASE-p18

BASE=${BASE:-4}
RELEASETAG=${RELEASETAG:-RELENG_4}
DATE=`date +%Y%m%d`
if [ -z "${BUILDNAME}" ]; then
        BUILDNAME=${BASE}-${DATE}-STABLE
fi

# Kde se bude vsechno prekladat
CHROOTDIR=/usr/release.${RELEASETAG}

# To same jako pro parametr cvs -d
CVSROOT=/home/ncvs

mkdir -p release.${RELEASETAG}
cat /dev/null > release.${RELEASETAG}.diff
for diff in `ls release.${RELEASETAG}`; do
        cat release.${RELEASETAG}/$diff >> release.${RELEASETAG}.diff
done

kldstat -n vn > /dev/null
if [ $? != 0 ]; then
        kldload vn > /dev/null
fi

make release BUILDNAME=${BUILDNAME} RELEASETAG=${RELEASETAG} CVSROOT=${CVSROOT} CHROOTDIR=${CHROOTDIR} MAKE_ISOS=1 RELNOTES_LANG=en_US.ISO8859-1 ALLLANG=no LOCAL_PATCHES=/usr/src/release/release.${RELEASETAG}.diff LOCAL_SCRIPT=/usr/src/release/release.${RELEASETAG}.sh

Aby to cele zafungovalo, tak si pomoci CVSup synchronizuju do /home/ncvs
cely CVS strom FreeBSD (pomuze vam s tim port net/cvsup-mirror ktery
umi na vasem stroji udelat mirror CVS strmu a CVSup server - jenom
doporucuju pouzit pro /home/ncvs jiny disk nez na kterem potom budete
prekladat - ja pouzivam adresar /usr/release.RELENG_4_X, jinak to bude
strasne chrastit s diskem).

Dalsi vec kterou to potrebuje k zivotu jsou zdojaky v /usr/src a porty
v /usr/ports. V /usr/src musite napred udelat make buildworld, protoze
se z nich do /usr/release.RELENG_4_X nainstaluje kompletni strom FreeBSD
do ktereho se potom udela chroot a preklada se v nem cele FreeBSD znovu
v "cistem" prostredi pro vyrobu instalacniho CD.

No a ted to nejzajimavejsi:

1) v adresari /usr/src/release/release.RELENG_4_X mam svoji sbirku patchu
pro /usr/src kterymi si ho modifikuju podle sve predstavy (treba odstraneni
IPv6 z kernelu, zakladni otesani etc adresare apod).

2) ve skriptu /usr/src/release/release.RELENG_4_X.sh mam dalsi upravy,
ktere modifikuji build prostredi podle mych potreb - treba nastavi
promenne do make.conf (muzete mit zakladni system ocesany o zbytecnosti
ktere nepotrebujete nebo optimalizovany pro vas oblibeny procesor):

#!/bin/sh
echo "IPFW2=    true" >> etc/make.conf

Kdyz se provede kompletni preklad a vytvoreni CD (na mem Pentium II 450 MHz
to trva asi 12 hodin) tak mam k dispozici instalacni ISO ze ktereho se muzou
delat instalace a upgrady a po siti delam upgrady pomoci rsync nasledujicim
zpusobem:

- v adresari /usr/release.RELENG_4_X/R/stage/trees si udelam podadresar image
a nakopiruju do nej vsechny stromy ktere normalne v sysinstalu instaluju
na server, v mem pripade to jsou: bin, manpages a crypto (je dulezite aby
crypto bylo posledni a spravne prepsalo vsechno co je potreba). A pak uz se
jenom v adresari image spusti prikaz (predpoklada to ze mate rozchozene
prihlaseni na roota vzdaleneho spoje pres certifikat a spusteneho ssh-agenta
s potrebnymi klici):

rsync -n -abcv -e ssh --exclude=/etc --exclude=/dev --exclude=/root --exclude=/var --exclude=/proc --exclude=/tmp . root at nejaka.masina:/

a uvidite co vsechno se ma na tom stroji aktualizovat. Kdyz odstranite
prepinac -n tak se upgrade skutecne provede. Pokud takhle chcete upgradovat
i kernel, tak si na cilove masine na nem musite zrusit flag schg:

	chflags noschg /kernel

jinak ho rsync nebude umet prepsat (a pak ho zase nahodit).  Delam takhle
i upgrady pres WAN sit a pokud se to dela rozume casto tak objemy dat
nejsou velke, pohybuji se v radu jednotek MB.

Pred rozpohybovanim cele te legrace doporucuju se zorientovat v
Makefile v /usr/src/release.

Mnoho uspechu.

Petr Rehor
S.ICZ a.s.
Pobocka Ceske Budejovice
J. S. Baara 40, 370 01 Ceske Budejovice, CZ
Tel: +420 387 312 808
Fax: +420 387 311 480
mailto:petr.rehor at i.cz
http://www.i.cz




More information about the Users-l mailing list