% CST8207 Assignment 13 – BONUS CentOS: GRUB, Run Levels, services % Ian! D. Allen – – [www.idallen.com] % Fall 2014 - September to December 2014 - Updated Mon Dec 1 13:37:29 EST 2014 Due Date and Deliverables ========================= > **Do not print this assignment on paper!** > > - On paper, you will miss updates, corrections, and hints added to the > online version. > - On paper, you cannot follow any of the [hyperlink URLs] that lead you > to hints and course notes relevant to answering a question. > - On paper, scrolling text boxes will be cut off and not print properly. - **Due Date**: `23h59 (11:59pm) Friday December 5, 2014 (end of Week 14)` - This is a **Bonus** assignment worth extra marks. It is optional. - Late assignments or wrong file names may not be marked. Please be accurate and punctual. - College policy does not allow assignments to be due after classes end. - **Available online** - Version 1 – 16:00 November 28, 2014 - **Prerequisites** - All [Class Notes][hyperlink URLs] since the beginning of term. - All your previous [Assignments] and [Worksheets]. - Completed [CentOS Install and Configure] virtual machine installation (done in a previous assignment). - An ability to **READ ALL THE WORDS** to work effectively. - **Deliverables** 1. Modifications to your [CentOS Install and Configure] as given in this assignment. - **Do not delete any assignment work from your CentOS VM until after the term is over!** 2. One plain text file uploaded to Blackboard according to the steps in the [Checking Program] section below. 3. Directory structure and files created and left for marking on the [Course Linux Server] (**CLS**).\ **Do not delete any assignment work from the CLS until after the term is over!** 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. 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. 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. 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]. 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. - `chkconfig` – display or change Run Level information and services - `grub` – **GRand Unified Bootloader** (legacy version 0.9x - **not** the Version 2 GRUB numbered 1.9x). The man page is useless. See this instead: [GRUB manual] - `runlevel` – display previous and current Run Level - `telinit` – change Run Levels - `uname` – print system information: display system name, kernel **release** and **version** number, machine, processor, and O/S type - `/etc/inittab` – documentation on Run Levels; contains the default Run Level - `/boot/grub/grub.conf` – the GRUB Legacy (version 1) configuration file Correct user, command lines, and command output ----------------------------------------------- - Parts of this lab must be done using `root` user privileges (i.e. using `sudo`). - If you start a `root` subshell, your prompt will tell you if you are the `root` user by changing to include a `#` character instead of a `$` character. You can also use the commands `id` or `whoami` to show your current userid. - Some answers require you to record **command lines**. Do **not** include the shell **prompt** with your command lines. Give only the part of the command line that you would type yourself. - Make sure you know the difference between a command **line** (which is what you type into the shell) and command **output** (which is what the command displays on your screen). Pay attention to whether the question asks you to record the command **line** or the command **output**. 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!* 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. 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. Tasks ===== - Do the following tasks in order, from top to bottom. - Pay attention as to which tasks must be done in your own CentOS VM and which must be done in your account on the [Course Linux Server]. **Put the escape for your current machine name into your SHELL prompt so you know which machine you are working on!** - Tasks done on your own Centos VM require you to run a marking program in that Virtual machine. That marking program will transfer marking data from the VM to the CLS for marking. - Your instructor will mark on the due date the work transferred to account on the CLS. Leave all your work on the CLS and do not modify it. - **Do not delete any assignment work from the CLS until after the course is over.** - **READ ALL THE WORDS!** and do not skip steps. 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. 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: a) On the `title` line of the first **boot menu entry** in the file, change the word `CentOS` to `MY OWN CentOS` b) 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) ### 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 the`grub>` 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. ### 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: a) Safely reboot your CentOS VM into the standard GRUB menu (the one that doesn’t have your changes). b) As you did before, interrupt the GRUB countdown timer. c) 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. d) 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.) e) 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] 2. 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. 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: a) 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**. b) On the `title` line of the second **boot menu entry** change the word `CentOS` to `single user CentOS` c) 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. d) 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. 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. Manually Starting/Stopping Services ----------------------------------- See the section on Starting and Stopping Services in the [Booting and GRUB][1] 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. 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! Checking, Marking, and Submitting your Work =========================================== See [CentOS: Remote Checking, Marking, and Submitting your Work]. -- | 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 [www.idallen.com]: http://www.idallen.com/ [hyperlink URLs]: indexcgi.cgi#XImportant_Notes__alphabetical_order_ [Assignments]: indexcgi.cgi#XAssignments [Worksheets]: indexcgi.cgi#XWorksheets__not_for_hand_in_ [CentOS Install and Configure]: 000_centos_install.html [Checking Program]: #checking-marking-and-submitting-your-work [Course Linux Server]: 070_course_linux_server.html [Booting and GRUB]: 750_booting_and_grub.html [GRUB manual]: http://www.dedoimedo.com/computers/grub.html [The Answer File]: #the-answer-file-answer.txt [Base Directory]: #set-up-the-cls-and-the-base-directory-on-centos [CentOS 6 myconfig configuration file]: data/centos64_myconfig1.png "CentOS 6 myconfig configuration file" [Legacy Run Levels and Services]: 750_booting_and_grub.html#legacy-run-levels-and-services [1]: 750_booting_and_grub.html#starting-and-stopping-services-using-service [List of Command Names]: 900_unix_command_list.html [CentOS: Remote Checking, Marking, and Submitting your Work]: 000_centos_marking.html [Plain Text]: assignment13.txt [Pandoc Markdown]: http://johnmacfarlane.net/pandoc/