最近由于需要拨号到l2tp vpn服务器上。弄了一下linux下的客户端xl2tpd
其实xl2tpd既可以当服务端。又可以当客户端。在本文里只介绍客户端相关的功能

安装比较简单。apt-get或者yum直接搜xl2tpd,装上即可。没有自己编译也很简单。
注意依赖了/dev/ppp设备。如果不存在,需要
mknod /dev/ppp c 108 0
创建一下。

配置文件/etc/xl2tpd/xl2tpd.conf
[lac myvpn]
name = 'myvpn'
lns = myvpn
pppoptfile = /etc/ppp/peers/myvpn.l2tpd
ppp debug = yes

配置文件 /etc/ppp/peers/myvpn.l2tpd
remotename myvpn
user "xxx"
password "ooo"
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
noipdefault
mtu 1410
mru 1410
usepeerdns
debug
lock
connect-delay 5000


然后就可以启动xl2tpd。然后echo "c myvpn" > /var/run/xl2tpd/l2tp-control
来连接了。

注意ppp的配置里有:noipdefault  选项。
其他很多资料都没有这一项。包括阿里云的官方文档。但在debian系里面。不加这个且机器有内网网卡时,是不太好用的。
连接的ppp0设备会自动使用内网ip。导致很多奇葩的事情发生。

noipdefault这个选项表示不使用本地默认ip分配策略。直接用服务器分配的。如果不要求每次拨号都使用固定ip的话,建议加上该参数




Tags: ,
    mysql中经常用到的字段类型就是varchar和char。一般还会指定长度用来规定最长可以支持多长的内容。那么问题就来了。对于utf8字符集来讲。一个字符所占的空间是1-6字节不等的。那么varchar(100)是指的字节数还是字符数呢?


    可以通过mysql官方文档来看:
    http://dev.mysql.com/doc/refman/5.0/en/char.html
    

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

    即支持的是30个字符(characters),而不是30字节(bytes)

    经测试,结果也是符合文档的。varchar(30)可以存储30个汉字


    附加问题:如果传入了超出长度的内容,会有什么结果。

If strict SQL mode is not enabled and you assign a value to a CHAR or VARCHAR column that exceeds the column's maximum length, the value is truncated to fit and a warning is generated.

     文档中提到。默认情况下会截断而不返回错误。如果需要返回错误,需要开启strict mode










Tags: ,

更换了泛域名证书

[| 不指定 2015/01/22 00:26]
    之前搞的单域名ssl证书要到期了,最近正好搞了个泛域名证书,换上了。

    好久没更新blog了,比较忙。刷一下新文章。
    最近程序发现了个奇葩现象,即从文件载入的证书链用openssl校验是通过的,而用curl远程获取的就校验失败,错误码7。而这些内容写入文件在下一次程序启动时载入校验,又是成功的。

    排查了各种内存泄露、不可见字符的可能性后。突然想起来是不是libcurl静态链接了openssl跟主程序动态链接的打架。查看后发现libcurl未静态链接openssl。

     不过这也是一个启示。想起来既然curl也用到了openssl,那么它在最后cleanup的时候会不会把全局的openssl数据结构给释放掉。


     尝试了一下,果然好了。原来我在一个函数里开头调用curl_global_init,结尾调用curl_global_cleanup。这样的话在程序结束时就会释放openssl的全局数据结构。导致后续调用证书校验报错。

     不过openssl也不够友好,报证书签名错误,让人很难联想到是初始化问题。


      不过aes加密部分并不受这个影响。
    又要到夏天了,气温上升,笔记本又热起来。早就调研了笔记本风扇,当时是冬天,需求不强烈。现在是时候出手了。

     这种偏门的东西在b2c上是买不到的,只能求助万能的淘宝。目前淘宝有如下几个档位,170+,120,85

     170+的价格倒是在那,但是很难说是不是正品,店铺介绍里看说有指纹没问题啥的。。。感觉靠谱度也就一般般。
     120区间有不少,看配图什么的蛮有那么点意思,另外店家号称85的是翻新货。也不是没可能。

     最后筛选了下北京的,有一家最近出货量比较大,还有实体店地址且欢迎实体店购买,正好离得非常近,于是中午遛弯顺便过去买了下。

     不得不说中关村现在确实是衰落了,e世界一层都关了,楼上人也不怎么多。坐电梯上楼,店铺离的不远,很快找到了,老板拿出两个风扇,告诉我说这是原装的,硅脂没法复制,他们都做不出来。不太懂这个。我感觉就点几点硅脂能有啥难度?不过这种配件也不寄希望于买到原厂正品啥啥的,降温效果好就行。于是搞了个。


     晚上回家开始拆电脑,别的都好说,expresscard那里有个螺丝需要拧下来我忘记了,以为不用拧,结果主板搞不下来,我还以为是之前把外壳摔变形的原因,还用了一点蛮力,所幸最后发现这个问题及时纠正。。否则就呵呵了。

    新风扇跟原装的不太一样,新的是两条热管,细一些,老的是一条比较粗的热管。一对比确实老风扇老态龙钟了。


    换好开机,压力测试。效果还是挺明显的。之前待机状态就有40+度,d壳很热。压力5分钟后能到80+度。d壳热的快能煮鸡蛋了。更换后待机三十多度,压力后能到60度,d壳虽然也比较热了,不过热点较分散,不像之前集中在cpu那一块。至于静音方面。只能说即使在全速运转阶段,也基本听不到风扇的声音。



     相当爽,电脑又可以哈皮的用下去了。





Tags: , ,
    最近搞了个机器。想搞成同时支持openvz和kvm虚拟化技术的host。从原理上讲认为问题不大,因为两者分别是不同层面的虚拟化技术,一个是硬件级别虚拟化,一个是cgroup水平的进程级虚拟化(对这块了解不深,说错勿怪)。所以还是可能同时安装的。

    搜了下方案,果然有个proxmox的发行版是解决这个需求的。看了下文档,集成了一堆面板啥的,东西越多bug就越多。还是自己diy一个。

    由于openvz是需要打过patch的内核运行,而kvm则需要kvm和kvm_intel内核模块的加载(amd的就是kvm_amd)。所以难点就是这个的兼容。其他用户态的进程如果有冲突啥的都好解决。

    首先选用debian7(我喜欢debian),发现需要用openvz的源,源里使用的openvz内核是2.6.32。而debian7的内核目前是3.2。风险比较大。从源里拖了openvz内核deb包下来看,发现居然32位的内核不带kvm模块,而64位的才有。哭了。不知道他们咋搞的。于是64位系统搞起。结果发现kvm_intel加载不进去。报input/output err。用-f强制加载后报签名被拒绝。估计编译的时候哪里错了,虽然有内核源码和.config,不过还是不自己编译了,太折腾。

    还是用debian6。debian6的官方源里已经包含openvz了。内核版本也是2.6,32系列。跟debian6默认内核版本相同。这个感觉靠谱。装上重启进入openvz内核。modprobe加载kvm内核模块。ok,成功了。



     下一步就是进程和网络上的调整了。都不是大问题。



     结论是:openvz目前还是建议用debian6官方源里的包。兼容性好。
Tags: , ,
    很久没写blog了。今天考虑写一篇,登陆过程中想起目前登陆还是http裸奔状态,安全性实在是差。决定加一个登陆https保护。

    之前搞过一个startssl的免费证书,一年到期了。这次不想用他家了,一副浓浓山寨风。去namecheap搞了一个,很快就签发了。

    给一个子域名部署上去,把博客登陆提交地址改成https地址。这样密码的提交操作就被https保护了。


     如果只这么做了,登陆是不会成功的。因为子域的session和主域session默认是不通的。

     在session_start前加一句:  ini_set("session.cookie_domain", '.snooda.com');


     然后重启一下浏览器(此步骤必须)


     尝试一下登陆,ok了。
Tags:
    Thinkpad刚买回来的时候散热性能是非常好的,夏天用也非常凉爽,但用上两三年后,d壳就会非常热,夏天感觉都能有五十度往上了。拆开彻底的清理过灰尘,好了一些,但远没有新机的时候好。

    看到网络上很多人提到给笔记本风扇上了油或者换了新风扇,温度下降很多。认为有可能是风扇老化了。

    查看风扇转速,发现还是3000+转啊,噪音是变大了。但转速在那里,散热器灰尘也吹干净了,风量不小。


    为啥就是那么热呢?



     今天终于找到了问题的答案。原来散热器也是会老化的。


     笔记本的散热器就是一个铜的家伙,之前一直以为是靠铜来导热,还想那么长,导热过去要多久。今天仔细一研究,发现小小的散热器也用的热管。时间长了,热管里的导热剂泄露,导致热管导热性能下降。于是就产生了这种结果:风扇狂转,风量很大,但温度就是降不下来。


      这个时候只更换风扇是不够的了。要将整个散热器更换才可以治本了。









Tags: ,
    最近发现很多同学不知道线上操作替换文件的要点。所以又整理了一下。


    线上替换一个正在运行进程的文件时(包括二进制、动态库、需要读取的资源文件等)。应避免使用cp/scp操作。而需要使用mv/rsync作为替代。

    原因:cp是将源文件截断然后写入新内容。也就是说正在打开这个文件的进程可以立刻感知到修改。修改文件内容很可能导致程序逻辑错误甚至崩溃。而mv则是标记”删除“老文件,然后放一个新的同名文件过去。也就是说老文件和新文件其实是两个不同文件(inode不同),只是名字一样而已。正在打开老文件的进程不会受到影响。如果进程使用了mmap打开某文件(比如载入so),如果目标文件被使用cp覆盖并且长度变小。那么读取差额部分的地址时(在新文件中其实已经不存在了),会导致SIGBUS信号。使进程崩溃。




    至于可执行文件本身。倒是不怕cp导致崩溃。。因为cp时会报”text file busy"。压根cp不了。这时候也应该使用mv类操作。替换完成后重启进程。执行的就是新的可执行文件了。





Tags:
    lighttpd有一个功能,就是收到SIGHUP信号时会重新打开日志文件。这样在日志切分时很有用。但最近发现了一个bug。

    就是如果有子进程挂掉。父进程新fork出的子进程accesslog会默认打日志到最最开始父进程启动时的那个文件里。


   看了下代码。原来父进程在收到SIGHUP的时候只是把errorlog重新打开了下。没有重新打开accesslog(没办法,这个句柄是mod_accesslog模块搞的)。所以父进程维护的accesslog句柄一直是最老的。它本身不打accesslog日志倒无所谓。但它fork出的子进程是打的。这样就有问题了。



    一个最简单方法。就是外部脚本判断进程有更新的时候发一个SIGHUP信号过去。

    根治方法就是父进程重新启动子进程时给其发一个SIGHUP信号。

    至于父进程自己处理SIGHUP时重新打开句柄这个我感觉不太好。毕竟那是模块内部数据。lighttpd主干不应该关心。





Tags: ,
分页: 2/31 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]