使用Cockpit Image Builder创建自定义RHEL ISO(CentOS/RHEL 8)

时间:2020-01-09 10:37:41  来源:igfitidea点击:

在本文中,我将分享在RHEL 8 Linux主机上使用cockpit image builder创建自定义rhel iso的步骤。 Cockpit Image Builder是用于创建准备就绪的自定义系统镜像的工具。使用座舱图像生成器,我们可以创建各种格式的自定义rhel iso,包括用于OpenStack的QCOW2,AMI(亚马逊机器镜像),VHD(Azure磁盘镜像)等。座舱已经存在了一段时间。我们可能已经在RHEL 7中看到过。但是在RHEL 8中,Cockpit已开发为一种管理解决方案,它确实有潜力为偶尔的Linux管理员提供最常见的管理功能。 RHEL 8 Linux中引入了Cockpit Image builder,该Cockpit Image builder可用于其他各种任务,不仅限于创建自定义的rhel iso镜像。以后我会写更多的文章来介绍更多关于驾驶舱的信息。

在RHEL 8上安装Cockpit Image Builder

提示:

创建系统镜像时,Image Builder底层的lorax工具会执行许多潜在的不安全和不安全操作。因此,请使用在Linux服务器上安装的Oracle VirtualBox上运行的虚拟机来运行Image Builder。

在虚拟机上安装Image Builder和其他必要的软件包:

  • lorax-composer

  • composer-cli

  • cockpit-composer

  • bash-completion

Web控制台是作为cockpit-composer软件包的依赖项安装的。

使Image Builder能够在每次重新启动后启动。现在,由于启用了套接字,因此一旦线程连接到套接字,服务将在重新启动后自动启动。

# systemctl enable lorax-composer.socket
# systemctl enable cockpit.socket

重要的提示:

确保RHEL 8 Linux主机已连接到Red Hat Network或者已配置脱机存储库,否则我们将无法使用座舱图像生成器创建自定义rhel iso或者任何其他图像。

接下来检查lorax-composer的状态。

[root@node4 ~]# systemctl status lorax-composer
● lorax-composer.service - Lorax Image Composer API Server
   Loaded: loaded (/usr/lib/systemd/system/lorax-composer.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-06-18 19:33:43 IST; 9min ago
  Process: 6186 ExecStartPre=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/lorax-composer.conf (code=exited, status=0/SUCCESS)
 Main PID: 6188 (lorax-composer)
    Tasks: 2 (limit: 26213)
   Memory: 88.2M
   CGroup: /system.slice/lorax-composer.service
           ├─6188 /usr/libexec/platform-python /usr/sbin/lorax-composer /var/lib/lorax/composer/blueprints/
           └─6190 /usr/libexec/platform-python /usr/sbin/lorax-composer /var/lib/lorax/composer/blueprints/
Jun 18 19:33:43 node4.example systemd[1]: Starting Lorax Image Composer API Server...
Jun 18 19:33:43 node4.example systemd[1]: Started Lorax Image Composer API Server.
Jun 18 19:33:44 node4.example lorax-composer[6188]: 2019-06-18 19:33:44,767: releasever = 8
Jun 18 19:33:44 node4.example lorax-composer[6188]: 2019-06-18 19:33:44,770: Using platform:el8 for module_platform_id
Jun 18 19:33:44 node4.example lorax-composer[6188]: 2019-06-18 19:33:44,777: Updating repository metadata
Jun 18 19:33:50 node4.example lorax-composer[6188]: 2019-06-18 19:33:50,261: Starting lorax-composer-28.14.16-1 on /run/weldr/api.socket with blueprints from /var>

说明:

在某些情况下,可以观察到Cockpit Web控制台无法显示蓝图详细信息。在这种情况下,请使用dnf clean all清理存储库缓存并使用dnf repolist重新加载存储库,以确保可访问存储库。接下来,重新启动lorax-composer服务,并刷新座舱Web控制台。

加载shell程序配置脚本,以便composer-cli命令的自动完成功能立即启动,而无需重新启动:

[root@node4 ~]# source  /etc/bash_completion.d/composer-cli

在RHEL 8 Web控制台中访问Image Builder GUI

RHEL 8 Web控制台的cockpit-composer插件使用户能够管理Image Builder蓝图并通过图形界面进行编写。

在安装了Image Builder的系统上的Web浏览器中打开https://localhost:9090 /

使用具有系统特权的用户帐户的凭据登录Web控制台。我们正在使用" root"用户凭证登录到座舱Web控制台。

要显示Image Builder控件,请单击窗口左上角的Image Builder图标。将打开"图像构建器"视图,其中列出了现有的蓝图。

使用Cockpit创建Image Builder蓝图

点击右上角的创建蓝图。出现一个弹出窗口,其中包含用于蓝图名称和描述的字段。

填写蓝图的名称及其描述,然后单击创建。屏幕变为蓝图编辑模式。我正在创建一个新的蓝图基础蓝图。

添加要包含在系统镜像中的组件。在左侧的可用组件字段中输入所有或者部分组件名称,然后按Enter键。

搜索将添加到文本输入字段下的过滤器列表中,并且下面的组件列表将缩小为与搜索匹配的组件。单击我们要使用的组件名称以显示其详细信息。右窗格中填充了组件的详细信息,例如其版本和依赖关系。在组件选项框中,使用版本发行版下拉列表选择要使用的版本。点击左上角的添加。如果我们不小心添加了一个组件,请通过单击右窗格中条目最右边的-按钮将其删除,然后在菜单中选择删除

要保存蓝图,请单击右上方的提交。会弹出一个对话框,其中包含更改摘要。点击Commit。右侧的小弹出窗口会通知我们保存进度,然后是结果。

将用户和组添加到Image Builder蓝图

Cockpit Image Builder是用于创建自定义系统镜像的工具。此过程描述了如何在命令行界面中编辑现有的Image Builder蓝图。

将蓝图保存(导出)到本地文本文件,我们将使用该文件创建自定义的rhel iso。这里的" base-blueprint"是我的蓝图的名称。

[root@node4 ~]# composer-cli blueprints save base-blueprint

现在,我们可以使用任何编辑器查看蓝图文件的配置:

[root@node4 ~]# cat base-blueprint.toml
name = "base-blueprint"
description = ""
version = "0.0.5"
modules = []
groups = []
[[packages]]
name = "bash"
version = "4.4.19"
[[packages]]
name = "cockpit"
version = "180"
[root@node4 ~]# cat base-blueprint.toml
name = "base-blueprint"
description = ""
version = "0.0.5"
modules = []
groups = []
[[packages]]
name = "bash"
version = "4.4.19"
[[packages]]
name = "cockpit"
version = "180"

为我们的自定义rhel iso创建用户

现在,既然我们已经准备好软件包列表,我们将创建一些用户,使用它们,我们可以在安装后登录到自定义rhel iso。为了实现这一点,我创建了一个文件customizations.txt。我们可以为此文件使用任何其他名称,因为此处的文件名并不重要。

[root@node4 ~]# touch customizations.txt

以下是在自定义rhel iso中添加用户要遵循的模板。

[[customizations.user]]
name = "USER-NAME"
description = "USER-DESCRIPTION"
password = "PASSWORD-HASH"
key = "ssh-rsa (...) key-name"
home = "/home/USER-NAME/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]
uid = NUMBER
gid = NUMBER

其中我们只能为用例选择所需的参数,而无需在此处使用每个定义的变量。对于我们的用例,我将创建两个具有以下详细信息的用户:

[[customizations.user]]
name = "hynman"
description = "testuser1"
password = "$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]"
home = "/home/hynman/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]
[[customizations.user]]
name = "rahul"
description = "testuser2"
password = "$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]"
home = "/home/rahul/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]

如何获得蓝图的加密密码?

如我们所见,我已经为两个用户提供了一种加密形式的密码。

要生成哈希,必须在系统上安装python3. 以下命令将安装python3软件包。

# yum install python3

将" PASSWORD-HASH"替换为" customizations.txt"文件中的实际密码哈希。要生成哈希,请使用例如。该命令:

[root@node4 ~]# python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
Password:
Confirm:
$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0

如何获取蓝图的SSH密钥?

现在,如果我们希望为自定义rhel iso启用基于密码的登录,则可以使用ssh-keygen创建一组公钥和私钥。将私钥存储在localhost上,同时在此处提供公钥详细信息。

[root@node4 ~]# ssh-keygen -t rsa -P "redhat"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:QncWUoaUWP6lLjwiXLOLWN2Z0DHPMnFHG5eGBafX/pE [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|       ++++ +++. |
|      ..oo o.*o. |
|      . * + =.. .|
|     . o @ + . ..|
|      = S =    E.|
|   . o B *      o|
|    + + B .     .|
|   o o o o       |
|  . . .          |
+----[SHA256]-----+

其中我将公钥存储在" customizations.txt"文件中。

[root@node4 ~]# cd .ssh/
[root@node4 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]

接下来,是时候使用自定义rhel iso的" customizations"文件内容来更新我们的蓝图文件了。

[root@node4 ~]# cat customizations.txt >> base-blueprint.toml

在将这些更改推送到座舱图像生成器之前,请再次验证内容:

[root@node4 ~]# cat base-blueprint.toml
name = "base-blueprint"
description = ""
version = "0.0.5"
modules = []
groups = []
[[packages]]
name = "bash"
version = "4.4.19"
[[packages]]
name = "cockpit"
version = "180"
[[customizations.user]]
name = "hynman"
description = "testuser1"
password = "$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]"
home = "/home/hynman/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]
[[customizations.user]]
name = "rahul"
description = "testuser2"
password = "$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]"
home = "/home/rahul/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]

接下来将蓝图推送(导入)到座舱图像生成器中:

[root@node4 ~]# composer-cli blueprints push base-blueprint.toml

验证驾驶舱图像生成器上可用的蓝图内容:

[root@node4 ~]# composer-cli blueprints show base-blueprint
name = "base-blueprint"
description = ""
version = "0.0.6"
modules = []
groups = []
[[packages]]
name = "bash"
version = "4.4.19"
[[packages]]
name = "cockpit"
version = "180"
[customizations]
[[customizations.user]]
name = "hynman"
description = "testuser1"
password = "$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]"
home = "/home/hynman/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]
[[customizations.user]]
name = "rahul"
description = "testuser2"
password = "$PDghsIELxH5QZBfH$Eafg9.U8b0olzaz0OQVF559Gunal1LftY0buYcXlgTrJ9i9FcJgF4Yav83Tb2bB4iVzx0aHp7pJUpqiCecW1e0"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbdvsMQy46/QDGlXfzU6976b8sDD1sz/9Aa7rr6vu+eFffKGoZZWkSzvk83plp8VQgZDaODyudP80jQP82fOk6kPZ5JDIwDYZ6jIVSxWbnE5QQHQdbib3i4cJ3MZJSOpJFx/ywNcr32F8NdVCQperw+iNzT7oWcW3bwEStUIjo+aD15yF7aatLXhkbjpNQTPJub1sduikhTZY3+bplP5l/dX0anrZX5h8R3x+xufbcOoXAtlMjA8ewgbrP9T9jOh9mdKiiPjvLFjKmTd3tarehohMG4lySguWt7XEkmj5q0AodQZ0okH09EmH3X1DB3BEi+spoQO8ZTcgus+c8P8LH [email protected]"
home = "/home/rahul/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]

因此,我们都准备使用rhel 8 linux主机上的座舱图像生成器从蓝图创建我们的第一张图像。

使用Cockpit Image Builder创建自定义RHEL ISO

在蓝图的右侧,按属于该蓝图的创建图像按钮。

出现一个弹出窗口。选择Image typeArchitecture并按Create

右上方的小弹出窗口会通知我们图像创建已添加到队列中。

单击图像选项卡以切换到它。列出正在创建的图像,状态为"进行中"。

成功创建镜像后,停止按钮将被替换为下载按钮。单击此按钮将镜像下载到系统。

将自定义RHEL ISO部署到VM

现在,由于我们的自定义RHEL ISO是使用座舱图像生成器准备的,因此,我将使用已创建的实时iso创建虚拟机。我将无法共享创建VM的步骤,因为这超出了本文的范围。在VM中启动ISO后,我们将直接获得一个登录控制台,如下所示。

我们可以使用使用蓝图中的" customizations.txt"文件创建的任何用户登录此处。我已使用用户hynman和用于创建哈希密码的密码登录。

同样,我们可以向蓝图添加更多详细信息,例如添加自定义主机名,将条目追加到GRUB并创建具有不同体系结构的镜像,例如用于OpenStack的QCOW2,AMI(Amazon Machine Image),VHD(Azure Disk Image)等。