菜鸟玩云计算之十:Ubuntu离线更新软件包
1. apt-offline 简介
参考:
http://manpages.ubuntu.com/manpages/precise/en/man8/apt-offline.8.html
apt-get 是一个在线安装工具,当离开有效的网络环境时,apt-get 则无法安装软件包。尤其当服务器部署到生产环境,因各种原因不能连接到互联网的情况,而我们又想升级服务器,或者安装某些复杂的软件,那么我们如何利用强大的 APT 工具升级Ubuntu 系统呢?
这里用到一个python写的软件包:apt-offline,它是一个离线的 APT 包管理器,它要求python2.7.x版本支持。假设我们离线的Ubuntu计算机为 A,在线的Ubuntu计算机为B,apt-offline 的使用过程是:
第一步,在离线的Ubuntu计算机A上,产生一个要更新的软件包的签名文件:
$ sudo apt-offline set --update --upgrade --install-packages [your-pkgs1 your-pkgs2 your-pkgs3 ...] -- apt-offline.sig
上面的命令将生成一个 apt 升级数据库所需的信息文件apt-offline.sig。
第二步,在在线的Ubuntu计算机B上,根据签名文件apt-offline.sig下载数据,并把软件包打成一个包 apt-offline-pkgs.zip:
apt-offline get ./apt-offline.sig --threads 2 --bundle apt-offline-pkgs.zip
第三步,把apt-offline-pkgs.zip拷贝回离线的Ubuntu计算机A上,执行离线更新:
$ sudo apt-offline install ./apt-offline-pkgs.zip
上面的apt-offline.sig,apt-offline-pkgs.zip可以改成你自己喜欢的名称。
*注意:在我的Ubuntu Server 12.10 amd64上,执行上面的命令之后,并没有自动安装软件包,而是把软件包解压到 /var/cache/apt/archives/ 下,因此第三步修订如下:
1)# 清除/var/cache/apt/archives/ 下的全部*.deb文件:
$ sudo apt-get clean
2)解压apt-offline-pkgs.zip到/var/cache/apt/archives/ 下:
$ sudo apt-offline install ./apt-offline-pkgs.zip3)安装/var/cache/apt/archives/ 下的全部*.deb文件:
$ sudo apt-get install /var/cache/apt/archives/*.deb
这样离线安装软件包就安装好了。
https://launchpad.net/ubuntu/precise/amd64/apt-offline/1.1.1
点击下面的链接,下载 apt-offline_1.1.1_all.deb:
http://launchpadlibrarian.net/76506629/apt-offline_1.1.1_all.deb
1.2 安装 apt-offline$ sudo dpkg -i apt-offline_1.1.1_all.deb
2. apt-offline 使用假设我们离线的Ubuntu计算机为 A,在线的Ubuntu计算机为B。在A上执行
$ easy_install
如果显示为:
error: can't create or remove files in install directory
......
表示已经安装了python-setuptools python-dev,为了演示如何安装离线包,那么执行下面的命令将删除已经安装的easy_install:
$ sudo apt-get remove python-setuptools python-dev --purge
下面开始安装离线包:
1)在A上,生成要更新的软件包的签名文件python-pkgs.sig。然后把签名文件python-pkgs.sig拷贝到B:
$ sudo apt-offline set --install-packages python-setuptools python-dev -- python-pkgs.sig
2)在B上,下载我们需要的软件包,并打包成pkgs.zip。然后把pkgs.zip拷贝到A:
$ apt-offline get ./python-pkgs.sig --threads 2 --bundle pkgs.zip
3)在A上,离线安装软件包pkgs.zip:
$ sudo apt-get clean
$ sudo apt-offline install ./pkgs.zip
$ sudo dpkg --install /var/cache/apt/archives/*.deb
3. apt-get 安装离线包
这里再介绍一种安装离线包的方法:
1)在在线的机器B上执行下面的命令,把要安装的软件包下载到指定的目录dl-pkgs下:
$ sudo apt-get remove python-setuptools python-dev --purge # 删除已经安装的软件包
$ sudo tar -czvf pkgs.tar.gz ./dl-pkgs/* # 打包压缩到 pkgs.tar.gz
然后把 pkgs.tar.gz 拷贝到离线机器A上
2)在离线机器A上执行下面的命令,把pkgs.tar.gz安装到离线的系统中:
$ sudo tar -xzvf pkgs.tar.gz ./dl-pkgs/
$ sudo dpkg --install ./dl-pkgs/archives/*.deb
本文提供了安装离线包的2种办法,其中一种是使用apt-offline这个软件,另一种是直接使用apt-get的下载功能。
apt-offline可以把目标离线机器上的软件依赖关系自动保存到签名文件sig中,然后在在线的机器上,根据这个sig文件,下载软件到一个包中,接着使用dpkg --install的功能安装包中的全部.deb文件即可。
apt-get更加自动化,但是如果目标离线机器A和在线的机器B存在包不一致的情况,这个安装方式就会引起混乱。
具体采用哪个方法,或者结合使用2者,看具体情况而定。
cheungmine
2013-1-20