ubuntu在局域网内的安装建立自己的DEB源服务器
因为要在公司里多台机子上装UBUNTU,又不想每次都把同样要安装的包从外网下载一遍,所以就像利用已经装好的一台PC上存下来的包做个简单的局域网用的库,这样以后每重新装一台都可以从这个库里来更新了,而且这些新的PC都不需要连接外网了。
今天把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访问到了。