setup-ipsec-vpn/extras/vpnupgrade_Libreswan_centos.sh

148 lines
3.9 KiB
Bash
Raw Normal View History

2016-01-08 10:03:56 +01:00
#!/bin/sh
#
2016-04-21 00:31:29 +02:00
# Script to upgrade Libreswan on CentOS and RHEL
2016-01-08 10:03:56 +01:00
#
2016-01-25 17:38:07 +01:00
# Copyright (C) 2016 Lin Song
2016-01-08 10:03:56 +01:00
#
# This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
# Unported License: http://creativecommons.org/licenses/by-sa/3.0/
#
# Attribution required: please include my name in any derivative and let me
# know how you have improved it!
# Check https://libreswan.org and update version number if necessary
2016-05-21 12:34:19 +02:00
swan_ver=3.17
2016-01-08 10:03:56 +01:00
2016-01-21 18:50:35 +01:00
### Do not edit below this line
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
2016-01-08 10:03:56 +01:00
if [ ! -f /etc/redhat-release ]; then
2016-05-17 05:42:30 +02:00
echo "This script only supports CentOS/RHEL."
2016-01-08 10:03:56 +01:00
exit 1
fi
if ! grep -qs -e "release 6" -e "release 7" /etc/redhat-release; then
2016-04-21 00:31:29 +02:00
echo "This script only supports CentOS/RHEL 6 and 7."
2016-01-08 10:03:56 +01:00
exit 1
fi
2016-01-30 20:12:15 +01:00
if [ -f /proc/user_beancounters ]; then
2016-01-19 08:32:22 +01:00
echo "This script does NOT support OpenVZ VPS."
exit 1
fi
2016-01-08 10:03:56 +01:00
if [ "$(id -u)" != 0 ]; then
2016-04-21 00:31:29 +02:00
echo "Script must be run as root. Try 'sudo sh $0'"
2016-01-08 10:03:56 +01:00
exit 1
fi
2016-01-13 06:05:16 +01:00
/usr/local/sbin/ipsec --version 2>/dev/null | grep -qs "Libreswan"
2016-01-08 10:03:56 +01:00
if [ "$?" != "0" ]; then
2016-04-21 00:31:29 +02:00
echo "This upgrade script requires Libreswan already installed."
2016-01-08 10:03:56 +01:00
exit 1
fi
2016-05-21 12:34:19 +02:00
/usr/local/sbin/ipsec --version 2>/dev/null | grep -qs "Libreswan $swan_ver"
2016-01-08 10:03:56 +01:00
if [ "$?" = "0" ]; then
2016-05-21 12:34:19 +02:00
echo "You already have Libreswan version $swan_ver installed! "
2016-01-08 10:03:56 +01:00
echo
printf "Do you wish to continue anyway? [y/N] "
read -r response
2016-01-08 10:03:56 +01:00
case $response in
[yY][eE][sS]|[yY])
echo
;;
*)
echo "Aborting."
exit 1
;;
esac
fi
2016-01-18 19:37:09 +01:00
clear
2016-05-21 10:59:08 +02:00
cat <<EOF
2016-05-21 12:34:19 +02:00
Welcome! This script will build and install Libreswan $swan_ver on your server.
2016-05-21 10:59:08 +02:00
Additional packages required for Libreswan compilation will also be installed.
This is intended for use on servers running an older version of Libreswan.
Your existing VPN configuration files will NOT be modified.
EOF
2016-01-08 10:03:56 +01:00
printf "Do you wish to continue? [y/N] "
read -r response
2016-01-08 10:03:56 +01:00
case $response in
[yY][eE][sS]|[yY])
echo
echo "Please be patient. Setup is continuing..."
echo
;;
*)
echo "Aborting."
exit 1
;;
esac
# Create and change to working dir
mkdir -p /opt/src
2016-04-22 18:54:14 +02:00
cd /opt/src || exit 1
2016-01-08 10:03:56 +01:00
2016-01-21 18:50:35 +01:00
# Install Wget
yum -y install wget
2016-01-08 10:03:56 +01:00
# Add the EPEL repository
2016-04-21 01:51:01 +02:00
yum -y install epel-release
yum list installed epel-release >/dev/null 2>&1
2016-04-22 18:54:14 +02:00
[ "$?" != "0" ] && { echo "Cannot add EPEL repository. Aborting."; exit 1; }
2016-01-08 10:03:56 +01:00
# Install necessary packages
yum -y install nss-devel nspr-devel pkgconfig pam-devel \
libcap-ng-devel libselinux-devel \
2016-04-06 06:51:54 +02:00
curl-devel flex bison gcc make \
fipscheck-devel unbound-devel xmlto
2016-01-08 10:03:56 +01:00
2016-05-17 05:42:30 +02:00
# Installed Libevent2
2016-01-08 10:03:56 +01:00
if grep -qs "release 6" /etc/redhat-release; then
yum -y remove libevent-devel
yum -y install libevent2-devel
2016-01-08 10:03:56 +01:00
elif grep -qs "release 7" /etc/redhat-release; then
yum -y install libevent-devel
fi
# Compile and install Libreswan
2016-05-21 12:34:19 +02:00
swan_file="libreswan-${swan_ver}.tar.gz"
2016-06-06 01:22:03 +02:00
swan_url1="https://download.libreswan.org/$swan_file"
swan_url2="https://github.com/libreswan/libreswan/archive/v${swan_ver}.tar.gz"
wget -t 3 -T 30 -nv -O "$swan_file" "$swan_url1" || wget -t 3 -T 30 -nv -O "$swan_file" "$swan_url2"
2016-04-22 18:54:14 +02:00
[ "$?" != "0" ] && { echo "Cannot download Libreswan source. Aborting."; exit 1; }
2016-05-21 12:34:19 +02:00
/bin/rm -rf "/opt/src/libreswan-$swan_ver"
tar xzf "$swan_file" && /bin/rm -f "$swan_file"
cd "libreswan-$swan_ver" || { echo "Cannot enter Libreswan source dir. Aborting."; exit 1; }
2016-04-06 09:51:37 +02:00
# Workaround for Libreswan compile issues
cat > Makefile.inc.local <<EOF
WERROR_CFLAGS =
EOF
2016-05-17 05:42:30 +02:00
make -s programs && make -s install
2016-01-08 10:03:56 +01:00
2016-06-04 00:10:03 +02:00
# Verify the install and clean up
cd /opt/src || exit 1
/bin/rm -rf "/opt/src/libreswan-$swan_ver"
/usr/local/sbin/ipsec --version 2>/dev/null | grep -qs "$swan_ver"
[ "$?" != "0" ] && { echo; echo "Libreswan $swan_ver failed to build. Aborting."; exit 1; }
# Restore SELinux contexts
2016-04-21 00:31:29 +02:00
restorecon /etc/ipsec.d/*db 2>/dev/null
restorecon /usr/local/sbin -Rv 2>/dev/null
restorecon /usr/local/libexec/ipsec -Rv 2>/dev/null
2016-01-20 06:17:18 +01:00
# Restart IPsec service
2016-04-21 00:31:29 +02:00
service ipsec restart
2016-01-08 10:03:56 +01:00
echo
2016-05-21 12:34:19 +02:00
echo "Libreswan $swan_ver was installed successfully! "
2016-04-21 00:31:29 +02:00
echo
2016-05-21 10:59:08 +02:00
2016-01-08 10:03:56 +01:00
exit 0