Recompilar paquetes desde el código fuente

Spanish Forum

Moderators: tomeu, JCSenar

Post Reply
User avatar
linux123
Level 5
Level 5
Posts: 604
Joined: Thu Sep 03, 2015 6:43 am
Contact:

Recompilar paquetes desde el código fuente

Post by linux123 » Wed Jun 28, 2017 7:01 am

Este post es una traducción del originalmente escrito por xenopeek.

En algunos casos, puede que sea necesario aplicar un parche o cambiar una opción de configuración de compilación para un paquete instalado desde el repositorio. Es fácil hacerlo, ya que hay herramientas que permiten descargar el código fuente del paquete y recompilarlo después de haber realizado los cambios que necesites.

Preparación
1.- sudo apt-get update
Este comando nos permite actualizar la caché local para que esté sincronizada con el repositorio. Esto debe hacerse siempre antes de instalar un paquete.
2.- sudo apt-get install build-essential devscripts
Instala la serie de herramientas del compilador base.
3.- Abre los Orígenes del Software desde el menú y asegúrate de que "Habilitar repositorios de código fuente" esté marcado. A continuación, haz clic en "Actualizar la memoria caché". Esto permite descargar el código fuente para los paquetes.

Recompilando desde el código fuente
1.- apt-get source paquete
Descarga el código fuente del paquete. Hay que reemplazar paquete por el nombre del paquete (valga la redundancia).
2.- dpkg-source -x nombredelarchivo.dsc
Extrae el código fuente. Hay que reemplazar nombredelarchivo por el nombre el archivo .dsc descargado. Puedes buscarlo con el gestor de archivos o con el comando ls *.dsc.
3.- cd directorio
Cambia directorio por la ruta al código fuente. Puedes buscarlo en el gestor de archivos o con el comando ls -l.
4.- sudo apt-get build-dep paquete
Cambia paquete por el nombre del paquete. Esto instala las dependencias requeridas por el paquete.
5.- Ahora puedes aplicar los parches que necesites o cambiar las opciones de configuración de compilación. Esto es un paso manual que no se puede desarrollar en este tutorial. Las modificaciones es aconsejable realizarlas en otra terminal, manteniendo esta intacta.
6.- debuild -us -uc
Recompila el paquete.
7.- cd ..
Sube un directorio hacia arriba. Aquí encontrarás tu paquete recién creado.
8.- sudo dpkg -i nombrepaquete.deb
Sustituye nombrepaquete.deb por el nombre real del paquete. Esto instalará el paquete recompilado. De nuevo, puedes usar el gestor de archivos o ls *.deb para localizar el paquete si lo necesitas.

IMPORTANTE: Esta información es genérica y, al igual que ocurre con los tarballs, puede que el proceso varíe según con qué paquete estemos tratando.
Last edited by linux123 on Fri Jun 30, 2017 1:52 pm, edited 2 times in total.

User avatar
linux123
Level 5
Level 5
Posts: 604
Joined: Thu Sep 03, 2015 6:43 am
Contact:

Re: Recompilar paquetes desde el código fuente

Post by linux123 » Wed Jun 28, 2017 7:01 am

Pues eso, que ahora tengo algo de tiempo y a ver si echo una mano con las traducciones :D
A ver qué tal ha salido esta.

Saludos.

User avatar
JOPETA
Level 15
Level 15
Posts: 5544
Joined: Thu Nov 20, 2014 6:10 am
Location: En un lugar de cuyo nombre no quiero acordarme

Re: Recompilar paquetes desde el código fuente

Post by JOPETA » Thu Jun 29, 2017 3:27 am

Gracias por compartir. :D

User avatar
JCSenar
Level 10
Level 10
Posts: 3062
Joined: Sat Sep 06, 2014 6:26 pm
Location: Irun, España
Contact:

Re: Recompilar paquetes desde el código fuente

Post by JCSenar » Thu Jun 29, 2017 4:03 pm

Estoy probándolo con el paquete firefox. Lleva 2 horas en el punto 6 (debuild -us -uc) haciendo cosas y todavía sigue (el código es mucho más largo):

Code: Select all

/usr/bin/g++ -std=gnu++11 -o Unified_cpp_gfx_layers4.o -c -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/dist/stl_wrappers -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/dist/system_wrappers -include /home/juancar/firefox-54.0+linuxmint2+sonya/config/gcc_hidden.h -DNDEBUG=1 -DTRIMMED=1 -DGOOGLE_PROTOBUF_NO_RTTI -DOS_POSIX=1 -DOS_LINUX=1 -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -I/home/juancar/firefox-54.0+linuxmint2+sonya/gfx/layers -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/gfx/layers -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/ipc/ipdl/_ipdlheaders -I/home/juancar/firefox-54.0+linuxmint2+sonya/ipc/chromium/src -I/home/juancar/firefox-54.0+linuxmint2+sonya/ipc/glue -I/home/juancar/firefox-54.0+linuxmint2+sonya/docshell/base -I/home/juancar/firefox-54.0+linuxmint2+sonya/layout/base -I/home/juancar/firefox-54.0+linuxmint2+sonya/layout/generic -I/home/juancar/firefox-54.0+linuxmint2+sonya/media/libyuv/libyuv/include -I/home/juancar/firefox-54.0+linuxmint2+sonya/gfx/skia -I/home/juancar/firefox-54.0+linuxmint2+sonya/gfx/skia/skia/include/config -I/home/juancar/firefox-54.0+linuxmint2+sonya/gfx/skia/skia/include/core -I/home/juancar/firefox-54.0+linuxmint2+sonya/gfx/skia/skia/include/gpu -I/home/juancar/firefox-54.0+linuxmint2+sonya/gfx/skia/skia/include/utils -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/dist/include  -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/dist/include/nspr -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/dist/include/nss       -fPIC  -DMOZILLA_CLIENT -include /home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/mozilla-config.h -MD -MP -MF .deps/Unified_cpp_gfx_layers4.o.pp  -Wall -Wc++11-compat -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wwrite-strings -Wno-invalid-offsetof -Wc++14-compat -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wformat -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe  -g -freorder-blocks -Os -fomit-frame-pointer  -I/home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/dist/include/cairo -I/home/juancar/firefox-54.0+linuxmint2+sonya/widget/gtk/compat-gtk3 -pthread -I/usr/include/gtk-3.0/unix-print -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/mirclient -I/usr/include/mircore -I/usr/include/mircookie -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -Wno-error=shadow  /home/juancar/firefox-54.0+linuxmint2+sonya/obj-x86_64-linux-gnu/gfx/layers/Unified_cpp_gfx_layers4.cpp
Tal vez haya que hacerse así pero es un poco agónico.... Voy a dejarlo trabajando toda la noche a ver si acaba para mañana.

No dudo de que sea útil en según qué caso pero, personalmente, en los 9 años que llevo en GNU/Linux no he tenido que recurrir nunca a esto.
Image
Si tu consulta ha sido resuelta, por favor, edita tu primer mensaje y añade [SOLUCIONADO] al título. Gracias.

User avatar
JCSenar
Level 10
Level 10
Posts: 3062
Joined: Sat Sep 06, 2014 6:26 pm
Location: Irun, España
Contact:

Re: Recompilar paquetes desde el código fuente

Post by JCSenar » Fri Jun 30, 2017 1:49 am

No se qué decir. Después de 10 horas sigo igual. Generando códigos sin parar y sin obtener el paquete .deb. Al final he abortado.

linux123: ¿lo has probado personalmente con algún paquete? Lo que me gustaría es que los temas publicados en [TUTORIALES] estén contrastados y comprobados.
Image
Si tu consulta ha sido resuelta, por favor, edita tu primer mensaje y añade [SOLUCIONADO] al título. Gracias.

User avatar
JOPETA
Level 15
Level 15
Posts: 5544
Joined: Thu Nov 20, 2014 6:10 am
Location: En un lugar de cuyo nombre no quiero acordarme

Re: Recompilar paquetes desde el código fuente

Post by JOPETA » Fri Jun 30, 2017 3:29 am

JCSenar firefox quizás es un poco especialito para ser compilado. En las páginas de Mozilla dan las instrucciones particulares para ello. Una de las primeras exigencias es que sea compilando con CC+ 4.9 ya que versiones anteriores dan problemas (creo LM 17 tiene la 4,8) y versiones posteriores (5.X) también. Además requiere una serie de paquetes extras que habría que comprobar que está instalados (rustc, cargo,autoconf2.13,..)

User avatar
linux123
Level 5
Level 5
Posts: 604
Joined: Thu Sep 03, 2015 6:43 am
Contact:

Re: Recompilar paquetes desde el código fuente

Post by linux123 » Fri Jun 30, 2017 6:19 am

Pienso lo que JOPETA, Firefox es complejo, y hay que tener en cuenta que este tutorial es genérico (quizá sería adecuado indicarlo :?: ), y que al igual que ocurre con los tarballs, puede variar entre paquetes. ¿Qué pensáis?

PD: JOPETA, ¿te fijaste en que traduje también el de sudo, gksudo y demás?

User avatar
JCSenar
Level 10
Level 10
Posts: 3062
Joined: Sat Sep 06, 2014 6:26 pm
Location: Irun, España
Contact:

Re: Recompilar paquetes desde el código fuente

Post by JCSenar » Fri Jun 30, 2017 10:12 am

JOPETA wrote:JCSenar firefox quizás es un poco especialito para ser compilado.
¡Vaya puntería la mía! :lol:

He probado con audacity y en en paso 4 (sudo apt-get build-dep audacity) el problema has ido este:

Code: Select all

juancar@JC-LM181M ~/audacity-2.1.2 $ sudo apt-get build-dep audacity
Leyendo lista de paquetes... Hecho
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
No se pudieron instalar algunos paquetes. Esto puede significar que
usted pidió una situación imposible o, si está usando la distribución
inestable, que algunos paquetes necesarios aún no se han creado o se
han sacado de «Incoming».
La siguiente información puede ayudar a resolver la situación:

Los siguientes paquetes tienen dependencias incumplidas:
 builddeps:audacity : Depende: portaudio19-dev (>= 19+svn20101113-3~) pero no va a instalarse
E: No se pudieron corregir los problemas, usted ha retenido paquetes rotos.
juancar@JC-LM181M ~/audacity-2.1.2 $
Luego he probado con handbrake y todo hay ido bien hasta el final así que, a veces, funciona.

Supongo que habrá que saber qué paquetes se pueden recompilar (después de aplicar los parches o modificar la configuración) desde según qué versión de LM. El que lo necesite supongo que lo sabrá; esto escapa a mis conocimientos.
Image
Si tu consulta ha sido resuelta, por favor, edita tu primer mensaje y añade [SOLUCIONADO] al título. Gracias.

User avatar
JOPETA
Level 15
Level 15
Posts: 5544
Joined: Thu Nov 20, 2014 6:10 am
Location: En un lugar de cuyo nombre no quiero acordarme

Re: Recompilar paquetes desde el código fuente

Post by JOPETA » Fri Jun 30, 2017 10:21 am

Hombre la necesidad de recompilar desde la fuente prácticamente se limita a controladores, kenerls y aquellos programas que el desarrollador los distribuye así sin compilar. Sobre todo kernels, como el que leXuga espera que solucione su problema con el sonido (ya existen los parches por lo que podría compilar el kernel desde la fuente y parchearlo).

Es cierto que metidos en esatas faenas la información sobre dependecias y versiones específicas de otros paquetes es esencial. Tambien a mi me queda grande este traje y espero no tener motivos reales para probarlo :D
Last edited by JOPETA on Fri Jun 30, 2017 3:39 pm, edited 1 time in total.

User avatar
linux123
Level 5
Level 5
Posts: 604
Joined: Thu Sep 03, 2015 6:43 am
Contact:

Re: Recompilar paquetes desde el código fuente

Post by linux123 » Fri Jun 30, 2017 1:50 pm

¿Entonces creéis correcto que haya añadido al final la nota de que esto es genérico? Sobre todo por aclarar...

User avatar
JCSenar
Level 10
Level 10
Posts: 3062
Joined: Sat Sep 06, 2014 6:26 pm
Location: Irun, España
Contact:

Re: Recompilar paquetes desde el código fuente

Post by JCSenar » Sat Jul 01, 2017 1:57 am

linux123 wrote:¿Entonces creéis correcto que haya añadido al final la nota de que esto es genérico? Sobre todo por aclarar...
A mí me parece correcto.
Image
Si tu consulta ha sido resuelta, por favor, edita tu primer mensaje y añade [SOLUCIONADO] al título. Gracias.

Post Reply

Return to “Español (Spanish)”