导语:希望可以将离线的deb源通过http的方式供下载,避免在制作dockerfile的时候需要挂载或者下载
系统ubuntu16.04
安装dpkg-dev、nginx
apt-get install dpkg-dev
apt-get install nginx
创建deb源
mkdir -p /usr/local/data/soft/
# 将事先下载好的离线源拷贝到指定位置
cp -r /container-debs-base06/debs/archives/* /usr/local/data/soft/
cd /usr/local/data/
dpkg-scanpackages soft/ | gzip > soft/Packages.gz
#dpkg-scanpackages soft/ /dev/null | gzip -9c > soft/Packages.gz
配置nginx
cat >/etc/nginx/sites-enabled/default <<EOF
server {
listen 80;
server_name localhost;
root /usr/local/data;
location / {
autoindex on;
autoindex_exact_size off; #显示文件的大小
autoindex_localtime on; #显示文件时间
#limit_rate_after 5m; #5分钟后下载速度限制为200k
#limit_rate 200m;
limit_rate 200k;
}
access_log /var/log/nginx/apt-deepwise.log ;
}
EOF
# 启动nginx
nginx -t
nginx -s reload
客户端测试
# 根据自己的ip进行填写
# deb [trusted=yes] 不加的话安装的时候需要添加
cat > /etc/apt/sources.list <<EOF
deb [trusted=yes] http://172.16.40.245 soft/
EOF
apt-get update
apt-get install wget
离线下载deb包的脚本
#!/bin/bash
if [[ $@ ]];then
apt install -d -y $@
echo "apt install -d -y $@"|tee -a local-deb.record
else
echo "xxx"
fi
ls -l /var/cache/apt/archives/
rsync -azP /var/cache/apt/archives/ debs/ --exclude "lock" --exclude "partial"
echo -e "\n"
dpkg-scanpackages debs/ /dev/null | gzip -9c > debs/Packages.gz
echo "清理离线包 /var/cache/apt/archives/"
apt clean
ls -l /var/cache/apt/archives/
逐级下载deb包的脚本
#!/bin/bash
logfile="2.log"
ret=""
function getDepends()
{
echo "fileName is" $1>>$logfile
# use tr to del < >
ret=`apt-cache depends $1|grep Depends |cut -d: -f 2 |tr -d "<>"`
echo $ret|tee -a $logfile
}
# 需要获取其所依赖包的包
libs="gnome-shell" # 或者用$1,从命令行输入库名字
# download libs dependen. deep in 3
i=0
while [ $i -lt 3 ] ;
do
let i++
echo $i
# download libs
newlist=" "
for j in $libs
do
added="$(getDepends $j)"
newlist="$newlist $added"
apt install $added --reinstall -d -y
done
libs=$newlist
done
参考
https://blog.csdn.net/x2017x/article/details/75016437
https://www.cnblogs.com/xiao987334176/p/9875480.html