Debian 8 升级 Debian 9 (DO篇)

Debian 8 升级 Debian 9 (DO篇)

这两天升级几个Debian 8 (jessie)的droplet,屡次失败,后来参考了一篇blog(请点击此处了解),并多次尝试后才最终成功。回过头来看看,其实整个过程很简单,只是被一个点卡住,就来回折腾。本文简要记录一下操作顺序和操作要点,以备日后查看。

修改 /etc/apt/sources.list 文件

这个是通用步骤了,修改成 Debian 9 (stretch) 的源即可。

deb http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb http://deb.debian.org/debian stretch-proposed-updates main contrib non-free
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb http://deb.debian.org/debian-security stretch/updates main contrib non-free

deb-src http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch-updates main contrib non-free
deb-src http://deb.debian.org/debian stretch-proposed-updates main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian-security stretch/updates main contrib non-free

这里也可以用 DO 自己的镜像站点的源(http://mirrors.digitalocean.com/)。考虑到我们的droplet都部署在欧洲和美国,因此速度上没太大差别,还是直接取官网的源好了。

备份 /etc/cloud 目录

使用以下命令直接备份即可。这步骤非常重要,实际上是整个升级的关键点!后面操作中,必须要还原这个目录!

cp -r /etc/cloud /etc/cloud-bak

停止所有相关的服务

这也是通用步骤,没什么细讲。有什么服务就停什么服务好了。

systemctl stop apache2
systemctl stop mysql
systemctl stop fail2ban
systemctl stop dovecot

更新并升级

需要注意的是,一般情况下,升级提示是否保留原有配置时,一般都保留原有配置,这个也是默认选项。但是对于fail2ban的jail.conf文件,建议采用系统新的文件,后面手工再改即可。

我在这个更新过程中,没有提示是否保留/etc/cloud的配置,因此后面需要手工还原备份的/etc/cloud目录,如果是系统提示了,务必要保留原有的/etc/cloud配置。

apt update
apt upgrade
apt dist-upgrade

还原 /etc/cloud 目录

完成各项更新后,先不要重启系统,务必先还原 /etc/cloud 目录。这步相当关键!如果没有还原,将采用系统新的/etc/cloud 配置,导致cloud-init 过程失败,系统无法启动!

rm /etc/cloud
cp -r /etc/cloud-bak /etc/cloud

最后,就是重启系统,完成整个升级。

关于 /etc/cloud 目录,只在 DO 的系统中有这个目录,在 Linode 等其他VPS系统没有发现。感觉是 DO 处理上一个不太完善的地方,这个目录似乎没有必要暴露给客机系统,主机系统配置即可。

和 DO 的技术支持人员简单交流了这个问题,平台相关的元数据(metadata)是保留在 /var/lib/cloud 目录下,似乎 /etc/cloud 只是上游云系统的初始化配置(根据 /var/log/cloud-init.log, 系统初始化时需要从这个目录下读取 cloud.cfg 等配置)。

Bitbucket/Mercurial在Debain8上的一点小问题

Bitbucket/Mercurial在Debain8上的一点小问题

由于Debian 7已经被无情地终结了生命周期,因此不得不将部分生产环境升级到Debian 8。总体上还比较顺利,在mercurial库方面遇到点问题,记录如下:

问题1:UnicodeDecodeError: ‘ascii’ codec can’t decode

这是Python脚本编码的问题。一个好的py脚本,应该在脚本起始处就标明编码方式,可惜mercurial的很多脚本没有这么做。Debian 8采用Python 2.7.9,默认是ascii编码,需要修改为默认utf-8编码。注意,Debian 8安装了多个Python版本,首先要确认默认版本号:

python -V

接着修改“/etc/python2.7/sitecustomize.py”文件(如果没有的话,可以手工创建一个),在文件起始处添加以下代码:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

问题2: [SSL: WRONG_VERSION_NUMBER] wrong version number

Bitbucket网站禁止了有缺陷的TLSv1,TLSv1.1加密方式,奇怪的是mercurial为什么没有根据协商采用SSL或者TLSv1.2? 修改方式也简单,强制mercurial禁止掉TLS。修改“/etc/mercurial/hgrc”,增加以下内容:

[ui]
tls=False
Wheezy被移除了

Wheezy被移除了

Debian 7 (Wheezy)结束了整个生命周期,Debian组织将Wheezy从所有的mirrors站点中删除了,如果仍旧使用apt-get进行更新或者安装软件时,会导致404错误,无法获取相关文件。关于这个问题的信息,请参考这个链接

如果实在要停留在Debian 7版本上,需要修改sources.list文件,将deb库指向“http://archive.debian.org/debian/”。

Google AdWords 一点小经验

Google AdWords 一点小经验

古语有言:酒香不怕巷子深,然而今时今日这种观点已经过时了。好的产品如果不为人知,即对不起开发商自己,其实对消费者也是损害。好的产品就应该广而告之,让大家尽早享受,摆脱折磨,比如我们的产品(miniSIPServer)就挽救了很多迷失在 Asterisk、FreeSwitch 中的灵魂。

常见的广告手段无非是:

(1)传统方式。例如在电视、纸媒、报纸、杂志等撒钱做广告,这种方式适合有钱的主,对一般中小企业而言,这种方式的价值越来越低,尤其对我们这类小软件开发商而言,几乎毫无意义。

(2)网络搜索广告。作为中文用户,我们一度以为首先应该试试百度的广告推广方式,当然后来发生的一些事件以及我们自己的体会而言,建议放弃百度,不要抱任何幻想。本文推荐使用Google AdWords。 当然,由于众所周知的原因,您需要自行解决访问问题。

使用 AdWords 的经历积累了一点经验,“广而告之”的“广”有几个方面需要仔细考虑:

(1)人群。是不是所有人都适合点击、接受您的广告? 实际是要对自己的产品有准确认识。比如我们的产品是企业软件产品,那么一般的消费群众就不可能是目标客户,向他们提供广告就没有意义。

(2)地理。是不是需要向全球提供广告?这点其实也和产品本身的定位有关联。这里有个常见的误区:“应当尽量拓展新用户! 如果某个地区客户少,更应该加大该区域的广告推广!”。 如果您的客户大部分来自某个区域,那么向那个区域推广告其实更可能取得比较大的效果。比如我们的产品客户绝大部分来自欧美,因此我们在AdWords中,限制了广告的【地理范围】,只设置定位在欧美地区,基本上将广大亚非拉地区明确排除了(若干发达经济体除外,例如香港、新加坡等)。就我们的经验来说,亚非拉地区的欺诈性点击很多,对产品的推广毫无帮助。

(3)方式。AdWords 提供了很多推广告方式,例如搜索方式(这个最常见)、联盟网络推广等。我们可以明确的是:只要选择搜索方式即可。联盟网络推广等方式虽然能增加点击,但是帮助不大、欺诈也多,用户也可能只是看到广告,随手点击来看看而已,这类广告带来的用户往往并不是产品的目标客户。而通过搜索推广告,这契合了用户的搜索需求,极可能就是您产品的目标客户。

(4)关键词选择。通常我们都希望尽可能将所有的关键词都加入进去,哪怕只有一点点关联性的关键词也恨不得全部加入进去。这在初始阶段当然可以。运行一段时间后,需要观察关键词的效果,如果点击率小于1%,那这个关键词就应该放弃。有时候我们自认为某个关键词高度契合产品,实际搜索结果往往会大跌眼镜,这种情况下要果断砍掉,别犹豫。

(5)费用。不差钱的主可以忽略。如果费用预算有限制,自然需要精打细算。必须限制每个广告系列、默认每次出价的最高值。在这点上,不要相信 AdWords 的调价建议,这些建议基本是按照最高出价进行调整,如果盲目地跟随这些建议,您的广告费用就会直线上升。默认出价值仍然应该根据关键词的效果来调整,确保您希望的关键词能有合理的点击率。广告费用应当与您的产品销售收入要保持一致,过高的广告投入未必会换来产品销售增长。

华为

华为

今天在网上看到一个新闻,关于美国打压华为和孟晚舟,具体链接请点击此处

这事很让人愤慨,在网上进一步搜索了相关的资料,简直要拍案而起!这完全是赤裸裸地打压和抹黑。作为通信领域的从业人员以及一名深圳居民,一直以来都以华为为傲,华为也一直是我们学习的榜样。美国这种完全不顾廉耻、不讲究吃相地打压方式,实在太下作了!政府应该重视这件事,靠华为自己是不可能扛得住美国政府的国家行为的,不能让咱们的科技之光被美国黑手给掐灭了。上次在中兴事件上的绥靖和不作为,显然让美国得寸进尺!这次如果在华为事件上还不吸取教训,国内的高科技产业就可以洗洗睡,以后就干点垃圾回收的事情算了!

在网上看到另外一些言论更让人不齿,例如:“不要为了一个女人牺牲国家利益”;“华为给国家添麻烦了”…… 这帮混账东西,不是傻就是坏!作为一名长者,很久没有气愤难平了,华为这次事件确实让人郁闷气愤!

杀掉袁崇焕,清兵就不入关了吗?!

找到“丢失”的士兵,日本就不会侵华了吗?!

牺牲华为,美国就不打击中国了吗?!

THIS IS A WAR!  醒醒!!

乌合之众

乌合之众

周末终于挣扎着看完了勒庞写的《乌合之众》,一本言过其实的书。基本观点无非就是:群体会弱智化,即使这个群体是由精英组成。相比之下,大前研一的作品思考更深入、也更广泛一些,我更喜欢大前研一的书。

由于基本观点是群体性弱智,因此顺势就能推导出议会制的无效和荒谬。作者显然也意识到这点,因此最后一点章节又费力地硬拗,看得实在是替作者尴尬。

还是鲁迅说得对:看书就应该看二十年前,甚至一百年前的书。

2019桌面

2019桌面

时间过得飞快,似乎还在2018年……

经过凌乱的2018,连桌面都显得无序了。

2019桌面
2019桌面
SSHd使用强加密算法

SSHd使用强加密算法

默认情况下,SSH服务器会启用各种尽可能的加密算法,其中包含一些很弱的加密算法,这确保了客户端广泛的接入,但是的确会引入一些风险。企业环境中设备是可控的,因此可以去掉弱加密算法而只保留特定的强加密算法。

Linux环境中查询以下帮助,可以了解包含算法在内的各项配置信息:

man 5 sshd_config

修改/etc/ssh/sshd_config文件,指定Ciphers采用强加密算法即可,例如,将下列语句直接加入到该文件后面:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes256-cbc

当然,最后要重启ssh服务才能使配置生效。

RFC4235与RFC7463

RFC4235与RFC7463

基本上两篇RFC文档是传承的关系,RFC7463场景应用比RFC4235要详细很多,一些旧的SIP设备未必支持7463。

在兼容性方面,对于SIP-SUBSCRIBE消息,两篇RFC文档采用了不同的Event,rfc4235中定义“dialog”,而rfc7463中定义“dialog;shared”。rfc4235限定在只订阅SIP呼叫对话的状态,因此在dialog-info中,要求必须填充dialog元素,其中就包含call-id,remote-tag以及local-tag等典型呼叫参数。

而rfc7463不仅仅是关注呼叫,更关注“状态呈现”,因此凡是与“状态”相关的消息,都尽量进行了定义。比如在“11.1. Registration and Subscription”章节中,就定义了终端注册的状态呈现。在注册流程中,就没有dialog的信息。

呈现信息多,对用户当然有好处,对VoIP系统也很有意义,尤其是在企业应用场景中。但是需要注意的是这也大大增加了VoIP系统的负荷,实际部署中要慎重考虑。