Updated: 2014-12-01 13:37 EST

1 Due Date and Deliverables

Do not print this assignment on paper!

2 Purpose of this Assignment

This is a BONUS assignment for extra credit. It is optional.

This assignment is based on your weekly Class Notes.

  1. Review the Booting and GRUB commands in the Class Notes.
  2. Practice managing Booting and GRUB and run levels in your own virtual machine.

Remember to READ ALL THE WORDS to work effectively and not waste time.

3 Introduction and Overview

This is an overview of how you are expected to complete this assignment. Read all the words before you start working.

For full marks, follow these directions exactly.

Do not print this assignment on paper. On paper, you cannot follow any of the hyperlink URLs that lead you to hints and course notes relevant to answering a question. You also don’t get any of the later updates to the assignment.

  1. Complete the readings in your weekly Class Notes.
  2. Complete the Tasks listed below, in order.
  3. Verify your own work before running the Checking Program.
  4. Run the Checking Program to help you find errors.
  5. Submit the output of the Checking Program to Blackboard before the due date.
  6. READ ALL THE WORDS to work effectively and not waste time.

3.1 Save your work

You will create some minimal file system structure in your HOME directory on the CLS.

Most work will involve changes in your own Linux Virtual Machine running Centos 6.6. You can use the Checking Program to check your work as you go. You can check your work with the Checking Program as often as you like before you submit your final mark.

When you are finished, leave the files and directories in place on both the CLS and your own CentOS Virtual Machine as part of your deliverables. Do not delete any assignment work until after the term is over! Assignments may be re-marked at any time on the CLS; you must have your term work available on the CLS right until term end.

3.2 Searching the course notes on the CLS

All course notes are available on the Internet and also on the CLS. You can learn about how to read and search these CLS files using the command line on the CLS under the heading Copies of the CST8207 course notes near the bottom of the page Course Linux Server.

3.3 Commands, topics, and features covered

Review course notes Booting and GRUB.

Use the on-line help (man command) for the commands listed below for more information.

3.4 Correct user, command lines, and command output

3.5 Backup and Recovery on CentOS

  1. Take a snapshot of your virtual machine before you begin each section of this lab so that you can recover back to the snapshot if needed.
    • You can delete the unused snapshots if everything works well.
    • CentOS snapshots are very small and fast compared to your Windows snapshots; you can save lots of them.
  2. Are you keeping an external backup copy of all your coursework (including your virtual machines) somewhere? You should be!

3.6 Use a remote login, not the VMware console

I recommend that once you have booted your CentOS VM, you connect to it and work using a remote login session (e.g. ssh or PuTTY) where copy-and-paste works and where you can have multiple simultaneous connections into the VM. The VMware console is not friendly.

Note that SSH sessions (and whatever you are doing inside them) do not survive across a VMware suspend. Make sure you save your editor files and exit your SSH session before you pause or suspend your virtual machine. (Editor sessions inside the VMware console do survive across suspend and resume.) (Editor sessions that run inside the VMware console do survive across suspend and resume, since they don’t depend on a network connection.)

Advanced users may look into the various virtual terminal programs such as tmux and screen that do allow you to suspend and resume your sessions even from a remote login.

3.7 The Answer File answer.txt

Where you are required to record or save a command line or its output into The Answer File, do the command and then copy and record the command line or its output as a separate line into an answer.txt file in your CentOS Base Directory. You will be told how many lines to save in the file.

If you can’t answer a question, leave a blank line in this answer file. (The vim option :set number may be useful to you as you edit.)

You can use either nl or cat -n to show the contents of a file with line numbers, to make sure each answer is on its correct line number.

Warning: If you try to use appending redirection to write lines onto the end of this file, you can make a mistake and accidentally overwrite and erase the entire file. I recommend setting the shell option set -o noclobber to prevent overwriting the file.

4 Tasks

4.1 Set Up – The CLS and the Base Directory on CentOS

You must have successfully completed the CentOS Install and Configure to do this assignment.

  1. Create the CLS directory ~/CST8207-14F/Assignments/assignment13 on the Course Linux Server.

  2. Create the same directory in your sysadmin account on your CentOS VM. This CentOS directory will be the base directory for this assignment.

This CentOS assignment13 directory is the base directory for all pathnames in this assignment. Store your files and answers in this CentOS base assignment13 directory.

Pay careful attention to whether you are working on the CLS or CentOS, and which account you are using! Watch the userid and hostname values in your PS1 prompt string! All answer files in this assignment get stored in the CentOS base directory, not on the CLS.

4.2 Using a different GRUB configuration file

Review Booting and GRUB.

You can select a different GRUB configuration file at boot time.

  1. Record the number of lines in a standard Linux boot menu entry as Line 1 in The Answer File (one number).

  2. In your running CentOS VM, copy the current GRUB configuration file to a new file named myconfig in its same grub directory.
    • Record the Linux absolute pathname of the new file as Line 2 in The Answer File.
  3. Edit the myconfig file:
    1. On the title line of the first boot menu entry in the file, change the word CentOS to MY OWN CentOS
    2. Save the myconfig file.
  4. Compare the current GRUB configuration file with the new myconfig GRUB configuration file. The new file should have two more words. A file difference using the diff command should show the one line change, similar to this (your version number may differ):

    $ diff grub.conf myconfig
    14c14
    < title CentOS (2.6.32-504.1.3.el6.i686)
    ---
    > title MY OWN CentOS (2.6.32-504.1.3.el6.i686)

4.2.1 Previewing a new GRUB configuration file

You can preview much of a GRUB configuration file from multi-user mode without having to reboot the system to test it, but you can’t actually select a new kernel until you reboot.

  1. Record as Line 3 in The Answer File a GRUB pathname (using GRUB syntax) that refers to your new myconfig GRUB configuration file in its correct partition.
    • Recall that GRUB pathnames start with a device (partition).
    • You need to turn the Linux partition name into a GRUB name.
    • The resulting path name will be in the GRUB form: (xxx,x)/xxxxx
    • You will need this GRUB pathname shortly.
  2. GRUB can be run as a shell-like utility that has many built-in commands. Start the command-line GRUB utility by running the command named grub as root from your shell without rebooting the machine. When you run this grub command you will see a grub> prompt:

    # grub
    Probing devices to guess BIOS drives. This may take a long time.
    
        GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
    
     [ Minimal BASH-like line editing is supported.  For the first word, TAB
       lists possible command completions.  Anywhere else TAB lists the possible
       completions of a device/filename.]
    grub> 

    The comments about TAB completion don’t apply to this command-line version of GRUB. (Sorry – this is a bug!) TAB only works when GRUB is run at boot time as the boot loader.

  3. Type help at thegrub> prompt to see a partial list of GRUB utility commands. You can also type help commandname to get a bit more help on commandname
    • Note which GRUB command will quit GRUB and return you to your BASH shell prompt. (^C will also terminate this GRUB utility.)
    • Note which GRUB command will load a new configuration file. (You will need this command name shortly.)
    • Note (and try) which GRUB command will display partitions on a disk:

      grub> geometry (hd0)
      drive 0x80: C/H/S = 261/255/63, The number of sectors = 4194304, /dev/sda
         Partition num: 0,  Filesystem type is ext2fs, partition type 0x83
         Partition num: 1,  Filesystem type unknown, partition type 0x82
      
      grub> geometry (hd1)
      drive 0x81: C/H/S = 130/255/63, The number of sectors = 2097152, /dev/sdb
         Partition num: 0,  Filesystem type is ext2fs, partition type 0x83
         Partition num: 1,  Filesystem type is ext2fs, partition type 0x83
         Partition num: 3,  Filesystem type is fat, partition type 0xc
         Partition num: 4,  Filesystem type unknown, partition type 0x82
         Partition num: 5,  Filesystem type unknown, partition type 0x7

    GRUB is not very intelligent about the file systems inside partitions. Above, it mistakes both ext3 and ext4 file systems as type ext2fs. (You can actually mount both ext3 and ext4 file systems as type ext2 and the journalling feature will be disabled. Don’t do it!)

    • Note (and try) which GRUB command displays (and sets) the current partition/device prefix, and which command displays a text file:

      grub> cat /etc/hosts
      Error 1: Invalid device requested
      
      grub> root
       (fd0): Filesystem type unknown, partition type 0x0
      
      grub> root (hd0,0)
       Filesystem type is ext2fs, partition type 0x83
      
      grub> root
       (hd0,0): Filesystem type is ext2fs, partition type 0x83
      
      grub> cat /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      127.0.0.2   abcd0001
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. Choose the GRUB utility command that loads a configuration file and run that command now with an argument that is your new myconfig file name:
    • The configuration file name must be given in full GRUB pathname form, including the partition name, just as you recorded earlier.
    • As a file name argument to the configfile command you will need to specify both the partition and the pathname to the new GRUB configuration file you edited above.
    • The errors Invalid device requested and/or Cannot mount selected partition mean you didn’t get the GRUB partition part of the pathname correct.
    • The error File not found means you didn’t get the pathname inside the partition correct.
    • The error Selected disk does not exist might mean you don’t have enough permissions – what user is supposed to be running this GRUB utility?
    • Keep trying until you get it right and you see the output below:
  5. When you get the configfile command and GRUB pathname to your myconfig file right, you will see output similar to this (your version number may differ):

        GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
    -------------------------------------------------------------------
     0: MY OWN CentOS (2.6.32-504.1.3.el6.i686)
     1: CentOS 6 (2.6.32-504.el6.i686)
    -------------------------------------------------------------------
          Use the ^ and v keys to select which entry is highlighted.
          Press enter to boot the selected OS, 'e' to edit the
          commands before booting, 'a' to modify the kernel arguments
          before booting, or 'c' for a command-line.

    Ignore the information about which keys work – none of these keys work in this command-line version of GRUB. The keys only work after a reboot in the boot loader version of GRUB. We are only using GRUB in command-line mode to preview our GRUB menu to make sure it works.

  6. When you see the expected MY OWN CentOS menu, break out of (interrupt) the GRUB utility and return to the BASH shell prompt.
    • You have confirmed that your new GRUB configuration file works.
    • You cannot actually select and run any boot menu entries in the command-line version of GRUB. To actually select a kernel, you would have to reboot into the real GRUB boot loader, but don’t do that yet.
    • If you don’t see the MY OWN CentOS menu, edit and fix the myconfig file until you do.

4.2.2 Run the new GRUB configuration file

  1. When you have successfully previewed your new GRUB configuration file above and you see your MY OWN CentOS menu entry, as shown above, you are ready to try your new file in the real GRUB boot process:
    1. Safely reboot your CentOS VM into the standard GRUB menu (the one that doesn’t have your changes).
    2. As you did before, interrupt the GRUB countdown timer.
    3. Follow the GRUB directions on your screen and type the correct letter key to start up a GRUB command line. GRUB will then prompt with the usual grub> prompt.
    4. At the grub> prompt, use the exact same configfile line you used earlier to select your new myconfig GRUB configuration file. (In this boot loader version of GRUB, TAB completion now works for both GRUB command names, disk names, partition names, and file names. Use TAB to help you type the correct GRUB command line.)
    5. When you load your new configuration file inside the boot loader version of GRUB, you should see your MY OWN CentOS menu entry, like this (your version number and the number of boot menu entries may differ):
CentOS 6 myconfig configuration file

CentOS 6 myconfig configuration file

  1. Let the time out expire to boot your system, or use the [Enter] key.

Run the Fetch and Checking Program to verify your work so far.

4.3 Configure a second GRUB boot menu

We will now create a new GRUB configuration file with a second boot menu entry.

  1. In your running CentOS VM, copy the standard GRUB configuration file (not the one you just created) to a new file named newconfig in its same grub directory.
    • Record the Linux absolute pathname of the new file as Line 4 in The Answer File.
  2. Edit the newconfig file to create a duplicate of the first boot menu entry that will boot the machine single-user as follows:
    1. Copy the first four-line boot menu entry in the file and create a new four-line boot menu entry below it. (Copy and paste four lines in the file. In vim put your cursor on the first line to copy and type 4yyP.)
      • Make sure you use upper-case P to paste!
      • The new four-line boot menu entry must start out as an exact copy of the original four-line boot menu entry.
      • Do not make any changes to the first four-line boot menu entry.
    2. On the title line of the second boot menu entry change the word CentOS to single user CentOS
    3. In the second boot menu entry add the kernel option to boot in single-user mode, just as you did earlier when booting single-user from the live GRUB menu.
    4. Save your changes. Your new newconfig configuration file will now be four lines longer than the standard GRUB file.
  3. To make sure your newconfig file works before you reboot, preview your configuration file changes using the grub utility run from the shell as you did before. You should see this multi-line menu as preview output when you load your newconfig configuration file into GRUB, similar to this (your version number and the number of boot menu entries may differ):

        GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
    -------------------------------------------------------------------
     0: CentOS (2.6.32-504.1.3.el6.i686)
     1: single user CentOS (2.6.32-504.1.3.el6.i686)
     2: CentOS 6 (2.6.32-504.el6.i686)
    -------------------------------------------------------------------
  4. When you have the preview working, safely reboot and run your new GRUB newconfig configuration file using the same method as you did earlier to run the myconfig file.
    • Make sure you see both choices in your GRUB menu now
  5. Select the single-user choice. It must boot the machine into the single-user root shell with no password required.

  6. Leave single-user mode and continue the boot process into standard multi-user mode (with a login prompt).
    • Know how to exit from single-user mode and come up to multi-user without rebooting the machine.

Run the Fetch and Checking Program to verify your work so far.

4.4 Changing System V Run Levels and Services

See the course notes on Legacy Run Levels and Services. As with most system maintenance activities, you will need to use the root user to run the privileged commands in this section.

  1. If not already logged in, log in to the CentOS VM console (not via SSH) as your ordinary (non-root) sysadmin account.
    • You will see console messages if you are logged in to the console, which you will not see using an SSH terminal connection.
  2. Use a command to list all services and all run level information into file chkconfig-before.txt in your CentOS assignment13 directory. It should be approximately 22 lines. Two of the lines should look like this:

    ntpdate         0:off   1:off   2:off   3:off   4:off   5:off   6:off
    postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  3. Use the same command name to enable (turn on) the NTP Date service only in Run Level 4 (a normally unused Run Level in CentOS).

  4. Use the same command name to disable (turn off) the above Postfix Mail Service service in Run Level 4.

  5. Save a second listing of all services and all run levels into file chkconfig-after.txt in your CentOS assignment13 directory. It should still be approximately 22 lines. Two of the lines should now look like this:

    ntpdate         0:off   1:off   2:off   3:off   4:on    5:off   6:off
    postfix         0:off   1:off   2:on    3:on    4:off   5:on    6:off
  6. Use the diff command to compare the before listing file with the after listing file. Only two lines should have changed.

  7. Run a command to show a full list of all processes for all users, BSD format, text user name (not numeric UID), full wide listing (not truncated at all) and search for any lines containing the string postfix.
    • You will see about three or four lines.
    • Save those three or four lines into a postfix.txt file.
  8. Record as Line 5 in The Answer File the Linux absolute pathname of the system configuration file that gives the default Run Level for your CentOS system.

  9. Record as Line 6 in The Answer File the one line from the above system configuration file that sets the default Run Level for your CentOS system. (Hint: It’s the only non-comment line in the file!)

  10. Use a command to confirm that your current Run Level is the same as the CentOS default Run Level. (This should be true unless you are running in single-user mode, which you should not be.)

  11. On the system console, use a command to change from the current Run Level (which should be the default) to Run Level 4. You will see (only if logged in on the console) various status messages about services that stop and start:
    • The Postfix service will announce that it is shutting down.
    • The udev event manager will retrigger some events.
    • The ntpdate service will try to synchronize the time, and fail.
  12. Use the command that displays the previous and current Run Level (two words on one line) and record this line of output as Line 7 in The Answer File.

  13. In a system log file, find the reason that the ntpdate service did not work:
    • How do you know which [System Log Files] were modified most recently? Those log files are the files you should look in for the log message.
    • The message from ntpdate talks about a socket being in use.
    • When you find the right log file name, record the Linux absolute pathname of the correct log file as Line 8 in The Answer File.
    • Record this last ntpdate log message as Line 9 in The Answer File.
  14. Run a command to show a full list of all processes for all users, BSD format, text user name (not numeric UID), full wide listing (not truncated at all) and again search for any processes running as the postfix userid.
    • No processes running as the postfix userid will be found. (You might see a process run by you, searching for postfix.)
  15. On the system console, use a command to change from the current Run Level 4 back to the CentOS system default Run Level. You will again see (only if logged in on the console) various status messages about services that stop and start:
    • The udev event manager will retrigger some events.
    • The Postfix service will announce that it is starting.
  16. Use the command that displays the previous and current Run Level (two words on one line) and record this line of output as Line 10 in The Answer File.

  17. Confirm that the postfix processes are again running.

Run the Fetch and Checking Program to verify your work so far.

4.5 Manually Starting/Stopping Services

See the section on Starting and Stopping Services in the Booting and GRUB page. As with most system maintenance activities, you will need to use the root user to run the privileged commands in this section.

  1. Make sure your system is running as the default CentOS Run Level.

  2. Use a command to ask for the service status of the postfix service:
    • The output of the command will include the pid of the service and say that the master process is running.
    • Record the one line of output (with the pid) as Line 11 in The Answer File.
    • Hint: Do not use any command name not taught in this course. Review the List of Command Names taught in this course.
  3. Use the same command name to stop the postfix service:
    • You will see one line of logging information saying: Shutting down postfix: [ OK ]
  4. Use the same command name to ask for the service status of the postfix service:
    • The output of the command will say that the master service is stopped.
    • Record the one line of output from the command as Line 12 in The Answer File. (Record the stopped output line from the status command, not the Shutting down logging information.)
  5. Use a command to start the postfix service:
    • You will see one line of logging information saying: Starting postfix: [ OK ]
  6. Use the same command name to try to start the ntpdate service:
    • The command will pause for a minute or so.
    • You will see one line of logging information saying: [FAILED]
    • The system log file will tell you why it failed.

Run the Fetch and Checking Program to verify your work so far.

4.6 When you are done

That is all the tasks you need to do.

Log in to the CLS and submit your mark from the CLS following the Checking Program instructions below.

Optional: Keeping your main configuration snapshots, remove any intermediate snapshots you no longer require, to free up disk space. - Be careful not to remove your current work!

5 Checking, Marking, and Submitting your Work

See CentOS: Remote Checking, Marking, and Submitting your Work.

Author: 
| Ian! D. Allen  -  idallen@idallen.ca  -  Ottawa, Ontario, Canada
| Home Page: http://idallen.com/   Contact Improv: http://contactimprov.ca/
| College professor (Free/Libre GNU+Linux) at: http://teaching.idallen.com/
| Defend digital freedom:  http://eff.org/  and have fun:  http://fools.ca/

Plain Text - plain text version of this page in Pandoc Markdown format

Campaign for non-browser-specific HTML   Valid XHTML 1.0 Transitional   Valid CSS!   Creative Commons by nc sa 3.0   Hacker Ideals Emblem   Author Ian! D. Allen