我希望使用Packer(生成映像)和Ansible(提供程序)来配置Ubuntu AMI。
"name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
我遇到困难,因为某些任务尝试使用apt安装软件包,但是该锁由另一个进程持有。我很难确定最重要的是哪个进程正在控制锁,该特定进程的进展如何。
默认情况下,亚马逊设置的AMI将在启动[0]时安装安全更新,因此我假设是这样。正如文档所解释的,它可能与cloud-init有关?我相信这也与无人值守升级有关,因为正如您在此[1]粘贴中所看到的那样,有一个无人值守升级关机过程正在等待其他进程(apt?)在关机前完成升级安装。
如果使用sudo lslocks
,我会得到
amazon-ebs: "COMMAND PID TYPE SIZE MODE M START END PATH",
amazon-ebs: "lvmetad 433 POSIX 4B WRITE 0 0 0 /run/lvmetad.pid",
amazon-ebs: "iscsid 1082 POSIX 5B WRITE 0 0 0 /run/iscsid.pid",
amazon-ebs: "lxcfs 1110 POSIX 5B WRITE 0 0 0 /run/lxcfs.pid",
amazon-ebs: "cron 1134 FLOCK 5B WRITE 0 0 0 /run/crond.pid",
amazon-ebs: "atd 1127 POSIX 5B WRITE 0 0 0 /run/atd.pid"
这不会告诉我很多我感兴趣的锁文件。
如果我tail /var/log/cloud-init-output.log
,我看到cloud-init已完成工作。
如果我是tail /var/log/dpkg.log
,我会看到9月13日(今天不是今天)的日志。
如果我是tail /var/log/apt/term.log
,我会看到9月13日(今天不是今天)的日志。
此
>&1 sudo fuser '/var/lib/dpkg/lock-frontend' || echo aa ;
>&1 sudo fuser -vvv /var/lib/apt/lock || echo a ;
>&1 sudo lsof /var/lib/apt/lists/lock || echo b ;
>&1 sudo lsof /var/lib/dpkg/lock || echo c ;
>&1 sudo lsof /var/cache/apt/archives/lock || echo d ;
正在输出
aa
a
b
c
d
所以我知道这些锁定文件不存在。我很困惑,因为有关锁定文件的错误:Failed to lock apt for exclusive operation
。
我如何找到那个锁文件。最重要的是,我如何跟踪持有该锁的过程的进度?
谢谢!
[[0:安全更新文档]https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html
从cloud-init v.18.2或更高版本开始,cloud-init状态--wait将阻塞,直到cloud-init运行完毕。因此,在完成其余工作之前,脚本很容易利用。