Author: 芳草苑主

  • Lost network after update VPS from CentOS 7.0 to 7.1

    昨天我把 VPS 用 yum update 了以后,重启,就发现怎么也登录不了 VPS 了。幸好还有 serial console 可用,登进去一一检查,一开始以为服务没有启动,接着又查防火墙、SELinux 的设置是否被改动,甚至查到了 runlevel,最后才发现 venet0 无法获得 IP 地址。难怪什么都访问不了了——谁会想到升级之后出这种毛病。

    我见 VPS 控制面板里有 “Reconfigure Network” 按钮,看来就是针对网络失联的,可是点了好多次,也重启了好多次,仍然没有 IP 地址。我想是不是 /etc/sysconfig/network-scripts/ 目录下原有的 ifcfg-lo、ifcfg-venet0 和 ifcfg-venet0:0 三个文件无法被重置造成的?我就想把它们删除然后再按 “Reconfigure Network” 按钮。不幸的是,这三个文件被删之后,VPS 控制面板所有按钮都失效了,同时 serial console 也无法登录了。看来 serial console 仍是依赖于网络访问的——这跟我事先估计的不一样。

    如果是台普通电脑,遇到网卡无法获得 IP 地址的情况,我肯定是插拔网卡,或者重装驱动程序。可这是一台 VPS 啊?我一度绝望了,以为只有重装系统了。大概过了十几分钟,我意外地发现 VPS 控制面板的按钮又可用了,serial console 也恢复了。大概是我删除这三个文件后,CentOS 自动检测到了新硬件,并安装了驱动。我用 serial console 登录后查看,果然 ifcfg-venet0 和 ifcfg-venet0:0 已经在那里,但 ifcfg-lo 没有自动恢复。这下我不敢乱来了,赶紧把 ifcfg-lo 从备份中拷贝过来。

    但是,最关键的——venet0 仍没有 IP 地址。两个多小时过去了,我仍不知道该怎么办,只是不死心地 Google 着不同的关键字,终于被我找到一篇大神的文章。它教我编辑 /etc/sysconfig/network-scripts/ifup-aliases 文件,找到一行:
    if ! /sbin/arping -q -c 2 -w ${ARPING_WAIT:-3} -D -I ${parent_device} ${IPADDR} ; then

    把它删了,改成两行:
    /sbin/arping -q -c 2 -w ${ARPING_WAIT:-3} -D -I ${parent_device} ${IPADDR}
    if [ $? = 1 ]; then

    保存退出,重启网络服务。Wow!真是见证奇迹的时刻,一切都正常了。

  • Install CentOS 7 on Fujitsu Server

    我买了一个 Fujitsu TX2540 M1 服务器,可以说是一个错误的选择。因为它的安装逻辑异常复杂,花了好长时间才把 CentOS 7 安装成功。

    期间多次以为它不支持 CentOS 7,只有在 Fujitsu Support 网站上找到一份文件说 CentOS 7 is “Tested”,才支撑我频频破碎的信念一直到成功。因为 Fujitsu 注明 CentOS 7 仅是 “Tested”,而非 “Supported”,意味着 Fujitsu 不提供官方支持。期间我尝试着按网上找到的方式,电邮联系 Fujitsu,问能不能告诉我我买的服务器 Megaraid 是什么型号。Fujitsu 回信说它不提供电邮支持(那你公布电邮干吗?)信里说可以使用他们的在线提问系统,于是我重填了一遍问题,然后得到回复说,要我打电话寻求支持。我彻底服了,不过我也没打电话,因为当时我也差不多摸索出来了。

    言归正传。CentOS 7 安装时碰到的问题是识别不了 Megaraid,要我禁用阵列卡做单个硬盘使用,我又心有不甘。试了好些其他主流操作系统也是如此。后来我用 ServerView Installation DVD 启动,它是“预安装”盘。预安装界面里是找不到 CentOS 7 的,好在 CentOS 7 和 RedHat Enterprise Linux 7 的极其相似性,我选了RedHat Enterprise Linux 7 让预安装执行完毕,之后选择安装源千万不能选从 DVD 读取。我是指定了 CentOS NetInstall 的 URI 才顺利让机器重启后进入了 CentOS 的安装界面。这时安装目标盘已被预置为阵列卡(这时千万不要点进去,一旦进去后哪怕不做任何修改,返回安装过程又成识别不了阵列卡的状态),之后就是正常的安装步骤了。

    最后吐槽一下 ServerView Installation DVD,它的操作系统竟然是 Windows,看得出 Fujitsu 已经落伍了。

  • Fakes on Taobao

    淘宝最近因假货太多被推倒风口浪尖,我也火上浇油一把。我想很多人跟我一样,对淘宝并无好感,不得已而用之。

    我举报的并不是假名牌的假货,而是假指标/假描述的假货,这应该更好甄别,但淘宝根本不重视。

    首先,据客服说,我举报的假货卖家已经有人举报,所以我无法就同一事宜举报。OK,这是淘宝的规则,很好。但既然有人举报,我作为旁证,希望参与其中,淘宝没有对应的流程让我参与,需要改进;而且,虽然我不是第一举报人,我作为消费者,也有权知道处理结果,淘宝也没有一个自动的反馈,在我强烈要求下,客服答应帮我做一个记录。但这种备注式的记录,很可能是被遗漏的,我希望我的旁证举报也能进入一个自动反馈系统,得到最终处理结果的反馈。

    其次,淘宝上卖家良莠不齐,我要花很多时间去甄别,仍不免失误。而淘宝,掌握大数据的运营方,应该有更好的甄别方案,替消费者把好第一关。别的不说,刷信用成了一种开店的基本伎俩,淘宝就应该扼杀它,淘宝需要花大力气对抗各种作弊手段。就算黑心店主要作弊,淘宝也要提高他们的作弊门槛和成本。

  • Back to MySQL

    不知从什么时候开始,Fedora 和 CentOS 里的 MySQL 都给换成了 MariaDB。我一直搞不懂好端端的 MySQL 为什么还要分出一个 MariaDB,更搞不懂 MariaDB 的优越性在哪里,反正 MySQL 对我来说够用了,倒是 MariaDB 安装和启动时使用了不同于 MySQL 的名称,让我很不习惯。比如

    yum install mysql-server
    

    换成了

    yum install mariadb
    
    service mysqld start
    

    换成了

    service mariadb start
    

    幸好,除此之外,一切照旧,用到 MySQL 的 PHP 程序都能继续在 MariaDB 使用,所以我就一直用着 MariaDB。直到今天使用 Magento2,要求 MySQL 5.6 以上版本,而 CentOS 下把 MariaDB 用 yum update 到最新版本,仍是 5.5.40。

    于是我被逼着去下载 MySQL 5.6。不用不知道,一用发现 CentOS 下安装 MySQL 超级方便,只要安装好 RPM 包——http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm,就可以恢复使用

    yum install mysql-server
    

    执行安装。

    早知如此,我真不该碰 MariaDB——这个并没有给我带来实际利益的程序也花了我一天去熟悉。

  • Twenty Fifteen features West Pier

    WordPress 4.1 发布了,Twenty Fifteen theme 也发布了。

    Twenty Fifteen screenshot
    Twenty Fifteen screenshot

    仔细一看,Twenty Fifteen 用的主题图竟然是我们 Brighton West Pier 的一幅照片。West Pier 的照片我已经见过千千万万了,但被用在 WordPress 上我还是觉得格外出彩。为了赞扬 WordPress 对 Brighton 的支持,我立即切换芳草苑到 Twenty Fifteen 主题,暂且不考虑她是否适合芳草苑。

  • Godaddy .com renewal coupon

    It is getting harder and harder to find a Godaddy .com renewal coupon with big discount, I mean, over 30% off.

    Today I had spent 2 hours searching in vain, and was thinking I had to use some voucher with only 20% off for order over $50. The code is not specific for .com renewal, but general for all Godaddy products. It means all Godaddy products can be marked at least 20% off, and it is a sales technique which I do not like. So I do not regard 20% off as a REAL discount. Anyway, it is off topic.

    At last minute, I came across a .com renewal coupon 35REN414. The person who revealed this coupon said it was 35% off. Actually I got 40% off when I used it today. Since I never got such a big discount on .com renewal before (the biggest I had got was 33% off), I immediately decided to use code to renew .com domains to a maximum length.

    Longer registration period, better SEO result. And domain renewal price is rising. So it is a good investment, I think.

  • NIC is a critical point

    一个网络设备好不好,就拿大文件去测试它。

    LinkSys WRT54GL 路由器就有这样的问题:从 WAN 端口下载若干GB 大小的文件,中途就会断开,路由器也不工作了,它的 web 管理界面也访问不了,非得重启才能恢复。

    今天发现我的网络硬盘 WD MyBookWorld 2TB 也有此类问题:在拷贝两个20多GB大小的文件过程中,中途也被断开,再也访问不了 MyBookWorld,重启后恢复。

    以前我以为这些家用级的网络设备在大流量压力下会死机(CPU 超载),今天的结论是 CPU 或许还有余力,但网卡超载了。因为,在访问不了 MyBookWorld 时,我拔出了一个 USB 设备(我用 MyBookWorld 的USB 口在给手机充电),触发了 USB device unplug 的事件。通常我会收到一个邮件通知,但这次因为网卡停止响应,CPU 仍在工作,记录下了这个事件,延迟到重启后网卡恢复正常才发出邮件。

    网卡很关键,以后得多关注这方面的指标。我现在热衷于选用商业级的设备,即使是为家用。

  • Change FreePBX default MySQL connection

    我可能吹毛求疵了:我感觉如果要修改 FreePBX 里默认的 MySQL 的连接位置好麻烦。

    我修改成 MySQL socket 方式连接,而且也修改了 socket file 的位置,然后要修改 FreePBX 好多个文件才能让 FreePBX 对接 MySQL。大部分文件属于 FreePBX 配置文件,还好办,象填表格一样填就是。但 /var/www/html/admin/modules/userman/DB_Helper.class.php 根本没为 MySQL socket 连接方式考虑,DSN 只兼容 host 连接,所以要大改 262 行(以FreePBX 2.11.0.39为例)。

    要改成多行:

    
    if (preg_match('/^unix\((.+)\)$/', $amp_conf['AMPDBHOST'], $matches) === 1) {
    	$ampdbsocket = $matches[1];
    	$dsn = "mysql:unix_socket=".$ampdbsocket.";dbname=".$amp_conf['AMPDBNAME'];
    }
    else {
    	$dsn = "mysql:host=".$amp_conf['AMPDBHOST'].";dbname=".$amp_conf['AMPDBNAME'];
    }
    
    

    直接修改程序是我最不愿意的。FreePBX 似乎也没提供安全升级的办法,所以 User Management 模块一升级,上述修改就作废,FreePBX web portal 就出错。

  • Allow specific “anonymous” inbound SIP calls

    之前所有的 SIP 服务商都是提供 SIP 注册的帐号和密码。最近碰上一个新的 SIP 服务商,购买了一个电话号码,它只让我设置 Forward to SIP Server 或 Forward to SIP URI(当然也可以转发到普通电话号码,但那是要额外收费的,不在我考虑范围之内)。

    于是,碰到了新命题:我必须在 FreePBX 的 SIP Settings 里同时启用 Allow SIP Guests 和 Allow Anonymous Inbound SIP Calls 才能收到转发过来的 SIP calls。这两项都是我不愿意启用的设置,因为存在被 SIP hackers spamming 的风险。尽管单独启用 Allow SIP Guests 据说没有太大风险,但还是接不到电话,呼叫方会收到 FreePBX 给出的语音提示:The number you have dialed is not in service. Please check the number and dial again.

    怎样才能让来自 SIP 服务商的 anonymous calls 通过,而把其他的阻挡在外?我甚至想到了启用 Allow SIP Guests 和 Allow Anonymous Inbound SIP Calls ,但用防火墙规则只允许来自特定 host / IP 的流量。这个方法我自我评价是非常 dirty,我希望是 FreePBX 的问题在 FreePBX 内部解决。

    我几乎不带希望,搞了个试验,创建了一个 SIP trunk。它跟之前注册型的 SIP trunk 的区别就是省略了 PEER Details 项里的 username, password 和 Register String。然后,同时禁用 Allow SIP Guests 和 Allow Anonymous Inbound SIP Calls,这时 Forward to SIP URI 已经能工作;再添加一条 Inbound Route,Forward to SIP Server 也能工作了。

    这个事实推翻了我对 trunk 的原有理解—— trunk 只是一条进或出的通路。现在我知道 trunk 还能“命名”符合特定条件的“匿名”来电,起到过滤的作用。

    此外,我猜想,转发型的 SIP 服务比注册型的 SIP 服务更可靠,因为转发型的 SIP 只在有来电时把数据包转发到我的 FreePBX;而注册型的 SIP 则要不时地重注册保持连接,有时连接已经断开,而 FreePBX 不知道,要等到下个周期才重注册,于是会错过来电。不知我猜想对否?请教过路的 VOIP 专家。

     

  • WP Social Login back to working

    WP Social Login 这个插件在芳草苑上好长时间工作不正常了。无法通过 Google 帐号登录,显示的出错信息是:Oops! We ran into an issue. Request failed. Either you have cancelled the authentication or Google refused the connection.

    Google authentication failed
    Google authentication failed

    今天终于找到原因,其实也不是插件的错,而是在 Google 开发者项目设置里没有开启 Google+ API。默认是禁用,启用就行了。

    Enable Google+ API
    Enable Google+ API

    我隐约记得有消息说 Google+ API 发布以后,WP Social Login 从 Google API 转向了 Google+ API。但当时也没留意看,现在也搞不清楚 Google API 和 Google+ API 有什么区别。IT 技术发展太快了,很多概念只能浮于表面,能用足用好已经不错了。