# Be careful with pixman!



## Mustela (Oct 11, 2013)

I installed recently evince for view PDFs with portmaster. The surprise is when no more working of ANY application! The problem is the update of pixman to 0.30.2, that delete the /usr/local/lib/libpixman-1.so.9.

Nooo problem! Only creating link libpixman-1.so.9 to newer libpixman-1.so.30 solves all. Don't worry for recompile your 200 packages, including Libreoffice, Firefox... jajajaja

Saludos (Regards)!


----------



## wblock@ (Oct 11, 2013)

No, do not link it.  Install sysutils/bsdadminscripts and run

```
# pkg_libchk -q > /tmp/to-be-rebuilt.txt
# portmaster `cat /tmp/to-be-rebuilt.txt`
```

Those are backticks in the second line.


----------



## kpa (Oct 11, 2013)

From /usr/ports/UPDATING:


```
20130929:
  AFFECTS: users of x11/pixman
  AUTHOR: zeising@FreeBSD.org

  The library version of x11/pixman has changed, and portrevision has
  been bumped in all dependent ports.  If you have external software that
  depends on pixman, this software needs to be recompiled.
  To recompile all software dependent on pixman, run:

  # portmaster -r pixman
  or
  # portupgrade -rf pixman
```

You may be lucky in that the newer version of the shared library implements the same API as the older version but it is not required by any standard or the FreeBSD porting guidelines. If it happens that the newer version of the library totally re-implements the programming API in an incompatible way the softlinking trick will flat out fail.


----------



## Mustela (Oct 11, 2013)

wblock@ said:
			
		

> No, do not link it.  Install sysutils/bsdadminscripts and run
> 
> ```
> # pkg_libchk -q > /tmp/to-be-rebuilt.txt
> ...



Yes, I know!  I used before by other broken libraries . Sorry, 200 packages no, 55 :r (I don't know what are thinking).


----------



## Mustela (Oct 11, 2013)

kpa said:
			
		

> From /usr/ports/UPDATING:
> 
> 
> ```
> ...


Thanks. But recompile 55 packages, some bigger like Libreoffice or Firefox, is for facepalm  Creating link, all works apparently ok.


----------



## wblock@ (Oct 11, 2013)

Creating the link won't hurt until it causes mysterious failures in the future.  And it will: Thread 32311.


----------



## zspider (Oct 11, 2013)

Mustela said:
			
		

> Thanks. But recompile 55 packages, some bigger like Libreoffice or Firefox, is for facepalm  Creating link, all works apparently ok.



Sooner or later it will catch up to you, like my adventure years ago with VirtualBox crashing my whole system, due to not recompiling the kernel module.


----------



## jb_fvwm2 (Oct 12, 2013)

I posted this in another thread maybe, it worked here: [cmd=] cp -iv /usr/local/lib/libpixman-1.so.30 /usr/local/lib/compat/libpixman-1.so.9 [/cmd].  Quicker to remember than linking the file, and easier to undo.  [Many port upgrades it won't work, though, but in this case it restored usage of many, not all, ports in use while I upgraded them in the usual way. ] The only drawback if it does work smoothly, is that often ports will not be upgraded earlier, but later when one removes the copy and they quit working. So it is not to be recommended usually, but in this case, maybe.


----------



## wblock@ (Oct 12, 2013)

No, copying the library is no different from linking to it.  To keep old libraries, use -w with portmaster.  It will save the old libraries in /usr/local/lib/compat/pkg.  pkg_libchk does not look there, so it can still detect applications with missing libraries.


----------



## jb_fvwm2 (Oct 12, 2013)

wblock@ said:
			
		

> No, copying the library is no different from linking to it.


 Correct, but I don't use the latter hardly ever so am adverse to use it, still wary of the risks of doing it backwards. 





> To keep old libraries, use -w with portmaster.


Correct, if one knows beforehand the implications of not using that parameter for a particular upgrade. In this instance I didn't ... but your suggestion has just been added to the  pixman  note that is newly on the edge of the CRT here, and will likely be of use from here on.


----------



## wblock@ (Oct 12, 2013)

The -w option can be set by default in /usr/local/etc/portmaster.rc:


```
...
# Save copies of old shared libraries (recommended) (-w)
SAVE_SHARED=wopt
...
```


----------



## rtwingfield (Oct 31, 2013)

*"libpixman-1.so.9" not found  -- Problem:  No keyboard input*

I've just encountered a similar problem associated with recent upgrade to pixman-0.30.2 (assoc/w Xorg server):

```
[INDENT]
# [CMD]startx[/CMD]
xauth:  file /root/.serverauth.71691 does not exist

X.Org X Server 1.7.7
Release Date: 2010-05-04
X Protocol Version 11, Revision 0
Build Operating System: FreeBSD 9.1-RELEASE-p7 i386
Current Operating System: FreeBSD archaxis.net 9.1-RELEASE-p7 FreeBSD 9.1-RELEASE-p7 #0: Mon Sep  9 21:23:37 UTC 2013     [email]root@amd64-builder.daemonology.net[/email]:/usr/obj/usr/src/sys/GENERIC i386
Build Date: 29 October 2013  11:18:00PM

Current version of pixman: 0.30.2
        Before reporting problems, check [url]http://wiki.x.org[/url]
        to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Thu Oct 31 11:57:41 2013
(==) Using config file: "/etc/X11/xorg.conf"
failed to set mtrr: Invalid argument
dlopen: Shared object "[B]libpixman-1.so.9[/B]" not found, required by "kbd_drv.so"
(EE) Failed to load /usr/local/lib/xorg/modules/input/kbd_drv.so
(EE) Failed to load module "kbd" (loader failed, 7)
(EE) No input driver matching `kbd'
(EE) config/hal: NewInputDeviceRequest failed (15)[/INDENT]
```

I also "experimented" (apparently /usr/local/lib/libpixman-1.so.30 is installed) by trying this (essentially a rename):


```
# cp libpixman-1.so.30 libpixman-1.so.30.bu
# mv libpixman-1.so.30 libpixman-1.so.9
```

. . .but _something_ still needed libpixman-1.so.30, too. 


```
# mv libpixman-1.so.30.bu libpixman-1.so.30
```

. . .so now have two copies of same object with different names.  `Startx` starts and seems to respond to the keyboard.

Of course, I DO NOT consider this a solution or a permanent work-around.  I'm considering the following suggestion:



> wblock@ 	No, do not link it. Install sysutils/bsdadminscripts and run
> Code:
> 
> 
> ...



Of concern is that the command's naming convention, `pkg_libchk`, could interfere with some future resolution of the `pkg_*` vs. `pkg <arg>` (the latter assoc/w the pkg2ng system).

Well, the only object identified was net-snmp-5.7.2_3, and this is confusing because `pkg version` lists it as net-snmp-5.7.2_3  = (where the = sign indicates up to date).


----------



## wblock@ (Oct 31, 2013)

You made fake libraries, so pkg_libchk did not see them as missing.  Delete them, or rather restore it to the correct state it was before renaming and copying them around.  Then run pkg_libchk again.

The name of the program is just a name.  It has nothing to do with the old or new package manager.


----------



## rtwingfield (Nov 1, 2013)

wblock@ said:
			
		

> You made fake libraries, so pkg_libchk did not see them as missing.  Delete them, or rather restore it to the correct state it was before renaming and copying them around.  Then run pkg_libchk again.



Very well . . .I did (also confirmed that libpixman-1.so.9 is non-existant).  This time the results are as follows; however, the listed ports are all up to date.

```
# pkg_libchk -q > /usr/ports/tmp/to-be-rebuilt.txt
[INDENT]ImageMagick-6.8.0.7_1
graphviz-2.34.0
gtk-2.24.19_2
harfbuzz-0.9.19
librsvg2-2.36.4
net-snmp-5.7.2_3
pango-1.34.1_1
poppler-glib-0.22.2
rrdtool-1.4.7_2
xf86-input-keyboard-1.7.0[/INDENT]
```

Perhaps there is something I don't understand about pkg_libchk; regardless, without a copy of /usr/local/lib/*libpixman-1.so.30* copied to /usr/local/lib/*libpixman-1.so.9* in addition to /usr/local/lib/*libpixman-1.so.30*, X-windows (X11) will have no keyboard response.  I'm willing to bet a dollar on a dime bet that down in the code . . .somewhere, there is a hard coded instruction that calls for for the *libpixman-1.so.9* shared object "_library_".


. . .continuing:


			
				wblock@ said:
			
		

> The name of the program is just a name.  It has nothing to do with the old or new package manager.


 . . .yeah, I know that, but some other contributors have suggested some sort of "_filter_" (to be _invented_?) that might sniff out an object name with the "pkg_" string as a red flag.


----------



## wblock@ (Nov 1, 2013)

Pixman has a shared library.  When other programs are built, they link to that library.  The programs on that list may be the latest versions, but they are still linking to the old, missing version of the pixman library.  So they must be rebuilt to link to the current one.  Run `pkg_libchk` without any options to see the full messages.


----------



## Mustela (Dec 3, 2013)

For almost two months, any problem by linking the file. Now, I'm installing GNOME2 and all is ok.

Then, is it necessary to replace the file for the simplest port update? Why isn't it possible to maintain old libraries without any option, if it doesn't present any problem, like this?


----------

