克隆与脚本安装(使用 Kick-start / Puppet)的缺点是什么?
我阅读了很多亲脚本安装意见,其中由于不断变化的硬件,克隆被认为是不可靠的方法。
在我的情况下,硬件非常统一,因为我们使用相同的供应商,即使它发生变化,调整克隆图像设置(我使用 SystemImager)的努力也不是很困难。
它也快得多,与 20 - 30 分钟的脚本安装(当然没有本地镜像)相比,它需要大约 5 分钟,并且能够捕获很难编写脚本的次要部分(例如 MySQL 数据库保护)。
但是克隆仍然从我读到的内容中得到了很多抨击,所以任何人都可以分享他对此的看法和经验,如果我将我们的部署基础设施更改为脚本安装是否值得?
提前致谢!
我对 Puppet 配置管理系统感兴趣,但想知道 kick-start 和 Puppet 之间的界限在哪里?
今天我在 kick-start(由 Cobbler 提供支持)中做了很多任务,包括一些自定义分区。
问题是,是否更好地将所有内容(自定义分区和 puppet 包除外)移动到 Puppet 中,以获得更灵活的管理?或者有一些明确的指导方针?
谢谢。
是否有脚本或其他方法可以根据现有服务器的系统状态自动生成 kickstart 配置文件,以便该文件可用于在另一个安装中复制(而不是克隆)系统配置?
我知道 anaconda-ks.cfg 文件存储在 /root 目录中。但该系统自安装以来已经发生了很大的变化,并且该文件现在没有用处。
我正在使用以下 kickstart 安装后日志记录选项:
%post
exec < /dev/tty3 > /dev/tty3
chvt 3
echo
echo "################################"
echo "# Running Post Configuration #"
echo "################################"
(
echo 'Hello, World!'
cat > test_file <<EOF
Hello World
EOF
) 2>&1 | /usr/bin/tee /var/log/post_install.log
chvt 1
Run Code Online (Sandbox Code Playgroud)
问题是我实际上并没有在我的日志文件中捕获用于创建 test_file(以 cat 开头并以 EOF 结尾的代码)的命令。echo 语句在那里,但仅此而已。
下面的代码解决了这个问题,但意味着我必须在我所有的安装后过程中附加一个 tee 语句,这并不令人满意。
echo -e "# Writing test_file and capturing to log_file" && /usr/bin/tee -ai log_file >> test_file << EOF
Hello World
EOF
Run Code Online (Sandbox Code Playgroud)
创建的当前日志文件仅捕获还不够的 echo 语句。我想捕获执行的命令及其相关选项和参数。
我在一个由位于多个数据中心和办公地点的 CentOS 系统组成的环境中工作。我一直在使用带有可靠安装后脚本的合理启动,但希望简化和扩展该过程。我们有自己的 yum 存储库,我可以控制使用的硬件范围(通常是HP ProLiant 硬件或 VMWare),假设我每周构建或重新部署一台服务器。按照硬件准备所需的步骤,我开始安装操作系统。我现在遇到的问题是:
1)。将系统引导到网络安装程序的好方法。我一直在使用 CentOS 发行版中可用的 10mb boot.iso/netinstall.iso。我通过 VMWare vCenter(用于 VM)或 HP ILO(通常通过 SSH,指向 ISO 的 URL)安装它以启动安装。大多数情况下我无法使用 PXE,因为数据中心位置没有可用的 DHCP。例如,有没有一种干净的方法可以将 boot.iso 放到 USB 密钥上?
2)。有时我需要为 kickstart 设置一个静态 IP。除了boot:在安装程序提示符下在命令行中输入信息之外,是否有更好的方法来输入该信息?
3)。自定义 kickstart 的好方法。现在,我拥有了大部分我需要的东西,但有时需要更改分区方案以适应不同的 RAID 设置(例如两个 SmartArray 控制器)。现在,我基本上是为每个系统(或系统组)设置创建一个单独的 kickstart 文件。我最终得到一个充满旧 *.cfg 文件的目录。我知道有一种更优雅的方式来做到这一点。也许是 PHP?
4)。帮助安装方法。按原样,从提示到完成的完整构建需要 5-10 分钟。我注意到安装方法很重要,具体取决于位置。HTTP 在 yum 服务器本地运行良好,但在我们与其他站点的高带宽低延迟连接上表现不佳。NFS 在这些情况下效果更好。我很感激在 kickstart 过程之前用于预加载设置或系统参数的任何漂亮技巧。
5)。安装后脚本运行良好。它拉出额外的包,设置一些初始设置,修剪服务列表并填充一些用户/密码/SSH 密钥。我想让这个环境通过适当的配置管理运行(我已经习惯了CFEngine,但认为Puppet或Bcfg2现在可能是更好的选择)。我是否削减了安装后脚本并将这些功能移到 CFEngine 中?不过,这可能是一个不同的问题。
这是我一直在使用的 kickstart 文件的一个示例:
install
text
url --url http://yum.abc.com/5.6/os/x86_64/
#nfs …Run Code Online (Sandbox Code Playgroud) 现在,我正在通过repo指令指定要用于在 kickstart 文件中安装的存储库。然后,我重新指定要添加到/etc/yum.repos.d安装后的那些存储库。
有没有一种优雅的方法来避免信息重复?它已经咬过我一次。
也许我理解不正确,但是:该repo指令似乎仅用于指定 anaconda 用于安装的存储库。它实际上并没有在服务器上安装 repo。我的这个假设基于我在 kickstart 安装方面的经验。
这就是我在安装后再次安装存储库的原因。我想知道是否有更好的方法,这样我就不必在repo指令和安装后脚本中指定存储库。
我有一个小的 Kickstart 脚本(除其他外)连接到我们的 Puppet master,批准证书请求,然后为新服务器创建一个基本框架。
在我的 Kickstart 帖子部分,我有以下命令。
# Run the setup script.
exec < /dev/tty6 > /dev/tty6 2>&1
chvt 6
wget http://enoch/ks/setup.sh -O /root/setup.sh
chmod +x /root/setup.sh
bash /root/setup.sh
# And go back to Anaconda
chvt 1
exec < /dev/tty1 > /dev/tty1 2>&1
Run Code Online (Sandbox Code Playgroud)
在 setup.sh 我有这条线
ssh -t $USERNAME@puppetmaster auto_client.sh $HOSTNAME
Run Code Online (Sandbox Code Playgroud)
这在从命令行调用时非常有效,但是当我从 Kickstart 菜单运行它时,我的 SSH 窗口在原始终端下打开并破坏了脚本的其余部分。我该如何纠正?
我使用带有命令的 kickstart 文件clearpart --all --initlabel来确保 anaconda 在尝试创建和格式化新分区之前清除所有磁盘。
这在过去对我有用,在物理机器上。但是,在使用底层 LVM 卷作为存储的 KVM 来宾上执行此操作时,Anaconda 会在出现以下警告时等待用户输入:

我自己来回答这个问题。我错误地认为我的问题和解决方案与ServerFault 上的这个问题有关。由于它们不是,我正在创建并回答一个新问题。
尝试将一些文件从我的自定义 CentOS 7 安装 ISO 复制到 部分中的新安装%post。
我已经尝试了所有这些:
cp /dev/cdrom/scripts/myscript.sh /etc/myscripts/myscript.sh
cp /dev/cdrom:/scripts/myscript.sh /etc/myscripts/myscript.sh
cp /mnt/sysimage/root/scripts/myscript.sh /etc/myscripts/myscript.sh
cp /scripts/myscript.sh /etc/myscripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)
但没有一个人最终myscript.sh进入/etc/myscripts
安装在哪里挂载光盘?
更新
我试过了:
%post --nochroot
#!/bin/sh
set -x -v
cp -r /run/install/repo/scripts/myscript.sh /mnt/sysimage/etc/httpd/conf/myscript.sh
Run Code Online (Sandbox Code Playgroud)
这导致安装无法启动(只是挂在飞溅上)
更新 2
简单地做:
%post --nochroot
cp -r /run/install/repo/scripts/myscritp.sh /mnt/sysimage/etc/myscritp.sh
%end
Run Code Online (Sandbox Code Playgroud)
工作并且文件从安装媒体isolinux/scripts目录复制到/etc安装目标文件系统上的目录。
我正在尝试更多地了解 Linux 中的分区,特别是 LVM 分区。因此,我一直在查看有关此的许多来源,各种示例,但似乎没有一个对此进行更详细的介绍,因此我希望获得一些见解以更好地理解。
阅读RHEL 7 指南。它列出了xfs、ext4、ext3、ext2、vfat、swap、bios boot、bios boot with efi的可用文件系统。此处的 kickstart 语法部分引用了此部分(ctrl+f for --fstype)。在许多示例中,我注意到人们--fstype="lvmpv"在制作 LVM 物理卷时使用, 。这样做的目的是什么?如果我想为 做一个分区,不包括 fstype 之/var类的命令会不会part pv.4 \var...自动创建一个 LVM 物理卷?我只是觉得奇怪的是它被用作文件系统类型,但没有在文件系统部分中定义为有效值。
上述问题的第二部分与pv.id部分有关,我是否正确理解 id 可以是任何数字?有什么理由我不应该自动给我的每个物理卷编号 1,2,3,4..?我注意到在一些指南中人们pv.18用pv.11. 举个例子,这里的