MoreRSS

site iconJoyqi | 祁宁

开发者生涯始于 2007 年,毕业于华中科技大学,目前定居于中国杭州。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Joyqi | 祁宁的 RSS 预览

再见了 Kindle

2024-08-06 16:16:00

Kindle 宣布退出中国已经有一阵子了,本来我已经快忘了这件事,毕竟泡面盖子的存在感平时也不咋地。直到最近收到这么一封邮件

截屏2024-06-19 15.23.18.png

这件事突然让我想到自从 Kindle 中国的商店不可用以来,我已经很久没看新的电子书了,虽然之前的阅读量一直一般般,但一年三五十本还是可以保证的。我一直的想法是虽然商店不可用,但就凭着 Kindle 在中国这么大的用户数量,大家一定可以找到一个优雅的办法继续用 Kindle 看电子书。

无法继续的理由

然而这么久过去了,从我本身都快忘掉它来看的话,这种优雅的方式显然不存在。在这期间我也不是没有努力过让它复活,本人至少尝试或者认真考虑过以下几个方式,然而它们都或多或少存在缺陷:

转区

也就是把 Kindle 中国的账号转到外区(比如美国区)。这种方式应该是体验最丝滑的,毕竟你的服务主体依然是亚马逊。然而转区其实也就是让你的服务继续可用而已,由于本人阅读的大多数是中文读物,外区的资源丰富度会大大下降。这会让我的 Kindle 沦为一个实质上的装饰品,显然这种方式不太适合我。

彻底变成离线阅读器

即从其它在线书城(比如 z-library)下载资源传到 Kindle 上去。

首先,这类在线书城大部分是盗版书籍,而除了那些网络上实在找不到的书籍,我个人实在不想搞盗版书籍。即然有这个消费能力,就得为知识买单,这是也是对作者的尊重。

然后搜集,转换,传输一本电子书其实还蛮耗精力,关键是这种折腾对我来说是沉没成本,也就是不管我在这事上投入多少,我也不会获得更多的回报。

作为一个彻底的实用主义者,没有回报的折腾只会带来额外的消耗。

刷机?

实际上在 B 站已经有不少关于 Kindle 的刷机教程,让你刷入网友魔改后的安卓系统,然后你可以在安卓系统里装第三方阅读软件,这样就可以完成 Kindle 的复活。听起来很完美,但你先别急着欢呼,它的缺陷也不少。

最大最显著的缺陷就是稳定性,由于是网友魔改的系统,而且 Kindle 本身并不是为安卓设计的机器,虽然能做到让你勉强可以启动,然而各种奇奇怪怪的 bug 会让你用下去的兴趣大大下降。再花额外的时间来解决这些 bug?得了吧亲爱的朋友,人的生命不是用来这样浪费的。

总之这只是一个数码爱好者折腾的路子,并不适合安静的读书党。

何去何从?

其实想到这里我已经开始打算离开 Kindle 生态了,毕竟这只是一个工具,我不可能为了一个工具去耽误我最终的目标:读书。看着自己手上的两台 Kindle 设备,一台 Voyage 一台 Oasis,我决定先把前者挂在闲鱼上试试水。

参考了其它人的价格后,考虑到我这一台已经用了快 8 年时间,就给了个 400 块的价格(其实这个价格我已经觉得很离谱了,我不知道这玩意为啥这么贵),没想到挂上去以后就被马上被人拍下来了。

彼之砒霜,吾之蜜糖

那就这样吧,找个时间再把 Oasis 出掉,我的关于 Kindle 的烦恼就彻底结束了,接下来我可能要拥抱更开放的国产阅读器了。

👋 Kindle
👏 Others

2024 美国行

2024-04-19 12:31:00

其实去年年底就因为 AWS re:Invent 去过一次 Vegas 了。那应该是我疫情之后第一次出国,本应该很有感触,然而无奈当时的行程实在过于紧张,我除了工作就没留下过多的回忆,因此提起笔也不知道该写些什么。虽然这次去美国也是因为出差(参加 Google Cloud Next 24),但相对轻松很多,也有更多闲暇时间安排自己的事情。

西雅图

这两次去美国最终目的地都是拉斯维加斯,而我都选择了在西雅图中转,实际上从国内起飞去西雅图的时间并没有大家想象得那么长(大概十小时左右,返程会多两三个小时)。搭乘达美航空的班机到达西雅图已经是当地时间下午三四点钟,即使我只是从飞机舷窗匆匆一瞥,也不得不感叹这座城市的美丽。波光粼粼的巨大湖泊旁是广袤的森林,沿岸点缀着漂亮的小屋,而我还没来得及拿出手机拍照,飞机已然开始下降。

西雅图机场停机坪

入关的过程很快,因为这里相对洛杉矶和旧金山人流量要少很多。而在海关查验我证件的时候还发生了个小插曲,他一脸严肃地问了我在中国是干什么工作的,当然我如实回答后也没有为难我。但是这类问题我倒是第一次在美国入关的时候遇到,以前最多问问来美国干嘛。不知道这是个案还是受最近政治氛围的影响,我希望是前者。

西雅图机场座位

顺便提一嘴,个人感觉国外的环境卫生水平也就那么回事,上图是西雅图机场的地面状况,大家感受下。国外更早进入工业社会在公共秩序方面可能会注意一点,但也没到那么夸张的程度,很多时候大家觉得干净我觉得受人口密度的影响更大。

拉斯维加斯

拉斯维加斯的纸醉金迷是毫不掩饰的,从它那独具特色的机场就可以看出来。当然这说得并不是它的机场建筑有多么独特,实际上相对于赌城的名声在外,拉斯维加斯的机场修建得相当普通。然而当你拿起行李从飞机上踏入候机楼,看到这些一眼望不到边眼花缭乱的赌博机时,心里肯定会忍不住大喊一句:还得是你啊,拉斯维加斯。

拉斯维加斯机场

对金钱的追求也真实地反映在拉斯维加斯的建筑风格上,川普大厦那种金光闪闪的风格在别处可能相当扎眼,但在这里我想说只是个乖宝宝了。金黄色是金钱最直观的表达,而在拉斯维加斯更是一种标配色。

拉斯维加斯的酒店建筑

除了金黄色的建筑,你还能在这里找到各种奇奇怪怪的建筑风格,有复古的比如威尼斯人这种,有像金字塔的,也有像城堡的。但是最近在网络上最红的应该是这个玩意儿。

Sphere

原谅我用“玩意儿”来形容它,因为它好像也没有一个官方的中文翻译,英文叫 “Sphere” 也是我后来跟别人谈起它的时候得知的。搞笑的是当我刚到拉斯维加斯的时候,根本不知道这玩意英文叫什么,在国内社交媒体上都管它叫大球。于是当我在从机场去酒店的出租车上跟司机有一句没一句聊天的时候,提到这个东西就用 “The big ball” 来代替,而司机跟我表示并不知道什么 ball。现在回想起来,ball 在英文里更多地是蛋蛋的意思🤦‍♂️,这一度让我每每想起这一幕都不免有些尴尬。

你可能发现上面这张照片的拍摄角度有点特殊,实际上这是我去年去美国那次从酒店房间拍摄的。托亚马逊的福,我可以用相对低廉的价格住在威尼斯人的酒店中,而窗外就是 Sphere,这也被我戏称为球景房。

夜行

刚到酒店的时候已经是晚上了,酒店里的餐厅很多都关门了,我在 Yelp 查到马路对面有一家 Panda Express,虽然这伪中餐平时我是不齿于去吃的,但现在也顾不了那么多了,顺便还可以去一旁加油站的便利店里买点零食和水。

说到零食和水就不得不提一提美国特别是拉斯维加斯酒店的一大坑爹之处了,虽然俺知道美国贵为资本主义第一大国啥都要钱,酒店不提供拖鞋和牙刷我就忍了,但是这房间连一瓶免费的水都没有是不是过分了点?我记得去年住的时候还送了两瓶水,这次去就都要钱了。而一瓶一升的纯净水价格是 24 刀,抢钱吧!

看完这价格表我披上衣服就骂骂咧咧踏入了拉斯维加斯的夜色,不得不说晚上的拉斯维加斯还是有点冷的,特别是传说中美国夜晚混乱的治安给这次看似普通的夜行增加了些许寒意。好在路上没遇到啥人,除了一个向我问好的拾荒者,我想我当时的笑容一定很僵硬。

Panda Express 的套餐

虽然 Panda 的分量一如既往很足,但是这卖相看上去也不是很好吃的样子,特别是美国人啥玩意都喜欢甜口,最后考虑到它 14 刀的价格,我只能给它一个勉强裹腹的评价。酒足饭饱我就琢磨着去一旁的便利店买点零食就可以回酒店睡觉了,毕竟这一顿奔波也颇为辛苦,没想到这寻常的安排也能遇到“惊喜”。

在便利店外等开门

在去之前我都查好了,这家店是 24 小时营业,结果一去就遇到人家交接班。你说你交接班就交接班吧,还得关门谢客,让我们等 5 分钟。我想这来都来了,5 分钟等等也不算啥,于是咱外面这群人就眼睁睁看着里面几个店员慢吞吞地聊天,穿好衣服,走的那一波还得挨个拥抱一下。在我以为这就完事了的时候,里面的店员又大声说再等等,咱还得做清洁。于是我们就像傻子一样在外面凉风中干等了将近半个小时,旁边几个黑人小哥等到一半就满嘴 shit 骂骂咧咧离开了。要不是考虑到酒店货架上那几瓶 24 刀的水,我肯定也早走了。。。

中国城

一般去美国的城市如果行程允许的话,我总要去当地的中国城一趟。一来可以让远在他乡的我满足一下自己中国胃,另外也可以顺便看看当地华人的生活状态。拉斯维加斯的中国城并不是很有名,但也算比较好找。其实这里叫中国城并不完全符合,因为其它亚洲国家比如越南,泰国,韩国之类的店也非常多,我想叫亚洲城可能更合理。不过考虑到美国人的地理知识,可能人家觉得这几个地方跟中国也没啥区别。

中国城的招牌

中国城里还有一家超市,一进门迎接我的味道仿佛让我回到了国内。货架上的商品还是很丰富的,除了国内的一些知名品牌以外,还有在大陆地区比较难见到的香港,台湾地区的食物,价格相对于拉斯维加斯的物价来说应该算相当便宜了。我在这里买到了台湾地区出品的菊花和绿茶茶饮,在这种干燥的沙漠气候中,没什么比茶水更让人滋润的了。

中国城小商品市场

相比于餐馆超市,中国城的市场就显得冷清许多,我逛了逛这家 “中国城小商品市场”,几乎没有遇到一个顾客,商铺也有一些已经关门。感觉不管是中国还是美国,现在线下实体店铺的日子都不太好过。

射击

前几次来美国我总有遗憾,虽然每次来的时间有长有短,但总感觉是走马观花,没有领略到美国文化的核心。而要说到在我这样一个中国人心目中最有代表性的美国文化,那肯定得是枪支了。所以这次来拉斯维加斯我就和朋友一起约了一家可以体验射击的枪店,有趣的是我们是从小红书上发现这家店的,开店的也是华人,这也省去了不少沟通上的麻烦。

体验 98K

喜欢玩吃鸡的朋友能认出我手上这把就是大名鼎鼎的 98K 吗?这把狙击枪相比其它步枪还是挺重的,而且后坐力很大,射第一发的时候教练怕我不适应,还拿手帮我顶住了肩膀,不过子弹打出去也是真过瘾。

这次一共体验了六种枪械,打完 Glock 手枪感觉以前电影里那种拿手枪远距离射击的都是扯淡,由于前出姿势的原因,即使是小口径手枪也无法抑制枪口的弹跳。更别提我们这里还有位女生体验了沙漠之鹰,枪是真的帅,后坐力也是真的巨大。而且由于握持姿势失误,她的手指上还不慎挂了彩。

其它几种半自动步枪比如 AR-15 / MP-5 / AK-47 也是各有特色,刚开始打的时候还有点畏惧,后面打完觉得意犹未尽,感觉下次如果还有机会得试一下全自动步枪和重型武器。

值得一提的是,戴耳罩真的能很大程度上降低枪械的声音,从而抵消心里的恐惧感。回想起大学军训射击时,被子弹声吓得迟迟不敢抠动扳机,感叹如果当时也能带上这玩意就好了。

尾声

在目前的国际政治环境下,我每次去美国都怀着复杂的心情。我手上的美签还是 2015 年去办的,那时候还能轻轻松松办出 10 年的美国签证,而这次美签过期后我连自己还要不要再去办都不确定,毕竟现在不仅办理更麻烦,有效期也大不如前了。

回想起我和老婆多年前第一次踏足美洲大地时的兴奋之情,那种轻松而又纯粹的快乐已经无法在我后面的旅程中找到了。虽然我在路途中碰到的每一个美国人民都很友善,我也相信中国人民的友善。但夹杂在大时代中身不由己的我们,已经可以感受到空气中的寒冷,即使偶尔有那么一缕温暖的风,也无法吹散心中的阴霾。

我一直对人类的前景持乐观主义态度,即使有时候需要付出前进的代价,只是这一次我希望代价不要太大。

用一台被淘汰的 Mac mini 来做软路由

2024-01-24 17:35:00

其实在之前的文章里就提到过,我一直是一个垃圾佬节俭主义者,所有的东西我会本着能用就用的原则让它发挥余热。最近手上拿到了一台已经退役的 Mac mini,它有多老呢?

截屏2024-01-16 18.25.34.png

这是一台 2014 Late 版本的 mini,双核四线程的 i5 处理器,8G 的内存,硬盘已经被升级成了 256G 的 SATA SSD。这样一台主机,现在到小黄鱼上几百块就能拿下,可能很多人的软路由都比它的纸面性能要好。而我在它发布十年后的今天,依然选择其作为软路由却是看中了它的几个独特优势。

Mac mini 的优势

对我来说,其最大最核心的优势就是 macOS,是的你没有看错,很多人拿到这类过时的苹果电脑,第一时间就是格式化掉硬盘,然后装一个 ubuntu 之类的 Linux。但如果你要装 Linux 真的没必要用苹果电脑,还要解决一堆兼容性问题。反之如果我继续沿用 macOS 则可以享受其完善的软件生态还有原生的硬件兼容性。当然,最重要的一点,我是 Surge 的用户,这样软路由的软件就不用再去重复投资了。

颜值,即使已经到 2024 年了,你要找一台能摆上台面 PC 主机依然还是很难,这代 Mac mini 的设计已经沿用了至少十年,看上去依然优雅毫不过时。我打算把它放在客厅的电视柜,这么一个每天都能看到的地方可不能放一个看着糟心的玩意。我个人比较欣赏的是它把电源集成进了机箱,不像现在很多迷你主机虽然看着很小,但还得配一个巨大的外置电源。

macOS 配置

首先我们要为这台机器装上最新的 macOS 操作系统,通过这个网址查询得知,这台 2014 年末的 Mac mini 最高只能装到 macOS 12 Monterey。选择尽量新的操作系统可以让系统更好地获得安全补丁,因此我把之前的系统抹掉,重新安装了 macOS 12。

截屏2024-01-24 15.58.48.png

为了让这台 Mac mini 胜任软路由的角色,我们还需要对其系统进行一些配置。路由器是全年 24 小时常开的服务,所以稳定性是第一要务,同时我们还要考虑一些特殊情况,比如停电后的恢复。

截屏2024-01-24 16.02.34.png

所以我们进入“设置/节能”,第一个钩一定要打上,要不然一会儿系统会自动进入睡眠模式,软路由就噶了。如果有“如果可能,使硬盘进入睡眠”这个选项(比如你外接了硬盘),把这个钩可以点掉,不需要节约这一点电量,反而有时候硬盘休眠再唤醒会有 Bug。“断电后自动启动”这个选项也要打开,这可以让你的机器在停电后再来电时自动开机,从而实现网络的自动恢复。要不然家里没人,就只能干瞪眼了。

截屏2024-01-24 16.12.46.png

再进入“用户与群组/登录选项”,把自动登录打开,选择当前的用户登录即可。Surge 运行在用户态,如果没有登录是无法启动的,所以我们要保证这台机器只要一开机就能自动进入系统,然后启动相应的服务。

截屏2024-01-24 16.17.24.png

在“软件更新”的设置里,把所有自动检查和自动更新的钩都去掉,你不希望网上着好好的,软路由自己重启去更新系统了吧。

其它设置:

  1. 建议把 WIFI 网络禁用掉,我们只需要用到有线网卡。
  2. 建议把声音静音,Mac mini 是有自带扬声器的,你的某些操作可能会触发音效,你应该不希望自己的路由器发出莫名其妙的声音吧。

软路由/Surge 配置

在配置软路由之前,我们面临一个选择,是让这台路由成为主路由还是旁路由。我的考虑是前者虽然节省了一台设备,但系统的容错性比较低,软路由虽然我们做到尽量稳定,但它的宕机概率还是高过硬路由。如果你把它作为主路由,届时很可能会面对整体无法上网的情况。而作为旁路由就要灵活得多,这台 Mac mini 你可以随时拿掉去升级/修理,我只需要把子网络的出口网关地址改一下就行了。

Untitled-2022-06-08-1159.png

上图就是一个简单的家庭网络拓扑示意图,可以看到我们分了两个网络(黄色和绿色),一般的家庭联网设备都运行在绿色的网络(192.168.10.0/24)中。它们只与一个主路由连接(一般是一个 WIFI 路由),与上层设备之间是隔离的,不需要关心自己的流量经过了哪些设备,连上就可以用。

而对于黄色网络(192.168.1.0/24),WIFI 路由的网关设置到软路由(192.168.1.10)上就可以通过软路由上网,如果软路由出故障了,就可以把网关设置到主网关(192.168.1.1)继续使用,上层设备可以做到无感知切换。这种组网的方式比较简单可靠,也兼顾了灵活性,是一种不折腾的选择。

截屏2024-01-24 16.36.04.png

而如果你跟我一样选择 Surge,那么软路由的设置就相当简单了,只需要打开它的增强模式即可。注意两点:

  1. 不要打开 DHCP 模式,因为你只是个旁路由,DHCP 服务已经由主路由承担了,你只需要承担网络流量即可。
  2. 记得给 Mac mini 设置一个固定的 IP 地址,而且要避开主路由的 DHCP 自动分配的址段。

截屏2024-01-24 17.13.44.png

接下来就是给绿色网络的 WIFI 路由器设置出口网关了:

  1. 把它的出口(WAN)配置为固定 IP(Static IP)模式,网关地址(Gateway)设置为这台软路由的地址。
  2. 还有一个比较特殊的,你要把它的 DNS 设置为如上图所示 Effective DNS 的地址。

至此,所有的软路由配置已经完成了,如果不出意外的话所有的上层网络流量都会经由这台 Mac mini 再联向互联网。而 Surge 本身还有不少玩法,比如你可以把 Surge Ponte 打开,这样如果你在多台设备上运行了 Surge,它们之间就可以组成一个加密的虚拟网络,我一般来连 VNC 查看这台 Mac mini 的运行状态。

后话

WechatIMG1278.jpg

一图胜千言,垃圾佬的快乐谁能懂😂

一次惊心动魄的数据拯救之旅

2023-12-24 00:20:00

作为一个苦逼的创业公司,我们对开发服务器硬件的态度是能省就省。于是我们利用各自垃圾闲置硬件攒出了一个堪用的集群,来供公司平时开发使用。

IMG_8779.jpg

可以看出这分属不同厂商,不同年代,不同配置的服务器及网络设备体现了深深的历史厚重感。里面最耀眼当属 4 台银光闪闪的 Mac mini,把它们加进来还是我的主意,毕竟跑跑持续集成又不是不能用。但此次事件的主角不是它们,而是下方那台贴了黄色符咒的 ThinkStation。符咒是@明城贴的,这台机器也是他攒的,作为一个资深垃圾佬当然是用不起不会用 ThinkStation 这么高端的货色,所以如你所见它只是个机箱,里面早就面目全非了。不过为了方便起见我后面都称其为 ThinkStation 了。

流年不利

周四那天首先有同事报告公司 Gitlab 打不开了,作为我们内部开发使用的主要服务,它一直作为 KVM 虚拟机跑在这台 ThinkStation 上,于是我立马 ssh 登陆上母机去。一顿猛操作发现虚拟机控制台已经进不去了,用虚拟机重启命令也毫无反应,看起来是彻底死机了。这个时候我们只好祭出大杀器,重启服务器,于是轻车熟路敲下 poweroff 然后准备等它关闭,可奇怪的是我都喝完一杯茶了这服务器还丝毫没有关闭的迹象,看起来母机也死掉了。这个时候只有最后一招,关闭电源。

长按电源键关机之前,我看了一眼符咒,心想这次只能靠你了。按住电源键几秒后,听见继电器咔哒一声脆响,然后所有闪烁的灯光都熄灭了。深吸一口气,再次按下电源键,耳边响起硬盘电机开始加速的声音,回到位置上准备如往常一样再次 ssh 连接上去。但这次等待的时间有点长,十分钟以后我依然无法连接。不仅如此,连 ping 都没法到达这台服务器。

情况有些不对,我再次重复了几次物理开关机的过程,服务器依然如一潭死水无法连接。事情大条了!于是我赶紧联系明城让他看看这台一手打造的服务器到底出了什么问题。于是再经过他的一顿猛烈操作,告诉我一个噩耗,硬盘 RAID 挂了,数据损坏导致母机内核都崩溃了😱。

WechatIMG1004.jpg

这是两块 2T 的磁盘做了 RAID 1,母机用的是 ZFS 的文件系统,按道理说安全性已经拉满了,怎么会一声不响都挂掉了?不过现在首要任务是把里面的数据弄出来,毕竟现在没地方提交代码了。虽然我们做了数据备份,但备份是按天来计的,如果能拿到实时的数据是最好不过了。

拯救数据

IMG_9706.jpg

于是拆下其中的一块硬盘,插到我自己的黑苹果上。也幸亏我在公司用的是黑苹果,还有地方给我插这块硬盘,但马上我遇到了第一个问题,怎么在 MacOS 下挂载一个 ZFS 的磁盘。幸好我发现了 OpenZFS, 而且已经有开发者做了 MacOS 的实现 OpenZFS on OSX,用 brew 安装起来也非常简单丝滑:

brew install openzfs

因为涉及到扩展安装,所以中途会跳出安全警告,记得要到 “安全性与隐私” 处忽略这个警告继续安装。安装好以后你还需要手动挂载这块硬盘,ZFS 跟一般的文件系统还有点不同,它有个 pool 池的概念,你要先使用命令

sudo zpool import [poolname]

来导入 ZFS 池,如果你不知道 pool 的名字,可以运行 sudo zpool import 来查看所有待导入的 pool。导入以后按说还有个 sudo zfs mount 的动作来挂载,不过在 MacOS 上已经自动挂载好了。

WechatIMG1024.jpg

这三个最重要的 KVM 磁盘映像文件就映入眼帘了,分别对应了三台运行在这台服务器上的虚拟机,而 Gitlab 就在这台 wuhan(武汉)上,大小有 128G 左右,最理想的情况是我直接把它拷贝出来就行了。然而

WechatIMG1031.jpg

我试了三四次,每次都在拷贝到 116G 左右的时候就遇到 IO 错误,看来问题就出在这里了。根据我的猜测这个文件应该不是完全损坏,坏掉的部分可能只是一小块,如果它对应的不是系统核心文件(这个概率很大,毕竟 128G 的文件核心只占一小部分),那这个映像完全还能使用。因此我需要一个更底层的拷贝工具来跳过错误部分,它就是 dd

dd if=source_file of=target_file bs=1M conv=noerror,sync

这里 bs (block size) 我设置了 1M,也就是每个区块大小为 1M,遇到错误就跳过它。执行这个命令后,果然在读取到 116G 左右的时候报了两个错误,跳过之后顺利拷贝完成了。现在我在自己的 MacOS 上得到一个未知的 KVM 磁盘映像,其实工作按理说已经告一段落了。但我看了自己性能过剩的黑苹果主机,冒出一个想法,能不能让它暂时运行在我的电脑上,起码先让大家恢复代码提交。

在 Mac 上运行 QEMU

qcow2 是常用的虚拟机镜像,在 MacOS 上我们可以用 QEMU 来运行它,通常情况下我们可以直接用 brew install qemu 来安装它。但现在有个更好的选择:UTM,这是一个 MacOS 上开源的 QEMU 的图形界面实现。我选择它的原因是图形界面能帮助我省掉不少时间,毕竟 QEMU 的参数非常复杂,如果有人帮你做好了适配可以省掉不少时间。

但是 UTM 现在有个问题,它不能直接用一个 qcow2 文件来作为磁盘启动,创建虚拟机的时候必须选择一个启动镜像,并且新建一块虚拟磁盘。为了解决这个问题,你可以在创建虚拟机的时候随便选一个文件作为启动光盘,创建完以后编辑虚拟机,把这块镜像删掉即可。

现在还需要解决如何让它使用我这块已经拷贝好的 qcow2 文件作为硬盘,千万不要使用它的导入磁盘映像功能,因为这只会让它把镜像拷贝过去,然后转换成自己的格式。经过我的摸索可以这样做,首先把当前磁盘映像的 Interface 修改成 virtio,因为这也是 KVM 创建映像时的类型,既然我们要直接读取它就必须保持一致。改完后记得点保存,因为后面要直接操作文件。

截屏2023-12-23 18.46.35.png

然后我们要把这块硬盘替换成拷贝好的 qcow2 文件,首先找到 UTM 为这个虚拟机自动创建好的磁盘映像,它位于目录

~/Library/Containers/com.utmapp.UTM/Data/Documents/{你的虚拟机名称}.utm/Images/

这里有个已经存在的 qcow2 文件,给它重命名一下,然后用 ln -s 命令把原来系统的 qcow2 文件软链接过来替换已经存在的文件,这一步的目的就是“骗” UTM,让它以为硬盘是自己那块,其实已经被我们给换掉了。

然后还得对网络做一番修改,我专门接了一块 USB 网卡来做桥接,所以把这里的网络模式改为“桥接”,选择对应的网卡,然后 "Emulated Network Card" 这一项选择 "virtio-net-pci",这也是为了和 KVM 的模式兼容。

截屏2023-12-23 18.46.58.png

选择好以后保存,咱们就可以大喊原神启动。

截屏2023-12-22 21.02.19.png

牛X!启动成功,可以看到操作系统已经检测到了文件错误,尝试修复成功之后终于进入到了熟悉的登录界面。正常进入系统之后就是一些常规的操作了,总之经过一番折腾我把运行在服务器上的 Gitlab 成功迁移至本地运行,性能居然还不错。

1393545561.png

结论

  1. 任何系统都有可能出故障,重要的数据最好做异地多活。这次是硬件故障,万一哪天硬盘直接被拿走就废了。
  2. 磁盘故障不一定代表文件不可用,越大的文件其中不重要的部分占比就越大,因此还是有很大几率抢救成功的。
  3. 越开放的技术,工具和资料也越多,其实健壮性也越好。比如 KVM 用的 qcow2,我拷贝到 MacOS 上照样可以通过 QEMU 启动它。
  4. 符咒没起作用,封建迷信害死人🤦

Typecho 插件开发模版

2023-12-19 12:32:48

Typecho 的插件系统非常灵活,现在也有很多开发者开发了很棒的插件。但是在实际开发中有很多代码以及发布流程不够规范,这影响了 Typecho 生态的进一步扩展。因此我这次借着为 Typecho 开发站点地图插件的契机,为其开发了一个 Github 模版,以供开发者使用。

如何使用

项目地址位于:https://github.com/typecho/plugin-template

截屏2023-12-18 18.11.50.png

在项目页面右上方找到 "Use this template" 的绿色按钮,然后点击 "Create a new repository" 即可使用这个模版创建一个 Typecho 插件项目。

这个项目的 README 包含了详细的中英文使用文档,我就不再赘述细节。这里只讨论一下使用这个模版之后的插件开发步骤。

开发步骤

一般来说作为 Typecho 插件的开发者,在本地都会运行一个 Typecho 的服务器,很多人在开发插件的时候都会直接在服务器目录下的 ./usr/plugins 目录里,新建一个插件目录直接来开发。

而如果你使用此模版来进行插件开发,需要首先将创建好的插件项目 clone 到本地。然后使用软链接,将插件项目里的 plugin 目录链接到 Typecho 目录下的 ./usr/plugins/{PluginName} 目录,这里的 PluginName 就是你的插件名。至于插件的命名规范在模版项目里有详细的描述,请认真阅读。

而插件的发布步骤也已经被 Github Actions 完全自动化,如果当前项目主线代码已经具备发布新版本的条件。在项目主页的右侧 Releases 处找到 Create a new release 来创建一个新的 Release 版本:

  1. 标题按自己的喜好随便填,一般是版本号。
  2. Choose a tag 标签那一项,输入一个新的版本号比如 1.0.0 或者 v1.0.0,然后点击 Create new tag 创建新标签。
  3. 填写发布日志,然后点击 Publish release 按钮发布。

发布之后等待片刻,Github Actions 会自动将 plugin 目录下的文件打包成一个名为 {PluginName}-1.0.0.zip 的文件上传到当前 Release 版本下的 assets 中以供用户下载。

Sitemap 插件

我已经用它为 Typecho 开发了一个 Sitemap 插件:https://github.com/joyqi/typecho-plugin-sitemap

这个插件的功能就是为 Typecho 站点的不同板块生成 sitemap.xml 文件,我还打算近期把之前开发的插件迁移到新的开发模版中来。