linux-live的build脚本

最近应好友之约,研究linux-live。

 

先抽空把build脚本读了下,做了些注释,帖出来吧。

 

#!/bin/bash # # run this script to create a LiveCD in /tmp/live_data_1234 # # Author: Tomas M. <http://www.linux-live.org> # 这里,重新定义变量PATH,注意覆盖了原来系统的PATH变量。 export PATH=.:./tools:../tools:/usr/sbin:/usr/bin:/sbin:/bin:/ # 这三行,是要确保脚本执行的目录是 build脚本 所在的目录, # 如果执行 "./build " , 则目录就是当前目录 # 如果执行 “/home/xxx/linix-live/build", 则会 “cd /home/xxx/linux-live" CHANGEDIR=$(dirname $(readlink -f $0)) echo "Changing current directory to $CHANGEDIR" cd $CHANGEDIR # 导入/执行 tools/liblinuxlive,这个脚本中是全局变量、函数的定义,从名字就看出来了"lib"嘛 # 整个工程所用的许多工具函数什么的都在这里定义 # 导入失败则退出 . liblinuxlive || exit 1 # 导入/执行 .config 脚本, 这个脚本里是一些用户可以定制的参数,可以看一下。 . ./.config || exit 1 # only root can continue, because only root can read all files from your system # 在tools/liblinuxlive中定义,必须以root执行build脚本 allow_only_root # live CD name # 让你自己给liveCD起个名字,默认名在.config中定义,为"mylinux" echo -ne "Name of your live distro [hit enter for $LIVECDNAME]: " read NEWLIVECDNAME if [ "$NEWLIVECDNAME" != "" ]; then LIVECDNAME=$NEWLIVECDNAME; fi LIVECDNAME=$(echo $LIVECDNAME | tr -d ' ') # 删去空格,保证没有空格 # 安装linux-live到 $ROOT/usr 中 # 特别的,把 tools/liblinuxlive 放到 $ROOT/usr/lib/ 下 # 把 tools/ 下面的其它可执行文件放到 $ROOT/usr/bin 下 # $ROOT 在 .config 中定义, 默认为 根 "/" . ./install # 如果没有改.config中的$ROOT,执行这一句时,$ROOT为空,将安装的当前运行的系统中,这对于当前运行系统与要制作的live系统不一样时有区别。 if [ "$ROOT" -a "$ROOT" != "/" ]; then . ./install $ROOT fi # search for kernel # 搜索内核文件 vmlinuz。一般的发行版本现在都是vmlinuz-2.6.3x.xx. ,即会带着内核信息,需要自己作个链接吧。 VMLINUZ=$ROOT/boot/vmlinuz if [ -L "$VMLINUZ" ]; then VMLINUZ=$(readlink -f $VMLINUZ); fi echo -ne "Enter path for the kernel you'd like to use [hit enter for $VMLINUZ]: " read NEWKERNEL if [ "$NEWKERNEL" != "" ]; then VMLINUZ="$NEWKERNEL"; fi if [ "$(ls $VMLINUZ 2>>$DEBUG)" = "" ]; then echo "cannot find $VMLINUZ"; exit 1; fi header "Creating LiveCD from your Linux" echo "some debug information can be found in $DEBUG" # 创建目标文件夹 mkdir -p $CDDATA/$LIVECDNAME/{base,modules,optional,rootcopy,tools} # 把 cd-root/boot 文件夹中的内容拷贝到 $CDDATA, 并修改几个文件的内容,改为 $LIVECDNAME 的定制信息 echo "copying cd-root to $CDDATA, using kernel from $VMLINUZ" cp -R cd-root/boot $CDDATA for i in isolinux syslinux; do cat cd-root/boot/$i/$i.cfg | sed -r "s/LABEL linux/LABEL $LIVECDNAME/" | sed -r "s/Run linux/Run $LIVECDNAME/" > $CDDATA/boot/$i/$i.cfg done mv $CDDATA/boot/dos/linux.bat $CDDATA/boot/dos/${LIVECDNAME:0:8}.bat cat cd-root/boot/dos/readme.txt | sed -r "s/LINUX.BAT/"${LIVECDNAME:0:8}.bat"/" > $CDDATA/boot/dos/readme.txt # 拷贝文件 mkdir -p $CDDATA/$LIVECDNAME cp -R cd-root/linux/* $CDDATA/$LIVECDNAME cp tools/* $CDDATA/$LIVECDNAME/tools cp -R DOC/LICENSE $CDDATA/$LIVECDNAME cp $VMLINUZ $CDDATA/boot/vmlinuz # 用 initrd/initrd_create 来创建initrd.gz, 并拷贝到$CDDATA/boot/initrd.gz echo "creating initrd image..." echo "Using kernel modules from $ROOT/$LMK" cd initrd ./initrd_create $LIVECDNAME if [ "$?" -ne 0 ]; then exit; fi cd .. cp initrd/initrd.gz $CDDATA/boot/initrd.gz rm initrd/initrd.gz echo "creating compressed images..." # 把 $MKMOD(在.config中定义)中的每个文件夹都用 create_module(在liblinuxlive中定义) 压缩/模块化 for dir in $MKMOD; do if [ -d $ROOT/$dir ]; then echo "base/$dir.lzm ..." echo -ne > exclude.txt for i in $EXCLUDE; do part=$(echo "x/$i" | tr -s / | sed -r "s:x/[^/]+/::") if [ -e "$ROOT/$dir/$part" ]; then echo "$ROOT/$dir/$part" >> exclude.txt; fi done cat exclude.txt create_module $ROOT/$dir $CDDATA/$LIVECDNAME/base/$dir.lzm -keep-as-directory -ef exclude.txt if [ $? -ne 0 ]; then exit; fi rm exclude.txt echo fi done # 后续还有一些工作,创建iso文件,或制作启动USB等。 cd $CDDATA/$LIVECDNAME echo "--------done----------" echo echo "* run $CDDATA/$LIVECDNAME/make_iso.bat to create ISO image" echo "* or copy content of $CDDATA to your USB device" echo "and run ./boot/bootinst.sh (from the device!) to setup boot sector" echo echo "Now press Enter..." read junk

 

下一步,应该看看 initrd/initrd_create脚本 和 tools/liblinuxlive 中的  create_module 函数。

制作USB启动盘,应该看脚本cd-root/boot/bootinst.sh

 

你可能感兴趣的:(脚本,Module,search,Build,Path,tools)