# [hplip] Violación de segmento en hp-toolbox(solucionado)

## pcmaster

Hola,

Me he dado cuenta que al ejecutar hp-toolbox se produce dicho mensaje de error. Revdep-rebuild no encuentra paquetes rotos (Dynamic linking on your system is consistent... All done.) y recompilar hplip no resuelve nada.

Sin embargo, imprime correctamente (o sea, el driver funciona).

Tengo instalado cups 1.2.10 y hplip-1.7.4a-r1

¿ideas?

----------

## Cereza

Las violaciones de segmento parecen un misterio, no tengo experiencia con esas aplicaciones, pero ¿has actualizado recientemente? tal vez podrias probar una versión anterior del paquete a ver si el resultado es el mismo.

----------

## pcmaster

Gracias por la respuesta.

Al final he conseguido solucionarlo. El problema era el paquete PyQt. Actualicé de la versión dev-python/PyQt-3.14.1-r2 a la versión dev-python/PyQt-3.17 con un

# emerge -vD hplip.

y se ha arreglado. La gracia está en que acababa de hacer un emerge -v world y se supone que estaba todo actualizado. Se habían actualizado algunos paquetes, creo que algo de Python también, pero no el PyQt. ¿No se supone que en world están todos los paquetes instalados en el sistema?

Tampoco entiendo es por qué revdep-rebuild no detectaba el paquete corrupto.

----------

## Coghan

A veces la lista de paquetes en word no es correcta, para eso hay una forma de regenerarla:

```
regenworld
```

----------

## Cereza

El propio ython se ha actualizado hace poco a 2.5 y me suena que al final de la instalación te daba instrucciones con algún comando que había que hacer para actualizar los paquetes al nuevo python. Ummm, lo siento, no sé mucho más del tema, yo no lo he actualizado todavía.

----------

## pcmaster

Sí, ya lo conozco, precisamente lo había hecho hace poco. Pero no añade el paquete PyQt

AthlonXP portage # cat world|grep dev-python

dev-python/pyrex

dev-python/pycrypto

dev-python/pygtk

dev-python/python-fchksum

dev-python/pyopengl

AthlonXP portage # regenworld

AthlonXP portage # cat world|grep dev-python

dev-python/pyrex

dev-python/pycrypto

dev-python/pygtk

dev-python/python-fchksum

dev-python/pyopengl

AthlonXP portage #  emerge -pv PyQt

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] dev-python/PyQt-3.17  USE="-debug -doc -examples" 0 kB 

Total: 1 package (1 reinstall), Size of downloads: 0 kB

AthlonXP portage #  regenworld

AthlonXP portage # cat world|grep dev-python

dev-python/pyrex

dev-python/pycrypto

dev-python/pygtk

dev-python/python-fchksum

dev-python/pyopengl

AthlonXP portage # pwd

/var/lib/portage

AthlonXP portage #

¿Sabéis si hay alguna forma sencilla de obtener la lista de todos los paquetes instalados que no estén en el world?

----------

## gringo

 *Quote:*   

> ¿No se supone que en world están todos los paquetes instalados en el sistema? 

 

en world están los paquetes que has instalado explícitamente, no sus dependencias. Pyqt debe ser dependencia de algún paquete en world.

Para actualizar las dependencias de python está python-updater, tal y como siguiere el elog al actualizar python.

 *Quote:*   

> ¿Sabéis si hay alguna forma sencilla de obtener la lista de todos los paquetes instalados que no estén en el world?

 

que no estén explícitiamente en el world no sé, pero en /var/db/pkg está todo lo que has instalao. Cuestión de "diffear" ambos, supongo.

saluetes

----------

## Coghan

Lo he comprobado y a mí tampoco me aparece en el world, pero es posible que sea así por que es una dependencia de hplip y posiblemente de algún otro paquete y sólo se actualice cuando estos lo necesiten.

Pienso que no se actualizó sólo porque el hplip sólo depende de la versión >=dev-python/PyQt-3.11 o superior.

```
$ qdepends -a hplip

 * DEPEND

net-print/hplip-1.7.4a-r1: !net-print/hpijs !net-print/hpoj dev-libs/openssl virtual/ghostscript >=media-libs/jpeg-6b net-print/cups dev-libs/libusb >=dev-lang/python-2.2 net-print/foomatic-filters net-print/foomatic-db-engine net-analyzer/net-snmp >=dev-python/PyQt-3.11 =x11-libs/qt-3* >=media-gfx/sane-backends-1.0.9 >=media-gfx/xsane-0.89 >=media-gfx/sane-frontends-1.0.9

 * RDEPEND

net-print/hplip-1.7.4a-r1: !net-print/hpijs !net-print/hpoj dev-libs/openssl virtual/ghostscript >=media-libs/jpeg-6b net-print/cups dev-libs/libusb >=dev-lang/python-2.2 net-print/foomatic-filters net-print/foomatic-db-engine net-analyzer/net-snmp >=dev-python/PyQt-3.11 =x11-libs/qt-3* >=media-gfx/sane-backends-1.0.9 >=media-gfx/xsane-0.89 >=media-gfx/sane-frontends-1.0.9

 * PDEPEND

```

----------

## pcmaster

 *gringo wrote:*   

> 
> 
> que no estén explícitiamente en el world no sé, pero en /var/db/pkg está todo lo que has instalao. Cuestión de "diffear" ambos, supongo.
> 
> saluetes

 

/var/db/pkg es un directorio, así que no es tan fácil...

----------

## Coghan

Quizás esté aquí la raíz de tu problema, ejecutaste 

```
emerge -v world
```

Yo suelo hacer cada vez que actualizo

```
emerge -uvDN world
```

para poder prevenir este tipo de casos y los posibles cambios de USE que haya podido hacer a lo largo del tiempo.

----------

## pcmaster

Sí, puede ser, pero después de un emerge -v world, siempre ejecuto un revdep-rebuild, pensé que era suficiente.

----------

## Coghan

Desde mi punto de vista y según entiendo en la man page de revdep-rebuild, este comando se usa para localizar las dependencias perdidas, en tu caso tenías instalada la dependencia correcta que necesitaba hplip según el ebuild, por eso no te la marcó como perdida o rota y no la actualizó.

Si, como en tu caso, da error y el hplip necesita una versión superior de PyQt a la que marca su ebuild, entonces nos podemos encontrar con un pequeño bug en el ebuild de hplip. Podrías intentar confirmarlo y comunicarlo, si te sientes con ganas.  :Rolling Eyes: 

Como dije antes con la opción D del emerge fuerzo a que se actualicen también las dependencias si estas existen.

----------

## i92guboj

revdep-rebuild no tiene nada que ver con dependencias actualizadas o no. Es más, revdep-rebuild siempre compila la misma versión instalada, puedes ver que cuando lo hace poner el mismo número de versión y escribe los paquetes en la línea de comandos en la forma "=category/package-version". Revdep-rebuild simplemente comprueba la info de ldd para los binarios, y si no es consistente, los recompila usando lo mismo que haya instalado. Nada más.

La forma de actualizar dependencias es con emerge -D, es más, yo tengo definido un alias emerge="emerge -Dv", así me ahorro problemas y tecleo. Aún así, hay veces que se puede escapar algo, por eso de vez en cuando yo también hago un "emerge -DuvN --with-bdeps y world". Esa no recomiendo ponerla como alias o en EMERGE_DEFAULT_OPTS porque alarga el tiempo de cálculo de las dependencias bastante, y de todas formas casi nunca es necesaria. Simplemente la ejecuto una vez al mes si me acuerdo  :Razz: 

En man emerge está todo.

----------

## i92guboj

 *pcmaster wrote:*   

>  *gringo wrote:*   
> 
> que no estén explícitiamente en el world no sé, pero en /var/db/pkg está todo lo que has instalao. Cuestión de "diffear" ambos, supongo.
> 
> saluetes 
> ...

 

Directorios, archivos, dispositivos... bah jeje, todo es lo mismo en *nix.

Bueno, bromas aparte, con algo de bash no es difícil de hacer, esta es la lista de todo lo instalado:

```

$ ((for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done) | sed -e 's#\-[0-9].*##')

```

Para estar seguro, podemos hacer esto:

```

$ (for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done) | sed -e 's#\-[0-9].*##' | sort > A.txt

$ cat /var/lib/portage/world | sort > B.txt

```

Luego es cosa de hacer un diff entre A.txt y B.txt.

----------

## pcmaster

No es que hplip necesite una versión superior de PyQt, ya que antes funcionaba, sino que quizá al actualizar la libería Qt (creoq eu se actualizó hace poco) debería haberse actualizado PyQt si éste último paquete quedaba roto, ¿no? y sin embargo no detectaba nada.

----------

## i92guboj

 *pcmaster wrote:*   

> No es que hplip necesite una versión superior de PyQt, ya que antes funcionaba, sino que quizá al actualizar la libería Qt (creoq eu se actualizó hace poco) debería haberse actualizado PyQt si éste último paquete quedaba roto, ¿no? y sin embargo no detectaba nada.

 

Creo que el problema es el update de python the hace un par de días (a 2.5). 

Para dichos paquetes existe python-updater, como alguien dijo más arriba. Yo lo ejecuté tras actualizar python, antes de hacer ninguna otra cosa, y no he tenido problemas. Recuerdo que PyQt se reconstruyó al usar python-updater, al igual que otros 31 paquetes. Es otro de esos mensajes que salen al final (tras actualizar python) y mucha gente no lee. Al actualizar cosas como python hay que prestar mucha atención. No hay que olvidar que emerge no funcionará sin python, así que no es buena idea dejar eso a la suerte  :Wink: 

----------

## Coghan

 *pcmaster wrote:*   

> No es que hplip necesite una versión superior de PyQt, ya que antes funcionaba, sino que quizá al actualizar la libería Qt (creoq eu se actualizó hace poco) debería haberse actualizado PyQt si éste último paquete quedaba roto, ¿no? y sin embargo no detectaba nada.

 

Al actualizar qt no veo porqué se tiene que actualizar PyQt, no está como dependencia de la primera.

```
~ $ qdepends -a qt

 * DEPEND

dev-libs/dbus-qt3-old-0.70: >=sys-apps/dbus-0.91 =x11-libs/qt-3*

x11-libs/qt-4.3.0-r2: x11-libs/libXrandr x11-libs/libXcursor x11-libs/libXi x11-libs/libXfont x11-libs/libSM x11-proto/xextproto x11-proto/inputproto dev-util/pkgconfig virtual/xft >=media-libs/freetype-2 media-libs/libpng media-libs/jpeg media-libs/tiff virtual/mysql =dev-db/sqlite-2* virtual/opengl virtual/glu dev-db/libpq net-print/cups sys-libs/zlib >=sys-apps/dbus-1.0.2 dev-libs/openssl

x11-libs/qt-3.3.8-r3: x11-libs/libXcursor x11-libs/libXi x11-libs/libXrandr x11-libs/libSM x11-proto/inputproto x11-proto/xextproto virtual/xft media-libs/libpng media-libs/jpeg >=media-libs/libmng-1.0.9 >=media-libs/freetype-2 sys-libs/zlib virtual/mysql virtual/opengl virtual/glu dev-db/libpq net-print/cups

 * RDEPEND

dev-libs/dbus-qt3-old-0.70: >=sys-apps/dbus-0.91

app-emulation/emul-linux-x86-qtlibs-10.0: >=app-emulation/emul-linux-x86-baselibs-10.0 >=app-emulation/emul-linux-x86-xlibs-7.0-r7

x11-libs/qt-4.3.0-r2: x11-libs/libXrandr x11-libs/libXcursor x11-libs/libXi x11-libs/libXfont x11-libs/libSM x11-proto/xextproto x11-proto/inputproto dev-util/pkgconfig virtual/xft >=media-libs/freetype-2 media-libs/libpng media-libs/jpeg media-libs/tiff virtual/mysql =dev-db/sqlite-2* virtual/opengl virtual/glu dev-db/libpq net-print/cups sys-libs/zlib >=sys-apps/dbus-1.0.2 dev-libs/openssl

x11-libs/qt-3.3.8-r3: x11-libs/libXcursor x11-libs/libXi x11-libs/libXrandr x11-libs/libSM x11-proto/inputproto x11-proto/xextproto virtual/xft media-libs/libpng media-libs/jpeg >=media-libs/libmng-1.0.9 >=media-libs/freetype-2 sys-libs/zlib virtual/mysql virtual/opengl virtual/glu dev-db/libpq net-print/cups

 * PDEPEND

```

Sin embargo PyQt si que necesita a qt

```
~ $ qdepends -a PyQt

 * DEPEND

dev-python/PyQt-3.17: =x11-libs/qt-3* >=dev-python/sip-4.4.1 dev-python/qscintilla sys-devel/libtool virtual/python

 * RDEPEND

dev-python/PyQt-3.17: =x11-libs/qt-3* >=dev-python/sip-4.4.1 dev-python/qscintilla

 * PDEPEND

```

Con respecto a listar los paquetes instalados, nada más fácil que:

```
eix -cI
```

Si quieres le aplicas el filtro grep que desees...

----------

## ekz

 *i92guboj wrote:*   

> 
> 
> ```
> 
> $ ((for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done) | sed -e 's#\-[0-9].*##')
> ...

 

Una forma mucho más fácil para ver los paquetes instalados es 

```
equery list
```

 :Very Happy: 

SAludos

----------

## i92guboj

 *ekz wrote:*   

>  *i92guboj wrote:*   
> 
> ```
> 
> $ ((for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done) | sed -e 's#\-[0-9].*##')
> ...

 

En primer lugar, eso puede tardar una hora, mientras la línea de arriba es un listado de dirs, lo cual lleva un par de segundos. Además, la idea era obtener un formato similar al del fichero world, para poder hacer un diff. Por eso mi línea es tan larga, por las partes que recortan el formato para adaptarlo.

----------

## ekz

 *i92guboj wrote:*   

> 
> 
> En primer lugar, eso puede tardar una hora, mientras la línea de arriba es un listado de dirs, lo cual lleva un par de segundos. Además, la idea era obtener un formato similar al del fichero world, para poder hacer un diff. Por eso mi línea es tan larga, por las partes que recortan el formato para adaptarlo.

 

Aunque no me creas: iba a editar el post después de probar tu comando, para mencionar justamente eso, y añadir que me había gustado esa linea... pero no lo hice

Ah y i92guboj, esas lineas las diseñas "en caliente" en una terminal o tienes un fichero guardadito, como un memo  :Very Happy: ? 

SAludos!

----------

## Coghan

Y la pole es para: i92guboj con su conjunto de fabricación propia.

```
time ((for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done) | sed -e 's#\-[0-9].*##') 

real    0m0.426s

user    0m0.144s

sys     0m0.012s

```

```
time eix -cI

real    0m1.412s

user    0m0.308s

sys     0m0.044s

```

```
time equery list

real    0m48.193s

user    0m4.100s

sys     0m0.920s

```

Chicos, la próxima carrera avisar, que me coge en frío.   :Twisted Evil: 

----------

## i92guboj

 *ekz wrote:*   

>  *i92guboj wrote:*   
> 
> En primer lugar, eso puede tardar una hora, mientras la línea de arriba es un listado de dirs, lo cual lleva un par de segundos. Además, la idea era obtener un formato similar al del fichero world, para poder hacer un diff. Por eso mi línea es tan larga, por las partes que recortan el formato para adaptarlo. 
> 
> Aunque no me creas: iba a editar el post después de probar tu comando, para mencionar justamente eso, y añadir que me había gustado esa linea... pero no lo hice
> ...

 

No son tan complejas jeje. Es cosa de cogerle el tacto.

"for i in /var/db/pkg/*/*"

Quiere decir "para todo lo que coincida con el patrón /var/db/pkg/*/*" (creo que esto no requiere mucha explicación).

do echo ${i/\/var\/db\/pkg\//};

Hacer esto:

Imprimir el contenido de $i (cada vuelta que se de esto vale una de las rutas que coinciden con /var/db/pkg/*/*)

peeeero, recortando el /var/db/pkg de delante, los pares \/ son para que bash no interprete las / como caracteres especiales, sino como parte de la cadena que queremos eliminar.

done) | sed -e 's#\-[0-9].*##') 

Esto se pasa por el filtro sed para eliminar el resto.

s#\-[0-9].*##

Esto en sed significa, buscar patron que tenga un guión, luego un número, y luego lo que sea (.*), y sustituírlo por lo que hay entre los dos últimos #, es decir, nada.

Así nos queda todo pelado.

En el otro comando añado un |sort al final para ordenar el resultado de todo lo anterior de forma alfabética. Luego hago lo mismo con el fichero world y los vuelco ambos en otro fichero con un operador de redirección (>). Luego solo queda hacer un diff.

Aunque no lo creas, poco a poco hacer esto se convierte en algo tan normal como hacer ls.

----------

## i92guboj

 *Coghan wrote:*   

> Y la pole es para: i92guboj con su conjunto de fabricación propia.
> 
> [...]
> 
> Chicos, la próxima carrera avisar, que me coge en frío.  

 

Jajajaja x), que risa. Vaya, pues no tenía ni idea. Seguro que si busco la forma de quitar el sed de enmedio todavía rascaría algo más jejeje. 

Saludos!   :Very Happy: 

EDIT  :Smile: 

Efectivamente  :Razz: 

```

# time for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done | sed -e 's#\-[0-9].*##' > A; \

> time for i in /var/db/pkg/*/*; do i=${i/\/var\/db\/pkg\//}; i=${i/-[0-9]*/}; echo $i; done > B

```

Da estos resultados al ejecutarlo 3 veces seguidas:

```

real    0m0.119s

user    0m0.051s

sys     0m0.007s

real    0m0.089s

user    0m0.068s

sys     0m0.007s

real    0m0.123s

user    0m0.054s

sys     0m0.004s

real    0m0.092s

user    0m0.073s

sys     0m0.003s

real    0m0.128s

user    0m0.052s

sys     0m0.006s

real    0m0.096s

user    0m0.074s

sys     0m0.004s

```

Al quitar el sed nos ahorramos dos cosas: una tubería, y una llamada a un programa externo.

Por supuesto los resultados son los mismos, es decir, la info obtenida con ambas líneas es idéntica:

```

# diff A B

#

```

----------

## Coghan

 *i92guboj wrote:*   

> 
> 
> ```
> 
> for i in /var/db/pkg/*/*; do echo ${i/\/var\/db\/pkg\//}; done | sed -e 's#\-[0-9].*##'
> ...

 

Con tu permiso, maestro, me los adjunto a mi cajón desastre.   :Wink: 

----------

