克隆与脚本安装(使用 Kick-start / Puppet)的缺点是什么?
我阅读了很多亲脚本安装意见,其中由于不断变化的硬件,克隆被认为是不可靠的方法。
在我的情况下,硬件非常统一,因为我们使用相同的供应商,即使它发生变化,调整克隆图像设置(我使用 SystemImager)的努力也不是很困难。
它也快得多,与 20 - 30 分钟的脚本安装(当然没有本地镜像)相比,它需要大约 5 分钟,并且能够捕获很难编写脚本的次要部分(例如 MySQL 数据库保护)。
但是克隆仍然从我读到的内容中得到了很多抨击,所以任何人都可以分享他对此的看法和经验,如果我将我们的部署基础设施更改为脚本安装是否值得?
提前致谢!
我想启动几十个 RHEL6/SL6 服务器。但是,其中一些服务器是不同的,我不想为每类服务器创建一个新的 ks.cfg 文件。
有什么方法可以从模板动态生成 Kickstart 文件?
例如,如果我将这样的行附加到内核:
APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi ip=dhcp
Run Code Online (Sandbox Code Playgroud)
然后脚本 ks.cgi 可以确定这是什么主机(通过 MAC 地址),并打印出适合该主机的 Kickstart 选项。我可以通过将参数传递给脚本来选择性地覆盖一些选项,如下所示:
APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi?NODETYPE=production&IP=192.168.2.80
Run Code Online (Sandbox Code Playgroud)
在我们启动服务器之后,我们在这个系统上激活 Cfengine/Puppet 并使用我们最喜欢的配置管理产品来管理系统。
我们正在试验xCAT,但事实证明它太麻烦了。我已经研究过Cobbler,但我不确定它是否这样做。
更新:
在 O'Reilly 的书:Managing RPM-Based Systems with Kickstart and Yum,第 3 章自定义您的 Kickstart 安装 > 动态 ks.cfg 中讨论了您自己的解决方案,这与此线程中的一些评论相呼应:
实现这样的工具超出了这个 Short Cut 的范围,但我可以完成高级设计。任何此类解决方案都会将数据存储(发生变化的事物)与模板解决方案(不变的事物)混合在一起。数据存储将保存每台机器的数据,例如 IP 地址和主机名。您还需要一个唯一标识符,可能是主机名,以便您可以获取给定机器的数据。数据存储可以是平面文件、XML 数据或关系数据库,例如 PostgreSQL 或 MySQL。
反过来,为了调用系统,您将机器的唯一标识符作为 URL 参数传递。例如:
启动:linux ks= http://your.kickstart.server/gen_config?host-server25
在此示例中,CGI(或 servlet,或其他)为机器 server25 生成 ks.cfg。
但是 ks.cgi 的代码在哪里?
我正在简化一系列 EL6.2(RHEL、CentOS、SL 等)系统的启动过程。对于增长/数据分区,我更喜欢使用 XFS 而不是 ext4。但是,我想对传递给mkfs.xfs创建分区的选项进行一些控制。我通常会在服务器建成后创建这个分区,这样我就有了这个控制权。但这真的应该是自动化的。
创建 400GB 的手动 XFS 分区时,我通常使用如下命令字符串:
mkfs.xfs -f -L /data -d agcount=100 -l size=128m,version=2 /dev/cciss/c0d1p0
使用/etc/fstab安装选项,例如:
LABEL=/data /data xfs noatime,logbufs=8,logbsize=256k,nobarrier 1 2
如何在不求助于 %post 的情况下在 anaconda kickstart 安装过程中内置类似的东西?
在接下来的几个月里,我需要在 Hyper-V 2012 上为我们的客户(我们运行托管基础架构)创建大量 linux VM,但我在自动化方面遇到了问题。
这是我需要它的工作方式:
我非常了解 Hyper-V,可以使用 powershell,并且是一名 C# 程序员,因此开发方面的事情得到了照顾。我对 Linux 也有足够的了解,至少可以胜任:我已经断断续续地使用它很多年了,但没有用它做过任何企业级的事情。
所有这些都可以通过手动过程轻松完成,但我需要能够编写脚本或编程以使其自动化,因为可能会创建数百个,但我不知道如何创建。
我的第一个想法是拥有一个已经创建了随机生成的名称和 IP 的数据库,但我不知道如何让 Linux VM 启动并从数据库中获取一个......我想一个 Kickstart 脚本会处理它,但我不知道该怎么做。
这是我脑子里蹦蹦跳跳的东西:
我的问题是我不知道如何打开一个 VHDX 文件并在其中插入一个 kickstart 脚本......无法弄清楚。
我到达这里,这个解决方案可能还有数英里……我更习惯于使用脚本创建 Windows VM,等等我更熟悉……任何帮助将不胜感激。
谢谢
米克
我正在尝试使用 PXE 引导通过网络在 XenServer 6.2 上安装 Scientific Linux CERN 6 来宾,但它挂在消息中:
mounting /tmp as tmpfs... done
Run Code Online (Sandbox Code Playgroud)
我没有使用最等效的模板(CentOS 6 模板)来安装这个 VM,因为我们想通过我们的 PXE 服务器安装它,因为它获取我们的 kickstart 文件并根据我们的需要创建 VM,并且使用模板有没有从网络启动的选项。因此使用了“其他安装媒体”模板。
我尝试过其他基于 RHEL 的发行版,例如干净的 Scientific Linux 6(不是 CERN 风格)和 CentOS 6。这三个都遇到了同样的问题。
其他发行版,如 Debian 和 Ubuntu,用这种方法安装得很好,甚至旧的 5.x 版本的 Scientific Linux 也能安装得很好。
我认为这与上游盈利公司取消 Xen Support 以强制他们的虚拟化解决方案有关。但我无法确认这是否真的是问题所在。
我尝试了几种在 SL 6.5 上生成加密密码的不同方法,但似乎对我没有任何作用。我在各种 /var/log/anaconda* 文件中的任何地方都没有发现任何错误,但我无法登录,因此它显然无法正常工作。
/root/anaconda-ks.cfg我用作模板的原始自动创建文件如下所示:
rootpw --iscrypted $6$...(about 100 characters)
authconfig --enableshadow --passalgo=sha512
Run Code Online (Sandbox Code Playgroud)
接下来我尝试了openssl passwd -1这给了我:
rootpw --iscrypted $1$...(about 30 characters)
authconfig --enableshadow --passalgo=sha512
Run Code Online (Sandbox Code Playgroud)
我意识到这不是 SHA-512,所以我尝试了一个 Python one-liner 我发现在几个地方重复:
rootpw --iscrypted $6...(about 10 characters)
authconfig --enableshadow --passalgo=sha512
Run Code Online (Sandbox Code Playgroud)
没有任何效果;我无法登录,最终不得不在单用户模式下重置 root 密码。
除了 ONE 提示外,我已经从 cdrom 顺利进行了预安装。它会在安装软件之前扫描 cdrom,并询问我是否要插入额外的 CD 进行扫描。
有什么方法可以强制使用 preseed 回答这个问题?
这是仅从 CD1 安装的 7.5.0-wheezy。
2014 年 6 月 11 日更新:结束只是切换到 netinstall 而不是从 CD,所以实际上不知道下面的答案是否有效,但我已经接受了,因为它看起来是正确的方法。
我对此进行了很多研究,但找不到任何可以回答我的问题的内容。
我的问题是如何将 Linux 内核参数发送/传递到 VMware vsphere 中的虚拟机来宾(这样我就不需要打开控制台)?不知何故,我想通过这个例子:
linux ks=http://ip-addr/ks/kickstart-file.cfg ip=X.X.X.X netmask=X.X.X.X gateway=X.X.X.X dns=X.X.X.X
Run Code Online (Sandbox Code Playgroud)
我什至不确定这是否可能。我确实知道我可以编辑 iso 文件并添加上述参数,但就我而言,我不能,因为我在创建虚拟机时使用静态 IP 地址。
有没有任何工具/API(最好是命令行)可以让我完成这个任务?
我正在创建一个带有自定义 kickstart 文件的 RHEL 7.3 安装映像。
我可以将它添加到我的 kickstart 文件中以在安装期间启用 SCAP 配置:
%addon org_fedora_oscap
content-type = scap-security-guide
profile = stig-rhel7-server-gui-upstream
%end
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我最终会nousb在我的内核 cmdline 中出现,它禁用了所有 USB 接口,包括键盘和鼠标。
(我以前用 RHEL 7.2 映像做过同样的事情,它“正常工作”,所以我知道基本方法是合理的。但这是使用较旧且显然不太完整的安全配置文件。)
现在,我完全理解为什么:有一个专门设置它的规则。我需要“定制”规则,以便 SCAP 工具不会禁用我的所有 USB 设备。
根据Red Hat 的 kickstart 文档和OSCAP Anaconda 站点,我可以通过提供我自己的定制文件来暂停这一规则:
剪裁路径 - 应该使用的剪裁文件的路径,作为存档中的相对路径给出。
因此,我运行 scap-workbench,禁用受影响的规则,并将我的更改另存为 Tailing.xml 文件
然后,我可以在 kickstart 配置中添加一行,如下所示:
%addon org_fedora_oscap
content-type = scap-security-guide
profile = stig-rhel7-server-gui-upstream
tailoring-path = ssg-rhel7-ds-tailoring.xml
%end
Run Code Online (Sandbox Code Playgroud)
基于反复试验,我还得出结论,必须将tailing.xml 文件放置在/root/openscap_data 中(绝对路径绝对不起作用——您在安装过程中会得到一个突出的显示停止调试提示)。
即使在生成定制文件之后,nousb当我进行全新安装时,我仍然会得到一个内核。 …
感谢这个问题的答案,在过去的 5 年里我一直很高兴为 Scientific Linux 6 和 7 生成 Kickstart 文件。然而,我们现在开始使用 CentOS 8 构建一些测试系统,并遇到了一些问题。
\n尽管使用相同的方法来生成哈希值(或者实际上,重复使用完全相同的哈希值),但用户的密码设置不正确。我找不到任何表明 EL 7 和 8 之间发生变化的文档。
\n这是我在 Kickstart 文件中创建的测试用户:
\nuser --homedir=/var/ftp --name=A3857275828 --password=$6$J52QJaSjIt8GGqRS$4YyusOJ5EtpikCdwgXJrorW7XyiLRCT.jjRZsHLv04ZV7ng8wTdrwFUF2u5QXGWiEmDgu/g9RpXxLKPoRD4Kh0 --iscrypted --shell=/usr/sbin/nologin --uid=5001 --gid=5001\nRun Code Online (Sandbox Code Playgroud)\n密码应该是,9282759601013452但登录失败,直到我使用该passwd实用程序手动更改密码。我在创建的所有非特权帐户上看到相同的失败,但root 密码工作正常。基于密码的登录已使用 SSH 和 FTP(由 PAM 支持的 vsftpd)进行了测试。
/var/log/anaconda/journal.log在设置过程中没有显示任何有趣的内容:
Jun 26 20:52:17 test.test.local anaconda[1946]: program: Running... useradd -R /mnt/sysimage -g 5001 -d /var/ftp -M -s /usr/sbin/nologin -u 5001 A3857275828\nJun 26 20:52:17 test.test.local …Run Code Online (Sandbox Code Playgroud) kickstart ×10
linux ×2
redhat ×2
rhel6 ×2
anaconda ×1
automation ×1
centos ×1
centos6 ×1
cloning ×1
debian ×1
filesystems ×1
hyper-v ×1
installation ×1
openscap ×1
password ×1
preseed ×1
provisioning ×1
puppet ×1
rhel7 ×1
rhel8 ×1
ubuntu ×1
vmware-esxi ×1
xen ×1
xenserver ×1
xfs ×1