Jasper Ji

始以竹篦子久知痛痒,后因一滴水渐至澎冲。

0%

开始用Go应该是17年底的时候,那会做游戏,后台是用Go写的,虽然我主要负责Unity客户端方面的工作,不过也是经常帮忙给后端的Go小伙解决一些问题,自己也写一些Go的小东西。

后来又做物流系统,重写系统时有考虑用Go,不过因为大部分的外部接口对接都是Java的,为了省事就使用了Java。不过如果是自己的项目的话,还是愿意用Go,毕竟Java还是有点重。

IDE

原来有用过GoLand,为了轻量点,先用VS Code,众所周知的原因安装插件老失败,最后设置Go的代理就可以了。

1
go env -w GOPROXY=https://goproxy.cn,direct

C程序员的礼物

直接试着写个搜索二叉树,其实除了语法上跟C的一些类型定义次序上有点不习惯外,其他方面对于C程序员来说,还是熟悉的用法,比如指针的指针这样的概念,毕竟Go是原来C的那帮人搞的,兼顾C的同时也结合不少Python这样的现代语言的特性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package main

import "fmt"

type Node struct {
data int
leftNode *Node
rightNode *Node
}

func insert(tree **Node, value int) {
if *tree == nil {
var tempNode Node
tempNode.data = value
*tree = &tempNode
return
}

if (*tree).data > value {
insert(&(*tree).leftNode, value)
} else if (*tree).data < value {
insert(&(*tree).rightNode, value)
}
}

func perOrder(tree *Node) {
if tree != nil {
fmt.Printf("data: %d\n", tree.data)
perOrder(tree.leftNode)
perOrder(tree.rightNode)
}
}

func main() {
var tree *Node

insert(&tree, 9)
insert(&tree, 4)
insert(&tree, 15)
insert(&tree, 6)
insert(&tree, 12)
insert(&tree, 17)
insert(&tree, 2)

perOrder(tree)
}

对于孙正义和软银我还是蛮好奇的,首先我不太清楚这是个什么样的公司,“孙正义”三个字听着好像不像日本人。带着疑惑我迫不及待的购买了这本由彬本贵司撰写的《孙正义传》,大概用一天的时间很快的读完了,以下是一些总结。

孙正义是爷爷辈来到日本谋生的,到他这是第三代,日本姓是“安本”。作为归化的日本人,已经在文化上深深的日本化了,比如他对明治维新时代的倒幕派人士坂本龙马就很崇拜。因为早年在美国学习的经历让孙正义很有国际视野,无论是从技术还是经营上。

孙正义在美国有学习计算机,但总的来说他不属于技术牛人那种,属于有技术背景的商人。从他当年跟大学的教授合作开发翻译机,获得了夏普的资金,赚了笔钱,接着创办软银,开始做软件代理业务,看到这我才发现软银原来是这个意思。

软银这家公司感觉好像并没有创造什么,主要的业务在日本,包括软件流通、宽带、手机运营商,日本雅虎等。感触最深的就是他不停的收购公司,资金调度这块还是很牛了。另外孙正义也很有投资眼光,对雅虎和阿里巴巴这些企业的投资着实赚了不少。

总体来看就是要做朝阳产业,提前布局,而且布的都是大局,大资金的事。这点还是值得去学习,花点时间好好研究下未来的走向也许更重要。

使用FreeDOS运行COM

FreeDOS运行COM文件记录,主要是拷贝软盘里面,然后执行。

1
2
3
sudo mount -o loop xxx.img /mnt/floppy # 挂载,挂在失败的话在mnt目录下创建floppy文件夹
sudo cp xxx.com /mnt/floppy/ # 拷贝文件
sudo umount /mnt/floppy # 卸载

网上书中的源码中的freedos.img并不包含debug这样的工具,不过debug并不能调试保护模式的代码。

bochsrc配置文件中添加

1
magic_break: enabled = 1

最后在汇编代码需要断点的地方添加

1
xchg bx, bx

在FreeDOS执行COM文件后,就会进入到bochs调试。

Bochs

有用的调试系统的命令
1
2
3
4
sreg # 显示段寄存器的内容
info gdt # 显示GDTR寄存器的内容
creg # 显示CR0寄存器的内容
print-stack # 查看栈的内容

参考

如何调试操作系统

编译

目前使用的是64位的Ubuntu环境,默认会编译成64位的,编译成32位的在参数上有些差异。

1
2
3
nasm -f elf32 foo.asm -o foo.o # NASM编译成ELF32位目标文件
gcc -m32 -g -c bar.c -o bar.o # GCC编译成32的目标文件
ld -m elf_i386 foo.o bar.o -o foobar # 链接目标文件,生成执行文件

GDB

一些常用的GDB调试的命令

1
2
3
4
5
6
7
8
9
set disassembly-flavor intel # 默认AT&T格式,可以设置为Intel格式
disassemble _start # 反汇编,这一步主要是为了后续设置断点用
break * _start + 10 # 设置断点,此处是_start开始的第10行代码处
run # 执行程序,设置断点后会停在断点处
step # 单步调试,可以简写为s
info registers # 显示寄存器
layout reg # 一般我会使用这个
q # 退出程序
x 0xffffd070 # 查看0xffffd070地址处的内存

参考

ASM 110: Gdb (30 pts)
GDB命令基础,让你的程序bug无处躲藏

《保护方式下的80386及其编程》即《Programming the 80386》的中文翻译版,不过当年并没有标注翻译出处。这本书对于写一个基于x86操作系统非常有用,另外对于研究早期的Linux内核也很有参考,因为林纳斯当年也是参考《Programming the 80386》这本书的,包括386BSD的作者也是参考这本书了。

这本书是了解80386的保护模式最好的书籍,关于8086的书籍和汇编语言资料不少,但是关于80386的保护模式书籍很少,很多后来的书籍的知识都是转来转去的,有些只是讲个大概,没有把细节说明清楚,往往是一知半解了。不同的是此书可以说是讲解非常细致,概念很清晰,主要是此书的作者是80386的总设计师,所以这本书如果讲不明白,那还有其他书籍吗。

缘起

做程序员也有些年头了,做过的项目各式各样,但都不是什么成功项目,所以到底如何证明自己呢?于是想到了尝试写个操作系统试试,也算通用了。

大概7、8年前买过一本《Orange’S 一个操作系统实现》,主题很吸引我,可惜没读过三章就停滞不前了,汇编以及体系方面的东西让我这个半路出家的程序员看的一脸苦相,但我还是试图试试,于是就买了另一本关于汇编的书籍,王爽老师的《汇编语言.第三版》,依旧记得去乾陵一日游大巴上,我努力的读着,可惜作为一个刚接触脚本语言的人来说,汇编语言太难了,中间需要跨越的东西太多了。渐渐就放弃了,后来直接把这两本书给卖掉了。

今年突然间又想,我应该尝试写一个简单的操作系统,多年的工作以及自学,使得我对编程有了一个相对完整的认识,这个想法似乎不像当年那么不靠谱。但该如何下手呢?刚开始我只想能跑一个Hello wrold的例子也可以,网上找了下最多的居然是我当年卖掉的那本《Orange’S 一个操作系统实现》书中的例子,可惜当年我也没怎么看懂,只是买了本书而已。

例子

最简单的例子,来自《Orange’S 一个操作系统实现》一书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志

这就是一个直接运行到硬件上的一段程序,而不是我们平时在操作系统写应用代码那样。对于一个实践者而言,我很想把这段程序跑起来,这很关键,只要能跑起来,我们就可以试图修改下,再跑起来,这样认识上才能有提高。其实跑这个例子也是费了点功夫,首先在虚拟机上安装了一个的Linux发行版Ubuntu系统,书中用到的汇编是跟MASM很相似的NASM,首先NASM的教程不多,不过还好可以参考MASM汇编的书籍。另外就是软盘的制作相关的东西,最后是安装Bochs虚拟机,这个虚拟机跟平时用的有些特别,不过还是了解如何操作,最后成功的把这个例子跑了起来。

汇编和CPU

似乎可以继续一路向前了,可惜看了头三章后,我发现了些问题。首先我对NASM汇编的东西几乎是一片空白,书的前几章几乎离不开汇编语言了,而看的非常吃力。另一个是我对PC的体系缺乏细节的了解,虽然之前也有了解但实操的过程中遇到的问题更具体。

NASM的书籍不多,《汇编语言.基于Linux环境.第三版》是一本从体系的角度来讲解NASM的书籍,一方面学习了NASM,也让我重新思考从8086到80386的一些变化,好几个点很有启发。王爽老师的《汇编语言》,也是一本非常不错的参考书,汇编语言在形式上与高级语言还是有着巨大差异,一开始我把心思放在那些寄存器之类上了,而忽略了一个编程语言应该是能够写点东西出来这事上。《汇编语言》这书很好的带我进入如何写点东西的正轨上。

8086方面的书籍,8086总设计师莫尔斯写的《8086初阶-体系结构、系统设计和程序设计入门》。王爽老师《汇编语言》也主要是讲8086的汇编的。80386的书籍不多,80386的设计师写的《Programing the 80386》一书,非常不错。中文版是93年出版的《保护方式下80386及其编程》一书,虽然没有备注是翻译,但我跟英文版对照后,确认就是翻译自《Programing the 80386》,主要是学习保护模式。

这里需要注意的是实模式与保护模式的差别,很多时候一开始如果研究的是8086的,往往需要转换下思维,最好的书籍依旧是《保护方式下80386及其编程》一书,于渊的《Orange’S 一个操作系统实现》细节上还是有点模糊。

总结

最终操作系统并没有完整的实验下去,主要是因为最难的部分也是最容易忽略的如何在特定架构上如何开始,把这一步迈过去后,基本上跟大多操作系统讲的差不多了,主要部分就是使用C语言来实现。

虽然实验已经过去了几个月了,最近一直在看Java并发的东西,发现实际写过点操作系统还是很有帮助的,比如更能从CPU的角度来思考。

主要试了下基于二进制日志文件的方法

主库设置

主要的坑,一般教程上写的是编辑/etc/my.cnf。安装的Mysql 8的配置略微有些问题,my.cnf文件导入的是另一配置!includedir /etc/my.cnf.d,所以以下配置我是写在了/etc/my.cnf.d/mysql-server.cnf里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
###主从数据库配置核心部分
# 设置同步的binary log二进制日志文件名前缀,默认为binlog
log-bin=mysql-bin
# 服务器唯一id,默认为1 主数据库和从数据库的server-id不能重复
server-id=1

###可选配置
# 需要主从复制的数据库
binlog-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# 设置二进制日志自动删除/过期的天数,避免占用磁盘空间。默认值为0,表示不自动删除。
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

iPhone 6s已经用5年了,待电确实比较差,外出的话离不开充电宝。iPhone 12出来后,我就下单iPhone 12 pro了。这次的iPhone 吸引我的是新外观以及对5G的支持,当然pro系列有激光雷达的功能。外观回归到iPhone 4时的设计,因为宽度比原来宽,所以拿着还是有点割手,套上外壳能好点。大小上来说,对于我这种小手还是觉得iPhone 6s的尺寸刚好,iPhone 12 pro的单手操作还是有担心机子摔在地上的风险。自从iPhone出了刘海屏后,我一直比较难以接受这样的设计,更钟情于iPhone 6s 这样的设计,其实在我看来苹果可以把手机的上下部分变短,比刘海这样的设计好。iPhone 12 pro的相机确实牛,这点是值得升级的,另外拍立得这个功能也非常不错。

谈谈我最后为什么退货呢,作为一个曾经的iOS开发者,对这几年的iPhone已经失去了升级的想法,一方面新iPhone价位比以前贵,功能其实没有太大的突破,从生产力角度来看,我更愿意在macbook pro上投资,而不是iPhone。另外iPhone 6s本身不怎么卡,只是电池不行了,这个完全可以换一个就可以了。升级最大的动力是支持5G,但是目前运营商的5G有点贵,而且5G设施也还在陆续建设中,另外平时用的更多是Wi-Fi,移动网络下也很少看视频之类的,所以并没有高速网络的需求。目前iPhone 12是支持5G的初代产品,所以有提升的空间。最后一点,刘海设计依旧是心里吐槽的对象,如果他出一个iPhone 6s的设计,但支持5G的手机,我可能更愿意接受。

退货流程

这是头一次退货,在订单中确认退货,会显示取货。取货的时间都没有问题,来了一个邮政的人员把机子简单的验证后,然后就把机子拿走了,没有留下快递单号。因为是头一次,取货后的第二天我看来下订单状态,依旧显示取货中,过了两天我发现还是这个状态。心里有点嘀咕,不会被骗吧,一般的寄送快递,当天晚上基本上状态都改变了。后来我直接给苹果客服打电话确认了,说一切都正常,机子也确实被取走了,因为会寄送到工厂,工厂收到后还要验货后才会更新订单的状态。大概是一周后,订单状态终于变了,钱也退了。

缘起

今年十一长假因为跟中秋重叠,放八天假,趁着时间长决定去一趟宁波的天童寺去看一下。天童寺位于浙江省宁波市鄞州区太白山麓,为什么要去这座寺庙呢?说到这里要追述到《乔布斯传》这本书,大都数人因为这本书也会知道另一本书《禅者的初心》,作者是铃木俊隆,当然再深挖一点,就会知道一位与乔布斯关系密切的禅师乙川弘文。铃木俊隆与乙川弘文都是日本曹洞宗的僧侣。说到日本曹洞宗,不得不提他的开山祖师道元禅师,时间大概可以追述到南宋时期,道元禅师跨海来寻觅佛法,最后在天童寺遇到了如净禅师,得到如净禅师的认可后,回到日本后创建了日本曹洞宗。

关于天童寺的记载文献还是很多的,而关于如净禅师的记载则比较少,很多都是从道元禅师的记述中得知。这点类似李小龙跟叶问一样,因为道元禅师在日本的成功以及后世日本曹洞宗僧侣在海外弘法的成功,使得如净禅师逐渐为人们所知。不少关于乔布斯跟禅的文中没有切中要点,往往泛泛而谈,说是禅宗。准确的说乔布斯接触的是禅宗曹洞宗一脉的教法,更准确的是日本曹洞宗,但往上追述一点则到了南宋时期如净禅师传承的曹洞宗的一脉。

如净禅师,浙江宁波人,十九岁时出家,拜在雪窦智鉴禅师的门下,晚年入住天童寺,圆寂后葬在了西湖边的净慈禅寺,净慈禅寺曾经也是禅师入住过的道场。所以本次行程一条线就是围绕着如净禅师来走的,宁波奉化的雪窦山、天童寺、杭州西湖旁的净慈禅寺,这三个地方大略勾勒出了禅师的一生。

另一条线是围绕着道元禅师来走的,主要是天童寺、阿育王寺。二者在天童寺相会,另外我也带着道元禅师《正法眼藏》中文翻译版一书,在我看来一个人能留下来的无非是他的思想,而带着他的著作犹如带着这位禅师,在700多年后重走这条路。道元禅师在归国后第二年如净禅师圆寂,从此师徒再无相见的可能,所以带着道元的《正法眼藏》专程去杭州净慈禅寺拜祭如净禅师的塔墓,也算另一种相见吧。

行程

天童寺

确定好行程后,十一一大早就坐高铁去了宁波,大概在下午的五点半左右到了宁波。宁波确实跟西安这样的北方城市不一样,矮山、多水洼地。第二天一大早,乘坐地铁一号线直接到达宝幢站,下站后再乘坐育王站的162公交,终点站是公交天童站。不知道是跟疫情有关系还是其他,总之没有门票。穿过一段松柏的路,逐渐看到了天童寺,放生池,旁边山头的塔,再往里面走,隔着一个池子,东南佛国的照壁映入眼帘。照壁后面就是天王殿,穿过天王殿就是佛殿,寺院最上面有罗汉堂。基本的寺院结构跟大多数的寺庙差不多,但建筑上有着天童寺独有的特点。寺里的师父都非常友好,尤其跟寺图书馆的一位师父相谈甚欢,得知寺图书馆没有道元的《正法眼藏》这本书时,当即在原来购买书的那个商家那里下了10本的订单给禅寺,算尽点薄力。禅寺非常好的一点是提供15块一份的素餐,像我这种每次去寺庙不知道如何解决午餐的问题的人来说提供一种方便。天童寺历代都是出高僧的地方,近代有八指头陀、圆瑛法师(中国佛教协会第一任会长),有幸请到一本《八指头陀诗文集》,也算此行的一种意收获。寺里有不少处都有立牌,主要是关于道元禅师的,其中有个殿专门立有《日本道元禅师得法灵迹碑》,可见天童寺与日本曹洞宗的渊源,更被日本曹洞宗尊为祖庭。寺里的师父对于道元禅师也不陌生,都还充满敬意。当天刚好赶上面向在家人的禅七活动即将要开始,因为来的匆忙,不然真想去参加下。天童寺可能是国内仅有的几处仍在传承曹洞宗禅法的寺院,所以对于我们这些修行上更倾向于曹洞宗的人来说,弥足珍贵。

阿育王寺

阿育王寺有两座,一座叫阿育王寺,在公路旁边,另一座叫阿育王古寺,在山上。来之前只知道阿育王寺,不知道还有古寺一说。查了下大概阿育王寺有东塔院、西塔院,东塔院即阿育王古寺,也是最初建寺的地方,当年开山祖师惠达(俗名刘萨诃)在这里发现了佛舍利,因此而建寺。唐先天二年时,修建了西塔寺,即现在的阿育王寺,东塔寺的香火逐渐衰落,后来被毁逐渐废弃,现在的阿育王古寺是在原来的遗址上盖了一座崭新的寺庙。古寺因为在山上,知道的人不多,去的人也不多。在大略逛完阿育王寺后,我就打车前往了古寺那边看了下,那边虽然有公交但是发车间隔太长,只好打车了。顺便说下曹操专车,这个在西安也有,与传统的出租相比价格透明,因为我当时有问过一个出租车司机,结果报价明显比我后来坐曹操专车贵不少。古寺山后有阿育王寺开山祖师的塔墓,另外发现佛舍利的地方正在盖舍利大殿,寺里现在好像传承的是天台宗。

阿育王寺总体更加的古朴一点,也可能是一直没有断过的缘故。古寺虽然历史悠久,但因为是新建的,那份与古代的链接需要脑补。阿育王寺也是当年鉴真大师东渡日本失败时入住过的寺庙,里面也供奉着鉴真大师的像。

雪窦山、雪窦寺、弥勒道场

单说雪窦山,其实也算是一座风景秀丽的名山,再加上雪窦寺以及弥勒道场,使之更加有名。不过这里似乎商业味有点过浓,另外说到雪窦山就不得不说老蒋,因为山下就是老蒋故居,我买的是联票210,包括蒋氏故居和雪窦山风景区。

要到雪窦寺确实比较难,风景区的专用车顺着蜿蜒的道路,过了许久才到达雪窦寺。雪窦寺位于一个山顶的洼地,依山而建。整个寺庙几乎都是新建的,最引人关注的就是寺庙半山腰上巨大的弥勒菩萨像,如果你要登临菩萨像的上面需要门票20元。站在菩萨像的上方俯瞰整个寺庙,一览无余。寺庙因为是弥勒道场的缘故,整个寺庙分为两部分,一部分是围绕巨大弥勒像的主轴线相关建筑,包括大殿供奉的也是弥勒菩萨的像。另一部分则是老寺部分,就是传统大雄宝殿的建筑群。里面有些旧的东西,比如有张学良被幽静时手植的树,不过大部分建筑还是新建的。

提到雪窦山,总会想到雪窦禅师,当然我此行的目的是因为当年如净禅师学道于雪窦智鉴禅师。不过我们并没有找到相关的东西,浓郁的弥勒道场道场味,几乎将禅宗寺院的本来面目都冲淡,虽然也号称曹洞宗的祖庭之一,但实无其名。甚至连太虚大师,这位当年极力倡导雪窦山为佛教五大名山,弥勒道场的发起人的塔院都隐匿在一个不起眼的山坳里。除此以外就是跟张学良幽静有关的景点,雪窦山更多像是老蒋的私人景区一般。山依旧是那个山,只是一切变了。

净慈禅寺

本以为去天童寺也就顺便把如净禅师的塔给拜一下,不过网上一查发现如净禅师圆寂后并没有葬在天童寺,而是葬在了他曾经主持过的杭州西湖边的净慈禅寺。于是行程的最后一站有了杭州这一站,不过也许都是因缘,实际上如果葬在天童寺的话,我去的这会也看不了,因为那边现在正在建设维修中,并不对外开放。

前两日的天气都不错,不过当我要去杭州的时候,天气预报显示那边下雨,而宁波这边也是有雨,为此我专门改签了去杭州的车次,推后了一点,主要害怕过去下雨,行程不便了。不过也许是上天的某种眷顾吧,从宁波出发的时候,天气显示下雨,但实际不下雨。经过一个小时到杭州后,发现天气虽阴,但也没有下雨。花了点时间终于坐上了数字旅游2号线,在净寺站下,靠西湖的一边是雷峰塔,雷峰塔隔着公路的对面则是净慈禅寺,与雷峰塔的游客蜂拥而至相比,净慈禅寺禅寺显得比较清净。如果不是如净禅师的塔墓在这里,我好像也只知道灵隐寺了,禅寺的门票是10块钱,也算是一种象征性的收费,也合理。我也不免俗的去敲了一下南屏晚钟,一次10元。

一心想要去塔墓拜祭,老居士说在后山,中途遇到一位师父,给我说那边不开放,心里瞬间有点凉。不过我依旧往释迦殿的方向走,发现殿的一侧有个亭子,跟网上看到塔墓照片差不多了,本想直接沿着山坡往上爬,发现释迦殿上去后可以直接到塔墓那边。果然是对的,穿过一个亭子,旁边有济公像一尊,塔墓这边没有人,还好并没有像那位师父说的不开放,也不知道他出于什么样心里。塔墓被后建的石亭笼罩,旁边还立有如净禅师简介的石碑。在塔墓旁待了许久后,下山把整个寺庙大概转了下,净慈禅寺另一个出名的地方是这里是济公修行的地方,不过济公似乎如同神话人物一般,也没有留下塔墓之类的。大雄宝殿主供的是毗卢遮那佛,跟一般寺庙好像不太一样,但又跟原来看过日本曹洞宗的一些书里有提到毗卢遮那佛,这块不是很懂。

寺庙也是正在重建中,我也尽了点微薄之力。不过寺里的师父看似并不友好,倒是居士们很友好。身处西湖景区,能这样已经不错了,后来发现禅寺也有开展面对普通人的禅修,愿他们能珍惜这个道场。

归途

原来还打算去灵隐寺去看下,不过发现时间不够,沿着西湖略转了下。就朝火车站走了,骑着共享单车走了一段,离火车站不远的地方逐渐下起了下雨,而我也要开始返程了。

这次行程总体上非常的圆满,作为去年就想前往的地方,今年终于得以成行。打坐七年时间,曹洞宗似乎离自己有点远,只是在书里,在日本,而这次行程,终于让这一切变的真实起来。其实他并遥远,如果想去总能去的。行程结束了,我也把道元禅师的《正法眼藏》的书籍认真的看了一部分,此时这书才似乎能够看的进去,一切有点特别但又没有什么特别,唯一能想到的就是苏轼的那首《庐山烟雨浙江潮》

庐山烟雨浙江潮,
未至千般恨不消。
到得还来别无事,
庐山烟雨浙江潮。

服务器一直使用的是CentOS,所以特做一下使用备注。基于的版本是CentOS 8.0

AppStream下载元数据失败

主要参考阿里云的CentOS 镜像,设置完成后还会提示AppStream下载元数据失败的问题,需要把整个/etc/yum.repos.d 整个目录备份,重新创建一个,再执行就好了。

1
2
3
mv /etc/yum.repos.d /etc/yum.repos.d.backup
mkdir /etc/yum.repos.d

VirtualBox安装

使用VirtualBox安装会存在兼容问题,6.1的版本无法运行CentOS-8.1.1911,主要这个版本移除VBoxVGA的支持,所以只能使用6.0版本。

查看 CentOS 版本
1
2
cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)

查看网络配置

1
ip addr

防火墙

CentOS 8 使用firewall管理防火墙

基本使用
1
2
3
4
5
systemctl start firewalld # 启动
systemctl stop firewalld # 关闭
systemctl status firewalld # 查看状态
systemctl disable firewalld # 开机禁用
systemctl enable firewalld # 开机启用
配置firewalld-cmd

查看版本

1
firewall-cmd --version

查看运行状态

1
firewall-cmd --state

添加端口

1
firewall-cmd --zone=public --add-port=80/tcp --permanent

重新载入设置(添加端口后一定要重载设置)

1
firewall-cmd --reload

查看所有端口

1
firewall-cmd --list-ports

删除某一端口

1
firewall-cmd --zone= public --remove-port=80/tcp --permanent

安装Mysql 8.0

试了几种安装方式只有如下的可以安装

1
yum install @mysql:8.0 -y

启动服务以及开机启动

1
2
systemctl start mysqld
systemctl enable mysqld

密码设置

1
mysql_secure_installation

远程访问,8.0跟旧版不太一样。

创建用户

1
create user 'root'@'172.16.10.203' identified by  'password'

赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人

1
grant all privileges on *.* to 'root'@'172.16.10.203' with grant option

改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里

1
flush privileges;

创建账户::create user ‘用户名’@‘访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@‘访问主机’ ;
with grant option这个选项表示该用户可以将自己拥有的权限授权给别人

提示密码设置简单错误

1 查看当前安全变量值

1
mysql> SHOW VARIABLES LIKE 'validate_password%';

2 修改变量

1
2
mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=4;

3 然后退出后再执行

1
mysql_secure_installation

参考

mysql版本:’for the right syntax to use near ‘identified by ‘password’ with grant option’

RHEL8 CentOS8 下安装 MySQL 8.0

mysql8.0 设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

常用命令

1
lsof -i: 端口号 # 查看某个端口的进程

网络管理

主要记录虚拟机桥接模式无法连接外网的问题,主要是CentOS 8使用nmcli来管理网卡。

  1. 编辑文件vim /etc/sysconfig/network-scripts/ifcfg-ens33
  2. 使用nmcli d connect ens33激活
  3. 最后使用nmcli c reload重启网卡服务,稍等片刻,就可以Ping通网络了。

HTTPS

目前使用Let’s Encrypt SSL的证书,这个是免费的,唯一的缺点是只有三个月期限,到期后重新申请就可以。

certbot-auto

主要用来certbot-auto申请。

1
2
3
# 获取certbot-auto
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

申请通配符域名的证书,这个涉及域名验证,需要在DNS解析增加_acme-challengeTXT记录。

1
./certbot-auto certonly  -d *.xxxx.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

到期后的,需要删除原有证书certbot delete,重启Ngnix服务sudo systemctl restart nginx。不删除的话,会生成新的证书目录,这样的话还需要修改Ngnix的配置文件。

1
certbot certificates # 查看所有证书,主要是看证书是否快要过期