Author: Younix
Platform: RK3399
OS: Android 7.1
Kernel: 4.4.126
Version: v2019.06


文章目录

    • 准备工作
    • GIT服务器建立(基于GITOLITE)
      • 服务器安装 gitolite(服务端操作):
      • 给 GIT 用户添加下载权限(服务端操作)
      • 使用 gitolite-admin 来管理服务器权限(在客户端操作)
    • REPO 镜像安装
      • 1. 获取 RK SDK(在客户端上的操作)
      • 2. 创建 project tree(在客户端的操作)
      • 3. MANIFEST 创建(在客户端操作)
      • 4. 将 RK SDK 提交到 qxzn-git 服务器的 repo 仓库中
    • Repo 下载测试
    • 错误集锦
      • 权限问题
    • 参考文档

准备工作

1、安装基础的程序

sudo apt-get install ssh git

2、生成密钥对

ssh-keygen -t rsa

PS:连续三次回车,即在本地生成了公钥和私钥,不设置密码,生成的公钥私钥在~/.ssh目录下,rsa 是私钥, rsa.pub 是公钥

GIT服务器建立(基于GITOLITE)

服务器安装 gitolite(服务端操作):

a) 创建 git 账户:

sudo adduser --system --shell /bin/bash --group qxzn-gitAdding system user `qxzn-git' (UID 112) ...Adding new group `qxzn-git' (GID 121) ...Adding new user `qxzn-git' (UID 112) with group `qxzn-git' ...Creating home directory `/home/qxzn-git' ...sudo passwd qxzn-git

b) 下载源码

git clone https://github.com/sitaramc/gitolite.git

c) 以 “git” 账户登录Linux 系统/ 或者直接:

su - qxzn-git

d) 确保“~/.ssh/authorized_keys”为空或者不存在。
e) 拷贝服务器管理员 qxzn 的公钥到 “$HOME/qxzn_rsa.pub”。

cp /home/qxzn/.ssh/qxzn_rsa.pub $HOME/chmod 600 qxzn_rsa.pub

f) 执行:

mkdir -p $HOME/bin

g) 执行下列命令安装,不同版本安装方法不同,请参考源码中的文档:

gitolite/install -to $HOME/bin

h) 执行:

$HOME/bin/gitolite setup -pk qxzn_rsa.pub #管理员的公钥

给 GIT 用户添加下载权限(服务端操作)

a)如果没有就在$HOME 帐号下建一个.ssh 隐藏目录,并且把管理员帐号下面的 id_rsa(这个是管理员的密钥) 复制到刚建立的.ssh 下
b)更改密钥的组权限

sudo chown git:git ~/.ssh/qxzn_rsa*

我这里因为已经去 /etc/sudoer 给了 git sudoer 权限,所以可以直接操作。你可能需要先切换到 root 用户下才能操作。
c)改权限(注意私钥必须是600,权限太高的话不行)

sudo chmod 600 ~/.ssh/qxzn_rsa*

使用 gitolite-admin 来管理服务器权限(在客户端操作)

Git 工具相关概念资料,请搜索 progit 文档阅读理解。
a) 克隆 gitolite 管理仓库:

# git clone ssh://git@host/gitolite-admin.gitgit clone ssh://qxzn-git@10.10.7.83/gitolite-admin.git

b) 添加用户公钥

cd gitolite-admincp ~/.ssh/kent_rsa.pub keydir/kent_rsa.pub

c) 添加管理员用户
vi conf/gitolite.conf

@admin = qxznrepo gitolite-adminRW+ = @admin

d) 提交生效
每次修改conf/gitolite.conf 内容都要提交才会生效

git add conf/gitolite.confgit commit "add usergroup"git push origin master

还需要以下两项功能的可以参考下面这个博客:
Gitdaemon(守护进程,开放一个公共的 git clone 服务,可选)
Gitweb(提供像Github一样的Web服务,通过浏览器查看版本库记录,可选)
http://blog.chinaunix.net/uid-26185912-id-3351963.html

REPO 镜像安装

1. 获取 RK SDK(在客户端上的操作)

这里略过了,基本上大家都知道。

获取到 SDK 后,我们获取 projects 列表,用于后面编写 gitolite.conf

.repo/repo/repo list -n > projects.txtsed -i 's/^repo//' projects.txt (repo 指的是前面创建文件夹的名字,list 会把那个加上)sed -i 's/^/@rk\ = \ repo\//' projects.txt

2. 创建 project tree(在客户端的操作)

目标:增加权限,并且创建repo/platform/manifest.git仓库。

将上面步骤的 projects.txt 内容添加到gitolite-admin/conf/gitolite.conf 中:

cd path_of_gitolite-admin # 进入 gitolite-admin 的路径echo "" >> conf/gitolite.conf # 添加个空行cat projects.txt >> conf/gitolite.conf

添加组权限,在文件最后(所有“@rk = repo/…”后面)添加如下内容:

vi conf/gitolite.conf@user = user1 user2 user3@rk = repo/platform/manifestrepo @rk    R = @usergroup    RW+ = @adminRW+ = qxzn_rsa

PS:push 后,我们在 /home/qxzn-git/ 下可以看到 repositories/repo 目录中即生成了 conf/gitolite.conf 中指定的目录结构。
比如 @rk = repo/platform/manifest 此设置上传后,会在相应的服务端上创建出一个空的manifest.git仓库,作为下一步的基础。
home/qxzn-git/repositories/repo 目录即为我们后面实现 manifest.xml 的 remote fetch 的路径。

3. MANIFEST 创建(在客户端操作)

目标:创建 Manifest.xml 文件,用来管理 Android 源码中的 git 子仓库。
基于上一步服务器会生成一个空的 manifest.git
去另外一个路径(/home/qxzn/codes/),我们下载 manifest 仓库

# git clone ssh://git@host/repo/platform/manifest.gitgit clone ssh://qxzn-git@10.10.7.83/repo/platform/manifest.git# 如果出现没有权限之类的错误,请确认 gitolite-admin/conf/gitolite.conf 中 R、RW+ 等权限设置是否正确

进入manifest工程,从server中之前获取的 RK 源码中拷贝一份manifest.xml 并上传

cd manifestscp qxzn-git@host:/home/qxzn-git/rk3399/.repo/manifest.xml ./rk3399_android-7.1.xml

第一个参数的 manifest.xml 指的是从 RK 服务器同步下来的 xml (实际上是指向 manifests/rk3399_nougat_release.xml)
第二个参数拷贝到本的绝对地路径为 /home/qxzn/codes/manifest/rk3399_android-7.1.xml,
这个对应着在 qxzn-git 服务器上的 manifest 仓库中 /home/qxzn-git/repositories/repo/.repo/manifests 目录下面的 xml。

在复制完成后,打开改名后的 xml 文件,进行修改(非常关键)
规则语法参考(务必先了解规则):repo的manifest.xml文件全解 https://blog.csdn.net/nwpushuai/article/details/79252297

  1. 删除 revision 、upstream
sed -i 's;revision=.*>;/>;g' rk3399_android-7.1.xml
  1. 删除 remote
sed -i 's;remote=.*>;>;g' rk3399_android-7.1.xml
  1. 修改 remote fetch
    刚获取到的 rk3399 manifest.xml 应该是这样的
      

修改为

  1. 提交
git add rk3399_android-7.1.xmlgit commit -m "add initial manifest for Android7.1"git push origin master

4. 将 RK SDK 提交到 qxzn-git 服务器的 repo 仓库中

我们需要一个纯净的 RK SDK:

# 删除所有的 .git 子仓库find . -name ".git" | xargs rm -rf# 删除 .repo rm .repo -rf# 查看纯净的代码大小du -sh .24G # RK3399 的代码大概在 24G 左右

接下来根据之前我们修改的 rk3399_android-7.1.xml 里面描述的目录结构生成新的 .git 仓库树并提交到远程仓库:
使用以下 python3 的脚本实现
https://github.com/dearsq/Note-xiaoshujiang/blob/master/Environment/Android7.1_RK3399_getnames_and_init_push_git_proj.py

# 进入 24G 源码目录cd rk3399 # 拷贝py脚本 和 manifest.xml 文件(rk3399_android-7.1.xml)到当前目录cp [Android7.1_RK3399_getnames_and_init_push_git_proj.py] ./cp [rk3399_android-7.1.xml] ./# 修改脚本中 remote 部分的地址# 脚本中 remote = 'ssh://qxzn-git@10.10.7.83/repo' 根据自己实际情况进行修改vi Android7.1_RK3399_getnames_and_init_push_git_proj.py# 执行脚本chmod +x Android7.1_RK3399_getnames_and_init_push_git_proj.py./Android7.1_RK3399_getnames_and_init_push_git_proj.py rk3399_android-7.1.xml

注意!使用脚本前请保证

  1. python3 工具已经安装正确
  2. git config --global user.name 等都正确配置
  3. id_rsa 等密钥正常添加,ssh-agent bashssh-add ~/.ssh/qxzn_rsa

Repo 下载测试

../repo init -u ssh://qxzn-git@10.10.7.83/repo/platform/manifest.git -b master
repo init --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -u ssh://qxzn-git@10.10.7.83/repo/platform/manifest.git -b master -m rk3399_android-7.1.xml

如果没有 -m 指定 xml, 会使用名为 default 的 xml

repo sync

如果没有 repo 的话, 参考 https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repochmod +x repoexport REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

错误集锦

权限问题

如果碰到类似如下错误:

FATAL: R any repo/device/moto/shamu-kernel qxzn_rsa DENIED by fallthru(or you mis-spelled the reponame)fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.error: Cannot fetch device/htc/flounder-kernel from ssh://qxzn-git@10.10.7.83/repo/device/htc/flounder-kernelerror: Cannot fetch device/asus/fugu-kernel from ssh://qxzn-git@10.10.7.83/repo/device/asus/fugu-kernelerror: Cannot fetch device/moto/shamu-kernel from ssh://qxzn-git@10.10.7.83/repo/device/moto/shamu-kernel

请确保 gitolite/conf/gitolite-admin.conf 中有正确的权限

error: Cannot fetch device/htc/flounder-kernel from ssh://qxzn-git@10.10.7.83/repo/device/htc/flounder-kernel [132/1875]
error: Cannot fetch device/asus/fugu-kernel from ssh://qxzn-git@10.10.7.83/repo/device/asus/fugu-kernel
error: Cannot fetch device/moto/shamu-kernel from ssh://qxzn-git@10.10.7.83/repo/device/moto/shamu-kernel

参考文档

基于 RK 官方文档 https://wenku.baidu.com/view/99fb9e2ea98271fe900ef93d.html
和 lzpdz 小伙伴的笔记 https://blog.csdn.net/lzpdz/article/details/51672161
进行梳理,更正了两者中过期以及错误的地方
补充相见恨晚的一篇文章 http://nicekwell.net/blog/20171112/ba-yi-you-de-repogong-cheng-ti-jiao-dao-fu-wu-qi.html#repo-1

更多相关文章

  1. android简单的请求手机权限封装
  2. [PX3][Android7.1] 调试笔记 去除USB权限弹窗
  3. Android(安卓)添加手势操作
  4. Android(安卓)8.0 适配安装未知来源权限 canRequestPackageInsta
  5. Android(安卓)6.0以上系统使用RxPermissions申请动态权限
  6. Android开发SQLite基本用法
  7. 【Android(安卓)Studio】Camera.Parameters parameters = mCamer
  8. android 9.0 Intent卸载应用无反应问题
  9. Android(安卓)6.0 新特性之 RunTime Permissions

随机推荐

  1. android背景选择器selector用法汇总
  2. Android开机流程
  3. Android(安卓)网络操作常用的两个类
  4. Android(安卓)中加入SD card 应用
  5. Android之socket编程实例,熟悉socket使用
  6. Kitkat 的磁盘加密功能分析
  7. android 在线升级借助开源中国App源码
  8. Android的SeekBar和RateBar的使用-androi
  9. android:textAppearance
  10. Android(安卓)Shape 的使用入门