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 eventually 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.
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:
- 1.4GHz Pentium-M, 512MB RAM, just upgraded to 2GB
- 250 GB Western Digital ATA100 udma5 5400 rpms (Model WDC WD2500BEVE-00WZT ) The new drive for this installation
- 1920x1200 WUXGA active-TFT panel
- 64Mb Nvidia Geforce4 4200 Go graphics
- CD/DVD+RW drive (Philips Model SDVD6004) for the modular bay
- Floppy drive for the modular bay
- USB Flash memory keys (16MB and 1GB)
- 90W Power Supply
- Intel Pro/Wireless 2100 wireless LAN card
- Second HD (60G) for the modular bay
- Third HD (80G) in a usb caddy
Additional hardware that required manual installation of drivers or firmware
- PCMCIA slot (1x)
- mini-pci slot (1x)
- ieee1394a (fire wire) port (1x)
- USB 2.0 ports (2x)
- serial, parallel, vga connectors
- winmodem (pctel)
- 10/100 ethernet
- AC'97 soundcard
- TV/video/SPDIF out
- mic in, stereo headphones out
- built-in microphone
- IR port
- Intel 855PM system chip set (Centrino)
- TI 4510 CardBus controller
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.
- Quickcam Express web cam
- USB HDTV hybrid tuner
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.
- Partition manually with fdisk and create a first partition that and make it of type FAT16. Fdisk output:
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
- Make a DOS FS
mkdosfs -c /dev/sda1
- Mount the Dell Diagnostics partition of the original disk and save all files. Then restore them to the new partition.
mount /dev/hda1 /mnt
tar -cvf /tmp/dell-d.tar
umount /mnt
mount /dev/sda1 /mnt
cd /mnt
tar -xvf /tmp/dell-d.tar
- Copy sys.com from the freedos/dosemu directory (in my user directory) to the new Dell diagnostics partition. Not sure why it wasn't there already, but it is important to make that partition bootable.
- Install the modular floppy drive and insert a boot dos floppy previously made. Alternatively, the floppy drive can be connected externally via a USB cable without removing the CD/DVD drive.
- Boot from the DOS disk. At the DOS prompt, type:
> c:
> sys c:
This is important to make the partition bootable.
- Reboot the system. The diagnostics partition is now ready to be booted via grub.
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.
- nvidia-kernel-legacy-96xx-2.6.26-1-686
- sl-modem-daemon
- sl-modem-source
- i8kutils
- hotkeys
- qc-usb-source
- qc-usb-utils
- linux-headers-2.6.26-1-common
- linux-kbuild-6.2.26
- lirc-modules-source
Furthermore, there was plenty of configuration left to do in different areas:
- Individual packages not installed by default but wanted
- Configuration files manually modified for local conditions that exist in the installed packages
- Configuration files that are not present in installed packages
- Settings of all kinds that were lost because old configuration files were not restored automatically
- Home directory configuration files, such as .profile, .bashrc, etc...
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.
- Restoring all backed up postgresql databases.
- Figure out why Bookamarker doesn't work and fix it.
- Mutt - Improvements for better automation.
- Newsx (now that suck is no longer available)
- Lirc (for the TV tuner)
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:
- Fn-Up Arrow and Fn-Down Arrow, to increase and decrease the screen brightness.
- Fn-Page Up and Fn-Page Down, to increase and decrease volume (reflected in the hotkeys bar)
- Fn-End, to Mute and Unmute (reflected in the display by hotkeys)
- Fn-F2 seems to turn on/off the wireless device.
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])As the above shows, the device is identifued and the driver loads just fine. I have no fire wire device to test it with.
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
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.
- Open in New Window - works.
- Copy DVD with K3B - fails "The writer does not support writing Double Layer DVD."
- Rip Video DVD titles with K3B - after 2 hours of 100% CPU usage, 0% progress.
- Play DVD with Kaffeine - fails with a Kaffeine crash (signal 11)
- Do Nothing - 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.
- Open in New Window - works.
- Extract and Encode Audio Tracks - calls KaudioCreator (it works).
- Play - calls KsCD (it works).
- Extract Digital Audio with K3b - works.
- Copy CD with K3b - works.
- Play Audio CD with Kaffeine - calls Kaffeine Player (it works).
- Do Nothing - works.
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.
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.
- Multiple email addresses
- Multiple email connections (uucp, pop3, smtp)
- Multiple mailing lists (different folders)
- Automatic configuration of features per folder
- Automatic configuration of features, such as natural language, per recipient
- Use of one email server/connection or other depending on mailing list, destination address or From: address
- Integration with GPG and anonymous remailers
- Integration with laptop-net
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:
- Mutt (Mail User Agent)
- Exim (Mail Transport Agent)
- UUCP (To send some of the mail out via UUCP)
- Fetchmail (To receive email from pop3 servers)
- Procmail (To distribute email from multiple mailing lists)
- Spamassassin (To get rid of spam)
- Spam Bouncer (Used to work in woody, now a low priority)
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.
- Gbuffy (point and click access to the many mailboxes)
- Eximon (to keep an eye on the comings and goings of email)
- Front-end to send email (to automate handling of different addresses; maybe gbuffy can handle this too)
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>