给ESXi应用阿里云证书

网上有很多教程如何给ESXi使用自己的证书,我折腾了一回还把ESXi搞瘫了几天,记录一下供各位参考,免得你们跳进同一个坑。

这里有一个Windows下比较完整的教程,我的主要操作步骤也是参考这个的:

https://koolshare.cn/thread-137269-1-1.html

 

Step 1:购买域名并购买阿里云证书

略,这个不知道也没必要折腾这个了。

 

Step 2:生成CSR文件,这一步就是坑关键

生成CSR文件的openssl命令,注意参数:

openssl req -new -nodes -out rui.csr -keyout rui-orig.key -config openssl.cfg

根据这个教程是需要在windows下下载openssl,其实在OSX下本身就支持这个命令,关键是openssl.cfg文件,其实也是不需要的,openssl支持在命令行提示中输入(完成)配置。

后面回头看这个命令,其实也非常好理解-keyout rui-orig.key,这个参数的意思是:生成一个key文件,而我则是在参考了这个文章中的内容后,按如下顺序执行的:

https://yq.aliyun.com/articles/47314

命令1:openssl genrsa -out some.key 2048

命令2:openssl req -new -key some.key -out some.csr

这两个命令一个生成.key文件,一个生成.csr文件。第2个命令会提示你输入相关信息(比如:CN/HN/CS等,注意common name必须是你的域名,其它包括邮箱密码都可保持为空)

生成的.key文件最后需要上传到ESXi上,而csr文件则用于申请证书。

注意在windows版的教程中还有一个命令是

openssl rsa -in rui-orig.key -out rui.key

如果按我的两个命令的方法执行则不需要再执行这个转换的命令,因为用openssl genrsa本来生成的就已经是RSA的私钥。

在没有解决这个问题之前,我先通过搜索找到这样一篇文章,可以通过keychain生成csr但很遗憾我没有找到方法得到.key文件,所以就卡在这了。

https://www.jianshu.com/p/f20caf82938d

而我最大的特点是勇于折腾,在没有key文件的情况下,覆盖了crt文件并重启了ESXi,然后就没有WebUI了,解决的方法后面讲。

 

Step 3:用生成的csr文件生成证书

这个与前面的windows教程完成一致,只强调一个:申请证书时填的域名必须与CSR文件中的common name中的域名完全一致。

Step 4:下载并替换证书

从阿里云下载签发域名的Nginx版证书,后缀应是pem格式,假设这个文件为A

之前生成的some.key文件,假设这个文件为B。

通过SSH登录到ESXi,进入目录/etc/vmware/ssl目录,备份(我理解其实删除也完全没问题)rui.crt/rui.key这两个文件。

然后,通过vi命令创建新的rui.crt/rui.key这两个文件并保存,内容是:

A-> rui.crt

B->rui.key

 

Step 5:重启Management Agent

不知道命令行怎么重启,我正好连在console上,用键盘重启的,没有连接console的话直接重启ESXi效果也一样。

前面生成csr的时候因为没有生成正确的key文件,所以出现了一个非常严重的问题就是Management Agent(WebUI)连接不上了,但SSH正常。

解决的方法非常简单(需通过SSH连接):

1)备份后移除/etc/vmware/ssl下的rui.crt/rui.key这两个文件

2)执行/sbin/generate-certificates命令重新生成证书

3)重启Management Agents

 

操作完成后,可通过域名直接访问ESXi,Chrome不会提示证书异常,同时也可以保存密码了,对我等强迫症来说是个好事。

 

Continue Reading

推荐一款OSX下的截屏软件SnipPaste

一直想要一款心目中理想的截图软件:

1. 简洁快速

不要有乱七八糟的功能,加载和使用的速度快。

2. 支持截图后的标注操作,功能够用就行。

支持画框,箭头,文字,涂抹(马赛克)基本上就够用了。

3. 支持通过快捷键保存到剪贴板和文件

有两种比较常用的模式:

一)截图后立刻编辑(标注)然后保存(可通过快捷键选择进剪贴板或文件),一般截图都是这个情况。

二)截图后不需要编辑直接进剪贴板或文件。大量截图不需要标注的,这种情况比较少见,而且如果标注窗口支持快捷键的话对操作影响也很小,所以其实只需要完美的支持模式一即可。

前面用过的软件很多,主要是系统自带+SNIP。

SNIP其实也非常不错,前面我也推荐过,后面为什么改用系统的我不记得了。最近在大白软件站看到了截图软件推荐的SnipPaste就用一下试试,发现也非常不错。

 

UntitledImage

软件支持win/osx,目前osx仍是beta,官网上也没有截图。

优点:

1. 功能简洁但足够的强大;

2. 上面所有的需求都支持,同时还支持取色,这一点很好;

3. 支持多种快捷键保存方式,模式一和二都能比较好的支持。

4. 有一个很好用的paste功能:当你想要“标注”一个已经存在的图片时,从系统里复制然后paste就可以编辑了。

5. 支持很多有特色的选择操作(按像素调整选择区域)

缺点:

1. 先说最大的缺点:不支持长页面的截图,这一点确实是很大的问题,但已列入更新计划。XNIP就支持,但免费版有水印。

2. 标注界面比xnip少一个很常用的自动编号数字的功能。写操作手册时很需要。

3. 标注段选择保存为文件支持两个模式:手工保存(cmd+S)和快速保存(cmd+shift+s),前者快捷键简单但需要用户确认一次文件名,而快速保存则可以取消。建议交换这两个快捷键。不过支持另外一个快捷操作的配置:Enter/鼠标双击/中键双击的默认操作配置。可以把Enter配置成进剪贴板,双击快速保存。

4. 之前以为不支持选择控件,其实是需要开启一个配置项。

 

总结一下:

XNIP与SnipPaste我觉得都挺不错,关键功能上Xnip支持Scroll截图占优;但细节功能上后者明显更为强大。Xnip的高级功能收费(Scroll免费版有水印),SnipPaste细节功能较多且适合喜欢键盘操作的开发人员使用。SnipPaset能够快点支持Scrollfalr话就可以抛弃Xnip了,如果能够支持前面的标注自动增长序列更好。

话说我现在的截图用的是系统自带的,我完全不记得为什么放弃XNIP了:)因为不支持对TouchBar截图?

 

Continue Reading

迁移gitea遇到的remote rejected的问题

备案域名之后,把git服务从原来的aws免费主机搬回了国内,同时修改了域名指向,恢复了gitea服务之后,有同事反映说commit失败:

Snipaste 2020 02 08 00 05 50

一般的说法是权限问题,但是整个恢复(迁移)过程并未对gitea的用户权限做修改,而用管理员账号做过新的repo的commit操作均是正常的,后面在gitea@github找到答案:

https://github.com/go-gitea/gitea/issues/2270

UntitledImage

登录gitea后台,dashboard执行一下(Resynchronize pre-receive, update and post-receive hooks of all repositories.)搞定。

UntitledImage

Continue Reading

折腾SSL证书

备案了brallow.cn,又申请了阿里的免费证书,并应用了阿里的动态域名,把家里的NAS导入了新的证书:

记录几个常用的东西:
1. 用下载的证书,apache版,key是私钥;public.crt是公钥;chain.crt不知道干嘛用的,导入即可。

2. 不可应用DSM中的”自定义域名“设置,否则通过该域名访问DSM时将出现Synology的404页面;如果出现这一问题,使用IP或其它域名访问即可。

3. 应用配置后注意将该证书修改为默认证书,并将相关服务通过配置修改为新的证书(默认将使用自动生成的证书)。

可能是我的DSM的原因,开启https并应用设置重新启动web server之后并不能通过https访问,重启以后解决了。

其实我的本意是要把ESXi应用证书的,(不知道是不是这个原因,没有有效证书的情况下Chrome不能记录(保存)密码)但操作步骤太复杂了,打算放弃。

Continue Reading

ESXi异常关机,虚拟机报Failed – Object type requires hosted I/O

本来是在通过HAAS折腾DC1插座的,结果不知道为什么突然插座就断电了。

解决方法很简单,两个命令:

  1. vmkfstools -x check ./hassos_ova-3.7.vmdk,其中vmdk中待检查的磁盘文件名。
  2. ESXi会返回提示该磁盘是否需要修复,如果需要执行下一步。
  3. vmkfstools -x repair ./hassos_ova-3.7.vmdk,ESXi返回修复结果。
  4. 重启虚拟机:)
Continue Reading

Gitea

一直觉得gitblit界面比较low,而且缺少基本的issue这样的功能,所以打算升级一下,有几个可能的选择:

gitlab gogs gitea

gitlab功能最强大,但是也安装复杂,最重要的是对系统的要求比较高不适合于小团队的;

gogs是gitea的爹,安装试用了一下,权限控制的功能实在是太差了。给用户加入一个organiaztion,然后呢,它就可以查看这个org下所有的repo,这也太夸张了吧?原因据说是gogs因为只有一个维护者,比较固执。

gitea是在gogs的基本上扩展的,权限上的功能有所改进,基本满足需求。

安装过程,非常简单:

  1. 在Linux上合建git用户,创建/home/git目录,并切换到此目录,同时切换到这个git用户最为合适;
  2. 下载gitea二进制文件只有一个文件gitea;[参考] 下载最新的版本就是;
  3. 执行gitea web,启动成功了!
  4. 访问http://youhost:3000/点login进入install界面;注意之前就建议过切换到git用户,否则有一些参数需要修;
  5. 切换到root用户,自行创建gitea.serivce并存放到/etc/systemd/system [参考]
  6. 执行systemctl enable gitea,启用gitea服务(自动运行)。[参考]
  7. 通过systemctl start gitea,然后通过3000端口可以访问表示服务加载正常了。

几个技巧注意一下:

  1. 资料说可以在custom/templates/中添加自定义模板从而修改界面,我测试发现有问题,后经检查发现一定要在gitea.service中设置正确的gitea home(按照我上面的描述应该是指向/home/git这个目录),相应的custom,data,gitea-repositories,log目录等均创建于此目录下,如果在gitea.service中设置的home目录不正确,则会在错误的目录下搜索tempaltes目录导致不能生效;
  2. 不要让用户加入任何组织,而是在组织内创建team,让用户加入team,这样用户可以查看:自己加入的,所属team加入的任意repo,并且可以查看team归属组织的基本信息,但不能查看(列出)其它未授权的repo;如果不让用户加入某个组织的team,则用户只能查看其加入的repo,即使这个repo属于某个组织,查看组织基本信息时也会显示404。
  3. 没找到gitea dump命令指定输出目录的参数,指定临时文件无效,最终文件仍然生成在“当前目录”,注意不是gitea所在目录。
  4. 放一个我自己用的定时任务脚本:备份整个gitea数据,保留5个备份,通过rclone同步到网盘;
  5. 直接下载的giteaweb是一个带版本号的文件,可以通过ln -s创建一个名gitea链接,这样以后升级时只要下载一个新版本并重新设置链接即可;

!/bin/bash
echo ‘do backup now’
cd /home/git/backup/
sudo -u git /home/git/gitea dump
echo ‘remove expired backups’
ls -1tr | head -n -5 | xargs -d ‘\n’ rm -f —
echo ‘sync with OneDrive’
rclone sync /home/git/backup OneDrive:/backup/gitea/

Continue Reading

ESXi单个主机定时开关机的设置

居然有人留言了,我把几个我觉得可能比较重点的地方重新标一下:)

自己在家里折腾单个ESXi主机,为了节能计划在晚上自动关机。折腾了一阵,基本搞定了。
ESXi的版本是6.7:)如果版本差异太大可能不适用。
1. 首先是如何定时关机的问题

首先是关机的问题服务器系统不存在计划性关机的功能,只能通过脚本实现。
在esxi中不支持cron命令,只能直接编辑cron文件,文件文件的路径是:
/var/spool/crontab/root
真接修改这个root文件意义并不大,因为一旦ESXi重启,这个文件会被重置。此时需要修改/etc/rc.local.d./local.sh,在exit 0这一行之前添加如下的脚本:

##以#开头的是注释行,可不添加
#get the cron service pid and kill it.
#杀掉已经存在的cron进程
/bin/kill $(cat /var/run/crond.pid)

#add shutdown script to crontab(root)
#修改/var/spool/crontab/root文件,增加相应的执行配置
#待修改的内容包括:
# 45 17 * * * 执行的时间,与cron相同,注意是UTC时间需换算
#/vmfs/volumnes/datastore1/autoshutdown.sh执行脚本路径
#注意一定要保存到datastore1这样的重启不会丢失的位置
#/var/spool/cron/crontabs/root是root用户cron配置文件位置,一般不用修改
/bin/echo ’45 17 * * * /vmfs/volumes/datastore1/autoshutdown.sh’ >> /var/spool/cron/crontabs/root

#restart cron service
#重启cron进程(将加载修改后的root文件)
/usr/lib/vmware/busybox/bin/busybox crond

  • 注意注意注意
    修改完(以前在rc.local.d后面多写了一个点:/etc/rc.local.d./local.sh应该是(/etc/rc.local.d/local.sh)文件后,工作没有结束,需要执行一次/sbin/auto-backup.sh,将修改后的local.sh文件保存,否则结果将和之前的root文件一样,重启后丢失。
  • 上面操作的实质是在ESXi重新启动时,生成(修改)/var/spool/crontab/root文件,添加自动关机的执行脚本,因此必须重启一次机器才能生效(或者手工执行一次这个脚本)
  • 一定要保存在存放虚拟机的存储空间中,这样可确保脚本不会因为重启而丢失。

2. 接下来是关机脚本的内容

#!/bin/sh

#shutdown all VMs(2,3,9 is VMID,add your VMIDs here)
vim-cmd vmsvc/power.off 2
vim-cmd vmsvc/power.off 3
vim-cmd vmsvc/power.off 9

#Poweroff Host
/sbin/poweroff

脚本中的vim-cmd vmsvc/power.off 2是关机命令,将对指定的虚拟机(VMID)发送关机命令,在宿主机关机前关闭所有虚拟机,这一操作是否有必要我不确定。我的ESXi上运行了NAS,为保护数据加这一段。
最后是关机命令。

后面查了一下,其实是有点画蛇添足了,因为poweroff就相当于直接拔插头……应该用power.shutdown,但是这个命令是异步的,后面直接跟/sbin/poweroff的话,效果未知:)

后面干脆改了,因为只有NAS是一直开机,其它虚拟机可能是不开机的,所以在NAS中自己定义的了一个计划性关机,这一部分相当于无效,可以只保留/sbin/poweroff。

附几个相关命令:
vim-cmd vmsvc/getallvms 查询所有已配置的虚拟机,可获得VMID
vim-cmd vmsvc/power.getstate VMID 通过VMID查询相应的虚拟机的当前状态(开关机)
vim-cmd vmsvc/power.shutdown VMID发送关机信号(命令),但操作系统未必会真正关机。
vim-cmd vmsvc/power.off VMID 直接关机(相当于关电源)

3. 开机:)
通过ESXi是不能实现开机,可以借助如下方案:
BIOS如果支持定时开机,可以使用,就是需要修改配置时很麻烦。
BIOS中可设置断电后再恢复时自动开机,配合智能插座的定时通断电功能,实现定时开机。
注意:这个功能可能对某些主板是无效的!我目前使用的这个主板的设置就是:只有当意外断电(非正常关机)后断电再通电时自动启动,如果是正常关机后哪怕再断电通电也不会开机。
BIOS中可设置WOL唤醒,通过路由器等执行WOL唤醒脚本:)

Continue Reading

Rime输入法配置心得

Rime相当好,在各个平台(win,osx,ios,android)我都用上了。

目前来说,在win/osx/ios上使用起来都非常顺手,而android略感诡异(键盘布局),用得上,以后再折腾。
其中win/osx相对来说配置基本上是一致的,后面的说明也基本上是以PC(win/osx)为主,而ios平台的则完全是因为它本身的配置就非常实用了,唯一需要做的就是导入合适的码表和熟悉的wubi86配置。
以pc平台的配置来说几个关键的地方:

1. 输入法的自定义扩展配置文件名
比如:default.yaml对应的扩展配置文件名是default.custom.yaml
而相应的输入法,比如wubi86.schema.yaml对应的配置文件不是wubi86.schema.custom.yaml,而是wubi86.custom.yaml

这一点让我折腾了很久,不知为什么配置就是不生效。2. 自定义配置文件配置项的写法
假设原有配置文件(x.yaml),内容大体如此:

x:
a: 1
b: 2
y:
p: 3
q: 4
z: 5
M:
j: 5

自定义配置文件中有两种指定方式指定配置项,例如:

patch:

x:
y:
z: true

即采用与原配置文件相同的缩进的方式配置自定义的配置项,这种方法一般情况下是错误的!
因为这种情况下不只是最末端的节点被替换了,是整个顶端起被替换了。
比如,前面这种情况,合并后的配置文件中,x中的a,b项,y中的p,q项都没有了,最终生成的配置文件是:

x:
y:
z: true
M:
j: 5

另一种方法是使用/来分割不同级别的配置项名,这是一般情况下的正确用法。
如:

patch:
x/y/z: true

当这个文件和原文件合并后,生成的最终配置文件是:

x:
a: 1
b: 2
y:
p: 3
q: 4
z: true
M:
j: 5

3. 反查无效
网上下载的wubi86的配置文件中可指定相应的pinyin_simp输入法为相应的反查输入法,但是反查无效。
此时需要检查几项:

  • 对应的输入法名称是否正确(pinyin_simp就是正确的输入方案名称,且这个输入方案并不需要在default.yaml中指定<即这个输入法可以作为纯粹的反查输入法,在输入法列表中是不可见的>)
  • 对应的输入法是否有码表文件(pinyin.dict.yaml是相应输入方案的码表,已经编译的码表<table.bin>文件是不能实现反查的,大部分情况下是这个原因)

4. 中英文输入状态与中英文标点状态
先明确一点:

  • 英文输入状态下,只能输入英文标点,只有中文输入状态下才有中英文标点之分。

另明确以下操作习惯:

  • 切换到输入法时多半是要输入中文
  • 切换到中文时多半是要输入中文标点
  • 一般情况下不会操作切换半角/全角
  • 一般情况下不会操作切换标准字符集(GB)与扩展字符集(GBK)

因此,配置的内容如下:

  • ascii_mode/reset=0,表示任何情况下从其它输入法切回rime时重置(reset)为中文;
  • ascii_punct/reset=0,表示任何情况下从其它输入法切回rime时重置(reset)为中文标点,原因是:默认为中文自然是中文标点;
  • full_shape不做reset设置,表示不会重置full_shape设置,即沿用上一输入法的全角半角状态。
  • extend_charset不做reset设置,表示不会重置字符集的设置。

 

 

 

 

 

 

 

Continue Reading

测试千兆内网速度

家里折腾完了墙布之后,想把之前用接线子连接的网线改成模块对接方式,更好看点(其实隐藏在开关面板盒子里根本看不见!),就买了几个模块然后接上:)结果千兆变百兆了。

手上没有测线仪,不知道哪里有问题,线头又比较短了,不敢随便减了再接,所以又折腾了一个测线仪,#4线(蓝)没接紧!

再测试NAS复制文件,最大还是11M,这就奇怪了!再测一次模块 到路由器,1000M正确的。突然想起,更换过一根NAS的线(成品线),我想当然的认为是5E以上的,一看5……换掉,速度立刻到了50M+

因为复制文件还受硬盘速度隐藏,为了确认一下网速,又下了个iperf测试一下网速:

服务端”

iperf3 -s

只要一个-s参数就行,有些文章写了需要 -s -u 命令(udp模式),可能是老版本的,新版本应该是不需要再区分了。

客户端:

iperf3 -c -u -b 1000M -t 60 -i 5

-c客户端模式
-uUDP模式
-b测试目标带宽:这个不是测试的传输文件大小,如果指定的是100M哪怕实际带宽有1G,也只能测出100M
-t测试传输时长(秒)
-i每次传输间隔时长(秒)

实际测试带宽 890Mbits左右,通信路径是:虚拟服务器-》物理服务器-》路由器-》模块转接1-》路由器2-》模块转接2-》客户端,中间经过了3跳,还有各种影响,这个带宽还是让人满意的。

Continue Reading

记录一下我的云端备份脚本

rem set ENV
path %PATH%;c:\progra~1\winrar\
path %PATH%;c:\windows\system32
path %PATH%;C:\green\rclone\
rem BACKUP NOW
set backupSource=c:\gitresp\
set backupPath=C:\OneDri~1.abc\vps.qc\git\
set fileName=gitbak_%date:~0,4%%date:~5,2%%date:~8,2%
set fullFileName=%backupPath%%fileName%.rar
echo %fullFileName%
rar a %fullFileName% %backupSource% -r
echo %fullFileName%
rem REMOVE OLD ARCHIVE
cd %backupPath%
forfiles /D -7 /c "cmd /c del /Q @file"
rem SYNC
rclone sync %backupPath% onedrive:backup\git\

计划任务,定期执行,将指定的目录(backupSource)通过rar(需要先安装winrar或其它命令行)压缩为gitbak_年份日期.rar的名称,并放到backupPath目录下。

执行forfiles删除7天外的文件。

执行rclone(需要事先下载rclone并配置相应的OneDrive的登录信息),将相应的备份目录,同步到云端的指定目录(backup\git)。

先通过Path命令添加winrar,rclone等执行文件目录。

Continue Reading
1 2 3 9