fedora23新系统没网时使用以前缓存的rpm包

来源:互联网 发布:证件照蓝底渐变软件 编辑:程序博客网 时间:2024/06/05 00:32
#!/bin/bash

# Sat Aug 13 05:43:38 EDT 2016
# 这个脚本为单一用途设计. 情况是这样的, 我在用fedora23, 我设置了使用
# 163镜象站为yum源, 但是以网站为yum源必须连网才能用, 我不是随时有网,
# 我就想把163镜象站那个目录下载下来, 一个yum源应该包括两个目录, 一个repodata
# 和一个Packages, repodata保存了这个源一些信息, 约106M, Packages的内容的所有
# 实际rpm包, 非常大, 这个源又是"Everything", 意思是包含了所有的包, 估计至少有
# 几十G, 不可能整个下载下来.
# 我以前通过163镜象源已经安装了很多包, 这些包都保存着没有删除, 它们以缓存的身
# 份在一个目录下. 我下载了repodata, 但是repodata不能直接使用这些缓存的rpm包,
# repodata只会在同目录的Packages目录下找包, 它当然找不到, 就报错. 我就想写一
# 个脚本, 对这些已缓存的包, 做一个链接在Packages下不就行了. 几千个包, 不可能
# 手动做这个工作, 必须写脚本.

# 哇, 太棒了, 我终于能不连网用dnf命令了,

Packages_dir='/home/fedora-23-live-mate/Packages';
repodata_dir='/home/fedora-23-live-mate/repodata';
cache_dir='/home/fedora-23-live-mate/Packages/163-2bc373219fe8a076/packages';

function ooSingle()
{
    if [ $# == 0 ]
    then
        return 0;
    fi
    local PackageName="$1";
    local PackageNameFirstChar=${PackageName:0:1};
    local Package_dir2="$Packages_dir"/"$PackageNameFirstChar";
    mkdir "$Package_dir2" -p 2>/dev/null;
    local PackageSymName="$Package_dir2"/"$PackageName";
    local PackageCacheName="$cache_dir"/"$PackageName";
    if [ ! -e "$PackageSymName" ]
    then
        ln -s "$PackageCacheName" "$PackageSymName";
        echo "create link for $PackageName";
    fi
    return 0;
}

function ooAll()
{
    Pwd=`pwd`;
    cd "$cache_dir";
    for x in `ls *.rpm`
    do
        ooSingle "$x";
    done
    return 0;

    cd "$Pwd";

}

if [ $# = 0 ]
then
    :
elif [[ ($# -eq 1) && ($1 = 'ooAll') ]]
then
    ooAll;
elif [[ ($# -eq 2) && ($1 = 'ooSingle') ]]
then
    ooSingle "$2";
fi

     
   
0 0
原创粉丝点击