使用Cockpit Image Builder创建自定义RHEL ISO(CentOS/RHEL 8)
在本文中,我将分享在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 type
和Architecture
并按Create
。
右上方的小弹出窗口会通知我们图像创建已添加到队列中。
单击图像选项卡以切换到它。列出正在创建的图像,状态为"进行中"。
成功创建镜像后,停止
按钮将被替换为下载
按钮。单击此按钮将镜像下载到系统。
将自定义RHEL ISO部署到VM
现在,由于我们的自定义RHEL ISO是使用座舱图像生成器准备的,因此,我将使用已创建的实时iso创建虚拟机。我将无法共享创建VM的步骤,因为这超出了本文的范围。在VM中启动ISO后,我们将直接获得一个登录控制台,如下所示。
我们可以使用使用蓝图中的" customizations.txt"文件创建的任何用户登录此处。我已使用用户hynman
和用于创建哈希密码的密码登录。
同样,我们可以向蓝图添加更多详细信息,例如添加自定义主机名,将条目追加到GRUB并创建具有不同体系结构的镜像,例如用于OpenStack的QCOW2,AMI(Amazon Machine Image),VHD(Azure Disk Image)等。