静态编译 ipmitool

为了在 ESXi 上运行 ipmitool,需要静态编译 ipmitool。网上已经有一些解决方案: https://github.com/ryanbarrie/ESXI-ipmitool https://github.com/hobbsh/static-ipmitool https://github.com/ewenmcneill/docker-build-static-ipmitool 我稍微修改了一下,用来编译最新 ipmitool: #!/bin/bash set -x export VERSION=1.8.18 rm -rf ipmitool_$VERSION curl -L -o ipmitool_$VERSION.tar.bz2 http://deb.debian.org/debian/pool/main/i/ipmitool/ipmitool_$VERSION.orig.tar.bz2 tar xvf ipmitool_$VERSION.tar.bz2 cd ipmitool-$VERSION CC=gcc CFLAGS=-m64 LDFLAGS=-static ./configure make -j24 cd src ../libtool --silent --tag=CC --mode=link gcc -m64 -fno-strict-aliasing -Wreturn-type -all-static -o ipmitool.static ipmitool.o ipmishell.o ../lib/libipmitool.la plugins/libintf.la file $PWD/ipmitool.static 复制下来,编译完成后 scp 到 esxi 中即可使用。

Read More

通过 ipmitool 配置 iLO 4 管理端口

ipmitool 自带了对 iDRAC 的支持,可以通过 ipmitool delloem 设置 iDRAC 的管理端口。但是对 iLO 的支持并没有实现。研究了一番,找到了通过 raw command 配置 iLO 4 管理端口的方法。 这篇文章 讲述了 ipmitool lan 命令实际会发送的命令: 读取配置: $ ipmitool raw 0x0c 0x02 CHANNEL KEY SET BLOCK 一般来说 SET 和 BLOCK 都是 0。KEY 的常见取值: 3: IP 地址 4: IP 地址来源 5: MAC 地址 6: 子网掩码 12: 默认网关 返回的数据中,第一个字节忽略,剩下的就是数据了。 写入配置: $ ipmitool raw 0x0c 0x01 CHANNEL KEY DATA... 知道如何读取配置后,接下来就是找到 iLO 4 配置 NIC 的地方了。一番搜索,找到了 HPE iLO IPMI User Guide。在第 101 页,可以找到一个用于配置 iLO NIC 选择的设置:

Read More

ESXi 网络配置

用过 ESXi 的大家都知道,它网页版对网络的配置功能有限,特别是 IPv6 的部分,有的事情无法实现。更好的办法是 SSH 到 ESXi 上直接用命令行进行配置。 可能会用到的一些命令: esxcfg-vmknic: 用来给 vmkernel 配置地址 esxcfg-route: 设置系统路由表 esxcli: 大杂烩,很多功能都在里面 tcpdump-uw:魔改版 tcpdump 一些例子: 设置 IPv6 默认路由: [root@esxi:~]esxcfg-route -f V6 -a default $IPV6 删除 vmkernel 的 IPv6 地址: [root@esxi:~]esxcli network ip interface ipv6 address remove -i $VMKERNEL -I $IPV6/$PREFIX 参考:https://kb.vmware.com/s/article/1002662

Read More

Linksys E8450 OpenWRT 配置 w/ 802.11ax

背景 之前用的 newifi 路由器(Lenovo y1s)无线网总是出问题,于是换了一个新的支持 802.11ax 的路由器 Linksys E8450,目前在 openwrt snapshot 支持。Openwrt 的支持页面:Linksys E8450。 过程 按照支持页面,下载固件: $ wget https://downloads.openwrt.org/snapshots/targets/mediatek/mt7622/openwrt-mediatek-mt7622-linksys_e8450-squashfs-sysupgrade.bin 然后访问固件升级页面:http://192.168.1.1/config-admin-firmware.html#firmware,选择下载的 bin 文件。点击 “开始升级”,然后等待。一段时间后,ssh 到路由器: $ ssh root@192.168.1.1 The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established. ED25519 key fingerprint is SHA256:REDACTED. No matching host key fingerprint found in DNS. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.

Read More

用 gitlab ci 构建并部署应用到 k8s

背景 在 k8s 集群中部署了 gitlab-runner,并且希望在 gitlab ci 构建完成后,把新的 docker image push 到 private repo,然后更新应用。 参考文档:Gitlab CI 与 Kubernetes 的结合,Using Docker to build Docker images。 在 gitlab ci 中构建 docker 镜像 这一步需要 DinD 来实现在容器中构建容器。为了达到这个目的,首先要在 gitlab-runner 的配置中添加一个 volume 来共享 DinD 的证书路径: gitlabUrl: REDACTED rbac: create: true runnerRegistrationToken: REDACTED runners: config: |[[runners]] [runners.kubernetes] image = "ubuntu:20.04" privileged = true [[runners.kubernetes.volumes.empty_dir]] name = "docker-certs" mount_path = "/certs/client" medium = "Memory" privileged: true 注意两点:1. privileged 2.

Read More

Gnome 的 Fractional Scaling

背景 最近发现部分软件(包括Google Chrome,Firefox 和 Visual Studio Code) 在 125% 的 Fractional Scaling 模式下会很卡。找到了一些临时解决方法,但是很不优雅,也很麻烦。所以深入研究了一下 Fractional Scaling 的工作方式。 临时解决方法 根据关键字,找到了 Chrome menus too slow after enabling fractional scaling in Ubuntu 20.04。按它的方法,关闭 Google Chrome 的硬件加速,发现卡顿问题确实解决了。 类似地,也可以[关闭 VSCode 的硬件加速](Chrome menus too slow after enabling fractional scaling in Ubuntu 20.04),在 Firefox 里也可以找到相应的设置。这样操作确实可以解决问题。但是,对于每一个出问题的应用都这样搞一遍,还是挺麻烦的。 另一个思路是,不使用 Fractional Scaling,而只是把字体变大。但毕竟和我们想要的效果不大一样。 一些发现 在物理机进行了一些实验以后,发现一个现象:125% 的时候卡顿,而其他比例(100%,150%,175%,200%)都不卡顿。 网上一顿搜到,找到了 xrandr 工具。下面是观察到的一些现象(GNOME 设置分辨率一直是 1920x1080): 放缩比例 xrandr 显示的分辨率 xrandr 显示的 transform 100% 1920x1080 diag(1.

Read More

常用交换机命令

背景 最近接触了 Cisco,DELL,Huawei,H3C,Ruijie 的网络设备,发现配置方式各有不同,故记录一下各个厂家的命令。 Huawei 测试型号:S5320 保存配置 <HUAWEI>save The current configuration will be written to flash:/vrpcfg.zip. Are you sure to continue?[Y/N]y Now saving the current configuration to the slot 0.... Save the configuration successfully. 进入配置模式 <HUAWEI> system-view 查看当前配置 [HUAWEI] display current-configuration 查看 LLDP 邻居 [HUAWEI]display lldp neighbor brief 查看 CDP 邻居 [HUAWEI]display cdp neighbor brief 启用 LLDP [HUAWEI]lldp enable 启用 CDP [HUAWEI-XGigabitEthernet0/0/1]lldp compliance cdp txrx 启用只读 SNMPv1 community [HUAWEI]snmp-agent sys-info version all Warning: This command may cause confliction in netconf status.

Read More

用 k3s 部署 k8s

背景 最近需要部署一个 k8s 集群,觉得之前配置 kubeadm 太繁琐了,想要找一个简单的。比较了一下 k0s 和 k3s,最后选择了 k3s。 配置 k3s 的好处就是配置十分简单:https://rancher.com/docs/k3s/latest/en/quick-start/。不需要装 docker,也不需要装 kubeadm。 在第一个 node 上跑:curl -sfL https://get.k3s.io | sh - 在第一个 node 上获取 token:cat /var/lib/rancher/k3s/server/node-token 在其他 node 上跑:curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh - 然后就搞定了。从第一个 node 的 /etc/rancher/k3s/k3s.yaml获取 kubectl 配置。

Read More

通过 rook 在 k8s 上部署 ceph 集群

背景 为了方便集群的使用,想在 k8s 集群里部署一个 ceph 集群。 Ceph 介绍 Ceph 有这些组成部分: mon:monitor mgr:manager osd:storage mds(optional):用于 CephFS radosgw(optional:用于 Ceph Object Storage 配置 我们采用的是 rook 来部署 ceph 集群。 参考文档:https://rook.github.io/docs/rook/v1.5/ceph-examples.html 首先,克隆 rook 的仓库。建议选择一个 release 版本。 接着,运行下面的命令: sudo apt install -y lvm2 # required kubectl apply -f rook/cluster/examples/kubernetes/ceph/crds.yaml kubectl apply -f rook/cluster/examples/kubernetes/ceph/common.yaml kubectl apply -f rook/cluster/examples/kubernetes/ceph/operator.yaml # debugging only kubectl apply -f rook/cluster/examples/kubernetes/ceph/toolbox.yaml kubectl apply -f rook/cluster/examples/kubernetes/ceph/direct-mount.yaml # CephFS kubectl apply -f rook/cluster/examples/kubernetes/ceph/filesystem.yaml kubectl apply -f rook/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.

Read More

PCB 笔记

记录一下在学习画板子过程中学到的心得。 工具 目前使用过 KiCad 和 lceda: KiCad: 开源软件,跨平台。 lceda:在线编辑,不需要安装,和 lcsc 有深度集成。 项目 jiegec/HT42B534USB2UART 采用的是 KiCad 5 编写的。目前正在做的另一个项目采用 lceda 流程 选择所需要使用的芯片,查找芯片的 datasheet。 寻找采用了芯片的一些设计,特别是看 schematic。 按照 datasheet 里面推荐的电路,或者是其他人的设计,画自己需要的 schematic。 设置好各个元件的 footprint,然后转到 PCB 设计。 在 PCB 里面布线,生成 Gerber 等文件。 把 Gerber 给到生产商(比如 jlc),交付生产。 如果是自己焊接,则需要购买元件,比如从 lcsc 购买。 收到 PCB 和元件后,自己按照 BOM 和 schematic 焊接各个元件。 笔记 对于一些连接很多元件的信号,比如 GND,可以留作铺铜解决。也就是说,先不管 GND,把其他所有的信号都接好以后,再在顶层铺铜;如果还是有没有连接上的 GND,可以通过过孔(Via)走到底层,在底层再铺一层铜。 对于外部供电的 VCC 和 GND,在 KiCad 中需要用 PWR_FLAG 标记一下。 在 KiCad 中设计 PCB 前,要把生产商的工艺参数设置好,不然画了也要重画。 lceda 在选择元件的时候,可以直接从 lcsc 里选择,这样可以保证封装和商品可以对得上,不需要手动进行匹配。 如果要用 jlc 的 SMT 贴片,先在 SMT 元件列表 里搜索所需要的元件;推荐用基本库,如果用其他库,则要加钱;选好元件以后,用元件编号去 lceda 里搜索并添加到 schematic。 对于涉及模拟信号的设计,比如音频,需要特别注意模拟信号的电和地都是单独的:AVCC 和 AGND。所以要特别注意 datasheet 里面不同的地的表示方法。最后,再用磁珠把 VCC 和 AVCC、GND 和 AGND 分别连接起来就可以了。可以参考 DE2 板子中第 19 页的音频部分设计 和 Staying well grounded。 在 schematic 里经常会出现在电源附近的电容,那么,在 PCB 中,也尽量把这些电容放在对应的电源的旁边。 耳机插座里面,一般分三种组成部件:Tip,Ring,Sleeve。只有两段的是 TS,三段的是 TRS,四段的是 TRRS。TS 是单声道,T 是声音,S 是地。TRS 是双声道,T 是左声道(或者单声道),R 是右声道,S 是地。TRRS 则是双声道加录音。一般来说,LINE IN 是双声道,MIC IN 是单声道,它们的阻抗也不同;LINE OUT 和 HEADPHONE OUT 都是双声道,但 HEADPHONE OUT 经过了额外的放大器。 遇到一个 SPI 协议没有 SPI_MISO 引脚的芯片,可能说明它是 write-only 的。 手焊的基本元件,一般用 0603 加一些 Padding 的封装;SMT 的话,则建议用 0402 封装。 I2C 的信号线一般需要加一个几 K 欧姆的上拉电阻到 VCC。 未完待续。

Read More