我开始使用 Packer,我有一个问题。是否有添加 bash 脚本的解决方案,该脚本将在从镜像部署 VM 后自动启动且仅启动一次?
最佳答案
在linux虚拟机镜像的/etc/rc.local
中添加如下代码:
####Marker_start####
sed -i '/####Marker_start####/,/####Marker_end####/d' /etc/rc.local
#Your custom code here
####Marker_end####
解释:
- rc.local 脚本在每次系统启动后执行。因此,在此处添加代码将使其在启动后执行。
- 第一次执行脚本时使用 sed 删除自定义代码。因此,代码只执行一次。
其他方法:
创建一个包含您的自定义代码的脚本并将以下代码附加到它。
chmod 644 "$0"
& 创建符号链接(symbolic link)
ln -s /path/to/your-script.sh /etc/rc5.d/S99my-custom-script.sh
(假设您的默认运行级别是 5。根据您的 VM 发行版的需要更改它 - 例如,ubuntu 在 /etc/rc2.d
上有它)
说明:
名为 /etc/rc5.d/S*
的脚本在进入运行级别 5 时自动执行,参数为 start
。
在第一次执行时,将脚本设置为不可执行,以便它只执行一次。
关于bash - Packer 和安装后脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23291394/