summaryrefslogtreecommitdiffstats
path: root/chapter_03.xml
diff options
context:
space:
mode:
Diffstat (limited to 'chapter_03.xml')
-rw-r--r--chapter_03.xml391
1 files changed, 391 insertions, 0 deletions
diff --git a/chapter_03.xml b/chapter_03.xml
new file mode 100644
index 0000000..f3fdbf6
--- /dev/null
+++ b/chapter_03.xml
@@ -0,0 +1,391 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "/usr/share/xml/docbook/xml-dtd-4.5/docbookx.dtd">
+
+<chapter>
+<title>Booting</title>
+
+<para>
+Ok, now that you've gotten Slackware installed on your system, you
+should learn exactly what controls the boot sequence of your machine,
+and how to fix it should you manage to break it somehow. Use Linux long
+enough, and sooner or later you will make a mistake that breaks your
+bootloader. Fortunately, this doesn't require a re-install to fix. Unlike
+many other operating systems that hide the underlying details of how they
+work, Linux (and in particular, Slackware) gives you full control over
+the boot process. Simply by editing a configuration file or two and
+re-running the boot-loader installer, you can quickly and easily change
+(or break) your system. Slackware even makes it easy to dual-boot
+between multiple operating systems such as other Linux distributions or
+Microsoft Windows.
+</para>
+
+<section>
+<title><application>mkinitrd</application></title>
+
+<para>
+Before we go any further, a quick discussion on the Linux kernel is
+warranted. Slackware Linux includes several different kernels. While
+they are all compiled from the same source code, and hence are the
+"same", they are not identical. Depending on your architecture and
+Slackware version, the installer may have loaded your system with
+several kernels. There are kernels for single-processor
+systems and kernels for multi-processor systems. In the old days, there
+were tons of kernels for installing on different kinds of hard drive
+controllers. More importantly for our discussion, there are "huge"
+kernels and "generic" kernels.
+</para>
+
+<para>
+If you look inside your <filename>/boot</filename> directory, you'll
+see the various kernels installed on your system.
+</para>
+
+<screen><prompt>darkstar:~# </prompt><userinput>ls -l /boot/vmlinuz*</userinput>
+/boot/vmlinuz-huge-2.6.29.4 /boot/vmlinuz-generic-2.6.29.4
+</screen>
+
+<para>
+Here you can see that I have two kernels installed,
+<filename>vmlinuz-huge-2.6.29.4</filename> and
+<filename>vmlinuz-generic-2.6.29.4</filename>. Each Slackware release
+includes different kernel versions and sometimes even slightly
+different names, so don't be alarmed if what you see doesn't exactly
+match what I have listed here.
+</para>
+
+<para>
+Huge kernels are exactly what you might think; they're huge. These
+kernels are built to support nearly every conceivable computer
+Slackware is supported on. They most certainly contain support for
+hardware your machine does not, and never will, have. These are
+included for several reasons, but the most important perhaps is in use
+by the installer. These are the kernels the Slackware installation
+disks run. If you chose to let the installer configure your bootloader
+for you, it chooses to use these kernels due to the incredible variety
+of hardware they support. By contrast, the generic kernels support very
+little hardware without the use of external modules. If you want to use
+one of the generic kernels, you'll need to make use of something called
+an initrd, and the tool to make them,
+<application>mkinitrd</application>(8).
+</para>
+
+<para>
+So why should you use a generic kernel? Currently the Slackware
+development team recommends use of a generic kernel for a variety of
+reasons. Perhaps the most obvious is size. The huge kernels are
+currently about twice the size of the generic kernels before they are
+uncompressed and loaded into memory. If you are running an older
+machine, or one with some small ammount of RAM, you will appreciate the
+savings the generic kernels offer you. Other reasons are somewhat more
+difficult to quantify. Conflicts between drivers included in the huge
+kernels do appear from time-to-time, and generally speaking, the huge
+kernels do not perform as well as the generic ones. Also, by using the
+generic kernels, special arguments can be passed to hardware drivers
+seperately, rather than requiring these options be passed on the kernel
+command line. Some of the tools included with Slackware work better if
+your kernel uses some drivers as modules rather than "hard-coding" them
+into the kernel. If you're having trouble understanding this, don't be
+alarmed, just think "huge kernel: good, generic kernel: better".
+</para>
+
+<para>
+Unfortunately, using the generic kernels isn't as straight-forward as
+using the huge kernels. In order for the generic kernel to boot your
+system, you must also usually include a few basic modules in an
+initird. Modules are pieces of compiled kernel code that can be
+inserted or removed from a running kernel. This makes the system
+somewhat more flexible at the cost of a tiny bit of added complexity.
+You might find it easier to think of modules as device drivers, at
+least for this section. Typically you will need to add the module for
+whatever filesystem you chose to use for your root partition during the
+installer. If your root partition is located on a SCSI disk or RAID
+controller, you'll need to load those modules as well. Finally, if
+you're using software RAID, disk encryption, or LVM, you'll also need
+to create an initrd whether you're using the generic kernel or not.
+</para>
+
+<para>
+initrds are compressed <application>cpio</application>(1) archives, so
+creating them isn't very straightforward. Fortunately for you,
+Slackware includes a tool that makes this very easy,
+<application>mkinitrd</application>. A full discussion of
+<application>mkinitrd</application> is a bit beyond the scope of this
+book, but we'll show you all the highlights. For a more complete
+explanation, check the manpage or run
+<application>mkinitrd</application> with the <arg>--help</arg>
+argument.
+</para>
+
+<screen><prompt>darkstar:~# </prompt><userinput>mkinitrd --help</userinput>
+mkinitrd creates an initial ramdisk (actually an initramfs cpio+gzip
+archive) used to load kernel modules that are needed to mount the
+root filesystem, or other modules that might be needed before the
+root filesystem is available. Other binaries may be added to the
+initrd, and the script is easy to modify. Be creative. :-)
+.... many more lines deleted ....
+</screen>
+
+<para>
+When using <application>mkinitrd</application>, you'll need to know a
+few items of information: your root partition, your root filesystem,
+any hard disk controllers you're using, and whether or not you're using
+LVM, software RAID, or disk encryption. Unless you're using some kind
+of SCSI controller (and have your root partition loaded on the SCSI
+controller), you should only need to know your root filesystem and
+partition type. Assuming you've booted into your Slackware installation
+using the huge kernel, you can easily find this information with the
+<application>mount</application> command.
+</para>
+
+<screen><prompt>darkstar:~# </prompt><userinput>mount</userinput>
+/dev/sda1 on / type ext4 (rw,barrier=1,data=ordered)
+proc on /proc type proc (rw)
+sysfs on /sys type sysfs (rw)
+usbfs on /proc/bus/usb type usbfs (rw)
+/dev/sda2 on /home type jfs (rw)
+tmpfs on /dev/shm type tmpfs (rw)
+</screen>
+
+<para>
+In the example provided, you can see that the root partition is located
+on <filename>/dev/sda1</filename> and is an ext4 type partition. If we
+want to create an initrd for this system, we simply need to tell this
+information to <application>mkinird</application>.
+</para>
+
+<screen><prompt>darkstar:~# </prompt><userinput>mkinitrd -f ext4 -r /dev/sda1</userinput>
+</screen>
+
+<para>
+Note that in most cases, <application>mkinitrd</application> is smart
+enough to determine this information on its own, but it never hurts to
+specify it manually. Now that we've created out initrd, we simply need
+to tell LILO where to find it. We'll focus on that in the next section.
+</para>
+
+<para>
+Looking up all those different options for
+<application>mkinitrd</application> or worse, memorizing them, can be a
+real pain though, especially if you try out different kernels
+consistently. This became tedious for the Slackware development team,
+so they came up with a simple configuration file,
+<filename>mkinitrd.conf</filename>(5). You can find a sample file that
+can be easily customized for your system under the
+<filename>/etc</filename> directory. Here's mine.
+</para>
+
+<screen># mkinitrd.conf.sample
+# See "man mkinitrd.conf" for details on the syntax of this file
+#
+SOURCE_TREE="/boot/initrd-tree"
+CLEAR_TREE="0"
+OUTPUT_IMAGE="/boot/initrd.gz"
+KERNEL_VERSION="$(uname -r)"
+#KEYMAP="us"
+MODULE_LIST="ext3:ext4:jfs"
+#LUKSDEV="/dev/hda1"
+ROOTDEV="/dev/raven/64root"
+ROOTFS="ext4"
+#RESUMEDEV="/dev/hda2"
+#RAID="0"
+LVM="1"
+#WAIT="1"
+</screen>
+
+<para>
+For a complete description of each of these lines and what they do,
+you'll need to consulte the man page for
+<filename>mkinitrd.conf</filename>. Once each of these is setup, you
+need only run <application>mkinitrd</application> with the
+<arg>-F</arg> argument. A proper initrd file will be constructed and
+installed for you, without you having to remember all those obscure
+arguments.
+</para>
+
+</section>
+
+<section>
+<title>LILO</title>
+
+<para>
+LILO is the Linux Loader, and currently the default boot loader
+installed with Slackware Linux. If you've used other Linux
+distributions before, you may be more familiar with GRUB. If you prefer
+to use it, you can easily find it in the <filename>extra/</filename>
+directory on one of your Slackware CDs. Since LILO is the default
+Slackware bootloader however, we'll focus exclusively on it.
+</para>
+
+<para>
+Configuring LILO can be a little daunting for new users, so Slackware
+comes with a special setup tool, <application>liloconfig</application>.
+Normally, <application>liloconfig</application> is first run by the
+installer, but you can run it at anytime from a terminal.
+</para>
+
+<para>
+FILL THIS IN!!!! Picture of liloconfig
+</para>
+
+<para>
+<application>liloconfig</application> has two modes of operation:
+simple and expert. The simple mode tries to automatically configure
+lilo for you. If Slackware is the only operating system installed on
+your computer, the simple mode will almost always do the right thing
+quickly and easily. It is also very good at detecting Windows
+installations and adding them to the <filename>lilo.conf</filename>
+file so that you can choose which operating system to boot when you
+turn your computer on.
+</para>
+
+<para>
+In order to use expert mode, you'll need to know Slackware's root
+partition. You can also setup other linux operating systems if you know
+their root partitions, but this may not work as well as you'd expect.
+<application>liloconfig</application> will try to boot each linux
+operating system with Slackware's kernel, and this is probably not what
+you want. Fortunately, setting up Windows partitions in expert mode is
+trivial. One hint when using expert mode. You should almost always
+install LILO to the Master Boot Record (MBR). Once upon a time, it was
+recommended to install the boot loader onto the root partition and set
+that partition as bootable. Today, LILO has matured greatly and is safe
+to install on the MBR. In fact, you will encounter fewer problems if
+you do so.
+</para>
+
+<para>
+<application>liloconfig</application> is a great way to quickly setup
+your boot loader, but if you really need to know what's going on you'll
+need to look at LILO's configuration file,
+<filename>lilo.conf</filename>(5) under the <filename>/etc</filename>
+directory. The <filename>lilo.conf</filename> file is seperated into
+several sections. At the top you'll find a global section where you
+specify things like where to install LILO (generally the MBR), any
+special images or screens to show on boot, and the timeout after which
+LILO will boot the default operating system. Here's what the global
+section of my lilo.conf file looks like in part.
+</para>
+
+<screen># LILO configuration file
+
+boot = /dev/sda
+ bitmap = /boot/slack.bmp
+ bmp-colors = 255,0,255,0,255,0
+ bmp-table = 60,6,1,16
+ bmp-timer = 65,27,0,255
+
+append=" vt.default_utf8=0"
+prompt
+timeout = 50
+
+# VESA framebuffer console @ 1024x768x256
+vga = 773
+.... many more lines ommitted ....
+</screen>
+
+<para>
+For a complete listing of all the possible LILO options, you should
+consult the man page for <filename>lilo.conf</filename>. In brief,
+we'll discuss the most common in this document.
+</para>
+
+<para>
+The first thing that should draw your attention is the boot line. This
+determines where the bootloader is installed. In order to install the
+the MBR of your hard drive, you simply list the hard drive's device
+entry on this line. In my case, I'm using a SATA hard drive that shows
+up as SCSI device <filename>/dev/sda</filename>. If you're using an IDE
+drive, you will probably have to use <filename>/dev/hda</filename>. In
+order to install to the boot block of a partition, you'll have to list
+the partition's device entry. For example, if you are installing to the
+first partition on the only SATA hard drive in your computer, you would
+probably use <filename>/dev/sda1</filename>.
+</para>
+
+<para>
+The prompt option simply tells LILO to ask (prompt) you for which
+operating system to boot. Operating systems are each listed in their
+own section deeper in the file. We'll get to them in a minute. The
+timeout option tells LILO how long to wait (in tenths of seconds)
+before booting the default OS. In my case, this is 5 seconds. Some
+systems seem to take a very long time to display the boot screen, so
+you may need to use a larger timeout value than I have set. This is in
+part why the simple LILO installation method utilizes a very long
+timeout (somewhere around 2 whole minutes). The append line in my case
+was setup by <application>liloconfig</application>. You may (and
+probably should) see something similar when looking at your own
+<filename>lilo.conf</filename>. I won't go into the details of why this
+line is needed, so you're just going to have to trust me that things
+work better if it is present. :^)
+</para>
+
+<para>
+Now that we've looked into the global section, let's take a look at the
+operating systems section. Each linux operating system section begins
+with an "image" line. Microsoft Windows operating systems are specified
+with an "other" line. Let's take a look at a sample
+<filename>lilo.conf</filename> that boots both Slackware and Microsoft
+Windows.
+</para>
+
+<screen># LILO configuration file
+... global section ommitted ....
+# Linux bootable partition config begins
+image = /boot/vmlinuz-generic-2.6.29.4
+ root = /dev/raven/64root
+ initrd = /boot/initrd.gz
+ label = Slackware64
+ read-only
+# Linux bootable partition config ends
+# Windows bootable partition config begins
+other = /dev/sda3
+ label = Windows
+ table = /dev/sda
+# Windows bootable partition config ends
+</screen>
+
+<para>
+For Linux operating systems like Slackware, the image line specifies
+which kernel to boot. In this case, we're booting
+<filename>/boot/vmlinuz-generic-2.6.29.4</filename>. The remaining
+sections are pretty self-explainatory. The tell LILO where to find the
+root filesystem, what initrd (if any) to use, and to initially mount
+the root filesystem read-only. That initrd line is very important for
+anyone running a generic kernel, or using LVM or software RAID. It
+tells LILO (and the kernel) where to find the initrd you created using
+<application>mkinitrd</application>.
+</para>
+
+<para>
+Once you've gotten your <filename>lilo.conf</filename> setup for your
+machine, simply run <application>lilo</application>(8) to install it.
+Unlike GRUB and other bootloaders, LILO requires you re-run
+<application>lilo</application> anytime you make changes to its
+configuration file in order for those changes to be installed.
+</para>
+
+
+<screen><prompt>darkstar:~# </prompt><userinput>lilo</userinput>
+Warning: LBA32 addressing assumed
+Warning: '/proc/partitions' does not match '/dev' directory structure.
+ Name change: '/dev/dm-0' -> '/dev/raven/swap'
+Warning: Name change: '/dev/dm-1' -> '/dev/raven/root'
+Warning: Name change: '/dev/dm-2' -> '/dev/raven/home'
+Warning: Name change: '/dev/dm-3' -> '/dev/raven/src'
+Warning: Name change: '/dev/dm-4' -> '/dev/raven/64root'
+Added Slackware *
+Added Backup
+6 warnings were issued.
+</screen>
+
+<para>
+Don't be scared by many of the warnings you may see when running
+<application>lilo</application>. In my case, most of these warnings are
+issued by the use of LVM. Unless you see a fatal error, things should
+be just fine.
+</para>
+
+</section>
+
+</chapter>