分类: LINUX
2010-06-24 14:45:16
Debootstrap可以用来安装一个debian系统,而不需要安装盘,但是你也需要一个debian环境去chroot。这个创建的完整(最小化的)debian安装可以被用来测试。
Debootstrap是/usr/sbin/debootstrap的运行脚本,加上/usr/share/debootstrap/functions和/usr/share/debootstrap/scripts/下的对应脚本组成,其中/usr/share/debootstrap/scripts/下按照不用的版本号来区分,例如karmic,hardy,lenny等。
近来分析了一下debootstrap的脚本,主要过程如下:
1. 设置版本号,镜像地址,默认目录,临时目录等前期准备工作。
2. 读入debootstrap的选项,配 置设置,并根据选项选择/usr/share/debootstrap/scripts/下的不同版本的脚本。
3. 设置系统的架构$ARCH, $CHROOT_CMD,检查目录权限,创建$TARGET/debootstrap目录,设置输出信息的管道。
4. 如果有设置--unpack-tarball 或 --make-tarball,创建解压缩包。
5. 以karmic为例:
download_indices函数从取 得下载的deb目录,然后运行work_out_debs函数,该函数定义在/usr/share/debootstrap/scripts/下的karmic脚本中。
6. work_out_debs的主要功能为:
从中获取Priority: important的包为base package,并根据依赖关系生成required package。
7. 进入first_stage:
创建/etc /dev/
8. 进入second_stage:
安装下载的deb包,其中又分为:core packages、required packages、base packages三部分。
a) core packages包括:base-files base-passwd dpkg libc6 perl-base mawk debconf,并设置时区"$TARGET/sbin/ldconfig" "$TARGET/var/lib/dpkg/diversions" "$TARGET/usr/bin/ldd"
b) base packages包括:base-files base-passwd bash
bsdutils coreutils dash debconf debconf-i18n debianutils diff dpkg
e2fslibs e2fsprogs findutils gcc-4.4-base grep gzip hostname initscripts
insserv libacl1 libattr1 libblkid1 libc-bin libc6 libcomerr2 libdb4.7
libdbus-1-3 libgcc1 liblocale-gettext-perl libncurses5 libpam-modules
libpam-runtime libpam0g libselinux1 libsepol1 libslang2 libss2 libssl
c) required packages包括:adduser apt apt-utils
aptitude busybox-initramfs bzip2 ca-certificates console-setup
console-terminus cpio dhcp3-client dhcp3-common dmidecode dmsetup eject
file gnupg gpgv ifupdown initramfs-tools iproute iputils-ping kbd
klibc-utils laptop-detect less libatm1 libbz2-1.0 libc6-i686 libcap2
libclass-accessor-perl libcurl3-gnutls libcwidget3 libdevmapper
9. 最后系统完成。
建立一个完整sid版 本的debian base system的方法:
main # cd / ; mkdir /sid-root
main # debootstrap sid /sid-root
[ ... watch it download the whole system ]
main # echo "proc /sid-root/proc proc defaults 0 0" >> /etc/fstab
main # mount proc /sid-root/proc -t proc
main # echo "sysfs /sid-root/sys sysfs defaults 0 0" >> /etc/fstab
main # mount sysfs /sid-root/sys -t sysfs
main # cp /etc/hosts /sid-root/etc/hosts
main # chroot /sid-root /bin/bash
chroot # dselect
[ you may use aptitude, install mc and vim ... ]
main # echo "8:23:respawn:/usr/sbin/chroot /sid-root " \
"/sbin/getty 38400 tty8" >> /etc/inittab
[ define a login tty that will use this system ]
main # init q
[ reload init ]