通常我们用源码包安装软件都需要编译,而编译就会带来时间的消耗。如果只是有一两台服务器需要这样,我们还能够接受,但当你需要对十台,几十台甚至上百台服务器进行编译安装源码包,你会不会疯掉呢?现在可以这样做,将编译安装好的程序打包成deb,再为这些deb包做一个网络源。以后就在需要安装的服务器(系统环境相同)中配置好该网络源,通过apt-get安装即可,这样就省去了很多繁琐的工作,节省了大量时间。

一、示例

以一个例子具体讲述怎样去实现 1、要制作nginx的deb包; 2、将制作好的deb包放到一台能够提供web访问的服务器中,并配置成网络apt源; 3、最后在客户端服务器的源配置中添加该源的访问地址; 4、客户端通过apt-get安装编译好的nginx。

二、将nginx制作成deb包

1、目录及文件设定 apt目录

/home/apt/mydeb     //存放需要打包成deb的源程序
/home/apt/ubuntu    //存放打包好的deb包以及所有deb软件包信息文件Packages.gz

mydeb目录

DEBIAN          //存放包的控制文件以及一些执行脚本
srcname         //将要打包的程序源码目录

DEBIAN目录

control         //deb 包的控制文件信息
postinst        //deb 包安装后执行的命令
postrm          //deb 包卸载时执行的命令

2、生成deb包前准备工作

mkdir /tbt/apt/mydeb/tbt-nginx1.6
cp nginx /home/apt/mydeb/tbt-nginx1.6/      //将编译好的nginx拷贝到此目录
cd /home/apt/mydeb/tbt-nginx1.6/
mkdir DEBIAN                                //创建DEBIAN目录

vim DEBIAN/control                          //创建控制文件,并填写相关配置项
Package: tbtnginx1.6                        //软件包名称,apt-get install使用的软件包名称
Version: 1.0                                //版本号,用于软件更新
Section: tbt                                //包分类
Priority: required                          //软件对于系统的重要程度,如‘required’, ‘standard’, ‘optional’, ‘extra’ 等;
Architecture: all                           //软件包结构,如基于‘i386’,‘amd64’等
Depends:make,gcc,g++,libpcre3-dev,libssl-dev    //需要的依赖包
Essential: no                               //是否为系统最基本的软件包(‘yes’/‘no’),yes表明该软件是维持系统稳定和正常运行的软包,不允许任何形式的卸载(除非进行强制性的卸载)
Installed-Size: 1024                        //软件包的大小,单位为“kb”
Maintainer: tbt.com                         //软件包维护者
Description: tbt nginx1.6 for ubuntu        //描述软件包

vim postintl                                //编写软件包安装后执行的脚本,可以设定目录,需要的用户,权限等
#!/bin/bash
dir="/home/tbt"
mkdir -p $dir
mv -f /nginx /home/tbt/nginx
groupadd www
useradd -g www www
chown www.www -R /home/tbt/nginx

vim postrm                                  //编写软件包卸载时需要执行的脚本
#!/bin/bash
dir="/home/tbt"
rm -rf $dir/nginx

chown 755 postintl                          //给与脚本755权限
chown 755 postrm

注:control文件中的Denpends参数尤为重要,这项参数会让你在安装软件时同时安装指定的依赖包,如果缺失依赖包,软件可能会运行失败。

3、生成deb软件包

cd /home/apt/ubuntu
dpkg --build /home/apt/mydeb/tbt-nginx1.6 ./tbt-nginx1.6_v1.deb

三、搭建apt-get源

1、设置网络源的域名

假设有一台服务器A(192.168.1.10),用做提供apt-get源服务器
vim /etc/hosts                      //设置访问域名,也可通过dns服务器指定
192.168.1.10    tbt-source.server

2、配置域名对外访问

安装nginx或apche提供网络访问,并将制作好的deb包存放目录/home/apt/ubuntu设置为网站家(root)目录
vim tbt-source.server.conf
server {
    listen 80;
    server_name tbt-source.server;
    root  /home/apt/ubuntu;
}

3、将制作好的deb包制作成源

将deb包都放在/home/apt/ubuntu目录下,并在此目录执行如下命令生成deb包信息文件
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

四、通过apt-get安装软件包

1、客户端的添加apt-get源

要保证客户端能访问到tbt-source.server(可以通过dns设置或绑定host)
vim /etc/apt/source.list
deb http://tbt-source.server/ubuntu /   //地址后的“ /”不能缺少

2、通过apt-get安装

apt-get update                          //更新源,如果deb包发生变化,就需要更新
apt-get install tbtnginx1.6             //在control文件中配置的报名,会自动安装依赖软件包

3、查看安装位置

ls /home/tbt/                           //原本软件是默认安装在“/”下,执行postintl脚本后被移动到此目录下                                                      
nginx

五、升级软件包

1、参照章节二,唯一不同的就是版本号的设定,然后重新生成deb包

将DIBIAN目录下control文件中的Version进行更改
vim /home/apt/mydeb/DIBIAN/control
Version: 2.0

2、参照章节三,重新将deb包做成源

3、客户端执行apt-get update,更新源并执行apt-get安装