Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(openbsd): services & build tool #4660

Merged
merged 1 commit into from
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions cloudinit/net/activators.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,33 @@ def bring_down_interface(device_name: str) -> bool:
return _alter_interface(cmd, device_name)


class IfConfigActivator(NetworkActivator):
@staticmethod
def available(target=None) -> bool:
"""Return true if ifconfig can be used on this system."""
expected = "ifconfig"
search = ["/sbin"]
return subp.which(expected, search=search, target=target)

@staticmethod
def bring_up_interface(device_name: str) -> bool:
"""Bring up interface using ifconfig <dev> up.

Return True is successful, otherwise return False
"""
cmd = ["ifconfig", device_name, "up"]
return _alter_interface(cmd, device_name)

@staticmethod
def bring_down_interface(device_name: str) -> bool:
"""Bring up interface using ifconfig <dev> down.

Return True is successful, otherwise return False
"""
cmd = ["ifconfig", device_name, "down"]
return _alter_interface(cmd, device_name)


class NetworkManagerActivator(NetworkActivator):
@staticmethod
def available(target=None) -> bool:
Expand Down Expand Up @@ -220,13 +247,15 @@ def bring_down_interface(device_name: str) -> bool:
"netplan",
"network-manager",
"networkd",
"ifconfig",
]

NAME_TO_ACTIVATOR: Dict[str, Type[NetworkActivator]] = {
"eni": IfUpDownActivator,
"netplan": NetplanActivator,
"network-manager": NetworkManagerActivator,
"networkd": NetworkdActivator,
"ifconfig": IfConfigActivator,
}


Expand Down
6 changes: 6 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@ def render_tmpl(template, mode=None, is_yaml=False):
for f in glob("sysvinit/netbsd/*")
if is_f(f)
],
"sysvinit_openbsd": lambda: [
render_tmpl(f, mode=0o755)
for f in glob("sysvinit/openbsd/*")
if is_f(f)
],
"sysvinit_deb": lambda: [f for f in glob("sysvinit/debian/*") if is_f(f)],
"sysvinit_openrc": lambda: [
f for f in glob("sysvinit/gentoo/*") if is_f(f)
Expand All @@ -156,6 +161,7 @@ def render_tmpl(template, mode=None, is_yaml=False):
"sysvinit": "etc/rc.d/init.d",
"sysvinit_freebsd": "usr/local/etc/rc.d",
"sysvinit_netbsd": "usr/local/etc/rc.d",
"sysvinit_openbsd": "etc/rc.d",
"sysvinit_deb": "etc/init.d",
"sysvinit_openrc": "etc/init.d",
"systemd": pkg_config_read("systemd", "systemdsystemunitdir"),
Expand Down
37 changes: 37 additions & 0 deletions sysvinit/openbsd/cloudconfig.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
## template:jinja
CodeBleu marked this conversation as resolved.
Show resolved Hide resolved
#!/bin/ksh

# PROVIDE: cloudconfig
# REQUIRE: cloudinit
# BEFORE: sshd


daemon="cloud-init"
daemon_execdir="{{prefix}}/bin"
daemon_flags="modules --mode config"
daemon_user=root

. /etc/rc.d/rc.subr

rc_bg="YES" # (undefined or "YES")
holmanb marked this conversation as resolved.
Show resolved Hide resolved
rc_usercheck="YES" # (undefined or "NO")

rc_start() {
if test -e /etc/cloud/cloud-init.disabled; then
echo -n "cloud-init is disabled via cloud-init.disabled file." | logger -t ${daemon}
else
echo -n "Starting..." | logger -t ${daemon}
rc_exec "${daemon_execdir}/${daemon} ${daemon_flags}"
fi
}

rc_check() {
pgrep -f "${daemon}" >/dev/null
}

rc_stop() {
echo -n "Stopping..." | logger -t ${daemon}
pkill -f "${daemon}" >/dev/null
holmanb marked this conversation as resolved.
Show resolved Hide resolved
}

rc_cmd "$1"
35 changes: 35 additions & 0 deletions sysvinit/openbsd/cloudfinal.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## template:jinja
#!/bin/ksh

# PROVIDE: cloudfinal
# REQUIRE: LOGIN cloudconfig

daemon="cloud-init"
daemon_execdir="{{prefix}}/bin"
daemon_flags="modules --mode final"
daemon_user=root

. /etc/rc.d/rc.subr

rc_bg="YES" # (undefined or "YES")
rc_usercheck="YES" # (undefined or "NO")

rc_start() {
if test -e /etc/cloud/cloud-init.disabled; then
echo -n "cloud-init is disabled via cloud-init.disabled file." | logger -t ${daemon}
else
echo -n "Starting..." | logger -t ${daemon}
rc_exec "${daemon_execdir}/${daemon} ${daemon_flags}"
fi
}

rc_check() {
pgrep -f "${daemon}" >/dev/null
}

rc_stop() {
echo -n "Stopping..." | logger -t ${daemon}
pkill -f "${daemon}" >/dev/null
}

rc_cmd "$1"
35 changes: 35 additions & 0 deletions sysvinit/openbsd/cloudinit.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## template:jinja
#!/bin/ksh

# PROVIDE: cloudinit
# REQUIRE: cloudinitlocal

daemon="cloud-init"
daemon_execdir="{{prefix}}/bin"
daemon_flags="init"
daemon_user=root

. /etc/rc.d/rc.subr

rc_bg="YES" # (undefined or "YES")
rc_usercheck="YES" # (undefined or "NO")

rc_start() {
if test -e /etc/cloud/cloud-init.disabled; then
echo -n "cloud-init is disabled via cloud-init.disabled file." | logger -t ${daemon}
else
echo -n "Starting..." | logger -t ${daemon}
rc_exec "${daemon_execdir}/${daemon} ${daemon_flags}"
fi
}

rc_check() {
pgrep -f "${daemon}" >/dev/null
}

rc_stop() {
echo -n "Stopping..." | logger -t ${daemon}
pkill -f "${daemon}" >/dev/null
}

rc_cmd "$1"
38 changes: 38 additions & 0 deletions sysvinit/openbsd/cloudinitlocal.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
## template:jinja
#!/bin/ksh

# PROVIDE: cloudinitlocal
# REQUIRE: NETWORKING

# After NETWORKING because we don't want staticroute to wipe
# the route set by the DHCP client toward the meta-data server.

daemon="cloud-init"
daemon_execdir="{{prefix}}/bin"
daemon_flags="init -l"
daemon_user=root

. /etc/rc.d/rc.subr

rc_bg="YES" # (undefined or "YES")
rc_usercheck="YES"

rc_start() {
if test -e /etc/cloud/cloud-init.disabled; then
CodeBleu marked this conversation as resolved.
Show resolved Hide resolved
CodeBleu marked this conversation as resolved.
Show resolved Hide resolved
echo -n "cloud-init is disabled via cloud-init.disabled file." | logger -t ${daemon}
else
echo -n "Starting..." | logger -t ${daemon}
rc_exec "${daemon_execdir}/${daemon} ${daemon_flags}"
fi
}

rc_check() {
pgrep -f "${daemon}" >/dev/null
}

rc_stop() {
echo -n "Stopping..." | logger -t ${daemon}
pkill -f "${daemon}" >/dev/null
}

rc_cmd "$1"
46 changes: 41 additions & 5 deletions tools/build-on-openbsd
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

fail() { echo "FAILED:" "$@" 1>&2; exit 1; }

PYTHON=${PYTHON:-python3}
if ! command -v ${PYTHON} >/dev/null 2>&1; then
echo "Please install python first."
exit 1
fi

# Check dependencies:
depschecked=/tmp/c-i.dependencieschecked
pkgs="
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

n.b.: following #4654, we can drop the dependency on dmidecode

Expand All @@ -16,12 +22,42 @@ pkgs="
py3-setuptools
py3-yaml
sudo--
wget
CodeBleu marked this conversation as resolved.
Show resolved Hide resolved
"
[ -f "$depschecked" ] || pkg_add "${pkgs}" || fail "install packages"

touch $depschecked
[ -f $depschecked ] || echo "Installing the following packages: $pkgs"; output=$(pkg_add -zI $pkgs 2>&1)


if echo "$output" | grep -q -e "Can't find" -e "Ambiguous"; then
echo "Failed to find or install one or more packages"
echo "Failed Package(s):"
echo "$output"
exit 1
else
echo Successfully installed packages
touch $depschecked

python3 setup.py build
python3 setup.py install -O1 --distro openbsd --skip-build --init-system sysvinit_openbsd

echo "Installation completed."
RC_LOCAL="/etc/rc.local"
RC_LOCAL_CONTENT="

python3 setup.py build
python3 setup.py install -O1 --distro openbsd --skip-build
/usr/lib/cloud-init/ds-identify

echo "Installation completed."
cloud-init init --local

cloud-init init

cloud-init modules --mode config

cloud-init modules --mode final
holmanb marked this conversation as resolved.
Show resolved Hide resolved
"
if ! test -e $RC_LOCAL; then
echo "export PATH=$PATH:/usr/local/sbin:/usr/local/bin" >> $RC_LOCAL
echo "$RC_LOCAL_CONTENT" >> $RC_LOCAL
elif ! grep -Fq "cloud-init" $RC_LOCAL; then
CodeBleu marked this conversation as resolved.
Show resolved Hide resolved
echo "$RC_LOCAL_CONTENT" >> $RC_LOCAL
fi
fi
Loading