因为要在公司里多台机子上装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访问到了:)
在安装ubuntu的时候,寻找升级的镜像会花费很多时间,可以$ ps -aux|grep apt|grep verify
然后kill -9 pid,把它干掉,进而跳过搜索外网上可用镜像的过程,然后当安装完成之后,使用下面的方式,在随后的重启之后,从局域网内的镜像服务器上,更新ubuntu,这样速度相当的快!!
Update Ubuntu Linux
From $1
Table of contents
No headers
Edit source.list
sudo vi /etc/apt/sources.list
Replace with these:
deb http://192.168.1.250/ubuntu/ gutsy main restricted universe multiverse
deb-src http://192.168.1.250/ubuntu/ gutsy main restricted universe multiverse
deb http://192.168.1.250/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://192.168.1.250/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://192.168.1.250/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://192.168.1.250/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://192.168.1.250/ubuntu-security gutsy-security main restricted universe multiverse
deb-src http://192.168.1.250/ubuntu-security gutsy-security main restricted universe multiverse
deb http://192.168.1.250/canonical gutsy partner
deb-src http://192.168.1.250/canonical gutsy partner
deb http://192.168.1.250/medibuntu gutsy free non-free
deb-src http://192.168.1.250/medibuntu gutsy free non-free
deb http://192.168.1.250/wine gutsy main
deb-src http://192.168.1.250/wine gutsy main
deb http://192.168.1.250/vbox gutsy non-free
deb http://192.168.1.250/ubuntu-cn gutsy main restricted universe multiverse
Run commands:
wget -q http://192.168.1.250/share/linux/medibuntu-key.gpg -O- | sudo apt-key add -
wget -q http://192.168.1.250/share/linux/vbox-key.gpg -O- | sudo apt-key add -
wget -q http://192.168.1.250/share/linux/wine-key.gpg -O- | sudo apt-key add -
Update
sudo aptitude update
sudo aptitude full-upgrade