- 博客(405)
- 资源 (2)
- 收藏
- 关注
原创 Google Maven Replacer Plugin插件详解
在Maven项目的构建过程中,对于Maven标准预定义变量,或者<properties>中定义的变量,都可以被实际的值替换。但是,如果要在构建的过程中替换文件中的任何指定字符串(这里成为tokens),就需要使用Google为Maven提供的replacer插件。Google的replacer插件原名为maven-replacer-plugin,2012年以后,为了遵循Mave...
2019-12-28 00:02:39
6199
1
原创 Apache Maven Resources Plugin插件详解
Apache Maven Resources Plugin是Apache Maven团队提供的官方核心插件,能够将Maven项目中的各种资源文件复制到指定的输出目录中。1. 在Maven项目中的资源可以分为两类main资源,指位于src/main/resources路径下的资源文件 test资源,指位于src/test/resources路径下的资源文件2.Apache Maven ...
2019-12-20 23:04:14
10864
2
原创 Java运行时的shutdown hook
Hook作为一种回调方式,广泛应用于软件中。从Java 1.3开始,JVM的Runtime也提供了hook的机制,即shutdown hook。提供给出shutdown hook,在退出JVM的时候,能够执行shutdown hook中定义的必要操作。1. Runtime的Shutdown Hook的特性可以注册多个hook,每个都是一个独立的线程 如果有多个Hook,Hook线程之...
2019-11-24 22:14:00
1820
原创 CPython的命令行与python文件的执行
在Windows系统中,下载并安装了Python解析器后,就可以运行Python文件了。可以使用任何编辑器,编写并保存Python文件。Python运行时提供了多种执行Python文件的方法。1. 编写并保存Python文件myfoo.py如下(没有入口__main__函数):def hello(): print("Xiangbin HAN")打开cmd,cd到文件所在目...
2019-10-24 23:30:26
1654
原创 Java 7的javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake异常分析
Java7通过httpsURLConnection建立HTTPS连接,异常如下:javax.net.ssl.SSLHandshakeException: Caused by: Remote host closed connection during handshake Caused by: SSL peer shut down incorrectly解决方案似乎是明显的,客户端需要提高版本...
2019-09-24 17:29:53
6331
原创 Docker容器启动时的第一个进程的设置总结
实际生产中,Docker容器创建(或启动)时,默认即启动必要的服务进程,这种用法非常常见。容器中默认即启动的服务往往作为容器的第一个进程启动。如docker run命令创建Tomcat容器时即启动容器中的Tomcat服务。Docker提供了有多种方式实现该特性。1.执行一个带参数的命令创建容器时,如果希望默认即执行一个带参数的命令mycommand myparam,利用Dockerfile...
2019-08-01 00:06:11
5888
原创 SELinux检查与Apache HTTP服务器的文件访问典型错配案例及解决
在CentOS 7.5配置Apache HTTP服务器后,看到如下错误:Permission denied查看Apache HTTP服务器的错误日志/var/log/httpd/error_log如下:[Wed May 06 23:00:54 2019] [error] [client 127.0.0.1] (13) Permission denied: access to /www...
2019-07-16 00:14:49
766
原创 SELinux检查与Nginx的反向代理的典型错配案例及解决
在CentOS 7.5配置并启动Nginx后,却总是看到如下异常Permission denied查看Nginx的错误日志如下:[root@mylocal ~]# grep Permission /var/log/nginx/error.log2019/05/30 03:51:21 [crit] 4331#0: *6 " connect() to 127.0.0.1:8080/re...
2019-07-08 23:12:49
2220
原创 Linux资源的SELinux context详解
Linux操作系统中的每个资源(如进程、文件描述符、文件、网络等),也被称为SELinux对象,都拥有一个特别的security label,也被称为SELinux label,或SELinux context,以表示该对象能够执行的permissions和operations。这是一个标识符,从Linux系统的细节中抽象出,只聚焦于系统资源的安全属性。通过使用SELinux context,就可...
2019-06-30 23:45:55
6071
1
原创 SELinux的运行模式与安全策略详解
1. SELinux在Linux系统中的运行状态可以划分为如下3种运行模式(run modes)enforcing默认模式,SELinux会根据安全策略对到达的访问请求进行检查。permissiveSELinux假装在进行安全策略的检查,甚至会将access denial写入日志文件,但实际不会拒绝任何访问请求。这种模式适合开发调试阶段。disabled强烈不建议这种模式。...
2019-06-26 23:43:33
2253
原创 RHEL/CentOS 7中的SELinux概述
Security Enhanced Linux (SELinux)是一个访问控制服务,基于安全策略加强对系统资源的访问控制。在系统安全的基础上,解决“May <subject> do <action> to <object>”的访问控制问题。SELinux是一个Linux内核的扩展模块,通过LSM(Linux Security Module)框架在链接时被加...
2019-06-21 00:05:22
1197
原创 RHEL/CentOS 7中的iptables.service与firewalld.service概述
在RHEL/CentOS 7中,曾经的iptables.service/ip6tables.service已经被firewalld.service所替代。但两者在本质上是一致的,都是通过iptables工具操作Linux kernel的netfilter,实现对IP数据包的过滤。两者只是在实现上有如下不同:iptables/ip6tables的配置默认存储到/etc/sysconfig/ipt...
2019-06-17 22:36:37
3632
1
原创 RHEL/CentOS 7中的网络暨network.service与NetworkManager.service详解
在RHEL/CentOS 6及以前的版本中,网络功能是通过一系列网络相关的脚本文件实现,如/etc/init.d/network文件,及如下/sbin/if*文件等。[root@myserver ~]# ll /sbin/if*-rwxr-xr-x. 1 root root 3056 Apr 11 2018 /sbin/ifcfg-rwxr-xr-x. 1 root root 820...
2019-06-13 21:39:37
15711
原创 Docker daemon及容器实例的DNS配置详解
Linux系统中,DNS解析器是一组C库的进程,用以访问DNS服务器。DNS解析器通过/etc/resolv.conf配置文件给出要访问的DNS服务器,配置文件修改后立刻生效,但系统重启后/etc/resolv.conf配置文件的内容回滚到初始状态。1. Docker daemon的DNS配置Docker daemon的配置有两种方式,一种是通过/etc/docker/daemon.jso...
2019-06-05 23:48:08
15269
2
原创 RHEL/CentOS 7中通过systemd service持久化网络命名空间
对于Linux系统中创建的定制的网络命名空间,目前没有理想的方法使其持久化,即能够在Linux系统启动时应用定制的网络命名空间的配置。本文创建了一个systemd service,通过在Linux系统启动时执行其ExecStart脚本,从而实现了每次Linux系统启动时对定制的网络命名空间的配置。创建一个systemd service的过程如下:1. 定义一个可执行的脚本文件,用以配置网络...
2019-06-04 23:44:11
952
原创 RHEL/CentOS 7的systemd target及其中的multi-user.target
在RHEL/CentOS 6中,使用SysV init和Upstart,通过预定义一组Runlevels(从0到6)表示不同的执行模式。[root@myhost app]# ll /etc/rc.d/total 4drwxr-xr-x. 2 root root 148 May 28 05:40 init.d-rwxr-xr-x. 1 root root 503 May 27 11:29...
2019-06-03 23:18:35
14053
原创 RHEL/CentOS 7的systemd及其systemctl命令概述
systemd是Linux的系统服务管理器,也是默认的初始化系统,并且向后兼容SysV初始化系统的init脚本,能够在启动Linux系统的时候并发启动系统服务。systemd的配置文件/etc/systemd/system.conf。systemd提出了units的概念,一个unit代表着一种systemd管理的系统资源。每个unit都是通过unit配置文件定义的。一个unit的类型是由其un...
2019-05-31 00:23:12
2197
1
原创 RHEL/CentOS 7中Nginx的systemd service
在线安装预构建的Nginx,默认会创建Nginx的systemd服务,对应的服务文件是/usr/lib/systemd/system/nginx.service。文件内容如下:[Unit]Description=The NGINX HTTP and reverse proxy serverAfter=syslog.target network.target remote-fs.targe...
2019-05-27 23:28:01
1471
原创 RHEL/CentOS 7的kernel tunables及其sysctl命令概述
众所周知,Linux kernel是单体的设计(非微内核的设计),但是在编译时加入了大量可选的、附加的模块modules。这样,在启动Linux kernel时,就可以通过kmod动态选择加载不同的模块(modules),而且模块还可以设置不同的参数。1. Linux kernel通过tunables设置Linux系统的启动行为,对应/proc/sys路径下的虚拟文件系统。根据Linux ...
2019-05-26 21:12:29
3888
原创 RHEL/CentOS 7的FirewallD及其firewall-cmd命令概述
FirewallD是RHEL/CentOS 7+的一个防火墙服务的守护进程,对应系统的firewalld.service。其与iproute2软件包的iptables/ip6tables的关系如下,实质上都是通过iptables模块配置内核的netfilter模块:在RHEL/CentOS 7中,iptables.service/ip6tables.service已经被firewalld....
2019-05-14 23:10:35
2709
原创 Docker容器实例通过非默认的网络命名空间访问外部网络
Docker为所有容器实例建立了独立的网络命名空间中,并通过docker0桥接到宿主机的默认网络命名空间。如果容器实例要通过宿主机上的一个定制网络命名空间oam,而非宿主机的默认网络命名空间,访问外部网络,示意图如下所示。对于上述图示,Docker宿主机上的配置比较复杂,大致可以归纳为如下几步。1.创建并配置虚拟网卡veth0/veth1的IPs;2.配置默认网络命名空间...
2019-05-06 00:32:16
701
原创 NAT及跨网络命名空间的网络地址转换
NAT (Network Address Translation)即网络地址转换,最初的目的是在路由器上,修改IP报文头中的源地址(source address)或目标地址(destination address),以转发报文。通过NAT,实现了私有子网中与公共网络的连接,也间接延续了IPv4的生命,推迟了IPv6的到来。1. NAT可以分为如下几类1) Source NAT (SNAT)...
2019-05-01 00:00:20
1174
原创 虚拟网络设备及其在Linux网络命名空间中的应用
Linux的网络命名空间用以隔离Linux主机上的不同的网络环境。但是有时候,我们又需要从一个网络命名空间中访问另一个网络命名空间中的网络,这就需要用到虚拟网络设备。虚拟网络设备(Virtual Network Device)是一种抽象的网络设备,类似网络管道,用以在不同的网络命名空间之间建立传输隧道,也可以用以创建网桥以连接到多个其他网络命名空间。虚拟网络设备在Linux中的实现就是veth...
2019-04-29 23:43:31
668
原创 Linux内核的网络命名空间的概念及常用命令
命名空间(namespace)的概念已经非常常见了,通常用以区分不同范畴内的各种资源。在Linux内核中,命名空间用以隔离多种Linux内核的资源,如进程、进程间通信、网络、挂载路径等。通过Linux命名空间,能够把Linux有限的内核资源(进程号、通信资源、网络资源等)合理分配给各个用户的进程,而不互相干扰。Linux的网络命名空间(network namespace)用以在一个Linux主...
2019-04-29 23:29:23
1945
原创 基于iptables的Docker网络隔离与通信详解
Docker提供了bridge, host, overlay等多种网络。同一个Docker宿主机上同时存在多个不同类型的网络。位于不同网络中的容器,彼此之间是无法通信的。Docker容器的跨网络隔离与通信,是借助了iptables的机制。我们知道,iptables的filter表中默认划分为IPNUT, FORWARD和OUTPUT共3个链,详情请参考 iptables及其过滤规则。Docke...
2019-03-27 17:26:04
20918
8
原创 iptables及其过滤规则
1. iptables是Linux内核的一个模块,用以管理对网络设备(网卡)的访问,如路由过滤、端口转发、NAT等,root用户可以通过iptables配置操作系统的路由表。在当前的主流Linux发布系统中,都默认安装了iptables。为了适应IPv6,事实上iptables用以管理IPv4数据包的过滤和地址转换,ip6tables用以管理IPv6数据包的过滤和地址转换。后文将其统一称为ip...
2019-03-19 00:01:07
5347
原创 OpenStack的Telemetry Data Collection服务概述
Telemetry项目是OpenStack的一个独立项目,专门用于采集其他服务的数据,用于计量。Telemetry提供了若干个软件组件,形成若干个服务的集合。服务之间通过OpenStack的消息总线互相通信。服务采集的数据可以发布给不同的存储或分析系统,默认发送给Gnocchi数据库。1. Telemetry功能轮询OpenStack服务,以计量服务的数据 监控服务的通知,以收集服务的事...
2019-02-28 23:34:02
1225
原创 Docker容器实例的网络与通信
一个Docker容器实例,无论使用哪个类型的网络驱动器(包括定制的网络插件),从容器内部来说网络都是透明的,即不区分自己是在哪种类型的网络中。而只知道自己的网络信息,如IP, Gateway, iptalbes, DNS等。默认创建的容器实例,不会对网络外暴露任何端口,只能供同属一个网络中的其他容器实例访问。创建容器时,可以通过-p|--publish暴露指定端口,如-p 8080:80表示将...
2019-02-18 22:21:16
915
原创 TestNG中在一个suite标签中的多个test标签之间共享中间数据的方法
在TestNG的一个测试suite中,可能存在多个<test>,那么在不同的<test>标签内部的测试类,其之间如何共享动态中间数据呢?比如在一个<test>中的一个测试类Producer中,一个测试方法产生了中间数据groupIds;而在后续另一个<test>中的一个测试类Consumer中,一个测试方法要访问这个中间数据。测试套件如下:...
2019-02-14 22:21:09
3120
1
原创 TestNG中在一个test标签中的多个测试类之间共享中间数据的方法
在TestNG的一个测试suite中,在一个<test>标签中可以包含多个测试类,那么这些测试类之间如何共享动态中间数据呢?比如在一个测试类Producer中,一个测试方法产生了中间数据groupIds;而在后续测试的另一个测试类Consumer中,一个测试方法要访问这个中间数据。测试套件如下:...<test> <classes> &l...
2019-02-14 21:33:28
2680
3
原创 Docker容器支持IPv6的方法
1.设置Docker Engine支持IPv61) 启动Docker Engine时即开启对IPv6的支持默认启动时Docker Engine只支持IPv4。启动Docker Engine时,指定--ipv6选项即可支持IPv6。2) 对于已经启动的Docker Engine开启对IPv6的支持配置/etc/docker/daemon.json文件如下。{ "ipv6...
2019-02-13 23:08:26
38120
3
原创 TestNG中的@Factory与@DataProvider的执行比较
TestNG中@Factory与@DataProvider的功能大相径庭,但是在多次执行的问题上常常理不清。1.@DataProvider首先,必须明确,使用@DataProvider修饰的方法,只负责提供测试数据,而且是测试执行前就确定了的静态数据。该方法必须被其他测试方法引用才意义。其次,必须强调,使用@DataProvider修饰的方法,其返回的数据类型必须为Object[][]...
2019-02-13 22:52:59
1645
原创 Kubernetes集群内外的网络连通性
Kubernetes集群中包含多种对象,如Node, Container, Pod, Service等,这里主要总结Kubernetes集群中的各种对象的网络连通性。大致可以分为Kubernetes集群内部的各对象之间的网络连通性,以及Kubernetes集群内部的对象对集群外部的网络可见性。对于前者,又可以细分为Pod内部的多个容器实例之间的网络连通性、不同Pods之间的网络连通性、Pod与...
2019-01-29 22:54:18
4494
1
原创 Kubernetes集群中的重要对象(资源)一览
Kubernetes对象也被称为资源,就是Kubernetes集群中的各种可持久化实体,如Deployment,Pod,Service等。从Kubernetes集群的角度,任何Kubernetes对象都有如下两个侧面:spec,表示Kubernetes对象期望的状态,往往通过YAML配置文件给出 status,表示Kubernetes对象在当前集群中实际的状态,往往通过资源的Control...
2019-01-25 00:00:08
2670
原创 OpenStack Heat简介
OpenStack Heat是一个Python软件项目,是OpenStack Orchestration计划的主要落地项目。OpenStack Heat是OpenStack提供的一个REST服务。能够基于一个声明式的模板,通过装配引擎装配组合若干个云应用。OpenStack Heat主要管理云基础设施,而非应用实例。还可以通过安装插件,扩展OpenStack Heat的功能。1. Open...
2019-01-16 23:45:23
1361
原创 Kubernetes及其Master/Node节点
Kubernetes是CNCF旗下的一个开源软件系统,用以在集群(跨多主机)中管理容器化的应用,提供应用的部署、维护和伸缩等。应用打包为与运行环境无关的容器镜像(Kubernetes中称为Deployment),然后Kubernetes将其部署到集群中运行的主机上(通常是虚拟机),并以容器实例的形式运行,成为供用户访问的应用。Kubernetes集群中的主机(也被称为资源,通常是虚拟机)可以分...
2019-01-14 23:54:46
4790
原创 suite-files及其在编制TestNG测试计划中的应用
熟悉TestNG的朋友们往往都知道testng.xml文件,testng.xml文件是我们定义测试计划的配置文件,其中可以进行各种复杂的配置。但是,当我们有多个testng.xml文件时(当然文件名不同),如何能够组合这些配置文件呢?这里介绍一个特别但是却没有在TestNG文档中提及的suite-files,也被称为Suite of Suites。首先,组合若干个testng.xml配置文...
2018-12-29 22:51:42
1855
1
原创 Jersey中对JSON数据的处理及JSON数据与Java对象之间的绑定
Jersey最初只是JAX-RS标准的实现之一,目前已经成为JavaEE的参考实现Glassfish的组成部分。Jersey本身不提供完整的JSON数据处理及Java对象绑定,而是以Jersey Media扩展模块的形式,集成第三方JSON处理框架的实现。1. JSON with padding Jersey唯一提供的对JSON-P的不完整支持。通过@org.glassfish.jers...
2018-12-28 23:12:15
2342
原创 JavaEE的JSON API规范JSON-P/JSON-B
从JavaEE 7开始,一个专门用于处理JSON数据的API被纳入JavaEE规范体系,这就是Java API for JSON Processing (JSON-P) 。在JavaEE 8中,又在此基础上提供了Java API for JSON Binding (JSON-B)。至此,与XML数据类似,JavaEE提供了完整的处理JSON数据的APIs。目前,Glassfish为JSON-P...
2018-12-28 20:57:08
3184
原创 Rapidoid及其容器化的Web平台
Rapidoid首先是一个Java的Web框架,提供了一系列Web应用开发相关的类库。其次,Rapidoid还是一个能够提供Web服务的容器化的平台,即可以直接使用Rapidoid构建容器实例,提供HTTP服务。本文详细介绍其作为Web平台的用法。关于Rapidoid开发框架,详见其文档。Rapidoid平台实际上就是一个Docker容器,可以作为HTTP服务器直接发布静态Web资源,也可以部署...
2018-12-26 23:09:12
1399
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人