Debian GNU/Linux

The (OLD) Debian GNU/Linux Cookbook

By Graham Williams

Last Modified 2003/09/06 12:11:28 Graham.Williams@csiro.au


DISCLAIMER: The information on this page is provided as-is. Use it at your own risk. But please let me know if there are errors or if you think it can be enhanced.

Visit the The GNU/Linux Cookbook, a user's guide to using GNU/Linux, and a replacement for this older information.

A PDF version of the FULL book is also available. Out-of-date information on Debian GNU/Linux on the Dell Latitude XPi P133ST is available in dlxpip133st.html

This cookbook provides an overview of installing Debian GNU/Linux on a number of machines, specifically the Dell Latitude CPi D300XT laptop, but also with information relating to installaitons on other hardware, including the Dell Latitude XPi P133ST and Dell Latitude XPi 90T laptops and an old 486/DX66 underperformer with no CDROM, no modem, no network card, but with 12MB RAM, a 1.44MB floppy and a 400MB hard disk.

If you've come by this way email me your experiences and recipes for inclusion.

Sample Hardware

This cookbook started life as a guide to installing Debian GNU/Linux on the Dell Latitude CPi D300XT laptop and will still serve that purpose. The hardware consisted of:

Identification: Dell Latitude CPi D300XT
CPU: Pentium II (Deschutes)
Graphics Chip: NeoMagic MagicGraph 128XD (NM2160) chipset
Memory: 128MB
Hard Disk: 6GB (internal MS-WindowsNT)
6GB (bay GNU/Linux /dev/hdc)
Floppy Disk: 3.5" (parallel port of the docking station)
CD-ROM: (docking station bay)
Sound: Crystal Semiconductor CS4237B
Advanced audio system with SRSŪ 3D sound
PCMCIA: 3COM 56K
Ethernet: 3COM Vortex 3C590/905-series (docking station)
Monitor: SyncMaster 17GLi (docking station)

The laptop has two 6GB internal Hard Drives (one internal for Microsoft Windows NT and one in the internal bay of the laptop for Debian GNU/Linux). The floppy drive normally housed in the internal bay is hooked up through the parallel port. A docking station delivers a CD-ROM, Ethernet, and external keyboard, mouse, and monitor to the laptop. Things work pretty much the same (except for missing devices of course) when it's free of the dock. I have woody (the current `unstable' Debian distribution) installed and use the Helix GNOME desktop environment.

A much older machine is the 486/DX66 on which I have a very basic installation of woody with Emacs, ssh, and lynx (no windows yet).

Identification: None
CPU: Intel 486/DX66
Graphics Chip:
Memory: 12MB
Hard Disk: 420MB
Floppy Disk: 3.5" 1.44M and 5.25" 1.2M
CD-ROM: Second hand, but not yet connect.
Sound: None
Network: None
Monitor: None

Installation

Distributions

For a real challenge one starts with the Linux kernel and builds a GNU/Linux system bit-by-bit. Usually though you start with one of the many excellent distributions. My favourite is Debian GNU/Linux, the ``Linux for the GNU Generation.'' I started with Slackware but migrated through Red Hat on to Debian. Red Hat is pretty good. But Debian is great. It conforms to the open and distributed development model, unlike Red Hat, and is the basis of commercial distributions like Amirix, Corel, Embedded Debian, Stormix, TimeSysand the VA Linux Systems, O'Reilly and SGI collaboration. It also powers web sites like Linux.com. The stable distribution is rock solid. The unstable distribution is where you will find the latest and the greatest -- it is a pretty solid distribution (and is particularly suited to those who live at the bleeding edge). Administering the system and maintaining up-to-date package installations is easy with Debian's apt and dpkg tools. A lot of effort has been devoted to ensuring the system works as a whole, rather than providing a lot of glitz.

Here are some specific reasons I use Debian:

  • It is difficult to upgrade a system from one RedHat release to another. Debian provides simple migration paths that are well trodden.
  • Debian's tools have the ability to do recursive upgrades of systems.
  • Debian deals with dependencies and will identify the required packages and install them and then install the package you want.
  • Debian has a utility to install RedHat packages if you are desperate!
  • Debian does not overwrite your config files nor does the packaging system touch /usr/local.
  • RedHat uses a binary database for it's package data while Debian (dpkg) uses text files. Debian is more robust (if a single file gets corrupted it's less of a problem) and it is possible to fix or modify things by hand using a normal text editor if needed. (Debian's apt uses a mixed approach: it uses the same text files as dpkg but uses a binary cache to also get the advantages of a binary database.

The Installation Process

Installation is a breeze if you follow the very clear instructions of the Debian Installation Guide.

Nine floppies (for Debian 2.1) began the installation for me. The raw floppy disk images were retrieved from ftp.debian.org. They are: resc1440.bin (Rescue Disk); drv1440.bin (Drivers); base14-1.bin up to base14-7.bin (Base Disks). These are dumped to floppy disks using the rawrite2 executable for Microsoft Windows (available from the same place):

C:\> rawrite2 -f resc1440.bin -d a:

Following the installation instructions left me with a basic installation of Linux:

Boot with the Rescue Disk. I had to force the recognition of the internal bay hard drive by supplying the following command line when you receive the boot prompt:

boot: linux hdc=13424,15,63
(the numbers were eventually figured out one time when the drive was auto-detected).

The dbootstrap application runs automatically and asks lots of configuration questions, with a summary of my answers below:

color
kb	qwerty/us
disks	partition	  6GB	Linux	N P 6063 B T 83 B	hdc1
			128MB	Swap	N P 125 T 82		hdc2    W Q
swap	/dev/hdc2	scan
linux	/dev/hdc1	scan
root	mount		/dev/hdc1
kernel	from /dev/fd0	Rescue Disk	Drivers Disk
devices	misc		psaux
	net		ppp
network	host = debian
	connected = no
base	from /dev/fd0	Base Disks 1-7
config	timezone	Australia ACT	GMT no
(skip the "Make Linux boot directly from hard disk")
Make boot floppy	Custom Boot
Reboot

Once the base is installed and the machine rebooted you are asked to enter a password for the root account and to create a user account. Do this.

PPP should then be made to point to your ISP using your PCMCIA modem card (or some other modem or network device). The Debian package tool called `dselect' will do the rest allowing you to choose packages and to install them. I did this using the `apt' method but you could also do this via a CD-ROM. Initially, dselect will install all of the other basic required packages, and then hand things over to you for your needs.

Dual Boot with MS-WindowsNT

You might like to begin with installing the lilo package. (But don't install it over the existing master boot record on drive /dev/hda unless you wish to wipe out NT -- the boot sector of the first hard disk where the BIOS boots from is called the master boot record or the MBR). For dual boot using the Microsoft Windows NT boot loader see the Linux with NT Loader mini HOWTO, but I detail the steps below. Lilo (/sbin/lilo) is run under Linux to install a boot sector (after editing /etc/lilo.conf) on /dev/hdc. You then copy the Linux boot sector to floppy disk, reboot to NT, and copy the Linux boot sector onto the NT hard disk. The NT boot loader is then told where to find the file (edit C:\boot.ini). It is all very clearly documented in the above mini HOWTO. On bootup you can then choose between GNU/Linux and Microsoft Windows NT.

# editor /etc/lilo.conf
root=/dev/hdc
boot=/dev/hdc
append="hdc=13424,15,63"
# /sbin/lilo
Warning: /dev/hdc1 is not on the first disk
Added Linux *
# dd if=/dev/hdc1 of=/root/bootsect.lnx bs=512 count=1
# mcopy /root/bootsect.lnx a:
# reboot (into NT)
C:\>copy a:\bootsect.lnx c:\bootsect.lnx
C:\>attrib -s -r c:\boot.ini 
C:\>notepad c:\boot.ini
      [boot loader]
      timeout=30
      default=C:\bootsect.lnx
      [operating systems]
      C:\bootsect.lnx="Debian GNU/Linux"
      multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation ... 
      multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation ...
C:\>attrib +s +r c:\boot.ini 
C:\>reboot (into Linux)

Note the inclusion of the append line above in my lilo.conf. This ensures /dev/hdc is found. Otherwise, sometimes it is not.

After you install a new kernel under Linux (either from a kernel-image package on the Debian archive or else your own compiled kernel-image) you will need to rerun LILO. By default lilo.conf identifies the image to boot as "/vmlinuz". This is a symbolic link to, for example, /boot/vmlinuz-2.0.36.

Package Administration

Introduction

Debian distributions are based on over 4400 packages. Your task is to select those you wish to install! This is made easier with task packages which are virtual packages that depend on a collection of other packages. Selecting one of these task packages results in that collection of other packages being installed. An example is the task-tex package that will install the TeX and LaTeX packages and related utilities.

Individual packages are installed and updated using dselect (with a basic GUI), or dpkg (for manual installation of deb files), or apt-get (for automatic download and install, including installation of other required packages).

Using dselect is at first confusing but allows you to easily update and install new packages with an ease that leaves you confident that all difficulties have been carefully hidden through extensive dependency and consistency checking. If network connection is interrupted, the downloads will be resumed from where they got to. The dselect learning curve will pay dividends. My installation has always been left in a consistent and stable state after installing packages from the Debian archives on the Internet.

As you gain confidence and know what you are after, move on to apt-get if you prefer a command-line interface. This takes care of dependency checking automatically (unlike dpkg) and will retrieve the required packages from the Debian archives.

Each individual package can Suggest, Recommend, and Depend on other packages. A subtle difference between dselect and apt-get is that the latter ignores Suggest and Recommend dependencies whereas dselect will offer Suggested packages for the user's attention and will select Recommended packages automatically.

Releases and Versions

Debian has a carefully planned and controlled release program and has a variety of distributions available at any time. The distributions have code names (from the Toy Story movies), release names, and versions. This may sound complicated, but it is quite simple and effective, and I describe it through an example. The official version of Debian is referred to as the "stable" distribution which, as of April 2000, is code-named "slink" and is officially Debian 2.1. The "unstable" distribution is where new packages and updates to old packages appear and the current unstable distribution is code-named "woody". A new release is on the horizon. This release has until recently been called "unstable" but is now "frozen". Its code-name is "potato". It will be officially released sometime as Debian 2.2. The different names act as convenient synonyms with the code-names never changing but the stable/unstable/frozen links set as appropriate.

The fact that the links can change is a little problematical as people may suddenly find that their system wants to upgrade everything to a new version once the stable link changes to a new release. My suggestion is to choose the code-name and stay with that. So, as of May 2000, if you want to maintain a stable distribution, go with "slink". If you want to track the emerging new release, then go with "potato". If you want all packages and latest releases (but less well tested) go with "woody".

Version Code Name Frozen Released Distribution (April 2000)
2.0 hamm
2.1 slink 1998/11/03 1999/03/10 stable
2.2 potato 2000/01/16 2000/06/?? frozen
woody unstable

Installing Packages

There are over 75 Debian mirrors world-wide and over 4400 packages available for unstable. Check for a mirror near you by trying http://ftp.XX.debian.org/debian where you replace XX with your country code. If you don't find one then try some others or stay with the master Debian site or check for another mirror. If you do find a suitable mirror then edit /etc/apt/sources.list (as root user) and add in the appropriate Net address. My current sources.list points to the potato distribution:

deb http://ftp.au.debian.org/debian        potato        main contrib non-free
deb http://ftp.au.debian.org/debian-non-US potato/non-US main contrib non-free

Note that the format of the non-US entry has changed since slink.

Using dselect

Running dselect you will be lead through these simple steps:

  • Access the archives using the apt access method. You will be offered the chance to edit the sources.list file but I always answer N since it seems to wipe out my comments. I prefer to hand edit the file and to update my comments.
  • Update my machine's picture of the world. This reads the Packages files (which is the master list of packages available from the Debian archive) found at those sites listed in sources.list and updates the information for dselect on my machine.
  • Select any packages you want to install. This will also highlight any packages that dselect thinks you probably should install, including dependencies and security updates.
  • Install will then figure out what has to be done and tells you what it will need to download. You can tell it to go ahead or if you get cold feet you can pull out here and go back and change your selections. If you go ahead the packages are pulled from the Net and installed.
  • Config is mostly a null operation for me. It seems to just double check things.
  • Remove is also mostly a null operation. It also seems to just double check things.
  • Quit when I'm all done.

Simple. The Select stage can be a little confusing when you get conflicts so read the help screens carefully.

Once you've got things going with dselect you may find the convenience of the command line based apt-get useful.

Last Updated: 2000/06/13 09:35:02 Graham.Williams@cmis.csiro.au

Using apt-get

The apt-get utility provides a command line method for installing packages and (automatically) their dependencies, retrieving them from the Internet when required. The basic operation is:

# apt-get update                  (to update the list of available packages)
# apt-get install package-name

The file /etc/apt/sources.list is again used to specify the location of packages.

Upgrading all Packages

To upgrade all of your installed packages to the latest available for a particular distribution distribution, all you need to do is add the appropriate lines for that distribution to your /etc/apt/sources.list and then simply:

# apt-get update
# apt-get upgrade

Usually this will list the new packages to be installed and any old ones that will be removed, and inform you of the number of packages that will be upgraded. To also list the packages that will be upgraded use the -u option:

# apt-get -u upgrade

An alternative, and that which is often suggested, is to do a dist-upgrade rather than just an upgrade. The difference is that an upgrade will not remove packages nor will it install new packages (that might otherwise be required due to dependencies). A dist-upgrade will do an upgrade but also do the book-keeping (removing and installing other packages). As a consequence dist-upgrade may break things temporarily if it has to (e.g., uninstall a critical package in order to get dependencies working). So the common upgrade procedure is:

# apt-get update
# apt-get dist-upgrade

If your sources.list grabs the packages from the net these upgrades can take some time but are mostly automatic.

You can use the --download-only option of apt-get to download the files for an install without actually unpacking and setting up the packages. For example:

# apt-get update
# apt-get --download-only dist-upgrade

In this way you are able to leave the download unattended and when you are ready you can monitor the unpacking and setup.

If things go wrong somewhere the apt may be able to help. The --fix-broken will do its best:

apt-get --fix-broken dist-upgrade

but if things still don't work, you may need to use dpkg directly to remove and isntall packages.

Last Updated: 2000/05/20 22:50:25 Graham.Williams@cmis.csiro.au

Available Packages

Here are some other locations that may come in use for different purposes. Some may no longer be current so check them out first.

# Security updates from Debian
deb http://security.debian.org/ stable updates

# Gnome DEBs for slink from Debian
deb http://www.debian.org/~jim/debian-gtk-gnome.old/gnome-stage-slink slink main

# Alternative non-US distribution
deb http://non-us.debian.org/ potato/non-US main contrib non-free

# XFree (3.3.4) for slink
deb http://samosa.debian.org/~branden/ xfree86-334-slink/

# Updated Gnome packages (1.1.90)
deb http://marillat.free.fr/ unstable main

# Seahorse: the Gnome GUI for GnuPG
deb http://seahorse.sourceforge.net/ debian contrib/X11

# Helix GNOME: install task-helix-core and task-helix-gnome or dist-upgrade
deb ftp://spidermonkey.helixcode.com/pub/helix/distributions/Debian/ woody main

# Also mirrored in Australia by AARNET
deb ftp://mirror.aarnet.edu.au/pub/helixcode/distributions/Debian/ woody main
Package Administration

Put a package on hold

$ dpkg --set-selections hold diff

List all installed packages that have updated versions available

$ apt-get update
$ apt-cache dump | awk .....

Maintaining a Distribution Archive

The apt method within dselect and the apt-get command (which the apt mathod uses) place all downloaded files into /var/cache/apt/archive. You can then use the apt-move command to move the archived files into a local hierarchy that mirrors a standard disttribution hierarchy. Then you can point apt-get to this local archive by pointing to it from sources.list using the file:// format. You can also give the option --download-only to apt-get to download but not unpack nor install the package.

Synchronising Two Installations

The package system maintains a list of all packages installed (and de-installed). You can access this list, save it to a file, and use it to mark those same packages for installation (or deinstallation) on anther machine:

# dpkg --get-selections > dpkg-selections
# dpkg --set-selections < dpkg-selections
# apt-get dselect-upgrade
Package Information

The dpkg and apt-get commands are pretty useful and provide a lot of functionality. Here's some common things that you may want to do:

Search for the package that installed the file diff.info.gz

$ dpkg --search diff.info.gz	[alternative is -S]

List all packages installed (one line per package)

$ dpkg --list			[alternative is -l]
$ dpkg --get-selections

What is the (one-line) status of the diff package?

$ dpkg --list diff

List the information for any package with diff in its name

$ dpkg --list *diff*

List files associated with the package diff

$ dpkg --listfiles diff		[alternative dpkg -L diff]

What packages mention diff?

$ apt-cache search diff

Display information about a package

$ apt-cache show diff		[alternative is dpkg --print-avail]

What packages depend on diff?

$ apt-cache showpkg diff
$ apt-cache depends diff

Last Updated: 2000/05/24 16:36:07 Graham.Williams@cmis.csiro.au

X Windows

And now onto the desktop itself.

XFree86 Server

XFree86 3.3.2 is shipped with Debian 2.1. However, the NeoMagic Graphics chip is supported by XFree86 as a standard SVGA driver only from XFree86 3.3.3. All is not lost as Debian 2.1 has available a XFree 3.3.2 driver for the chipset called xserver-neomagic.

I first updated to XFree86 3.3.4 compiled for Debian 2.1. After upgrading to potato you will have XFree86 3.3.6. The packages from potato to install are:

# apt-get install task-x-window-system
# apt-get install xserver-svga

You will then need to run either xf86config (for a console-based interface) or XF86Setup (for a X Windows based interface) to create an appropriate /etc/X11/XF86Config file. If you are in luck, this will be straightforward. Often it is not (particularly for laptops). Below are some configs I have had success with:

XF86Config for the nm2160

I hand crafted a simple XF86Config file that worked to get 16 bpp at 1024x768 on the Neo Magic graphics chip nm2160:

Section "Files"
    RgbPath    "/usr/X11R6/lib/X11/rgb"
    FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
    FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
    FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
    FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
    FontPath   "/usr/X11R6/lib/X11/fonts/freefont/"
    FontPath   "/usr/X11R6/lib/X11/fonts/sharefont/"
EndSection

Section "ServerFlags"
EndSection

Section "Keyboard"
    Protocol	      "Standard"
    AutoRepeat	      500 5
    LeftAlt           Meta
    RightAlt          ModeShift
    RightCtl          Compose
    ScrollLock        ModeLock
    XkbKeymap         "xfree86(us)"
EndSection

Section "Pointer"
    Protocol           "PS/2"
    Device             "/dev/psaux"
    Emulate3Buttons
    Emulate3Timeout    50
EndSection

Section "Monitor"
    Identifier  "Dell SyncMaster 17GLi"
    VendorName  "Dell"
    ModelName   "SyncMaster 17GLi"
    HorizSync   31.5 - 48.5
    VertRefresh 55-65
    Modeline    "1024x768" 65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync
EndSection

Section "Device"
    Identifier  "NeoMagic"
#   Option      "intern_disp"
    Option      "extern_disp"
EndSection

Section "Screen"
    Driver      "svga"
    Device      "NeoMagic"
    Monitor     "Dell SyncMaster 17GLi"
    DefaultColorDepth 16
    Subsection  "Display"
        Depth       16
        Modes       "1024x768" "800x600" "640x480"
        ViewPort    0 0
    EndSubsection
EndSection

This setup is used when the notebook is docked with display being to an external monitor. Both internal and external displays don't work together and so you need to manually edit the XF86Config file each time you change between the external and internal display (could be done with a script, but essentially you swap the "#" around, which is used to identify a comment line). It is reported that having both enabled can destroy the internal display. It certainly makes it go pretty ugly momentarily. According to the Linux on the Dell Latitude CPi A366XT page, you can't just switch between internal and external displays without updating your XF86Config and restarting X, or YOU CAN DAMAGE YOUR DISPLAYS!

The value for the Vertical Refresh rate of 55-65 was suggested by Charlie Hedlin since ``LCD's don't need 80Hz and the like.''

XF86Config for the clgd7543

I hand crafted a simple XF86Config file that worked to get 8 bpp at 800x600 for the Cirrus Logic grachics chip clgd7543 and plan to include it here sometime (depending on demand).

Windowing Environment

GNOME is my Desktop and Session Manager and Sawfish is the Window Manager. KDE is a GNOME alternative and Window Maker and Enlightenment are alternatives to Sawfish.

The LBX (Low Bandwidth X) server extension is useful for increasing the responsiveness of remote X applications. Remote Emacs windows are now being delivered to my desktop over a 33 K connection at about 3 times more quickly! (Also more quickly than my LBX connection from MS-WindowsNT using Exceed!)

The Kernel

CHECK: I may not need to compile my own kernel any more? The last remaining thing I needed was APM for the laptops. The current kernels have APM configured, but disabled by default, and I beleive you turn it on with the use of "apm=on". Need to check this. If this works, I will move this kernel section to the end of the document as it becomes less important. So add append="apm=on" to lilo.conf.

After upgrading to potato I installed a newer kernel. I will illustrate the process with kernel-image-2.2.14 and the associated pcmcia-source (PCMCIA card support) and alsa-source (sound card support). Tuning the kernel through the CONFIGs can appear daunting.

There are many reasons to install your own kernel. I originally had to do so to get support for the laptop advanced power management and sound. Kernels are becoming more modularised and thus more general, allowing support to be loaded as needed..

The first step is to install the appropriate packages. For slink I installed the following packages:

For potato I installed the following packages:

The first three install the appropriate tar files in /usr/src. The fourth provides the tools to create your own kernel-image and modules-image as Debian packages that you then install with dpkg. The use of kernel-package is highly recommended and is the Debian way of doing things. It is all very straight forward. Note that you do not need the kernel-headers package as all the headers required are in the kernel-source package. The headers were split out for other reasons. The kernel-source delivers a tarball. You can instead obtain a more recent version from the net yourself and still use the Debian kernel-package utilities.

The steps involved are:

# cd /usr/src
# tar Ixvf kernel-source-2.2.14.tar.bz3
# tar zxvf alsadriver.tar.gz
# tar zxvf pcmcia-cs.tar.gz
# ln -s kernel-source-2.2.14 linux (for convenience)

You now need to configure the kernel. There are many options and I tend to start with the Debian kernel configuration found in /boot/config-2.2.14. The primary changes I made include specifying CONFIG_M686 and enabling APM support. For these kernels Debian out of the box supports sound modules and NTFS.

# cd linux
# make xconfig (or make menuconfig or make config)
  (load /boot/config-2.2.14 into the config tool)
# make-kpkg clean
# make-kpkg --revision 2:custom.1 kernel_image
# make-kpkg --revision 2:custom.1 modules_image

Move the old module libraries out of the way:

# cd /lib/modules
# mv 2.2.14 2.2.14.dist

Now install the new kernel and modules:

# cd /usr/src
# dpkg --install kernel-image-2.2.14_2:custom.1_i386.deb
      (Boot Floppy: YES)
      (LILO: YES but don't install anything in the master boot record)
# dpkg --install alsa-modules-2.2.14_0.4.1i-4+2:custom.1_i386.deb
# dpkg --install pcmcia-modules-2.2.14_3.1.8-10+2:custom.1_i386.deb
# reboot (from floppy)

This should start you up with the new version of the kernel. You can then do the boot sector transfer across to WindowsNT to remove the need to boot from floppy, once all seems okay (assuming you've already set things up for dual boot):

# /sbin/lilo
Warning: /dev/hdc1 is not on the first disk
Added Linux *
# dd if=/dev/hdc1 of=/root/bootsect.lnx bs=512 count=1
# mcopy /root/bootsect.lnx a:
# reboot (into NT)
C:\>copy a:\bootsect.lnx c:\bootsect.lnx
C:\>reboot (into Linux)

Note how this interacts with Debian's package management. By calling my version of the kernel 2:custom.1, this will be a more recent version number than the standard Debian kernel-image package. That is, kernel-image-2.2.14_2:custom.1_i386 is regarded as being more recent than kernel-image-2.2.14_2.2.14-1_i386. Thus, the packaging system will not try to install a more recent 2.2.14 over my own image. Debian kernel packages always have the version number the same as the kernel version number.

Configurations

Kernel configuration is an interesting exercise. You are offered many configuration options, most with brief but helpful documentation (stored in /usr/src/linux/Documentation/Configure.help).

An oddity I noticed is that a couple of files in /usr/src/linux/include/linux are not readable by other. For example:

-rw-r-----    1 root     root          126 Apr 28 11:42 version.h

In compiling other programs this is sometimes a problem (for non-root users). You can change this with "chmod o+r version.h".

Recipes

There is no hiding the fact that GNU/Linux is a comprehensive operating system. We now begin tuning the system to suit our needs. Some tuning may require reconfiguring the kernel but many do not. I mention various kernel configurations in the following and you can check in the appropriate config file in /boot (for example /boot/config-2.2.14) to see if the currently running kernel has the option set.

Advanced Power Management

UPDATE I beleive current debian kernels have CONFIG_APM on but CONFIG_APM_DO_ENABLE off. You simply have to add append="apm=on" to lilo.conf to turn APM on and you no longer need to worry abuot copmiling your own kernel.

The relevant parts of the kernel configuration (kernel 2.2.15) are:

CONFIG_APM=y
CONFIG_APM_DO_ENABLE=y
CONFIG_APM_CPU_IDLE=y
CONFIG_APM_DISPLAY_BLANK=y
CONFIG_APM_POWER_OFF=y
CONFIG_APM_IGNORE_MULTIPLE_SUSPEND=y
CONFIG_APM_IGNORE_SUSPEND_BOUNCE=y

You can now close the lid of the laptop to force a suspend. The laptop will beep then turn itself off. Simply open the laptop lid to resume. This works for both console logins and X sessions.

You can also eject the laptop from a docking station to achieve the same effect. When the laptop lid is opened, or the laptop is inserted back into a docking station, the system resumes. It seems advisable to do this only when in console mode (that is, not while you have an X session running - it's not quite there for X sessions yet).

It is also advisable to install the apmd package which provides the apm command. This produces a more human readable output than a simple cat /proc/apm and can suspend your laptop from the command line:

# apm
AC off-line, battery status high: 56% (2:27)
# apm -s

A suspend while connected to power within a docking station does not seem to suspend the machine completely. It sends it to sleep but it does not beep and power down.

Some useful commands related to rebooting are:

# poweroff		(shutdown and turn off the computer)
# reboot		(shutdown and reboot the computer)

After installing the apmd package the suspend maintains the clock correctly between a suspend and a resume. (Although I seem to be losing a few seconds each time.)

Note that a suspend will disconnect your modem!

PROBLEMS When you eject the laptop from a docking station while running an X session it does not come back properly when the laptop is reinserted into a docking station. Sometimes the display is half off the screen. Sometimes simply get streaks across the screen. If this happens, you can go back to a console as usual with CTRL-ALT-F1, or exit from the X session with CTRL-ALT-BACKSPACE. If you eject while running an X session and open the laptop lid you will not get the proper display, and may damage the display. It can also freeze the laptop.

Alternative Applications

Debian has a clean mechanism for dealing with applications that provide the same tools and commands. We describe here how this mechanism works and how you can use it to tune your installation.

If you have more than one variant of emacs installed (e.g., emacs19, emacs20, and xemacs) then you can configure which one you get by default with:

# update-alternatives --config emacs

You will be asked to choose from a list of alternatives.

Here's another example: You can use the update-alternatives command to specify which window manager to use as the system default.

# update-alternatives --config x-window-manager

Now suppose the window-manager you want to use as the default is not listed as available. You can install it with:

# update-alternatives --install /usr/bin/x-window-manager \
                      x-window-manager /usr/bin/mywm PRIORITY

Where PRIORITY is a number higher than the highest existing priority for the x-window-manager alternative. You can get a list of priorities with:

# update-alternatives --display x-window-manager

To remove a Window Manager:

# update-alternatives --remove x-window-manager /usr/bin/mywm

CD-ROM (Docking Station)

For a CD-ROM located in the Docking Station of a Dell Latitude CPi you will need a recent version of the kernel (I'm currently using 2.2.15) so that it will be recognised. On boot the following is displayed:

CMD646: IDE controller on PCI bus 01 dev 28
CMD646: chipset revision 0x03, MultiWord DMA Force Limited
CMD646: 100% native mode on irq 10
    ide2: BM-DMA at 0xfcc0-0xfcc7, BIOS settings: hde:pio, hdf:pio
    ide3: BM-DMA at 0xfcc8-0xfccf, BIOS settings: hdg:pio, hdh:pio
...
hde: TOSHIBA CD-ROM XM-1802B, ATAPI CDROM drive
...
ide2 at 0xfcf8-0xfcff,0xfcf2 on irq 10
..
hde: ATAPI 24X CD-ROM drive, 128kB Cache
Uniform CDROM driver Revision: 2.56

To make use of the CD-ROM device first create the /dev/hde devices with MAKEDEV as root:

# cd /dev
# ./MAKEDEV hde
# ln -s /dev/hde cdrom
As root you can then mount any data CD-ROM:
# mount /dev/hde /cdrom
# ...
# umount /cdrom

To allow general access to the CD-ROM edit /etc/fstab to add the following line. Any user can then mount /cdrom which is particularly convenient from the GNOME mount applets which you can click on to cause a mount or unmount, or you can leave it to GNOME to magically do the mounting for you when you open the device Make sure you unmount the cdrom before you physically remove the media.

/dev/hde	/cdrom	      auto  defaults,noauto,user,ro,nohide   0      0
The various options mean: `ro' mounts the file system as read-only; `user' lets any user mount the file-system; `noauto' means that the file-system is not automatically mounted at boot time; `nohide' shows hidden and associated files.

The command line mounting of the partition can then become:

# mount /cdrom

For audio CD access the default seems to be to add users to the Unix group "disk". That didn't quite seem right. Instead change the Unix group of /dev/hde from "disk" to "cdrom" and add users who need access to the drive to the group "cdrom":

# chgrp cdrom /dev/hde
# adduser fred cdrom

Then, next time user fred logs on he will be in group cdrom in addition to the other groups he was already in. He will then have access to the CD-ROM device.

The Gnome gtcd utility worked just fine, accessing the Internet CDDB database of CD's to display album and track information. All I need to know now is how to get sound from the CD!

CD-ROM Images

You can obtain all of the Debian packages from the network with the support of the Debian package tools. However, one may not always have access to the network and you may want to burn your own CD-ROM image of the distribution. This is fairly straightforward. (The example uses a Solaris machine and ncftp 2.4.3 - don't use ncftp 3 beta.)

First, obtain the appropriate Debian tools to build a CD-ROM image (I build the image on the Solaris machine for now):

$ wget ????/pseudo-image-kit-2.0.tar.gz
$ tar zxvf pseudo-image-kit-2.0.tar.gz
$ cd pseudo-image-kit-2.0
$ perl -pi -e 's|^#! /bin/sh|#! /usr/local/bin/bash|' make-pseudo-image

Obtain a list of files that will make up the contents of the CD-ROM from an appropriate CD-ROM archive. (These archives also contain the actual images, but they get overloaded with people downloading the images so it is turned off. It is more efficient for every one if you build the image yourself using the procedure here. It is quite easy.)

$ wget http://www.uk.debian.org/debian-cd/cd-images/2.1_r4/i386/binary-i386-1.list

Now download from a local server the actual packages that will make up the contents of the CD-ROM:

$ ./make-pseudo-image binary-i386-1.list ftp://ftp.au.debian.org/debian

This takes quite a while! The end product is a file called pseudo-image. All the other pseudo-image* files can be removed (they're used to keep track of where things were up to in case the download is interrupted).

This download is called the pseudo image because it's an approximation of the real image! It's pretty close, but not yet guaranteed perfect. It is a simple process to now turn it into an Official image:

$ mv pseudo-image binary-i386-1.iso
$ rsync --verbose --progress --stats --block-size=8192 \
  mirror.aarnet.edu.au::debian-cd/2.1_r4/i386/binary-i386-1.iso .

This uses rsync to synchronise your CD-ROM image with the Official one. You can now burn this image directly to CD-ROM. Most CD-ROM burning software supports burning iso images directly.

Some other useful rsync commads allow you to hunt around the directory structure of an rsync server:

List contents of the rsync server's root directory

$ rsync mirror.aarnet.edu.au::

List the contents of another directory

$ rsync --dry-run mirror.aarnet.edu.au::debian-cd/2.1_r4/*

You can get the potato test images as:

$ rsync --dry-run cdimage.debian.org::potato_nonUS_test/*

Clock

Timezones

With a dual boot system with WindowsNT I have my clock set to local time as suggested by the Debian install. For a sole Linux installation Debian suggest using GMT (the standard approach for Unix). To effect a change use the "tzconfig" command (I've not tried this). You also have to change the line in /etc/default/rcS which states the CMOS clock configuration.

Clock Accuracy

There are two clocks: a system clock and a hardware clock. The date command talks to the system clock that is maintained by the operating system. The hwclock command talks to the hardware clock that is part of the hardware of the computer and usually battery backed up.

Some experimentation is often needed to make sure you get an accurate clock (or close to it). Some hints on dealing with clock problems can be found in the Clock mini HOWTO, but the hwclock and adjtimex man pages are clearer. The adjtimex command can be used to counter systematic drift in the system clock.

To set both clocks do:

# date -s "13 Jun 2000 10:10:00"
# hwclock --systohc

Then monitor how the system and hardware clocks vary over 24 hours.

The "adjtimex" command communicates with the kernel to change the number of ticks in a day (default is 10000 which corresponds to about 8.64 seconds per tick) and the frequency (default is 0) of the system clock. In Debian you can use the command adjtimexconfig to automatically tune the tick and frequency so that the change has effect on each boot. Alternatively, override the automatic settings by editting /etc/adjtimex.conf.

The system clock on the Dell Latitude CPi was losing (very) roughly 1 second per hour. (The hardware clock also seems to lose nearly one second each day.) Not too much on the face of it, but considering the machine does not need rebooting, this can become a significant drift. I found a tick of 10002 and a frequency of 4000000 worked for me on the Dell Lattitude CPi

# adjtimex --tick 10002 --freq 4000000

On the 486/DX66 the system clock was gaining about 22 seconds in 24 hours and the hardware clock gaining about 10 seconds in 24 hours. Removing 3 ticks had the dramatic effect of making the system clock pretty accurate.

# adjtimex --tick=9997

Hardware Clock Drift

The hwclock command provides the interface to the hardware clock. The --adjust option checks information stored in the configuration file /etc/adjtime and makes an actual correction to the time stored in the hardware clock to account for the drift that it (the hwclock utility) has been monitoring. (Each time you set the hardware clock with the hwclock command the current time is compared to the previous time it was corrected to determine the amount of drift.) Thus, when setting the system clock from the hardware clock it is advisable to do the following:

# hwclock --adjust
# hwclock --hctosys

When updating the hardware clock from an accurate system clock do:

# hwclock --systohc

Cron

Debian uses cron in a very neat and stylised fashion. Scripts to be run regularly are maintained in /etc/cron.{daily,weekly,monthly}. The entries in /etc/crontab then simply run any scripts in these directories on a regular basis. The daily scripts, by default, are run at 6:25am each day. The weekly scripts are run each Sunday at 6:47am and the monthly scripts are run at 6:52am on the first day of each month. If these times don't suit (e.g., you like to work early in the morning and get annoyed by the sudden disk whirling each morning at 6:25 am) the simply change the times in /etc/crontab. Unlike traditional versions of cron, the newer versions do not require the running of the crontab command to install the new version when you edit the crontab file.

DHCP

Warning I have not tried this: Some notes here on using DHCP, from Florian Lohoff. First, install dhcpcd-sv 1.3.16-1 (Sergei Viznyuk's DHCP client for 2.1.x kernel). With a self-made pcmcia-cs 3.1 set DHCP=y in /etc/pcmcia/network.opts and then link /sbin/dhcpcd -> ../usr/sbin/dhcpcd-sv, so that the pcmcia utils will find the dhcpd. Then remove the /etc/(init.d|rcn.d)/dhcp scripts as these are not needed as the pcmcia network scripts start the dhcpd itself.

Documentation

Where is documentation on Debian? An interesting question, and one that has not been all that easy to answer.

Ethernet Connection

To connect through the ethernet adaptor in the docking station Eric Dobbs reported that RedHat 6.0 found a 3com Vortex (3C590/905-series) driver auto-detected for him. So getting the ethernet controller in the docking station to work was simply a matter of setting the following kernel configurations (from the defaults supplied):

CONFIG_NET_VENDOR_3COM=y
CONFIG_VORTEX=m

Now on boot I get the following messages (which can also be read using the dmesg command):

3c59x.c:v0.99H 11/17/98 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html
eth0: 3Com 3c905 Boomerang 100baseTx at 0xfc80,  00:c0:4f:f7:02:bf, IRQ 10
8K word-wide RAM 3:5 Rx:Tx split, autoselect/MII interface.
MII transceiver found at address 24, status 7849.
Enabling bus-master transmits and whole-frame receives.

Floppy Disks

If you edit /etc/fstab to add the following line any user can then mount /floppy which is particularly convenient from the Gnome mount applets which you can click on to cause a mount or unmount. Or create symbolic links for Gnome from your ~/.gnome-desktop directory to /floppy. Then Gnome seems to magically do the mounting for you when you open them (they will appear on your Gnome desktop and you can change the icons to more appropriate symbols such as a floppy). I guess you better make sure you unmount the floppy before you physically remove the media.

/dev/fd0        /floppy       auto  defaults,noauto,user,rw     0      0

Fonts

Unless you like large fonts be sure to have the 75dpi fonts ahead of the 100dpi fonts in the FontPath as specified in /etc/X11/XF86config.

GNOME

I run Gnome as my XWindows session manager and Sawfish as my window manager. The HelixCode distribution of Gnome (released end of May 2000) is a professional package, and brings the Linux desktop pretty much up to scratch. They package Gnome for many platforms, including RedHat and Debian. Prior to Gnome 1.2 the default window manager was Enlightenment. Now it is Sawfish, a lightweight, yet themable and very tunable window manager, that leaves all the rest (like session management, multiple desktops, etc.) to Gnome.

Dialogues and Hidden Files

When prompted to load or to save files the dialog does not show any hidden directories (those beginning with a period). To get them displayed, simply enter a period in the Selection text field and press TAB.

GDM Startup

The Gnome Display Manager gdm, when installed, will start up automatically on boot. This presents an X11 interface to log on. If you are used to starting X11 from the command line you will be used to using either .xsession or .xinitrc to tune some of your X11 settings. The System menu in the gdm dialogue lets you start up Debian, Gnome, or XSession. To tune your X11 settings in this environment with your .xsession file be sure to run with the Debian session. If you use the default Gnome session in gdm place your tuning in the file .gnomerc in your home directory, but be sure not to include any window managers, etc., as these are started by the gnome-session command that the Gnome session starts. Some startup tunning I perform incudes:

#
# Left ALT should be META so that it is the way I like it in Emacs.
#
xmodmap -e 'keysym Alt_L = Meta_L'
xmodmap -e 'add mod1 = Meta_L'
#
# Start up by asking for the SSH Pass Phrase
#
ssh-add 

Groups and Users: Standards

A Debian system creates some standard groups and users. The system administrator will also create new users and may also create new groups. We list below the standard groups and users.

Groups

mailbox spool directories belong to group mail, MUA software runs setgid mail. This makes dot locking possible. Also, mailboxes must be writeable by group mail (Policy Manual, 3.1.1.1, 5.6). standard group for user news. Why does news have its own group, and many of the other daemon uids don't? uucp jobs are group accessible to uucp. web cache files are group accessible to proxy. /proc/kmem is group accessible to kmem. Programs that need access are sgid kmem. ppp- and isdn device nodes are group accessible to dialout. Include users allowed to initiate dialout in this group. fax jobs are group accessible to fax. voice messages are group accessible to voice (vgetty) for device nodes. Include users allowed to access these in the appropriate groups. historical reasons? for device nodes. Include users allowed to access sound in this group For daemons running under their own uid/gid. Why are these static? 33: This has been discussed in the past, and the discussion is not finally finished. Today, www data files belong to this group and the web servers run with that group, thus being able to write the files. This has been considered a security hole, but was not yet changed. (Don't have an explanation yet) For daemons running under their own uid/gid. Why are these static? historical reasons? For daemons running under their own uid/gid. Why are these static? Include people who should be able to write /usr/src in this group. What is its intended use? For daemons running under their own uid/gid. Why are these static? Programs that should be able to access the shadow passwords are sgid shadow. Programs that should be able to access utmp are sgid utmp. games that store user independent high score values in /var/lib/games are sgid games used for qmail
GroupgidDescription
root0 This is root's primary group.
daemon1 A group for non-root daemons.
bin2 This group exists for historical reasons and some programs won't run without it.
sys3 This group exists for historical reasons and some programs won't run without it.
adm4 Most of the log files are group readable by users who belong to his group. You can add users who need to monitor such log files to this group. Note though that sometimes private information can be accidentally included in logs, like passwords when connecting via PPP over a Modem. This should not happen (the scripts that write the logs should identify these as not being echoed) but it can.
tty5 The terminal devices with names beginning with /dev/tty are group accessible to group tty. Programs such as write and wall need access to tty and they set their group id (sgid) to tty.
disk6 The disk device nodes are group accessible to disk so that programs that need access to them are sgid disk.
lp7 Jobs associated with the lp (printer) daemon (lpd) are group accessible to the lp group so that lpd can access them without being root.
mail8
news9
uucp10
proxy13
kmem15
dialout20
fax21
voice22
cdrom24
floppy25
tape26
sudo27
audio29
dip30
majordom30
postgres32
www-data33
backup34
msql36
operator37
list38
irc39
src40
gnats41
shadow42
utmp43
video44
staff50 This group is used to control access to /usr/local. Add users to this if they should be able to write to /usr/local and /var/local.
games60
qmail70
users100 All users belong to this group. Place files that all users should have access to in this group.

Initialisation

Initialisations of various daemons and other services within Linux usually occur at boot time but also can occur when the run level is changed.

Run levels are used by Linux to identify different situations in which the operating system is run. For Debian the default is run level 2, unless you change it in /etc/inittab, and for Red Hat the default is run level 3. In genera the run levels 2, 3, 4, and 5 are all multi-user tun levels.

When the system enters a run level it executes the scripts in /etc/rc.n where n is the runlevel in question. These scripts are symbolic links (symlinks) to scripts in /etc/init.d. A script starting with S starts a service. One starting with K stops a service. The number after the `S' or `K' specifies the order in which the scripts are run. For example, S25xdm will start before S35xdm.

To stop xdm, for example, from starting up by default on boot, simply remove the symbolic link of the corresponding `S' script from /etc/rc.2.

See man init for and extensive discussion.

The init script is run with "start" on changing runlevel (S) and runlevels 0 (the halt runlevel) and 6 (the reboot runlevel). It is not clear to me why the "start" is sent for runlevels 0 and 6? Should it not be "stop" (and hence the link from /etc/rc0.d/ should be named Knnhwclock.sh instead of S25hwclock.sh)? It seems that the hwclock is adjusted and then the system time is updated from it on boot, reboot, and halt? Makes no sense to me yet. But it's good that it does this since otherwise it would be updating the hardware clock with the incorrect system clock on each halt/reboot (which is actually what I think is happening).

I am also puzzled as to why there is no link to /etc/init.d/hwclock.sh from /etc/rc2.d. Maybe I need one there (set up with update-rc.d as root). Or maybe it's just needed in rcS.d (where it already is) if that is what happens at boot time.

To remove something (e.g., gdm) from the init scripts:

# update-rc.d -f gdm remove

NT File System Access

Kernel 2.2.12 and beyond support read only access to NTFS, the file system of Microsoft Windows NT. The kernel needs to be configured to use it:

CONFIG_NTFS_FS=m

I have two NTFS partitions on the Microsoft Windows NT side of the machine. So I edit /etc/fstab to include these two lines:

/dev/hda1	/nt/c	       ntfs  defaults,user,ro,umask=002,gid=100	0 0
/dev/hda2	/nt/d	       ntfs  defaults,user,ro,umask=002,gid=100 0 0
The various options mean: `ro' mounts the file system as read-only; `user' lets any user mount the file-system; `nohide' shows hidden and associated files; 'noexec' avoids regular files showing up as non-executable. Then create directories for the mount points:
# mkdir /nt/c
# mkdir /nt/d
As any user can then mount the drives:
# mount /nt/c
# mount /nt/d

These will be mounted each time you reboot, unless you add the `noauto' option to the appropriate lines in /etc/fstab.

Users are granted access to /nt/c and /nt/d through the use of the umask=002,gid=100 in the fstab, and then add trusted users to this group. You can allow access for only a specific user by adding "uid=1000,gid=1000" to the options. Or you can remove all security and give complete access to everyone with umask=000 (this is dangerous as any login will be able to peruse your possibly private and password containing files on the NTFS partition).

Note that permissions on the mountpoint itself (/nt/c are irrelevant: when you mount a filesystem the permissions of the mounted filesystem's root directory replace the permissions of the mountpoint, even when the filesystem in question does not support permissions.

Parallel Line Network

You have two copmuters, one somewhat better resourced than another. You have Debian GNU/Linux installed on both. You want to link them together using their parallel ports and a Null Modem cable (also called a LapLink cable) so you can share resources. PLIP is the answer and the PLIP Install HOWTO gives some clues. Below is my recipe based on these clues.

TO BE WRITTEN

Passwords

If you forget your password for root, then you will be in a spot of bother. One way to fix this is to reboot the machine using the Debian installation floppy or CD. When you get the first question (about the having a colour monitor) press CTRL-ALT-F1 to get a shell. Mount your root partition (let's say it is /dev/hda1):

# mount /dev/hda1 /mnt
then edit the password file to erase the encrypted password for root:
# editor /mnt/etc/passwd
Save the file then reboot (CTRL-ATL-DEL).

PPP

The pppconfig command allows you to configure your modem connections. Essentially it is a front end to the various scripts in /etc/ppp. My PCMCIA modem is loaded at /dev/ttyS1. Newer versions of ppconfig check the serial ports for modems for you. Usually, /dev/ttyS0 corresponds to COM1 under MSWindows and /dev/ttyS1 corresponds to COM2.

To allow users other than root to connect through the modem (using the pon and poff pair of commands) add the users to the Unix group "dip":

# adduser fred dip

Then, next time user fred logs on he will be in group dip in addition to the other groups he was already in. He will then be able to initiate and terminate a dial up session. However, user fred does not have access to the log file through the plog command---only root does, presumably for security reasons, since unless you inhibit it, passwords can be displayed there.

Further information on PPP is available from:

Last Updated: 2000/05/29 14:23:27 Graham.Williams@cmis.csiro.au

modemlights_applet

This is the Gnome applet I use for modem access. After adding a user to the "dip" Unix group they can use this applet to dial the modem, display transfers, and to hangup. Under properties I had to change the connect and disconnect commands to be pon and poff rather than pppon and pppoff (which don't exist --- perhaps this is a "problem"). The newer Potato version of the applet had the defaults correct.

After moving to the potato distribution pon continued to work just fine under the slink kernel when booting from the slink Custom Boot disk. But as soon as I compiled my own kernel (2.2.13_2.2.13-2) and pcmcia-modules, pon stopped working and I was getting an error from plog:

pppd 2.3.10 started by root, uid 0
Can't get terminal parameters: Input/output error
Connect script failed
Exit.

I seemed to have "fixed" this by removing the setserial package.

Sound with ALSA

The relevant kernel configuration options are:

CONFIG ...

Debian packages to install:

# apt-get install ...

Both ALSA and the traditional OSS work as kernel modules so that you are able to load the modules dynamically, changing and experimenting with parameters as required, without the need to rebuild the kernel. The module parameters are located in /etc/modutils/alsa. The alsaconfig utility provides a graphical interface for editting this file and then loading the modules. If instead you do this by hand, after you edit the file you can do the following:

# update-modules

This will update the actual configuration file /etc/modules.conf. A configuration that I finally got working is:

alias char-major-116 snd
alias snd-card-0 snd-card-cs4236
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
options snd snd_major=116 snd_cards_limit=1 snd_device_mode=0660 \
        snd_device_gid=29 snd_device_uid=0
options snd-card-cs4236 snd_index=0 snd_id=CARD_0 snd_port=0x530 \
        snd_cport=0x210 snd_mpu_port=0x330 snd_fm_port=0x388 \
        snd_irq=5 snd_mpu_irq=9 snd_dma1=0 snd_dma1_size=64 \
        snd_dma2=1 snd_dma2_size=64 snd_isapnp=0

(note that the line continuations marked by the \ actually all need to be on the one line). You can then stop the sound driver if it is already running and start it up with the new configuration:

# /etc/init.d/alsa stop
Shutting down sound driver: done
# /etc/init.d/alsa start
Starting sound driver: cs4236.

You should hear a click from the speakers. Next, make sure it works by playing a sound:

$ aplay /usr/share/sounds/panel/slide.wav
Aplay: version 0.5.7 by Jaroslav Kysela 
Using soundcard 'CS4237B at 0x530, irq 5, dma 0&1'
Playing WAVE '/usr/share/sounds/panel/slide.wav' :
 Signed 16-bit Little Endian, Rate 44100 Hz, Mono

Then get xmms and listen to great mp3 quality.

Note that on boot, and only on boot, the message:

isapnp: No Plug & Play device found

is displayed, but others get this message also and sound works for them.

If you use xmms to play your mp3 files (recommended) be sure to select the esound output library in the properties configuration for xmms since otherwise xmms will lock the sound device and GNOME sounds will wait for a chance to use it and time out, making GNOME appear very sluggish.

For ALSA (and OSS) you need to know the parameters of your sound card. There is some help from Dell. My settings and other suggestions are in the table below (under the CS4237B column). In the file /etc/modutils/alsa each of these parameters is prefixed with snd_ and appear as options for snd-card-cs4236. You should use the graphical configuration utilitiy alsoconf to set the values, which also does the necessary updates and turns muting off.

Parameter CS4232 CS4237B Comment
port 0x534 0x530 [NT] [RB] PnP setup
cport 0x120,0xf00 0x210 [NT] [RB] Control port
mpu_port 0x300 0x220 [NT] [RB=330] For MPU-401 UART: -1 = disable
fm_port 0x388 0x388 [TP] [RB] FM port: -1 = disable
irq 5,7,9,11,12,15 5 [NT] [RB]
mpu_irq 9,11,12,15 9 [RB] [TP=7] For MPU-401 UART
dma1 0,1,3 0 [NT] [TP=1] [RB=1] First DMA
dma1_size 64 [RB] Max first DMA size in kB (4-64kB)
dma2 0 [TP] [RB] Second DMA for Yamaha CS4232 chip (0,1,3), -1 = disable
dma2_size 64 [RB]Max second DMA size in kB (4-64kB)
isapnp 0 [RB] ISA PnP detection - 0 = disable, 1 = enable (default)

The information comes from [TP] Tomas Pihl, [RB] Robb, and [NT] the MSWindowsNT Diagnostics under the Administrative Tools menu. In particular, the information from the MSWindowsNT Diagnostics for the cs32ba11 (on the ISA bus), which I think is what the MSWindowsNT driver for this sound card, is:

IRQ5
I/O Port   0210-0217
	   0220-022F
           0388-038B
           0530-0533
DMA  Channel  Port
          00     0

Sound and GNOME

Using sound in GNOME (sound is enabled through the Control Center) when the enlightenment sound daemon (esd) isn't running causes each GNOME application to pauses each time it tries and fails to play a sound.

Initially, users do not have access to the sound system. You may get permission errors on /dev/sound and /dev/dsp. To allow a user, fred, access to the audio, add them to the "audio" group:

# adduser fred audio

Then, next time user fred logs on he will be in group audio in addition to the other groups he was already in. He will then be able to access the audio devices. Be cautious though since members of the audio group may use the microphone attached to your computer to eavesdrop on you (even from remote logins through ssh or telnet)!

SSH

The Secure Shell (abbreviated ssh) provides a secure mechanism for communicating withremote hosts and is a drop in replacement for things like rsh, rlogin, and rcp. All communications is encrypted, and is highly recommended.

The free reimplementation of the now commercial SSH is OpenBSD SSH which is what Debian provides by default. The package to install is simply:

# apt-get install ssh

However, this package cannot be part of the main Debian distribution since the US export laws prohibit the export of cryptography software as it is classified as munitions! You will need to have a non-US distribution in your sources.list file, such as one of the following:

deb http://non-us.debian.org/ unstable/non-US main contrib non-free
deb http://ftp.au.debian.org/debian-non-US unstable/non-US main contrib non-free

During the install you may be asked about installing ssh as SETUID root. The suggesting from the configuration script is that you do not install as SETUID root and it you have problems, then run dpk-reconfigure ssh to reconfigure the package. I've had no problems with this.

Once installed, you can connect to remote hosts running ssh (e.g., connect as user stu at wxyz.domain.name.org) or copy files:

$ ssh stu@wxyz.domain.name.org
$ scp file.name stu@wxyz.domain.name.org:remote.file.name

Using rsync with ssh

The rsync application is a related tool that is used to efficiently copy files across the network. It can also be encouraged to use ssh to perform it's tasks by setting the appropriate environment variable:

export RSYNC_RSH=ssh

Using Pass Phrases instead of Passwords

The use of passphrases with public/private keys is more secure than sending passwords over the network. When connecting to a remote host that remote host will encrypt a random number with your public key and require you (automatically) to decrypt it and return it before it agrees to connect.

Once you have ssh installed you can generate a pass phrase that will be used to secure your communications with the outside world. Once you've created a pass phrase you need to communicate this to your remote host. These steps are simple:

$ ssh-keygen
$ cd .ssh
$ scp identity.pub stu@wxyz.domain.name.org:.ssh/authorized_keys

If your remote host already has the authorized_keys file then don't copy over it, but append the contents of your local identity.pub to it. You can then do the following so that you won't be asked for your password nor your passphrase each time you interact with the remote host:

$ ssh-agent bash
$ ssh-add

The ssh-add will prompt you for your pass phrase but from then on all further interaction with the remote host will not reqquire the pass phrase to be type again (it is rembered). <>NEED TO VERIFY THE FOLLOWING PROCEDURE

For the same effect in X windows start X with (THIS IS NO LONGER REQUIRED?):

$ ssh-agent startx

and enter your pass phrase on the startup of the X session and all further ssh connections within this X session will require no further password or pass phrase.

Better still you can install packages that will prompt you for the pass phrase when you start up an X session:

# apt-get install ssh-askpass
# apt-get install ssh-askpass-gnome

Then add an ssh-add command to your .xsession file to have the pass phrase promtped for, using a Gnome dialog box, automatically each time you start up your X session:

ssh-add < /dev/null
exec gnome-session

XAuthority and SSH and LBX Proxy

XAuthority provides a mechanism for ensuring secure access to your display from other hosts connected to the network. Refer to the mini HOWTO for details.

Once connected onto a network (e.g., connecting via modem to a dialup service) you can use ssh (the Secure SHell) to login to remote hosts and then have them start up X clients to be displayed on your local host. The ssh protocol encrypts all communications and performs some compression of the communications.

By default, Debian ssh does not allow X11 connection forwarding from remote hosts. This is a security measure. Instead, for each remote host you would like to connect to and have applications running there to display on your X11 display you will need to allow X11 forwarding. This is achieved by adding the following lines to your /etc/ssh/ssh_config (assuming the remote host you want to allow is called wxyz.domain.name.org.au):

Host wxyz.domain.name.org.au
  ForwardAgent	yes
  ForwardX11    yes

The LBX extension to X11 performs compression of the X11 communications protocol. On your remote host you run the lbxproxy command which, by default, creates a `fictional' display called :63 (so, for example, on the remote host you would then run xterm -d :63). The lbxproxy application will transform all the communications via display :63 into a copmressed protocol and send them on through to the actual display of your local host.

While ssh takes care of xauth issues when connecting to a remote host you have to take an extra step to pass this on to clients displaying through LBX. By default lbxproxy sets up a display on :63. Thus on your local host (abcd) you grab the xauth key:

abcd$ xauth list $DISPLAY
abcd/unix:0  MIT-MAGIC-COOKIE-1  ece19x123971yy0329f47dbf512345c3
abcd$
Then on the remote host add this cookie:
wxyz$ xauth remove :63
wxyz$ xauth add :63 . ece19x123971yy0329f47dbf512345c3
and then run applications on the remote host through to the display on your local host:
$ xterm -d :63

You can automate this a little by adding the following to your .bashrc (on your local machine, abcd). Then type the command lbxauth (on abcd), be prompted for a password (unless you set up ssh to not use passwords), and the remote xauth will be set up. The remove before the add is necessary as an add does nothing if the :63 is already in the .Xauthority file (on wxyz).

function lbxauth ()
{
  lbxhost=wxyz.domain.name.org.au
  
  ssh ${lbxhost} \
      xauth remove :63 \; \
      xauth add :63 . $(xauth list $DISPLAY | awk '{print $3}')
}

Problems

Finding /dev/hdc

The hard disk is /dev/hdc, however the GNU/Linux boot from floppy does not always seem to find it, so I (sometimes) need to specify a boot-time parameter:

boot: linux hdc=13424,15,63
Since installing LILO and setting up dual boot using the MS-WindowsNT boot loader (see the
Linux with NT Loader mini HOWTO) /dev/hdc has always been found automatically. Booting from floppy, sometimes won't find it, but will on a second (or third) boot!

CD AUDIO

The Audio from the CD-ROM does not work. The controls seem just fine, in something like gtcd, where you can start the CD playing etc. But no sound is heard. It worked once when I first boot NT then into Linux. Presumably there is some initialisation that NT did that Linux does not know about? Perhaps I need to explore using loadlin from MS-DOS after it has initialised things properly! Or is there some setting not being set? I can certainly read the audio from the drive and play it back as wav and mp3!

Last Updated: 2000/04/27 11:12:22 Graham.Williams@cmis.csiro.au

Acknowledgements

Other Dell Latitude Pages

Personal Communications

  • John Seebach has installed Debian on his CP D266XT and provided advice on pcmcia compilation and APM.
  • Eric Dobbs uses Red Hat and supplied information on the ethernet in the docking station.
  • Matt Simmons has Red Hat on a Dell Latitude CPi and has experimented with the internal CDROM.
  • Graeme Stables has Red Hat 6.0 on a Dell Latitude XPi 133ST.
  • Keith and Gerrit have been helping with advice on getting sound working.
Contents
The Hardware
Installation
Package Administration
X Windows
Kernel
Recipes
    APM
    CD-ROM
    CD-ROM Images
    Clock
    DHCP
    Init
    Ethernet
    Gnome
    Groups
    NT Partition
    PPP
    Run Levels
    Sound
    SSH
    XAuthority
Problems
Acknowledgements
Resources
Debian GNU/Linux
Linux Documentation
Linux on Laptops
Linux with Laptops

This document is copyright © 1999, 2000 Graham Williams and can be freely redistributed under the terms of the GNU Free Documentation License. Please email corrections and updates to Graham.Williams@cmis.csiro.au

Have Fun!