免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] 用pkg fetch下载完整的packages库 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-21 16:17 |只看该作者 |倒序浏览
本帖最后由 lsstarboy 于 2015-05-21 16:19 编辑


现在硬盘容量大了,价格也便宜了,对于经常折腾FreeBSD的人来说,便有下载全部packages的冲动,因为每次安装,都需要很长的时间,特别是安装桌面,没有几个小时那是不行的,而整个packages库也就40G多一点,对于现在的硬盘来说,就是不到三部高清电影,随便找地方就能放下。
以前的pkg_add -r 的时代,packages是ftp协议,用一个ftp工具就轻松地同步整个packages库,但现在pkg走的是http和pkg协议,ftp那一套不好用了,用http也比较麻烦,还在不停地扫描文件,看是不是最新的。
新的pkg系统其实自带了这个功能,就是fetch子命令,简单看一下man:# man pkg-fetch
……
NAME
     pkg fetch -- fetch remote packages

SYNOPSIS

     pkg fetch [-r reponame] [-dqUy] [-Cgix]pkg-name [...]

     pkg fetch [-r reponame] [-o destdir][-dqUy] -a

     pkgfetch [-r reponame] [-dqUy] -u


     pkg fetch [--repository reponame][--output destdir]

        [--{dependencies,quiet,no-repo-update,yes}]

        [--{case-sensitive,glob,case-insensitive,regex}] pkg-name [...]

     pkg fetch [--repository reponame]

        [--{dependencies,quiet,no-repo-update,yes}] --all

     pkg fetch [--repository reponame]

        [--{dependencies,quiet,no-repo-update,yes}] --available-updates


DESCRIPTION

     pkg fetch is used to download binarypackages from a remote repository.


     One or more packages, or patterns can bespecified.


……这个fetch子命令就是专门用来下载txz包的,可以单独下载指定的包,以及它的依赖,并可以存放到指定的目录中去,还可以指定下载的源服务器,这对于使用镜像源服务器来说非常方便。

根据man,其实就可以简单地构造出下载整个packages的命令来:

# pkg fetch -yo/root/pkg/ -a

解释一下:
-y: 对于提问,都回答以Y。在下载的过程中,pkg要首先分析pkg数据库,找出需要下载的软件包列表,并给出相应的大小,然后提问是不是要下载,这个时候需要回答y 才能继续。加上这个参数后,就自动认为用户回答了y。
-o: 指定存放txz文件的目录。如果不指定,就默认进入/var/cache/pkg/里面。
-a: 所有软件包。如果下载某一个软件包,可以直接用软件名,并且不需要带版本号。

但是需要如果你真以为上面的命令就能下载整个packages库的话,那你就太天真了:过几分钟后,就会出现一个类似提示,然后就默默地退出:
Fetching BitcoinArmory-0.92.3.txz:100%    2 MiB   6.5kB/s   04:34   
pkg: cached package BitcoinArmory-0.92.3:size mismatch, fetching from remote
具体原因我没有进一步追查,但是看字面意思推测,应该是:网站上的文件大小跟数据库里的文件大小不同,所以pkg就报错后退出,因为网站上的txz文件是随时更新的,镜像站应该机率更大,因为会有新文件还没有更新过来,实际操作中,我试过几个站,报这个错误的机率确实比官方站要大的多。
虽然直觉中应该有个参数忽略这个问题,但是找了一大圈,确实没找到。

pkg系统还有一大好处,就是“断点续传”功能,在BitcoinArmory这个包上出了错,下次仍然从这个地方开始,并且会检查已经存在的文件,如果有更新则会下载新的文件,这点其实非常好,整个packages下载下来之后,如果想更新,用crontab每天跑一下就可以自动更新了,不需要再用其他的手段,非常方便。

根据这个功能,所以可以写一个脚本,在每次pkg异常退出后,再重新启动它,我写了一个非常简单的脚本:
#!/bin/sh

pkg fetch -yo/web/pkg/ -a


while [ $? -ne 0]

do
        echo ".....try again! \n"
        sleep 2
        pkg fetch -yo /web/pkg/ -a
done

运行一下,它就会不停地重启pkg进程。


几个说明:
1、pkg-fetch的man上说,可以使用pkg.conf里的环境变量,我测试的几个都不起作用,不知道是bug还是我测试的方式不对,起码这几个不能使用:
  1. FETCH_RETRY = 300
  2. FETCH_TIMEOUT = 3000
  3. WORKERS_COUNT = 1
复制代码
2、pkg fetch会启动多个进程同时下载,进程数默认等同于hw.ncpu,但是实际测试只开两个进程。

评分

参与人数 1信誉积分 +10 收起 理由
蛮多肉 + 10 很给力!

查看全部评分

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
2 [报告]
发表于 2015-05-22 09:22 |只看该作者
我看了一半

兴奋的

打入命令"# pkg fetch -yo/root/pkg/ -a"

打完命令后,又看到

"但是需要如果你真以为上面的命令就能下载整个packages库的话,那你就太天真了"

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
3 [报告]
发表于 2015-05-22 09:45 |只看该作者


正在下载中

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
4 [报告]
发表于 2015-05-22 11:03 |只看该作者
回复 2# 蛮多肉


    我下载了三四天了,还有10G,总是不停地重新启动下载。

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
5 [报告]
发表于 2015-05-22 11:57 |只看该作者
楼主,写个自动更新的脚本吧

我好收藏!

以后坐等我安装软件,飞机般的速度!YEAH

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
6 [报告]
发表于 2015-05-22 14:13 |只看该作者
回复 5# 蛮多肉

亲,上文中的脚本就有升级功能哦!
   

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
7 [报告]
发表于 2015-05-22 15:54 |只看该作者


好的

过段时间,我就再运行下,就自动升级了.哈哈~

现在还在下,感觉.....需要些时间...才1.5g

44g.好早着呢

楼主是BSD社区大大的功臣!!!!!

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
8 [报告]
发表于 2015-06-22 15:58 |只看该作者


悲剧的重新下载了

速度好慢

希望快点完成

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
9 [报告]
发表于 2015-06-22 16:51 |只看该作者
pkg: http://pkg.FreeBSD.org/FreeBSD:1 ... ManDVD-1.8.5_2.txz: Operation timed out

Operation timed out 问题

这个脚本,要加入什么语句,才能解决?

要不然一 timed out

就退出了

论坛徽章:
15
2015年迎新春徽章
日期:2015-03-04 09:57:09操作系统版块每日发帖之星
日期:2016-08-10 06:20:00操作系统版块每日发帖之星
日期:2016-07-16 06:20:00操作系统版块每日发帖之星
日期:2016-06-04 06:20:00操作系统版块每日发帖之星
日期:2016-03-14 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2015-12-23 06:20:00操作系统版块每日发帖之星
日期:2015-11-04 06:20:00每日论坛发贴之星
日期:2015-10-21 06:20:00操作系统版块每日发帖之星
日期:2015-10-21 06:20:00操作系统版块每日发帖之星
日期:2015-10-18 06:20:00操作系统版块每日发帖之星
日期:2015-07-13 23:17:29
10 [报告]
发表于 2015-06-22 20:02 |只看该作者
帅气教学   freebsd不该被埋没
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP