old-www/LDP/LG/issue17/issue17.txt

8912 lines
398 KiB
Plaintext

Linux Gazette... making Linux just a little more fun!
Copyright © 1996-97 Specialized Systems Consultants, Inc. linux@ssc.com
_________________________________________________________________
Welcome to Linux Gazette! (tm)
Sponsored by:
InfoMagic
Our sponsors make financial contributions toward the costs of
publishing Linux Gazette. If you would like to become a sponsor of LG,
e-mail us at sponsor@ssc.com.
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
The Mailbag!
Write the Gazette at gazette@ssc.com
Contents:
* Help Wanted -- Article Ideas
* General Mail
_________________________________________________________________
Help Wanted -- Article Ideas
_________________________________________________________________
The last couple of months have been rather light on articles. It's
been helpful to have the new chapters for Linux Installation and
Getting Starting to include. So all you budding authors and Linux
users out there, send me your stuff. Don't depend on our regular
authors to fill the gap. We want to hear about all the neat tips and
tricks you've found, as well as all the neat applications your are
writing or working with. --Editor
_________________________________________________________________
Date: Sat Apr 19 07:29:14 1997
Subject: Searching for Information On Newsgroups
From: Roman, Roman@pussycat.ping.de
Hi folks!
I'm installing a very small news- and email system at my local
university (peolpe there are studying arts, so there's no one to help
me with this). I set up one computer with Linux 2.0.29 which is
permanently connected to the 'internet' via ethernet. Then I want to
connect a second PC which is installed in the hallway via
nullmodem-cable for all the students to write and receive eMail. But
the problem now is, that the provider (another part of the university)
doesn't give us access to the newsgroups, so I want to set up at least
some local newsgroups on this Linux-station.
But I just can't seem to find any documentation explaining how to set
up local newsgroups. smtpd and nntpd are running, but the manpages
won't tell anything about how to set up ng's (forgive me if I'm just
too blind or stupid to find the obvious source of information).
So I don't want to bother you explaining me how to accomplish this
task, but perhaps someone can at least tell me where to find the
desired information.
Best regards, Roman.
_________________________________________________________________
Date: Thu Apr 24 11:44:40 1997
Subject: VGA_16 Server
From: Javier Viscain
Congratulations for the aim and contents of the Gazette. Here is an
issue I've never seen addressed: the VGA_16 server maintains two
monitors (the second monochrome with an Hercules card) but what only
works is the mouse movement, which moves out of left and right to the
other monitor, and console switching. No window on the monochrome gets
focus. Things that moreless appear on the monochrome but don't work:
* Xeyes: both eyes are displayed, but the inner dots appear as
moving diagonal lines out of the eyes.
* Xterm: an useless box appears. Xterm with exec: say "xterm
-display xxx:0.1 -exec top &" appears as an xterm box with the
letters from "top" without any order, in and out from the xterm
box.
* Xload: the "load" and letters appear out of the box.
I think that the hardware absolute addressing is the normal VGA one
(0A0000 to 0AFFFF) and 64K for the Hercules (0B0000 to 0BFFFF), which
is correct. In adition, this server and the mono server are very buggy
when with only the Hercules.
Any easy solution, or is it that this configuration has not been
debugged?
TIA, Javier Vizcaino, Madrid, Spain.
_________________________________________________________________
Date: Sun 6 Apr 1997 11:54:42 -0400
Subject: Initilation Files
From Karl Easterly bigtexan@mindspring.com
As an article Idea, I think an overview of the major boot scripts
would = be helpful. The overview could include an objective view of
the = locations, functions, and nifty "tips and tricks" or such. Also,
links = to how-toos for each script would future simplify the learning
curve for = new users.
Another idea would be to do a chronological installations and =
customization series of articles. Granted, hardware diversity might be
= a problem and could possibly be subverted by starting the series as
= though a working installation of Linux has already been installed.
It = would proceed as a rough idea like this.
1. Booting customization and kernel rebuilding.
2. Xwin customization, to include the type of activities one = would
do in Win95 desktop setup.
3. Getting dialup connectivity to work.
4. Getting network connectivity to work.
These are just stabs at a scheme, the actual order would have to be =
hammered out before the series started, but in general, would be
helpful = to have a step by step issue oriented series of articles
concerning the = setup and customization of any linux installation.
_________________________________________________________________
Date: Sat, 1 Mar 1997 15:39:10 -0500
Subject: Ideas for Beginners
From: stephen jarvis 106363.2642@compuserve.com
Hello
I am 'the' absolute beginner.I have had a copy of Linux Slackware and
a copy of "Linux configuration and installation " by P Volkerding et
al for about two weeks.Prior to this I had dabbled at dos and
wondered(?) at windows.But when I heard about Linux in a magazine it
occured to me that it might be fun to have a go.And indeed it has
been.
The only problem I have had is with regard to the man pages. In
general they are technical to a degree that while appropriate for
those who can follow the argument from end to end,are pretty
debilitating for the newbie like me.Indeed I don't always get to the
end.
Perseverence will no doubt pay off and I have expanded my collection
of books already,to take advantage of the possibility of learning
something about programming on Linux.But then I have always had the
kind of curiousity that,while not enough to kill the cat,is enough to
keep me in the book shop.The point I think is that the man pages
themselves are a bit of a barrier to the wider useage of Linux.
No doubt others would say the detail and technical clout of this
source of information is needed for those who want to make serious use
of Linux.But not everyone who wants to escape from the soporific
influence of Microsoft is that demanding or that knowledgeable.I think
someone needs to pitch things at the introductory level.In the realms
of 'this will get it going'and 'try this out'.Merely a more chatty
approach would help remove the shiney armour of incomprehensibilty
some pages deploy.
If this sounds a little unfair to the many people who have compiled
,man pages it is most definitley not meant to be.There is a need for
accurate and complete information especially as Linux is a cooperative
venture and everyone needs to have a common root of information.The
question is how can the benefits of Linux be made widely known to
people outside the existing network.What will grab their attention and
take the gleam off Windows 95? Something more open to a wider audience
perhaps.
This does not have to be completely bland and overly simple just in
the range of every day usage.An approach that does not assume that
everyone reading knows the meaning of every term on the page.People
need an introduction to the language of Linux in the way that you
might learn French or English.Start with very basic things and build
up in stages.Don't launch straight into 'How To Compile Your Kernal
'.Ok thats important ,but I am sure most people still think a kernal
is what you find inside a nut.I hope you are getting the general idea.
What us new people need is probably a collection of basic texts each
about the length of a several page magazine article.Hopefully they
would cover the things that a hardend Linux user would be embarrassed
to ask about.'The kernal for beginners'.'Great now I can ask what it
really is'.If this undertaking was started then I am sure that the end
product of a few months could be published as a small book.Maybe you
could publish it.I think there is a potential market.Many magazines
recently covered the subject of Linux.That's how I got the bug.
Now it's true there are books already that cover Linux but there are
not many on line man pages or magazine articles that give the beginner
the feeling that they can actually get their system up and running
easily.So if you really want to publish articles for absolute
beginners bear in mind the kind of language that is used.
Regards Steve Jarvis
ps.. here's some ideas ' What is the kernal','The basic commands to
get around bash','What are disk partitions and why bother',' To Umsdos
or not. That's the question','Midnight Commander-an
introduction','This is the easiest editor anybody ever used(insert
your choice)','A glossary of general terms you'll find on a man
page','These books are a good read(assorted titles)'.'How to get
around an info text with less than 20 pages of instructions','Why the
idea of a free and open o/s matters','X is not a horror film'.
Maybe these are a bit daft but they'd get my attention.They are the
sort of things I'd like to know about.
_________________________________________________________________
Date: 04 Apr 97 19:02:21 EST
Subject: Technical Support
From: Dani Fricker 101550.3160@CompuServe.COM
first i wanna say thanx for the lj! great work and fun not even for
linuxers! i need your help. for some reasons i have to identify a user
on my webserver by his/her ip-address. fact is that users logon comes
from different physical machines. that means that i have to assign
something like a virtual ip-address to a users log name. something
like a reversal masquerading. my ip-gateway connects my inner lan over
two token ring network cards (sorry, not my idea!) with the internet
(lan tr0 tr1 internet). the masquerading forward roule of ipfwadm
gives me the possibility to indicate a source and a destination
address. do you see a possibility for an 'address assignment' between
the two interfaces? if you do please let me know.
dani fricker
programmer
zurich-switzerland
_________________________________________________________________
Date: Mon, 07 Apr 1997 03:01:17 -0500
Subject:HELP with Man Pages From: "Mauricio Naranjo N."
davasgut@col2.telecom.com.co
Well, I have installed the linux toolkit / october 1996 and I have not
been able to install the man pages for commonly used commands like
cat, ls, and so on; instead I have installed the man pages for
packages like, fvwm, midnight commander, ....
So, I installed man2.tgz, man3.tgz, manpgs.tgz, but I still have not
been able to get installed the whole support for man; Can you tell me
please, what's the matter???? Any kind of help would be great
appreciated, and excuses for ignorance but I am new at this OS
(finally I found a true one)
Mao
_________________________________________________________________
Date: Mon, 7 Apr 1997 15:43:21 -0400 (EDT)
Subject: Port Mouse
From: Jose, notDefined@novagate.com
Hi, Maybe you can help me with this. (I hope) I switched motherboards,
from a zeos pentium 90 that used a serial mouse to a asus p/i-p55tvp4
motherboard that uses a port mouse. And now I can't get x-windows to
run. Any ideas?
Jose
_________________________________________________________________
General Mail
_________________________________________________________________
Date: Tue, 01 Apr 1997 04:26:04 -0600
Subject: Linux
From: Tred Riggs tred@oak.sfasu.edu
I am a college student attending Stephen F. Austin State University. I
work in a Geographic Information Systems Laboratory (GIS) and we have
been just using AIX machines. Howerver we do have a full blown linux
pc and it is great. {Since then I stripped DOS off my PC and made me a
full blown linux box, which works wonderful. We were considering to
upgrade to all linux PC's in out lab because they were cheaper and
faster than the AIX boxes, but we ran into a problem. The Software we
need to run to make our GIS maps is not supported by ESRI, so we gave
them a call. This is what they told us:
"Linux will not be a supported platform. They told me that product
ports are user driven and there is not enough users wanting this OS."
I could not figure out how they could even say this when all you have
to do is get on the web and see millions of people using linux. So
here is what I want to happen. I need linux users to E-mail ESRI at
buspartners@esri.com and tell them that you use linux and that there
are many more people using linux too. ESRI needs to get there head out
of Microsofts world and see what is going on in the real world.
Thanks for your time Linux Gazette,
Tred Riggs
_________________________________________________________________
Date: Thu, 3 Apr 97 22:40:23 BST
Subject:http://www.ssc.com/lg/index.html
From: Duncan Simpson dps@duncan.telstar.net
Given Micro$oft's tag line of "Yet another Web server powered by NT"
maybe we should collect a list of people doing this sort of stuff on
Linux. I can add 3 items myself http://mail.telstar.net is powered by
Linux The telstar mail service described there is also powered by the
same linux box Astra has switch from NT to Linux for its radius
server. (NT was just too expensive and no better than Linux
(Un*x)---the price diffrernece was *1000s* of pounds, each about 1.5 $
US). Both astra (and telstar.net) DNS servers are linux.
If the stats show that Linux is more popular for comercial web servers
than NT, this would be something nice to be able to point out...
Duncan (-:
P.S. Any bets when Truetype fonts can be used for proper typesetiing.
At present they lack litagures (fl and various other items that are
tradionally rendered as single characters)?
P.P.S. The use of the present tense (switch) is apt because the change
is happening now. (Despite a bug that is now not being exercised due
to an attempt to eradicate it mail.telstar.net is more reliable than
any of various NT machines at handling mail).
_________________________________________________________________
Date: Fri, 04 Apr 1997 15:57:12 -0600
Subject: Re: How to ftp Back Home
From: James Stansell james.stansell@wcom.com
The ifconfig command works, and may be the most authoritative on the
subject (except I believe the PPP log also contains your current IP),
but the ifconfig command returns a ton more information than I want.
So I ask my machine at work who I am:
who am i
stansell ttyp6 Apr 4 15:51 (206.125.79.118)
I've inserted your example IP address where my actual address showed
up. If the DNS at work does happen to know a name for my address, then
it shows up instead of the IP.
--james
_________________________________________________________________
Date: Thu, 10 Apr 1997 17:08:38 -0500
Subject: Re:GV article
From: Larry Ayers ayers@vax2.rainis.net
To: Geoffrey Leach geoffrey@iname.com
Sorry the URL didn't work for you; I recently got an email message
from Helmut Geyer, the maintainer of the Debian GV version and he
included a URL for a new GV home-page:
http://wwwthep.physik.uni-mainz.de/~plass/gv/
The Debian version is in the /text section of the /i386 binary
directory of any Debian mirror. Shouldn't be too hard to find.
Good luck!
Larry Ayers
_________________________________________________________________
Published in Linux Gazette Issue 17, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Next
This page written and maintained by the Assistant Editor of Linux
Gazette, gazette@ssc.com
Copyright © 1997 Specialized Systems Consultants, Inc.
"Linux Gazette...making Linux just a little more fun! "
_________________________________________________________________
More 2¢ Tips!
Send Linux Tips and Tricks to gazette@ssc.com
_________________________________________________________________
Contents:
* X Limitation to 8 Bit Color
* Screen Blanking Under X
* Doubleclick Internet User Profiles
* How to Mount/Unmount For Users
* File Transfer With the z Protocol
Using ftp Commands in Shellscript
ASCII-Artwork Translator
Including Graphics in Linuxdoc SGML
X Configuration Issues
Multiple X Displays
Color Depths with X
Figuring Out the Boot Process
ftping Home
_____________________________________________________________
X Limitation to 8 Bit Color
From: Gary Masters gmasters@devcg.denver.co.us
I read your question in Linux Gazette regarding an X limitation to
8 bit color when the system has more than 14 megs of RAM. Where
did you find that information? I ask because my system has 24 megs
of RAM, and I run 16 bit color all the time. One difference
between our systems is that I am using a Diamond Stealth 64 video
card.
The place I tell X to run in 16 bit mode is in the file
/usr/X11R6/bin/startx. There is a line in this file that begins
with serverargs. I get 16 bit mode by giving "-bpp 16" as an
argument in this line (e.g. serverargs="-bpp 16").
One problem I did have was that the OpenLook Window Manager (olwm)
did not like 16 bpp mode. I solved this by switching to the
OpenLook Virtual Window Manager (olvwm)[1]. I also had success
using the Tab and FV Window Managers (twm & fvwm) in 16 bpp mode.
Coming from a SunOS background, I'm used to OpenLook.
Gary Masters
_____________________________________________________________
Screen Blanking Under X
From: Gary Masters gmasters@devcg.denver.co.us
I read your question in the Linux Gazette regarding unwanted
screen blanking under X after upgrading to a newer distribution of
Linux. I had the same frustration. Apparently the X servers
included in the Xfree86 version distributed with current Linux
distributions has screen blanking compiled as a default behavior.
This behavior can be controlled with the -s option to the server.
Look in the startx script for a line that begins with serverargs
and add "-s 0". This will disable the X screen blank.
Gary Masters
_____________________________________________________________
Doubleclick Internet User Profiles
From: Kragen Javier Sittler kragen@pobox.com
Check out the description of what doubleclick.net does at
http://www.doubleclick.net/frames/adinfo/dartset.htm
Then decide whether you want to be added to their database of
Internet user profiles. If not, you can use the script below; I
run it in my
/etc/rc.d/rc.inet1
. It prevents any DoubleClick banners from being displayed, prevents
any cookies from being set, and prevents DoubleClick from
collecting any data on you.
It also does the same thing with linkexchange.com, because I find
their constant banners and requests for cookies annoying. If you'd
prefer, you can take out the linkexchange lines.
However, this will also keep you from receiving *any* information
from doubleclick or linkexchange directly... so you can't visit
their web sites either.
On my machine, I put the script in
/etc/rc.d/rc.doubleclick
and run it from
/etc/rc.d/rc.inet1
at boot time, so I'm always protected from DoubleClick.
# Script begins below:
#!/bin/sh
# By Kragen Sitaker, 21 April 1997.
# Prevent any packets from reaching doubleclick.net
/sbin/route add -net 199.95.207.0 netmask 255.255.255.0 lo
/sbin/route add -net 199.95.208.0 netmask 255.255.255.0 lo
# And ad.linkexchange.com too!
/sbin/route add -net 204.71.189.0 netmask 255.255.255.0 lo
_____________________________________________________________
How to Mount/Unmount For Users
From: Kidong Lee kidong@shinbiro.com
When I mount/umount file, I have to login as root. It's not
convenient for me & other users. but, I found the solution that
user who is not root can do mount/umount in mount man page.
Take a look at /etc/fstab.
#
/dev/hdb /cdrom iso9660 ro,user 0 0
Note "user" in options field. In options field, if you add "user",
users can do mount/umount.
_____________________________________________________________
File Transfer With the z Protocol
From: Gregor Gerstmann, gerstman@tfh-berlin.de
Regarding Linux Gazette issue16, April 1997, I have some remarks
regarding the article on file transfer with the z protocol: 'I
type sz things go along fine, until about 40K then I get a couple
of different error messages....' We have an internal modem with a
transfer rate of 2880 cps on the telephone line. My son has an
account at a Berlin university with a limited capacity of 5MB. We
found the same error but not limited to a special file size!
During the night hours, between 1 and 5h local time, when
telephone costs are lowest, we sometimes transfered files up to
100KB without errors! To avoid any errors at all, I limited the
packages to 20 * 1024 = 20480 bytes, if a CRC occurs, transfer
begins once more but with- out timeout error, because the parcels
are small. I use two proce- dures: the first, Chop, generates
another procedure that chops the file to be transfered with the
help of dd into packages and regu- lates the transfer and removing
of transfered packages. At home we concatenate the packages again
with cat ... ... > ... and everything is ok. The last step could
be done by a procedure too. Of course, it is rather simple
software, but it works until we will use ISDN.
first parameter - number of bytes
second - begin of output names, e.g. p1
third - name of file to be chopped
#!/bin/bash
echo "* Begin of procedure Chop *"
date
# rm alte Datei
if test -e /usr/TFH/EXAMPLE
then rm /usr/TFH/EXAMPLE
fi
# Test auf Parameter
if test $# -lt 3
then echo "Incorrect number of parameters !
Please repeat procedure call !"
echo "* End of procedure Chop (error) *"
exit 1
else echo "Call was ok"
fi
#
BY=$1
ANZZ=$[(($BY / 20480) + 1)]
quantity=$ANZZ
i=1
recs=0
while test "$i" -lt "$quantity"
do
echo dd if=$3 of=$2_$i bs=1024 skip=$recs count=20 >> /usr/TFH/EXAMPLE
echo sz $2_$i >> /usr/TFH/EXAMPLE
echo rm $2_$i >> /usr/TFH/EXAMPLE
i="`expr $i + 1`"
recs="`expr $recs + 20`"
done
echo dd if=$3 of=$2_$i bs=1024 skip=$recs >> /usr/TFH/EXAMPLE
echo sz $2_$i >> /usr/TFH/EXAMPLE
echo rm $2_$i >> /usr/TFH/EXAMPLE
#
echo "* End of procedure Chop (ok) *"
#
_____________________________________________________________
Using ftp Commands in Shellscript
From: Walter Harms, Walter.Harms@Informatik.Uni-Oldenburg.DE
Using FTP as a shell-command with ftplib
Working on several different networks means that you always need
to copy your data from net to net. Most ppl use rcp but like most
SysOps I found this to be a terrible security hole. So as I
started this job my first business was to rewrite several scripts
that were using rsh,rcp etc. I replaced them with an ftp based
script ftp - &ltinput> out 2> out.err. It's easy to see that this
was not a good idea because ftp was not intended as shell-commando
like cp,mv and the other guys. So I was happy to find the ftplib
on a linux-CD. It's a nice lib that I used to build cmds like
ftpmv, ftpcp, ftprm.. This made my scripts much slimmer and
simpler. I have some terrible copy-scripts running but no problems
copying on different systems like Ultrix or AIX.
Example using ftpget (from the ftplib Author Thomas Pfau)
ftpget sunsite.unc.edu -r /pub/Linux ls-lR.gz
This command reads the file
/pub/Linux/ls-lR.gz from sunsite.unc.edu
Likewise there are other commands with the lib: ftpdir ,ftpsend, ftprm
Who needs ftplib?
Everybody tired of typing ftp... every evening to get the latest
patches or whatever. Everyone who is regularly copying with ftp
the same Datafiles.
Why use ftplib?
Of course you can add it to you own application but more
experienced users don't have to use these r-commands anymore. An
ftpd is available for the majority of systems so it is easier to
access more of them.
Any drawbacks?
Of course, for any ftp session you need a user/paswdr. I copy into
public area using anonymous/email@ others will need to surly a
password at login, what is not very useful for regular jobs or you
have to use some kind of public login but still I think it's
easier and better to use than the r-cmds.
-- walter
_____________________________________________________________
ACSII-Artwork Translator
Here is something interesting which you might consider for
publication. It is a short program written in LEX and C, which
takes ASCII-Artwork and translates it into HTML 3.0 compliant
table data. It is a pretty interesting idea, and as far as I know,
I'm the first person to try something like this, or automate the
process. The translator (a2t) has a few options:
+ -x : reverse the output This is because some ASCII-Artwork is
meant to be seen as black on white and not white on black.
+ -r value
+ -g value
+ -b value Sets constant r,g, and or b, rgb values, so that the
resulting "grayscale" output can be altered to shades of a
color.
+ -w value Sets the width of the resulting table.
The program was completed just today, so it is very new. I've
released it under the GNU license agreement.
For some examples of the output generated by a2t, see:
http://wilkes.edu/~pkeane
I think you'll find the results to be pretty amusing, and slightly
more interesting than the usual bag of HTML table-tricks.
Enjoy-- Patrick
%{
/* Ascii-to-Table version 2.0
**
** A conversion utility to convert gifscii type ASCII-Artwork into
** grayscale HTML 3.0 compliant html documents using tables.
**
** Copyright(C) 1997 by Patrick J.M. Keane -- All rights reserved.
** (pkeane@wilkes.edu)
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
*/
#include
#include
#include
char shade1[4], shade2[4], shade3[4] ;
int reverse=0, widthset=0, width=0 ;
int shade1set=0, shade2set=0, shade3set=0 ;
void maketd(const char *value) {
printf(" ",
((shade1set==0) ? value : shade1),
((shade2set==0) ? value : shade2),
((shade3set==0) ? value : shade3)) ;
printf(" ") ;
}
main(int argc, char *argv[]) {
int c;
extern int optind;
extern char *optarg;
extern int opterr;
while ((c = getopt(argc, argv, "w:r:g:b:xh")) != EOF) {
switch (c) {
case 'x':
reverse = 1 ;
break;
case 'h':
fprintf(stderr, "Usage:\n\tcat asciifile | a2t [-h] [-x] [-[rgb] value] [
-w width] > document.html\n\n") ;
fprintf(stderr, "\t-h : This help screen\n") ;
fprintf(stderr, "\t-x : Reverse output\n") ;
fprintf(stderr, "\t-r value : Constant R GB value\n") ;
fprintf(stderr, "\t-g value : Constant G RB value\n") ;
fprintf(stderr, "\t-b value : Constant B RG<B> value\n") ;
fprintf(stderr, "\t-w value : Set width of output table\n") ;
exit(0) ;
break;
case 'r':
shade1set = 1 ;
strcpy(shade1, optarg) ;
break ;
case 'g':
shade2set = 1 ;
strcpy(shade2, optarg) ;
break ;
case 'b':
shade3set = 1 ;
strcpy(shade3, optarg) ;
break ;
case 'w':
widthset = 1 ;
width = atoi(optarg) ;
break ;
default:
fprintf(stderr, "Bad option: %c\n", c);
exit(1) ;
break;
}
}
printf ("\n") ;
printf ("\n") ;
printf ("\n") ;
printf ("\n") ;
printf ("
\n") ; printf ("", width) ; else printf(">") ; printf ("
\n") ; yylex() ; printf("
\n") ;
}
%}
%option yylineno
ws [ ]*
%%
"$"|"@" { (reverse) ? maketd("00") : maketd("ff") ; }
"W"|"M" { (reverse) ? maketd("20") : maketd("f7") ; }
"B"|"%"|"8"|"&" { (reverse) ? maketd("20") : maketd("f0") ; }
"#"|"*"|"9"|"6"|"H" { (reverse) ? maketd("20") : maketd("e7") ; }
"o"|"h"|"k" { (reverse) ? maketd("27") : maketd("e0") ; }
"4"|"5"|"S"|"K" { (reverse) ? maketd("30") : maketd("d7") ; }
"a"|"e"|"s" { (reverse) ? maketd("37") : maketd("d0") ; }
"b"|"d"|"p"|"q" { (reverse) ? maketd("40") : maketd("c7") ; }
"w"|"m"|"3" { (reverse) ? maketd("47") : maketd("b7") ; }
"z"|"O"|"0"|"Q" { (reverse) ? maketd("50") : maketd("b0") ; }
"L"|"G"|"D"|"C"|"2" { (reverse) ? maketd("57") : maketd("a7") ; }
"R"|"E"|"U"|"X" { (reverse) ? maketd("60") : maketd("a0") ; }
"N"|"A"|"Y"|"P" { (reverse) ? maketd("67") : maketd("97") ; }
"F"|"J"|"Z"|"z"|"c" { (reverse) ? maketd("70") : maketd("90") ; }
"g"|"y" { (reverse) ? maketd("77") : maketd("85") ; }
"x"|"v"|"u"|"n" { (reverse) ? maketd("80") : maketd("80") ; }
"="|"I"|"r"|"j"|"T" { (reverse) ? maketd("87") : maketd("77") ; }
"f"|"t" { (reverse) ? maketd("90") : maketd("70") ; }
"|"|"?"|"V"|"/"|"\\"|"7" { (reverse) ? maketd("97") : maketd("67") ; }
"["|"]"|"{"|"}" { (reverse) ? maketd("a0") : maketd("60") ; }
""|"("|")" { (reverse) ? maketd("c5") : maketd("50") ; }
"i"|"l"|"1"|"|"|"!" { (reverse) ? maketd("d0") : maketd("40") ; }
":"|";"|"+"|"~" { (reverse) ? maketd("e0") : maketd("30") ; }
"^"|"\"" { (reverse) ? maketd("e7") : maketd("27") ; }
"-"|"_" { (reverse) ? maketd("ff") : maketd("20") ; }
"'"|"`" { (reverse) ? maketd("ff") : maketd("20") ; }
"."|"," { (reverse) ? maketd("ff") : maketd("20") ; }
{ws}"\n" { printf(" ") ;
printf("\n") ; }
" " { maketd("00") ; }
. { fprintf(stderr, "Warning: Character %s is not recognized.\n",
yytext) ;
fprintf(stderr, "Choosing a medium color!\n") ;
maketd("97") ; }
%%
void yyerror(char *msg) {
fprintf(stderr, "^GError :\tLine %d: %s at '%s'\n", yylineno, msg, yytext) ;
}
int yywrap() {
return (1);
}
__________________________________________________________________________
Including Graphics in Linuxdoc SGML
From: Martin Michlmayrtbm@cyrius.com
Date: Thu, Apr 17, 1997 at 07:48:19PM +0200
You can already include PostScript images in Linuxdoc-SGML which
will get included in TeX output (and consequently in DVI and
PostScript). Linuxdoc-SGML doesn't support images for HTML,
however.
An example:
CAPTION: Decade of the brain
You can make references to the figure with
PostScript is already supported and the developer version of SGML-Tools
(the successor of Linuxdoc-SGML) now supports HTML as well. You
can specify a PostScript and a GIF file and depending on the output
(TeX or HTML) the respective image will be included.
__________________________________________________________________________
X Configuration Issues
Date: Wed Apr 2 12:15:54 1997
From: Michael J. Hammel, mjhammel@emass.com
If you get sufficiently tweaked by the X monitor config problems,
I
suggest X Inside's AcceleratedX package. Its much simpler to configure
than the XFree package for both cards and monitors. I used to work
for them, but haven't in over a year. I still use their package because
its the easiest to handle all the video card/monitor details.
BTW, the monitor setup is menu based. If your monitor is not listed
you can just use one of the multisync if single frequency generic
configs. No dot clocks, but you do need to no your monitors frequency
capabilities. These should be listed in the monitors cdocumetntation.
The package is a commercial distribution and runs about $100 (last time
I checked). They change their name to Xi Graphics recently and the domain
for xinside.com might not be working right now. Try http://www.xig.com.
--
Michael J. Hammel
__________________________________________________________________________
Multiple X Displays
Date: Wed Apr 2 13:38:08 1997
From: Michael J. Hammel mjhammel@emass.com
Setting up the software is probably fairly straight forward. I've
never used MetroX (I use AcceleratedX instead), however. Basically
you'll have two choices:
1. Multiple displays (host:0.0 and host:1.0)
2. Multiple screens of the same display (host:0.0 and host:0.1)
The second choice is the one you need if you want to move the mouse
between the two monitors - like when the mouse goes past the right edge
of the first monitor it shows up on the left edge of the second monitor.
You'll have to check with Metro to find out which of these options is
supported and how to configure for it.
The hardware problem is tougher. The problem lies in the fact that PC's
were not originally designed with the idea that multiple display
adapters would be installed. The BIOS looks for an adapter at certain
locations (IRQ, I/O address) and, unless the second card is configurable
to some other address, the system will find multiple cards. What
happens next is in-determinant. Some systems won't boot. Some do but
don't display to either monitor correctly.
The trick is to find video adapters that were designed to be used
in conjunction with other video adapters. Many are not. The easiest
way for you to find out is check with Metro about what combinations of
video adapters they know work together. Chances are good the ones you
have don't. I know X Inside had a list of cards they knew work
together. You could search their web site (http://www.xinside.com or
http://www.xig.com) and see if that info is still there.
Hope this helps.
--
Michael J. Hammel
__________________________________________________________________________
Color Depths with X
Date: Wed Apr 2 13:27:40 1997
From: Michael J. Hammel mjhammel@emass.com
After fiddling with the xf86config file in a concerted effort to coax X
into displaying 16 bit color, I was dismayed to learn that with my
current hardware (16 megs RAM and a Cirrus Logic GL-5426) 16 bit color
is *impossible*...not because of any hardware in-capability, but because
of a certain limitation of X Windows itself...a problem with linear
addressing. Seems that to have 16 bit color under X, one must have
linear addressing enabled, which only works if the system has *no more
than 14 megs RAM*.
Horse hockeys. 16 bit color is a limitation of the video subsystem and
has nothing to do with the memory of your system. Linear addressing in
the XFree86 X servers might be tied to system memory amounts, but that
would be a limitation in the XFree86 server, not in X. X defines
"method without policy", so such limitations just aren't built into X.
A couple of things you should note: The number of colors available
under 16bit displays is actually *less* than the number available to
8bit displays. Why this is true has to do with the way 16bit display
hardware works. The actual color palette for 8 bit displays can have
millions of colors - it can only display 256 colors at a time, however.
Frugal use of colormaps can allow you to have nearly exactly the right
colors for any given application. 16 bit displays only have a palette
of 65k (roughly) colors. Once those are used up, you're outta luck.
I'm not completely clear on what makes this difference such a problem
but if you visit the Gimp User's mailing list (see the Linux Graphics
mini-howto: http://www.csn.net/~mjhammel/linux/lgh.html) and ask this
question you'll get similar replies. Its been discussed quite at length
on the developers list, and most of them read the User's list.
BTW, if you want to see if Linear Addressing is the real problem, try
the X Inside AcceleratedX demo server and see if it works in 16 bit
color for you. Generally, your video card needs at least 1M of on board
RAM (not system memory - this is video memory on the video card) to
run in 16Bit mode, but then you'll probably only be able to run in
640x480 or (at most) 800x600 resolution. To run at higher resolutions
you'll need more video memory.
Hope this helps.
--
Michael J. Hammel
__________________________________________________________________________
Figuring Out the Boot Process
Date: Fri, 04 Apr 1997 13:20:40 -0600
From: David Ishee dmi1@ra.MsState.Edu
One of the things that is confusing about Linux at first is which files
Linux uses to load programs and get the system started at bootup. Once
you figure out which programs are run during the boot process, which
order are they run? Here is an easy solution.
On my Red Hat 4.0 system, the /etc/rc.d directory tree is where
everything happens. There are a lot of shell scripts in this set of
directories that are run when the system boots. To give yourself a
little more info, add some echo statements to the files. For example:
edit /etc/rc.d/rc.sysinit and add the following lines at the beginning
echo " "
echo "**** Running /etc/rc.d/rc.sysinit ****
echo " "
Now when the system is booting you can see exactly when rc.sysinit is
run, and what programs it launches. Repeat the above process for all the
scripts you find.
Now if the system hangs or gives an error during bootup you have a
better idea of where to look. If you don't have any problems while
booting then at least you have more info about what Linux is doing.
David
__________________________________________________________________________
ftping Home
Date: Thu, 3 Apr 1997 20:38:02 +0300 (EET DST)
From: Kaj J. Niemi, kajtzu@4u.net
I read your article about ftping home with dynamic IPs.. Here's
something you might need if you get tired of looking at the screen every
time you want to find out the IP.
ADDRESS=`/sbin/ifconfig | awk 'BEGIN { pppok = 0}
/ppp.*/ { pppok = 1; next }
{if (pppok == 1 ) {pppok = 0; print} }'\
| awk -F: '{print $2 }'| awk '{print $1 }'`
Just replace the ppp.* with whatever you want (if you have multiple
ppps running). The easiest thing would to be write a script called ftphome
(or similar) and make it first assign the address and then doing ftp or
ncftp $ADDRESS. The snippet is originally from a local firewall, at the part
where it needs to know what its' own address is. :-)
A friend of mine at
mstr@ntc.nokia.com wrote this for me.
--
Kaj J. Niemi
__________________________________________________________________________
Published in Linux Gazette Issue 17, May 1997
__________________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back
Next
__________________________________________________________________________
This page maintained by the Assistant Editor of Linux Gazette,
gazette@ssc.com
Copyright © 1997 Specialized Systems Consultants, Inc.
"Linux Gazette...making Linux just a little more fun!"
__________________________________________________________________________
News Bytes
Contents:
* News in General
* Software Announcements
__________________________________________________________________________
News in General
__________________________________________________________________________
GLUE Announcement
Every GLUE User Group To Receive Free Copy of BRU 2000 Backup And Restore
Utility
Linux Expo, Research Triangle Park, NC (April 4, 1997) -
Enhanced Software Technologies, Inc. announced today that Groups of Linux
Users Everywhere (GLUE) will provide a free copy of the new BRU 2000 backup
and restore utility to GLUE user groups.
Enhanced Software Technologies, Inc. has joined Linux International as a
corporate member and is also offering members of GLUE user groups a
10-percent discount on purchases of BRU 2000.
Enhanced Software Technologies, Inc., a privately held corporation based in
Tempe, Arizona, is a leading provider of high-reliability systems
Additional information on BRU Giveaway.
GLUE is a project of SSC
publishers of Linux Journal. GLUE was implemented
to provide a world-wide member group for Linux User Groups. GLUE member
groups receive a subscription, materials for promoting and developing
their group, a way of advertising their group in a global setting, list-serv
and Linux Group location services, and discounts and samples from SSC and
Linux Journal. Other vendors may also offer special services or
discounts to GLUE member groups.
Additional information on Glue.
__________________________________________________________________________
SOLID desktop for Linux offered free of charge to developers
Solid Information Technology Ltd today announced a campaign
targeted at the community of Linux developers. Between March
and September 1997 Linux enthusiasts will be presented with
a free personal version of the robust SQL database engine
SOLID Server.
SOLID Server is a unique product by Solid Information Technology
Ltd, a privately held innovator of database
technologies.
To download your own copy of SOLID Desktop for Linux, access
http://www.solidtech.com/linuxfre.htm to find a site near you.
Additional Information:
Solid Information Technology Ltd, http://www.solidtech.com.
__________________________________________________________________________
The Elsop Webmaster Resource Center
The Elsop Webmaster Resource Center
http:www.elsop.com/wrc/
Contains links and comprehensive
coverage of computer industry trade publications,
website development, HTML, servers, validators,
link checkers, and software for webmasters.
Major sections include:
* Computer Industry Publications
* Electronic Commerce Solutions
* High Technology Trade Shows & Conferences
* History of the Technology
* Internet, Cyberspace and Computer Law
* Internet Trade Associations and Societies
* Link Validators & Site Mappers
* Reference Room of Outstanding Resources for Webmasters
* Systems and Software Sources on the Web
* Website Development Services
Produced and Sponsored by the
Electronic Software Publishing Corporation
http://www.elsop.com/linkscan
__________________________________________________________________________
Linux Jokes Wanted
Do you consider yourself witty? Do you want to show your fabulous sense of
humor to the world? NOW IS YOUR CHANCE!
For several years now Linux Journal has been considering adding a monthly carto
on to
our magazine. We know who we could have "draw" the cartoons, but we really
don't have any idea what the jokes should be.
Please contribute any ideas you have for "Linux related" cartoons. The type
of cartoon we are imagining are one panel cartoons akin to what they have in
magazines like the New Yorker.
So send us your
favorite Linux jokes (one liners are best), and we will turn them into
cartoons.
__________________________________________________________________________
Too Good Not To Print
For a good time, check out this website!
http://www.lightlink.com/fors/press/net-history.txt
__________________________________________________________________________
New User's Group in Knoxville
There is a new user's group for Linux in Knoxvill, TN
They are called the Knoxville's Linux Users Base. Check out the web page
at
http://klub.ml.org
__________________________________________________________________________
AfterStep Themes Page
Take a look at the AfterStep Themes
page! Trae Mc Combs has been devoting some time to creating themes for
http://www.mindspring.com/~xwindow/as.html
or
http://www.mindspring.com/~xwindow
__________________________________________________________________________
Version 7 of Corel's WordPerfect for Linux
Software Development Corporation http://www.sdcorp.com is working on
releasing version 7 of Corel's WordPerfect for Linux. It's expected to
ship sometime in April, with beta testing currently taking place.
Their webpages seem to warn that only beta testers have access to the
software, but following the links takes you to the download area where
they're freely available.
__________________________________________________________________________
Computer Comparison
Here is a URL that has some interesting data:
http://fampm201.tu-graz.ac.at/karl/timings30.html
This web site is maintained by Karl Unterkofler, and has comparisons of
various computers running the latest versions of Mathemetica. Karl and
others run a series of tests on the machines, that involve timing
mathematical problems.
8 of the 10 fastest machines are running the Mac OS! the first windows
machine doesn't make a showing until 11th place( a pentium pro 200Mhz
running Windows NT 4.0) Incidently this ppro 200 is beat by a Mac 7500
150 Mhz!
You might wonder how this can be when the SPECint95 for Pentium Pros and
for Power PC 604's are so close? Its the operating system dummy!
What do I mean?
The Intel machines and the Macs are pretty equal, its Windows that slows
things down. If you check out the URL you'll see that although 8 of the
top ten are Macs or Mac clones, 2 of them are Intel pentium Pro 200Mhz
machines. Sadly for the Mac, the number one spot is a Pentium Pro 200
with 64 Meg RAM and a 256kb L2 cache running LINUX 2.0.27.
This barely beats the number 2 machine, a 225Mhz Power Tower Pro from
Power Computing with 256 Meg RAM and a 1Meg L2 cache.
The other Intel in the top 10 is a Pentium Pro 200Mhz with 128Meg Ram and
256Kb L2 cache, running NeXT STEP 3.3.
I don't think that Mac owners should be ashamed of losing to a LINUX
machine. LINUX is the result of an amazing effort put forth by many
dedicated programmers to produce a state of the art 32bit operating
system that utilizes hardware to the fullest. Mac users should be happy
that they can go head to head with such an OS, and still maintain the
great human interface of the Mac!
The only other contender is a NeXT machine! Wait'll your windows friends
see redbox!
Oh, BTW the first Win '95 machine doesn't make a showing until 15th
place. its a Pentium pro 200, 64 MB, 256kb, OS: Win95 and is just below a
PowerMac 7600/120, 48MB, 256kb, MacOS!
So if a windows user tells you their machine is faster, tell them that
you know...if they switch to LINUX.
__________________________________________________________________________
Word Processor for the Linux Environment
The development of 'wp', a word processor for the Linux environment has
recently been started. Although it's primary goal is a Linux-based word
processor, wp will eventually be available for many other platforms.
WP is an open system, object orientated, and object driven; written mainly
using C++, although little code has of yet been written. The current
objective is a full design specification/mission statement and determining
the current products that can be used to help the development of the
product further.
Because of this openness, it is proposed to have the user interface
seperate from the main program; the reason for this meaning that the user
can choose whichever interface suits them best, from a ncurses driven text
interface to an X-Windows display using different widget sets.
The web site for Wp is at http://sunsite.unc.edu/paulc/wp
If you wish to obtain the design specification notes for wp, they are also
available at the above site.
A FAQ is currently being prepared, if you have any questions or
suggestions, please send them to wp@squiznet.demon.co.uk
If you wish to contribute to the project in any form, please contact
paulc@sunsite.unc.edu and introduce yourself, a copy of which will be sent
to the wp-developers mailing list unless you specifically state that you
do not wish for this to happen.
__________________________________________________________________________
Software Announcements
__________________________________________________________________________
Xcoral 3.0
Xcoral-3.0 has been released and now available on the Net.
* EUROPE: X/contrib-R5/clients
* USA: contrib/editors
Xcoral is a multiwindow mouse-based text editor for
the X Window System. It contains a built-in browser that enables you to
navigate through C functions, C++ classes, Java classes, methods and files.
It also contains a SMall Ansi C Interpreter (Smac) which is also built-in
to extend the editor's possibilities
(user functions, key bindings, modes etc).
Xcoral provides variable width fonts, menus, toolbar,
scrollbars, buttons, search, regions, kill-buffers, macros and
undo. An on-line manual box, with a table of contents
and an index, helps you to use and customize the editor.
Xcoral also offers facilities to write Latex documents
and Html pages.
Xcoral is a direct Xlib client and runs on color/bw
X Display.
OS: SunOS 4.1.x, Solaris 2.[45], LINUX, AIX, HPUX,
IRIX and OSF-1.
Changes from xcoral-2.5:
* New browser for C/C++ and Java.
* Standard X selection mecanism.
* Toolbar
* Some bugs fixed...
__________________________________________________________________________
Beta Version of EM86
The Linux/Alpha team at Digital Equipment Corporation
today is releasing a developers' beta version of EM86, a Linux/x86
emulator for Linux/Alpha. Using components of the
DIGITAL FX!32 technology, EM86 is a software emulator that enables
Linux/Alpha systems to run Linux/x86 software without modification.
EM86 currently supports statically linked and dynamically linked x86
ELF32 binaries under Linux/Alpha. Future enhancements will include
support for iBCS-2 compliant executables, improved emulator performance,
and interoperation with native Alpha code. A release incorporating
these features is anticipated in July, 1997.
They are releasing a beta version of EM86 at this time to provide
Linux developers early access to the software, to aid in the
verification of software packages, and to provide feedback and bug
reports to the Linux/Alpha team.
The following Linux/x86 software packages run successfully on this
beta version of EM86, with some qualifications as described in the
README file included in the distribution:
* Netscape Navigator Gold 3.01
* Adobe Acrobat Reader 3.0
* Red Baron web browser 3.00
* Applixware 4.2
EM86 may be obtained via anonymous ftp from:
ftp://ftp.digital.com/pub/DEC/Linux-Alpha/em86
__________________________________________________________________________
XForms V0.86
XForms V0.86 is now available from:
* http://brigg.phys.uwm.edu/xforms
* ftp://einstein.phys.uwm.edu/pub/xforms
for Linux/i386, Linux/alpha, Linux/sparc, and Linux/m68k.
XForms is a graphical user interface toolkit and builder based on Xlib
for X Window Systems. XForms is a portable and efficient C library
that can be used in both C and C++ programs.
The library works in all visuals and all depths (1-24) and comes
with a rich set of objects such as buttons (of many flavors, including color
XPMs as labels) , browsers, sliders, and menus integrated into an
elegant event/object callback execution model that allows fast and
easy construction of X-applications. It also has OpenGL (on SGI) and
Mesa support.
XForms comes bundled with
* Precompiled library (static and shared) and header files.
* Source code for 50+ demonstration programs;
* Precompiled fdesign, an interactive GUI builder that can be used
to design dialogues in a WYSIWYG way and to output the
corresponding UI code for you.
* 250+ pages of indexed documentation (tutorial and reference) in
both PostScript and html
perl, ada95, python and fortran bindings to xforms are in alpha/beta.
Please visit the xforms' home page for more info.
__________________________________________________________________________
Debian 1.3 Available for Beta Test
Debian 1.3 is now in beta test. We are performing a month-long test
with an organized quality control team. If you'd like to be an official
beta tester, please contact Dale Scheetz dwarf@polaris.net .
The Debian 1.3 files are under the "frozen" directory on most of the
Debian mirror sites. There are now 73 Debian mirrors worldwide! You can
find the mirror list at
ftp://ftp.debian.org/debian/README.mirrors or
ftp://debian.crosslink.net/pub/debian/README.mirrors. Please consider
that this is beta-quality software and there will be bugs. If you have
any problem, please see the information on our bug-tracking system
at http://www.debian.org/support.html, or write to Dale at the above
address.
__________________________________________________________________________
Freedom Desktop Lite Announced (1.01)
Announcing the public availability of the Freedom
Desktop Lite. Freedom Desktop Lite is a
desktop environment/GUI integrated to the Unix
environment. It
helps users interact with Unix quickly and efficiently. Freedom
Desktop runs transparently in a variety of Unix environments,
from Desktop computers (i.e. Linux) to enterprise workstations.
The Freedom Desktop Lite environment bundles the following
applications:
* File Manager
* Program Manager
* Print Tool
* Find Tool
* Editor
* Terminal emulator
* Pixmap/Icon Editor
* Screen grabber
* Screen saver
* Rolodex
For more information and the ftp site feel free to visit http://freedom.lm.com/
desktop.html
__________________________________________________________________________
Published in Linux Gazette Issue 17, May 1997
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
Next
__________________________________________________________________________
This page written and maintained by the Editor of Linux Gazette,
gazette@ssc.com
Copyright © 1997 Specialized Systems Consultants, Inc.
"Linux Gazette...making Linux just a little more fun!"
__________________________________________________________________________
The Answer Guy
By James T. Dennis jimd@starshine.org
Starshine Technical Services, http://www.starshine.org/
__________________________________________________________________________
Contents:
* fs's
* Linux/Unix Emulator
* Using X With 2 Monitors and 2 Video Cards
* Virtual Hosting
* Response from Weitse Venema
* Automatic File Transfer
* Installing wu-ftpd on a Linux Box
* Trying to Boot a Laptop
* zmodem Reply
* StartX
* IMAP and Linux
* IMAP Again
* UUCP Questions
* Using MS-DOS Floppies
* inetd Questions
* Navas Modem FAQ
* Setting Up a Modem
* User Identification
* Duplicating a Linux Installed HD
__________________________________________________________________________
fs's
From: Aaron M. Lee aaron@shifty.adosea.com
Howdy Jim,
My name's Aaron and I am sysadmin Cybercom Corp., an ISP in
College Station, TX. We run nothing but Linux, and have been involved w/
a lot of hacking and development on a number of projects. I have an
unusual problem and have exhausted my resources for finding an answer- so
I thought you might be able to help me out, if you've got the time.
Anyway, here goes...
I've got a scsi disk I was running under Sparclinux that has 3
partitions, 1 Sun wholedisk label, 2 ext2. That machine had a heart
attack, and we don't have any spare Hypersparcs around- but I _really_
need to be able to mount that drive to get some stuff off of it. I compiled
in UFS fs support w/ Sun disklabel support into the kernel of an i386 Linux
box, but the when I try to mount it, it complains that /dev/sd** isn't a
valid block device, w/ either the '-t ufs' or '-t ext2' options. Also,
fdisk thinks the fs is toast, and complains that the blocks don't end
in physical boundaries (which is probably the case for an fdisk that
doesn't know about Sun disklabels), and can't even tell that the
partitions are ext2 (it thinks one of them is AIX!). Any ideas?
Consider the nascent state of Sparc support for Linux
I'm not terribly surprised that you're having problems.
You seem to be asking:
"How do I get Linux/Intel to see the fs on
this disk?"
However I'm going to step back from the that question
and ask the broader question:
"How do you recover the (important) data off of
that disk in a usable form?"
Then I'll step back even further and ask:
"How important is that data? (what is its
recovery worth to you)?"
... and
"What were the disaster plans, and why
are those plans inadequate for this
situation?"
If you are like most ISP's out there -- you have not
disaster or recovery plans, and little or no backup
strategy. Your boss essentially asks you to running
back and forth on the high wire at top speed -- without
a net.
As a professional sysadmin you must resist the pressure
to perform in this manner -- or at least you owe it to
yourself to carefully spell out the risks.
In this case you had a piece of equipment that was
unique the Sparc system -- so that any failure of
any of its components would result in the lack of
access to all data on that system.
Your question makes it clear that you didn't have
sufficiently recent backups of the data on that
system (otherwise the obvious solution would be
to restore the data to some other system and
reformat the drive in question).
My advice would be to rent (or even borrow) a
SPARC system for a couple of days (a week is a
common minimum rental period) -- and install
the disk into that.
Before going to the expense of renting a system
(or buying a used one) you might want to ensure
that the drive is readable at the lowest physical
level. Try the dd command on that device. Something
like:
dd if=/dev/sda | od | less
... should let you know if the hardware is operational.
If that doesn't work -- double and triple-check all of the
cabling, SCSI ID settings, termination and other hardware
compatibility issues. (You may be having some weird problem
with a SCSI II differential drive connecting to an
incompatible controller -- if this is an Adaptec 1542B
-- be sure to break it in half before throwing it away
to save someone else the temptation (the 1542C series is
fine but the B series is *BAD*)).
Once you are reasonably confident that the hardware
is talking to your system I'd suggest doing a direct,
bitwise, dump of the disk to a tape drive. Just use a
command like:
dd if=/dev/sda of=/dev/st0
... if you don't have a sufficiently large tape drive
(or at least a sufficiently large spare hard disk) *and
can't get one* than consider looking for a better
employer.
Once you have a tape backup you can always get back
to where you are now. This might not seem so great
(since you're clearly not where you'd like to be) but
it might be infinitely preferable to where you'll be
if you have a catastrophic failure on mounting/fsck'ing
that disk.
For the broader problem (the organizational ones rather
than the technical ones) -- you need to review
the requirements and expectations of your employer --
and match those against the resources that are being
provided.
If they require/expect reliable access to their data --
they must provide resources towards that end. The most
often overlooked resource (in this case) is sysadmin
time and training. You need the time to develop
disaster/recovery plans -- and the resources to test
them. (You'd be truly horrified at the number of sites
that religiously "do backups" but have an entire staff that
has never restored a single file from those).
Many organizations can't (or won't) afford a full spare
system -- particularly of their expensive Sparc stations.
They consider any system that's sitting on a shelf to be a
"waste." -- This is a perfectly valid point of view.
However -- if the production servers and systems are
contributing anything to the companies bottom line --
there should be a calculable cost for down time. If that's
the case then there is a basis for comparison to the costs of
rentals, and the costs of "spare" systems.
Organizations that have been informed of this risks and
costs (by there IS staff) and continue to be unwilling or
unable to provide the necessary resources will probably
fail.
Thanks in advance for any possible help,
--Aaron
It's often the case that I respond with things that
I suspect my customer don't want to hear.
The loss of this data (or the time lost to recovering
it) is an opportunity to learn and plan -- you may
prevent the loss of much more important information
down the road if you now start planning for the
inevitable hardware and system failures.
__________________________________________________________________________
Linux/Unix Emulator
From:Steven W., steven@gator.net
Can you help me? Do you know of a Unix (preferably Linux) emulator
that runs under Windows95?
-- Steven.
Short Answer:
I don't know of one.
Longer Answer:
This is a tough question because it really doesn't
*mean* anything. An emulator is a piece of software
that provide equivalent functionality to other software
or hardware. Hopefully this software is indistinguishable
from the "real" thing in all ways that count.
(Usually this isn't the case -- most VT100
terminal emulation packages have bugs in them
-- and that is one of the least complicated
and most widespread cases of emulation in the
world).
A Unix "emulator" that ran under Win '95 would probably not be
of much use. However I have to ask what set of features
you want emulated?
Do you want a Unix-like command shell (like
Korn or Bash)? This would give you some of the
"feel" of Unix.
Do you want a program that emulates one of the
GUI's that's common on Unix? There are X Windows
"display servers" (sort of like "emulators") that
run under NT and '95. Quarterdeck's eXpertise
would be the first I would try.
Do you want a program that allows you to run
some Unix programs under Win '95? There are
DOS, OS/2, and Windows (16 and 32 bit) ports of
many popular Unix programs -- including most of
the GNU utilities. Thus bash, perl, awk, sed,
vi, emacs, tar, and hundreds of other utilities
can be had -- most of them for free.
Do you want to run pre-compiled Unix binaries
under Win '95? This would be a very odd request
since there are dozens of implementations of
Unix for the PC platform and hundreds for other
architectures (ranging from Unicos on Cray super-
computers to Minix and Coherent on XT's and 286's).
Binary compatibility has playing only a tiny role
in the overall Unix picture. I suspect that
supporting iBCS (a standard for Unix binaries on
intel processors -- PC's) under Win '95 would be a
major technical challenge (and probably never
provide truly satisfying results).
*note*: One of the papers presented at Usenix in
Anaheim a couple of months ago discussed the
feasibility of implementing an improved Unix
subsystem under NT -- whose claim of POSIX support
as proven to be almost completely useless in the
real world. Please feel free to get a copy of
the Usenix proceeding if you want the gory details
on that. It might be construed as a "Unix emulation"
for Windows NT -- and it might even be applicable to
Win '95 -- with enough work.
If you're willing to run your Windows programs
under Unix there's hope. WABI currently supports
a variety of 16-bit Windows programs under Linux
(and a different version support them under Solaris).
Also work is continuing on the WINE project -- and
some people have reported some success in running
Windows 3.1 in "standard mode" under dosemu (the
Linux PC BIOS emulator). The next version of WABI
is expect to support (at least some) 32-bit Windows
programs.
My suggestion -- if this is of any real importance to you --
is that you either boot between Unix and DOS/Windows or that
you configure a separate machine as a Unix host -- put it in
a corner -- and using your Win '95 system as a terminal,
telnet/k95 client and/or an X Windows "terminal" (display
server).
By running any combination of these programs on your Windows
box and connecting to your Linux/Unix system you won't have
to settle for "emulation." You'll have the real thing --
from both sides. In fact one Linux system can serve as the
"Unix emulation adapter" for about as many DOS and Windows
systems as you care to connect to it.
(I have one system at a client site that has about 32Mb
of RAM and 3Gb -- it's shared by about 300 shell and
POP mail users. Granted only about 20 or 30 of them are
ever shelled at any given time but it's no where near it's
capacity).
I hope this gives you some idea why your question is
a little non-sensical. Operating systems can be viewed
from three sides -- user interface (UI), applications
programming interface (API), and supported hardware
(architecture).
Emulating one OS under another might refer to emulating
the UI, or the API or both. Usually emulation of the
hardware support is not feasible (i.e. we can't run DOS
device drivers to provide Linux hardware support).
If one implemented the full set of Unix system calls
in a Win '95 program that provided a set of "drivers"
to translate a set of Unix like hardware abstractions
into calls to the Windows device drivers -- and one
ported a reasonable selection of software to run under
this "WinUnix kernel" -- one could call that "Unix emulation."
However it would be more accurate to say that you had
implemented a new version of Unix on a virtual machine
which you hosted under Windows.
Oddly enough this is quite similar to what the Lucent
(Formerly Bell Labs?) Inferno package does. Inferno
seems to have evolved out of the Plan 9 research project
-- which apparently was Dennis Ritchie's pet project for
a number of years. I really don't know enough about
the background of this package -- but I have a CD
(distributed to attendees of the aforementioned Usenix
conference) which has demo copies of Inferno for several
"virtual machine" platforms (including Windows and Linux).
Inferno is also available as a "native" OS for a couple
of platforms (where it includes it's own device drivers
and is compiled as direct machine code for a machine's
platform).
One reason I mention Inferno is that I've heard that
it offers features and semantics that are very similar
to those that are common in Unix. I've heard it described
as a logical outgrowth of Unix that eschews some of the
accumulation of idiosyncrasies that has plagued Unix.
One of these days I'll have to learn more about that.
I have Windows95 and Linux on my system, on separate partitions, I
can't afford special equipment for having them on separate machines.
I really like Linux, and Xwindows, mostly because of their great
security features. (I could let anybody use my computer without
worrying about them getting into my personal files). Windows95's
pseudo-multi-user system sucks really bad. So, mainly, this is why I
like Linux. I also like the way it looks. Anyways, I would just run
Linux but my problem is that Xwindows doesn't have advanced support
for my video card, so the best I can get is 640x480x16colors and I
just can't deal with that. Maybe I'm spoiled. The guy I wrote on
the Xwin development team told me that they were working on better
support for my card, though. (Aliance Pro-Motion). But, meanwhile,
I can't deal with that LOW resolution. The big top-it-off problem is
that I don't know of anyway to have Linux running _while_ Win95 is
running, if there even is a way. If there was, it would be great,
but as it is I have to constantly reboot and I don't' like it. So
this is how I came to the point of asking for an emulator. Maybe
that's not what I need after all. So what can I do? Or does the
means for what I want not exist yet?
-- Steven.
If you prefer the existing Linux/X applications and
user interface -- and the crux of the problem is support
for your video hardware -- focus on that. It's a simpler
problem -- and probably offers a simpler solution.
There are basically three ways to deal with a lack of
XFree86 support for your video card:
* Help write an XFree86 driver (I'm not a coder either -- but I do
occasionally beat the bushes and offer bribes to coder friends)
* Look for Metro-X or other (probably commercial) support. (A copy
of Metro-X comes with Red Hat 4.1 for about $50 -- so this is not
outrageously expensive).
* Replace the video card. There are plenty of really good video
cards that are supported by XFree86. Number 9, and Matrox have
good track records. Some of the 2Mb PCI cards are only about $100
(US).
Be sure to contact the manufacturer to ask for a
driver. Point out that they may be able to make
small changes to an existing XFree86 driver. You
can even offer to help them find a volunteer
(where you post to the comp.os.linux.dev...sys.
newsgroup and one or two of the developer's mailing
lists -- and offer some support). Just offering to
do some of the "legwork" maybe be a significant
contribution.
This is an opportunity to be a "Linux-Activist."
--
Jim
__________________________________________________________________________
Using X with 2 Monitors and 2 Video Cards
From:Charles A. Barrassocharles@blitz.com
I was wondering how I would go about using X with 2 monitors and 2
video cards? I am currently using XFree86 window manager. I know you
can do this with the MetroX window manager but that costs money :(.
I'm sure I gave a lengthy answer to this fairly recently.
Maybe it will appear in this month's issue (or maybe
I answered it on a newsgroup somewhere).
In any event, the short answer is: You don't.
The PC architecture doesn't support using multiple
VGA/EGA cards concurrently. I don't think XFree86 can
work with CGA cards (and who'd want to!). You might
be able to get a Hercules compatible Monochrome Graphics
Adapter (MGA) to work concurrently with a VGA card (since
they don't use overlapping address spaces). I don't know
if this is the method that Metro-X supports.
There are specialized video adapters (typically very expensive
-- formerly in the $3000+ range) that can co-exist with
VGA cards. Two sets of initials that I vaguely recall are
TIGA and DGIS. Considering that you seem unwilling to
pay $100 (tops) for a copy of Metro-X I think these --
even if you can still find any of them -- are way out of
your price league.
Another, reasonable, alternative is to connect a whole
Xterminal or another whole system and run X on that. You
can then remotely display your windows on that about as
easily as you could set them to display on the local
server.
(I know -- you might not get some cool window manager
to let you drag windows from one display server to another
-- a trick which I've seen done with Macs under MacOS and
with Suns and SGI's. But I've never set one of those up
anyway -- so I couldn't begin to help you there).
You might double check with the Metro-X people to see
what specific hardware is required/supported by their
multiple display feature and then check with the XFree86.org
to see if anyone has any drivers for one of those supported
configurations.
As a snide note I find your phrase "that costs money :("
to be mildly offensive. First the cost of an additional
monitor has got to be at least 3 times the price of
a copy of Metro-X. Second "free" software is not about
"not having to pay money."
I'm not trying to sell you a copy of Metro-X here. I
don't use it -- and I specifically choose videos cards
that are supported by XFree86 when I buy my equipments.
Likewise I don't recommend Linux to my customers because
it "doesn't cost them anything." In fact it does cost
them the time it takes me to install, configure and maintain
it -- which goes for about $95/hr currently. I recommend
Linux because it is a better tool for many jobs -- and because
the benefits of it's being "free" -- in the GNU sense of the
term -- are an assurance that no one can "have them over a
barrel" for upgrades or additional "licensing" fees. They are
always *free* to deploy Linux on as many systems as they want,
have as many users and/or processes as they want on any system,
make their own modifications to the vast majority of tools
on the system or hire any consultants they want to make the
customizations they need.
I'm sorry to be so "political" here -- but complaining
that Metro-X "costs money" and asking me for a way to
get around that just cost me about $50 worth of my time.
Heck -- I'll go double or nothing -- send my your postal
address and I'll buy you a copy of RedHat 4.1. That comes
with a license for one installation of Metro-X and only
costs about $50. I'll even cover the shipping and handling.
(Please call them first to make sure that it really does
support your intended hardware configuration).
Thanks for the time,
No problem. (I did say "mildly" didn't I).
--
Jim
__________________________________________________________________________
Virtual Hosting
From: Wietse Venema wietse@szv.sin.tue.nl
tcpd has supported virtual hosting for more than two years. Below
is a fragment from the hosts_access(5) manual page.
Wietse
Thanks for the quick response. I'll have to play with
that. I suppose a custom "virtual finderd" would
be a good experiment.
Do you know where there are any working examples of this
and the twist option posted to the 'net? I fight with
some of these and don't seem to get the right results.
What I'd like is an example that drops someone into a
chroot'd jail as "nobody" or "guest" and running a
copy of lynx if they are from one address -- but
lets them log in a a normal user if they are from an
internal address. (We'll assume a good anti-spoofing
packet-filter on the router(s)).
Did you ever add the chrootuid functionality to tcpd?
How would you feel about an option to combine the
hosts.allow and hosts.deny into just tcpd.conf?
(I know I can already put all the ALLOW and DENY
directives in a single file -- and I'm not much of a
programmer but even *I* could patch my own copy to
change the filename -- I'm just talking about the
general case).
SERVER ENDPOINT PATTERNS
In order to distinguish clients by the network address
that they connect to, use patterns of the form:
process_name@host_pattern : client_list ...
(which is what he said one to me when I suggested merging
his chrootuid code with tcpd).
I've blind copied Wietse on this (Hi!). I doubt he has
time to read the Linux Gazette.
--
Jim
__________________________________________________________________________
Response from Weitse Venema
From:Wietse Venema, wietse@wzv.win.tue.nl
Do you know where there are any working examples of this
and the twist option posted to the 'net? I fight with
some of these and don't seem to get the right results.
Use "twist" to run a service that depends on destination address:
fingerd@host1: ALL: twist /some/where/fingerd-for-host1
What I'd like is an example that drops someone into a
chroot'd jail as "nobody" or "guest" and running a
copy of lynx if they are from one address -- but
lets them log in a a normal user if they are from an
internal address. (We'll assume a good anti-spoofing
packet-filter on the router(s)).
I have a little program called chrootuid that you could use.
Did you ever add the chrootuid functionality to tcpd?
I would do that if there was a performance problem. Two small
programs really is more secure than a bigger one.
How would you feel about an option to combine the
hosts.allow and hosts.deny into just tcpd.conf?
What about compatibility with 1 million installations world-wide?
(I know I can already put all the ALLOW and DENY
directives in a single file -- and I'm not much of a
programmer but even *I* could patch my own copy to
change the filename -- I'm just talking about the
general case).
This is because the language evolved over time. Compatibility can
become a pain in the rear.
--
Weitse
__________________________________________________________________________
Automatic File Transfer
From:Kenneth Ng, kenng@kpmg.com
In Linux Gazette, there is a mention of how to transfer files
automatically using ftp.
Here is how:
#!/bin/csh
ftp -n remote.site
And that's it. Granted ssh is better. But sometimes you have to go
somewhere that
only supports ftp.
That's one of several ways. Another is to use ncftp
-- which supports things like a "redial" option to keep
trying a busy server until it gets through. ncftp also has
a more advanced macro facility than the standard .netrc (FTP).
You can also use various Perl and Python libraries (or classes)
to open ftp sessions and control them. You could use 'expect'
to spawn and control the ftp program.
All of these methods are more flexible and much more robust
than using the standard ftp client with redirection ("here"
document or otherwise).
--
Jim
__________________________________________________________________________
Installing wu-ftpd on a Linux Box
From: Stephen P. Smith, ischis@evergreen.com
I just installed wu-ftpd on my linux box. I have version 2.4.
I can login under one of my accounts on the system and everything
works just fine.
If I try an anonymous ftp session, the email password is rejected.
what are the possible sources of failure?
where should i be going for more help? :-)
Do you have a user named 'ftp' in the /etc/passwd file?
done.
wu-ftpd takes that as a hint to allow *anonymous* FTP.
If you do have one -- or need to create one -- be sure that
the password for it is "starred out." wu-ftpd will not
authenticate against the system password that's defined for a
a user named "ftp."
done.
You should also set the shell to something like /bin/false or
/bin/sync (make sure that /bin/false is really a binary and
*not* a shell script -- there are security problems -- involve
IFS (inter-field separators) if you use a shell script in the
/etc/passwd shell field).
done.
There is an FAQ for anonymous FTP (that's not Linux specific).
There is also a How-To for FTP -- that is more Linux oriented.
If you search Yahoo! on "wu-ftp" you'll find the web pages
at Washington University (where it was created) and at
academ.com -- a consulting service that's taken over development
of the current beta's.
Guess I will just have to do it the hard
way. Will tell you what I find (just in
case you want to know.
What does your /etc/ftpaccess file look like?
Did you compile a different path for the ftpaccess file
(like /usr/local/etc/)?
What authentication libraries are you using (old
fashioned DES hashes in the /etc/passwd, shadow,
shadow with MD5 hashes -- like FreeBSD's default,
or the new PAM stuff)?
Is this invoked through inetd.conf with tcpd
(the TCP Wrappers)? If so, what does your /var/log/messages
say after a login failure? (Hint: use the command:
'tail -f /var/log/messages > /dev/tty7 &' to leave a continuously
updated copy of the messages file sitting on one of your
-- normally unused -- virtual consoles).
One trick I've used to debug inetd launched programs (like
ftpd and telnetd) is to wedge a copy of strace into the
loop. Change the reference to wu.ftpd to trace.ftpd --
create a shell or perl script named trace.ftpd that consists
of something like:
#! /bin/sh
exec strace -o /tmp/ftpd.strace /usr/sbin/wu.ftpd
... and then inspect the strace file for clues about
what failed. (This is handy for finding out that the
program couldn't find a particular library or configuration
file -- or some weird permissions problems, etc).
--
Jim
__________________________________________________________________________
Trying to Boot a Laptop
From: Yash Khemani, khemani@plexstar.com
I've got a Toshiba satellite pro 415cs notebook computer on which I've
installed RedHat 4.1. RedHat 4.1 was installed on a jaz disk connected
via an Adaptec slimscsi pcmcia adapter. the installation went
successfully, i believe, up until the lilo boot disk creation. i
specified that i wanted lilo on a floppy - so that nothing would be
written to the internal ide drive and also so that i could take the
installation and run it at another such laptop. after rebooting, i
tried booting from the lilo floppy that was created, but i get nothing
but continuous streams of 0 1 0 1 0 1...
i am guessing that the lilo floppy does not have on it the pcmcia
drivers. what is the solution at this point to run RedHat on this
machine?
You've got the right idea.
The 1010101010101... from LILO is a dead giveaway that
your kernel is located on some device that cannot be
accessed via the BIOS.
There are a couple of ways to solve the problem.
I'd suggest LOADLIN.EXE.
LOADLIN.EXE is a DOS program (which you might have
guessed by the name) -- which can load a Linux kernel
(stored as a DOS file) and pass it parameters (like
LILO does). Basically LOADLIN loads a kernel (Linux or
FreeBSD -- possibly others) which then "kicks" DOS
"out from under it." In other words -- it's a one-way
trip. The only way back to DOS is to reboot (or
run dosemu ;-) .
LOADLIN is VCPI compatible -- meaning that it can run
from a DOS command prompt even when you have a memory
manager (like QEMM) loaded. You can also set LOADLIN
as your "shell" in the CONFIG.SYS. That's particularly
handy if you're using any of the later versions of DOS
that support a multi-boot CONFIG.SYS (or you're using the
MBOOT.SYS driver that provided multi-boot features in
older versions of DOS).
To use LOADLIN you may have to create a REALBIOS.INT
file (a map of the interrupt vectors that are set by
your hardware -- before any drivers are loaded).
To do this you use a program (REALBIOS.EXE) to create
a special boot floppy, then you boot off that floppy
(which records the interrupt vector table in a file)
-- reboot back off your DOS system and run the second
stage of the REALBIOS.EXE.
This little song and dance may be necessary for each
hardware configuration. (However you can save and
copy each of the REALBIOS.INT files if you have a
couple of configurations that you switch between --
say, with a docking station and without).
With LOADLIN you could create a DOS bootable floppy,
with a copy of LOADLIN.EXE and a kernel (and the
REALBIOS.INT -- if it exists). All of that will
just barely fit on a 1.44M floppy.
Another way to do this would be to create a
normal DOS directory on your laptop's IDE drive --
let's call it C:\LINUX (just to be creative).
Then you'd put your LOADLIN.EXE and as many different
kernels as you liked in that directory -- and maybe
a batch file (maybe it could be called LINUX.BAT) to
call LOADLIN with your preferred parameters. Here's a
typical LINUX.BAT:
@ECHO OFF
ECHO "About to load Linux -- this is a one-way trip!"
PAUSE
LOADLIN lnx2029.krn root=/dev/sda1 ro
(where LNX2029.KRN might be a copy of the Linux-2.0.29
kernel -- with a suitable DOS name).
I'd also recommend another batch file (SINGLE.BAT) that
loads Linux in single-user mode (for fixing things when
they are broken). That would replace the LOADLIN line
in the LINUX.BAT with a line like:
LOADLIN lnx2029.krn single root=/dev/sda ro
Another way to do all of this is to simply dd a
properly configured kernel to a floppy. You use the
rdev command to patch the root device flags in the
kernel and dump it to a floppy. This works because
a Linux kernel is designed to work as a boot image.
The only problem with this approach is that it doesn't
allow you to pass any parameters to your kernel (to
force single user mode, to select an alternate root
device/filesystem, or whatever).
For other people who have a DOS system and want to
try Linux -- but don't want to "commit" to it with
a "whole" hard drive -- I recommend DOSLINUX.
A while back there was a small distribution called
MiniLinux (and another called XDenu) which could
install entirely within a normal DOS partition --
using the UMSDOS filesystem. Unfortunately MiniLinux
has not been maintained -- so it's stuck with a 1.2
kernel and libraries.
There were several iterations of a distribution called
DILINUX (DI= "Drop In") -- which appears to have eventually
evolved into DOSLINUX. The most recent DOSLINUX seems was
uploaded to the Incoming at Sunsite within the last two
weeks -- it includes a 2.0.29 kernel.
The point MiniLinux and DOSLINUX is to allow one to install
a copy of Linux on a DOS system as though it were a DOS
program. DOSLINUX comes as about 10Mb of compressed
files -- and installs in about 20-30Mb of DOS file space.
It includes Lynx, Minicom, and a suite of other utilities
and applications.
All in all this is a quick and painless way to try Linux.
So, if you have a DOS using friend who's sitting on the fence,
give them a copy of DOSLINUX and show them how easy it is.
thanks!
yash
You're welcome.
(Oh -- you might want to get those shift keys fixed --
e.e. cummings might sue for "look and feel")
--
Jim
__________________________________________________________________________
zmodem Reply
From: Donald Harter Jr., harter@mufn.org
I saw your post about zmodem in the Linux Gazette. I can't answer the
readers question, but maybe this will help. My access to the internet is a
dial in account(no slip, no ppp). I access the freenets. I can't use
zmodem to transfer files from the internet and freeenets to my pc. I can
use kermit though. It seems that there are some control characters involved
in zmodem that prevent it from being used with my type of connection. I saw
a some information about this on one of the freenets. They suggested using
telix and another related protocol. I tried that, but it didn't work
either. Kermit is set up to run slow. You can get kermit to go faster in
certain circumstances by executing its "FAST" macro. I can download data at
about 700cps with the "FAST" macro of kermit. Unfortunately kermit hangs up
the line for me so I have to "kill -9 kermitpid" to exit it. That problem
can probably be eliminated with the right compile options. In certain cases
I can't use the "FAST" macro when uploading.
I'm familiar with C-Kermit. In fact I may have an
article in the June issue of SysAdmin magazine on that very
topic.
The main points of my article are that C-Kermit is a
telnet and rlogin client as well as a serial communications
program -- and that it is a scripting language that's
available on just about every platform around.
I know about Telix' support for the kermit transfer protocol.
It sucks. On my main system I get about 1900 cps for
ZMODEM transfers -- about 2200 for kermit FAST (between
a copy of C-Kermit 5A(188) and 6.0.192 and about 70 cps
(yes -- seventy!) between a copy of C-Kermit and Telix'
internal kermit.
Other than that I've always liked Telix. Minicom has
nice ncurses and color -- but is not nearly as featureful
or stable as either Telix for DOS or any version of C-Kermit.
Your line hangups probably have to do with your settings for
carrier-watch. Try SET CARRIER-WATCH OFF or ON and see if
it still "hangs" your line. I suspect that its actually just
doing read() or write() calls in "blocking" mode. You might
have to SET FLOW-CONTROL NONE, too. There are lots of
C-Kermit settings. If you continue to have trouble -- post
a message to the comp.protocols.kermit.misc newsgroup
(preferred) or send a message to kermit-support@columbia.edu.
When I first started using C-Kermit (all of about two months
ago) my initial questions where answered by Frank da Cruz
himself (he's the creator of the Kermit protocol and the
technical lead of the Kermit project at Columbia University).
(That was before he knew that I'm a "journalist" -- O.K.
quit laughing!). Frank is also quite active in the newsgroup.
I think he provides about 70 or 80 per cent of the technical
support for the project.
Oh yeah! If you're using C-Kermit you should get the
_Using_C-Kermit_ book. It was written by Frank da Cruz and
Christine Gianone -- and is the principal source of funding
for the Kermit project. From what I gather a copy of the
book is your license to use the software.
--
Jim
__________________________________________________________________________
StartX
From: Robert Rambo, robert.rambo@yale.edu
Hi, I was wondering if you can help me out. When I use the command
'startx -- -bpp16' to change the color depth, the windows in X are much
bigger than the monitor display. So, nothing fits properly and
everything has become larger. But the color depth has changed
correctly. I use FVWM as my display manager. Is there some way to fix
this problem?
If using the 16 bit plan (16bpp) mode to increase
your color depth -- that suggests that selecting this
mode is causing the server to use a lower resolution.
That is completely reasonable. If you have a 2Mb video
card and you run it in 1024x768x256 or 1024x768x16 --
then you try to run it with twice as many colors --
the video RAM has to come from somewhere. So it
bumps you down to 800x600 or 640x480. These are just
examples. I don't deal with graphics much so I'd have
to play with a calculator to figure the actual maximum
modes that various amounts of video RAM could support.
There are alot of settings in the XConfig file. You
may be able to tweak them to do much more with your
existing video card. As I've said before -- XConfig
files are still magic to me. They shifted from blackest
night to a sort of charcoal gray -- but I can't do them
justice in a little article hear. Pretty much I'd have
to lay hands on it -- and mess with it for a couple of
hours (and I'm definitely not the best one for that job).
If you haven't upgraded to a newer XFree86 (3.2?) then
this would be a good time to try that. The newer one
is much easier to configure and supports a better selection
of hardware -- to a better degree than the older versions.
I haven't heard of any serious bugs or problems with
the upgrades.
You may also want to consider one of the commercial servers.
Definitely check with them in advance to be absolutely certain
that your hardware is supported before you buy. Ask around in
the newsgroups for opinions about your combination of hardware.
It may be that the XFree86 supports you particular card better
than Metro-X or whatever.
You may also want to look at beefing up your video hardware.
As I've said -- I don't know the exact figures -- but I'd
say that you probably need a 4Mb card for anything like
16bpp at 1024x768. You should be able to look up the
supported modes in your card's documentation or on the
manufacturer's web site or BBS.
Also, is there some way to change the color depth
setting to start X with a depth of 16 every time. I do not use the XDM
manager to initiate an X session.
Yes -- it's somewhere in that XConfig file. I don't
remember the exact line. I really wish a bona fide GUI
X wiz would sign up for some of this "Answer Guy" service.
It doesn't matter whether you use xdm or not. If you
put the desired mode in the XConfig file. However --
since you don't you could just write your own wrapper
script, alias or shell function to call 'startx' with
the -- -bpp16 options. You could even re-write 'startx'
(it is just a shell script). That may seem like cheating --
but it may be easier than fighting your way through the
XConfig file (do you get the impression that I just don't
like that thing -- it is better than a WIN.INI or a
SYSTEM.INI -- but not be much).
--
Jim Dennis,
__________________________________________________________________________
IMAP and Linux
From: Brian Moore, bem@thorin.cmc.net
Being a big IMAP fan (and glad to see it finally getting recognition:
Netscrape 4 and IE4 will both support it), your answer left a lot out.
Will these support the real features (storing and
organizing folders on the server side)?
I heard that NS "Communicator" (the next release
Netscape's Navigator series is apparently going to
come with a name change) supports IMAP -- but it's
possible to implement this support as just a variant
of POP -- get all the message and immediately
expunge all of them from the server.
It seems that this is how Eric S. Raymond's 'fetchmail'
treating IMAP mail boxes -- as of about 2.5 (it seems
that he's up to 3.x now)
The easiest IMAP server to install is certainly the University of
Washington server. It works, handles nearly every mailbox format around
and is very stable. It's also written by the guy in charge of the IMAP
spec itself, Mark Crispin.
As for clients, there is always Pine, which knows how to do IMAP quite
well. This is part of most Linux distributions as well.
I did mention pine. However it's not my personal favorite.
Do you know of a way to integrate IMAP with emacs mh-e/Gnus
(or any mh compatible folder management system)?
For GUI clients there is ML, which is a nice client, but requires Motif
and can be slow as sin over a modem when you have a large mailbox.
That's available in source at
http://www-CAMIS.Stanford.EDU/projects/imap/ml
I thought I mentioned that one as well -- but it's
a blur to me.
I personally avoid GUI's like the plague. I'm
typing this from my laptop, through a null modem link
to my machine in the other room.
I run emacs under screen -- so I can use mh-e for most
mail, Gnus for netnews and for some of my mailing lists
(it can show news folders as though they were threaded
news groups). screen allows me to detach my session from
my terminal so I can log out, take off with the laptop,
and re-attach to the same session later (via modem or when
I get back home).
Asking on the mailing list about static linked linux versions will get
you one (and enough nagging may get them to actually put one of the
current version up).
ML is really the nicest mail client I have ever used.
As for pop daemons with UIDL support, go for qpopper from qualcomm.
ftp.qualcomm.com somewhere. Has UIDL and works fine.
O.K. I'll at that to my list.
Does that one also support APOP's authentication
mechanism (which I gather prevents disclosing your
password over an untrusted network by using something
like an MD5 hash of your password concatenated with
a date and time string -- or something like that)?
Does qpopper allow you to maintain a POP user account
file that's separate from your /etc/passwd file?
Do you know of an IMAP server that supports these
sorts of features (secure authentication and separate
user base)?
(I know this probably seems like a switch -- the
so called "Answer Guy" asking all the questions --
but hey -- I've got to get my answers from *somewhere*)
--
Jim
__________________________________________________________________________
More IMAP
From: Graham Todd, gtodd@yorku.ca
PINE - one of the easiest to use mail clients around - does IMAP just
fine. You can read mail from multiple servers and mailboxes and save
it locally or in remote folders on the servers - which is what IMAP is
all about: Internet Message Access Protocol = flexible and
configurable *access* to mail servers without having to pop and fetch
messages all over the place (but still having the ability save locally
if you want).
The Netscape's Communicator 4.0b2 thing does too but there are so many
other ugly bits that I'm not gonna bite.
Jeez pretty soon with this fancy new IMAP stuff you'll be able to do
almost as much as you can right now with emacs and ange-ftp (which I
use regularly to access remote mail folders and boxes with out having
to login - it's all set up in .netrc).
Of course the answer is almost always "emacs" .... BTW Linux
makes a GREAT program loader for emacs ;-)
Seems kind of kludgey. Besides -- does that
give you the main feature that's driving the creation
of the IMAP/ACAP standards? Does it let you
store your mail on a server and replicate that to
a couple of different machines (say your desktop and
your laptop) so you can read and respond to mail "offline"
and from *either* system?
Yeah, more or less. If you save the mail on your server to local
folders or make a local folder be /me@other.mail.host:/usr/spool/me.
Using ange-ftp to me seem exactly like IMAP in Pine or Netscape
communicator 4.0b2. Though apparently IMAP will update folders across
hosts so that only that mail deleted locally (while offline) will get
deleted on the remote host on the next login etc. etc. I don't know
much about IMAP's technical standard either but find I get equal mail
management capability from ange-ftp/VM. (equal to Pine and
Communicator so far).
WARNING: In a week or so when I get time I'm gonna ask you a tricky
question about emacs and xemacs.
Feel free. Of course I do know a bit more about emacs
than I do about X -- so you may not like my answer much.
Heh heh OK...
(comp.emacs.xemacs is silent on this). Emacs running as emacs -nw in
a tty (i.e console or an xterm) runs fine and lets me use all the job
control commands (suspend/fg etc) but with Xemacs job control won't
work unless I'm running as root. That is if I'm running "xemacs" or
"xemacs -nw" in an xterm or at the console and do C-z and then once
I'm done in the shell I do "fg", xemacs comes back but the keyboard
seems to be bound to the tty/console settings (Ctrl-z Ctrl-s Ctrl-q
etc all respond as if I were in a dumb terminal). The only recourse
is to Ctrl-z back out and kill xemacs. This does not happen if I run
xemacs setuid root (impractical/scary) or as root (scary). Something
somewhere that requires root permission or suid to reset the tty
characteristics doesn't have it in xemacs - but does in emacs...
My only response so far has been that "you'll have to
rebuild/recompile your xemacs" - but surely this wrong. Does anything
more obvious occur to you? I feel it must be something simple in my
set up (RH Linux 2.0.29). Of course if I could get this fixed I'd
start feeling more comfortable not having GNU-Emacs on my machine ;-)
which may not be an outcome you would favour.
I once had a problem similar to this one -- suspending
minicom would suspend the task and lock me out of it.
It seemed that the ownership of the tty was being
changed.
So -- the question comes up -- what permissions are set on
your /dev/tty* nodes. It seems that most Linux distributions
are set up to have the login process chown the these to to the
current user (and something seems to restore them during or after
logout).
I don't know enough about the internals of this process.
I did do a couple of experiments with the 'script' command
and 'strace' using commands like:
strace -o /tmp/strace.script /usr/bin/script
... and eyeballing the trace file. This shows how the
script command (which uses a psuedo tty -- or pty) searches
for an available device.
I then did a simple 'chown 600 /dev/ttyp*' as root
(this leaves a bunch of /dev/ttyq* and /dev/ttyr nodes
available). The 'script' command then reports that
the system is "out of pty's."
Obviously the script command on my system don't
do a very thorough search for pty's. It effectively
only looks at the first page of them.
The next test I ran was to add a new line to my
/etc/services file (which I called stracetel) -- and
a new line to me /etc/inetd.conf that referred to it.
This line looks like this:
stracetel stream tcp nowait root /usr/sbin/tcpd \
/usr/bin/strace -o /root/tmp/t.strace /usr/sbin/in.telnetd
... all on one line, of course.
Then I connected to that with the command:
telnet localhost stracetel
This gives me an strace of how telnetd handles the
allocation and preparation of a pty. Here, as I suspected,
I saw chown() and chmod() calls after telnetd did it's
search through to list of pty's to find the first one.
Basically both programs (and probably most other
pty clients) attempt to open each pty until one returns
a valid file descriptor or handle. (It might be nice
if there was a system call or a daemon that would allow
programs to just say "give me a pty" -- rather than forcing
a flurry of failed open attempts -- but that's probably too
much to ask for.
There result of these experiments suggests that there
are many ways of handling pty's -- and some of them may
have to be set as compile time options for your system.
It may be that you just need to make all the pty's
mode 666 (which they are on my system) or you might
chgrp them to a group like tty or pty, make them mode
660 and make all the pty using programs on your system
SGID.
I've noticed that all of my pty's are 666 root.root
(my tty's root.tty and ttyS*'s are root.uucp all are
mode 660 and all programs that need to open them are
either root run (getty) or SGID as appropriate).
Some of the policies for ownership and permissions are
set my your distribution. Red Hat 2.x is *old* and
some of these policies may have changed in the 3.03 and
4.1 releases. Mine is a 3.03 with *lots* of patches,
updated RPM's and manually installed tarballs.
Frankly I don't know *all* of the security implications
of having your /dev/tty* set to mode 666. Obviously
normal attempt to open any of these while they're in
use return errors (due to the kernel locking mechanisms).
Other attempts to access them (through shell redirection,
for example) seem to block on I/O. I suspect that a
program that improperly opened it's tty (failed to
set the "exclusive" flag on the open call) would be
vulnerable.
Since you're an emacs fan -- maybe you can tell me --
is there an mh-e/Gnus IMAP client?
No Kyle Jones (VM maintainer/author) has said maybe IMAP4 for VM
version 7. I think his idea is to make VM do it what it does well and
rely on outside packages to get the mail to it ...
Also -- isn't there a new release of ange-ftp --
I forget the name -- but I'm sure it changed named too.
Yes it's called EFS - it preserves all the functionality but is more
tightly meshed with dired - supposedly it will be easier to use EFS in
other elisp packages (I don't know why or how this would be so).
I'll have to play with those a bit.
Can VM handle mh style folders?
--
Jim
__________________________________________________________________________
UUCP Questions
From: David J. Weis, weisd3458@uni.edu
I had a couple minor questions on UUCP. If you have a few minutes, I'd
appreciate the help immensely. I'll tell you a little bit about what we're
doing.
Glancing ahead -- I'd guess that this would take quite a bit
more than a few minutes.
My company has a domain name registered (plconline.com) and two offices.
One is the branch office which is located in the city with the ISP. The
head office is kind of in the sticks in western Iowa. I've been
commissioned to find out how difficult it would be to set up the uucp so
the machine in Des Moines (the big city ;-) would grab all the domain mail
and then possibly make a subdomain like logan.plconline.com for all the
people in the main office to use email.
This would all be running on RedHat 4 over dialup uucp. The system in Des
Moines uses uucp over tcp because it has to share the line with
masquerading, etc.
Thanks for any advice or pointers you have.
Unfortunately I this question is too broad to answer
via e-mail. O'Reilly has a whole book on uucp and
there are several HOW-TO's for Taylor UUCP and
sendmail under Linux.
My uucp mostly works but I haven't configured it to
run over TCP yet. I also haven't configured my
system to route to any uucp hosts within my domain.
You can address mail to a uucp host through a
DNS by using the '%' operator. For example I can
get my main mail system (antares.starshine.org) to
forward mail to my laptop using an address like:
jim%mercury@starshine.org
... the DNS MX record for starshine.org routes
mail to my ISP. My ISP then spools it up in UUCP
until my machine (antares) picks it up. The
name antares is basically transparent to most of
this process.
When antares gets the mail it converts the
percent sign into a "bang" (!) and spools it
for mercury (which happens to be my laptop).
Obviously requiring all of your customers and
correspondents to use percent signs in their addressing
to your users is not going to work very well. It will
probably result in alot of lost mail, alot of complaints
and a constant barrage of support calls.
There are two ways to make your internal mail routing
transparent to the rest of world. You can create a
master aliases list on your mail hub (the easy way) or
you can create DNS and MX entries for each of the hosts.
If you'd like more help we could arrange to talk on
the phone. UUCP is difficult to set up for the first
time (nearly vertical initial learning curve). Once it's
set up it seems to be pretty low maintenance. However
my meta-carpus can't handle explaining the whole process
via e-mail (and I don't understand enough of it well to
be brief).
--
Jim
__________________________________________________________________________
Using MS-DOS Floppies
From: Barry, remenyi@hotmailcom
Hi, I have a problem that I can't find the solution to:
I run Redhat 4.1 with mtools already installed, with it, I can copy a
file to or from a dos disk in A: with mcopy etc..
But if I change the disk & do mdir, it tells gives me the listing of
what was in the last disk. The only solution is to wait hours for the
cache to expire before I can look at another disk.
The problem occurs no matter how I access the floppy, I also tried using
dosemu, and mount, but I have the same problem. I can read and write
from the first disk that I put in with no problems, but if I change the
disk, the computer acts as if the first disk is still in the drive. It
also doesn't matter who I am loged in as eg. root has the same problem.
I also upgraded mtools to 3.3 but no change.
Is there some way to disable the disk cache (I assume thats the problem)
for the floppy drive?
You probably have a problem with the "change disk" detection
circuitry on your floppy.
There's a pretty good chance that you'd see the same thing
under DOS too.
Unfortunately I don't know of an easy way to solve this
problem. You could try replacing the floppy ($30 or so)
the controller ($20 -- to ???) and/or the cable.
If that's not feasible in your case you could try something
like a mount/sync/umount (on a temporary mount point).
This might force the system to detect the new floppy. It's
very important not to try to write anything to a floppy when the
system is confused about which floppy is in there.
DOS systems that I have used -- while they were afflicted
with this problem -- sometimes severely trash the directories
on a diskette in that situation.
It probably doesn't even matter if the mount, sync, umount
that I describe fails -- just so the system is forced to
"rethink" what's there. I'd consider writing a short script
to do this -- put a temporary mount point that's "user" accessible
to avoid having to be root to do this (and especially to avoid
having to create any SUID root perl scripts or write a C wrapper
or any of that jazz).
Here's a sample line for your /etc/fstab:
# /etc/fstab
/dev/fd0 /mnt/tmp umsdos noauto,rw,user 0 0
(according to my man pages the "user" options should
imply the nosuid, nodev etc. options -- which prevent
certain other security problems).
So your chdisk script might look something like:
#! /bin/sh
/bin/mount /mnt/tmp
/bin/sync
/bin/umount /mnt/tmp
... you could also just do a 'mount /mnt/tmp' or a
'mount /mnt/a' or whatever you like for your system --
and just use normal Linux commands to work with those
files. The mtools are handy sometimes -- but far from
indispensable on a Linux system with a good fstab
file.
As a security note: mount must be SUID in order to
allow non-root users to mount filesystems. Since
there have been security exploits posted on mount
specifically and various other SUID files chronically,
I suggest configuring mount and umount such that they
can only be executed by members of a specific group
(like a group called "disk" or "floppy"). Then you
can add yourself and any other users who have a valid
reason to work at your console to that group. Finally
change the permissions on mount and umount to something
like:
-r-sr-x--- 1 root disk .... /bin/mount
.... i.e. don't allow "other" to execute it.
This also applies to all your SVGALib programs (which
should not be executed except from the console) and
as many of your other SUID programs as you can.
(... it would be nice to do that to sendmail -- and
I've heard it's possible. However it's a bit trickier
than I've had time to mess with on this system).
As PAM (pluggable authentication module) technology
matures you'll be able to configure your system to
dynamically assign group membership's based on
time of day and source of login (value of `tty`).
This will be nice -- but it doesn't appear to be
quit ready yet.
--
Jim
I just wanted to write to thank you for you response to my mail.
I did as you suggested and the problem is solved!
Actually, you were also right about the problem occurring in DOS as
I used to have a lot of floppies go bad before I went all the way
to linux, but I didn't make the connection.
Anyway, thanks again, you've made my day!
Barry
You're welcome. I'm glad it wasn't something complicated.
BTW: which suggestion worked for you? Replacing one or
another componenent? Or did you just use the "mount, sync,
umount" trick?
Under DOS I used to use Ctrl-C, from the COMMAND.COM A:
prompt to force disk change detection. You can use that
if you still boot this machine under DOS for some work.
--
Jim
__________________________________________________________________________
inetd Questions
From: Benjamin Peikes, benp@npsa.com
Answer guy,
I have two questions for you.
1) I'm using one machine with IPAliasing and was wondering if
there is a version of inetd built so that you can have different
servers spawned depending on the ip number connected to.
That's an excellent question.
There is apparently no such feature or enhanced version of
inetd or xinetd.
It also doesn't appear to be possibly to use TCP Wrapper
rules (tcpd, and the /etc/hosts.allow and /etc/hosts.deny)
to implement this sort of virtual hosting.
So far it appears that all of the support for virtual hosting
is being done by specific applications. Apache and some other
web servers have support for it. The wu-ftpd's most recent
versions support it.
I suspect that you could create a special version of
inetd.conf to open sockets on specific local IP addresses
and listen on those. I would implement that as a command
line option -- passing it a regex and/or list of ip addresses
to listen on after the existing command line option to
specify which configuration file to use. Then you'd load
different copies of this indetd with commands like:
/usr/sbin/inetd /etc/inetd.fred 192.168.14.0 17.18.0.0
/usr/sbin/inetd /etc/inetd.barney barneyweb
/usr/sbin/inetd /etc/inetd.wilma 192.168.2.3
(This would be something like -- all of the 192.168.14.*
address and all of the 17.18.*.* addresses are handled by
the first inetd -- all of the access to a host named
barneyweb (presumably looked up through the /etc/hosts file)
would be handled by the next inetd. and all of the accesses
to the ipalias 192.168.2.3 would be handled by the last one)
This would allow one to retain the exact format of the
existing inetd files.
However I don't know enough about sockets programming to
know how much code this would entail. The output of
'netstat -a' on my machine here shows the system listening
on *:smtp and *:telnet (among others). I suspect that those
stars would show up different if I had a socket open to
a specific service on a specific service.
This scheme might use up to many file descriptors. Another
approach would be to have a modified tcpd. This would have
to have some option where by the destination *as well as*
the source was matched in the /etc/tcpd.conf file(s).
(Personally I think that tcpd should be compiled
with a change -- so that the single tcpd.conf
file is used in preference to the /etc/hosts.allow
and /etc/hosts.deny files. Current versions do
support the single conf file -- but the naming is
still screwy).
I'm not sure quite how Wietse would respond to this --
possibly by repeating the question:
"If you want me to add that -- what should I
take OUT?"
(which is what he said one to me when I suggested merging
his chrootuid code with tcpd).
I've blind copied Wietse on this (Hi!). I doubt he has
time to read the Linux Gazette.
2) A related problem: I have one machine running as a mail server
for several domains where the users are using pop to get their
mail. The problem is that the From: line always has the name
of the server on it. Is there a way to use IPaliasing to fix
this? Or do I have to muck around with the sendmail.conf file?
This is becoming a common question.
Here's a couple of pointers to web sites and FAQ or HOWTO
documents that deal specifically with "Virtual Mail Hosting"
* How to Set up Sendmail for Virtual Domains
* qmail: A Replacement for Sendmail
(look for references to "virtualdomains")
... and here's one guide to Virtual Web Hosting:
* Virtual Web Mini-HOWTO
I guess the best way to do this would be to change inetd to figure
out on which interface the connection has been made on and then
pick the correct inetd.conf to reference, like
inetd.conf.207.122.3.8
inetd.conf.207.122.3.90
I would recommend that as a default behavior.
I suggested adding additional parameters to the
command line specifically because it could be done
without breaking any backward compatibility. The
default would be to simply work as it does now.
I still suspect that this has some scalability problems
-- it might not be able to handle several hundred or several
thousand aliased addresses.
I might still be useful to implement it as a variation of --
or enhancement to -- tcpd (TCP_Wrappers).
I think that inetd reads in the configuration file when it
starts because it needs a SIGHUP to force it to reread the conf
file. All you would have to do is make it reference the right table.
This is also documented in the inetd man page.
Do you know where I could find the code? I would be interested
in looking at it?
The source code from inetd should be in the bundle
of sources that comes with the "NetKit"
Look to:
ftp:..ftp.inka.de/pub/comp/Linux/networking/NetTools/
and mirrored at:
ftp://sunsite.unc.edu/pub/Linux/system/network/NET-3-HOWTO/
... this includes the history of it's development and the
names of people who were active in it at various stages.
If you're going to try to hack this together -- I'd suggest
a friendly posting to the comp.linux.development.system
newsgroup -- and possibly some e-mail to a couple of
carefully chosen people in the NET-3-HOWTO.
--
Jim
__________________________________________________________________________
Navas Modem FAQ
From: John Doe
The next time you answer a modem question, you'd do well
to recommend reading of the very good Navas Modem FAQ at
http://www.aimnet.com/~jnavas/modem/faq.html/
Well, here's someone who wants to make a anonymous
tip to "The Answer Guy."
At "John Doe's" request I looked over this site. It
does have extensive information about modems -- including
lots of press releases about which companies are acquiring
each other (3Com over US Robotics, Quarterdeck gets DataStorm).
However there didn't appear to be any references to Linux,
Unix or FreeBSD.
So -- if one needs information about modems in general this
looks like an excellent site to visit. However it the question
pertains specifically to using your modem with Linux -- I'd
suggest:
http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html
--
Jim
__________________________________________________________________________
Setting Up a Modem
From: Yang, lftian@ms.fudan..edu.cn
I have an AT 3300 card( from Aztech) which integrates the function of
sound card and 28.8K modem. It seems that it need a special driver for its
modem function to be work. In MSDOS, there is a aztpnp.exe for that
purpose. Do you know is there any way I can get the card work (at least its
modem function) in Linux?
Tianming Yang
I'm not familiar with that device. The
name of the driver suggests that this is a
Plug 'n Play (pnp) device (sometimes we use the
phrase "plug and *pray*" -- as it can be a toss
of the dice to see if they'll work as intended.
My guess would be that this is a PCMCIA card
for a laptop system (which I personally pronounce
"piecemeal").
Did you look in the "Hardware HOWTO" (start at
www.ssc.com, online mirror of FAQ's and HOWTO's)?
Did you go to Yahoo! and do a keyword search on
the string:
linux +aztech
... (the plus sign is important there)?
Since all of the real details about the configuration
of the card are determined by the manufacturer
(Aztech in this case) I would start by contacting
them.
If they've never heard of Linux -- or express no
interest in supporting it -- please consider letting
them know that Linux support affects your purchasing
decisions. Also let them know that getting support
for Linux is likely to cost them very little.
How to get a Linux driver for your hardware:
If you are a hardware company that would like
to provide support for Linux and FreeBSD and other
operating systems -- but you don't have the
development budget -- just ask.
That's right. Go to the comp.os.linux.development.system
newsgroups and explain that you'd like to provide
full documentation and a couple of units of your hardware
to a team of Linux programmers in exchange for a freely
distributable driver. Be sure to make the sources for
one of your other drivers (preferably any UNIX, DOS, or
OS/2 driver) available to them.
If you don't like that approach, consider publishing the
sources to your existing drivers. If you are really in
the hardware business than the benefits of diverse OS
support should far outweigh any marginal "edge" you might
get from not letting anyone see "how you do it."
(Just a suggestion for all those hardware vendors out there).
--
Jim
__________________________________________________________________________
User Identification
From: Dani Fricker, 101550.3160@CompuServe.COM
i need your help. for some reasons i have to identify a user on my
webserver by his/her ip-address. fact is that users logon comes from
different physical machines. that means that i have to assign something
like a virtual ip-address to a users log name. something like a reversal
masquerading.
The IP Address of any connecting client is provided
to any CGI scripts you run, and is stored in the
server's access log (or a reverse DNS lookup of it
is stored therein -- depending on your httpd and
configuration).
* Note: I suggest disabling reverse DNS
lookup on webserver wherever possible.
it generates alot of unnecessary traffic
and you can isolate, sort, and look up the
IP addresses in batches when you want to
generate statistics involving domain names.
(I also tend to think that most of the
reports done on web traffic logs have about
as much rigor and resemblance to statistical
analysis as reading chicken entrails).
my ip-gateway connects my inner lan over two token ring network cards
(sorry, not my idea!) with the internet (lan tr0 tr1
internet). the masquerading forward roule of ipfwadm gives me the
possibility to indicate a source and a destination address.
Oh. So all of the clients that you're interested in
are on a private LAN and going through a masquerading/NAT
server (network address translation).
I would try using ident for starters. Run identd on your
Masquerade Host and make calls to the ident service from
your CGI scripts. I don't think it will work -- but it
should be worth a little info.
From there you might be able to configure all the clients
on the inner LAN to use an *applications* level proxy
(squid -- formerly cached, CERN httpd, or the apache cache/
proxy server). Masquerading can be thought of as a
"network layer proxying services" while SOCKS, and similar
services -- which work with the co-operation of the client
software -- are applications layer proxies.
I don't know if the private net IP address or other info
will propagate through any of these HTTP proxies.
If this is *really* important to you, you could consider
writing your own "NAT Ident" service and client. I don't
know how difficult that would be -- but it seems like the
code for the identd (and the RFC 931? spec) might give you
a starting point for defining a protocol (you might want
to secure that service under TCP_Wrappers). You might want
to consider making this a TCP "Multiplexed" service --
look for info on tcpmux for details about that.
The gist of tcpmux is that it allows your custom client
to talk to a daemon on TCP port 1 of the server host and
ask for a service by name (rather than relying on
"Well-Known Port Addresses"). So, if you're going to create
a new service -- it makes sense to put it under tcpmux
so you don't pick your own port number for it -- and then
have the IANA assign that port to something else that you
might want later.
do you see a possibility for an 'address assignment' between the two
interfaces? if you do please let me know.
I don't know of any existing way to determine the IP
address of a client on the other side of any NAT/masquerading
host -- I'm not even sure if there's any existing way to do it
for a client behind a SOCKS or TIS FWTK or other applications
level proxy.
I'll be honest. With most "Answer Guy" questions I
do some Yahoo!, Alta-vista and SavvySearch queries -- and
ask around a bit (unless I already know the answer pretty
well -- which doesn't happen all that often these days).
I skipped that this time -- since I'm pretty sure that
there's nothing out there that does this.
I welcome any corrections on this point. I'll be happy
to forward any refutations and corrections to Dani.
All of this begs the greater question:
What are you really trying to do?
If you are trying to provide some form of transparent
access control to your webserver (so local users can
see special stuff without using a "name and password")
-- there are better ways available.
Netscape and Internet Explorer both support a form
of client-certificate SSL -- which is supported at
the server side by the Stronghold (commercial Apache)
server.
As an alternative -- I'd look at the possibility of
finding or writing a Kerberos "auth" module for
Apache (and deploying Kerberos to the clients).
This might be more involved than you're management
is willing to go for -- but writing new variations of
the indentd service might also fall into that category.
IP addresses are a notoriously bad form of access
control. If you have a properly configured set of
anti-spoofing rules in the packet filters on your
router -- and you can show that no other routes exist
into your LAN -- then you can base access controls to
services (TCP/Wrappers) to about the granularity of
"from here" and "not from here." Attempting to read
more into them than that is foolhardy.
Ethernet and Token Ring MAC (media access control) addresses
(sometimes erroneously called "BIA's" -- burned in addresses)
are just about as bad (most cards these days have options to
over-ride the BIA with another MAC -- usually a feature of
operating the card in "promiscuous" mode).
Yet another approach to the problem might be to simply
put a web server on the internal LAN (no routing through
the NAT/masquerading host) -- and use something like
rdist to replication/mirror the content between the
appropriate document trees on the internal and exterior
web servers.
Basically we'd need to know much more about your
requirements in order to give relevant recommendations.
--
Jim
__________________________________________________________________________
Duplicating a Linux Installed HD
From: Mohammad A. Rezaei, rezaei@tristan.TN.CORNELL.EDU
I just read your response to duplicating a hard drive using dd.
I think using dd limits the uses of this technique too much.
I absolutely agree. I wonder where I suggested 'dd'
without expressing my misgivings.
Please consider quoting little portions of my posting
when making references to them -- I write alot and
can't remember past postings without some context.
I have more than once installed/transfered entire hard drives using
tar. simply put both drives in the same machine, mount the new drive
in /mnt and do something like
tar -c -X /tmp/excludes -f / | (cd /mnt; tar xvf -)
The file....
/tmp/excludes should contain:
/mnt
/proc
and any other non-local, mounted drives, such as nfs mount points.
There are better ways to do this.
One way is to use a command like:
find ... -xdev -type f | tar cTf - - | \
(cd ... && tar xpf - )
Another is to use:
find ... | cpio pvum /new/directory
... which I only learned after years of using
the tar | (cd ... && tar) construct.
In both of these cases you can use find parameters
to include just the files that you want. (Note:
with tar you *must* prevent find from printing any
directory names by using the -type f (or more
precisely a \! -type d clause) -- since tar will
default to tar'ing any directories named in a
recursive fashion).
The -T (capital "tee") option to GNU tar means to
"Take" a list of files as an "include" list. It
is the complement to the -X option that you list.
You can also pipe the output of your find through
grep -v (or egrep -v) to filter out a list of
files that you want to exclude.
finally, one has to install the drive onto the new machine,
boot from floppy and run lilo.
The disks don't have to be identical. the only disadvantage is having
to run lilo, but that's takes just a few minutes.
The only message I can remember posting about 'dd'
had an extensive discussion of using tar and cpio for
copying trees.
Am I forgetting one -- or did you only get part of
my message?
Hope this helps.
Hopefully it will help some readers. The issues of
copying file trees and doing differential and
incremental backups is one that is not well covered in
current books on system administration.
When I do a full backup I like to verify that it
was successful by extracting a table of contents or
file listing from the backup media. I then keep a
compressed copy of this. Here I use tar:
tar tf /dev/st0 | gzip > /root/tapes.contents/.....
.... where the contents list is named something like:
antares-X.19970408
.... which is a hostname, a volume (tape) number and a
date in YYYYMMDD format (for proper collation -- sorting).
To do a differential I use something like:
find / -newer /root/tape.contents/.... \
| egrep -v "^(/tmp|/proc|/var/spool/news)" \
| tar czTf - /mnt/mo/diff.`date +%Y%m%d`.tar
... (actually it's more complicated than that since
I build the list and compute the size -- and do some
stuff to make sure that the right volume is on the
Magneto Optical drive -- and mail nastygrams to myself
if the differential won't fit on that volume -- if the
volume is the most recent one (I don't overwrite the
most recent -- I rotate through about three generations)
-- etc).
However this is the core of a differential backup.
If you wanted an incremental -- you'd supply a different
file to the -newer switch on your find command.
The difference between differential and incremental is
difficult to explain briefly (I spent about a year
explaining it to customers of the Norton Backup). Think of
it this way:
If you have a full -- you can just restore that.
If you have a full, and a series of differentials,
you can restore the most recent full, and the
most recent differential (any older fulls or differentials
are unneeded)
If you have a full and a series of incrementals you
need to restore the most recent full, and each
subsequent incremental -- in order until the most
recent.
It's possible (even sensible in some cases) to use a
hybrid of all three methods. Let's say you have a large
server that takes all day and a rack full of tapes to do a
full backup. You might be able to do differentials for
a week or two on a single tape per night. When that fills
up you might do an incremental, and then go back to
differentials. Doing this to a maximum of three incrementals
might keep your all day backup marathons down to once a month.
The restore must go through the "hierarchy" of media in the
correct order -- most recent full, each subsequent incremental
in order, and finally the most recent differential that was
done after that.
(Personally, I avoid such complicated arrangements like the
plague. However they are necessary in some sites.)
-- Jim
__________________________________________________________________________
Copyright © 1997, James T. Dennis
Published in Issue 17 of the Linux Gazette May 1997
__________________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ]
Back
Next
"Linux Gazette...making Linux just a little more fun!"
__________________________________________________________________________
CLUELESS at the Prompt: A Column for New Users By Mike List,
troll@net-link.net
_______________________________________________________________________
[INLINE]
Welcome to installment 4 of Clueless at the Prompt: a new column for new
users.
_______________________________________________________________________
Connecting to a Second ISP...or Third, orI recently got e-mail from a guy
who wanted to know how to connect to a second ISP.His e-mail address
apparently wasn't valid, and it got bounced back several times. Just as
well, since I didn't have the answer at that point. Well, I got this idea,
and I tried it and it works.Here's the deal: First,
cp /usr/sbin/ppp-on to /usr/sbin/ppp-on.anysuffix
Then open the file you just created with a text editor, and change any
information that applies to the secondary ISP, eg. dialup, the IP number of
the ISP, username and password. write the file(save it) and try your new
executable, ppp-on.anysuffix. Just a quick pointer, you could call your new
script any name you want as long as there's no other file with the same name
in your path,preferably no other file with the same name at all
_______________________________________________________________________
Dealing With a Dynamic IP
These days most Internet Service Providers assign you a Dynamic IP when you
logon to their network, due to the cost of assigning every customer a static
IP. At present there are only so many IP addresses available and, apparently
each one costs to register. Consequently ISPs buy a pool of IP addresses
within a range and assign an available one at login. For most uses, such an
arrangement is no problem, assuming that most internet usage consists of
interaction between the ISP's computer and the local one. For some purposes,
however such as allowing telnet or ftp to your computer the dynamic scheme
is less than ideal. Here's a relatively painless way to get your current IP,
so you can run with the big dogs. Open an xterm, or rxvt and type:
ifconfig
which will bring up some info in two blocks. You'll want to note the bottom
block, which will have a line that specifies your inet address expressed
numerically. It will be in a xxx.xxx.xxx.xxx format, which corresponds to
the standard IP address, in fact that's what it is. you ca write this number
down or just highlight this IP address(to paste it)and type:
nslookup the.num.ber.
the number being your inet address from the last step. It may take a couple
of minutes, but you will get a two line messagethat looks like:
Name: your Fully Qualified Domain Name
Address: IPa.ddr.ess.!!!
we may talk about FQDN some more another time, but for the purpose at hand,
just type:
hostname Name
where Name is the first line from the above step. That's it, except that you
must repeat this procedure every time you connect to your ISP. You might be
able to write a script to automate this procedure, but in the meantime which
as my friend Al used to say "is a groovy time", you can use this knowledge
to run remote X apps(just a minute,I'm coming to that) allow your friends or
inet associates to telnet to your computer, or ftp files from a telnetted
site(this too, momentarily).What you need to know is that the next time
youreboot, you may get a message saying that your computer name is "bad".
This isn't a comment on your lack of originality or taste, and you should
basically ignore it.
_______________________________________________________________________
Using your Domain NameIf you have a shell account at a computer located at a
university or school near you, this will amaze you. Oh yeah not, by way of a
plug, but there is a semi commercial telnet box called linuxware.com(you
will have to look up the URL yourself semi- plug, you might say, I'm a
subscriber) What am I talking about? Using X to run apps from the remote
computer on your screen. You can actually run a program that isn't installed
on your computer, in X with the remote computer supplying the program. I
think it embodies the essence of networking, with permissions set right, you
can co-author a document, play a multi-user game (MUD)use a talkprogram,
like ytalk, or do office or school work from your home computer.Here's what
you need to do. First, you need to know and have your FQDN listed by typing:
hostname
as detailed above. If you have a static IP address, you can skip this
step.What needs to be done next is to type:
xhost + the.telnet.box
When you hit enter you will see a message like, "the.telnet.box has been
added to the control list". You will probably have to restart your window
manager, your mileage may, as they say, vary. Now when you start a telnet
session, you can enter the name of an X application and in a moment, the
application window will apear on your screen, even if you don't have it
installed on your computer. Do your work, play your game, and marvel at the
ramifications of this capability.
You can also invite friends and coworkers over to your computer to do some
work, socialize or learn something, in the following manner. Obtain your
FQDN, or IP address, as detailed above. E-mail it to them or call them on
the phone to let them know where you are today(Not where you want to go
today, that's another "OS"). they can then:
telnet FQDN or ftp IPa.ddr.ess.!!!
and all of a sudden they're in your den, or office or wherever you keep your
computer. For more sophisticated methods of getting your address, read the
"Dynamic IP hacks-HOWTO. Just a Reminder: Read the whole Linux Gazette
This esteemed tabloid is just full of novice- to intermediate level tips and
tricks.The Answer Guy, Two Cent Tips, and The Weekend Mechanic in
particular, are good sources of the kinds of things that will make you a
demi-guru in no time at all.
_______________________________________________________________________
Formatting Floppy Disks in Linux
In DOS and Windows,formatting a floppy disk is a one shot affair which
formats, erases data, and creates a file system on the floppy. In linux
however, you have to format and create the filesystem in separate steps. At
first glance, this seems backward, after all, isn't linux a more
sophisticated OS? Why do things in two steps that the others do in one? The
reason is that linux can read several filesystems so that data can be moved
from one OS to the other. By mounting the floppy drive as MSDOS, VFAT, or
other filesystem type the data can be read from the mount point in a manner
that linux can make use of.
_______________________________________________________________________
Other Stuff I've Collected/Found out Since Last Time
have trouble with the
find
command?Try leaving your computer on overnight, and the next day use the
locate /filename |less
command instead. Locate is a database that is gathered during idle times on
your computer Actually locate reads a database that is updated by a command
in your system files, but if you give it time to breathe, usually overnight,
it can locate any file on your hard drive(s). You can also try
whereis filename
and you will get a location for the named file.
_______________________________________________________________________
Next Time- Let me know what you would like to see in here and I'll try to
oblige just e-mail troll@net-link.net me and ask, otherwise I'll just write
about what gave me trouble and how I got past it.
TTYL, Mike List
_______________________________________________________________________
Copyright © 1997, Mike List
Published in Issue 17 of the Linux Gazette, May 1997
_______________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_______________________________________________________________________
[INLINE]
By Jesper Pedersen, blackie@imada.ou.dk
_________________________________________________________________
In this article I will describe a configuration tool called The
Dotfile Generator (TDG for short). TDG is a configuration tool, which
configures programs, using X11 widgets like check boxes, entries,
pull-down menus etc.
For TDG to configure a given program a module must be made for it. At
the moment modules exist for the following programs: Bash, Fvwm1,
Fvwm2, Emacs, Tcsh, Rtin and Elm.
The article will describe common use of TDG, so if you do not have it
yet, it might be a good idea to download it (It's free!) You may also
go to the home page of the Dotfile Generator for further information.
_________________________________________________________________
Intro
The UNIX system, was developed many years ago, long before graphical
user interfaces became commonplace. This means that most of the
applications today work fine without a graphical user interface.
Examples of this are editors and shells.
A basic concept in UNIX is that the programs are very configurable.
Here is an example from Emacs, which shows this:
What should be done if the user asks to go to the next line at the
of a file?
There are two logical possibilities:
1. Insert a blank line, and move to it.
2. Beep, to tell the user that there is no next line.
Instead of implementing only one of the solution the people behind
Emacs, have chosen to implement both, and let you decide which one
you prefer.
Since the program works without a GUI, the standard method for
configuring such options is to use a dot-file. In this file, you may
program, which method you will use.
This solution, however, requires that the user has to learn the
programming language used in the dot-file, and has to read lots of
documentation to find out which configurations can be made. This task
may be difficult and tedious, and for that reason many users often
choose to use the default configuration of the program.
If you take a look at some dot-files, you may find that most of the
configurations can be described by the following items:
* Configurations with two possibilities (like above)
* Configuration, where the program wishes to know a number or text.
Examples of this could be questions like: how many times should
one press CTRL-d to quit, and email address to use in reply-to
field.
* Configuration, where the user may choose an option from a list,
eg:
which editor would you like to use: emacs, jed, vi or vim
The configurations above may easily be done with a GUI, with the
following widgets in order: A check box, an entry and a pull down
menu. This is exactly what is done in TDG.
_________________________________________________________________
The basic concept of TDG
TDG is a tool, which configures other programs (eg. emacs,bash and
fvwm) with widgets as those described above, and many more. The
widgets are placed in groups, which makes it easy to find the correct
configuration without having seen it before. And most important of
all, help is located at the configuration of each option, instead of
in a manual far away. To get help, you just press the right mouse
button on the widget, which contains the configuration you want to
know more about!
When you start TDG, you will be offered a list of standard
configurations, where you may pick one to start out with. This may be
convenient, if you do not have a dot-file for the given program, or if
you would like to try a new configuration. If on the other hand, you
already have a dot-file, which you would like to put the finishing
touches to, you may read this file into TDG. Note, however, that it is
not all modules, which have the capability to read the dot-file (the
fvwm2, rtin and elm modules have, the other modules do not, since it
would be to complicated to create such a parser.)
When you have selected a start-up configuration, the menu-window will
be displayed (see figure 1). In this window, you can travel through
the configuration pages, just like a directory structure. If you
select a page, a new window will be displayed, with the configuration
for this page (see figure 2). This window will be reused for all the
configuration pages, ie. only one configuration page is visible at a
time, so you do not have to destroy the window yourself.
[INLINE]
Figure 1[INLINE]
Figure 2In region 1, the actual configuration is located. Region 2 is
the help region. In this region help for the whole page is shown, when
the window is displayed. It's also here, help for the individual
configuration is shown, when you press the right mouse button on one
of the widgets.
In region 3, information is shown on what will be generated. You have
three possibilities:
1. You may generate all pages. This is the most natural thing to do,
when you just want a configuration for a given program.
2. You may generate just the page shown. This is useful if you are
plying around with TDG to see what will be generated for the
different configurations.
3. Finally you may tell TDG, to just generate some of the pages,
which is done with radio buttons in this region.
In the Setup->Options menu, you may select which of the three methods
above will be used.
When you have done all the configurations, you have to tell TDG which
file you wish to generate. This is done from the Options menu
(Setup->Options). And now it's time to create the actual dot-file,
which is done by selecting Generate in the File menu.
Once you have generated the dot-file, you may find that you would like
some of the configuration to be different. You could now go to the
configuration page in question, change your configuration, and then
generate once again. If, however, you are testing several different
options for a single configuration (ie. several items from a pull-down
menu) you may find it cumbersome to generate the whole module over and
over again. In this situation, you may chose Regenerate this page in
the File menu. Note, however, that if some part of the configurations
on the page effects other pages, these will not be generated, so in
these situation you have to generate the whole module.
To see how to use the generated dot-file, please go to the Help menu,
and select the How to use the output item.
_________________________________________________________________
The configuration widgets
TDG uses a lot of widgets to let you configure the different options.
Some of them are well known from other applications and include: check
boxes, radio buttons, pull-down menus, entries, text boxes (for
multi-line text), directory and file browsers. Others, however, are
specifically designed for use in TDG, and they will be described in
the following.
The ExtEntry widget
The ExtEntry is a container, which repeats its elements, just like a
list-box repeat labels. A number of the elements in the ExtEntry may
be visible on the screen at a time. The elements in the ExtEntry may
be any of the widgets from TDG (ie. check boxes, pull-down menus and
even other ExtEntries.) One element in an ExtEntry is called a tuple.
In Figure 3, you can see an ExtEntry from the Tcsh module.
[INLINE]
Figure 3
This ExtEntry has three visible tuples, though only two of them
contain values (you can see, that the third one is grayed out). To add
a new tuple to the ExtEntry, you have to press the button in the lower
right corner, just below the scroll bar. If the ExtEntry contains more
tuples than can be shown in it, you may scroll to the other tuples
with the scroll bar.
If you press the left mouse button on one of the scissors, a menu with
four elements will be displayed. These elements are used to cut, copy
and paste tuples within the ExtEntry.
If the tuples get very large, only one of them may be shown on the
screen at a time. An example of that is seen in figure 4.
When the tuples contain many widgets, scrolling the ExtEntry becomes
slow. In these cases, the ExtEntry may have a quick index. In figure
4, you can see the quick index at the top of the ExtEntry (it's the
button labeled Idx.) When this quick index is invoked, a pull-down
menu is display with the values of the element associated with the
quick index. This makes it much easier to scroll the ExtEntries.
[INLINE]
Figure 4[INLINE]
Figure 5
The FillOut widget
Every shell has a configuration option called Prompt. This option is
some text, which will be printed, when the shell is ready to execute a
new command. In this text special tokens may be inserted, and when the
prompt is printed, these tokens will be replaced, with some
information from the shell. Eg. in Bash \w will be expanded to the
current working directory.
In TDG, a special widget has been created called a FillOut, which does
configurations like the above. In Figure 5, you can see a FillOut
widget from the Bash module. At the top of the widget there is an
entry, where you can type ordinary text. Below it, the tokens are
placed. If you select one of the tokens, it is inserted in the entry
at the point of the cursor. Some of the tokens may even have some
additional configurations. Eg. the token Current working directory has
two possible options: Full directory, and only the last part. When
tokens with additional configurations are selected, a window will be
displayed, where these configurations can be done. If you wish to
change such a configuration, press the left mouse button on the token
in the entry.
The Command widgets
TDG can be extended by the module programmer through the Command
widget. This makes it possible to configure specific options with
widgets they have developed themseves. At the moment three such
widgets exist: The directory/file browser, the color widget and the
font widget.
The widgets will appear as a button within TDG, and when the button is
pressed a new window will be displayed, where the actual configuration
is done.
_________________________________________________________________
Save, Export and Reload
When you have configured the different options in TDG, you may wish to
leave it, and come back later, and change some of the configurations.
When you leave TDG, you may save your changes, which you do from the
File menu.
Next time you enter TDG, your saved file will be one of the the files
you will be offered as a start-up configuration.
One important point you have to note is that this save file is an
internal dump of the state of TDG. This means that this file dependson
the version of TDG and the module. This means that if you wish to send
a given configuration to another person, this format is not
appropriate. A version independent format exists, which is called the
export format. To create such a file, you have to select Export
instead of Save in the File menu.
Sometimes you may wish to restore the configuration on a single page,
to its value as it was before you started playing around with it, or
you may wish to merge another person's configuration with your own.
This is done by selecting Reload in the File menu. To tell TDG that
you only want to reload some of the pages, you have to select the
Detail button in the load window. This will bring up a window, where
you can select which configuration pages, you wish to reload. Here you
can also tell it how you want the pages to be reloaded. You have two
possibilities:
Overwrite
The pages you are loading, will totally overwrite the contents
of the file
Merge
Tuples in the ExtEntries will be appended to those which
already exist in the module. Other configurations will be
ignored in the file.
Here's another difference between the save-files and the export-files:
You cannot merge with save-files. This means that if you have a
save-file, which you wish to merge with, you first have to load it,
export it, and then you can merge with it.
_________________________________________________________________
The End
Additional information can be found on the home page for TDG.
It's always a good idea to have a bookmark on this page, as work is
currently in progress on new modules.
procmail
I have finished a module on procmail, a mail filter, which can
sort your incoming mail.
firewall configuration (ipfwadm)
John D. Hardin (jhardin@wolfenet.com) is working on a module
for configuring the fire walling and IP Masquerading setup for
standalone systems connected to the Internet via dialup. He
may, however, expand it to more general fire walling.
If you have some spare time, I would very much like to encourage you
to develop a module for your favorite program. On the home page of
TDG, there is a link to a document, which describe how to create a
module for TDG. Send me a letter, and I will be happy to help you get
started with it.
_________________________________________________________________
Jesper Kjær Pedersen <blackie@imada.ou.dk>
Last modified: Wed Feb 5 15:59:35 1997
_________________________________________________________________
Copyright © 1997, Jesper Pedersen
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Welcom to the Graphics Muse
Set your browser to the width of the line below for best viewing.
© 1997 by mjh
_________________________________________________________________
Button Bar muse:
1. v; to become absorbed in thought
2. n; [ fr. Any of the nine sister goddesses of learning and the arts
in Greek Mythology ]: a source of inspiration
W elcome to the Graphics Muse! Why a "muse"? Well, except for the
sisters aspect, the above definitions are pretty much the way I'd
describe my own interest in computer graphics: it keeps me deep in
thought and it is a daily source of inspiration.
[Graphics Mews] [Musings] [Resources]
indent T his column is dedicated to the use, creation, distribution,
and dissussion of computer graphics tools for Linux systems.
What a month. Actually, two months. Last month I was busily
working on putting together an entry for the IRTC using BMRT. At the
same time I was trying to teach myself enough about the RenderMan
Interface Specification to put together the second of three articles
on BMRT. I didn't succeed in the latter and ended up postponing the
article by one month. Because I did this I was able to focus more on
learning the interface and worry less about writing. I think this
strategy worked. The scene I rendered for this months IRTC is the best
I've ever done and I managed to gain enough experience to write a
meaningful article on the RenderMan Shading Langauge.
One of the reasons I enjoy doing this column is because it
exposes me to all sorts of people and software. The world of computer
graphics for Linux is constantly growing and the software constantly
improves. I hear about new products just about once or twice a week
now and I hear about updates to existing packages all the time. Its
very difficult to keep track of all the changes (and the fact that I
haven't made any updates to the Linux Graphics mini-Howto in some time
reflects this) but I enjoy the work.
Since things change so often I have found its never clear how
many announcements I'll have for any one month. Its gone from famine
to feast - with this month being the feast. Most of the announcements
in this months column are from April alone. I don't know what happened
- maybe all the bad weather around the globe kept people inside and
busily working and now that the suns out they're starting to let loose
what they've done. I only wish I had the time to examine everything,
to play with them all. But my employer would rather I finish my
current project first. Has something to do with keeping my salary, so
they say.
In this months column I'll only be covering two related items.
The first is a case study on learning to use BMRT. When you submit an
image in the IRTC you are required to submit an ASCII text file
describing your image and, to some extent, how you created it. Some
people don't put much work into this. I just about wrote a book. Since
the information I provided covered more than just BMRT I thought it
would be relavent to this column.
The second item is the long awaited (well, I waited a long time
to finish it anyway) 2nd article on BMRT that covers the RenderMan
Shading Language. I think this article came out quite good. I've
included quite a few samples and some general explanations on what
they do. I want to say right up front that I couldn't have done this
without lots of help from BMRT's author, Larry Gritz at Pixar. He was
a very willing teacher and critic who offered many tips and ideas for
my IRTC entry. Most of that also ended up in this article. Many
thanks, Larry.
I know I said I'd do an HF-Lab article this month too, but that
IRTC entry took more time than I expected. It was quite addicting,
trying to get things just right. I have started to review HF-Lab once
again and will make it my first priority for next months column. I've
already figured out how to use the output from HF-Lab to produce
height fields with BMRT. Its quite simple really. Anyway, I hope you
enjoy this months articles.
Note: I've been asked by a couple of readers about support for
3D hardware support in the various X servers. I'm going to contact the
X Server vendors (Xi Graphics, MetroLink, The XFree Project) as well
as Brian Paul (the MesaGL author) and see what they have to say. If
you are connected with these folks and have some insight I'd love to
hear what you have to say. Please email me if you know if such support
is forthcoming and I'll include it in an upcoming Graphics Muse
column.
Graphics Mews
Disclaimer: Before I get too far into this I should note that
any of the news items I post in this section are just that - news.
Either I happened to run across them via some mailing list I was on,
via some Usenet newsgroup, or via email from someone. I'm not
necessarily endorsing these products (some of which may be
commercial), I'm just letting you know I'd heard about them in the
past month.
indent
Frame grabber device driver for the ImageNation Cortex I video capture card
- Version 1.1
This adapter is an 512 by 486 resolution 8bit gray scale video
capture card. The device can provide data in pgm file format or raw
image data.
FTP site:
ftp://sunsite.unc.edu/pub/Linux/
apps/video/cortex.drv.1.1.tgz
Web Site:
http://www.cs.ubc.ca/spider/
jennings/cortex.drv.1.1.tgz indent indent
3DOM - a new 3D modeller project using OpenGL for Linux
3DOM is a 3D Modeler for Unix (using HP StarBase or OpenGL/Mesa)
that is free for non-commercial use. Source code is available.
Binaries for Linux/Intel, SGI, Sparc Solaris and HP-UX are also
availalbe.
It's not quite 'ready for prime-time', meaning there is almost no
documentation and there is still a lot of work to do on the user
interface. http://www.cs.kuleuven.ac.be/
cwis/research/graphics/3DOM/
indent
Pixcon/Anitroll R1.04
I found this in my /tmp directory while getting ready for this months
column. I couldn't find a reference to it in any other Muse columns so
I guess I must have just misplaced it while preparing for an earlier
issue. Hopefully, this isn't too out of date.
Pixcon & Anitroll is a freely available 3D rendering and animation
package, complete with source. Pixcon is a 3D renderer that creates
high quality images by using a combination of 11 rendering primitives.
Anitroll is a forward kinematic heirarchical based animation system
that has some support for some non-kinematic based animation (such as
flock of birds, and autonomous cameras). These tools are based upon
the Graph library which is full of those neat rendering and animation
algorithms that those 3D faqs keep mentioning. It also implements some
rendering techniques that were presented at Siggraph 96 by Ken
Musgrave and was used to generate an animation for Siggraph '95.
New features since version 1.03:
* elimination of a memory leak w/ the polygon class
* implemented a vector system for fast preview of frames
* reorganize rendering process to support future parallel processing
* 30-60 % reduction in rendering time and memory usage
The Pixcon & Anitroll home page is at:
http://www.radix.net/~dunbar/index.html
Comments can be emailed to dunbar@saltmine.radix.net Pixcon is
available either through the above web site or at Sunsite. It is
currently under: /pub/Linux/Incoming/pixcon104.tgz and will be moved
to: /pub/Linux/apps/graphics/pixcon104.tgz NOTE: there is a file
pixcon1.04.tgz in those directories, but it's corrupted. Be sure to
get the correct files.
indent
ELECTROGIG 3DGO
ELECTROGIG is a software company specialiced in 3D solid modeling,
visualization and animation software. The latest version of 3DGO
(version 3.2), a modeling animation and raytracing package, is now
available for the Intel Linux platform. A beta version is also
available for the MkLinux platform. Take a look at the benchmarks for
Linux on the intel platform:
http://www.gig.nl/products/prodbench.html.
3DGO was originally developed for the SGI platform and is
available for the SGI, SUN and HP platforms.
For more comprehensive information about 3DGO, check out the
WWW-site: http://www.gig.nl/products/prodinfo.html.
You can download a demo-version of 3DGO for linux, this version
has all functionality, except the save functions. Go to our download
area: ftp://ftp.gig.nl/demo/. Please Read the .txt files before
downloading.
ELECTROGIG Technology
INFO: info@gig.nl
indent
EZWGL v1.2, the EZ widget and graphics library.
EZWGL is a C library written on top of Xlib. It has been
developed on a Linux system and has been tested on the following
platforms: SunOS 4.1.4, OSF1 V3.2 Alpha, IRIX 5.3 Linux 1.2 and Linux
2.0.23. It should work on all Unices with X11R6. This release is the
first one that comes with a complete postscript manual.
For more information, check out http://www.ma.utexas.edu/~mzou/EZWGL.
indent
xfpovray v1.2b
A new release of xfpovray, the graphical interface to POV-Ray, has
been released by Robert S. Mallozzi. xfpovray v1.2b requires the
XForms library and supports most of the numerous options of POV-Ray.
You can view an image of the interface and get the source code from
http://cspar.uah.edu/~mallozzir/
There is a link there to the XForms home page if you don't yet have
this library installed. indent indent
libgr V2.0.12
A new version of libgr, version 2.0.12, is now available from
ftp.ctd.comsat.com:/
pub/linux/ELF/libgr-2.0.12.tar.gz.
Changes to this release:
* updated pbm, pgm, ppm, pnm from netpbm-94.
* All the netpbm-94 apps are now included. They are NOT built or
installed by default, however. You must say make everything, make
install_everything.
* Minor mods to compile with bash-2.0.
* Minor mods to compile with glibc-2.
libgr is a collection of graphics libraries, which includes fbm, jpeg,
pbm, pgm, ppm, pnm, png, tiff, rle.
libgr will build shared libs on Linux-ELF and on HP/UX.
indent
EPSCAN - scanner driver for EPSON ES-1200C/GT-9000 scanners
EPSCAN is a scanner driver for EPSON ES-1200C/GT-9000 scanners.
It includes a driver and a nice Qt-based X frontend. It allows
previewing, and selecting a region of an image to be scanned, as well
as changing scanner settings. It only supports scanners attached to a
SCSI port, not to the parallel port.
EPSCAN can be found at
ftp://sunsite.unc.edu/pub/Linux/Incoming/epscan-0.1.tar.gz.
RPM versions of the binary and source are available from
ftp://ftp.redhat.com/pub/Incoming/epscan-0.1-1.src.rpm
ftp://ftp.redhat.com/pub/Incoming/epscan-0.1-1.i386.rpm.
They're intended destinations are
ftp://ftp.redhat.com/pub/contrib/epscan-0.1-1.src.rpm
ftp://ftp.redhat.com/pub/contrib/epscan-0.1-1.i386.rpm. and
ftp://sunsite.unc.edu/pub/Linux/apps/graphics/scanners/epscan-0.1.tar.
gz
The driver should work for any of the ES-{300-800}C / GT-{1000-6500}
models as well, but has not been tested on these.
Requirements:
* Linux 2.x
* XFree3.x
* Qt library version >= 1.1
* libtiff version >= 3.4
* g++ version >= 2.7.2
Author: Adam P. Jenkins <ajenkins@cs.umass.edu>
indent
Inlab-Scheme Release 4
Inlab-Scheme Release 4 is now available for Linux/386 (2.X
kernel, ELF binary) and FreeBSD.
Inlab-Scheme is an independent implementation of the algorithmic
language Scheme as defined by the R4RS and the IEEE Standard 1178. In
addition to the language core Inlab-Scheme has support for
bitmap/greymap processing of several kinds. Inlab-Scheme can be used
as a general tool for image processing, OCR or specialized optical
object recognition.
Inlab-Scheme Release 4 reads and writes multipage tiff/G4, XBM
and PNG graphic file formats. Inlab-Scheme Release 4 has built in
converters for various patent image file formats (USAPat, PATENTIMAGES
and ESPACE).
Inlab-Scheme is distributed at
http://www.munich.net/inlab/scheme, where additional information about
the current state of the project, supported platforms, current license
fees and more is available. indent indent
The Linux Game SDK Project
The new WWW page for the Linux Game SDK is at
http://www.ultranet.com/~bjhall/GSDK/.
The Linux GSDK Project is a new project which aims to make a
consistent and easy to use set of libraries to ease game developers
(professional or not) to make first class games under the Linux OS.
The GSDK will provide libraries for 2D and 3D graphics, advanced
sound, networked games and input devices. It should also improve the
development of multimedia applications for Linux. See the Web site for
more informations.
The GSDK mailing list has moved from linux-gsdk@endirect.qc.ca
to linux-gsdk@mail.wustl.edu. Additionnal lists have been created for
the various teams.
indent
WebMagick Image Web Generator
WebMagick is a package which supports making image collections
available on the Web. It recurses through directory trees, building
HTML pages, imagemap files, and client-side/server-side maps to allow
the user to navigate through collections of thumbnail images (somewhat
similar to xv's Visual Schnauzer) and select the image to view with a
mouse click.
WebMagick is based on the "PerlMagick" ImageMagick PERL extension
rather than external ImageMagick utilities (as its predecessor
"Gifmap" is). This alone is good for at least a 40% performance
increase on small images. WebMagick supports smart caching of
thumbnails to speed montage generation on average size images. After a
first pass at "normal" speed, successive passes (upon adding or
deleting images) are 5X to 10X faster due to the caching.
WebMagick supports a very important new feature in its caching
subsystem: it can create and share a thumbnail cache with John
Bradley's 'xv' program. This means that if you tell 'xv' to do an
update, WebMagick montages will benefit and you can run WebMagick as a
batch job to update xv's thumbnails without having to wait for 'xv' to
do its thumbnail reduction (and get a browsable web besides!).
WebMagick requires the ImageMagick (3.8.4 or later) and PerlMagick
(1.0 or later) packages as well as a recent version of PERL 5.
Primary-site:
http://www.cyberramp.net/~bfriesen/webmagick/dist/webmagick-1.17.tar.g
z
Alternate-site:
ftp.wizards.dupont.com/pub/ImageMagick/perl/webmagick-1.17.tar.gz
Perl Language Home Page: http://www.perl.com/perl/index.html
ImageMagick: http://www.wizards.dupont.com/cristy/ImageMagick.html
PerlMagick: http://www.wizards.dupont.com/cristy/www/perl.html
Author: Bob Friesenhahn (bfriesen@simple.dallas.tx.us)
indent
SIMLIB IG - Commercial library
SIMLIB IG a C library which enables communication with Evans &
Sutherland graphics Supercomputers (so called image generators). It
enables the user to communicate with Evans & Sutherland image
generators (Liberty and ESIG Systems) using a very efficient raw
Ethernet protocol. There is no need for using opcodes, since SIMLIB IG
provides an API to the functionality of the image generators.
Documentation comes printed in English, and source code examples
are provided on the distribution media. The software is also available
for SGI and NT systems.
SIMLIB IG for Linux is $2500 (US)
SIMLIB IG for all other OS is $5000 (US)
KNIENIEDER Simulationstechnik KG (office@knienieder.co.at)
Technologiezentrum Innsbruck
AUSTRIA/EUROPE indent indent
mtekscan - Linux driver for MicroTek ScanMaker SCSI scanners
mtekscan is a Linux driver for MicroTek ScanMaker (and compatible)
SCSI scanners. Originally developed for the ScanMaker E6, it is (so
far) known to also work with the ScanMaker II/IIXE/IIHR/III/E3/35t
models, as well as with the Adara ImageStar I, Genius ColorPage-SP2
and Primax Deskscan Color.
The new version of mtekscan is v0.2. It's still in beta testing,
but all major options should work without problems. Besides some small
bugfixes and minor improvements, the new version contains a couple of
new features, most notably:
* 3-pass scanning support
* gamma correction
* loadable gamma correction tables
* better documentation
mtekscan v0.2 is available as mtekscan-0.2.tar.gz from the Fast
Forward ftp-server:
ftp://fb4-1112.uni-muenster.de/pub/ffwd/
or from sunsite:
ftp://sunsite.unc.edu/
pub/Linux/apps/graphics/scanners/
indent
PNG binaries for Netpbm tools now available
Linux binaries for pnmtopng, pngtopnm, and gif2png are available at:
http://www.universe.digex.net/~dave/files/pngstuff.tgz If you have
trouble dowloading that, see
http://www.universe.digex.net/~dave/files/index.html for helpful
instructions.
PNG is the image format that renders GIF obsolete. For details on
that, you can visit the PNG home page at: http://www.wco.com/~png/.
The only shared libraries you need are libc and libm; all of the
others are linked statically. The versions of libraries used to build
the programs are those that were publicly available as of 1997-04-06:
* pnmtopng-2.34
* gif2png 0.6 (beta)
* zlib-1.0.4 (statically linked)
* libpng-0.90 (statically linked)
* netpbm-1mar1994 (statically linked)
indent
TN-Image Version 2.5.0
TN-Image is:
* Scientific image analysis program for the X Window System.
* Mouse & menu-based image editing and scientific analysis with
user-friendly user interface.
* Freely distributable.
It includes a 123-page manual, tutorials, and on-line help. The Unix
version is highly customizable with regard to fonts, colors, etc.
System requirements
* Unix version requires X11R5 or higher and Motif 1.2 or higher.
Statically-linked version does not require Motif.
* Binaries are provided for the Linux (x86), Solaris, Irix,
ConvexOS, and MS-DOS.
* DOS version requires SVGA card and 4 MB of RAM; handles all VESA
screen modes including 1600x1200, as well as XGA and XGA-2 video
cards.
Some features of TN-Image
* Scanner interface for H/P SCSI scanners with preview scan and
interactive image scanning at 8, 10, 12, 24, 30, and 36 bits/pixel
(Not available in ConvexOS and MS-DOS versions).
* Create, cut/paste, and add text labels in multiple fonts and
graphic elements such as circles, Bezier curves, freehand drawing,
etc.
* Handles up to 512 images of any depth simultaneously. Each image
can be in a separate window or in a single large window to
facilitate creation of composite images. Cut/paste works even if
images are of different depths or in different windows.
* Prints to PCL or PostScript printer. CMY, CMYK, or RGB formats.
* Import/export formats: PCX, IMG, TIF (both Macintosh and PC),
JPEG, BMP, GIF, TGA, IMG, Lumisys Xray scanner, and ASCII images,
of any depth from 1-32 bits per pixel, color or monochrome, raw
binary images, 3D images (such as PET scan and confocal images),
and user-definable image formats. Handles unusual image depths
such as 12- and 17-bit grayscale.
* Interconversion of image formats.
* Solid and gradient flood fill.
* R, G, and B image planes can be manipulated separately.
* Adjust color, intensity, contrast, and grayscale mapping.
Grayscale images deeper than 8 bits/pixel, such as medical
grayscale images, can be viewed with a sliding scale to enhance
any particular intensity region.
* Rotate, resize, warp, flip, invert or remap colors; crop, paint,
spray paint, etc.
* Convolution filters: sharpen, blur, edge enhancement, shadow
sharpening, background subtract, background flatten, and noise
filter.
* Interactively create arbitrary colormaps or select from 10,000
pre-defined colormaps.
* Macro language and macro editor. Macro programming guide is
included.
* Image algebra function allows multiple images to be subtracted or
otherwise transformed according to arbitrary user-defined
equations.
* RGB & intensity histograms.
* 3D images can be viewed interactively as a movie, or each frame
can be manipulated separately.
* Many advanced features
Contact and archive information:
Contact: tjnelson@las1.ninds.nih.gov
Archive locations
sunsite.unc.edu:/apps/graphics/tnimage250.linux.tar.gz
sunsite.unc.edu:/apps/graphics/tnimage250.linux-static.tar.gz
las1.ninds.nih.gov:/pub/unix/tnimage250.linux.tar.gz
las1.ninds.nih.gov:/pub/unix/tnimage250.linux-static.tar.gz
las1.ninds.nih.gov:/pub/unix/tnimage250.solaris.tar.gz
las1.ninds.nih.gov:/pub/unix/tnimage250.irix.tar.gz
las1.ninds.nih.gov:/pub/unix/tnimage250.solaris.tar.gz
las1.ninds.nih.gov:/pub/dos/tnimg216.zip
indent
indent
indent
Did You Know?
...that there is a converter available to turn POV-Ray
heightfields into RenderMan compliant RIB files for use with BMRT?
Florian Hars writes:
I've worked on my code, now it uses libpgm and has all the
necessary vector routines included, it is on my page (with some
comparisions of rendering time and memory consumption):
http://www.math.uni-hamburg.de/home/hars/rman/height.html
Florian also has some pages of general POV vs. RenderMan comparisons:
http://www.math.uni-hamburg.de/home/hars/rman/rm_vs_pov.html
...that there is a freely available RenderMan shader library
from Guido Quaroni? The library contains shaders from the RenderMan
Companion, Pixar, Larry Gritz and a number of other places. You can
find a link to it from the BMRT Web pages at
http://www.seas.gwu.edu/student/gritz/bmrt.html.
...that there is an FTP site at CalTech that contains a large
number of RenderMan shaders? The collection is similar to Guido
Quaroni's archive, except the FTP site includes sample RIB files that
use the shaders plus the rendered RIBs in both GIF and TIFF formats.
The site is located at ftp://pete.cs.caltech.edu/pub/RMR/Shaders/.
Q and A
Q: Where can I get a copy of the netscape color cube for use with
Netpbm? How should it be used?
A: The color cube can be found at the web site for the text Creating
Killer Websites at
http://www.killersites.com/images/color_cube_colors.gif. The cube can
be used in the following manner:
% giftopnm color_cube_colors.gif" > color_cube.ppm
% tgatoppm image.tga | ppmquant -m color_cube.ppm -fs | \
ppmtogif -interlace -transparent rgb:ff/ff/ff > image.gif where
ff/ff/ff is any set of Red, Green, and Blue values to make
transparent.
Q: Where can I get models of the human figure?
A: Here are two addresses for human figure models. The first is
3DCafe's official disclaimer and the second takes you straight to the
human figures. Please read the disclaimer first (although you may need
an asp capable browser, such as Netscape 3.x to do so):
http://www.3dcafe.com/meshes.htm
http://www.3dcafe.com/anatomy.htm
From the IRTC-L mailing list
Q: Is there a VRML 2.0 compliant browser available for Linux?
A: Yes. Dimension X's Liquid Reality is a fully compliant VRML 2.0
browser. The download web page says that there will be support as a
plug-in for Netscape 3.x soon. This is a commercial product with a
free trial version available for download. See
http://www.dimensionx.com/products/lr/download/ for more details.
From a friendly reader, whose name I absent mindedly discarded before
recording it. My apologies.
Q: Can anyone tell me how I would go about defining a height field
according to a specific set of data points? My goal is to be able to
take a topographic map, overlay it with a rough grid, and use the
latitude, longitude, and elevation markings as points in a definable
3-D space to create a height field roughly equal to real topography.
A: The easiest way is probably to write a PGM file. I wouldn't use
longitude and latidude because the length of one degree isn't fixed
and it will give reasonable results only near the equator. Use UTM
coordinates or superimpose any arbitrary grid on your map which
represents approximate squares.
P2
# kilimajaro.pgm
15 10
59
10 15 18 20 21 22 23 23 21 20 19 18 17 16 15
11 15 19 22 27 30 30 30 29 28 25 20 19 18 17
13 15 19 21 28 38 36 40 40 35 30 24 20 19 18
15 16 18 20 29 39 37 44 59 44 38 30 22 19 18
15 16 18 20 28 30 30 40 50 46 51 48 28 20 19
15 15 16 17 18 19 20 24 30 35 37 37 30 20 19
15 15 14 15 16 17 18 19 22 29 30 29 27 20 19
15 15 14 13 15 16 15 17 18 20 22 20 20 20 18
15 14 13 11 12 12 12 13 14 15 17 15 15 15 14
14 11 10 9 9 10 10 10 9 10 13 12 11 11 11
Use it with scale to get an to-scale image and with a larger y-scale
if you want to see something. The earth is incredibly flat.
From Florian Hars via the IRTC-L mailing list
Q: I've been fiddling with some simple CSG using BMRT and have run
into a problem. I'm trying to cut a square out of a plane that was
created from a simple bilinear patch. Whatever I use to define the
square (a box actually) comes out white instead of the background
color (black in this case). I dont know what I'm doing wrong and was
wondering if someone might take a peek at this for me.
A: There are several problems with your RIB file, as well as your use
of CSG. The two biggies are:
You just can't do this:
ObjectBegin 2
SolidBegin "primitive"
TransformBegin
Translate -1 0 0
Rotate -90 0 1 0
Patch "bilinear" "P"
[ -1 -1 0 1 -1 0
-1 1 0 1 1 0 ]
TransformEnd
... etc.
ObjectEnd
Transformations just aren't allowed inside object definitions.
Remember that object instances inherit the entire graphics state
that's active when they are instanced -- including transformations. So
all primitives within the instanced object get the very same
transformation. If they're all bilinears like you have them, that
means that they will all end up on top of one another.
For this reason and others, I urge everybody to not use instanced
objects at all for any RenderMan compliant renderer. They're quite
useless as described in the RenderMan 3.1 spec. Yes, I know that
RenderMan Companion has an example that does exactly what I said is
illegal. The example is wrong, and will not work with either PRMan or
BMRT.
Solid (CSG) operations are meant only to operate on solids. A
solid is a boundary representation which divides space into three
distinct loci: (a) the boundary itself, which has finite surface area,
(b) a (possibly disconnected) region of finite volume (the "inside"),
and (c) a connected region of infinite volume (the "outside"). You
can't subtract a box from a bilinear patch, since a bilinear patch
isn't a solid to begin with.
If you want a flat surface with a square hole, there are two
methods that I'd recommend: (a) simply use several bilinears (4 to be
exact) for the surface, like this:
+-----------------------+
| #1 |
| |
+======+---------+======+
| | | |
| #2 | (hole) | #3 |
| | | |
+======+---------+======+
| #4 |
| |
+-----------------------+
Or, (B) if you really want to be fancy, use a single flat order 2
NURBS patch with an order 2 trim curve to cut out a hole.
From Larry Gritz <lg@pixar.com>
indent
indent
indent
Musings
Correcting for display gamma
Gamma Correction Scale This past 2 months I've been hard at work
on an entry for this round of the IRTC, the Internet Ray Tracing
Competition. In previous rounds I had submitted entries using POV-Ray,
but for this round I switched to BMRT, mostly so I could learn the
RenderMan API and how to write shaders using the RenderMan shading
language. This months main article is the second of a three part
series on BMRT. The BMRT package is written by Larry Gritz, and Larry
was gracious enough to offer some wonderful critiques and tips on my
image.
During out email correspondence, Larry noticed I had overlit my
scenes quite badly. While we tried to figure out what was causing this
(it turned out to be a misuse of some parameters to some spotlights I
was using) he asked if I had gamma corrected for my display. Gamma
correction is a big issue in computer graphics, one that is often
overlooked by novices. I'd heard and read quite a bit about gamma
correction but had never really attempted to determine how to adjust
the gamma for my display. Larry offered an explanation, a quick way to
test the gamma on my system, and a tip for adjusting for gamma
correction directly in the BMRT renderer, rendrib. I thought this
would be a great thing to share with my readers, so here it is.
Rendrib produces linear pixels for its output -- i.e. a pixel with
value 200 represents twice as much light as a pixel of value 100.
Thus, it's expected that your display will be twice as bright
(photometrically, not necessarily perceptually) on a pixel of 200 than
one of 100.
This sort of display only really happens if you correct for gamma,
the nonlinearity of your monitor. In order to check this, take a look
at the following chart. Display the chart as you'd view any image.
You'll notice that if you squint, the apparent brightness of the left
side will match some particular number on the right. This is your
gamma correction factor that must be applied to the image to get
linear response on your particular monitor.
If your display program uses Mesa (as rendrib's framebuffer
display does), you can set an environment variable, MESA_GAMMA, to
this value and it will transparently do the correction as it writes
pixels to the screen. Most display programs let you correct gamma when
you view an image, though I've had trouble getting xv to do it without
messing up the colors in a weird way.
Another alternative is to put the following line in your RIB file:
Exposure 1 &ltgamma>
indent indent indent
More Musings...
My Entry in the March/April IRTC - a case study in learning to use
RenderMan and BMRT
BMRT Part 2 - The RenderMan Shading Language
indent
where gamma was what you measured with the chart. This will cause
rendrib to pre-correct the output pixels for the gamma of your
display. I think it's important to gamma correct so that at least
you're viewing the images the way that rendrib "expects" them to
appear. It can't know about the nonlinearities of your CRT without you
telling it.
Larry has more on the gamma issue on his own pages. You can find
it at http://www.seas.gwu.edu/student/gritz/gamma.html. He also asked
me to mention that he got this chart from Greg Ward, but we didn't
have any contact information for him. Hopefully he doesn't mind our
using it. Readers should note that the image displayed in this
article may not provide accurate information for adjusting gamma since
your browser may dither the colors in a way which changes what the
actual value should be. Also, this image is a JPEG version of the
original TIFF image Larry supplied. Its possible the conversion also
changed the image. If you're interested in trying this out you should
grab the original TIFF image (300x832).
Resources
The following links are just starting points for finding more
information about computer graphics and multimedia in general for
Linux systems. If you have some application specific information for
me, I'll add them to my other pages or you can contact the maintainer
of some other web site. I'll consider adding other general references
here, but application or site specific information needs to go into
one of the following general references and not listed here.
Linux Graphics mini-Howto
Unix Graphics Utilities
Linux Multimedia Page
Some of the Mailing Lists and Newsgroups I keep an eye on and where I
get alot of the information in this column:
The Gimp User and Gimp Developer Mailing Lists.
The IRTC-L discussion list
comp.graphics.rendering.raytracing
comp.graphics.rendering.renderman
comp.os.linux.announce
Future Directions
Next month:
* HF-Lab - no really, I mean it this time.
* Possibly a review of Image Alchemy
* A preview of Gimp 1.0 (unless its already released, in which case
it won't be a preview)
* If I can find the info, I'll report on the future of 3D hardware
support from Xi Graphics, Metro and The XFree Project.
* and who knows what else.
Let me know what you'd like to hear about!
_________________________________________________________________
_________________________________________________________________
Copyright © 1997, Michael J. Hammel
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
More...
Musings
* My Entry in the March/April IRTC - a case study in learning to use
RenderMan and BMRT
indent
© 1997 Michael J. Hammel
indent
My Entry in the March/April IRTC - a case study in learning to use RenderMan
and BMRT
One reason I took so long to get down to writing the Muse column
this month was that I was hard at work on an entry in the IRTC, the
Internet Relay Tracing Competition, which I help administer. I've been
an active participant in the IRTC since its restart back in May 1996
but have only actually entered one competition. So this round had a
special meaning for me. I don't often have the time to work on entries
unless something else suffers. In this case, it was last months Muse
column. To be honest, however, I was also using this entry to learn
more about RenderMan, BMRT and in particular, the RenderMan Shading
Language. Nothing is quite such a a teacher as experience. And my
entry in the IRTC was a wonderful teacher.
Below I've included the text file which accompanies my entry in
the IRTC. All entries must have this file. It describes the
who/what/how and so forth relating to an entry. I'll let the text file
describe what I did, who helped me do it, and some of the issues I
encountered. I hope you find this useful information.
EMAIL: mjhammel@csn.net
NAME: Michael J. Hammel
TOPIC: school
TITLE: Post Detention
RENDERER USED: BMRT
TOOLS USED: Linux, AC3D, BMRT, Gimp 0.99.8, wc2pov, xcalc, xv
RENDER TIME: about 4 hours
HARDWARE USED: Cyrix P166 (133Mhz) based Linux system, 64M memory Post
Detention - thumbnail
Post Detention - Full size image is 800x600 / 102k IMAGE DESCRIPTION:
Pretty simplistic, really. Its a school room, just after
detention has let out. You can tell that detention has let out by the
writing on the chalk board and the time displayed by the clock on the
wall. The sun is starting to get low outside, which causes the types
of shadows you can see on the bookshelf. All the students who were in
detention are required to read the latest New York Times bestseller
titled "Post Detention". Its written by some author who is rumored to
do 3D graphics on the side. You can see the book on the desk in the
lower right corner of the image.
DESCRIPTION OF HOW THIS IMAGE WAS CREATED:
I used this image to learn to use RenderMan and BMRT. I find I
like these tools a bit better than POV-Ray, mostly because I can write
C code to create models if I want (although I didn't for this
particular scene) and the shader language allows a bit more control
than POV's. I still have much to learn to make real use of these
features, however.
I started with some canned models from 3DCafe: a chair, a couple
of bookcases, and some books. I had to convert the chair from 3DS to
DXF so I could then import it into AC3D. Once I had it in the modeler,
I broke the chair into two pieces - the arm and the rest of the chair.
I did this so I could texture them seperately (note that in the 3DS
format these pieces may have already been seperate, but after the
conversion to DXF they were a single entity). I also sized the chair
to be a common unit size and centered it on the origin. This unit size
was used on all models so that the real sizing and positioning could
be done in the RIB file.
The book case only needed resizing but the books had to be
broken into a cover and "text pages". The latter are a single entity
that were textured with a matte finish. The covers were textured
individually. All the books are basically the same book sized
differently and placed in the bookcase from within AC3D. This provided
relative positioning for the books in the bookcase, after which any
other translations would maintain that relative positioning. Books on
the chairs or floor were done similarly.
The walls are simple polygons or bilinear patches. The windowed
wall turned out to show problems in the way AC3D does polygons for RIB
output. I had to convert this wall from polygons to a set of bilinear
patches (see the May issue of the Graphics Muse for how to make a hole
in a wall using bilinear patches) in order for the texture to be
applied evenly over all of the patches. This problem also showed up
when trying to apply texture maps to the chalk board. It apparently
has to do with vertex ordering. I had to change the chalkboard to a
bilinear patch too. I may have to write my own models for anything
that uses texture maps in the future instead of using AC3D. To his
credit, I haven't told Andy (AC3D's author) about this yet and he's
been very good about addressing any problems I've found in the past.
An important aspect of this image is the tremendous help I got
from Larry Gritz, the author of BMRT. He offered some special shaders,
although I only used one of them (the one for the ceiling tiles). The
biggest help was very constructive criticism and tips for things too
look for in my code. For example, he pointed out that I was probably
using the parameters to spotlights incorrectly. I was, and it was
causing my scene to be very overlit (spotlights use coneangle in
radians, and I had specified them in degrees). This one change made a
dramatic improvement in the overall image.
All the shaders used, except for the ceiling tiles and the
papers on the desks, are from the archive of shaders from Guido
Quaroni. This archive includes shaders from the RenderMan Companion by
Steve Upstill, from Texturing and Modeling by Ebert, Musgrave, et al,
Larry Gritz, and various other places. Its quite a useful resource for
novices just getting started with shaders and RenderMan. The papers on
the desks are textured with a shader I wrote that creates the
horizonatl and vertical lines. It also puts in 3 hole punches, but
thats not obvious from the image. This shader is the only one I
included in the source [Ed. The IRTC allows the source code for scenes
to be uploaded along with the JPEG images and text file]. The chairs
are textured with a rusty metallic shader and a displacement shader
for the dents. Displacement shaders are cool because they actually
move points on the surface (unlike bump maps which just change the
normals for those points). The arm surfaces are textured with a wood
shader that I made a minor change to (to allow better control of the
direction of the wood grain) and a displacement shader that caused the
bumpiness, scratches, and chips in the wood. This latter item could
have been better, but I was running out of time.
The chalkboard is an image map created in the 0.99.8 developers
release of the Gimp. This is a very cool tool for Linux and Unix
platforms, very similar to Photoshop (but apparently better, according
to people who've used both - I've never used Photoshop myself).
The image out the window is an image map on a simple plane
angled away from the window. The window panes are dented using a
displacement map. We had windows with bumps in them in High School and
thats the effect I was going for here. Its pretty close and as an
added benefit it prevents the image outside the window from being too
washed out.
The globe on the book shelf is one of those ones that is
suspended by magnets. The globe has a displacement map on it as well,
which is why, if you look real close, the lighting on it is not smooth
where it moves into shadow. The globe and its base were completely
modeled in AC3D. It was quick and very easy to do. All the items on
the booksshelf by the window are in a single model file, but exported
as individual objects so they could be shaded properly. The same is
true for the bookcase under the clock.
It was fun. This is certainly the best 3D image I've done to
date. Its also the first one of something recognizable (as opposed to
space ships and planets no one has ever really seen).
NOTE: One thing I forgot to mention in my original text file for
my entry is that I had to edit all the exported RIB files that I
created with AC3D to remove the bits of RIB that made each file an
independently renderable file. By default AC3D generates a complete
scene, one that can be passed to rendrib (the BMRT renderer) directly
to render a scene. But what I needed was for the files generated to be
only partially complete scenes, without the camera or lighting and so
forth. In this way I could use these files in RIB ReadArchive
statements, similar to #include files for POV. Considering the number
of objects I exported with AC3D, that turned out to be quite a bit of
hand editing. I sent email to Andy Colebourne, the author of AC3D, and
he's looking into making it possible to output partial RIBs for use as
ReadArchive include files.
indent
© 1997 by Michael J. Hammel
More...
Musings
BMRT
Gritz Sample 1
Image courtesy of Larry Gritz
Part II: Renderman Shaders
A quick review
What is a shader?
Compiling shaders
Types of shaders
Shader language syntax
a. Shader names
b. Variables and scope
c. Data types and expressions
d. Functions
e. Statements
f. Coordinate systems
Format of a shader file
A word about texture maps
Working examples
a. Colored Mesh pattern
b. Adding opacity - a wireframe shader
c. A simple paper shader
d. A texture mapped chalk board
e. Displacement map example
indent
© 1996 Michael J. Hammel
indent
1. A quick review
Before we get started on shaders, lets take a quick look
back at RIB files. RIB files are ASCII text files which describe a
3D scene to a RenderMan compliant renderer such as BMRT. A RIB
file contains descriptions of objects - their size, position in 3D
space, the lights that illuminate them and so forth. Objects have
surfaces that can be colored and textured, allowing for
reflectivity, opacity (or conversely, transparency), bumpiness,
and various other aspects.
An object is instanced inside AttributeBegin/AttributeEnd
requests (or procedures in the C binding). This instancing causes
the current graphics state to be saved so that any changes made to
the graphics state (via the coloring and texturing of the object
instance) inside the AttributeBegin/AttributeEnd request will not
affect future objects. The current graphics state can be modified,
and objects colored and textured, with special procedures called
shaders.
Note: Keep in mind that this is not a full fledged tutorial
and I won't be covering every aspect of shaders use and design.
Detailed information can be found in the texts listed in the
bibliography at the end of this article.
2. What is a shader?
In the past, I've often used the terms shading and texturing
interchangeably. Darwyn Peachy, in his Building Procedural
Textures chapter in the text Texturing and Modeling: A Procedural
Approach, says that these two concepts are actually separate
processes:
Shading is the process of calculating the color of a pixel from
user-specified surface properties and the shading model. Texturing
is a method of varying the surface properties from point to point
in order to give the appearance of surface detail that is not
actually present in the geometry of the surface. [1]
A shader is a procedure called by the renderer to apply colors and
textures to an object. This can include the surface of objects
like block or spheres, the internal space of a solid object, or
even the space between objects (the atmosphere). Although based on
Peachy's description would imply that shaders only affect the
coloring of surfaces (or atmosphere, etc), shaders handle both
shading and texturing in the RenderMan environment.
3. Compiling shaders
RIB files use filenames with a suffix of ".rib". Similarly,
shader files use the suffix ".sl" for the shader source code.
Unlike RIB files, however, shader files cannot be used by the
renderer directly in their source format. They must be compiled by
a shader compiler. In the BMRT package the shader compiler is
called slc.
Compiling shaders is fairly straightforward - simply use the
slc program and provide the name of the shader source file. For
example, if you have a shader source file named myshader.sl you
would compile it with the following command: slc myshader.sl
You must provide the ".sl" suffix - the shader source file cannot
be specified using the base portion of the filename alone. When
the compiler has finished it will have created the compiled shader
in a file named myshader.so in the current directory. A quick
examination of this file shows it to be an ASCII text file as
well, but the format is specific for the renderer in order for it
to implement its graphics state stack. Note: the filename
extension of ".so" used by BMRT (which is different than the one
used by PRMan) does not signify a binary object file, like shared
library object files. The file is an ASCII text file. Larry says
he's considering changing to a different extension in the future
to avoid confusion with shared object files.
Note that in the RIB file (or similarly when using the C
binding) the call to the shader procedure is done in the following
manner:
AttributeBegin
Color [0.9 0.6 0.6]
Surface "myshader"
ReadArchive "object.rib"
AttributeEnd
This example uses a surface shader (we'll talk about shader types in a
moment). The name in double quotes is the name of the shader
procedure which is not necessarily the name of the shader source
file. Since shaders are procedures they have procedure names. In
the above example the procedure name is myshader. This happens to
the be same as the base portion (without the suffix) of the shader
source filename. The shader compiler doesn't concern itself with
the name of the source file, however, other than to know which
file to compile. The output filename used for the .so file is the
name of the procedure. So if you name your procedure differently
than the source file you'll get a differently named compiled .so
file. Although this isn't necessarily bad, it does make it a
little hard to keep track of your shaders. In any case, the name
of the procedure is the name used in the RIB (or C binding) when
calling the shader. In the above example, "myshader" is the name
of the procedure, not the name of the source file.
4. Types of shaders
According to the RenderMan Companion [2]
The RenderMan Interface specifies six types of shaders,
distinguished by the inputs they use and the kinds of output they
produce.
The text then goes on to describe the following shader types:
1. Light source shaders
2. Surface shaders
3. Volume shaders
4. Displacement shaders
5. Transformation shaders
6. Imager shaders
Most of these can only have one instance of the shader type in the
graphics state at any one time. For example, there can only be one
surface shader in use for any object or objects at a time. The
exception to this are light shaders, which may have many instances
at any one time, some of which may not be actually turned on for
some objects.
Light Source Shaders
Light sources in the RenderMan Shading Language are provided
a position and direction and return the color of the light
originating from that light and striking the current surface
point. The RenderMan specification provides for a set of default
light shaders that are very useful and probably cover the most
common lighting configurations an average user might encounter.
These default shaders include ambient light (the same amount of
light thrown in all directions), distant lights (such as the Sun),
point lights, spot lights, and area lights. All light sources have
an intensity that defines how bright the light shines. Lights can
be made to cast shadows or not cast shadows. The more lights that
cast shadows you have in a scene the longer it is likely to take
to render the final image. During scene design and testing its
often advantagous to keep shadows turned off for most lights. When
the scene is ready for its final rendering turn the shadows back
on.
Ambient light can be used to brighten up a generally dark
image but the effect is "fake" and can cause an image to be washed
out, losing its realism. Ambient light should be kept small for
any scene, say with an intensity of no more than 0.03. Distant
lights provide a light that shines in one direction with all rays
being parallel. The Sun is the most common example of a distant
light source. Stars are also considered distant lights. If a scene
is to be lit by sunlight it is often considered a good idea to
have distant lights be the only lights to cast shadows. Distant
lights do not have position, only direction.
Spot lights are the familiar lights which sit at a
particular location in space and shine in one generalized
direction covering an area specified by a cone whose tip is the
spot light. A spot lights intensity falls off exponentially with
the angle from the centerline of the cone. The angle is specified
in radians, not degress as with POV-Ray. Specifying the angle in
degrees can have the effect of severly over lighting the area
covered by the spot light. Point lights also fall off in
intensity, but do so with distance from the lights location. A
point light shines in all directions at once so does not contain
direction but does have position.
Area lights are series of point lights that take on the
shape of an object to which they are attached. In this way a the
harshness of the shadows cast by a point light can be lessened by
creating a larger surface of emitted light. I was not able to
learn much about area lights so can't really go into detail on how
to use them here.
Most light source shaders use one of two illumination
functions: illuminate() and solar(). Both provides ways of
integrating light sources on a surface over a finite cone.
illuminate() allows for the specification of position for the
light source, while solar() is used for light sources that are
considered very distant, like the Sun or stars. I consider the
writing of light source shaders to be a bit of an advanced topic
since the use of the default light source shaders should be
sufficient for the novice user to which this article is aimed.
Readers should consult The RenderMan Companion and The RenderMan
Specification for details on the use of the default shaders.
Surface Shaders
Surface shaders are one of the two types of shaders novice
users will make use of most often (the other is displacement
shaders). Surface shaders are used to determine the color of light
reflected by a given surface point in a particular direction.
Surface shaders are used to create wood grains or the colors of an
eyeball. They also define the opacity of a surface, ie the amount
of light that can pass through a point (the points transparency).
A point that is totally opaque allows no light to pass through it,
while a point that is completely transparent reflects no light.
The majority of the examples which follow will cover surface
shaders. One will be a displacement shader.
Volume Shaders
A volume shader affects light traveling to towards the
camera as it passes though and around objects in a scene. Interior
volume shaders determine the effect on the light as it passes
through an object. Exterior volume shaders affect the light in the
"empty space" around an object. Atmospheric shaders handle the
space between objects. Exterior and interior volume shaders differ
from atmospheric shaders in that the latter operate on all rays
originating from the camera (remember that ray tracing traces the
lights ray in reverse from nature - from camera to light source).
Exterior and interior shaders work only on secondary rays, those
rays spawned by the trace() function in shaders. Atmospheric
shaders are used for things like fog and mist. Volume shaders are
a slightly more advanced topic which I'll try to cover in a future
article.
Displacement Shaders
The texture of an object can vary in many ways, from very
smooth to very bumpy, from smooth bumps to jagged edges. With
ordinary surface shaders a texture can be simulated with the use
of a bump map. Bump maps perturb the normal of a point on the
surface of an object so that the point appears to be raised,
lowered, or otherwised moved from its real location. A bump map
describes the variations in a surfaces orientation. Unfortunately,
this is only a trick and the surface point is not really moved.
For some surfaces this trick works well when viewed from the
proper angle. But when seen edge on the surface variations
disapper - the edge is smooth. A common example is an orange. With
a bump map applied the orange appears to be pitted over its
surface. The edge of the sphere, however, is smooth and the
pitting effect is lost. This is where displacement shaders come
in.
In The RenderMan Interface Specification[3] it says
The displacement shader environment is very similar to a surface
shader, except that it only has access to the geometric surface
parameters. [A displacement shader] computes a new P [point] and/or
a new N [normal for that point].
A displacement shader operates across a surface, modifying the
physical location of each point. These modifications are generally
minor and of a type that would be much more difficult (and
computationally expensive) to specify individually. It might be
difficult to appreciate this feature until you've seen what it can
do. Plate 9 in [4] shows an ordinary cylinder modified with the
threads() displacement shader to create the threads on the base of
a lightbulb. Figures 1-3 shows a similar (but less sophisticated)
example. Without the use of the displacement shader, each thread
would have to be made with one ore more individual objects. Even
if the computational expense for the added objects were small, the
effort required to model these objects correctly would still be
significant. Displacement shaders offer procedural control over
the shape of an object.
Ordinary cylinder Ordinary cylinder with Normals modified Cylinder
with true displacments
An ordinary cylinder
Same cylinder with modified normals
Note that in this case the renderer attributes have not been
turned on. The edges of the cylinder are flat, despite the
apparent non-flat surface. Same cylinder with true displacements
In this image the renderer attributes have been turned on. The
edges of the cylinder reflect the new shape of the cylinder.
Figure 1 Figure 2 Figure 3
An important point to remember when using displacement
shaders with BMRT is that, by default, displacements are not
turned on. Even if a displacement shader is called the points on
the surface only have their normals modified by the shader. In
order to do the "true displacement", two renderer attribute
options must be set:
Attribute "render" "truedisplacement" 1
Attribute "displacementbound" "coordinatesystem"
"object" "sphere" 2
The first of these turns on the true displacement attribute so that
displacement shaders actually modify the position of a point on
the surface. The second specifies how much the bounding box around
the object should grow in order to enclose the modified points.
How this works is that the attribute tells the renderer how much
the bounding box is likely to grow in object space. The renderer
can't no before hand how much a shader might modify a surface, so
this statement provides a maximum to help the renderer with
bounding boxes around displacement mapped objects. Remember that
bounding boxes are used help speed up ray-object hit tests by the
renderer. Note that you can compute the possible change caused by
the displacement in some other space, such as world or camera. Use
whatever is convenient. The "sphere" tag lets the renderer know
that the bounding box will grow in all directions evenly.
Currently BMRT only supports growth in this manner, so no other
values should be used here.
Transformation and Imager Shaders
BMRT doesn't support Transformation Shaders (neither does
Pixar's PRMan apparently). Apparently transformation shaders are
supposed to operate on geometric coordinates to apply "non-linear
geometric transformations". According to [5]
The purpose of a transformation shader is to modify a coordinate
system.
It is used to deform the geometry of a scene without respect to
any particular surface. This differs from a displacement shader
because the displacement shader operates on a point-by-point basis
for a given surface. Transformation shaders modify the current
transform, which means they can affect all the objects in a scene.
Imager shaders appear to operate on the colors of output
pixels which to me means the shader allows for color correction or
other manipulation after a pixels color has been computed but
prior to the final pixel output to file or display. This seems
simple enough to understand, but why you'd use them I'm not quite
sure. Larry says that BMRT supports Imager shaders but PRMan does
not. However, he suggests the functionality provided is probably
better suited to post-processing tools, such as XV, ImageMagick or
the Gimp.
5. Shader language syntax
So what does a shader file look like? They are very similar
in format to a C procedure, with a few important differences. The
following is a very simplistic surface shader:
surface matte (
float Ka = 1;
float Kd = 1;
)
{
point Nf;
/*
* Calculate the normal which is facing the
* direction that points towards the camera.
*/
Nf = faceforward (normalize(N),I);
Oi = Os;
Ci = Os * Cs * (Ka * ambient() + Kd * diffuse(Nf));
}
This is the matte surface shader provided in the BMRT distribution.
The matte surface shader happens to be one of a number of required
shaders that The RenderMan Interface Specification says a
RenderMan compliant renderer must provide.
Shader procedure names
The first thing to notice is the procedure type and name. In
this case the shader is a surface shader and its name is "matte".
When this code is compiled by slc it will produce a shader called
"matte" in a file called "matte.so". Procedure names can be any
name that is not a reserved RIB statement. Procedure names may
contain letters, numbers and underscores. They may not contain
spaces.
Variables and scope
There are a number of different kinds of variables that are
used with shaders: Instance variables, global variables, and local
variables. Instance variables are the variables used as parameters
to the shader. When calling a shader these variables are declared
(if they have not already been declared) and assigned a value to
be used for that instance of the shader. For example, the matte
shader provides two parameters that can have appropriate values
specified when the shader is instanced within the RIB file. Lets
say we have a sphere for which we will shade using the matte
shader. We would specify the instance variables like so:
AttributeBegin
Declare "Kd" "float"
Declare "Ka" "float"
Surface "matte" "Kd" 0.5 "Ka" 0.5
Sphere 1 -.5 .5 360
AttributeEnd
The values specified for Kd and Ks are the instance variables and the
renderer will use these values for this instance of the shader.
Instance variables are generally known only to the shader upon the
initial call for the current instance.
Local variables are defined within the shader itself and as
such are only known within the shader. In the example matte
shader, the variable Nf is a point variable as has meaning and
value only within the scope of the shader itself. Other shaders
will not have access to the values Nf holds. Local variables are
used to hold temporary values required to compute the values
passed back to the renderer. These return values are passed back
as global variables.
Global variables have a special place in the RenderMan
environment. The only way a shader can pass values back to the
renderer is through global variables. Some of the global variables
that a shader can manipulate are the surface color (Cs), surface
opacity (Os), the normal vector for the current point (N) and the
incident ray opacity (Oi). Setting these values within the shader
affects how the renderer colors surface points for the object
which is being shaded. The complete list of global variables that
a particular shader type can read or modify is listed in tables in
the RenderMan Interface Specification [6]. Global variables are
global in the sense that they pass values between the shader and
the renderer for the current surface point, but they cannot be
used to pass values from one objects shader to another.
Data types and expressions
Shaders have access to only 4 data types: one scalar type,
two vector types, and a string type. A string can be defined and
used by a shader, but it cannot be modified. So an instance
variable that passes in a string value cannot be modified by the
shader, nor can a local string variable be modified once it has
been defined.
The scaler type used by shaders is called a float type.
Shaders must use float variables even for integer calculations.
The
point type is a a 3 element array of float values which describe a
point in some space. By default the point is in world space in BMRT
(PRMan uses camera space by default), but it is possible to convert
the point to object, world, texture or some other space within the
shader. On point can be transformed to a different space using the
transform statement. For example:
float y = ycomp(transform("object",P));
will convert the current point to object space and return the Y
component of the new point into the float variable y. The other vector
type is also a 3 element array of float values that specify a color. A
color type variable can be defined as follows:
color Cp = color (0.5, 0.5, 0.5);
Expressions in the shading language follow the same rules of
precedence that are used in the C language. The only two expressions
that are new to shaders are the Dot Product and the Cross Product. The
Dot Product is used to measure the angle between two vectors and is
denoted by a period (.). Dot Products work on point variables. The
Cross Product is often used to find the normal vector at a point given
two nonparallel vectors tangent to the surface at a given point. The
Cross Product only works on points, is denoted by a caret (^) and
returns a point value.
Functions
A shader need not be a completely self contained entity. It can
call external routines, known as functions. The RenderMan Interface
Specificatoin predefines a large number of functions that are
available to shader authors using BMRT. The following list is just a
sample of these predefined functions:
* Math functions such as sin(), cos(), pow(), exp(), sqrt() and
log().
* Math functions such as min(), max() and clamp().
* Derivative functions Du(), Dv(), and Deriv() which have versions
which work on float, color, and point values.
* A noise() function for random value.
* Geometric functions like area(), length() and distance().
* Color functions like mix() which mixes two of its arguments based
on a third argument.
* Shading and Lighting functions such as specular() and phong()
* Texture map functions for using texture maps within shaders
This is not a comprehensive list, but it provides a sample of the
functions available to the shader author. Many functions operate on
more than one data type (such as points or colors). Each can be used
to calculate a new color, point, or float value which can then be
applied to the current surface point.
Shaders can use their own set of functions defined locally. In
fact, its often helpful to put functions into a function library that
can be included in a shader using the #include directive. For example,
the RManNotes Web site provides a function library called
"rmannotes.sl" which contains a pulse() function that can be used to
create lines on a surface. If we were to use this function in the
matte shader example, it might look something like this:
#include "rmannotes.sl"
surface matte (
float Ka = 1;
float Kd = 1;
)
{
point Nf;
float fuzz = 0.05
color Ol;
/*
* Calculate the normal which is facing the
* direction that points towards the camera.
*/
Nf = faceforward (normalize(N),I);
Ol = pulse(0.35, 0.65, fuzz, s);
Oi = Os*Ol;
Ci = Os * Cs * (Ka * ambient() + Kd * diffuse(Nf));
}
The actual function is defined in the rmmannotes.sl file as
#define pulse(a,b,fuzz,x) (smoothstep((a)-(fuzz),(a),(x)) - \
smoothstep((b)-(fuzz),(b),(x)))
A shader could just as easily contain the #defined value directly
without including another file, but if the function is useful shader
authors may wish to keep them in a separate library similar to
rmmannotes.sl. In this example, the variable s is the left-to-right
component of the current texture coordinate. "s" is a component of the
texture space, which we'll cover in the section on coordinate systems.
"s" is a global variable which is why it is not defined within the
sample code.
Note: This particular example might not be very useful. It is just
meant to show how to include functions from a function library.
Functions are only callable by the shader, not directly by the
renderer. This means a function cannot be used directly in a RIB file
or referenced using the C binding to the RenderMan Interface.
Functions cannot be recursive - they cannot call themselves. Also, all
variables passed to functions are passed by reference, not by value.
It is important to remember this last item so that your function
doesn't inadvertantly make changes to variables you were not
expecting.
Statements
The shading language provides the following statements for flow
control:
* if-then-else
* while (boolean expression) statement
* for (expr; boolean expr; expr) statement
* break [n] - "n" is the number of nested levels to exit from
* continue [n] - "n" is the number of nested levels to exit from
* return expression
All of these act just like their C counterparts.
Coordinate Systems
There are number of coordinate systems used by RenderMan. Some
of these I find easy to understand by themselves, others are more
difficult - especially when used within shaders. In a shader, the
surface of an object is mapped to a 2 dimensional rectangular grid.
This grid runs from coordinates (0,0) in the upper left corner to
(1,1) in the lower right corner. The grid is overlayed on the surface,
so on a rectangular patch the mapping is obvious. On a sphere the
upper corners of the grid map to the same point on the top of the
sphere. This grid is known as parameter space and any point in this
space is referred to by the global variables u and v. For example, a
point on the surface which is in the exact center of the grid would
have (u,v) coordinates (.5, .5).
Similar to parameter space is texture space. Texture space is a
mapping of a texture map that also runs from 0 to 1, but the variables
used for texture space are s and t. By default, texture space is
equivalent to parameter space unless either vertex variables
(variables applied to vertices of primitive objects like patches or
polygons) or the TextureCoordinates statement have modified the
texture space of the primitive being shaded. Using the default then, a
texture map image would have its upper left corner mapped to the upper
left corner of the parameter space grid overlying the objects surface,
and the lower right corner of the image would be mapped to the lower
right corner of the grid. The image would therefore cover the entire
object. Since the texture space does not have to be equivalent to
parameter space it would be possible to map an image to only a portion
of an object. Unfortunately, I didn't get far enough this month to
provide an example of how to do this. Maybe next month.
There are other spaces as well: world space, object space, and
shader space. How each of these affects the shading and texturing
characteristics is not completely clear to me yet. Shader space is the
default space in which shaders operate, but points in shader space can
be transformed to world or object space before being operated on. I
don't know exactly what this means or why you'd want to do it just yet
6. Format of a shader file
Shader files are fairly free form, but there are methodologies
that can be used to make writing shaders easier and the code more
understandable. In his RManNotes [7], Stephen F. May writes
One of the most fundamental problem solving techniques is "divide
and conquer." That is, break down a complex problem into simpler
parts; solve the simpler parts; then combine those parts to solve
the original complex problem.
In shaders, [we] break down complicated surface patterns and
textures into layers. Each layer should be fairly easy to write (if
not, then we can break the layer into sub-layers). Then, [we]
combine the layers by compositing.
The basic structure of a shader is similar to a procedure in C - the
shader is declared to be a particular type (surface, displacement, and
so forth) and a set of typed parameters are given. Unlike C, however,
shader parameters are required to have default values provided. In
this way a shader may be instanced without the use of any instance
variables. If any of the parameters are specified with instance
variables then the value in the instance variable overrides the
parameters default value. An minimalist shader might look like the
following:
surface null ()
{
}
In fact, this is exactly the definition of the null shader. Don't ask
me why such a shader exists. I'm sure the authors of the specification
had a reason. I just don't know what it is. Adding a few parameters,
we start to see the matte shader forming:
surface matte (
float Ka = 1;
float Kd = 1;
)
{
}
The parameters Ka and Kd have their default values provided. Note that
Ka is commonly used in the shaders in Guido Quaroni's archive of
shaders to represent a scaling factor for ambient light. Similarly, Kd
is used to scale diffuse light. These are not global variables, but
they are well known variables, much like "i", "j", and "k" are often
used as counters in C source code (a throwback to the heady days of
Fortran programming).
After the declaration of the shader and its parameters comes the
set of local variables and the shader code that does the "real work".
Again, we look at the matte shader:
#include "rmannotes.sl"
surface matte (
float Ka = 1;
float Kd = 1;
)
{
point Nf;
float fuzz = 0.05
color Ol;
/*
* Calculate the normal which is facing the
* direction that points towards the camera.
*/
Nf = faceforward (normalize(N),I);
Ol = pulse(0.35, 0.65, fuzz, s);
Oi = Os*Ol;
Ci = Os * Cs * (Ka * ambient() + Kd * diffuse(Nf));
}
Nothing special here. It looks very much like your average C
procedure. Now we get into methodologies. May [8] shows us how a
layered shader's psuedo-code might look:
surface banana(...)
{
/* background (layer 0) */
surface_color = yellow-green variations;
/* layer 1 */
layer = fibers;
surface_color = composite layer on surface_color;
/* layer 2 */
layer = bruises;
surface_color = composite layer on surface_color;
/* layer 3 */
layer = bites;
surface_color = composite layer on surface_color;
/* illumination */
surface_color = illumination based on surface_color
and illum params;
/* output */
Ci = surface_color;
}
What is happening here is that the lowest level applies yellow-and
green colors to the surface, after which a second layer has fiber
colors composited (blended or overlayed) in. This continues for each
of 4 defined layers (0 through 3) plus an illumination calculation to
determine the relative brightness of the current point. Finally, the
newly computed surface color is ouput via a global variable. Using
this sort of methodology makes writing a shader much easier as well as
allowing other shader authors to debug and/or extend the shader in the
future. A shader file is therefore sort of bottom-up design, where the
bottom layers of the surface are calculated first and the topmost
layers are computed last.
7. A word about texture maps
As discussed earlier, texture maps are images mapped from 0 to 1
from left to right and top to bottom upon a surface. Every sample in
the image is interpolated between 0 and 1. The mapping does not have
to apply to the entire surface of an object, however, and when used in
conjunction with the parameter space of the surface (the u,v
coordinates) it should be possible to map an image to a section of a
surface.
Unfortunately, I wasn't able to determine exactly how to use
this knowledge for the image I submitted to the IRTC this month. Had I
figured it out in time, I could have provided text labels on the
bindings of the books in the bookcases for that scene. Hopefully, I'll
figure this out in time for the next article on BMRT and can provide
an example on how to apply texture maps to portions of surfaces.
8. Working examples
The best way to actually learn how to write a shader is to get
down and dirty in the bowels of a few examples. All the references
listed in the bibliography have much better explanations for the
exaples I'm about to describe, but these should be easy enough to
follow for novices.
A colored cross pattern
This example is taken verbatim from RManNotes by Stephen F. May.
The shader creates a two color cross pattern. In this example the
pattern is applied to a simple plane (a bilinear patch). Take a look
at the source code.
color surface_color, layer_color;
color surface_opac, layer_opac;
The first thing you notice is that this shader defines two local color
variables: surface_color and layer_color. The layer_color variable is
used to compute the current layers color. The surface_color variable
is used to composite the various layers of the shader. Two other
variables, surface_opacity and layer_opacity, work similarly for the
opacity of the current layer.
The first layer is a verticle stripe. The shader defines the
color for this layer and then determines the opacity for the current
point by using a function called pulse(). This is a function provided
by May in his "rmannotes.sl" function library. The pulse() function
allows the edges of the stripes in this shader to flow smoothly from
one color to another (take a look at the edges of the stripes in the
sample image). pulse() uses the fuzz variable to determine how fuzzy
the edges will be. Finaly, for each layer the layers color and opacity
are blended together to get the new surface color. The blend()
function is also part of rmannotes.sl and is an extension of the
RenderMan Interface's mix() function, which mixes color and opacity
values.
Tiled cross pattern
Figure 4
RIB Source code for this example Finally, the incident rays
opacity global variable is set along with its color.
Oi = surface_opac;
Ci = surface_opac * surface_color;
These two values are used by the renderer to compute pixel values in
the output image.
Adding opacity - a wireframe shader
This example is taken from the RenderMan Companion. It shows how
a shader can be used to cut out portions of a solid surface. We use
the first example as a backdrop for a sphere that is shaded with the
screen() shader from the RenderMan Companion text (the name of the
shader as used here is slightly different because it is taken from the
collection of shaders from Guido Quaroni, who changed the names of
some shaders to reflect their origins). First lets look at the sceen
using the "plastic" shader (which comes as a default shader in the
BRMT distribution). Figure 5 shows how this scene renders. The sphere
is solid in this example. The RIB code for this contains the following
lines:
AttributeBegin
Color [ 1.0 0.5 0.5 ]
Surface "plastic"
Sphere 1 -1 1 360
AttributeEnd
In Figure 6 the sphere has been changed to a wireframe surface. The
only difference between this scene and Figure 5 is the surface shader
used. For Figure 6 the rib code looks like this:
AttributeBegin
Color [ 1.0 0.5 0.5 ]
Surface "RCScreen"
Sphere 1 -1 1 360
AttributeEnd
The rest of the RIBs are exactly the same. Now lets look at the
screen() shader code.
surface
RCScreen(
float Ks = .5,
Kd = .5,
Ka = .1,
roughness = .1,
density = .25,
frequency = 20;
color specularcolor = color (1,1,1) )
{
varying point Nf =
faceforward( normalize(N), I );
point V = normalize(-I);
A Wireframed sphere - without wireframe
Figure 5
RIB Source code for this example
A Wireframed sphere - with wireframe
Figure 6
RIB Source code for this example
A Wireframed sphere - thinner grid lines
Figure 7
RIB Source code for this example
if( mod(s*frequency,1) < density ||
mod(t*frequency,1) < density )
Oi = 1.0;
else
Oi = 0.0;
Ci = Oi * ( Cs * ( Ka*ambient() + Kd*diffuse(Nf) ) +
specularcolor*Ks* specular(Nf,V,roughness));
}
The local variable V is defined to be the normalized vector for
the incident light rays direction. The incident light ray direction is
the direction from which the camera views the current surface
coordinate. This value is used later to compute the specular highlight
to be used on the portion of the surface which will not be cut out of
the sphere.
The next thing the shader does is to compute the modulo of the s
component of the texture space times the frequency of the grid lines
of the wireframe. This value is always less than 1 (the modulo of
s*frequency is the remainder left for n*1 < s*frequency for some value
n). If this value is also less then the density then the current
coordinate on the surface is part of the visible wireframe that
traverses the surface horizontally. Likewise, the same modulo is
computed for t*frequency and if this value is also less than the
density then the current coordinate point is on one of the visible
verticle grid lines of the wireframe. Any point for which the module
of either of these is greater than the density is rendered completely
transparent. The last line computes the grid lines based on the
current surface color and a slightly metallic lighting model.
The default value for the density is .25, which means that
approximately 1/4 of the surface will be visible wireframe. Changing
the value with an instance variable to .1 would cause the the
wireframe grid lines to become thinner. Figure 7 shows an example of
this. Changing the frequency to a smaller number would cause fewer
grid lines to be rendered.
A simple paper shader
While working on my entry for the March/April 1997 round of the
IRTC I wrote my first shader - a shader to simulate 3 holed notebook
paper. This simplistic shader offers some of the characteristics of
the previous examples in producing regularly spaced horizontal and
verticle lines plus the added feature of fully transparent circular
regions that are positioned by instance variables. We start by
defining the parameters needed by the shader. There are quite a few
more parameters than the other shaders. The reason for this is that
this shader works on features which are not quite so symmetrical. You
can also probably chalk it up to my inexperience.
color hcolor = color "rgb" (0, 0, 1);
color vcolor = color "rgb" (1, 0, 0);
float hfreq = 34;
float vfreq = 6;
float skip = 4;
float paper_height = 11;
float paper_width = 8.5;
float density = .03125;
float holeoffset = .09325;
float holeradius = .01975;
float hole1 = 2.6;
float hole2 = 18;
float hole3 = 31.25;
The colors of the horizontal and vertical lines come first. There are,
by default, 34 lines on the paper with the first 4 "skipped" to give
the small header space at the top of the paper. The vertical frequency
is used to divide the paper in n equal vertical blocks across the
page. This is used to determine the location of the single verticle
stripe. We'll look at this again in a moment.
The paper height and width are used to map the parameter space
into the correct dimensions for ordinary notebook paper. The density
parameter is the width of each of the visible lines (horizontal and
vertical) on the paper. The hole offset defines the distance from the
left edge of the paper to the center point of the 3 holes to be
punched out. The holeradius is the radius of the holes and the
hole1-hole3 parameters give the horizontal line over which the center
of that hole will live. For example, for hole1 the center of the hole
is 2.6 horizontal stripes down. Actually, the horizontal stripes are
created at the top of equally sized horizontal blocks, and the
hole1-hole3 values are number of horizontal blocks to traverse down
the paper for the holes center. Now lets look at how the lines are
created.
surface_color = Cs;
This line simply initializes a local variable to the current color of
the surface. We'll use this value in computing a new surface color
based on whether the point is on a horizontal or vertical line.
/*
* Layer 1 - horizontal stripes.
* There is one stripe for every
* horizontal block. The stripe is
* "density" thick and starts at the top of
* each block, except for the first "skip"
* blocks.
*/
tt = t*paper_height;
for ( horiz=skip; horiz&lthfreq; horiz=horiz+1 )
{
min = horiz*hblock;
max = min+density;
val = smoothstep(min, max, tt);
if ( val != 0 && val != 1 )
surface_color = mix(hcolor, Cs, val);
}
This loop runs through all the horizontal blocks on the paper (defined
by the hfreq parameter) and determines if the point lies between the
top of the block and the top of the block plus the width of a
horizontal line (specified with the density parameter).
3 Holed paper
Figure 8
RIB Source code for this example
3 Holed paper - thicker lines
Figure 8 The smoothstep() function is part of the standard RenderMan
functions and returns a value that is between 0 and 1, inclusive, that
shows where "tt" sits between the min and max values. If this value is
not at either end then the current surface point lies in the bounds of
a horizontal line. The point is given the "hcolor" value mixed with
the current surface color We mix the colors in order to allow the
edges of the lines to flow smoothly between the horizontal lines color
and the color of the paper. In other words, this allows for
antialiasing the horizontal lines. The problem with this is - it
doesn't work. It only aliases one side of the line, I think. In any
case, you can see from Figure 8 that the result does not quite give a
smooth, solid set of lines.
An alternative approach would be to change the mix() function
call (which is part of the RenderMan shading lanague standard
functions) to a more simple mixture of the line color with the value
returned by smoothstep(). This code would look like this:
min = horiz*hblock;
max = min+density;
val = smoothstep(min, max, tt);
if ( val != 0 && val != 1 )
surface_color = val*hcolor;
Alternatively, the line color could be used on its own, without
combining it with the value returned from the smooth step. This gives
a very jagged line, but the line is much darker even when used with
smaller line densities. The result from using the line color alone
(with a smaller line density) can be seen in Figure 9.
/* Layer 2 - vertical stripe */
ss = s*paper_width;
min = vblock;
max = min+density;
val = smoothstep(min, max, ss);
if ( val != 0 && val != 1 )
surface_color = mix(vcolor, Cs, val);
This next bit of code does exactly the same as the previous code
except it operates on the vertical line. Since there is only one
verticle line there is no need to check every vertical block, only the
one which will contain the visible stripe (which is specified with the
vblock parameter).
Finally we look at the hole punches. The center of the holes are
computed relative to the left edge of the paper:
shole = holeoffset*paper_width;
ss = s*paper_height;
tt = t*paper_height;
pos = (ss,tt,0);
Note that we use the papers height for converting the ss,tt variables
into the scale of the paper width and height. Why? Because if we used
the width for ss we would end up with eliptical holes. There is
probably a better way to deal with this problem (of making the holes
circular) but this method worked for me.
For each hole, the current s,t coordinates distance from the
hole centers is computed. If the distance is less than the holes
radius then the opacity for the incident ray is set to completely
transparent.
/* First Hole */
thole = hole1*hblock;
hpos = (shole, thole, 0);
Oi = filterstep (holeradius*paper_width,
distance(pos,hpos));
/* Second Hole */
thole = hole2*hblock;
hpos = (shole, thole, 0);
Oi *= filterstep (holeradius*paper_width,
distance(pos,hpos));
/* Third Hole */
thole = hole3*hblock;
hpos = (shole, thole, 0);
Oi *= filterstep (holeradius*paper_width,
distance(pos,hpos));
Filterstep is, again, a standard function in the RenderMan
specification. However, this function was not documented by either the
RenderMan Interface Specification or the RenderMan Companion.
According to Larry Gritz
The filterstep() function is identical to step, except that it is
analytically antialiased. Similar to the texture() function,
filterstep actually takes the derivative of its second argument,
and "fades in" at a rate dependent on how fast that variable is
changing. In technical terms, it returns the convolution of the
step function with a filter whose width is about the size of a
pixel. So, no jaggies.
Thus, using filterstep() helped to antialias the edges of the holes
(although its not that obvious from such a small image given in
Figures 8 and 9). I didn't try it, but I bet filterstep() could
probably be used to fix the problems with the horizontal and vertical
lines.
A textured mapped chalkboard
This simple texture map example is used in my Post Detention
image which I entered in the March/April 1997 IRTC. The actual shader
is taken from the archive collection by Guido Quaroni, and the shader
originally comes from Larry Knott (who I presume works at Pixar). I
didn't add an image of this since all you would see would be the
original image mapped on a flat plane, which really doesn't show
anything useful. If you want to take a look at the chalkboard in a
complete scene, take a look at the companion article in this months
Graphics Muse column.
Like the other shader examples, this one is fairly
straightforward. An image filename is passed in the texturename
parameter. Note that image files must be TIFF files for use with BMRT.
The texture coordinates are used to grab a value from the image file
which is then combined with the ambient and diffuse lighting for the
incident ray. If a specular highlight has been specified (which it is
by default in the Ks parameter) then a specular highlight is added to
the incident ray. Finally, the output value, Ci, is combined with the
surfaces opacity for the final color to be used by the current surface
point.
Displacement map example
We've already seen an example of displacement maps using the
threads() shader. Lets take a quick look at the shader code:
magnitude = (sin( PI*2*(t*frequency +
s + phase))+offset) * Km;
Here, the displacement of the surface point is determined by using a
phased sinusoidal. The t variable determines the position lengthwise
across the surface and s is used to cause the spiraling effect. The
next bit of code
if( t > (1-dampzone))
magnitude *= (1.0-t) / dampzone;
else if( t < dampzone )
magnitude *= t / dampzone;
causes the ends of the surface, in our case a cylinder, to revert to
the original shape. For our example that means this forces the shader
to leave the ends circular. This helps to keep the object that has
been threaded in a shape that is easily joined to other objects. In
the RenderMan Companion, the threaded cylinder is joined to a glass
bulb to form a light bulb. Finally, the last two lines
P += normalize(N) * magnitude;
N = calculatenormal(P);
cause the point to be moved and the normal for the new point to be
calculated. In this way the point visually appears to have moved,
which indeed it has.
Next month I planned on doing the 3rd part of this 3 part BMRT series.
I think taking 2 months between articles worked well for me this time
since it allowed me a little more time to dig deeper. Plan on the
final article on BMRT in this series in the July issue of the Graphics
Muse. Till then, happy rendering.
indent
Bibliography
1. Ebert, Musgrave, Peachy, Perlin, Worley. Texturing and Modeling: A
Procedural Approach, 5-6; AP Professional (Academic Press), 1994
2. Upstill, Steve. The RenderMan Companion - A Programmer's Guide to
Realistic Computer Graphics, 277-278; Addison Wesley, 1989
3. The RenderMan Interface Specification, Version 3.1 112-113; Pixar,
Septermber 1989
4. Upstill, Steve. The RenderMan Companion - A Programmer's Guide to
Realistic Computer Graphics, color plates section; Addison Wesley,
1989
5. Upstill, Steve. The RenderMan Companion - A Programmer's Guide to
Realistic Computer Graphics, 279; Addison Wesley, 1989
6. The RenderMan Interface Specification, Version 3.1 110-114; Pixar,
Septermber 1989
7. RManNotes "Writing RenderMan Shaders - Why follow a methodolgy?";
Stephen F. May, Copyright © 1995, 1996
8. RManNotes "Writing RenderMan Shaders - The Layered Approach";
Stephen F. May, Copyright © 1995, 1996
indent
© 1996 by Michael J. Hammel
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Kandinski
By Jeff Hohensee, ott@casper.com
_________________________________________________________________
Kandinski is my new pre-pre-pre-beta program which generates a picture
file from a MIDI file. It does so based on my cycluphonic method of
correlating colors to musical pitches. The few careful observers who
have seen previous implementations of cycluphonics agree that it gives
visual events which seem to sympathize with the generating music, in
terms of implied feeling, better than previous "color organ" methods.
Kandinski was written with pfe under Linux on a 486. It should be easy
to port to another ANSI Forth system, as I am rusty at Forth, and the
task at hand didn't call for any trickery, and I avoided the
Linux-specific stuff in pfe, mostly because I couldn't find much
documentation on it. The code presented here creates a .ppm image file
on a selectable track by track basis. The piano envelope option is not
implemented yet, just organ. .ppm files can be converted to just about
any image format with the unix pbmplus tools, and are viewable in
Linux with zgv. The crucial cycluphonic element in Kandinski is the
"cycle" construct, a lookup table which Kandinski uses to map a 12 hue
color wheel to the Cycle of Fifths. That's the crux of cycluphonics.
If you use this code, or cycluphonics, give credit where due.
How Kandinski operates ( I hope )
Copy a MIDI file with some tonal music to filename in.mid . Run your
ANSI Forth in the same directory. Include the Kandinski code into your
dictionary. Type main at the ok prompt. Kandinski will check in.mid
for a MIDI header. If in.mid is a midi file, Kandinski will traverse
tracks until it finds a noteon message. It will then tell you a bit
about the track and ask you if you want to make a picture of it. Hit y
and it will ask you if you want to use a piano or an organ type volume
envelope. The piano option is curently just a stub. Kandinski will
then ask you to hit a key to seed the filename randomizer. Kandinski
will then create a picture file with a filename of the form
kanrrrrr.ppm, where r is a random letter. The track portion of the
program repeats if there are more tracks with notes. The pictures
created by Kandinski are 640 by 80 pixels, 24 bits color depth. I will
soon be putting some Kandinski output up at http://cqi.com/~humbubba
( kandinski )
( ANSI Forth sourcecode Rick Hohensee begun 199703 )
( A MIDIfile-to-still-picture implementation of my Cycluphonic method
of correlating colors and musical pitches. )
( used i486 Slackware Linux from the InfoMagic LDR sept 96, pfe,
Jeff Glatt's MIDI docs, dpans7 )
( redistribution permission contingent on authorship credit )
( default number base of file is.... ) decimal
( app notes, pfe file-postition is a DOUBLE!
MIDI sizes are SINGLEs
YEESH! "f0" is a variable! AAAAARRRRGGG!!!
hex f0 decimal . doesn't work as wished. )
( my prefered tools, jigs and cheats )
: binary decimal 2 base ! ;
: .base base @ dup decimal . base ! ;
: walk ." " key drop ;
: 0s ( wipe data stack )
depth dup if 0 do drop loop else drop then ;
: paddump ( [ count --- ] counted dump from pad )
pad swap dump ;
( app related ....)
0 value deltasum
2variable trkend 0 0 trkend 2!
0 value dpp ( deltas per pixel )
create rgbs 640 3 * allot
0 value trk#
variable midifile
0 value pbmfile
create organstate 128 allot
organstate 128 0 fill ( pfe allot leaves an "allot" string in the alloted
space )
create 12state 12 allot
12state 12 0 fill
0 value redac
0 value greenac
0 value blueac
0 value backfoot
create cycle 0 , 7 , 2 , 9 , 4 , 11 , 6 , 1 , 8 , 3 , 10 , 5 ,
create wheelred 12 allot
255 c, 255 c, 255 c, 127 c, 0 c, 0 c, 0 c, 0 c, 0 c, 127 c, 255 c, 255 c,
create wheelgreen 12 allot
0 c, 127 c, 255 c, 255 c, 255 c, 255 c, 255 c, 127 c, 0 c, 0 c, 0 c, 0 c,
create wheelblue 12 allot
0 c, 0 c, 0 c, 0 c, 0 c, 127 c, 255 c, 255 c, 255 c, 255 c, 255 c, 127 c,
0 value fid
create ppm
ascii P c, ascii 6 c, 10 c, ascii 6 c, ascii 4 c, ascii 0 c,
bl c, ascii 8 c, ascii 0 c,
bl c, ascii 2 c, ascii 5 c, ascii 5 c,
: msboff 127 and ;
: openin ( opens a file called in.mid in current dir
which can then be referenced via midifile @ )
S" in.mid" r/w bin open-file drop midifile ! ;
: in.mid ( --- fid_of_in.mid ) ( poorly factored, ) midifile @ ;
: inpos ( --- 2inpos ) ( get file position in in.mid )
midifile @ file-position drop ( ior) ;
: inpeek ( [ count --- ] counted read from in.mid to pad )
pad swap
midifile @ read-file drop ;
: trksize ( --- trksize ) ( DOES move inpos )
( build a 32 bit track size cell from the WRONGendian value
, from body0 to body0 )
4 inpeek drop ( endianism translation )
pad c@ 24 lshift
pad 1 + c@ 16 lshift +
pad 2 + c@ 8 lshift +
pad 3 + c@ + ;
2variable prevpos
2variable starttrk 0 0 starttrk 2!
: filebound ( fid --- 0 if inside file )
dup >r file-position drop r> file-size drop 2swap d< ;
: hoptrk ( [ --- inbounds_flag ] body0 to next trk body0 )
trksize 8 + 0 inpos d+ in.mid reposition-file drop
in.mid filebound ;
0 value envelope
0 value noteons 0 value noteoffs
: hinybble 240 and ; ( f0 is a &$^%##%$ variable name! )
hex
0f constant lonybble
binary
: bit7 10000000 and ;
decimal
0 value delta
: bytein pad 1 in.mid read-file drop
1 if ( error) cr
." end of in.mid "
quit else pad c@ then ;
: bignum 0
begin bytein dup bit7
while
msboff swap 7 lshift +
repeat
swap 7 lshift + ;
: ignore ( n --- ) ( add n to inpos )
0 inpos d+ in.mid reposition-file drop ;
: ignoreto ( delimiter --- ) ( ignore filebytes to delimiter )
begin dup bytein = until drop ;
0 value moment
: mthd ( --- da position of MThD or fail )
77 ignoreto 84 ignoreto 104 ignoreto 100 ignoreto inpos ;
: mtrk 77 ignoreto 84 ignoreto 114 ignoreto 107 ignoreto inpos ;
: seed
." hit a key please " key
time&date 2drop drop + + + in.mid + ;
: 128to12 ( organstate to 12state, i.e. midinote#s to notename#s )
12state 12 0 fill
128 0 do
organstate i + c@ if
1 i 12 mod 12state + c!
then ( simple for now )
loop
;
: 12torgb 0 to redac 0 to greenac 0 to blueac
12 0 do
12state i + c@ if
i cells cycle + @
cells dup wheelred + @ redac + 2 / to redac
dup wheelgreen + @ greenac + 2 / to greenac
wheelblue + @ blueac + 2 / to blueac
then
loop ;
: orgtorgb ( pixel# --- )
128to12
12torgb
dup redac swap 3 * rgbs + c!
dup greenac swap 3 * 1 + rgbs + c!
blueac swap 3 * 2 + rgbs + c!
;
: reset ( --- ) ( actions on an FF status byte )
bytein case
0 of bignum ignore ." ff 00 ignored " endof
1 of ." text " bignum ignore endof
2 of ." copyright " bignum ignore endof
3 of ." trackname " bignum ignore endof
4 of ." inst name " bignum ignore endof
5 of ." lyric " bignum ignore endof
6 of ." flow marker " bignum ignore endof
7 of ." cue point, sample " bignum ignore endof
33 of 2 ignore ( port # ) endof
47 of ( ." last event of track " ) 1 ignore endof
81 of 4 ignore endof
84 of 6 ignore ." smte o/s ignored " endof
88 of 5 ignore ( time sig ) endof
( ." unknown reset ff thang " )
endcase ;
: sysex ( sysexbyte --- ) ( i.e. message with status hinyb of f )
dup case
240 of 247 ignoreto ." ignoring f0 to f7 " drop endof
241 of ." miditimecode, unsupported " drop endof
242 of ." song position pointer " drop endof
243 of ." song select " drop endof
244 of ." unimplemented f4 sysex " drop endof
245 of ." unimplemented f5 sysex " drop endof
246 of ." tune calibrate " drop endof
249 of ." unimplemented f9 sysex " drop endof
247 of ." discontinue f0/240 stream " drop endof
248 of ." midi clock " drop endof
250 of ." restart song " drop endof
251 of ." midi continue, flow " drop endof
252 of ." stop " drop endof
254 of ." active sense message " drop endof
253 of ." unimplemented fd sysex " drop endof
255 of reset endof
." impossible sysex "
endcase ;
: envelope? cr ." piano envelope or organ? (p=piano/other=organ) " key
ascii p = if -1 to envelope else 0 to envelope then ;
: message ( survey pass )
bytein dup hinybble case
128 of 2 ignore noteoffs 1 + to noteoffs drop endof
144 of noteons 1+ to noteons 2 ignore drop endof
160 of 2 ignore drop endof
176 of 2 ignore drop endof
192 of 2 ignore drop endof
208 of 2 ignore drop endof
224 of 2 ignore drop endof
240 of cr sysex endof
endcase ;
: pianooff ." pianooff " 2 ignore ;
: pianoon 2 ignore ;
: organoff 0 organstate bytein + c! 1 ignore ;
: organon -1 organstate bytein + c! 1 ignore ;
: messageagain ( processing pass )
bytein dup hinybble case
128 of envelope if pianooff else organoff then drop endof
144 of envelope if pianoon else organon then drop endof
160 of 2 ignore drop endof
176 of 2 ignore drop endof
192 of 2 ignore drop endof
208 of 2 ignore drop endof
224 of 2 ignore drop endof
240 of cr sysex endof
endcase ;
: random.kan ( create file[name] kan[random].ppm )
seed srand
ascii k pad c! ascii a pad 1 + c! ascii n pad 2 + c!
8 3 do 26 random 97 + i pad + c! loop
ascii . pad 8 + c! ascii p pad 9 + c! ascii p pad 10 + c!
ascii m pad 11 + c! ;
: makepic
random.kan
pad 12 r/w create-file drop to pbmfile ( new filename exists )
ppm 16 pbmfile write-file drop
80 0 do
rgbs 640 3 * pbmfile write-file drop
loop
;
: process
0 to deltasum 0 to noteons 0 to noteoffs
640 0 do ( i=pixel )
begin
( bignum backfoot )
bignum deltasum + to deltasum
messageagain
i dpp * deltasum >
while
repeat
( paint pixel )
i orgtorgb
loop
makepic
;
: survey ( a track )
inpos starttrk 2!
trksize 0 inpos d+ trkend 2!
0 to deltasum 0 to noteons 0 to noteoffs
begin
bignum deltasum + to deltasum
message
inpos trkend 2@ d<
while
repeat
;
: track survey
noteons if ." This track has notes.... "
cr ." noteons " noteons . ." noteoffs " noteoffs .
." MIDI clocks per pixel " deltasum 640 / dup to dpp .
cr ." wanna do a pic of this track? (y/other) " key ascii y = if
envelope?
starttrk 2@ in.mid reposition-file drop inpos d. walk
noteons . dpp if
process else ." less than one clock per pixel, no can do " walk then
then then
;
: typecheck
mthd
inpos 2dup 4 0 d= if ." apparent std MIDI seq file. Yay. "
else 16 0 d= if ." apparent RMID MIDI file. OK. " else
cr ." in.mid is apparently not a MIDI file " cr
." Copy MIDI file to be processed to in.mid " bye then then ;
: main 0 to trk#
openin typecheck
begin
trk# 1 + dup to trk#
mtrk
track
( bytein does a QUIT on end-of-file )
again
;
Separate documentation file for the Kandinski program Rick Hohensee
http://cqi.com/~humbubba or rickh@capaccess.org please cc to
humbubba@cqi.com
_________________________________________________________________
Copyright © 1997, Jeff Hohensee
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
1997 Linux Expo
By Jon "maddog" Hall maddog@zk3.dec.com
_________________________________________________________________
"Well, should we get one pitcher or two?" That was the question that
began the first unofficial event of the Linux Expo Thursday night. A
group of people, including Red Hat employees, some of the speakers and
a tired maddog were at the Carolina Brewery in Chapel Hill, North
Carolina. It was late, and I was the last person to arrive."Two
pitchers," I cried,"Now what will you be drinking?"
The next day, Friday April 4th started early, as I had to set up the
Linux International booth, as well as absorb all that was happening.
The event was held in the North Carolina Biotechnology Center at
Research Triangle Park. As I approached the Biotech Center, I was met
with a friendly parking coordinator that reinforced the information
that "parking was scarce", and that most people had to park at
outlying lots. Fortunately Red Hat had arranged for shuttle busses
from those lots and from several of the hotels. Since our car had an
exhibitor's pass, we were able to park close to the Biotech Center and
unload our banners, handouts and stuffed penguins.
There was a large tent to the left outside of the building containing
the "Linux Expo Super Store" stocked with Linux books, Linux bumper
stickers, T-shirts (including an excellently designed Expo shirt that
said "Expose yourself to Linux" with a front and rear view of a
penguin holding open an overcoat) and other interesting souvenir
items. Further to the left was an outdoor viewing area for the
conference talks that (due to the excellent weather) was a favorite
spot for people to view the technical talks for free, especially while
playing Frisbee. A raffle was held in the registration area, and
prizes were given away on an hourly basis. Having registered,
attendees were given a copy of the talks as well as an event schedule.
The event was held on two floors with the exhibits spread out on both.
There was another conference viewing area inside the building with TV
monitors, as well as the conference auditorium itself. There was an
Install Fest area (sponsored by the Washington D.C. Linux User's
Group, Linux Hardware Solutions and Red Hat Software), where people
brought their systems, received help with installing Red Hat's latest
release, and Olaf Kirch's kernel-based NFS server was "stress tested"
at the same time. Finally, there was a food court area, where people
could buy sandwiches, chips, soda and other "software development
food".
There were fifteen vendors at the Expo, each with "table-top" booths
to display their wares. I prefer the "pipe-and-drape" approach to
trade shows rather than expensive booths, since I would rather the
vendors put more money into development of the product and less into
elaborate displays or floor shows with unicycle riders who juggle
things. While not all Linux vendors were at Linux Expo, a wide
spectrum of companies, including Linux International, Cyclades,
Numerical Algorithms Group, Linux Hardware Solutions, Enhanced
Software Technologies, Caldera, Applix, Xess, WorkGroup Solutions,
Stay Online, VA Research, Apex Systems Integration, PromoX Systems and
(of course) Red Hat Software were present. One item being demonstrated
at the Linux Hardware Solutions booth was a free piece of software
called [cw]em86[ecw] that allowed an Intel/Linux binary to run without
change on an Alpha/Linux system. Being shown for the first time, it
allowed Applixware, Netscape and various other applications to execute
as if they had been ported to the system.
Penguins abounded in various T-shirts, giveaways and objects d'art. In
fact, there were so many people there (I estimated 900 over the
two-day event) with penguin "stuff", that I thought I'd had enough of
penguins; but afterwards while wandering around Chapel Hill, Alan Cox
found some candy in the shape of penguins, so penguin "lust" started
all over again.
The technical conference started off with a presentation by Gilbert
Coville of Apple Computer with a talk about the MkLinux kernel. For
people who were afraid that this would turn into a "Red Hat Only"
event, it was interesting that Gilbert's talk opened the Expo and that
a talk about the Debian Linux Distribution (given by Bruce Perens)
followed shortly after. Bruce also discussed the graphics used in the
making of Toy Story in a separate presentation.
Various presentations about hardware-specific ports were given. Dave
Miller talked about the "Next Generation SPARCLinux" as well as the
Free Software Development Model, and David Mosberger-Tang talked about
the Alpha Port, as well as methods, applicable to both Intel and
Alpha, for speeding up your programs by paying attention to memory and
cache accesses.
Other talks were more general across the Linux OS, such as Jeff
Uphoff's "Network File Locking", Alan Cox's "Tour of the Linux
Networking Stack", Peter Braam's "Coda Filesystem", Alexander Yuriev's
talk on the IPv4 family of protocols and infrastructure and his talk
on security, Michael Callahan's "Linux and Legacy LANs", Eric
Youngdale's "Beyond ELF", Olaf Kirch's "Linux Network File System",
Theodore Ts's "Ext2 File System: Design, Implementation and the
Future", Miguel de Icaza's talk on the new RAID code and Daniel
Quinlan's talk on the File System Hierarchy Standard.
To round out the list of talks and events was Dr. Greg Wettstein's
talk on "Working and Playing with others: Linux Grows Up" and the
Linux Bowl.
The Linux Bowl was the final event. Two teams of six developers were
pitted against each other to answer thirty questions about Linux and
the Linux community. Questions ranged from "What liquid should one
drink between rounds of a Finnish sauna?" (correct answer: beer) to
"What version library fixed a particular security hole?" to which Alan
Cox gave a (seemingly) ten minute answer. While some of the questions
were very obscure (even the moderator was unsure of the answer), most
of the time either the right answer (or a good facsimile) was given.
The show sponsors (after tallying up the attendence) reported that 958
people showed up, which could be the largest Linux-specific event
ever, of which 40% were from within North Carolina. Attendees came
from over 25 states, 4 Canadian provinces, and 10 countries, including
Australia, Korea and European countries.
Finally, I would like to thank the members of the Atlanta Linux
Enthusiasts http://www.ale.org/ group who helped to staff the Linux
International booth. They were great and helped give me the freedom to
get out from behind the booth every once in a while, because most
importantly, Linux Expo was a chance to talk with the vendors, the
developers and other old and new friends on a one-to-one, quality
basis. Perhaps some things could be improved for next year: A larger
auditorium for the talks, more and closer parking and less expensive
food in the food court. But certainly the southern hospitality and
warmth of Red Hat Software came through. I want to thank the sponsors
for arranging a great event, and I hope that next year's will be even
larger and better.
_________________________________________________________________
Copyright © 1997, Jon "maddog" Hall
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
A Fresh Beginning: The Enlightenment Window Manager
By Larry Ayers, layers@vax2.rainis.net
_________________________________________________________________
Introduction
Most of the window-managers available for Linux these days can trace
their ancestry back to the original twm program, which may have been
the first widely used manager on unix systems. There is a good reason
for this, as twm pioneered many of the features taken for granted by
users, such as movable, resizable windows and a root-window
applications menu. It's good, time-tested code; why reinvent the
wheel?
Two programmers have recently done just that, from two perspectives as
far removed from each other as their respective geographical
locations. Chris Cannam, a British programmer, has taken the
minimalist approach with his wm2 manager (which I wrote about in LG
#14) and the new wm2 variant wmx, which I discuss elsewhere in this
issue.
At the other extreme is the work of a young Australian programmer who
likes to be known as the Rasterman. Imagine asking the programmers
responsible for the games Quake or Duke Nukem 3D to write a
window-manager; the result might bear some resemblance to the fanciful
program known as Enlightenment.
I first encountered Enlightenment (what a name! it seems to carry the
implication that we users of fvwm et al are still crawling blindly
through the primordial ooze...) earlier this year, when a binary was
available on the web. I tried it briefly, but at the time I had a 486
machine; it ran slowly for me and seemed to consume great gobs of
memory. Recently the Rasterman (his real name is Carsten Haitzler) has
rewritten the application from scratch, tightening it up and
introducing a new shared lib which handles image loading and
rescaling. The memory consumption has been greatly reduced since the
initial release. At this point (beta release 4) there are no virtual
desktops or root-window menus, but the project looks promising and
what there is of it runs well for me.
Features and Appearance
Enlightenment uses the ppm image format for both window details and
icons. An elaborate configuration file (called windowstyles) specifies
which image goes where. Each segment of the window border and
detailing is a separate ppm file. I haven't made any attempt to modify
the default configuration. It looks like it would take many hours to
write a new one. Carsten plans on eventually offering configurations
which would emulate any of the other window-managers.
I get the impression from the Enlightenment web-page that the ppm
format is more efficient than others, especially on 16-32 bit
displays. I don't know how valid this is, but the window-manager does
seem to do quite a bit of image handling without consuming great
amounts of memory.
This window-manager automatically will load any sort of image format
as a root background image. At startup the appropriate netpbm utility
is summoned to transform the image to the ppm format. Naturally, you
need to have the netpbm graphics utility package installed for this to
work.
Here is a screenshot of a window under Enlightenment:
Enlightenment Window
XV (with which I made the screenshot) couldn't figure out where the
actual window border was; can you blame it? I set the root-window
background to be the same color as this HTML-file background as a
quick work-around.
Availability
The Enlightenment web-site is at
http://www.cse.unsw.edu.au/~s2154962/enlightenment/index.html. The
source for the latest version can be downloaded from the site; the
latest news about the application will also be there.
Closing Thoughts
It will be interesting to see what eventually happens with
Enlightenment, though personally I'm satisfied with the
window-managers I currently use. I just like to see diversity in
software for Linux. Fancy new window-borders might seem to be a
trivial matter but it is user-interface features such as these which
can attract new users, especially younger ones. I showed Enlightenment
to my sixteen-year-old son (an avid computer- game player) and he was
impressed. His comment was "It looks like a game interface!".
Another factor is the simple human desire for novelty. Sometimes the
same old interface becomes boring -- you realize you aren't really
even seeing it anymore. A change in background and window-style can be
refreshing. People routinely change room interiors for these same
reasons and, come to think of it, I look at my computer screen quite a
bit more than I do the walls!
Keep in mind that the science-fiction Bladerunneresque appearance is
just the default. Enlightenment is a framework and could be configured
in a variety of ways, depending upon taste (and how much time you're
willing to spend!). Luckily (if you have patience), someone will
eventually come up with a configuration which will suit you. or at
least be close. Interest seems to be growing in this window-manager
lately (judging by the volume of messages in the mailing list) and it
may yet evolve into a community-supported window-manager, such as
Fvwm2 or Afterstep. It's been released under the Gnu license, but so
far Carsten Haitzler is the sole developer.
_________________________________________________________________
Copyright © 1997, Larry Ayers
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Visual Music: The Linux Port of Cthugha
By Larry Ayers, layers@vax2.rainis.net
_________________________________________________________________
Introduction
Around 1993 Kevin Burfitt, an Australian computer science student,
began developing a computer program which would transform recorded
music into moving colored patterns. Programs such as this had been in
use for some time, typically as an adjunct to a rock concert, i.e.
part of the "light show". This program was originally written for DOS,
though before long it began to acquire a trait common to software in
the unix world: a multitude of options and parameters.
Kevin must be a fan of the early 20th-century horror writer H.P.
Lovecraft. How else to account for the distinctive appellation
"Cthugha" which he gave his program? In the Lovecraft stories Cthugha
is the name given to a horrific "elder god" which manifested itself to
humans in the form of shifting colored lights. (This doesn't sound too
horrific, but Lovecraft could make a loaf of bread seem sinister!)
Cthugha has from the early days been available under the aegis of the
Gnu General Public License, making the source freely available. This
opened the door for many other programmers scattered throughout the
world who became involved with the project. Sound familiar? Ports of
the program are now available for the PowerMac, Win95 (in
development), and of course Linux. Harald Deischinger is responsible
for the Linux port. He recently released a new version (0.9) which is
available from the following sites:
* Sunsite (may still be in /pub/Linux/Incoming)
* The main Cthugha site
What Cthugha Does
The input to the program can be any audio source, such as a
microphone, a CDROM drive (though you must have the drive connected to
your soundcard), or even a sound file. Cthugha takes the digital audio
information and, after passing the data stream through any combination
of filters, displays it to the screen in real time. The keyboard is
used to change the various parameters either specifically or randomly.
The simplest displays resemble the screen of an oscilloscope being fed
audio data (Cthugha has been called "an oscilloscope on acid") but as
more optional filters are added the display becomes baroquely
intricate. If too many filters are active the resulting images can be
chaotic, with little discernible relation to the sound being
processed.
Running Cthugha
The Linux version of Cthugha is compiled into two executables:
cthugha, which is a console application (using Svgalib), and xcthugha,
which runs either in an X-window or as a full-screen X application
using the new DGA extensions. This last requires XFree86 3.2 or later.
Xcthugha can also be run as a screensaver; in former releases this was
a separate executable.
In this release the X11 version runs faster and smoother than in
earlier releases, but I still prefer the console version. It's the
quickest and most responsive of the three interfaces and (in my
experience) the only usable version on a machine less powerful than a
mid-range Pentium.
Running Cthugha reminds me of playing a musical instrument. The first
attempts aren't consistently pleasant, but with practice a measure of
control is gained. Orchestral or loud rock music can benefit from low
gain settings, which help to produce a non-chaotic display. The good
sort of recording to start with is music with few voices or tracks. A
vocalist with minimal accompaniment or solo instrumental music give
good results while you gain a feel for the program.
Cthugha comes with several "translation tables"; these are filters
which map the display to various moving patterns, such as spirals or
the appearance of traveling through a starfield. I don't use them
much, as it seems to me they obscure the relationship between the
music and the display. The tables also tend to increase CPU usage. Try
them and see what you think, as they seem to be popular with other
Cthugha users.
The other filter categories are more useful. The "wave" filters
control the general shape of the sound waves. These run the gamut from
basic oscilloscope sine and square waves to angular lightning-like
patterns or floating clusters of fire-flies. The "flame" filters add
to the waves trailing clouds of glory (I've always wanted to use that
phrase in a non-ironic sense!).
Using a microphone as input is fun, especially if there are kids
around. Seeing your voice represented as billowing clouds of
iridescent plasma is novel, to say the least. Various musical
instruments are interesting to try as well; if one person plays the
instrument while the other keys in parameters, a combination which
seems to reflect the character of the melody can often be found. If
you should happen upon a combination of settings which results in a
particularly pleasing screen just press the a key and those settings
are entered into your Cthugha initialization file.
Another option is the Fast Fourier Transform, an algorithm which gives
an entirely different look to the sound; it's hard to describe, but
FFT seems more three-dimensional and subtle. The sampling rate should
be reduced to 22000 hz. (from the default of 44000 hz.) since FFT adds
one more level of computation to the sound-translation process.
Kevin Burfitt's decision to use the Fractint 256-color palette file as
the Cthugha palette file format was fortuitous. Over the years
Fractint users have come up with a multitude of palette files among
which can be found palettes to please anyone's taste. The Fractint
fractal generator includes a handy palette-file editor which can be
used to create or modify palettes for Cthugha. I'm not sure if the
palette editor is included with Xfractint -- I mostly use the DOS
Fractint in a Dosemu console session.
Here are a couple of screen-shots of xcthugha running in a 320x200
window:
_________________________________________________________________
Cthugha image #1 Cthugha image #2
_________________________________________________________________
These are snapshots, of course, and show little of the dynamic quality
of Cthugha reacting to the music. The above images, by the way, are of
an old recording of Sarah Vaughan singing with piano accompaniment.
_________________________________________________________________
Last modified: Sun 27 Apr 1997
_________________________________________________________________
Copyright © 1997, Larry Ayers
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Updates and Corrections
By Larry Ayers, layers@vax2.rainis.net
_________________________________________________________________
After I finish these Gazette articles and get them uploaded to SSC, I
can usually count on a URL changing or a newer version of a program
being released. Sometimes that very day! The Gazette readers are also
quick to let me know of any factual errors I've made. I've accumulated
several of these corrections and updates and shall present them here.
_________________________________________________________________
GV
Last month I wrote a short piece about GV, a new Postscript file
viewer. I received a letter from the maintainer of the Debian GV
package:
Hello Larry!
I enjoyed reading your article, but there are two remarks I want to
make:
- Your screen capture is one of the one modified gv that works with
all Athena Widgets, including the standard one. These modifications
were made by me (although it wasn't very hard once I realized how
well Johannes separated the Xaw3d stuff from the rest).
It would have been better to have a screen capture using libXaw3d, as
that is the standard look and feel. The last statement about having
to have Xaw3d is not very convincing this way.
- There is a gv homepage now:
http://wwwthep.physik.uni-mainz.de/~plass/gv/
This page currently features gv version 3, which can no longer be
used without libXaw3d. The last version of gv supporting standard
Xaw was 2.9.4 which will soon be available on a debian archive site.
Version 3 is even better than version 2 with respect to look and feel
(one of the first really convincing applications using Xaw3d, IMO)
and an improved postscript scanner.
While I'm sure that it isn't possible to change/add to the article,
there could be a short notice in the next gazette.
Helmut
--
Helmut Geyer Helmut.Geyer@iwr.uni-heidelbe
rg.de
public PGP key available : finger geyer@saturn.iwr.uni-heidelbe
rg.de
_________________________________________________________________
FileRunner
FileRunner has been updated several times since I reviewed it several
months ago. The latest version, 2.3, has improved FTP capabilities
(including the option of downloading files with a separate background
process). I must confess I'm addicted to this file-manager. Once you
get the hang of it file manipulation and directory traversals become
so speedy that using it as root can be risky! Check the FileRunner WWW
site for latest releases and news.
Here's an example of a user-configured action-button for FileRunner,
which will mostly interest XEmacs users (though it could probably be
adapted easily for use with GNU Emacs). Create a file in the ~/.fr
directory named cmds, then enter this text into it:
# This is an example of user-defined commands. This file should be named
# cmds and placed in your ~/.fr directory. It will then be read by
# FileRunner at startup. Versions of FileRunner prior to 2.3 need to have
#the file named .fr_cmds and placed directly in the home directory.
# This list should contain all user-defined commands formatted as:
# { { <button-title> <procedure-name> } {..} {..} }
set config(usercommands) {
{ XEmacs xemacs }
}
#
proc xemacs { filelist srcdir destdir } {
cd $srcdir
# set l {}
foreach f $filelist {
exec gnuclient -q $f
}
}
For this to work, you must have gnuserv running; this can be started
from your ~/.xemacs-options file by including the line
(gnuserv-start)
in the file. What this button does is send the files you've selected
to an already-running XEmacs process (I usually have one running in a
different virtual desktop than the one FileRunner is using). XEmacs
will then open up a new frame in your current desktop with the file(s)
displayed in it. This is handy for browsing source code.
wm2 and wmx
In LG #14 I wrote about the minimalist window-manager wm2, written by
British programmer Chris Cannam. Since then wm2 has spawned a variant,
known as wmx. Evidently Mr. Cannam felt that spartan wm2 was becoming
decadently featureful. Wm2 was stripped down to the bare minimum; no
more frame-background pixmaps,etc. Wmx is just wm2 with the
afore-mentioned pixmaps and a basic virtual-desktop utility. It has
one more feature which I thought was very cleverly designed: if you
click the middle mouse button on the desktop an application menu
appears. Unlike most window-managers, the entries on the menu are a
snap to set up. Simply create a subdirectory stemming from your home
directory called .wmx and symlink executables to it. This can be even
done while wmx is running. Whatever appears in ~/.wmx will appear in
the menu. The menu can be configured with a transparent background so
that it has a very stylish and spare appearance. As with wm2 the
configuration can only be changed by recompiling, but this can be done
very quickly as the source is not large or complex. Source for either
wm2 or wmx can be obtained from the wm2 web-site.
Afterstep
A reader pointed out an error in my description of the Afterstep
window-manager in LG #14. Rather than being based on Fvwm2 code,
Afterstep is based on Fvwm version 1 code. Incidentally, pre-release 6
has been released and is well worth a trial. Several bugs have been
fixed but the improved documentation alone makes it worth the
download.
Xvile
Lately it seems that a fad is sweeping the insular world of vi-like
editors. First the X versions of Elvis and Vim appeared with pull-down
menus; now it appears that Xvile will soon have a menubar as well. If
a: you like vile/xvile and b: you have the Motif libs installed, you
may want to take a look at the patches for vile 7.00 available from
the Vile ftp site. The patches A through G need to be applied to the
vile 7.0 source. It looks like the menu items will be fairly easy to
set up, as they make use of the standard vile functions. An
implementation for non-Motif X setups is planned.
I have mixed feelings about GUI conveniences such as menus in a vi
editor. One of the appealing traits of these editors is the lack of
such visible features combined with a wide array of invisible and
powerful commands. Little overhead but great power and speed. If you
have to reach for the mouse and select a menu-item, why not use Nedit
(for example) which is designed as a mouse-oriented editor? On the
other hand, how many users have had an unpleasant first-time
experience with vi and rejected it forever? At least the menubar will
have a "quit-ZZ" item, allowing a novice to end a first session
without having to desperately flee to another virtual console and kill
the vi process from afar!
TkDesk
The latest version of this versatile desktop/file manager can be found
at the TkDesk home site. Version 1.0b4 has been released and many
minor bugs have been fixed. There are three patches available on the
web-site which should be applied by users of the program. Two of them
are changes to *.tcl files, whereas the third is a c-source-level
change which requires recompilation. Debian users can instead install
a patched TkDesk package which is available from the
/bo/binary-i386/x11 directory of ftp.debian.org and its mirrors.
The Midnight Commander
For the past several months a beta development cycle has been underway
in preparation for the release of mc-3.1.5. The recent releases (the
latest as of this writing is patchlevel 25) have been very stable and
usable. If you use the Midnight Commander frequently it might be worth
your while to try the new version, as many improvements have been
made.
An internal editor has been incorporated into mc, though you still can
change the settings and use any console-mode external editor. The FTP
capabilities of mc have been augmented and the Tk version has made
great strides and needs just a few more features to be the equal of
the classic console version. mc now has the ability to dive into *.rpm
and *.deb files in the same manner it has been able to do with *.tgz
and *.zip files, allowing you to inspect their contents without
unpacking the archives.
It's only available in source form, but it comes with a good configure
script and compiles easily here. The source is available from the mc
home site.
XEmacs Update
Last month I wrote about the release of XEmacs 19.15. The XEmacs team
didn't stop and rest on their laurels (probably because some
unexpected problems showed up after the release!); beta releases of
XEmacs 20.1 began showing up about twice a week at ftp.xemacs.org. It
looked as if version 20.1 was about to be released, but for some
reason the release was cancelled and they moved on to betas of 20.2.
I'm running beta 2 now, and have found that several small problems
with 19.15 have been fixed. The Customization utility works quite a
bit better now, for one. When 20.2 is released I would recommend
obtaining it, as it looks like it will be an improvement over 19.15.
Another approach if you've already installed 19.15 is to visit the
XEmacs patches page, which offers patches to upgrade 19.15 to
patchlevel 2. The problems dealt with are described on the page; if
the patches concern modes or utilities you never use, there's no point
in applying them.
_________________________________________________________________
_________________________________________________________________
Copyright © 1997, Larry Ayers
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Slackware
By Sean Dreilinger, sean@kensho.com
_________________________________________________________________
_________________________________________________________________
Contents:
* Slackware Is Not For You (Or Maybe It Is)
* A Quick History
* Why, Then?
* Planning
* Thinking Through Storage and File Systems
* Upgrade? Think Twice!
* Boot Disks: Always A Good Thing
* Slackware Setup Worksheet
* Slackware Setup Program
* Troubleshooting
* Basking In The Afterglow
* Install and Test
* Secure the System
* Back Up
Slackware Is Not For You (Or Maybe It Is)
Welcome to the Slackware distribution of Linux! This chapter aims to
help the new Linux user or administrator evaluate Slackware, plan a
Slackware system, and install Slackware Linux. In it you'll find an
emphasis on careful planning rather than rushing into an impetuous
installation. A special worksheet is included to help you "get it
right the first time", which I hope will be especially useful to
overworked Unix administrators in busy environments.
Whether or not to choose Slackware as the flavor of Linux you will use
is a serious consideration. It may seem like a trivial decision now,
but Linux boxes have a way of taking on more and more responsibility
in organizational computing environments. Plenty of Linux experiments
have evolved in their first year to become mission-critical machines
serving many more users and purposes than originally intended.
Slackware is one of the most widely used distributions of Linux. When
it comes to finding the newest, easiest, or most carefully planned
distribution of Linux, Slackware may be "none of the above". Some
background on the life and times of Slackware put things into
perspective.
A Quick History
In 1993, SLS created one of the first organized distributions of
Linux. Although it was a great start, the SLS distribution had many
shortcomings (it didn't exactly work, for starters). Slackware, a
godsend from Patrick Volkerding, solved most of these issues, was
mirrored via FTP and pressed onto CD-ROMs the worldwide, and quickly
became the most widely used flavor of Linux. For a while, Slackware
was the only full-featured Linux solution. Other Linux distribution
maintainers, both commercial and nonprofit, have gradually developed
distributions that are also well worth your consideration.
According to statistics maintained by the Linux Counter Project,
Slackware inhabits about 69% of all machines that run Linux. Slackware
is typically obtained via FTP or CD-ROM and installed on a 486-class
computer running at 66Mhz with about 16 MB of memory and 1050 MB of
storage. More information about Linux use and the Linux Counter
Project is available on the World Wide Web.
http://domen.uninett.no/\~hta/linux/counter.html
By January 1994, Slackware had achieved such widespread use that it
earned a popular notoriety normally reserved for rock stars and cult
leaders. Gossip spread through the Usenet suggesting that the entire
Slackware project was the work of witches and devil-worshippers!
"Linux, the free OS....except for your SOUL! MOUHAHAHAHA!"
From: cajho@uno.edu
Date: 7 Jan 1994 15:48:07 GMT
Jokes alluding to RFC 666, demonic daemons, and speculation that Pat
Volkerding was actually L. Ron Hubbard in disguise were rampant in the
threads that followed. The whole amusing incident probably helped
Slackware gain some market share:
I LOVE THIS!!
I was browsing here to figure which version of Linux to install, but
after this, I think that I hve no choice but to install Slackware now.
From: David Devejian
Date: 10 Jan 1994 04:57:41 GMT
All folklore and kidding aside, Slackware is a wise and powerful
choice for your adventures in Linux, whether you are a hobbyist,
student, hacker, or system administrator in the making.
Why, Then?
If you are a system administrator, you may already be dealing with one
or more key servers running Slackware. Unless you have time to
experiment at work, sticking to the tried-and-true distribution may be
the easiest way to go. If you expect to get help from Unix literate
friends and colleagues, better make sure they're running something
compatible-odds are they're running Slackware. Its shortcomings are
widely acknowledged, for the most part discovered, documented and
patched whenever possible. You can put together a Slackware box, close
the known security holes, and install some complementary tools from
the other Linux distributions to create an excellent Unix server or
desktop workstation, all in about half a day.
Slackware Pros and Cons
Slackware is old It's mature, widely available, and the most widely
installed Linux distribution
Slackware lacks sexy administrative tools a la RedHat You're free to
add other distributions such as the RedHat package manager
Slackware includes bundled security holes We know what some of the
vulnerabilities are and volunteers have posted fixes
Donald Knuth complained about the fonts Patrick Volkerding fixed the
fonts
Linus Torvalds uses another distribution Oh well
Slackware is assembled by Devil Worshippers Satanist crackers (not
SATAN itself) will avoid your box
Slackware is no longer This is a myth, Slackware is developed actively
maintained, sans marketing hype
Slackware is not supported by a commercial vendor or sanctionaed user
group Linux support is available along with consultants, explained
further in the section on Commercial Support
Slackware is not created by a committee or development team Good. A
system designed by one accountable individual is cohesive
If you are still undecided whether Slackware is the tastiest flavor of
Linux for you, have a look at the "Buyer's Guide" published in the
Linux Journal, which gives a thorough comparison and evaluation of
each major distribution. For a straightforward listing of Linux
flavors, have a look at the Linux Distribution HOWTO on the Internet:
http://sunsite.unc.edu/LDP/HOWTO/Distribution-HOWTO.html
Planning
Nine tenths of wisdom is timing. The right time to set up Slackware is
afteryou've carefully planned the installation and alternatives in the
unfortunate event of a problem. A well-planned installation of
Slackware will repay itself many times over in the future, when the
natural process of Linux evolution leads you to add disk space,
install a newer Slackware release, or jettison any old, inferior
operating systems that may linger on your drives.
Like Unix, Slackware Linux tends to grow like a virus. If you succeed
in getting one Slackware box up and running, you're likely to start
infecting other computers that belong to your friends, family, and
coworkers. When this happens, you'll be grateful that you at least
took the time to think through this first setup-and so will they!
This section will help you decide...
* if you've got what it takes (of course you do!)
* whether your computer hardware is ready to run Slackware Linux
* where and how to get Slackware Linux
* how to best arrange disks and file systems to protect your work
* not to upgrade an older version of Slackware
* which packages of the distribution you want and need
* how you will handle installation problems (however unlikely)
Literacy Required
Linux is a powerful operating system, and with power comes
responsibility. Like Linux, the Slackware release treats you with the
respect you deserve as an intelligent human being. If you elect to
wipe out a few hard drives with a misplaced punctuation mark, so be
it. There are graceful and intelligent front-ends to Linux that allow
the average end-user to get lots of productive work done without ever
delving into the cryptic subtleties of Unix setup and administration.
But there's no such luck for you, the appointed installation guru. If
you're going to install Slackware, be forewarned that you should know
your IRQs from your RS232s and your SCSIs from your IDEs.
Hardware Compatibility
This is an essential element for planning any Linux installation. The
only Slackware-specific hardware issue is this: you must confirm that
the particular version (vintage, release) distribution of Slackware
you'll be installing from provides a kernel and drivers to support
your hardware. You're in great shape with just about any
IBM-compatible personal computer with an Intel CPU older than the date
on your Slackware distribution but younger than 1992 (built after
1992). If you have a bleeding-edge machine, you may need to download a
newer boot disk that includes an updated kernel and drivers.
For the latest information on it general Linux hardware compatibility,
check the Linux Hardware Compatibility HOWTO document on the World
Wide Web:
http://sunsite.unc.edu/LDP/HOWTO/Hardware-HOWTO.html
To check for up-to-the minute Slackware news, such as which boot
kernels are available, you can look in this directory of the Slackware
home ftp site, ftp.cdrom.com:
ftp://ftp.cdrom.com/pub/linux/slackware/patches/
Thinking Through Storage And File Systems
Careful planning of file systems and the storage media upon which they
reside can spare you hours of painful juggling at a later date. In
particular, putting all of your custom administration files, user
homes, and local software onto dedicated partitions or disks will
allow you to upgrade Slackware on the root partition with minimal
disruption to your improvements to the system.
Multiple Operating Systems On One Hard Drive
A typical personal computer has one fixed disk drive. If you're a
hobbyist or power user, you may already have installed more than one
Operating System on that drive. For example, your computer may have
shipped running MS-DOS or Windows 95 as a pre-loaded operating system,
after which you added another operating system such as OS/2, NeXTstep,
Geoworks, or Linux. To run multiple operating systems from one drive,
the disk is divided into separate areas known as partitions. Each
partition may contain a different operating system. Once you've
installed a second OS, you also need to install a small program called
a boot manager or OS loader that runs at system startup time and
offers you a choice of all the installed operating systems.
If you're adding Linux to a computer running a lesser OS, you may
elect to keep the old operating system around for kicks. Take a look
at the Linux Loader (LILO), a high-powered boot manager that comes
free with Slackware. The latest distribution of LILO and its
documentation are available via FTP from this URL:
ftp://lrcftp.epfl.ch/pub/linus/local/lilo/
An overview of LILO and how you can use it are easily gleaned from the
LILO Mini-HOWTO:
http://sunsite.unc.edu/LDP/HOWTO/mini/LILO/
Designing a File System To Use Multiple Partitions
In a simple world, you can set up Linux to run on a single disk
partition (or maybe two-one for swap). In a real-world, multi-user
Unix system, a single-drive file system setup creates unnecessary
risks and hassles you can avoid by distributing the file system across
multiple partitions. It's all the same to Unix, which views the file
system as a continuum of available space comprised of all the disks
and partitions "mounted" into various locations on the file tree.
If you create a Slackware setup on only one drive partition, you
effectively put all of your eggs in one basket-one user may receive an
abundance of e-mail and overload the /var/mail file system, another
might store enormous files in their home area, etc. As with many Unix
quandaries, you have a choice of solutions to control file system use,
including quotas and user limits. Distributing your Unix file system
across multiple partitions and disks has an extra benefit for
Slackware users-it allows you to upgrade the Slackware installation
with a minimum of pain.
The Linux file system standard puts the personal space of each user
into a subdirectory of /home. The user Linus would typically have a
home under /home/linus, the user Patricia under /home/patricia, and so
on. An easy way to protect this file system during future upgrades is
to mount /home on a separate disk or partition. Same goes for custom
programs and resources you add to the off-the-shelf version of
Slackware-plan to put these on a separate disk mounted to /usr/local
and you'll have much less grief when it comes time to upgrade. "Where
things go"---or where they try to go unless you dictate otherwise---
in a Slackware box is determined by a standard file system layout,
called the Linux File system Hierarchy Standard. Read all about it
URL:
http://www.pathname.com/fhs/
Designing a File System To Use Multiple Hard Drives
In some settings, Linux boxes are assembled from leftover
parts-"worthless" 386 and 486 motherboards, old grayscale monitors,
and discarded hard drives. You may need to link together several
ancient 40MB hard drives to come up with enough space to install
Slackware. In other environments using Linux, there are so many users
and such large development projects that several of the biggest,
state-of-the-art drives or drive arrays must be integrated to provide
enough space.
You can install Slackware onto more than one disk at once by
designating individual disks to hold specific parts of the Slackware
installation (just like using multiple partitions), creating a
logically continuous and unified file system.
For an informed second opinion on partitioning, swap space setup,
fragmentation and inode size consult Kristian Koehntopp's Partitions
Mini-HOWTO via Internet URL:
http://sunsite.unc.edu/mdw/HOWTO/mini/Partition/
Upgrade? Think Twice!
24-Aug-95 NOTE: Trying to upgrade to ELF Slackware from a.out
Slackware will undoubtedly cause you all kinds of problems. Don't do
it.
Patrick Volkerding
One thing we don't hear too often with Slackware is the U-word.
Slackware's setup program is designed to put a fresh operating system
onto empty hard disks or empty disk partitions. Installing on top of a
previous Slackware installation can erase your custom applications and
cause compatibility problems between updated applications and older
files on the same system. When Slackware was first put together,
everyone was a first-time Linux user, and the system was always
experimental-reinstalling the entire operating system and applications
was the norm in a developmental system. Today, many institutions and
businesses now run mission-critical applications on Slackware Linux.
In such environment, a simple reboot is a planned activity and taking
down the system and overwriting all the user files or custom
applications is absolutely unacceptable.
So, if you cracked open these pages to plot an upgrade, better think
twice. If you're planning a first-time Slackware installation, there
are a few decisions you can make now that will ease upgrading in the
future:
* assign /usr/local to be mounted from its own separate drive or
partition
* build and install all of your organization's custom applications
under the /usr/local area of the file system
* assign /home to be mounted from its own separate drive or
partition
* make sure all user "homes" are added under the /home area of the
file system
Teaching you how to finagle a Slackware upgrade is beyond the scope of
this chapter, but it is workable if you are an experienced Unix
administrator and you've taken the precautions above. There is an
Internet resource that claims to analyze your distribution and bring
it up to date across the Internet, you might want to have a look at
this URL if you're facing an upgrade situation:
ftp://ftp.wsc.com/pub/freeware/linux/update.linux/
Or read, weep, and learn from the upgrade expertise of Greg Louis in
his mini HOWTO document: Upgrading Your Linux Distribution, available
where finer LDP publications are mirrored:
http://sunsite.unc.edu/LDP/
Select An Installation Method
Slackware can be installed from a variety of media and network sources
to fit your needs and budget. Every installation method will require
you to have at least three floppy diskettes available to get started.
CD-ROM
Installation from CD-ROM is fast, popular, and convenient. Although
someone has to break down and pay for the initial purchase of a
CD-ROM, sharing CD's is encouraged. Because Linux and the Slackware
distribution are copylefted, you may make as many copies as you like.
CD-ROM installation is also a bit better practice in terms of
netiquette, since you're not hogging bandwidth for an all-day FTP
transfer. Finally, you may be grateful for the extra utilities and
documentation that accompany the CD-ROM, especially if you run into
installation hassles or need to add components in the future.
Party!
If you're a hobbyist (or want to watch a few dozen Slackware installs
before taking on the task at work), see if there is a LUG (Linux User
Group) in your area that sponsors install parties. Imagine a roomful
of generous and knowledgeable hackers uniting to share CD-ROMs and
expertise with other enthusiasts.
FTP
According to the Linux Counter Project, FTP is still the most popular
way to obtain Linux by a narrow margin. Once you transfer Slackware
from the closest possible FTP mirror, you'll still need to put the
Slackware 'disk sets' onto installation media such as a hard drive
partition or laboriously copy them onto 50-odd floppy diskettes.
NFS
In a networked environment, it is possible to install Slackware on a
shared file system and allow everyone on the Local net to attach to
this shared location and install. If you have the technical know-how
or a geeked out system administrator who is Linux-literate, this is a
great way to go. The initial distribution of Slackware can be added to
the network via CD-ROM, FTP, Loading floppies, tape, or even via a
remote NFS share across the Internet! For details on such a remote
share, see these URLs:
* http://sunsite.doc.ic.ac.uk/sunsite/access/nfs.html
* ftp://ftp.cdrom.com/pub/linux/slackware/MIRRORS.TXT
* http://www.cs.us.es/archive/nfs.html
Floppy
It's time consuming, but it works-you can buy or create the pile of
floppies needed to install Slackware and then feed them into your box
one-by-one when prompted. Slackware 'disk sets' are actually designed
and arranged to fit floppy diskettes. If you happen to have a huge
stack of recycled high-density floppy diskettes at your disposal, this
can be the most economical way to go.
Hard Disk
This is the way to do it if you've transferred the Slackware
distribution across the Internet via FTP-you'll escape the floppy trap
by merely creating boot, root, and rescue diskettes. It requires you
to have an extra disk or disk partition with extra space to hold the
Slackware files during installation (you can erase them afterwards).
Installation from the hard drive is also a workaround if you bought
the CD but your CD-ROM drive is not supported by any of the Linux
kernels that come with the Slackware CD. You can use your present
operating system to transfer the Slackware files onto spare hard disk
space, then boot into the Slackware installation.
Tape
Still experimental as of this writing, tape offers a great compromise
of speed and economy when installing Slackware-worth considering if a
friend with compatible tape drive can dupe a CD or FTP archive for
you. Get the latest details from the TAPE section of the INSTALL.TXT
file that accompanies your Slackware distribution.
Boot Disks: Always a Good Thing
Even if you're gifted with a direct T-3 Internet connection that
allows you to suck up a new distribution of Slackware right off the
'net, you'll be wise to start by building the two Slackware setup
disks (boot and root) before proceeding. In the event of an
unfortunate accident (power outage, feline friends traversing the
keyboard, or even human error), these two little disks, in the hands
of an experienced Unix hacker, may be able to revive your system or at
least rescue your personal files.
Prepare To Be Questioned (There Will Be a Quiz...)
During the installation, must choose which disk sets (Slackware lingo
for collections of software) and individual programs to install. You
can usually just accept the default recommendation of whether or not a
package is worth having. A few setup decisions are crucial.
Mid-installation is no time to decide you want to boot back into OS/2
and look up what kind of graphics chip your video card uses, which
network card you've got in there, or whether you'll be needing a SCSI
or an IDE kernel to get started.
Contingency Plan: Food For Thought
I've often blurted out to a supervisor, "Oh sure, I can have it up and
running in a few hours." Famous last words. If anyone else has a stake
in the Slackware computer's health, you owe it to them and yourself to
think through a less-than-perfect installation attempt:
1. What's your plan in the unfortunate event that Slackware Linux
doesn't run perfectly on your system?
2. Do you have the necessary tools and know-how to revert to your
previous operating system?
3. Do you have a backup of your old system on-hand, and do you have
experience restoring entire systems?
4. Is this a shared computer? Will people be coming into work on
Monday expecting to log in to the system you just hosed?
5. Where is the closest Unix expert with Slackware Linux expertise?
Can you call on them to help you in the event of a problem setting
up or upgrading a critical Slackware system?
Slackware Setup Worksheet
After the files are all copied, Slackware can go on to do most of the
system and network configuration, if you're ready. To help you plan
your decisions, Section 3 consists of a worksheet derived from the
text-based Slackware setup program. You can use this worksheet to
record answers in advance (while your computer is still working!), so
you'll be ready with the necessary details-partitions, IP addresses,
modem and mouse IRQs, host and domain names, and others that you're
required to provide during setup.
1. Keyboard: Slackware setup will want to know if you need to remap
your keyboard to something other than a standard USA 101 key
layout? Yes or No.
2. Swap Configuration:Do you have one or more partitions prepared as
type 82 (Linux Swap)? Yes or No.
3. Do you want setup to use mkswap on your swap partitions? Most
likely "yes", unless you have less than 4MB of RAM and have
already done this to help setup work better. Yes or No.
4. Prepare Main Linux Partition: Setup will list any partitions
marked as type 83 (Linux Native) and ask which one to use for the
root (/) of the Linux file system. Use a format like /dev/hda3 or
whatever the device name is. Yes or No.
Last chance to back out! When using the install from scratch
option, you must install to a blank partition. If you have not
already formatted it manually, then you must format it when
prompted. Enter I to install from scratch, or a to add software to
your existing system.
5. (Re)format the main Linux partition. Would you like to format this
partition? Yes or No.
Ext2fs defaults to one inode per 4096 bytes of drive space. If
you're going to have many small files on your drive, you may need
more inodes (one is used for each file entry). You can change the
density to one inode per 2048 bytes, or even per 1024 bytes. Enter
2048 or 1024, or just hit Enter to accept the default of 4096.
4096, 2048, or 1024.
6. Prepare Additional Linux Partitions: You can mount some other
partitions for /usr or /usr/X11 or whatever (/tmp---you name it).
Would you like to use some of the other Linux partitions to mount
some of your directories? Yes or No.
These are your Linux partitions (partition list displayed). These
partitions are already in use (partition list displayed). Enter
the partition you would like to use, or type q to quit adding new
partitions. Use a format such as: /dev/hda3 or whatever the device
name is. Partition name or quit
7. Would you like to format this partition? Yes, No, or Check
Sections, too
Now this new partition must be mounted somewhere in your new
directory tree. For example, if you want to put it under /usr/X11R6,
then respond: /usr/X11R6 Where would you like to mount this new
partition? Mount point
Would you like to mount some more additional partitions? Yes or No.
DOS and OS/2 Partition Setup: The following DOS FAT or OS/2 HPFS
partitions were found: (partition list displayed).
Would you like to set up some of these partitions to be visible from
Linux? Yes or No.
Please enter the partition you would like to access from Linux, or
type q to quit adding new partitions. Use a format such as: /dev/hda3
or whatever the device name is. Partition name or Quit
Now this new partition must be mounted somewhere in your directory
tree. Please enter the directory under which you would like to put it.
for instance, you might want to reply /dosc, /dosd, or something like
that. Where would you like to mount this partition? Mount point
Source Media Selection:
1. Install from a hard drive partition.
2. Install from floppy disks.
3. Install via NFS.
4. Install from a pre-mounted directory.
5. Install from CD-ROM.
1, 2, 3, 4, or 5
Install from a hard drive partition: To install directly from the
hard disk you must have a partition with a directory containing the
Slackware distribution such that each disk other than the boot disk is
contained in a subdirectory. For example, if the distribution is in
/stuff/slack, then you need to have directories named /stuff/slack/a1,
/stuff/slack/a2, and so on, each containing the files that would be on
that disk. You may install from DOS, HPFS, or Linux partitions. Enter
the partition where the Slackware sources can be found, or p to see a
partition list. Partition name or Partition list
What directory on this partition can the Slackware sources be found.
In the example above, this would be: /stuff/slack. What directory are
the Slackware sources in? Directory name
What type of file system does your Slackware source partition
contain?
1. FAT (MS-DOS, DR-DOS, OS/2)
2. Linux Second Extended File System
3. Linux Xiafs
4. Linux MINIX
5. OS/2 HPFS
1, 2, 3, 4, or 5
Install from a pre-mounted directory: OK, we will install from a
directory that is currently mounted. This can be mounted normally or
through NFS. You need to specify the name of the directory that
contains the subdirectories for each source disk. Which directory
would you like to install from? Directory name
Install from floppy disks: The base Slackware series (A) can be
installed from 1.2M or 1.44M media. Most of the other disks will not
fit on 1.2M media, but can be downloaded to your hard drive and
installed from there later. Which drive would you like to install from
(1/2/3/4)?
1. /dev/fd0u1440 (1.44M drive a:)
2. /dev/fd1u1440 (1.44M drive b:)
3. /dev/fd0h1200 (1.2M drive a:)
4. /dev/fd1h1200 (1.2M drive b:)
1, 2, 3, or 4
Install via NFS: You're running off the hard drive file system. Is
this machine currently running on the network you plan to install
from? If so, we won't try to reconfigure your ethernet card. Are you
up-and-running on the network? Yes or No.
You will need to enter the IP address you wish to assign to this
machine. Example: 111.112.113.114. What is your IP address? IP address
Now we need to know your netmask. Typically this will be
255.255.255.0. What is your netmask? IP address
Do you have a gateway? Yes or No.
What is your gateway address? IP address
Good! We're all set on the local end, but now we need to know where to
find the software packages to install. First, we need the IP address
of the machine where the Slackware sources are stored. Since you're
already running on the network, you should be able to use the hostname
instead of an IP address if you wish.
What is the IP address of your NFS server? IP address
There must be a directory on the server with the Slackware sources for
each disk in subdirectories beneath it. Setup needs to know the name
of the directory on your server that contains the disk subdirectories.
For example, if your A3 disk is found at /slackware/a3, then you would
respond: /slackware.
What is the Slackware source directory? Directory name
Install from CD-ROM: What type of CD-ROM drive do you have?
1. Works with most ATAPI/IDE CD drives /dev/hd*
2. SCSI /dev/scd0 or /dev/scd1
3. Sony CDU31A/CDU33A /dev/sonycd
4. Sony 531/535 /dev/cdu535
5. Mitsumi, proprietary interface---not IDE /dev/mcd
6. New Mitsumi, also not IDE /dev/mcdx0
7. Sound Blaster Pro/Panasonic /dev/sbpcd
8. Aztech/Orchid/Okano/Wearnes /dev/aztcd
9. Phillips and some ProAudioSpectrum16 /dev/cm206cd
10. Goldstar R420 /dev/gscd
11. Optics Storage 8000 /dev/optcd
12. Sanyo CDR-H94 + ISP16 soundcard /dev/sjcd
13. Try to scan for your CD drive
1, 2, 3, 4, 5, 6, 7 8, 9, 10, 11, 12, or 13 IDE CD-ROM: Enter the
device name that represents your IDE CD-ROM drive. This will probably
be one of these (in the order of most to least likely): /dev/hdb
/dev/hdc /dev/hdd /dev/hde /dev/hdf /dev/hdg /dev/hdh /dev/hda Device
name
SCSI CD-ROM: Which SCSI CD-ROM are you using? If you're not sure,
select /dev/scd0. 1. /dev/scd0
2. /dev/scd1
Installation method: With the Slackware CD, you can run most of the
system from the CD if you're short of drive space or if you just want
to test Linux without going through a complete installation. Which
type of installation do you want (slakware or slaktest)?
* [slakware] Normal installation to hard drive
* [slaktest] Link family /usr-$>$/cdrom/live/usr to run mostly from
CD-ROM
slakware or slaktext
Series Selection: Identify which Packages you plan to install. You
may specify any combination of disk sets at the prompt which follows.
For example, to install the base system, the base X Window System, and
the Tcl toolkit, you would enter: a x tcl Which disk sets do you want
to install?
* [A] Base Linux system
* [AP] Various applications that do not need X
* [D] Program Development (C, C++, Kernel source, Lisp, Perl, etc.)
* [E] GNU Emacs
* [F] FAQ lists
* [K] Linux kernel source
* [N] Networking (TCP/IP, UUCP, Mail)
* [Q] Extra kernels with special drivers (needed for non-SCSI CD)
* [T] TeX
* [TCL] Tcl/Tk/TclX, Tcl language, and Tk toolkit for developing X
apps
* [X] Xfree86 Base X Window System
* [XAP] X Window Applications
* [XD] Xfree86 X11 server development system
* [XV] Xview (OpenLook virtual Window Manager, apps)
* [Y] Games (that do not require X)
Any combination of a ap d e f k n q t tcl x xap xd xv y and other disk
sets offered, separated by spaces
Software Installation: Next, software packages are going to be
transferred on to your hard drive. If this is your first time
installing Linux, you should probably use PROMPT mode. This will
follow a defaults file on the first disk of each series you install
that will ensure that required packages are installed automatically.
You will be prompted for the installation of other packages. If you
don't use PROMPT mode, the install program will just go ahead and
install everything from the disk sets you have selected. Do you want
to use PROMPT mode (y/n)?
These defaults are user definable---you may set any package to be
added or skipped automatically by editing your choices into a file
called TAGFILE that will be found on the first disk of each series.
There will also be a copy of the original tagfile called TAGFILE.ORG
available in case you want to restore the default settings. The
tagfile contains all the instructions needed to completely automate
your installation.
Would you like to use a special tagfile extension?
You can specify an extension consisting of a "." followed by any
combination of 3 characters other than tgz. For instance, I specify
'.pat', and then whenever any tagfiles called 'tagfile.pat' are found
during the installation they are used instead of the default "tagfile"
files. If the install program does not find tagfiles with the custom
extension, it will use the default tagfiles. Enter your custom tagfile
extension (including the leading ("."), or just press Enter to
continue without a custom extension. Tagfile extension Enter
Extra Configuration: If you wish, you may now go through the options
to reconfigure your hardware, make a bootdisk, and install LILO. If
you've installed a new kernel image, you should go through these steps
again. Otherwise, it's up to you.
Boot Disk Creation: It is recommended that you make a boot disk.
Would you like to do this? Yes or No.
Now put a formatted floppy in your boot drive. This will be made into
your Linux boot disk. Use this to boot Linux until LILO has been
configured to boot from the hard drive. Any data on the target disk
will be destroyed. Insert the disk and press Return, or s if you want
to skip this step.
Modem Setup: A link in /dev will be created from your callout device
(cua0, cua1, cua2, cua3) to /dev/modem. You can change this link later
if you put your modem on a different port. Would you like to set up
your modem? Yes or No.
These are the standard serial I/O devices, Which device is your
modem attached to (0, 1, 2, 3)?
1. /dev/ttyS0 (or COM1: under DOS)
2. /dev/ttyS1 (or COM2: under DOS)
3. /dev/ttyS2 (or COM3: under DOS)
4. /dev/ttyS3 (or COM4: under DOS)
Mouse Setup: A link will be created in /dev from your mouse device
to /dev/mouse. You can change this link later if you switch to a
different type of mouse. Would you like to set up your mouse? Yes or
No.
These types are supported. Which type of mouse do you have (1, 2, 3,
4, 5, 6, 7)?
1. Microsoft compatible serial mouse
2. QuickPort or PS/2 style mouse (Auxiliary port)
3. Logitech Bus Mouse
4. ATI XL Bus Mouse
5. Microsoft Bus Mouse
6. Mouse Systems serial mouse
7. Logitech (MouseMan) serial mouse
1, 2, 3, 4, 5, 6, or 7
These are the standard serial I/O devices. Which device is your
mouse attached to (0, 1, 2, 3)?
1. /dev/ttyS0 (or COM1: under DOS)
2. /dev/ttyS1 (or COM2: under DOS)
3. /dev/ttyS2 (or COM3: under DOS)
4. /dev/ttyS3 (or COM4: under DOS)
0, 1, 2, or 3
Network Configuration: Now we will attempt to configure your mail
and TCP/IP. This process probably won't work on all possible network
configurations, but should give you a good start. You will be able to
reconfigure your system at any time by typing netconfig. First, we'll
need the name you'd like to give your host. Only the base hostname is
needed right now (not the domain). Enter the hostname. Hostname
Now, we need the domain name. Do not supply a leading "." Enter the
domain name. Domain name
If you only plan to use TCP/IP through loopback, then your IP address
will be 127.0.0.1 and we can skip a lot of the following questions. Do
you plan to ONLY use loopback? Yes or No.
Enter your IP address for the local machine. Example: 111.112.113.114.
Enter the IP address for this machine (aaa.bbb.ccc.ddd). IP address
Enter your gateway address, such as 111.112.113.1. If you don't have
a gateway, you can edit /etc/rc.d/rc.inet1 later,or you can probably
get away with entering your own IP address here. Enter the gateway
address (aaa.bbb.ccc.ddd). IP address
Enter your netmask. This will generally look something like this:
255.255.255.0. Enter the netmask (aaa.bbb.ccc.ddd). IP address
Will you be accessing a nameserver? Yes or No.
Please give the IP address of the name server to use. You can add
more Domain Name Servers by editing /etc/resolv.conf. Name Server for
your domain (aaa.bbb.ccc.ddd)? HIP address
You may now reboot your computer by pressing Ctrl+Alt+Delete. If you
installed LILO, remove the boot disk from your computer before
rebooting. Don't forget to create you {/etc/fsta if you don't have
one!
Making Slackware Happen
If you've taken the time to plot and plan as recommended in the
preceding sections, then the actual installation will be a piece of
cake. There isn't much writing needed to explain the actual process of
loading Slackware onto your computer(s). You just follow the steps to
build boot and root diskettes, then answer a long series of questions
asked by the menu-driven Slackware installation program. If you've
completed the Slackware Installation Worksheet, these questions will
be familiar and everything will run smoothly.
Build Some Boot Disks
Choose Your Kernel
When installing Slackware Linux, you must create a boot diskette with
a Linux kernel that is specially prepared to recognize your system
hardware. For example, to install Slackware from an IDE CD-ROM drive
onto a SCSI hard drive, the kernel that you put onto the boot diskette
will need to have drivers for your SCSI card and your IDE CD-ROM
drive.
The kernels are stored as compressed binary image files that you can
access from most any operating system to create a Slackware Boot
diskette. On the Slackware FTP site, CD-ROM, or NFS mount, you'll find
a subdirectory called bootdsks.144-containing 1.44 MB kernel images
for creating boot disks on 1.44MB high density 3.5'' floppy diskettes.
If you're working from a 5.25'' floppy diskette drive, look in a
directory called bootdsks.12 for kernel images that will fit the
smaller diskette format.
Table 2 provides a quick reference of the kernel images available as
we went to press. Information and up-to-date boot disk image
information is available from this URL:
ftp://ftp.cdrom.com/pub/linux/slackware/bootdsks.144/README.TXT
Slackware Boot Kernel Image Descriptions
Table 1
aztech.i CD-ROM drives: Aztech CDA268-01A, Orchid CD-3110,
Okano/Wearnes, CDD110, Conrad TXC, CyCDROM CR520, CR540
bare.i (none, just IDE support)
cdu31a.i Sony CDU31/33a CD-ROM
cdu535.i Sony CDU531/535 CD-ROM
cm206.i Philips/LMS cm206 CD-ROM with cm260 adapter card
goldstar.i Goldstar R420 CD-ROM (sometimes sold in a Reveal
"Multimedia Kit")
mcd.i NON-IDE Mitsumi CD-ROM support
mcdx.i Improved NON-IDE Mitsumi CD-ROM support
net.i Ethernet support
optics.i Optics Storage 8000 AT CD-ROM (the "DOLPHIN" drive)
sanyo.i Sanyo CDR-H94A CD-ROM support
sbpcd.i Matsushita, Kotobuki, Panasonic, CreativeLabs (Sound Blaster),
Longshine and Teac NON-IDE CD-ROM support
xt.i MFM hard drive support
Table 2
7000fast.s Western Digital 7000FASST SCSI support
Advansys.s AdvanSys SCSI support
Aha152x.s Adaptec 152x SCSI support
Adaptec 1542 SCSI support
Aha1740.s Adaptec 1740 SCSI support
Aha2x4x.s Adaptec AIC7xxx SCSI support (For these cards: AHA-274x,
AHA-2842, & AHA-2940, AHA-2940W, AHA-2940U, AHA-2940UW, AHA-2944D,
AHA-2944WD, & AHA-3940, AHA-3940W, AHA-3985, AHA-3985W)
Am53c974.s AMD AM53/79C974 SCSI support
Aztech.s All supported SCSI controllers, plus CD-ROM support for
Aztech CDA268-01A, Orchid CD-3110, Okano/Wearnes CDD110, Conrad TXC,
CyCDROM CR520, CR540
Buslogic.s Buslogic MultiMaster SCSI support
Cdu31a.s All supported SCSI controllers, plus CD-ROM support for Sony
CDU31/33a
Cdu535.s All supported SCSI controllers, plus CD-ROM support for Sony
CDU531/535
Cm206.s All supported SCSI controllers, plus Philips/LMS cm206 CD-ROM
with cm260 adapter card
Dtc3280.s DTC (Data Technology Corp) 3180/3280 SCSI support
Eata\_dma.s DPT EATA-DMA SCSI support (Boards such as PM2011, PM2021,
PM2041, & PM3021, PM2012B, PM2022, PM2122, PM2322, PM2042, PM3122,
PM3222, & PM3332, PM2024, PM2124, PM2044, PM2144, PM3224, PM3334.)
Eata\_isa.s DPT EATA-ISA/EISA SCSI support (Boards such as PM2011B/9X,
& PM2021A/9X, PM2012A, PM2012B, PM2022A/9X, PM2122A/9X, PM2322A/9X)
Eata\_pio.s DPT EATA-PIO SCSI support (PM2001 and PM2012A)
Fdomain.s Future Domain TMC-16x0 SCSI support
Goldstar.s All supported SCSI controllers, plus Goldstar R420 CD-ROM
(sometimes sold in a Reveal "Multimedia Kit")
In2000.s Always IN2000 SCSI support
Table 3
Iomega.s IOMEGA PPA3 parallel port SCSI support (also supports the
parallel port version of the ZIP drive)
Mcd.s All supported SCSI controllers, plusstandard non-IDE Mitsumi
CD-ROM support
Mcdx.s All supported SCSI controllers, plus enhanced non-IDE Mitsumi
CD-ROM support
N53c406a.s NCR 53c406a SCSI support
N\_5380.s NCR 5380 and 53c400 SCSI support
N\_53c7xx.s NCR 53c7xx, 53c8xx SCSI support (Most NCR PCI SCSI
controllers use this driver)
Optics.s All supported SCSI controllers, plus support for the Optics
Storage 8000 AT CDROM (the "DOLPHIN" drive)
Pas16.s Pro Audio Spectrum/Studio 16 SCSI support
Qlog\_fas.s ISA/VLB/PCMCIA Qlogic FastSCSI! support (also supports the
Control Concepts SCSI cards based on the Qlogic FASXXX chip)
Qlog\_isp.s Supports all Qlogic PCI SCSI controllers, except the
PCI-basic, which the AMD SCSI driver supports
Sanyo.s All supported SCSI controllers, plus Sanyo CDR-H94A CD-ROM
support
Sbpcd.s All supported SCSI controllers, plus Matsushita, Kotobuki,
Panasonic, CreativeLabs (Sound Blaster), Longshine and Teac NON-IDE
CDROM support
Scsinet.s All supported SCSI controllers, plus full ethernet support
Seagate.s Seagate ST01/ST02, Future Domain TMC-885/950 SCSI support
Trantor.s Trantor T128/T128F/T228 SCSI support
Ultrastr.s UltraStor 14F, 24F, and 34F SCSI support
Ustor14f.s UltraStor 14F and 34F SCSI support
Unix Operating Systems
If you have the Slackware kernel images on a Unix host that has a
floppy drive, you can quickly create the necessary boot and root
diskettes using Unix commands. You can use the dd command. The example
below which puts the scsi.s boot kernel image onto the floppy device
rfd0: dd if=scsi.s of=/dev/rfd0 obs=18k
You'll need to repeat this process with one of the root disk images
onto a second floppy diskette.
DOS, OS/2, MS-Windows 95 \& NT
Slackware bundles a utility called rawrite.exe that will generate boot
and root diskettes under DOS-literate operating systems. To write the
scsi.s kernel image onto the formatted, high-density diskette in your
A:$\backslash$ diskette drive, issue the following command: RAWRITE
SCSI.S A:
You'll need to repeat this process with one of the root disk images
onto a second floppy diskette.
Boot Into Action
Here's the big anticlimax. After all this planning, preparation, and
partitioning, you're in the home stretch. Make sure the boot floppy is
in the diskette drive, and restart your computer. Now is a good time
to go get some coffee (or whatever you like to keep you company) and
return to the machine ready to play the part of a button-pushing
drone, answering yes-no questions for an hour or so.
Log in as root (no password) and type setup or setup.tty
Slackware Setup Program
Slackware comes with two versions of an excellent setup program. One
is a colorful, dialog-based, menu-driven version. An alternative
setup, setup.tty, is a text-only version of the installation that you
may actually prefer, because detailed diagnostics and error messages
will stay on the screen and not be erased by the next dialog box,
which happens in the color version. If you're attempting a Slackware
setup on sketchy hardware, I strongly recommend the less colorful
setup.tty routine. If you don't know much about Unix and would feel
more comfortable with an attractive. ``clean'' interface to the same
setup process, then by all means go for the beautiful setup.
Slackware96 Linux Setup (version HD-3.1.0)
Welcome to Slackware Linux Setup
Hint: If you have trouble using the arrow keys on your keyboard, you
can use '+', '-', and TAB instead. Which option would you like?
* HELP: Read the Slackware Setup HELP file
* KEYMAP: Remap your keyboard
* MAKE TAGS: Tagfile customization program
* TARGET: Select target directory [now: / ]
* SOURCE: Select source media
* DISK SETS: Decide which disk sets you wish to install
* INSTALL: Install selected disk sets
* CONFIGURE: Reconfigure your Linux system
* PKGTOOL: Install or remove packages with Pkgtool
* EXIT: Exit Slackware Linux Setup OK Cancel
To transfer Slackware onto your system from here should involve little
more than selecting what you want off the menus. By filling out the
Section 3 worksheet in advance, you should be able progress quickly
through each menu in order, until you reach the INSTALL option, at
which point things may s l o w down: you are advised to select the
PROMPT feature and read about each software package, deciding whether
or not you'd like it to end up on your Slackware system. The last part
of a regular setup is the CONFIGURE section on the setup menu, and the
questions you must answer bear a striking resemblance to the second
half of the Section 3 worksheet.
Is That All?
Definitely not! At this point, you've either got some annoying
obstacle that is preventing the setup from completing, or more likely,
you're looking at the root prompt darkstar\~\#
and wondering "What Next?"
Well, if you're plagued by problems, you'll want to proceed directly
to the next section on troubleshooting. If things appear to be in
working order, you've still got some details to attend to. Sort of
like purchasing a new automobile-after you've selected an paid for a
new car, there are still some things you need before you can drive it
with confidence-insurance, a steering wheel club, and perhaps some
luxuries that make the driving experience closer to Fahrvergn\ügen
than FAQ!
Troubleshooting Difficult Deliveries
Not every Slackware installation is born on cue to expecting system
administrators. I've pulled a few all nighters, sitting down after
work one evening to upgrade a Slackware box and still there struggling
to get the damn thing back online at dawn, before people start
bitching about their missing mail and news. This section will look at
a few common Slackware setup problems, solutions, and where to look
for additional assistance.
Slackware Installation FAQs
Patrick Volkerding, the father of Slackware, has dealt with the many
questions of new users by listening, answering, and anticipating
repeat queries. To catch the new Slackware users before they ask the
same question for the 5,000th time, Patrick has kindly created
documentation and included it with the Slackware distribution. Three
files that you may find very helpful in answering your initial
questions are FAQ.TXT, INSTALL.TXT, and BOOTING.TXT.
Web Support For Slackware
At this time, the Slackware-specific help you'll find on the Internet
tends to be highly customized---such as how to NFS-mount the
distribution on computers within a certain university or how to wire
your dorm room into a particular residential WAN using Slackware.
Usenet Groups For Slackware
The comp.os.linux.* hierarchy of the Usenet is a treasure-trove of
Linux information, not necessarily Slackware-specific. At present, 11
separate Linux forums handle a high volume of discussion in this
hierarchy. Dozens of other general-Unix newsgroups are also available.
Some discussions relevant to getting Slackware up and running are:
* comp.os.linux.setup
A group established for figuring out Linux installation and system
administration. The best place to look for clever setup strategies
and to network with others who may have recently installed
Slackware.
* comp.os.linux.announce
A must-read for Linux administrators and enthusiasts, C.o.l.a is a
sort of daily Linux digest for the Internet community. The group
is moderated, so only the relevant material makes it into
circulation. The newsgroup is designed as a low-traffic alert
service for announcing Linux-specific software, documentation, and
security warnings.
* comp.os.linux.answers
Here's where to find (or post) the latest Linux FAQs, How-Tos,
READMEs and other documents that answer questions about Linux.
Mail Lists For Slackware
At this time, there are no electronic mail discussions devoted to
Slackware per-se. You can participate in some excellent Linux-related
talk via e-mail, try www.linux.org and asking in the newsgroups for a
few good subscription lists.
You Get What You Pay For (Commercial Support)
Commercial support for Linux is available from some of the CD-ROM
vendors and a long list of Linux Consultants, who can be contacted
through the Linux Commercial and Consultants HOWTO documents:
http://sunsite.unc.edu/LDP/HOWTO/Consultatns-HOWTO.html
http://sunsite.unc.edu/LDP/HOWTO/Commercial-HOWTO.html
Basking In the Afterglow
Don't rest on your laurels quite yet. Especially if your Slackware
machine is a shared computer or lives in a networked environment.
Grooming a computer for community and network use is a bit more
demanding than just running the setup program and forgetting about it.
We'll leave you with a few pointers to securing and sharing your new
Slackware system.
Consider Reinstalling!
I know you just sat through what may have been a long and perplexing
installation session. But before you move into the house you just
built, consider tearing it down and starting over again. Friedrich
Nietzsche had a quote: "A man learns what he needs to know about
building his house only after he's finished."
If, in the process of installing the system, you had some thoughts
about how you might do it differently, now is the time. If your
Slackware Linux box will be a multi user machine or a network server,
there may never be such a convenient opportunity to reinstall or
reconfigure the system in radical ways.
Install And Test Key Applications
Before you put away the CDROM or return the 50 floppy disks you
borrowed to run the Slackware installation, sit down and test each
application that your users may expect to find in working order. If
professor Bien absolutely has to have emacs humming under X-Windows,
you'd better test it out now, while you've still got the workstation
'in the shop.'
Did you set up this Linux box to serve a specific purpose in your
organization, such as...
* File and Print Server for Macintoshes or Windows PCs: Better make
sure netatalk, CAP and samba are configured and tested
* World Wide Web Server: Time to choose a www daemon and get it up
and running
* Mail Server: Have you configured sendmail? How alternative mail
applications that offer improved performance, features, or
security over their Slackware-default counterparts? Most mail
servers would benefit from cucipop, procmail, and Smarlist, to
name a few.
* Remote Access Server: Got those serial ports or add-in boards
working?
* Firewall: You might like to look at the second firewall toolkit
from TIS, as well as front-ends to ease firewall and network
administration, such as linuxconf.
Secure the System
Get Off The LAN At Once
Out of the box, Slackware is an insecure system. Although Patrick does
his best to create a secure distribution, a few inevitable holes
become known, and patches or workarounds are made available in the
system administration (and cracker) communities. If you installed
Slackware from a network source such as an NFS-mounted drive, you
should temporarily disconnect your box from the LAN after a successful
installation, while you plug a few holes.
Give Root a Password
By default, a new Slackware box will not require a password for the
root user. When you're comfortable that your new Slackware system is
stable (after a few hours, not days or weeks), add a password to
protect the root account. Login as root and type: passwd root
Give Yourself An Account
On large shared systems, the super-user root account is not used as a
working login account by any individual. If you're interested in
system administration or are running a networked machine, this is a
good precedent to follow. Use the \texttt{/sbin/adduser} program to
make yourself a login account, rather than working out of the root
login. I always smile when I see students and hobbyists posting
proudly to the Usenet as root@mymachine.mydomain. Be humble and safe,
create another login account for your daily work and use su (rather
than login) to enter the root account sparingly.
Deny Root Logins
Not only is it uncommon to work as the root user, it is not considered
secure to login as root across the network. Administrative users
usually connect to a Unix box as their regular username login, and
then use the su utility to become the root user as needed. To prevent
crackers, hackers, and ignorant users from logging in directly as
root, edit the file /etc/securetty and comment out (prepend a pound \#
sign before) all but the local terminals: console tty1 tty2 \# ttyS0
\# ttyS1
After this fix, users who attempt to login in as root across the
network will be denied: Linux 2.0.29 (durak.interactivate.com)
durak login: root
root login refused on this terminal.
durak login:
Apply the Simple Fixes
Slackware installs itself with some very real security problems.
Rather than master Unix security and sleuth out these vulnerabilities
yourself, you can jump start the hole-patching process by visiting a
web resource maintained for just this purpose, called Slackware
SimpleFixes:
http://cesdis.gsfc.nasa.gov/linux-web/simplefixes/simplefixes.html
Check For Patches On ftp.cdrom.com
As an actively maintained Linux distribution Slackware updates and
patches are available from:
ftp://ftp.cdrom.com/pub/linux/slackware/patches/
Stay Current
You might like to subscribe to one or more electronic mail lists that
alert users to issues in Linux administration, such as:
* linux-alert-request@tarsier.cv.nrao.edu
* linux-security-request@redhat.com
Back Up
Like how things are running? Save it for a rainy day by backing up.
Amanda (The Advanced Maryland Automatic Network Disk Archiver) is one
of several backup options for Linux installations. You can learn more
about Amanda from: http://www.cs.umd.edu/projects/amanda/index.html/
_________________________________________________________________
Copyright © 1997, Sean Dreilinger
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Linux Installation Project
By Kendall G. Clark, kclark@dal284.computek.net
_________________________________________________________________
Linux Installation Project
It all started with a simple question: `Why don't we install Linux at
all our meetings instead of at only some of them?' The North Texas
Linux Users Group had been in existence for only about five months,
and we wanted to make sure to spread the word in North Texas about
Linux. We wanted to educate the computing public in our area about
Linux, but we also wanted to let experienced computer users know that
Linux could handle anything they threw at it.
After meeting at Texas Christian University for our first few
meetings, we signed a contract with the DFWXchange that enabled NTLUG
to meet at the Dallas Infomart. The DFWXchange is an umbrella
organization that allows Dallas-Fort Worth users groups to meet at the
Infomart for free, with all costs being absorbed by the many
commercial vendors who also meet at the Infomart during the Super
Satuday Sale. So every month between 3,000 and 5,000 computer users
from the Dallas-Fort Worth Metroplex converge on the Infomart---the
premier meeting facility in the Southwest devoted exclusively to
computer and technology events and organziations---to participate in
users groups meetings and to take advantage of some really good prices
on computer-related hardware. It's a big party.
It didn't take long for the NTLUG leadership to realize that we had
stumbled upon a great opportunity: we wanted to let computer users in
our area know about Linux, and we were now meeting every month in a
facility filled with thousands of potential Linux converts. Our
solution was to start the Linux Installation Project, which we call
the LIP.
The goal of LIP is simply to install Linux on as many computers as
possible. Those of us who participate in this project month-to-month
have discovered that the very best way to advocate the use of Linux is
to make it easy and painless for the unconverted to do just that:
namely, run Linux on their computer of choice. In other words, Linux
is its own best advocate. After a few weeks without a crash, most
people say goodbye to Windows 95 with zealous enthusiasm. We like to
think of LIP as an ongoing Linux Installation Festival that allows us
to convert computer users to Linux one at a time.
The first step in establishing LIP as a well-run, consistent endeavor
was to find someone to lead the effort. NTLUG is fortunate to have a
technologically advanced membership, and it was fairly easy to find
someone to lead the LIP; in fact, we found two such people: Mike Dunn
and Bill Petersen, both of whom are experienced Unix and Linux
Sysadmins. Under their guidance, and due to the generosity of NTLUG
members, NTLUG's LIP has solicited and organized enough computer
hardware to perform up to many simultaneous installations of Linux by
all the usual methods, although we've found that cdrom installations
are usually the most trouble free.
The word has now spread in and around the Dallas-Fort Worth
Metroplex---from schools and universities to computer vendors and
other users groups---that NTLUG's LIP is the place to go for a
painless installation of Linux onto PCs, laptops, servers, and even
Alpha platforms. We have expanded our efforts at the LIP booth to
include Linux advocacy, advertisement for Linux vendors who supply us
with materials, the sale of Linux CDs (thanks to Bradley Glonka at
Linux Systems Labs), and even basic Linux system administration and
maintenance. We also spend a lot of time explaining to the uninitiated
masses what makes Linux free and what makes it so much fun.
While we have been happy with the results so far, the LIP has more
work to do. We want to expand our sales efforts to include other kinds
of Linux merchandise (the sales of which go to support NTLUG and LIP),
and we'd also like to expand our hardware assets to enable more
simultaneous installations. Finally, we also want to develop our users
group assets to such an extent that we can go to other DFW-area
computer events and setup Linux installation and advocacy booths.
NTLUG's approach to the Linux Installation Project can be summed up in
the phrase: "Linux is free. Life is good."
If you want to learn more about the North Texas Linux Users Group or
our Linux Installation Project, or if you're a Linux Users Group and
would like to talk about setting up your own local version of LIP,
please visit the NTLUG website or contact me at kclark@computek.net.
Finally, I would be guilty of ingratitude if I did not thank the
following people and organizations that have made the LIP possible.
Please forgive me if I've forgotten anyone. It's just about impossible
not to meet great people when you work with Linux.
NTLUG Members
+ Mike Dunn
+ Bill Petersen
+ Thomas Griffing
+ Bill Richards
+ Steve Brennan
+ Allen Prince
+ Pete Koren
+ Eric Chang
+ everyone else who made financial and hardware donations
Organizations
+ Linux Systems Labs, especially Bradley Glonka
+ Red Hat Software
+ SouthWest Technology
+ DFWXchange, especially Stuart Yarus, President.
_________________________________________________________________
Copyright © 1997, Kendall G. Clark
Published in Issue 17 of the Linux Gazette, May 1997
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
Linux Gazette Back Page
Copyright © 1997 Specialized Systems Consultants, Inc.
For information regarding copying and distribution of this material see the
Copying License.
_________________________________________________________________
Contents:
* About This Month's Authors
* Not Linux
_________________________________________________________________
About This Month's Authors
_________________________________________________________________
Larry Ayers
Larry Ayers lives on a small farm in northern Missouri, where he is
currently engaged in building a timber-frame house for his family. He
operates a portable band-saw mill, does general woodworking, plays the
fiddle and searches for rare prairie plants, as well as growing
shiitake mushrooms. He is also struggling with configuring a Usenet
news server for his local ISP.
Kendall G. Clark
Kendall Clark is a PHD candidate in systematic theology at Southern
Methodist University. He is hard at work on his dissertation using Red
Hat 4.1, LaTeX, and AucTeX & Xemacs. He helped found NTLUG in the
summer of 1996 with Stephen Denny and Tim Jones and currently serves
as Acting President. He makes his home with his wife Hope in Dallas,
Texas.
Jim Dennis
Jim Dennis is the proprietor of Starshine Technical Services. His
professional experience includes work in the technical support,
quality assurance, and information services (MIS) departments of
software companies like Quarterdeck, Symantec/ Peter Norton Group, and
McAfee Associates -- as well as positions (field service rep) with
smaller VAR's. He's been using Linux since version 0.99p10 and is an
active participant on an ever-changing list of mailing lists and
newsgroups. He's just started collaborating on the 2nd Edition for a
book on Unix systems administration. Jim is an avid science fiction
fan -- and was married at the World Science Fiction Convention in
Anaheim.
Sean Dreilinger
Sean Dreilinger suffered through two years of Los Angeles smog for a
Masters degree in library/information systems at UCLA. Linux swept him
off his feet in grad school and turned into a Network Administration
career for the University. Consulting on Internet strategy and
info-system design in assorted bored-rooms followed. Today he beams-in
to www.interactivate.com from a remote mountain cabin near Cuyamaca,
California and is only required to show his face at work once a
week--nice job for the outdoors-loving and socially inept. He lives
with his lover Kathy and this incredible high-altitude
silence--punctuated only by the sound of wind rustling in the
Manzanita trees, hummingbirds fighting for a perch on the feeder, and
that reassuring whir of SCSI drives dancing with Linux under the desk.
More life story with explicit photos can be found at
http://www.interactivate.com/people/sean/.
Jon "maddog" Hall
Jon "maddog" Hall is Senior Leader of Digital UNIX Base Product
Marketing, Digital Equipment Corporation.
Michael J. Hammel
Michael J. Hammel, is a transient software engineer with a background
in everything from data communications to GUI development to
Interactive Cable systems--all based in Unix. His interests outside of
computers include 5K/10K races, skiing, Thai food and gardening. He
suggests if you have any serious interest in finding out more about
him, you visit his home pages at http://www.csn.net/~mjhammel. You'll
find out more there than you really wanted to know.
Rick Hohensee
Rick Hohensee is a guitar bum and former construction executive who
has so many irons in the fire he can't keep the fire going. Visit him
on the web at http://cqi.com/~humbubba.
Mike List
Mike List is a father of four teenagers, musician, printer (not
laserjet), and recently reformed technophobe, who has been into
computers since April,1996, and Linux since July.
Jesper Pedersen
Jesper Pedersen lives in Odense, Denmark, where he has studied computer science
at Odense University since 1990. He expects to obtain his degree in a year and
a half. He has a great job as a system manager at the
university, and also teaches computer science two hours a week. He is very
proud of his "child," The Dotfile Generator, which he wrote as part of his
job at the university. The idea for it came a year and a half ago, when he had
to learn how to configure Emacs by reading about 700 pages of the lisp manual.
It started small, but as time went by, it expanded into a huge project.
In his spare time, he does Yiu-Yitsu, listens to music, drinks beer and has fun
with
his girl friend. He loves pets, and has a 200 litre aquarium and two very cute
rabbits.
Jay Painter
Jay Painter is the Systems Administrator at SSC.
__________________________________________________________________________
Not Linux
__________________________________________________________________________
Thanks to all our authors, not just the ones above, but also those who wrote
giving us their tips and tricks and making suggestions. Thanks also to our
new mirror sites. And many, many thanks to Amy for doing most of the work
this month.
Seattle--always a wonderful event. Riley and I spent the morning working
in the yard, clearing out a flower bed that was overgrown with grass. It
felt like hard physical labor after sitting at a desk all week. We rewarded
ourselves by taking a spin on the motorcycle along the Sound. Even as
passenger there is something about riding on a motorcycle that puts a smile
on my face. I guess it helps that I have complete trust in Riley's driving
abilities.
Afterward I went to the Opera House for a talk about Il Trovatore by
Giuseppe Verdi (or Joe Green, as Riley likes to call him). I had seen
the opera itself on Wednesday night--a silly
story as usual but, oh, such
wonderful music! I think it has to be one of my favorites. At any rate
the talk was informative and fun and made a nice end to a very wonderful
day.
Have fun!
__________________________________________________________________________
Marjorie L. Richardson
Editor, Linux Gazette gazette@ssc.com
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
__________________________________________________________________________
Linux Gazette Issue 17, May 1997, http://www.ssc.com/lg/
This page written and maintained by the Editor of Linux Gazette,
gazette@ssc.com