Skip to content

Instantly share code, notes, and snippets.

@stigok
Last active August 15, 2018 03:28
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save stigok/e979f404e2647a06a795 to your computer and use it in GitHub Desktop.
Save stigok/e979f404e2647a06a795 to your computer and use it in GitHub Desktop.
PrivateInternetAccess.com OpenVPN installation script for OpenSUSE 13.2
#! /bin/sh -
#
# Install OpenVPN connections for all available
# regions to NetworkManager
#
# Important:
# This is a modified version of the official Ubuntu script PrivateInternetAccess.com
# released at https://www.privateinternetaccess.com/installer/install_ubuntu.sh
# Automatic installation of python and openvpn has been removed, and needs to be
# installed manually before installation.
#
# Requirements:
# should be run as root
# python and openvpn
#
# Prerequisites can be installed by running below line
# sudo zypper in python openvpn NetworkManager-openvpn plasma-nm-openvpn
#
# Usage:
# install [--version]
IFS='
'
SERVER_INFO=/tmp/server_info
SPLIT_TOKEN=':'
error( )
{
echo "$@" 1>&2
exit 1
}
error_and_usage( )
{
echo "$@" 1>&2
usage_and_exit 1
}
usage( )
{
echo "Usage: sudo `dirname $0`/$PROGRAM"
}
usage_and_exit( )
{
usage
exit $1
}
version( )
{
echo "$PROGRAM version $VERSION"
}
read_user_login( )
{
echo -n "Please enter your normal username (not PPTP/L2TP/SOCKS login): "
read LOGIN
if [ -z $LOGIN ]; then
error "A login must be provided for the installation to proceed"
fi
}
verify_running_as_root( )
{
if [ `/usr/bin/id -u` -ne 0 ]; then
error_and_usage "$0 must be run as root"
fi
}
copy_crt( )
{
echo 'Copying certificate..'
mkdir -p /etc/openvpn
cat << EOF > /etc/openvpn/ca.crt
-----BEGIN CERTIFICATE-----
MIID2jCCA0OgAwIBAgIJAOtqMkR2JSXrMA0GCSqGSIb3DQEBBQUAMIGlMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCT0gxETAPBgNVBAcTCENvbHVtYnVzMSAwHgYDVQQK
ExdQcml2YXRlIEludGVybmV0IEFjY2VzczEjMCEGA1UEAxMaUHJpdmF0ZSBJbnRl
cm5ldCBBY2Nlc3MgQ0ExLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50
ZXJuZXRhY2Nlc3MuY29tMB4XDTEwMDgyMTE4MjU1NFoXDTIwMDgxODE4MjU1NFow
gaUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJPSDERMA8GA1UEBxMIQ29sdW1idXMx
IDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSMwIQYDVQQDExpQcml2
YXRlIEludGVybmV0IEFjY2VzcyBDQTEvMC0GCSqGSIb3DQEJARYgc2VjdXJlQHBy
aXZhdGVpbnRlcm5ldGFjY2Vzcy5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBAOlVlkHcxfN5HAswpryG7AN9CvcvVzcXvSEo91qAl/IE8H0knKZkIAhe/z3m
hz0t91dBHh5yfqwrXlGiyilplVB9tfZohvcikGF3G6FFC9j40GKP0/d22JfR2vJt
4/5JKRBlQc9wllswHZGmPVidQbU0YgoZl00bAySvkX/u1005AgMBAAGjggEOMIIB
CjAdBgNVHQ4EFgQUl8qwY2t+GN0pa/wfq+YODsxgVQkwgdoGA1UdIwSB0jCBz4AU
l8qwY2t+GN0pa/wfq+YODsxgVQmhgaukgagwgaUxCzAJBgNVBAYTAlVTMQswCQYD
VQQIEwJPSDERMA8GA1UEBxMIQ29sdW1idXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50
ZXJuZXQgQWNjZXNzMSMwIQYDVQQDExpQcml2YXRlIEludGVybmV0IEFjY2VzcyBD
QTEvMC0GCSqGSIb3DQEJARYgc2VjdXJlQHByaXZhdGVpbnRlcm5ldGFjY2Vzcy5j
b22CCQDrajJEdiUl6zAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAByH
atXgZzjFO6qctQWwV31P4qLelZzYndoZ7olY8ANPxl7jlP3YmbE1RzSnWtID9Gge
fsKHi1jAS9tNP2E+DCZiWcM/5Y7/XKS/6KvrPQT90nM5klK9LfNvS+kFabMmMBe2
llQlzAzFiIfabACTQn84QLeLOActKhK8hFJy2Gy6
-----END CERTIFICATE-----
EOF
}
parse_server_info( )
{
echo 'Loading servers information..'
json=`wget -q -O - 'http://privateinternetaccess.com/vpninfo/servers?version=24' | head -1`
python > $SERVER_INFO <<EOF
payload = '$json'
import json
d = json.loads(payload)
print "\n".join([d[k]['name']+'$SPLIT_TOKEN'+d[k]['dns'] for k in d.keys() if k != 'info'])
EOF
}
write_config_files( )
{
echo 'Removing previous config files if existing..'
rm -f /etc/NetworkManager/system-connections/PIA\ -\ *
echo 'Creating config files..'
IFS='
'
while read server_info; do
name="PIA - `echo $server_info | awk -F: '{print $1}'`"
dns=`echo $server_info | awk -F: '{print $2}'`
cat <<EOF > /etc/NetworkManager/system-connections/$name
[connection]
id=$name
uuid=`uuidgen`
type=vpn
autoconnect=false
[vpn]
service-type=org.freedesktop.NetworkManager.openvpn
username=$LOGIN
comp-lzo=yes
remote=$dns
connection-type=password
password-flags=1
ca=/etc/openvpn/ca.crt
[ipv4]
method=auto
EOF
chmod 600 /etc/NetworkManager/system-connections/$name
done < $SERVER_INFO
rm $SERVER_INFO
IFS='
'
}
restart_network_manager( )
{
echo 'Restarting network manager..'
/usr/bin/nmcli networking off
/usr/bin/nmcli networking on
service NetworkManager restart
}
EXITCODE=0
PROGRAM=`basename $0`
VERSION=1.0
while test $# -gt 0
do
case $1 in
--usage | --help | -h )
usage_and_exit 0
;;
--version | -v )
version
exit 0
;;
*)
error_and_usage "Unrecognized option: $1"
;;
esac
shift
done
verify_running_as_root
read_user_login
copy_crt
parse_server_info
write_config_files
restart_network_manager
echo "Install successful!"
exit 0
@stigok
Copy link
Author

stigok commented Sep 3, 2015

Quick installation:

$ sudo su
$ zypper in python openvpn NetworkManager-openvpn plasma-nm-openvpn
$ cd ~/
$ wget https://gist.github.com/stigok/e979f404e2647a06a795/raw/75c4ebbae0284f04518a3587d1c65a15cf5761f9/install_opensuse.sh
$ chmod +x install_opensuse.sh
$ ./install_opensuse.sh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment