关于RPM的%config和(noreplace)

这篇文章翻译自这里, 是一篇关于制作RPM包中的一个比较难于理解的地方。 不做开发的同学就不要看了。 RPM spec文件有个名为 %config 的宏,它可以标识配置文件, 这样在升级时用户对配置文件做过的修改就不会丢失。 没有它,用户千辛万苦修改过的配置文件会在升级过程中被覆盖。 %config也可以写成%config(noreplace),不过网上关于它的说明却屈指可数。 下面是关于这两者的一些实验,都是在RedHat 9的RPM(rpm-4.2-0.69)上进行的, 其他版本有可能不同。 RPM中的文件的制约条件有三个:1. 该文件在spec中如何标识(默认,%config或者%config(noreplace)); 2. 在rpm升级包中该文件是否被更新;3. 该文件是否被用户编辑过。 下表就是各个条件的组合结果。 文件标识 在RPM升级包中是否更新了? 旧版本文件未被用户编辑过 旧版本文件被用户编辑过 默认 No...

使用kubeadm在Red Hat 7/CentOS 7快速部署Kubernetes 1.7集群

前言 kubeadm是Kubernetes官方推出的快速部署Kubernetes集群工具,其思路是将Kubernetes相关服务容器化(Kubernetes静态Pod)以简化部署。kubeadm当前处于beta阶段,不建议生产环境使用(比如etcd单点)。使用kubeadm部署Kubernetes集群非常简单方便,本文记录了在Red Hat 7上用kubeadm部署一个安全的Kubernetes集群的全过程,CentOS 7部署过程与之类似。 如需kubeadm部署一个高可用的集群,可采用如下方式 kubeadm init --api-advertise-addresses=vip --external-etcd-endpoints=http://x.x.x.x:2379,http://x.x.x.x:2379,http://x.x.x.x:2379 --pod-network-cidr 10.244.0.0/16 注:–api-advertise-addresses 本身支持多个api service ip,但操作kubeadm join加入集群节点会失败, 所以对外服务只配置为一个vip。 部署实例 etcd Version: 3.0.17 kubeadm: v1.7.1 kubernetes: v1.7.1 Flannel: v0.8.0 Docker: 17.03.1-ce   准备工作 1. Red Hat Enterprise...

使用kubeadm安装kubernetes1.7

环境 下载kubernetes和安装 1 方案1使用阿里云yum镜像 2 使用国外服务器下载安装包 下载kubernetes镜像 配置kubelet 启动相关组件 创建集群 配置kubectl的kubeconfig 安装flannel master节点安装验证 node节点安装和加入集群 node节点安装验证 参考 自动化脚本已经上传到github: https://github.com/zhuchuangang/k8s-install-scripts/tree/master/kubeadm 0 环境 环境: 主机名 IP k8s-master 172.16.120.151...

使用docker-maven-plugin插件实现Docker构建并提交到私有仓库

使用Maven插件实现项目打包及Docker构建并提交到私有仓库 以下内容非教程,不适合对Docker及Maven不熟悉者使用 目标:Spring Boot项目打包成可执行的jar文件后,使用docker-maven-plugin(spotify)插件自动构建Docker后上传到阿里云Docker镜像仓库(其他仓库同理) 引用参考: docker-maven-plugin插件:https://github.com/spotify/docker-maven-plugin Maven提交服务密码加密:https://maven.apache.org/guides/mini/guide-encryption.html Maven的settings.xml:http://maven.apache.org/ref/3.3.9/maven-settings/settings.html 准备工作: 本机安装 Docker 1.9 Eclipse环境(本机使用STS) Maven环境 阿里云Docker仓库(其他Docker仓库都可以) 如果需要Maven项目部署,需要Maven私服() SecureCRT (其他终端皆可,仅用于启动Docker测试) 1、 构建Spring Boot项目 项目目录 2、 pom.xml文件中 加入docker-maven-plugin插件...

使用Draft简化容器应用的开发流程

Draft是微软Deis团队开源(见Azure/draft)的容器应用开发辅助工具,它可以帮助开发人员简化容器应用程序的开发流程。 Draft主要由三个命令组成 draft init:初始化docker registry账号,并在Kubernetes集群中部署draftd(负责镜像构建、将镜像推送到docker registry以及部署应用等) draft create:draft根据packs检测应用的开发语言,并自动生成Dockerfile和Kubernetes Helm Charts draft up:根据Dockfile构建镜像,并使用Helm将应用部署到Kubernetes集群(支持本地或远端集群)。同时,还会在本地启动一个draft client,监控代码变化,并将更新过的代码推送给draftd。 Draft安装 由于Draft需要构建镜像并部署应用到Kubernetes集群,因而在安装Draft之前需要 部署一个Kubernetes集群,部署方法可以参考kubernetes部署方法(注意minikube的支持还有问题,暂时不要使用) 安装并初始化helm(需要v2.4.x版本,并且不要忘记运行helm init),具体步骤可以参考helm使用方法 注册docker registry账号,比如Docker Hub或Quay.io 配置Ingress Controller并在DNS中设置通配符域*的A记录(如*.http://draft.example.com)到Ingress IP地址。最简单的Ingress Controller创建方式是使用helm:...

Harbor的搭建(vmware企业级docker镜像私服)

1、下载harbor,地址https://github.com/vmware/harbor 2、进入harbor-master/Deploy目录,修改harbor.cfg文件,主要修改以下信息 2.1、hostname =10.10.20.202 (这个是harbor所在服务器的ip,不能写127.0.0.1) 2.2、修改邮箱相关信息 3、执行./prepare命令 4、添加/etc/sysconfig/docker文件,文件内容如下: OPTIONS=”–insecure-registry 10.10.20.202″ 5、修改/usr/lib/systemd/system/docker.service文件 5.1、新增一行,EnvironmentFile=-/etc/sysconfig/docker,该文件只有一行内容,OPTIONS=”–insecure-registry 10.10.20.202″,如果/usr/lib/systemd/system/docker.service文件中不增加EnvironmentFile=-/etc/sysconfig/docker这行,下面对ExecStart的修改是不生效的。 5.2、修改一行,ExecStart=/usr/bin/dockerd $OPTIONS 为什么要修改这个配置文件呢?–insecure-registry代表本地镜像库,修改了以上配置文件后需要重启docker服务,此时docker login时,将连接指定的本地镜像库。 如果不修改这个配置文件,则登录镜像私服时(docker login 10.10.20.202)会抛出如下错误 Error response from daemon: Get...

docker 镜像仓库 Harbor 部署 以及 跨数据复制

docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理UI,可基于角色访问控制, AD/LDAP 集成,日志审核等功能,完全的支持中文。 Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor...

搭建基于Selenium+TestNG+Maven+Jenkins+SVN的Web端UI自动化测试环境

一、 创建Maven项目,下载Selenium和TestNG的依赖(依赖可以理解为你要用到的jar包)。 1.     问题。 为什么要创建Maven项目呢? 答:Maven项目可以方便的管理依赖,通俗的讲,你需要的jar包,写到POM.xml文件中,Maven可以自动下载。省却了你先把jar文件放进libs,再BuildPath这一步。同时呢,其他项目如果也用到这些jar包,Maven会自动从本地仓库中直接取出来,不用再次下载。 2. 步骤。 1.  File-New-Project… Xr-原创 2. Maven Project- Next Xr-原创 3. Next Xr-原创 4. 选择maven-archetype-quickstart-Next Xr-原创 5. 输入Group...

testNg+maven +jenkins进行selenium自动化集成

摘要 上一次搞定了appium+python+jenkins的自动化集成,但是感觉对于jenkins的集成还是有很多不太理解的地方,所以今天抽空研究了下使用testNg+maven+selenium+jenkins的自动化集成。 正文 准备环境 首先我们新建一个maven的工程,并且在pom.xml中配置好我们依赖的一些jar包 <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.46.0</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.6</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-api</artifactId> <version>2.46.0</version> </dependency> </dependencies> 1 2 3...

Docker 2375 端口入侵服务器

相信了解过docker remote API的同学对2375端口都不陌生了,2375是docker远程操控的默认端口,通过这个端口可以直接对远程的docker daemon进行操作。 当$HOST主机以docker daemon -H=0.0.0.0:2375方式启动daemon时,可以在外部机器对$HOST的docker daemon进行直接操作: docker -H tcp://$HOST:2375 ps 好,说说如何“入侵”,怎么通过这个端口入侵宿主机呢? 这个应该要从几个点说起吧: 1. docker对user namespace没有做隔离,也就是说,容器内部的root用户就是宿主机的root用户,一旦挂载目录,就可以在容器内部以宿主机的root用户身份对挂载的文件系统随意修改了。 docker服务拥有很高的执行权利(相当于root),并且在docker用户组下的普通用户不需要任何其他验证就可以执行docker run等命令。 暴露的docker remote API端口如果没有启动ssl验证的话,任何能连通到这台docker宿主机的的机器都可以随意操作这台docker宿主机的docker daemon(docker run、docker ps、docker...