- 博客(84)
- 收藏
- 关注
原创 【Go研究】Go语言脚本化的可行性——yaegi项目体验
先分析下第3种的问题。另外一个特点是对内的,这两种运维性质的操作是一种通用的机制类活动,所有参与到一个产品中的团队和服务都要考虑,但各种业务服务可能有不同的操作,所以要求这种机制具备足够的扩展性和灵活性。yaegi本身的稳定性应该不错,大概看了下,基本上利用Go本身的ast解析能力,主要部分是实现了一个interpeter,具体的分析还结合实现和项目的issue进行分析。一种直接的想法,是将Go直接集成到运行环境中,go run就可以了,但go run有一个编译过程,有时候很慢,这点生产环境下肯定不行。
2025-01-05 22:54:40
1099
1
原创 【Go学习】从一个出core实战问题看Go interface赋值过程
实现类型转换为接口类型,不是原子操作,通过两个赋值操作完成;接口类型的判空跟大家预想不一样,只要 tab 字段不为空,判空就不成立,所以通过了前置检查。详见参考中Go官方的链接。给我们带来的编码启示:尽量少用全局变量这个问题就是全局变量保护不到位引发的。一边在写,一边在读。
2024-12-23 21:20:23
1155
1
原创 k8s实践——命名空间隔离+request-key机制解决CSI内核态域名解析
问题的解决过程中尝试了多种方案,最终最适合的方案巧妙运用了命名空间隔离机制,这也是了解容器底层原理的好处。容器内不希望被宿主机影响。容器内不期望影响宿主机(本文中的场景),可随意设置/etc/resolv.conf。
2024-12-20 17:59:13
797
原创 【Go学习】Go context 对HTTP请求的影响
是控制协程行为的利器,既然是利器,那么用得好可以取得非常好的效果,用的不好,反手就可能伤了自己。最近遇到的一个问题,HTTP请求发给Server后,对应的context取消掉之后,请求被Server正常处理了,但客户端因为Context被取消,认为请求失败了。当Request中的Context有设置时,这个Context会影响到HTTP的结果,如果你不期望Context取消时影响到具体的HTTP请求,那么就不应该设置这个参数。默认不设置时,Context的取消不会终止掉具体的HTTP请求。
2024-12-19 21:02:20
431
原创 使用Qemu9.2体验riscv记录
只是一时兴趣想体验下riscv,没想到还遇到了一些问题,没有其他文章里说的那么轻松。记录下,以后想用时可以快速搞定。
2024-12-18 08:50:05
407
原创 聊聊被钉在Go耻辱柱上的那些库
最近在翻看Go的标准库代码,看到了这样的注释。看这个注释,说明这是一个标准库中未对外暴露的函数,但被字节的sonic库引用了。。自然就有点好奇,未对外的函数,外部是怎么引用的绕过限制的?这就好说下Go的编译过程。
2024-12-12 12:23:43
909
原创 非常规使用client-go踩坑记
作为开发人员,直觉很重要,有时可以省掉很多麻烦。想起来多年前使用某一个打车软件时,在午夜时,好像是看到估算的行程时间有点错乱,直觉告诉我,这是个corner case就是边界场景,很容易出问题。同样的,这次遇到的小问题,属于很少有人直接这样的用场景,既然很少有人用,它的顺畅性没经过验证,出问题的可能性就大了。
2024-12-11 15:29:26
502
原创 apisix lua插件开发记录
经过插件的请求的各拦截点见官方文档:https://apisix.apache.org/docs/apisix/architecture-design/apisix/需要重启apisix容器,但脚本都是在容器镜像里的。一开始未理解check_schema的作用,未实现它,结果发现在schema中定义的默认参数并没有生效。apisix的默认日志等级是warn级别,也就是说你在lua中加的info级别是在apisix日志中看不到。可以这样:把脚本的目录挂载到Pod里,然后修改脚本后,重启Pod就行了。
2024-12-11 10:24:36
791
原创 autohotkey小脚本集合
不知道为什么原生的win+d快捷键不好使了,chrome死活不肯最小化,写了个小脚本覆盖原生的快捷键。双显示器太伤眼,一个可以当两个用,切换为透明之后,可以看到背景窗口的内容。
2023-11-17 12:13:30
1135
原创 Python3中启动简易HTTPServer
Python中的简易的HTTPServer非常实用,但原Python2中的命令在Python3不再适用了。
2022-06-23 17:08:08
3307
原创 k8s从1.21不再使用bazel的解读
0x01 背景之前有关注bazel相关的技术动态,自己也做了一些研究。最新看k8s源码时,突然发现没有了bazel相关的配置,猜测是把bazel移除了,去github上搜索了下。确认确实是移除了。最初的提案链接为:https://github.com/kubernetes/kubernetes/issues/88553,感兴趣的可以直接去看,讨论很热烈。主要是想看下顶级项目面对这种取舍(trade-off)问题时是如何决策的。0x02 移除的理由提案作者的理由:go tool chain本身支
2022-05-28 21:43:21
488
原创 Etcd特性学习5——运维操作(最后一篇)
01 make-mirror在另外一个集群构建一个镜像。同时实时将一个集群的变更同步到另外一个集群中。同时会在终端上打印同步的key个数。命令格式etcdctl make-mirror [options] <destination> [flags]其中的<destination>是镜像目的集群的endpoint列表。命令示例:etcdctl --endpoints http://127.0.0.1:12379 make-mirror http://127.0.0.1:2
2022-05-26 12:30:58
1735
原创 Etcd特性学习4——member、role、user
0x01 member成员管理用来动态调整Etcd集群中的成员。支持如下操作:add 添加list 列举promote 提升remove 移除update 更新member add--learner 允许以Raft Learner角色加入Etcd集群,该节点不参与Raft选举投票,只同步Leader的数据。--peer-urls 要加入的新节点的URL列表。member list无选项,查看集群的成员列表。member promote将指定的非投票member提升为
2022-05-20 09:25:19
1076
原创 apiserver性能调优小结
apiserver设计比较复杂,直接去看源码效果较差。尝试从特性角度梳理其设计背后的考量。了解一个服务最好的入口就是看它的选项。选的版本是v1.21.5。0x01 选项选项分为如下几类:*通用标志(Generic flags)*与Etcd相关的配置安全配置审计配置特性配置认证配置授权配置云提供商配置API开关配置网络出口配置准入配置metrics配置,用于监控*日志配置*其他杂项配置加*的为影响性能的参数。为重点学习项。0x02 详细各部分配置2.1 通用配置看
2022-05-12 08:35:29
1077
原创 Etcd特性学习3——lease lock elec
0x01 leaselease意思是租期,通过租期管理,可以实现一些自动操作。ZooKeeper中可以指定一个znode的TTL,TTL为Time To Live,跟租期同样的含义,超出TTL的znode会被ZooKeeper自动清除。lease包含如下子命令:grant 创建lease。 指定TTL(秒数),返回lease ID。16进制格式。keep-alive 保活lease。让lease持续有效。list 列出所有lease ID。revoke 让lease立刻失效。timetoli
2022-05-10 20:57:57
957
原创 Etcd特性学习2——数据操作
0x01 endpointendpoint即意为端点,指向客户端提供服务的一个服务入口。Etcd集群中每个节点都可以提供一个端点。严格来说,endpoint不属于数据操作范畴,但与后续defrag有关联,是理解defrag的前提,就先放这里了。提供了3个子命令。hashkv 打印出KV历史的hash值。是用来检查请求发生时各端点的记录是否一致。可以计算指定的revison版本。health 检查端点是否健康。可以用于检查端点是否健康。可以通过-w json的全局选项,返回json格式,方便使用方解
2022-04-30 23:32:09
1459
原创 Etcd特性学习1——KV操作
0x01 功能分类Etcd作为一个分布式一致性的KV存储组件,现在的功能远不止于KV存储了。详细了解下其功能特点有利用在使用它时,做出最合适的选择。通过etcdctl -h命令可以看到有如下的特性。基本的KV操作 get put txn del watch数据操作 分片defrag 压缩事件 compaction端点管理 endpoint租期管理 lease锁 lock选举 elec成员管理 member转移leader move-leader角色管理 role快照管理 snaps
2022-04-28 23:27:20
4191
原创 bash readarray探讨
§ 0x01 起源工作中有如下需求,要去解析一个文件的内容,但文件是json格式的,我不想使用jq。通过grep过滤出符合要求的行,然后在for循环中处理它们。然后发现,这样实现不行。lines=$(grep xxxx /path/to/file.json)for line in ${lines}; do echo ${line}donegrep输出的内容变成一行了。对比运行环境和ubuntu中,发现lines的内容不同。在运行环境中是一行(换行符消失了),在ubuntu是多行。换了sed之
2022-04-20 16:25:34
1550
原创 云原生模式-读书笔记1-第1章
云原生模式书名《云原生模式》,副标题:设计拥抱变化的软件。如下格式为文中原文。这是书中的原文云原生,英文为Cloud Native。直译为,云原住居民。天空中云距离我们很远,不停的变化。用“云原生”可以形象化地领会其特点。感觉这本书是“事后诸葛亮”,已经有了k8s的前提下,对k8s中设计考虑的点进行汇总拔高,形成了云原生的概念。当然还是能帮助大家理解云原生的一些理念,还是值得学习的。第一章 什么是“云原生”换一种角度去理解应用的生命周期。传统的大型服务可以长时间运行,不需要(不敢)变更。传
2022-04-19 21:53:17
473
原创 TN3399开发板折腾记录
0x01 背景需要一个能支持GICv3的设备。春节时,在安卓旧手机上折腾了一圈,买了2个旧手机(红米2、1加3T),都不行。红米2,可以通过开源的hyp固件[https://github.com/msm8916-mainline/qhypstub/issues],实现KVM。但是对应的芯片是MSM8916的,只支持GICv2。1加3T,芯片MSM8996是支持GICv3的。但是对应的hyp固件相关信息没有开源,所以无法支持虚拟机。板子是在闲鱼上买的。300块,包邮。到手后发现内核版本是4.7
2022-04-11 21:01:32
2680
原创 Go阻塞通道的一个小坑
0x01 问题阻塞类型chan就是使用make时,只指定一个类型,不指定长度,或者长度指定为0。它有如下要求:发送方和接受方都准备好时,才能工作。所以想到了如下场景:发送方和使用方都使用select非阻塞方式,会有什么现象?即如下代码:是否会有输出?package mainimport "fmt"import "time"func main() { c := make(chan int) go func() { f
2022-04-09 13:10:06
536
原创 Go非阻塞通道探究
title: Go非阻塞通道探究date: 2022-04-08 20:33:26author: linlintags:gocatergories:编程语言0x01 通道阻塞介绍了解Go的同学都清楚,无论通道是有无缓冲的,发送或者接收某些场景下都有可能阻塞。对于无缓冲:默认阻塞,直到对方也准备好接收或者发送。有缓冲:通道满了,发送阻塞。通道空了,接收阻塞。有意思的是,Go里提供了基本的非阻塞接收方式,但没有提供非阻塞的发送方式。可以使用如下方式非阻塞接收。通过判.
2022-04-08 22:00:55
713
原创 kubebuilder 上手体验
§ 0x01 kubebuilder是什么?kubebuilder以下简称kb,是k8s社区编写CRD的工具。它可以自动化生成CRD工程代码,提高编写operator的效率。官网的示例CronJob对于初学者来说太复杂了,我试了下,基本的代码可以运行起来。§ 0x02 与sdk-operator的区别是什么?应该是sdk-operator比较先出现,kubebuilder是后来者。极客时间上学习k8s时,张磊还没有提及kubebuilder。两者没有什么本质区别,不过看知乎中的说法,两者社区有融合的趋
2022-04-05 17:45:33
2039
原创 好玩的shell
§ 0x01 为什么写这个Shell是命令行中和Linux交互的主要界面,在日常开发中,和它打的交道也最多。学习shell的过程中,发现了一些有意思的地方。想记录一下,分享给也正在学习shell的同学。这里指一般Linux发行版上自带的Bash Shell。§ 0x02 alias——为什么rm时一定要提示下我?# rm 1rm: remove regular empty file `1'? 许多人不明白。为什么有的环境中rm不提示,有的环境中一下有提示。有的人为了省事,直接加了-f的参数。其实
2022-04-02 16:33:00
1522
原创 网络资产中主机发现方案分析
date: 2019-02-15 11:24:25tags:- 网络资产- 主机存活探测0x00 介绍网络资产梳理中,最重要的一项是主机发现。主机发现就是通过一些技术手段,来侦察网络中一些主机是否存活。主机发现又分为主动发现和被动发现两大类。主动发现:主动进行侦察探测,如端口探测被动发现:被动接收一些信息来进行判断,如流量监听主动发现单个主机存活的手段有ping端口扫描当然不是所有的存活主机都可以通过主动手段发现。存在一种极端情形,如果一个存活主机没有开放任务端口/服务,同时
2022-04-01 14:02:45
8158
原创 Go run permission denied的问题分析与解决方案
0x01 问题一次同事反馈在环境中,执行go run xx.go时出现如下异常提示。fork/exec /tmp/go-build104992250/b001/exe/h: permission denied有点兴趣,所以就动手查了下。查的过程比较简单,但思路有点意思。希望会有所帮助启发。0x02 分析出现这个问题,原因是go在/tmp目录下生成的可执行文件没有执行权限,当Go去执行时就会报错。为什么会没有执行权限呢?请教了同事之后,确认了开发环境中的/tmp的挂载选项中如下所示。tmpf
2022-03-30 21:51:06
3736
1
原创 PWN基础知识总结
0x00 Intro这里记录一些在CTF PWN类题目经常要考虑的技术点,是一些与C/ASM相关,比较底层的东西。总结来说有:C和汇编之间的参数传递栈的细节64位程序参数传递只有对这些细节都清楚了,那么利用时,如何构造Payload就没有想象中那么困难了。这里目前还是只限于x86-64架构。0x01 C和汇编之间的参数传递有编译器基础的都知道,GCC将C语言编译为机器语言中间有几个过程。预处理(将宏展开)汇编(将C代码转为汇编代码)编译(将汇编转为机器码)链接(将静态库,多个源文
2022-03-29 13:36:32
1721
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人