Discussion:
informacion de kernel (mas preguntas raras)
Alejandro Vargas
2011-08-26 11:04:42 UTC
Permalink
Continuando con mi serie de preguntas referentes a problemas raros...

Pregunta: tengo el binario de un kernel. Me gustaria saber como puedo
averiguar informacion sobre como fue compilado. Algo así como el
/proc/config.gz pero en kernel 2.4.

Explico cuál es el problema:

Para los que no lo conozcan, el fabricante Ubiquity hace unos bonitos
aparatejos que son básicamente un router wifi con un solo puerto de
red, todo dentro de una cajita lista para poner sobre un mástil. Eso
permite hacer radioenlaces en frecuencias de 2,4Ghz o 5Ghz (según el
modelo) a un precio excelente. Adentro llevan "airos", que es un
openwrt modificado por ellos.

Ellos proveen los fuentes de su sistema para quien quiera hacer
modificaciones. Yo, por ejemplo, agregué soporte para openvpn, para lo
cual tuve que agregar el módulo "tun" al kernel. Todo muy bien.

Ahora bien, hay unos modelos más antiguos que llevan un sistema más
viejo. He estado intentando compilarlo y todo termina correctamente
pero después no arranca. He tomado los binarios del firmware "oficial"
binario que distribuyen y he separado el root filesystem del kernel.
Ahí he reemplazado el kernel por el que yo genero y no arranca, por lo
tanto debo deducir que el problema es que mi kernel tiene algún
problema. Sospecho que puede ser la direccion donde se carga en
memoria (LOADADDR) o algo así, pero no tengo como mirarlo porque
cuando le cargo el firmware que no funciona, el equipo no arranca y no
quisiera desarmarlo para conectarle cables al puerto serie y debuguear
el booteo. De más está decir que he preguntado en los foros de
Ubiquity y no he recibido respuesta:
http://ubnt.com/forum/showthread.php?t=39693

No tengo esperanza de poder correr openvpn en este equipo porque tiene
poca memoria, pero sí creo que podría correr ppp sobre ssh (trae
cliente ssh). Ya lo he estado probando y puedo hacer una vpn sencilla
con un script que se conecte al servidor por ssh y ejecute el pppd de
ambos lados. Puedo hacer una autenticacion dentro del mismo script.

El problema es que el kernel que viene en estos aparatos no tiene
soporte para PPP sobre lineas asincrónicas. El soporte que viene es
para poder hacer PPPOE. Cuando ejecuto el pppd desde consola (para
largarlo sobre el ssh) me da el siguiente error:

Couldn't set tty to PPP discipline: Invalid argument

Según he leído, este error se debe a la falta de soporte para
ppp_async. De hecho, mirando la configuracion del kernel que viene
preconfigurada en el fuente del software, está desactivado.

He intentado también generarlo como módulo y después copiar el módulo
al firmware que funciona, pero al cargarlo me da un "segmentation
fault", después el lsof me muestra como que está cargado, pero
sospecho que le faltará algo más y por eso no funciona. El dmesg no me
da niguna información de por qué es el segmentation fault. Pero me da
segmentation fault con cualquier módulo. Por ejemplo generé también el
de tun, y me da lo mismo, sin embargo el modulo tun pareciera
funcionar, porque si pongo ifconfig -a me aparece el tunl0. He
revisado la versión de kernel y es la misma: 2.4.27-ubnt0

Si hago insmod ppp_async.o me contesta:

Using ppp_async.o
Segmentation fault

pero después:
# lsmod
Module Size Used by Tainted: PF
ppp_async 8336 0 (uninitialized)

A demás aparece el dispositivo:
# ls -l /dev/ppp
crw-r--r-- 1 ubnt admin 108, 0 Jan 1 2000 /dev/ppp


Sin embargo, al intentar ejecutar el pppd, me sale:

#pppd updetach nodefaultroute ipcp-accept-local ipcp-accept-remote
noauth passive pty "ssh -y ***@server -i
/etc/persistent/id_rsa"

Couldn't set tty to PPP discipline: Invalid argument

O sea, lo mismo que me salía sin el módulo. A demás, si ejecuto pppd
sin parámetros no me sale la típica cabecera de ppp sino que se corta
sin dar ningun mensaje, incluso agregando el parametro debug. El
syslog tampoco tira nada nuevo, solo esto:

Comando: pppd debug updetach nodefaultroute ipcp-accept-local
ipcp-accept-remote noauth passive

Syslog:
Aug 26 11:33:01 88.15.25.179 pppd[559]: pppd 2.4.4 started by ubnt, uid 0
Aug 26 11:33:01 88.15.25.179 pppd[559]: Couldn't set tty to PPP
discipline: Invalid argument
Aug 26 11:33:01 88.15.25.179 pppd[559]: Exit.


Eso sí, he notado que me agrega una linea diciendo:
kmod: failed to exec /sbin/modprobe -s -k tty-ldisc-3, errno = 2
cada vez que pruebo. Como que tiene el driver cargado pero sigue
buscando tty-ldisc-3..

Lo ideal sería que pudiera compilar un nuevo kernel, preferente con el
ppp_async metido adentro y no como módulo, pero no consigo que bootee
con ese kernel.


¿Se les ocurre alguna idea? ¿Saben alguna forma de hacer una VPN que
no sea esta?. No me sirve un simple tunel porque los aparatos pueden
estar detrás de un router, así que necesito que sea el aparato el que
inicie la comunicación hacia mi servidor sin necesidad de tener
puertos redirigidos.
--
Qapla'
Alejandro Vargas
MAbeeTT
2011-09-01 18:54:35 UTC
Permalink
Post by Alejandro Vargas
Continuando con mi serie de preguntas referentes a problemas raros...
Pregunta: tengo el binario de un kernel. Me gustaria saber como puedo
averiguar informacion sobre como fue compilado. Algo así como el
/proc/config.gz pero en kernel 2.4.
Para los que no lo conozcan, el fabricante Ubiquity hace unos bonitos
aparatejos que son básicamente un router wifi con un solo puerto de
red, todo dentro de una cajita lista para poner sobre un mástil. Eso
permite hacer radioenlaces en frecuencias de 2,4Ghz o 5Ghz (según el
modelo) a un precio excelente. Adentro llevan "airos", que es un
openwrt modificado por ellos.
Ellos proveen los fuentes de su sistema para quien quiera hacer
modificaciones. Yo, por ejemplo, agregué soporte para openvpn, para lo
cual tuve que agregar el módulo "tun" al kernel. Todo muy bien.
Ahora bien, hay unos modelos más antiguos que llevan un sistema más
viejo. He estado intentando compilarlo y todo termina correctamente
pero después no arranca. He tomado los binarios del firmware "oficial"
binario que distribuyen y he separado el root filesystem del kernel.
Ahí he reemplazado el kernel por el que yo genero y no arranca, por lo
tanto debo deducir que el problema es que mi kernel tiene algún
problema. Sospecho que puede ser la direccion donde se carga en
memoria (LOADADDR) o algo así, pero no tengo como mirarlo porque
cuando le cargo el firmware que no funciona, el equipo no arranca y no
quisiera desarmarlo para conectarle cables al puerto serie y debuguear
el booteo. De más está decir que he preguntado en los foros de
http://ubnt.com/forum/showthread.php?t=39693
Yo iría a preguntar a openwrt. Después de mirar la documentación en el
sitio web, el canal de IRC puede ser un comienzo. También lugro-mesh
usaba unos routers de ese tipo.

Tené presente que para configurar el kernel en openwrt podés llamar a

make kernel_menuconfig
Post by Alejandro Vargas
No tengo esperanza de poder correr openvpn en este equipo porque tiene
poca memoria, pero sí creo que podría correr ppp sobre ssh (trae
cliente ssh). Ya lo he estado probando y puedo hacer una vpn sencilla
con un script que se conecte al servidor por ssh y ejecute el pppd de
ambos lados. Puedo hacer una autenticacion dentro del mismo script.
El problema es que el kernel que viene en estos aparatos no tiene
soporte para PPP sobre lineas asincrónicas. El soporte que viene es
para poder hacer PPPOE. Cuando ejecuto el pppd desde consola (para
Couldn't set tty to PPP discipline: Invalid argument
Pero primero levantá bien el kernel! después mirá el resto. Soporta el
routercito arrancar vía ethernet? (tftp+dhcp+ramdisk...) así podrías
ir probando "ágilmente".
Post by Alejandro Vargas
Según he leído, este error se debe a la falta de soporte para
ppp_async. De hecho, mirando la configuracion del kernel que viene
preconfigurada en el fuente del software, está desactivado.
He intentado también generarlo como módulo y después copiar el módulo
al firmware que funciona, pero al cargarlo me da un "segmentation
fault", después el lsof me muestra como que está cargado, pero
sospecho que le faltará algo más y por eso no funciona. El dmesg no me
da niguna información de por qué es el segmentation fault. Pero me da
segmentation fault con cualquier módulo. Por ejemplo generé también el
de tun, y me da lo mismo, sin embargo el modulo tun pareciera
funcionar, porque si pongo ifconfig -a me aparece el tunl0. He
revisado la versión de kernel y es la misma: 2.4.27-ubnt0
Using ppp_async.o
Segmentation fault
# lsmod
Module                  Size  Used by    Tainted: PF
ppp_async               8336   0 (uninitialized)
# ls -l  /dev/ppp
crw-r--r--    1 ubnt     admin    108,   0 Jan  1  2000 /dev/ppp
#pppd updetach nodefaultroute ipcp-accept-local ipcp-accept-remote
/etc/persistent/id_rsa"
Couldn't set tty to PPP discipline: Invalid argument
O sea, lo mismo que me salía sin el módulo. A demás, si ejecuto pppd
sin parámetros no me sale la típica cabecera de ppp sino que se corta
sin dar ningun mensaje, incluso agregando el parametro debug. El
Comando: pppd debug updetach nodefaultroute ipcp-accept-local
ipcp-accept-remote noauth passive
Aug 26 11:33:01 88.15.25.179 pppd[559]: pppd 2.4.4 started by ubnt, uid 0
Aug 26 11:33:01 88.15.25.179 pppd[559]: Couldn't set tty to PPP
discipline: Invalid argument
Aug 26 11:33:01 88.15.25.179 pppd[559]: Exit.
kmod: failed to exec /sbin/modprobe -s -k tty-ldisc-3, errno = 2
cada vez que pruebo. Como que tiene el driver cargado pero sigue
buscando tty-ldisc-3..
Lo ideal sería que pudiera compilar un nuevo kernel, preferente con el
ppp_async metido adentro y no como módulo, pero no consigo que bootee
con ese kernel.
Entonces bajá openwrt.
Post by Alejandro Vargas
¿Se les ocurre alguna idea? ¿Saben alguna forma de hacer una VPN que
no sea esta?. No me sirve un simple tunel porque los aparatos pueden
estar detrás de un router, así que necesito que sea el aparato el que
inicie la comunicación hacia mi servidor sin necesidad de tener
puertos redirigidos.
Ninguna, contestate si la ram y procesador del aparato te van a alcanzar.
--
             .::MAbeeTT::.

 mabeett [at] gmail [ dot] com
 some time ago:


 mtspcchaiaeia [at] gmail [dot] com
Loading...