Ubuntu离线安装包制作

最近编写的一个python程序需要制作一个安装脚本,之前其实是有安装脚本的,但是是基于在线安装的,要制作一个离线的安装包,最终发布在ubuntu中。整个安装大约分成三个部分:

  1. apt install 安装包
  2. 源代码安装
  3. pip 安装python程序包

由于源代码安装比较简单,一般通用步骤就是./configure && make && make install这里就不表述了,具体参考不同的软件源代码即可。

APT本地源制作

下载相关的安装包

首先下载相关的安装包肯定是从一台可以联网的相同版本的操作系统中下载安装。这里推荐使用阿里的源http://mirrors.aliyun.com,具体配置可参考网上。
之前网上很多方法说从/var/cache/apt/archives,这里特别提醒使用此方法最好是在一个纯净的操作系统全部在线安装一遍库,并且安装完之后需要立即保存下来,从名字上看这本身就是一个缓存的库,不太适应,这里我没有使用这种方式。
直接采用apt-get download来下载需要下载的包,比如需要下载make,则使用apt-get download make,一开始下载完之后到目标机去安装,总是提示缺少很多相关的依赖库,还需要再次调用apt-get download,很麻烦。从网上发现,可以利用apt-cache depends 来获取相关包的依赖,ubuntu 16可以使用apt depends,因此从网上找来相关代码进行批量下载:

function getDepends()
{
   # use tr to del < >
   ret=`apt-cache depends $1|grep Depends |cut -d: -f2 |tr -d "<>"`
   echo $ret
}

for var in $*
do

  libs=$var
  echo "download $libs"
  # 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)"
      echo "$j depended $added"
      newlist="$newlist $added"
      echo "download $j"
      apt-get download $j 
    done

    libs=$newlist
  done
done

其中 $* 是同时下载多个安装包
3是表示下载多少层级的安装依赖包,3即表示两级依赖,一般来说3基本可以满足大部分安装的需求

制作本地安装包源

这里我的文件路径是/home/xxx/libs/ubuntu/apt/*.deb

制作索引文件

cd /home/xxx/libs/ubuntu 
apt-ftparchive packages apt/. > apt/Packages
cd apt
gzip -c Packages > Packages.gz

如果只有以上的命令,在接下来制作索引中并使用apt-get install过程中会提示未

Install these packages without verification? [y/N] 

况且所有使用apt-get install -y或者apt-get update -y命令的全部报错,因为以上安装并没有签名。
因此最好需要把这些本地源也进行签名

制作签名密钥

使用的是gpg,参考资料[1]制作
在目标机使用apt-get命令之前导入已制作好的key

apt-key add libs/ubuntu/xxx.gpg

制作好密钥之后就要将这些安装进行签名,这里有几条重要的命令如下:

cd /home/xxx/libs/ubuntu 
apt-ftparchive release apt/. > apt/Release
### 输入前面设置的GPG KEY密码
cd apt
gpg --clearsign -o InRelease Release
gpg -abs -o Release.gpg Release

到此,deb包的索引目录即制作完成。将libs目录拷贝到目标机,这里依然选在/home/xxx/目录下

创建本地索引目录

这一步比较简单,包括上一步所提到的

apt-key add libs/ubuntu/xxx.gpg

在制作本地索引,网上很多说法是将文件/etc/apt/sources.list备份,删除等,再将本地源写入到这入文件中,我觉得这背离了开发中不随意修改的宗旨。我是在目录/etc/apt/sources.list.d中创建xxx.list,因此完整的创建本地索引大致命令如下:

if [ -f /etc/apt/sources.list ]; then
    mv /etc/apt/sources.list /etc/apt/sources.list.bak
fi
apt-key add libs/ubuntu/lalon.gpg 

cat > /etc/apt/sources.list.d/xxx_archive.list <<EOF
deb file:$INSTALL_HOME/libs/ubuntu apt/
EOF
chmod -R 777 $LALON_HOME/libs/ubuntu/apt
apt-get update && apt-get upgrade

备份sources.list是因为,在离线环境无法在线update,而我脚本设置了set -e错误即退出,有sources.list肯定无法更新会退出,所以把其移动成.bak文件了。
网上有很多说法是说要把deb目录改成777,我并没有试为什么,因为我直接就把脚本给写上了,也就懒的试了。有兴趣的朋友可以告诉我
至此在本地就可以愉快的使用apt-get install命令了。

PIP离线安装

pip 包下载

这里同样推荐使用https://mirrors.aliyun.com/pypi/simple/进行下载,当然其他的源也可以,看网速而已。
pip包的下载比apt的包下载简单多了,只需要简单的一条命令即可把相关的依赖包都下载下来

pip download -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt

requirements.txt是需要安装的pip包,在线安装的命令即
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt只需要把install 改成download即可

pip的离线安装

这里离线安装也很简单

pip install --no-index --find-links $INSTALL_HOME/libs/pip/  -r requirements.txt

至此离线的依赖包即可全部安装了。

【参考资料】

[1]https://www.cnblogs.com/silvermagic/p/7665841.html
还有很多忘了,看到了再补充

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容