之前在本地网络中建了一个CentOS软件源,挺好用的,可是发现有些软件还是装不上,因为系统安装盘中的包并不全,有些软件的依赖在updates源中,updates源在网上,怎么把其中的包拿到呢?一种方法,当然也是最最正常的方法,就是做个计划任务,定时从CentOS官方镜像站中同步。

【引用请注明出处:http://blog.csdn.net/bhq2010/article/details/9318269

可是我们也就是在本地用用,不需要同步,于是写了个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解析的代码。

获取CentOS软件源中的updates包的更多相关文章

  1. Linux搭建局域网yum源和后期在yum源中更新rpm包方法

    在内网中搭建自己的yum源,可以方便在内网中使用,下面简单介绍搭建局域网yum源的方法和后期更新yum源rpm包的方法. 一.搭建局域网yum源 1.需要在局域网访问,首先需要一个web服务器,比如a ...

  2. ubuntu怎用使用命令搜索软件源中的软件

    转自:http://jingyan.baidu.com/article/6d704a13f6bf1b28da51ca69.html ubuntu中是用apt-get来进行软件安装的,我们首先打开终端来 ...

  3. anacoda 安装默认源中没有的包

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 1 安装失败 conda install pygame 2 搜索 anaconda se ...

  4. 创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备

    一.包管理工具及CentOS的yum 1.包管理工具如何发现可以用的包 包管理工具依赖一系列软件源,工具下载源的信息存储在配置文件中,其位置随某包管理工具不同而变化 使用yum的RedHat/Cent ...

  5. ubuntu 16.04软件源

    来源:模板:16.04source   deb http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted universe multive ...

  6. VS2013中Nuget程序包管理器控制台使用入门(二)-如何使用Nuget提供的帮助(原创)

    如何使用Nuget提供的帮助? 1.从get-help Nuget开始,键入“get-help NuGet”以查看所有可用的 NuGet 命令. 用法: PM> get-help Nuget 主 ...

  7. Linux - 更改软件源

    镜像源 网易镜像源 在网易开源镜像页面,点击对应镜像名的使用帮助,可以查看到更新源的方法,按步骤操作即可. 阿里云镜像源 在阿里云开源镜像页面,点击对应Mirror分类的help标签,可以查看到更新源 ...

  8. 玩转树莓派 - 修改Raspbian软件源加快软件下载速度

    这是 meelo 原创的 玩转树莓派 系列文章 步骤1:登录到Raspbian的命令行界面 步骤2:修改Raspbian的软件源 软件源是Linux系统免费的应用程序安装仓库,很多的应用软件都会这收录 ...

  9. 一步一步实现直播软件源码的RTMP推流流媒体服务

    第一步:准备工具 OBS推流工具下载及配置可以参见:OBS推流工具 第二步:安装流媒体服务 Windows/Linux系统环境中搭建直播流媒体服务 极速安装,下载解压一键启动即可,支持Windows和 ...

随机推荐

  1. PHP - 目录与文件

    第6章 目录与文件 学习要点: 1.目录操作 2.磁盘.目录和文件计算 3.文件处理 将相关的数据组织为文件和目录等实体,这一直是计算环境的核心概念.出于这个原因,程序员需要有一种方法来获得关于文件和 ...

  2. 三家DirectUI的商业公司

    目前正在研究DirectUI技术,分享一点心得给大家.关于DirectUI技术的介绍我在这里就不说了,可以上Google查一下,非常丰富.目前使用DirectUI技术开发的软件产品原来原丰富,比如QQ ...

  3. atitit.集filt经营分部 filter总结

    atitit.集filt经营分部 filter总结 1. Css sltr 1 2. 基本选择器(依据id,class,元素名) 2 3. 层次选择器 3 4. 过滤选择器 3 5. First,la ...

  4. Android Sqlite数据库执行插入查询更新删除的操作对比

    下面是在Android4.0上,利用Sqlite数据库的insert,query,update,delete函数以及execSql,rawQuery函数执行插入,查询,更新,删除操作花费时间的对比结果 ...

  5. [hadoop系列]Pig的安装和简单演示样例

    inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...

  6. [置顶] 64位Win2008_VS2012使用ODP.NET遭遇问题和解决办法

    最近为使用Oracle11G数据库做个快速开发的小程序,使用64位Win2008+Vs2012环境,结果碰壁连环,幸好不算太笨,终于解决了,特记录一下. 测试环境: Oracle11g (11.2.0 ...

  7. HTML5 input placeholder 颜色 改动

    David Murdoch:Chrome支持input=[type=text]占位文本属性,但下列CSS样式却不起作用: CSS input[placeholder], [placeholder], ...

  8. mssql 返回表的创建语句

    if OBJECT_ID('sp_create_table_sql','P') is not null drop proc sp_create_table_sql go create proc sp_ ...

  9. JSP自定义标签——简单标签(2)

    在前一篇博客中,我们已经学习了自定义的简单标签的基本使用方法,这一篇我们来学习如何在简单标签中添加标签属性.对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用.例如前一篇博客使用简单标签来对 ...

  10. Nginx 訪问日志增长暴增出现尖刀的具体分析

    前言:          Nginx日志里面Mobileweb_access.log增长特别大.一天上百兆.将近100W的訪问记录.依照我们眼下的规模,热点用户才500个左右.就算人人用手机app訪问 ...