ops

records of learning.

Git常用命令备忘

配置 Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。 # 显示当前的Git配置 $ git config --list # 文本编辑器 $ git config --global core.editor vim # 编辑Git配置文件 $ git config -e [--global] # 设置提交代码时的用户信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]" FAQ 1. 如果在你Fork之后,原始的repo更新了,怎么将原始的更新内容与你当前的合并? 1. 增加原分支为远程分支,命名为upstream git remote add upstream https://github.com/vinsonzou/docker-images.git 2. fetch该远程仓库下的所有分支到remote-tracking分支 git fetch upstream 3. 确保你当前在master分支 git checkout master 4. Fork同步 两种方式,任选其一即可 a) 如果你已经对当前自己的副本做过更改,并且想要保留,则将更新合并到主分支 git merge upstream/master b) 如果想要保留所有原仓库的历史更新则使用rebase复写当前分支(`本地所有修改丢失`) git rebase upstream/master 5.

Docker for Mac Beta尝鲜

Docker for Mac Docker for Mac 是一个原生的苹果应用程序,被安装到 /Application 目录。安装时会创建 /usr/local/bin 目录下的 docker、docker-compose、docker-machine 符号链接,这些符号链接指向 ~/Library/Group Containers/group.com.docker/bin 目录下的各类文件,而 ~/Library/Group Containers/group.com.docker/bin 的文件实际上也是符号链接,他们指向 /Applications/Docker.app/Contents/Resources/bin 目录下的实际二进制文件。 Docker for Mac 使用通过 Hypervisor.framework 提供的轻量级的 xhyve 虚拟化技术 Docker for Mac 不使用 docker-machine 管理虚拟机 Docker for Mac 不通过 TCP 端口通信,反而使用 /var/tmp/docker.sock 套接字文件通信(实际上是将 /var/tmp 目录挂载到了虚拟机中,虚拟机在其中生成套接字文件) 由于使用了 xhyve 虚拟机,所以可以模拟不同架构的处理器,这样开发者就直接能在 Mac 上使用 Docker 使用诸多平台的镜像文件,比如 arm 等。 为了能主机虚拟机共享文件,Docker 使用 osxfs 作为全新的文件共享方案,在很多方面都有全新的特性,比如在文件权限、命名空间、文件所有者、文件系统事件、挂载点、符号链接、文件类型、扩展属性等方面都有了全新的内容,并且,所有产生的日志都能通过 syslog 查询,非常方便。不过现在依旧存在许多问题,比如没有设置 docker daemon 各项参数的接口。 如何为Docker Engine设置代理 screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty 敲一下回车,登录,用户名root,没有密码,直接回车。编辑/etc/init.

kernel igb 00000500 0 eth0 reset adapter

系统环境 CentOS 6.4 igb driver version 4.0.1-k 报错信息如下 Jun 3 13:20:05 localhost kernel: igb 0000:05:00.1: eth1: Reset adapter Jun 3 13:20:06 localhost kernel: igb 0000:05:00.0: eth0: Reset adapter Jun 3 13:20:11 localhost kernel: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jun 3 13:20:12 localhost kernel: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jun 3 13:55:26 localhost kernel: igb 0000:05:00.

DNSPOD API SSL证书调整(subjectAltName)引起的报错

报错信息如下: Python 2.7 (r27:82500, Jan 7 2014, 23:14:35) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> r = requests.get("https://dnsapi.cn") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/site-packages/requests-2.0.0-py2.7.egg/requests/api.py", line 55, in get return request('get', url, **kwargs) File "/usr/local/lib/python2.7/site-packages/requests-2.0.0-py2.7.egg/requests/api.py", line 44, in request return session.request(method=method, url=url, **kwargs) File "/usr/local/lib/python2.7/site-packages/requests-2.0.0-py2.7.egg/requests/sessions.py", line 361, in request resp = self.

俄罗斯永久冬令时的坑

本文更新说明 2017.03.17: 修复java时区更新方法 系统环境 OS: CentOS 6.X JDK: 6 背景 因游戏在俄罗斯运营,采用了莫斯科时间,俄罗斯宣布2014年10月26日开始永久冬令时。 过程 更新了系统时区文件,保证系统时间不会切换至夏令时,执行yum update tzdata即可。 但在莫斯科时间的2015年3月29日凌晨2点,java游戏进程的日志时间跳到了凌晨3点(比系统时间快了1个小时) 解决方法 使用Oracle TZUpdater进行更新即可 java -jar tzupdater.jar -l http://www.iana.org/time-zones/repository/tzdata-latest.tar.gz 工具地址:http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html 参考:http://www.jvmhost.com/articles/java-and-timezones/

利用TsunamiUDP加速跨机房迁移

部署 yum -y install automake autoconf git clone git://github.com/rriley/tsunami-udp.git cd tsunami-udp ./recompile.sh cp server/tsunamid client/tsunami /usr/bin #或者从sf.net下载 wget http://iweb.dl.sourceforge.net/project/tsunami-udp/tsunami-udp/tsunami-v1.1-cvsbuild42/tsunami-v1.1-cvsbuild42.tar.gz tar zxf tsunami-v1.1-cvsbuild42.tar.gz cd tsunami-udp-v11-b42 ./recompile.sh cp server/tsunamid client/tsunami /usr/bin 使用 #1、防火墙调整 #服务端:开启TCP 46224(默认端口) #客户端:开启UDP 46224(默认端口) #2、开启服务端 #待迁移文件都放在/app/game_data目录下(也可指定单文件传输) tsunamid --hbtimeout 60 /app/game_data/* #PS:这里设定心跳包超时时间为60秒,默认为15秒,在使用中很容易中断导致传输失败 #3、开启客户端 # 拉取服务端(122.225.100.100)的game_db.lz4文件,并限速100M(建议限制下,不然机房带宽就满了哦) tsunami set rate 100M connect 122.225.100.100 get gcmob_db.lz4 # 拉取目录下所有文件 tsunami set rate 100M connect 122.225.100.100 get \* #文档:http://tsunami-udp.cvs.sourceforge.net/viewvc/tsunami-udp/docs/USAGE.txt PS:未避免泄密,IP是随机填的 跨机房迁移示例 场景: 将14G文件从杭州机房迁移至北京机房

Zabbix使用Telegram发送报警

环境 CentOS 6.X x86_64 编译Telegram yum -y install lua-devel openssl-devel libconfig-devel readline-devel libevent-devel git clone --recursive https://github.com/vysheng/tg.git cd tg ./configure make mkdir /usr/local/tg cp tg-server.pub /usr/local/tg cp bin/telegram-cli /usr/local/tg zabbix报警脚本/usr/local/tg/telegram.sh: #!/bin/sh cd `dirname $0` ./telegram-cli -k tg-server.pub -WDCRE -P 8890 -d &>/dev/null & Zabbix报警配置 将如下Zabbix Server配置注释并修改如下 AlertScriptsPath=/usr/local/zabbix/alertscripts /usr/local/zabbix/alertscripts/tg.sh内容如下: #!/bin/sh export to=$1; export subject=$2; export body=$3; echo -e "msg $to ${subject}_#_${body}" | nc localhost 8890 #注意事项: body只能有一行内容,超过一行的内容是不会发送的。 Zabbix添加Media types PS:Telegram已于2015年7月10日被天朝和谐。。。

Monitor SSL certificate expiry

看到网上弄了个zabbix监控SSL证书过期时间的,给咱业务也加了个此监控。 改进如下: 基于域名监控(一台服务器上有多个证书) 当前使用的shell脚本如下 #!/bin/sh host=$1 port=443 end_date=`openssl s_client -servername $host -host $host -port $port -showcerts </dev/null 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERT/p' | openssl x509 -text 2>/dev/null | sed -n 's/ *Not After : *//p'` # openssl 检验和验证SSL证书。 # -servername $host 因一台主机存在多个证书,利用SNI特性检查 # </dev/null 定向标准输入,防止交互式程序Hang。从/dev/null 读时,直接读出0 。 # sed -n 和p 一起使用,仅显示匹配到的部分。 //,// 区间匹配。 # openssl x509 -text 解码证书信息,包含证书的有效期。 if [ -n "$end_date" ] then end_date_seconds=`date '+%s' --date "$end_date"` now_seconds=`date '+%s'` echo "($end_date_seconds-$now_seconds)/24/3600" | bc fi

使用Hugo搭建免费个人Blog

Hugo是什么 Hugo是一个工具,可以用于搭建静态站点,类似jekyll,不过Hugo是Golang写的,大家应该知道Golang有一个对部署友好的特点,那就是静态编译,所以安装起来非常方便,不像jekyll安装起来比较麻烦。 可能有些读者也不知道jekyll是干啥的,我这简单解释一下,这些软件通常可以叫做静态站点生成器,我们可以使用Markdown格式编写一些文本,按照指定的目录结构存放,然后再在指定的目录里放置css等静态文件,jekyll就可以帮你生成一个静态站点。那既然是静态站点,你就可以很方便的部署了,因为只要搭配一个web server即可,甚至可以部署在github pages上,ops.m114.org是部署在gitcafe pages上的,这样国人访问速度快一些。因为github和gitcafe的pages功能是免费的,这也是我标题中“免费”二次的原因 Hugo的使用 Hugo的官网是gohugo.io,里边有个Docs,大家可以跟着走一遍,主要是里边的quickstart。笔者就不给大家做翻译了,给读者介绍一下如何基于笔者这个Blog来搭建,在这基础上修改就要容易不少了。 下载Hugo 官网上首页就有下载链接,去Hugo下载即可 把笔者的这个blog clone下来 git clone https://github.com/vinsonzou/hugo.blog.git cd hugo.blog hugo server -w 上面的代码是Linux、OS X控制台命令,windows用户请自己转换成windows操作方法。看到控制台打印出的内容了么?Hugo已经帮忙生成了一个静态站点,并且监听在本机的1313端口,访问一下试试吧:) 修改hugo.blog 一行代码就跑起来了,是不是so easy,接下来笔者大体介绍一下各个目录中的作用,读者可以修改成自己的一些信息 content目录就是存放你原始markdown文本的地方,content的子目录和markdown文件名组成了url地址,比如这篇文章的url是:http://ops.m114.org/post/how-to-use-hugo/ ,那是因为content目录下有个post/how-to-use-hugo.md public目录是刚才运行hugo server -w命令生成的,这里边的内容就是静态站点的内容,之后咱们把这些内容提交到gitcafe pages中 static目录是存放一些静态资源 themes目录是主题目录,我使用了hyde这个主题,在上面做了一些修改,读者要想让Blog比较个性化,就可以定制主题 themes/hyde/{layouts,static}是我们主要修改的内容。index.html是首页,你修改一下看看,浏览器会自动刷新看到效果;partials目录是存放的一些页面片段,便于复用;_default目录是博文单页和博文列表页面,相信你一看就懂;static目录中有一些css,想怎么个性化就调整它们就成了 使用gitcafe pages制作站点 上面搞定之后,最好把修改之后的内容push到github上。public目录无需push,这是每次都可以自动生成的。咱们这里要把public也作为一个repo,push到gitcafe,生成静态站点。 gitcafe有个帮助文档:GitCafe Pages,照着搞一下,把public的内容push上去,绑定域名,O了 是不是很简单,有明白的地方可以查看Hugo文档或留言。