看完你自己也能创建个小Linux

 

本例用红帽5.8在虚拟机中进行…

1、准备工作

首先为虚拟机增加一块硬盘(这里硬盘名为hda),对硬盘进行分区,一个作为boot分区一个作为root分区。

格式化并创建文件系统

# mke2fs -j /dev/hda1

# mke2fs -j /dev/hda2  # 为hda磁盘创建ext3的文件系统

挂载

新建两个目录,一个挂载boot分区一个挂载root分区

# mkdir -pv linux/{boot,root} # 创建目录

# mount /dev/hda1 linux/boot # 挂载hda1到linux/boot下

# mount /dev/hda2 linux/root # 挂载hda2到linux/root下

2、开始创建

我们首先要做的是安装grub和内核以及ini

# grub-install --root-directory=linux /dev/hda # 安装grub到linux下,它会自动安装到boot目录下

# cd linux/boot  # 切换到boot目录下

# cp /boot/vmlinuz-2.6.18-308.el5 ./ # 复制内核到当前目录下

# cd /  # 切换到根目录下

# mkdir initdd  # 创建目录initdd

# cd initdd # 切换到initdd目录下

# zcat /boot/initrd-2.6.18-308.el5.img ./ | cpio -id  # 将boot目录下的initrd*文件展开到当前目录下

# vim init  # 编辑init文件使之适应自己的磁盘和文件系统

# find . | cpio -o -H newc --quiet | gzip -9 > /root/linux/boot/initrd.gz # 归档复制并压缩当前目录下的所有内容保存至linux下的boot目录中,并命名为initrd.gz

# cd /root/linux/boot  # 切换到linux下的boot目录下

# vim grub/grub.conf  # 在grub目录下创建grub.conf文件并编辑,下面是文件内容

default=0

timeout=3

title Redhat Linux Welcome

root (hd0,0)

kernel /vmlinuz-2.6.18-308.el5

initrd /initrd.gz

# cd ../root  # 切换到linux下的root目录下

    # mkdir -pv etc/rc.d/init.d bin sbin proc sys dev lib root mnt media var/{log,run,lock/subsys,tmp} usr/{bin,sbin,local} tmp home opt boot   # 为系统根目录创建系统运行必须的目录
    

# vim etc/inittab  # 创建并编辑inittab文件,下面是内容

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

# vim etc/rc.d/rc.sysinit  # 在etc下rc.d下创建并编辑rc.sysinit文件

#!/bin/bash

#

echo " "

/bin/bash

# chmod +x etc/rc.d/rc.sysinit  # 给rc.sysinit文件赋予执行权限

# cp /sbin/init sbin/ # 复制init到对应的目录下

# cp /bin/bash bin/ # 复制bash到对应目录下

# ldd /sbin/init     # 查看init的依赖文件

将init和bash的依赖文件依次复制过来,这样一个初具雏形的linux就已经出来了。保存好文件将此磁盘放到别的主机上就可以启动了,只不过现在没有什么服务,也没有什么命令可以执行……

下面是一个复制命令及其相关文件的脚本,只需输入要复制的命令即可,复制好后小linux就可以执行了。

#!/bin/bash

#

#  cp command go smallLinux

DEST=/root/linux/root

libcp() {

  LIBPATH=${1%/*}

  [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH

  [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."

}

bincp() {

  CMDPATH=${1%/*}

  [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH

  [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH

  for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do

    libcp $LIB

  done

}

read -p "Your command: " CMD

until [ $CMD == 'q' ]; do

   ! which $CMD && echo "Wrong command" && read -p "Input again:" CMD && continue

  COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`

  bincp $COMMAND

  echo "copy $COMMAND finished."

  read -p "Continue: " CMD

done

你可能感兴趣的:(linux)