> For the complete documentation index, see [llms.txt](https://alicenab.gitbook.io/linux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://alicenab.gitbook.io/linux/redhat/book-tasks.md).

# Book tasks:

#### Instructions:

1. **Display the current time and date:** Use the `date` command to display the current time and date.
2. **Display current time in 24-hour clock format:** Use the format string `%R` with the `date` command to display the time in 24-hour format (e.g., 13:57).
3. **Check the file type of `/home/student/zcat`:** Determine the type of file `/home/student/zcat` is and whether it is human-readable.
4. **Check the size of `zcat`:** Use the `wc` command and Bash shortcuts to display the size of the `zcat` file.
5. **Display the first 10 lines of the `zcat` file:** Use the appropriate command to show the first 10 lines of the file.
6. **Display the last 10 lines of the `zcat` file:** Use the command to display the last 10 lines of the `zcat` file.
7. **Repeat the previous command with minimal keystrokes:** Repeat the previous step with four or fewer keystrokes using a shortcut.
8. **Display the last 20 lines of the `zcat` file:** Use the `tail` command with the `-n 20` option to display the last 20 lines of the file.
9. **Run the `date` command again using shell history:** Use the shell history to run the `date +%R` command again.

#### Instructions

1. Use the `ssh` command to log in to the `serverb` machine as the `student` user. The system's configuration supports the use of SSH keys for authentication.
2. Create a directory called `project_plans` in the `Documents` directory. The `Documents` directory should be placed in the `student` user's home directory. Create two empty files in the `project_plans` directory called `season1_project_plan.odf` and `season2_project_plan.odf`.\
   *Hint: If the `~/Documents` directory does not exist, then use the `mkdir -p` option to create it.*
3. Create sets of empty practice files to use in this lab. If you do not immediately recognize the intended shell expansion shortcut, then use the solution to learn and practice.
4. Use shell tab completion to locate file path names easily. Create 12 files with names `tv_seasonX_episodeY.ogg` in the `/home/student` directory. Replace `X` with the season number and `Y` with that season's episode, for two seasons of six episodes each.
5. As the author of a successful series of mystery novels, you are editing your next bestseller's chapters for publishing. Create eight files with names `mystery_chapterX.odf`. Replace `X` with the numbers 1 through 8.
6. Use a single command to create two subdirectories called `season1` and `season2` under the `Videos` directory to organize the TV episodes. Move the appropriate TV episodes into the season subdirectories. Use only two commands, and specify destinations with relative syntax.
7. Create a two-level directory hierarchy with a single command to organize the mystery book chapters. Create the `my_bestseller` subdirectory under the `Documents` directory, and the `chapters` subdirectory under the new `my_bestseller` directory. Create three more subdirectories directly under the `my_bestseller` directory with a single command. Name these subdirectories `editor`, `changes`, and `vacation`. You do not need to use the `mkdir -p` command to create parents because the `my_bestseller` parent directory exists.
8. Change to the `chapters` directory. Use the tilde (`~`) home directory shortcut to move all book chapters to the `chapters` directory, which is now your current directory. Use the simplest syntax to specify the destination directory.
9. You want to send the first two chapters to the editor for review. Move only those two chapters to the `editor` directory to avoid modifying them during the review. Starting from the `chapters` subdirectory, use brace expansion with a range to specify the chapter file names to move and a relative path for the destination directory.
10. While on vacation, you intend to write chapters 7 and 8. Use a single command to move the files from the `chapters` directory to the `vacation` directory. Specify the chapter file names by using brace expansion with a list of strings and without using wildcard characters.
11. Change your working directory to `~/Videos/season2`, and then copy the first episode of the season to the `vacation` directory. Use a single `cd` command to change from your working directory to the `~/Documents/my_bestseller/vacation` directory. List its files. Use the previous working directory argument to return to the `season2` directory. (This argument succeeds if the last directory change with the `cd` command used one command rather than several `cd` commands.) From the `season2` directory, copy the episode 2 file into the `vacation` directory. Use the shortcut again to return to the `vacation` directory.
12. The authors of chapters 5 and 6 want to experiment with possible changes. Copy both files from the `~/Documents/my_bestseller/chapters` directory to the `~/Documents/my_bestseller/changes` directory to prevent these changes from modifying original files.
13. Navigate to the `~/Documents/my_bestseller` directory. Use square-bracket pattern matching to specify which chapter numbers to match in the filename argument of the `cp` command.
14. Change your current directory to the `changes` directory and use the `date +%F` command with command substitution to copy `mystery_chapter5.odf` to a new file that includes the full date. Use the `mystery_chapter5_YYYY-MM-DD.odf` name format.
15. By using command substitution with the `date +%s` command, make another copy of `mystery_chapter5.odf`, and append the current time stamp (as the number of seconds since the epoch, 1970-01-01 00:00 UTC) to ensure a unique file name.
16. After further review, you decide that you do not need the plot changes. Delete the `changes` directory.
17. If it is necessary, then navigate to the `changes` directory and delete all the files within the directory. You cannot delete a directory while it is the current working directory.
18. Change to the parent directory of the `changes` directory. Try to delete the empty directory by using the `rm` command without the `-r` recursive option. This attempt should fail. Finally, use the `rmdir` command to delete the empty directory, which succeeds.
19. When the vacation is over, you no longer need the `vacation` directory. Delete it by using the `rm` command with the recursive option.
20. When finished, return to the student user's home directory.
21. Create a hard link to the `~/Documents/project_plans/season2_project_plan.odf` file called `~/Documents/backups/season2_project_plan.odf.back`. A hard link protects against accidental deletion of the original file and keeps the backup file updated as you change the original file.\
    *Hint: If the `~/Documents/backups` directory does not exist, then use the `mkdir` command to create it.*

#### Instructions

1. On the workstation machine, determine how to prepare a man page for printing. Specifically, find which is the default format or rendering language for printing.
2. Create a PostScript formatted output file of the passwd man page. Call the file `passwd.ps` and place it in the student user's home directory. Determine the file content format.\
   Inspect the contents of the `passwd.ps` file by using the `less` command.\
   **Note:** As you need to save the output of the man command to a file, you can use the `>` symbol, which redirects the standard output to a file.\
   As an example, the following command lists the home directory's regular file names into a file:

   ```bash
   bashCopy code[student@workstation ~]$ ls > /tmp/my-file-names
   ```

   This command is taught in more detail in a following chapter.
3. By using the man pages, find which commands you can use for viewing and printing PostScript files.
4. Learn how to use the `evince(1)` viewer in preview mode. Also, determine how to open a document to start on a specific page.\
   Open your PostScript file by using `evince` three times:
   * First by using the default mode,
   * Then with the preview mode option,
   * And finally to start at page 3.\
     Close your document file when you finish.
5. By using the man pages, research `lp(1)` to determine how to print any document to start on a specific page.
6. Without entering any commands (in the absence of printers), learn the syntax, in one command, to print only pages 2 and 3 of your PostScript file.
7. Use the Firefox browser to open the system's man page directory (`/usr/share/doc`) and browse into the man-db package subdirectory.
8. View the provided manuals. After you finish reviewing the man-db manuals, locate and browse to the `kexec-tools` package subdirectory.\
   View the `kexec-kdump-howto.txt` file, which describes important system configuration options that are stored in the `/etc/sysconfig` directory.

#### Instructions

1. On workstation, create the `lab_file` shell variable and assign `editing_final_lab.txt` as the value.
2. List the student home directory, including hidden directories and files, and redirect the output to the `editing_final_lab.txt` file by using the shell variable.
3. Use Vim to edit the `editing_final_lab.txt` file. Use the `lab_file` shell variable.
4. Enter the line-based visual mode of Vim. Your screen output may be different than these examples. Remove the first three lines of the `editing_final_lab.txt` file.
5. Enter the visual mode of Vim. Remove the last seven characters from the first column on the first line. Preserve only the first four characters of the first column.
6. Use the arrow keys to position the cursor at the last character of the first column on the first line. Delete the selection by typing `x`.
7. Enter the visual block mode of Vim. Repeat the operation of the previous step, but this time select from the second to the last line. Preserve only the first four characters of the first column.
8. Enter the visual block mode of Vim and remove the fourth column of the file.
9. Enter the visual block mode of Vim to remove the time column, leaving the month and day columns on all lines.
10. Enter the visual line mode of Vim and remove the rows that contain the `Desktop` and `Public` strings.
11. Save your changes and exit the file.
12. Back up the `editing_final_lab.txt` file and append the date (in seconds) at the end of the file name preceded with an underscore (`_`) character. Use the `lab_file` shell variable.
13. Append a dashed line to the `editing_final_lab.txt` file. The dashed line should contain 12 dash (`-`) characters for this lab to be graded correctly. Use the `lab_file` shell variable.
14. List the content of the `Document` directory and redirect the output to the `editing_final_lab.txt` file. Use the `lab_file` shell variable.
15. Confirm that the directory listing is at the bottom of the lab file. Use the `lab_file` shell variable.

#### Instructions

1. From the workstation machine, open an SSH session to the `serverb` machine as the `student` user and switch to the root user.
2. On the `serverb` machine, ensure that newly created users must change their passwords every 30 days.
3. Create the `consultants` group with a GID of 35000.
4. Configure administrative rights to enable all `consultants` group members to execute any command as any user.
5. Create the `consultant1`, `consultant2`, and `consultant3` users with the `consultants` group as their secondary group.
6. Set the `consultant1`, `consultant2`, and `consultant3` passwords to `redhat`.
7. Set the `consultant1`, `consultant2`, and `consultant3` accounts to expire in 90 days from the current day.
8. Change the password policy for the `consultant2` account to require a new password every 15 days.
9. Additionally, force the `consultant1`, `consultant2`, and `consultant3` users to change their passwords on the first login.

#### Instructions

1. Log in to `serverb` as the `student` user. Switch to the root user, and use `redhat` as the password.
2. Create a `/home/techdocs` directory.
3. Change the group ownership of the `/home/techdocs` directory to the `techdocs` group.
4. Verify that users in the `techdocs` group cannot create files in the `/home/techdocs` directory.
5. Set permissions on the `/home/techdocs` directory. On the `/home/techdocs` directory, configure:
   * setgid (2),
   * read, write, and execute permissions (7) for the owner/user and group,
   * no permissions (0) for other users.
6. Verify that the permissions are set properly.
7. The `techdocs` group now has write permission.
8. Confirm that users in the `techdocs` group can now create and edit files in the `/home/techdocs` directory. Users that are not in the `techdocs` group cannot edit or create files in the `/home/techdocs` directory. The `tech1` and `tech2` users are in the `techdocs` group. The `database1` user is not in that group.
9. Modify the global login scripts. Normal users should have a `umask` setting that allows the user and group to create, write, and execute files and directories, while preventing other users from viewing, modifying, or executing new files and directories.

#### Instructions

1. On workstation, open two terminal windows side by side. In this section, these terminals are referred to as left and right. On each terminal window, log in to `serverb` as the `student` user.\
   Create the `process101` script in the `/home/student/bin` directory. The `process101` script generates artificial CPU load:

   ```bash
   bashCopy code#!/bin/bash
   while true; do
     var=1
     while [[ var -lt 50000 ]]; do
       var=$(($var+1))
     done
     sleep 1
   done
   ```
2. In the right terminal shell, run the `top` utility.
3. In the left terminal shell, verify the number of logical CPUs on the virtual machine. Run the `process101` script in the background.
4. In the right terminal shell, observe the `top` display. Note the process ID (PID) and view the CPU percentage that the `process101` process uses. The CPU percentage that the process uses should hover around 10% to 15%. Toggle the `top` utility display between load, threads, and memory. Return to the CPU usage display of the `top` utility.
5. Turn off the use of bold in the display. Save this configuration for reuse when `top` is restarted. Confirm that the changes are saved.
6. Copy the `process101` script to a new `process102` file, and increase the artificial CPU load to one hundred thousand in the new script. Start the `process102` process in the background.
7. In the right terminal shell, verify that the `process102` is running and uses the most CPU resources. The load should hover between 25% and 35%.
8. Notice that the load average is below 1. Copy the `process101` script to a new script called `process103`. Increase the addition count to eight hundred thousand. Start `process103` in the background. Confirm that the load average is above 1. It may take a few minutes for the load average to change.
9. In the left terminal shell, switch to the root user. Suspend the `process101` process. List the remaining jobs. Observe that the process state for `process101` is now in the T state.
10. Resume the `process101` process.
11. Terminate `process101`, `process102`, and `process103` from the command line. Verify that the processes are no longer displayed in `top`.
12. Stop processes and return to the workstation machine.

#### Instructions

1. Use the `ssh` command to log in to the `serverb` machine as the `student` user. On the `serverb` machine, start the `psacct` service.
2. Configure the `psacct` service to start at system boot.
3. Stop the `rsyslog` service.
4. Configure the `rsyslog` service so that it does not start at system boot.
5. Reboot the `serverb` machine before evaluating the lab.

#### Instructions

1. From the workstation machine, log in to the `servera` machine as the `student` user.
2. Switch to the `production1` user on the `servera` machine. Enter `redhat` as the password.
3. Generate passphrase-less SSH keys for the `production1` user on the `servera` machine.
4. Send the public key of the SSH key pair to the `production1` user on the `serverb` machine.
5. Verify that the `production1` user can successfully log in to the `serverb` machine with the SSH keys.
6. Configure the `sshd` service on `serverb` to prevent users from logging in as the root user. Use `redhat` as the root password.
7. Configure the `sshd` service on the `serverb` machine to allow users to authenticate with SSH keys only, rather than with their passwords.

#### Instructions

1. Log in to the `serverb` machine as the `student` user.
2. Pretend that the `serverb` machine is relocated to Jamaica and that you must update the time zone. Verify that you correctly set the appropriate time zone.
3. View the recorded log events in the previous 30 minutes on the `serverb` machine.
4. Create the `/etc/rsyslog.d/auth-errors.conf` file. Configure the `rsyslog` service to write authentication and security messages to the `/var/log/auth-errors` file. Use the `authpriv` facility and the `alert` priority.

#### Instructions

1. Log in to the `serverb` machine as the `student` user. Switch to the root user.
2. Create a connection with a static network configuration by using the settings in the table:

   | Parameter       | Setting                                                                       |
   | --------------- | ----------------------------------------------------------------------------- |
   | Connection name | lab                                                                           |
   | Interface name  | enX (might vary; use the interface with 52:54:00:00:fa:0b as its MAC address) |
   | IP address      | 172.25.250.11/24                                                              |
   | Gateway address | 172.25.250.254                                                                |
   | DNS address     | 172.25.250.254                                                                |
3. Configure the new connection to start automatically. Other connections should not start automatically.
4. Modify the new connection so that it also uses the IP address `10.0.1.1/24`.
5. Configure the hosts file so that you can reference the `10.0.1.1` IP address with the private name.
6. Reboot the system.
7. Verify that the `serverb` machine is initialized.

#### Instructions

1. On `serverb`, synchronize the `/etc` directory tree from `servera` to the `/configsync` directory.
2. Create a `configfile-backup-servera.tar.gz` archive with the `/configsync` directory contents.
3. Securely copy the `/root/configfile-backup-servera.tar.gz` archive file from `serverb` to the `/home/student` directory on `workstation`.
4. On `workstation`, extract the contents to the `/tmp/savedconfig/` directory.

#### Instructions

1. On the `serverb` machine, configure a software repository to obtain updates. Name the repository `errata` and configure the repository in the `/etc/yum.repos.d/errata.repo` file.\
   Configure the `errata.repo` file to use the `http://content.example.com/rhel9.0/x86_64/rhcsa-practice/errata` repository. Do not check GPG signatures.
2. On `serverb`, install the `rht-system` package.
3. For security reasons, the `serverb` machine must not be able to connect to a paper printer. You can achieve this effect by removing the `cups` package. When finished, exit from the root shell.
4. The start script downloads the `rhcsa-script-1.0.0-1.noarch.rpm` package in the `/home/student` directory on the `serverb` machine.
5. Confirm that the `rhcsa-script-1.0.0-1.noarch.rpm` package is available on `serverb` and install it using root privileges. Verify that the package is installed.
6. Exit from the `serverb` machine.

#### Instructions

1. On the `serverb` machine as the root user, identify the UUID for the `/dev/vdb1` device, and mount it by using its UUID on the `/mnt/freespace` directory.
2. Generate a disk usage report for the `/usr/share` directory. Save the result in the `/mnt/freespace/results.txt` file.
3. Find all `rsyslog.conf` configuration files and store the result in the `/mnt/freespace/search1.txt` file.
4. Store the search result of all files in the `/usr/share` directory that are greater than 50 MB and less than 100 MB in the `/mnt/freespace/search2.txt` file.
5. Return to the `workstation` system as the `student` user.

***

#### Instructions

1. Create the `/home/student/bin/bash-lab` script file on the `workstation` machine. The initial content in the script will be the shebang interpreter directive.
2. Edit your newly created script file to comply with the following requested information from the `servera` and `serverb` hosts. The systems use SSH keys for authentication, and therefore you do not require a password.

   | **Command or file**   | **Content requested**                                |
   | --------------------- | ---------------------------------------------------- |
   | `hostname -f`         | Get all the output.                                  |
   | `echo "#####"`        | Get all the output.                                  |
   | `lscpu`               | Get only the lines that start with the string `CPU`. |
   | `echo "#####"`        | Get all the output.                                  |
   | `/etc/selinux/config` | Ignore empty lines. Ignore lines starting with `#`.  |
   | `echo "#####"`        | Get all the output.                                  |
   | `/var/log/secure`     | Get all "Failed password" entries.                   |
   | `echo "#####"`        | Get all the output.                                  |

   Save the required information to the `output-servera` and `output-serverb` files in the `/home/student` directory on `workstation`.

   **Note:**\
   You can use the `sudo` command without requiring a password on the `servera` and `serverb` hosts. Remember to use a loop to simplify your script. You can also use multiple `grep` commands that are concatenated with the use of the pipe character (`|`).
3. Execute the `/home/student/bin/bash-lab` script, and review the output content on `workstation`.

#### Instructions

1. Change the current tuning profile for the `serverb` machine to the balanced profile, a general non-specialized tuned profile.\
   List the information for the balanced tuning profile when it is the current tuning profile.
2. Two processes on `serverb` are consuming a high percentage of CPU usage. Adjust each process's nice level to 10 to allow more CPU time for other processes.

#### Instructions

1. Log in to the `serverb` machine as the `student` user and switch to the root user.
2. From a web browser on the `workstation` machine, view the `http://serverb/lab.html` web page. You see the error message: "You do not have permission to access this resource."
3. Research and identify the SELinux issue that prevents the Apache service from serving web content.
4. Display the SELinux context of the new HTTP document directory and the original HTTP document directory.
5. Resolve the SELinux issue that prevents the Apache server from serving web content.
6. Verify that the Apache server can now serve web content.
7. Return to the `workstation` machine as the `student` user.

#### Instructions

1. The `serverb` machine has several unused disks. On the first unused disk, create a 2 GB GPT backup partition. Because it is difficult to set an exact size, a size between 1.8 GB and 2.2 GB is acceptable.
2. Configure the backup partition to host an XFS file system.
3. Format the 2 GB backup partition with an XFS file system and persistently mount it to the `/backup` directory.
4. On the same disk, create two 512 MB GPT partitions called `swap1` and `swap2`. A size between 460 MB and 564 MB is acceptable.
5. Configure the file-system types of the partitions to host swap spaces.
6. Initialize the two 512 MiB partitions as swap spaces and configure them to activate at boot.
7. Set the swap space on the `swap2` partition to be preferred over the other.
8. To verify your work, reboot the `serverb` machine. Confirm that the system automatically mounts the first partition onto the `/backup` directory. Also, confirm that the system activates the two swap spaces.

#### Instructions

On the `serverb` machine, the `serverb_01_lv` logical volume mounted on the `/storage/data1` directory is running out of disk space and needs to be extended to 768 MiB. You must ensure that the `serverb_01_lv` LV remains persistently mounted on the `/storage/data1` directory.

The `serverb_01_lv` LV is present on the `serverb_01_vg` volume group. Unfortunately, it has insufficient space to extend the existing logical volume. A 512 MiB partition exists on the `/dev/vdb` disk.

1. Create a 512 MiB partition on the `/dev/vdb` disk. Initialize this partition as a physical volume, and extend the `serverb_01_vg` volume group to use this partition.
2. Extend the `serverb_01_lv` logical volume to 768 MiB.
3. In the existing volume group, create the new `serverb_02_lv` logical volume with 128 MiB. Add an XFS file system and mount it persistently on the `/storage/data2` directory.
4. Verify that the newly created LV is mounted with the desired size.

#### Instructions

An IT support company uses a central server, `serverb`, to host some exported directories on `/shares` for their groups and users. Users must be able to log in and have their exported directories mounted on demand and ready to use, under the `/remote` directory on `servera`.

**Environment Characteristics:**

* The `serverb` machine is sharing the `/shares` directory, which in turn contains the `management`, `production`, and `operation` subdirectories.
* The `managers` group consists of the `manager1` and `manager2` users. They have read and write access to the `/shares/management` exported directory.
* The `production` group consists of the `dbuser1` and `sysadmin1` users. They have read and write access to the `/shares/production` exported directory.
* The `operators` group consists of the `contractor1` and `consultant1` users. They have read and write access to the `/shares/operation` exported directory.
* The main mount point for `servera` is the `/remote` directory.
* Use the `/etc/auto.master.d/shares.autofs` file as the master map file and the `/etc/auto.shares` file as the indirect map file.
* The `/shares/management` exported directory is automounted on `/remote/management` on `servera`.
* The `/shares/production` exported directory is automounted on `/remote/production` on `servera`.
* The `/shares/operation` exported directory is automounted on `/remote/operation` on `servera`.
* All user passwords are set to `redhat`.

1. Log in to `servera` and install the required packages.
2. Configure an automounter indirect map on `servera` with exports from `serverb`. Create an indirect map with files that are named `/etc/auto.master.d/shares.autofs` for the master map and `/etc/auto.shares` for the mapping file. Use the `/remote` directory as the main mount point on `servera`. Reboot `servera` to determine whether the autofs service starts automatically.
3. Test the autofs configuration with the various users. When done, log out from `servera`.

#### Instructions

1. On the `serverb` machine, reset the password to `redhat` for the root user.
2. Locate the icon for the `serverb` machine console as appropriate for your classroom environment, then open the console.
3. In the boot-loader menu, select the default kernel boot-loader entry. The system fails to boot because a start job does not complete successfully. Fix the issue from the console of the `serverb` machine.
4. Change the default systemd target on the `serverb` machine for the system to automatically start a graphical interface when it boots.
5. No graphical interface is installed on the `serverb` machine. Only set the default target for this exercise and do not install the packages.

#### Instructions

Your company has decided to run a new web app. This application listens on ports 80/TCP and 1001/TCP. You should also make available port 22/TCP for SSH access. All changes you make should persist across a reboot.

**Important:**\
Red Hat Online Learning environment needs port 5900/TCP to remain available to use the graphical interface. This port is also known under the `vnc-server` service.\
If you accidentally lock yourself out from the `serverb` machine, you can either attempt to recover by using the `ssh` command to your `serverb` machine from your workstation machine, or reset your `serverb` machine. If you elect to reset your `serverb` machine, you should run the setup scripts for this lab again. The configuration on your machines already includes a custom zone called `ROL` that opens these ports.

1. From the `workstation` machine, test access to the default web server at `http://serverb.lab.example.com` and to the virtual host at `http://serverb.lab.example.com:1001`.
2. Log in to the `serverb` machine to determine what is preventing access to the web servers.
3. Configure SELinux to allow the `httpd` service to listen on port 1001/TCP.
4. From `workstation`, test again access to the default web server at `http://serverb.lab.example.com` and to the virtual host at `http://serverb.lab.example.com:1001`.
5. Log in to the `serverb` machine to determine whether the correct ports are assigned to the firewall.
6. Add port 1001/TCP to the permanent configuration for the public network zone. Confirm your configuration.
7. From `workstation`, confirm that the default web server at `serverb.lab.example.com` and the virtual host at `serverb.lab.example.com:1001` returns `SERVER VHOST 1`.

#### Instructions

Prepare a kickstart file on the `serverb` machine as specified and make it available at the `http://serverb.lab.example.com/ks-config/kickstart.cfg` address.

1. On the `serverb` machine, copy the `/root/anaconda-ks.cfg` kickstart file to the `/home/student/kickstart.cfg` kickstart file for making it editable for the `student` user.
2. Make changes to the `/home/student/kickstart.cfg` kickstart file:
   * Comment out the `reboot` command.
   * Modify the `repo` command for the BaseOS and AppStream repositories. Modify the `repo` command for the BaseOS repository to use the `http://classroom.example.com/content/rhel9.0/x86_64/dvd/BaseOS/` address. Modify the `repo` command for the AppStream repository to use the `http://classroom.example.com/content/rhel9.0/x86_64/dvd/AppStream/` address.
   * Change the `url` command to use `http://classroom.example.com/content/rhel9.0/x86_64/dvd/` as the installation source.
   * Comment out the `network` command.
   * Change the `rootpw` command to set `redhat` as the root user password.
   * Modify the `authselect` command to set the `sssd` service as the identity and authentication source.
   * Modify the `services` command to disable the `kdump` and `rhsmcertd` services and enable the `sshd`, `rngd`, and `chronyd` services.
   * Delete the `part` commands and add the `autopart` command.
3. Simplify the `%post` section so that it only runs a script to append the text `Kickstarted on DATE` at the end of the `/etc/issue` file. Use the `date` command to insert the date with no additional options.
4. Simplify the `%package` section as follows: include the `@core`, `chrony`, `dracut-config-generic`, `dracut-norescue`, `firewalld`, `grub2`, `kernel`, `rsync`, `tar`, and `httpd` packages. Ensure that the `plymouth` package does not install.
5. Validate the syntax of the `kickstart.cfg` kickstart file.
6. Make the `/home/student/kickstart.cfg` file available at the `http://serverb.lab.example.com/ks-config/kickstart.cfg` address.

#### Instructions

1. On `serverb`, install the container tools package.
2. The container image registry at `registry.lab.example.com` stores the `rhel8/mariadb-103` image with several tags. Use the `podsvc` user to list the available tags and note the tag with the lowest version number. Use the `admin` user and `redhat321` password to authenticate to the registry. Use the `/tmp/registries.conf` file as a template for the registry configuration.
3. As the `podsvc` user, create the `/home/podsvc/db_data` directory. Configure the directory so that containers have read/write access.
4. Create the `inventorydb` detached container. Use the `rhel8/mariadb-103` image from the `registry.lab.example.com` registry, and specify the tag with the lowest version number on that image, which you found in a preceding step.
   * Map port 3306 in the container to port 13306 on the host.
   * Mount the `/home/podsvc/db_data` directory on the host as `/var/lib/mysql/data` in the container.
   * Declare the following variable values for the container:

     | Variable              | Value     |
     | --------------------- | --------- |
     | MYSQL\_USER           | operator1 |
     | MYSQL\_PASSWORD       | redhat    |
     | MYSQL\_DATABASE       | inventory |
     | MYSQL\_ROOT\_PASSWORD | redhat    |
   * You can copy and paste these parameters from the `/home/podsvc/containers-review/variables` file on `serverb`.
   * Execute the `/home/podsvc/containers-review/testdb.sh` script to confirm that the MariaDB database is running.
5. Configure the `systemd` daemon so that the `inventorydb` container starts automatically when the system boots.
