Packer 可以用于安装和配置裸机服务器吗?Packer 为 Web 服务器提供存储库包和 preseed/kickstart,并且可以运行一些其他配置软件(ansible、puppet、chef 等)。可以用来安装裸机服务器吗?如果是,packer .json 应该是什么样子的?
是否可以通过引导提示向 Debian 安装程序添加变量,以便可以在预置文件中使用该变量?
特别是,我正在尝试解决以下问题:
我们有一个非常广泛的安装后脚本,通常是从服务器下载的。但是现在我想创建 Packer 映像并将安装后脚本与其他 Packer 文件一起保留在版本控制中。为了访问 preseed,我可以在引导命令中执行“preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg”。但现在我希望安装程序从同一位置下载安装后脚本。
目前,安装后挂钩如下所示:
d-i preseed/late_command string wget -q -O /tmp/postinstall.sh http://our.public.server/postinstall.jessie.sh ; sh /tmp/postinstall.sh
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做类似的事情:
d-i preseed/late_command string wget -q -O /tmp/postinstall.sh http://{{ .HTTPIP }}:{{ .HTTPPort }}/postinstall.jessie.sh ; sh /tmp/postinstall.sh
Run Code Online (Sandbox Code Playgroud)
但是当然 Debian 安装程序不会用所需的值替换那些。所以我在想有可能将类似环境变量的变量传递给我们可以在 preseed 文件中使用的安装程序。
任何提示或提示表示赞赏!
编辑:尝试将 late_command 添加到引导命令中,但没有被接受。
编辑:尝试预置/运行,但它在不允许目标内命令的不同环境中运行。
编辑:这可以是一种解决方法:如何在 debian preseed 文件中通过管道将命令组合在一起?但我更喜欢将脚本放在一个单独的文件中。如果不可能,那也是不可能的。
我是一名 Linux 管理员,我的新工作是管理 Windows 服务器。
我正在尝试使用packer创建 Windows Server 2012 基本映像。作为配置的一部分,VM 需要通过脚本连接到活动目录。显然我不想将我的个人密码放入脚本中。
是否可以在 Active Directory 中创建一个用户,该用户有权将机器绑定到 AD,但不能执行任何其他操作(为了合规性)?
我目前正在准备 CentOS 7 和 Ubuntu 14.04 的 OpenStack 就绪映像。
对于“自动化”,我使用Packer,它由您通过 JSON 模板提供。Packer 然后使用您指定的虚拟化开始安装(在我的例子中是 qemu)。
安装后,Packer 和您提供的脚本通过 SSH 配置虚拟机。
状态:
我想在这里实现的目标:
问题:
这是行不通的。如果我只安装cloud-initorcloud-init和cloud-utilsorcloud-init和cloud-utilsand都没有关系cloud-utils-growpart。cloud-init除了通过 ssh 启用 root 登录之外,我不会更改默认配置。
除了这一行,我的 cloud-init 配置是标准配置
disable_root: 0
问题:有人已经这样做了吗?我似乎找不到一个有效的例子
我正在尝试制作打包机映像,但在我们的亚马逊帐户中,我们没有默认 VPC。它已被移除。并且在尝试打包图像时出现此错误:
==> amazon-instance: Inspecting the source AMI...
==> amazon-instance: Creating temporary keypair: packer 54cfd9c9-61ef-5f8f-4091-d27e731a8a4d
==> amazon-instance: Creating temporary security group for this instance...
==> amazon-instance: No default VPC for this user (VPCIdNotSpecified)
==> amazon-instance: Deleting temporary keypair...
Build 'amazon-instance' finished.
Run Code Online (Sandbox Code Playgroud)
因此我应该指定一个默认的 VPC id 或子网 id。
我两个都试过了
{
"variables": {
"vpc_id ": "vpc-962438f4",
"subnet_id": "subnet-1c5d5c68"
},
"builders": [{
"type": "amazon-instance",
"access_key": "somekey"
"secret_key": "somekey"
"account_id": "AccountIDNUMBER"
"region": "ap-southeast-2",
"source_ami": "ami-b7eb9e8d",
"s3_bucket": "layer2amis",
"x509_cert_path": "packer/cert-x509.pem",
"x509_key_path": "packer/key-x509.pem",
"instance_type": "t2.medium",
"ssh_username": "ubuntu", …Run Code Online (Sandbox Code Playgroud) 我使用 Packer 构建 VirtualBox 镜像,使用 Ansible 配置器来设置镜像。构建器步骤创建一个临时用户(ssh_username和ssh_password)。Ansible 供应器使用此临时用户运行。当然,我想在设置我们更安全的仅公钥用户后摆脱这个用户。因此,我添加了第二个 Ansible 配置步骤,以安全用户身份连接并删除不安全用户。或者至少这是计划。但是,Ansible via packer 无法使用这种方法实际连接到 VM。
这是 packer.json 文件的相关部分:
"provisioners": [
{
"type": "ansible",
"playbook_file": "playbooks/image/image.yml",
"groups": [
"{{user `ansible_group`}}"
],
"user": "vagrant",
"extra_arguments": [
"--vault-password-file", "scripts/get-vault-password.sh",
"-e", "global_configuration_user={{user `configuration_user`}}",
"-e", "global_deployment_user={{user `deployment_user`}}",
"-e", "ansible_ssh_pass=vagrant",
"-vvvvv"
]
},
{
"type": "ansible",
"playbook_file": "playbooks/image/removeVagrant.yml",
"groups": [
"{{user `ansible_group`}}"
],
"user": "{{user `configuration_user`}}",
"extra_arguments": [
"--vault-password-file", "scripts/get-vault-password.sh",
"-e", "global_configuration_user={{user `configuration_user`}}",
"-e", "global_deployment_user={{user `deployment_user`}}",
"-e", "ansible_ssh_private_key_file=~/.ssh/id_{{user `configuration_user`}}_rsa",
"-vvvvv"
]
}
], …Run Code Online (Sandbox Code Playgroud) apt我在官方 Ubuntu 映像 ( ) 上遇到各种不一致的错误ami-83e769fb。我使用 Packer 构建 AMI,大约 40% 的情况下会失败。重新运行脚本成功。
我的脚本运行:
sudo apt-get clean all
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
在安装任何软件包之前。
有时我会收到此错误:
amazon-ebs: W: GPG error: http://archive.ubuntu.com/ubuntu artful InRelease: Splitting up /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_artful_InRelease into data and signature failed
amazon-ebs: E: The repository 'http://archive.ubuntu.com/ubuntu artful InRelease' is not signed.
Run Code Online (Sandbox Code Playgroud)
有时apt-get update会击中http://us-west-2.ec2.archive.ubuntu.com/ubuntu……有时却不会。
其他时候软件包丢失(如apache2或python3)。
我不明白为什么这种行为不一致。
如何让apt-get update官方 Ubuntu AMI 持续工作?
首次创建 VM 时,它会获得一个用于运行配置的安装用户。我想在最后一步删除该用户,因为它不一定安全而且没有必要。但是,Packer 以该用户身份运行所有配置程序。我尝试过使用 Ansible,但它似乎仍然以某种身份使用该用户,因此 Ansible 剧本实际上无法在不失败的情况下删除它(也就是说有程序仍在以给定用户身份运行)。我不是在胡言乱语,而是问是否有人对如何实现这个目标有任何想法,这应该很简单,但事实证明并非如此。
packer ×9
ansible ×2
ubuntu ×2
amazon-ami ×1
apt ×1
centos ×1
cloud-init ×1
debian ×1
deployment ×1
image ×1
openstack ×1
preseed ×1
private-key ×1
ssh ×1
terraform ×1