openvpn使用密码账号安装部署:

openvpn使用密码账号安装部署

准备环境 系统: CentOS 6.7 X86_64 OpenVpn: 2.4.4 关闭Selinux [root@localhost 2.0]# sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config 安装epelrpm包,不然没有openvpn这个rpm,安装openvpn相关依赖的包 [root@localhost 2.0]# rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm [root@localhost 2.0]# yum -y install openvpn easy-rsa openssl openssl-devel gcc vim 修改Easy-ras主服务信息. [root@localhost 2.0]# cd /usr/share/easy-rsa/2.0/ [root@localhost 2.0]# chmod +x * [root@localhost 2.0]# cp -a vars vars.20180111 [root@localhost 2.0]# vim vars ###找到这个文件修改其中的这几行信息 export KEY_COUNTRY="CN" export KEY_PROVINCE="SH" export KEY_CITY="SH" export KEY_ORG="DFCF" export KEY_EMAIL="zky.linux@gmail.com" export KEY_OU="OPS" [root@localhost 2.0]# 清除keys目录下所有与证书相关的文件, 注意:下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里 [root@localhost 2.0]# source vars //提示可以忽略 [root@localhost 2. [Read More]

2016写给自己的总结

2016写给自己的总结

读书

2016结束了给自己来写一个简单的小总结.

学习方面:

今年大概在opsnotes.net上大概写了差不多18篇文章.
年初的时候学习了一些docker方面的资料书籍
后半年基本学习python了.从7月份到12月份,算是大概的入门了.感觉还是蛮难的还需要多练习
年前计算一个月读三本书的,结果到年底算了下读了23本书.其实很多书都是非技术的一些书籍.
http://opsnotes.net/2017/01/05/读书

工作方面:

毕业到现在一直做运维,其他也不怎么会.从15年基本技术兼管理岗位。现在基本是沟通的多了,技术做的少了.当然沟通是一个很有趣的的事情.情商智商全局考虑都需要考虑很多.当然个人感觉做leader不管是技术还是管理一样重要.
今年业务量前半年其实还可以,后半年基本就保持不动.所以相对今年还算平稳的一年。

生活方面:

今年和相恋多年的媳妇领证了.一路酸甜苦辣,算是修成正果了.感恩有你!
房子买了算是有了一个自己的窝。努力再上海在搞一个
带父亲来上海玩了一段时间
大舅子以及弟弟家里小孩子出生了.顿然感觉自己平白无故的高了一辈,当时肯定是很开心的
本来今年打算带媳妇出去旅游玩的事情,也能遗憾的没有实现,感觉蛮对不起媳妇的。


2016年人变懒了出现惰性了,发胖了.希望2017年勤快一点.

2016年基本就这样子吧.期待2017年.

2016年读书计划

2016年读书计划

读书

正在读的书

	6.PaaS实现与运维管理:基于Mesos +Docker+ELK的实战指南
	7.Python 学习手册第四版
	8.互联网生态:重构商业规则
	9.黑客
	12.我的互联网方法论
	14.编写高质量代码

已读的书

	1.拆掉思维里的墙
	2.高性能linux服务器构建实战
	3.MacTalk 人生元编程
		http://item.jd.com/11398297.html
	4.SaltStack技术入门与实战
		http://item.jd.com/11804150.html(好友沈灿的书)
	5.自动化运维软件设计实战
		http://item.jd.com/11734638.html
	6.皮囊
	7.奔跑吧Ansible
		http://item.jd.com/11839215.html
	8.活着
	9.ELK Stack权威指南
		http://item.jd.com/10038199385.html(好友三斗的书)
	10.海量运维运营规划
		http://item.jd.com/11366105.html(重读)
	11.vim使用技巧
	12.黑客与画家
	13.重新定义公司:谷歌是如何运营的
	14.技术管理之巅
	15.精进 采铜
	16.Ansible自动化运维:技术与最佳实践
		http://item.jd.com/11917729.html(好友沈灿的书)
	17.跟任何人都聊得来:最受世界500强企业欢迎的沟通课
	18.为什么精英都是清单控
	19.梦在青春在
	20.周鸿祎自述:我的互联网方法论
	21.毅力: 如何培养自律的习惯
	22.凤凰项目:一个IT运维的传奇故事
	23.DevOps实践:驭DevOps之力强化技术栈并优化IT运行
读书 

Mac技巧:为终端设置Shadowsocks代理

Mac技巧:为终端设置Shadowsocks代理

准备工作 1.首先要有ShadowSocks 2.要有翻墙账号 3.安装配置自行Google install brew install polipo config # 设置每次登陆启动polipo ln -sfv /usr/local/opt/polipo/*.plist ~/Library/LaunchAgents # 修改配置文件"homebrew.mxcl.polipo.plist" ~/Documents ⮀ cat /usr/local/opt/polipo/homebrew.mxcl.polipo.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.polipo</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>ProgramArguments</key> <array> <string>/usr/local/opt/polipo/bin/polipo</string> <string>socksParentProxy=127.0.0.1:1080</string> #### 需要添加的文件 </array> <!-- Set `ulimit -n 65536`. The default macOS limit is 256, that's not enough for Polipo (displays 'too many files open' errors). It seems like you have no reason to lower this limit (and unlikely will want to raise it). [Read More]
Mac 

转载:职场菜鸟的内心独白

转载:职场菜鸟的内心独白

职场菜鸟的内心独白

zhichang

	虽然这已经是小编工作的第二年,但单纯的小编依然是职场菜鸟、社会小白,这一年多,经历了入职-离职-再入职,事业单位-私企的转变适应过程,最近心情起伏不定,甚至感觉体内的“抑郁细胞”再次苏醒,不吐不快。
	
	    有没有一种人,就是适应不了这个社会?有没有一个社会,能接受适应不了它的人?
	
	其实小编并不是从小就那么爱思考,小编也曾经无忧无虑、大大咧咧的过日子,吃饱了就学、学累了就睡,爸爸妈妈爷爷奶奶从来没要求小编有什么大的成就,中学毕业打个工养活自己就行了,没想到小编竟然这么“争气”,一路大学读下来还一不小心第一名的成绩考上研究生,继续深钻“心理学”,从此再没有了没心没肺的小编。
	
	当然不是说心理学能把人改头换面(虽然对小编确实是这样),经历倒真的让小编变了。但小编也从来没想过自己会变成这样抑郁的一个,今天刚看到一本书上,把小编这种情况叫做“内射性抑郁”和“情感依附性抑郁”(OS:×,什么鬼?!)。
	
	内射性抑郁:将愤怒转向自我以回避想杀死他人的罪疚感。不明白?通俗来讲就是:被Boss骂了,潜意识想杀了他,但是你强大的高尚的道德感和超我不允许你这么想,进而你将这种愤怒转向了自己,觉得都是自己的错,老板骂得对(好贱,可是好准😢),然后你就抑郁了。
	
	情感依附性抑郁:由丧失导致的抑郁。对,是丧失,不是丧尸。你最依恋的人去世了,但你没有机会正常的完成哀悼(比如去世时不在身边,未能参加他/她的追悼会等),那么你就可能会大量收集并极其依恋与死者相关的事情(纪念品、物品、记忆等),把自己的家变成了一座永久的“陵墓”,你就做了一辈子的“守陵人”。可怕吗?可怕,所以就抑郁了。
	
	今天小编不说情感依附性抑郁,既然说职场,那就聊内射性抑郁。小编内射了,哦,不,抑郁了。
	
	第一份工作在学校。“哇,学校福利多好啊,最吸引人的就是寒暑假,多好啊,谁这么傻×,要辞掉这个工作”。是的,小编就是这个傻×,熬了一年,不干了,为啥,抑郁了。小编受不了官官相护,受不了“当官不为民做主”,受不了教师地位低下的落差,从没想过一份工作给小编带来多大的金钱利益(到目前仍是这样想法),但小编无法适应,无法“随波逐流”。有人跟我说“你活的太阳春白雪了”,太对了!小编就是阳春白雪啊,小编看到那么恶的人性,不应该继续坚持“情怀”这个东西吗?!

zhichang

	小编第二份工作,也是现在在做的事情,不能说是小编最喜欢的,但专业相关,小编擅长,还算做的舒服。私企当然不像事业单位,每天打酱油似的舒服过日子,所有精力都花在了“打官腔”、人情往来。私企要求做好事情,做好你的本职工作外,老板一声令下,马上达到200%的完成度。KAO!各种抱怨就不再传播了,已经看到太多,但是小编却发现了这“内射性抑郁”找上门来,老板,哪天小编跳楼了,不会找你的。
	
	偏偏别人不把你当菜鸟,哦,是思想上没把你当菜鸟,希望你做出的成绩是混迹沙场几十年的结果,如果人人都献出一点爱/(ㄒoㄒ)/~~
	
	虽说这是每个新人都经历的事情,但是万一这个新人过不去怎么办,万一这个新人是抑郁型特质的人怎么办,万一这个新人就是适应不了社会怎么办。“自作自受”,几乎大多人都会对他这么说,但是他真的很努力啊,对这个社会,他充满情怀啊,充满热爱啊,但这个社会,到处是不小心的敌意啊。
	
	什么时候,这个社会尊重每一个人,尊重每一个人的特殊,尊重每一个人的发展,尊重他就是他,不是任何人?
	
	有没有一个社会,能接受适应不了它的人?
	
	有没有一个人,告诉你:如果很辛苦,就不用去适应社会。

zhichang

职场 

python基础学习06

python基础语法学习-理解python装饰器

概念

装饰器(Decorator)的基本定义:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”。

装饰器的定义是:装饰器实质上是一个函数。它把一个函数作为输入并且返回另外一个函数。其实其是闭包概念的深化

优点

抽离出大量函数中与函数功能本身无关的雷同代码并继续重用

可以将函数“修饰”为完全不同的行为,可以有效的将业务逻辑正交分解,如用于将权限和身份验证从业务中独立出来

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能

装饰器入门

In [43]: def foo():
    ...:     print('in foo()')
    ...: foo()
    ...:
in foo()

In [44]:
In [44]: import time

In [45]: def foo():
    ...:     start = time.clock()
    ...:     print('in foo()')
    ...:     end = time.clock()
    ...:     print('used:', end - start)
    ...: foo()
    ...:
in foo()
used: 2.1999999997746045e-05

In [46]:
[Read More]

python基础学习04

python基础语法学习-元组与切片

元组

元组是一个不可变结构 是不允许修改的,只查询
In [164]: t = tuple()

In [165]: t
Out[165]: ()

In [166]: t = (1,2,3)

In [167]:

In [171]: t.count(1)
Out[171]: 1

In [175]: t = (1)

In [176]: t
Out[176]: 1

In [177]: t = (1,)

In [178]: t
Out[178]: (1,)

In [179]:

列表和元组的区别

list是[]号
元组是()号
list可以修改
元组不可以修改
[Read More]

python基础学习05

python基础语法学习-字符串

1.什么是字符串

	什么是字符串?
		python3里面是unicode序列
		在python2里面是byte序列
		字符串也是不可变的
		支持切片 也支持索引 支持解包操作
		支持遍历
	用在哪些特定的环境
	为什么是内置数据结构
	In [26]: s = 'geek'

In [27]: s
Out[27]: 'geek'

In [28]: s[0]
Out[28]: 'g'

可以反转:
In [30]: s[::-1]
Out[30]: 'keeg'

In [31]:
支持解包
In [36]: a = 'geek'

In [37]: g,*s = a

In [38]: g
Out[38]: 'g'

In [39]: s
Out[39]: ['e', 'e', 'k']

In [40]:

2.字符串的连接

**join使用方法:**
In [45]: list = ['my','name','is ','steven']

In [46]: list
Out[46]: ['my', 'name', 'is ', 'steven']

In [47]: ' '.join(list)
Out[47]: 'my name is  steven'

In [48]: ','.join(list)
Out[48]: 'my,name,is ,steven'

In [49]:

###字符串的分割
**split**  从左边开始分割
**rsplit**  从右边开始分割
**splitlines**
**partition**
**rpartotion**

**split练习使用**
In [119]: a = "my name is steven"

In [120]: a
Out[120]: 'my name is steven'

In [121]: a.split()
Out[121]: ['my', 'name', 'is', 'steven']

In [122]: a.split('is')
Out[122]: ['my name ', ' steven']

In [123]: a.split(' ', 1)
Out[123]: ['my', 'name is steven']

In [124]: a.split(' ', 2)
Out[124]: ['my', 'name', 'is steven']

In [125]: a.split(' ', 3)
Out[125]: ['my', 'name', 'is', 'steven']

In [126]: a.split(' ', 4)
Out[126]: ['my', 'name', 'is', 'steven']

In [127]: a.split(' ', -1)
Out[127]: ['my', 'name', 'is', 'steven']

案例:

In [131]: line = 'usr:http://opsnotes.net'

In [132]: line.split()
Out[132]: ['usr:http://opsnotes.net']

In [133]: line.split(':', 1)
Out[133]: ['usr', 'http://opsnotes.net']
In [135]: key, value = line.split(':', 1)

In [136]: key
Out[136]: 'usr'

In [137]: value
Out[137]: 'http://opsnotes.net'

In [138]:

**splitlines的使用方法:**
In [138]: text = '''i an geek
   .....: i an a boy'''

In [139]: text
Out[139]: 'i an geek\ni an a boy'

In [140]: text.splitlines()
Out[140]: ['i an geek', 'i an a boy']

In [141]:

**partition的使用方法:**
In [141]: a
Out[141]: 'my name is steven'

In [142]: a.partition(' ')
Out[142]: ('my', ' ', 'name is steven')

In [143]: a.split(' ', 1)
Out[143]: ['my', 'name is steven']

In [144]: line.partition(':')
Out[144]: ('usr', ':', 'http://opsnotes.net')

In [145]: key, _, value = line.partition(':')

In [146]: key
Out[146]: 'usr'

In [147]: _
Out[147]: 'usr'

In [148]: value
Out[148]: 'http://opsnotes.net'

In [149]:
[Read More]

python基础学习03

python基础语法学习-list使用

1.list增加的使用方法

1.append使用方法
	原地修改list,给list增加一个元素,append的方法的返回值是None
list.append(12)

In [4]: list.append(12)

In [5]: list
Out[5]: [1, 2, 3, 4, 5, 12]
In [8]: help(list.append)

2.insert的使用方法,根据索引位置添加.
	insert操作的索引超出范围,如果是正索引,等效于append,如果是负索引.等效于insert(0, object)
In [10]: list
Out[10]: [1, 2, 3, 4, 5, 12]

In [11]: list.insert(0,7)

In [12]: list
Out[12]: [7, 1, 2, 3, 4, 5, 12]

In [13]: list.insert(3,0)

In [14]: list
Out[14]: [7, 1, 2, 0, 3, 4, 5, 12]

In [15]:
超出列表不存在的话
In [16]: list.insert(12,3)

In [17]: list
Out[17]: [7, 1, 2, 0, 3, 4, 5, 12, 3]

In [18]: list.insert(13,13)

In [19]:

3.extend的使用方法
	把一个list扩展到我们的list后边
In [20]: list.extend([1,2,3])

In [21]: list
Out[21]: [7, 1, 2, 0, 3, 4, 5, 12, 3, 13, 1, 2, 3]

In [22]:
In [23]: help(list.extend)####学会使用
Help on built-in function extend:

extend(...) method of builtins.list instance
    L.extend(iterable) -> None -- extend list by appending elements from the iterable
(END)
[Read More]

python基础学习01

python基础语法学习运算符

python算数运算符
 ~/code ⮀ cat yunsuanfu1.py
#!/usr/bin/env python
# -*- encoding: UTF-8 -*-

'''
    python算数运算符
'''

a = 21
b = 10
c = 0

c = a + b
print "1 - c的值为: ", c

c = a - b
print "2 - c的值为: ", c

c = a * b
print "3 - c的值为: ", c

c = a / b
print "4 - c的值为: ", c

c = a % b
print "5 - c的值为: ", c


'''
修改变量: a,b,c
'''

a = 2
b = 3
c = a ** b
print "6 - c的值为: ", c

a = 10
b = 5
c = a // b
print "7 - c的值为: ", c
 ~/code ⮀
[Read More]

python基础学习02

python基础语法学习

**Python range用法**
range([start ,] stop [, step])


上面方括号内的参数表示是可选的,但所有参数必须是整数。如果参数step被省略的话,它的默认值是1;如果参数start被省略的话,它的默认值将是0。但是无论如何,参数stop是不允许省略的,所以range()函数只有一个参数时,它表示range(stop);当range()函数带有两个参数时,它表示range(start,stop)。

我们知道range()返回的是一个列表,列表中的整数值为[start, start + step, start + 2 * step, start + 3 * step,...]。如果参数step为正值,那么列表中最后一个元素为小于参数stop的那个最大的整数 start + i * step ;如果参数step为负值,那么列表中最后一个元素为大于参数stop的那个最小的整数 start + i * step 。但是任何时候参数step的值都不能为零。只要将上面的列举的range()示例跟这里的一般性介绍相结合,我们就能更好的理解该内建函数的用法。

需要注意,当参数step为正值时,参数start必须小于参数step;当参数step为负值时,参数start必须大于参数step,否则range()函数将返回一个空表

习题练习1:写一个猜数字游戏,预先设定一个数字,游戏玩家输入一个数字,如果与预设的数字相等,玩家获胜,如果不等,提示玩家太大还是太小,玩家有三次猜数字的机会。
!/usr/bin/env python
# -*- coding: utf-8 -*-

result =  4
count = 3

while not count == 0:
    guess = int(raw_input('Please enter Guess Number: '))
    if  guess == result:
        print u'猜对了,游戏结束'
        break

    elif guess > result:
        print u'数字偏大,再猜一次'
        count -= 1

    else:
        print u'数字偏小,再猜一次'
        #continue
        count -= 1

else:
    print u'只能猜三次游戏结束!!'
[Read More]

Python多版本管理软件pyenv

Python多版本管理软件pyenv

Pyenv是什么

git地址:https://github.com/yyuu/pyenv
1.pyenv是python版本多功能切换工具,对系统无任何依赖关系和损坏.
2.能支持多个python版本
3.可以在多个python不同版本之间切换

安装部署

环境:
Centos7.0  阿里云
安装:
1.curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
2.修改配置/etc/profile文件,添加如下文件
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
3. source /etc/profile
更新pyenv版本:
pyenv update
删除pyenv:
只需要删掉目录就可以(注意是隐藏文件)
rm -fr ~/.pyenv

使用pyenv在CentOS7.1上安装python3.5.2

1.先解决依赖关系
yum -y install gcc patch make gdbm-devel openssl-devel sqlite-devel zlib-devel bzip2-devel readline-devel
2.下载python3.5.2压缩包
wget http://7d9qvq.com1.z0.glb.clouddn.com/Python-3.5.2.tgz
3.把下载的文件重命名移动到如下目录
[root@zm-test-ops-01 ~]# mkdir /root/.pyenv/cache
[root@zm-test-ops-01 ~]# mv Python-3.5.2.tar.gz /root/.pyenv/cache/
[Read More]