Jun 152004

IBM ThinkPad T41

This article describes how I installed FreeBSD 5.x on an IBM ThinkPad T41 so it dual-booted with the existing Windows XP Pro installation. Also described is:
  • my dhclient.conf settings
  • my Postfix configuration
  • installing KDE from packages
  • set up of xplanet
  • installing the Project Evil work to use a Windows driver to get my wireless network card running
The intial work was done in June 2004 with FreeBSD 5.2.1. Further work was done in December 2004 with FreeBSD 5.3. Both installations were successful. I will highlight any differences between the two installations. screen shot I bought a slightly used IBM ThinkPad T41 on Friday. I have installed FreeBSD 5.2.1 and KDE 3.2.3 on it. It is also running XFree86 Server (the snapshot version as found in x11-servers/XFree86-4-Server-snap). I went with the snapshot version because I was getting screen corruptions (see photograph at left). As it turns out, this wasn’t the cause of the problem, but that will be left for later in this story. In December, I installed 5.3 on the laptop. With this came xorg 6.7.0. I am particularly pleased with xorg. It installed without any manual configuration. I am most impressed. Similarly, I am now using KDE 3.3.2. If you are a regular reader of this website, then you’ll know that I recently had my laptop stolen. That was pretty sickening. Even more disappointing is the fact that I think it was used on MSN, but MSN are refusing to help unless we get a court order. All I really want from them is a Yes or a No as to whether or not my MSN account was accessed from an IP address other than my home location at a particular time on a specific date. If the answer is no, then I know my computer was not used. If the answer is yes, then I’ll get a court order and proceed form there. But this isn’t about MSN and my attempts to catch the thief. On to the laptop detail…

The T41

This is the second laptop I have purchased from The Trailing Edge. They deal primarily in used equipment. Phil Fourier was able to get me an almost-new IBM ThinkPad T41 (model 2378 DMU). This laptop was manufactured in April 2004 (that’s less than 2 months ago). The previous laptop was a ThinkPad T22. I quickly became fond of it as I was freed from my desk and able to work in other locations. The office I have is quite good, but being able to work elsewhere in the house, have computing power when on the road, and being able to give presentations using your own machine is a great time saver. I quickly became acustomed to being able to work in the living room, or take the laptop with me if I had spare time between appointments but not enough time to return home.

Making space – dual boot

The ThinkPad comes with Windowx XP Pro pre-installed. The first step to installing FreeBSD to dual-boot is to make room on the disk. This is done by shrinking the existing partition, creating a new partition, and then installing FreeBSD there. To do this partition magic, I obtained BootIt Next Generation (BootIt NG) (BING) from TeraByte Unlimited. BootIt NG is a “partition and multi boot manager with a powerful and simple to use set of tools for partitioning, imaging, and multi-booting your computer”. I created a CD from their ISO and followed the instructions in bootitng.pdf. I shrunk the existing partition to give me a 17GB partition for FreeBSD. For what it’s worth, here are the FreeBSD slice sizes after the install:
Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
/dev/ad0s2a    738318   36388   642866     5%    /
devfs               1       1        0   100%    /dev
/dev/ad0s2e    738318      20   679234     0%    /tmp
/dev/ad0s2f  15491038 2863864 11387892    20%    /usr
/dev/ad0s2d    738318   20368   658886     3%    /var
For the install, I did my usual minimal install of FreeBSD. I prefer to install the minimal installation. I installed 5.2.1-RELEASE. More recent versions of -CURRENT did not work, but that is not unusual. NOTE: After installing 5.2.1, I moved to 4.10-stable and ran with that. After 5.3 was released, I added another partition to my machine, and I’m now triple-booting my machine.

Various notes on post-installation configuration

This is a list of the various tweaks and settings I made after the install. Perhaps they might be useful to you.
  • This entry in /boot/loader.conf allows the em network interface card to work (this was needed for 5.2.1 and was not needed for 5.3):
  • I added this entry to /etc/dhclient.conf so the DHCP server knew who I was and gave me the right details in return:
    send dhcp-client-identifier "laptop.example.org";
  • In /etc/rc.conf, I added these entries:

  • I added these packages right away:
    pkg_add -r bash
    pkg_add -r cvsup-without-gui
  • I disabled the Touch Pad in the BIOS. By default, both the Touch Pad and the TrackPoint are enabled. However, if you brush against the Touch Pad in error, your cursor jumps to the other side of the screen. I don’t like that. Disabling Touch Pad also allows all three mouse buttons to work under XFree84.
One other thing I did was configure xntpd. I have already documented that in this article. After all that, it was time to get XFree86 installed (with 5.3, I used xorg).

Installing KDE from packages

I wanted to install KDE, my window manager of choice. Fortunately, I did not have to compile from source. If you have a look at the KDE on FreeBSD website, you will find the FreeBSD KDE Packages. Please read that URL carefully and choose the correct packages. There are three streams:
  1. i386 4-STABLE
  2. 5-CURRENT (NOT FOR 5.x-RELEASE !!!)
  3. 5.2/5.2.1-RELEASE
Please choose the correct stream, or you will regret the wasted time. Here is how I installed KDE on my FreeBSD 5.2.1-RELEASE box:
export PACKAGESITE=http://people.fruitsalad.org/lofi/packages/5.2.1-RELEASE/Latest/
pkg_add -r kde

Because I want KDE, I added the following to my X configuration file ~/.xinitrc so X knows to run KDE:

But that’s not enough to get KDE running. I also need the XFree86 server. And the clients. That is next.

Installing the latest XFree86

I wanted to install the latest XFree86. I installed x11-servers/XFree86-4-Server. Also needed is x11/XFree86-4-clients. These are installed like this:
cd /usr/ports/x11-servers/XFree86-4-Server
make install clean
cd /usr/ports/x11/XFree86-4-clients
make install clean
I also installed x11/wrapper:
cd /usr/ports/x11/wrapper
make install clean
And I also installed x11-fonts/XFree86-4-fontDefaultBitmaps
cd /usr/ports/x11-fonts/XFree86-4-fontDefaultBitmaps
make install clean
If you encounter the following error, I suggest installing the above port:
Fatal server error:
could not open default font 'fixed'
That’s it. Go for it.

Configuring XFree86-4

There is a wonderful utility for configuring XFree86: /usr/X11R6/bin/xf86config. However you do need to know some details about your computer before using. Specifically, you need to know what video adaptor is used, how many RAM it contains, and the horizontal and vertical refresh rates. NOTE: I didn’t have to do any of this with xorg.

The Video Adaptor

I found out my video adaptor using this command. I have put the video section in bold to make it easier to locate.

# pciconf -lv
agp0@pci0:0:0:  class=0x060000 card=0x05291014 chip=0x33408086 rev=0x03 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82855PM Odem Host-Hub Interface Bridge'
    class    = bridge
    subclass = HOST-PCI
pcib1@pci0:1:0: class=0x060400 card=0x00000000 chip=0x33418086 rev=0x03 hdr=0x01
    vendor   = 'Intel Corporation'
    device   = '82855PM Odem AGP Bridge'
    class    = bridge
    subclass = PCI-PCI
uhci0@pci0:29:0:        class=0x0c0300 card=0x052d1014 chip=0x24c28086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) USB UHCI Controller #1'
    class    = serial bus
    subclass = USB
uhci1@pci0:29:1:        class=0x0c0300 card=0x052d1014 chip=0x24c48086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) USB UHCI Controller #2'
    class    = serial bus
    subclass = USB
uhci2@pci0:29:2:        class=0x0c0300 card=0x052d1014 chip=0x24c78086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) USB UHCI Controller #3'
    class    = serial bus
    subclass = USB
none0@pci0:29:7:        class=0x0c0320 card=0x052e1014 chip=0x24cd8086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) USB EHCI Controller'
    class    = serial bus
    subclass = USB
pcib2@pci0:30:0:        class=0x060400 card=0x00000000 chip=0x24488086 rev=0x81 hdr=0x01
    vendor   = 'Intel Corporation'
    device   = '82801BAM/CAM/DBM (ICH2-M/3-M/4-M) Hub Interface to PCI Bridge'
    class    = bridge
    subclass = PCI-PCI
isab0@pci0:31:0:        class=0x060100 card=0x00000000 chip=0x24cc8086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DBM (ICH4-M) LPC Interface Bridge'
    class    = bridge
    subclass = PCI-ISA
atapci0@pci0:31:1:      class=0x01018a card=0x052d1014 chip=0x24ca8086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DBM (ICH4-M) UltraATA/100 EIDE Controller'
    class    = mass storage
    subclass = ATA
none1@pci0:31:3:        class=0x0c0500 card=0x052d1014 chip=0x24c38086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) SMBus Controller'
    class    = serial bus
    subclass = SMBus
none2@pci0:31:5:        class=0x040100 card=0x05371014 chip=0x24c58086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) AC'97 Audio Controller'
    class    = multimedia
    subclass = audio
none3@pci0:31:6:        class=0x070300 card=0x05241014 chip=0x24c68086 rev=0x01 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82801DB/DBM (ICH4/M) AC'97 Modem Controller'
    class    = simple comms
none4@pci1:0:0: class=0x030000 card=0x05301014 chip=0x4c571002 rev=0x00 hdr=0x00
    vendor   = 'ATI Technologies'
    device   = 'Radeon Mobility M7 LW'
    class    = display
    subclass = VGA
cbb0@pci2:0:0:  class=0x060700 card=0x05521014 chip=0xac46104c rev=0x01 hdr=0x02
    vendor   = 'Texas Instruments (TI)'
    device   = 'PCI4520 PC card CardBus Controller'
    class    = bridge
    subclass = PCI-CardBus
cbb1@pci2:0:1:  class=0x060700 card=0x05521014 chip=0xac46104c rev=0x01 hdr=0x02
    vendor   = 'Texas Instruments (TI)'
    device   = 'PCI4520 PC card CardBus Controller'
    class    = bridge
    subclass = PCI-CardBus
em0@pci2:1:0:   class=0x020000 card=0x05491014 chip=0x101e8086 rev=0x03 hdr=0x00
    vendor   = 'Intel Corporation'
    device   = '82540EP Gigabit Ethernet Controller (Mobile)'
    class    = network
    subclass = ethernet
none5@pci2:2:0: class=0x028000 card=0x25518086 chip=0x10438086 rev=0x04 hdr=0x00
    vendor   = 'Intel Corporation'     device   = 'PRO/Wireless LAN 2100 3B Mini PCI Adapter'
    class    = network
As you can see above, my laptop contains an ATI Technologies video card, namely a Radeon Mobility M7 LW. I wasn’t able to find any direct information on that card, but I did find help at some The FreeBSD Laptop Compatibility List. The entry I found most useful was this one. Using the HorizSync and VertRefresh values from that file, I was only missing the RAM. I found the RAM details on the IBM website. I also discovered this is actually an ATI Mobility RADEON 7500, with 32MB on board. Great. I used the above information to create this XF86Config (it normally resides at /etc/X11/XF86Config.

Running X

The command used to start XFree86 is startx. If you get “command not found”, you probably didn’t install the XFree86 clients. X started up for me. So did KDE for that matter. Then I installed and configured xplanet.

Getting in Postfix

I prefer Postfix as a mail server, so I installed it.
cd /usr/ports/mail/postfix/
make install clean
More information on how installing and configuring Postfix is available here. For what it’s worth, I add these values to the end of /usr/local/etc/postfix/main.cf. Why the end? I put my local settings there so it is easier to maintain.
mynetworks_style = host
relayhost = bast.example.org
alias_maps = hash:/etc/mail/aliases
The mynetworks_style directive ensures that only this host is trusted for relaying mail. The relayhost directive tells this machine to not attempt delivery of outgoing email. Instead, relay the mail to the host indicated. The alias_maps directive ensure that the standard aliases database is used.

Other mail options

In my ~/.forward file, I added this entry so that mail would be forwarded to my mail account, which is not necessariy on this laptop:

Getting sound running

To get sound working under 5.2.1, I added this to my kernel configuration file:
device          pcm
device          sbc
Then I recompiled my kernel. For what it’s worth, here is the diff of my kernel configuration file versus GENERIC:
--- GENERIC	Thu Jul 15 12:01:08 2004
+++ LAPTOP	Thu Jul 15 13:28:06 2004
@@ -19,10 +19,8 @@
 # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.394.2.3 2004/01/26 19:42:11 nectar Exp $
 machine		i386
-cpu		I486_CPU
-cpu		I586_CPU
 cpu		I686_CPU
-ident		GENERIC
+ident		LAPTOP
 #To statically compile in device wiring instead of /boot/device.hints
 #hints		"GENERIC.hints"		#Default places to look for devices.
@@ -67,7 +65,7 @@
 #options 	WITNESS_SKIPSPIN	#Don't run witness on spinlocks for speed
 # To make an SMP kernel, the next two are needed
-options 	SMP			# Symmetric MultiProcessor Kernel
+#options 	SMP			# Symmetric MultiProcessor Kernel
 device		apic			# I/O APIC
 device		isa
@@ -271,3 +269,6 @@
 device		firewire	# FireWire bus code
 device		sbp		# SCSI over FireWire (Requires scbus and da)
 device		fwe		# Ethernet over FireWire (non-standard!)
+device          pcm
+device          sbc

That might prove useful to me, should I need it again. In the worst case, it should help you get started. Under 5.3, I did this:
# kldload snd_driver
Be patient when issuing this command. It loads all of the sound drivers. Your system may become sluggish during this time. It takes about 30 seconds. Here is what was loaded on my system after issuing that command:
# kldstat
Id Refs Address    Size     Name
 1   58 0xc0400000 624db4   kernel
 3    1 0xc0a2b000 9c1c     if_ipw.ko
 4   14 0xc0a35000 537f0    acpi.ko
 5    1 0xc1e31000 2000     snd_driver.ko
 6    1 0xc1f07000 4000     snd_ad1816.ko
 7    1 0xc1f0b000 4000     snd_als4000.ko
 8    1 0xc1f0f000 4000     snd_cmi.ko
 9    1 0xc1f2f000 4000     snd_cs4281.ko
10    2 0xc2115000 6000     snd_csa.ko
11    1 0xc21dd000 b000     snd_ds1.ko
12    1 0xc2121000 6000     snd_emu10k1.ko
13    1 0xc2100000 5000     snd_es137x.ko
14    2 0xc2134000 4000     snd_ess.ko
15    4 0xc21e8000 4000     snd_sbc.ko
16    1 0xc21ec000 4000     snd_fm801.ko
17    2 0xc21f0000 9000     snd_mss.ko
18    1 0xc21f9000 5000     snd_ich.ko
19    1 0xc2206000 6000     snd_maestro.ko
20    1 0xc220c000 7000     snd_maestro3.ko
21    1 0xc2214000 10000    snd_neomagic.ko
22    1 0xc2224000 4000     snd_sb8.ko
23    1 0xc2228000 4000     snd_sb16.ko
24    1 0xc222c000 4000     snd_solo.ko
25    1 0xc2230000 4000     snd_t4dwave.ko
26    1 0xc2234000 4000     snd_via8233.ko
27    1 0xc2238000 4000     snd_via82c686.ko
28    1 0xc223c000 4000     snd_vibes.ko
OK, so what use is this? Well, look at the output of this command:
# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: at io 0x1c00, 0x18c0 irq 11 bufsz 16384 kld snd_ich (1p/1r/0v channels duplex default)
See that snd_ich? That’s the key. I then added the following to /boot/loader.conf


One of the big things about laptops is the ability to suspend and resume where you left off. This is sometimes difficult to get right. Note: I have not played with suspend/resume under 5.3. The laptop came with Version: 1RETC6WW (3.05a). I obtained that information by installing and running the dmidecode port. The full output of that is pretty impressive. It shows more information than you will ever need. I upgraded my BIOS shorting after getting it back from repaires. This was an effort to get -CURRENT running. It failed. The BIOS upgrade worked. I’m now on 3.06f. But -CURRENT still can’t install. If your laptop powers off, or goes to sleep when you close the lid, and you do not want that, try adding this entry to /etc/sysctl.conf:
# do not sleep when the lid is closed
Remember to press enter at the end of the line. /etc/sysctl.conf is similar to /etc/crontab in that the last line will be ignored if it you do not press ENTER at the end of the line. The FreeBSD handbook contains a section on ACPI. I recommend reading the section on Suspend/Resume to learn how to suspend. If you see this message when you close the lid:
laptop kernel: acpi0: Sleep state S1 not supported by BIOS
then it means that your BIOS does not support the sleep state which FreeBSD is trying to invoke. To view the supported sleep states, issue this command:
$ sysctl -a | grep sleep
hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.sleep_button_state: S1
hw.acpi.sleep_delay: 5
As you can see, only states 3, 4, and 5 are supported. To avoid the message, you can issue add same entry to /etc/sysctl.conf as described at the top of this section.

Suspend/Resume – the testing

When I tried acpiconf -s S3 and closed the lid, my laptop did power itself down. When I opened it back up, it did resume. The only problem was the mouse was not active, and the network connection was dead and each virtual console contained a solid blinking cursor in the top left corner. The mouse can be restored with these commands:
kill -TERM `cat /var/run/moused.pid`
/usr/sbin/moused -p /dev/psm0 -t auto
NOTE: I’ve found that this is sufficient:
kill -hup `cat /var/run/moused.pid`
To get the mouse resuming properly [under 5.3], I did added this to the end of /etc/rc.resume, just before the exit 0 statement:
/etc/rc.d/moused restart
My thanks to Simon L. Nielsen for sharing his R40 experiences, which worked just fine for my T41. I wasn’t able to get em0 running again. However, I have had previous correspondence on this topic. See this archive email for details. In short, I was trying things such as this:
kill -TERM `cat /var/run/dhclient.pid`
ifconfig em0
ifconfig em0 down
route -n flush
ifconfig em0 up
dhclient em0
Eventually, the laptop froze up and I had to power it off. Here are some other things I tried:
  • acpiconf -s4 : had to power it back on. It did not resume.
  • acpiconf -s5 : does a shutdown -p now
I also notice this from a acpiconf -s 3:
Jun 13 18:48:34 laptop sudo: dan : TTY=ttyp1 ; PWD=/usr/home/dan ; USER=root ; COMMAND=/usr/sbin/acpiconf -s S3
Jun 13 18:48:43 laptop kernel: pcib0: slot 29 INTA is routed to irq 11
Jun 13 18:48:43 laptop kernel: pcib0: slot 29 INTB is routed to irq 11
Jun 13 18:48:43 laptop kernel: pcib0: slot 29 INTC is routed to irq 11
Jun 13 18:48:43 laptop kernel: pcib0: slot 29 INTD is routed to irq 11
Jun 13 18:48:44 laptop kernel: pcib0: slot 31 INTB is routed to irq 11
Jun 13 18:48:44 laptop last message repeated 2 times
Jun 13 18:48:44 laptop kernel: pcib1: slot 0 INTA is routed to irq 11
Jun 13 18:48:44 laptop kernel: usb0: cannot start
Jun 13 18:48:44 laptop kernel: usb1: cannot start
Jun 13 18:48:44 laptop kernel: usb2: cannot start
Jun 13 18:48:44 laptop kernel: pcib2: slot 0 INTA is routed to irq 11
Jun 13 18:48:44 laptop kernel: pcib2: slot 0 INTB is routed to irq 11
Jun 13 18:48:44 laptop kernel: pcib2: slot 1 INTA is routed to irq 11
Jun 13 18:48:44 laptop kernel: pcib2: slot 2 INTA is routed to irq 11
Jun 13 18:48:44 laptop kernel: wakeup from sleeping state (slept 00:00:08)
Jun 13 18:48:44 laptop kernel: uhub0: illegal enable change, port 1
Jun 13 18:48:44 laptop kernel: uhub1: illegal enable change, port 1
Jun 13 18:48:44 laptop kernel: uhub2: illegal enable change, port 1
Jun 13 18:48:45 laptop kernel: uhub0: port 1 reset failed
Jun 13 18:48:45 laptop kernel: uhub0: illegal enable change, port 2
Jun 13 18:48:45 laptop kernel: uhub1: port 1 reset failed
Jun 13 18:48:45 laptop kernel: uhub1: illegal enable change, port 2
Jun 13 18:48:45 laptop kernel: uhub2: port 1 reset failed
Jun 13 18:48:45 laptop kernel: uhub2: illegal enable change, port 2
Jun 13 18:48:46 laptop kernel: uhub0: port 2 reset failed
Jun 13 18:48:46 laptop kernel: uhub0: illegal enable change, port 1

Project Evil – the wireless card

Project Evil has the goal of providing support for otherwise unsupported ethernet drivers. This is accomplished by using Windows drivers. Project Evil is what I will use to get my built-in wireless card running. It is by no means limited to just wireless cards.

See also this blurb. To do this under 5.2.1-RELEASE, I manually obtained the following bits of code from 5.2-CURRENT and compiled then under 5.2.1. What can I say… it worked. The Project Evil source is included with 5.3. If you are using 5.3, please skip the following steps and proceed to the configuration.

  1. src/sys/compat/ndis
  2. src/sys/modules/ndis
  3. src/sys/dev/if_ndis
  4. src/usr.sbin/ndiscvt
  5. src/sys/modules/if_ndis
To checkout:
cd /usr
rm -rf src/sys/compat/ndis src/sys/modules/ndis src/sys/dev/if_ndis src/usr.sbin/ndiscvt src/sys/modules/if_ndis
cvs co -D "Jun 7 01:22:48 2004 UTC" src/sys/compat/ndis src/sys/modules/ndis src/sys/dev/if_ndis src/usr.sbin/ndiscvt src/sys/modules/if_ndis
To build:
cd /usr/src/sys/modules/ndis
make clean
make install

cd /usr/src/usr.sbin/ndiscvt
make clean
make install

cd /usr/src/sys/modules/if_ndis
make clean
# be sure to copy your drivers here at some point!
# I had mine on CD, so I used these steps.
mount /cdrom
cp /cdrom/W* .
umount /cdrom
/usr/sbin/ndiscvt -i W70N51.INF -s W70N51.SYS -o ndis_driver_data.h
make install
I’m not sure where I got the W70N51 values. I think I ran XP on my box and found out that way. I did encounter one issue under 5.2.1, which may have been fixed by now:
[root@laptop:/sys/modules/if_ndis] # make
Warning: Object directory not changed from original /usr/src/sys/modules/if_ndis
make: don't know how to make pccarddevs.h. Stop

The solution is to remove references to pccarddevs.h from /usr/src/sys/modules/if_ndis/Makefile. After compiling, you need to load the modules:

kldload ndis
kldload if_ndis
NOTE: I found that under 6.0-STABLE, I didn’t have to issue the second kldload command. The first command loaded the if_ndis module. Then you can view any associated stations with this command:
wicontrol -i ndis0 -l
To load those kernel modules at boot time, add these entries to /boot/loader.conf:

Oh yes, those garbled screens!

At the top of this article, there is a photograph of what my laptop screen would look like after leaving XFree86 and going to another virtual console. It was very annoying. It would come and go. Then I discovered what caused the problem. The console on the IBM ThinkPad T41 has two modes: full screen or compressed (these are my expressions, I made them up). If you have the same problem, try pressing FN-F8 to toggle between the two modes.

The failure

As mentioned at the start of this article, my T41 suffered a major failure. This was after about a week. I had just finished documenting all the above information and had the laptop up and running just the way I like it. Then, one morning, the system failed to boot. I was left with just a cursor in the top left corner. I called IBM. At first, we thought it was the drive. It turned out to be the main board. IBM have replaced it under warranty. Here’s to hoping that the next few days are better than the first few days. On the bright side, it took me less than 24 hours elapsed time to get the laptop back to the same condition it was in before the failure. I attribute that to having these notes, although in rough form.

Build times

For what it’s worth, here’s how long it takes to build world:
StepTime Build kernel
11 minutes Install kernel12 seconds Build world52 minutes Install world4 minutes
Your times may vary.

The packages

Here is a list of the packages I have installed.
$ pkg_info
WordNet-2.0         Dictionaries and thesauri with devel. libraries (C, TCL) an
XFree86-Server- XFree86-4 X server and related programs
XFree86-clients-4.3.0_8 XFree86-4 client programs and related files
XFree86-font100dpi-4.3.0 XFree86-4 bitmap 100 dpi fonts
XFree86-font75dpi-4.3.0 XFree86-4 bitmap 75 dpi fonts
XFree86-fontDefaultBitmaps-4.3.0 XFree86-4 default bitmap fonts
XFree86-fontEncodings-4.3.0 XFree86-4 font encoding files
XFree86-fontScalable-4.3.0 XFree86-4 scalable fonts
XFree86-libraries-4.3.0_7 XFree86-4 libraries and headers
aalib-1.4.r5_1      An ascii art library
arts-1.2.3,1        Audio system for the KDE integrated X11 desktop
artswrapper-1.2.1   Setuid wrapper for arts
aspell-0.50.5_2     Spelling checker with better suggestion logic than ispell
atk-1.6.1           A GNOME accessibility toolkit (ATK)
autoconf-2.57_1     Automatically configure source code on many Un*x platforms
automake-1.7.9_1    GNU Standards-compliant Makefile generator (version 1.7)
bash-2.05b.007      The GNU Bourne Again Shell
cdparanoia-3.9.8_7  A CDDA extraction tool (also known as ripper)
compat4x-i386-5.2.1 A convenience package to install the compat4x libraries
cups-base-  The Common UNIX Printing System: headers, libs, & daemons
cups-pstoraster-7.07_1 GNU Postscript interpreter for CUPS printing to non-PS prin
cvsup-without-gui-16.1h General network file distribution system optimized for CVS
db4-4.0.14_1,1      The Berkeley DB package, revision 4
dmidecode-2.4       A tool for dumping DMI (SMBIOS) contents in human-readable
dri-4.3.0,1         OpenGL hardware acceleration drivers for XFree86
expat-1.95.7        XML 1.0 parser written in C
fam-2.6.9_4         A file alteration monitor
flac-1.1.0_3        Free lossless audio codec
fontconfig-2.2.2,1  An XML-based font configuration API for X Windows
freetype2-2.1.7_3   A free and portable TrueType font rendering engine
fribidi-0.10.4_1    A Free Implementation of the Unicode Bidirectional Algorith
gettext-0.13.1_1    GNU gettext package
ghostscript-gnu-7.07_6 GNU Postscript interpreter
gimp-2.0.2,1        A GNU Image Manipulation Program
gimp-print-4.2.6_2  GIMP Print Printer Driver
glib-2.4.2          Some useful routines of C programming (current stable versi
gmake-3.80_2        GNU version of 'make' utility
gnupg-1.2.4_1       The GNU Privacy Guard
gtk-2.4.4           Gimp Toolkit for X11 GUI (current stable version)
gtk-engines2-2.2.0_3 Theme engine for the gtk+-2.0 toolkit
hicolor-icon-theme-0.5 A high-color icon theme shell from the FreeDesktop project
id3lib-3.8.3_1      Library for manipulating ID3v1/v1.1 and ID3v2 tags
imake-4.3.0_2       Imake and other utilities from XFree86
intltool-0.31       Xml internationalization support for GNOME, and others
jasper-1.701.0      An implementation of the codec specified in the JPEG-2000 s
jbigkit-1.6         Lossless compression for bi-level images such as scanned pa
joe-2.8_5           Joe's own editor
jpeg-6b_3           IJG's jpeg compression utilities
kde-3.2.3           The "meta-port" for KDE
kdeaccessibility-3.2.3 Accessibility applications for KDE
kdeadmin-3.2.3      KDE applications related to system administration
kdeartwork-3.2.3    Additional themes, sounds, wallpapers and window styles for
kdebase-3.2.3       Basic applications for the KDE system
kdeedu-3.2.3        Collection of entertaining, educational programs for KDE
kdegames-3.2.3      Games for the KDE integrated X11 desktop
kdegraphics-3.2.3   Graphics utilities for the KDE3 integrated X11 desktop
kdelibs-3.2.3       Base set of libraries needed by KDE programs
kdemultimedia-3.2.3 Multimedia utilities for the KDE integrated X11 desktop
kdenetwork-3.2.3    Network-related programs and modules for KDE
kdepim-3.2.3        Personal Information Management tools for KDE
kdesdk-3.2.3        KDE Software Development Kit
kdetoys-3.2.3       Small applications for KDE
kdeutils-3.2.3      Utilities for the KDE integrated X11 desktop
kdevelop-3.0.4      Powerful IDE for developing KDE/Qt-based apps
koffice-1.3.1,1     Office Suite for KDE3
lcms-1.12,1         Light Color Management System -- a color management library
libXft-2.1.6        A client-sided font API for X applications
libart_lgpl2-2.3.16 Library for high-performance 2D graphics
libaudiofile-0.2.6  A sound library for SGI audio file
libcroco-0.5.1      CSS2 parsing library
libexif-0.5.12_2    Library to read digital camera file meta-data
libglut-6.0.1       A graphics library similar to SGI's OpenGL
libgsf-1.10.0       An extensible i/o abstraction for dealing with structured f
libiconv-1.9.1_3    A character set conversion library
libidn-0.4.6        Internationalized Domain Names command line tool
libijs-0.35         C library that supports plugin printer driver for Ghostscri
libmad-0.15.0b      Libmad library (part of MAD project)
libmng-1.0.7        Multiple-image Network Graphics (MNG) reference library
libmusicbrainz-2.1.1 2nd generation incarnation of the CD Index - audio metadata
libogg-1.1,3        Ogg bitstream library
libpaper-1.1.14     A library providing routines for paper size management
librsvg2-2.6.5_1    Library for parsing and rendering SVG vector-graphic files
libtool-1.3.5_2     Generic shared library support script (version 1.3)
libtool-1.5.6_1     Generic shared library support script (version 1.5)
libungif-4.1.3      Tools and library routines for working with GIF images
libvorbis-1.0.1,3   Audio compression codec library
libwmf-      Tools and library for converting Microsoft WMF (windows met
libxml2-2.6.9       Xml parser library for GNOME
libxslt-1.1.6       The XSLT C library for GNOME
m4-1.4_1            GNU m4
nas-1.6             Network Audio System
net-snmp-5.1.1_4    An extendable SNMP implementation
netpbm-10.21_1      A toolkit for conversion of images between different format
open-motif-2.2.2_2  Motif X11 Toolkit (industry standard GUI (IEEE 1295))
openldap-client-2.1.30 Open source LDAP client implementation
openslp-1.0.11      Open-source implementation of the Service Location Protocol
openssl-0.9.7d      SSL and crypto library
opera-7.52.20040706 A blazingly fast, full-featured, standards-compliant browse
p5-Authen-SASL-2.08 Perl5 module for SASL authentication
p5-Digest-1.08      Modules that calculate message digests
p5-Digest-MD5-2.33  Perl5 interface to the MD5 algorithm
p5-HTML-Parser-3.36 Perl5 module for parse HTML tag
p5-HTML-Tagset-3.03 Some useful data table in parsing HTML
p5-MIME-Base64-3.01 Perl5 module for Base64 and Quoted-Printable encodings
p5-Net-1.19,1       Perl5 modules to access and use network protocols
p5-ParallelUA-2.57  Perl5 Parallel LWP User Agent for WWW access
p5-URI-1.31         Perl5 interface to Uniform Resource Identifier (URI) refere
p5-XML-Parser-2.34_1 Perl extension interface to James Clark's XML parser, expat
p5-libwww-5.79      Perl5 library for WWW access
pango-1.4.0_1       An open-source framework for the layout and rendering of i1
pcre-4.5            Perl Compatible Regular Expressions library
perl-5.6.1_15       Practical Extraction and Report Language
pkgconfig-0.15.0_1  A utility used to retrieve information about installed libr
png-1.2.5_5         Library for manipulating PNG images
popt-1.7            A getopt(3) like library with a number of enhancements, fro
portupgrade-20040701_3 FreeBSD ports/packages administration and management tool s
postfix-2.0.20,1    A secure alternative to widely-used Sendmail (old version)
python-2.3.4        An interpreted object-oriented programming language
qt-3.3.2_2          Multiplatform C++ application framework
quanta-3.2.3,2      Comprehensive html/website development environment
ruby- An object-oriented interpreted scripting language
ruby18-bdb1-0.2.2   Ruby interface to Berkeley DB revision 1.8x with full featu
samba-libsmbclient-3.0.4_1 The shared lib from the samba packages
shared-mime-info-0.14_3 A MIME type database from the FreeDesktop project
t1lib-5.0.1,1       A Type 1 Rasterizer Library for UNIX/X11
taglib-1.0_1        Library for manipulating ID3v1 and ID3v2 tags in MP3 and OG
tcl-8.4.6,1         Tool Command Language
tiff-3.6.1_1        Tools and library routines for working with TIFF images
tk-8.4.6,1          Graphical toolkit for TCL
trm-0.2.1_6         TRM generator to generate acoustic fingerprints
wrapper-1.0_3       Wrapper for XFree86-4 server
wv2-0.2.1_3         A library providing routines to access Microsoft Word files
xpdf-3.00_1         Display PDF files, and convert them to other formats
xplanet-1.0.4       Draw pictures of the earth textured by an image

  11 Responses to “IBM ThinkPad T41”

  1. The image for the screenshot and its thumbnail are missing 🙂

  2. Is there a reason you went with Postfix 2.0.x rather than 2.1.x (mail/postfix)?


    • Jim Trigg wrote:

      > Is there a reason you went with Postfix 2.0.x rather than 2.1.x
      > (mail/postfix)?


      After you pointed this out, I installed Postfix 2.1.4

      Thank you

      The Man Behind The Curtain

  3. Hi,

    I have installed Xorg server on to my T41. It worked just perfect. There is no need to create a config file. Just install /usr/ports/x11/xorg and issue startx command 😉

    By the way Dan I think you can put a link to ndis.ko and if_ndis.ko. I have compiled and installed it. My system is FreeBSD-5.2.1-p9 and it worked perfectly. I have compiled a new kernel and put these to modules to /boot/kernel, after reboot these modules loaded perfectly.

  4. You can connect to an AP using WEP as follows

    # ifconfig ndis0 ssid my_ssid wepmode on wepkey `cat wepkey`

    wepkey file should be like that:


    The number of Xs may differ according to the ecryption key length being used. After that you can use dhclient command to get your IP address

    # dhclient ndis0

  5. Great Article, it helped me get FreeBSD running on my T41. I just had a question though, have you had any issues trying to play music CDs?? I keep getting an "Invalid argument" mesage when trying to mount the CD. Checked the forums with no luck, so I figured I’d ask somebody with a similar setup.

    Thanks again for the very useful article.

    • I have never tried audio CDs.

      The Man Behind The Curtain

      • Got it to work a while ago, but had forgotten to post about it…

        turned out all I needed to do was to install the xmms-cdread plugin. It pays to read through the pkg-descr in the ports collection. Then again, to some that might just be common sense… first time FreeBSD user, so what do I know.

        Once again, thanks for your article,

  6. The ntfsresize utility is another option if the filesystem is in the NTFS format. There area couple places out there with free recovery CDs that include qtparted and ntfsresize.