RAC 攻击 - Oracle 集群数据库实战/RAC 攻击自动化
无论您是已经做过早期实验室几十次的参与者,还是专注于后期实验室的课程的讲师,跳过早期实验室并专注于 RAC 攻击课程中的后期实验室通常很有用。目前正在开发和测试用于自动化 RAC 攻击实验室的代码。
此页面将包含有关自动构建标准 RAC 攻击环境的说明。
这些步骤正在 Windows、Linux 和 Mac OSX 上进行测试 |
为此,您需要大量的内存和空闲磁盘空间。请参阅 RAC_Attack_12c/硬件要求。对于这些自动化实验室,如果您运行了其他程序,8 GB 内存可能有些紧张,而 40 GB 磁盘空间可能有点勉强。这仍在开发中! |
目前,我们正在努力自动化第三和第四个实验室 - 安装 Linux 和 创建集群。
- 完成前三个实验室:硬件要求、软件组件 和 准备主机。不要下载 Oracle Linux;只需下载数据库和集群软件。
- 下载并安装 Vagrant 1.5.1
- 下载并解压缩 http://racattack.org/vagrantfile.zip(请注意,此文件经常更改,因为我们正在对其进行处理)
- 打开命令提示符并更改为解压缩 vagrantfile.zip 的目录
cd vagrantfile-master\OracleLinux\racattack12cR1
vagrant up
vagrant ssh collabn1
sudo su - oracle -c vncserver
- 运行您选择的 vnc 客户端并连接到 vnc://192.168.78.51:1
- 在 http://racattack.org/list 或 https://github.com/racattack/vagrantfile/issues 上讨论问题
在您的笔记本电脑上第一次键入 vagrant up 将触发一个 808 MB 的下载。要仅下载文件而无需配置您的 VM(例如,在您睡觉时),您可以键入 vagrant box add racattack/oracle65 。 |
即使没有下载,运行 vagrant up 也需要很长时间 - 特别是在启动第一个 VM 之前创建 20 GB 的“共享磁盘”。 |
您现在可以跳到 连接到虚拟机
此项目由 RAC 攻击团队 提供给您
初始版本:Alvaro Miranda 14/04
对于此实现,我们将使用 Vagrant 来管理 VirtualBox 并自动执行部署。
除了 RAC_Attack_12c/软件组件 中列出的用于 SSH、VNC、网格和数据库组件的软件外,以下软件已在此实现中使用和测试。
此实现已使用以下操作系统进行测试
- Windows 7 Professional 64 位
- OracleLinux 6.5 64 位
- Apple Mac OS X 10.9.2
客户机中使用的操作系统是 Oracle Linux 6.5 + 更新。
使用的镜像版本反映了创建和更新镜像的日期
alvaros-mini:oracle65 alvarom$ vagrant box outdated --global
* 'racattack/oracle65' (v14.03.29) is up to date
alvaros-mini:oracle65 alvarom$
此版本的 racattack/oracle65
已创建并更新至 14.03.29
将来,如果发布了新的镜像,版本将与创建镜像的日期相匹配 |
- 请查看 RAC_Attack_12c/硬件要求 并检查您是否满足最低硬件要求。
- 转到 RAC_Attack_12c/Software_Components 并确保您拥有其中列出的所有软件组件。
我们将使用一个 Vagrant 盒子,该盒子已安装 OS 和所有 RPM 要求。此任务不需要 Oracle Linux ISO。 |
对于本实验,您需要 vagrant,请访问 www.vagrantup.com/downloads.html,下载并安装 vagrant 软件。
这已在 Vagrant 1.5.1 上测试过。 |
在本实验中,我们将使用 vagrant,但是读者可以访问 Vagrant 文档 以了解在本实验之外哪些其他功能可能有用。
从 why-vagrant 页面
Vagrant 提供易于配置、可重复使用且可移植的工作环境,这些环境构建在行业标准技术之上,并由一个一致的工作流程控制,以帮助最大限度地提高您和您的团队的生产力和灵活性。
软件安装完成后,正常的部署过程如下
- 下载一个 vagrant 盒子
- 创建一个 Vagrantfile
Vagrant 是一个命令行工具,如果您使用的是 Windows,请打开一个命令行窗口 |
让我们使用 vagrant 执行一些命令
alvaros-mini:~ alvarom$ vagrant --help
Usage: vagrant [options] <command> [<args>]
-v, --version Print the version and exit.
-h, --help Print this help.
alvaros-mini:~ alvarom$ vagrant --version
Vagrant 1.5.1
alvaros-mini:~ alvarom$ vagrant box list
alvaros-mini:~ alvarom$
一个 vagrant 盒子是一个虚拟机模板,其中包含专门为 vagrant 制定的配置。为了创建一个盒子,您需要按照 基本盒子文档 中列出的步骤进行操作。
本实验中使用的盒子是使用 packer 版本 0.5.2 创建的。
从 vagrant 1.5.x 开始,您可以使用一个简单的命令从互联网下载盒子。
vagrant box add racattack/oracle65
这将下载本实验使用的基本盒子。
此时,盒子 racattack/oracle65 位于您的系统中,您可以使用它。
Vagrant 文件是自动化开始的地方,它将包含有关使用哪个盒子、从哪里获取盒子以及在 Vagrantfile 中列出的自定义操作的信息。
根据 vagrantfile 文档,Vagrantfile 是
Vagrantfile 的主要功能是描述项目所需的机器类型,以及如何配置和配置这些机器。Vagrantfile 被称为 Vagrantfile 是因为文件的实际文字文件名是 Vagrantfile(大小写无关)。
Vagrant 旨在每个项目运行一个 Vagrantfile,并且 Vagrantfile 应该被提交到版本控制。这允许参与项目的其他开发人员签出代码,运行 vagrant up,然后开始工作。Vagrantfile 在 Vagrant 支持的每个平台上都是可移植的。
Vagrantfile 的语法是 Ruby,但无需了解 Ruby 编程语言即可修改 Vagrantfile,因为它主要只是简单的变量赋值。事实上,Ruby 甚至不是 Vagrant 使用最广泛的社区,这应该向您表明,即使没有 Ruby 知识,人们也能在 Vagrant 上取得成功。
要创建一个新的 Vagrantfile,您可以
vagrant init racattack/oracle65
这将在我们执行此命令的目录中创建一个简单的 Vagrantfile。
让我们列举一下我们到目前为止学到的知识
要下载一个 vagrant 盒子
vagrant box add racattack/oracle65
要列出我们系统中的盒子
vagrant box list
要创建一个初始 Vagrantfile
vagrant init racattack/oracle65
我们将使用的其他命令是
要启动/创建一个新的虚拟机
vagrant up
要连接到虚拟机
vagrant ssh
要重启虚拟机
vagrant reload
要停止虚拟机
vagrant halt
要检查虚拟机的状态
vagrant status
此命令将要求您确认 |
要删除虚拟机
vagrant destroy
在本实验中,我们将创建一个简单的 test1 虚拟机。
vagrant box add racattack/oracle65
vagrant box list
mkdir test1
cd test1
vagrant init racattack/oracle65
vagrant up
vagrant reload
vagrant halt
vagrant destroy
以下是我测试机器上的输出
alvaros-mini:~ alvarom$ vagrant box add racattack/oracle65
==> box: Loading metadata for box 'racattack/oracle65'
box: URL: https://vagrantcloud.com/racattack/oracle65
==> box: Adding box 'racattack/oracle65' (v14.03.29) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/racattack/oracle65/version/1/provider/virtualbox.box
==> box: Successfully added box 'racattack/oracle65' (v14.03.29) for 'virtualbox'!
alvaros-mini:~ alvarom$
alvaros-mini:~ alvarom$ vagrant box list
racattack/oracle65 (virtualbox)
alvaros-mini:~ alvarom$
alvaros-mini:~ alvarom$ mkdir test1
alvaros-mini:~ alvarom$ cd test1
alvaros-mini:test1 alvarom$ vagrant init racattack/oracle65
A `Vagrantfile` has been placed in this directory.
You are now ready to `vagrant up` your first virtual environment!
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'racattack/oracle65'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Setting the name of the VM: test1_default_1396308377657_73917
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant ssh
[vagrant@oracle65-racattack ~]$ id
uid=500(vagrant) gid=500(vagrant) groups=500(vagrant)
[vagrant@oracle65-racattack ~]$ hostname
oracle65-racattack
[vagrant@oracle65-racattack ~]$ sudo su -
[root@oracle65-racattack ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@oracle65-racattack ~]# exit
logout
[vagrant@oracle65-racattack ~]$ exit
logout
Connection to 127.0.0.1 closed.
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
==> default: VM already provisioned. Run `vagrant provision` or use `--provision` to force it
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant halt
==> default: Attempting graceful shutdown of VM...
alvaros-mini:test1 alvarom$
alvaros-mini:test1 alvarom$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...
alvaros-mini:test1 alvarom$
恭喜,您已使用 Vagrant 创建并销毁了您的第一个虚拟机。
此时,在 RAC 攻击架构 中,我们处于第一步。
我们的架构图如下所示
此自动化实现的代码可以在 [racattack.org/code] 找到。
从代码中,我们感兴趣的是 racattack/vagrantfile 仓库。
有两种方法可以下载代码
- 下载 zip 文件
- 使用 git
请注意,链接将来可能会更改,因此请将此网页添加书签,并访问 racattack.org 获取最新更新。 |
一个包含本项目所需所有文件的 zip 文件可以下载为:https://github.com/racattack/vagrantfile/archive/master.zip
下载,解压缩
将文件解压缩到一个有足够空间存放创建虚拟机时使用的虚拟磁盘的目录中。 |
您完成了。
如果您熟悉 git,您可以下载此仓库的副本,如下所示
git clone https://github.com/racattack/vagrantfile
如果您安装了 github 软件,那么您可以 点击此链接
在将仓库下载到您的计算机本地后,您将得到类似于以下结构的内容
.
|-- OracleLinux
| |-- README.md
| `-- racattack12cR1
转到 OracleLinux/racattack12cR1 目录
cd OracleLinux/racattack12cR1
结构将类似于以下内容
.
|-- 12cR1
| |-- <scripts>
| `-- readme.txt
|-- Vagrantfile
`-- stagefiles
| |-- <scripts>
` `-- readme.txt
现在一切都已就绪,我们可以检查集群的状态
alvaros-mini:racattack12cR1 alvarom$ vagrant status
collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn2 dns server role is slave
on first boot shared disks will be created, this will take some time
collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51
collabn1 dns server role is master
Current machine states:
collabn2 not created (virtualbox)
collabn1 not created (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
alvaros-mini:racattack12cR1 alvarom$
此输出告诉我们什么?
它显示了 2 个节点
collabn2 not created (virtualbox) collabn1 not created (virtualbox)
它显示了我们可以通过以下网络详细信息访问它们
collabn2 eth1 lanip :192.168.78.52 collabn2 eth2 privip :172.16.100.52 collabn1 eth1 lanip :192.168.78.51 collabn1 eth2 privip :172.16.100.51
这意味着我们将从单个节点迁移到 2 个节点。
这也意味着我们离 RAC 攻击架构又近了一步。
stagefiles/*.sh
中提供的脚本将完成 Oracle RAC 集群所需的所有配置。
racattack12cR1
`-- stagefiles
| `-- <scripts>
如果我们查看 vagrant status
的输出,我们还有
collabn2 dns server role is slave collabn1 dns server role is master
这意味着当我们配置我们的实验室时,collabn1
将是 DNS 服务器主节点,而 collabn2
将是 DNS 服务器从节点。
其他信息是
on first boot shared disks will be created, this will take some time
也就是说,在首次执行 vagrant up
时,Vagrant 使用我们的 Vagrantfile 将为正确安装 Oracle RAC 12cR1 设置我们所需的一切。
此时,您可以运行 vagrant up
来创建您的第一个使用此项目的 2 节点 RAC 集群。
vagrant up
[edit | edit source]vagrant up
命令将读取 Vagrantfile 并创建该文件中的内容。
此项目的 Vagrantfile 已经过测试和改进,并完成了 Oracle RAC 12cR1 安装所需的所有操作系统要求,没有任何问题。
顺序很重要
[edit | edit source]Vagrant 从上到下执行脚本并创建机器,因此对于高级使用,我们可能最终会在配置完成后安装软件或执行一些任务,因此,我们需要所有节点都启动并运行,因此我们将首先执行 collabn2,然后执行 collabn1。这样一来,一旦 collabn1 启动并运行,我们就可以确保一切都启动并准备就绪。
查看 vagrant up 输出
[edit | edit source]让我们查看输出。
可以在项目页面上的 https://github.com/racattack/vagrantfile/blob/master/OracleLinux/vagrant-up.log 找到 示例 vagrant up 日志,以便在执行自己的运行之前进行查看。
并非所有输出都将被审查。我们将重点介绍重要的部分。 |
在此阶段,基本框已导入。
==> collabn2: Importing base box 'kikitux/oracle65-racattack'...
在此阶段,该框将从模板中重命名为适合我们的名称。
==> collabn2: Setting the name of the VM: collabn2.1404011431
Vagrant 魔术
==> collabn2: Clearing any previously set network interfaces...
==> collabn2: Preparing network interfaces based on configuration...
在 pre-boot
部分,将创建共享磁盘。我们将在后面回顾这一点。
==> collabn2: Running 'pre-boot' VM customizations...
启动虚拟机并设置主机名
==> collabn2: Booting VM...
==> collabn2: Waiting for machine to boot. This may take a few minutes...
==> collabn2: Setting hostname...
挂载共享文件夹
==> collabn2: Mounting shared folders...
collabn2: /vagrant => /Users/alvarom/racattack12cR1
collabn2: /media/sf_12cR1 => /Users/alvarom/racattack12cR1/12cR1
collabn2: /media/stagefiles => /Users/alvarom/racattack12cR1/stagefiles
执行脚本
==> collabn2: Running provisioner: shell...
共享磁盘
[edit | edit source]为了更接近 RAC Attack 12cR1 架构,我们需要有共享磁盘。
此实现将在首次启动时自动执行 RacAttack Create_Virtualbox_Shared_Storage 步骤
让我们检查 collabn1
alvaros-mini:racattack12cR1 alvarom$ vagrant status
collabn2 running (virtualbox)
collabn1 running (virtualbox)
让我们连接到 collabn1
并成为 root 用户
alvaros-mini:racattack12cR1 alvarom$ vagrant ssh collabn1
[vagrant@collabn1 ~]$ sudo su -
[root@collabn1 ~]#
让我们检查磁盘。
- udev 磁盘
[root@collabn1 ~]# ls -al /dev/asm* /dev/sd*
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk1 -> sdc1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk2 -> sdd1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk3 -> sde1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk4 -> sdf1
brw-rw---- 1 root disk 8, 0 Apr 1 01:35 /dev/sda
brw-rw---- 1 root disk 8, 1 Apr 1 01:35 /dev/sda1
brw-rw---- 1 root disk 8, 2 Apr 1 01:35 /dev/sda2
brw-rw---- 1 root disk 8, 3 Apr 1 01:35 /dev/sda3
brw-rw---- 1 root disk 8, 16 Apr 1 01:35 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr 1 01:35 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 /dev/sdc1
brw-rw---- 1 root disk 8, 48 Apr 1 01:35 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 /dev/sdd1
brw-rw---- 1 root disk 8, 64 Apr 1 01:35 /dev/sde
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 /dev/sde1
brw-rw---- 1 root disk 8, 80 Apr 1 01:35 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 /dev/sdf1
[root@collabn1 ~]#
我们有 4 个共享磁盘:sdc、sdd、sde、sdf。我们有持久别名
- OracleASM 磁盘
oracleasm-tools 已用于设置 /dev/oracleasm/disks 别名设备 |
[root@collabn1 ~]# ls -al /dev/oracleasm/disks/
total 0
drwxr-xr-x 1 root root 0 Apr 1 01:35 .
drwxr-xr-x 4 root root 0 Apr 1 01:35 ..
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 ASMDISK1
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 ASMDISK2
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 ASMDISK3
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 ASMDISK4
[root@collabn1 ~]#
oracleasmlib 包含在 Oracle UEK 内核中。这些机器使用 UEKR3 |
共享磁盘已创建,权限已设置。准备使用。
再次说明,这意味着我们又向 RAC Attack 12cR1 架构迈进了一步。
默认情况下包含的内容
[edit | edit source]除了已经提供的详细说明之外,此自动化脚本还执行以下操作
- 创建所需的组,以根据 Oracle RAC 手册进行角色分离
- 创建用户 grid
- 更新用户 oracle 的组
- 初始化 sdb 磁盘以用于 oracle 二进制文件,将其挂载为 /u01
- 设置主节点 (collabn1) 从节点 (collabn2) 的 DNS 设置
- 为 grid 用户设置 ulimit,用于角色分离
默认用户和密码
[edit | edit source]- 用户 root,密码 root
- 用户 grid,密码 grid
- 用户 oracle,密码 oracle
连接到虚拟机
[edit | edit source]现在,您可以通过两种方式连接到虚拟机。
vagrant ssh collabn1
,然后sudo su -
成为 root 用户。
You can became grid user assudo su - grid
from vagrant You can became oracle user assudo su - oracle
from vagrant
- 使用 ssh/putty 连接到 IP 地址。
您的笔记本电脑已连接到两个网络,LAN 192.168.78 和 priv 172.16.100.51。
因此,您可以直接使用 ssh 连接到机器。
collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51
恭喜
[edit | edit source]此时,您已拥有一个 2 节点集群,所有准备就绪。
这意味着我们 100% 符合 RAC Attack 12cR1 架构,恭喜您。
下一步
[edit | edit source]将您下载的 oracle 二进制文件 zip 文件放在 racattack12cR1/12cR1 中。
12cR1/linuxamd64_12c_grid_1of2.zip
12cR1/linuxamd64_12c_grid_2of2.zip
12cR1/linuxamd64_12c_database_1of2.zip
12cR1/linuxamd64_12c_database_2of2.zip
配置 VNC 会话,或使用 X11,方法如下:RAC_Attack_12c/VNC_Server_Setup
使用 oracle 帐户配置 VNC 服务器(密码不会显示)。
[root@collabn1 ~]# su - oracle [oracle@collabn1 ~]$ vncserver :1 You will require a password to access your desktops. Password: racattack Verify: racattack xauth: creating new authority file /home/oracle/.Xauthority New 'collabn1.racattack:1 (oracle)' desktop is collabn1.racattack:1 Creating default startup script /home/oracle/.vnc/xstartup Starting applications specified in /home/oracle/.vnc/xstartup Log file is /home/oracle/.vnc/collabn1.racattack:1.log
在您的笔记本电脑上打开 vncviewer,并填写 collabn1 的 IP 地址,后跟 :1。
在 OS X 和 Linux 上,您可以使用 X11 转发而不是 VNC。为此,在您的 ssh 命令中使用 -X 标志,例如 ssh -X -l oracle 192.168.78.51。如果您使用的是 Mountain Lion 或更高版本,您可能需要先安装 XQuartz,如 http://support.apple.com/kb/HT5293 中所述。 |
出现提示时输入密码 racattack。
图形界面已准备好进行网格基础设施安装。
由于 Vagrant 的性质,接口为 eth1: LAN eth2: 互连 |
当您进行到网格基础设施的接口设置时,请记住,由于 Vagrant 的要求,接口与 12cR1 手册中的接口不同。
准备好配置网络时,您需要执行以下操作
单击 识别网络接口...
检查是否设置了正确的地址
- eth0 标记为 不使用
- eth1 标记为 公共
- eth2 标记为 专用
单击 确定 关闭 识别网络接口 窗口。
最后,单击 下一步
现在,您可以参考 RAC Attack 12cR1 手册,并从 RAC_Attack_12c/Prepare_for_GI_install 开始。
更新基本框
[edit | edit source]截至今天,racattack/oracle65
的版本为 14.03.29。
这是基本框,用于创建新的来宾机器的框。
当创建新的来宾机器时,即在您首次运行 vagrant up
或在运行 vagrant detroy
后想要重新创建系统时。
将来,如果发布了新的镜像,版本将与创建镜像的日期相匹配 |
为了验证您是否使用的是最新版本,请使用命令 vagrant box outdated --global
。
alvaros-mini:racattack12cR1 alvarom$ vagrant box outdated --global
* 'racattack/oracle65' (v14.03.29) is up to date
alvaros-mini:racattack12cR1 alvarom$
这将检查已安装的基本框的版本。
当有新版本发布时,更新基本框的命令为 vagrant box update
。
示例输出
alvaros-mini:racattack12cR1 alvarom$ vagrant box update
==> default: Checking for updates to 'racattack/oracle65'
default: Version constraints: >= 0
default: Provider: virtualbox
==> default: Box 'racattack/oracle65' (v14.03.29) is running the latest version.
更新操作系统
[edit | edit source]如果您需要更新来宾机器的操作系统,这些机器配置为使用 Oracle 的 public-yum。
这意味着您可以通过执行 yum update
来更新。
有关 yum 的更多信息,请访问 http://docs.oracle.com/cd/E37670_01/E37355/html/ol_about_yum.html