gpt4 book ai didi

freebsd - 是否可以编写启动 FreeBSD VM、在其中运行程序并获取结果的脚本?

转载 作者:行者123 更新时间:2023-12-04 15:28:56 28 4
gpt4 key购买 nike

我有一个库,我想在 FreeBSD 上测试它。我的 CI 设置没有任何 FreeBSD 系统,添加它们会很困难,但是可以在我的 CI 脚本中启动一个 VM。 (事实上​​ ,我已经这样做是为了在更奇特的 Linux 内核版本上进行测试。)

对于 Linux,这非常简单:从某个发行版站点获取预构建的机器镜像,然后使用 cloud-init 注入(inject)首次运行的脚本,完成。

是否可以用 FreeBSD 做同样的事情?我正在寻找一种自动获取标准 FreeBSD 机器镜像(例如从 https://freebsd.org 下载)、启动它并注入(inject)要运行的程序的方法。棘手的部分是它应该是完全自动化的——我不想每次 FreeBSD 发布新版本时都必须手动点击安装程序。

最佳答案

开箱即用,没有像 cloud-init 这样的选项,但您可以创建自己的图像并使用 firstboot例如,此脚本用于引导带有 saltstack 的 VM在 AWS 中:

#!/bin/sh

# KEYWORD: firstboot
# PROVIDE: set_hostname
# REQUIRE: NETWORKING
# BEFORE: login

. /etc/rc.subr

name="set_hostname"
rcvar=set_hostname_enable
start_cmd="set_hostname_run"
stop_cmd=":"

export AWS_ACCESS_KEY_ID=key
export AWS_SECRET_ACCESS_KEY=secret
export AWS_DEFAULT_REGION=region

TAG_NAME="Salt"
INSTANCE_ID=$(/usr/local/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id)
REGION=$(/usr/local/bin/curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//')
TAG_VALUE=$(/usr/local/bin/aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE_ID}" "Name=key,Values=$TAG_NAME" --region ${REGION} --output=text | cut -f5)

set_hostname_run()
{
hostname ${INSTANCE_ID}
sysrc hostname="${INSTANCE_ID}"
sysrc salt_minion_enable="YES"
echo ${INSTANCE_ID} > /usr/local/etc/salt/minion_id
pw usermod root -c "root on ${INSTANCE_ID}"
if [ ! -z "${TAG_VALUE}" ]; then
echo "node_type: ${TAG_VALUE}" > /usr/local/etc/salt/grains
fi
service salt_minion start
}

load_rc_config $name
run_rc_command "$1"

要创建您自己的图像,您可以使用此脚本作为起点:https://github.com/fabrik-red/images/blob/master/fabrik.sh#L124 ,更多信息在这里:https://fabrik.red/post/creating-the-image/

您也可以简单地在 Virtualbox 中安装 FreeBSD,配置与 firstboot 相关的脚本,进行测试,当您对结果满意时,将其导出,只是在导出之前要小心 /firstboot 存在 (touch/firstboot),因为在第一次启动后它将被删除,并且在导出后如果不存在它可能不会调用脚本。

创建镜像后,您可以多次使用它,无需每次都创建一个新的“自定义”VM,这完全取决于您用于引导的脚本并在“firstboot”上加载脚本。

关于freebsd - 是否可以编写启动 FreeBSD VM、在其中运行程序并获取结果的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61686483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com