Total Pageviews

Sunday, 1 October 2017

收集的国内maven镜像地址

地址:
http://nexus.hsweb.me/content/groups/public/
http://maven.aliyun.com/nexus/content/groups/public/
http://mvnrepo.tae.taobao.com/content/groups/public/
http://maven.mofasuidao.xyz/nexus/content/groups/public/

GPG 公鈅

GPG (GNU Privacy Guard, GnuPG) 是一種加密軟件,它是 PGP 加密軟件的滿足 GPL 的替代物。
GPG 採用非對稱加密算法,目前被廣泛應用于加解密和簽名驗證等領域。採用公鈅加密,私鑰解密。
GPG Public Key 公鈅
KeyID: 0x6C5782B2
Date: 2015-05-27
下載公鈅

macOS Sierra的睡眠方式的设置

macOS通过pmset命令设置系统电源管理,其中hibernatemode的值来调整系统睡眠方式。

以下操作和介绍均以macOS Sierra 10.12 系统为范例,其他版本的macOS 系统可能稍有不同。如果Mac 电脑使用没有问题,建议保持系统默认设置,勿随意修改睡眠方式!

设置介绍
在系统偏好设置的「能源节约器」里面提供了一部分电源管理设置,但是更加详细的设置只能通过pmset命令来完成。


能源节约器

以下内容翻译自pmset命令的帮助档案(可以运行man pmset查看)

macOS 安全睡眠说明

hibernatemode可以设置的值有0、3和25。macOS系统是否写入睡眠档案到硬碟也同时取决于standby和autopoweroff的值。若要完全禁止睡眠档案,请确保hibernatemode、standby和autopoweroff的值都要设置为0。

hibernatemode = 0是桌面电脑的默认设置。系统不会将记忆体备份到硬碟上。系统必须从记忆体中恢复;如果掉电,将丢失记忆体中的数据。这是一种老旧的睡眠设置。

hibernatemode = 3是便携式电脑的默认设置。系统将存储一份记忆体的副本到硬碟上,记忆体将持续供电。系统将会从记忆体恢复,除非掉电,迫使系统从硬碟中的睡眠档案恢复。

hibernatemode = 25只能通过pmset命令来设置。系统将存储一份记忆体的副本到硬碟上,并将切断记忆体的供电。系统将从硬碟中的睡眠档案恢复。如果你想以较慢的速度睡眠、恢复,获得更长的电池寿命,那么你可以使用这种设置。

官方说明已经很清楚了,我再简化一下,系统睡眠的时候:

hibernatemode 值为0:不向硬碟写入睡眠档案,记忆体保持供电,从记忆体恢复系统(类似于Windows 系统的「待机」)
hibernatemode 值为3:如果记忆体通电,则从记忆体恢复系统;如果记忆体不通电,则从硬碟中的睡眠档案恢复系统(结合了0,25 的功能)
hibernatemode 值为25:向硬碟写入睡眠档案,记忆体断电,从硬碟中的睡眠档案恢复系统
很显然hibernatemode = 3这种设置对于MacBook来说是最好的设置状态,也是默认的设置状态,我们一般不需要进行修改。但是有些用户偏向于更省电,那么设置成25最好;有些用户偏向于延长SSD寿命,那么设置成1最好。

autopoweroff和standby的作用是到了autopoweroffdelay或standbydelay设置的时间后,就开始启动安全睡眠模式(将记忆体中的数据写入硬碟中的睡眠档案,然后切断记忆体的供电)。

具体设置步骤如下:

1. 打开「终端」,输入:
$ pmset -g #显示当前电源状态下的设置
$ pmset -g custom #显示所有电源状态下的设置
注意MacBook存在插交流电(-c)和电池供电(-b)两种不同的电源状态,对于伺服器来说还有UPS供电(-u)的电源状态)

standbydelay 10800 #standby启动的时间。单位秒
standby 1 #处于睡眠状态经过设定时间后,记忆体数据写入硬碟,关闭记忆体供电。1开启,0关闭
womp 1 #网路唤醒。1开启,0关闭
halfdim 1 #显示器亮度调低时间。单位分钟
hibernatefile /var/vm/sleepimage #睡眠档案位置
powernap 1 #PowerNAP是否开启。1开启,0关闭
gpuswitch 2 #GPU是否自动切换。1开启,0关闭,2不支持
networkoversleep 0 #睡眠时提供共享网路服务
disksleep 10 #机械硬碟停转时间。单位分钟,0关闭
sleep 0 #系统睡眠的时间。单位分钟,0关闭
autopoweroffdelay 28800 #autopoweroff启动的时间,单位为秒
hibernatemode 3 #睡眠方式设置
autopoweroff 1 #处于睡眠状态经过设定时间后,记忆体写入硬碟,关闭记忆体电源。1开启,0关闭
ttyskeepawake 1 #远程用户活动时防止睡眠。1开启,0关闭
displaysleep 10 #显示器关闭时间。单位分钟,0关闭
acwake 0 #电源状态改变时唤醒。1开启,0关闭
lidwake 1 #开盖唤醒。1开启,0关闭

2. 修改系统电源管理设置:
$ sudo pmset -a(-c|-b|-U) parameter value
其中-a表示应用设置于所有电源状态

实例
1. 完全禁止睡眠档案:
$ sudo pmset -a hibernatemode 0
$ sudo pmset -a standby 0
$ sudo pmset -a autopoweroff 0
$ sudo rm /var/vm/sleepimage

2. 写入睡眠档案,并彻底断电
$ sudo pmset -a hibernatemode 25

参考文献
Wikipedia:https://en.wikipedia.org/wiki/Pmset

一键安装SSR服务器

(来自https://www.91yun.org/archives/2079)

一键安装命令:
wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/shadowsocks_install/master/shadowsocksR.sh && bash shadowsocksR.sh

安装完成后,显示:
Congratulations, ShadowsocksR install completed!
Server IP:  你的服务器的ip
Server Port:  7979(你所设置的端口号)
Password:  你设置的密码
Protocol:  auth_sha1_v4
obfs:  tls1.2_ticket_auth
Encryption Method:  chacha20
Welcome to visit:https://www.91yun.org/archives/2079

卸载命令
./shadowsocksR.sh uninstall

升级命令
cd /usr/local/shadowsocks/shadowsocks
git pull

默认配置
加密:chacha20
协议:auth_sha1_v2
混淆参数:tls1 .2_ticket_auth

配置客户端
通用说明
每个系统上的客户端虽然操作界面和操作方法有些许差异,但是基本的配置参数和配置方法是一致的:
提供服务器位址、端口號、密碼、加密方式、協議 (SSR專用)、混淆參數 (SSR專用)等的设置功能,这些参数都来自于我们在自己服务器上的设置,只要填入这些设置就能开始番羽土啬了。
提供全局 (全部走代理)、自动 (按照PAC自动选择)、关闭 (全部不走代理)、自定义 (自定义哪些网站走代理)这四种模式。对于大多数普通用户来说,建议选择自动模式就能满足我们的需求了。
提供二维码分享服务器配置,扫描二维码快速添加服务器的功能。只需要借助二维码就能快速配置服务器。
SSR 服务器和客户端均向下兼容SS,所以推荐安装支持SSR的客户端。

macOS
SSR客户端推荐:ShadowsocksX NG
SS客户端推荐:ShadowsocksX NG ( https://github.com/shadowsocks/ShadowsocksX-NG, 注意:其默认的端口号是1086! ),ShadowsocksX(https://github.com/shadowsocks/shadowsocks-iOS/releases/download/2.6.3/ShadowsocksX-2.6.3.dmg)

Windows
SSR客户端推荐:ShadowsocksR
SS客户端推荐:Shadowsocks ( https://github.com/shadowsocks/shadowsocks-windows )

iOS
SSR客户端推荐:Shadowrocket ( https://itunes.apple.com/us/app/shadowrocket/id932747118,目前收费),Wingy ( https://itunes.apple.com/us/app/id1178584911,目前免费)
SSR客户端备选:Surge ( https://itunes.apple.com/us/app/surge-web-developer-tool-proxy/id1040100637?mt=8 (中国区已下架),官网-http://nssurge.com/,技术宅的神器)

Android
SSR客户端推荐:SSR
SS客户端推荐:影梭( https://play.google.com/store/apps/details?id=com.github.shadowsocks )

Linux 和其他系统
SSR客户端推荐:shadowsocksr-libev
SS客户端推荐:shadowsocks-libev ( https://github.com/shadowsocks/shadowsocks-libev )
--------------

一键安装锐速破解版(来自https://www.91yun.org/archives/683)

为什么要安装「锐速」?
锐速是服务器端的TCP单边加速工具,可以提高连接服务器的速度。锐速原本是收费软体,目前已经停止开发,只能安装破解版。除了锐速外,还有免费的Finalspeed,但是Finalspeed需要额外的客户端支援才能运作(双边加速),而锐速不需要额外的客户端就能运作。
支持CentOS、Ubuntu、Debain 系统,不支持Openvz 架构的VPS
一键安装命令(如果内核完全匹配就会自动下载安装)

wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh && bash serverspeeder-all.sh

一键卸载命令:
chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f
---------

附录:
https://raw.githubusercontent.com/91yun/shadowsocks_install/master/shadowsocksR.sh的内容如下:
#! /bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#=================================================================#
#   System Required:  CentOS 6,7, Debian, Ubuntu                  #
#   Description: One click Install ShadowsocksR Server            #
#   Author: 91yun <https://twitter.com/91yun>                     #
#   Thanks: @breakwa11 <https://twitter.com/breakwa11>            #
#   Thanks: @Teddysun <i@teddysun.com>                            #
#   Intro:  https://www.91yun.org/archives/2079                   #
#=================================================================#


#Current folder
cur_dir=`pwd`
# Get public IP address
IP=$(ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1)
if [[ "$IP" = "" ]]; then
    IP=$(wget -qO- -t1 -T2 ipv4.icanhazip.com)
fi

# Make sure only root can run our script
function rootness(){
    if [[ $EUID -ne 0 ]]; then
       echo "Error:This script must be run as root!" 1>&2
       exit 1
    fi
}

# Check OS
function checkos(){
    if [ -f /etc/redhat-release ];then
        OS='CentOS'
    elif [ ! -z "`cat /etc/issue | grep bian`" ];then
        OS='Debian'
    elif [ ! -z "`cat /etc/issue | grep Ubuntu`" ];then
        OS='Ubuntu'
    else
        echo "Not support OS, Please reinstall OS and retry!"
        exit 1
    fi
}

# Get version
function getversion(){
    if [[ -s /etc/redhat-release ]];then
        grep -oE  "[0-9.]+" /etc/redhat-release
    else    
        grep -oE  "[0-9.]+" /etc/issue
    fi    
}

# CentOS version
function centosversion(){
    local code=$1
    local version="`getversion`"
    local main_ver=${version%%.*}
    if [ $main_ver == $code ];then
        return 0
    else
        return 1
    fi        
}

# Disable selinux
function disable_selinux(){
if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    setenforce 0
fi
}

# Pre-installation settings
function pre_install(){
    # Not support CentOS 5
    if centosversion 5; then
        echo "Not support CentOS 5, please change OS to CentOS 6+/Debian 7+/Ubuntu 12+ and retry."
        exit 1
    fi
    # Set ShadowsocksR config password
    echo "Please input password for ShadowsocksR:"
    read -p "(Default password: www.91yun.org):" shadowsockspwd
    [ -z "$shadowsockspwd" ] && shadowsockspwd="www.91yun.org"
    echo
    echo "---------------------------"
    echo "password = $shadowsockspwd"
    echo "---------------------------"
    echo
    # Set ShadowsocksR config port
    while true
    do
    echo -e "Please input port for ShadowsocksR [1-65535]:"
    read -p "(Default port: 8989):" shadowsocksport
    [ -z "$shadowsocksport" ] && shadowsocksport="8989"
    expr $shadowsocksport + 0 &>/dev/null
    if [ $? -eq 0 ]; then
        if [ $shadowsocksport -ge 1 ] && [ $shadowsocksport -le 65535 ]; then
            echo
            echo "---------------------------"
            echo "port = $shadowsocksport"
            echo "---------------------------"
            echo
            break
        else
            echo "Input error! Please input correct number."
        fi
    else
        echo "Input error! Please input correct number."
    fi
    done
    get_char(){
        SAVEDSTTY=`stty -g`
        stty -echo
        stty cbreak
        dd if=/dev/tty bs=1 count=1 2> /dev/null
        stty -raw
        stty echo
        stty $SAVEDSTTY
    }
    echo
    echo "Press any key to start...or Press Ctrl+C to cancel"
    char=`get_char`
    # Install necessary dependencies
    if [ "$OS" == 'CentOS' ]; then
        yum install -y wget unzip openssl-devel gcc swig python python-devel python-setuptools autoconf libtool libevent git ntpdate
        yum install -y m2crypto automake make curl curl-devel zlib-devel perl perl-devel cpio expat-devel gettext-devel
    else
        apt-get -y update
        apt-get -y install python python-dev python-pip python-m2crypto curl wget unzip gcc swig automake make perl cpio build-essential git ntpdate
    fi
    cd $cur_dir
}

# Download files
function download_files(){
    # Download libsodium file
    if ! wget --no-check-certificate -O libsodium-1.0.10.tar.gz https://github.com/jedisct1/libsodium/releases/download/1.0.10/libsodium-1.0.10.tar.gz; then
        echo "Failed to download libsodium file!"
        exit 1
    fi
    # Download ShadowsocksR file
    # if ! wget --no-check-certificate -O manyuser.zip https://github.com/breakwa11/shadowsocks/archive/manyuser.zip; then
        # echo "Failed to download ShadowsocksR file!"
        # exit 1
    # fi
    # Download ShadowsocksR chkconfig file
    if [ "$OS" == 'CentOS' ]; then
        if ! wget --no-check-certificate https://raw.githubusercontent.com/91yun/shadowsocks_install/master/shadowsocksR -O /etc/init.d/shadowsocks; then
            echo "Failed to download ShadowsocksR chkconfig file!"
            exit 1
        fi
    else
        if ! wget --no-check-certificate https://raw.githubusercontent.com/91yun/shadowsocks_install/master/shadowsocksR-debian -O /etc/init.d/shadowsocks; then
            echo "Failed to download ShadowsocksR chkconfig file!"
            exit 1
        fi
    fi
}

# firewall set
function firewall_set(){
    echo "firewall set start..."
    if centosversion 6; then
        /etc/init.d/iptables status > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            iptables -L -n | grep '${shadowsocksport}' | grep 'ACCEPT' > /dev/null 2>&1
            if [ $? -ne 0 ]; then
                iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT
                iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT
                /etc/init.d/iptables save
                /etc/init.d/iptables restart
            else
                echo "port ${shadowsocksport} has been set up."
            fi
        else
            echo "WARNING: iptables looks like shutdown or not installed, please manually set it if necessary."
        fi
    elif centosversion 7; then
        systemctl status firewalld > /dev/null 2>&1
        if [ $? -eq 0 ];then
            firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp
            firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp
            firewall-cmd --reload
        else
   /etc/init.d/iptables status > /dev/null 2>&1
   if [ $? -eq 0 ]; then
    iptables -L -n | grep '${shadowsocksport}' | grep 'ACCEPT' > /dev/null 2>&1
    if [ $? -ne 0 ]; then
     iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT
     iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT
     /etc/init.d/iptables save
     /etc/init.d/iptables restart
    else
     echo "port ${shadowsocksport} has been set up."
    fi
   else
    echo "WARNING: firewall like shutdown or not installed, please manually set it if necessary."
   fi  
        fi
    fi
    echo "firewall set completed..."
}

# Config ShadowsocksR
function config_shadowsocks(){
    cat > /etc/shadowsocks.json<<-EOF
{
    "server": "0.0.0.0",
    "server_ipv6": "::",
    "server_port": ${shadowsocksport},
    "local_address": "127.0.0.1",
    "local_port": 1081,
    "password": "${shadowsockspwd}",
    "timeout": 120,
    "udp_timeout": 60,
    "method": "chacha20",
    "protocol": "auth_sha1_v4_compatible",
    "protocol_param": "",
    "obfs": "tls1.2_ticket_auth_compatible",
    "obfs_param": "",
    "dns_ipv6": false,
    "connect_verbose_info": 1,
    "redirect": "",
    "fast_open": false,
    "workers": 1

}
EOF
}

# Install ShadowsocksR
function install_ss(){
    # Install libsodium
    tar zxf libsodium-1.0.10.tar.gz
    cd $cur_dir/libsodium-1.0.10
    ./configure && make && make install
    echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
    ldconfig
    # Install ShadowsocksR
    cd $cur_dir
    # unzip -q manyuser.zip
    # mv shadowsocks-manyuser/shadowsocks /usr/local/
 git clone https://github.com/91yun/shadowsocksr-1.git /usr/local/shadowsocks
    if [ -f /usr/local/shadowsocks/server.py ]; then
        chmod +x /etc/init.d/shadowsocks
        # Add run on system start up
        if [ "$OS" == 'CentOS' ]; then
            chkconfig --add shadowsocks
            chkconfig shadowsocks on
        else
            update-rc.d -f shadowsocks defaults
        fi
        # Run ShadowsocksR in the background
        /etc/init.d/shadowsocks start
        clear
        echo
        echo "Congratulations, ShadowsocksR install completed!"
        echo -e "Server IP: \033[41;37m ${IP} \033[0m"
        echo -e "Server Port: \033[41;37m ${shadowsocksport} \033[0m"
        echo -e "Password: \033[41;37m ${shadowsockspwd} \033[0m"
        echo -e "Protocol: \033[41;37m auth_sha1_v4 \033[0m"
        echo -e "obfs: \033[41;37m tls1.2_ticket_auth \033[0m"
        echo -e "Encryption Method: \033[41;37m chacha20 \033[0m"
        echo "Welcome to visit:https://www.91yun.org/archives/2079"
        echo "If you want to change protocol & obfs, reference URL:"
        echo "https://github.com/breakwa11/shadowsocks-rss/wiki/Server-Setup"
        echo
        echo "Enjoy it!"
        echo
    else
        echo "Shadowsocks install failed!"
        install_cleanup
        exit 1
    fi
}


# Install cleanup
function install_cleanup(){
    cd $cur_dir
    rm -f manyuser.zip
    rm -rf shadowsocks-manyuser
    rm -f libsodium-1.0.10.tar.gz
    rm -rf libsodium-1.0.10
}


# Uninstall ShadowsocksR
function uninstall_shadowsocks(){
    printf "Are you sure uninstall ShadowsocksR? (y/n) "
    printf "\n"
    read -p "(Default: n):" answer
    if [ -z $answer ]; then
        answer="n"
    fi
    if [ "$answer" = "y" ]; then
        /etc/init.d/shadowsocks status > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            /etc/init.d/shadowsocks stop
        fi
        checkos
        if [ "$OS" == 'CentOS' ]; then
            chkconfig --del shadowsocks
        else
            update-rc.d -f shadowsocks remove
        fi
        rm -f /etc/shadowsocks.json
        rm -f /etc/init.d/shadowsocks
        rm -rf /usr/local/shadowsocks
        echo "ShadowsocksR uninstall success!"
    else
        echo "uninstall cancelled, Nothing to do"
    fi
}


# Install ShadowsocksR
function install_shadowsocks(){
    checkos
    rootness
    disable_selinux
    pre_install
    download_files
    config_shadowsocks
    install_ss
    if [ "$OS" == 'CentOS' ]; then
        firewall_set > /dev/null 2>&1
    fi
 #check_datetime
    install_cleanup
 
}

# Initialization step
action=$1
[ -z $1 ] && action=install
case "$action" in
install)
    install_shadowsocks
    ;;
uninstall)
    uninstall_shadowsocks
    ;;
*)
    echo "Arguments error! [${action} ]"
    echo "Usage: `basename $0` {install|uninstall}"
    ;;
esac
-------

ShadowsocksR一键安装脚本

本脚本适用环境: 系统支持:CentOS,Debian,Ubuntu 内存要求:≥128M 日期:2017 年 07 月 27 日
关于本脚本: 一键安装 ShadowsocksR 服务端。 请下载与之配套的客户端程序来连接。 (以下客户端只有 Windows 客户端和 Python 版客户端可以使用 SSR 新特性,其他原版客户端只能以兼容的方式连接 SSR 服务器)
默认配置: 服务器端口:自己设定(如不设定,默认为 8989) 密码:自己设定(如不设定,默认为 teddysun.com) 加密方式:自己设定(如不设定,默认为 aes-256-cfb) 协议(Protocol):自己设定(如不设定,默认为 origin) 混淆(obfs):自己设定(如不设定,默认为 plain)
客户端下载: Windows / OS X Linux Android / iOS OpenWRT
使用方法: 使用root用户登录,运行以下命令:
wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR.sh
chmod +x shadowsocksR.sh
./shadowsocksR.sh 2>&1 | tee shadowsocksR.log
安装完成后,脚本提示如下:
Congratulations, ShadowsocksR server install completed!
Your Server IP        :your_server_ip
Your Server Port      :your_server_port
Your Password         :your_password
Your Protocol         :your_protocol
Your obfs             :your_obfs
Your Encryption Method:your_encryption_method

Welcome to visit:https://shadowsocks.be/9.html
Enjoy it!
卸载方法: 使用 root 用户登录,运行以下命令:
./shadowsocksR.sh uninstall
安装完成后即已后台启动 ShadowsocksR ,运行:
/etc/init.d/shadowsocks status
可以查看 ShadowsocksR 进程是否已经启动。 本脚本安装完成后,已将 ShadowsocksR 自动加入开机自启动。
使用命令: 启动:/etc/init.d/shadowsocks start 停止:/etc/init.d/shadowsocks stop 重启:/etc/init.d/shadowsocks restart 状态:/etc/init.d/shadowsocks status
配置文件路径:/etc/shadowsocks.json 日志文件路径:/var/log/shadowsocks.log 代码安装目录:/usr/local/shadowsocks
多用户配置示例:
{
"server":"0.0.0.0",
"server_ipv6": "[::]",
"local_address":"127.0.0.1",
"local_port":1080,
"port_password":{
    "8989":"password1",
    "8990":"password2",
    "8991":"password3"
},
"timeout":300,
"method":"aes-256-cfb",
"protocol": "origin",
"protocol_param": "",
"obfs": "plain",
"obfs_param": "",
"redirect": "",
"dns_ipv6": false,
"fast_open": false,
"workers": 1
}
更新日志: 2017 年 07 月 27 日: 1、新增:可选协议(protocol)auth_chain_b 。使用该协议需更新到最新版(4.7.0)ShadowsocksR 版客户端; 2、修改:更新 ShadowsocksR 源码下载地址。
2017 年 07 月 22 日: 1、新增:安装时可选 13 种加密方式的其中之一(none 是不加密)。如下所示:
none
aes-256-cfb
aes-192-cfb
aes-128-cfb
aes-256-cfb8
aes-192-cfb8
aes-128-cfb8
aes-256-ctr
aes-192-ctr
aes-128-ctr
chacha20-ietf
chacha20
rc4-md5
rc4-md5-6
2、新增:安装时可选 7 种协议(protocol)的其中之一。如下所示:
origin
verify_deflate
auth_sha1_v4
auth_sha1_v4_compatible
auth_aes128_md5
auth_aes128_sha1
auth_chain_a
auth_chain_b
3、新增:安装时可选 9 种混淆(obfs)的其中之一。如下所示:
plain
http_simple
http_simple_compatible
http_post
http_post_compatible
tls1.2_ticket_auth
tls1.2_ticket_auth_compatible
tls1.2_ticket_fastauth
tls1.2_ticket_fastauth_compatible
2016 年 08 月 13 日: 1、新增多用户配置示例。注意:如果你新增了端口,也要将该端口从防火墙(iptables 或 firewalld)中打开。
2016 年 05 月 12 日: 1、新增在 CentOS 下的防火墙规则设置。
from https://shadowsocks.be/9.html
http://vpn.ximcx.cn/SSR/SSR ,这个只是复制品)

附录:
https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR.sh的内容如下:

#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#=================================================================#
#   System Required:  CentOS 6,7, Debian, Ubuntu                  #
#   Description: One click Install ShadowsocksR Server            #
#   Author: Teddysun <i@teddysun.com>                             #
#   Thanks: @breakwa11 <https://twitter.com/breakwa11>            #
#   Intro:  https://shadowsocks.be/9.html                         #
#=================================================================#

clear
echo
echo "#############################################################"
echo "# One click Install ShadowsocksR Server                     #"
echo "# Intro: https://shadowsocks.be/9.html                      #"
echo "# Author: Teddysun <i@teddysun.com>                         #"
echo "# Github: https://github.com/shadowsocksr/shadowsocksr      #"
echo "#############################################################"
echo

#Current folder
cur_dir=`pwd`
# Stream Ciphers
ciphers=(
none
aes-256-cfb
aes-192-cfb
aes-128-cfb
aes-256-cfb8
aes-192-cfb8
aes-128-cfb8
aes-256-ctr
aes-192-ctr
aes-128-ctr
chacha20-ietf
chacha20
rc4-md5
rc4-md5-6
)
# Reference URL:
# https://github.com/breakwa11/shadowsocks-rss/blob/master/ssr.md
# https://github.com/breakwa11/shadowsocks-rss/wiki/config.json
# Protocol
protocols=(
origin
verify_deflate
auth_sha1_v4
auth_sha1_v4_compatible
auth_aes128_md5
auth_aes128_sha1
auth_chain_a
auth_chain_b
)
# obfs
obfs=(
plain
http_simple
http_simple_compatible
http_post
http_post_compatible
tls1.2_ticket_auth
tls1.2_ticket_auth_compatible
tls1.2_ticket_fastauth
tls1.2_ticket_fastauth_compatible
)
# Color
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'

# Make sure only root can run our script
[[ $EUID -ne 0 ]] && echo -e "[${red}Error${plain}] This script must be run as root!" && exit 1

# Disable selinux
disable_selinux(){
    if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
        setenforce 0
    fi
}

#Check system
check_sys(){
    local checkType=$1
    local value=$2

    local release=''
    local systemPackage=''

    if [[ -f /etc/redhat-release ]]; then
        release="centos"
        systemPackage="yum"
    elif cat /etc/issue | grep -Eqi "debian"; then
        release="debian"
        systemPackage="apt"
    elif cat /etc/issue | grep -Eqi "ubuntu"; then
        release="ubuntu"
        systemPackage="apt"
    elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
        release="centos"
        systemPackage="yum"
    elif cat /proc/version | grep -Eqi "debian"; then
        release="debian"
        systemPackage="apt"
    elif cat /proc/version | grep -Eqi "ubuntu"; then
        release="ubuntu"
        systemPackage="apt"
    elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
        release="centos"
        systemPackage="yum"
    fi

    if [[ ${checkType} == "sysRelease" ]]; then
        if [ "$value" == "$release" ]; then
            return 0
        else
            return 1
        fi
    elif [[ ${checkType} == "packageManager" ]]; then
        if [ "$value" == "$systemPackage" ]; then
            return 0
        else
            return 1
        fi
    fi
}

# Get version
getversion(){
    if [[ -s /etc/redhat-release ]]; then
        grep -oE  "[0-9.]+" /etc/redhat-release
    else
        grep -oE  "[0-9.]+" /etc/issue
    fi
}

# CentOS version
centosversion(){
    if check_sys sysRelease centos; then
        local code=$1
        local version="$(getversion)"
        local main_ver=${version%%.*}
        if [ "$main_ver" == "$code" ]; then
            return 0
        else
            return 1
        fi
    else
        return 1
    fi
}

# Get public IP address
get_ip(){
    local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 )
    [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )
    [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )
    [ ! -z ${IP} ] && echo ${IP} || echo
}

get_char(){
    SAVEDSTTY=`stty -g`
    stty -echo
    stty cbreak
    dd if=/dev/tty bs=1 count=1 2> /dev/null
    stty -raw
    stty echo
    stty $SAVEDSTTY
}

# Pre-installation settings
pre_install(){
    if check_sys packageManager yum || check_sys packageManager apt; then
        # Not support CentOS 5
        if centosversion 5; then
            echo -e "$[{red}Error${plain}] Not supported CentOS 5, please change to CentOS 6+/Debian 7+/Ubuntu 12+ and try again."
            exit 1
        fi
    else
        echo -e "[${red}Error${plain}] Your OS is not supported. please change OS to CentOS/Debian/Ubuntu and try again."
        exit 1
    fi
    # Set ShadowsocksR config password
    echo "Please input password for ShadowsocksR:"
    read -p "(Default password: teddysun.com):" shadowsockspwd
    [ -z "${shadowsockspwd}" ] && shadowsockspwd="teddysun.com"
    echo
    echo "---------------------------"
    echo "password = ${shadowsockspwd}"
    echo "---------------------------"
    echo
    # Set ShadowsocksR config port
    while true
    do
    echo -e "Please input port for ShadowsocksR [1-65535]:"
    read -p "(Default port: 8989):" shadowsocksport
    [ -z "${shadowsocksport}" ] && shadowsocksport="8989"
    expr ${shadowsocksport} + 1 &>/dev/null
    if [ $? -eq 0 ]; then
        if [ ${shadowsocksport} -ge 1 ] && [ ${shadowsocksport} -le 65535 ]; then
            echo
            echo "---------------------------"
            echo "port = ${shadowsocksport}"
            echo "---------------------------"
            echo
            break
        else
            echo -e "[${red}Error${plain}] Input error, please input a number between 1 and 65535"
        fi
    else
        echo -e "[${red}Error${plain}] Input error, please input a number between 1 and 65535"
    fi
    done

    # Set shadowsocksR config stream ciphers
    while true
    do
    echo -e "Please select stream cipher for ShadowsocksR:"
    for ((i=1;i<=${#ciphers[@]};i++ )); do
        hint="${ciphers[$i-1]}"
        echo -e "${green}${i}${plain}) ${hint}"
    done
    read -p "Which cipher you'd select(Default: ${ciphers[1]}):" pick
    [ -z "$pick" ] && pick=2
    expr ${pick} + 1 &>/dev/null
    if [ $? -ne 0 ]; then
        echo -e "[${red}Error${plain}] Input error, please input a number"
        continue
    fi
    if [[ "$pick" -lt 1 || "$pick" -gt ${#ciphers[@]} ]]; then
        echo -e "[${red}Error${plain}] Input error, please input a number between 1 and ${#ciphers[@]}"
        continue
    fi
    shadowsockscipher=${ciphers[$pick-1]}
    echo
    echo "---------------------------"
    echo "cipher = ${shadowsockscipher}"
    echo "---------------------------"
    echo
    break
    done

    # Set shadowsocksR config protocol
    while true
    do
    echo -e "Please select protocol for ShadowsocksR:"
    for ((i=1;i<=${#protocols[@]};i++ )); do
        hint="${protocols[$i-1]}"
        echo -e "${green}${i}${plain}) ${hint}"
    done
    read -p "Which protocol you'd select(Default: ${protocols[0]}):" protocol
    [ -z "$protocol" ] && protocol=1
    expr ${protocol} + 1 &>/dev/null
    if [ $? -ne 0 ]; then
        echo -e "[${red}Error${plain}] Input error, please input a number"
        continue
    fi
    if [[ "$protocol" -lt 1 || "$protocol" -gt ${#protocols[@]} ]]; then
        echo -e "[${red}Error${plain}] Input error, please input a number between 1 and ${#protocols[@]}"
        continue
    fi
    shadowsockprotocol=${protocols[$protocol-1]}
    echo
    echo "---------------------------"
    echo "protocol = ${shadowsockprotocol}"
    echo "---------------------------"
    echo
    break
    done

    # Set shadowsocksR config obfs
    while true
    do
    echo -e "Please select obfs for ShadowsocksR:"
    for ((i=1;i<=${#obfs[@]};i++ )); do
        hint="${obfs[$i-1]}"
        echo -e "${green}${i}${plain}) ${hint}"
    done
    read -p "Which obfs you'd select(Default: ${obfs[0]}):" r_obfs
    [ -z "$r_obfs" ] && r_obfs=1
    expr ${r_obfs} + 1 &>/dev/null
    if [ $? -ne 0 ]; then
        echo -e "[${red}Error${plain}] Input error, please input a number"
        continue
    fi
    if [[ "$r_obfs" -lt 1 || "$r_obfs" -gt ${#obfs[@]} ]]; then
        echo -e "[${red}Error${plain}] Input error, please input a number between 1 and ${#obfs[@]}"
        continue
    fi
    shadowsockobfs=${obfs[$r_obfs-1]}
    echo
    echo "---------------------------"
    echo "obfs = ${shadowsockobfs}"
    echo "---------------------------"
    echo
    break
    done

    echo
    echo "Press any key to start...or Press Ctrl+C to cancel"
    char=`get_char`
    # Install necessary dependencies
    if check_sys packageManager yum; then
        yum install -y python python-devel python-setuptools openssl openssl-devel curl wget unzip gcc automake autoconf make libtool
    elif check_sys packageManager apt; then
        apt-get -y update
        apt-get -y install python python-dev python-setuptools openssl libssl-dev curl wget unzip gcc automake autoconf make libtool
    fi
    cd ${cur_dir}
}

# Download files
download_files(){
    # Download libsodium file
    if ! wget --no-check-certificate -O libsodium-1.0.13.tar.gz https://github.com/jedisct1/libsodium/releases/download/1.0.13/libsodium-1.0.13.tar.gz; then
        echo -e "[${red}Error${plain}] Failed to download libsodium-1.0.13.tar.gz!"
        exit 1
    fi
    # Download ShadowsocksR file
    if ! wget --no-check-certificate -O manyuser.zip https://github.com/teddysun/shadowsocksr/archive/manyuser.zip; then
        echo -e "[${red}Error${plain}] Failed to download ShadowsocksR file!"
        exit 1
    fi
    # Download ShadowsocksR init script
    if check_sys packageManager yum; then
        if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR -O /etc/init.d/shadowsocks; then
            echo -e "[${red}Error${plain}] Failed to download ShadowsocksR chkconfig file!"
            exit 1
        fi
    elif check_sys packageManager apt; then
        if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR-debian -O /etc/init.d/shadowsocks; then
            echo -e "[${red}Error${plain}] Failed to download ShadowsocksR chkconfig file!"
            exit 1
        fi
    fi
}

# Firewall set
firewall_set(){
    echo -e "[${green}Info${plain}] firewall set start..."
    if centosversion 6; then
        /etc/init.d/iptables status > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            iptables -L -n | grep -i ${shadowsocksport} > /dev/null 2>&1
            if [ $? -ne 0 ]; then
                iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT
                iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT
                /etc/init.d/iptables save
                /etc/init.d/iptables restart
            else
                echo -e "[${green}Info${plain}] port ${shadowsocksport} has been set up."
            fi
        else
            echo -e "[${yellow}Warning${plain}] iptables looks like shutdown or not installed, please manually set it if necessary."
        fi
    elif centosversion 7; then
        systemctl status firewalld > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp
            firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp
            firewall-cmd --reload
        else
            echo -e "[${yellow}Warning${plain}] firewalld looks like not running or not installed, please enable port ${shadowsocksport} manually if necessary."
        fi
    fi
    echo -e "[${green}Info${plain}] firewall set completed..."
}

# Config ShadowsocksR
config_shadowsocks(){
    cat > /etc/shadowsocks.json<<-EOF
{
    "server":"0.0.0.0",
    "server_ipv6":"[::]",
    "server_port":${shadowsocksport},
    "local_address":"127.0.0.1",
    "local_port":1080,
    "password":"${shadowsockspwd}",
    "timeout":120,
    "method":"${shadowsockscipher}",
    "protocol":"${shadowsockprotocol}",
    "protocol_param":"",
    "obfs":"${shadowsockobfs}",
    "obfs_param":"",
    "redirect":"",
    "dns_ipv6":false,
    "fast_open":false,
    "workers":1
}
EOF
}

# Install ShadowsocksR
install(){
    # Install libsodium
    if [ ! -f /usr/lib/libsodium.a ]; then
        cd ${cur_dir}
        tar zxf libsodium-1.0.13.tar.gz
        cd libsodium-1.0.13
        ./configure --prefix=/usr && make && make install
        if [ $? -ne 0 ]; then
            echo -e "[${red}Error${plain}] libsodium install failed!"
            install_cleanup
            exit 1
        fi
    fi

    ldconfig
    # Install ShadowsocksR
    cd ${cur_dir}
    unzip -q manyuser.zip
    mv shadowsocksr-manyuser/shadowsocks /usr/local/
    if [ -f /usr/local/shadowsocks/server.py ]; then
        chmod +x /etc/init.d/shadowsocks
        if check_sys packageManager yum; then
            chkconfig --add shadowsocks
            chkconfig shadowsocks on
        elif check_sys packageManager apt; then
            update-rc.d -f shadowsocks defaults
        fi
        /etc/init.d/shadowsocks start

        clear
        echo
        echo -e "Congratulations, ShadowsocksR server install completed!"
        echo -e "Your Server IP        : \033[41;37m $(get_ip) \033[0m"
        echo -e "Your Server Port      : \033[41;37m ${shadowsocksport} \033[0m"
        echo -e "Your Password         : \033[41;37m ${shadowsockspwd} \033[0m"
        echo -e "Your Protocol         : \033[41;37m ${shadowsockprotocol} \033[0m"
        echo -e "Your obfs             : \033[41;37m ${shadowsockobfs} \033[0m"
        echo -e "Your Encryption Method: \033[41;37m ${shadowsockscipher} \033[0m"
        echo
        echo "Welcome to visit:https://shadowsocks.be/9.html"
        echo "Enjoy it!"
        echo
    else
        echo "ShadowsocksR install failed, please Email to Teddysun <i@teddysun.com> and contact"
        install_cleanup
        exit 1
    fi
}

# Install cleanup
install_cleanup(){
    cd ${cur_dir}
    rm -rf manyuser.zip shadowsocksr-manyuser libsodium-1.0.13.tar.gz libsodium-1.0.13
}


# Uninstall ShadowsocksR
uninstall_shadowsocksr(){
    printf "Are you sure uninstall ShadowsocksR? (y/n)"
    printf "\n"
    read -p "(Default: n):" answer
    [ -z ${answer} ] && answer="n"
    if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then
        /etc/init.d/shadowsocks status > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            /etc/init.d/shadowsocks stop
        fi
        if check_sys packageManager yum; then
            chkconfig --del shadowsocks
        elif check_sys packageManager apt; then
            update-rc.d -f shadowsocks remove
        fi
        rm -f /etc/shadowsocks.json
        rm -f /etc/init.d/shadowsocks
        rm -f /var/log/shadowsocks.log
        rm -rf /usr/local/shadowsocks
        echo "ShadowsocksR uninstall success!"
    else
        echo
        echo "uninstall cancelled, nothing to do..."
        echo
    fi
}

# Install ShadowsocksR
install_shadowsocksr(){
    disable_selinux
    pre_install
    download_files
    config_shadowsocks
    if check_sys packageManager yum; then
        firewall_set
    fi
    install
    install_cleanup
}

# Initialization step
action=$1
[ -z $1 ] && action=install
case "$action" in
    install|uninstall)
        ${action}_shadowsocksr
        ;;
    *)
        echo "Arguments error! [${action}]"
        echo "Usage: `basename $0` [install|uninstall]"
        ;;
esac

This is the buildsystem for the LEDE Linux distribution

Mirror of https://git.lede-project.org/?p=source.git Please send your PRs against this tree. They will be merged via staging trees and appear in this tree once the staging trees get merged back into source.git

This is the buildsystem for the LEDE Linux distribution.

Please use "make menuconfig" to choose your preferred
configuration for the toolchain and firmware.

You need to have installed gcc, binutils, bzip2, flex, python, perl, make,
find, grep, diff, unzip, gawk, getopt, subversion, libz-dev and libc headers.

Run "./scripts/feeds update -a" to get all the latest package definitions
defined in feeds.conf / feeds.conf.default respectively
and "./scripts/feeds install -a" to install symlinks of all of them into
package/feeds/.

Use "make menuconfig" to configure your image.

Simply running "make" will build your firmware.
It will download all sources, build the cross-compile toolchain, 
the kernel and all choosen applications.

To build your own firmware you need to have access to a Linux, BSD or MacOSX system
(case-sensitive filesystem required). Cygwin will not be supported because of
the lack of case sensitiveness in the file system.


Sunshine!
 Your LEDE Community
 http://www.lede-project.org

from https://github.com/lede-project/source

穷人有罪与社会达尔文主义

贫穷是不可原谅的你知道吗?所以听话,买基金吧,基金可以帮你摆脱贫穷,也让我们人类原谅你。

据说这是丧到极点的“神文案”,然后原文已经被发布者自己删掉了。这不是丧,这是对丧的侮辱,这是对穷人的侮辱,也是对所有人的侮辱:

因为对一个人的不公,就是对所有人的威胁。因为谁也不能保证,自己哪一天不会变成穷人。

好了,就不要管这是不是又一次神经病营销了吧。可能如声明的一样,是别人借势营销罢了。

我只想简单讨论一下这句话, “年纪越大,越没有人会原谅你的穷”。好了,我不是想讨论这句话,我只是单纯地想狠狠地,有理有据地痛骂这句话。

在那个文案里,你年纪越活越大了,但还是穷,怎么办啊,解决之道就是去买股票、买基金,否则的话,你就越大越穷,活该被别人看不起——

不好意思,不是被看不起了,是“无法原谅”。记住,穷人是无法被原谅的,穷人就是罪人。


(“年纪越大,越没有人会原谅你的穷”部分文案)

其实我完全可以一句话都不讲,因为我要出来骂这句话,说这句话是不对的,在我国这个国家,是需要极大勇气的。

因为这话说出来,完全可以预料,在我国,大部分人口里不说,心里会觉得这是对的。

本来就是这样啊!穷人就是不努力!穷人就是有“穷人思维”!穷人就是刁民!

这种话要是一个大公司,公然在欧美社会说,别说是一个企业的营销文案了,就是个人,说这种话,那不是去侮辱TA那个社会处境不好的穷人,那是绝对的“政治不正确”,是自取其辱,自毁前程。

不是每个社会都像我国社会这么崇尚丛林法则,崇拜得所有质疑这套法则的人,要么是卢瑟,要么是圣母婊。

我国最牛逼的科幻小说《三体》,就把全宇宙都想象成一个丛林社会——就有一帮很特殊的科幻迷,对《三体》的女主角恨得那是咬牙切齿,就差不能生啖其肉了。因为正是这个女主的圣母心,导致了整个地球的毁灭,这不更证明了圣母婊的可恶吗?于是大家更有理由去骂圣母婊了。

也不知道这帮人是智障还是怎么样,你当然可以骂圣母婊,但你不能把一部科幻小说作为论据去骂圣母婊。把科幻小说里写的东西当成了宇宙真理,大言不惭把科幻小说当成论据,“看吧!我就说圣母心不可取吧,宇宙就是因为圣母婊而毁灭的!”

这样去骂圣母婊不是理中客,这样去骂圣母婊,是公开自己是智障的事实。

其实生活在我国,底层到底有多贫穷,受教育程度有多低,生存环境有多恶劣,前段时间罗斯高教授的研究,大家都看到了,但是这就是一阵风——这一阵风完了,这个“穷人有罪”的文案迅速地成了新的10万+,占据和充实了大家丧、焦虑、欲望又绝望的生活。

这是个悖论,真正贫穷的底层,首先这些侮辱他们尊严的文案,他们是看都看不到的。其次,他们就是看到了,也是没有钱去买你的基金,让自己富裕起来的。

看到这个文案的是些什么人?最被这个文案打击的人是什么样的?——

可能就是那个文案里写的,在北上广深打拼,受过高等教育,经常点外卖,买不起房,买车也困难,每个月万把块钱,漂着,有点余钱,不知道干嘛。

所以被这个文案一刺激,就咬咬牙,怀着一夜暴富的幻想,怀着不被时代抛弃的幻想,怀着不要因为穷而有罪的愧疚自责感,跑去买基金去了。一做风险测试,系统说你是稳健型投资者,基金是高风险的,不适合你。你咬咬牙,还是买了一点。第二天一看,过去一年涨了25%的基金,你一买就跌了一截,心理寒凉,苦不堪言。

其实看到这个文案的,自然还有另一个群体。早在看到这个觉得穷人有罪的文案前,就已经给自己配置了各种A股、港股、美股、期货、比特币等等,平时收入挺好的,研究一下金融,在这里也赚了些钱,不管是在北上广深租房买房吧,总之在一线城市,也算过上了体面人的生活。

我在想,这个群体看到这个文案的时候,心里在想什么。大概是心想,“穷人生活真是没有希望”,“我早就配置了XXX,还用你来说?”,“还好我XXX抛得早,过上了上等人的生活”。

但是这个群体,你绝对很难想象会有人拍案而起,“年纪越大,越没有人会原谅你的穷”?这文案不等于说是“穷人有罪”吗?这他妈是人说话?

对着穷人说,你穷你有罪,想要无罪就要富有,想要富有就要买基金——这跟晋惠帝为了穷人好,对着穷人说“何不食肉糜”有什么分别?

2

其实,不管是真正绝对贫穷、不会关注这个文案的底层,还是被这个文案刺激、用不多的钱去买基金的上班族,或是在这之前已经配置了资产、看到这个文案心中窃喜、占据了优势地位的“体面”人,大多数人本质上,不都是认同这一套价值观和这样的生活方式吗?

只是这个文案,真的就是非常直白的,毫无良心的讲了这么一个大家普遍认同的事实:穷人有罪。所以为了洗刷这种耻辱和罪恶,就要努力,就要奋斗,就要打拼,就要崇拜有钱人,成为有钱人,鄙视穷人,教育穷人向自己学习,成为自己这种体面人和上等人。


(“年纪越大,越没有人会原谅你的穷”部分文案)

照理说很多在大公司工作的也都是受过高等教育的人,但是一谈到穷人就是这么个逻辑,穷就是因为不努力,不努力就是有罪。要想过上上等人的生活,你怎么可以懒呢?这样有罪明白吗?而一旦有人反对,这帮人就跟是自己昨天晚上刚刚创造了宇宙一样,迅速上升到自然法则的高度:

优胜劣汰,费厄泼赖,这是社会达尔文主义,懂不懂?

这样的生活,这样的人,这样的想法,其实挺可怜的,不是不可以理解的。

因为在我国这么个奇葩的历史背景下,前面几十年被一大二公、三面红旗整得民不聊生、全面贫穷后,所有人——从领导层,到知识分子,再到普通老百姓——对什么集体主义、利他精神、平等主义有了膝跳反射一般的反对,有生理上的厌恶,更有集体历史记忆打底色的恐惧。

所以人民公社不好,农业合作社不好,大锅饭不好,就基本上也被等于社群互助也不好,利他精神也不好,平等社会也是不可能的乌托邦,而平等这种现代自由民主社会的价值,也被扣上了低效率、影响人们积极性、导致极权的帽子。而现在,九二南巡之后的种种变化,就比此前那种一大二公就要好很多。

我当然承认这一点,我就是在这个背景下成长起来的一代人,和很多人一样,算是个这个变迁的受益者,对市场经济,文化多元,市民社会等等都是亲近的,是个平等自由主义者。

但是面对今天我国的发展状态,任何一个还保有良知、在意公平、平等这些价值的人,并且要是还关注一点社会体系的问题,不管你是小白领,还是体面人,都应该会认同这个观点,那就是社会群体意义上的贫穷,是需要从税收体系二次分配、教育体系、福利分配、医疗保障等一系列层面进行改善的——这和前面几十年的胡搞一气不是一码事。

而作为大公司,或者作为能够有幸在一线城市过上“体面人”生活的人,你即便从体系层面改善的角度,做不了什么事,但是做做公益,是可能的吧。国际标准意义上的企业社会责任,对现代大企业大公司,也是必要的吧。但即便呢,你这些什么都不做,也没问题,不能逼捐对吧。

但是起码的最低限度是,你不要嘲笑贫穷,不要鄙视贫穷,更不要像这个文案一样,“不原谅”贫穷,给贫穷直接定罪。

3

上文已经提到,这个文案敢写出来,其实只是写出了某种集体无意识,写出了某种已经印刻在社会底色里的众意罢了。

事实上,我们早已经习惯了,生活在这个贫穷就是耻辱的社会里。现实就是,“没有什么情况的生存是人最终不能习惯的,特别是当他看到他身边所有人都接受了这种生存状态以后”。

这是列夫·托尔斯泰在《安娜·卡列尼娜》中的话。也是我们今天的生存状态。

在《没有增长的繁荣》(Prosperity Without Growth)一书中,作者Tim Jackson给出了“不平等与疾病关系”( Inequality and Ill Health),在这个统计中,美国收入差距最大,其中收入低的人患疾病的可能性非常高,日本收入差距最小,其中收入低的人患疾病的可能性最低。北欧与西欧国家也好于美国。那个统计里没有中国,但中国的基尼系数,在许多统计中,都已经超过美国了。


(社会流动性与不平等关系)

而这还是这些发达国家之间的对比,考虑到中国的基尼系数高于美国,并且社会福利、法治程度、市场合理程度都还不如美国,对于中国的穷人来说,处境就更艰难。对了,中国人还普遍痛恨“政治正确”,因此他们可以肆意地嘲笑和羞辱穷人,大家还会觉得这种行为特别的真实——其实这不是真实,这就是缺德。

在一个侮辱贫穷、崇拜财富的社会下,人民彼此是不会有安全感和信任感可言的。人的“道德情操”是败坏的——这话不是我说的,这话是古典经济学的鼻祖亚当·斯密说的。

而同样是在《没有增长的繁荣》一书中,作者用数据也给出了结论,在整个欧洲,与美国最为相似的英国,也是技术是人民彼此之间最不彼此信任的国度之一。

不是每个社会,都像中国这么丛林法则,这么的不讲政治正确,这么的“三体”,这么的“真实”。

如果我们觉得社会达尔文主义就是人类世界的真理,我们就真的还只是活在19世纪,并且对人类可能达成的良好社会与良好生活,完全丧失了想象力——

按照上面已经列举到的人类社会实例,我们一叶障目,不知道这个世界上其他的地方,有其他的生活方式,有其他的社会制度,有其他的社群,有一种更适合人类美好生存的方案,并且维系得很好。

能否缩小贫富差距,能否实现信任感更强的社会,能否实现“可以增长的繁荣”,这是整个社会去自我确认的事情。我们越平等,我们就越相信平等是可能的。与之相反,过去几十年的不平等,已经越来越让我们相信,不平等就是生活的自然状态,让我们对此除了鄙视、嘲笑和定罪以外,好像别无它法。

但事实不是这样,改善人类的整体处境已经有了很多的办法。

在2016年年底,一部叫做《明日进行时》(Tomorrow)的法国纪录片上映,讲述的是法国作家兼导演Cyril Dion和著名演员兼歌手Mélanie Laurent一起历时两年拍摄的纪录片,他们同时也出版了《找寻明天的答案》一书。

在那本书和那部纪录片中,他们想要试着回答当今人类遇到的各种重要议题,也到世界各国考察了各种具有原创性和可行性的方案,聚焦探索了饮食、能源、经济、民主和教育这五个方面的严峻问题。

而最难能可贵的是,他们对现实的所有忧思与对更好解决方法的想象,没有只停留在乌托邦的层面,而是真正地给出了切实可行的方案,他们的影片和书,既展示了这个世界的多样性,又引人入胜地讲述了那些富有想象力、又同时兼具可行性的故事,限于本文主题,在此不再展开。

所以,缩小贫富差距是可能还是不可能,这不是物理规律,这是人类社会的事情,人类社会的事情需要业已拥有的人类经验,也需要人类独特的东西,就是对美好社会的想象力。

而在这之前,我们要抛弃的,就是那种“穷人有罪”的可怕意识。

4

当在信奉社会达尔文主义的时候,我们会信誓旦旦地拿出古典经济学的经典假设来证明自己“人不为己,天诛地灭”的正当性,那就是“理性人都是自私的”。

但这只是假说。

在这个假说出现以前,人类社会的生存方式不是现在这样,只是人类寿命很短,记忆有限,我们只是习惯把最近几十年的生活方式,当成了理所当然的自古以来。

而在这个假说出现以后,人类社会也从来没有任何科学研究,能够证明“人的本性自私”这个假说。

而历史倒总是在告诉我们对立的结论:

即便是在人类最极端恶劣的处境下,二战中,敦刻尔克仍然会有那么多普通人开着民用的船只去解救被围困的英法军人;有超过两万人冒着自己的生命危险帮助犹太人逃难;有辛德勒以一己之力拯救1200名犹太人……事实上,他们可以什么都不做。

心理学也正在告诉我们与“人是自私的”所相反的事实,Daniel Batson在Altruism in Humans一书中,用三十年的实证研究,证实了人类纯粹的利他精神,实实在在地存在着。这一精神占据着我们的演化史,只是“人是自私的”这个假说太过显学,以至于我们都忽略了。

我曾在某问答平台,回答过一个“穷人如何翻身”的问题,在其中写道:

穷人要翻身,必须首先了解,一个富者越富、穷者越穷的社会,是非常坏的。因为社会互不信任,进而变成互害社会,人人自危,最终变成原始丛林的所有人对所有人的战争状态。

认识到这一点之后,穷人不要去喝心灵毒鸡汤了,比如什么改变“穷人思维”——这本身就是富人对穷人处境的一种蔑视嘲弄所制造的一个词汇。

穷人,也就是处境更糟糕的人,在这个时代,只能通过“大量获取更正确的信息”,从而“改善自己的判断力”,来改善自己的处境——

改善之后,仍然要记得,一个不平等的社会,对于整个社会、对于整体的人类来说,都是巨大的无可挽回的伤害,当你的穷人处境得到改善以后,要致力于改善整体的人类不平等状况。而不要把这样的人斥责为“圣母婊” 、 “白左” 。

这就是我的意思,一切人类都要认识到——写出并赞同“年纪越大,越没有人会原谅你的穷”的人更要意识到:

社会意义上的贫穷,不是不可饶恕的罪恶,不是难以启齿的耻辱,它只是一种不幸。

而这种不幸,不是自然的状态,只是人为的结果。它是可以被改变的,也是必须被改变的。从社会层面改变的方法有很多,却绝不是买基金.
-----------

其实越是穷人,越应该出国,至少出国后还有一线机会。
看看人家福建偷渡客吧。

shadowsocks2vpn

docker pull alexzhuo/shadowsocks2vpn

把VPN服务端的流量重定向到Shadowsocks客户端。

Docker server for ShadowsocksR client to VPN

一个OpenVPN/PPTP 服务端。能够将VPN流量重定向至ShadowsocksR客户端,支持国内外分流。

简介

由于众所周知的原因,如果把OpenVPN/PPTP服务端搭建在国外,一般是连接不上的,但是又想通过VPN的方式翻天朝防火墙(对于很多设备来说相当于0配置)可以把VPN的服务端流量定向到Shadowsocks客户端上,并且在此过程中加入GFWList或者大陆IP白名单实现分流功能。
国内路由表位置:/etc/ss_rules/china
GFWList位置:/etc/dnsmasq.d/gfw_list.conf
HAProxy配置文件地址:/etc/haproxy/haproxy.cfg
SSR的配置文件地址:/etc/ss_rules/ss.json
Pdnsd配置文件位置:/etc/pdnsd.conf
OpenVPN服务端配置文件位置:/etc/openvpn/server.conf
OpenVPN客户端.ovpn文件位置:/root
PPTP服务端配置文件:/etc/pptpd.conf
PPTP用户名密码文件:/etc/ppp/chap-secrets
Privoxy配置文件:/etc/privoxy/config
ss-redir 默认端口12345
ss-local 默认端口1080
privoxy 默认端口8080

配置ShadowsockR客户端

在使用之前需要配置SSR客户端,具体方法如下
SSR的配置文件地址:/etc/ss_rules/ss.json
注:上面的文件是配置SS客户端的信息,如果想搭配HAProxy实现负载均衡和高可用,请配置HAProxy
HAProxy配置文件地址:/etc/haproxy/haproxy.cfg
注:如果所有的SS服务端加密方式和密码均相同,则可以使用HAproxy实现负载均衡和高可用

启动VPN服务端

此服务器应部署在天朝内,并配合境外SS服务器使用
OpenVPN协议:
OpenVPN需开放7000 UDP端口,适用于远程、公网、国内服务器、云等等。
客户端的.ovpn文件在容器的/root目录下,免费提供10个客户端文件。也可以通过浏览器访问容器80端口下载。注意需要修改.ovpn文件中的remote后IP为你的服务器IP
国内白名单分流模式
docker run -itd --privileged=true -p 0.0.0.0:7000:7000/udp alexzhuo/shadowsocks2vpn /etc/ss_rules/startforeignip.sh
GFWList分流模式
docker run -itd --privileged=true -p 0.0.0.0:7000:7000/udp alexzhuo/shadowsocks2vpn /etc/ss_rules/startgfwlist.sh
全局翻墙模式
docker run -itd --privileged=true -p 0.0.0.0:7000:7000/udp alexzhuo/shadowsocks2vpn /etc/ss_rules/startallip.sh
PPTP协议:
启动方式和OpenVPN协议相似,需要映射tcp协议的1723端口.
国内白名单分流模式
docker run -itd --privileged=true alexzhuo/shadowsocks2vpn /etc/ss_rules/startforeignip.sh
GFWList分流模式
docker run -itd --privileged=true alexzhuo/shadowsocks2vpn /etc/ss_rules/startgfwlist.sh
全局翻墙模式
docker run -itd --privileged=true alexzhuo/shadowsocks2vpn /etc/ss_rules/startallip.sh
注意,如果你客户端在连接PPTP服务器的时候出现了“错误619”(windows)并且在服务器宿主机上使用tcpdump发现如下提示protocol 47 unreachable
那么应该是没有开启GRE协议引起的,此时需要在宿主机上开启GRE协议和1723端口(网上有说开启47端口的都是胡说八道)
只需一条指令:modprobe ip_nat_pptp
如果还是protocol 47 unreachable,那么再试试下面这个
iptables -t nat -A PREROUTING -i eth0 -p 47 -j DNAT --to 容器IP

使用Socks5或HTTP代理
启动socks5代理 ss-local -c /etc/ss_rules/ss.json 然后需要映射端口1080
启动HTTP代理 service privoxy restart 需要先启用socks5代理,并映射端口8080
注:使用HTTP代理可能会泄漏你的网络流量,因为是无加密传输。浏览器默认配置为全局代理,如果想实现智能分流,需要在浏览器的代理配置PAC,具体可以看:https://github.com/breakwa11/gfw_whitelist
from https://hub.docker.com/r/alexzhuo/shadowsocks2vpn/