The Netbook Newbie's Guide to Linux
Back to the Bluez
The official Acer 'Bluetooth Patch' presents itself as a script file. The abiding Unix advantage of doing a lot of stuff using plain text shell scripts is that they're transparent - you can read 'em to find out what they think they're doing. All the scripts in
/etc/init.d that start up the various Linux services, for example, work along these lines. But not this 'Bluetooth Patch' script.
Some of it is readable. The opening comment line says that it's been constructed with a utility called
Makeself is a utility devised by Stéphane Peter that makes
.tgz files self-extractable. The
.tgz files are embedded in the Makeself scripts, so although they run like scripts, they're mostly full of binary code that completely conceals their actions.
At least that's how it seemed. I dropped an email to Stéphane suggesting that short of setting up a VMware Linpus sandbox, running the script and then walking through the whole system with
find, I couldn't think of any way of determining the workings of this kind of script that can create executables or other scripts at will, and then run them. So, is
Makeself evil? I asked him.
No, he says. No less so than any other installer. He explained that you can quiz a
Makeself file from the command line about its contents:
[user@localhost bluetooth.sh]$ ./bluetooth.sh --info Identification: install bluetooth patch Target directory: bluetooth Uncompressed size: 9768 KB Compression: gzip Date of packaging: Sat Oct 11 14:37:37 CST 2008 Built with Makeself version 2.1.4 on linux-gnu Build command was: /usr/bin/makeself.sh \ "bluetooth" \ "bluetooth.sh" \ "install bluetooth patch" \ "./install.sh" Script run after extraction: ./install.sh bluetooth will be removed after extraction
Stephane goes on to say: "To examine the contents of the archive itself, and thus get a better idea of what happens, you can use the
--target options to simply extract the files, ie.
sh makeself.run --noexec --target /tmp/archive
You can then just peruse the contents of
/tmp/archive in this example."