Linux依賴打包帶走

前言

有時候遇到Linux無法連接互聯網的時候,安裝軟件就成了一個很頭大的麻煩事,各種依賴安裝,那麼怎麼去解決這個問題呢?文章末有一鍵腳本

打包,是一個不錯的選擇,下面開始實踐!

目錄 ————————————————————>請在右上位置查看目錄

 

一、RPM系的打包方法

1.1、測試環境

用到的測試環境如下:

[root@master ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

本文以vsftpd及docker服務爲例子

1.2、打包安裝VSFTPD服務

1.2.1、下載包

下載之前我們先新建一個文件夾存放我們的RPM包,命令如下

sudo mkdir -p /rpm/vsftpd

新建之後我們就使用下面的命令將我們需要的安裝包拉取下來

yum install --downloadonly --downloaddir=/rpm/vsftpd/ vsftpd

從下圖可以看出,此時已經把這個服務的包拉取下來了

1.2.2、嘗試本地安裝

我們使用本地安裝的方式安裝看看

 rpm -ivh vsftpd-3.0.2-25.el7.x86_64.rpm

此時已經安裝成功,從上面的結果來看的話看不出依賴問題,下面以docker-ce服務的安裝做演示,相同步驟不再做解釋。

1.3打包安裝docker-ce

1.3.1、下載docker服務包及其依賴包

參數說明:

  • -q #靜默安裝

從上面的結果來看,這次不止是下載docker-ce這個包,其主要依賴container也被下載下來,那麼這時候我們試一下安裝

此時服務安裝成功,如果需要打包去其他主機安裝,可以選擇壓縮之後打包,下面簡單演示一下壓縮與解壓

1.3.2、安裝壓縮解壓工具

首先安裝unzip和zip

yum install -y unzip zip 

 

 

 安裝完成之後,我們進入之前指定的文件夾路徑

1.3.3、開始壓縮

執行下面的命令進行解壓

zip -r docker-ce.zip *.rpm

打包之後我們查看一下文件大小

du -sh docker-ce.zip

壓縮之後管理就比較方便了,當複製到其他主機的時候,只需要使用下面的命令即可解壓

1.3.4、解壓文件

這裏我移動該壓縮文件至/opt/進行解壓演示,文件名後面不加路徑將默認解壓噹噹前路徑

unzip docker-ce.zip 

那麼到這裏,RPM系的依賴打包方法就結束了!

二、DEB系

2.1、系統環境

2.2、緩存清理

rm -rf /var/cache/apt/archives/
mkdir -p /var/cache/apt/archives/

2.3、下載VSFTPD安裝包

apt-get -d install vsftpd

此時安裝包已經下載完成, 驗證

ls /var/cache/apt/archives/

2.4、本地安裝驗證

cd /var/cache/apt/archives/

dpkg -i vsftpd_3.0.3-12_amd64.deb

2.5、docker打包演示

2.5.1、清理緩存及下載包

rm -rf /var/cache/apt/archives/*

下載完成之後,查看緩存目錄

2.5.2、查看下載結果 

 ls /var/cache/apt/archives/

可以看到,此時下載了非常多的依賴包,現在我們使用本地安裝的方式進行安裝驗證

2.5.3、本地安裝驗證 

dpkg -i /var/cache/apt/archives/*.deb

 

可以看到,安裝是完全沒問題的。當然,這是其中一個安裝方式,僅限主機少的情況下進行安裝,如果主機多久需要做一個私有源了,下面演示私有源的部署

三、debian系私有源的部署與配置 

3.1、壓縮與解壓

3.1.1、壓縮包

一樣的操作,先安裝壓縮 工具

apt install zip

然後對安裝包進行打包

zip -r docker-ce.zip /var/cache/apt/archives/*

打包成功之後,把這個包複製到需要安裝此服務的主機中的其中一臺進行安裝及配置私有,所以我們需要打包兩個服務,另一個是vsftpd,在這裏就不展開了,請自行理解

3.2.1、解壓並安裝

首先查看我們需要用到的包

 解壓docker包

 unzip docker-ce.zip 

3.2.2、安裝vsftpd

 

 dpkg -i vsftpd_3.0.3-12_amd64.deb 

配置路徑 

echo 'anon_root=/opt/apt/' >> /etc/vsftpd.conf&&mkdir /opt/apt/

3.2.3、 訪問ftp服務器

3.2.4、開啓匿名訪問

 

sed -i 's/anonymous_enable=.*/anonymous_enable=YES/g' /etc/vsftpd.conf
 systemctl restart vsftpd

繼續訪問

此時,訪問成功

 3.2.5、生成包索引

touch /opt/apt/Packages.gz
chmod -R 777 /opt/apt/
dpkg-scanpackages /opt/apt/ /dev/null | gzip > /opt/apt/Packages.gz 

 

5.2.6、添加源列表

首先查看源配置

 cat /etc/apt/sources.list

 備份源文件

cp /etc/apt/sources.list  /etc/apt/sources.list.bak

配置源

echo 'deb file:/opt apt/' > /etc/apt/sources.list

更新源

 一鍵腳本

 

#!/bin/bash
##一鍵打包Linux服務包及依賴
##字體設置
#紅色背景
red_bg='\e[41;33;1m'
#紅色字體
red_zt='\e[1;31m'
#綠色背景
green_bg='\033[0;32;1m'
#綠色字體
green_zt='\e[1;32m'
#關閉效果
end='\033[0m'
#字體閃爍
ss='\033[05m'
##變量預配置
d='/Y'
rpms="${d}/rpm/"
debs='/var/cache/apt/archives'
zip_dir='/Y/zip'
mkdir -p $rpms $compress $zip_dir
zips(){
        if [ "$p" = 'yum' ];then
                f_nubmer=`ls  ${rpms} | wc -l`
                pushd ${rpms} > /dev/null
                files=${pack}_${r}_rpm.zip
                zip -r  ${files} ${pack} > /dev/null
        elif [ "$p" == 'apt' ];then
                 f_nubmer=`ls  $debs  | wc -l`
                pushd $debs > /dev/null
                files=${pack}_${r}_deb.zip
                zip -r ${files} * > /dev/null
        fi
        mv  ${files} ${zip_dir}/
        if [ $? == '0' ];then
                echo -e "共打包${green_zt}${f_nubmer}${end}個服務包"
                echo -e "${green_zt}打包成功,已存放至:${end}"
                echo -e "${red_zt}${zip_dir}/${files} ${end}"
                size=`du -sh ${zip_dir}/${files}`
                echo -e "壓縮包文件大小爲: \n${green_zt}${size} ${end}"
        else
                echo -e "${red_bg} 打包失敗 ${end}"
        fi
}
cheks(){
        if [ $? == "0" ];then
                echo -e "${green_zt} ${1}成功${end}"
                zips
        else
                echo -e " ${red_bg} ${1}失敗 ${end}"
        fi
}
yum_package(){
        if [ ! -f '/usr/bin/zip' ];then
                yum install -y zip unzip -q
        fi
        pack="$1"
        echo -e "是否顯示下載過程程${red_zt}[y/n]${end}"
        read v
        echo -e "正在下載${green_bg}${pack}${end},${ss}請耐心等待.....${end}"
        if [ "$v" == 'y' ];then
                yum install  --downloadonly --downloaddir=${rpms}/${pack} $pack
        else
                yum install  --downloadonly --downloaddir=${rpms}/${pack} $pack > /dev/null
        fi
        cheks "${pack}下載"
}
apt_package(){
        if [ ! -f '/usr/bin/apt' ];then
                apt-get install -y zip unzip
        fi
        rm -rf ${debs}/*
        pack="$1"
        echo -e "是否顯示下載過程${red_zt}[y/n]${end}"
        read v
        echo -e "${ss}${green_zt}正在下載${pack},請耐心等待.......${end}"
        if [ "$v" == 'y' ];then
                apt-get -d -y install ${pack}
        else
                apt-get -d -y install ${pack} > /dev/null
        fi
        cheks "${pack}下載"
}
##判斷執行用戶
if [[ $UID == "0" ]];then
        echo "當前使用ROOT用戶"
else
        echo -e "當前非ROOT用戶,建議切換至ROOT執行\n[按回車繼續使用當前用戶操作]"
        read Y
fi
#判斷包管理器
if [ -f '/usr/bin/yum' ];then
        p='yum'
elif [ -f '/usr/bin/apt' ];then
        p='apt'
else
        echo '當前腳本暫不支持apt/yum之外的包管理器'
fi
if [ -z "$USER" ];then
        USER='僅支持Linux系統查詢!'
fi
#信息列表
r=`uname -m`
echo -e "腳本配置信息如下:
當前管理器:${green_zt} ${p} ${end}
當前用戶名:${green_zt} ${USER} ${end}
當前架構:${green_zt} ${r} ${end}
壓縮包路徑:${green_zt} ${zip_dir} ${end}"
#預打包配置
echo -e "當前${zip_dir}目錄已有文件如下:"
for i in `ls ${zip_dir}`;do
        echo -e "${green_zt}${i}${end}"
done
echo -e  "是否刪除${red_bg}數據:${end}[y/n]\n${ss}默認n${end}"
rm_dir(){
        if [ "$rms" == 'y' ];then
                rm -rf $debs ${z} ${rpms}
                echo -e "${ss}${red_zt}刪除完成${end}"
                mkdir -p $debs ${z} ${rpms}
        else
                echo -e "${green_zt}跳過刪除${end}"
        fi
}
input(){
        echo -e "請輸入需要安裝的包名,多個服務請使用${red_bg}空格${end}分開\n例如:${green_zt}apache2 vsftpd${end}"
        read packs
}
if [ "$p" == "apt" ];then
        z=${zip_dir}/
        echo -e "${red_zt} $debs \n${z}/ ${end}"
        read rms
        rm_dir
        input
        for i in $packs;do
                f="${zip_dir}/${i}_${r}_deb.zip"
                if [ -f $f ];then
                        echo -e "${green_zt}${i}${end}服務已打包,本次${red_zt}跳過下載${end}"
                else
                        apt_package $i
                fi
        done
elif [ "$p" == "yum" ];then
        echo -e "${red_zt}${rpms}  \n$zip_dir  ${end}"
        read rms
        rm_dir
        input
        for i in $packs;do
                f="${zip_dir}/${i}_${r}_rpm.zip"
                if [ -f $f ];then
                        echo -e "${green_zt}${i}${end}服務已打包,本次${red_zt}跳過下載${end}"
                else
                        yum_package $i
                fi
        done
fi
du -sh ${zip_dir}/*.zip

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章