# [SOLUCIONADO] función preup() en /etc/conf.d/net

## simonbcn

Hola,

He añadido una función preup() en /etc/conf.d/net (tal como explica el wiki de Gentoo):

```
preup() {

   elog "preup(): Configurando interface ${IFACE}."

   echo "preup(): Configurando interface ${IFACE}."

   [[ "${IFACE}" = "eth0" ]] || return 0 

   if interface_exists "${IFACE}"; then

      /usr/bin/lua /root/debloat || ewarn "preup(): Error al configurar debloat en ${IFACE}."

   fi

   

   return 0

}

```

El problema es que no parece que ejecute esa función nunca. No solo porque no ejecuta el script debloat si no porque tampoco encuentro en ningún log ninguna de las dos primeras lineas "preup(): Configurando interface ${IFACE}." que puse adrede para comprobar si entraba o no en la función.

Incluso he comentado la comprobación de "if interface_exists "${IFACE}"; then" pero sigue sin ejecutar el script.

¿Alguien tiene alguna idea de lo que puede estar fallando?

Gracias. Un saludo.Last edited by simonbcn on Wed Jan 02, 2013 2:30 pm; edited 1 time in total

----------

## quilosaq

 *Quote:*   

> "...Sus nombres se componen empezando con el nombre de interfaz..."

 

Quizás tengas que llamarlas eth0_preup() o algo parecido.

----------

## esteban_conde

Posiblemente debiera leerme la guia pero a bote pronto me parece que no es necesario tener net en /etc/init.d.

Lo que recuerdo de la guia de gentoo es que se crearan enlaces a net.lo de la forma siguiente:

ln -sf net.lo net.wlan0 de forma que el nombre de interface vaya detras del prefijo net con un punto como separador, net.eth1 net.eth0 lo que sea, luego rc.upadate add net.wlan0 default lo mete en el runlevel default y ahora sí en etc/conf.d se crea un archivo de nombre net para iniciarla siguiendo la sintaxis de un archivo etc.example.bz2 que en mi caso está en /usr/share/doc/openrc-x.y.z.bz2 pero en tu sistema puede que esté en otro sitio.

----------

## simonbcn

 *esteban_conde wrote:*   

> Posiblemente debiera leerme la guia pero a bote pronto me parece que no es necesario tener net en /etc/init.d.
> 
> Lo que recuerdo de la guia de gentoo es que se crearan enlaces a net.lo de la forma siguiente:
> 
> ln -sf net.lo net.wlan0 de forma que el nombre de interface vaya detras del prefijo net con un punto como separador, net.eth1 net.eth0 lo que sea, luego rc.upadate add net.wlan0 default lo mete en el runlevel default y ahora sí en etc/conf.d se crea un archivo de nombre net para iniciarla siguiendo la sintaxis de un archivo etc.example.bz2 que en mi caso está en /usr/share/doc/openrc-x.y.z.bz2 pero en tu sistema puede que esté en otro sitio.

 

Los enlaces ya están creados desde la instalación/configuración inicial de Gentoo:

```
# rc-update show 

....

             net.eth0 |      default                 

               net.lo | boot                         

....

```

En mi comentario especifico que el fichero que estoy modificando es el que explica el wiki y es: /etc/conf.d/net, no hablo en ningún momento de /etc/init.d que ya tiene el enlace correspondiente para eth0.

eth0 levanta y se configura correctamente, es más, en /etc/conf.d/net he definido 

```
txqueuelen_eth0="100"
```

 y esto se ejecuta correctamente.

El problema es que parece que no entra nunca en la función preup(). ¿?

Por otro lado, en mi carpeta etc/conf.d aparece otro archivo que se llama network y se parece en el contenido a net pero con todo comentado. ¿Este fichero es un resto obsoleto de una configuración anterior de Gentoo?

----------

## simonbcn

 *quilosaq wrote:*   

>  *Quote:*   "...Sus nombres se componen empezando con el nombre de interfaz..." 
> 
> Quizás tengas que llamarlas eth0_preup() o algo parecido.

 

He probado con "eth0_preup()" y "preup_eth0()" y nada. De todas formas la traducción está mal hecha. Esta es la versión original de esa página del wiki y dice:

 *Quote:*   

>  The functions are called with the interface name first so that one function can control multiple adapters. 

 

Es decir que la función es llamada con el nombre del interfaz como primer parámetro para que una misma función pueda controlar múltiples adaptadores: 

```
preup IFACE=eth0/eth1/wlan0/...
```

Sigo investigando pero no debería ser tan complicado, a menos que sea un bug.

-----------------------------------------------------------------------

SOLUCIONADO:

El nombre de la función es "preup()" (sin más, tal como pone el wiki).

Uno de los problemas es que la función "elog" no existe (aunque esto no impedía la ejecución del script). 

La segunda y que tiene que ver con el script que uso yo es que a pesar que la función recibe un parámetro llamado IFACE=(interface en cuestión), el script debloat no lo reconoce teniendo que añadir lo siguiente para que funcione:

```
IFACE=eth0 /root/debloat 
```

Last edited by simonbcn on Wed Jan 02, 2013 7:58 pm; edited 1 time in total

----------

## esteban_conde

mira en /usr/share/doc/openrc-*/ a ver si tienes un archivo net.example.bz2, si lo tienes ... esto se puede hacer de muchas formas pero creo que la mejor es: desde usr/share/doc/openrc-*/ ejecutas bzcat net.example.bz2 >/etc/conf.c/net  asi habras creado un archivo net en /etc/conf.d/ luego retocale segun el manual.

Aparte del manual suelen ser muy ilustrativos los comentarios del archivo.

Copia de la funcion que quieres emplear:

 *Quote:*   

> #preup() {
> 
> #       # Test for link on the interface prior to bringing it up.  This
> 
> #       # only works on some network adapters and requires the
> ...

 

Siguiendo la sintaxis que tiene renombra lo que consideres necesario y descomentalo todo excepto claro está lo que son comentarios que vienen comentados con dos almohadillas #   #.

Suerte y a probar.

----------

