作者: hetao

  • Jenkins清空所有构建记录

    Jenkins服务器运行时间长了CPU占用始终100%,重启也解决不了,用以下脚本删除所有构建记录解决问题

    Jenkins.instance.getItems().each {
        it.getItems().each() {
            println(it.getFullName())
            it.getBuilds().each{ it.delete() }
            //it.nextBuildNumber = 1
            //it.save()
        }
    }
    

    脚本在这里面执行

    然后把workspace目录清空
    再安装discard old build插件,自动删除旧的构建记录

    Views: 1

  • squid缓存规则

    squid控制缓存的主要是refresh-pattern参数,这个参数也是squid最复杂的一个参数,主要是缓存规则本身就复杂,要配置这个参数之前还需要了解一下HTTP缓存的机制。可以参考MDN上的HTTP缓存介绍。

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control

    然后首先看看refresh-pattern的语法:

    usage: refresh_pattern [-i] regex min percent max [options]

    官方介绍在这里:

    http://www.squid-cache.org/Doc/config/refresh_pattern/

    但是只看官方文档很多,很多东西还是弄不明白的。

    这个refresh pattern可以翻译为新鲜度模式,这个参数配置的也就是缓存对象的新鲜度(refreshness)

    regex: 配置中regex是一个正则表达式,对整 个URL进行匹配,包括前面的http或https。如果是匹配所有的URL可以用一个“.”(英文句号)表示。

    -i: 是一个可选参数,表示大小写不敏感

    min: 单位是分钟数,表示只要min小于缓存的Age(Age是当前请求时间减去缓存上一次更新的时间)缓存就会命中。

    max: 单位是分钟数,表示只要max大于缓存的Age(Age是当前请求时间减去缓存上一次更新的时间)缓存就过期,会重新请求原始文件刷新缓存。

    percent: 单位是百分比,这个参数就是LM-Factor(LM系数),对于时间落在min和max之间的请求用percent进行计算是否会命中缓存,LM系数是用来计算max-age的,max-age=( Date – Last-Modified ) * percent,其中Date缓存时间Last-Modified是原始HTTP头中的值,percent就是LM系数。如果计算出来的max-age小于缓存Age(这里的Age应该是相对于Last-Modified的,而不是在Cache中的存活时间)则命中,否者过期。或者换一种说法,LM-factor=(response age)/(resource age),如果LM-Factor小于percent配置的值则缓存命中,否则过期。


    这个图展示了LM系数的计算规则,squid缓存了一个3小时前的对象,LM系统配置为50%,则对象将在1.5小时后过期。

    LM系数生效的前提是HTTP响应头中有Last-Modified。

    如果以上3个规则都不匹配则缓存过期。

    如果没有额外的参数仅就min,max,percent这三个参数,那么只会影响没有明确缓存过期时间的请求,对于已经指定了缓存规则的请求这里的规则是不生效的。下面的一些选项可以改变HTTP请求中自带的缓存规则。

    override-expire

    使用min参数覆盖HTTP请求中的过期时间(Expires以及Max-Age)

    override-lastmod

    忽略LM系数检查,只要大于缓存Age大于min值就过期。这个参数没看到详细解释,我是这样理解的。

    reload-into-ims

    为no-cache请求增加If-Modified-Since

    经过我的测试,如果请求头中没有Last-Modified的话会把当前时间作为If-Modified-Since时间添加到请求头中,这个选项只是在原有no-cache请求中增加一个ims字段,http服务器遇到ims字段在资源没有变更的时候会直接返回304状态码。而且reload-into-ims修改过的请求都会访问原始服务器。

    ignore-reload

    忽略no-cache请求

    ignore-no-store

    忽略no-store请求

    refresh-ims

    ims请求始终访问原始服务器,默认在配置refresh-pattern的情况下ims请求不会发送给原始服务器。

    store-stale

    即使没有refresh或缓存控制也存储到缓存中,这意味着即使永远不会命中或已经过期的对象仍然存储在缓存中(这不是画蛇添足吗,除非中途修改了refresh模式,可以利用之前存储下来的缓存)。

    max-stale=NN

    单位是秒,用来覆盖全局max-stale

    其它相关的配置

    minimum_expiry_time

    最小过期时间,剩余过期时间小于这个时间的的对象不做缓存,这个主要是担心请求的过程中对象就过期了,缓存就没有意义了还浪费存储空间。默认值是60秒。

    max-stale

    这个配置具体是怎么用的官网没有详细介绍,google也搜不出来任何资料,经过我反复测试,这个配置指的是原始服务器挂掉以后即使缓存过期squid仍然返回内容的时间限制。如果设置为0,缓存过期后立马返回504错误。

    refresh_all_ims

    所有ims请求都检查原始服务器,相当于refresh-ims的全局配置

    reload_into_ims

    与上面的reload-into-ims选项意思相同,但这个是全局配置

    光refresh-pattern这个命令我研究了一天,发现除了min percent max这三个参数外,其它可选项原理复杂但并没啥太大用处,我本来想用来缓存git仓库的,测试来看squid并不能缓存git仓库中的数据。

    Views: 10

  • openssl生成CA和EV SSL证书

    #生成CA私钥
    openssl genrsa -out ./private/cakey.pem 2048
    #生成CA证书
    openssl req -config openssl.cnf -x509 -new -nodes -key ./private/cakey.pem -days 3650 -out cacert.pem -extensions v3_ca
    #转换证书格式,用于Windows上导入证书
    openssl x509 -in cacert.pem -outform DER -out cacert.der
    

    以上是生成了一个符合EV SSL要求的CA证书
    命令不复杂,但是配置文件复杂,我把参数都配置到openssl.cnf中了,这个文件是从/etc/ssl/openssl.cnf复制过来,然后根据需要做对应的修改。下面只列出了需要修改的部分

    [ new_oids ]
    # 自定义证书策略oid,EV SSL CA必须,oid的值是自定义的,全球唯一就行。
    ev_policy = 2.16.840.1.113730.1.100
    [req]
    default_bits = 2048
    distinguished_name = dn
    # 禁止提示输入
    prompt             = no
    req_extensions     = v3_req
    x509_extensions    = v3_ca
    [dn]
    # 这部分根据需要修改
    C="CN"
    ST="Shanghai"
    L="Shanghai"
    O="hetao"
    OU="squid"
    emailAddress="tao@hetao.me"
    # 如果域名证书这一项是域名,对于CA证书可以随便填
    CN="Squid CA"
    [ v3_req ]
    
    # Extensions to add to a certificate request
    # 这个区段是签发客户证书用的
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    [ v3_ca ]
    
    # Extensions for a typical CA
    # PKIX recommendation.
    # subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints,keyUsage这几项是任何CA证书都必须的,尤其是basicConstraints,keyUsage。如果没有basicConstraints = critical, CA:true在Firefox上会不认这个CA证书(其它浏览器可以)
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always, issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign, keyEncipherment
    # 这一项Root CA非必须,中间CA需要
    extendedKeyUsage = serverAuth, clientAuth, codeSigning,emailProtection
    #DV SSL证书: CA/B Forum OID:2.23.140.1.2.1
    #IV SSL证书: CA/B Forum OID:2.23.140.1.2.3
    #OV SSL证书: CA/B Forum OID:2.23.140.1.2.2
    #EV SSL证书: CA/B Forum OID:2.23.140.1.1
    #这4个oid是客户域名证书需要的,对于EV SSL CA只需要添加ev_policy这个自定义的oid就行了(非EV SSL CA不需要)。
    certificatePolicies = 2.23.140.1.1,2.23.140.1.2.1,2.23.140.1.2.2,2.23.140.1.2.3,@polsect
    policyConstraints = requireExplicitPolicy:3
    # 证书吊销查询,EV SSL CA必须,非EV SSL CA不需要
    authorityInfoAccess = OCSP;URI:https://ocsp.hetao.me/
    
    [polsect]
    # 经用自定义oid
    policyIdentifier=2.16.840.1.113730.1.100
    CPS.1 = "https://cer.hetao.me"
    CPS.2 = "https://ca.hetao.me"
    userNotice.1 = @notice
    
    [notice]
    explicitText = "UTF8:squid notice"
    organization = "hetao"
    noticeNumbers = 1, 2, 3, 4
    

    以上生成的CA证书我是在squid里面用的,当然用这个CA手动签发域名证书也是可以的。因为squid只需要CA证书就行,关于签发域名证书方法就不赘述了。
    参考:
    https://vircloud.net/operations/sign-ip-crt.html
    https://vircloud.net/exp/openssl-ev.html
    https://blog.csdn.net/sinat_38816924/article/details/124233402

    Views: 18

  • squid配置SSL Bump缓存HTTPS流量

    默认情况下squid是不能解密https流量的,也就不能缓存https流量。但配置SSL Bump功能可以实现对HTTPS流量进行缓存。

    生成证书

    openssl生成CA和EV SSL证书


    参考这篇文章

    配置squid

    http_port 3128 ssl-bump tls-cert=/opt/web/data/squid/ssl/cert1/squid_ca.pem tls-key=/opt/web/data/squid/ssl/cert1/squid_ca.key dynamic_cert_mem_cache_size=128MB generate-host-certificates=on
    sslproxy_cert_error allow all # 即使原始服务器证书错误仍然进行连接
    ssl_bump stare all #所有域名开启解密,默认配置是不解密的
    

    也可以用ssl_bump bump all配置与stare的区别是bump生成的证书除了域名外没有其它扩展字段,比如国家,单位什么的,stare则复制了原始证书中的甩的字段。
    完了以后重启Squid发现系统自带的squid不支持ssl-bump,然后docker中的squid也不支持ssl-bump,然后只能自己编译了。

    squid编译

    • 源码下载

      http://www.squid-cache.org/Versions/v6/

    • 安装依懒包
      apt-get update && apt-get install -y build-essential libssl-dev openssl libxml2-dev libexpat1-dev libsasl2-dev libpam0g-dev libkrb5-dev pkg-config apache2-utils net-tools libecap3-dev libldap2-dev
    • 编译
    ./configure \
    --prefix /usr \
    --enable-arp-acl \
    --enable-linux-netfilter \
    --enable-linux-tproxy \
    --enable-async-io=100 \
    --enable-err-language="Simplify_Chinese" \
    --enable-poll \
    --enable-gnuregex \
    --build=x86_64-linux-gnu \
    --disable-maintainer-mode \
    --disable-dependency-tracking \
    --disable-silent-rules \
    --enable-build-info="Ubuntu linux" \
    --disable-translation \
    --with-filedescriptors=65536 \
    --with-large-files \
    --with-openssl \
    --enable-ssl \
    --enable-ssl-crtd \
    --enable-inline \
    --disable-arch-native \
    --enable-storeio=ufs,aufs,diskd,rock \
    --enable-removal-policies=lru,heap \
    --enable-delay-pools \
    --enable-cache-digests \
    --enable-follow-x-forwarded-for \
    --enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,PAM,POP3,RADIUS,SASL,SMB \
    --enable-auth-digest=file,LDAP \
    --enable-auth-negotiate=kerberos,wrapper \
    --enable-auth-ntlm=fake,SMB_LM \
    --enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,SQL_session,unix_group,wbinfo_group \
    --enable-security-cert-validators=fake \
    --enable-storeid-rewrite-helpers=file \
    --enable-url-rewrite-helpers=fake \
    --enable-eui \
    --enable-esi \
    --enable-icmp \
    --enable-zph-qos \
    --enable-ecap \
    --enable-underscore
    make -j4 && make insstall
    

    启动之前需要执行这条命令初始化证书数据库,squid自己执行的security_file_certgen会报错,初始化后squid就不需要再执行了。
    security_file_certgen -c -s /usr/var/cache/squid/ssl_db -M 128
    或者配置

    “`sslcrtd_program /usr/libexec/security_file_certgen -s /usr/var/cache/squid/ssl_db -M 128MB“`
    在/usr/var/cache/squid/ssl_db/certs/目录下可以看到所有生成的证书
    #添加/usr/libexec到环境变量
    “`export PATH=$PATH:/root/.local/bin:/usr/libexec“`

    参考:

    如何熟悉Squid的SSL碰撞?

    Views: 17

  • pve安装windows 7

    • 创建虚拟机




    • 安装补丁
      如果不安装基本的补丁的话驱动和自动更新都不能用
      依次安装以下补丁:
      windows6.1-kb4474419
      Windows6.1-KB3135445
      windows6.1-kb3125574
      Windows6.1-KB3102810
      Windows6.1-KB3020369
      windows6.1-kb2533552
      安装好后再执行
      LegacyUpdate-1.9.exe
      https://github.com/LegacyUpdate/LegacyUpdate
      然后打开系统更新进行更新
    • 激活
      https://github.com/abbodi1406/KMS_VL_ALL_AIO/releases
      KMS_VL_ALL进行激活
    • 安装驱动
      运行virtio-win-gt-x64.msi提示不支持windows 8以下的系统,使用低版本的qemu guest tools直接没有virtio-win-gt-x64.msi这个文件了,索性用最新版本一个一个装驱动。

      全部装完后还有一个设备找不到驱动
      下载
      windows6.x-hypervintegrationservices-x64.cab
      https://support.microsoft.com/en-gb/topic/hyper-v-integration-components-update-for-windows-virtual-machines-that-are-running-on-a-windows-10-or-windows-server-2016-based-host-bd22f4f6-feec-89f4-8a1d-405076ff4222
      然后执行
      Dism /online /Add-Package /PackagePath:C:\Users\Administrator\Desktop\windows6.x-hypervintegrationservices-x64.cab
    • 安装qemu guest agent
      下载101.2.0版本
      https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-qemu-ga/qemu-ga-win-101.2.0-1.el7ev/
      然后直接安装即可,如果安装不上可以用这里的方法
      https://forum.proxmox.com/threads/qemu-guest-fails-to-install.86030/page-2#post-628055

    Views: 4

  • conan中开启Package Revisions

    Package Revisions的目的是为了让上传的二进制包不会互相覆盖,然后用conan.lock对二进制包版本(PRev)进行锁定实现构建的稳定性。这导致了一些行为上的变化,需要特别注意。

    Package Revisions字面意思是包修订,这里指的是同一个包不同的二进制rev可以同时存储在conan仓库中。

    配置

    • 方法1

    conan config set general.revisions_enabled=1
    conan config set general.full_transitive_package_id=1

    • 方法2

    在conan.conf的general段中配置
    revisions_enabled=1
    full_transitive_package_id=1

    • 方法3

    配置环境变量
    CONAN_REVISIONS_ENABLED=1

    说明

    • full_transitive_package_id=1是conan2中的默认行为,是官方推荐的配置-
    • 当rev版本不同时不会被覆盖
    • 包的package id由包名,版本号,settings,options,requires共同决定
    • 包的PRev由包的内容hash组成
    • 包的RRev由conanfile.py的hash组成
    • 在conan2中Package Revisions是默认开启的,不用另外配置
    • jfrog artifactory版本大于等于6.9
    • conan客户端版本大于等于1.13
    • artifactory中revision特性是默认开启的(不可关闭),conan2中也是默认开启的(不可关闭),而且服务端与客户端必须一致(同时开启同时关闭)
    • 当conanfile.py改变时(RREV改变)或源代码改变时(如果需要上传源代码时)所有不同架构二进制包要重新编译,不然conan会找不到未重编译架构的二进制包,这是因为默认conan只查找最后一次的RREV下的二进制包
      比如修改版本号,requires等都会修改conanfile.py文件,这时候就需要重新上传所有的二进制包。另外不同的换行符格式,不同的空白符号也会导致Conanfile.py文件的hash不一样(hash就是RREV)。
      英文原话:
      If you generate and upload N binary packages for a recipe with a given revision, then if you modify the recipe, and thus the recipe revision, you need to build and upload N new binaries matching that new recipe revision.
      如果不想重新上传所有二进制包,则需要明确指定所要引用的RRev版本,而不是使用最新的RRev如:
      self.requires("hello/1.0#2475ece651f666f42c155623228c75d2")
      https://docs.conan.io/1/versioning/revisions.html

    查看conan仓库中的包(conan2)

    • 列出所有RRev
      conan list hello/1.1#* -r conan
    • 列出指定RRev的二进制包
      conan list hello/1.1#2d62851f23cc70eb930774045906cd5d:* -r conan
    • 列出最新RRev的二进制包
      conan list hello/1.1:* -r conan

    Views: 9

  • ubuntu on arm install qt creator

    qt安装器下载地址
    https://download.qt.io/archive/online_installers/
    https://mirrors.sau.edu.cn/qt/archive/online_installers/
    https://download.qt.io/official_releases/online_installers/
    curl https://mirrors.sau.edu.cn/qt/official_releases/qtcreator/13.0/13.0.1/qt-creator-opensource-linux-arm64-13.0.1.run –outputfile qt-creator-opensource-linux-arm64-13.0.1.run
    curl https://download.qt.io/official_releases/online_installers/qt-unified-linux-arm64-online.run -o qt-unified-linux-arm64-online.run
    apt install libdouble-conversion3 libxcb-cursor0 libxkbcommon-x11-dev
    qt creator是IDE,qt-unified是SDK

    Views: 2

  • 关于Go/OpenSSL对ECH的支持

    go stdlib中已经计划在go1.23中支持各户端的ECH,但是服务端的ECH支持要等到go1.24中,界时caddy也将能支持ECH,这样Caddy将成为第一个支持ECH功能的HTTP服务端。这个时间点大概是2025年2月,这个时候会发布go1.24。
    另外openssl 3.4将在2024年10月31日发布,openssl 3.4提供了QUIC的支持,界时nginx将能获取正式的HTTP/3功能(现在是实验性的支持)。
    openssl也正在合并ECH支持的PR,预计会合并到OpenSSL3.5版本中,OpenSSL3.5将会在2025年4月发布。也就是说在2025年上半年go标准库和openssl都会支持ECH,到时候nginx支持ECH应该也会很快。
    这个commit添加了server端的ech支持
    https://github.com/golang/go/commit/f69711434ae0ab383fb6088000736af9bd5638f4
    https://github.com/golang/go/milestone/212?closed=1
    https://github.com/golang/go/issues/32936 (服务端支持的讨论,已经列入proposal)
    https://github.com/golang/go/issues/68500
    https://github.com/orgs/golang/projects/17 (所有proposal)
    https://github.com/orgs/golang/projects/17/views/1?filterQuery=Encrypted+Client+Hello
    https://github.com/golang/go/issues/63369
    https://github.com/openssl/project/issues/52
    https://github.com/openssl/openssl/pull/22938
    https://github.com/openssl/openssl/milestone/48
    https://trac.nginx.org/nginx/milestone/nginx-1.27
    https://github.com/nginx/nginx/issues/266 nginx关于ech的issue
    https://github.com/yaroslavros/nginx/

    Views: 4

  • 配置npm仓库镜像

    npm config set registry http://mirrors.hetao.me/npm-registry/

    Views: 13

  • linux查看监听IP端口

    netstat -lpn -4 -6

    Views: 0