tomcat
jetty
activemq
elasticsearch
logstash
kibana
DevOps
tomcat
jetty
activemq
elasticsearch
logstash
kibana
ruby官网: https://www.ruby-lang.org
ruby on rails: http://guides.rubyonrails.org/
rails on github: https://github.com/rails/rails
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。
openvpn提供两种类型的虚拟网络接口:TUN和TAP,tun用于建立IP隧道,tap用于建立以太网桥,这两种模式我们也称为路由模式和网桥模式。 TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
桥接是在一个子网上面创建一个虚拟的,广域的以太网技术,他相当于连通不同局域网之间的桥梁,桥接的优点是广播可以穿透vpn,允许依赖局域网广播的软件运行,桥接无需配置路由,可以和以太网上的任何协议工作,但是桥接的效率比路由模式要低,而且不容易扩展,使用桥接方式连接远端网络时,客户端被分配一个远端物理以太网的IP地址,从而能够和远端子网的其他机器进行通信,就像是连接在本地一样,
路由的优点是效率高可扩展,可以更好的调节MTU,路由模式的缺点是广播不能穿越vpn,仅支持ipv4,如果使用桥接模式,C/S两端都必须是tap,如果使用路由模式,C/S两端可以是tun也可以是tap,但是两端必须一致
1 |
reneg-sec 0 |
本来是要选择一个最新版本(当时最新版本是4.3),怎奈官方的yum仓库(https://yum.puppetlabs.com/)中没有最新版本;至少看起来没有4.3;有的是:
https://yum.puppetlabs.com/el/6.5/products/x86_64/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
facter-1.6..... ... facter-2.4..... ... hira-1... ... mcollective-2... ... mcollective-client-2... ... mcollective-common-2... ... puppet-3... ... puppet-dashboard- ... puppet-server-... ... puppetdb-... ... puppetserver-... |
https://yum.puppetlabs.com/el/6.5/PC1/x86_64/
1 2 3 4 5 6 7 8 |
puppet-agent-1... ... puppetdb- ... puppetserver-2. ... puppetlabs-release-pc1-... ... |
那么,该如何下载呢?
这里解释一下:
puppet 4之前(目前最新版本3.8)是打包在第一个地址下的,放在products目录;
puppet4是一个大的版本更新(目前是4.3)是打包在PC1那个目录下的,什么叫PC1? 即: Puppet Collection 参考: http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html
puppet4之前:
puppet- 不包含facter、ruby等,这些都是单独的rpm包
puppet-server- 包含一些puppet master需要的一些配置文件(及目录),如下:
puppet-dashboard: 是一个web管理页面
——
puppet4之后:
原来的puppet就变成了puppet-agent了,而且包含facter、ruby、mcollective等rpm包,就是所谓的(All in one)
puppetserver- 和原来的puppet-server不是一个东西,现在的puppetserver 是puppet master的替代品,并且以HTTP REST的方式提供提供服务,java实现的,默认需要内存大小2g,可以在 /etc/sysconfig/puppetserver 中修改
现在都流行动态码认证了,ldap这个认证领域的老大还是静态密码认证,显得有些过时了,这里试图修改认证部分逻辑已支持动态密码验证。
相关代码: servers/slapd/bind.c
编译:
注意: make install时默认是会去掉符号信息的;添加 STRIP=” 选项就不会去掉了(可能你也不需要make install)
开始gdb:
用户名:op->o_req_dn
密码在这里: op->o_request->oq_bind->rb_cred:
下一步就是要把密码修改,其中一部分拿到别的地方做动态密码验证,剩余部分继续给ldap来验证
ldap 验证逻辑:
转自:http://flychao88.iteye.com/blog/2187854
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大――每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000吨媒。如果你的火车可以全部装下,到目的地也会被全部烧光,一丁点也不剩。所以,很多人的第一反应都是觉得这个不太可能。
思考答题是:
Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you’re using a debugger, most likely things aren’t going your way. With that in mind, Delve should stay out of your way as much as possible.
上篇文章介绍了jsawk,由于一些不足,这里又发现了一个更好的工具: jq
安装:
1 |
yum install -y jq |
用法:
1 |
man jq |
体验一下:
项目主页: https://stedolan.github.io/jq/
指南: https://stedolan.github.io/jq/tutorial/
手册: https://stedolan.github.io/jq/manual/
1 2 3 |
# echo '[{"from":"1","to":"2"},{"from":"1", "to":"2"}]'|jq -r '.[]| .from + ":" + .to' 1:2 1:2 |
(注意: 这里连接的是字符串,数字是不能直接当做字符串进行连接的)
1 2 3 4 5 |
# echo '[{"ID":1,"Name":"N1"},{"ID":2,"Name":"N2"}]'|jq '(.[].ID|tostring) + ":" + .[].Name' "1:N1" "2:N1" "1:N2" "2:N2" |
这里通过圆括号来单独处理一部分,然后通过tostring将输出内容转换为字符串; 也可以通过 @text 实现:
1 2 3 4 5 |
# echo '[{"ID":1,"Name":"N1"},{"ID":2,"Name":"N2"}]'|jq '(.[].ID|@text) + ":" + .[].Name' "1:N1" "2:N1" "1:N2" "2:N2" |
1 2 3 |
# echo '[{"from":"1","to":"2"},{"from":"1", "to":"2"}]'|jq -r '.[]| join(":")' 1:2 1:2 |
1 2 3 |
# echo '{"a":"A", "b":"B"}'|jq -r 'to_entries[].key' a b |
等效于
1 2 3 |
# echo '{"a":"A", "b":"B"}'|jq -r 'to_entries[] |.key' a b |
等效于:
1 2 3 |
# echo '{"a":"A", "b":"B"}'|jq -r 'to_entries | .[] |.key' a b |
1 2 3 |
# openstack security group list -fjson|jq '.[]|select(.Name == "default")|.Name + ":" + .ID' "default:02dadaae-9d78-45ba-8fe5-496841b3c839" "default:1bfd33d7-6278-4718-9680-fd6f3328561d" |
错误的写法: (下面这个写法把Name和ID排列组合输出了)
1 |
openstack security group list -fjson|jq '.[].Name + ":" + .[].ID' |
如:
1 2 3 4 5 |
# echo '[{"ID":"1","Name":"N1"},{"ID":"2","Name":"N2"}]'|jq '.[].ID + ":" + .[].Name' "1:N1" "2:N1" "1:N2" "2:N2" |
1 2 3 4 5 |
# ceph status -f json|jq '(paths | select( .[-2:] == ["metadata", "ceph_version"])) as $path| getpath($path)' "ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)" "ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)" "ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)" "ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)" |
参考: https://stackoverflow.com/questions/25780807/can-i-use-a-relative-path-or-a-wildcard-in-jq
关联数组的key需要使用双引号,不能使用单引号:
1 2 |
# echo '{"a":"A", "b":"B"}'|jq -r '.["a"]' A |
1 2 3 4 |
# echo '{"a":"A", "b":"B"}'|jq -r ".['a']" jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1: .['a'] jq: 1 compile error |
1 2 |
# echo '{"a":"A", "b":"B"}'|jq '.a="AA"' -c {"a":"AA","b":"B"} |
1 2 |
# echo '{"a":"A", "b":"B"}'|jq '.a="AA"|.b="BB"' -c {"a":"AA","b":"BB"} |
在任何一个级别中查找指定字段:
1 |
echo '[[{"a":1}]]' | jq ´..|.a?´ |
构造新对象:
关于paths的用法: 1.3 版本中还没有paths:
这里的paths放在圆括号内,不影响输出,就好比bash中的圆括号是在单独子进程中执行一样,不影响当前的环境,同时,使用as使得圆括号的输出保存在变量中,不影响后续的输入; 这样,使得getpath所在环境中的 dot 依然是原始的输入
参考资料: https://linuxtoy.org/archives/jq.html
https://github.com/stedolan/jq/issues/885
在线测试: https://jqplay.org/jq?
注意事项: