June 2007 (#139) Issue of Linux Gazette Online
This month's issue of Linux Gazette is ready and online. This month's highlights include:
- Creating an Unkillable Process
Annoying as unkillable processes can be, there are some circumstances where you might legitimately want to create one. For example, if I run an audit tool, or if I want to write a program that makes sure I go to bed on time even when I'm really stuck into something, then I might not want even the root user to be able to stop it from running.
One approach would be to simply disallow any root access to the system, or at least disallow it at critical times, but that can get very complex if you still need to be able to administrate the system and/or cannot tell with certainty which times will not be critical. So I wanted an approach that did not rely on disallowing root access altogether.
- Installing Perl Modules as a Non-Root User
If you use Perl for anything more complex than the traditional (and boring) generation of "Hello, World", then it's also likely that you're familiar with those wonderful work-saving devices - Perl modules. Furthermore, chances are that you're also familiar with CPAN, the Comprehensive Perl Archive Network, and the easy interface to it that is provided by the CPAN module. That all works just great - assuming that you a) run a sensible modern OS like Linux, and have root access to the machine you're using (or have a friendly and cooperative sysadmin). But what if those assumptions don't hold true? What if, for example, you have a shell account on a machine run by some mega-corporation that doesn't feel like installing the Foo::Bar::Zotz::Blagger-0.01 module in their /usr/lib/perl? I, for one, can't blame them; a system-wide installation could open them up to unknown bugs galore. When your interests and theirs conflict, you lose every time - since they own the system.
So, what can we do if we really, really need that module but can't get it installed on a system-wide basis?
- Writing PostgreSQL Functions in C
PostgreSQL is a powerhouse in its own right, but it is also extensible. You have a lot of options when it comes to extending PostgreSQL. You can use SQL, PL/pgSQL, PL/Tcl, PL/Perl, PL/Python, and more. Each option has its advantages. C has the advantage of speed, of course. Because PostgreSQL itself is written in C, writing C code also allows you to leverage some of PostgreSQL's own internal code. Your C code can also readily leverage any number of other programming libraries. C functions are also a stepping stone toward defining your own new PostgreSQL base types. Ready to get started? Great! Because instead of trying to butter you up with a witty preamble, I'm going to take you straight to work.
- 2-Cent Tips
Recording ALSA PCM output as RAW data
I'd like to write a short tip here. Sometimes, you may want to record the PCM output stream, maybe for further sound analysis and such. How to do it?
You need to modify your ALSA setting e.g in /usr/share/alsa/alsa.conf and add below lines: