RHEL6 Tiny Linux 的制作

###################  RHEL6 Tiny Linux  #################
以Linux的启动流程来制作,预备条件:宿主机,独立硬盘(也可以用镜像文件)
第一步:分区,挂载,以下是分区脚本
#!/bin/bash
# Difined Variable
#
BootPart=500M
RootPart=2G
read -p "Input your disk that need to format: " Disk

# Partitons
(
/sbin/fdisk $Disk <<EOF
n
p
1

+$BootPart
n
p
2

+$RootPart
w
EOF
)&> /dev/null

sleep 3

mkfs.ext4 ${Disk}1 &> /dev/null
mkfs.ext4 ${Disk}2 &> /dev/null

mkdir /mnt/{boot,sysroot} &> /dev/null

mount ${Disk}1 /mnt/boot

第二步:安装GRUB及其配置文件,以下是处理脚本

#!/bin/bash
#
GrubRD=/mnt
read -p "Input your disk for installing grub: " Gbdisk
grub-install --root-directory=$GrubRD $Gbdisk
cd $GrubRD/boot/grub
cat >grub.conf <<EOF
timeout=5
default=0
title Welcome to use tiny linux(2.6.32)
        root(hd0,0)
        kernel /vmlinuz ro root=/dev/sda2 selinux=0
        initrd /initramfs.img
EOF

#copy kernel and initrd from current system
cp /boot/vmlinuz* /$GrubRD/boot/vmlinuz
cp /boot/initramfs* /$GrubRD/boot/initramfs.img

第三步: 建立根文件系统下的相关目录以及初始化脚本

#!/bin/bash
#
read -p "input real rootfs‘s path for tiny linux: " Sysroot
cd ${Sysroot:-/mnt/sysroot}
mkdir -p  proc sys dev etc/{init,rc.d} lib/modules lib64 bin sbin usr/{lib,lib64} var/{log,run,lock}
cat >./etc/init/rcS.conf <<EOF
start on startup

stop on runlevel

task
console output
exec /etc/rc.d/rc.sysinit
EOF

cat >./etc/rc.d/rc.sysinit <<EOF
#!/bin/bash
#
echo -e "\tWelcome to come \033[5;31mTiny Linux\033[0m"
/bin/bash
EOF
chmod +x ./etc/rc.d/rc.sysinit

第四步:拷贝要使用的程序命令到根目录
#!/bin/bash
#
DEST=/mnt/sysroot
libcp() {
  LIBPATH=${1%/*}
  [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
  [ ! -e $DEST${1} ] && cp -a  $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\}/[^.]\{1,\}"`; do
    if [ "$LIB" = "/lib64/ld-linux-x86-64" ];then
        LIB=`echo $LIB | grep -o "/.*lib\(64\)\{0,1\}/[^-]\{1,\}"`
    fi
    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

第五步:添加运行级别0 和 6 ,使系统可以正常关机重启
1. cp -a /etc/init/rc.conf .
2. 建立rc脚本 
#!/bin/bash
#
#create rc script
#
Tiny_etc_dir=/mnt/sysroot/etc
[ -d ${Tiny_etc_dir}/rc.d ] || mkdir -p ${Tiny_etc_dir}/rc.d
cat >${Tiny_etc_dir}/rc.d/rc <<EOF 
#!/bin/bash
#
RunLevel_Dir=/etc/rc.d/rc$1
for i in ${RunLevel_Dir}/K*;do
        if [ -x $i ];then
                $i stop
        fi
done

for i in ${RunLevel_Dir}/S*;do
        if [ -x $i ];then
                $i start
        fi
done
EOF
chmod +x ${Tiny_etc_dir}/rc.d/rc

3. 建立init.d目录和rcN.d目录,以及对应的动作脚本和链接。
mkdir -p /mnt/sysroot/etc/{init.d,rc0.d,rc6.d}

4. 编写halt,用作关机和重启
vim /mnt/sysroot/etc/init.d/halt
#!/bin/bash
#
case $0 in
*halt)
        echo "halting the  system......."
        /sbin/halt -p
        ;;
*reboot)
        echo "rebooting the system......"
        /sbin/reboot
        ;;
*)
        ;;
esac
chmod +x /mnt/sysroot/etc/init.d/halt

5. 使用第四部的脚本,来移动halt、reboot命令以及依赖库

6. 将halt脚本分别链接到rc0.d和rc6.d目录下
cd rc0.d
ln -sv ../init.d/halt S01halt
cd rc6.d
ln -sv ../init.d/halt S01reboot

7. 建立/etc/passwd文件,并在其中加入root用户条目:
cat >/mnt/sysroot/etc/passwd <<EOF
root:x:0:0:root:/root:/bin/bash
EOF

8. 拷贝/etc/passwd的依赖库
cp -a /lib64/libnss_files* /mnt/sysroot/lib64/

第六步:添加登陆终端
1. 拷贝init程序处理过程中与终端有关的配置文件
 cp -a /etc/init/{tty.conf,start-ttys.conf,prefdm.conf} /mnt/sysroot/etc/init/

2. 建立于登录有关的目录
 mkdir /mnt/sysroot/etc/{pam.d,security,sysconfig}

3. 拷贝与登录有关的配置文件
 cp /etc/pam.d/{login,system-auth} /mnt/sysroot/etc/pam.d 
 cp /etc/security/{limits.conf,namespace.conf} /mnt/sysroot/etc/security/
 cp /etc/sysconfig/init /mnt/sysroot/etc/sysconfig

4. 建立存放与登录pam相关的功能库文件目录
 mkdir /mnt/sysroot/lib64/security

5. 拷贝login中依赖的pam库文件
 for i in `awk ‘grep -o ‘pam.*so‘ /etc/pam.d/login`; do cp -a /lib64/security/$i /mnt/sysroot/lib64/security/; done

6. 拷贝system-auth中依赖的pam库文件
 for i in `awk ‘$3 ~ "so$" {print $3}‘ /etc/pam.d/system-auth `; do cp -a /lib64/security/$i /mnt/sysroot/lib64/security/; done

7. cp -a /lib64/libnsl* /mnt/sysroot/lib64

8. grep ^root /etc/shadow >> /mnt/sysroot/etc/shadow

9. egrep ‘^(passwd|shadow)‘ /etc/nsswitch.conf >>/mnt/sysroot/etc/nsswitch.conf(注:没有nsswitch.conf也可以)

10. 使用第四步脚本,拷贝login命令及其库文件。

11. 修改rc.sysinit文件,如下:
#!/bin/bash
#
# set hostname
. /etc/sysconfig/network

[ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=tiny.linux
/bin/hostname $HOSTNAME

#remount rootfs
mount -n -o remount,rw /
echo -e "\tWelcome to come \033[5;31mTiny Linux\033[0m"
#/bin/bash

12. 使用第四步脚本,拷贝mount和hostname命令及其库文件。

第七步:添加单用户模式
1. 建立运行级别"1"的目录
 mkdir /mnt/sysroot/etc/rc.d/rc1.d
2. 拷贝宿主机的/etc/rc.d/init.d/single 
 cp /etc/rc.d/init.d/single /mnt/sysroot/etc/rc.d/init.d
 cp /etc/rc.d/rc1.d/S99single /mnt/sysroot/etc/rc.d/rc1.d

3. cd /mnt/sysroot/etc/rc.d/rc1.d && ln -sv ../init.d/tserver K33tserver

4. 拷贝单用户配置文件(被init程序使用的)
 cp /etc/init/rcS-sulogin.conf /mnt/sysroot/etc/init/
 
5. 使用第四步脚本,拷贝rcS-sulogin.conf文件中出现的命令及其库文件。

时间: 2024-10-05 03:48:43

RHEL6 Tiny Linux 的制作的相关文章

RHEL5 tiny linux的制作

#############  RHEL5 Tiny Linux  ##############以Linux的启动流程来制作 第一步:分区,挂载,以下是分区脚本#!/bin/bash# Difined Variable#BootPart=500MRootPart=2Gread -p "Input your disk that need to format: " Disk # Partitons(/sbin/fdisk $Disk <<EOFnp1 +$BootPartnp2

linux下制作win7安装U盘

http://blog.csdn.net/pipisorry/article/details/41369821 已装linux,再用U盘安装win7(网络安装应该也可以), 先要在linux里面制作一个win7安装U盘(windows下用ultraiso制作也可以),直接用dd命令是不可以的,缺少引导信息.[其实也可以ref] 需要fdisk.mkfs.ntfs.ms-sys.win7 .ISO.>4GU盘 1. 用fdisk在U盘上建立一个ntfs分区,编辑flag,勾上boot选项 fdis

Linux 特殊命令--dd 及Linux补丁制作

一.dd 命令详解: 官方解释: convert and copy a file ---转换并复制文件 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换 语法: dd [OPERAND]... dd OPTION 参数: if=FILE       read from FILE instead of stdin 源文件,用于指定数据流来源 of=FILE     write to FILE instead of stdout

为Linux手动制作U盘启动及基本原理

制作成功后的基本最简目录文件图 一.系统的基本引导流程: 首先系统要引导isolinux.bin可执行程序,此程序是移动介质上引导用的,isolinux.bin运行成功后会加载其配置文件syslinux.cfg,该文件中定义了vmlinuz和initrd.img的调用方式.vmlinuz是vmlinux的压缩版,二者都是linux内核.isolinux.bin根据其配置方式中定义的initrd.img的参数传给vmlinuz即Linux内核并加载内核,然后Linux内核会根据获得的initrd.

Linux库函数制作(静态库、动态库)

Linux库函数制作(静态库.动态库) 静态库与动态库 链接方式 链接分为两种:静态链接.动态链接 静态链接: 由链接器在链接时将库的内容加入到可执行程序中 静态链接的特点是: 优点: 对运行环境的依赖性较小,具有较好的兼容性 缺点: 生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间 库函数有了更新,必须重新编译应用程序 动态链接: 连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序 动态链接的特点: 优点: 在需要的时候才会调入对应的资

linux下制作ISO文件

linux下制作ISO文件有几种方法,分别如下: 1,从光盘中制作ISO文件 cp /dev/cdrom 路径/ISO 文件名 例子:cp /dev/cdrom /opt/mycd.iso,也可以用 dd if=/dev/cdrom of=/opt/mycd.iso 2,使用目录文件制作ISO文件 mkisofs -r -o 路径/ISO 文件名 目录文件路径 例子:mkisofs -r -o /opt/mycd.iso /home 制作完ISO文件后,如何挂载呢? mount -o loop

Linux上制作Window启动盘

Linux上制作Window启动盘 注意: U盘在Linux中的标签(依具体情况而定:执行df查看) U盘 ----- /dev/sdb4 格式化U盘 建立U盘的启动分区 安装关键工具 ms-sys 执行下列命令在U盘上建立MBR分区 ms-sys -w /dev/sdb # 注意:操作 /dev/sdb 而非 /dev/sdb4 复制文件 将预先下载的ISO文件挂载,并将其中的文件复制到U盘 开机选择从U盘启动 现在即可以安装Windows 参考资料 [1].在Linux中做个Windows启

第四季-专题3-嵌入式Linux内核制作

专题3-嵌入式Linux内核制作 一.linux内核简介 系统架构 (1)Linux系统是怎么构成的? (2)为什么linux系统分为了用户空间和内核空间? 现代CPU通常实现了不同的工作模式,以ARM为例,就实现了7中工作模式: 用户模式(usr),快速中断(fiq),外部中断(irq).管理模式(svc),数据访问中止(abt),系统模式(sys),未定义指令异常(und). X86也实现了4个不同的级别:Ring0-Ring3.Ring0下,可以执行特权指令,可以访问IO设备等,在RIng

7、嵌入式linux内核制作

前面我们已经制作了uboot,接下来是制作kernel. 首先进入内核源码,执行make distclean.清除先前编译产生的文件. 注意配置内核的时候多了一个ARCH=arm的条件. 回车之后会进入arm的配置菜单: 就像我们前面配置linux内核一样,我们也会去找一个配置好的配置文件: 把config-file拷贝到我们的内核代码目录下: 然后把config-file拷贝成.config. 重新进入配置界面,发现配置生效了. 接下来就是内核的编译: 在编译的过程中会出现这样的一个错误: 这