|
|
考虑到自己的网速问题,每次使用网络源速度都特别的慢,特别是要是下载比较大的文件, 以下是自己创建feodra9本地源的方法, 注意里面有些内容你可能需要根据自己的实际需要去手动更改:
1, 下载包文件信息列表文件:
wget http://ftp.twaren.net/Linux/Fedo ... ta/filelists.xml.gz
2, 使用如下命令获取包信息列表(把代码部分复制下来创建一个C语言的原文件,取名为respo_info.c):
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <libxml/parser.h>
- void package_info_store(xmlDocPtr doc, xmlNodePtr cur) {
- char *id = NULL;
- char *name = NULL;
- char *arch = NULL;
- char *epoch = NULL;
- char *ver = NULL;
- char *rel = NULL;
- /* Get package base info */
- xmlAttrPtr aptr = cur->properties;
- while(aptr) {
- if(!xmlStrcmp(aptr->name, (const xmlChar*)"pkgid")) {
- id = strdup(aptr->children->content);
- }
- if(!xmlStrcmp(aptr->name, (const xmlChar*)"name")) {
- name = strdup(aptr->children->content);
- }
- if(!xmlStrcmp(aptr->name, (const xmlChar*)"arch")) {
- arch = strdup(aptr->children->content);
- }
- aptr = aptr->next;
- }
- /* Get package version info */
- xmlNodePtr tmp = cur->children;
- while(tmp) {
- if(tmp->type == XML_ELEMENT_NODE) {
- if(!xmlStrcmp(tmp->name, (const xmlChar*)"version")) {
- aptr = tmp->properties;
- while(aptr) {
- if(!xmlStrcmp(aptr->name, (const xmlChar*)"epoch")) {
- epoch = strdup(aptr->children->content);
- }
- if(!xmlStrcmp(aptr->name, (const xmlChar*)"ver")) {
- ver = strdup(aptr->children->content);
- }
- if(!xmlStrcmp(aptr->name, (const xmlChar*)"rel")) {
- rel = strdup(aptr->children->content);
- }
- aptr = aptr->next;
- }
- }
- }
- tmp = tmp->next;
- }
- /* Check package values */
- /*
- printf("id:%s\n", id);
- printf("name:%s\n", name);
- printf("arch:%s\n", arch);
- printf("epoch:%s\n", epoch);
- printf("ver:%s\n", ver);
- printf("rel:%s\n", rel);
- */
- if(!id || !name || !arch || !epoch || !ver || !rel) {
- fprintf(stderr, "Invalid package info\n");
- exit(1);
- }
- printf("%s|%s|%s|%s|%s|%s|", id, name, arch, epoch, ver, rel);
- printf("%s-%s-%s.%s.rpm\n", name, ver, rel, arch);
- free(id);
- free(name);
- free(arch);
- free(epoch);
- free(ver);
- free(rel);
- }
- int main(int argc, char *argv[]) {
- /* Check the argument */
- if(argc != 2) {
- fprintf(stderr, "Usage:respo_file\n");
- exit(1);
- }
- char *respo_file = argv[1];
- /* Open the respo file */
- xmlDocPtr rdoc;
- xmlNodePtr cur;
- if(!(rdoc = xmlParseFile(respo_file))) {
- fprintf(stderr, "Respo document parse not successfully!\n");
- exit(1);
- }
- /* Check root element */
- cur = xmlDocGetRootElement(rdoc);
- if(!cur) {
- fprintf(stderr, "Invalid respo file\n");
- exit(1);
- } else if(xmlStrcmp(cur->name, (const xmlChar*)"filelists")) {
- fprintf(stderr, "Can not found respo filelists entry\n");
- exit(1);
- }
- /* Get children elements */
- cur = cur->xmlChildrenNode;
- while(cur) {
- if(cur->type == XML_ELEMENT_NODE) {
- if(xmlStrcmp(cur->name, (const xmlChar*)"package")) {
- fprintf(stderr, "Invalid respo package entry\n");
- exit(1);
- } else {
- package_info_store(rdoc, cur);
- }
- }
- cur = cur->next;
- }
- }
- gcc -o respo_info respo_info.c `pkg-config --libs --cflags libxml-2.0`
- gunzip filelists.xml.gz
- respo_info filelists.xml > packages
-
复制代码
3, 下载包(耗时比较长, 共计16G多)
- #!/bin/bash
- HOST_ROOT="http://mirror.pacific.net.au/linux/fedora/linux/releases/9/Everything/i386/os/Packages"
- HOST_ROOT="http://ftp.twaren.net/Linux/Fedora/linux/releases/9/Everything/i386/os/Packages"
- #HOST_ROOT="http://ftp.ncnu.edu.tw/Linux/Fedora/linux/releases/9/Everything/i386/os/Packages"
- #HOST_ROOT="http://mirrors.kernel.org/fedora/releases/9/Everything/i386/os/Packages"
- MIRROR_DIR="/media/disk_part9/fedora/extras"
- TMP_DIR="$MIRROR_DIR/.tmp"
- cd $MIRROR_DIR
- if [ -d "$TMP_DIR" ]; then
- umount $TMP_DIR/mount
- rm -fr $TMP_DIR
- fi
- mkdir -p $TMP_DIR
- mkdir -p $TMP_DIR/mount
- mount $MIRROR_DIR/../*.iso $TMP_DIR/mount -o loop
- for package in `cat packages`
- do
- pkg_name=`echo $package | cut -d'|' -f7`
- #pkg_sha1=`echo $package | cut -d'|' -f1`
- check_pkg_url1="${TMP_DIR}/mount/Packages/${pkg_name}"
- check_pkg_url2="${MIRROR_DIR}/pkgs/${pkg_name}"
- down_pkg_url="${HOST_ROOT}/${pkg_name}"
- if [ -f "$check_pkg_url1" ] || [ -f "$check_pkg_url2" ]; then
- continue
- fi
- echo "Downloading $down_pkg_url ..."
- mytget -n5 -d ${MIRROR_DIR}/pkgs/ $down_pkg_url
- done
-
复制代码
下载完成后使用createrepo命令创建本地镜像!! |
|