linux怎么升级源里头的包,获取CentOS软件源中的updates包

之前在本地网络中建了一个CentOS软件源,挺好用的,【见 yum局域网软件源搭建 http://www.linuxidc.com/Linux/2013-07/87315.htm 】可是发现有些软件还是装不上,因为系统安装盘中的包并不全,有些软件的依赖在updates源中,updates源在网上,怎么把其中的包拿到呢?一种方法,当然也是最最正常的方法,就是做个计划任务,定时从CentOS官方镜像站中同步。

可是我们也就是在本地用用,不需要同步,于是写了个Java程序,找了个速度比较快的镜像(东北大学的,写程序的时候北理工的镜像站打不开),直接很暴力地把上面的updates目录下的包(http://mirror.neu.edu.cn/centos/6.4/updates/x86_64/Packages/)全都抓下来了,然后createrepo一下就可以用了,抓软件包的代码如下,其中HttpFactoy是自定义的一个封装Apache HttpClient接口的工具类:

package cn.edu.ruc.extract;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import org.htmlparser.NodeFilter;

import org.htmlparser.Parser;

import org.htmlparser.filters.TagNameFilter;

import org.htmlparser.tags.TableColumn;

import org.htmlparser.tags.TableRow;

import org.htmlparser.tags.TableTag;

import org.htmlparser.util.NodeList;

import org.htmlparser.visitors.HtmlPage;

public class Main

{

public static void main(String[] args)

{

try

{

//要抓取的目录

String baseUrl = "http://mirror.neu.edu.cn/centos/6.4/updates/x86_64/Packages/";

String html = HttpFactory.getInstance().getPageContent(baseUrl);

//存放软件包的本地目录

String rootDir = "/home/Hadoop/updates/";

Parser parser = Parser.createParser(html, "utf-8");

HtmlPage page = new HtmlPage(parser);

parser.visitAllNodesWith(page);

NodeFilter filter = new TagNameFilter("TABLE");

NodeList nodes = page.getBody().extractAllNodesThatMatch(filter,

true);

int num = 0;

for (int i = 0; i < nodes.size(); ++i)

{

TableTag tableTag = (TableTag) nodes.elementAt(i);

TableRow[] rows = tableTag.getRows();

for (TableRow row : rows)

{

TableColumn[] columns = row.getColumns();

if (columns != null && columns.length > 0)

{

if (num > 0)

{

String fileName = columns[0].toPlainTextString().trim();

String url = baseUrl + fileName;

System.out.println(url);

File rpmFile = new File(rootDir + fileName);

FileOutputStream outputStream = new FileOutputStream(rpmFile);

InputStream inputStream = HttpFactory.getInstance().getResponseEntity(url).getContent();

byte b[] = new byte[1024*1024];

int j = 0;

while ((j = inputStream.read(b)) != -1)

{

outputStream.write(b, 0, j);

}

outputStream.flush();

outputStream.close();

inputStream.close();

}

num++;

}

}

}

System.out.println(num-1 + " packages downloaded.");

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

换别的镜像站可能需要变变html解析的代码。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值