zoukankan      html  css  js  c++  java
  • 获取CentOS软件源中的updates包

    之前在本地网络中建了一个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解析的代码。

  • 相关阅读:
    sharepoint email
    After delete Trigger throw error:The row value(s) updated or deleted either do not make the row unique or they alter multiple rows (2 rows).
    ios 开发书籍
    NES 指令
    nes相关开发资料
    nes相关开发资料
    怎样写模拟器
    Zope简介
    C#中new和override区别
    NES 指令
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3188581.html
Copyright © 2011-2022 走看看