联想?连想都不要想!

lenovo-sucks

ubuntu 10.10 发布后,由于我把 Ion 的机器装成了 Server,所以考虑买个10寸上网本跑 ubuntu,以后出门在外需要用电脑的话也可以带着,轻省便捷。在京东转了一圈,下单买了一台 Lenovo S10-3c,主要考虑到:

  • 键盘尺寸较大
  • DDR3 内存
  • 便宜
  • 梦想 IdeaPad 能从 ThinkPad 学到点东西

但是没想到到货的瞬间就是杯具的开始。。。

首先是内存兼容性问题,机器到手第一件事情就是升级内存,拆下原先的三星 DDR3 1333 1G 条子,换上兼容性应该很好的 Kingston DDR3 1333 2G 条,结果。。。不亮!各种囧,因为内存已经拆封并装机,去京东换完全没希望,只好使用 walkaround,将 Macbook 里面的一条三星 2G DDR3 1066 装上,把 Kingston 的内存装到 Macbook 上降频使用,这下终于亮了。

接下来安装 ubuntu,先是用一个量产为 USB 光驱的 U 盘直接加载 ISO 文件,结果“来弄我”的 BIOS 识别出了两个优盘,并且完全无法启动。好吧,BIOS 兼容性问题可以理解,改用 pendrive 制作安装优盘,F12 启动没有问题,进到安装界面点击右上角无线网,选择我的 SSID,输入密码。。。发现。。。键盘完全没有反应。。。完全想不清楚这又是什么原因,也许是驱动还没有完整加载?好在柜子里面常备一个小号 USB 键盘,插上继续安装,完成重启。。。进入 Login 窗口键盘还是没有反应,这下彻底 233 了。键盘在 BIOS 和进入系统前的 GRUB 都是正常的,只要加载内核后就歇菜,看起来是貌似是硬件中断冲突之类的问题。

出现问题后,Google 永远是最好的老师,很快我就找到了无数的遇到了和我一样问题的国内外用户。看到结果后令我惊讶的是,这个不是和 ubuntu 兼容性的问题,而是和 Linux 内核兼容性的问题,也就是说 Lenovo S10-3C 这款上网本安装任何基于的 Linux 核心的操作系统都会出现内置键盘无法使用的情况。当然我也找到了“解决办法”:加入内核加载参数 noapic acpi=off,也就是说完全禁用 ACPI,键盘就“复活”了。据我试验确实可行,但是这样的代价也是让人无法接受的:超线程无法使用,电池管理无法使用,盖盖不会休眠,甚至关机都不正常会死在某个地方。

抱着美好的幻想,我跑到 Lenovo 的官方网站寻找新版 BIOS,考虑到这款上网本已经上市半年左右,正常情况下应该会有新版 BIOS 供下载,但是很显然我的运气不够好。接下来给联想技术支持打电话,说明情况后,对方表示我们并没有这款机型对 Linux 支持的任何信息,建议您安装 Windows XP 或者 Win7。对于我索取新版 BIOS 文件的请求,对方的答复是:1,联想不提供 BIOS 升级的下载,这个工作只能由服务站完成。2,S10-3C 这款上网本也确实没有 BIOS 更新,我的机器里面的版本已经是最新的了。至于是否可以退换货,对方的答复显然轻车熟路:我们遵守国家的三包规定,换而言之就是:这是不可能的!挂上电话后我我只有两个选择:改用 Windows 或者当这两千块白花。前者没有任何意义,我的 Macbook 中跑着两个虚拟化的 XP(一个写 blog 一个用网银)。显然我只能选择后者了,正好丈母娘最近刚退休,要把单位电脑交回去,直接把这个机器装了个中文的 XP 给她上网用了。

回想整个事情,除去联想本身 BIOS 的问题外,另外一个让我非常不爽的原因就是“中国国情”,试想如果我的这台上网本和内存是在美帝购买的,那么我相信我可以理直气壮的拿去要求退货,根本不用担心什么狗屁的三包规定和检测报告。

还是尽快人肉翻墙吧。。。希望在 2012 前可以实现这个目标。

Posted in 我的慵懒生活, 电脑相关 | Tagged , , , | 16 Comments

解决 SSL 虚拟主机的 Error code: ssl_error_rx_record_too_long 错误

功夫网今天对 twip 下手了,从国内到自建 twip 的请求都会被自动 rst,用 SSL 可以解决这个问题,但是这一下自建 API 的门槛就高了:至少需要一个独立 IP。

我在给 apache 配置 https 主机时遇到了一个奇怪的问题,Chrome / Opera / IE 都可以正常打开页面并接受证书,但是 Firefox 却报错:

Error code: ssl_error_rx_record_too_long

很奇怪的错误,Google 后在 ErrorHelp.com 找到答案,原来问题出在虚拟主机的配置中,我是这样配置的:

<VirtualHost 111.222.333.444:443>

改成

<VirtualHost _default_:443>

就好了。其实 StarlSSL 网站的教程中就是这么写的,怪我自己没有仔细看,sigh。。。

Posted in 我的慵懒生活, 电脑相关 | Tagged , , , , | 2 Comments

ubuntu server 10.10 安装配置 nginx + php-fpm + mysql

安装好 ubuntu server 10.10 并升级软件包后,接下来安装 nginx + php-fpm + mysql,10.10 中的 php 已经是自带 php-fpm 的 5.3.3,所以 php-fpm 理所当然成为 fastcgi 的首选。

安装 mysql:

sudo aptitude install mysql-server

使用官方 ppa 安装 nginx:

sudo aptitude install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo aptitude update
sudo aptitude install nginx

安装 phpy + php-fpm + 其他模块:

sudo aptitude install php5-cgi php5-mysql php5-fpm php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

配置 php:

sudo vi /etc/php5/fpm/php.ini

设置

cgi.fix_pathinfo=0

原因见这里。接下来修改 nginx 虚拟主机设置:

sudo rm -r /etc/nginx/sites-available
sudo rm /etc/nginx/sites/default
sudo vi /etc/nginx/sites/default

内容,我这里 IPv4 和 IPv6 用了两条独立的命令监听,原因见这里

Continue reading

Posted in 我的工作学习, 电脑相关 | Tagged , , , , , | 15 Comments

优盘安装 ubuntu server 10.10 遇到的问题及解决

ubuntu 10.10 在2010年10月10日准时发布,正好我想把家里 ion+atom 的机器装上 ubuntu,于是就选择了最新的 amd64 iso。因为没有光驱,所以还是用 ultraiso 的 write image 功能将 iso 写入优盘。以前曾用此方法安装 9.10,10.04 等多个 desktop 版本。

很不幸,第一次启动时就遇到了无法找到内核的报错:

install_ubuntu1010_via_usb_1

在 Mac 上 把 ISO mount 上,发现 vmlinuz 和 initrd 都在 /install 目录下,于是在 boot 提示符后输入:

/install/vmlinuz initrd=/install/initrd.gz

回车,即可正常引导进入安装程序:

install_ubuntu1010_via_usb_2

但是问题又来了,选择完语言和键盘后,提示无法加载光驱,Google 一番在 ubuntuforums 找到答案

Continue reading

Posted in 我的工作学习 | Tagged , , | 10 Comments

被一个字幕文件折腾了

vlc_subtitle_question_makr

好不容易放假了,想找个电影看看放松下。自从有了豆干儿后,我们就基本不能在卧室用大电视+HTPC 看电影了,只能在工作间用电脑显示器凑合。与此同时离我们而去的还有射手播放器这种神器,Mac 上的视频播放软件在字幕支持部分实在是太弱了,今天就又被其郁闷了。

下好电影和相应的字幕文件,先用 MPlayer OSX Extended 打开,结果字幕死活显示不出来,手工加载也无效。换 VLC,字幕可以显示,但是很神奇的是中文字幕每一句的最后两个字都变成了问号。这实在太影响观看情绪了,把 .srt 文件扔到 textmate 里面看内容是正常的,但是一看编码发现居然是 UTF16 的,不知道为啥搞字幕这个哥们这么变态,居然存成这种编码。

iconv 处理一下

iconv -f utf-16 -t utf-8 aaa.srt > bbb.srt

重新用 Mplayer 和 VLC 加载都没有问题了。

Posted in 我的慵懒生活, 电脑相关 | Tagged , | 8 Comments

nginx / IPv6 在 Linux 下访客 IP 问题的解决

之前配置好了 nginxIPv6 ,并让 nginx 同时监听 IPv4 和 IPv6 地址,今天突然发现 PHP 的 getenv("REMOTE_ADDR"); 甚至 nginx 日志在获取使用 IPv4 的访客 IP 时有些问题,一概显示成了类似于 ::ffff:111.222.111.222 这种 IPv6 格式。到 nginx 的 wiki 搜索后发现了问题所在:原来 Linux 默认情况下所有的 IPv6 TCP socket 都可以通过将 IPv4 地址转换为 IPv6 地址的格式从而处理来自于 IPv4 的连接,这也就是为什么 Linux 下面的 nginx 写一个 listen [::]:80 即可 4/6 通吃的原因,但是这样就造成了客户的 IPv4 地址被翻译成了 IPv6 的格式,从而造成 php 以及其他程序无法获取客户的 IPv4 地址。这样显然问题多多,如果某个程序保存客户 IP 地址这个字段不够长的话很容易出现问题。

解决办法是在 /etc/sysctl.conf 中加入一行

net.ipv6.bindv6only=1

之后

sysctl -p

即可关闭 Linux 的这一 bug feature,之后记得修改 nginx 的配置文件,加入 IPv4 的监听配置

PS:FreeBSD 默认 IPv4 和 IPv6 就是分开处理的,需要分别 listen。

Posted in 我的慵懒生活, 电脑相关 | Tagged , , , | 3 Comments

使用 Startssl 提供的免费证书+Nginx 搭建 https 的网站

nginx_ssl_1

Startssl 是一家提供免费 SSL 证书的公司,我们可以用其搭建 https 网站,貌似可以被除去 Opera 外的所有主流浏览器所信任,过程简单记录如下:

  1. 打开 http://www.startssl.com/ ,注册一个用户,注意这个网站是用证书验证用户身份的,所以证书一定备份好。另外。。。不支持 Chrome,用 Safari 吧。
  2. 登陆后进入 Validations Wizard,验证你要添加 ssl 支持的域名。
  3. 进入 Certificates Wizard,并选择 Web Servers SSL/TLS Certificates。
  4. 创建一个 private key,连同密码一起保管好。(或者你也可以自己在服务器上用 openssl 创建,这里点skip就行了)
  5. 选择一个域名,以及子域名。
  6. 网站会给出证书,保存为 .csr 文件。
  7. 使用 Tool Box 里面的 Decrypt Private Key 或者自己用 openssl 将第4步生成的 private key 解密,并将结果保存为 .key 文件。
  8. 按照修改 nginx 默认的虚拟主机配置文件的范例修改,关键语句如下:

listen          443;
ssl                     on;
ssl_certificate         /etc/nginx/certs/xxxxxx.crt;
ssl_certificate_key     /etc/nginx/certs/xxxxxx.key;
ssl_session_timeout     5m;

ssl_protocols           SSLv2 SSLv3 TLSv1;
ssl_ciphers             ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers       on;

fast_cgi 部分也加入一行:

fastcgi_param   HTTPS on;

另外在这里看到,中文版 Firefox 貌似不会信任这个证书,需要下载 Startcom 的根证书并且附在网站证书后面:

wget http://www.startssl.com/certs/ca.pem 感谢 @startssl 的亲自指正,这个是错误的,应该是:
wget http://www.startssl.com/certs/sub.class1.server.ca.pem
cat sub.class1.server.ca.pem >> xxxxx.crt

重新启动 nginx,即可顺利使用 https 打开虚拟主机了。

nginx_ssl_2 

顺便说一下,Startcom 这个公司貌似有很多人在管理证书颁发这个事情,他们的邮件回复总是非常快。比如上次我想给 img.gd 申请证书,结果发现他们的域名选择里面没有 .gd,于是给他们发去了邮件,Startcom就回信问我要了管理机构网址以及 whois 地址,我回给他们后很快就又收到邮件告诉我说可以用了。再有就是昨天想给谷奥申请一个,结果系统提示申请需要手工审核,并且随后被拒绝,发信过去问原因,告知我 Google 是著名商标,除非我有 Google 的授权,否则他们不会给这个域名颁发证书,于是只好放弃。

Posted in 我的慵懒生活 | Tagged , | 1 Comment

Discuz 在 nginx+fastcgi 环境下相对路径问题的解决

这几天在陆续用 apache 替换成 nginx,发现所有在用的 discuz 都出现了 php 脚本中相对路径的问题。比如 discuz 动态头像调用是类似于:

http://www.xxx.com/ucenter/avatar.php?uid=21480&size=middle

但是调用后的地址就变成了:

http://www.xxx.com/ucenter/avatar.php/ucenter/data/images/000/05/60/39_avatar_middle.jpg

查看源代码发现,discuz 中的相对路径都是直接写的文件名,前面没有 ./,与此同时还带来了批量上传 flash 文件无法调用 misc.php 导致提示文字无法显示,引用及提醒信息跳转地址错误等,一概都是由于指向了错误的 xxx.php/dir 这样的 url。感觉不应该是 nginx 的问题,于是查看 php.ini 相关设置,发现 cgi.fix_pathinfo 这个选项正是解决问题的关键,将这个值设置为 0 的话,PATH_TRANSLATED 将等同于 SCRIPT_FILENAME,之后重启 php-fpm 后 discuz 的这个问题就解决了。看来还是 discuz 7.2 代码兼容性的问题,不知道更新的 dzx 是否已经有所改进了?

UPDATE:发现今年5月有一个相关的 nginx 漏洞,可以参考。

Posted in 我的慵懒生活 | Tagged , , | 3 Comments

把 Terminal 拆成多个窗口的 tmux

今天 @delphij 介绍了一个 terminal 神器 - tmux,可以打开10个窗口而且每个窗口都可以随便切分,实在是赞到飞起,从此不用再一下开好几个 ssh 连接了。

在 tmux 主页下载源代码,FreeBSD / Linux 编译安装都很方便,Linux 下面可能会提示找不到 event.h 以及 curses.h 等,分别安装 libevent-dev 和 ncurses-dev 就行了。

启动后默认按 ctrl+b 进入命令输入,? 可以查看命令,支持自定义快捷键。退出用 d 命令,以后用 tmux attach 启动即可直接恢复上次的 session,很好很强大。

Posted in 电脑相关 | Tagged , | 5 Comments

mysql 升级后的连锁反应

上次由于 mysql replication 的问题把一台原先跑 mysql 5.0 的服务器升级到了  mysql 5.1,升级后果然 replication 再没出现过问题。但是今天突然发现 postfix 无法启动,检查日志发现很多类似提示:

postfix/smtpd[1485]: fatal: no SASL authentication mechanisms

检查一下,发现 dovecot 没有起来,手工启动也失败,继续检查日志,发现

dovecot: auth(default): /libexec/ld-elf.so.1: Shared object "libmysqlclient.so.15" not found, required by "dovecot-auth"

到 /usr/local/mysql/lib 一看傻眼了,mysql 5.1 的 client 库也变了,是 libmysqlclient.so.16 了,而 dovecot 还在找 5.0 的 .15,所以显然无法启动。

尝试耍鸡贼 ln -s  libmysqlclient.so.15 libmysqlclient.so.16,启动 dovecot:

auth(default): /libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so.15: version libmysqlclient_15 required by /usr/local/libexec/dovecot/dovecot-auth not found

骗不过去。。只好重新安装 dovecot 了。。。

cd /usr/ports/mail/dovecot
sudo make deinstall
sudo make reinstall
/usr/local/etc/rc.d/dovecot start

启动成功,postfix 恢复正常。服务器上这些东西真是牵一发而动全身呀,所以没事还是别折腾的好,弄不好就得被迫升级一大堆相关联的东西。

UPDATE:经 @delphij 大婶点拨,可以直接用

portmaster -Bdv dovecot

重装 dovecot

Posted in 我的慵懒生活, 电脑相关 | Tagged , , | 1 Comment