Cover image for Linux Cookbook

Book description

This unique and valuable collection of tips, tools, and scripts provides clear, concise, hands-on solutions that can be applied to the challenges facing anyone running a network of Linux servers from small networks to large data centers in the practical and popular problem-solution-discussion O'Reilly cookbook format. The Linux Cookbook covers everything you'd expect: backups, new users, and the like. But it also covers the non-obvious information that is often ignored in other books the time-sinks and headaches that are a real part of an administrator's job, such as: dealing with odd kinds of devices that Linux historically hasn't supported well, building multi-boot systems, and handling things like video and audio. The knowledge needed to install, deploy, and maintain Linux is not easily found, and no Linux distribution gets it just right. Scattered information can be found in a pile of man pages, texinfo files, and source code comments, but the best source of information is the experts themselves who built up a working knowledge of managing Linux systems. This cookbook's proven techniques distill years of hard-won experience into practical cut-and-paste solutions to everyday Linux dilemmas. Use just one recipe from this varied collection of real-world solutions, and the hours of tedious trial-and-error saved will more than pay for the cost of the book. But those who prefer to learn hands-on will find that this cookbook not only solves immediate problems quickly, it also cuts right to the chase pointing out potential pitfalls and illustrating tested practices that can be applied to a myriad of other situations. Whether you're responsible for a small Linux system, a huge corporate system, or a mixed Linux/Windows/MacOS network, you'll find valuable, to-the-point, practical recipes for dealing with Linux systems everyday. The Linux Cookbook is more than a time-saver; it's a sanity saver.

Table of Contents

  1. Special Upgrade Offer
  2. Dedication
  3. Preface
    1. 1. Audience
    2. 2. What Is Included/Omitted
    3. 3. Platforms
    4. 4. Conventions
    5. 5. Downloads and Feedback
    6. 6. Comments and Questions
    7. 7. Acknowledgments
  4. 1. Finding Documentation
    1. 1.1. Introduction
    2. 1.2. Understanding man Pages
    3. 1.3. Finding Appropriate man Pages
    4. 1.4. Finding Lost man Pages
    5. 1.5. Reading man Pages Without a man Viewer
    6. 1.6. Configuring Your manpath
    7. 1.7. Using info Pages
    8. 1.8. Printing man Pages
    9. 1.9. Printing info Pages
    10. 1.10. Printing Selected man or info Pages
    11. 1.11. Finding All of the Documentation for a Program
  5. 2. Installing and Managing Software on RPM-Based Systems
    1. 2.1. Introduction
    2. 2.2. Installing RPMs
    3. 2.3. Upgrading RPMs
    4. 2.4. Removing RPMs
    5. 2.5. Collecting Information on Installed RPMs
    6. 2.6. Collecting Information from RPMs That Are Not Installed
    7. 2.7. Finding Recently Installed RPMs
    8. 2.8. Rebuilding the RPM Database
    9. 2.9. Tracking Source-Built Libraries on an RPM-Based System
    10. 2.10. Fixing RPM Installation Problems
    11. 2.11. Installing Source RPMs
    12. 2.12. Customizing Build Options in a Source RPM
    13. 2.13. Installing Yum
    14. 2.14. Configuring Yum
    15. 2.15. Installing and Upgrading Packages with Yum
    16. 2.16. Removing Packages with Yum
    17. 2.17. Getting Information on Installed Packages with Yum
    18. 2.18. Maintaining Yum
  6. 3. Installing and Managing Software on Debian-Based Systems
    1. 3.1. Introduction
    2. 3.2. Getting Software for a Debian System
    3. 3.3. Installing Debian Packages from CD-ROM
    4. 3.4. Installing Packages on Debian-Based Systems
    5. 3.5. Removing Packages from a Debian System
    6. 3.6. Installing from Sources on a Debian System
    7. 3.7. Upgrading Packages on Debian
    8. 3.8. Upgrading a Debian System
    9. 3.9. Upgrading to a Newer Debian Release
    10. 3.10. Running a Mixed Debian System
    11. 3.11. Finding Out What Is Installed on a Debian System
    12. 3.12. Maintaining the Debian Package Cache
    13. 3.13. Resolving Debian Dependency Conflicts
    14. 3.14. Building a Local Debian Repository
    15. 3.15. Selecting Package Mirrors for apt-proxy.conf
    16. 3.16. Adding Your Existing Package Cache to apt-proxy.conf
  7. 4. Installing Programs from Source Code
    1. 4.1. Introduction
    2. 4.2. Preparing Your System for Compiling Programs from Sources
    3. 4.3. Generating a List of Files from a Source Install for Easy Uninstalls
    4. 4.4. Installing Programs from Source Code
    5. 4.5. Using CheckInstall to Create Packages from Sources
  8. 5. Discovering Hardware from Outside the Box
    1. 5.1. Introduction
    2. 5.2. Detecting Hardware with lspci
    3. 5.3. Using dmesg to Collect Hardware Information
    4. 5.4. Getting Live Hardware Snapshots with /proc
    5. 5.5. Viewing Drive Partitions with fdisk
    6. 5.6. Calculating Hard Drive Capacity
  9. 6. Editing Text Files with JOE and Vim
    1. 6.1. Introduction
    2. 6.2. Finding JOE Commands
    3. 6.3. Customizing JOE
    4. 6.4. Organizing JOE’s Preferences in a Separate File
    5. 6.5. Copying Between Two Files in JOE
    6. 6.6. Searching and Replacing in JOE
    7. 6.7. Selecting Text Vertically in JOE
    8. 6.8. Finding and Opening Files in JOE
    9. 6.9. Learning Vim Quickly
    10. 6.10. Creating Autotext with Vim’s Abbreviations
    11. 6.11. Mapping Commands to Keystrokes
    12. 6.12. Customizing Vim
    13. 6.13. Navigating Quickly in Vim with Marks
    14. 6.14. Picking Up Where You Left Off: Using Vim’s Sessions
    15. 6.15. Setting Your Default Editor
    16. 6.16. Discovering Vim’s Compile-Time Options
  10. 7. Starting and Stopping Linux
    1. 7.1. Introduction
    2. 7.2. Changing Runlevels After Bootup
    3. 7.3. Changing the Default Runlevel
    4. 7.4. Starting and Stopping X
    5. 7.5. Managing Debian’s Runlevels
    6. 7.6. Creating Both Text and Graphical Login Runlevels on Debian
    7. 7.7. Managing Red Hat’s Runlevels
    8. 7.8. Manually Configuring Startup Services
    9. 7.9. Manually Starting and Stopping Services
    10. 7.10. Shutting Down or Rebooting Linux
    11. 7.11. Disabling or Limiting Access to Ctrl-Alt-Delete
    12. 7.12. Shutting Down Automatically
  11. 8. Managing Users and Groups
    1. 8.1. Introduction
    2. 8.2. Sorting Human Users from System Users
    3. 8.3. Finding a User’s UID and GID
    4. 8.4. Adding Users with useradd
    5. 8.5. Adding Users with adduser
    6. 8.6. Modifying User Accounts
    7. 8.7. Deleting a User
    8. 8.8. Killing User Processes the Easy, Fun Way
    9. 8.9. Disabling Accounts
    10. 8.10. Managing Passwords
    11. 8.11. Adding Groups with groupadd
    12. 8.12. Deleting Groups with groupdel
    13. 8.13. Creating a System User
    14. 8.14. Creating System Groups with addgroup
    15. 8.15. Adding and Deleting Group Members
    16. 8.16. Checking Password File Integrity
    17. 8.17. Adding New Users in Batches
    18. 8.18. Changing Masses of Passwords
    19. 8.19. Adding Batches of Users to Groups
    20. 8.20. Using su to Be Root Temporarily
    21. 8.21. Granting Limited Rootly Powers with sudo
    22. 8.22. Using Disk Quotas
  12. 9. Managing Files and Partitions
    1. 9.1. Introduction
    2. 9.2. Setting File and Directory Permissions with chmod’s Numeric Notation
    3. 9.3. Doing Batch Operations with chmod
    4. 9.4. Setting File and Directory Permissions with chmod’s Symbolic Notation
    5. 9.5. Setting File Ownership with chown
    6. 9.6. Doing Batch Operations with chown
    7. 9.7. Setting Up a Shared Directory with setgid and the Sticky Bit
    8. 9.8. Setting Permissions Defaults with umask
    9. 9.9. Mounting and Unmounting Removable Disks
    10. 9.10. Configuring Filesystem Mounts with /etc/fstab
    11. 9.11. Mounting and Unmounting Filesystems on Hard Drives
    12. 9.12. Finding Device Names for mount and fstab
    13. 9.13. Creating Files and Directories
    14. 9.14. Deleting Files and Directories
    15. 9.15. Copying, Moving, and Renaming Files and Directories
    16. 9.16. Creating Linux Disk Partitions with fdisk
    17. 9.17. Creating a Filesystem on a New Partition
  13. 10. Patching, Customizing, and Upgrading Kernels
    1. 10.1. Introduction
    2. 10.2. Adding New Features to the 2.4 Kernel
    3. 10.3. Slimming a Stock 2.4 Kernel
    4. 10.4. Upgrading to the Latest Stable Version of the 2.4 Kernel
    5. 10.5. Building the 2.6 Kernel
    6. 10.6. Adding New Features to the 2.6 Kernel
    7. 10.7. Adding a New Loadable Kernel Module
    8. 10.8. Patching a Kernel
    9. 10.9. Removing a Kernel Patch
    10. 10.10. Creating an initrd Image
    11. 10.11. Creating a Boot Disk on Debian
    12. 10.12. Creating a Boot Disk on Red Hat
  14. 11. CD and DVD Recording
    1. 11.1. Introduction
    2. 11.2. Finding the SCSI Address for CD and DVD Writers
    3. 11.3. Enabling SCSI Emulation for IDE/Atapi CD and DVD Writers
    4. 11.4. Making a Data CD for General Distribution
    5. 11.5. Building File Trees on a Data CD
    6. 11.6. Copying a CD or DVD
    7. 11.7. Erasing a CD-RW
    8. 11.8. Recording a Multisession Data CD
    9. 11.9. Creating a Bootable CD
    10. 11.10. Spanning a Large File over Several CDs
    11. 11.11. Recording Data DVDs
    12. 11.12. Recording an Audio CD for Standard CD Players
  15. 12. Managing the Bootloader and Multi-Booting
    1. 12.1. Introduction
    2. 12.2. Migrating from LILO to GRUB
    3. 12.3. Installing GRUB Without a Floppy Disk
    4. 12.4. Installing GRUB with grub-install
    5. 12.5. Preparing a System for Multibooting Linux
    6. 12.6. Adding More Linuxes to a Multiboot System
    7. 12.7. Discovering Boot Parameters from the GRUB Command Shell
    8. 12.8. Configuring the Boot Partition
    9. 12.9. Creating the GRUB Boot Menu
    10. 12.10. Customizing menu.lst
    11. 12.11. Adding Windows 95/98/ME to a Linux System
    12. 12.12. Adding Windows NT/2000/XP to a Multiboot System
    13. 12.13. Restoring GRUB to the MBR with a Knoppix CD
    14. 12.14. Protecting System Files with a GRUB Password
    15. 12.15. Locking Out Users from Individual GRUB Menu Entries
    16. 12.16. Creating a GRUB Splash Image
    17. 12.17. Booting Linux with LILO
    18. 12.18. Multibooting Linuxes with LILO
    19. 12.19. Multibooting Windows and Linux with LILO
    20. 12.20. Creating a LILO Boot Diskette
    21. 12.21. Password-Protecting LILO
    22. 12.22. Backing Up the MBR
  16. 13. System Rescue and Recovery with Knoppix
    1. 13.1. Introduction
    2. 13.2. Booting Knoppix
    3. 13.3. Creating a Knoppix Boot Diskette
    4. 13.4. Saving Your Knoppix Configuration on a USB Memory Stick
    5. 13.5. Creating a Persistent, Encrypted Knoppix Home Directory
    6. 13.6. Copying Files to Another Linux PC
    7. 13.7. Copying Files to a Samba Share
    8. 13.8. Copying Files to a CD-R/RW
    9. 13.9. Editing Configuration Files from Knoppix
    10. 13.10. Installing Software from Knoppix
    11. 13.11. Repairing a Lost Root Password
    12. 13.12. Installing Knoppix to a Hard Disk
    13. 13.13. Virus-Scanning Windows PCs with Knoppix
  17. 14. Printing with CUPS
    1. 14.1. Introduction
    2. 14.2. Installing a Printer on a Standalone Linux PC
    3. 14.3. Serving Linux Clients
    4. 14.4. Sharing a Printer Without Using Name Resolution
    5. 14.5. Serving Windows Clients Without Samba
    6. 14.6. Sharing Printers on a Mixed LAN with Samba
    7. 14.7. Building a Dedicated CUPS Printer Server
    8. 14.8. Distributed Printing with Classes
    9. 14.9. Restricting Users from Printers and Classes
    10. 14.10. Troubleshooting
  18. 15. Configuring Video and Managing X Windows
    1. 15.1. Introduction
    2. 15.2. Using Both X Windows and Consoles
    3. 15.3. Installing a New Video Adapter
    4. 15.4. Editing XF86Config
    5. 15.5. Enabling 3D Hardware Acceleration with XFree86/DRI
    6. 15.6. Troubleshooting 3D Acceleration Problems
    7. 15.7. Configuring a Multihead Display
    8. 15.8. Choosing Different ServerLayouts at Startup
    9. 15.9. Setting a Default ServerLayout
    10. 15.10. Configuring startx
    11. 15.11. Changing Your Login Display Manager
    12. 15.12. Running Different Window Managers Simultaneously with Xnest
  19. 16. Backup and Recovery
    1. 16.1. Introduction
    2. 16.2. Using rsync for Local File Transfers and Synchronization
    3. 16.3. Making Secure Transfers with rsync and ssh
    4. 16.4. Building an rsync Backup Server
    5. 16.5. Securing rsync Modules
    6. 16.6. Building an Anonymous Public rsync Server
    7. 16.7. Launching the rsync Daemon at Startup
    8. 16.8. Fine-Tuning File Selection
    9. 16.9. Automating rsync over ssh Backups
    10. 16.10. Limiting rsync’s Bandwidth Requirements
    11. 16.11. Customizing Filepaths in rsync
    12. 16.12. Installing rsync on Windows Clients
    13. 16.13. Creating a Message of the Day for rsync
    14. 16.14. Creating a Bootable System Restore CD with Mondo Rescue
    15. 16.15. Verifying the Mondo Backup
    16. 16.16. Creating a Bootable System Restore DVD with Mondo Rescue
    17. 16.17. Using Mondo Rescue to Clone Linux Systems
    18. 16.18. Using the mindi-kernel for a “Sane” Backup
    19. 16.19. Restoring a System from a Mondo Rescue Disk
    20. 16.20. Restoring Selected Files from a Mondo Disk
  20. 17. Remote Access
    1. 17.1. Introduction
    2. 17.2. Setting Up OpenSSH the First Time
    3. 17.3. Generating New Host Keys
    4. 17.4. Authenticating Via Public Keys
    5. 17.5. Using Multiple Key Pairs
    6. 17.6. Passwordless Logins with ssh-agent
    7. 17.7. Better Passwordless Logins with keychain
    8. 17.8. Passwordless Logins for cron Jobs
    9. 17.9. Shutting Down ssh-agent Automatically at Logout
    10. 17.10. Customizing the Bash Prompt for ssh
    11. 17.11. Tunneling X over SSH
    12. 17.12. Connecting from a Windows PC
    13. 17.13. Setting File Permissions on ssh Files
  21. 18. Version Control
    1. 18.1. Introduction
    2. 18.2. Building a Simple Local RCS Repository
    3. 18.3. Retrieving Older File Revisions from RCS
    4. 18.4. Comparing File Versions in RCS
    5. 18.5. Managing System Configuration Files with RCS
    6. 18.6. Using CVS for a Single-User Local Repository
    7. 18.7. Adding New Files to a CVS Repository
    8. 18.8. Deleting Files from a CVS Repository
    9. 18.9. Creating a Shared CVS Repository
    10. 18.10. Sharing a Single Repository Between Several Groups
    11. 18.11. Accessing a Remote CVS Repository
    12. 18.12. Updating Your Working Files in CVS
    13. 18.13. Retrieving Specific Older Revisions from CVS
    14. 18.14. Building an Anonymous Read-Only CVS Repository with Pserver
    15. 18.15. Mirroring a CVS Repository
    16. 18.16. Storing Binary Files in CVS
    17. 18.17. Creating Release Snapshots with Tags
    18. 18.18. Creating Stable and Development Branches for a Project
    19. 18.19. Customizing Your CVS Environment
    20. 18.20. Calculating Storage Size for a CVS Repository
  22. 19. Keeping Time with NTP
    1. 19.1. Introduction
    2. 19.2. Building a Local Time Server
    3. 19.3. Connecting to a Local Time Server
    4. 19.4. Adding Access Controls
    5. 19.5. Deciding Which NTP Pools to Use
    6. 19.6. Connecting to a Time Server from an Intermittent Connection
    7. 19.7. Setting Up Multiple Local Time Servers
    8. 19.8. Using NTP Keys for Authentication
  23. 20. Building a Postfix Mail Server
    1. 20.1. Introduction
    2. 20.2. Building a POP3 Mail Server
    3. 20.3. Building a POP3 Mail Server on Debian
    4. 20.4. Testing the SMTP/POP3 Mail Server
    5. 20.5. Sending Internet Mail
    6. 20.6. Receiving Internet Mail
    7. 20.7. Installing Cyrus-SASL for SMTP Authorization
    8. 20.8. Installing Cyrus-SASL on Debian
    9. 20.9. Setting Up smtp-auth to Authenticate Users
    10. 20.10. Using smtp-auth to Authenticate Postfix to Another Server
    11. 20.11. Configuring a Fully Qualified Domain Name
    12. 20.12. Building an IMAP Mail Server
    13. 20.13. Connecting Your Users
    14. 20.14. Sharing IMAP Folders
    15. 20.15. Using Postfix’s Virtual Mailbox Domains
    16. 20.16. Creating a Mail List with couriermlm
    17. 20.17. Administering a couriermlm List
    18. 20.18. Squirreling Around with Webmail
    19. 20.19. Table of SMTP Response Codes and SMTP Commands
  24. 21. Managing Spam and Malware
    1. 21.1. Introduction
    2. 21.2. Basic Checklist: Preparing to Build Spam Malware Defenses
    3. 21.3. Safely Testing New UBE Controls in Postfix
    4. 21.4. Basic UBE Configurations for Postfix
    5. 21.5. Creating Whitelists
    6. 21.6. Using DNS Blackhole Lists
    7. 21.7. Rejecting Messages with Attachments
    8. 21.8. Setting Up Clam Anti-Virus on a Postfix Server
    9. 21.9. Setting Up SpamAssassin on Postfix with Amavisd-new
    10. 21.10. Setting Up SpamAssassin Without Amavisd-new
  25. 22. Running an Apache Web Server
    1. 22.1. Introduction
    2. 22.2. Installing Apache 2.0 from Sources
    3. 22.3. Adding New Modules After Installation
    4. 22.4. Setting Apache File Permissions and Ownership
    5. 22.5. Accessing the Apache User’s Manual Locally
    6. 22.6. Setting Up a Simple Public Web Server
    7. 22.7. Redirecting URLs to a New Directory
    8. 22.8. Giving Users Individual Web Directories
    9. 22.9. Starting Apache at Boot
    10. 22.10. Hosting Multiple Domains with Apache
    11. 22.11. Using Individual Log Files for Virtual Hosts
    12. 22.12. Keeping LAN Web Sites Off the Internet
    13. 22.13. Password-Protecting Individual Directories
    14. 22.14. Using robots.txt to Control Web Crawlers
    15. 22.15. Blocking Obnoxious Visitors
    16. 22.16. Making Custom Error Pages
    17. 22.17. Customizing Apache’s Default Error Pages
    18. 22.18. Making Full-Length Directory Indexes
    19. 22.19. Using Content Negotiation to Deliver Pages in Different Languages
    20. 22.20. Using Favicons
    21. 22.21. Viewing Apache Access Logs with Webalizer
  26. 23. File and Printer Sharing, and Domain Authentication with Samba
    1. 23.1. Introduction
    2. 23.2. Building a Simple Anonymous Samba File Server for Windows
    3. 23.3. Building a Windows/Linux Peer Network
    4. 23.4. Enabling File Sharing on Windows PCs
    5. 23.5. Adding Authentication to a Samba Server
    6. 23.6. Batch-Converting System Users to Samba Users
    7. 23.7. Managing Samba Logins from Windows 95/98/ME
    8. 23.8. Dealing with Windows Encrypted Password Confusion
    9. 23.9. Controlling Share Access with Access Control Lists
    10. 23.10. Creating Public Shares for Users
    11. 23.11. Accessing Users’ Home Directories in Samba
    12. 23.12. Building a Primary Domain Controller with Samba
    13. 23.13. Connecting Windows 95/98/ME to a Samba Domain
    14. 23.14. Connecting Windows NT/2000 Clients to a Samba Domain
    15. 23.15. Connecting Windows XP Clients to a Samba Domain
    16. 23.16. Enabling Roaming Profiles
    17. 23.17. Connecting Linux Clients to a Samba File Server or Peer Network
    18. 23.18. Connecting Linux Clients to Samba Workgroups with Command-Line Tools
    19. 23.19. Connecting Linux Clients to a Samba Domain with GUI LAN Browsers
    20. 23.20. Connecting Linux Clients to a Samba Domain with Command-Line Tools
    21. 23.21. Keeping Samba and Linux Passwords in Sync
    22. 23.22. Sharing Linux Printers with Windows
    23. 23.23. Sharing Windows Printers with Linux
    24. 23.24. Running Windows Applications on Linux with CrossOver Office
  27. 24. Managing Name Resolution
    1. 24.1. Introduction
    2. 24.2. Enabling Local Name Resolution with hosts Files
    3. 24.3. Setting Up a DHCP Server
    4. 24.4. Configuring dhcp Clients
    5. 24.5. Adding Static Hosts to dhcp
    6. 24.6. Running a Public DNS Server
    7. 24.7. Installing djbdns
    8. 24.8. Moving tinydns’s and dnscache’s Logfiles
    9. 24.9. Running a Local Caching Name Server with djbdns
    10. 24.10. Configuring Linux and Windows Clients to Use Your Caching DNS Server
    11. 24.11. Building a Public DNS Server with tinydns
    12. 24.12. Building a Private tinydns Server
    13. 24.13. Enabling Simple Load Balancing with tinydns
    14. 24.14. Synchronizing with a Second tinydns Server
    15. 24.15. Running a Local Caching Name Server with BIND
    16. 24.16. Running a Private BIND DNS Server
    17. 24.17. Checking Syntax
    18. 24.18. Configuring a Public BIND DNS Server
    19. 24.19. Building a BIND Secondary Server
    20. 24.20. Simple Load Balancing with BIND
    21. 24.21. Testing Your tinydns Server
    22. 24.22. Testing and Querying DNS Servers with dig and dnstrace
  28. A. Finding Linux Documentation
    1. A.1. Linux Documentation on the Web
    2. A.2. Books and Magazines
  29. B. Online References
    1. B.1. Hardware Web Sites
    2. B.2. Usenet
  30. C. Microsoft File Types
  31. D. Init Script for CVSD
  32. Index
  33. About the Author
  34. Colophon
  35. Special Upgrade Offer
  36. Copyright