建立linux deb源服务器

 http://www.debian.org/doc/manuals/repository-howto/repository-howto#intro

 

今天把deb服务器大概研究了下,这里我只谈HTTP访问方式的服务器,它其实就是标准的HTTP服务,用一些特殊的目录名把所有的包进行分类,比如我用 的ubuntu是7.04的版本,它运行在i386的平台上,这样对于main的包就是在dists/feisty/main/binary-i386 /下面,不过不是把deb包直接扔到这个目录就可以了,这样的话apt-get是不知道的,apt-get每次只会去读这个目录下的一个 Packages.gz文件,这个文件里包含了所有包的信息,apt-get就可以通过它找到所有的包并且自动下载安装了。

下面的问题就是如何生成这个Packages.gz文件,我看了网上一些非UBUNTU镜像的库,找到一个sh文件,我稍微作了一些修改,如下(update.sh)

#!/bin/bash

# Quick Package Updater

# John Dong (Fixed by Vinx)


#Licensed under the GPL.

DISTS="feisty"

SECTIONS="main"
BINARY_ARCH="binary-i386"

for a in $DISTS; do

for b in $SECTIONS; do

for c in $BINARY_ARCH; do

if [ -d dists/$a/$b/$c ]; then
echo "Updating dists/$a/$b/$c/Packages"
dpkg-scanpackages /var/cache/apt/archives /dev/null | gzip -9 > dists/$a/$b/$c/Packages.gz
fi
done
done

done

其中dpkg-scanpackages 就是搜索指定目录下的deb包并且把包的信息写入Packages.gz,这里我搜索当前系统安装过的包,并且把所有包都归入了i386的main中,比较方便,呵呵。

有了脚本我们就可以开始建立局域网的库了,首先安装一个apache2

sudo apt-get install apache2

在浏览器里输入localhost看apache是否正常启动了。

进入/var/www,分别建立 dists/feisty/main/binary-i386/目录,注意目录的owner要改成www-data

然后执行这个脚本:
sudo sh update.sh

就能自动生成package文件了,以后如果有什么新的包加入,只要重新执行一下这个脚本就可以了。

找到另外一台PC,在/etc/apt/sources.list里加入 deb http://yourip/ feisty main
sudo apt-get update

你能看到从你的库里下到正确的package就OK了。

然后你就可以install所有的包了,不需要从外面服务器下载了,呵呵。

到这里,一个简单的DEB库就建立好了,不过我有些包不是在官方的源上下的,所以不会在archives里面有储存,我是把他们按照软件类别放到/home/download/下的不同目录下的,为了其他PC也能安装这部分包,我在脚本里加入了一个更新拷贝命令:

sudo find /home/vinx/download/ -name "*.deb" -exec cp {} -u /var/cache/apt/archives/ /;

它每次都会从download目录下寻找所有的deb包并且更新到本地的包缓存目录中,这样,所有的包都能被其他PC访问到了。

 

 

制作deb包

 

参考:http://www.debian.org/doc/manuals/maint-guide/ch-start.zh-cn.html

 

1. 第一种方法-----将现有的文件打包:
比如你要打包你当前debian系统的/usr/src/soft目录,然后在另一个debian系统上安装
改包时这些文件也释放到/usr/src/soft目录下:
在随便一个目录,比如是root下创建一个工作目录,比如是work
#cd /root
#mkdir work
#cd work
因为安装包的时候默认是将文件释放到根目录下,所以我们设定好它的路径:
#mkdir -p usr/src
#cp -a /usr/src/soft usr/src
#mkdir DEBIAN
用如下的方法在DEBIAN目录下创建一个control文件,并用加入内容:
#cat >DEBIAN/control<<EOF
Package: soft
Version: 1.0.1
Section: utils
Priority: optional
Architecture: i386
Depends:
Installed-Size: 512
Maintainer:
[url=mailto:sunwill_chen@hotmail.com]sunwill_chen#hotmail.com
Description: soft package
EOF

#dpkg -b . /root/soft_1.0.1_i386.deb
这样便已经在/root目录下生成一个soft_1.0.1_i386.deb的包了。
2. 第二种方法,用deb源码包构建:
该方法摘自 http://debian.linuxsir.org/doc/inthedebianway/debian_build_package.html
下载源码包
APT提供了一套简便的方法帮你获得发布版中众多程序的源代码以及创建一个.deb所需的所有文件。
首先, 在 /etc/apt/sources.list 文件中加入 deb-src 条目. 详细参阅 APT HOWTO
然后, 运行命令

# apt-get update 或# aptitude update

就可以用下面的命令下载源码包:

# apt-get source packagename # aptitude source packagename

通常会下载三个文件:.orig.tar.gz,.dsc 和 .diff.gz。对于 Debian 专用的软件包,最后一个文件不会下载,第一个文件的文件名中没有“orig”项。
dpkg-source 读取 .dsc 文件信息,将源码包解包到 packagename-version 目录,下载下来的源码包中有一个 debian/ 目录,里面是创建 .deb 包所需的文件。
例如:

$ apt-get source nano
Reading package lists... DoneBuilding dependency tree...
DoneNeed to get 1199kB of source archives.
Get:1 http://ftp.us.debian.org testing/main nano 1.3.11-2 (dsc) [706B]
Get:2 http://ftp.us.debian.org testing/main nano 1.3.11-2 (tar) [1173kB]  
Get:3 http://ftp.us.debian.org testing/main nano 1.3.11-2 (diff) [25.4kB]  
Fetched 1199kB in 3m46s (5287B/s)     ... ...
dpkg-source: extracting nano in nano-1.3.11
dpkg-source: unpacking nano_1.3.11.orig.tar.gz
dpkg-source: applying ./nano_1.3.11-2.diff.gz


做相应调整后, 在源代码的根目录 nano-1.3.11 下运行:

# dpkg-buildpackage -rfakeroot -uc -b

将代码编译成为软件包.
想要下载的源码包自动编译成软件包,只需在命令行中加上 -b,例如:

# apt-get -b source packagename

请在下载包所在的目录中运行上面的命令。

# dpkg -i file.deb

apt-get的source命令与它的其它命令有所不同,普通用户权限就可以运行source命令,指定文件被下载到用户调用 apt-source package 命令时所处的目录中。

3.第三种方法,用makefile的源码打包

在源码所在的目录下用make命令来编译,然后用checkinstall命令来打包. 若没有checkinstall命令则可以先安装
apt-get install checkinstall.

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值