Debian

locale问题:Cannot set LC_CTYPE to default locale

刚购买的VPS默认安装的系统是CentOS,没想到CentOS现在这么火,很多VPS默认安装这个。但是我只用Debian或FreeBSD,重新安装了一下Debian lenny AMD64,几分钟就完成了。sudo apt-get upgrade时出现错误提示: locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or Read More

Debian lenny backports源

backport的含义是“向后移植”,就是将软件新版本的某些功能移植到旧版本上来,这种行为就称为backport。 Debian向来以稳定性著称,所以就存在一个问题,官方源分发的软件版本比软件本身的版本总是要慢一拍,所以就有了backports源。backports主要从testing源,部分安全更新从unstable源重新编译包,使这些包不依赖于新版本的库就可以在debian的stable发行版上面运行。所以backports是stable和testing的一个折衷。 backports源的使用方法如下: 在/etc/apt/sources.list增加下面的行 deb http://www.backports.org/debian/ lenny-backports main contrib non-free deb-src http://www.backports.org/debian/ lenny-backports main contrib non-free 然后安装backports源的GnuPG archive key sudo apt-get update sudo apt-get install debian-backports-keyring 就可以正常的使用backports源了。

debian:ssh安全自动登录设置

用ssh来管理远程服务器真是一件很舒适安逸的事情,当然前提是要做足安全工作,internet上可是杀机四伏啊。 记得我刚安装好Debian的时候 ,为root设置了一个很简单的密码,然后开放了ssh服务,没几天root帐号就让人给暴了, 看看/var/log/auth.log吧,真是惨不忍睹,里面全是尝试ssh登录的记录。好吧,我承认,当时是太没经验了。当然现在这种情况是一去不复返了。 下面就来说说如何提高ssh登录的安全性和自动登录ssh服务器。

awstats:utf8编码页面使用纯真IP数据库显示地理位置问题的解决办法

utf8是目前最好的多字节编码方案,支持世界上的绝多大多数语言,也是我最喜欢的字符集。debian lenny 上的awstats安装完毕后,默认输出iso-8859-1字符集,对中文支持不友好。打开/usr/lib/cgi-bin/awstats.pl ,定位到大约第80、81行将$PageCode变量的内容更改为’UTF-8′,这样awstats就可以吐出utf8编码格式的页面了。修改成utf8字符集还有一个好处,不用加载decodeutfkeys插件就可以正确的显示来自google的中文搜索关键字了。至于百度让它自生自灭去吧! awstats通过插件qqhostinfo插件和qqwry.pl库使用纯真IP数据库可以显示来访者的地理位置,是一个不错的解决方案。具体的使用方法网上转载很多,可以google之。纯真IP数据库使用的是gbk/gb2312/gb18030系列编码,而我的awstats使用utf8编码,所以显示出来的物理地址全部是乱码。解决方法也很简单,打开qqwry.pl,在文件前面加上一句”use Encode;”,然后找到”return $ipaddr;”这一行,在其前面加上一句”$ipaddr=decode(“gbk”,$ipaddr);” 就ok了,因为perl 5内部使用的就是utf8编码,所以就不用再encode成utf8了。

轻轻松松修改mysql默认字符集为utf8

utf8是我很喜欢的的字符集,在我的Debian lenny上安装mysql后,默认的字符集是latin1,现在就让我们把mysql相关的所有默认字符集都更改为utf8。 在/etc/mysql/conf.d目录下面新建一个文件charset.cnf,增加如下内容: [client] default-character-set = utf8 [mysql] default-character-set = utf8 [mysqld] default-character-set =utf8 然后执行命令sudo /etc/init.d/mysql reload,现在连上你的数据库看看吧,默认的字符集和校对集全部变成了utf8。

Debian sudo ‘command not found’

在自己的主目录下面建了一个bin子目录,把自己撰写的一些简单的脚本放在这里执行,因为debian lenny用户主目录下的.profile文件默认把$HOME/bin路径放入了环境变量$PATH中,因此自撰的脚本就可以像系统提供的应用程序一样来运行了。 但是今天写了一个脚本需要root权限来运行,sudo一下居然提示”sudo:  xxx.sh:  command not found”。很明显这是$PATH的问题,切换到root,设置好$PATH,运行这个脚本是没问题的。看来是sudo的问题了,浏览了sudo的man page,然后google了一下后发现了问题所在。 原来Debian在编译sudo包的时候默认开启了- -with-secure-path选项,在我机器上这个完整的选项是: – -with-secure-path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin”。当sudo时$PATH变量就会被secure-path所代替,所以即便你更改/etc/environment中的PATH也没有用。此问题由来已久,没想到在lenny中仍然存在。 后来有一个sudo options SECURE_PATH可以override此内置设置,在/etc/sudoers文件内增加这么一行: Defaults secure_path=”/bin:/usr/bin:/usr/local/bin:…” 但是这样很不方便。 其他的workround我知道有这么几个: 1、使用脚本的完全路径,不是办法的办法。 2、使用sudo的env选项,像这样sudo env PATH=$PATH xxx.sh 3、把脚本拷贝或链接到系统$PATH中 这些方法都很别扭,所以最终的解决方案就是: 重新编译sudo,千万别再带- -with-secure-path选项了。