关于使用repo时repo init和repo sync失败的一个解决方案
2017-11-01 10:23
2951 查看
由于我国的网络的原因,在访问谷歌等一些国外网络资源时经常会遇到被拦截的情况,尤其是新一代GX|FX|WX更新又添加了V*P*N相关的识别方案。导致repo等一些代码管理工具拉取代码网络受限受阻,下面提供一个可以参考的简单解决方案。
1、repo init时的遇到fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle问题
方法1:
由于在repo init时,会到https://gerrit.googlesource.com域名去更新拉取的python脚本,导致被wall,所以这里可以使用清华大学提供的镜像文件来解决,先执行上面命令后再执行repo init的操作就可以了。
方法2:
先执行下面的命令单独克隆repo,然后将git-repo目录里面的repo文件复制到bin目录,在同步源码的工作目录新建.repo文件夹,把git-repo重命名为repo复制到.repo目录下,然后再重新执行repo init.
1、repo init时的遇到fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle问题
方法1:
获取镜像: 1 mkdir ~/bin 2 PATH=~/bin:$PATH 3 curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 4 chmod a+x ~/bin/repo
由于在repo init时,会到https://gerrit.googlesource.com域名去更新拉取的python脚本,导致被wall,所以这里可以使用清华大学提供的镜像文件来解决,先执行上面命令后再执行repo init的操作就可以了。
方法2:
先执行下面的命令单独克隆repo,然后将git-repo目录里面的repo文件复制到bin目录,在同步源码的工作目录新建.repo文件夹,把git-repo重命名为repo复制到.repo目录下,然后再重新执行repo init.
1 git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo[/code]
2、repo sync同步拉取代码时,经常会出现卡住或者失败的情况
解决方法1:修改dns为google提供的8.8.8.8的dns服务器。
ubuntu下修改方法如下:
1)编辑 /etc/resolvconf/resolv.conf.d/base 文件(文件默认是空的),在里面添加下面两行代码
nameserver 8.8.8.8
nameserver 8.8.4.4
2)执行 resolvconf -u命令,然后使用命令 cat /etc/resolv.conf查看dns配置文件如果发现已经添加了新加的两行dns server就可以了。
解决方法2:添加repo sync失败后自动重新执行的脚本
如果修改完dns服务后依然会有repo sync的情况,就只能通过持续执行repo sync命令的方式来解决了。
1)获取网络检测工具ifstat
由于repo sync在执行时被卡住后,网卡的流入流量会变小(在没有其他需要下载或上网的进程执行的情况下),所以可以考虑通过检测网卡流入流量的变小情况来判断repo sync执行卡住,进行重新执行(由于repo sync支持断点续传)。
所以先要安装网络检测工具ifstat,ubuntu获取方法为sudo apt-get install ifstat
2)运行重复执行脚本
将如下脚本代码保存为.sh后缀的shell文件后,执行脚本,如果使用xshell连接的虚拟机或服务器可以考虑用&的方式在后台运行(如果在windows复制网页的shell代码,最好用notepad等编辑工具转换为Unix文件的utf-8编码格式,否则可能会导致执行失败)。
下面的脚本也有一些问题,没办法判断repo sync执行是否完成了,即使执行完成了还是会重新执行,不过不影响代码拉取成功,如果有更好的解决方案欢迎和我一起讨论。1 #!/bin/bash 2 3 #杀掉repo sync进程 4 kill_reposync() { 5 PID=`ps aux |grep python|grep [r]epo |awk '{print $2}'` 6 [[ -n $PID ]] && kill $PID 7 } 8 9 #启动reposync进程 10 start_reposync() { 11 repo sync & 12 } 13 14 #重启reposync进程 15 restart_sync() { 16 kill_reposync 17 start_reposync 18 } 19 20 #网络检测相关阈值 21 th_net_value="30" #实际检测,repo sync卡住时,网卡入口数据小于10 22 th_retry_times=100 #低于网络检测阈值次数限制 23 ((count_low=0)) 24 25 restart_sync 26 27 28 while [[ 1 ]]; do 29 # 用ifstat检测网速 30 cur_speed=`ifstat 1 1 | tail -n 1 | awk '{print $1}'` 31 32 result=$(echo "$cur_speed < $th_net_value" | bc) 33 if [[ $result == "1" ]]; then 34 ((count_low++)) 35 else 36 ((count_low=0)) 37 fi 38 if ((count_low > th_retry_times)); then 39 ((count_low=0)) 40 echo "restart repo sync" 41 restart_sync 42 fi 43 done
相关文章推荐
- 关于一个ListView使用多个item布局在优化时出现显示错乱的解决方案
- [转载].关于使用QII 10.0编译器无法编辑和查看中文的问题一个变通解决方案
- 关于Unity中的Animator使用animator.Play()不能重复播放同一个Animatoin的解决方案
- 关于使用shiro做权限 上传文件失败的问题 解决方案
- 关于npm和yarn安装node-sass失败并且依旧想使用NPM或者yarn的完美解决方案
- 关于一个ListView使用多个item布局在优化时出现显示错乱的解决方案 (优化)
- 关于《创建组件**失败。错误消息为**未能加载文件或程序集**或它的某一个依赖。系统找不到指定文件。》的解决方案
- 关于centos 7 中service iptables save 指令使用失败的解决方案
- 关于使用Asp.net导出Excel,遭遇“LinkButton必须放在一个具有runat=server的标签的Form”的解决方案。
- 一个关于git push失败的解决方案
- 关于使用百度地图安卓SDK的过程中出现“Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败”的一个解决方法
- 关于使用putty私钥连接linux出现失败的原因解决方案
- 关于使用genymotion"创建 VirtualBoxClient COM 对象失败. 应用程序将被中断“的解决方案
- 关于Oracle安装完毕使用自带图形化界面打开失败的问题 --->解决方案
- 关于阿里云服务器上使用javamail失败的解决方案
- 关于使用SpringSecurity不能设置Session并发无效、剔除前一个用户无效的核心解决方案
- 关于《创建组件**失败。错误消息为**未能加载文件或程序集**或它的某一个依赖。系统找不到指定文件。》的解决方案
- [原创].关于使用QII 10.0编译器无法编辑和查看中文的问题一个变通解决方案
- 关于HP-UX中出现无法使用历史命令的问题的解决方案
- 关于加载设计器遇到一个或多个错误问题的解决方案