# ospp2022 **Repository Path**: aa1hshh/ospp2022 ## Basic Information - **Project Name**: ospp2022 - **Description**: ospp2022文档 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-22 - **Last Updated**: 2022-12-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 开源之夏2022 项目:将Vscode包集成到龙蜥生态 文档 ## 初识项目 要将vscode集成到Anolis8,需要编写相应的spec,另外vscode源码可能需要一定的修改才能顺利被打包。这个阶段就是学习导师推荐的资料,掌握编写spec的一般方法;另外查阅vscode源码,找到了一个spec模板。 ## 项目进行 首先是研究了下vscode源码。由于最终目的是构建出rpm包供其他用户下载安装vscode,我先在本地尝试从源码编译运行vscode,在这个过程中对源码需要那些依赖、源码的结构有了一个大概的认识,也对构建vscode的方法基本有数了。
第二步是编写初步的spec。通过查阅上游仓库的文档发现,vscode提供了gulp任务来辅助源码构建,这大大加快了spec编写的进度。
第三步线上预构建。我将本地编写好的spec及相关文件提交到koji做初步的构建,主要是解决一些本地和koji依赖不一致的问题。 ## 项目改进 本地编写的spec需要联网下载资源,而社区的koji一般情况下都是离线构建的,因此需要对之前编写的spec做一些改进。经过~~踩坑~~实验和验证,得到了如下的解决方案: 1.首先对yarnpkg编写spec进行了构建,编为rpm后直接写入BuildRequires,不用构建时联网下载了;
2.然后是解决构建工具yarn的联网下载问题,通过查阅资料得知yarn有offline模式,可提前将项目所需的全部依赖整合起来形成离线镜像;
3.其次在`~/.cache`目录下对`ms-playwright/` `electron/` `esbuild/`这几个包缓存;
4.最后是buitin扩展,查看代码发现并没有从缓存路径读取文件的相关代码,于是增加这部分逻辑,并修改相关代码。
全部整理好之后本地利用mock工具验证,在koji构建成功后提交PR。 ## 遇到的问题 项目开发过程中遇到了很多问题,让我影响比较深的是这么几个。详细问题详见[开发记录&&问题整理](#开发记录问题整理) 1. 初步编写spec遇到的gulp task问题:报错之后在上游代码仓库搜索发现问题存在已久[#issues149114](https://github.com/microsoft/vscode/issues/149114),我在issues底下评论和交流了下,没有得到比较好的解决方案,之后就阅读代码相关逻辑,我认为中断构建的代码不很影响编译过程,就注释了相关的代码,本地构建通过了。过了大概一个星期,上游社区新增了一个PR解决了这个问题,解决方法不一样,但思路是类似的:正常情况下跳过输出依赖改动的代码。 2. 线上预构建问题:BuildRequire部分的node的版本报错,用于构建vscode的node版本必须是介于16.14.x 和17之间的,因此在编写spec的过程里也必须体现出来。但诡异的是线上预构建直接报错`No matching package to install`,后来在版本号前面加了`1:`才解决了问题,在这个过程中我才了解到一个rpm包的命名规则:epoch:version:release。只是epoch经常被省略不写。 ## 开发记录&&问题整理 开发记录按照日期或内容记录于[note](./note)目录下,形如`*问题.md`详细记录了遇到的问题及解决方案 ```bash ├─note │ 0720源码构建问题.md │ 0810spec问题.md │ 0829无网络1问题.md │ 0830无网络2.md │ 0831上传问题.md │ 0901mock问题.md │ 0903aarch问题.md │ 0905测试.md │ 0915扩展问题.md │ dnf-command.md │ vm-install.md │ 学习-hello系打包.md │ 学习-proxychains-ng打包.md └─ 学习-rpm&rpmbuild&spec.md ``` ## 开发日历 | 日期 | 做了什么 | 名称 | | --------- | -------------------------------- | ------------------------------ | | 0627 | 安装openanolis的8.6GA版本 | [vm-install.md](./note/vm-install.md) | | 0702 0705 | 安装rpmdevtool      shello.sh 构建成功 | [学习-hello系打包.md](./note/学习-hello系打包.md) | |0720|源码运行安装vscode完成|[0720源码构建问题.md](./note/0720源码构建问题.md)| |0810| 第一次线上构建,nodejs版本有问题,需要epoch来解决 | koji taskID=327344| |0812| 线上构建机器无网络,需要本地构建yarnpkg|koji taskID=327857| |0816|yarnpkg.rpm构建完成|koji taskID=328576
[0810spec问题.md](./note/0810spec问题.md)| |0820|本地用yarnpkg.rpm可以构建项目|| |0822|yarncache压缩为yarn-cache-offline|| |0826|yarn run gulp vscode-linux-%{arch}-min cache压缩为tocache|| |0829|源代码更改合入patch|[0829无网络1问题.md](./note/0829无网络1问题.md)| |0830|不删yarn.lock重新生成yarncache,网上教程导致yarn.lock版本不对|[0830无网络2.md](./note/0830无网络2.md)| |0831|gitee存储不了大文件,改为download文件,md5sum生成哈希
spec Source不能用if条件判断|[0831上传问题.md](./note/0831上传问题.md)| |0901|tocahe缓存增加内容现在是ms-playwright/ electron/ esbuild/
gyp报错,检查本地构建出错log,python版本设置问题 || |0902|学习mock,mock cfg自动安装依赖
线上x86任务被aarch64取消,x86之前出错位置已过|[0901mock问题.md](./note/0901mock问题.md)| |0903|生成armtocache
arm mock gyp报错,查官网,设置环境变量python|[0903aarch问题.md](./note/0903aarch问题.md)| |0904|taskID=350736终于过了:sunglasses:|| |0905|扩展不能加载|[0905测试.md](./note/0905测试.md)| |0915|扩展问题是官方不支持,详见[GitHub-Extensions](https://github.com/microsoft/vscode/wiki/How-to-Contribute#extensions)|[0915扩展问题.md](./note/0915扩展问题.md)| |0920|整理|[终总结.md](./note/终总结.md)| ## 学习资料 导出书签[vscode.html](./src/vscode.html)