A little background: I started using Unix V7 on a PDP-11/70 back in 1983, even modifying some existing kernel drivers for the Cambridge Ring local area network. After that I dabbled in system administration of various Sun and Apollo systems until 1991, and HP boxes up until 2000, but my main task has always been application software development, nothing on the hardware or kernel side. Since 2000 we've had dedicated system administrators at work. We had switched from NCD X-terminals over to Linux desktops (first RedHat, but then Lunar) and I realized that what little I knew had become well out of date. I installed RedHat on an old 90MHz PC at home more than five years ago, but without a LAN or modem connection it was too difficult to keep up to date, I lost interest, and that died. Since then I've had an itch to develop a spiffy FLTK user interace for some old command line tools using Cygwin/Mingw on a WinXP laptop (with modem) but the machine is (a) painfully slow, and (b) painfully Windows. The time had come to get some new hardware, install an operating system that doesn't thwart you at every turn, and set up a programming environment of my own choice.
Why Lunar? Well, my desktop at work is running Lunar - and it has been very stable - and so I could always ask the sysadmin if I got really stuck. Sofar I've been trying to work it out for myself.
Basic Installation for Newbies: well, believe it or not, the Installation guide is actually pretty good! However, while waiting for the connection to the ISP to be set up, I downloded the Lunar ISO at work and burned it onto CD. I installed Lunar 1.5.0, 1.5.1rc1 and 1.5.1, each one a bit better than the last, and the guide made more sense to me every time. So, if you are new to Lunar, just give it a try, make the mistakes, reformat the partitions and try again! There are a couple of points that might help other people:
- I used the partitions mentioned in the guide, albeit bigger, which are really intended for server systems, whereas desktop systems could use a simpler system as described in the FAQ. Make a note of the partitions and sizes so that you can enter the info quickly when you re-install.
- Unless you are really sure that you want to override the default values, don't. Play with the simplest system you can to start with - you can always configure something extra later.
- The 'Install a pre-compiled kernel' step happens so quickly, and without any real feedback, that I didn't believe that it had actually done anything. I then made the mistake of compiling the kernel(s) again myself, and it's completely unnecessary and wastes time.
- Install the 'normal' and 'safe'pre-compiled kernels - they are packed with more basic drivers than most people will need, so you have a good chance of getting a basic system up and running.
- Accept the default, and let the installation set up Lilo for you.
- Set up the simplest networking that you can. Luckily I had already been able to set up the ISP to ethernet router, and the ethernet to wifi router, by using the web browser on the WinXP laptop. YMMV, but the driver for the standard wired network card (3Com) was already included in the pre-compiled kernels and worked as soon as I rebooted, but the additional wifi network card (Atheros-based) took me a lot more work, but more on that later.
- Set a root password! You are just about to go live on the Internet and you have no idea what is and isn't set up yet!
- Reboot, and good luck.
lfirsttime for Newbies: if everything has gone according to plan and your system has rebooted successfully, when you login as root you will be advised to run 'man lfirsttime' for more information. This manual page describes the next steps you will need to help turn your newly hatched system into a fully feathered juvenile. Again, 'man lfirsttime' is fairly good, but there are a couple of extra points that might help other people:
- If you haven't already got your networking up and running, you can still poke around on the file system and see where the basic things live, but there won't be much else you can do. Run 'lnet' again. If still no joy, then I'm afraid I'm not knowledgable enough to help you. Try asking on the Installing Lunar forum.
- Check out the manual pages for 'lin', 'lvu', 'lrm' and 'lunar'
- Check out the manual pages for 'lin', 'lvu', 'lrm' and 'lunar' again. This is not a typo!
- If you are like me, you will still not have picked up on the '-r' or '--reconfigure' options to 'lin' and it turns out that this is a bit of a crucial option. If you are like me, you will be cautious, and will run 'lin --deps' on every module to see what else needs to be built. This will ask about installing optional modules, and even though this is just a 'dummy run' this configuration information is saved away and you won't be asked again when you come to do the real installation. Unless you use 'lin -r' that is...
- Again, unless you are really sure you want to override the default configuration settings, don't! Get the system working first, and then add in the bells and whistles. I was bitten by selecting the optional 'lunaric-sound' module, but for some unknown reason I was temporarily blocked from downloading it, but as I hadn't remembered about 'lin -r' I was stuck for quite a while.
- Once you've reached the bottom of 'man lfirsttime', you should have updated the moonbase, downloaded the basic tools, and run 'lunar update'. You will have updated quite a few files.
- You should have updated 'wget' as this is used to download modules. Unfortunately, it doesn't really know how to download module sources from CVS repositories, and if the module doesn't have CVS as one of its dependencies, the download will fail. (I had problems with the 'madwifi-cvs' module for this very reason). Run 'lin cvs' now, and save yourself potential grief later.
Get into good habits now: as noted above, every time you install a new module you are adding new commands and dozens, if not hundreds, of files to your system. Therefore, until the point where you set up 'cron' to do it for you, you will also need to:
- Run 'updatedb' so that you can use 'locate' to find configuration files easily.
- Run 'makewhatis' so that you can run 'apropos' or 'man -k' to find the commands that you want
Setting up X: I've been using window-based user interfaces since the ICL Perq in 1983 and it was obvious that the next stage meant setting up a windowing system so that I could (a) make use of more than just the basic 80x25 console terminal, and (b) have access to manual pages, etc. while building or configuring additional modules. Therefore use 'lin' to install 'XOrg', 'XOrg-basic-fonts' and 'XOrg-extra-fonts'. Note that not all documentation available at http://xorg.freedesktop.org is available in these downloads.
- However, to make life easier when using the Lunar tools, you might also want to edit your .Xdefaults file or the global /etc/X11/app-defaults/XTerm to set:
- XTerm*loginShell: true (to allow tab-completion of command and module names)
- XTerm*reverseVideo: true (to allow the Lunar tools menus to be more readable)
- XTerm*scrollBar: true
- Login and run 'startx'. This should bring up a basic window manager 'twm' that will at least allow you to do things in parallel.
xfce and firefox: at this point I wanted something a bit more up to date. Why 'xfce'? Well, we have 'kde' on the boxes at work, mainly so that the non-computer people at least have a chance of finding a command to do what they want somewhere in the menu hierarchy. But I wanted something a bit more minimalist. After all, I have complete control of what I'm installing on this box, and part of the reason for doing it is to learn more about the tools in the process. The other thing that was becoming more important, was access to the various READMEs, HOWTOs and project home pages so that I could learn what I needed next. I had been using the browser on the WinXP laptop, but wasn't exactly convenient, and it wasn't possible to cut and paste between machines. Hence 'firefox'. As far as I remember, a simple 'lin xfce' and 'lin firefox' installed everything without any problem at all, and I'm now using 'firefox' to edit this page. In order to read the tech specs of my wifi card I also downloaded the Adobe Acrobat reader. It installed OK, but in an out-of-the-$PATH directory. I still haven't configured 'firefox' so that it automatically uses 'acroread' when I open a PDF link, so at the moment I have to save the link to disk and then call 'acroread' manually. But not a big deal for now.
Newbie's guide to installing the 2.6 kernel: the boot sequence of the pre-compiled 2.4.31-normal kernel had already identified my wifi card as using the Atheros chipset, and this was confirmed by running 'lspci', but obviously, try as I might, I couldn't get 'lnet' to do anything with it. After searching Google and asking in the Lunar forum it was clear that I would need to install the 'madwifi-cvs' module, but before I could do that I would need to install the 2.6 kernel. There is an Installing 2.6 HOWTO but this skimmed over the important part as far as I was concerned. After a bit more time on Google I came across a reasonable 2.4 kernel tutorial on the LinuxChix web site - but of course I can't find the exact link now - and also the draft of the update of the Linux-Kernel-HOWTO which is now called the Kernel Rebuild Guide. This guide tells you that you will need certain modules already installed in order to build a 2.6 kernel. Most of these were already installed, and more recent than the version required. However there were a few which were missing, and they have quite a few dependencies on other modules that you therefore have to install as well. I had errors when I tried to install them:
- module-init-tools failed to install the modprobe.conf(5) manual page that I would need later.
- docbook* modules wouldn't install when I used the obvious leaf-first reported dependency order, but in fact, if you install 'docbook-profile' first then everything is supposed to work properly. I don't know how someone new to 'docbook' is supposed to guess this though.
- isdn4k-utils failed to install properly because of a missing dependency on 'linuxdoc-tools' and then a problem with a Makefile.am.
- pcmcia-cs may have failed to install everything, but I don't remember now.
I spent a while trying to work out what the problems actually were, but in the end I couldn't resolve all of them. Therefore I decided to proceed with the 2.6 kernel build anyway to see how far I would get. YMMV, but the installation errors above didn't stop me from building the 2.6 kernel, although it took me some trial and error before I finally got there:
- a lot of the documentation talks about 'oldconfig', 'menuconfig' and 'xconfig' as though they are separate modules that you need to install before you can configure your new kernel. It took me a while to realize that they are 'make' targets and are handled within the kernel build process. Doh!
- 'lin linux-2.6' downloaded the sources and then called 'make oldconfig' during the build process. This is a clever script that extracts details of your current kernel configuration. Unfortunately there are one or two places where it needs user input, but the automated build process couldn't get that user input and started to loop. I had to interrupt it.
- luckily the 2.6 kernel sources had been unpacked in /usr/src/linux-18.104.22.168 - YMMV - so I attempted to run 'make oldconfig' manually. I obviously answered something incorrectly, because after running the full make, and then the following:
- cp arch/i386/boot/bzImage /boot/22.214.171.124-mine
- cp .config /boot/config-126.96.36.199-mine
- cp System.map /boot/System.map-188.8.131.52-mine
- adding the 184.108.40.206-mine entry to /etc/lilo.conf
- /sbin/lilo -V
- shutdown -r now
the new kernel failed to boot at all, never mind start and then crash. So, what to do now? Eventually, after much experimentation, I extracted the current kernel configuration from /boot/config-2.4.31-normal.gz and ran 'lin -r linux-2.6' but this time saying that I did want to reconfigure the kernel, and that I wanted to use 'menuconfig'. The build process started and up came the 'menuconfig' screen. I selected the 'Load alternative configuration' option at the bottom of the first menu, and loaded the existing 2.4 configuration. The first time I did this I got some errors about missing options, but after saving the new configuration file and repeating a couple of times it all worked. I was able to reboot with the 2.6 kernel!
Getting the wifi card up and running: finally I had reached the point where I could start to look at intalling the drivers for the wifi card. The 'hostap' module installed smoothly. Downloading the 'madwifi-cvs' module failed repeatedly until I realized that I needed to download CVS first in order extract the sources from the remote repository. Then, as far as I remember, it installed relatively smoothly, except that I was rather confused by the Building Madwifi FAQ until I realized that it was a bit out of date and related to an older experimental kernel configuration and could safely ignore it. The next phase was re-building the 2.6 kernel again, and this time working through the menus: Device Drivers, Networking Support, Wireless LAN, and then enabling it and all of the ISA/PCI 802.11 modules below it. After a rebuild and a reboot I was able to use 'modprobe' to load the 'ath_pci', 'wlan' and 'wlan_wep' modules. Almost there, I thought, but I was wrong!
After hearing the statistic that a vanilla Windows PC could have its ports scanned and be broken into within 17 minutes of being attached to the Internet, I had already set up the ethernet to wifi router to use strong encryption with a WPA passphrase, and I knew that it was working because the WinXP laptop was already using its wifi pcmcia card without problem. For the Linux box I had been intending to use hostap/wpa_supplicant but this simply proved to be beyond me. Again there was mention of building within the kernel source tree, and this didn't appear necessary, nor did the '-Dmadwifi' switch. In the end what stopped me was the fact that all of the other tools I had dealt with so far such as 'lnet' and 'iwconfig' described the use of an 's:' prefix when specifying an ascii encryption key, and this was not mentioned anywhere for the wpa_supplicant configuration. After an evening of frustration, and a throwaway comment by a colleague about using WEP encryption, I decided to go back to first principles. I removed all encryption from the wifi router configuration. Shortly after verifying that it was working using the WinXP laptop, I had got it working under Lunar:
- modprobe ath_pci
- modprobe wlan
- modprobe wlan_wep
- ifconfig ath0 up
- iwlist ath0 scan
- iwconfig ath0 ap xx:xx:xx:xx:xx [MAC address of wifi router]
- iwconfig ath0 otherParameters
It was interesting to see that the scan showed not only my network, but also those of my neighbours, and not all of them were protected! As far as I could see, once I had configured the access point using the MAC address of the wifi router, I could repeat the rest of the configuration parameters using 'lnet'. The first time through I gave the interface a fixed IP address on my private class C network, and I could verify the connection using the wired network connection and browsing the wifi router's web interface. I could also see that reconfiguring with 'lnet' to use a dynamic IP address and 'dhcpcd' also worked.
OK, so back to reconfiguring the wifi router to use encryption. This time I chose WEP rather than the more secure WPA so that I could concentrate on one thing at a time and not have to configure 'wpa_supplicant' as well. Again I verified that it was all working using the WinXP laptop, and then ran 'lnet' to delete and then reconfigure the ath0 interface. The wifi router web interface showed the new connection. From there it only needed a couple of extra steps:
- route add bbc.co.uk gw ath0 [and watch the led on the wifi router flicker]
- route add default gw ath0
- unplug the wired interface...
But this was not quite the end of the story. When I rebooted the system, the wifi interface was gone, and I had to run the modprobe steps and reconfigure ath0 by hand before I could continue. The installation of 'module-init-tools' had failed to install the 'modprobe.conf(5)' manual page, so I was a bit in the dark about what needed to go in there. The header comment for /etc/modules implied that all I needed to do was to add a single line containing 'ath_pci' so I took a gamble and it has paid off.
To be continued...