# 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)