Packer EBS 构建器的 KernelId
KernelId for Packer EBS builder
有没有办法设置内核 ID 以与 Packer EBS 构建器一起使用?
我正在尝试为安装了 NVIDIA 驱动程序的 ECS(弹性容器服务)构建 AMI(Amazon 机器映像),以便我可以 运行 容器内的 GPU 任务。
这是我的 Packer 文件:
{
"variables": {
"aws_access_key": "",
"aws_secret_key": "",
"region": "us-west-2",
"ami": "ami-62d35c02",
"ami_arch": "x86_64",
"nvidia_release": "367.57"
},
"builders": [
{
"type": "amazon-ebs",
"access_key": "{{ user `aws_access_key` }}",
"secret_key": "{{ user `aws_secret_key` }}",
"region": "{{ user `region` }}",
"source_ami": "{{ user `ami` }}",
"instance_type": "g2.2xlarge",
"ssh_username": "ec2-user",
"ami_name": "ecs-machine-image",
"user_data": "#cloud-config\nrepo_releasever: 2016.09"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"sudo yum update -y",
"sudo yum groupinstall -y \"Development Tools\"",
"sudo yum install -y kernel-devel-$(uname -r)",
"cd /tmp",
"curl -L -O http://us.download.nvidia.com/XFree86/Linux-{{ user `ami_arch` }}/{{ user `nvidia_release` }}/NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run",
"chmod +x NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run",
"echo `uname -a`",
"sudo sh -c \"./NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run -silent\""
]
}
]
}
这构建很好,但是回显内核版本的行(即 uname -r
)表明加壳器构建器正在 运行 安装内核 4.4.51-40.58
的机器。但是,当我使用此 AMI 通过 AWS 控制台启动实例时,我看到该实例是 运行ning 内核 4.9.20-11.31
,因此无法找到内核模块 nvidia
,它如果我 运行 find
出现在 /lib/modules/4.4.51-40.58/...
.
中
我尝试让 Packer 暂存包含以下内容的 /boot/grub/menu.lst
文件:
# created by imagebuilder
default=0
timeout=0
hiddenmenu
title Amazon Linux 2016.09 (4.4.51-40.58.amzn1.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-4.4.51-40.58.amzn1.x86_64 root=LABEL=/
console=tty1 console=ttyS0
initrd /boot/initramfs-4.4.51-40.58.amzn1.x86_64.img
通过此更改,我再次启动一个实例,但它是 运行ning 4.4.51-40.60
,而不是 4.4.51-40.58
,并且 [=21] 中有一个相应的额外条目=] 我没有指定。
在我尝试执行反模式时是否将内核模块构建到 Packer EBS 映像中,或者我是否遗漏了什么?
g2.2xlarge
仅适用于 HVM 且 Kernel Id 仅适用于 PV 实例。
相反,问题是您这样做了:
sudo yum update -y
这将安装一个将在下次启动时使用的新内核。但是随后您为当前 运行 内核安装了 Nvidia 驱动程序。
curl -L -O http://us.download.nvidia.com/XFree86/Linux-{{ user `ami_arch` }}/{{ user `nvidia_release` }}/NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run
chmod +x NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run
echo `uname -a`
sudo sh -c "./NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run -silent"
如果您不更新内核,或者如果您明确地为新内核构建一个模块,我希望它能正常工作。
有没有办法设置内核 ID 以与 Packer EBS 构建器一起使用?
我正在尝试为安装了 NVIDIA 驱动程序的 ECS(弹性容器服务)构建 AMI(Amazon 机器映像),以便我可以 运行 容器内的 GPU 任务。
这是我的 Packer 文件:
{
"variables": {
"aws_access_key": "",
"aws_secret_key": "",
"region": "us-west-2",
"ami": "ami-62d35c02",
"ami_arch": "x86_64",
"nvidia_release": "367.57"
},
"builders": [
{
"type": "amazon-ebs",
"access_key": "{{ user `aws_access_key` }}",
"secret_key": "{{ user `aws_secret_key` }}",
"region": "{{ user `region` }}",
"source_ami": "{{ user `ami` }}",
"instance_type": "g2.2xlarge",
"ssh_username": "ec2-user",
"ami_name": "ecs-machine-image",
"user_data": "#cloud-config\nrepo_releasever: 2016.09"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"sudo yum update -y",
"sudo yum groupinstall -y \"Development Tools\"",
"sudo yum install -y kernel-devel-$(uname -r)",
"cd /tmp",
"curl -L -O http://us.download.nvidia.com/XFree86/Linux-{{ user `ami_arch` }}/{{ user `nvidia_release` }}/NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run",
"chmod +x NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run",
"echo `uname -a`",
"sudo sh -c \"./NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run -silent\""
]
}
]
}
这构建很好,但是回显内核版本的行(即 uname -r
)表明加壳器构建器正在 运行 安装内核 4.4.51-40.58
的机器。但是,当我使用此 AMI 通过 AWS 控制台启动实例时,我看到该实例是 运行ning 内核 4.9.20-11.31
,因此无法找到内核模块 nvidia
,它如果我 运行 find
出现在 /lib/modules/4.4.51-40.58/...
.
我尝试让 Packer 暂存包含以下内容的 /boot/grub/menu.lst
文件:
# created by imagebuilder
default=0
timeout=0
hiddenmenu
title Amazon Linux 2016.09 (4.4.51-40.58.amzn1.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-4.4.51-40.58.amzn1.x86_64 root=LABEL=/
console=tty1 console=ttyS0
initrd /boot/initramfs-4.4.51-40.58.amzn1.x86_64.img
通过此更改,我再次启动一个实例,但它是 运行ning 4.4.51-40.60
,而不是 4.4.51-40.58
,并且 [=21] 中有一个相应的额外条目=] 我没有指定。
在我尝试执行反模式时是否将内核模块构建到 Packer EBS 映像中,或者我是否遗漏了什么?
g2.2xlarge
仅适用于 HVM 且 Kernel Id 仅适用于 PV 实例。
相反,问题是您这样做了:
sudo yum update -y
这将安装一个将在下次启动时使用的新内核。但是随后您为当前 运行 内核安装了 Nvidia 驱动程序。
curl -L -O http://us.download.nvidia.com/XFree86/Linux-{{ user `ami_arch` }}/{{ user `nvidia_release` }}/NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run
chmod +x NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run
echo `uname -a`
sudo sh -c "./NVIDIA-Linux-{{ user `ami_arch` }}-{{ user `nvidia_release` }}.run -silent"
如果您不更新内核,或者如果您明确地为新内核构建一个模块,我希望它能正常工作。