ubuntu网络安装全整理
时间:2010-12-21 来源:yjm0573
整理:姚建明
日期:2010-12-21
ubuntu-10.04-server-i386.iso网络安装服务器端的搭建
需要准备:一台已经装完ubuntu的机器A,源列表文件/etc/apt/sources.list已经配置完毕,上海的建议添加163的源,假设该主机A的网段为192.168.16.0/24,该主机的ip地址为192.168.16.241,以下不做说明,就假设网络安装的服务器端ip地址为192.168.16.241
需要安装的服务:dhcp,tftp,web
需要准备的iso:ubuntu-10.04-server-i386.iso
安装dhcp服务
apt-get install dhcp3-server |
配置dhcp服务
执行
vi /etc/dhcp3/dhcpd.conf
添加以下内容
ddns-update-style none; log-facility local7;
subnet 192.168.16.0 netmask 255.255.255.0 { range 192.168.16.245 192.168.16.250; # option domain-name-servers 8.8.8.8; option routers 192.168.16.1; option broadcast-address 192.168.16.255; default-lease-time 600; max-lease-time 7200; filename "pxelinux.0"; } |
如果不是16网段,对照着其中的内容,修改便可,filename “pxelinux.0” 后面要用到
重启dhcp服务
/etc/init.d/dhcp3-server restart
挂载ubuntu iso
cd /home (假设iso放置在/home目录下)
mkdir ubuntu
mount –t iso9660 ubuntu-10.04-server-i386.iso ubuntu –o loop
安装tftp服务
apt-get install tftpd-hpa |
配置tftp服务,添加必须的文件到tftp指定的目录
cp –r /home/ubuntu/install/netboot/* /var/lib/tftpboot
其中/var/lib/tftpboot为默认tftp服务的根目录
/home/ubuntu/install/netboot 下面拥有网络安装必须的文件,这些文件必须复制到tftp服务的根目录下
安装web服务
apt-get install lighttpd |
web服务采用的是lighttpd程序,你也可以采用apache等
默认的根目录为/var/www,你也可以通过修改配置文件来修改默认的根目录,这里我们采用默认的根目录
创建ubuntu链接
ln –s /home/ubuntu /var/www/ubuntu
如果不出意外,可以通过浏览器访问
http://192.168.16.241:/ubuntu
至此ubuntu网络安装的服务器端搭建完毕
通过网络安装ubuntu系统
调整biso,将网络启动顺序调整到第一位,有一些比较老的主板不支持网络启动,那么这个机器将不能通过网络安装ubuntu,还有一些主板支持网络启动,网卡不支持pxe协议,那么也将不能通过网络安装ubuntu
将设你找到的机器支持网络安装,那么从网络启动之后,你就会熟悉的看到ubuntu的安装界面
按照提示就可以完整安装
值得注意的是,中间有一步要求输入镜像地址:
选择手动输入,输入192.168.16.241,前面不要加http
然后接着提示输入路径,输入/ubuntu即可,
proxy跳过,这样安装的时候,就会选择局域网的包
如果不出意外网络安装将会顺利完成
通过网络全自动安装ubuntu
假设ubuntu网络安装已经成功。此时我们发现安装过程中有很多的选项需要选择,如果每次网络安装都要逐个选择,会浪费很大的时间,这个时候我们就需要了解ubuntu的自动安装,ubuntu的自动安装需要预置文件
预置文件的方式有3种,一种initrd,一种文件,一种网络
initrd方式需要在根目录下面放置一个文件叫preseed.cfg
我们这里采用initrd的方式(其实个人感觉initrd的方式最简单),首先解包initrd,然后在initrd根目录下面放置一个文件preseed.cfg,然后在将initrd打包
解包initrd
cd /home
cp /var/lib/tftpboot/ubuntu-installer/i386/initrd.gz .
gunzip initrd.gz
mv initrd initrd.img
mkdir initrd
cd initrd
cpio –i <../initrd.img
添加全自动安装的内容
vi preseed.cfg (该文件应在initrd目录下,后面我们要把initrd目录里的内容重新再打包)
把下面的文件内容添加进preseed.cfg文件,这个文件的取名是固定的,不能修改的(估计其实也能修改,只是我不知道,为了顺利完成任务我们就先按他的要求来吧)
# Locale sets language and country. d-i debian-installer/locale string en_HK
# Keyboard selection. d-i console-setup/ask_detect boolean false d-i console-setup/layoutcode string us
# Network configuration. d-i netcfg/choose_interface select auto d-i netcfg/get_hostname string robot d-i netcfg/get_domain string robot
#d-i netcfg/get_nameservers string 202.96.209.5 #d-i netcfg/get_ipaddress string 192.168.16.250 #d-i netcfg/get_netmask string 255.255.255.0 #d-i netcfg/get_gateway string 192.168.16.1 #d-i netcfg/confirm_static boolean true
# Mirror settings d-i mirror/country string manual d-i mirror/http/hostname string 192.168.16.241 d-i mirror/http/directory string /ubuntu d-i mirror/http/proxy string
# Clock and time zone setup d-i clock-setup/utc boolean false d-i time/zone string Asia/Shanghai
# Partitioning d-i partman-auto/method string lvm d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-lvm/confirm boolean true d-i partman-auto-lvm/guided_size string max d-i partman-auto/choose_recipe select atomic d-i partman/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true
# Base system installation d-i base-installer/kernel/image string linux-generic
# Account setup d-i passwd/root-login boolean true d-i passwd/root-password password kayak_48 d-i passwd/root-password-again password kayak_48 d-i passwd/make-user boolean false d-i user-setup/encrypt-home boolean false
# Apt setup d-i apt-setup/use_mirror boolean false d-i apt-setup/services-select multiselect security d-i apt-setup/security_host string 192.168.16.241 d-i apt-setup/security_path string /ubuntu d-i debian-installer/allow_unauthenticated string true
# Package selection tasksel tasksel/first multiselect standard d-i pkgsel/include string openssh-server vim d-i pkgsel/upgrade select none d-i pkgsel/language-packs multiselect en, zh d-i pkgsel/update-policy select none
# Boot loader installation d-i grub-installer/only_debian boolean true
# Finishing up the installation d-i finish-install/reboot_in_progress note |
然后再打包
find . | cpio -o -H newc |gzip -9 >../initrd.gz
替换网络启动的initrd
cd ..
cp initrd.gz /var/lib/tftpboot/ubuntu-installer/i386/
此时你再通过网络安装,就不会再提示手动输入,而是一步到位的安装
preseed.cfg文件中有几点需要说明
# Network configuration. d-i netcfg/choose_interface select auto d-i netcfg/get_hostname string unassigned-hostname d-i netcfg/get_domain string unassigned-domain d-i netcfg/get_nameservers string 202.96.209.5
#d-i netcfg/get_ipaddress string 192.168.16.250 #d-i netcfg/get_netmask string 255.255.255.0 #d-i netcfg/get_gateway string 192.168.16.1 #d-i netcfg/confirm_static boolean true 通过网络安装,静态配置是不起作用的,所以注释了 |
# Package selection tasksel tasksel/first multiselect standard d-i pkgsel/include string openssh-server vim d-i pkgsel/upgrade select none d-i pkgsel/language-packs multiselect en, zh d-i pkgsel/update-policy select none
注意d-i pkgsel/include string openssh-server vim 这里我选择了这两个软件,主要是因为一般我们都需要用到ssh远程登录和vim编辑器 |
假设网络安装已经成功,但我们突然有其他的需求,比如在安装过程中需要安装一些我们自己定义的包,那么就需要我们重新定制ubuntu源和修改initrd
操作都在网络安装服务器端
所有操作都将在/var/www/ubuntu目录下
参考链接(https://help.ubuntu.com/community/InstallCDCustomization?action=show&redirect=InstallCDCustomizationHowTo)
1.准备基本的目录文件dists和pool
我们先取消指向/home/ubuntu的链接, rm /var/www/ubuntu
创建/var/www/ubuntu目录,mkdir –p /var/www/ubuntu
cd /var/www/ubuntu
cp –rf /home/ubuntu/dists .
cp –rf /home/ubuntu/pool .
将光盘里的dists目录和pool目录复制到/var/www/ubuntu
2.创建gpg key
gpg --gen-key
按照提示一步一步操作,但是我们发现会因为随即数不够而失败,这个时候我们需要安装rng-tools
apg-get install rng-tools
安装完之后,再创建,这个时候就可以成功创建了
显示创建的key
gpg --list-key
这个时候你就会显示你创建间的key
下面是我创建的key
pub 2048R/92B92869 2010-12-15 uid yaojianming (test) <[email protected]> sub 2048R/84A3A400 2010-12-15 |
这个创建的key将在下面用到
mkdir –p /var/www/build
cd /var/www/build
apt-get install fakeroot (如果没有装,需要安装这个软件)
apt-get source ubuntu-keyring
cd ubuntu-keyring-2010.11.09/keyrings
gpg --import < ubuntu-archive-keyring.gpg (导入ubuntu官方的key)
gpg –list-key
pub 1024D/437D05B5 2004-09-12 uid Ubuntu Archive Automatic Signing Key <[email protected]> sub 2048g/79164387 2004-09-12
pub 1024D/FBB75451 2004-12-30 uid Ubuntu CD Image Automatic Signing Key <[email protected]>
pub 2048R/92B92869 2010-12-15 uid yaojianming (test) <[email protected]> sub 2048R/84A3A400 2010-12-15 |
gpg --export 437D05B5 FBB75451 92B92869 > ubuntu-archive-keyring.gpg
(把ubuntu官方的key和自己创建的key导入到这个文件中)
cd .. (现在在ubuntu-keyring-2010.11.09目录)
dpkg-buildpackage -rfakeroot -m"Your Name <[email protected]>"
-k92B92869
cd .. (现在在build目录,此时你会看到后缀为deb和udeb的两个文件)
cp ubuntu-keyring*deb /var/www/ubuntu/pool/main/u/ubuntu-keyring
3.编译库
(主要统计pool目录下面的软件信息,以及创建Release文件和为Release签名,Release文件一定要签名,否则一会安装的时候会出bad mirror error)
mkdir -p /var/www/ubuntu/indices /var/www/ubuntu/apt-ftparchive
cd /var/www/ubuntu/indices
接下来需要下载4个文件
override.lucid.main override.lucid.main.debian-installer
override.lucid.restricted override.lucid.restricted.debian-installer
下载地址为http://archive.ubuntu.com/ubuntu/indices
我们可以用wget逐个逐个下载,也可以写一个脚本一起下载
DIST=lucid
for SUFFIX in main main.debian-installer restricted restricted.debian-installer; do
wget http://archive.ubuntu.com/ubuntu/indices/override.$DIST.$SUFFIX
done
|
然后进入apt-ftparchive
创建apt-ftparchive-deb.conf apt-ftparchive-udeb.conf release.conf
3个文件
apt-ftparchive-deb.conf里的内容为
Dir {
ArchiveDir "/var/www/ubuntu/";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/lucid/main/binary-i386/Packages";
BinOverride "/var/www/ubuntu/indices/override.lucid.main";
ExtraOverride "/var/www/ubuntu/indices/override.lucid.extra.main";
};
BinDirectory "pool/restricted" {
Packages "dists/lucid/restricted/binary-i386/Packages";
BinOverride "/var/www/ubuntu/indices/override.lucid.restricted";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
|
apt-ftparchive-udeb.conf里的内容为
Dir {
ArchiveDir "/var/www/ubuntu/";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/lucid/main/debian-installer/binary-i386/Packages";
BinOverride "/var/www/ubuntu/indices/override.lucid.main.debian-installer";
};
BinDirectory "pool/restricted" {
Packages "dists/lucid/restricted/debian-installer/binary-i386/Packages";
BinOverride "/var/www/ubuntu/indices/override.lucid.restricted.debian-installer";
};
Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
|
release.conf的内容为
APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "lucid";
APT::FTPArchive::Release::Version "10.04";
APT::FTPArchive::Release::Codename "lucid";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main restricted";
APT::FTPArchive::Release::Description "Ubuntu 10.04 LTS";
|
OK准备工作做好,接下来就要build库了
但是在build之前我们需要做一件事情,就是在适当的地方放置我们自己创建的deb包,在ubuntu的help文档中降到将文件放到extras文件夹中,但是我测试的时候,发现还需要修改apt包,比较麻烦,为了简便,我们就将我们自己创建的包放置到restricted文件夹下
mkdir -p /var/www/ubuntu/pool/restricted
将所需要新添加的包放到这个目录下面,接下去进入build
所有操作都在shell下运行
BUILD=/var/www/ubuntu
APTCONF=/var/www/ubuntu/apt-ftparchive
DISTNAME=lucid
apt-ftparchive -c $APTCONF generate /var/www/ubuntu/apt-ftparchive/apt-ftparchive-deb.conf
apt-ftparchive -c $APTCONF generate /var/www/ubuntu/apt-ftparchive/apt-ftparchive-udeb.conf
apt-ftparchive -c $APTCONF release $BUILD/dists/$DISTNAME > $BUILD/dists/$DISTNAME/Release (创建Release文件,必须的)
gpg --default-key 92B92869 --output $BUILD/dists/$DISTNAME/Release.gpg -ba $BUILD/dists/$DISTNAME/Release (这里default-key后面的key就是我们上面创建的key,这里为Release文件签名,必须的)
好了,到这里ubuntu局域网镜像就创建完了,记住Release文件和Release.gpg文件是一定要有的
此时我们再通过一台机器网络安装,就可以进行网络安装了
但是在实际执行当中,我发现跳过了bad archive mirror 后,紧接着就出现了一个错误,说不能下载
后来我想了半天,终于找到了原因,我们还需要修改initrd
cd /home/initrd
ls usr/share/keyrings
看看你看到了啥哦,对ubuntu-archive-keyring.gpg
其实我们新创建的局域网的镜像已经使用了我们自己的签名,这个地方当然也要替换调,最新的文件就是我们上面创建的
cp /var/www/ubuntu/build/ubuntu-keyring-2010.11.09/keyrings/ubuntu-archive-keyring.gpg /home/initrd/usr/share/keyrings
find . | cpio -o -H newc |gzip -9 >../initrd.gz
将新创建的initr.gz复制到tftpboot目录下
cd ..
cp initrd.gz /var/lib/tftpboot/ubuntu-installer/i386
OK大功搞成,ubuntu服务器版网络安装,网络全自动安装,网络自添加包全自动安装完成
为了自动安装你自己定义的包,在上面的preseed.cfg文件中有一处需要修改
d-i pkgsel/include string openssh-server vim
在后面添加你自己的包,比如叫kbis-find包
|