类似这样的一个列表
*
*
*
*
*
*
*
* …
这个 list 是用来在另外一台机器上导入的,我也不知道如何用 zypper 直接操作 list 下载包。
唯一的想法是可以写个 bash script 解析出包名称然后用 zypper -d 参数下载
UPDATE: zypper -d 不合适,可以试着在 script 里用 wget 直接抓
你想镜像 repo 吗?
找镜像方法即可。
如果只想下载所有包。 找个下载工具把整个 repo 下载即可啊。
OSS 源 64 位
download.opensuse.org/distribution/13.1/repo/oss/suse/x86_64/
OSS 源 noarch
download.opensuse.org/distribution/13.1/repo/oss/suse/noarch/
闭源 64 位
download.opensuse.org/distribution/13.1/repo/non-oss/suse/x86_64/
闭源增量
download.opensuse.org/distribution/13.1/repo/non-oss/suse/noarch/
怎么下载? wget 递归下载。 或者 firefox 里 dta 下载, 或者把所有链接导出到文件,然后把非 rpm 的链接比如 mirrorlists 给过滤掉,然后用 xargs 导到 axel/aria2 里下载。
不过 openSUSE 的升级是增量升级。 所以说如果你想要把升级也囊括,就需要下载 update 源里面的 drpm 们。
如果想备份所有安装过的的软件包的话,我之前的做法是,在 yast 安装源里勾选保留下载软件包(我是 gnome 不知道 kde 下对应的是啥),然后定期把 /var/cache/zypp/packages 下面的包移动一个合适的位置,然后用 createrepo 来创建本地源。
同求按列表下载软件包的方法。
cat user-packages.xml | grep -o -E 'name=".*" epoch' | grep -o -E '".*"' | sort | uniq | xargs -i sudo zypper -n in -f -d {}
下载列表中的软件包,只考虑包名不考虑版本啥的。
下载的好位置应该是/var/cache/zypp/packages,所以事先应该把这里清空。
另外只考虑包名消重后列表居然会缩小,这是说有同名的包吗~
zypper se -i | sed 's/i | //g' | sed 's/ *|.*//g' | sed '1,6d' | sed '/201[2-4]\-[0-9]*/d'| sort | uniq | xargs -i sudo zypper -n in -f -d {}
这是直接用zypper把安装的包都列出来然后下载下来。上面的sed '1,6d’是删除zypper命令产生的前面的一些说明语句。 sed '/201[2-4]-[0-9]*/d’是因为俺用的11.4 evergreen,一些补丁可以用zypper search到但是install不行,所以这些把列表里的这些项都去掉。上面的仅供参考,可根据自己的情况调整。
感谢@styx