免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1380 | 回复: 3
打印 上一主题 下一主题

[NetBSD] addpkg.sh:让你方便地在NetBSD 3.0下用2.0版本的binary packages [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-02 21:39 |只看该作者 |倒序浏览
BLOG:http://www.cublog.cn/u/10604/?u=http://www.cublog.cn/u/10604/showart.php?id=64955

这是今天写的一个小脚本。
可以在这里下载:
http://www.bsdchina.org/upload/bibby/addpkg-2006.01.02.sh.tar.bz2

  1. #!/usr/pkg/bin/bash

  2. # Author        :        MichaelBibby ( michaelbibby # gmail.com )
  3. # Date                :        2006.01.02
  4. # Purpose        :        NetBSD 3.0没有 i368 平台的预编译软件包,所以安装 2.0 版本的。
  5. #                                脚本在因为缺少依赖包而导致安装软件失败后,自动分析依赖关系,
  6. #                                并下载依赖的包。从而保证能将目的软件包安装上。

  7. # 谁需要这个脚本?
  8. # 1:如果你不需要将 binary packages 保存在本地,你不需要此脚本。你可以指定
  9. #    PKG_PATH 变量,然后再使用 '# pkg_add PKG' 来安装软件包;
  10. # 2:还没想到 *_*;

  11. # TODO:
  12. # 1:在PKG_ADD之后检测退出状态,询问是否下载软件包;

  13. # Packages Request :
  14. # 1:bash ;
  15. # 2:wget <- 可以用其它下载软件来代替 ;

  16. # --------------- Script Start ----------------
  17. # 设置变量FTP。
  18. # 建议使用速度快些的镜像站点;
  19. export FTP="ftp://iso2.tw.netbsd.org/pub/NetBSD/packages/2.0/i386/All/"

  20. # 函数 clear_temp_files():
  21. # 功能:清楚临时文件;
  22. function clear_temp_files()
  23. {
  24.         echo -ne "Clearing temp files ... "
  25.         rm -f $1.list
  26.         echo "Done !"
  27.         exit
  28. }

  29. # 函数 trap_down():
  30. # 为函数 PKG_DOWNLOAD 设置的陷阱(trap)。
  31. # 功能:
  32. #   如果软件包未下载完时按下了 Ctrl+C 中断,会询问是否删除只下载了一部分的包;
  33. #   如果不删除,下次执行 addpkg.sh 时会使用 wget 的断点续传功能(wget -c)。
  34. function trap_down()
  35. {
  36.         if [ -e $1 ]
  37.         then
  38.                 echo -e "\n\t Do you want to delete the uncompletely downloaded"
  39.                 echo -ne "\t package : $1 [y|n]"

  40.                 read answer
  41.                 case $answer in
  42.                         y|Y)
  43.                                 rm -f $1.tgz
  44.                                 exit ;;
  45.                         n|N|*)
  46.                                 echo -e "\n\t Maybe you want to use this CMD to download it"
  47.                                 echo -e "\t completely:"
  48.                                 echo -e "\t wget -c ${FTP}${1}.tgz"
  49.                                 echo -e "\n\t Script exiting ... \n"
  50.                                 exit ;;
  51.                 esac
  52.         else
  53.                 echo -e "\n\n\t Script exiting ... "
  54.                 exit
  55.         fi

  56.         echo "Done !"
  57. }

  58. # 函数 PKG_ADD():
  59. # 功能:安装软件包。
  60. # 1:如果依赖包都已经安装或在当前目录下,则安装;
  61. # 2:如果有未满足的依赖包,则自动从指定的 $FTP 上下载,保存在本地;
  62. # 3:
  63. function PKG_ADD()
  64. {
  65.         trap "clear_temp_files $1" 2

  66.         echo -e "\n\n\t Adding packages : $1 ... \n"
  67.         pkg_add ./$1 2>&1 |tee $1.error

  68.         if [ -e $1.error ]
  69.         then
  70.                 grep 'sorry\.$' $1.error |awk -F"'" '{print $2}'>>$1.tmp
  71.                 grep -v '>' $1.tmp |sort|uniq >>$1.list
  72.                 rm -f $1.error $1.tmp
  73.         else
  74.                 echo -ne "\n\n\t Package $1 has been installed !"
  75.                 echo -e "\t Done !"
  76.                 exit 0
  77.         fi
  78. }

  79. # 函数 PKG_DOWNLOAD:
  80. # 通过判断 $1.list 是否存在来决定是否下载软件包和下载哪些软件包;
  81. #
  82. function PKG_DOWNLOAD()
  83. {
  84.         trap "trap_down $i" 2

  85.         if [ -z $1.list ]
  86.         then
  87.                 :
  88.         else
  89.                 for i in $( cat $1.list )
  90.                 do
  91.                         echo -e "\n\n\t Downloading depending package: $i.tgz ... \n"
  92.                         wget -c ${FTP}${i}.tgz
  93.                 done
  94.         fi

  95.         rm -f $1.list
  96. }


  97. # 函数main():
  98. # 完成一个完整的流程:
  99. # 安装 -> 检测依赖关系 -> 下载依赖的软件包 -> 再次安装;
  100. function main()
  101. {
  102.         PKG_ADD $1&& \
  103.         PKG_DOWNLOAD $1&& \
  104.         pkg_add $1
  105. }

  106. # -------- Script Main ------------

  107. if [ -e $1 ]
  108. then
  109.         main $1
  110. else
  111.         wget -c ${FTP}${1}
  112.         main $1
  113. fi
复制代码

[ 本帖最后由 MichaelBibby 于 2006-1-2 22:43 编辑 ]

addpkg-2006.01.02.sh.tar.gz

1.68 KB, 下载次数: 9

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2006-01-02 21:43 |只看该作者
友情UP

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
3 [报告]
发表于 2006-01-02 22:48 |只看该作者
呵~
PS:刚才找了一下,发现自己有NB2.0 i386pkg.iso

论坛徽章:
0
4 [报告]
发表于 2006-01-02 23:56 |只看该作者
原帖由 congli 于 2006-1-2 22:48 发表
呵~
PS:刚才找了一下,发现自己有NB2.0 i386pkg.iso

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP