一键安装最新内核并开启 BBR 脚本

本文转载自:https://teddysun.com/489.html
最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,最新的 4.9 版内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

本脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的(KVM、Xen、VMware等)
内存要求:≥128M
日期  :2017 年 01 月 09 日

关于本脚本

1、本脚本已在 Vultr 上的 VPS 全部测试通过。
2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
3、某些服务商(如 DigitalOcean)可能需要首先将 VPS 配置为可自定义内核,然后 grub2 的配置才会生效。
4、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
5、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。

使用方法

使用root用户登录,运行以下命令:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。
重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:

uname -r

查看内核版本,含有 4.9.1 就表示 OK 了

sysctl net.ipv4.tcp_available_congestion_control

返回值一般为:
net.ipv4.tcp_available_congestion_control = bbr cubic reno

sysctl net.ipv4.tcp_congestion_control

返回值一般为:
net.ipv4.tcp_congestion_control = bbr

sysctl net.core.default_qdisc

返回值一般为:
net.core.default_qdisc = fq

lsmod | grep bbr

返回值有 tcp_bbr 模块即说明bbr已启动。

更新日志:

2017 年 01 月 09 日:
1、更新内核到 4.9.1。

参考链接:

https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md

http://elrepo.org/tiki/tiki-index.php

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.1/

Shadowsocks 一键安装脚本(四合一)

本文转载自:https://teddysun.com/486.html

本脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
内存要求:≥128M
日期  :2016 年 12 月 04 日

关于本脚本

1、一键安装 Shadowsocks-Python, ShadowsocksR, Shadowsocks-Go, Shadowsocks-libev 版(四选一)服务端;
2、各版本的启动脚本及配置文件名不再重合;
3、每次运行可安装一种版本;
4、支持以多次运行来安装多个版本,且各个版本可以共存(注意端口号需设成不同);
5、若已安装多个版本,则卸载时也需多次运行(每次卸载一种);
6、Shadowsocks-Python 和 ShadowsocksR 安装后不可同时启动(因为本质上都属 Python 版)。

友情提示:如果你有问题,请先阅读这篇《Shadowsocks Troubleshooting》之后再询问。

默认配置

服务器端口:自己设定(如不设定,默认为 8989)
密码:自己设定(如不设定,默认为 teddysun.com)
备注:脚本默认创建单用户配置文件,如需配置多用户,请手动修改相应的配置文件后重启即可。

客户端下载

常规版 Windows 客户端
https://github.com/shadowsocks/shadowsocks-windows/releases

ShadowsocksR 版 Windows 客户端
https://github.com/breakwa11/shadowsocks-csharp/releases

使用方法

使用root用户登录,运行以下命令:

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh
chmod +x shadowsocks-all.sh
./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log

安装完成后,脚本提示如下

Congratulations, your_shadowsocks_version install completed!
Your Server IP        :your_server_ip
Your Server Port      :your_server_port
Your Password         :your_password
Your Encryption Method:aes-256-cfb

Welcome to visit:https://teddysun.com/486.html
Enjoy it!

卸载方法

若已安装多个版本,则卸载时也需多次运行(每次卸载一种)
使用root用户登录,运行以下命令:

./shadowsocks-all.sh uninstall

启动脚本

启动脚本后面的参数含义,从左至右依次为:启动,停止,重启,查看状态。

Shadowsocks-Python 版:
/etc/init.d/shadowsocks-python start | stop | restart | status

ShadowsocksR 版:
/etc/init.d/shadowsocks-r start | stop | restart | status

Shadowsocks-Go 版:
/etc/init.d/shadowsocks-go start | stop | restart | status

Shadowsocks-libev 版:
/etc/init.d/shadowsocks-libev start | stop | restart | status

各版本默认配置文件

Shadowsocks-Python 版:
/etc/shadowsocks-python/config.json

ShadowsocksR 版:
/etc/shadowsocks-r/config.json

Shadowsocks-Go 版:
/etc/shadowsocks-go/config.json

Shadowsocks-libev 版:
/etc/shadowsocks-libev/config.json

FTP 上传一键脚本ftp_upload.sh

本文转载自:https://teddysun.com/484.html
写这个脚本的动机来自于黑五购买了一款什么都不限的虚拟主机,主机商死活不给 SSH Access 帐号,那就意味着不能通过 wget,axel 之类的下载工具下载文件。好在虚拟主机都是开通 FTP 的,可以通过 FTP 上传文件,而我又懒得一行一行敲命令,于是就写了这么一个懒人脚本。
下面来介绍一下这个 FTP 上传一键脚本 ftp_upload.sh。

总结一下 ftp_upload.sh 特点:

1、支持文件批量上传至 FTP 指定目录;
2、没有了。

1、下载该脚本并赋予执行权限

下载脚本到本地待上传文件的目录下,比如:/data/www/default

cd /data/www/default
wget --no-check-certificate https://github.com/teddysun/across/raw/master/ftp_upload.sh
chmod +x ftp_upload.sh

2、修改并配置脚本

请使用 vim 或 nano 等工具来修改。

关于变量名的一些说明:

LOCALDIR (脚本当前所在目录)
LOGFILE (脚本运行产生的日志文件路径)
FTP_HOST (连接的 FTP 域名或 IP 地址)
FTP_USER (连接的 FTP 的用户名)
FTP_PASS (连接的 FTP 的用户的密码)
FTP_DIR (连接的 FTP 的远程目录,比如: public_html)

一些注意事项的说明:

1)脚本需要用到 ftp 命令,请事先安装好;
2)脚本运行产生的日志文件路径不要乱改;
3)脚本需运行在待上传文件的目录下;
4)脚本后面跟含有通配符的参数时,一定要加双引号。

3、脚本运行示例

脚本会显示待上传文件列表,并在最后统计出所需时间。

1)上传当前目录下的文件 filename.tgz

./ftp_upload.sh filename.tgz

2)上传当前目录下的多个文件 filename1.tgz,filename2.tgz,filename3.tgz

./ftp_upload.sh filename1.tgz filename2.tgz filename3.tgz

3)上传当前目录下的通配符文件 *.tgz(注意此时后面跟的参数要加双引号)

./ftp_upload.sh "*.tgz"

4)上传当前目录下的多个通配符文件 .tgz,.gz(注意此时后面跟的参数要加双引号)

./ftp_upload.sh "*.tgz" "*.gz"

最后,欢迎交流和提出意见。

CentOS 6.8安装Python2.7.13

本文转载自https://teddysun.com/473.html
查看当前系统中的 Python 版本

python --version

返回 Python 2.6.6 为正常。
检查 CentOS 版本

cat /etc/redhat-release

返回 CentOS release 6.8 (Final) 为正常。
安装所有的开发工具包

yum groupinstall -y "Development tools"

安装其它的必需包

yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel

下载、编译和安装 Python 2.7.13

wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
tar zxf Python-2.7.13.tgz
cd Python-2.7.13
./configure
make && make install

默认 Python 2.7.13 会安装在 /usr/local/bin 目录下。

ll -tr /usr/local/bin/python*

/usr/local/bin/python2.7
/usr/local/bin/python2.7-config
/usr/local/bin/python -> python2
/usr/local/bin/python2 -> python2.7
/usr/local/bin/python2-config -> python2.7-config
/usr/local/bin/python-config -> python2-config

而系统自带的 Python 是在 /usr/bin 目录下。

ll -tr /usr/bin/python*

/usr/bin/python2.6-config
/usr/bin/python2.6
/usr/bin/python
/usr/bin/python2 -> python
/usr/bin/python-config -> python2.6-config

更新系统默认 Python 版本
先把系统默认的旧版 Python 重命名。

mv /usr/bin/python /usr/bin/python.old

再删除系统默认的 python-config 软链接。

rm -f /usr/bin/python-config

最后创建新版本的 Python 软链接。

ln -s /usr/local/bin/python /usr/bin/python
ln -s /usr/local/bin/python-config /usr/bin/python-config
ln -s /usr/local/include/python2.7/ /usr/include/python2.7

以上步骤做完以后,目录 /usr/bin 下的 Python 应该是

ll -tr /usr/bin/python*

/usr/bin/python2.6-config
/usr/bin/python2.6
/usr/bin/python.old
/usr/bin/python2 -> python
/usr/bin/python -> /usr/local/bin/python
/usr/bin/python-config -> /usr/local/bin/python-config

查看新的 Python 版本

python --version

返回 Python 2.7.13 为正常。

以下步骤还是有必要的
为新版 Python 安装 setuptools

wget https://bootstrap.pypa.io/ez_setup.py -O - | python

setuptools 正确安装完成后,easy_install 命令就会被安装在 /usr/local/bin 目录下了。

为新版 Python 安装 pip

easy_install pip

正确安装完成后,pip 命令就会被安装在 /usr/local/bin 目录下了。

为新版 Python 安装 distribute 包(可选)

pip install distribute

至此,新版 Python 即算安装完毕了。

注意:这可能会导致以前安装过的 Python 程序运行不了或者无法重启之类的(比如著名的 Shadowsocks Python 版)。原因是旧版的 pkg_resources 位于 /usr/lib/python2.6/site-packages 下。而新版的则是在 /usr/local/lib/python2.7/site-packages 下。
所以,也许你需要重新安装一下程序。

再次注意:升级 Python 可能会导致 yum 命令不可用。解决方法如下:
编辑 /usr/bin/yum 文件,将开头第一行的

#!/usr/bin/python

改为

#!/usr/bin/python2.6

但是,这种改法,万一哪天你 yum update 了一下,yum 被升级了后,又变回老样子了。
所以,经过我的不懈琢磨和努力,发现了一个办法(网上的解决方案都是抄来抄去,没有一点卵用)。
记住旧版本 Python 2.6.6 的重要路径如下所示,在运行 yum 命令的时候,会提示你哪个 module 不存在,不存在的我们就去旧版本的路径下找,一定能找到的。找到后,复制到新版本 Python 的路径 /usr/local/lib/python2.7/site-packages/ 下即可。

/usr/lib/python2.6/site-packages/
/usr/lib64/python2.6/site-packages/

我的复制过程是这样的:

cp -r /usr/lib/python2.6/site-packages/yum /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib/python2.6/site-packages/rpmUtils /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib/python2.6/site-packages/iniparse /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib/python2.6/site-packages/urlgrabber /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib64/python2.6/site-packages/rpm /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib64/python2.6/site-packages/curl /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/pycurl.so /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/_sqlitecache.so /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/sqlitecachec.py /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/sqlitecachec.pyc /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/sqlitecachec.pyo /usr/local/lib/python2.7/site-packages/

[开源]基于Python + Selenium实现kimsufi库存监控/全自动下单/短信提醒的简单应用

本文转载自:http://www.wuyan.in/Python/kimsufi_monitor-html.html
软件是开源免费的,exe程序直接运行,开着电脑挂着软件就能实现自动下单kimsufi服务器并短信提醒,博主认为这样强大的工具非常不错。
手动监控地址:http://ks.zrj766.me

config.json配置文件说明:
user & passwd 填写 你在kimsufi的邮箱用户名 密码.
phone 填写你的11位手机号,发送提醒短信用
url 填写要监控/抢购的 订单地址
area 根据需求填写: EUROPE 或者 AMERICA (前者是欧洲区域,后者南美/加拿大区域),该选项只有在两个区域均有库存的情况下有效.
sleep 库存状态监控频率,默认10秒
测试方法:将网址改成常年有货的网址(https://www.kimsufi.com/en/order/kimsufi.cgi?hard=160sk3) 看是否会自动下单 发送短信。
测试没问题的话,再改成要抢购的网址,开始监控。
欢迎任何评论建议批评
exe打包下载(无需安装依赖):
https://pan.baidu.com/s/1c2gNNX2
需要安装Chrome浏览器。 测试win7 8 10无问题.xp 2008运行不了,因为chrome不支持.
源码:
环境依赖:Python3+ selenium + chrome
https://pan.baidu.com/s/1i5PYRxb
部分代码:

from selenium import webdriver
from alidayu import AlibabaAliqinFcSmsNumSendRequest
import urllib.request
import time
import json
import re
import os
import ssl

ssl._create_default_https_context = ssl._create_unverified_context
print('基于Python + Selenium实现kimsufi库存监控/全自动下单/短信提醒')
print('需要安装Chrome浏览器。报错的话博客联系我www.wuyan.in')
with open('config.json', 'r') as f:
    config = json.load(f)
    user_email = config['user']
    user_passwd = config['passwd']
    url = config['url']
    phone = config['phone']
    sleep_time = config['sleep']
    area = config['area']


available_area = 0
while True:
    try:
        req = urllib.request.Request(url)
        req.add_header('User-Agent',
                       'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.19 Safari/537.36')
        html = urllib.request.urlopen(req).read().decode('utf-8')
        if 'Invalid parameter' in html:
            now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            print('time:%s stauts:Out of stock %s' % (now, url))
            pass
        else:
            #y有货状态开始验证可用区域:返回3种情况
            if 'In Europe' in html:
                if 'In North America' in html:
                    available_area = 1
            break

        time.sleep(sleep_time)
    except Exception as e:
        print('ERROR...正在重试...错误信息:',e)
        pass


#短信部分
def sms_send():
    try:
        appkey = 'XXXXXXXXXX'
        secret = 'efc57e7141f9f0832a40df71XXXXXXXXX'
        url = 'https://eco.taobao.com/router/rest'
        # params = {'name':'ks2','num':'50'}
        req = AlibabaAliqinFcSmsNumSendRequest(appkey, secret, url)
        req.extend = "123456"
        req.sms_type = "normal"
        req.sms_free_sign_name = "林海博客"
        # req.sms_param=json.dumps(params)
        req.rec_num = phone
        req.sms_template_code = "SMS_XXXXXXXX"
        resp = req.getResponse()
        print('短信发送成功')
    except Exception as e:
        print('短信发送失败',e)
        pass
    

#自动订单部分
browser = webdriver.Chrome()
browser.get(url)

# 如果存在多个可用区域,根据config中的area信息 指定区域.
if available_area:
    if area.upper() in 'AMERICA':
        browser.find_element_by_id('location-bhs').click()  #  选择南美区域
        browser.find_element_by_class_name('submit').click()
    else:
        browser.find_element_by_class_name('submit').click() #  选择默认区域
        
else: #只有单个可用区域的情况下,选择默认区域
    browser.find_element_by_class_name('submit').click()
    
browser.find_element_by_class_name('submit').click()  
browser.find_element_by_class_name('submit').click()  # 订单预览
browser.find_element_by_class_name('submit').click()  # 订单预览页面有几率出现两次,故多提交一次
browser.find_element_by_id('isNewOrExisting_existing').click()  # 选择已有账号

email = browser.find_element_by_xpath('//input[@name="session_nicData_nic"]')
email.clear()
email.send_keys(user_email)

passwd = browser.find_element_by_xpath('//input[@name="session_nicData_password"]')
passwd.clear()
passwd.send_keys(user_passwd)

browser.find_element_by_class_name('submit').click()
browser.find_element_by_class_name('submit').click()  #
browser.find_element_by_id('acceptAllContracts').click()
browser.find_element_by_class_name('submit').click()
browser.find_element_by_id('paypalPaymentForm').click()

if re.match(r'\b[0-9]{11}\b', phone):  # 正则验证手机号码
    sms_send()
    print('下单成功,短信已发送,请及时登录付款!')
browser.quit()

CentOS6一键BBR脚本----更新4.9正式版内核

原帖:http://www.hostloc.com/thread-342622-1-1.html
更新支持4.9正式版内核

wget --no-check-certificate https://github.com/52fancy/GooGle-BBR/raw/master/BBR.sh && sh BBR.sh

暂时只支持centos6 32位和64位
详细说明请移步
https://github.com/52fancy/GooGle-BBR