定制LFS镜像及安装过程
http://blog.csdn.net/decload/article/details/7407698
export LFS=/mnt/lfs mkdir -pv $LFS mount /dev/hda2 /mnt/lfs cd $LFS tar jcvpf ~/lfs-6.3.tar.bz2 ./*--exclude boot cd $LFS/boot tar jcvpf ~/boot.tar.bz2 ./*
export ISO=~/iso
mkdir $ISO
mkdir -pv $ISO/boot/grub
cp /boot/grub/stage2_eltorito $LFS/boot/grub
接着编辑menu.lst,用来制作引导菜单:
cat > $ISO/boot/grub/menu.lst <<EOF
default0
timeout30
color green/black light-green/black
title grub bootcd
root (cd)
kernel /boot/kernel
initrd /boot/initramfs.gz
EOF
cp arch/X86/boot/bzImage $ISO/boot/kernel
接着制作initramfs,可以利用发行版的initramfs稍作修改,initramfs是个经过cpio和gzip压缩的文件,需要用gunzip解压,再用cpio取出:
export INITFS=~/initfs
mkdir $INITFS{,/out}
cp /boot/initramfs.gz $INITFS
gunzip initramfs.gz
cd out
cpio -div <../initramfs
解压后得到一系列的目录,包括bin、usr等文件夹,需要的话可以加入相应的命令到bin目录中,用ldd查看该命令需要的库,将库也复制到lib下就可以使用相应的命令了。
mkdir install
cp ~/lfs-6.3.tar.bz2 install
cp ~/boot.tar.bz2 install
cp ~/install.sh install
脚本install.sh用来控制安装过程,详细内容下面阐述。
find .| cpio -H newc -o | gzip >../initramfs.gz
建立出来的initramfs.gz就是我们需要的liveCD中的文件系统了。
mv ../initramfs.gz $ISO/boot
现在有了kernel和initramfs就可以制作liveCD了,利用mkisofs工具制作:
cd $ISO
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4-boot-info-table \ -o liveCD-lfs-6.3.iso $ISO
生成的liveCD-lfs-6.3.iso即为我们需要的镜像文件,这样liveCD就制作好了。
#!/bin/bash
#find the disk DISK=`find /dev -type b | grep '.*[shv]d[a-d][0-9]' | sed -e 's/.$//' | head -1`&& echo "Your DISK is $DISK"&& DISK_PRE=`echo $DISK | sed -e 's/.$//'`&& #set the partition echo "Input Your SWAP Partition for a number:"&& read SWAP_NUM && DISK_SWAP=${DISK}${SWAP_NUM}&& echo "Input Your BOOT Partition for a number:"&& read BOOT_NUM && DISK_BOOT=${DISK}${BOOT_NUM}&& echo "Input Your ROOT Partition for a number:"&& read ROOT_NUM && DISK_ROOT=${DISK}${ROOT_NUM}&& #init swap partition mkswap $DISK_SWAP && #swapon $DISK_SWAP && #init root partition mkfs.ext3 $DISK_ROOT && mount $DISK_ROOT /mnt/lfs && cd /mnt/lfs && tar jxvpf /install/lfs-6.3.tar.bz2 && cp ${DISK_PRE}*/mnt/lfs/dev/-R && echo "install ROOT finished"&& #init boot partition mkfs -t ext3 $DISK_BOOT && mount $DISK_BOOT /mnt/boot && cd /mnt/boot && tar jxvpf /install/boot.tar.bz2 && echo "install BOOT finished"&& #init fstab echo "${DISK_ROOT} / ext3 defaults 1 1">/mnt/lfs/etc/fstab && echo "${DISK_SWAP} swap swap pri=1 0 0">>/mnt/lfs/etc/fstab && echo "${DISK_BOOT} /boot ext3 defaults 0 0">>/mnt/lfs/etc/fstab && echo "proc /proc proc defaults 0 0">>/mnt/lfs/etc/fstab && echo "sysfs /sys sysfs defaults 0 0">>/mnt/lfs/etc/fstab && echo "devpts /dev/pts devpts gid=4,mode=620 0 0">>/mnt/lfs/etc/fstab && echo "shm /dev/shm tmpfs defaults 0 0">>/mnt/lfs/etc/fstab && #init grub menu.lst if[ $BOOT_NUM =1];then GRUB_BOOT=0 else GRUB_BOOT=`expr $BOOT_NUM - 1` fi&& echo "default 0">/mnt/boot/grub/menu.lst && echo "timeout 30">>/mnt/boot/grub/menu.lst && echo "color green/black light-green/black">>/mnt/boot/grub/menu.lst && echo "">>/mnt/boot/grub/menu.lst && echo "title LFS 6.3">>/mnt/boot/grub/menu.lst && echo "root (hd0,$GRUB_BOOT)">>/mnt/boot/grub/menu.lst && echo "kernel /kernel-2.6.39.4 root=${DISK_ROOT} vga=788">>/mnt/boot/grub/menu.lst && #reset MAC address rm -f /mnt/lfs/etc/udev/rules.d/70-persistent-net.rules && #chroot and MBR cd /&& umount /mnt/boot && mount $DISK_BOOT /mnt/lfs/boot && chroot /mnt/lfs /bin/bash -c "echo -e 'root (hd0,$GRUB_BOOT)\nsetup (hd0)\nquit' | /usr/sbin/grub"&& echo "******************************************************************"&& echo "******************** install finish now reboot *******************"&& echo "******************************************************************"&& chroot /mnt/lfs/ /bin/bash -c "reboot"
#find the disk DISK=`find /dev -type b | grep '.*[shv]d[a-d][0-9]' | sed -e 's/.$//' | head -1`&&
这行用来找出机器中的硬盘的设备文件,返回如/dev/sda之类的字符串给DISK
#set the partition echo "Input Your SWAP Partition for a number:"&& read SWAP_NUM && DISK_SWAP=${DISK}${SWAP_NUM}&& echo "Input Your BOOT Partition for a number:"&& read BOOT_NUM && DISK_BOOT=${DISK}${BOOT_NUM}&& echo "Input Your ROOT Partition for a number:"&& read ROOT_NUM && DISK_ROOT=${DISK}${ROOT_NUM}&&
以上为和用户的交互过程,让用户键入需要安装的分区编号,包括boot分区、swap分区、文件系统分区。
#init swap partition mkswap $DISK_SWAP && #swapon $DISK_SWAP &&
这里用mkswap格式化swap分区,swapon可以打开swap分区,暂不需要。
#init root partition mkfs.ext3 $DISK_ROOT && mount $DISK_ROOT /mnt/lfs && cd /mnt/lfs && tar jxvpf /install/lfs-6.3.tar.bz2 && cp ${DISK_PRE}*/mnt/lfs/dev/-R && echo "install ROOT finished"&&
将文件系统分区格式化成ext3的文件格式,挂载到/mnt/lfs目录下,然后解压目标文件系统的tar包到相应的分区,接着复制liveCD中的相应设备文件到目标系统的/dev目录下。
#init boot partition mkfs -t ext3 $DISK_BOOT && mount $DISK_BOOT /mnt/boot && cd /mnt/boot && tar jxvpf /install/boot.tar.bz2 && echo "install BOOT finished"&&
和文件系统分区类似,先格式化分区,在解压boot分区的tar包到分区中。
#init fstab echo "${DISK_ROOT} / ext3 defaults 1 1">/mnt/lfs/etc/fstab && echo "${DISK_SWAP} swap swap pri=1 0 0">>/mnt/lfs/etc/fstab && echo "${DISK_BOOT} /boot ext3 defaults 0 0">>/mnt/lfs/etc/fstab && echo "proc /proc proc defaults 0 0">>/mnt/lfs/etc/fstab && echo "sysfs /sys sysfs defaults 0 0">>/mnt/lfs/etc/fstab && echo "devpts /dev/pts devpts gid=4,mode=620 0 0">>/mnt/lfs/etc/fstab && echo "shm /dev/shm tmpfs defaults 0 0">>/mnt/lfs/etc/fstab &&
这里重新写入目标文件系统的fstab文件,fstab表存放了系统启动时自动挂载的文件系统和相应的挂载点,而我们的系统是直接打成tar包的,其中的fstab表记录的还是原来的系统的挂载信息,磁盘类型以及分区结构和挂载点都不会一样,所以要重新写入。利用脚本的记录的变量写入fstab表中。
#init grub menu.lst if[ $BOOT_NUM =1];then GRUB_BOOT=0 else GRUB_BOOT=`expr $BOOT_NUM - 1` fi&& echo "default 0">/mnt/boot/grub/menu.lst && echo "timeout 30">>/mnt/boot/grub/menu.lst && echo "color green/black light-green/black">>/mnt/boot/grub/menu.lst && echo "">>/mnt/boot/grub/menu.lst && echo "title LFS 6.3">>/mnt/boot/grub/menu.lst && echo "root (hd0,$GRUB_BOOT)">>/mnt/boot/grub/menu.lst && echo "kernel /kernel-2.6.39.4 root=${DISK_ROOT} vga=788">>/mnt/boot/grub/menu.lst &&
这里重新制作目标系统的grub的启动菜单,也就是menu.lst文件,通过脚本的相应变量写入到目标系统的boot分区下grub目录下的menu.lst。
#reset MAC address rm -f /mnt/lfs/etc/udev/rules.d/70-persistent-net.rules &&
这里重置MAC地址,由于解压的系统记录着原来的网卡的MAC地址,MAC地址记录下/etc/udev/rules.d/70-persistent-net.rules文件下,将这个文件删除后在下次启动时会自动识别当前机器的MAC地址,也可手动修改该文件为当前机器的MAC地址。
#chroot and MBR cd /&& umount /mnt/boot && mount $DISK_BOOT /mnt/lfs/boot && chroot /mnt/lfs /bin/bash -c "echo -e 'root (hd0,$GRUB_BOOT)\nsetup (hd0)\nquit' | /usr/sbin/grub"&& echo "******************************************************************"&& echo "******************** install finish now reboot *******************"&& echo "******************************************************************"&& chroot /mnt/lfs/ /bin/bash -c "reboot"
到这里系统文件修改的差不多了,但是由于机器硬盘的MBR区还未写入当前系统的引导信息,所以需要将grub的引导信息写入硬盘的MBR:
安装方法:以光驱或U盘启动载入liveCD后选择grub进入livecd中 ,用liveCD中的的fdisk对磁盘进行分区,分区完后执行/install/install.sh自动安装,安装完后会自动重启。
2. 进入grub引导界面,选择 grub bootcd,启动LiveCD中。
3. 用fdisk 将磁盘分区,应该至少有swap分区、boot分区和文件系统分区。
4. 执行 /install/install.sh 脚本文件,键入grub、boot、文件系统分区编号后自动安装,安装完自动重启,重启时选择硬盘启动进入grub,启动系统即可。



定制LFS镜像及安装过程的更多相关文章
- 定制linux镜像并自动化安装
最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建….. 本来想法是打算把需要的依 ...
- Fedora20在神州战神K650D1安装过程,使用netinstall和Dvd.iso镜像安装。
最近新买一笔记本,神州战神K650D-i5 D1.仍旧安装双系统,WIndows7+Fedora20.磁盘分区是这样的: 第一主分区 /boot ext4 20G 第二主分区 / ext4 70G 第 ...
- VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
几种主要的虚拟化 ESXi是VMware公司研发的虚拟机服务器,ESXi已经实现了与Virtual Appliance Marketplace的直接整合,使用户能够即刻下载并运行虚拟设备.这为 即插即 ...
- 定制ubuntu镜像
使用ubuntu server 18.04 lts版镜像 作为源镜像定制目标镜像, 工具cubic, 定制目标镜像, 使得一些服务装机后即可使用,例如redis, mysql, monggodb ,s ...
- 定制centos6.5自动安装ISO光盘
一 ISO定制项清单 安装系统为centos6.5 (base server),安装方式为全新安装 使用ext4分区格式 安装前可以交互输入root密码,主机名,swap分区大小,之后安装过程自动化 ...
- vagrant 1.8.6 安装过程及总结遇到的坑
下面先总结遇到的问题,这些问题如果你也遇到,可能需要搜索很多次才能找到原因. 如果想看安装过程,可以先直接跳到后面第二部分部分. 1 问题汇总: 1.1 vagrant版本过高问题. vagrant ...
- 2016最新cocoapods安装流程,安装过程中遇到的问题及解决方法
现在的cocoapods与之前比较.有很多不一样的地方.自己试了一试,终于搞定.现在大概纪录一下. 1.首先查看ruby是否是最新版的. ruby是通过rvm安装的所以需要先安装rvm后查看ruby是 ...
- SQL Server 2008安装过程中的一些问题和心得
开博客已经好久了,但一直没有用起来,也有很多"老人"劝诫我,好记性不如烂笔头,于是一年后的我重拾博客,打算记录一些我在计算机方面遇到的一些问题和心得. 前几天重装了Win10系统, ...
- vmware下linux系统的安装过程
虚拟机VMware下CentOS6.6安装教程图文详解 [日期:2016-05-24] 来源:Linux社区 作者:Sungeek [字体:大 中 小] 分享下,虚拟机VMware下CentOS ...
随机推荐
- axios post提交数据格式不对的问题
需要格式化一下 this.$http({ method: "post", url: "/chinacountry/index.php/home/Search/index& ...
- jQuery全选反选实例
1. $('#tb:checkbox').each(function(){ 每次都会执行 全选-取消操作,注意$('#tb :checkbox').prop('checked',true); tb后面 ...
- kafka搭建笔记
环境CentOS7.0,JDK1.8 一.下载安装 在kafka官网 http://kafka.apache.org/downloads下载到最新的kafka安装包 下载 2.0.0 release, ...
- HDU3480:Division——题解
http://acm.hdu.edu.cn/showproblem.php?pid=3480 将一列数划分成几个集合,这些集合的并集为该数列,求每个数列的(最大值-最小值)^2的和的最小值. 简单的d ...
- CC DGCD:Dynamic GCD——题解
https://vjudge.net/problem/CodeChef-DGCD https://www.codechef.com/problems/DGCD 题目大意: 给一颗带点权的树,两个操作: ...
- TCP中三次握手建立和四次握手释放以及相关问题
本文基于个人所学和网上博文所整理,若有不妥处,欢迎留言指出 TCP连接过程中标志位的意义: 字符缩写 描述 SYN 同步序号,表示此报文是一个连接请求或连接接受报文 ACK 确认位,对接收到的报文的确 ...
- 洛谷 P1338 末日的传说 解题报告
P1338 末日的传说 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人 ...
- 【贪心】【CF3D】 Least Cost Bracket Sequence
传送门 Description 给一个序列,序列里面会有左括号.问号.右括号.对于一个\(?\)而言,可以将其替换为一个\((\),也可以替换成一个\()\),但是都有相应的代价.问:如何替换使得代价 ...
- 关于wesocket大文件通讯的切片实现方法
关于websocket的实现网上很多资料这里就不详说,这里大概讲我在websocket传输大文件的时的方法,websocket传输单个文件最大不能超过7kg,否则前段自动断掉,当我们用来语音通讯时,通 ...
- CCPC-Winter Camp div2 day1
A:机器人 传送门:https://www.zhixincode.com/contest/1/problem/A 题意:地图是由A.B两根线组成的,机器人一开始是在A线上的S点,他初始时可以选择任意方 ...