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文件中出现的命令及其库文件。

转载于:https://blog.51cto.com/noican/1656581

RHEL6 Tiny Linux 的制作相关推荐

  1. 最小的Linux系统制作过程详解

    http://club.topsage.com/thread-890315-1-1.html 一,什么是BabyLinux 二,为什么要做这样一个linux 三,什么人适合读这篇文档 四,应该具备的知 ...

  2. linux 程序输出 logo,Linux下制作logo并显示到开发板上

    我用的是OK6410开发板,自带的两个内核(2.6.32和3.0.1都测试通过) 首先讲一下制作logo的方法: Linux Logo制作工具 : LogoMaker.tgz 4.7MB http:/ ...

  3. bazel 链接第三方动态库_C语言学习篇(31)——linux中制作动态链接库

    引言 前面我们讲解了什么是函数库(函数库就是一些事先写好的函数集合),函数库有什么作用(可以打包我们的编写的源代码,供他人使用,同时源码不可见,保护了自己的知识产权)以及函数库有2种提供方式:静态链接 ...

  4. Windows的启动u盘linux,如何在linux下制作一个windows的可启动u盘?

    如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...

  5. linux php后门,Linux_一个初级的linux后门制作方法,众所周知,Linux的文件权限如: - phpStudy...

    一个初级的linux后门制作方法 众所周知,Linux的文件权限如: 777;666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件.所以我们只需要将bash复制出来 ...

  6. linux .bin文件处理,linux下制作.bin文件方法简介

    linux 下制作二进制 .bin 的文件 制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里 这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便. 例:制作安装 ...

  7. 如何制作linux系统硬盘,手把手带你自制Linux系统之二 简易Linux的制作

    手把手带你自制Linux系统之二 简易Linux的制作 本文利用CentOS5.5自带内核制作一个可以正常启动的Mini Linux. 打开上一篇准备工作中创建的CentOS虚拟机,为另一台虚拟机Mi ...

  8. linux添加后门方法,超初级的linux后门制作方法

    超初级的linux后门制作方法 更新时间:2006年10月24日 00:00:00   作者: 众所周知,Linux的文件权限如: 777:666等,其实只要在相应的文件上加上UID的权限,就可以用到 ...

  9. linux字符界面播放vcd,在Linux中制作VCD

    在Linux中制作VCD 发布时间:2006-03-25 01:04:08来源:红联作者:zz123 ---- 也许您还在使用Windows的原因之一是Windows强大的多媒体支持能力,例如制作个性 ...

最新文章

  1. Linux驱动技术(一) _内存申请
  2. 基于MATLAB的数字图像K-L变换,基于DCT变换的图像编码方法研究
  3. LAMP--Apache 禁止指定 user_agent
  4. HDOJ1216 Assistance Required 打表
  5. 【收藏】HDFS的Java API使用
  6. DDoS攻击愈演愈烈,反射攻击举足轻重
  7. whether logo retrieval will block the application
  8. 处理JAX-RS中的自定义异常类型
  9. 项目管理工具strber
  10. ThinkPhp知识大全(非常详细)
  11. 2021移动游戏生命周期研究玩家洞察报告
  12. 小议如何跳出魔改网络结构的火坑
  13. HDU 1011 Starship Troopers 树形+背包dp
  14. 浅析ReentrantLock重入锁
  15. jquery访问css类,jQuery - 获取并设置 CSS 类
  16. android 定时器 坑,Android 记录一个使用AlarmManager的坑。
  17. LeetCode动态规划系列教程(上)
  18. fatal error: openssl/sha.h: No such file or directory
  19. linux怎样使用小米线刷工具,在linux上怎么样线刷小米手机
  20. 有向图(3.基于十字链表的c++实现)

热门文章

  1. 给力的网络 有道的性能——802.11n与WLAN
  2. SpringMVC4 + Spring + MyBatis3 【转】
  3. FastDFS介绍与安装配置
  4. Linux/Unix操作系统目录结构的来历
  5. RHEL5安装无线网卡驱动
  6. 见证激情燃烧的汤姆·彼得斯(Tom Peters)
  7. Fragment 和 FragmentActivity的使用(二)
  8. gtk_widget_modify_bg的用法
  9. 不懂圣杯布局?5种方式包教包会
  10. 《Kotlin进化之路》之【第二章:揭开Kotlin的基础面纱】(二)