歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 獲取CentOS軟件源中的updates包

獲取CentOS軟件源中的updates包

日期:2017/2/28 14:45:47   编辑:Linux教程

之前在本地網絡中建了一個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解析的代碼。

更多CentOS相關信息見CentOS 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=14

Copyright © Linux教程網 All Rights Reserved