diff --git a/elements/sysctl/README.rst b/elements/sysctl/README.rst new file mode 100644 index 000000000..d6e37d1b1 --- /dev/null +++ b/elements/sysctl/README.rst @@ -0,0 +1,12 @@ +====== +sysctl +====== + +Add a sysctl-set-value command which can be run from within an element. +Running this command will cause the sysctl value to be set on boot (by +writing the value to /etc/sysctl.d). + +Example usage + +:: + sysctl-set-value net.ipv4.ip_forward 1 diff --git a/elements/sysctl/bin/sysctl-set-value b/elements/sysctl/bin/sysctl-set-value new file mode 100755 index 000000000..cbeb6eff9 --- /dev/null +++ b/elements/sysctl/bin/sysctl-set-value @@ -0,0 +1,49 @@ +#!/bin/bash +# +# Copied from tripleo-image-element's sysctl element +# +# Validate and manage setting sysctl settings. +# +# The script is called with name/value pairs which are stored +# in the system default sysctl.d directory. Before adding new +# settings a validation is done to ensure that conflicting +# sysctl settings have not been requested. Once finished sysctl +# is used to activate the changes. + +if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then + set -x +fi +set -eu +set -o pipefail + +NAME=${1:-} +VALUE=${2:-} +# Optional comment used to describe the setting +COMMENT=${3:-"This file was created by diskimage-builder."} + +if [ -z "$NAME" -o -z "$VALUE" ]; then + echo "NAME and VALUE are required." + exit 1 +fi + +FILENAME="/etc/sysctl.d/${NAME}.conf" + +if [ -f $FILENAME ]; then + # check to make sure the settings match... otherwise fail + if ! grep -q "^$NAME = $VALUE" $FILENAME; then + echo "Conflicting sysctl.conf setting for $NAME == $VALUE. Found:" + grep "^$NAME" $FILENAME + exit 1 + fi +else + + if ! sysctl -a | grep -q "^$NAME"; then + echo "Invalid sysctl key: $NAME" + exit 1 + fi + + sysctl-write-value $NAME "$VALUE" "$COMMENT" + + sysctl -p $FILENAME + +fi diff --git a/elements/sysctl/bin/sysctl-write-value b/elements/sysctl/bin/sysctl-write-value new file mode 100755 index 000000000..e60f55352 --- /dev/null +++ b/elements/sysctl/bin/sysctl-write-value @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Copied from tripleo-image-element's sysctl element +# +# Validate and manage setting sysctl settings. +# +# The script is called with name/value pairs which are stored +# in the system default sysctl.d directory. This script performs +# no checking, just writing out the file. + +if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then + set -x +fi +set -eu +set -o pipefail + +NAME=${1:-} +VALUE=${2:-} +# Optional comment used to describe the setting +COMMENT=${3:-"This file was created by diskimage-builder."} + +if [ -z "$NAME" -o -z "$VALUE" ]; then + echo "Usage: sysctl-write-value <name> <value> [comment]" + exit 1 +fi + +FILENAME="/etc/sysctl.d/${NAME}.conf" + +cat > $FILENAME <<EOF_CAT +# $COMMENT +$NAME = $VALUE +EOF_CAT