我正在使用带有自定义脚本扩展的 Azure ARM 模板部署 linux ubuntu 16.04 LTS VMSS。 customscript.sh的内容:
apt-get update
apt-get install build-essential -y
...
但它在此更新步骤本身失败并出现错误:
Splitting up /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_InRelease into data and signature failedE: GPG error: http://archive.ubuntu.com/ubuntu xenial InRelease: Clearsigned file isn't valid, got 'NODATA' (does the network require authentication?)
当我登录虚拟机并执行 apt-get update 时,它运行成功。
使用自定义脚本扩展部署 Linux VMSS 的 ARM 模板:
"virtualMachineProfile": {
"extensionProfile": {
"extensions": [
{
"name": "Custom Deployment",
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"protectedSettings": {
"commandToExecute": "[concat('/bin/bash customscript.sh')]",
"fileUris": [
"[parameters('scriptToExecuteLinux')]"
]
},
"type": "CustomScript"
}
},
}
......
}
如果我执行的任何步骤不正确,请告诉我。 预先感谢。
我基本上没有使用azure的经验,但可能是您以错误的用户身份运行脚本,如果您以root身份运行脚本,也许尝试以普通用户身份运行它。如果您以用户身份运行此脚本,也许可以尝试以 root 身份运行它。
我在您的代码中发现了几个问题 1.我认为你没有正确使用concat函数。只有一个论点 2. 交叉检查您是否拥有此处提到的扩展架构中的所有键值对:https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-linux
更详细的错误,请检查文件/var/lib/waagent/custom-script/download/0/stderr,你可能会找到一些答案。
当您手动运行它时,您尝试过
/bin/bash script.sh
还是sh script.sh
?
我知道我落后了 3 年,但你无法将 apt-get update 作为虚拟机规模集中的第一个命令运行,因为 Azure 默认情况下会这样做。
由于您使用的是规模集虚拟机,因此工作流程是预配虚拟机,运行 apt-get update,然后下载并执行自定义脚本。
我认为正在发生的情况是,您的虚拟机实例同时在两个不同的进程中运行两个 apt-get update 命令。您只能在一个进程中运行 apt-get update 以避免竞争条件和其他多线程问题。
您的自定义脚本无法获取锁,因此您可能会收到“无法获取锁/var/lib/apt/lists/lock。它由进程 870 (python3) E: 无法锁定目录/var/lib/apt/lists/"
解决办法很简单。只需删除 apt-get update 即可,因为虚拟机在配置/更新时已经在执行该操作了。