# oss-fuzz-openeuler **Repository Path**: ban_jiang/oss-fuzz-openeuler ## Basic Information - **Project Name**: oss-fuzz-openeuler - **Description**: OSS-Fuzz 向 openEuler 平台的迁移项目 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2022-05-27 - **Last Updated**: 2022-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### OSS-Fuzz 移植项目简介 #### 项目需求 本项目针对开展在 openEuler 上构建 OSS-Fuzz 的容器镜像,实现 OSS-Fuzz 容器从 Ubuntu 到 openEuler 的迁移,并完成 24 个软件包的 OSS-Fuzz 测试。 #### 环境要求 1. x86架构 2. openEuler 20.03 LTS SP3 和 openEuler 22.03-LTS #### 验收要求 1. 四种引擎支持:libfuzzer、afl、honggfuzz、dataflow 2. 检测功能支持:address、memory、undefined、dataflow 3. 多语言支持:C/C++、Go、Java、Python、Rust、Swift 4. OSS-Fuzz 基础镜像的 Dockerfile 5. 自动化用例 6. 测试报告 #### 项目相关链接 - [项目管理文档](https://docs.qq.com/sheet/DSEdBWHJYbFdBa2xj?u=3e90927134394f638bdb49b5eeb21229&tab=BB08J2) - [OSS-Fuzz GitHub 主页](https://github.com/google/oss-fuzz) - [网络受阻链接统计表](https://docs.qq.com/sheet/DSE1oblBrTEZNa01x?u=3e90927134394f638bdb49b5eeb21229&tab=BB08J2) ### OSS-Fuzz 官方介绍 [OSS-Fuzz-README.md](https://gitee.com/jasonchio/oss-fuzz-openeuler/blob/master/OSS-Fuzz-README.md) ### 基础镜像移植思路 移植思路: 1. 替换基础镜像(ubuntu:20.04 --> openeuler/openeuler:20.03-lts-sp3) 2. 替换包管理工具(`apt-get` --> `yum`) 3. 替换软件包,[软件包源](https://pkgs.org/) - 先尝试是否可以安装同名包(`apt-get install -y wget` --> `yum install -y wget`) - 如果没有同名包,则安装相同作用的包(`apt-get install -y libc6-dev` --> `yum install -y glibc-devel`) 4. 构建基于 openEuler 的镜像(`docker build -t fuzz-base-image:alpha1 .`),根据构建过程中的错误 log 修改 Dockerfile 直至镜像构建成功 ### openEuler repo 源替换 备份 repo 源 ```shell cp /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak ``` 将仓库中 docs/whut/openeuler_x86-64.repo.txt 文件中的内容复制到 `openEuler.repo` 中(检查是否复制完全),重新生成缓存 ```shell yum clean all yum makecache ``` ### 项目仓库的 fork 及基本设置 #### fork 项目 > fork 的作用是将主仓库复制一份到个人仓库中,对个人仓库的修改不会影响主仓库。 进入项目主仓库之后,界面右上角(头像下面)会有 Fork 按钮,点击该按钮将项目 fork 到个人仓库中。 ![Gitee 个人仓库](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/gitee-private-repos.png) #### clone > 将 fork 到个人仓库的项目克隆到本地 在项目主页复制项目 Git 链接 ![copy-gitee-link](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/copy-gitee-link.png) 将项目克隆到本地 ```shell git clone repo_link ``` 新建开发分支 ```shell git checkout -b 用户名_dev git push --set-upstream origin 用户名_dev ``` > master 分支主要是为了同步主仓库的代码,开发分支为实际做修改的分支。 ![new_branch](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/new_branch.png) #### 设置 git 用户名及邮箱 ```bash git config --global user.name "你的用户名" git config --global user.email "你注册时候的邮箱" ``` #### 免密 push 解决 git push 时每次都需要输入用户名和密码的问题 ```bash # oss-fuzz-openeuler 目录下输入 git config credential.helper store # 将本次修改推送到远程仓库 git push # 输入账号密码后,下次 push 就不用输入了 ```` #### 提交修改 > 在解决了某个 bug 或完成了某个功能后,生成一次 commit 来保存修改。 1. `git status`查看有变动的文件 ![git-status](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/git-status.png) 2. `git add .`将所有有变动的文件都加入到暂存区 ![git-add](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/git-add.png) 3. `git commit`填写 commit message,将修改提交,提交的规范见下文。 ![git-commit](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/git-commit.png) 4. `git push`将修改提交到 Gitee 仓库(支持多次 commit 操作之后一起提交到 Gitee 仓库) ![git-push](https://gitee.com/jasonchio/oss-fuzz-openeuler/raw/master/docs/images/git-push.png) 5. 完成一次变动提交 #### git commit message 规范 设定项目提交模板 ```shell git config --global commit.template .git-commit-template ``` 在编写 commit message 时,遵循以下规范 ```shell ():space blank line blank line