blob: 9db24555d975b096a51f2761d6c75a246948cc13 [file] [log] [blame] [raw]
#!/bin/bash
# OpenVZ post-install script
# Copyright (C) 2009-2013, Parallels, Inc. Licensed under GNU GPL.
#
# 1. tune /etc/sysctl.conf
# 2. disable selinux
# Error out
fatal()
{
echo "$0: FATAL ERROR:" $* 1>&2
exit 1
}
# Checks if the file exists and is writable
# $*: file name(s)
check_file()
{
local file
for file in $*; do
test -a $file || fatal "$file not found"
test -w $file || fatal "$file is not writable"
done
}
# Changes the value of param, or adds it.
# $1: file name
# $2: parameter name
# $3: new parameter value
change_param()
{
local file=$1 p=$2 v=$3
# Escape dots, to be used for regexps
local pp=${p//./\\.}
# Check if param is there
if grep -q "^[ \t]*${p}[ \t]*=.*" $file; then
# Replace the value
sed -i -e \
"s/^\([ \t]*${p}[ \t]*=[ \t]*\).*\$/\1${v}/" \
$file
else # Add the param
# If EOL is missing at the last line, fix
sed -i -e '$q' $file
# Add param
echo "${p}=${v}" >> $file
fi
}
# Modifies and reloads sysctl parameters
tune_sysctl()
{
local file=/etc/sysctl.conf
check_file $file
change_param $file net.ipv4.ip_forward 1
change_param $file net.ipv4.conf.default.proxy_arp 0
change_param $file net.ipv4.conf.all.rp_filter 1
change_param $file kernel.sysrq 1
change_param $file net.ipv4.conf.default.send_redirects 1
change_param $file net.ipv4.conf.all.send_redirects 0
sysctl -q -p 2>/dev/null
}
# Disables SELinux
disable_selinux()
{
local file=/etc/sysconfig/selinux
# If there's no /etc/sysconfig, just skip
test -d $(dirname $file) || return
# If there's no $file, create it
test -a $file || touch $file
# Check we can write to it
check_file $file
# Put SELINUX=disabled
change_param $file SELINUX disabled
}
disable_selinux
tune_sysctl