有没有办法在出现时将接口的IP地址写入文件?
Is there a way to write the ip-address of an interface to a file when it comes up?
我正在寻找一种方法来触发将主机的 IP 地址写入文件 /etc/environment 一旦联网。
现在,我所有的 IP 都是静态的。我希望将来他们也能成为 DHCP。
例如:当 eth0 启动并为其分配从 10-eth0.network 配置的 IP 时,该 ip 以某种形式写入 /etc/environment
private_ipv4=x.x.x.x
public_ipv4=y.y.y.y
我会考虑其他选项,例如可以 运行 来自可以执行相同操作的 systemd 服务的脚本。我不介意它是否需要配置。例如,告诉它哪个接口和可能的网络前缀被认为是 public 与私有。
根据您的发行版,您可以 dhclient
进行写作。
参见:dhclient(8)
、dhclient-script(8)
和 dhclient.conf(5)
您可以编写脚本 /etc/dhclient-exit-hooks
,测试 BOUND
条件并编写您想要的内容。
我通过这个 link 找到了一个可行的解决方案。
似乎 coreos-cloud-init 将 COREOS_PUBLIC_IPV4 和 COREOS_PRIVATE_IPV4 写入 /etc/environment 如果这些变量在 cloud-init 运行之前的环境中。这个脚本实现了同样的事情,可以简单地复制到 /usr/share/oem/cloud-config.yml
#!/bin/sh
workdir=$(mktemp --directory)
trap "rm --force --recursive ${workdir}" SIGINT SIGTERM EXIT
cat << EOF >"${workdir}/cloud-config.yml"
#cloud-config
coreos:
etcd:
discovery:
addr: \$public_ipv4:4001
peer-addr: \$private_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
EOF
get_ipv4() {
IFACE=""
local ip
while [ -z "${ip}" ]; do
ip=$(ip -4 -o addr show dev "${IFACE}" scope global | gawk '{split (, out, "/"); print out[1]}')
sleep .1
done
echo "${ip}"
}
export COREOS_PUBLIC_IPV4=$(get_ipv4 eth0)
export COREOS_PRIVATE_IPV4=$(get_ipv4 eth1)
coreos-cloudinit --from-file="${workdir}/cloud-config.yml"
我正在寻找一种方法来触发将主机的 IP 地址写入文件 /etc/environment 一旦联网。
现在,我所有的 IP 都是静态的。我希望将来他们也能成为 DHCP。
例如:当 eth0 启动并为其分配从 10-eth0.network 配置的 IP 时,该 ip 以某种形式写入 /etc/environment
private_ipv4=x.x.x.x
public_ipv4=y.y.y.y
我会考虑其他选项,例如可以 运行 来自可以执行相同操作的 systemd 服务的脚本。我不介意它是否需要配置。例如,告诉它哪个接口和可能的网络前缀被认为是 public 与私有。
根据您的发行版,您可以 dhclient
进行写作。
参见:dhclient(8)
、dhclient-script(8)
和 dhclient.conf(5)
您可以编写脚本 /etc/dhclient-exit-hooks
,测试 BOUND
条件并编写您想要的内容。
我通过这个 link 找到了一个可行的解决方案。 似乎 coreos-cloud-init 将 COREOS_PUBLIC_IPV4 和 COREOS_PRIVATE_IPV4 写入 /etc/environment 如果这些变量在 cloud-init 运行之前的环境中。这个脚本实现了同样的事情,可以简单地复制到 /usr/share/oem/cloud-config.yml
#!/bin/sh
workdir=$(mktemp --directory)
trap "rm --force --recursive ${workdir}" SIGINT SIGTERM EXIT
cat << EOF >"${workdir}/cloud-config.yml"
#cloud-config
coreos:
etcd:
discovery:
addr: \$public_ipv4:4001
peer-addr: \$private_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
EOF
get_ipv4() {
IFACE=""
local ip
while [ -z "${ip}" ]; do
ip=$(ip -4 -o addr show dev "${IFACE}" scope global | gawk '{split (, out, "/"); print out[1]}')
sleep .1
done
echo "${ip}"
}
export COREOS_PUBLIC_IPV4=$(get_ipv4 eth0)
export COREOS_PRIVATE_IPV4=$(get_ipv4 eth1)
coreos-cloudinit --from-file="${workdir}/cloud-config.yml"