From fdffa56ff2034f943b13996815a9e216c724e3b5 Mon Sep 17 00:00:00 2001 From: Gregory Haynes Date: Wed, 17 Aug 2016 16:20:36 +0000 Subject: [PATCH] Add element for setting sysctl values Theres a pretty standard workflow for setting a sysctl value which will be applied on image boot which was written by tripleo. Lets move this in tree as other folks (like Octavia) would like to depend on it. Change-Id: I3c266870d417cdba3196f5fa65c4cd634ab13173 --- elements/sysctl/README.rst | 12 +++++++ elements/sysctl/bin/sysctl-set-value | 49 ++++++++++++++++++++++++++ elements/sysctl/bin/sysctl-write-value | 32 +++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 elements/sysctl/README.rst create mode 100755 elements/sysctl/bin/sysctl-set-value create mode 100755 elements/sysctl/bin/sysctl-write-value diff --git a/elements/sysctl/README.rst b/elements/sysctl/README.rst new file mode 100644 index 00000000..d6e37d1b --- /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 00000000..cbeb6eff --- /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 00000000..e60f5535 --- /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 [comment]" + exit 1 +fi + +FILENAME="/etc/sysctl.d/${NAME}.conf" + +cat > $FILENAME <