从接触NAS概念到开始DIY一个自己的NAS,再到稳定日常使用且从生活中“隐身”,我经历了三年。
本文没有啥逻辑,就是看到出正式版系统了,感慨一下我这几年经历,可以说想到哪写到哪,不用太较真
在一开始,NAS对我来说就是个不需要跟着自己到处跑、随时随地可以访问文件的物理硬件机,它不同于网盘,不仅管理权完全私有、文件完全私有,而且还可以拓展出很多玩法,对于当年还是学生时代预算不足的我来说,买个小小云服务器或者开个网盘会员,远没有属于自己的设备性价比高。因此,当年的我入手了第一个硬件设备:树莓派。
通过USB外接硬盘盒,在里面写好自动化脚本,连接上网线或者无线网,就成为了我第一个NAS。得益于当年校园网策略较为宽松,我可以在全校各种地方无缝通过校园网连接到NAS,刚好覆盖我的活动范围内。但是很快,由于ARM架构的限制、开发板较少的拓展以及低功耗芯片羸弱的性能,快毕业时的我看上了当年低端DIY NAS的“热门U”:J1900 。
还得是X86,虽然工控机小主板可拓展也不多,但是玩法就很多了。装上了黑群系统,虽然感觉系统用起来有一定难度,但是跟着教程慢慢学习,一点一点配置下来还是方便很多。从存储方面来说,我通过内部两个sata接口,加上当年的二手硬盘组了raid0、1,体验了各种阵列玩法;通过mpcie通道拓展了更多sata,硬盘叠叠乐使我体验到大容量存储的乐趣;得益于可插拔内存设计,我换上了更大的内存条,可以运行更多程序,还能开一些简单的游戏服务器和舍友一起联机,存档也不怕丢失直接备份到存储阵列中,还能随时回档;这颗cpu功耗不算特别高,因此也不需要功率特别大的风扇,仅放在宿舍一角平时甚至都察觉不到。
毕业后,我就进入了一日复一日的工作,时间一久,工作对我来说就开始枯燥且繁琐。但这样的麻木并没有打消我想DIY一台“正经”的NAS的念头,我开始渐渐攒一些积蓄。
在23年的那个夏天,我开始翻阅各大UP的视频,参考各种社区的玩法攻略。当时的我没有多少装机经验,我甚至不确定我组一台设备需要哪些东西,因此为了不踩坑,我开始尝试抄作业。
我最开始选的,是机箱。在当时我的观点里,一个好的机箱能让NAS这样一台死板的设备变的有活力,让人感受到它是“稳定”、“好用”的。因此,我第一眼就看重了这个UP设计的DIY机箱:马里奥问好机箱
 ](https://yanhy.top/usr/uploads/2025/11/1350662708.png)
确定了机箱,我就开始跟着机箱的设计选配件。好在这个机箱在某二手市场已经有人做整套打印+配件+背板方案了,我直接拍下,成功解决了机箱的问题。
然而这只是开始,选主板和电源才是折腾。
当年的我没有什么“ITX MATX”等概念,电源也只知道标准ATX电源,而这个机箱要求FLUX小号电源(虽然我到现在也没太明白哈哈哈)。我找啊找,发现这类电源和主板都好贵:便宜且合适的主板,支持的u太老,而且sata太少,甚至有的不带M2硬盘位等等;电源基本到1块钱1W的价格,想买大一点的电源价格直接起飞。为避嫌就不聊具体厂商了,最终主板是买了一个“为NAS定制”型的ITX主板,原生支持6x sata和2x M2硬盘位,还带有2.5G网口,但是价格也贵了不少。电源则选购了250W功率,在不接显卡情况下6个硬盘同时启动也足够使用了。
 ](https://yanhy.top/usr/uploads/2025/11/1363762220.png)
那段时间选配件时没少做功课,好在功课做的好,没遇到什么难题。CPU选用了当年NAS圈还比较火的i3-8100T,看上一个“低功耗 核显解码 性能好”。当年玩NAS时,考虑到这个是7x24小时运作,还担心过很久的功耗问题。第一次装机,完美点亮。当时还在玩黑群系统,反手装好系统,塞进去唯一一块新买的4TB硬盘。从那时开始,我的“正经”NAS之旅开始了。
结果不出意外,还是踩坑了哈哈哈
但这是不是坑呢
坑来的很快。没过几个月我就发现一件事:这个机箱散热效率疑似有点低了。
虽然以现在成熟的眼光看来,只需要做好风道,散热就不会太差。但对于刚开始玩nas的我来说,或许因为社区功课做的太多,又担心功耗大电费吃不消,又担心散热跟不上容易损坏硬盘,况且当时我又要一直运行一些高负载的程序,那段时间,关于NAS的精神内耗可以说到了极致,整天在社区看别人的方案,然后越看越觉得自己的nas有缺陷,于是开始想办法,换!
NAS机箱都挺贵,合适一点的都是四盘位(当年还有存储焦虑,虽然没几个盘但是非要上六盘位)。最后在某二手市场发现了一类机箱,貌似非常符合需求,那就是蜗牛星际。当时我想,既然都能在这么恶劣的环境下使用了,做nas岂不是更合适(?
挑选半天好不容易淘回来一个六盘位的机箱,但是表面已经是战损了,于是又在网上买贴纸。经过一番折腾,表面也是好看了一些了。
 ](https://yanhy.top/usr/uploads/2025/11/2726847265.png)
将主板等硬件迁移进去,成功点亮。感受了一下风力,这下满意了。于是,在后面一段时间内,这个就是我NAS的新形态。
人果然不能闲下来啊(~
在用了好一段时间的黑群系统后,又开始闲不住折腾了。
发现在黑群下用虚拟机好像有点卡,社区说是这个系统的虚拟机做的不好,性能较差。追求拓展和各种玩法的我当然不甘心,好歹也是个酷睿的CPU,性能浪费着不用白不用,于是我又开始搞起了PVE系统。
既然都搞PVE了,那不上点其他的NAS系统玩玩(?于是又开始折腾,为此还特意把硬盘文件都腾出来,开始一周换一次的尝鲜玩法。
当然,最终还是回到了黑群,毕竟这是大多数人验证过的非常稳定的且热门的系统了,试过TrueNAS、UNRaid等各种系统,还是黑群这样“桌面化”的系统让我感觉更方便(应该是用win桌面习惯了导致的,但桌面化确实更容易上手)。
虽然不知道为什么,但是越看这个机箱越不顺眼,可能因为这货太大了(?
在一段时间后,由于感觉前面那个蜗牛机箱过于笨重,于是再次入手一个新的“蜗牛机箱”!
这次小巧了很多,而且硬盘仓设计的不错,虽然感觉可能缺了前盖,但是没有前盖也挺好看,就是容易风道进孔吃灰。
(过于久远找不到合适图了)
 ](https://yanhy.top/usr/uploads/2025/11/1567365838.png)
这个机箱当然也有缺点,它的IO背板是定制主板才兼容的,正常ITX主板放进去无法兼容它的开孔,导致有一部分USB是查不了的;另外它的机箱风扇是通过前面板的小控制板来控制转速的,开机时会转速拉满,而正常情况下因为系统没有对应驱动获取不到温度,只能获取外面温度,因此转速很慢。但是不影响整体散热,并且随着工作越来越忙,也就没多少折腾nas的心思了。
在前段时间,我曾经想去提取固件反汇编看看逻辑(好歹也是干嵌入式的哈哈哈),但是工作时不时出差很忙,也就没了多少精力。这个机箱是我用的最久的一个。它散热做到还不错,哪怕风扇转速慢,硬盘温度也能基本压下来。
时间来到24年,我搬到了杭州。机缘巧合下开通的宽带自带公网,我才开始想起来我的NAS。重新收拾了一下机器,清了灰整理了数据,再把系统重装一下,接下来用nas的频率才开始高起来。(此时我的系统仍然是PVE,至于为什么,因为我经常在玩黑群时不知道动了什么就导致系统重启后不开机或者没有IP了,后面我干脆以PVE为底层,崩了就重装,都快习惯了hh)
很巧的是,在去年七八月份,我刚加几块硬盘,准备放弃黑群系统再试试看其他家系统时,飞牛系统出现了。
 ](https://yanhy.top/usr/uploads/2025/11/504332713.png)
当然不否认第一次看到飞牛系统界面宣传时,我还以为又是什么小众工作室搞了一个魔改的系统,毕竟之前有CaasOS、nextcloud等宣传时,我以为是个系统,然后用了才发现它只是一个程序实现,并非真正独立的系统。
不过仔细了解过后,才发现这个团队与这个系统并不简单。
 ](https://yanhy.top/usr/uploads/2025/11/1487034958.png)
反正我NAS处于随时崩溃状态,不如清理一下,直接裸机安装飞牛系统~
使用了一段时间,给我的感受真的很不错。当时它确实有不少小问题,但我感觉这个团队是真有实力的。每周更新不仅能增加新功能还修复不少小问题,无论团队大小如何,这效率是真有在做事的。抱着这样的心态,我也好好把玩了这套系统,还曾提交过一整个文档的反馈信息,当时真心希望这个团队能做的更好。
虽然现在看来当时有点小题大做了哈哈哈,不过当时确实很激动啊,这个系统真的很符合我各种需求
 ](https://yanhy.top/usr/uploads/2025/11/72111491.png)
于是我就用上了飞牛系统,一用就是一年多。得益于飞牛系统基于debian的开放性,不仅可以在系统内用官方的一些工具,也可以部署一些自己想做的事情。到了24年底,我也将自己的系统进行了一波配置升级,CPU也换成了I5-9600,不带T。
那时的我,已经开始渐渐把NAS当正经办公工具来用了。备份做好本地一备云端一加密备,在公网的加持下,异地办公远程开office(自行安装的)、虚拟机桌面等工作环境非常方便,甚至在这期间,这个系统基本没有崩溃出错过。
最让我感到舒服的一点是,这个团队愿意给飞牛用户出免费的“内网穿透”,尤其是近期还能穿透其他程序,包括docker应用。虽然带宽低,但它保证了基础连接,不失联。和自己配置的内网穿透不同,我感受到这个FN Connect是可以作为我连接的基础保障。哪怕我frp服务掉了、docker里面的tailscale崩了或者失联了,我还可以通过fnc连接到nas进行修复与控制。
写了很多,其实一开始我单纯想展示一下自己的nas来着,而且可能里面也有些地方逻辑不通等,大家就当小故事图一乐,这只是我摸索的经历,一些“系统不稳定”等也是我自己问题,爱折腾是这样的hhh
哦对了,在前几个月,我nas的机箱又换了!
 ](https://yanhy.top/usr/uploads/2025/11/2486461609.png)
我放弃使用那些蜗牛机箱,在网上淘了一个NAS 6盘款式的机箱,体积比较大,但是已经无大碍了,它散热非常好,甚至给CPU上了单塔散热器,硬盘空间也很足。
现在生活也稳定下来了,NAS成为我办公中的一部分,在平时甚至会忽略到这个机器的存在。另外通过2.5G内网传输,我可以将我主力电脑的很多资料、文件甚至一些软件游戏都可以放到NAS上了,越来越方便喽~
]]>所以还是决定自己做个教程,顺便留下工具,以后说不定还能回来看看...
(该文章参考酷安各个大佬教程总结而来,其中本篇主要目标为001B,003\001C通用)
针不戳,这次买到两个棒子,查看板号都是001B,据说这个板号支持的频段最全面,同时也是骁龙410的芯片,可以用来折腾了;拆开后发现板载卡座,甚至不需要自己加焊了,运气不错。

准备好软件硬件,开始刷机。先从安卓开始,再到Debian、openwrt,最后再自己编译一个系统慢慢折腾...
下载链接:https://www.123pan.com/s/Dpq0Vv-XAUHd.html提取码:V23y

0、建议关闭杀毒软件,否则多个工具可能会被杀毒拦截
1、安装 [驱动]vivo9008drivers 驱动,这个驱动是为了识别棒子9008;安装 [高通工具]QPST,后续备份QCN用(可选)
2、如果电脑是网吧电脑或者新系统、win7等,建议安装[依赖库]微软常用运行库包 ,有些软件依赖一部分的微软运行库,否则无法正常打开
3、解压 9008分区操作工具、9008全量备份工具 ,并打开 MiKo_Loder Pro/miko.exe 安装 9008全量备份工具 ,安装完成后将 Loader.exe 替换到安装目录中以完成破解,之后每次使用打开 Loader.exe 即可

4、9008分区操作工具 仅需解压即可,解压后的文件夹需要删除中文部分(部分系统会因为中英文报错),解压出文件夹 Qualcomm Premium Tool V2.4 ,无需安装
5、解压 [ADB&Fastboot工具]platform-tools 内的文件到文件夹 tools ,自行新建并重命名为tools,后续adb等操作将以这个为准

6、打开调试工具:进入tools文件夹,并在这个文件夹的上方地址栏,单击编辑,删除全部内容,输入 cmd 并回车,会打开cmd命令行窗口。输入指令 adb 并回车,查看是否会输出帮助日志,如有即正常

方法一:
1、按住棒子上的RST按钮再插入电脑,即可自动进入9008模式
方法二:
1、正常插入棒子到电脑等待一两分钟
2、待完全开机后,电脑会出提示网络设备接入,同时可以在设备管理器看到adb设备


3、回到cmd控制台,输入指令 adb devices 即可查看棒子是否连接正常

4、输入指令 adb reboot edl,棒子会自动重启到9008模式,再次查看设备管理器,即可在端口处发现9008设备

刷机第一步务必要先备份,哪怕网上有很多别人的备份,还是建议自己保留一份全量备份,其中就包含基带等文件。
预计要备份的内容:全量备份、全分区备份、QCN备份,由于QCN备份需要开放901D端口,需要Root后才能进行,因此先折腾安卓系统,将面具刷入后再备份QCN
进入9008后,打开前面安装好并破解完成的 miko,也就是 Loader.exe ,可以新建一个桌面快捷方式,下面统一称为miko

打开miko后,按照下面的顺序进行操作,可进行备份全量包与查看存储信息

既然有备份流程,当然也有恢复流程,如下图

至此,全量备份结束,关闭Miko即可,如果需要进行下面的备份,需要拔掉棒子重新进9008模式。
本部分备份仅需备份modem分区等小分区,用于刷debian或者openwrt时替换基带驱动等,无需备份userdata等大分区
如果有备份全量分区,并且只需要更换系统后插卡使用,仅需要备份Modem分区即可
进入文件夹 Qualcomm Premium Tool V2.4,开始进行破解操作
(音量调小)进入文件夹后,打开 CMD_KEYGEN_CRACKED_by_FACEBOOK破解器,点击GenerateKey生成一个key文件,放到一个位置并记下来。生成完毕后可关闭破解器。

打开 Qualcomm Premium Tool 软件,点左上角Help->Activate ,并选择刚刚生成的key文件,即可激活
激活完成后,按下图顺序执行部分分区备份。如显示Fail无法读取分区,可拔下棒子重新进入9008模式
重复第5、6、7步,将Modem、fsg、modemst1、modemst2分区备份下来即可。


备份完成后,出现这四个文件即为备份完成

modem文件可通过7z解压提取其中文件,也可以用 UltraISO 这个软件直接双击打开,把里面IMAGE文件夹拖出来可作为备用

在刷入其他系统时,如果需要插卡使用,将这个文件夹上传到root目录,并将文件夹内的全部文件移动到/lib/firmware文件夹重启后即可使用基带驱动(可见我博客其他文章 debian openwrt)
进入文件夹 Qualcomm Premium Tool V2.4,开始进行破解操作
(音量调小)进入文件夹后,打开 CMD_KEYGEN_CRACKED_by_FACEBOOK破解器,点击GenerateKey生成一个key文件,放到一个位置并记下来。生成完毕后可关闭破解器。

打开 Qualcomm Premium Tool 软件,点左上角Help->Activate ,并选择刚刚生成的key文件,即可激活
激活完成后,按下图顺序执行全分区备份。如显示Fail无法读取分区,可拔下棒子重新进入9008模式

最后一步选择好备份文件夹后,即可开始备份,预计耗时3-5分钟左右,直到左下角显示backup finish后即可结束,关闭工具

有备份就有恢复,可以按下图恢复所需的分区

注:如果有全量备份和备份modem分区后,该部分可以不用备份
因为在第二个备份中,我们备份了Boot.img文件,而刷入面具只需要修补这个boot镜像即可获取root,因此我们先想办法让面具安装到棒子内。
在环境准备期间,ARDC已经被解压出来,在打开ARDC之前,先打开任务管理器列表是否有 adb.exe 进程存在,如果有,右键停止运行,否则会与ARDC冲突。
重新插入棒子,连接为ADB模式,同时打开ARDC,稍等片刻即可看到棒子的安卓界面。

此时需要解压 安卓apk 压缩包,将 launcher.apk 拖入,即可进行安装。等待几秒后,按鼠标右键也就是返回键,就可以选择默认桌面了,选择刚刚安装好的launcher桌面

可以看出,该系统为安卓4.x的样式,实则确实为安卓4.4.4
接着继续安装es文件管理器与magisk,并将备份好的boot.img分区镜像拖入ARDC窗口。使用es文件管理器可以看到,在Downloads文件夹内存放boot.img

打开magisk,选择安装,安装方式为修补一个文件,并使用es文件管理器的选择器选择boot.img,开始修补。修补完成后,重新打开es文件管理器,找到修补后的boot,由于面具会随机命名后缀,所以手动重命名为 magiskboot.img (可直接使用键盘输入)。点击ARDC软件上方的 ">>",打开拓展功能,在CMD的输入框内,输入指令 adb pull /sdcard/Download/magiskboot.img ./ 并回车,即可将文件输出到ARDC软件根目录。将该文件手动放到 tools 文件夹内后续刷入使用。

此时,还是在CMD输入框内,重新输入指令 adb reboot bootloader 并回车进入fastboot模式。
回到一开始进9008时的CMD窗口,输入 fastboot devices 查看设备是否连接成功,如下图

输入指令,将修补后的boot刷入进去 fastboot flash boot magiskboot.img ,待刷入完成后执行重启 fastboot reboot

执行重启后,回到ARDC软件查看,待显示界面后,右键返回回到launcher桌面,打开面具查看是否安装成功,如下图即为安装成功

在右侧CMD输入框内,输入指令获取su权限:adb shell su ,并在左侧允许shell获取权限

通过权限申请后,开始正式备份QCN。圈子内较多采用星海SVIP软件,但是因为该软件易语言编写,使用卡顿且报毒严重,我这边还是采取QPST备份QCN方式
回到一开始的CMD窗口,执行指令
adb shell su
setprop sys.usb.config diag,adb
即可打开901D端口,同时设备管理器也会出现这个端口名。

在开始菜单找到QFIL并打开

选择901D端口打开

选择上方的Tools->QCN Backup Restore,进入QCB备份恢复的工具。同时在需要备份的位置新建txt文件,更改后缀为 .qcn ,再去工具内选择该文件即可。如需要恢复qcn,需要选择之前备份的qcn文件,点击恢复即可

备份完成后预计文件大小有500KB上下。备份结束后,可以关闭这些软件和cmd窗口,之后就可以尽情的折腾了。
之后刷机等会依次更新,欢迎关注本博客~
]]>1、打开ssh,连接群晖
2、输入查询
sudo find / -name VideoStation
3、手动sudo rm -rf 列出的内容

4、重新刷新套件商店,即可重新下载安装

记录一个小操作,有时候电脑开热点发现连不上,猜测可能是因为5GHZ频段的问题,重新改又太麻烦,刚好手头有网线,干脆用有线来连接树莓派(同方法也适用于其他设备,只需要在电脑配置即可)...
无WiFi网络或者树莓派莫名其妙连不上无线网络
稳定快速传输数据
对类似设备进行局域网连接配置
一些没无线网卡或者无线网卡损坏、异常的设备使用有线网络来配置
无线网络传输慢且不稳定
网线x1
USB转网口(可选,适用于笔记本没有网线插口情况)
树莓派
Windows(其他系统尚未尝试)
1、树莓派开机,插上网线,网线另一端连接到电脑
2、连接电脑后树莓派网口指示灯会正常闪烁,同时电脑打开设置-网络和Internet-状态-更改适配器选项,会弹出网络连接窗口,里面会显示电脑的全部连接

3、如果是同我一样是使用了USB转网口的,直接找到“以太网”开头的连接,并找到含有USB关键词的连接即可确认为来自树莓派的网络。如果是直接连接电脑,直接找最新的连接即可(可重新插拔网线来确认),并记下该连接的名字
4、双击打开当前电脑正常上网的网络连接(如图中的WLAN连接),选择属性-共享,勾选允许其他用户通过此计算机的Internet连接来连接,并在下面选框中选择前面记下的来自树莓派的连接名字,再勾选允许其他网络用户控制或禁用共享的Internet连接,最后点击确定即可

5、此时树莓派已经得到了共享网络连接,但是如果要去通过ssh连接控制树莓派,仍需要知道树莓派的ip才可以。打开CMD窗口,输入arp -a,在192.168.137.1处查找,如果电脑此时没有分享其他的热点、网络共享的话,一般192.168.137.255之外的那个连接便是树莓派的ip了(在电脑分享出去的网段ip仅限于192.168.137.2-192.168.137.254),图中树莓派的ip为86结尾

6、打开ssh连接,输入该ip尝试是否可以连接成功(在此之前请确保ssh已开启)

用网线连接时跑了一下软件更新,发现更新速度感觉快多了...(树莓派自带的无线网卡也是够拉胯,平时挂机跑东西都是用六类千兆网线连接的,速度能跑满)
本连接方法并非长久之计,仅用来临时配置树莓派用,如需稳定使用此方法可能还需要配置静态IP等操作,本文不再详解,这篇文章只是记录因为不小心配置错了wifi导致无法ssh的应急操作...
]]>经常为了在linux跑编译去安装虚拟机或者wsl,但其都有共同特征,即虚拟环境...为了更稳定的生产力以及学习linux,我找到了Fedora...
为搭建个正常的linux环境,我之前曾尝试了debian系的ubuntu、deepin、raspbian(PC版)、kali等,但因为都是同一系列的,总感觉操作有些乏味,于是找上了红帽系的系统,而Fedora正是红帽系广受欢迎的社区发行版系统,因此准备将其安装为第二系统。
这个系统使用体验不错,之前在搞服务器的时候用过centos,曾了解过yum软件包管理器等,但红帽系的系统操作还需学习,正好是个机会,写在博客上记录自己从安装双系统到优化fedora的日常使用。
安装完成后的截图:
因为日常开发还是windows系统,因此我选择从win来安装双系统。
因为考虑到可能日用,基本功能要有,所以这边选择工作站workstation版本下载。

在下载镜像的同时,打开分区软件(如diskgunius),为Fedora系统腾出一些空间(推荐60-80GB),将腾出的空间融为一块,且不创建新分区(后续Fedroa安装时会自动分配)(此文在fedroa系统下所写,因此无法提供截图)
下面操作步骤为回忆内容,至于为啥这么熟练,因为第一次分区分小了,重装了N次...
下载完毕后我选择使用u盘来安装(手头刚好有闲置u盘,其他的方法暂时不考虑),使用ultraiso将镜像写入到u盘,随后插入u盘,重启电脑,并按住F12不放(华为荣耀笔记本是F12选择启动设备,其他电脑自行查询),选择USB启动即可。
进入grub选择页后,直接选择默认的第一条进入即可,会进入到体验版系统,并会弹出系统安装引导软件。
选择中文、时区后,第三个选择硬盘需慎重。一般电脑内仅一块硬盘,选择默认硬盘后下方勾选自定义,再点左上角完成,会进入自定义分区页面
进入自定义分区页面后,确保下面显示空余空间为几十个GB而不是只有MB大小,如果是MB,可能分区的时候自动创建分区了,在下面列表找到目标分区后点下面的“-”号即可删除分区,小心不要把其他有重要数据的分区或者win系统分区删除了;如果是正常的几十GB,直接选择上面自动分区即可,无需多余操作,最后返回到主页面就可以开始安装系统了。
安装完成后,点击重启后拔出u盘,再次开机会自动引导到linux的grub启动,正常情况下grub启动项前两个分别是正常启动入口和恢复安全紧急模式入口,第三个引导项则是win的启动入口。(在fedora下,引导项无需且严重不推荐手动修改,系统会通过脚本自动找到可启动的linux内核,如果有安装多个版本,可以在系统内卸载旧内核版本,而不应该直接修改grub)
系统默认的grub可以说是非常简陋的了,因此在后面优化操作体验的时候会提到修改启动页面主题部门...
按照我个人的linux使用习惯,一般情况下没有国内优化的系统开箱第一件事就是换源了,不知道是不是错觉,没有换源总感觉装依赖都特别慢...
红帽系系统感觉换源还挺复杂的(之前给centos换源也是头疼了半天),这边就总结一下快捷指令吧,如果有特殊需要请做好备份
sudo sed -e 's|^metalink=|#metalink=|g' \
-e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.ustc.edu.cn/fedora|g' \
-i.bak \
/etc/yum.repos.d/fedora.repo \
/etc/yum.repos.d/fedora-modular.repo \
/etc/yum.repos.d/fedora-updates.repo \
/etc/yum.repos.d/fedora-updates-modular.repo中科大源帮助文档:https://mirrors.ustc.edu.cn/help/fedora.html
换源后输入sudo dnf makecache即可产生软件包缓存,随后即可yum update(yum、dnf都是软件包管理器)
换源后速度明显提升不少(截图来自fedora系统内置截图软件)(圆角好评
在这波更新后,浏览器、文件管理区、应用商店等众多软件都需要重新打开以生效新版本(至少我这个系统版本是这样,而且印象里内核还有个更新

应用商店打开速度也快了起来,软件包也能加载出来

一般在大型更新后,我是习惯输入sudo yum clean all来清理更新产生的缓存(原因是因为之前翻目录发现缓存cache目录占用特别大,查了一下发现很多软件包缓存),效果如图:

在较大更新或者应用商店明示你要更新内核时,更新完经常会留下旧内核,这时候就需要手动清理了(也可以不理会,就是开机引导时会有脚本把全部内核启动项给仍到grub,会显得不好看)
查看当前内核版本 uname -r
我这里提示版本为“5.14.10-300.fc35.x86_64”
查看系统内安装的内核相关包 rpm -qa | grep kernel
明显可以看出同一个包(如kernel-core)有两个不同的版本,再根据上面查到的当前内核版本,可以确定要卸载的包:
kernel-headers-5.14.9-300.fc35.x86_64
kernel-core-5.14.10-300.fc35.x86_64(旧版本需卸载)
kernel-modules-5.14.10-300.fc35.x86_64(旧版本需卸载)
kernel-5.14.10-300.fc35.x86_64(旧版本需卸载)
libreport-plugin-kerneloops-2.15.2-6.fc35.x86_64
abrt-addon-kerneloops-2.14.6-9.fc35.x86_64
kernel-modules-extra-5.14.10-300.fc35.x86_64(旧版本需卸载)
kernel-core-5.14.17-301.fc35.x86_64
kernel-modules-5.14.17-301.fc35.x86_64
kernel-5.14.17-301.fc35.x86_64
kernel-modules-extra-5.14.17-301.fc35.x86_64接下来,输入 sudo yum remove kernel-5.14.10-300.fc35.x86_64等手动移除这四个旧版本即可(-core可能无法移除,可重启后尝试)
最后输入reboot重启即可
至此,fedora已经安装完毕,且软件包等更新完成,可正常使用。想要了解更多玩法,欢迎继续关注本博客!
]]>为了学习linux,很多时候都是选择装个虚拟机,或者买个服务器来练习linux操作。除了使用wsl或者虚拟机之外,还有一个更便携的linux终端,那便是安卓上的Termux...

Termux这个软件,可以说是安卓上的linux虚拟机,又不完全是个虚拟机。据官方文档介绍:
Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically - additional packages are available using the APT package manager.”
“Termux 是一个Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。自动安装最小的基本系统 - 使用 APT 包管理器可以使用其他包。”
在安卓系统本身环境下,Termux得到了很好的运行优势,无需额外虚拟化操作即可使用linux操作界面。
在使用过程中,只需要像Debian系一样操作即可,你可以使用pkg安装软件包,也可以更换为apt软件包管理器等等。它可以运行很多Arm及Arm64的项目,比如nodejs、python、java等等。
Termux可以用来运行脚本、编译小型项目、学习linux系统操作而不会轻易影响主系统等。
首先启用科学上网环境,打开Google Play应用商店搜索Termux(该版本较低,可以去F-Droid或者gothub下载),下载安装,安装后打开(期间保持科学网络环境)
也可以去github下载:https://github.com/termux/termux-app/actions/
找到最新构建的版本,选择对应版本下载
打开后会加载几秒钟,随后会进入初始界面(如下图),此时可以关闭科学上网环境


在Termux中输入指令 termux-change-repo 并回车,将会进入需要更换的。库列表
一般换源只需要更换主仓库(Main repository)即可,空格可以选择取消选择要更换的仓库,默认主仓库是被选择状态
选择后直接回车,进入选择镜像源列表。使用“↓”移动并用空格选择到BFSU源,然后回车即可更换并触发update。这个是国内的北京外国语大学开源软件镜像站,在软件更新、安装时速度会快上不少。
在运行update时可能会报错,因为部分软件包可能未收录原因,但也可以正常使用。如果有特殊需要或者强迫症等,可以参考下面的手动换源到其他源。
推荐清华源(复制执行):
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
清华源手动修改文件:
执行 apt edit-sources
将文件内第二行deb及后面文件删除
粘贴 deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main
中科大源:
sed -i 's@packages.termux.org@mirrors.ustc.edu.cn/termux@' $PREFIX/etc/apt/sources.list手动更换源后可以输入 pkg up 或者 apt update && apt upgrade来更新软件包,有时候会提示是否安装更新(y/n),推荐选择默认选项,如下图默认选项为N,如果有需要的话可以自行决定。更新过程较长且耗费较多流量,建议wifi下更新

到了这一步,Termux本身已经配置完成了,你可以在termux上练习使用linux操作,也可以在上面安装相关环境来部署一些小项目。
如果手机有root,可以执行sudo权限,需要先安装sudo包:pkg install tsu
脚本编程环境软件包:nodejs、python,推荐使用独立配置环境方法,当然如果没有特殊需求也可以直接使用apt install python或者apt install node,执行后输入y即可安装。经测试,从apt安装的版本中,nodejs版本为14.15.4;python版本为3.9.7
也可以在终端里面安装java环境,可以参考我之前博客写的树莓派安装java教程,同为arm架构,安装过程大同小异。
如果喜欢折腾,甚至可以在termux安装xfce4桌面,然后通过配置vnc来远程连接termux的可视化桌面
当然,也可以在termux配置静态博客hexo,一方面可以当做本地服务器,浏览器访问127.0.0.1即可访问自己的网站;另一方面,也可以在本地折腾好后打包到服务器。
termux可以直接ssh连接到安装linux系统的服务器。连接方式:ssh root@10.111.111.111 其中,root@表示使用root用户连接到服务器。
termux我个人认为并非是独立的虚拟机,还是基于安卓系统操作。因此如果需要termux与系统进行文件交互,并非是难事,创建个软连接即可。(有root权限的用户还可以直接去根目录找termux内系统的/目录)
首先开启termux访问手机存储的权限termux-setup-storage,然后手机会弹窗是否授权termux访问储存权限,点击确认
软链接相对于文件夹的快捷方式,创建在termux的home目录,便于访问,同时也可以用文件管理器去修改文件夹内容。先用文件管理器在储存主目录创建文件夹为share(可自行修改),然后打开终端,输入ln -s /storage/emulated/0/share share即可在home目录创建share文件夹,指向主目录的share文件夹。
同时,授权了储存访问权限后会在home目录生成 storage 文件夹,可以通过这个文件夹访问到几个基本文件夹,如download等

在termux启动时会显示welcome to Termux! 欢迎信息,可以手动编辑nano $PREFIX/etc/motd来修改启动信息
可以使用Termux-ohmyzsh来美化终端,安装sh -c "$(curl -fsSL https://github.com/Cabbagec/termux-ohmyzsh/raw/master/install.sh)" 由于github访问速度不定,可能下载较慢
第一次打开脚本时会列出可调整的颜色、字体,可以随意选择一个,后续要更改颜色与字体,可以输入~/.termux/colors.sh修改颜色或者~/.termux/fonts.sh修改字体
其他美化脚本推荐:bash <(curl -L gitee.com/mo2/linux/raw/2/2)
hexo静态博客特点是无需数据库,只需要在本地使用markdown编写文章后使用hexo框架配合精美的模板即可生成美观的博客页面,适合部署到github等代码托管站。如果有需要,我后续将会出个专门博客的教程。例如下图中,我同学搭建的个人博客站

工具:nodejs软件包、hexo本体、git软件包
安装:
apt install nodejs
apt install git
npm install hexo-cli -g
npm install hexo-deployer-git --save
apt install openssh接下来初始化hexo:
hexo init blog
cd blog
hexo g
hexo s当输入完hexo s后,显示如下图,即可证明hexo框架启动成功,此时可以去打开手机浏览器,输入localhost:4000即可访问自己搭建的第一个网站——hexo博客初始页(如果发现后台很多报错,一方面可能是缺失模块,另一方面可能因为arm架构的设备不能完美支持,只能在本地搭建提供测试等)

如果需要关闭博客,键入Ctrl+c即可停止
vnc用于linux的远程桌面控制比较多。这里简单讲述一下如何对termux进行vnc控制
工具:x11-repo、tigervnc、xfce桌面
安装:
apt install x11-repo
apt install tigervnc
apt install xfce
vncserver输入完vncserver后会提示设置密码,然后确认密码,接着会提问是否要设置只读的密码(其他功能用),一般选择N即可
引入vnc全局变量:export DISPLAY=":1"
先退出vnc进程:vncserver -kill :1
修改配置文件nano .vnc/xstartup在最后一行加入startxfce4,添加后先ctrl+o保存,在回车确认,在ctrl+x退出编辑
启动vnc指令:vncserver
结束vnc指令:vncserver -kill :1
手机下载一个VNCviewer,添加新连接,ip为localhost:5901,名字随意,点击连接即可(如果报警告可以直接无视,继续连接即可)
连接过程会提示输入密码,密码为刚刚设置的vnc密码,连接成功后如下图
如果想要每次启动终端自动启动vnc的话,可以输入nano ~/.bashrc,在最后一行添加vncserver即可
vnc可能会中文显示异常等等,需要手动下载字体之类的,本文不再拓展太多
宝塔面板,这个让网站运营人员耳熟能详的网站管理面板,功能强大,操作简单易管理,还可以一键部署环境,很多人都使用这个管理网站...在termux中安装宝塔面板,性能较低,仅供参考与学习,不适用于正式生存环境
工具:wget软件包,tsu指令软件包,宝塔安装脚本,浏览器,较长时间
执行指令apt install wgetapt install tsuwget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
如果手机已经root并授权,将会一路执行;如果没有root或者未授权,会显示“are you rooted?”
安装过程较长,由于我手机没有root,所以分享一下在树莓派安装的经验:
执行第三个长指令后,会快速加载安装环境,需要手动输入y才能继续安装。之后要等待很久,安装完会在最后几行显示http://127.0.0.1:8888/xxxx ,其中xxx显示宝塔面板的安全入口,需要把整条网站复制到浏览器才能进入面板;同时会在网址下方显示默认用户名和密码,可以用这个登陆到管理面板
宝塔面板会保持每次打开终端自启动,如果需要更改入口限制开关、账号密码等,可以输入sudo bt(每次只能更改一个东西,再修改需要重新输入指令),然后如下图所示:
一般我个人喜好输入11关闭入口限制,输入8更改默认端口,输入5更改密码,输入6更改用户名,其他保持默认
第一次登陆宝塔网页,会提示要安装环境。推荐使用LNMP环境(L:linux;N:Nginx;M:mysql/MariaDB;P:PHP),也是大部分网站框架常用环境。如果是在正常服务器安装,推荐使用编译安装,但如果在termux内,使用快速安装即可,编译安装会占用大量系统性能、资源,而且termux安装的宝塔并不适合投入正常使用环境中。至于安装版本,一切默认即可,反正后面也可以手动更换版本,而且termux也用不到太多。
在安卓终端里面体验一把真正的Ubuntu系统!(sudo仍需要root权限)
工具:proot-distro软件包(管理子系统)
安装:
apt update
apt install proot-distro 安装完后输入proot-distro list可以查看这个软件包支持安装的系统列表
这里我们安装Ubuntu系统,可以自行选择更改系统,指令如下:proot-distro install ubuntu
等显示出Now run xxxxxxx时便为安装成功,安装时间很短,因为都是同一个内核,无需重新下载完整版Ubuntu(也可以多次下载不同的系统,每次下载或者启动只需要输入列表中系统名称即可)
启动Ubuntu时,只需要输入proot-distro login ubuntu即可启动(如果下载多系统,也可以把Ubuntu替换成其他名字来启动)
在Ubuntu内输入exit即可退回默认操作系统
每次启动系统都需要很长一段指令,因此这里提供一种简化指令方法:
在home目录指令nano ubuntu.sh,然后在里面输入proot-distro login ubuntu,接着ctrl+o保存,ctrl+x退出编辑,再修改文件读写权限chmod -R 777 ./ubuntu.sh,之后就可以通过执行脚本./ubuntu.sh快速进入了!
部分插图内容来自我同学的个人博客:https://jmzdd-jjly.website/ 欢迎大家前往访问!
]]>很快啊,就期末考试了...简单记录一下这次C语言考试的内容,以供后来参考...
#include<stdio.h>
int sum(int a,int b)
{
int c;
c=a+b;
return c;
}
int main()
{
int x,y,s=0;
scanf("%d%d",&x,&y);
s=sum(x,y);
printf("%d",s);
return 0;
} #include<stdio.h>
int main()
{
int i,j,a;
for(i=100;i<=300;i++)
{
if(i%3!=0)
{
printf("%d ",i);
a=(a+1)%5;
if(a==0)
{
printf("\n");
}
}
}
return 0;
}#include<stdio.h>
int main()
{
int arr[999]={0},n,temp;
scanf("%d",&n);//题目没有指定长度,手动输入一个长度
for(int i=0;i<n;i++)//输入数组
{
scanf("%d",&arr[i]);
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(arr[j]<arr[j+1])//冒泡降序
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<n;i++)//输出数组
{
printf("%d ",arr[i]);
}
return 0;
}
]]>