标签: packer

有没有办法使用 Packer 配置裸机?

Packer 可以用于安装和配置裸机服务器吗?Packer 为 Web 服务器提供存储库包和 preseed/kickstart,并且可以运行一些其他配置软件(ansible、puppet、chef 等)。可以用来安装裸机服务器吗?如果是,packer .json 应该是什么样子的?

packer

10
推荐指数
1
解决办法
8302
查看次数

传递变量以在 Debian Jessie 安装的 preseed 文件中使用

是否可以通过引导提示向 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 文件中通过管道将命令组合在一起?但我更喜欢将脚本放在一个单独的文件中。如果不可能,那也是不可能的。

debian environment-variables preseed packer

9
推荐指数
2
解决办法
5266
查看次数

如何使用 terraform.io 在不停机或不丢失数据的情况下更改有状态服务器的图像?

假设我有应用程序服务器、数据库服务器和一些 dns-round-robin 负载平衡器。所有这些都由使用Packer创建的图像提供支持,并使用Terraform管理部署。当实例被破坏和重新创建时,如何更改数据库服务器的图像而不破坏它们的数据?

我能想到的最简单的事情是关闭写入,对数据库进行快照,然后将快照还原到新服务器。但是像那样依赖手动摆弄感觉真的很不对,为了简单的升级而将服务下线也感觉不对。有一种更清洁更好的方法,对吧?

image deployment infrastructure packer terraform

6
推荐指数
1
解决办法
2510
查看次数

Active Directory,创建用户只是为了将计算机添加到域中

我是一名 Linux 管理员,我的新工作是管理 Windows 服务器。

我正在尝试使用packer创建 Windows Server 2012 基本映像。作为配置的一部分,VM 需要通过脚本连接到活动目录。显然我不想将我的个人密码放入脚本中。

是否可以在 Active Directory 中创建一个用户,该用户有权将机器绑定到 AD,但不能执行任何其他操作(为了合规性)?

active-directory packer

6
推荐指数
2
解决办法
5332
查看次数

cloud-init 不会增加分区或文件系统

我目前正在准备 CentOS 7 和 Ubuntu 14.04 的 OpenStack 就绪映像。

对于“自动化”,我使用Packer,它由您通过 JSON 模板提供。Packer 然后使用您指定的虚拟化开始安装(在我的例子中是 qemu)。

安装后,Packer 和您提供的脚本通过 SSH 配置虚拟机。

状态:

  • 根磁盘有 3 GB。
  • 一个分区,ext4,引导标志,100% 的根磁盘。

我想在这里实现的目标:

  • 图像应在第一次启动时将自身调整为磁盘的最大大小

问题:

这是行不通的。如果我只安装cloud-initorcloud-initcloud-utilsorcloud-initcloud-utilsand都没有关系cloud-utils-growpartcloud-init除了通过 ssh 启用 root 登录之外,我不会更改默认配置。

除了这一行,我的 cloud-init 配置是标准配置

disable_root: 0

问题:有人已经这样做了吗?我似乎找不到一个有效的例子

ubuntu centos openstack cloud-init packer

5
推荐指数
1
解决办法
5834
查看次数

Packer 无法将 aws 映像打包到 VPC 中

我正在尝试制作打包机映像,但在我们的亚马逊帐户中,我们没有默认 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)

amazon-web-services packer

5
推荐指数
1
解决办法
9430
查看次数

Packer 不会在配置步骤中正确使用私钥进行 SSH 身份验证

我使用 Packer 构建 VirtualBox 镜像,使用 Ansible 配置器来设置镜像。构建器步骤创建一个临时用户(ssh_usernamessh_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)

ssh private-key ansible packer

5
推荐指数
1
解决办法
3566
查看次数

官方 Ubuntu AWS AMI 上的“apt-get update”行为不一致

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……有时却不会。

其他时候软件包丢失(如apache2python3)。

我不明白为什么这种行为不一致。

如何让apt-get update官方 Ubuntu AMI 持续工作?

ubuntu amazon-ami amazon-web-services apt packer

5
推荐指数
2
解决办法
1836
查看次数

使用 Packer 删除安装用户

首次创建 VM 时,它会获得一个用于运行配置的安装用户。我想在最后一步删除该用户,因为它不一定安全而且没有必要。但是,Packer 以该用户身份运行所有配置程序。我尝试过使用 Ansible,但它似乎仍然以某种身份使用该用户,因此 Ansible 剧本实际上无法在不失败的情况下删除它(也就是说有程序仍在以给定用户身份运行)。我不是在胡言乱语,而是问是否有人对如何实现这个目标有任何想法,这应该很简单,但事实证明并非如此。

user-management ansible packer

4
推荐指数
2
解决办法
3015
查看次数