博采众长,精于一技。Live for love, work for dream.

精简debian linux VPS系统

1.首先,进行系统升级:
apt-get update && apt-get upgrade
2.完全多余的软件
apt-get -y purge apache2-* bind9-* xinetd samba-* nscd-* portmap sendmail-* sasl2-bin
3.多余的系统组件
apt-get -y purge lynx memtester unixodbc python-* odbcinst-* sudo tcpdump ttf-*
4.清理系统
apt-get autoremove && apt-get clean

这样就完成了,free -m 看看内存占用怎么样吧。

多余软件说明:

  • apache2-* //apache服务器,我们一般自己重装或者换Nginx等等
  • bind9-* //dns服务器,我们一般不在自己VPS上搭建DNS服务器,果断卸掉
  • xinetd //xinetd是服务守护进程,比如平时ftp服务器未开启,发现有人访问21端口则自动启动ftp服务器。VPS不需要
  • samba-* //samba能让linux系统使用windows的共享功能,VPS显然不需要
  • nscd-* //DNS缓存软件,同bind9,不需要
  • portmap //端口转发,一般Web服务器不需要
  • sendmail-* //发送邮件用,一般程序都使用php-sendmail,不需要这个
  • sasl2-bin //一个权限程序,不光占用资源,还容易在建立系统账户时候出错,果断删掉

多余的系统组件(不会自启动,但是占用硬盘,也许还会造成冲突什么的):
  • lynx //文本浏览器,一般人系用不到滴~~
  • memtester //测试内存有没有坏,我没那么无聊……
  • unixodbc odbcinst-* //odbc数据库,主要给windows用,做网站一般用不到
  • python-* //大名鼎鼎的Python语言,如果正常玩linux很可能用到,但是Web服务器是用不到的
  • sudo //让授权过的普通用户获得root权限,VPS不需要
  • tcpdump //TCP抓包,你用么?
  • ttf-* //桌面环境用的字体,我们只要命令行……

解决OpenVZ的ArchLinux升级问题

由于Archlinux的内核已经升级到3.0了,但是母机内核仍旧是2.6.*,OpenVZ不允许VPS的内核版本比母机高。所以会报错:FATAL: kernel too old

解决办法:在/etc/pacman.conf文件增加如下内容
[glibc-vps]
Server = http://dev.archlinux.org/~ibiru/openvz/glibc-vps/i686

这时候,你可以执行 pacman -Syu 进行升级,但是千万不要急着重启。一旦重启,将会出现另一个问题,连接不上SSH,并报如下错误。
PTY allocation request failed on channel 0

在重启之前,在 /etc/fstab 文件加入如下内容
none            /dev/pts      devpts    defaults        0   0
或者将以下脚本添加到/etc/rc.local
rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts

[Android开发]修复“Debug certificate expired on” 错误信息

今天打开ADT,所有的项目都显示错误。
出错提示:
“Error generating final archive: Debug certificate expired on …”
搜索了一番,找到了解决办法。

找到这个该死的文件:“debug.keystore”
一般躲在:
“~/.android” (OSX, Linux).
“C:\Users\

删掉"debug.keystore",然后Clean一下项目就OK了。
不过还遗留一个问题。365天之后,这个错误又会重新出现。
治根的办法,自己手动生成一个,过期期限为1000天(生成改文件时请先删除"debug.keystore"):
keytool -genkey -keypass android -keystore debug.keystore -alias androiddebugkey -storepass android -validity 1000 -dname “CN=Android Debug,O=Android,C=US”

参考文章:http://www.androidian.de/?p=940

[Android开发]自定义CheckBox

在Android开发中,系统自带的默认CheckBox由于比较简陋,可能难以满足部分人的审美需求,不过,Android具有很强的扩展性,自定义CheckBox其实也很简单。
1. Layout中定义CheckBox
<CheckBox android:textSize="14.0sp" android:id="@id/my_checkbox" android:background="@null"  android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/cb_selector" android:text="自定义CheckBox" />

2. 然后定义cb_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@drawable/cb_unchecked" />
    <item android:state_checked="true" android:drawable="@drawable/cb_checked" />
</selector>

这里需要自定义两张图片,cb_unchecked.png 和 cb_checked.png分别代表未选中和选中状态。

[Android开发]进度条对话框

在Android开发中,要做一些Loading的提示,这就需要用到进度条对话框(ProgressDialog),Android ProgressDialog继承于AlertDialog,实现方式有两种。先上图,有图有真相。
效果一:
Android ProgressDialog
效果二:
Android ProgressDialog

效果一实现代码:
ProgressDialog MyDialog = ProgressDialog.show( MyActivity.this, " " , " Loading. Please wait ... ", true);

效果二实现代码:
ProgressDialog pbarDialog;
pbarDialog = new ProgressDialog( mContext );
pbarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pbarDialog.setMessage("Loading...");
pbarDialog.setCancelable(false);

返回顶部