LPI Linux Certification/LPIC1 Exam 101/Linux Installation & Package Management
Section Overview
edit- Design hard disk layout
- Install a boot manager
- Make and install programs from source
- Manage shared libraries
- Use Debian package management
- Use Red Hat Package Manager (RPM)
Detailed Objectives
edit(LPIC-1 Version 5.0)
Weight: 2
Description:
Candidates should be able to design a disk partitioning scheme for a Linux system.
Key knowledge area(s):
- Allocate filesystems and swap space to separate partitions or disks.
- Tailor the design to the intended use of the system.
- Ensure the
/boot
partition conforms to the hardware requirements for booting.
The following is a partial list of the used files, terms and utilities:
/
(root) filesystem/var
filesystem/home
filesystem/boot
filesystem- EFI System Partition (ESP)
- swap space
- mount points
- partitions
Filesystems
editA filesystem is simply a way of organizing data in computer-accessible form on the hard disk or other media. Different filesystems have different organizing structures to determine where the data and indexing information will be stored. Some popular filesystems include:
ext2 one of the oldest and most universally supported filesystems on Linux, Unix, and BSD operating systems ext3 an extended version of ext2 which overcomes some limitations and adds journaling ext4 fourth extended filesystem - it is a journaling file system for Linux, developed as the successor to ext3. btrfs reiserfs an enhanced journaling filesystem written by Hans Reiser and extended by the open source community since his incarceration jfs xfs fat or vfat the file allocation table-based filesystem used by MS-DOS and Windows 9x NTFS A more advanced (than fat) filesystem used by Windows NT, 2000, XP and Vista
Partitions
editWhen doing an installation there is normally a minimum disk configuration of two partitions that needs to be created:
- / (root): directory that contains the Linux distribution.
- Swap space: partition that allows a kernel to run more processes than can normally fit into RAM.
If multiple disks are available it is good practice to also have the /usr and /home directories on different partitions. Each partition will contain a filesystem type and can be mounted on the active system in the filesystem global tree. To print the active mounted filesystems, use mount.
$ mount dev/hda3 on / type reiserfs (rw) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw) /dev/hda1 on /boot type ext2 (rw) shmfs on /dev/shm type shm (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw)
The swap partition doesn't need a file system. It will be accessed in raw mode by the kernel with no filesystem system calls as overhead.
Disk speed issues
editBefore deciding on your partitioning scheme, you really need to know exactly what sort of applications you will be running.
- Mail Server
- Web Server
- Graphical X-Windows based applications
- And more
If your system has multiple disks, use the fastest one to store most of your data.
- / Contains most of the system utilities and doesn't get used much. These can be shipped off to the slowest disk.
- /var/log contains a lot of logging information. Best on a fast disk.
- /usr is typically on a separate partition anyway and if you have a lot of clients starting lots of X applications, use a fast disk.
Examples of system applications:
For e-mail serving, Sendmail writes to two main locations: mail queue, usually /var/spool/mqueue and /var/spool/mail as well as other locations. Apache uses several different files, two log files per site hosted for logging and access to the actual pages. Apache spends quite a bit of time writing to log files in /var/log (or where configured to do so).
Virtual memory (Swap)
editWhen you set up a new system, swap should be twice your actual RAM. This is not always sensible in real-world scenarios, however it is a traditional guideline and a conservative answer to give in an exam. swapon is used to enable specified devices/partitions designated for swapping. On the contrary, swapoff is used to disable a specified device/partition of swapping. Both commands can take the -a option, which iterates all swap devices found in /proc/swaps or /etc/fstab.
Information on the swap partition can be displayed with swapon.
swapon -s # Display the active partition
To get information on the usage of virtual memory, use vmstat.
$ vmstat -n 1 procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 5 0 1 184 3228 37684 92828 0 0 37 19 124 228 3 0 97 1 0 0 184 3476 37684 92596 0 0 0 0 102 368 0 0 100 2 0 0 184 3476 37684 92596 0 0 0 0 101 328 0 0 100 R:processes waiting for run time. b: processes in uninterruptable sleep. w: processes swapped out. swpd: virtual memory used (kB). free: Idle memory (kB). buff: Memory used as buffers (kB). si: Memory swapped in from disk (kB/s). so: Memory swapped to disk (kB/s). bi: Blocks received from a block device (blocks/s). bo: Blocks sent to a block device (blocks/s). in: The number of interrupts per second. cs: The number of context switches per second. us: user time sy: system time id: idle time
Exercises
edit- Open two terminals: In one terminal display periodically the virtual memory usage. In the second terminal disable the virtual memory and re-enable it. Notify the changes in the first terminal.
- What is the disk layout of your system and how many disks do you have?
- How many swap space can you use?
Detailed Objective
edit(LPIC-1 Version 5.0)
Weight: 2
Description:
Candidates should be able to select, install and configure a boot manager.
Key knowledge area(s):
- Providing alternative boot locations and backup boot options.
- Install and configure a boot loader such as GRUB Legacy.
- Perform basic configuration changes for GRUB 2.
- Interact with the boot loader.
The following is a partial list of the used files, terms and utilities:
menu.lst
,grub.cfg
andgrub.conf
grub-install
grub-mkconfig
- MBR
Boot managers
editA boot loader is installed in the MBR (Master Boot Record). When a system starts, it loads what is in the MBR to RAM. Under Linux there are two main boot loaders:
- Lilo: LInux LOader.
- Grub: GRand Unified Boot Loader.
A boot loader allows you to select the image that you would like to boot from. A system can contain multiple images (operating systems).
A boot loader allows you to interactively run commands and pass parameters to the image that you will boot. The initrd is the driver that will be used to build a filesystem on RAM to mount other filesystems and execute programs.
GRUB is today's default boot loader for many distributions. When installing Windows with Linux, install Windows first and Linux second, because Windows overwrites the MBR without asking.
LILO vs. GRUB
editBoth are used to load an image from a disk to RAM. GRUB has the following advantages to LILO:
- More pre-OS commands.
- Supports images stored beyond the 1024 BIOS cylinder limitation.
- Can access its configuration file through the filesystem.
When using LILO, each time you add a new image or change an image a new LILO needs to be installed in the MBR.
- LILO keeps its boot information in the MBR
- GRUB keeps its boot information in the filesystem (menu.lst).
- LILO also has a configuration file /etc/lilo.conf.
To install GRUB on the MBR, use grub-install. The command setup will override the MBR.
To install LILO on the MBR, use lilo. The lilo will use the /etc/lilo.conf file to know what to write into the MBR.
Example of /etc/lilo.conf:
# LILO global section boot = /dev/hda # LILO installation target: MBR vga = normal # (normal, extended, or ask) read-only # Mount the root file systems read-only # LILO Linux section image=/boot/vmlinuz # Image to load label=linux # Label to display root=/dev/hda1 # Root partition for the kernel initrd=/boot/initrd # Ramdisk # LILO DOS/Windows section other=/dev/hda3 label=windows # LILO memtest section image=/boot/memtest.bin label=memtest86
Example of menu.lst (GRUB configuration file):
# GRUB default values timeout 10 # Boot the default kernel after 10 seconds default 0 # Default kernel # Grub for Linux section 0 title GNU/Linux # Title root (hd0,1) # /dev/hda2 root filesystem # Kernel and parameters to pass to the kernel kernel /boot/vmlinuz root=/dev/hda2 read-only initrd /boot/initrd boot # Grub for DOS/Windows section title Winblows root (hd0,2) # /dev/hda3 makeactive chainloader+1
GRUB Resources
edit* GRUB Manual * GRUB homepage * Grub wiki * Linux+Win+Grub HowTo * Linux Recovery and Boot Disk Creation with Grub. * Win32 Grub * Booting with GRUB * WinGRUB * GRUB Installer for Windows * GRUB for DOS - Bridging DOS/Windows to Unix/Linux
Exercises
edit1) Install Grub on a floppy disk and try to boot your image manually:
mkfs -t ext2 /dev/fd0 mount /dev/fd0 /mnt mkdir -p /mnt/boot/grub cp /boot/grub/stage* /mnt/boot/grub/ cp /boot/grub/e2fs-stage1_5 /mnt/boot/grub/ touch /mnt/boot/grub umount /mnt grub root (fd0) setup (fd0) quit
Now reboot with the floppy and from the prompt select the kernel on the hard disk.
root (hd0,1) kernel /boot/vmlinuz root=/dev/hda2 read-only initrd /boot/initrd boot
2) Create /boot/grub/menu.lst file and install Grub on your hard drive with the grub utility.
3) Install back lilo. Change the linux label of the default kernel image to SuSE in /etc/lilo.conf and re-install the lilo program in the MBR.
Detailed Objective (206.1)
edit(LPIC-2 Version 4.5)
Weight: 2
Description: Candidates should be able to build and install an executable program from source. This objective includes being able to unpack a file of sources.
Key Knowledge Areas:
- Unpack source code using common compression and archive utilities.
- Understand basics of invoking make to compile programs.
- Apply parameters to a configure script.
- Know where sources are stored by default.
Terms and Utilities:
/usr/src/
gunzip
gzip
bzip2
xz
tar
configure
make
uname
install
patch
Source files
editAn archive is a collection of related files stored in one file. The command that allows you to store files and subtree directories in one file is tar.
tar function & options files
Common functions: -c: Create a new tar file. -t: Tell the contents of a tar file. -x: Extract the contents of a tar file.
Common options: -f file: Specify the name of the tar file.
Examples:
tar cvf mybackup.tar ~ tar cvf usr.tar /usr tar tvf mybackup.tar tar xvf mybackup.tar
It is good practice to use the .tar extension for all files archived with tar.
File compression
editCompression saves space for storage and file transfer. There are multiple utilities to do compression:
- compress, uncompress # Old Unix compression algorithm
- gzip, gunzip # Most common use
- bzip2, bunzip2 # Best compression algorithm
Once an archive has been created , it can be compressed. Examples:
$ ls -l backup.tar -rw-r--r-- 1 rarrigon users 22773760 nov 10 11:07 backup.tar
$ gzip -v backup.tar backup.tar: 53.8% -- replaced with backup.tar.gz
$ ls -l backup.tar.gz -rw-r--r-- 1 rarrigon users 10507393 nov 10 11:07 backup.tar.gz
gunzip backup.tar.gz $ bzip2 -v backup.tar backup.tar: 2.260:1, 3.540 bits/byte, 55.75% saved, 22773760 in, 10077846 out.
Files archiving and compression
editWhen archiving files and subdirectories it is possible to package and compress them in one command. Examples:
tar cvzf backup.tgz ~ # Backup of home with gzip tar cvjf backup.tbz ~ # Backup of home with bzip2 tar xvzf backup.tgz # Extract and gunzip backup.tgz tar xvjf backup.tbz # Extract and bunzip2 backup.tbz
By default tar uses a relative path but with the -P option it is possible to save files with an absolute path.
Files in this mode will always be extracted at the same location.
For compressing and archiving in one line
$ tar cvf - . | gzip > target.tar.gz
For unzipping a compressed archive:
$ gunzip -c file_name.tar.gz |tar xvf -
GNU tool chain
editUnder Linux all the sources can be built with the standard GNU tool chain. make Utility to maintain group of programs. Use the rules defined in Makefile.
- gcc ANSI C Compiler
- g++ C++ Compiler
Many compressed or archived packages once installed will have information files (README, INSTALL) that should explain how it should be built and installed. The files Makefile.in and configure.in are the basic files that will be used to generate a final Makefile. The configured file in general scans the system and will build a final Makefile.
Exercises
edit- Do an archive of the /bin and the /sbin directories. With which compression utilities do you get the smallest file size? Use -v to get in percentage the size file reduction.
- Install the file /usr/src/packages/SOURCES/grub-09.tar.bz2 in /tmp and by reading INSTALL and README build the sources.
- Find the way to uncompress a .deb an a .rpm archive, what is in ?
- In on command line, compress a new file and uncompress this new file somewhere else.
Detailed Objective
edit(LPIC-1 Version 5.0)
Weight: 1
Description:
Candidates should be able to determine the shared libraries that executable programs depend on and install them when necessary.
Key knowledge areas:
- Identify shared libraries.
- Identify the typical locations of system libraries.
- Load shared libraries.
The following is a partial list of the used files, terms and utilities:
ldd
ldconfig
/etc/ld.so.conf
LD_LIBRARY_PATH
Shared libraries
editA library is a set of functions that programs can use to implement their functionalities. When building (linking) a program, those libraries can be statically or dynamically linked to an executable. Static link means that the final program will contain the library function within its file. (lib.a) Dynamic link means that the needed libraries would need to be loaded into RAM when the program needs to be executed. (lib.so)
The default directories for all the standard libraries are:
- /lib: Used mainly by /bin programs.
- /usr/lib: Used mainly by /usr/bin programs.
The file /etc/ld.so.conf is used by the system to specify other library locations. To build a cache file used by the runtime loader of all the available libraries, use ldconfig. The file /etc/ld.so.cache will be generated.
Library dependencies
editTo print shared programs or library dependencies, use ldd.
ldd [-vdr] program|library
Example:
$ ldd -d -v /bin/cp libc.so.6 => /lib/libc.so.6 (0x40027000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) Version information: /bin/cp: libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 libc.so.6 (GLIBC_2.2) => /lib/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 /lib/libc.so.6: ld-linux.so.2 (GLIBC_2.1.1) => /lib/ldlinux.so.2 ld-linux.so.2 (GLIBC_2.2.3) => /lib/ldlinux.so.2 ld-linux.so.2 (GLIBC_2.1) => /lib/ldlinux.so.2 ld-linux.so.2 (GLIBC_2.2) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2
Runtime loader
editThe runtime loader ld.so finds the needed library of a program and will load them into RAM. The search order of ld.so is:
- LD_LIBRARY_PATH
- The cache file /etc/ld.so.cache
- The default directories /lib and /usr/lib.
Exercises
edit
Detailed Objective
edit(LPIC-1 Version 5.0
Weight: 3
Description:
Candidates should be able to perform package management using the Debian package tools.
Key knowledge areas:
- Install, upgrade and uninstall Debian binary packages.
- Find packages containing specific files or libraries which may or may not be installed.
- Obtain package information like version, content, dependencies, package integrity and installation status (whether or not the package is installed).
- Awareness of
apt
.
The following is a partial list of the used files, terms and utilities:
/etc/apt/sources.list
dpkg
dpkg-reconfigure
apt-get
apt-cache
Package Structure
editIn order to understand how to use Debian's package management system, it would be useful to first have an understanding of how a Debian package is named. For example, the package ncftp_3.1.3-1_i386.deb has 5 major parts:
- ncftp - the name of the program/application/library
- 3.1.3 - the version of the program/application/library assigned by the original (upstream) author(s)
- 1 - the revision number of the package assigned by the person(s) who packaged the program for a Debian system
- i386 - the architecture the packaged program is designed to run on
- .deb - signifies this is a Debian package
Note that there is special significance to the use of underscores(_) and hyphens(-); an underscore shall separate the name of the program and its version, a hyphen shall separate a version number and the revision number, and an underscore shall separate the revision number and the architecture.
dpkg
editdpkg is the "grandaddy" or "back-end" of the Debian Package Management System. Features present in the more advanced tools are not available to dpkg but it is nevertheless a useful tool.
Some notes:
- dpkg keeps its record of available packages in /var/lib/dpkg/available.
Some of the more common functions used by administrators by dpkg are:
Adding, Removing, and Configuring Packages
- dpkg {-i|--install} <package-name> will install the specified package
- dpkg {-r|--remove} <package-name> will remove the specified package (but leave the configuration files intact)
- dpkg {-P|--purge} <package-name> will remove the specified package and the corresponding configuration files
- dpkg --root /target -i <package> will install a package into a unbootable system by specifying the system root.
- dpkg --unpack <package-name> will unpack (but do not configure) a Debian archive into the file system of the hard disk
- dpkg --configure <package-name> will configure a package that already has been unpacked
Querying Package Information
- dpkg --info <package-name> will print out the control file (and other information) for a specified package
- dpkg {-l|--list} this will give you a list of installed packages.
- dpkg {-a|--pending} is given instead of a package name, then all packages unpacked, but marked to be removed or purged in file /var/lib/dpkg/status, are removed or purged, respectively.
- dpkg -s (--status) <package-name> will give you a description of installed package
Updating Package Information
- dpkg --update-avail <package-name> will replace old information with with new information from package.
- dpkg --merge-avail <package-name> will combine old information with new information from package.
dpkg-reconfigure
editdpkg-reconfigure reconfigures packages after they have already been installed.
- dpkg-reconfigure <package-name> to reconfigure the initial installation settings
- dpkg-reconfigure --priority=medium package [...] will set the minimum priority of question that will be displayed
- dpkg-reconfigure --all will reconfigure all packages
- dpkg-reconfigure locales will generate any extra locales
- dpkg-reconfigure --p=low xserver-xfree86 will reconfigure X server
Dselect
editThe utility that allows you on Debian to easily add/remove packages is dselect.
- Choose the access method to use.
- Update the list of available packages, if possible.
- Request which packages you want on your system.
- Install and upgrade wanted packages.
- Configure any packages that are unconfigured.
- Remove unwanted software.
There is on dselect an interactive menu that will allow you to install/remove packages. Care must be taken with this utility. You can damage your system.
Dselect menu example:
Debian `dselect' package handling frontend.
0. [A]ccess Choose the access method to use. 1. [U]pdate Update list of available packages, if possible. 2. [S]elect Request which packages you want on your system. 3. [I]nstall Install and upgrade wanted packages. 4. [C]onfig Configure any packages that are unconfigured. 5. [R]emove Remove unwanted software. 6. [Q]uit Quit dselect.
$ dselect - list of access methods Abbrev. Descriptio cdrom Install from a CD-ROM. * multi_cd Install from a CD-ROM set. nfs Install from an NFS server (not yet mounted). multi_nfs Install from an NFS server (using the CD-ROM set) (not yet mounted). harddisk Install from a hard disk partition (not yet mounted). mounted Install from a filesystem which is already mounted. multi_mount Install from a mounted partition with changing contents. floppy Install from a pile of floppy disks. apt APT Acquisition [file,http,ftp]
apt-get
editIf you know the name of a package you want to install, use apt-get. You must configure the sources.list file. This same file is used when you choose the apt access method of dselect. The location is /etc/apt.
- apt-get install <package-name> will search its database for the most recent version of this package and will retrieve and install it from the corresponding archive as specified in sources.list. In the event that this package depends on another APT will check the dependencies and install the needed packages.
- apt-get install <package-name>=<version> will install a package at the version specified
- apt-get install <package-name> -o DPkg::options::="--force-overwrite" installs a package ignoring "error processing ..., which is also in package ..." errors.
- apt-get remove <package-name> will remove the specified package but keep its configuration files.
- apt-get --purge remove <package-name> will remove the specified package and its configuration files.
- apt-get -u install <package-name> will upgrade and install a specific package.
- apt-get -u upgrade will upgrade packages within the same distribution packages except those which have been kept back because of broken dependencies or new dependencies.
- apt-get -u dist-upgrade will upgrade an entire Debian system at once.
apt-file
edit- apt-file search <file-name> will search for a package which includes the specified file.
- apt-file list <package-name> will list the contents of a package matching the pattern. This action is very close to the dpkg -S command except the package does not need to be installed or fetched.
Apt-cache
editTo find the name of a package that you want to install use apt-cache. apt-cache main options are :
- add - Add a package file to the source cache
- showpkg - Show some general information for a single package
- stats - Show some basic statistics
- search - Search the package list for a regex pattern
- show - Show a readable record for the package
- depends – Show raw dependency information for a package
user@host:~$ apt-cache search gimp babygimp - An icon editor in Perl-Tk blackbook - GTK+ Address Book Applet cupsys-driver-gimpprint - Gimp-Print printer drivers for CUPS escputil - A maintenance utility for Epson Stylus printers filmgimp - A motion picture editing and retouching tool
Resources
editAPT HOWTO
http://www.debian.org/doc/manuals/apt-howto/index.en.html
dselect Documentation for Beginners
http://www.debian.org/doc/manuals/dselect-beginner/
Exercises
edit- Install a system with Debian.
- Get familiar with dselect and remove the tcpdump utility.
- Install back with apt-get the package that contains the tcpdump utility.
- Try kpackage to install ethereal
Red Hat Package Manager is a powerful package manager, which can be used to build, install, query, verify, update, and erase individual software packages. A package consists of an archive of files and meta-data used to install and erase the archive files. The meta-data includes helper scripts, file attributes, and descriptive information about the package. Packages come in two varieties: binary packages, used to encapsulate software to be installed, and source packages, containing the source code and recipe necessary to produce binary packages.
Detailed Objective
edit(LPIC-1 Version 5.0)
Weight: 3
Description:
Candidates should be able to perform package management using RPM, YUM and Zypper.
Key Knowledge Areas:
- Install, re-install, upgrade and remove packages using RPM, YUM and Zypper.
- Obtain information on RPM packages such as version, status, dependencies, integrity and signatures.
- Determine what files a package provides, as well as find which package a specific file comes from.
- Awareness of
dnf
.
The following is a partial list of the used files, terms and utilities:
rpm
rpm2cpio
/etc/yum.conf
/etc/yum.repos.d/
yum
zypper
Red Hat Package Manager
editSome Linux distribution uses rpm the “Red Hat Package Manager” for all its distribution software. RPM maintains a detailed database of all software installed in the system.
To install a RPM package, do:
rpm -i [package].rpm
The package will be installed only if the dependency are met and there is no conflict with another package. To upgrade a package, do:
rpm -U [package].rpm
The files of the old package version will be removed and replaced by the new files. To remove a RPM package, do:
rpm -e [package].rpm
The package will be removed only if no other package depends on it.
RPM Queries
editWith the -q option you can query the RPM database or display information about package file.
There are several switches that you can use:
- -i: to get package information
rpm -q -i apache
- -l: To get a file list of a package.
$ rpm -q -l pciutils /sbin/lspci /sbin/setpci /usr/share/doc/package/pciutils ... /usr/share/pci.ids
- -f file: Query which package a file belongs to.
$ rpm -q -f /sbin/lspci pciutils-2.1.9-58
- -s: File list with status information.
- -d: list only documentation files.
- -a: List all the installed packages.
If you want to display information about package file you can specify filename using -p switch:
rpm -q -i -p [package].rpm
RPM Commands
editTo get general information on a package or program, use rpmlocate.
rpmlocate ipcs -q -i apache
Searching for ipcs in rpm db:
util-linux-2.11n-75: /usr/bin/ipcs /usr/share/man/man8/ipcs.8.gz
To list all the installed packages, use rpmqpack:
rpmqpack
Alternatively use:
rpm -qa
Source Installation
editThe RPM source files have generally the format package.src.rpm and can be installed the same way as binaries. The directories where they will be installed from /usr/src/packages are:
- SOURCES: For the original sources.
- SPECS: For the .spec file that controls the build process.
- BUILD: All the sources are built in this directory.
- RPMS: Where the complete binary packages are stored.
- SRPMS: The sources.
To install the source of a package, do:
$ rpm -i mypack.src.rpm
The source files will be stored in the /usr/src/packages in directories SPEC and SOURCES. To compile the sources, do:
$ rpm -ba /usr/src/packages/SPECS/mypack.spec
The result of the compilation will be stored in the BUILD directory
Exercises
edit- Is the apache package installed?
- In which package are the files /bin/ls, /usr/sbin/tcpdump, and /sbin/ifconfig?
- From the floppy disk install the pci utilities and grub packages. Build the binaries and try to execute them. The sources should be in the /usr/src/packages/BINARY directory.