Archive for the ‘Linux’ Category

python and perl USE flag change

Sunday, October 9th, 2011

Today, I had to enable python and perl USE flags globally in /etc/make.conf. I guess Gentoo changed the default setting for these flags. Personally I like having the kind of built-in tools and scripts that these provide, so I turned them on. Plus, enabling these flags avoided having to rebuild dozens of ebuilds (I have a lot of stuff installed).

I can understand why the Gentoo devs did it (most people don’t need perl/python/ruby support embedded in Vim, for example), but I’m beginning to think there’s no way for me to keep up with changes, or if there is, I totally missed it, so everytime this changes I’ll be looking at Bugzilla and the Forums. Maybe there’s a way I can track these kind of USE flag changes on my own system, in a more obvious way then the output from eix-sync. I’ll have to look into it.

Gentoo poppler 0.16.7 build error

Wednesday, October 5th, 2011

This is a gentoo problem I hadn’t seen before:

Building CXX object qt4/src/CMakeFiles/poppler-qt4.dir/poppler-ps-converter.cc.o
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.5/../../../../x86_64-pc-linux-gnu/bin/ld: warning: libopenjpeg.so.2, needed by /usr/lib/libpoppler.so.13, not found (try using -rpath or -rpath-link)
/usr/lib/libpoppler.so.13: undefined reference to `opj_set_event_mgr'
/usr/lib/libpoppler.so.13: undefined reference to `opj_cio_open'
/usr/lib/libpoppler.so.13: undefined reference to `opj_image_destroy'
/usr/lib/libpoppler.so.13: undefined reference to `opj_cio_close'
/usr/lib/libpoppler.so.13: undefined reference to `opj_set_default_decoder_parameters'
/usr/lib/libpoppler.so.13: undefined reference to `opj_destroy_decompress'
/usr/lib/libpoppler.so.13: undefined reference to `opj_create_decompress'
/usr/lib/libpoppler.so.13: undefined reference to `opj_decode'
/usr/lib/libpoppler.so.13: undefined reference to `opj_setup_decoder'
collect2: ld returned 1 exit status
linking of temporary binary failed: Command '['gcc', '-o', '/var/tmp/portage/app-text/poppler-0.16.7/work/poppler-0.16.7_build/glib/tmp-introspectN6cqKw/Poppler-0.16', '-O2', '-march=nocona', '-pipe', '-L.', '-Wl,-rpath=.', '-lpoppler-glib', '-pthread', '-lgio-2.0', '-lgobject-2.0', '-lgmodule-2.0', '-lgthread-2.0', '-lrt', '-lglib-2.0', '/var/tmp/portage/app-text/poppler-0.16.7/work/poppler-0.16.7_build/glib/tmp-introspectN6cqKw/Poppler-0.16.o']' returned non-zero exit status 1
make[2]: *** [glib/Poppler-0.16.gir] Error 1
make[1]: *** [glib/CMakeFiles/gir-girs.dir/all] Error 2
[ 93%] Building CXX object qt4/src/CMakeFiles/poppler-qt4.dir/poppler-qiodeviceoutstream.cc.o
[ 94%] Building CXX object qt4/src/CMakeFiles/poppler-qt4.dir/poppler-sound.cc.o
[ 94%] Building CXX object qt4/src/CMakeFiles/poppler-qt4.dir/poppler-textbox.cc.o
[ 94%] Building CXX object qt4/src/CMakeFiles/poppler-qt4.dir/poppler-page-transition.cc.o
[ 95%] Building CXX object qt4/src/CMakeFiles/poppler-qt4.dir/__/__/poppler/ArthurOutputDev.cc.o
Linking CXX shared library libpoppler-qt4.so

Turns out, I needed to build with “-introspection” in order to build it again with “introspection”. Or maybe I could just globally disable introspection, but not sure what that would change, it looks like a Gnome thing. As usual I ended up with lots of Gnome and KDE installed, and really I still just use Enlightenment everywhere. If it wasn’t Enlightenment, it would be Windowmaker or something similar.

A new way to cause a reboot loop

Thursday, September 23rd, 2010

I sometimes have a need to take down a Linux host “hard”, that is, without the normal shutdown scripts.  Among other methods, I accomplish this with:

echo b > /proc/sysrq-trigger

This is suboptimal (risks corruption), but it does the job. The hosts in this case have kernel modules that the normal “rmmod” would hang on forever, and since they have no console/ILO or IPMI or other power control I am forced to use this or some other trick to take down (reboot -f or sending a NOC person out on the floor are the other common methods, the latter being our last resort).

Because this immediately forces the kernel to reboot (assuming you have the “Magic SysRq” option in your kernel), using ssh becomes a problem, as the TCP connection dies without you getting a RST packet, so normal ssh and TCP timeout mechanisms apply, and it’ll take a few minutes for the host to come back up and issue a TCP RST in response to a keep alive message for that connection.

Now, every once in awhile I do something without giving it enough thought. That’s a kind way of saying I do something really dumb. Imagine, if you will trying to reboot a lot of machines via an “at” job. Further imagine that you decided to change your normal reboot/shutdown -r to the aforementioned sysrq-trigger trick.

Also interesting is that using sysrq-trigger doesn’t allow the at job to be removed from the queue before the machine is restarted, and will just say there until the job is allowed to exit normally.

I think you see what I did. Dumb. Thankfully there are a few seconds available between boot and when the job runs to remove the job from the queue.

Fixing .la files

Wednesday, July 29th, 2009

Yesterday, via the excellent Gentoo Bugzilla, I came across a reference to a tool for Gentoo I hadn’t seen before, one that would have come in handy before. It came up because I was trying to emerge a new amarok, and the build was unable to find libpcreposix.la… the new libpcre doesn’t include that file, but there was still a reference to it in something amarok needed.

The ebuild is called dev-util/lafilefixer, and to run it:

lafilefixer --justfixit

Whoever put this together has now helped me a great deal… I had literally hundreds of .la files that it updated. Plus it fixed amarok and let me complete my emerge update.

Removing selinux on Gentoo

Tuesday, January 20th, 2009

The thing I like most about Gentoo is the extraordinary flexibility that portage allows to make a system the way you want.   Every once in awhile, I find something annoying however (this happens on every operating system, you’re hearing about this one because it was just the most recent).   Today’s case in point:  I found that several things depending on libselinux.so.1 despite my having “-selinux” in my global USE flags, and selinux disabled in the kernel.   One of the packages that depends on that library is coreutils (which includes mv, cp, ln, and many other things you can’t afford to be without)

How did this happen?  Because my /var/lib/portage/world file has a lot of packages in it that don’t really need to be there (they should be pulled in as dependancies of packages I do want, not in the way I have them.)   When I was migrating to this box, instead of just looking at the few hundred packages in world, I grabbed a list of everything I’d compiled, and used that to build my new box.   One result of that is that sys-libs/libselinux got compiled.  (At least, I think that’s how it happened.)   I noticed but didn’t think it was going to be a problem.  However, for some ebuilds (coreutils being the most important to me), if the selinux header files are installed on the box, the configure script detects files like /usr/include/selinux/flask.h and proceeds to include selinux support.   Then you will find that /bin/cp and many other critical utilities are linked against libselinux.so.1, so you can’t remove the sys-libs/libselinux, and since the USE flag has no effect other than changing RDEPEND in the ebuild, you’re stuck.   Catch-22, almost.

Today I finally resolved to fix this, because I got annoyed, and because sys-libs/libselinux is hard-masked after my latest sync (as a result of the sync and having to update my profile with eselect).

The first part, fixing coreutils is pretty easy:

euse -D selinux
mv /usr/include/selinux /usr/include/selinux-save
emerge -av coreutils
emerge -C libselinux
rm -r /usr/include/selinux-save

Unfortunately, after that… you are still stuck.   The coreutils will work, but I was left with a number of packages that revdep-rebuild reports as missing libselinux.so.1… furthermore they all die when trying to link against libselinux:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lselinux

Ah, portage, why are you so cruel to me?    The above example is from gnome-terminal.  Good thing I still use xterm.

Note: the next part could help, but it’s far easier to use lafilefixer these days.

So, what to do?   I’m not kidding, this is basically it, in one line form:

find /usr/lib64 -name '*.la' -print | xargs grep selinux | cut -f1 -d: | sed -e 's#^./##g' | xargs equery b | awk '{print "="$1}' | sort -u | xargs emerge

Built that up a command at a time once I realized that the *.la files still contained references to the libselinux (-lselinux).  Basically, it searches for all the .la files that contain references to selinux.   .la files are just text files that control the linking process, either as part of libtool or the compile-time linker. My command above just uses some rather lame shell tricks to run emerge against all the packages those files belong too.

Even after that was complete, I still had libnss3.so.12 breakage to contend with, but at least revdep-rebuild was working at that point (not breaking on every ebuild it found missing libselinux.so.1).    Frustrating.

I hope this saves someone some damn time, somewhere.

HWCursor?

Sunday, December 14th, 2008

Sometimes I wake up to find that the cursor on my workstation has disappeared.   And it doesn’t seem to be simply invisible, it’s actually not interacting with the desktop in any way.   I can still see the mouse in the list of enumerated USB devices.   Generally the keyboard is still working.

One suggestion I keep running across in my normal google searches is to disable HWCursor in xorg.conf.   Messed around with that for a few days.

After a lot of tests, it turns out that killing xscreensaver fixes the problem…. no need to restart X.

Lately, the problem has stopped happening, so I am considering that an update to x11-misc/xscreensaver may have fixed the problem.

Solaris recovery

Sunday, March 23rd, 2008

Recently, a friend contacted me about recovery of a Solaris box he had made a bit of a mistake on. The problem was, he had moved everything from / into a subdirectory of /, let’s call it /cores for our purposes here. Commands wouldn’t work. He had a running /sbin/sh shell but that was it…. so shell built-ins were all he could do e.g. “echo *”. We fixed it pretty quick, with only minor residual problems, but I thought I’d put down the method here in case it helps someone sometime.

The first problem is that libraries are no longer found along their proper paths…. libc.so is the first problem. That’s easily fixed, however.

# export LD_LIBRARY_PATH=/cores/usr/lib:/cores/lib

That’s the simple part, I’m sure most people know the LD_LIBRARY_PATH tricks to force searching for libraries in other directories. The part that I don’t think people get is… once you’ve done that “ld.so.1″ (the runtime linker) is still in the wrong place. ld.so.1 is responsible for using the LD_* variables in the first place, among the many other wonderful things it does. So running commands from, for example, /cores/usr/bin is still impossible, at least in the standard way.

The second and final trick you need to fix this is to use ld.so.1 to “run” the executable. So, this fails:

# /cores/usr/bin/mv /cores/* /
mv: Cannot find /usr/lib/ld.so.1
Killed

But this allows you to run a command like you’d expect:

/cores/usr/lib/ld.so.1 /cores/usr/bin/mv /cores/* /

Turns out, you can use “ld.so.1″ as an “interpreter” of sorts for executables on some flavors of Unix. At least Solaris and Linux, but I would not be surprised if this works elsewhere, I simply haven’t tested it. On Linux, for example, you would use something like:

/lib/ld-linux.so.2 /bin/ls

To run “ls” in this fashion.

The lesson, boys and girls, is to know your runtime linker, it may save you one day.

LinuxWorld

Sunday, August 20th, 2006

Just got back from Linux World in San Francisco (actually, show ended on Thursday but I hung out until the 19th to visit friends.) Good show, but 6 days is a recent record for me being away from home, and it’s good to be back.

I focused on the HPC and kernel development tracks while I was there. In particular, I have several new things to experiment on that I saw there.

For starters, it became clear that I should probably get an AMD-based system for my OpenSolaris experiments. The demo machine I saw there with OpenSolaris with a Brandz CentOS lx zone on it seemed like a really decent machine, and while I’ve always liked SPARC, maybe it would be good to have both.

For the meantime, I will actually be playing with opensolaris on VMWare. Virtualization has been a pretty big topic lately, and at the conference I talked to SuSE (who’s distributing Xen), XenSource, VMWare (which I’ve been using since it was first available, and am currently using at work and at home), SWSoft (makers of OpenVZ/Virtuozzo) (which I’d managed to never hear about before somehow.)

I’ll have more to say about what I saw there. Next time I may even take pictures.