几种脱机环境下安装依赖的方法

来源:互联网 发布:农村淘宝襄县招聘信息 编辑:程序博客网 时间:2024/06/05 13:59

前言

昨天去CNCERT搭系统,碰到了天坑。晚上回来加早上半天,找了些解决方案。发个博客记录下来。

应急中心的安全要求很高,限制非常严格。要求不能使用U盘,只能使用光盘来进行数据交互。而且机房不连通外网。所以在部署系统的时候程序的环境依赖就是个很大的问题了。

找了下,大致有以下几种方案:
0. 内网源
1. Remastersys
2. DVD sources.
3. 利用cache制作临时源.
4. aptoncd.
5. Rsync.

内网源

内网源很简单,就是在内部网络中搭建一个Linux的更新源。这个方案适合一些内网有搭建更新服务器的地方。很遗憾问那边的博士,收到的答复是CNCERT没有。

Remastersys

remastersys 是一个将本机的系统到处为iso的一个程序。这个iso上可以带着你自己安装的软件。十分适合这个场景。
remastersys的教程很多,比如这个lilnk。可以自行搜索安装使用。需要注意的点有几个:
1. 不在ubuntu官方源,需要自己下载deb包。
2. 很多依赖新版本ubuntu已经废弃了。比如ubuntu16.04中,xresprobe已经无法apt安装了。出现这个情况的时候,可以根据屏幕的提示,去网上搜索deb包下载安装。那些需要ppa添加源的方案很多也已经过时了。deb包直接安装简单粗暴好用。
3. 有一个暗坑。ubuntu16.04制作iso的时候,出现了制作的光盘只有36k的情况。后面在这个页面上link发现,问题是缺少了两个包syslilnux-utilsisolinux。安装完这两个包就可以了。

此外,在ubuntu上将导出的iso刻为可引导光驱也比较有难度。导师的建议是用brasero尝试一下。但是后面失败了。如果有条件的话,可以使用windows下的UltraISO。这个软件是我见过的刻启动盘成功率最高的软件了。

Remastersys 整体而言是一个不算太好的解决方案。最大的原因是这个项目已经是一个不再维护的项目了。针对Ubuntu14.04以后版本的使用效果无法保证。这一点从安装的过程也可以看得出来,所使用的依赖包都无法正确自动安装,而且在使用时缺少依赖包也不能正确提示。

本地源

附一个教程的链接,这个教程介绍了如何制作DVD源,本地源和aptoncd:link

对于使用需求来看。这三种中,DVD源和本地源都可以解决问题。其中DVD源比较奢侈,需要耗费很多时间和很多光盘,而本地的源就比较直截了当。至于aptoncd,在安装时,就会产生一个问题,aptoncd在内网机中,使用时需要先安装,安装又成了新的问题。所以最后使用了利用/etc/cache/apt/archives来制作本地临时源的方案。具体步骤如上文教程所示。

在使用过程中踩了两个坑:
1. dpkg-scanpackages注意用相对路径不要用绝对路径。
是否正确可以查看生成的Packages.gz里的文件内容来判断。
正确:
“`
Filename: archives/libnfsidmap2_0.25-5_amd64.deb

```错误:```Filename: /home/kexin/archives/libnfsidmap2_0.25-5_amd64.deb```如果出现了这个错误,提示的错误内容如下:```Get:1 file:/home/kexin archives/ libnfsidmap2 0.25-5 [32.2 kB]Err:1 file:/home/kexin archives/ libnfsidmap2 0.25-5  File not found - /home/kexin//home/kexin/archives/libnfsidmap2_0.25-5_amd64.deb (2: No such file or directory)```

2. archives的源机器所安装的系统版本要和使用的目的机器安装的系统版本号要一致。
比如ubuntu-16.04.2-desktop-amd64.isoubuntu-16.04.1-desktop-amd64.iso就不一样,因为不同版本号的光盘可能自带的依赖不一样。在ubuntu-16.04.2上制作的archives包在ubuntu16.04.1的镜像上安装libssl-dev时会出现软件版本号不对和依赖缺失的问题。
这个问题还是比较恶心的。此外,在ubuntu-16.04.2中编译dpdk也出现了类似的问题,最后切换到ubuntu-16.04.1才能成功编译。

附带一个使用的小脚本。脚本默认你把deb包放在archives这个目录下,并压缩成了archives.tar.gz.只要把打包好的archives.tar.gz和这个脚本放在一个目录下。然后修改脚本中需要安装的依赖程序即可。

#!/bin/bash -eecho "Check user now!"if [ "$UID" -eq 0 ]then     echo "You are root now!"else    echo "You are not root user, please run as root."    exit 1fiecho "Compress the deb sources now."tar -zxvf archives.tar.gzecho "Compress done!"echo "Update ubuntu sources now."echo "deb file://$PWD archives/" > /etc/apt/sources.listapt-get updateecho "Now install base dependence now."apt-get install -y --allow-unauthenticated build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-devapt-get install -y --allow-unauthenticated libluajit-5.1-dev pkg-configapt-get install -y --allow-unauthenticated libssl-dev liblzma-dev libmysqlclient-devapt-get install -y --allow-unauthenticated libpcap-dev nfs-commonecho "Basic dependence install done!"
原创粉丝点击