Debian Linux 5.0 (Lenny) on the Dell Inspiron 8600 (I8600)

When this installation began (December 2008) Lenny was still in the testing phase. A new, blank 250 GB disk was purchased.  This computer is a few years old now and much better supported by Debian than it was at first.  This page documents the installation of Woody on the original 60GB  disk.  Since then, Sarge was installed on a new 80 GB disk and then upgrades were made to Etch.  Why an installation from scratch on a blank disk? Cruft removal and new updated configuration files.  An upgrade in place would have left much old stuff: unused packages, old configuration files, etc...

 A month later (January 2009) the new Lenny system is usable, but not before much manual configuration to customize it to what I was used to in the old Etch system.

The following information will be updated as time permits and as I get more parts of the system to the desired state and more software gets installed. Some items I haven't used, some I have no way to test for lack of hardware and some are minor irritations that will event
ually get fixed.

Many thanks are due to all those who have shared their laptop installation experiences on the web and on mailing lists.

Summary

Hardware Subsystem
Status
Updated
Info
Disk - IDE/(U)DMA
Working
  12/22/08
Works with the standard 2.6.26 kernel.
Audio
Working
01/09/09
Alsa works fine. Kmilo has to be disabled.
Keyboard - special keys
Working
12/30/08
Most keys work, thanks to hotkeys.
Power Management
Working
12/22/08
Enabled by default.
Suspend/Resume
Not Working
01/26/09
Resume doesn't work, probably due to nvidia driver.
X server
Working
12/28/08
Nvidia accelerated driver has one small problem.
TV out
Working
  01/02/09
Had to add a second screen to X server.
Fire wire
Working
12/22/08
Driver loads OK, untested - no devices to attach.
Ethernet
Working
12/22/08
Built-in driver included in 2.6.26 kernel works.
Modem
Working
12/31/08
Driver and daemon available in apt package
USB
Working
12/22/08
Works with multiple devices.
Infrared
Working
01/05/09
Tested with PDA, not very reliable.
Mini-PCI/Wireless
Working
12/22/08
Recognized at installation, manual firmware install.
PCMCIA
Working
12/22/08
No problems.
Modular bay floppy drive
Working
12/22/08
Recognized as /dev/sda.  No hot-plugging in the modular bay.  Fine in external ports.
BIOS
 Working
12/22/08
Currently using V11.
CD/DVD+RW drive
 Some problems
01/06/09
Wodim doesn't seem to agree with this drive.




Software
Status
Updated
Info
File Synchronization
Working
01/16/09
Unison.
Security
Not Installed

A project for another day.
Mail
Working
01/05/09
There's always more to configure and set up.
Usenet News
Working
11/14/09
Newsx finally configured to replace suck.
Network Configuration
Working
12/22/08
/etc/network/interfaces. Laptop-Net not yet configured.
Printing
Working
01/06/09
CUPS/Foomatic ljet4 driver, HP Laser Jet 6L
Web Privacy/Ad-Buster
Working
12/22/08
Privoxy.  No web browser should be without.
Bookmark Management
Working
12/12/09
Php.ini - register_globals must be On.
Manual Configuration
Working 01/16/09 Manual re-installation of various modules/programs.
Browser Improvement
Working
01/20/09
Had to re-install Iceweasel flash.
Video (web cams, TV)
Working
01/15/09
Motion works great, Myth-TV a bear to set up.


Pre-Requisites

The Lenny distribution (Debian 5.0), which will go stable after this installation, is much easier to install than previous distributions. Still, it is extremely useful to have another net-connected computer where you can download missing pieces (such as proprietary firmware) and get info.  The original Woody installation is described here.  Net installs are reliable enough these days that I burned the net-install CD and then completed the installation by net.  I also had available the HD  with the previous Etch installation on a USB caddy so I could very easily access and recover old files.

The hardware

This I8600 is one of the early models.  It has more hardware than later models.  In particular, newer models don't  come with the IBM-style track pointer  (the pencil  eraser in the middle of the keyboard that I use almost exclusively), the serial/parallel ports or the infrared port. This is a summary of the hardware:
These are the main on-board components:
Additional hardware that required manual installation of drivers or firmware
The 90W optional power supply is important as the standard one (65W) will not charge the battery when the computer is in use.  The power consumption is close to 90W in that case.

It turns out that the floppy drive is really a USB drive and is seen by the Linux kernel as /dev/sda. The CD/DVD drive, although plugged into the same bay, is seen as /dev/hdc.  The USB Flash key is seen as /dev/sda and, once a file system is made on it, can be used just like a regular disk, and booted from.

Preparing for installation

This installation was done on a brand new 250G, 5400 rpm drive.  The first issue was the Dell diagnostics.  In the original drive, the first partition (hda1, vfat, 32M) was it.  I installed the new blank drive in the usb caddy and formatted it with fdisk /dev/sda.  This is what fdisk reports about the old Etch drive:

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1           4       32098+   6  FAT16
/dev/hda2               5          29      200812+  83  Linux
/dev/hda3              30        9729    77915250    5  Extended
/dev/hda5              30        2461    19535008+  83  Linux
/dev/hda6            2462        2704     1951866   82  Linux swap / Solaris
/dev/hda7            2705        5136    19535008+  83  Linux
/dev/hda8            5137        9729    36893241   83  Linux


I re-created the same 32MB partition (hda1) on the new disk with fdisk. As Dell doesn't provide for re-installation of the diagnostics software, the steps described below were required.

Re-creating the Dell Diagnostics partition

It is possible to download the Dell Diagnostics from Dell's web site, which I read has been updated for other systems, so I elected to use what came on my original  disk, thus the first step.

This procedure assumes that the original  Dell Diagnostics partition is available on the original disk and it can be accessed from Linux. No Microsoft software or OS is necessary.

Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1           4       32098+   6  FAT16
mkdosfs -c /dev/sda1
mount /dev/hda1 /mnt
tar -cvf /tmp/dell-d.tar
umount /mnt
mount /dev/sda1 /mnt
cd /mnt
tar -xvf /tmp/dell-d.tar
> c:
> sys c:

This is important to make the partition bootable. 

Partitioning scheme

The old partitioning scheme was just fine, with one exception: the root partition was too small.  It filled up when compiling kernels, so it had to be made bigger.  This is what fdisk reports:

Disk /dev/hda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0006c83c

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1           4       32098+   6  FAT16
/dev/hda2               5          65      489982+  83  Linux
/dev/hda3              66       30401   243673920    5  Extended
/dev/hda5              66        2497    19535008+  83  Linux
/dev/hda6            2498        2740     1951866   82  Linux swap / Solaris
/dev/hda7            2741        5172    19535008+  83  Linux
/dev/hda8            5173       30401   202651911   83  Linux

And this is how df sees it:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda2             464M  127M  314M  29% /
tmpfs                1014M  4.0K 1014M   1% /lib/init/rw
udev                   10M  136K  9.9M   2% /dev
tmpfs                1014M     0 1014M   0% /dev/shm
/dev/hda8             191G   32G  150G  18% /home
/dev/hda5              19G  7.0G   11G  40% /usr
/dev/hda7              18G  5.3G   12G  32% /var

Installing Debian 5.0 (Lenny)

The netinstall image was downloaded and a bootable usb FS was copied to the 1GB usb memory stick.  Then, the ISO image was copied to it.  The first issue was that there is some kind of race condition in the kernel that causes a panic (see this bug report) on this machine.  It is mandatory to give the option vga=771 as a boot prompt to the installer.  Furthermore, since I use KDE, I added desktop=kde.

The next issue was that of proprietary firmware for the wireless interface: ipw2100-1.3.fw was missing, so I went looking for it with Google and also copied it to the flash drive.  Once this was done the installation proceeded to identify and configure the hardware correctly.  The installer reported eth0 - wired, eth1 - 1394 and eth2 - wireless.

After selecting eth0 as the primary interface, the installer started looking for a dhcp configuration.  As I run a static IP network, I had to cancel that and enter the correct information in the manual configuration screen.

The installation proceeded smoothly after selecting all options in tasksel.  After a reboot, the system started up just fine.  Grub recognized the FAT16 partition used for the Dell Diagnostics and created an entry in /boot/grub/menu.lst to boot it.  In order to customize the system to what I was used to in previous releases the sources.list had to be modified.

This is what /etc/apt/sources.list looks like now:

deb http://ftp.us.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.us.debian.org/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
deb http://www.debian-multimedia.org lenny main


Contrary to previous releases, which required lots of work to get most of the hardware to be detected and usable, Lenny found all of it.  As mentioned previously the matter of proprietary firmware for the wireless interface, which had to be located and copied separately, was the only manual intervention needed.  This release is also the first one in which the standard pre-compiled kernel works perfectly.

Still, to fully support all the devices, the following packages needed to be installed, along with any needed dependencies:
Details in the individual sections below.

Furthermore, there was plenty of configuration left to do in different areas:

Manual Configuration

Motivation

Throughout years of updating and upgrading multiple distributions, installing software from source, removing packages, disk changes and disk corruption that left much in /lost+found and the manual recovery from such incidents, it was time to start over on a blank disk.  Two such incidents on the previous hard drive (Etch) were the immediate motivation for the hardware upgrade and this software installation.

Even the /home directory, which was previously just restored with find|cpio, had accumulated such clutter of .files that customizing any new ones that the installation might create seemed a small job compared to using the old, existing ones and miss on the improvements.  Plus, the bigger the difference between what is used and the current versions, the more customization is needed with each change.

I started with a careful analysis of the situation and it became clear that this part was going to be the most time-consuming.  I was planning to develop scripts and procedures to automate the process, but as the task progressed it became obvious that there will always be improvements and customization left to do.  A few scripts were useful to determine the magnitude of the task.  Cruft reported hundreds of thousands of non-package-related files, many missing in the disk corruption incidents, but many more part of large software packages installed outside the packaging system.  Even after manually excluding /home and the large non-packaged software, more than 17.000 files remained.  The number of installed packages, even after excluding the dependencies (automatically installed) numbered in the hundreds.  Some of them I barely used, some didn't even exist anymore in Lenny, some were no longer necessary and some had better replacements.  A wholesale automated installation based on old package lists was out of the question.

For those packages that I used and that I wanted to install, there was the matter of manual configuration.  As the packages improve, configuration files change.  Given the amount of packages installed, it was easier to manually add what I needed.

Individual packages not installed by default but wanted


This was the easier part.  From the output of the package lists in the old and new releases, and the differences, it was relatively painless and quick to tell aptitude to install them.  As of now, this is the list I installed:

xfonts-*, ttf-*, msttcorefonts, ifpgui, kcpuload, knetload, ifrename, inn2, karm-tools, lshw, lshw-gtk, mgetty*, kismet, gbuffy, abcde, audacity, aumix, bitpim, chrony, cruft, fetchmail, festival, gnuplot, gperiodic, gphoto2, gpsdrive,  mmv, motion, moto4lin, mplayer, mplayer-doc, muttprint, muttprint-manual, muttprofile, privoxy, timidity, trn4, unison, uucp, vim*, xfig, xmms2, xtide, xawtv, wxgtk, devede, cdtool, lyx, newsx,  xloadimage, elinks, gnash, konqueror-gnash-plugins, gnash tools, dvd+rw-tools, pload, zenity, myyhtv, mytharchive, mythtv-doc, units, mysql-admin, lirc, dvb-apps, dvbtune, gdb, libdvb-dev, setserial, kompare, cervisia, iceape, bluefish.

Configuration files previously modified that exist in the installed packages

A couple of kludgey scripts listed the configuration files that had changed from the originally installed ones.  The packaging system keeps signatures of files installed and it is relatively easy to check which ones have changed.  In most cases, the local changes were at most a line or two.  Changes between distributed revisions were usually bigger and I didn't want to lose those improvements, so in this case it was a case of editing each changed file manually and adding to the new one only the changes I had made.  In some cases the software associated with the configuration file in question had changed enough that just duplicating the change was not enough.  So much for automation.

Configuration files that are not present in installed packages

This class of configuration files has the potential for easy automation.  Since there are no conflicts between locally created files and anything the packaging system installs, it should be possible to save the old files (say with tar) to a directory hierarchy that mimics the absolute paths of all the files in the user's directory and then, with one command, restore them all on the new system.  As it turned out, never having done this before, I ended up moving each file by hand as the packages needed to be configured, but now I have a hierarchy in my home directory, suitably backed up via unison to other machines, ready for the next hard drive/OS upgrade.

Settings of all kinds that were lost because old user configuration files were not restored

This applies mostly to user settings, such as font sizes (X server-wide or Konsole), which applets or applications are on the panel, wallpaper slide show, KDE theme, etc...  The quick way is to re-configure these preferences by hand to make the new system look like what I had.  I'm afraid there's no way of of this.

Home directory configuration files, such as .profile, .bashrc, etc...

The restoration of /home  (user directories) was done with:

cd /media/~home/<user>
find * -print | cpio -pdvm /home/<user>

This avoided copying any configuration .file - lots of old cruft removed, new and improved configuration files from the current packages, but manual editing of the new files was necessary.

A long-standing problem of .profile not being executed still exists.  Even though konsoles have been set up to execute bash -l (as login shell), the .profile file is not being read.  I had to modify .bashrc and .profile.  The new versions have a lot more in them but they cause their own problems.  I had to add:

if [ -f ~/.profile ]; then
    . ~/.profile
fi

to the end of .bashrc and remove the invocation of .bashrc from withing .profile as it gives infinite recursion.  There is a comment at the top of .profile that says:

# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.

Well, none of these files are present, but yet .profile is not executed.

Besides the usual environment variables and aliases, some years ago I found this gem:

if test "$DISPLAY" ; then
  export PROMPT_COMMAND='echo \
  -ne "\033]30;`echo $PWD | sed \
  -e "s/^.*\(.\{20\}\)$/\1/"
  `\007\033]31;$PWD\007"'
fi

Which I've had in my .profile ever since.  It's the most useful snippet of code.  It puts the current directory in the tab of the konsole and on the window frame.  Since I use many konsoles at a time and within each many tabs, it's a great way to find your way.

Manual configuration of individual packages

These are mostly not done.  They require  non-automatic configuration, beyond restoring old configuration files.  This will get done when it gets done, or more likely, when I need to access old data or have to use the packages.

IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 01)

Nothing needs to be done explicitly, DMA mode is used by default. hdparm -t /dev/hda returns:

/dev/hda:
 Timing buffered disk reads:   160 MB in  3.04 seconds =  52.69 MB/sec 

Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)

Works perfectly.  Kmix displays all the features.  The interaction between the sound system and the smartlink modem that used to be a problem in previous releases is now taken care of automatically by the ungrab-winmodem driver that is part of the sl-modem kernel driver.

There was one problem: kmilo needs to be disabled, otherwise a window that will never go away pops up in the middle of the screen with a volume bar that gradually goes to 0 and insists on going back there no matter how the volume is adjusted.  To disable kmilo, from the KDE control center, select kde components -> service manager -> startup services, then uncheck the kmilo check box.  Apply and exit.  Problem solved.

Keyboard - special keys

Volume and CD/audio player control buttons

Getting these keys to work has always required extra work.  In past releases I managed to make them work with hotkeys, so I kept using this solution.  There might be better alternatives these days from within X or KDE, but this was a working solution so it was used.  The  format of the hotkeys configuration files changed at some point in a previous release.  The following i8k.def was put into /usr/share/hotkeys/, and /etc/hotkeys.conf was then modified for cdtool.  Mysteriously, the mute key works perfectly. Pause, the second function of the Play key does not work as cdtool seems to have no capability to toggle modes.  With this configuration the buttons don't apply to xmms or other media players.  This should be fixed at some later time.

Worthy of note is the fact that the headphone jack is not affected by the master volume adjustment, thus the "aumix -c" command to adjust the CD channel.  Aumix comes in its own package that has to be installed separately.

Fn-function keys

Since some of the blue combination keys (Fn + other keys) have to do with modes that are known not to work at the moment or with devices/features I don't have, I'm reluctant to play with them.  Some work perfectly:

Power/voltage/frequency/temperature Management

ACPI

This version is a vast improvement over previous ones.  Kernel 2.6.26 is aware of a lot more.  For instance, there is no longer a need to load manually any of the modules relating to power, battery, thermal, ac or buttons.

# cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
LID       S3    *enabled
PBTN      S4    *enabled
PCI0      S3     disabled  no-bus:pci0000:00
USB0      S1     disabled  pci:0000:00:1d.0
USB1      S1     disabled  pci:0000:00:1d.1
USB2      S1     disabled  pci:0000:00:1d.2
USB3      S1     disabled  pci:0000:00:1d.7
MODM      S3     disabled  pci:0000:00:1f.6
PCIE      S4     disabled  pci:0000:00:1e.0


So the kernel knows what to do in cases of lid and power button events, but wakeup doesn't work, as explained in the next section.

I have no great need of these features, so they might be addressed at some point, or new revisions might come where they just work.

The fans (ksensors reports 2) are under BIOS control and their speed varies appropriately with load and temperature.  Ksensors reports RPMs in the 6 figures, which is obviously wrong, so I set a multiplier of 0.01.  Not sure if this is the correct multiplier but at least it gives reasonable numbers.  Even at low temperatures, when ksensors reports both fans to be off, I can hear a low speed fan, so maybe they're not totally off, or there's another fan that is not reported (and always on?)

Suspend+Resume

The standard Lenny kernel 2.6.26 knows about state changes, but even though suspend seems to work, resume has no effect.  A hard reboot is needed.  This is probably because of the nvidia binary driver.  Pressing the lid button apparently works as it should: the screen blanks and the main power light goes from solid on to a slow gradual blink.  But releasing the button has no effect.  The machine is frozen solid and the only way to get it back is by holding the power button for at least 5 seconds and then do a regular power up.

CPU frequency and voltage scaling

This works perfectly with no manual intervention.

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 9
model name      : Intel(R) Pentium(R) M processor 1400MHz
stepping        : 5
cpu MHz         : 600.000
cache size      : 1024 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe up bts est tm2
bogomips        : 1200.08
clflush size    : 64
power management:

When Idle on AC power, the cpu is throttled back to 50% and the CPU temperature is 47 C.  When going full blast, the CPU MHz goes to 1400, the temperature goes to 79-80 C and the fan goes into high gear.  By using ksensors, I can keep track of temperature and fan activity in the panel.

i8k - Inspiron 8k SMM BIOS driver

The i8k driver is included in the Debian kernels but has to be loaded explicitly on the 8600 (modprobe i8k). It is no longer necessary to use the "force=1" option but i8k has to be added to /etc/modules.

X @ 1920x1200 - AGP4x: Nvidia Geforce4 4200 Go

In a great improvement over previous releases, the standard installation recognized and configured the display correctly at the highest resolution, but with the non-accelerated nv driver.  Having always used the accelerated nvidia driver, the difference was extremely noticeable.  I had to install the nvidia binary driver.  Luckily, there is a Debian package that makes the installation very easy.  Previously I had to build a custom kernel to include the non-packaged nvidia driver, making kernel upgrades the more painful.

Still, a few annoyances remained.  The display size was assumed different from what it is, resulting in too large fonts.  The following in the xorg.conf file is the correct information for the display:

        DisplaySize     332     210
        HorizSync       28-110
        VertRefresh     43-90


Explicit modelines for 1920 X 1200 are no longer necessary.
 
Here's the complete xorg.conf file.  There is one problem with the nvidia legacy driver (nvidia-glx-legacy-96xx): upon logout, it crashes and kdm needs to be re-started.  See this bug report. Update: in the nvidia-glx-legacy-96xx bug report page there is a work-around: in the file

/etc/kde3/kdm/kdmrc

the following line needs to be uncommented,  then the server is killed and restarted.

TerminateServer=true

TV Out

After years of not using this feature, I finally decided that it was useful after all, so went looking around on the web for information.  It required manual configuration of xorg.conf, but it works.  It creates a new Desktop, which means that the saved environment is different whether there is a TV plugged into the TV Out port or not.  This was disorienting at first and I would still like to have the one environment restored whether there is a device connected or not.

Enabling this feature adds another screen with its own desktop (thus the Desktop1) over which you can move the mouse, select things from the control panel or menu, etc.  Not very useful given the low resolution of standard TV, but you can also display the output of any program with the option -display=:0.1 when executed from the main display.

FireWire (IEEE 1394): Texas Instruments PCI4510 IEEE-1394 Controller

FireWire (IEEE 1394): Texas Instruments PCI4510 IEEE-1394 Controller (prog-if 10 [OHCI])
Subsystem: Dell Device 016a
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 32 (500ns min, 1000ns max), Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 11
Region 0: Memory at faffd800 (32-bit, non-prefetchable) [size=2K]
Region 1: Memory at faff8000 (32-bit, non-prefetchable) [size=16K]
Capabilities: [44] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME+
Kernel driver in use: ohci1394
Kernel modules: ohci1394

As the above shows, the device is identifued and the driver loads just fine.  I have no fire wire device to test it with.

Ethernet controller: Broadcom Corporation BCM4401 100Base-T (rev 01)

This device is fully supported and detected at installation time.  Works perfectly connected to a 100Base-T Netgear router.  Vast improvement over the 2.4 kernels where manual compilation and tweaking was necessary.

Modem - PCTEL 2304WT

After manual installation (via aptitude) of the sl-modem-source and sl-modem-daemon packages I had to do the following:

m-a prepare
m-a build sl-modem-source

m-a install sl-modem-source

m-a prepare wanted to install linux-headers-2.6.26-1-common and linux-kbuild-6.2.26.   As is pretty clear the build phase builds the driver executables and the latter installs them.  As simple as that.  Great improvement from previous releases.

The modem entry generated by lspci -vv:

00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 01) (prog-if 00 [Generic])
        Subsystem: PCTel Inc Device 4c21
        Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0
        Interrupt: pin B routed to IRQ 5
        Region 0: I/O ports at b400 [size=256]
        Region 1: I/O ports at b080 [size=128]
        Capabilities: [50] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: slamr
        Kernel modules: snd-intel8x0m, slamr

Since I don't have an analog dialup account, the data feature of the modem is untested, but it worked fine in previous releases.  I have no reason to suspect that the fax part doesn't work.  I'll find out when I have the need to send a fax.  The voice part works, after a work-around.  It appears that there is a race condition in loading the slamr driver that somehow messes up the interrupts from the modem.  The result of this is that when the phone rings, no "RING" messages are generated, and vegtty never answers.  The solution is to do this:

/etc/init.d/sl-modem-daemon stop
modprobe -v slamr
/etc/init.d/sl-modem-daemon start
telinit q

until the fixed sl-modem-* packages propagate from unstable.  This problem is apparently fixed there. Additionally, the little script that converts and sends the phone messages as a multi-media email uses metasend, which is part of the metamail package. This package is not installed by default and had to be, manually.  After these small steps, the modem is my answering machine with vgetty.  I had to add:

M0:23:respawn:/usr/sbin/vgetty -x0 -s 38400 ttySL0

to /etc/inittab, and

audio/8bitlinear; /bin/cat '%s'> /dev/audio; description=8-bit Linear Audio; nametemplate=%s.au

to ~/.mailcap. I actually had to create this file. My first impulse was to add the above line to the end of /etc/mailcap, but that file gets overwritten during upgrades, thus the creation of the local dot file. This additional entry is necessary because 8bitlinear is not defined by default and that is what the script generates, via the following line:

rmdtopvf $1 | pvfspeed -s 8000 | pvfcut -T 15 | pvftoau -8  > $1.au

This format is also what you can feed directly to /dev/audio, as seen from the /etc/mailcap entry.  There are probably more elegant ways of doing this, but I didn't want to mess with what has worked acceptably for years. Incoming phone messages are encoded as an attachment and sent to my main mailbox.

USB UHCI Controllers

4 USB hubs are detected, 2 are external .  Everything works fine.  The modular bay floppy drive (really a USB drive) is recognized both when plugged in into an external USB port and into the removable drive bay where the CD/DVD drive normally is.  The external USB ports have been tested with flash drives, ATA hard drives in a USB caddy and an HDTV USB tuner.  All work fine.  An external Dynex 4-port USB hub is not seen and neither are any devices plugged into it.

Infrared

In previous releases, I used the IR port to sync the pda.  This was not very reliable, so I am now using the cradle connected to the first serial port (/dev/ttyS0).  The irda driver is loaded automatically.

I am now in the process of configuring lirc.  It is a pre-requisite to install (via aptitude) the lirc kernel modules, as well as setserial, then the lirc modules must be built and installed:

m-a build lirc-modules-source
m-a install lirc-modules

The serial port used by the IR port (/dev/ttyS1) is grabbed by the serial driver.  The documented solution to prevent this: "setserial /dev/ttyS1 uart none" has no effect, so I'm now leaving this port alone and plan to use lirc only for the TV tuner IR sensor.  More to come on this as I get it to work.

Network controller: Intel Corporation PRO/Wireless LAN 2100 3B Mini PCI Adapter (rev 04)

The only manual intervention for this device was hunting down the firmware which, I presume for reasons of copyright, is not included in the netinstall ISO image.  The installer gives a warning message which identifies the firmware file by name (ipw2100-1.3.fw), so all I had to do is look for it with Google and copy it to the usb flash drive, next to the ISO image.  After re-starting the installation, it was found and installed in the appropriate place.  This device is identified as eth2.  Using ifrename is no longer necessary to have consistent naming of the interfaces, in fact ifrename doesn't seem to work anymore.

PCMCIA

Tested by inserting an old PCMCIA modem:

kernel: [530636.116150] pccard: PCMCIA card inserted into slot 0
kernel: [530636.116170] cs: memory probe 0xf6000000-0xfbffffff: excluding 0xf6000000-0xf71fffff 0xf7e00000-0xf83fffff 0xf9c00000-0xfa1fffff 0xfae00000-0xfb3fffff
kernel: [530636.129099] pcmcia: registering new device pcmcia0.0
kernel: [530636.397586] 0.0: ttyS2 at I/O 0x3e8 (irq = 3) is a 16550A

So the card is recognized.  I have no reason to think it would  not work as it should.

CD/DVD+RW Drive

This is the peripheral that gives the most trouble.  Inserting a video DVD brings up the "new medium detected" window with 5 choices:
Playing it with mplayer (mplayer dvd://) works.

With an audio CD:
Of course there are other applications that deal with CDs and DVDs.  Cdda2wav, that I used to use, is not installed by default by Lenny.  More on this as I try more apps.

With a data CD:

Software

This part is mostly a collection of ideas about what I want the laptop to be useful for.  Part of this section's goal is to take advantage of the quite nice set of peripherals that the 8600 offers.  Part is non-standard configuration of the usual components: mail, news, security, multi-media, etc... Much of this is not implemented yet.  The relevant sections will be updated as I make progress.

File Synchronization

After extensive research some years ago, I chose Unison.  Once configured, it's very easy to use and keeps the desktop and laptop synchronized.  When I get around to configure the mail system, I might also use mailsync.

Security

This laptop is connected to the internet in essentially 3 ways: in a trusted network (that I control) that is behind a firewall that has been tested for years, directly to an ISP through the built-in modem or a cell phone connection via ttyS0, or to untrusted networks (via the built-in Ethernet connector or the wireless interface when the driver becomes available).  In the latter 2 cases a very restrictive firewall is mandatory.  Rather than  using a proxy-type firewall that would require each application to be configured for its use, iptables with the following rules is the first configuration:

#!/bin/sh
# set up a very restrictive iptables firewall
exec iptables-restore <<EOF
*filter
-P INPUT   DROP
-P OUTPUT  ACCEPT
-P FORWARD DROP
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED -f
COMMIT
EOF


When moving to a safe environment (case 1) the following rules take down the firewall.

#!/bin/sh
# remove the restrictive iptables firewall installed on startup of dialup
# connection
exec iptables-restore <<EOF
*filter
-P INPUT   ACCEPT
-P OUTPUT  ACCEPT
-P FORWARD ACCEPT
COMMIT
EOF


These scripts are to be executed automatically by laptop-net for the appropriate environment. Unfortunately, laptop-net is not working reliably yet, so these scripts are mostly not run at the moment.

Mail

While researching ways to handle email on a laptop, I found this page that describes exactly the way I'm going to proceed.  However, things are never that simple.  I've been coming up with more and more requirements:
The Unix/Linux philosophy being that many small programs that each do one thing well cooperate to do bigger things implies that much configuration needs to be done to get a complex mail setup to work.

As it is right now, and the setup is not yet complete, I had to configure
Furthermore, the following utilities make life easier when dealing with a complex mail setup:
A few things have changed in the transition from Etch to Lenny, most notably having to hardcode the name of the uucp host into the exim4 transport configuration file.  All indications are that this should be accomplished by an exim4 variable, but for expediency, this kludge will remain for now.

Mutt

A very convenient change is the autoview feature, as described in the Mutt FAQ (section on html). I installed elinks and I can finally read html email with a minimum of fuss and with no windows popping up and mouse action required.  The latest addition is automated spam handling with one keystroke, thanks to the following macros, posted by Andrei Bazhgin to mutt-users in 2004:

# Pressing a key will do this in the index:
# S (shift-s): Learn the message as spam; Copy message to spam mailbox; Mark the
# (original) message to be deleted.
# H (shift-h): Learn the message as ham (_not_ spam)
# E (shift-e): Re-build the SpamAssassin database

# Bind a spam macro to do this for us:
#       1) Pipe the spam to sa-learn without rebuilding the database
#               - use logging
#       2) Copy the message to the spam folder
#       3) Delete the message from the original folder
macro index S '<enter-command>unset wait_key<enter><shell-escape>date >> ~/Mail/.sa-learn.log<enter><pipe-message>sa-learn --spam --no-rebuild -D >> ~/Mail/.sa-learn.log 2>&1 &<enter><copy-message>~/bulk-mail/caught-spam <enter><enter><delete-message><enter-command>set wait_key=yes<enter>'

# now make another set, but for ham (not spam) messages.
# tell sa-learn to learn ham message. dont delete it or move it.
macro index H '<enter-command>unset wait_key<enter><shell-escape>date >> ~/Mail/.sa-learn.log<enter><pipe-message>sa-learn --ham --no-rebuild -D >> ~/Mail/.sa-learn.log 2>&1 &<enter><enter-command>set wait_key=yes<enter>'

# a macro that tells SA to rebuild its database
macro index E '<enter-command>unset wait_key<enter><shell-escape>date >> ~/Mail/.sa-learn.log<enter><shell-escape>sa-learn --rebuild -D >> ~/Mail/.sa-learn.log 2>&1 &<enter><enter-command>set wait_key=yes<enter>'

Exim4

I chose the option to keep the configuration of exim4 in multiple files, as that allows extensive changes more easily. Since I needed to send outgoing mail by UUCP to a smart host, it was a simple matter to add two small files, per the exim4 FAQ at www.exim.org, question 1501 in section 15 (they use frames, so no direct URL).  The only other change necessary was to replace the transport in the smarthost: stanza (/etc/exim4/conf.d/router/200_exim4-config_primary) to uucp_transport.  All other configuration could be done with dpkg-reconfigure exim4-config, including receiving email addressed to multiple email addresses.  They all get forwarded to the same user (me) at the real login.  Sending out email with multiple From: addresses is not done yet.  Mutt can probably set the From line depending on  what folder is current.

These are the files that needed to be changed or added (after a dpkg-reconfigure exim4-config):

/etc/exim4/conf.d/router/200_exim4-config_primary     (modified - see below)
/etc/exim4/conf.d/router/650_exim4-config_uucp        (new)
/etc/exim4/conf.d/transport/30_exim4-config_uucp      (new)

Modification to /etc/exim4/transport/200_exim4-config_primary: change

transport = remote_smtp_smarthost with
transport = uucp_transport

Also, as mentioned above, the name of the UUCP host must be explicitly hard-coded in the transport configuration file.

UUCP

This is simple to configure.  The only files that need to be modified are: /etc/uucp/[Poll, config, sys] with the same modifications that were working in past releases.  The file /etc/uucp/domains is important for exim4 and needs to be present.

Fetchmail

Fetchmail also works out of the box with a proper .fetchmailrc which takes this form:

poll pop.isp1.net proto pop3
     user <user-id1> there with pass <pw1> is <local_user>
poll mail.isp2.net proto pop3
     user <user-id2> there with pass <pw2> is <local_user>
poll mail.isp3.org proto imap
     user <user-id3> there with pass <pw3> is <local_user>
     ssl

Procmail

This configuration is also straightforward, but not short.  I subscribe to many mailing lists and route the mail to multiple bulk mail files in  the bulk-mail directory.  I mostly sort the mail based on the To: line.

Spamassassin

The following lines at the beginning of my .procmailrc send everything through spamassassin:

:0fw: spamassassin.lock
* < 300000
| /usr/bin/spamassassin -P -c /etc/spamassassin


The "spamassassin.lock" is important.  Without it, large batches of incoming mail spawn hundreds of spamassassin processes that can just about freeze the system for 1/2 hour or more.  This way, only one spamassassin process is allowed at one time.  It takes longer to process the email but the system is usable while it is happening.  The second line bypasses email messages larger than 300KB.

Gbuffy

Gbuffy is also simple to configure although tedious with so many mailing lists.  I have a permanent vertical gbuffy window open which allows me to click on any one of 25 mail boxes.  When doing so, a konsole with mutt running in it is launched.

More to come...

Usenet News

I have been using trn for years.  For intermittent connectivity it is best to have a local news spool, so I have been running inn2 on previous releases. Even after suitably modifying /etc/news/inn.conf, incoming.conf, expire.ctl] with the desired options and running:

dpkg-reconfigure inn2

the news system never started.  The log file pointed to some permission problem.  After running inncheck (part of the inn2 package) it appeared that a lot of permissions were wrong.  Per the suggestion in the documentation to run:

/usr/lib/news/bin/inncheck -f -perm | sh

I did so.  This fixed the permissions problems and inn now starts and runs correctly.  The inn maintainers say that inncheck's permissions settings are too permissive and contravene Debian policy, but this fix worked, even though it might not be the best one.

I used to get a small newsfeed via "suck", which is no longer available in Lenny, so I had to look for an alternative.  It appears that the preferred solution out there is newsx, so I installed it, and after months of not needing a working news feed that badly, I finally sat down and read the documentation.  Whereas suck was pretty much self-contained, newsx is more integrated with inn and uses inn configuration files.  First I had to get the current active file from the news server:

$ /usr/lib/news/bin/getlist  -h freenews.netfront.net active > /var/tmp/freenews.active

as user "news" and then replace the minimal active file that the inn installation had placed in /var/lib/news/active with this one.  Then I had to add an entry to /etc/news/newsfeeds:

freenews.netfront.net/news.netfront.net\
        :*,!junk,!control,!control.*/!foo\
        :Tf,Wfb,Ap:

Newsx refers to this and won't work without it.  This of course means that inn is willing to receive everything that this news server has (almost 50,000 newsgroups!) so how to tell newsx to get a subset?  There is a command line option: --groups xxx, so after testing manually I put a series of --groups commands in /etc/newsx/newsx.conf and call newsx from /etc/ppp/ip-up.local like this:

 su news -c /usr/lib/news/bin/newsx freenews.netfront.net freenews.netfront.net

Network Configuration

Laptop-net is the most automatic and flexible package that I've been able to find.  I don't have a pressing need for high network mobility at the moment, so I haven't spent the time configuring it. In the meantime, the system is working well enough with the network settings in /etc/network/interfaces. In previous releases it was necessary to bind ethX names to specific devices with ifrename.  This is no longer necessary.  In fact using ifrename produces strange ifconfig output, so I don't use it.  Eth0 is the wired interface, eth1 is the fire-wire interface and eth2 is the wireless interface.

Printing

I need to print very rarely, so the nice color printer I had before: an Epson Stylus C84  started having problems with dried ink.  Ink cartridges are ridiculously expensive compared to the price of the printer and if they are going to dry out for lack of use, it's time for another solution.  I plugged in an old HP LaserJet 6L. It was very easy to configure and works just fine.

Bookmark Management

I had been using bookmarker on Woody.  It was quite difficult to set up then but I had a centralized bookmark repository that was web accessible and stored in a postgresql database. An account of the original installation on woody can be found here. The installation was completely manual and required code modifications even though bookmarker was in the package database.  As of this latest update, bookmarker is close to 10 years old and even the author's web site doesn't exist any more. However, a little digging has shown that minor code modifications and setting this option to On in php.ini allows the transmission of login id and password information to bookmarker.

register_globals = On

This is admittedly a security risk, but bookmarker depends on a a few global variables referenced all over the code.  Maybe one day I'll re-write those sections to get rid of the globals, but for now it works.  As bookmarker was originally written for php3, each upgrade of php and its new settings has required some change.

Web Privacy / Ad Elimination

No browser should be without this proxy.  It stands between your browser and the ad-infested and privacy invading internet out there.  This great piece of software can be found at www.privoxy.org.  I started using it as a locally compiled program installed in /usr/local many releases ago, but there has been a Debian package available for quite a while.  The current version is  3.0.9-1.

Browser Improvement

Both Konqueror and Iceweasel (Firefox) are standard in Lenny and work adequately.  This is in sharp contrast to previous releases where it was necessary to manually install plugins for basic functionality.  One item did not work: flash in iceweasel.  It was necessary to uninstall and re-install.  Then it magically started working.  In this process the version number went from v9  r100 to v10 r15.  Something happened behind the scenes...

Video (Web cams/TV)

Web cams

One old web cam (Creative model #1100001212) worked with xawtv without any additional configuration.  The other, a Quickcam Express, needs the driver source (available as a Debian package) installed as well as qc-usb-utils, and then the driver itself needs to be built and installed.

m-a build qc-usb-source
m-a install qc-usb-source

The program "motion" (available in a Debian package) works great as a motion detector and image capture.

TV

The long road to watching TV on the computer began with the installation of mythtv, mythtv-doc and mytharchive from aptitude.  The USB HDTV tuner uses the pvrusb2 driver, and as soon as it was plugged in, the driver tried to load a missing firmware file (v4l-cx2341x-enc.fw).  This encoder firmware is in the windows driver that came with the tuner, but you have to go through ridiculous contortions to extract it, so I found it by searching with Google.  After it was installed in /lib/firmware the  low  level integration was working.

At the application level, the first problem I had was mythtv not connecting to mysql.  To avoid adding complication via security, I set up the host name in mythtv as 'localhost' and then had to make the mysql databases created during mythtv installation accessible:

# mysql -u root mysql
mysql> grant all privileges on *.* to '<user>'@'localhost';
mysql> grant all privileges on *.* to '<user>'@'%';
mysql> grant all privileges on mythconverg.* to 'mythtv'@'localhost' identified by 'mythtv' with grant option;
mysql> grant all privileges on mythconverg.* to 'mythtv'@'%' identified by 'mythtv' with grant option;
mysql> flush privileges;

The next problem was the group permissions of /home/video, where mythtv stores recorded video. I had to:

chgrp mythtv /home/video
chmod g+w /home/video

At this point, a temporary configuration of the tuner in mythtv as a DVB/DTV tuner can do a channel scan, but the signal is so weak and/or noisy that no picture can be seen even though various channels are found.  The next step is putting an antenna on the roof, along with a pre-amp.

When the tuner is configured as an analog (v4l) tuner, mythtv can receive a few analog channels, but with so much noise that they are essentially unwatchable.  The ultimate solution is to configure the tuner as 2 boards in mythtv and then combine them in an "input group".

More to come...

February 2009 - The Eclectic One that prefers to remain anonymous  <eclectic @ freeshell.org>