操作系统项目实践(深度操作系统——从入门到开发)

简介: 笔记

一、前言


 很早之前就想写这篇Linux实践总结了,但因为期末考试周就一直耽误下来。共花费三周的操作系统实践让我在技术层面上有了很大的提升,因为有些问题只有遇到了才会考虑,只有动手了才能想到之前没想到的层面——这一点不仅适用于操作系统,计算机类的其他课程也是同理。为了把握住接下来的两个月暑假留校做项目的机会,我会会保证一周不低于5篇的技术文章产出,不仅仅是为了记录我的项目产出,也希望能帮到大家。

 本篇博文使用的深度(deepin)操作系统。如果说只是为了满足日常使用,用linux系统平替Windows系统,那么“用Linux替代windows,而不是在一堆Linux发行版中脱颖而出”才是我们应当考虑的,而非其他什么需要花费大量时间去自行搭建脚手架。这一点,deepin做到了,现在发行的Deepin 20.9版本已经能很好地满足普通用户的日常需要!

10.png


二、deepin操作系统实践大纲


1、硬件设备保障

1、解决Deepin20.6 TP-Link WN726n免驱-找不到Wifi选项的问题

2、解决系统安装之后没有声音的情况

3、解决集成声卡的音箱静音后电流噪音问题

4、关于使用虚拟机解决驱动问题的可能性探讨


2、系统使用及美化

1、以root权限运行命令配置且无需输入密码(sudo和pkexec)

2、设置共享文件,实现windows访问deepin共享文件

3、在deepinOS上加入方正字体,更换系统默认中文字体

4、使用命令美化标题栏大额头,设置任意高度和任意颜色,自定义最大化最小化关闭按钮


3、软件应用安装落地

1、Deepin 20 安装microsoft office

2、截屏+OCR+搜索+贴图+以图搜图

3、解决OBS录屏软件不能运行问题

4、火狐浏览器国际版简单设置

5、网易云音乐调整缩放比例

6、安装跨平台的B站”桌面端”bilimini

7、安装调试为知笔记deepin版


4、进一步开发

1、解决启停docker容器导致VMware虚拟机断网问题

2、deepin 中配置DTK开发环境

3、解包/打包deb

4、qt程序打包为deb包

5、deepin可用的http并发测试工具


三、深度操作系统deepin


 深度(deepin)操作系统为统信集团旗下的一款操作系统(国产操作系统)。内核为Debian,所以Debian内核的其他Linux发行版和深度操作系统在很多方面上都有相似之处。这类上一张主流Linux发行版的思维导图方便理解:

11.png

 一个典型的Linux桌面发行版包括一个Linux 内核,来自GNU的工具和库,和附加的软件、文档,还有一个窗口系统,窗口管理器,和一个桌面环境

 内核:内核是操作系统中应用连接硬件设备的桥梁

 而对于一个现代的操作系统来说,我觉得它的内核至少应该提供以下 4 种基本能力:

 1)管理进程、线程(决定哪个进程、线程使用 CPU);

 2)管理内存(决定内存用来做什么);

 3)连接硬件设备(为进程、和设备间提供通信能力);

 4)提供系统调用(接收进程发送来的系统调用)。

 为了解决Linux下精品应用少的问题,深度采用三种方法解决:

 1)自造轮子(深度软件中心,深度截图,深度终端等等)

 2)deepin-wine项目(包括主流应用:QQ,微信,钉钉等等,造福整个Linux行业)

 3)和国内软件厂商共同开发Linux应用:搜狗输入法(13年),有道词典(15年),网易云音乐(16年)


四、基于vmware的安装及双系统安装


 常规安装过程没什么好说的,在官网上下载好的ISO映像文件后配置虚拟机就行了。如果选择全盘安装->选择初始化备份,安装时间会久一些,但是系统崩溃后可以通过初始化备份恢复。

 安装 deepin 20.4 之后的版本,安装器能自动识别已有 EFI 分区,无需再另外手动创建。

12.png

   EFI系统分区(ESP):其实是一个FAT32格式的小分区,通常大小约为100MB,是用于存储EFI引导加载程序和系统启动期间固件调用应用程序的地方。

 另外也可在windows10下实现deepin双系统安装:

 1)准备一个4GB或以上的无数据空白优盘(系统安装镜像大小为2039.23MB);

 2)到Deepin深度系统官方网站https://www.deepin.org/zh/,打开下载页面,下载深度启动盘制作工具;

 3)下载系统ISO镜像,不要下载Live系统(Live系统是精简系统,功能不全,暂时用不着)。


13.png

 做完以上步骤后,还需了解自己电脑的硬盘数、是否为新式UEFI模式,制作Deepin深度系统启动盘,进行硬盘分区。再关闭Fast Boot,在Boot页面下方启动项选择 USB启动,用做好的系统盘安装系统。最后进行盘符设置(这里一般按照10G/20G/50G的大小分区)就大功告成了!

 如果硬盘驱动器采用GUID分区表(GPT)分区形式,则在安装操作系统后,会自动生成EFI系统分区(无论是在Windows还是Mac操作系统受支持)。

 BlOS(Basic Input Output System)称为“基本输出输入系统”,是用于为操作系统和程序提供运行时服务以及在启动过程(开机启动)期间执行硬件初始化的固件。UEFI 是传统 PC BIOS 的继承者,旨在解决其技术限制。注意这里要选择手动安装而非全盘安装,否则硬盘将会被格式化,硬盘内原来的学习资料会全部丢失!


五、硬件设备保障


1、网卡问题

 安装完毕之后发现有蓝牙但没有WiFi这个选项,只能连接有线网络,并且deepin设置界面没有“无线网络”功能和符号,断定是缺少无线网卡驱动。解决方法如下:

 1)在终端输入:lspci,查看网卡信息

 2)下载和自己电脑相匹配的驱动jar包

 3)减压下载好的rjar包(我这里的是82545EM-master)

 4)在解压好的驱动包目录下右键空白区域在终端中打开

 5)在终端命令行输入代码:


sudo ./dkms-install.sh  //等待运行结束安装完成
sudo modprobe 82545EM //启动模块无限服务
sudo apt-get update  //更新资源列表

14.png

 安装成功后,结果如下:

15.png

 其实在安装网卡驱动时还出现了【Linux kernel source not configured - missing autoconf.h】(缺失执行内核编译命令后产生的头文件)的错误,需要重新编译一个内核。要解释起来很麻烦就不展开了(逃)


2、声卡问题及更普适的驱动问题

 这里突发奇想:既然虚拟机可以用蓝牙,那么虚拟机按理来说也是可以用无线网卡的。这里可以用共享网络来解决!如果我用虚拟机驱动网卡,再网络共享到宿主机,这不就完美解决了吗?本地开一个VPM-1就行!

 VPM:虚拟广域网(互联网),但经济层面不太现实…

 解决完了网卡问题,又发现系统安装之后没有声音,可先尝试打开控制中心-声音-高级设置,切换输出源(按理来说可解决80%的问题)。

 但还是无法解决,我们可以使用命令sudo apt-get install pavucontrol下载 pavucontrol 。然后打开软件,选择配置,找到输出设备,打开下拉框,选择一个没有unplugged的设备。然后点击输出设备选项卡,该选项卡里面有上下两个输出源,通过切换到自己的输出设备就可以解决声音问题了。

16.png

 不能更新/降级内核的场景有很多,比如专业版/LTS的系统不会轻易更新内核,显卡驱动卡着一更新就黑屏/一些旧外设驱动不支持新内核,而其他设备不能被旧版本内核驱动,又或者是非X86架构的机器

 为了普适地解决问题,可以用轻量级的虚拟机——比如QEMU,跑一个使用高版本内核/低版本内核的极简Linux发行版,专门用来驱动宿主机无法驱动的外设(就比如无线网卡/摄像头),然后转发给主机。一些旧版本内核才能驱动的外设,也可以用类似的方式共享给主机。这样可以在不更改主机内核,而且不怎么影响性能(极简发行版,即使是用不同架构也不会特别占资源)的前提下较完美地解决驱动问题。


六、系统使用及美化


1、更换系统默认中文字体

 为了更平滑地使用deepin,我们还需要对其优化,就先从更换系统默认中文字体开始,以小米 MiSans 中文字体为例:

 以 root 或者 sudo ,在 /etc/fonts/conf.d/ 目录下,新建一个 3x.conf 文件(x可为1-4中的任意一个),文件内容如下图所示,然后保存文件。

17.png

 从字库下载字体后,确认系统是否已经安装了这款字体文件。在终端输入:fc-list | grep -i “misans”


18.png


 如果已安装字体,输出内容类似如下所示:


/usr/share/fonts/truetype/xiaomi/MiSans-Regular.ttf: MiSans:style=Regular
/usr/share/fonts/truetype/xiaomi/MiSans-Bold.ttf: MiSans:style=Bold


 然后运行命令来确认系统默认的 sans-serif 字体,是否已经设定为 小米 MiSans:


fc-match sans-serif

 如输出:

MiSans-Regular.ttf: “MiSans”“Regular”

则大功告成

 其实如果想把系统默认字体,改成其它字体,如华为字体,更纱黑体。只需要以 root 用户,把上面新建的 3x.conf 字体配置文件中的 2处“MiSans”(弥散), 改成相应字体名即可。


2、美化标题栏额头

 deepin里GTK应用标题栏设计的高度很高,而且和菜单栏一样是白色,组合到一起更高了,看起来很难看,比例不协调。为美化标题栏额头,我们可以执行以下命令:

curl --proto '=https' --tlsv1.2 -sSf 
https://gitee.com/2016_12_21/up_kernel/raw/master/titlebar.sh | bash


 执行完成后需注销账户再重新登录,即可看到效果。

 如果想自定义设置高度和颜色,文件位于:


~/.local/share/deepin/themes/deepin/light/titlebat.ini
[Active] 是活动窗口的设置
[Inactive] 是非活动窗口的设置
height是标题栏高度,可以自行调整
backgroundColor是标题栏颜色,可以设置任意自己喜欢的颜色

19.png

3、实现windows访问deepin共享文件

 在完成之前的deepin操作时,Windows内的文件需要用U盘或网盘传给deepin系统,很不方便。为此,我们可以创建共享文件夹以实现windows访问deepin共享文件夹。

 当然不限于本地设备的不同操作系统的文件传输,两台操作系统不同的设备也可借助相应的应用软件在同一局域网下实现数据的互通,也可不安装任何软件实现局域网快速共享文件。

 在大多数Linux发行版中,Python都会作为系统组件预装在内,deepin也不例外。Python有一个非常好用的简单服务器功能,只需要一条命令即可创建一个简易的单线程服务器:


python3 -m http.server
//在想要分享的目录打开终端,创建此目录为根目录创建HTTP服务器


记住端口号,然后在同一局域网下的其他设备上就可以在浏览器访问通过输入”http://IP:端口号”来访问这个文件夹。

 这时,我们就可以通过python在局域网下的任何设备之间传输文件,而不需要传输端和接受端下载任何软件!

20.png

 我们现在的步骤是:必须右键打开终端,然后输入命令,之后回车,然后在接受端输入地址,然后才能访问传输。其实这一过程还可以进一步简化。


七、软件应用安装落地


1、Office 2013

 解决完硬件及美化问题,可以考虑在Deepin中用deepin-wine6-stable安装Microsoft Office等应用软件了,这里以Office2013为例:

 Microsoft Office2013安装镜像iso文件放在下载文件夹(~/Downloads)中:


 在终端输入命令:

WINEPREFIX=~/.deepinwine/Deepin-Office 
deepin-wine6-
stable~/Downloads/cn_office_professional_plus_2013_x86_x64_dvd_1149708/setup.exe

21.png

 而想制作桌面图标制作桌面图标也很简单。以Access的图标为例(三件套的图标制作方法一样,就不一一介绍了)

 在桌面新建一个txt文件,命名为MSACCESS.txt,复制右边内容到txt文件里,保存退出txt,右键重命名,把这个txt文件的后缀改为desktop。大功告成!

 为了一劳永逸解决wine应用字体显示乱码、方块、显示不出等问题,这里推荐“Win字体”:

22.png

 (1)字段1:WINEPREFIX=是指定的容器路径

 (2)字段2:deepin-wine6-stable是你使用的wine

 (3)字段3:最后接英文双引号,双引号内是要运行的exe程序在容器drive_c(即模拟的c盘)中的路径,这里用的是Word


2、OBS录屏软件

 Deepin自带了录频快捷键(ctrl+alt+r),可以自行选择录频区域,但不自带转码。于是想到OBS录屏。

23.png

 可惜,在deepin 20.9 OBS录屏一点就崩(至少我这里是这样的),我们可以这么解决:

sudo apt install flatpack     // 先安装flatpack,再添加源
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gtk.Gtk3theme.deepin
flatpak install flathub org.gtk.Gtk3theme.deepin-dark   
// 安装深度主题相关
点击https://flathub.org/apps/details/com.obsproject.Studio链接的上面INSTALL按钮,下载安装文件
打开命令行,flatpak install --from 下载的安装文件路径 安装应用


 等安装完毕后,启动器里就有新版本的OBS了。这时再打开OBS录屏,正常运行,不再闪退了。


3、其他常用应用软件应用展示

24.png


 顺手解决了Linux(Deepin)上无Flash插件的问题,可以运行拳皇1.9.1:

26.png25.png27.png


 经过之前的美化和安装应用后,最终桌面效果:


28.png


八、进一步开发


1、解决启停docker容器导致VMware虚拟机断网

 在后续使用时,我发现docker启停任何一个container时就会让虚拟机(nat网络的)断网一下,猜测是更新iptables规则导致的

 kvm虚拟机时的解决方法是让docker和kvm使用同一个网桥nat 。但是我安装的是Vmware,试过把VMware的vmnet8改成桥接至docker0网桥,缺点是至少启动一个container实例才能使用这个网桥上网,不然网络状态是没插网线

 Docker 容器:是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。

 现在解决方法是:软路由+桥接+仅主机:

30.png

 软路由wan口设置好上网方式,两个wan口分别对应笔记本有线和无线网卡,有一个正常链接网络就能让软路由正常上网。

 软路由的lan网络想弄几个弄几个,对应创建vm仅主机网络对接就好。实测本来就只影响vmnat网络的数据转发,对仅主机和桥接网络无影响。

 vm网桥连接宿主机时就会自动配置上对应网段的第一个ip。这个IP也不要让软路由使用,避免冲突。

 软路由不需要64位的,不需要在软路由里面再开虚拟机了。


2、配置 DTK 开发环境

 国内CPU架构因其多样性的特点,带来了较多的适配工作。同时开发者代码实现风格不统一、底层代码质量不高,造成自研操作系统上的应用开发门槛较高,应用生态缺失。统信 UOS 为此开发套件开发者快速实现跨平台跨架构的开发套件——DTK。

 在官网下载uniontechos-desktop-20-professional-1030-fix_amd64 镜像,常规安装系统后,顺利进入到桌面。

 进入 控制中心-通用-开发者模式-进入开发者模式 ,激活开发者模式成功后,重启系统;

 更新源(若使用内网源,下载某些软件失败,记得换源)后,继续配置DTK 开发环境:


sudo apt update  //更新源
sudo apt install qt5-default qtcreator cmake g++ git       
//C++ 开发环境配置完成
sudo apt install libdtkwidget-dev libdtkgui-dev libdtkcore-dev 
//DTK 开发环境配置完成

在这之后,我们来验证 C++ 开发环境 配置是否成功:

 打开 QtCreator ,创建一个空的 Qt 空项目,执行运行,发现 C++ 开发环境 配置成功,大功告成!

 选定软件开发目录->克隆基本框架->修改其中的“DtkDemo.pro”为项目名字->Configure Project->运行按钮(快捷键“F5”)稍等两秒,即可看到基于dtk的窗口!

31.png


3、deb 软件包解包

 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统,是在Linux 下非常流行的一种安装包。

 Deb是Debian Linux操作系统中的软件包格式,Deb文件通常包含预编译的二进制文件、脚本和元数据。Deb文件可以通过包管理器(如dpkg)进行安装、升级和卸载。

 Deb文件的结构非常简单。它是一个压缩文件,可以使用标准的压缩工具(如gzip或bzip2)进行解压缩,当然也可以不借助工具解压缩:

 1、准备file-roller(归档管理器)。

 2、获取软件包 apt download spark-store。


32.png

 3、右键用归档管理器打开,把内容拖出来,解压到想要的位置。然后把压缩包解压。

 之后把control文件夹改名为DEBIAN,把data文件夹内的内容拖出来并删除到data文件夹。

33.png

 拆包完成!可以直接反向打包了。这里的打包就是解包的逆过程,可以在网上下载打包模板套用就行。一般在opt里放软件,str里放快捷方式。


4、部署 http 并发测试工具

 有大佬上传了自制的http并发测试工具,软件地址:https://github.com/leihenshang/http-little-toy

 部署过程:

 直接使用go install github.com/leihenshang/http-little-toy,再把go/bin放到环境变量里,使用http-little-toy 带上待测网站参数即部署完成。

 运行过程:

 1)手动编译成二进制文件直接运行


# 把项目编译成可执行文件并输出到当前目录
go build -o httpToy


 2)还可以放到全局变量中从而直接从命令行中执行


# 使用纯命令
 ./httpToy -d 10 -t 80 -u http://127.0.0.1:9090
或者使用如下命令:
# 使用请求文件
./httpToy -d 10 -t 80 -f request_sample.json
# 使用test-server
 go run . -u http://localhost:9090 -H aaa:bbbb -H ccc:ddd -body "hhhhh2333333" -d 2 -t 


九、后记


 通过之前的安装、系统使用和软件包安装,不难发现深度(deepin)操作系统的最大特点是美观。但因为大量的视觉效果优化,加重了系统资源的消耗。我试着在win7虚拟机上安装deepin双系统,画面切换有明显的卡顿,预计其对CPU主频的要求为2G以上。

 另外deepin一度拥有所有linux发行版中最大的官方软件仓库,现在被ubuntu以略微的优势反超。由于deepin的仓库更倾向于收藏国内的软件,这一点在国内仍然算优势。

 中文社区活跃,社区资源丰富也是其主要优点。

 但我们也看到刚刚演示的deepin中加入了一些硬件设备保障的操作,而且这部分操作极其消磨精力,诸如双系统时间不同步(需修改注册表)、I/O报错(使用命令badblocks -s -v /dev/sda扫描自定义路径的坏块),各种各样的不兼容、不适配、缺失头文件、缺少依赖关系(喜闻乐见)等问题也反映了其驱动支持不完善、维护不连续的特点。

 而且系统美化和进一步开发的难度也比较大,自定义的便利性低,感觉不如Arch Linux开放世界 ,而这方面Manjaro倒是个不错的选择。

34.png

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
1月前
|
安全 搜索推荐 Android开发
移动应用与系统:探索开发趋势与操作系统优化策略####
当今数字化时代,移动应用已成为日常生活不可或缺的一部分,而移动操作系统则是支撑这些应用运行的基石。本文旨在探讨当前移动应用开发的最新趋势,分析主流移动操作系统的特点及优化策略,为开发者提供有价值的参考。通过深入剖析技术创新、市场动态与用户需求变化,本文力求揭示移动应用与系统协同发展的内在逻辑,助力行业持续进步。 ####
45 9
|
17天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
18天前
|
人工智能 搜索推荐 Android开发
移动应用与系统:探索开发趋势与操作系统演进####
本文深入剖析了移动应用开发的最新趋势与移动操作系统的演进历程,揭示了技术创新如何不断推动移动互联网生态的变革。通过对比分析不同操作系统的特性及其对应用开发的影响,本文旨在为开发者提供洞察未来技术方向的视角,同时探讨在多样化操作系统环境中实现高效开发的策略。 ####
18 0
|
18天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
19天前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
23天前
|
存储 Linux 开发者
探索操作系统的内核——从理论到实践
操作系统是计算机科学的核心,它像一位默默无闻的指挥官,协调着硬件和软件之间的复杂关系。本文将深入操作系统的心脏——内核,通过直观的解释和丰富的代码示例,揭示其神秘面纱。我们将一起学习进程管理、内存分配、文件系统等关键概念,并通过实际代码,体验内核编程的魅力。无论你是初学者还是有经验的开发者,这篇文章都将带给你新的视角和知识。
|
1月前
|
存储 监控 供应链
深入理解操作系统:从理论到实践
本文将深入探讨操作系统的基本概念、功能和结构,以及它们如何影响计算机系统的性能和稳定性。我们将通过实例和代码示例来揭示操作系统的工作原理,并讨论其在现代计算环境中的重要性。无论你是计算机专业的学生,还是对操作系统感兴趣的技术爱好者,这篇文章都将为你提供有价值的见解和知识。
|
1月前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
1月前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
17天前
|
5G 数据安全/隐私保护 Android开发
移动应用与系统:探索开发趋势与操作系统革新####
本文深入剖析当前移动应用开发的最新趋势,涵盖跨平台开发框架的兴起、人工智能技术的融合、5G技术对移动应用的影响,以及即时应用的发展现状。随后,文章将探讨主流移动操作系统的最新特性及其对开发者社区的影响,包括Android的持续进化、iOS的创新举措及华为鸿蒙OS的崛起。最后,还将讨论移动应用开发中面临的挑战与未来的发展机遇,为读者提供全面而深入的行业洞察。 ####