...making Linux just a little more fun!

<-- prev | next -->

More 2 Cent Tips!

See also: The Answer Gang's Knowledge Base and the LG Search Engine

Just Bad and Wrong... yet cool

Rick Moen (LG Contributing Editor)
Question by ()
Answered By Jimmy O'Regan, Ben Okopnik

"bash is terrifying me again":

Bash pseudo-sockets: Oh my!

followed by: "Dude, you've got a smiley in your prompt."

[Jimmy] Followed by:
:) fishsticks$ false
:( fishsticks$

[Raj] How did he do that. I want something like that too. If anyone knows, do tell.

jimregan@jimmy ~
$ echo $PS1
\[\033]0;\w\007 \033[32m\]\u@\h \[\033[33m\w\033[0m\] $

jimregan@jimmy ~
$ smiley () { if [ $? == 0 ]; then echo ':)';else echo ':(';fi; }

jimregan@jimmy ~
$ PS1="\$(smiley) \h$ "
:) jimmy$ false
:( jimmy$ true
:) jimmy$
Um... I should probably explain that.
$? holds the exit status of the last process: zero for success, non-zero for failure; $PS1 is the primary prompt.
It's \$(smiley) because you want bash to evaluate it every time: $(smiley) would just evaluate it at the time you set the variable, as would putting the contents of the smiley function into PS1
\h is the shorthand for \$(hostname)
[Ben] Darn it, Jimmy, you always beat me. What, you have a fast connection or something? :)
[Jimmy] My connection, in "the cheque is in the mail" speed is 115.2 Kbps, so no.
[Ben] My way was just slightly different:
# More-or-less undocumented Bash-ism - a C-style trinary operator
smiley () { echo -e ":\\$(($??50:51))"; }

BSS and Data Segment

Mike Zheng (mail2mz from gmail.com)
Question by tag (tag from lists.linuxgazette.net)
Answered By Lew Pitcher

Hi All,

For a program, the BSS contains un-initialized variables, Data contains initialized variables. Why do we want to separated these two categories of variables?

[Lew] It's an optimization thing. If each binary contained an image of 'data' that included the uninitialized variables, then the binary would be larger in size than if the image did not include uninitialized variables. If you don't map these variables to your 'load image' (the contents of the binary), but instead, map them to memory at execution time, your binaries can be smaller without a loss of functionality.
The 'typical' (conceptual) memory map (once a program has been loaded into memory) looks something like this...
          |  stack space   |
          |       :        |
          |       v        |
          |                |
          |                |
          |                |
          |       ^        |
          |       :        |
          |   heap space   |
          | .. .. .. .. .. |
          |      BSS       |
          |      DATA      |
          |                |
          |     (CODE)     |
          |                |
(on most implementations, CODE is kept in a separate address space from DATA/BSS/heap/stack)
Heap 'grows' up from the end of BSS towards the highest address Stack 'grows' down from the highest address towards the end of the BSS Heap allocation code keeps a boundary between the top end of the heap and the bottom end of the stack.
The 'loadable' part of the binary is the CODE and DATA part. BSS is how the loader accounts for the room needed to hold the uninitialized data.

Some program clear the BSS by itself, is it necessary?

[Lew] A mere convenience, nothing more.

email issue

J.Bakshi (hizibizi from spymac.com)
Question by tag (tag from lists.linuxgazette.net)
Answered By Jimmy O'Regan, Rick Moen

Hi list,

At first I wish you all a very ******HAPPY NEW YEAR******.

Here is a technical query. Frequently I get some advertisement-emails with EMPTY "form" header & EMPTY "to" header. Even the "detail-header-view" of sylpheed-claws can't show any header information. What is the technology which makes this possible and how can we prevent such emails ?

[Jimmy] The technology that makes this possible is called [drumroll]... SMTP!
To see how it works, use telnet:
$ telnet smtp.o2.ie 25
220 smtp1.o2.ie -- Server ESMTP (Sun ONE Messaging Server)
MAIL FROM: test@example.com
250 2.5.0 Address Ok.
RCPT TO: jimregan@o2.ie
250 2.1.5 jimregan@o2.ie OK.
354 Enter mail, end with a single ".".
Subject: Test

A test
250 2.5.0 Ok.
221 2.3.0 Bye received. Goodbye.
Now, I check my mail. In Mozilla Mail, it shows up as this:
Subject: Test
Date: 11:45

A test
View->Message Source:

See attached mbox.txt

What'll be interesting now will be to see how many mail apps that use mboxes are broken by that } :)
[Rick] J.Bakshi's other question was:
...how can we prevent such emails ?
The answer is [drumroll]... don't use SMTP e-mail.
Or alter your receiving SMTP server's filtering rulesets to reject or drop incoming mails not meeting certain technical requirements, including possession of key header lines. Generally, this requires running your own SMTP host (mail tranfer agent) -- rather like A.J. Liebling's dictum that freedom of the press is limited to those who own one.

Thanks to both Rick Moen and Jimmy O'Regan for their explanation. Jimmy's answer is a bonus as he explained through a good practical example. I have just come to know mixmaster. Though haven't gone through its documentation yet, but aptitude show mixmaster shows that it can prevent the recipient knowing your email address.

[Rick] Er, you might have a use for mixmaster, but the preceding discussion didn't seem to suggest that, and I fear that you might be misunderstanding its intended purpose.
Mixmaster is a client-server software tool for people running MTAs (SMTP machines), and their users, with the client piece allowing the users to issue pseudonymous e-mails, which the mixmaster daemon (server) piece then remails on their behalf.
It would be very strange to send your routine, normal outgoing mail through Mixmaster, specifically because it would greatly obscure the identity of the sender. Further, and more to your original point, it would do nothing to prevent you from also receiving spammer-and-malware generated junkmails at your real e-mail address, such as the garbage mail you cited that had a couple of null interior headers.
As Ben knows, I've long been of the opinion that pretty much all "hide from spammers" strategies (including, well, "preventing the recipient knowing your address") are a dumb idea, really don't work worth a damn, and interfere with legitimate Internet usage to a degree I find unacceptable. At least for those of us who control our own MTAs, there are effective countermeasures, that don't involve self-concealment in any way.

Thanks Rick. You have provided a short as well as good article on Mixmaster & its application ( I may be permitted to say for beginners ). Now I can under stand that as a Workstation owner ( and not an MTA) I don't need Mixmaster. Thanks again.

Running isoLINUX from a REALLY old machine

R.M.Deal (deal from kzoo.edu)
Question by tag (tag from lists.linuxgazette.net)
Answered By Ben Okopnik

I just read the enlightening article Booting Knoppix from a USB Pendrive via Floppy by Ben Okopnik from the #116 issue of the LINUX gazette.

[Ben] Well, thank you for the compliment - and I'm glad you enjoyed the article.

I have a similar problem but with an older machine, a Toshiba Satelite Pro 410 CDT, for which I have an external floppy drive. My problem is that the BIOS does not give me the option of booting from a CD. I can boot from either the hard disk or from the floppy.

[Ben] Have you looked for a BIOS update? I'm not saying that one is definitely available, but if it is, then that would be the simplest solution. Take a look at Toshiba's site and see if there's a download available.

Great suggestion. I shall do that.

Now while I found one article on booting Knoppix from floppies, I wonder if it would be a big deal to modify the script developed by Ben to produce a Knoppix boot, not for a USB pen drive (this portable has NO USB port) but from a floppy. By the way, the Toshiba has installed as an operating system Windows 95 and has only 16 M of RAM so running even KNOPPIX may be a challenge.

[Ben] The problem is that, shortly after I wrote the article, the information in it became outdated: the next release of Knoppix had a minimum size for the kernel/modules/etc. that was much too large to fit on a floppy. However, for your application, there's an easy answer - or at least used to be (I don't have a Knoppix CD handy to check): just fire up your Wind0ws, look at the Knoppix CD, and there should be a batch file there called "mkfloppy.bat". Run it; after it writes a boot floppy for you, simply reboot, leaving both the floppy and the CD in the machine.

Well, almost. I could not get anything under my Windows boot on the portable (a laptop only if you have strong quadriceps) so I booted my LINUX system (suse 9.3) with KNOPPIX and couldn't find a mkfloppy.bat there.

[Ben] That wouldn't have helped anyway, since all the commands in the batch file are DOS programs.

Right, but I could not find the batch file from W95 or suse.

However, in a file knoppix-cheatcodes.txt, the procedure to handle floppy boot only is described, using a LINUX command in KNOPPIX named mkbootfloppy. However, when I boot with KNOPPIX, I can find no such file, only a mkboot. That mkboot command looks right but when I run it with an installed blank floppy, after writing on the floppy drive, I get an error message, in German. Now I am living now in Germany (Weimar) and am taking a course in German but I do not have the resources to fully translate technical German.

[Ben] Whoops... Perhaps you could post that error? My technical German has risen above zero (in part, due to Knoppix :), and there are several German-speaking folks here who could help.

OK. Attached is a script of what happened when I tried to produce the boot floppy. It was interesting making the script in KNOPPIX and transferring it to /mnt/hda2/home/ralph/ after mounting /mnt/hda2. Please note that I am working with Knoppix V3.8.1 (2005/04/0 8). I am not updating right now because I cannot get DSL in Weimar despite having it in Munich and so am having to use ISDN (hence my switch from Fedora to Suse) in which I can get no flat rate! Once DSL is available ("tomorrow"), I'll update my version.

Script wurde gestartet: Mo 21 Nov 2005 10:21:56 CET
root@4[~]# mkboot

Insert a floppy diskette into your boot drive, and press <Return>.

Creating a lilo bootdisk...
cp: Schreiben von ,,/tmp/boot15663/vmlinuz": Auf dem Gerät ist kein Speicherplatz mehr verfügbar
root@4[~]# exit

Script beendet: Mo 21 Nov 2005 10:23:11 CET
[Ben] "No space left on device". At least the version with the umlauts, etc. - "Auf dem Gerät ist kein Speicherplatz mehr verfügbar" - means that. Seems that it's not all that uncommon: searching the Net produces a number of hits. It seems that in some cases, this is produced by bad floppies - but in other cases, it's a result of bad communication with an external floppy drive.
I'd suggest making the floppy from your Wind0ws, just to see if it works. Having two OSes can be handy for resolving "is it hardware or software?" questions.

I plan on working on deciphering that error message but meanwhile I took the floppy that resulted from that action and tried to boot my portable with it. Unfortunately, it only booted into W95; it seems the boot floppy is faulty. You referred to two floppy disks and so did the cheatcodes.txt file but there was no prompt to put in a second floppy. It may be time for me to contact the programmer of KNOPPIX directly to see what the problem is. I'm guessing that the cheatcodes.txt file was written for an earlier version of KNOPPIX and doesn't describe the procedure correctly for the new version. Did I say LINUX was fun??

[Ben] Sure. Part of the fun is the ability to make things happen that aren't the norm. :)

Second, related, question: does anyone recommend a version (old if necessary) of LINUX that would work well as the operating system on the Toshiba?

If these are in some FAQ, I'd appreciate a link.

[Ben] I find that Puppy Linux (http://www.goosee.com/puppy) works well on older machines, although I haven't done a broad range of experimentation with it; it has a nice desktop and a sufficient range of installed applications that I don't find it restrictive. Other folks here may have other suggestions.

Ain't LINUX fun, Ralph

[Ben] [grin] Actually, yeah. I like it, m'self.

Tuppence Tip: URL scraper.

Thomas Adam (thomas from edulinux.homeunix.org)
Question by TAG (tag from lists.linuxgazette.net)

Hello --

This is really an on-going issue from my post regarding urlview and the logging of URLs. I've since decided to take a different approach, and thus far this method works quite nicely. I'm now using 'multi-gnome-terminal' (MGT), 'multitail', 'gmrun', plus a helper script. The overall aim of all of this, was to be able to:

You might wonder what's so hard with this -- the problem is that X11-forwarding on my server takes forever -- it is only a poor P166 with 64MB of RAM, after all. The irssi session resides on the server, so I needed a way of pseudo-opening the URLs as though the request originated on my workstation.

It's unfortunate that I have to use MGT, since it is a memory hog, but needs must. I use it because that has the ability to automatically hotlink URLs -- so that actions can be assigned to it when they're clicked on. Based on this premise, filling in the gaps was easy.

I mount my server's filesystem via 'shfs' -- which I'm now using as a replacement for NFS. I really like it (and a lot less buggy than lufs, and its ilk). This way, I can use multitail to keep an eye on that file. The url logging script that I use from irssi, is "url_log.pl" [1]. All of the logged entries are in the format:

Sat 10 Dec 2005 00:57:08 GMT nick #chan URL

... and I wanted multitail to colourise the output, as it does for other files. That was easy -- just create a new colourscheme for it in /etc/multitail.conf:

cs_re:green:^... .. ... ....
cs_re:magenta:..:..:.. ...
cs_re:red:.* \#fvwm (http|https|ftp)://.*$
cs_re:blue:.* \#bash (http|https|ftp)://.*$
cs_re:cyan:.* \#elinks (http|https|ftp)://.*$
cs_re:yellow:.* \#hug (http|https|ftp)://.*$

So to break this down a bit, remember a typical entry from this file will look like:

Sat 10 Dec 2005 00:57:08 GMT nick #chan http://myfoo.com

Hence: "Sat 10 Dec 2005" will appear in green. "00:57:08 GMT" in magenta, and the rest of the line will appear in whichever colour is matched by the channel the URL was quoted in. So, it looks pretty. :)


... should obviously be changed to match whichever file is going to hold the urls from the url_log,pl script.

The next stage was to determine what happens when I clicked on a URL (I say click -- the shortcut to opening a URL via MGT is 'CTRL + middleclick'). I didn't want everything to be sent to my browswer. This is where the "gmrun" utility comes in useful [2]. For those of you that have never used it, it's a very handy, and customisable tool. One of the features it has, is pre-defining prefixes for certain applications. So for instance, I could enter into gmrun:


... and depending on what I had told gmrun to do with the 'man' prefix, it would open up the bash man page. Neat, eh? So I wanted to have a separate program to open up images, and URLs (it's quite often the case that people post links to screenshots, that I don't want to open in a browser, but would just rather 'see'). I needed to use a helper script to do this, as gmrun accepts no command-line options. The trick I used (in order to make it appear directly in the gmrun window, as though I had typed it), was to append it to gmrun's history file --- if set correctly, gmrun will display the last entered command. No biggie, here it is:

See attached runvia.sh.txt

(Saved as ~/bin/runvia.sh -- and chmod 700 ~/bin/runvia.sh)

So, I'm able to flag to gmrun that if the URL I am clicking on is an image, then tell it so, else, flag it to open up in elinks (this is my primary browser -- although I wanted a specific handler for it.) But in order for that script to process the URL that we clicked on from MGT, we need to tell MGT to perform that action. This is easier than you'd think, and involves editing the file: $HOME/.gnome/Gnome, such that:

default-show=runvia.sh "%s"

Going back to gmrun, we lastly need to tell it what acrtion to take for the 'elinks:' and 'image:' prefixes. That information is stored in /etc/gmrunrc, although I copy this to ~/.gmrunrc, personally, and edit it, so that for the image handler:

URL_image = sh -c 'feh %s'

('feh' has the ability to read images via http).

And for the elinks handler:

URL_elinks = sh -c '${TermExec} elinks -remote "%s" && FvwmCommand "All (*ELinks*) FlipFocus"'

"${TermExec}" is a variable defined further up in the file that looks like this:

Terminal = rxvt
TermExec = ${Terminal} +sb -ls -e

... and that's it. It seems to be working really well.

Since I use FVWM, I wanted to (when I had decided to click on a URL) to focus the webbrowser -- hence the reason why I'm using FvwmCommand. This is optional of course. Although to continue on a similar theme, the style of the "gmrun" dialogue window is set to the following:

Style Gmrun GrabFocus

.. so that when it pops up, I can hit enter, knowing that the Gmrun window will always have the focus, to execute whatever is inside it.

You can see a screenshot[3] of the url-logger in action.

Hope someone finds this useful, or can derive other ideas from it.

[1] http://www.irssi.org/scripts/html/url_log.pl.html

[2] http://www.bazon.net/mishoo/gmrun.epl

[3] http://edulinux.homeunix.org/~n6tadam/fvwm/ss/url-logger.png

Global home movies with cron and Imagemagick

Karsten M. Self (karsten from linuxmafia.com)
Question by tag (tag from lists.linuxgazette.net)

I was just showing this to Heather. I've been trying to figure out what's going on with our strange California weather (tropical rainstorms for the past two weeks) and decided that moving satellite images were more interesting than static ones. Among other discoveries, we've been getting a tropical express mainlined to us over the Pacific for the past several weeks, and the movies make this very apparent.

There are two parts to this tip: first, you want to start grabbing satellite images as they're available, then you want to string them together to view them. Updates are 30 minutes and 3 hours for regional and hemispheric views, respectively.

For the fetch, I use cron to schedule downloads, storing them in a large local area, 'data/weather', with a timestamp added to the filename. Recipie, add to your personal crontab:

See attached crontab.txt

To animate images, say, from the past five days, you can animate 'find' results. To look at west-coast infraread images:

animate -pause 2 -delay 25 $( find . -mtime -5 -name WCIR\*  | sort)

There's some cleanup you may need to do as the download images occasionally get out of order. I've found deleting duplicates seems to fix this pretty readily.

You can also experiment with image enhancements via ImageMagick, such as increasing size and contrast, and reducing noise, in the downloaded images.

This page edited and maintained by the Editors of Linux Gazette
HTML script maintained by Heather Stern of Starshine Technical Services, http://www.starshine.org/


Copyright © 2006, . Released under the Open Publication license unless otherwise noted in the body of the article. Linux Gazette is not produced, sponsored, or endorsed by its prior host, SSC, Inc.

Published in Issue 122 of Linux Gazette, January 2006

<-- prev | next -->