ubuntu 14.04升级到16.04遇到”无法计算升级”问题

一台服务器上计划操作系统升级,从ubuntu 14.04升级到16.04。但在do-release-upgrade过程中遇到了”无法计算升级”问题,导致升级程序退出。

网上搜索一圈后,最后在这儿找到答案:https://askubuntu.com/questions/202730/how-to-fix-the-unable-to-calculate-upgrade-issue-when-upgrading-from-12-04-to?answertab=votes

问题的关键,是要去看这个log文件:/var/log/dist-upgrade/main.log
不要被apt.log里一堆Broken误导。

BTW:最终检查问题也是postgresql-9.3-postgis-2.1的问题。

ubuntu临时禁止ipv6

单位的ipv6网络坏掉一段时间了,导致使用ipv6访问网站会链接不上,需要临时禁止掉ipv6网络。
在ubuntu下,加入要禁止eth0的ipv6网络,可以:
sudo su
echo 1 >> /proc/sys/net/ipv6/conf/eth0/disable_ipv6

gitlab升级:从7.8.4到9.4.5

升级gitlab,从7.8.4版本到9.4版本,中间跨越了几个大版本,需要一路升级上来,升级完成后,还需要修改对应的配置文件:
/etc/gitlab/gitlab.rb
将以下内容添加:
external_url 'http://git.westgis.ac.cn'
nginx['listen_port'] = 8000
postgresql['port'] = 5444
unicorn['port'] = 8001

然后重启服务:
sudo gitlab-ctl reconfigure
若发现nginx没有启动,则还需要观测nginx的配置文件是否正确:/var/opt/gitlab/nginx/etc/gitlab-http.conf

之前的升级,参见:gitlab升级

ipad起死回生记

一个老的ipad(ipad 3),很久不用,锁屏密码也忘记了,关键是home键也不灵(事后才发现这个问题)。经过多次密码尝试后,发现ipad已经显示为:ipad已被停用!
尝试通过DFU模式(power键+home键)进行恢复,但是怎么也进不去dfu模式,itunes一直提示要在ipad上响应,但ipad被锁死,无法响应。
于是尝试了一下另一个软件:爱思助手,发现其可以解决这个问题,他可以通过软件进入dfu模式。
最终通过这个方式将ipad重新安装,利用apple id重新激活,再重新还原,可以作为一个新的ipad使用了。

使用grep提取行内数据

要从类似文本中提取其中的经纬度数据:

u’city’: u”, u’lat’: u’53.54022′, u’lng’: u’28.04696′, u’id’: u’8037500000000000000′}”,,,[],0,0,57,80375,8037500000000000000,Детский сад №99,0,23.8435327,303,0,校园生活,,”http://maps.google.cn/maps/api/staticmap?center=53.6470467,23.8435327&zoom=15&size=120×120&maptype=roadmap&markers=53.6470467,23.8435327&sensor=true”,http://ww3.sinaimg.cn/large/4e704b16jw1exkskwur0bj205k05kt8v.jpg,,0,0,,,53.6470467,0,B2094457D66AA5FA4199,http://u1.sinaimg.cn/upload/lbs/poi/icon/88/57.png,887,0,57,80375,,0,8037500000000000000,白俄罗

一开始是尝试使用csvquote,后来发现部分类型数据存在问题,于是尝试使用sed提取文本,但试验后发现grep提取更为简单:

grep -Eo ‘markers=([0-9.,-]+)’

最终组合为:

cat hotpoi-tmp.csv | grep -Eo 'markers=([0-9.,-]+)' | awk -F= '{print $2}' | awk -F, '{printf "%.2f,%.2f\n",$2,$1}' | sort -t, -k2,2n -k1,1n | uniq

在ubuntu 16.04上安装vpn:l2tp/ipsec

有一台海外主机,之前都是用ssh -D来翻墙,结果最近不太好用了。于是就尝试在服务器上安装一个vpn。
第一次搜索尝试了pptpd,安装是非常简单。但在客户端测试的时候傻眼了,mac osx 10.12现在不支持pptp了,需要用l2tp/ipcsec。
在网上找到了一个安装脚本:
https://github.com/hwdsl2/setup-ipsec-vpn
安装非常简单:
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh
但要注意,加入服务器默认的外部网卡接口不是eth0,可能需要进一步修改。在我的这台机器上,对外网络接口是在eth1,因此需要将/etc/iptables.rules文件中的eth0都替换为eth1,然后重启服务器。

客户端也可以考虑一个分流方案,即国内网站不走vpn,国外网站都走vpn,参考:
https://github.com/ranmocy/chnroutes
安装比较简单:

  1. 在终端中执行python chnroutes.py -p mac -t ipsec,这将生成phase1-up.sh和phase1-down.sh两个文件;
  2. Mac OS X 系统支持 Cisco IPSec 的后台使用的是 racoon,但是不会像 PPTP 一样自动调用启动脚本,如果需要自动调用脚本,需要自己修改配置文件,并自己从命令行启动;
  3. 推荐手动执行phase1-up.sh设置路由表;而只有在网络环境变化的时候,需要运行phase1-down.sh再运行phase1-up.sh来重新设置路由表。

使用letsencrypt激活网站https

现在使用letsencrypt来激活https已经非常简单了。ubuntu 16.04下可以使用certbot工具来快速激活。

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache

然后,激活某网站的https:
sudo certbot --apache -d example.com
letsencrypt默认90天生命期,可以使用cron每月更新一次:
0 2 1 * * /usr/bin/certbot renew --quiet

使用gnuplot批量画图

处理数据使用gnuplot画图,遇到一个需要批量画图的需求,即将2年的数据,以每28天一张图绘制,一共大概绘制26张左右。

在gnuplot中,也可以使用do循环来绘制,就是在处理时间变化的时候要注意,代码如下:

set xdata time
set timefmt "%Y-%m-%dT%H"
set xtics format "%Y-%m\n%H:%M" nomirror

set term png size 1600,1200
date1=strptime("%Y-%m-%dT%H",'2015-01-01T0')
do for [t=0:25] {
outfile = sprintf('shanghai-hourly-%03i.png',t)
set output outfile
set multiplot
set size 1,0.5
set origin 0,0.5
clear
date2=date1+(14*24-1)*3600
set xrange [date1:date2]
plot 'weibonum-shanghai-hour.txt' u 1:3 w lp t ''
set origin 0,0
clear
date1=date2+3600
date2=date1+(14*24-1)*3600
set xrange [date1:date2]
replot
unset multiplot
unset output
date1=date2+3600
}

csvquote: smart and simple CSV processing on the command line

在处理csv文本发现awk不能直接处理引号内包括逗号的数据,比如:

field1,"field2, has a comma in it","field 3 has a ""Quoted String"" in it"

这是可以使用csvquote工具来处理了,此工具需要源代码安装,代码地址:https://github.com/dbro/csvquote

Are you looking for a way to process CSV data with standard UNIX shell commands?

Are you running into problems with embedded commas and newlines that mess everything up?

Do you wish there was some way to add some CSV intelligence to these UNIX tools?

awk, sed
cut, join
head, tail
sort, uniq
wc, split
This program can be used at the start and end of a text processing pipeline so that regular unix command line tools can properly handle CSV data that contain commas and newlines inside quoted data fields.