[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Compilar nucli en altra màquina



El 13/11/04, a les 00:04:55, Josep Ma. Ferrer ens deleità amb les següents paraules:
[...]
> 	Cal instal·lar el paquet kernel-package i les seves dependències.
> 
> 	Després cal aconseguir un fitxer amb la configuració desitjada del
> nucli (.config), utilitzant el menuconfig, oldconfig, xconfig, etc...
> 
> 	Seguidament, ja es pot fer:
> 
[...]

be, com que tinc un parell de maquines per casa, i la que fa de servidor es
bastant menys potent que l'altra (que no es mes que una carraca, tb), faig
aixo que dius de compilar en una altra maquina, pero com que estava fart de
posar tot el carro al make-kpkg, em vaif fer uns scripts per a facilitar la
tasca:

root@dante:/usr/src/linux# nucli_clean
Us: /root/bin/nucli_clean <etiqueta>

Neteja els fonts del nucli, segons l'esquema <etiqueta>
Es equivalent a make-kpkg clean


root@dante:/usr/src/linux# nucli_config
Us: /root/bin/nucli_config [-c <metode_config>] <etiqueta> [<revisio>]

Configura els fonts del nucli, segons l'esquema <etiqueta>
Es equivalent a make-kpkg --config <metode_config> configure
Quan es modifica una configuracio, en guarda la versio anterior, per si de cas
Util si es vol actualitzar de versio del nucli, utilitzem la opcio '-c
oldconfig' i aixi ens preguntara les noves opcions i guardara en un fitxer la
nova configuracio

root@dante:/usr/src/linux# nucli_imatge
Us: /root/bin/nucli_imatge <etiqueta> [<revisio>]

Crea els paquets corresponents al nucli segons l'esquema <etiqueta>
Es equivalent a make-kpkg kernel-image modules-image

Els fitxers de configuracio es guarden tots a /usr/src/configs/ i tenen el
seguent format:
	<etiqueta>-<versio_nucli>.<tipus_cfg>
on <tipus_cfg> pot ser:
	conf, conf.old:	Configuracio del nucli
	patch:		Llista de "patches" a aplicar (dels que proporciona
			ja empaquetats debian, equivalent al parametre
			--added_patches de make-kpkg)
	mods:		Llista de moduls externs a compilar (proporcionats tb
			per debian, i equivalents a la opcio --added_modules
			de make-kpkg modules-image, crea un paquet per cada
			modul extern)

El format dels fitxers .patch i .mods es el mateix que el dels corresponents
parametres de make-kpkg: <elem1>,<elem2>,<elem3>,etc...

El format del nom dels paquets resultants es:
	<nom_paquet>_<etiqueta>.<data_creacio>[.<revisio>]_<arquitectura>.deb

Be, doncs us els adjunto i espero que us serveixin, encara que nomes sigui una
miqueta ;)

apa!
-- 
 "And it's much the same thing with knowledge, for whenever you learn
 something new, the whole world becomes that much richer."
 -- The Princess of Pure Reason, as told by Norton Juster in The Phantom
 Tollbooth
#!/bin/sh
#
# Neteja els fonts del nucli

# MAIN
if [ "$1" = "" -o "$2" != "" ]; then
    echo "Us: $0 <etiqueta>"
    exit 0;
fi
SELF=$0
ETIQ=$1

source `dirname $0`/nucli_common

checks

make-kpkg $PATCH $MODS clean

#!/bin/sh
#
# Funcions comunes

KERNELDIR="`pwd`"
CONFIGDIR="/usr/src/configs"

error () {
    echo $@
    exit 1
}

checks () {
    [ -d $KERNELDIR ] || \
      error "No puc trobar el directori $KERNELDIR amb els fonts!"
    [ -n "`grep Package:\ kernel $KERNELDIR/debian/control`" ] || \
      error "El directori $KERNELDIR no sembla que contingui fonts del nucli"
    [ -d "$CONFIGDIR" ] || \
      error "No puc trobar el directori $CONFIGDIR amb les configuracions!"
    
    get_version

    [ -n "$KERNELRELEASE" ] || \
      error "No puc determinar la versio del nucli per la que s'esta compilant"

    LABEL="$ETIQ-$KERNELRELEASE"
    FILEBASE="$CONFIGDIR/$LABEL"
    check_file "conf" "configuracio"
    check_file "patch" "patches"
    check_file "mods" "moduls"
}

get_version () {
    VERSION=`grep -n "^VERSION" $KERNELDIR/Makefile | head -1 | cut -f 3 -d " "`
    PATCHLEVEL=`grep -n "^PATCHLEVEL" $KERNELDIR/Makefile | head -1 | cut -f 3 -d " "`
    SUBLEVEL=`grep -n "^SUBLEVEL" $KERNELDIR/Makefile | head -1 | cut -f 3 -d " "`
    EXTRAVERSION=`grep -n "^EXTRAVERSION" $KERNELDIR/Makefile | head -1 | cut -f 3 -d " "`
    KERNELRELEASE=$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION
}

check_file () {
    aux=$CONFIGDIR/$ETIQ-*.$suff
    suff=$1
    desc=$2

    if [ -f "$aux" ]; then
	echo "No hi ha versions antigues per al fitxer de $desc"
	touch $FILEBASE.$suff
    elif [ -f $FILEBASE.$suff ]; then
	check_ok $suff $desc
    else
	echo "Fitxer de $desc no trobat per a la versio $KERNELRELEASE"
	echo -n "Vols utilitzar una versio antiga? [S/n] "
	read RESP
	if [ "$RESP" = "s" -o "$RESP" = "S" -o -z "$RESP" ]; then
	    echo "Fitxers disponibles:"
	    echo ""
	    ACTUAL=`pwd`
	    cd $CONFIGDIR
	    ls $ETIQ*.$suff
	    cd $ACTUAL
	    echo ""
	    RESP="/"
	    while [ ! -f $CONFIGDIR/$RESP ]; do
		echo -n "Escull-ne un: "
		read RESP
		if [ ! -f $CONFIGDIR/$RESP ]; then
		    echo "No s'ha escollit cap fitxer valid"
		fi
	    done
	    cp $CONFIGDIR/$RESP $CONFIGDIR/$ETIQ-$KERNELRELEASE.$suff
	    check_ok $suff $desc
	    echo -n "Vols esborrar la versio antiga? [s/N] "
	    read RESP2
	    if [ "$RESP2" = "s" -o "$RESP2" = "S" ]; then
		echo "rm -f $CONFIGDIR/$RESP"
		rm -f $CONFIGDIR/$RESP
	    fi
	else
	    echo -n "En vols crear un de nou? [S/n] "
	    read RESP
	    if [ "$RESP" = "s" -o "$RESP" = "S" -o -z "$RESP" ]; then
		if [ "$suff" = "conf" ]; then
		    echo "Esborrant fitxer de $desc antic i començant de nou"
		    rm -f $KERNELDIR/.config
		fi
		touch $FILEBASE.$suff
	    fi
	fi
    fi
    echo ""
}

check_ok () {
    suff=$1
    desc=$2
    echo "Fitxer de $desc trobat: $FILEBASE.$suff"
    case $suff in 
	"conf")
	cp -f $FILEBASE.$suff $KERNELDIR/.config
	;;
	"patch")
	PATCH="--added_patches `cat $FILEBASE.$suff`"
	if [ "$PATCH" = "--added_patches " ]
	then
	    PATCH=""
	fi
	;;
	"mods")
	MODS="--added_modules `cat $FILEBASE.$suff`"
	if [ "$MODS" = "--added_modules " ]
	then
	    MODS=""
	fi
	;;
    esac
    echo ""
}
#!/bin/sh
#
# Configura un nucli

# MAIN
if [ "$1" = "-c" ]; then
    shift
    METODE=$1
    shift
else
    METODE=oldconfig
fi

if [ "$1" = "" -o "$3" != "" ]; then
    echo "Us: $0 [-c <metode_config>] <etiqueta> [<revisio>]"
    exit 0
fi
SELF=$0
ETIQ=$1
REV=$2

source `dirname $0`/nucli_common

checks

REVISION="$ETIQ"."`date +%Y%m%d`"
if [ ! -z "$REV" ]; then
    REVISION="$REVISION"."$REV"
fi

sleep 2s
make-kpkg --revision $REVISION $PATCH $MODS --config $METODE configure

diff $KERNELDIR/.config $FILEBASE.conf > /dev/null
RES=$?
if [ "$RES" != "0" ]; then
    echo "Salvant la nova configuracio"
    cp -f $FILEBASE.conf $FILEBASE.conf.old
    cp -f $KERNELDIR/.config $FILEBASE.conf
fi

#!/bin/sh
#
# Creem un paquet Debian amb la imatge del nucli

# MAIN
if [ "$1" = "" -o "$3" != "" ]; then
    echo "Us: $0 <etiqueta> [<revisio>]"
    exit 0
fi
SELF=$0
ETIQ=$1
REV=$2

source `dirname $0`/nucli_common

checks

REVISION="$ETIQ"."`date +%Y%m%d`"
if [ ! -z "$REV" ]; then
    REVISION=$REVISION."$REV"
fi

sleep 2s
if [ -z "$MODS" ]
then
    make-kpkg --revision $REVISION $PATCH kernel-image
else
    make-kpkg --revision $REVISION $PATCH $MODS kernel-image modules-image
fi

diff $KERNELDIR/.config $FILEBASE.conf > /dev/null
RES=$?
if [ "$RES" != "0" ]; then
    echo "Salvant la nova configuracio"
    cp -f $FILEBASE.conf $FILEBASE.conf.old
    cp -f $KERNELDIR/.config $FILEBASE.conf
fi


Reply to: