git checkout 检出命令

检出命令(git checkout) 是git最常用的命令之一,同时也是个很危险的命令,因为这条命令会重写工作区: 用法一:git checkout [-q] [<commit>] [–] <paths>… 用法二:git checkout [<branch>] 用法三:git checkout [-m] [[-b|–orphan] <new_branch>] [<start_point>] 上面列出的第一种用法和第二种用法的区别在于,第一种用法在命令中包含路径<paths>.为了避免路径和引用(或者提交id)同名而发生冲突,可以在<paths>前面用两个连续的短线(减号作为分割) 第一种用法的<commit>是可选项,如果省略则相当于从暂存区进行检出(检出的默认值是暂存区)。 第一种用法(包含了路径<paths>的用法)不会改变HEAD头指针,主要是用于指定版本的文件覆盖工作区中对应的文件。如果省略<commit>,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中对应的文件. 第二种用法则会改变HEAD头指针,主要用作切换到分支,如果省略<branch>则相当于对工作区进行状态检查。 第三种用法主要是创建和切换到新的分支(<new_branch>),新的分支从<start_point>指定的提交开始创建。新的分支和master分支没有什么实质的不同,都是在refs/heads命名空间下的引用。 具体示例: git checkout branch  检出branch分支,要完成上图的三个步骤,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区 git checkout  汇总显示工作区,暂存区与HEAD的差异 git checkout HEAD 同上 git checkout — filename 用暂存区中filename文件来覆盖工作区中的filename文件。相当于git add filename的撤消,这个命令很危险,因为对于本地的修改会悄无声息的覆盖 git checkout — .  或写作 git checkout .  Read more…

python中的subprocess.Popen()使用

python中的subprocess.Popen()使用 从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值。 subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* 一、subprocess.Popen subprocess模块定义了一个类: Popen class subprocess.Popen( args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) 各参数含义如下: args: args参数。可以是一个字符串,可以是一个包含程序参数的列表。要执行的程序一般就是这个列表的第一项,或者是字符串本身。 subprocess.Popen([“cat”,”test.txt”]) subprocess.Popen(“cat test.txt”) 这两个之中,后者将不会工作。因为如果是一个字符串的话,必须是程序的路径才可以。(考虑unix的api函数exec,接受的是字符串 列表) 但是下面的可以工作 subprocess.Popen(“cat test.txt”, shell=True) 这是因为它相当于 subprocess.Popen([“/bin/sh”, “-c”, “cat test.txt”]) 在*nix下,当shell=False(默认)时,Popen使用os.execvp()来执行子程序。args一般要是一个【列表】。如果args是个字符串的 话,会被当做是可执行文件的路径,这样就不能传入任何参数了。 注意: shlex.split()可以被用于序列化复杂的命令参数,比如: >>> shlex.split(‘ls ps Read more…

docker和harbor启动失败解决

今天启动harbor时启动失败, 有几个问题, 记录一下: 重启docker,报错: msg=”Error starting daemon: layer does not exist” 解决:只能是清空docker数据目录了,实际上官方还提供了一个略微安全的删除脚本:

将该脚本保存到本地后运行sh fix.sh /data/docker,清空/data/docker目录,重启docker服务 docker-compose启动harbor, harbor-log启动失败 Changing password for root. sudo: unable to change expired password: Authentication token manipulation error sudo: Account or password is expired, reset your password and try again 解决: 参考:https://kb.vmware.com/s/article/79497 重新拉取镜像:docker pull goharbor/harbor-log:v1.10.3 修改配置文件,重启成功 Read more…

CentOS 7 上使用Certbot申请通配符证书

在CentOS7上安装Certbot有三种方式: 使用Certbot官方提供的对应平台的RPM包安装 使用Certbot官方的提供的certbot-auto安装 使用pip安装Certbot,因为Certbot是Python程序 本文使用虚拟环境,使用pip安装Certbot 创建虚拟环境:可参考https://meaninglive.com/2020/06/15/%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83-ansible-python3-and-virtualenvs-on-centos-and-rhel/ 创建所需环境:

用如下命令申请证书 注意替换成自己的域名;执行该命令时不依赖nginx:

介绍下相关参数: certonly,表示安装模式,Certbot 有安装模式和验证模式两种类型的插件。 –manual 表示手动安装插件,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择 -d 为那些主机申请证书,如果是通配符,输入 *.devapi.haoshiqi.net(可以替换为你自己的域名) –preferred-challenges dns,使用 DNS 方式校验域名所有权 –server,Let’s Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定。 输入应急邮箱,证书到期前会有邮件提示 如果想跳过输入邮箱的步骤,可在申请命令后面加上:

之后出现如下提示:要公开记录申请该证书的IP地址,是否同意?不同意就无法继续。 同意之后,出现如下提示,第一个“Press Enter to Continue”处直接回车,第二个“Press Enter to Continue”不要按回车:

为DNS解析增加TXT记录 进入自己域名的DNS记录管理页面,增加两条TXT记录,多数情况下,仅需在域名(Name)处填入_acme-challenge,在内容(Target)处填入上一步Certbot生成的内容即可(记得填写两个,多个文本记录之间以换行符(Enter键)分隔),不同DNS提供商处可能会略有不同,根据实际情况修改, 如果是www.name.com的域名的话, 就分别写两条相同主机名的记录, 填写不同的记录 稍等片刻,等TXT记录解析生效。查看是否生效的命令和生效后的查询结果如下: host -t Read more…

自签名证书详解

总结下来,其实生成证书就两句话:

  ———————————————- 有一个shell脚本来自动生成证书:

另一个脚本:

  参考:https://www.fullstackmemo.com/2018/05/10/openssl-gen-https-self-signed-cer/ nginx配置:

  —————证书知识补充——————————- 自签名证书 + Nginx 实现 HTTP 升级 HTTPS 很多内网平台在开发时候并没有考虑 HTTPS,想要从 HTTP 升级到 HTTPS 一般有两种方法:一种是更新所有相关前后端代码;另一种是基本不改变代码,用 Nginx 把 HTTPS 反向代理到 HTTP 接口。第一种方法工作量有点大,本文介绍下第二种方法,当然首先要做的是生成自签名证书。 准备工作 内网 环境受影响的是 软件安装升级 和 证书申请,所以需要 制作本地 yum 和 自签名证书,自签名证书稍后讲,制作本地 yum 库可参考链接内容, HTTPS 和 CA 基础知识 查看这里 。 制作本地 yum 库,为了自动处理软件之间的依赖关系,一般都会用 yum 等软件包管理器来安装更新软件,默认 yum 是从互联网获取各种软件包的,内网环境就需要制作本地 yum Read more…

内网一键生成 LetsEncrypt HTTPS证书

HTTPS当前越来越重要,所以经常会有公司去花钱买,我们也一样,有时候确实需要https,但是收费的用不起,所以打起了免费的主义。 LetsEncrypt是不错的选择,但是我们如果在内网该如何克服呢,没错,使用ngrok。 一键生成。 ngrok是在内网用户可以获得公网访问的一个非常棒的软件。 找一台有公网地址的机器 我们找到了假设是公网A 找一个域名,用于传输流量 我们找到了,假设是ops.ac.cn,注意,ac.cn是域名哦,虽然是二级域名,但是ac.cn是中科院相关的域名机构。 而且我们要设置 泛域名 A记录到 公网A 搭建ngrok 如下脚本一气呵成, 胆儿大的可以直接试试。最终的目录是在/usr/local/ngrok下面

  ngrok服务启动

客户端连接

  ngrok出现”bad certificate”的原因: 1. 看准了, server_address居然是直接使用的主域名, 2. 编译出来的ngrok程序一定是使用和server相同的证书产生的。如果server编译出来的在本地运行的时候出现“segment fault“,那么可以尝试着将/usr/local/ngrok放到本地,然后运行编译客户端的几行代码重新编译即可。 3. 客户端启动的配置文件中,trust_host_root_certs选项,除非你的证书是第三方的,否则就乖乖的使用false吧 ssl脚本执行目录:/root/ssl/ www目录: /root/www/challenges , python -m SimpleHTTPServer 80 sendemail放置地方:/root/ssl/sendemail HTTP服务器准备 如果胆儿大,直接执行如下的内容即可

生成的时候会要求输入一些东西,比如国家,省会,城市,公司名称,common name最重要,这个就是域名哦。 生成完成后,会自动打包发送邮件。 转自: https://blog.csdn.net/vbaspdelphi/article/details/53185943 可参考:https://learnku.com/articles/19999

How To Setup DNS Slave Auto Configuration Using Virtualmin/Webmin

实现步骤 由于bind主从集群安装完成后, 用webmin管理的话, 在新创建主区域后, 无法自动同步到从节点, 现在找到解决办法了 用Virtualmin去做主dns,去管理slave dns 在Post-Installation Wizard界面配置主从节点信息 在server index里将从节点加入, 用户名密码可以用webmin的主帐号 admin 在bind dns管理里在cluster slave servers里   加入dns slave cluster改变的文件还是蛮多的: 改变文件: /etc/webmin/virtual-server/config /etc/webmin/bind8/config /etc/webmin/servers/1592326172.serv /etc/named.rfc1912.zones  /etc/named.conf 所以最好调cgi接口去做改动 完了以后, 就可以主从自动同步了 其中修改完的virtual-server/config文件是这样的:

ansible-playbook实现 ansible-playbook是这样写的: bind.yml: 其中配置virtual server时, 一开始本来想调用uri,但是发现步骤太多麻烦而不生效,后来就直接用模板来做了

templates/virtual-server-config.j2模板:

defaults/main.yml

    参考以下文章: Introduction This tutorial will Read more…

创建虚拟环境: Ansible, Python3, and Virtualenvs on CentOS and RHEL and MacOS

要为ansible运行创建一个最新的虚拟环境, 以下是步骤: 下载最新的python3.8.3安装包:

解压:

创建虚拟环境目录: mkdir /root/.python_env 编译安装python

配置一下pip国内源, 以增加安装速度

安装virtualenvwrapper

安装过程中报错: ImportError: No module named ‘_ctypes’, 解决方法是(参考https://stackoverflow.com/questions/27022373/python3-importerror-no-module-named-ctypes-when-using-value-from-module-mul):

然后重新编译安装python3 定义环境变量

  创建ansible虚拟环境:

  The prompt change tells us we’ve successfully made, and activated, our first python 3 virtualenv. Validate it is configured as Read more…

ansible sysctl模块使用

修改系统内核参数,可以使用ansible sysctl模块来做批量修改:

测试发现, 运行很慢, 基本一条一秒, 要是这样, 还不如直接拷贝过去算了, 此模块适合修改条目比较少的选项

批量插入/替换整段代码到指定位置

需求是用ansible来修改nginx配置文件,添加代理gotty打开终端的逻辑,如下:

  map.txt:

location.txt:

注意: 需要插入/替换的新内容:map.txt和location.txt 开始和结束的匹配字段也要写上去(Bstr和Estr)