2016 八月 存档:

  • 安装aria2及使用yaaw配置WebGUI界面

    现在一般的linux发行版的gcc都不太新,而aria2 1.18之后需要gcc 4.8,所以只能装之前的版本咯。反正下载功能没有区别,都支持http、ftp、bt、magnet磁力链接等协议。

    wget http://jaist.dl.sourceforge.net/project/aria2/stable/aria2-1.17.1/aria2-1.17.1.tar.gz
    tar zxf aria2-1.17.1.tar.gz
    cd aria2-1.17.1
    ./configure --prefix=/usr/local/blog.creke.net/aria2 --enable-static=true --enable-shared=true --enable-libaria2 --with-tcmalloc --with-sqlite3=/usr/local
    #注:configure输出最主要看Xml-RPC是yes就行
    make
    make install

    然后摸一下session文件:

    touch /home/blog.creke.net/work/aria2/aria2.session

    配置(/home/blog.creke.net/work/aria2/aria2.conf):

    #Basic
    dir=/home/blog.creke.net/work/aria2/download
    continue=true

    #HTTP
    user-agent=Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0

    #BT
    enable-dht=true
    seed-time=0
    dht-listen-port=6882
    dht-entry-point=loki.uplinklabs.net:33445

    #network
    max-overall-download-limit=5M
    max-overall-upload-limit=1M
    max-upload-limit=512K

    #RPC
    enable-rpc=true
    #rpc-listen-all=true
    rpc-allow-origin-all=true
    rpc-listen-port=35002
    #rpc-user=none
    #rpc-passwd=none

    #Advanced

    配置nginx代理aria2的jsonrpc:

    location /aria2/jsonrpc {
    proxy_pass http://localhost:35002/jsonrpc;
    proxy_redirect off;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    安装web gui:

    wget https://github.com/binux/yaaw/archive/master.zip
    mv master yaaw.zip
    unzip yaaw.zip
    mv yaaw-master/ yaaw/

    值得一提的是,yaaw不支持用户名密码,所以用nginx进行反向代理。修改
    打开yaaw的js目录中aria2.js和yaaw.js,搜寻端口号,改成自己定义的端口号和路径。

    附:init.d适用的自动启动脚本如下:

    #! /bin/sh
    # chkconfig: 2345 55 25
    # Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
    # run 'update-rc.d -f nginx defaults', or use the appropriate command on your
    # distro. For CentOS/Redhat run: 'chkconfig --add aria2'

    ### BEGIN INIT INFO
    # Provides:          aria2c
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts aria2c
    # Description:       starts aria2c as a service
    ### END INIT INFO

    # Author:   Creke
    # website:  http://blog.creke.net/

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DESC="aria2c daemon"
    NAME=aria2c
    DAEMON=/usr/local/blog.creke.net/aria2/bin/$NAME
    CONFPATH=/home/blog.creke.net/work/aria2/aria2.conf
    SESSION=/home/blog.creke.net/work/aria2/aria2.session
    #PIDFILE=/usr/local/haproxy/etc/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    USER="blog.creke.net"

    set -e
    [ -x "$DAEMON" ] || exit 0

    do_start() {
    su - $USER -c "$DAEMON --conf-path=$CONFPATH -D --input-file=$SESSION --save-session=$SESSION" || echo -n "aria2c already running"
    }

    do_stop() {
    killall -INT $NAME || echo -n "aria2c not running"
    }

    do_reload() {
    kill -HUP $NAME || echo -n "aria2c can't reload"
    }

    case "$1" in
    start)
    echo -n "Starting $DESC: $NAME"
    do_start
    echo "."
    ;;
    stop)
    echo -n "Stopping $DESC: $NAME"
    do_stop
    echo "."
    ;;
    reload|graceful)
    echo -n "Reloading $DESC configuration..."
    do_reload
    echo "."
    ;;
    restart)
    echo -n "Restarting $DESC: $NAME"
    do_stop
    do_start
    echo "."
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
    exit 3
    ;;
    esac

    exit 0

     

    2016.08.30 / 暂无评论 / 3,130 次点击 / 分类: 所谓技术

  • Zabbix安装简记

    安装zabbix:

    wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.2.6/zabbix-2.2.6.tar.gz
    tar zxf zabbix-2.2.6.tar.gz
    cd zabbix-2.2.6
    ./configure --prefix=/usr/local/zabbix --enable-server --with-mysql=/usr/local/mysql/bin/mysql_config --with-libcurl --enable-proxy --enable-agent
    make
    make install

    配置zabbix:

    编辑/usr/local/zabbix/conf/zabbix_server.conf。按照自己的需求对照编辑即可。

    配置开机自动启动服务:

    cd zabbix-2.2.6/misc/init.d/fedora
    cp core5/zabbix_server /etc/init.d/

    编辑/etc/init.d/zabbix_server其中的ZABBIX_BIN的值为"/usr/local/zabbix/sbin/zabbix_server"

    增加用户组及用户:

    groupadd -g 601 zabbix
    useradd -u 601 -s /sbin/nologin -d /dev/null -M -g zabbix zabbix

    导入初始数据库:

    cd zabbix-2.2.6/database/mysql
    mysql -ucreke -p
    > use creke_zabbix;
    > source schema.sql;
    > source images.sql;
    > source data.sql;
    > quit;

    复制php前端:

    cp -r zabbix-2.2.6/frontends/php /home/wwwroot/default/zabbix
    cd /home/wwwroot/default/zabbix
    cp conf/zabbix.conf.php.example conf/zabbix.conf.php
    编辑conf/zabbix.conf.php的数据库配置

    默认帐号:admin,密码:zabbix

    Zabbix简要安装说明,也只是装着玩玩,并没有深究。一般情况下,个人的服务器监控需求,还是使用监控宝、360网站监控之类的服务,会比自己搭建维护成本低。

     

    2016.08.29 / 暂无评论 / 1,867 次点击 / 分类: 所谓技术

  • WordPress垃圾评论大作战

    自从把博客搬到独立服务器之后,垃圾评论有日益增长的趋势。

    上次集中清理垃圾评论的时间,刚好是6月初的一天。到8月下旬,居然积攒了5000多条垃圾评论!

    WordPress的用户应该都深有感触,这个博客程序还是挺招惹垃圾评论的。因此WordPress自带了一个叫Akismet的插件。

    Akismet插件工作原理是,将垃圾评论通过API上报到云端(想当年,Akismet诞生时云还不叫云,叫远程服务器),然后也会把垃圾评论存到垃圾评论数据库中。

    不过像我这样几个月收几千条垃圾评论的用户来说,存起来显然不是个好办法。那么,怎么解决呢?

    不急不急,解决之前,不如先分析一下问题吧!

    垃圾评论也分三六九等的,定义如下:

    1. 机器人瞎子一样直接向WordPress的评论接口发数据包
    2. 机器人先解析页面,然后构造请求
    3. 机器人解析页面,还模拟浏览器运行脚本,然后构造请求
    4. 人工手打垃圾评论

    分析了几千条垃圾评论,我觉得,像我这种小博客,99.99%都是第一、第二种情况。第三种几乎没有。第四种的话……也太看得起本站了。

    分析之后,豁然开朗,针对第一种的情况,其实只需要在页面加一些隐含的字段就可以了。不过现在的机器人似乎比较聪明,还是会看一下评论表单的隐藏字段。那么就用脚本再加另外一个隐含字段——只有运行脚本的浏览器,才能正确解析,也才能正确发送这一个由脚本填充的隐藏字段。

    但是,这种方案也有缺点,如果用户的浏览器不支持脚本,也就无法正确发送脚本填充的隐藏字段,同样会被拦截。关键在于,这样的用户有多少呢?

    这时候,大数据(误)就派上用场了。我看了一下来访用户统计,大部分都是chrome或chrome核心,其它移动端的用户也是智能设备。也就是说,感谢科技发展,大部分用户的浏览器都是支持脚本的。那么,这个措施还是可以实施的。

    于是乎,总结上面啰啰嗦嗦的一大串文字结论如下:

    1. 使用脚本在评论表单添加隐藏字段,发表评论时验证字段。
    2. 其余漏网之鱼,交给Akismet拦截。

    参考代码如下:

    <?php

    defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

    define('DEFAULT_JQUERY_BEFORE', 'jQuery(function($) {');
    define('DEFAULT_JQUERY_AFTER', '});');

    function creke_cal_comment_val($k)
    {
    return strval(crc32('CrekeComment'.$k));
    }

    function creke_get_comment_form()
    {
    if(is_user_logged_in())
    {
    return;
    }

    $k = time(NULL);
    $v = creke_cal_comment_val($k);
    return "
    <input type='hidden' name='creke_comment_k' value='$k' />
    <input type='hidden' name='creke_comment_v' id='creke_comment_v' creke_comment_v='$v' value='$k'/>
    ";
    }

    function creke_get_comment_script($jQueryBefore=DEFAULT_JQUERY_BEFORE, $jQueryAfter=DEFAULT_JQUERY_AFTER)
    {
    if(is_user_logged_in())
    {
    return;
    }

    return "
    <script type='text/javascript'>
    $jQueryBefore
    var id='#creke_';
    id+='comment_v';
    $(id).val($(id).attr('creke_comment_v'));
    $jQueryAfter
    </script>
    ";
    }

    function creke_comment_form()
    {
    echo creke_get_comment_form();
    echo creke_get_comment_script();
    }

    add_action('comment_form', 'creke_comment_form');

    function creke_comment_check($commentdata)
    {
    $dieMsg = 'do not spam';
    $dieTitle = 'title';
    $isSpam = FALSE;

    $type = comment_type('comment', 'trackback', 'pingback');

    if(is_user_logged_in() || $type == 'pingback' || $type == 'trackback')
    {
    return $commentdata;
    }

    $k = $_POST['creke_comment_k'];
    $v = $_POST['creke_comment_v'];
    if((time(NULL) - $k) > 86400)
    {
    $isSpam = true;
    }
    if(!$isSpam)
    {
    $isSpam = (creke_cal_comment_val($k) != $v);
    }

    if($isSpam)
    {
    wp_die($dieMsg, $dieTitle);
    }

    return $commentdata;
    }

    if(!is_admin()) {
    add_filter('preprocess_comment', 'creke_comment_check', 1);
    }

    ?>

    2016.08.26 / 7 条评论 / 3,740 次点击 / 分类: 所谓技术

  • 博客装修之升级wordpress:从2.8.6到4.5.3

    博客很久没有更新了,不管是程序还是文章。博客程序用的是wordpress 2.8.6,那是2009年11月12日发布的,转眼间近7年了,想想还真是一段很长的时间啊。

    最近垃圾评论陡然增多,反垃圾插件太旧了跟不上时代,于是盘算着把长草的博客里里外外装修一番。

    就从博客程序先开始吧。

    参考文档:https://codex.wordpress.org/Upgrading_WordPress_-_Extended_Instructions,里面详细描述了如何升级wordpress,总的来说有以下几个要点:

    1. 备份数据库
    2. 备份当前所有wordpress文件,特别提醒别忘了.htaccess文件
    3. 验证上面两步的备份是可用的
    4. 停用所有插件
    5. 确保前面4步没问题
    6. 下载解压缩新版wordpress
    7. 从备份中拷出下列目录/文件,覆盖新版:wp-config.php、wp-content目录(除了wp-content/cache和wp-content/plugins/widgets目录)、wp-images(如果有的话)、wp-includes/languages/、.htaccess、robots.txt
      上传上面准备好的新文件
    8. 访问wordpress更新程序:你的博客/wp-admin/upgrade.php
    9. 检查.htaccess是否需要更新,一般不需要
    10. 更新插件到新版本
    11. 重新启用插件
    12. 更新wp-config.php的安全秘钥,就是AUTH_KEY那堆配置啦
    13. 再确认wordpress变更是否正常

    里面还有一章,叫“Upgrading Across Multiple Versions”即“跨版本升级”一节,其中提到:

    • wordpress向后兼容
    • 如果要跨好多版本升级,那么建议间隔一个版本来慢慢升级,例如:从2.5开始升级到4.5,那么先升级到2.7,再升级到2.9,再升级到3.1……以此类推
    • wordpress3.7之后有个一键升级(话说之前不是有吗?),支持从3.7直达4.5.3;不过,为了稳妥起见,我还是按照上面第2点的方法,跨版本慢慢升级

    按照wordpress的官方指引,再加上自己的小窍门,我的升级步骤如下。

    备份:

    1. 备份网站
    2. 备份数据库

    准备环境:

    1. 在本地启动Apache+PHP+MySQL环境,创建blog.creke.net的虚拟主机
    2. 更改blog.creke.net的host到127.0.0.1
    3. 恢复blog.creke.net网站和数据库到本地的虚拟主机
    4. 检查本地的环境真的真的没问题

    升级:

    1. 开始跨版本升级,每次都删除所有内容——解压新版——从备份中拷贝自定义内容——访问升级程序
    2. 看看后台是否正常,看看登入环境中前台是否正常,看看未登录环境中前台是否正常,注意用ctrl+F5刷新
      备份升级好的数据库,这个很重要,毕竟wordpress大量依赖数据库
    3. 从步骤1开始重复轮回,直到升级到最新版
    4. 升级了最后一个版本的时候,最后按照https://codex.wordpress.org/Editing_wp-config.php的文档,重新从wp-config-sample.php和旧的wp-config.php对照,编辑一个新的wp-config.php,保证设置的最新
    5. 更新必要的插件

    上线更新:

    1. 在网站上挂升级公告
    2. 查看第一步到现在有没有人留言,有的话注意增量备份留言
    3. 恢复文件和数据库
    4. 下线公告,恢复网站正常访问
    5. 稳定运行一段时间后,使用插件清理文章的草稿等数据

    于是乎,博客程序终于升级到了wordpress新版,旧的主题还能用,归功于wordpress向后兼容的设计哲学。

    当然主题也是要装修的,下次有时间继续吧。

    2016.08.25 / 暂无评论 / 1,740 次点击 / 分类: 所谓技术