Created
October 18, 2022 11:31
-
-
Save meysampg/ce9548208b012bb04eb75d9617cf93f5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| # Check system | |
| if [ ! -f /etc/lsb-release ];then | |
| if ! grep -Eqi "ubuntu|debian" /etc/issue;then | |
| echo "\033[1;31mOnly Ubuntu or Debian can run this shell.\033[0m" | |
| exit 1 | |
| fi | |
| fi | |
| # Make sure only root can run our script | |
| [ `whoami` != "root" ] && echo "\033[1;31mThis script must be run as root.\033[0m" && exit 1 | |
| # Version | |
| LIBSODIUM_VER=stable | |
| MBEDTLS_VER=2.7.15 | |
| ss_file=0 | |
| v2_file=0 | |
| get_latest_ver(){ | |
| ss_file=$(wget -qO- https://api.github.com/repos/shadowsocks/shadowsocks-libev/releases/latest | grep name | grep tar | cut -f4 -d\") | |
| v2_file=$(wget -qO- https://api.github.com/repos/shadowsocks/v2ray-plugin/releases/latest | grep linux-amd64 | grep name | cut -f4 -d\") | |
| } | |
| # Set shadowsocks-libev config password | |
| set_password(){ | |
| echo "\033[1;34mPlease enter password for shadowsocks-libev:\033[0m" | |
| read -p "(Default password: iraniraniran123\$iran):" shadowsockspwd | |
| [ -z "${shadowsockspwd}" ] && shadowsockspwd="iraniraniran123\$iran" | |
| echo "\033[1;35mpassword = ${shadowsockspwd}\033[0m" | |
| } | |
| # Set domain | |
| set_domain(){ | |
| echo "\033[1;34mPlease enter your domain:\033[0m" | |
| echo "If you don't have one, you can register one for free at:" | |
| echo "https://my.freenom.com/clientarea.php" | |
| read domain | |
| str=`echo $domain | grep '^\([a-zA-Z0-9_\-]\{1,\}\.\)\{1,\}[a-zA-Z]\{2,5\}'` | |
| while [ ! -n "${str}" ] | |
| do | |
| echo "\033[1;31mInvalid domain.\033[0m" | |
| echo "\033[1;31mPlease try again:\033[0m" | |
| read domain | |
| str=`echo $domain | grep '^\([a-zA-Z0-9_\-]\{1,\}\.\)\{1,\}[a-zA-Z]\{2,5\}'` | |
| done | |
| echo "\033[1;35mdomain = ${domain}\033[0m" | |
| } | |
| # Pre-installation | |
| pre_install(){ | |
| read -p "Press any key to start the installation." a | |
| echo "\033[1;34mStart installing. This may take a while.\033[0m" | |
| apt-get update | |
| apt-get install -y --no-install-recommends gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libc-ares-dev automake | |
| } | |
| # Installation of Libsodium | |
| install_libsodium(){ | |
| if [ -f /usr/lib/libsodium.a ] || [ -f /usr/lib64/libsodium.a ];then | |
| echo "\033[1;32mLibsodium already installed, skip.\033[0m" | |
| else | |
| if [ ! -f libsodium-$LIBSODIUM_VER.tar.gz ];then | |
| wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz -O libsodium-$LIBSODIUM_VER.tar.gz | |
| fi | |
| tar xf libsodium-$LIBSODIUM_VER.tar.gz | |
| cd libsodium-$LIBSODIUM_VER | |
| ./configure --prefix=/usr && make | |
| make install | |
| cd .. | |
| ldconfig | |
| if [ ! -f /usr/lib/libsodium.a ] && [ ! -f /usr/lib64/libsodium.a ];then | |
| echo "\033[1;31mFailed to install libsodium.\033[0m" | |
| exit 1 | |
| fi | |
| fi | |
| } | |
| # Installation of MbedTLS | |
| install_mbedtls(){ | |
| if [ -f /usr/lib/libmbedtls.a ];then | |
| echo "\033[1;32mMbedTLS already installed, skip.\033[0m" | |
| else | |
| if [ ! -f mbedtls-$MBEDTLS_VER.tar.gz ];then | |
| wget -O mbedtls-$MBEDTLS_VER.tar.gz https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/mbedtls-$MBEDTLS_VER.tar.gz | |
| fi | |
| tar xfz mbedtls-$MBEDTLS_VER.tar.gz | |
| cd mbedtls-mbedtls-$MBEDTLS_VER | |
| make SHARED=1 CFLAGS=-fPIC | |
| make DESTDIR=/usr install | |
| cd .. | |
| ldconfig | |
| if [ ! -f /usr/lib/libmbedtls.a ];then | |
| echo "\033[1;31mFailed to install MbedTLS.\033[0m" | |
| exit 1 | |
| fi | |
| fi | |
| } | |
| # Installation of shadowsocks-libev | |
| install_ss(){ | |
| if [ -f /usr/local/bin/ss-server ];then | |
| echo "\033[1;32mShadowsocks-libev already installed, skip.\033[0m" | |
| else | |
| if [ ! -f $ss_file ];then | |
| ss_url=$(wget -qO- https://api.github.com/repos/shadowsocks/shadowsocks-libev/releases/latest | grep browser_download_url | cut -f4 -d\") | |
| wget $ss_url | |
| fi | |
| tar xf $ss_file | |
| cd $(echo ${ss_file} | cut -f1-3 -d\.) | |
| ./configure && make | |
| make install | |
| cd .. | |
| if [ ! -f /usr/local/bin/ss-server ];then | |
| echo "\033[1;31mFailed to install shadowsocks-libev.\033[0m" | |
| exit 1 | |
| fi | |
| fi | |
| } | |
| # Installation of v2ray-plugin | |
| install_v2(){ | |
| if [ -f /usr/local/bin/v2ray-plugin ];then | |
| echo "\033[1;32mv2ray-plugin already installed, skip.\033[0m" | |
| else | |
| if [ ! -f $v2_file ];then | |
| v2_url=$(wget -qO- https://api.github.com/repos/shadowsocks/v2ray-plugin/releases/latest | grep linux-amd64 | grep browser_download_url | cut -f4 -d\") | |
| wget $v2_url | |
| fi | |
| tar xf $v2_file | |
| mv v2ray-plugin_linux_amd64 /usr/local/bin/v2ray-plugin | |
| if [ ! -f /usr/local/bin/v2ray-plugin ];then | |
| echo "\033[1;31mFailed to install v2ray-plugin.\033[0m" | |
| exit 1 | |
| fi | |
| fi | |
| } | |
| # Configure | |
| ss_conf(){ | |
| mkdir /etc/shadowsocks-libev | |
| cat >/etc/shadowsocks-libev/config.json << EOF | |
| { | |
| "server":"0.0.0.0", | |
| "server_port":443, | |
| "password":"$shadowsockspwd", | |
| "timeout":300, | |
| "method":"aes-256-gcm", | |
| "plugin":"v2ray-plugin", | |
| "plugin_opts":"server;tls;cert=/etc/letsencrypt/live/$domain/fullchain.pem;key=/etc/letsencrypt/live/$domain/privkey.pem;host=$domain;loglevel=none" | |
| } | |
| EOF | |
| cat >/lib/systemd/system/shadowsocks.service << EOF | |
| [Unit] | |
| Description=Shadowsocks-libev Server Service | |
| After=network.target | |
| [Service] | |
| ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/config.json | |
| ExecReload=/bin/kill -HUP \$MAINPID | |
| Restart=on-failure | |
| LimitNOFILE=51200 | |
| [Install] | |
| WantedBy=multi-user.target | |
| EOF | |
| } | |
| get_cert(){ | |
| if [ -f /etc/letsencrypt/live/$domain/fullchain.pem ];then | |
| echo "\033[1;32mcert already got, skip.\033[0m" | |
| else | |
| apt-get update | |
| if grep -Eqi "ubuntu" /etc/issue;then | |
| apt-get install -y software-properties-common | |
| add-apt-repository -y universe | |
| add-apt-repository -y ppa:certbot/certbot | |
| apt-get update | |
| fi | |
| apt-get install -y certbot | |
| certbot certonly --cert-name $domain -d $domain --standalone --agree-tos --register-unsafely-without-email | |
| systemctl enable certbot.timer | |
| systemctl start certbot.timer | |
| if [ ! -f /etc/letsencrypt/live/$domain/fullchain.pem ];then | |
| echo "\033[1;31mFailed to get cert.\033[0m" | |
| exit 1 | |
| fi | |
| fi | |
| } | |
| start_ss(){ | |
| systemctl status shadowsocks > /dev/null 2>&1 | |
| if [ $? -eq 0 ]; then | |
| systemctl stop shadowsocks | |
| fi | |
| systemctl enable shadowsocks | |
| systemctl start shadowsocks | |
| } | |
| remove_files(){ | |
| rm -f libsodium-$LIBSODIUM_VER.tar.gz mbedtls-$MBEDTLS_VER-gpl.tgz $ss_file $v2_file | |
| rm -rf libsodium-$LIBSODIUM_VER mbedtls-$MBEDTLS_VER $(echo ${ss_file} | cut -f1-3 -d\.) | |
| } | |
| print_ss_info(){ | |
| clear | |
| echo "\033[1;32mCongratulations, Shadowsocks-libev server install completed\033[0m" | |
| echo "Your Server IP : ${domain} " | |
| echo "Your Server Port : 443 " | |
| echo "Your Password : ${shadowsockspwd} " | |
| echo "Your Encryption Method: aes-256-gcm " | |
| echo "Your Plugin : v2ray-plugin" | |
| echo "Your Plugin options : tls;host=${domain}" | |
| echo "Enjoy it!" | |
| } | |
| install_all(){ | |
| set_password | |
| set_domain | |
| pre_install | |
| install_libsodium | |
| install_mbedtls | |
| get_latest_ver | |
| install_ss | |
| install_v2 | |
| ss_conf | |
| get_cert | |
| start_ss | |
| remove_files | |
| print_ss_info | |
| } | |
| remove_all(){ | |
| systemctl disable shadowsocks | |
| systemctl stop shadowsocks | |
| rm -fr /etc/shadowsocks-libev | |
| rm -f /usr/local/bin/ss-local | |
| rm -f /usr/local/bin/ss-tunnel | |
| rm -f /usr/local/bin/ss-server | |
| rm -f /usr/local/bin/ss-manager | |
| rm -f /usr/local/bin/ss-redir | |
| rm -f /usr/local/bin/ss-nat | |
| rm -f /usr/local/bin/v2ray-plugin | |
| rm -f /usr/local/lib/libshadowsocks-libev.a | |
| rm -f /usr/local/lib/libshadowsocks-libev.la | |
| rm -f /usr/local/include/shadowsocks.h | |
| rm -f /usr/local/lib/pkgconfig/shadowsocks-libev.pc | |
| rm -f /usr/local/share/man/man1/ss-local.1 | |
| rm -f /usr/local/share/man/man1/ss-tunnel.1 | |
| rm -f /usr/local/share/man/man1/ss-server.1 | |
| rm -f /usr/local/share/man/man1/ss-manager.1 | |
| rm -f /usr/local/share/man/man1/ss-redir.1 | |
| rm -f /usr/local/share/man/man1/ss-nat.1 | |
| rm -f /usr/local/share/man/man8/shadowsocks-libev.8 | |
| rm -fr /usr/local/share/doc/shadowsocks-libev | |
| rm -f /usr/lib/systemd/system/shadowsocks.service | |
| echo "\033[1;32mRemove success!\033[0m" | |
| } | |
| clear | |
| echo "What do you want to do?" | |
| echo "[1] Install" | |
| echo "[2] Remove" | |
| read -p "(Default option: Install):" option | |
| option=${option:-1} | |
| if [ $option -eq 2 ];then | |
| remove_all | |
| else | |
| install_all | |
| fi |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
sudo certbot certonly --cert-name $domain -d $domain --standalone