在 Nginx 1.25+ 中开启 HTTP/3

对于Nginx来说,在编译时需要配置对于的SSL库,不管是HTTP3.0还是HTTP2.0,始终都要基于HTTPS,而加密算法这块主要有OpenSSL来提供,而BoringSSL是谷歌创建的OpenSSL分支,用于支持TLS1.3的UDP协议0-RTT数据传输的加密算法(可以理解成TLS 1.3是标准协议,BoringSSL是实现工具),BoringSSL的一些特性会在合适的时机同步给OpenSSl。Nginx从1.25.0开始支持QUIC和HTTP/3协议。此外,从1.25.0开始,Linux二进制包中提供了QUIC和HTTP/3支持 QUIC和HTTP/3支持是实验性的 安装BoringSSL证书 官方推荐了3种SSL库,参考文档https://nginx.org/en/docs/quic.html 我这里使用BoringSSL 使用 BoringSSL 编译 NGINX,需要满足以下要求: gcc 版本大于6 编译BoringSSL 需要go环境支持 cmake 3版本以上   升级cmake: workon py_env #yum install ninja-build pip install -U cmake   升级gcc至8: 添加源:

yum install devtoolset-8 激活:source /opt/rh/devtoolset-8/enable 此时通过gcc –version命令可以看到,gcc版本已经变成8.x.x,值得注意的是这仅仅在当前bash生效,如果需要永久生效,可以请自行添加环境变量。   golang安装: wget https://golang.google.cn/dl/go1.21.4.linux-amd64.tar.gz tar -C /usr/local/ -zxvf go1.21.4.linux-amd64.tar.gz   拉取BoringSSL源码 git Read more…

PaaS私有化产品部署离线安装源适配问题解决指南

前言 最新在适配我司产品在信创操作系统各个版本上的安装,在踩了很多坑后, 总结出了一套有效的适配流程,在此记录一下。 由于信创国产化操作系统都是基于openEuler系统或Centos系统来的,包括系统软件包名字,release号等都修改了,在信创服务器上安装产品其实最大的工作量是需要适配跟系统相关的软件,和编译arm64版的二进制文件,尤其前一个比较难弄,因为有很多信创系统和发行版本,我们的目标是, 利用一台x86_64或者arm64架构的机器来构建所有的软件源,基本思路就是: 由于官方没有信创docker镜像,需要自己做,首先需要制作信创os docker镜像的流程是: 启动一个容器做构建环境(如:centos) –> 配置官方源 –> 通过yum –installroot=… 来创建基本的系统目录 –> 通过tar打包系统 –> docker import做成镜像 docker run起来信创系统docker镜像用作构建环境—> 配置官方源 —通过repotrack下载–> 打包成nexus 适配细节 首先是制作os docker镜像,下面是制作脚本:

脚本逻辑解析: 由于一些信创操作系统中安装软件时需要认证机制,所以需要提前将认证放入对应目录(可以从安装好的os虚机中获取),此认证文件经过测试可以用到其它发行版本上,所以以后版本更新不用再更新此文件 脚本参数解析:

  –image_arch: 构建的架构,默认两种架构同时构建 –iso_path: 官方发行版.iso后缀的镜像文件地址,如果提供此参数,则os镜像从.iso文件中的repo源进行制作,构建出来的镜像软件版本与.iso文件中的版本保持一致,如果不提供此参数, 则脚本默认会从官方在线的repo软件源中去下载发行版对应的软件版本,可能会存在某些软件跟.iso文件中不一致(经过测试,仅中科方德安装openssl时出现了依赖不一致)   定义软件清单 下载离线源时,通过定义一下packages.yaml文件,来定义全部所需的软件包: packages.yaml:

定义各系统构建使用的Dockerfile 下面是制作麒麟离线源的Dockerfile:

中科方德在适配过程中出现了很多问题,总结如下: 官方没有docker-ce-20.10.17版本,需要配置docker el8源 官方没有sshpass等包,需要配置centos7的源 Read more…

GIT常见问题解决

git clone 出现 fatal: The remote end hung up unexpectedly(error: RPC failed; result=22, HTTP code = 422) 解决: 在项目的url后面加一个.git, 如: git clone https://git.xxx.com/project/installer-plugin 改为: git clone https://git.xxx.com/project/installer-plugin.git   Git 配置邮箱和用户名, 或增加安全目录时遇到 fatal: $HOME not set 的解决方案 把配置中的 global 换成 system 即可,如: git config –global user.email “you@example.com” git config –global user.name “Your Name” git Read more…

远程连接WSL2

WSL2开启SSH. 按照网上的教程1折腾了一下,据说自带的OpenSSH有问题,需要先卸后装 先配置一下源,看下/etc/os-release: PRETTY_NAME=”Ubuntu 22.04.3 LTS” NAME=”Ubuntu” VERSION_ID=”22.04″ VERSION=”22.04.3 LTS (Jammy Jellyfish)” 配置相应版本的源

先卸后装openssh

然后修改配置文件 ,这里还是用的密码登录,密钥的差不多处理

然后重启服务

新装的ssh可能不是默认开机自启的,顺便设置了

同样的,Windows上自带的OpenSSH(如果装了的话)也有问题,就是连不上,需要重新装一个或者用Xshell之类的软件来连接,或者参考2把环境变量里的ssh换成一个正常的(比如git bash自带的那个)。 然后应该可以在Windows上用powershell连接了

Windows端口转发 上一步只能保证本机连接到WSL,为了能在局域网甚至外网上进行连接,需要进行一些设置,主要分为两步:首先在Windows防火墙设置端口,给刚才设定的SSH端口2222添加入站规则,这部分参考3 ;然后是端口转发,这里有一个比较严重的问题,WSL2每次重启都会换IP,在网上4找了个powershell脚本,摘录如下(运行需要管理员权限)

可以把这个脚本命名forward_wsl2_port.ps1, 放进Windows计划任务开机自动执行。,具体操作是: 右键点win开始按钮,选择computer management,  选择Computer Management(Local) –> System Tools –> Task Scheduler –> Task Scheduler Library,  在Task Scheduler Library上右键,选择 Read more…

v2ray切换到xray

我一直用的是老的v2-ui面板,也不怎么经常用,好像去年开发者就开始要弃坑v2-ui,转而开发x-ui面板。前者用python开发,后者使用go开发。不想谈孰优孰劣,主要是现在v2-ui已经停止开发了,然后x-ui又加了些新功能(流量限制,过期日期限制等)。我觉得这个面板更适合小范围知根知底的朋友分享,大范围贩卖,小心风险。我本可以把v2-ui完全卸载,重新安装x-ui,考虑到又要折腾证书,还是算了吧。就直接按照官方给出的方法,先迁移看看,然后设置下登录用户。当然了如果是拿一台全新的vps,直接安装就好了。如下是官方文档: https://xtls.github.io/ https://github.com/vaxilu/x-ui   直接执行一键安装/升级脚本就可以了:

然后执行x-ui v2-ui,把v2-ui数据库中的节点信息迁移到x-ui中来。 之后停止v2-ui, 重启x-ui,由于v2-ui用的是v2ray程序,x-ui用的是xray,区别如下: Xray与V2Ray完全类同,Xray 是 Project X 项目的核心模块。因为Xray和XTLS黑科技的作者rprx曾经是V2fly社区的重要成员,所以Xray直接Fork全部V2Ray的功能,然后进行性能优化,并增加了新功能,使Xray在功能上成为了V2Ray的超集,且完全兼容V2Ray。 简而言之,Xray是V2Ray的项目分支,Xray是V2Ray的超集,就跟Trojan-Go和Trojan-GFW的关系类似,而且Xray性能更好、速度更快,更新迭代也更频繁。由于自V2ray-core 4.33.0 版本起,删除了XTLS黑科技,但仍然支持VLESS,所以是否原生支持XTLS是Xray和V2Ray最大的区别之一。 xray的配置文件路径在/usr/local/x-ui/bin/config.json,启动后, 经过测试怎么都科学不上了网,将xray切换到1.8.4版本也不行,怀疑是客户端客户较旧, 尝试下载最新的客户端: https://github.com/2dust/v2rayN/releases 结果还是不行,将xray日志打开, 在面板中做如下配置:   日志的报错是:rejected proxy/vmess/encoding: invalid user > user do not exist 参考https://github.com/v2ray/v2ray-core/issues/2966后, 得出原因是: 需要将额外ID(AlterID)设置为0。因为自2022年起v2ray服务端将强制启用aead认证机制. 经过修改,解决问题 客户端可以用V2rayN 或 Clash,具体对比:https://jiasupanda.com/v2rayn-clash V2rayN 下载地址是:https://github.com/2dust/v2rayN/releases/download/6.29/zz_v2rayN-With-Core-SelfContained.7z

kubectl 的奇技淫巧

Kubectl 是 Kubernetes 最重要的命令行工具。在 Flant,我们会在 Wiki 和 Slack 上相互分享 Kubectl 的妙用(其实我们还有个搜索引擎,不过那就是另外一回事了)。多年以来,我们在 kubectl 方面积累了很多技巧,现在想要将其中的部分分享给社区。 我相信很多读者对这些命令都非常熟悉;然而我还是希望读者能够从本文中有所获益,进而提高生产力。 下列内容有的是来自我们的工程师,还有的是来自互联网。我们对后者也进行了测试,并且确认其有效性。 现在开始吧。 获取 Pod 和节点 我猜你知道如何获取 Kubernetes 集群中所有 Namespace 的 Pod——使用 –all-namepsaces 就可以。然而不少朋友还不知道,现在这一开关还有了 -A 的缩写。 如何查找非 running 状态的 Pod 呢? kubectl get pods -A –field-selector=status.phase!=Running | grep -v Complete 顺便一说,–field-selector 是个值得深入一点的参数。 如何获取节点列表及其内存容量: kubectl get no -o Read more…

银河麒麟ansible执行取不到ansible_pkg_mgr变量的问题分析

问题现象: 在银河麒麟V10上执行ansible时, 遇到了一个报错问题: ansible_pkg_mgr变量没有定义, 遂写了一个test.yml测试一下:

  测试ansible_distribution为redhat, 而ansible_pkg_mgr的确是没有取出来 问题分析: 根据报错,很明确是因为ansible无法自动判断出系统使用的yum版本导致,我们知道当ansible中yum模块不指定use_backend参数时,将尝试自动判断,而ansible的setup模块可以获取对应的必要信息, 其中一个变量ansible_pkg_mgr及对应yum后端模块,接下来我们执行setup模块输出ansible_pkg_mgr变量来验证下我们的判断:

果然没有办法获取到ansible_pkg_mgr变量,先看下系统版本信息:

接下来根据报错提示信息找到ansible相关代码,在yum.py中,相关代码如下: ansible/plugins/action/yum.py

如代码所示,当执行yum未指定use_backend参数时,ansible会执行setup模块并根据ansible_pkg_mgr来自动判断yum的版本,获取不到则会报错,继续看下该参数的获取过程,找到pkg_mgr.py,关键代码如下: ansible/module_utils/facts/system/pkg_mgr.py

以上代码可以看到当判断系统为红帽系,则会继续判断系统版本信息,当主版本号<8则使用yum,否则使用dnf,这里我们初步判断为麒麟对系统做了某些修改导致无法获取到主版本号。先执行setup获取发行版代号验证下是否执行了上述逻辑:

通过setup模块的输出结果可看到系统是判断为redhat发行版,但是通过ansible_distribution_major_version获取到的发行版主版本号为V10, 而和上面判断yum版本的代码关联起来看就会发现问题所在,int(collected_facts[‘ansible_distribution_major_version’]) < 8 中,ansible_distribution_major_version 变量在其初始化的代码中对应为为distribution_version.split(‘.’)[:2][0]的取值,而当系统中获取到的值是V7Update6时,该显然无法满足转换为int的要求。接下来看下V10这个关键字的定义位置,根据经验系统版本相关信息是在/etc/os-release中, 这里可以看到VERSION_ID的值被定义为V10,而系统原生发行版中该值是7,我们来看下os-release中对VERSION_ID参数的说明:

根据man文档中的描述,VERSION_ID取值范围为全小写,通常为数值型,不应有空格或其他特殊字符,可包含的字符为0-9a-z._-,那么这里可以看到两个问题, 第一个问题是kylin的VERSION_ID不符合此描述,包含了大写字符,第二个问题是VERSION_ID可以包含a-z字母,但是通常是数值如17,11.04等。 但由于常见发行版都将此处处理为数值型,就导致ansible按照此约定俗成固化了其获取系统版本的方法,并试图将一个字符串转换为int,不能满足当VERSION_ID包含了字母的情况。 验证结论 通过以上判断看到VERSION_ID是导致该问题现象的关键,那么我们可以尝试修改一下该参数值,再执行setup看看是否可以正常工作: 手动将VERSION_ID从V10改为7,测一下: 改为10, 再测一下: 可以看到,修改os-release中VERSION_ID为纯数值后,setup就可以正常判断到系统版本,进而可以获取到正确的yum版本了。 通过以上可以看到操作系统中即便是一些不起眼的细枝末节,处理不当也可能引发”连锁反应”。  

wordpress网站上传的图片不显示的解决办法

从媒体库上传的图片, 在文章里看不到, 经过检查, 是因为所有上传到媒体库的图片的File URL地址都是http, 而网站的总地址是https, 所以需要更改所有图片地址为https正确的url 首先, 我的网站总地址写的是https://www.meaninglive.com, 想统一把www去掉, 首先在后台管理Settings里更改网站地址, 打开后, 发现更改选项是灰色的, 需要在服务器上把此限制去掉 打开网站根目录下的wp-config.php,  下面是之前最后加的内容

需要把上面内容注释掉, 然后再打开网站后台页面, 就可以更改网站地址了, 改成统一的https://meaninglive.com 其次, 安装Better Search Replace插件 当然也可以通过phpMyadmin或登录数据库进行修改, 但是这样会比较危险, 所以还是通过插件来改比较安装便捷 安装好插件后, 打开Tools–> Better Search Replace, Search for 填入http://www.meaninglive.com Replace with填入https://meaninglive.com Select tables选择wp_posts 将Run as dry run去掉, 点击Run Search/Replace   参考: https://webtrickz.com/wordpress-update-image-urls-to-https/

koolshare梅林路由器提示含非法关键词,无法安装插件

错误提示:  检测到离线安装包:含非法关键词!!! 根据法律规定,koolshare软件中心将不会安装此插件!!! 解决方案: 1. 在「系统管理」- 「系统设置」里面打开「Allow SSH password login」。 2. 在 a free SSH and telnet client for Windows 下载 Putty 并安装 3. 在 Putty 中使用路由器的 IP 地址来连接 4. 输入登录路由器的账号、密码 5. 输入 

6. 重新离线安装 违禁软件

10分钟搞定让你困惑的 Jenkins 环境变量

前言 Jenkins, DevOps 技术栈的核心之一,CI/CD 离不开编写 Pipeline 脚本,上手 Jenkins ,简单查一下文档,你就应该不会被 agent,stages,step 这类关键词弄懵,也能很快构建出 pipeline 的骨架但是当向骨架中填充内容的时候,尤其如何利用环境变量(系统内置 | 自定义),多数人都会变得比较混乱,浪费很多时间,本文就帮助大家快速通关环境变量 准备 如果你想一边阅读本文,一边实践,但是没有 Jenkins 服务可用,又想快速尝试,可以应用 Docker 一个命令快速搭建 Jenkins 服务

2023年了,本地没有 Docker 说不过去了,过来瞧瞧 Docker 系列是否入得了你的法眼? 打开浏览器输入:localhost:8080 找到终端的临时密码登陆 安装推荐的依赖 创建新的 Pipeline 类型的 Item 点击左侧 Config,然后在页面底部 Pipeline 部分输入我们接下来写的脚本进行测试就好了 就是这么简单….. 认识 Jenkins 环境变量 Jenkins 环境变量就是通过 env 关键字暴露出来的全局变量,可以在 Jenkins 文件的任何位置使用 其实和你使用的编程语言中的全局变量没有实质差别 查看 Read more…