2013年5月30日星期四
网络层点到点, 传输层端到端
2013年5月29日星期三
ubuntu update-rc.d 和 chkconfig 命令
2013年5月16日星期四
ubuntu vps 安装和设置
1. 初始化安装后的设置
基于 ubuntu-12.04 32bit minimal, 使用 root 登陆到 vps 后, 新建用户:
adduser demo
根据提示创建用户和密码。下面将新建的这个用户添加到 sudo 用户组:
usermod -aG sudo demo
更新系统并安装 vim
apt-get update
apt-get upgrade
apt-get install vim
接下修改 sshd 的端口和登陆账号限制, 首先修改 /etc/ssh/sshd_config 文件
vim /etc/ssh/sshd_config
Port 65536
PermitRootLogin no
修改 ssh 端口为 65536, 不允许 root 登陆,最后再添加如下一行到配置文件的最后
AllowUsers demo
设置仅允许 demo 账号登陆
2. 安装 lemp 环境(linux nginx mysql php) 首先安装 mysql-server
apt-get install mysql-server
因为默认安装的 mysql-server 比较占用内存,对于小内存的 vps 来说,需要进行一些优化,具体的可以参见 小内存 vps mysql 优化 这篇文章,在这里我再重复一下
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`
find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;
sed -i 's/\[mysqld\]/&\nuser = mysql\n/' /etc/mysql/my.cnf
然后再修改 /etc/mysql/my.cnf 文件, 在 [mysqld] 下添加以下两行
innodb=OFF
default-storage-engine=MyISAM
然后重启mysql
/etc/init.d/mysql restart
现在再下,经过以上几步的优化,vps 内存的占用大概只有 30m 左右,接下来安装 nginx 和php
apt-get install nginx
service nginx start
apt-get install php5-fpm
然后修改 /etc/php5/fpm/php.ini 文件
cgi.fix_pathinfo=0
然后重启 php5-fpm
service php5-fpm restart
然后开始配置 nginx 使其支持 php5-fpm, 首先备份一下default 配置文件
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
将 default 配置文件中的下面这段的注释给取消掉
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }并将 server {} 段里面的 index 中添加
index.php
然后修改 /etc/php5/fpm/pool.d/www.conf 文件,将其中的
listen = 127.0.0.1:9000
修改为
listen = /var/run/php5-fpm.sock
然后重启 php5-fpm service php5-fpm restart
接下安装 phpmyadmin
apt-get install phpmyadmin
并根据提示填写 mysql 的 root 密码, 注意,因为要使用nginx ,所以在 webserver 选择这里不要选择.
安装完成后 ln -s /usr/share/phpmyadmin/ /usr/share/nginx/www
, 这样就可以通过 ip/phpmyadmin 的方式来访问 phpmyadmin 了, 在这里可能会有个报错说
The mysqli extension is missing
, 解决办法是修改 /etc/php5/fpm/php.ini 文件,添加 extension=mysqli.so
然后重启 php5-fpm 和nginx 就可以了最后打算再说一下 ftp ,设置为 限定指定的用户可以登录的方法
userlist_enable=YES //用户清单功能开启 userlist_deny=NO //把用户清单设为接受用户清单 userlist_file=/etc/vsftpd.user_list //用户清单文件为/etc/vsftpd.user_list 因为第二个语句把文件/etc/vsftpd.user_list设为接受用户清单,那么,文件里 面的用户名都能登录,不在文件里的用户不能登录。 从这里可以看出userlist_deny语句起了开关的作用,可把用户清单文件设为拒绝或是接受
2013年5月15日星期三
小内存 vps mysql 优化 (ubuntu)
手里有个 512m 的vps ,安装的是 ubuntu 12.04; 使用 tasksel 安装 lamp 应用后,默认的内存占用大概在 350m 左右。 我以为是因为 apache 的原因,就打算使用 lemp ( linux + nginx + php-fpm + mysql ),手动安装 mysql-server: apt-get install mysql-server 后发现内存占用竟然也达到了 300m, 看来问题主要在 mysql-server 上。所以开始查找优化的方案。
首先参照 http://wiki.ubuntu.org.cn/Vps 上的教程对 mysql 进行优化
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s` find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \; sed -i 's/\[mysqld\]/&\nuser = mysql\n/' /etc/mysql/my.cnf
然后重启 mysql-server
/etc/init.d/mysql restart
然后再看内存占用,发现比之前少了一些,但是并不是很明显。
因为我只是安装 wordpress, 永不倒 innodb ,所以需要再进行如下优化
编辑 /etc/mysql/my.cnf
在[mysqld] 下添加两行
innodb=OFF
default-storage-engine=MyISAM
然后重启 mysql
/etc/init.d/mysql restart
再看内存占用情况,wonderful !只有 30多m 了!
2013年4月22日星期一
perl dump 数据的几种方式
1: #!/usr/bin/perl
2: use warnings;
3: use strict;
4: use Data::Dump qw(dump);
5: use Data::Dumper;
6: use Smart::Comments;
7: use YAML;
8:
9: my @a = (1, [2, 3], {4 => 5});
我这里要对数组 @a 进行 dump 以方便调试和查看其内容。
从我 use 模块也可以看出来我要使用的几种方法:
(1)首先尝试 Data::Dump 的 dump 方法
1: dump(@a);
1: (1, [2, 3], { 4 => 5 })
(2)尝试 Data::Dumper 的 Dumper
1: print Dumper(@a);
1: $VAR1 = 1;
2: $VAR2 = [
3: 2,
4: 3
5: ];
6: $VAR3 = {
7: '4' => 5
8: };
(3) 尝试 Smart::Comments 的 ###
1: ### @a;
其对应的输出为:
1: ### @a: [
2: ### 1,
3: ### [
4: ### 2,
5: ### 3
6: ### ],
7: ### {
8: ### '4' => 5
9: ### }
10: ### ]
(4) 尝试 YAML 里面的 Dump 函数
1: print YAML::Dump(@a);
其对应的输出为:
1: --- 1
2: ---
3: - 2
4: - 3
5: ---
6: 4: 5
(5) 最后尝试一下 print 函数
1: print "@a";
1: 1 ARRAY(0x1acf998) HASH(0x1aece20)
综述:以上几种方法,可以看到各有个的不同,也有侧重点,比如 Data:Dump 几乎是按照代码里面的数据结构输出了; YAML::Dump 是以 yaml 格式输出, 而 print 方法最简单,但是却无法打印内嵌的哈希元素,智能打印其引用的内存地址,这当然不是我们想要的。 Smart::Commnets 的输出很适合进行调试。 所以根据自己的需要各取所需了。 我这里只是列出了 5中方法,参考下面的这篇可以看到更多种方法的对比。
Dumping data in Perl
http://oylenshpeegul.typepad.com/blog/2012/01/dumping-data-in-perl.html2013年3月25日星期一
linux没有扩展名的概念
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
2013年3月24日星期日
owncloud 私有云平台 (1): 编译 windows client
最近因为工作需要,接触了 owncloud 私有云平台,感觉真的很不错; 最特别的是其 app 扩展功能, 任何人都可以为依据这个私有云平台开发插件和应用, 目前这个平台已经可以集成 email , rss 等相关应用, 我认为以后可能还会集成 blog 或者 微博等相关应用,这样这款应该就可以真正的成为个人应用云平台。
下面转入正题,owncloud 有 windows、linux、android 和 ios 的客户端, 这里主要说一下 owncloud windows client 的编译过程。
1. 首先是编译环境,基于 opensuse 12.1 x64 版本,因为要在 linux 上编译 windows 程序,因此需要构建交叉编译环境。 构建这交叉编译环境是个力气活,因为要添加各种源,还有各种依赖要去解决和安装,所以花的时间比较长。 这里可以参考一下官方的文档 和 这篇文档。(在这里我建议在虚拟机里面安装 opensuse 并构建交叉编译环境,这样就可以将安装好的编译环境导出备份,以做后用。)
2. 编译过程。 只要交叉编译环境搭建好之后,剩下的就比较顺利了。
<code>
# cd ~
# mkdir owncloud-client
# cd owncloud-client
# git clone git://git.csync.org/users/freitag/csync.git ocsync
# git clone git://github.com/owncloud/mirall.git
# mkdir ocsync-build
# mkdir mirall-build
# cd ocsync
# git checkout dav
# cd ocsync-build
# mingw32-cmake -DCMAKE_BUILD_TYPE="Debug" ../ocsync
# mingw32-make
# cd ../mirall-build
# cmake -DCMAKE_BUILD_TYPE="Debug" ../mirall \
-DCSYNC_BUILD_PATH=/home/speed/owncloud-client/ocsync-build \
-DCSYNC_INCLUDE_PATH=/home/speed/owncloud-client/ocsync/src \
-DCMAKE_TOOLCHAIN_FILE=../mirall/admin/win/Toolchain-mingw32-openSUSE.cmake
# mingw32-make
# sudo mingw32-make package
</code>
3. 最后看到 owncloud-1.2.2-setup.exe generated 这个字样就可以了,说明 windows 客户端编译完成了。
参考文章:owncloud 官方文档: https://github.com/owncloud/mirall/blob/master/doc/building.rst
另外一篇文档 : https://gist.github.com/Noxwizard/4011094
定制自己的 linux 发行版
首先援引一条官方新闻
"日前工信部软件与集成电路促进中心正式宣布与 Canonical 达成协议,双方未来将合力打造专为中国市场而设的 Ubuntu 麒麟(Ubuntu Kylin)操作系统基准架构,为中国的硬件、软件开发者提供参考。据悉在四月的时候基于 Ubuntu 13.04(Raring Ringtail)的版本就会上线,其中会加入具有中国特色的农历、输入法、音乐服务等,未来百度地图、交通资讯、淘宝购物、照片编辑、WPS 等功能也均会被整合到系统之中。" ( 以上文字来自 瘾科技 Engadget )
看了这条新闻之后还是有些欣慰,毕竟光明正大的和开源社区合作要比银河麒麟涉嫌抄袭 FreeBSD 要好。 好吧转入正题吧,说一下定制自己的 Ubuntu 发行版。
为什么要定制呢,可能每个人的原因都不一样,比如说我很不喜欢 Ubuntu 的 unity,系统经常动不动就报错。 如果你只是想换其他的桌面环境的话,你可以直接到 Ubuntu 官方下载包含不同桌面环境的光盘镜像,目前我知道的有, kubuntu(KED),xubuntu( xfce), lubuntu (lxde),其他的还有很多, 如果你不满足以上官方给出的镜像, 你还可以尝试一下定制自己的 Ubuntu 发行版。 链接给出: http://code.google.com/p/ubuntu-builder/ 也就是 Ubuntu build 。 不过这里还是要吐槽一下, 这个和 http://susestudio.com 相比还是逊色不少。 如果你对 suse 或者 opensuse 感兴趣的话, 可以尝试一下 susestudio.com , 功能真的很赞。
2013年3月23日星期六
linux 终端下漂亮的字体
安装方法很简单: sudo apt-get install ttf-droid
瞬间感觉棒及了! mark 一下
2013年3月8日星期五
搭建 ipv6 测试环境 (一)
因为最近要做了一个 ipv6 的 cdn 加速项目,所以开始着手准备 ipv6 相关的测试环境,从网上搜出来不少相关的文章:有一篇介绍是通过 DynamipsGUI 加 vmware 来搭建ipv6 测试网络; 照着做了下,发现比较复杂,仅仅是 DynamipsGUI 的设置就比较麻烦; 后来看到老外的一篇文章,在 he.net 申请 ipv6 隧道,会获得一个 /64 的 ipv6 子网, 但因为 he.net 隧道要就客户端这边的 endpoint 要有独立的 ip 才行, 所以我就绕了个弯子; 在自己的美国的 vps ( 有独立的 ipv4 地址 ) 建立了一个 ipv6 隧道,然后再搭建给予 TAP openvpn 服务器,并安装 radvd 服务进行 ipv6 地址的路由; 这样的话,我处于内网的电脑,通过 openvpn 连接到我的 vps 上面,组建一个网络;这样,我处于内网的 电脑就可以获得公网 ipv6 地址了。 这个方案总体满足了测试的需求,并且可以从公网访问。 但是这个方案也有很多的不足,首先就是 openvpn 协议收到 gfw 的影响,很难连的上,第二就是网络延迟比较大,不适合进行测试。 对于 openvpn 协议受到干扰的问题,有好几种方法,整体思路就是修改报文的指纹,使得 gfw 无法认出 openvpn 协议,所以就无法干扰了。 但是对于网络的高延迟这块,就没有办法解决了。 后来因为项目搁浅的原因,我也去忙其他的了。
今天因为这个项目又有点消息了,我就又从网上查了一些资料,其中看到 https://wiki.ubuntu.com/IPv6 ubuntu 的关于 ipv6 的相关文档。 有看了一篇 ibm 的一篇关于搭建 ipv6 测试环境的文章 http://www.ibm.com/developerworks/cn/linux/l-cn-ipv6env/ ; 我就尝试了在我的 vmware 局域网中的一台 Ubuntu 服务器上 安装 radvd 服务,并配置了 ipv6 子网; 我发现处于局域网内的其他设备默认就配置好了 ipv6 地址了。 通过测试,发现完全满足自己的 ipv6 需求。
下面简单总结一下安装和设置的步骤:
1. 开启 ipv6 的转发功能, 修改 /etc/sysctl.conf 文件,开启 ipv6 的转发功能 ( 去掉对 net.ipv6.conf.all.forwarding=1 的注释),并 sudo sysctl �p 使生效。
2. 安装 radvd 服务 (基于 Ubuntu 12.04): sudo apt-get install radvd
3. 配置 ipv6 静态 ip地址; 在 /etc/network/interfaces 中添加下面配置
iface eth1 inet6 static
address 2002:9ba:b4e:6::1
netmask 64
4. 编辑 /etc/radvd.conf 文件
interface eth1
{
AdvSendAdvert on;
prefix 2002:9ba:b4e:6::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
5. 重启 radvd 服务, /etc/init.d/radvd restart
现在看下你局域网里的其他设备是不是已经设置好了 ipv6 的地址了