SoloCodigo
Sistemas Operativos => GNU/Linux => Mensaje iniciado por: emuller en Viernes 3 de Agosto de 2007, 04:02
-
Hola a todos. En mi Mandriva 2007 Spring free he querido compilar el kernel para usarlo como arquitectura UML (User Mode Linux) para un proyecto de la universidad referido a redes pero me ha largado algunos errores (las versiones que quise compilar son la 2.6.10 y la 2.6.20), por lo que para ver si se debía a la versión del gcc (trae la 4.1.x o algo así, y el kernel 2.6.20 compiló más que el 2.6.10) me bajé del repositorio oficial unas versiones más antiguas del gcc (una es la 2.96) que otras personas han colocado allí. El problema es que no sé como hacer para que se utilicen estas versiones alternativas del gcc al momento de compilar. Espero que alguien me pueda decir, ya que utilizo el make pero en el help no encontré nada que me permitiera indicar el gcc a utilizar. De paso, aunque no corresponde con el título que puse, si alguien tiene alguna otra idea sobre mi problema de compilar el kernel con arquitectura UML es bienvenido (creo que me larga unos errores con unas opciones inválidas del ld). La verdad no tengo mucha idea sobre este tema y quizás ni siquiera sea problema del compilador.
-
Que errores te da?
Por favor ponlos, para saber que puede ser.
Realmente esto no tinene que ver con GCC, la version 4.X es 100% compatible con las anteriores y es mucho mejor.
Para usar la otra version tienes que modificar el Makefile, puesto que Linux no tiene un install.sh
Aun asi pone los errores.
-
Acá subo en un archivo .zip las salidas de la compilación del kernel 2.6.10 y 2.6.20. Espero que encuentren alguna solución. Yo seguiré buscando con el google a ver que encuentro.
-
Instala libutil, de GNU core utils y binutils.
http://www.gnu.org/software/coreutils/ (http://www.gnu.org/software/coreutils/)
http://ftp.gnu.org/gnu/binutils/ (http://ftp.gnu.org/gnu/binutils/)
-
Después de visitar varias veces el repositorio de Mandriva y buscar archivos instalados, creo que ya tenía el paquete binutil (si no me equivoco es donde viene, entre otras utilidades, el ld el cual tengo) y también el paquete coreutils (hice una búsqueda de archivos y encontré las librerías libutil). Así que ese no parece ser el problema (al menos que haya errores de versión o de directorios).
Buscando con el google encontré en un sitio una respuesta al mismo problema en el que decían que hay que instalar libinetd (o algo parecido) y el Mandriva que uso usa xinetd (que creo es un mejor reemplazo para inetd) ¿puede que sea eso?
¿Alguna idea? No quiero tener que cambiarme a otra distribución (como slackware en la que si he podido compilar eso).
Otra cosa, en la compilación del kernel 2.6.10 parece que el error es el código fuente y no del ld como en el 2.6.20, ¿o me equivoco?
-
No, para nada... el error es muy claro:
/usr/bin/ld: cannot find -lutil
Busca binutils-dev y GNU core-dev
-
O sea (corregime si me equivoco) que necesito los códigos fuentes. Pues en el repositorio no están las versiones "dev" por lo que tendré que utilizar los fuentes originales de los sitios oficiales. ¿En dónde debo colocar esos fuentes para que el compilador los encuentre?
-
Bueno, volví a buscar entre los repositorios de Mandriva y encontré el paquete binutils-dev pero no el coreutils-dev. Me sigue dando los mismos problemas de compilación. También encontré paquetes con los fuentes de binutils y coreutils pero no me deja instalarlos porque ya están instalados los binarios (¿?) Veré si buscando en otros mirrors de repositorios puedo encontrar el paquete coreutils-dev
-
Bueno, volví a buscar entre los repositorios de Mandriva y encontré el paquete binutils-dev pero no el coreutils-dev. Me sigue dando los mismos problemas de compilación. También encontré paquetes con los fuentes de binutils y coreutils pero no me deja instalarlos porque ya están instalados los binarios (¿?) Veré si buscando en otros mirrors de repositorios puedo encontrar el paquete coreutils-dev
Ahora que lo decis, podes hacer una prueba:
Compila las fuentes de coreutils, a ver si el actual ld dice algo.
-
Me bajé los fuentes de binutils y de coreutils desde los sitios oficiales (como dije, el instalador gráfico de RPMs del Mandriva no me dejó instalar los RPMs de los fuentes de su repositorio) cuyas versiones son las mismas que las de los binarios que tengo instalados. Descomprimí los fuentes en una carpeta cualquiera, les hice "./configure" y luego "make" y compilaron sin problemas.
-
Bueno. Después de seguir probando con varios paquetes y de actualizar el sistema, encontré un paquete que al instalarlo pude lograr compilar el kernel 2.6.20. El paquete se llama glibc-static-devel-.... Igualmente, sigo sin poder compilar el kernel 2.6.10, pero quizá sea por culpa de versiones de librerías, etc. (me sigue interesando el poder compilar esta versión).
-
Bueno. Después de seguir probando con varios paquetes y de actualizar el sistema, encontré un paquete que al instalarlo pude lograr compilar el kernel 2.6.20. El paquete se llama glibc-static-devel-.... Igualmente, sigo sin poder compilar el kernel 2.6.10, pero quizá sea por culpa de versiones de librerías, etc. (me sigue interesando el poder compilar esta versión).
Francamete, es mucho mejor que uses el 2.6.20, mas estable, menos bugs... ademas que tiene todo lo que e. 2.6.10 tiene, no entiendo porque quiere una mas vieja.
En ese problema, no encuentro solucion, quizas una glib mas viejo, o un gcc?
Realmente no se.
-
Supongo que usaré el 2.6.20. El porqué de querer utilizar el 2.6.10 te lo explico: estas compilaciones en modo UML (User Mode Linux) las utilizamos en la universidad para generar máquinas virtuales y armar varias configuraciones de redes en donde implementamos servicios, configuraciones con el iptables, etc. Es cierto que el 2.6.20 es mejor (y lo utilizamos) ya que tiene más políticas para el iptables, etc. El problema (que quizás exista una solución pero no hemos podido encontrarla) es que cuando levantamos una máquina virtual, para cada una de ellas abre algunas terminales de línea de comandos (3 por defecto pero que es configurable) a las que nombra como "console 1", "console 2", etc. Al correr el kernel se le pasa un parámetro para darle un nombre a la máquina virtual. En el 2.6.10 se utiliza ese nombre y se coloca en las terminales correspondientes con lo que se sabe a que máquina virtual pertenece (imaginate si se están corriendo 10 máquinas virtuales, se tendrían por defecto 30 terminales abiertas y si no se sabe a que máquina virtual pertenece cada una, es un caos total). El problema es que el 2.6.20 no agrega ese nombre a la terminal. Es por ésto que utilizamos el 2.6.20 para levantar una máquina virtual que actue como servidor (por lo de tener más opciones) y utilizamos el 2.6.10 para levantar máquinas virtuales que actuen como clientes.
Espero que hayas entendido mi explicación. Cualquier duda sobre el tema no tengo problemas en intentar contestarlo.
-
Facil, usa hostname (http://unixhelp.ed.ac.uk/CGI/man-cgi?hostname) :D
-
Lamentablemente el hostname no sirve para eso (ya lo he probado), el nombre al que yo me refiero es una especie de id que se le asigna a la instancia UML (el kernel corriendo) y que UML usa para varias cosas mientras está corriendo y que el 2.6.10 lo agregaba en el título de cada una de las consolas virtuales que se abrían para esa instancia. No creo que tenga alguna solución con los comandos u opciones de un linux normal sino que se debe de poder hacer con las opciones especiales que brinda el kernel con arquitectura UML (he estado horas probando varias opciones y no le encontré la solución). De todas formas gracias.
-
Podes buscar en la wiki de ellos (http://uml.jfdi.org/uml/Wiki.jsp)
Que tal si le cambias el nombre a la prompt (en .bash_profile)?
-
Parece que se ha solucionado el problema, porque he probado un kernel más nuevo que el 2.6.20 (ahora no me acuerdo pero es algo de 2.6.22) y lo del umid ha vuelto a funcionar de la misma forma que lo hacía el 2.6.10 así que me olvido del 2.6.20 y uso el más nuevo y listo.