Jasper Ji

开口不在舌头上

0%

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

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

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

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

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

磁盘镜像

主要使用bximage这个工具。

bximage # 选择1,其次fd

使用dd工具将讲boot.bin写入到软盘的第一个扇区,作为引导用。

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

将数据拷贝到镜像的方法

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

编译

我是在Ubuntu 20.04.2 LTS环境下编译

64位的问题

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 # 链接目标文件,生成执行文件

编译C问题:undefined reference to '__stack_chk_fail',需要在编译时加上参数-fno-stack-protector

gcc -m32 -g -c -fno-stack-protector bar.c -o bar.o # 例子

代码

编译第5章代码时,出现disp_str第二遍调用后报错的问题,网上找到的可以正常的代码。

; ========================================================================
;                  void disp_str(char * info);
; ========================================================================
disp_str:
	push ebp
	push esi
	push edi
	push eax
	push ebx
	mov	ebp, esp

	mov	esi, [ebp + 24]	; pszInfo
	mov	edi, [disp_pos]
	mov	ah, 0Fh
.1:
	lodsb
	test	al, al
	jz	.2
	cmp	al, 0Ah	; 是回车吗?
	jnz	.3
	push	eax
	mov	eax, edi
	mov	bl, 160
	div	bl
	and	eax, 0FFh
	inc	eax
	mov	bl, 160
	mul	bl
	mov	edi, eax
	pop	eax
	jmp	.1
.3:
	mov	[gs:edi], ax
	add	edi, 2
	jmp	.1

.2:
	mov	[disp_pos], edi

	pop ebx
	pop eax
	pop edi
	pop esi
	pop ebp
	ret

使用FreeDOS运行COM

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

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配置文件中添加

magic_break: enabled = 1

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

xchg bx, bx

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

Bochs

需要注意的是执行bochs命令后,需要输入c,我第一次执行完毕后发现为什么没有画面呢?

调试命令

sreg # 显示段寄存器的内容
info gdt  # 显示GDTR寄存器的内容
creg # 显示CR0寄存器的内容
print-stack # 查看栈的内容

Mac OS问题

编译

当使用make编译代码时会报ld: unknown option: -Ttext的错误,查了下Mac下的ld没有这个功能选项,一种是在虚拟机下编译,另一种是使用brew安装i386-elf-toolchain

brew tap nativeos/i386-elf-toolchain 
brew install i386-elf-binutils i386-elf-gcc

安装完后需要讲Makefile文件中对应gcc以及ld都添加i386-elf-前缀。

软盘操作问题

无法使用mountumount之类的命令,好在可以使用Mac自带的磁盘工具打开软盘,将文件拷贝进去。

参考

如何调试操作系统
GNU Linker equivalent command in OS X

编译

目前使用的是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的总设计师,所以这本书如果讲不明白,那还有其他书籍吗。

缘起

如何写一个操作系统,大概刚开始写程序一年多,我就思考这个问题,其实那些年很多想法都不错,至少感想,可惜能力跟不上想法。当时也不知道什么渠道看到的,2010年末的时候从亚马逊中国买了一本《Orange’S 一个操作系统实现》,那会主要应该是汇编语言的问题,没有跨过第三章,为此买了本王爽的《汇编语言·第三版》,依旧记得去乾陵一日游大巴上,我努力的读着,可惜作为一个刚接触脚本语言的人来说,汇编语言太难了,中间需要跨越的东西太多了。后来工作瞎忙之类,也就没有再继续,也不知道什么时候,我居然把这两本书都给卖了。

今年突然间又想,我应该尝试写一个简单的操作系统,多年的工作以及自学,使得我对编程有了一个相对完整的认识(后来证实实际我根本不懂真的如何用汇编编程,只是文字上的一知半解),这个想法似乎不像当年那么不靠谱。但该如何下手呢?刚开始我只想能跑一个Hello wrold的例子也可以,网上找了下最多的居然是我当年卖掉的那本《Orange’S 一个操作系统实现》书中的例子,书已经绝版了,于是就从孔夫子旧书网上买了一本,又买了王爽的《汇编语言》,现在已经升级到第四版了。

最简单的OS

来自《Orange’S 一个操作系统实现》一书。

运行环境:Ubuntu 20.04.2 LTS

boot.asm代码

	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				; 结束标志

《Orange’S 一个操作系统实现》一书使用NASM汇编,王爽老师的《汇编语言》是MASM,但二者差别不大。专门讲NASM,有一本2003年中国铁道出版社出版的《汇编语言程序设计》,作者是林邦杰、陈明,此书是引进的台湾版,不过因为时间久远,已经买不到纸质书籍了,网上电子版,但找不到光盘内容,书中有些作者封装的调用都在光盘里面,所以不是很推荐。

NSAM版本:2.14.02

nasm boot.asm -o boot.bin # 编译

编译完成后,我们需要将boot.bin拷贝到软盘里面。书中使用的bximage来创建软盘。

bximage # 执行完成后会生成一个a.img的文件

拷贝文件到软盘

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

书中使用Bochs模拟器,需要在当前目录下创建bochsrc文本文件,内容如下:

megs:32

romimage:file=$BXSHARE/BIOS-bochs-latest
vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest

floppya: 1_44=a.img, status=inserted


boot:floppy

log:bochsout.txt

mouse:enabled=0

#keyboard: keymap=$BXSHARE/keymaps/x11-pc-de.map

display_library:sdl2

网上书中光盘里面的bochsrc配置文件运行有问题,我这个是修改过的,启动Bochs

bochs -f bochsrc # 或者bochs,会直接在当前目录下寻找配置

这里需要注意的是启动后,需要按c后才在屏幕上显示Hello, OS world!的界面。 关于Bochs本身确实有很多需要学习的地方。

注意事项

times 	510-($-$$)	db	0	; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 	0xaa55				; 结束标志

特意说下这段代码,代码结尾必须为aa55,这个是结束标志。另外代码必须小于512kb的大小,后来我因为代码的问题,填充剩余空间出现了问题,导致大小超过了512,Bochs运行时提示Message: No bootable device. 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

1
yum install certbot

申请通配符域名的证书,这个涉及域名验证,需要在DNS解析增加_acme-challengeTXT记录。需要注意的事通配符域名外还要加上完整域名,之前的没有注意,结果直接访问完整域名时提示证书不安全。参考手动申请 Let’s Encrypt 通配符证书

1
/bin/certbot certonly  -d xxxx.com,*.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 # 查看所有证书,主要是看证书是否快要过期

提前声明下这只是一个比较个人的体验,并不代表普遍适用,仅供参考。

关于断食,也有称作辟谷的,大体都是跟节食或者不吃饭有关系。我本人亲自尝试过的断食属于21天不吃饭只喝清水的这种,前一次大概是七年前,这一次也是9月13日才结束的,写这篇一方面是刚刚结束断食,想把最真实的感受记录下来。另外这是第二次21天清水断食,也会做个对比。

体重

21天下来,体重从155斤下降到130斤,大概瘦了25斤,从减肥的角度来看效果还是不错的。第一周减的比较多,大概是15斤左右,这一周喝水很多。第二周和第三周总共减了10斤左右,个人觉得后面2周是真的减脂的阶段,水其实喝的也并没有那么多。第二周会有点难熬,但是第三周反而能好点。

活动

不吃饭体力肯定是个问题,但也不能躺在床上,我本人是上着班进行的断食,不过因为去单位基本上也是写写代码,正常的走动。来回坐2个小时的地铁,好在都是从终点坐的都有位置。但是如果你爬个楼梯这样的运动,最好还是不要做。这种感受跟我当年在珠峰大本营底下爬一个20、30米高的土堆,那种因为缺氧导致很累的感觉一样。综上断食期间要适量的活动,但是尽量避免大一点的体力活动,尤其到后期,保持体力还是比较重要。

毅力

一旦你下定决心的话,意味你要在21天放弃一些东西,包括各种应酬,我刚好成功的在工作中躲过了各种的应酬。因为是第二次,我心里大概有个数,虽然在外人看来一天不吃饭都无法忍受,何况21天呢?选择21天这个数字也是从前人的经验中得来的,比如弘一大师。断食似乎是宗教领袖都曾试过的方式,又比如甘地,他曾多次断食。不过作为现代人,经历了2次断食,个人觉得不要对断食抱有太多的幻想,其实不会有什么特殊的感受了,身体的变化是最大。第二次断食我一直坚持早上冥想,这是与上次不一样的。身体瘦下去后,确实有利于双盘,这是真的。

总结

21天断食并不神秘,身体瘦下去,总还是要回到一个正常的体重的。重要的是一种意志力的锻炼,从思想层面当你不在乎吃饭这件事时,或许对于人生有新的思考。