MySQL on Slackware

Many of us who have installed Slackware on our machines in the past few years have noticed something annoying on the first boot: the MySQL service fails to start!!

In response to this, I would like to offer this simple tutorial. Right now I am doing this blindly, meaning I don't have a fresh install to work with. Please bear with me if you notice some errors in the tutorial, and please tell me about them!

  1. Log in as root: # su -
  2. Make sure the mysql package is installed. You can do this by running pkgtool and selecting the view option. Hit n and it will take you to the packages in the list that begin with n. MySQL should be right above the n packages. If you don't have mysql already installed, you can download it from http://www.linuxpackages.net/ or wherever you'd like. Once you have a copy of it, install it by using the installpkg mysql......tgz command
  3. Setup the databases: # mysql_install_db
  4. Apply the proper permissions: # chown -R mysql.mysql /var/lib/mysql
  5. Start the database: # mysqld_safe &
  6. Setup the root user:
# mysqladmin -u root password 'newpassword'
# mysqladmin -p -u root -h localhost password 'newpassword'

Finally, test your installation:

# mysql -p

That should do it! Please comment if you notice any errors with this posting.

Linux Basics

Filesystem

  • /bin - This is where basic Linux commands reside (ls, du, dd, cp, etc).
  • /boot - Your boot images are stored here.
  • /dev - Links to access your machine's devices.
  • /etc - Configuration files and boot scripts.
  • /home - User directories, equivalent to "Documents and Settings" in Windows XP.
  • /lib - System libraries, codecs, etc.. similar to Windows/System and Windows/System32.
  • /mnt, /media - Mount points. A mount point is a directory that the contents of your hard drives, cd/dvd drives, floppy drives, or jump drives will be accessible.
  • /opt - Optional packages and programs. Could be thought of as a "Program Files" directory.
  • /proc - Special dynamic information about your system.
  • /root - System administrator home. Could be thought of as a "Documents and Settings/Administrator" directory.
  • /sbin - Super-user binaries. These programs need super-user (root) privileges to execute.
  • /tmp - Temporary files. Every user usually has read, write, and execute permissions here.
  • /usr - The main place for programs to be installed. Most like "Program Files" in Windows.
  • /var - System logs, mail spools, default web server directory, databases, etc...

Basic Commands

  • cd - Change Directory: moves to a different directory.

    Usage: cd directory, cd .., cd /directory

  • cp - CoPy: Copy a file or directory. If you wish to copy recursively and retain all attributes associated with the file or directory, use the -a option.

    Usage: cp original original.backup, cp -a /home/user/directory /home/user/backup

  • df - Disk usage on Filesystem: Display an overall summary of disk usage on mounted mountpoints. If you want human-readable sizes, use the -h option.

    Usage: df, df -h, df /mnt/mountpoint

  • du - Disk Usage: Display the disk usage of each file (recursively, by default) in the current directory. If you want human-readable sizes (1024 bytes = 1Kb, 1024Kb = 1Mb, etc), use the -h option. If you want a summary of the total disk usage by a directory and everything inside, use the -s option.

    Usage: du, du -s, du -h, du -sh, du -s /directory

  • ln - LiNk: Create a link, or shortcut, to a file or directory. I prefer to do symlinks by using the -s option.

    Usage: ln original link, ln original /directory, ln original /directory/link, ln -s original /directory/link

  • ls - LiSt: lists the contents of a directory.

    Usage: ls, ls .., ls /directory/subdirectory

  • man - View the MANual page for a program or other file. Probably the most useful program ever.

    Usage: man program, man xorg.conf

  • mkdir - MaKe DIRectory: create a new directory/folder.

    Usage: mkdir dirname, mkdir /directory/newdirname

  • mv - MoVe: Move a file or directory to a new location, or rename a file or directory.

    Usage: mv file /directory/newhome, mv file newfilename

  • pwd - Print Working Directory: returns the full path of the directory in which you are working.

    Usage: pwd

  • rm - ReMove: Remove a file or directory. If you want to get rid of a directory and all of its contents, use rm -R or rm -Rf for recursive deletion.

    Usage: rm filename, rm /directory/filename, rm -Rf /directory/dirname

  • rmdir - ReMove DIRectory: remove a directory. The directory must be empty.

    Usage: rmdir dirname, rmdir /directory/dirname

  • whereis - Determine where a certain file exists (if it's in your path)

    Usage: whereis filename

  • whoami - Detemine which user you are currently logged in as

    Usage: whoami

Linux Permissions

Linux has a great permission scheme. Since its inception, three basic levels of security have existed: user, group, and everyone. A simple way to change the permissions on a file or directory is to use the chmod, or CHange MODe, command. Changes to the permissions can be either a symbolic representation or an octal number representing the bit pattern for the new permissions. I prefer the symbolic method, myself, but many others prefer to see the octal pattern.

When working with permissions in Linux, always remember the following orders: User, Group, All; Read, Write, Execute. Those are the orders you will put the permissions in. Let's say that we want to make a file readable and writable only to the owner, while no one else will even be able to read the file. Here are some examples:

NOTE: Commands that begin with $ are executed as a regular user. Commands that begin with # are executed by a superuser (root). These two symbols (when they are the very first character in the command) are not entered by the user.

Symbolic:

$ echo "Hi" >> testing
$ chmod a-rwx,u+rw testing

Octal:

$ echo "Hi" >> testing
$ chmod 600 testing

Let's now examine the commands individually.

$ echo "Hi" >> testing

This command will append "Hi" (without the quotes) to the end of the file called testing. The file will be created if it does not already exist, assuming that the user has write permissions in the current directory. If you didn't want to append, you could overwrite anything that may be in the file by using a single > rather than >>.

$ chmod a-rwx,u+rw testing

This command removes (the - in a-rwx) read (the r in a-rwx), write (the w in a-rwx), and execute (the x in a-rwx) permissions from all (the a in a-rwx) users on the file called testing. Next we add (the + in u+rw) permissions for the owner (the u in u+rw) of the file: read (the r in u+rw) and write (the w in u+rw) on the file called testing.

$ chmod 600 testing

This command sets the permissions for everyone in one shot. I think of the digits in binary:

  • 1 = execute only;
  • 2 = write only;
  • 3 = write and execute, but no read;
  • 4 = read, but no write or execute;
  • 5 = read and execute, but no write;
  • 6 = read and write, but no execute;
  • 7 = read, write, and execute.

A digit is required for each level of permissions (user, group, and all). It is also possible to put another digit before the 3 levels of permissions, but to be honest, I don't know what significance it has. A little bit of testing has shown that it puts either an S or T in place of the execute permissions (depending on the digit).

A couple more things about chmod: Directories must also be executable in order to list the contents. chmod is very powerful. Finally, you can recursively apply permissions to directories and everything underneath with the -R option.

$ chmod -R a+rx /home/user/share

A couple of commands closely associated with chmod are chgrp (CHange GRouP) and chown (CHange OWNer).

chown will change the user ownership of files or directories. This can be done recursively with the -R option. It also has the capability to change the group ownership built into it. The syntax is: chown [options] user[:group] file1 [file...]

chgrp will change the group ownership of files or directories. You can do this recursively with the -R option. The syntax is: chgrp [options] groupname file1 [file...]

Cronjobs

Cronjobs are similar to scheduled tasks in the Windows world. Schedule tasks or cronjobs are simply programs that you want to run regularly, without having to type in the command every time you want it to run. Most distributions come with a cron daemon of some sort installed by default. Generally speaking, you can edit your cronjobs by typing crontab -e. This will bring up an editor like vi (it usually is vi by default) in which you edit your cronjob file. Each user can have their own cronjobs (unless it's been disabled by the administrator, I would assume). Here is an example of a cronjob entry:

47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null

You'll notice the 47 with four *'s after it. This is how the daemon knows when to execute a job. This is what each of the stars represent in their order:

  1. Minute: 0-59
  2. Hour: 0-23 (0 = midnight)
  3. Day of month: 1-31
  4. Month: 1-12
  5. Day of week: 0-6 (0 = Sunday)

So the example above will run after 47 minutes every hour of every day of the month of every month. You can also do some fancy things like having a job run every 5 minutes, after 15 and 45 minutes, etc. Let's say that we want to grab our mail every 5 minutes. The cronjob entry would look something like:

*/5 * * * * /usr/bin/fetchmail

If we wanted to grab our mail every 2 hours but only on Mondays, we would use the following:

0 */2 * * 1 /usr/bin/fetchmail

To have a job run after 15 and 45 minutes, we could do this:

15,45 * * * * /usr/bin/fetchmail

Pretty nifty, eh?

Make

This fancy utility is usually the means used for compiling programs from source. The usual sequence of commands for compiling and installing a program from the source in Linux is as follows:

$ ./configure
$ make
# make install

Most packages will follow this convention, but some require special procedures. Sometimes you can even get away with skipping the make and jump straight from ./configure to make install. It is always a good idea to read the README and INSTALL files included in source packages. They will generally tell you about anything out of the ordinary when compiling the source. Obviously, there is a lot more to this utility, but I'm not the person to explain it to you.

Package Management

There are several different types of package managers. The most popular these days are .rpm (RedHat Package Manager) and .deb (Debian). There are some other kinds of packages, but they aren't as popular as RPM and DEB. Slackware uses a straight .tgz (gzipped tarball) as its package system. Frugalware uses .fpm, which are bzipped tarballs. In the end, packages are almost always gzipped or bzipped tarballs.

Each package system has its ups and downs. I've personally found RPM-based distributions to be overly slow, especially with the package management. DEB-based distributions seem to be a lot more speedy when put up against RPM-based distros. However, I have found Slackware's TGZ-based system the most efficient and the fastest. Both RPM's and DEB's have dependency checking. In other words, the package manager will attempt to locate all entities upon which a program may depend in order to function properly before installing or upgrading that program.

A lot of people claim that .tgz packages are inferior to RPM and DEB because of the lack of dependency checking. By default, Slackware does not have dependency checking, but if you know what you're doing, you can get your dependencies a lot easier than you can with RPM or DEB (in my opinion).

RPM packages usually seem quite large compared to other package systems like DEB and TGZ. As far as I have seen, TGZ packages are smaller than both RPM and DEB packages. Here are a few options to help you use the RPM and TGZ package managers. I am not sure on Debian packages, so I won't attempt that one:

  • RPM:
    • rpm -q or rpm --query: look for a package on your system
    • rpm -i or rpm --install: install a new package on your system
    • rpm -U or rpm --upgrade: upgrade a package which is already installed on your system
    • rpm -e or rpm --erase: remove a package from your system
  • TGZ:
    • pkgtool: a text-based package manager
    • installpkg: install a package onto your system
    • upgradepkg: upgrade a package which is currently installed on your system
    • removepkg: remove a package from your system

You can also get some other programs that are VERY useful for package management. I think the latest craze for RPM's is YUM. I have not had great luck with this utility, but a lot of people really like it. Debian packages have used apt-get for ages now. My favorite add-on for Slackware packages is called swaret. Other distributions use the pacman utility, which is very efficient. Each one of these applications has several options and operation procedures.

Secure Shell and Secure Copy

One of my favorite aspects of Linux and other UNIX-derived systems is their secure shell capability (which is usually installed by default). Secure shell, or SSH, is a way for users to log into a remote computer and work on the remote computer as though it were right in front of them. Granted, it's all text-based unless you have X11 forwarding setup properly on both machines. But the command line interface (CLI) is extremely powerful--you should not be afraid to learn and use it. If you need to SSH from a Windows machine, you can use PuTTY.

In order to ssh into another computer, you simply type:

$ ssh hostname

or use the computer's IP address:

$ ssh xxx.xxx.xxx.xxx

By default, ssh on Linux machines will use the username of the account that you are running ssh from. Sometimes you need to login as a different user than the one you're currently using. To do that, you use the -l (lowercase L) or make it look like an e-mail address:

$ ssh hostname -l differentuser
$ ssh differentuser@hostname

Once your ssh session begins with the remote host, you will be asked to enter the password associated with the account with which you are attempting to login. If you do a lot of ssh'ing between machines, typing in your password several times is not only annoying but it could also pose a security risk--some wandering eyes might be watching you each time you enter your password. A great way to get around this is to generate a public and private key for your account. Once you do this, you can use the private key file on the machine you're ssh'ing out of and the public key on the remote machine.

To generate a public/private key, you can use ssh-keygen:

$ ssh-keygen -t rsa

You will be asked to enter and verify a passphrase for your private key. If you were aiming to get around not typing in your password, just hit enter twice for this part. It's still not secure, but it is a lot less hassle if you're only working on machines that no one else has "access" to. Usually your keys will be stored in ~/.ssh/ (or your /home/username/.ssh/ directory: ~ refers to your /home/yourusername).

The next step is to create your identification:

$ cd ~/.ssh
$ echo "IdKey private_key_file" > identification

Now you have to copy your public key (usually the one that ends in .pub) to the remote host:

$ scp public_key_file.pub username@xxx.xxx.xxx.xxx:/home/username/.ssh

And finally you should add your public key to the list of authorized users on the remote host by adding a line like the following to the ~/.ssh/authorization file:

Key public_key_file.pub

At this point you should be able to log into your remote host without your password (assuming you skipped the passphrase part of the key generation above).

As for the secure copy utility, you can get an idea of how to use it from the scp command above. This program uses the SSH system to securely copy files between two computers. This is how I use the scp command:

$ scp [-r] user@remote:/path/to/remote/file /local/destination/path/
$ scp [-r] /path/to/local/file user@remote:/remote/destination/path/

If you have setup public key authorization, you will not have to enter your password each time you use scp. Otherwise, you are asked for a password each time you run scp.

Archiving and Backup

There are many different kinds of compression and archiving tools in Linux. The most common types are tarballs, gzipped, and bzipped files. Below is a list of purposes for each of the three and some of the options:

  • tar - multiple files, little or no compression
    • c, --create - create a tarball
    • f, --file - specify the tarball's filename
    • x, --extract, --get - extract the contents of a tarball
    • j, --bzip2 - use bzip2 compression/decompression
    • v, --verbose - show verbose output
    • z, --gzip, --ungzip - use gzip compression/decompression
    • to create a tarball called filename.tar which contains all of the files in /dir/to/archive: $ tar cf filename.tar /dir/to/archive
    • to create a tarball called filename.tar.gz which contains all of the files in /dir/to/archive and gzip it: $ tar zcf filename.tar.gz /dir/to/archive
    • to create a tarball called filename.tar.bz2 which contains all of the files in /dir/to/archive and bzip it: $ tar jcf filename.tar.bz2 /dir/to/archive
    • to extract the contents of a tarball called filename.tar.gz to the current directory: $ tar zxf filename.tar.gz
    • to extract the contents of a tarball called filename.tar.bz2 to the current directory: $ tar jxf filename.tar.bz2
  • gzip - single file compression
    • To gzip a file called filename to make it filename.gz: $ gzip filename
    • To gunzip a file called filename.gz to make it filename: $ gunzip filename.gz
  • bzip2 - single file compression
    • To bzip a file called filename to make it filename.bz2: $ bzip2 filename
    • To bunzip a file called filename.bz2 to make it filename: $ bunzip2 filename.bz2

Installing Slackware 11.0 on An HP Pavilion dv8000

First of all, I have to tell everyone how great of a distribution Slackware is. I have personally sampled (meaning that I downloaded, installed, and ran for a trial period) at least 50 different distributions. It seems that, no matter how fancy a new distribution is, I always find myself returning to Slackware. I have to admit, it doesn't have a lot of the eyecandy and user-friendly features of other mainstream distributions right off the bat, but you could add them if you wanted to. Among my reasons for liking Slackware so much are:

  • It's the fastest (by default) I've used
  • Stability
  • Security
  • Educational value

Now that we have a little background as to why I like Slackware so much, let's move on to the installation, shall we? To make it a little more simple, I'm just including the notes that I took while installing.

  • Insert disc 1

  • Boot Menu: Hit enter to boot with default options

  • Select keyboard map: Enter for default US

  • Login as root

  • Check partition scheme: # fdisk /dev/hda

    Here are some useful commands to get around in fdisk:

    • p to print partition table
    • d to delete, followed by parition number
    • c to create; primary/extended; start sector; end sector
    • a to toggle bootable flag
    • w to write parition table
    • q to quit
  • # setup

  • ADDSWAP to activate swap partition

    • select your swap partition and hit ok
    • choose whether you wish to check for bad blocks while preparing the swap partition [no]
    • hit ok when your swap partition has been configured
  • Choose your root (/) parition

    • Select the proper partition from the list and hit select
    • Choose your formatting type
      • Format: Quick format with no bad block checking
      • Check: Slow format that checks for bad blocks
      • No: No, do not format this partition
      • [ FORMAT ]
    • Choose filesystem
      • ext2: Standard Linux Ext2 Filesystem
      • ext3: Ext3 Journaling Filesystem
      • reiserfs: ReiserFS Journaling Filesystem
      • [ REISERFS ]
    • Add other paritions and follow the same process as above, specifying the mount point
    • Hit ok when the partitions have been setup successfully
  • Specify whether you'd like any existing FAT or NTFS partitions to be mounted in Linux

    • [ YES ]
    • Select the partition
    • Specify the mount point
  • Hit ok when the FAT and NTFS partitions have been setup

  • Choose your installation source

    • Install from a Slackware CD or DVD
    • Install from a hard drive partition
    • Install from NFS (Network File System)
    • Install from a pre-mounted directory
    • [ CD or DVD ]
  • Choose the CD/DVD device

    • auto: Scan for the CD or DVD drive (recommended)
    • manual: Manually specify CD or DVD by device name
    • [ AUTO ]
  • Select the package sets you'd like to install and hit ok

  • Select prompting mode

    • full Install everything (3+ GB of software, recommended)
    • expert Choose individual packages from interactive menus
    • menu Choose groups of packages from interactive menus
    • newbie Use verbose prompting (and follow tagfiles)
    • custom Use custom tagfiles in the package directories
    • tagpath Use tagfiles in the subdirectories of a custom path
    • [ FULL ]
  • Specify your kernel

    • bootdisk Use the kernel from the installation bootdisk
    • cdrom Use a kernel from the Slackware CD or NFS mount
    • floppy Install a zimage or bzimage from a DOS floppy
    • skip Skip this menu (use the default /boot/vmlinuz)
    • [ CDROM ]
  • Re-insert disc 1

    • Select your kernel
    • [ /cdrom/kernels/sata.i/bzImage ]
  • Make a bootdisk

    • Create Make a Linux bootdisk in /dev/fd0
    • Skip Skip making a bootdisk
    • [ SKIP ]
  • Modem configuration [ NO MODEM ]

  • Specify whether you'd like to start hotplug/udev at boot [ YES ]

  • Install the bootloader, LILO

    • simple Try to install LILO automatically
    • expert Use expert lilo.conf setup menu
    • skip Do not install LILO
    • [ SIMPLE ]
  • Choose your frame buffer mode for LILO [ standard ]

  • Pass the kernel a parameter if you have an IDE CD/DVD-RW drive

    • [ hdc=ide-scsi ]
  • Select LILO destination

    • Root Install to superblock (not for use with XFS)
    • Floppy Install to a formatted floppy in /dev/fd0 (A:)
    • MBR Install to Master Boot Record (possibly unsafe)
    • [ MBR ]
  • Select your mouse type [ IMPS2 ]

  • Specify whether you'd like to start GPM at boot [ NO ]

  • Specify whether you'd like to configure your network

    • [ YES ]
    • Enter your hostname
    • Enter your domain name
    • Specify IP setup
      • static IP Use a static IP address to configure ethernet
      • DHCP Use a DHCP server to configure ethernet
      • loopback Set up a loopback connection (modem or no net)
      • [ DHCP ]
    • Specify DHCP parameters
    • Verify and accept network configuration
  • Specify services to start at boot time

    • rc.cups
    • rc.httpd
    • rc.mysqld
    • rc.pcmcia
    • rc.samba
    • rc.scanluns
    • rc.sendmail
    • rc.syslog
    • rc.sshd
  • Specify whether you'd like to try out some screen fonts [ NO ]

  • Specify whether your machine's clock is set to local time or UTC/GMT [ NO ]

  • Select timezone

  • Select your default desktop [ KDE ]

  • Set a root password

  • Reboot

  • Login as root

  • Add a new (normal) user: # adduser

  • Configure XWindows

    • # xorgcfg
    • save the configuration to /etc/X11/xorg.conf
  • Logout and back in as the new user

  • Bring up the GUI

    • $ startx

Begin using your system!!

How To Create A Subversion Repository

In this tutorial, I assume that you have access to a Linux machine on which you plan to create the repository. I have never tried to create a repository on Windows or Mac, but perhaps in the future I will. I am doing this on a Slackware 10.2 machine with subversion 1.3.2. Version differences shouldn't have a great effect on the validity of the steps outlined here.

Install Subversion

If you haven't already installed subversion, you can download it from http://subversion.tigris.org/. You can download the svn package for a variety of platforms. If you download the source package, you should simply have to do the following as root:

  • unpack the archive and enter that folder
  • configure the application for your system by typing ./configure on the command line
  • compile the source code by typing make
  • install the package by typing make install

Note: these are the general steps for installing a package from the source; they may be slightly different with svn.

Choose A Home For The Repository

Next, choose a place for your server to keep track of all of the changes to your project. Try a place like /var/svn or /home/[your_username]/svn. I would recommend creating a folder specifically for the repository.

Create The Repository

Once you're in the directory in which you wish for your svn repository to reside, type the command svnadmin create repo or you can type the full path to be certain svnadmin create /var/svn/repo. This will create the repository.

Import Your Project

I do most of my development on my local area network, so I haven't created a repository that can be used over the Internet. I would imagine that it's pretty similar to what we do to create a repository for your LAN. Choose a project to import into your repository and navigate to the folder that the project is in. For example, if I have a project called Foo in /var/www/htdocs/foo, I would go to /var/www/htdocs. Next, use the command svn import to pull your project into the repository. For our Foo project, we would use the command svn import foo svn://localhost/var/svn/repo/foo -m "Initial Import". This will create a new folder in our repository at /var/svn/repo called foo (/var/svn/repo/foo). Our project files will put crammed into that directory for tracking.

Checkout Your Project

In order to be able to save your changes to our repository, we have to checkout the project again from the server. This is a pretty simple step, but it is critical. Even though we imported our project already, that folder remains untouched. SVN will not know how to handle the updates unless we checkout the project from the svn server. So, we proceed to checkout by removing or renaming /var/www/htdocs/foo and typing svn checkout svn://localhost/var/svn/repo/foo /var/www/htdocs/foo. This will place some hidden folders in each of the directories in your project. These hidden folders keep track of your local changes so that svn will know how to merge your changes with those of other developers.

Update The Repository

When you've made some changes that you want to save, you can send them out by typing svn commit /var/www/htdocs/foo. This command knows how to get to the server to save the changes, since the project was checked out from the repository.

Update Your Files

Sometimes you'll need to get changes that other developers have made, or revert back to a version of your project that didn't have as many problems. You can do this using the svn update command. If you're already in /var/www/htdocs/foo, you can type svn update and it will update files that have been changed in the repository since you last updated. If you're looking to get an older version of your project, you can type svn update -r PREV or a revision number in place of PREV.

Remember, these are just the basics of using SVN. You can do many amazing things with this utility. I actually did all of this as I was writing this article, so I'm sure that it works.

SuSE 10.1 x86_64

Ported From Blogger

The following post was ported from my old blogger account.

I've been using SuSE Linux 10.1 on my laptop ever since the day it was released, and I have to say that I'm quite satisfied with it. I'm usually a Slackware man, myself, but SuSE has become one of my new favorites.

Ever since I first started using Linux some 7 years ago, I've kept an eye on SuSE. I came really close to actually purchasing a boxed copy back around version 7.3 I think. This was mostly because SuSE is so visually appealing. Once openSuSE came about, I was super excited and downloaded the 5 CD set for version 10.0 immediately. To my disappointment, this version didn't play well with my brand new laptop. I didn't feel like finding out why, so I just gently tucked the CDs away in the drawer with all of my other Linux CDs. As soon as the 10.1 CD set was publicly released on May 11th, I grabbed a torrent to get all of the 5 CDs plus the non-OSS add-on CD.

The same day, I popped the first CD in and began the installation. To my surprise, SuSE 10.1 had no qualms with my Radeon 200M, whereas almost all distros that I had tried on this laptop up to this point would lockup once they did anything outside of the wonderful console (besides Fedora Core 5). SuSE 10.1 was 1 up on all the others, especially after seeing the splash screen. Absolutely beautiful. The installation went really smoothly. I opted for the KDE install, as I'm not a big fan of GNOME. And this is despite the fact that the folks at SuSE spent a lot of time and effort making GNOME mesh well with their distro.

Once the installation finished, I began tinkering around in my menus just to see what there was to see. I have to say that things are set up pretty intuitively in KDE to begin with (or maybe I've just been using it for a long time), but SuSE makes it even better. Device recognition is actually beyond my expectations for Linux. Just about anything I pop into a USB port will be recognized within seconds and I will be asked what I want to do with it. Even my HP All-In-One printer/scanner/copier works without a hitch!! This is the first scanner that I've had function in Linux! Excellent. My media reader doesn't seem to be compatible with Linux yet, but that's fine since I rarely use it anyway. I was able to get my Radeon to play well with the proprietary drivers from ATI, and my FPS jumped from around 100 to 1100 when running glxgears. Nice improvement.

One thing that did take a long time to figure out was my wireless. I had only played with wireless one other time in Linux and that was on some generic PCMCIA wireless card in a past roommate's laptop. That seemed to be simple enough to setup, with the help ndiswrapper. However, finding the correct drivers for my internal wireless adapter, and finding them in the 64-bit edition proved to be quite the runaround. Eventually, I was able to get in touch with someone who graciously emailed them to me as an attachment. To my disappointment, however, ndiswrapper didn't seem to do wireless with these drivers either!! Wow. I put wireless tinkering away for a while, but came back to it amidst my boredom. I came across some forum that had the answer to my quest: a file link. The drivers I had received through email were the correct drivers, only they were linked up to some other device identifier. All I needed to do was essentially make an alias of my device identifier and make it point to the identifier used by the drivers. As soon as I did this, ndiswrapper worked like a charm. I was able to see several wireless networks in my area. I did (and still do) have a problem connecting to certain access points, however. For some strange reason, I cannot figure out how to connect to my own wireless router, nor the university wireless. It's rather frustrating, but I can live with an ethernet cable.

Ahh, yes. Linux.