系统裁剪centos6.8具有网络功能

安装环境:centos6.8,kernel:2.6.32-642.4.2.el6.x86_64

目标主机:最小化的自制的linux主机

宿主机:在那台linux主机中制作的自制最小化的linux主机,以下皆在宿主机中进行

新添加的磁盘配置信息如下:

1、在虚拟机中新添加一个硬盘,并且记住该硬盘存放位置,以便待会使用,分两个区,分别用于boot和/

# echo -n"

n

p

1

+500M

n

p

2

+5G

w"|fdisk /dev/sdb

mkfs.ext4 /dev/sdb1

mkfs.ext4 /dev/sdb2

2、挂载分区,挂载位置没有应先创建

# mount /dev/sdb1 /mnt/boot

# mount /dev/sdb2 /mnt/sysroot

3、复制linux内核,和initramfs.img至/mnt/boot/下

# cp /boot/vmlinuz-`uname -r`/mnt/boot/vmlinuz

# cp /boot/initramfs-`uname -r`.img /mnt/boot/initramfs.img

4、安装grub至/dev/sdb中

# grub-install --root-directory=/mnt /dev/sdb

注:因为这里是挂载至/mnt目录下,所以将mnt当成grub的根

5、复制一些命令至裁剪的系统中,通过bincp.sh脚本

# bash /root/scripts/bincp.sh

bash

mount

insmod

cat

vim

ls

cd

ifconfig

mkdir

touch

umount

ping

tree

quit

6、将网卡驱动复制过去

查看所有驱动,e1000则是网卡驱动

# lsmod

查看e1000驱动的详细信息,查看该驱动文件位置

# modinfo e1000

# mkdir /mnt/sysroot/lib/modules/ -pv

# cp /lib/modules/`uname -r`/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/

注:lib/modules文件夹没有应事先创建

7、创建目标主机根下相应目录

# mkdir -pv /mnt/sysroot/{etc,etc/rc.d,boot,dev,bin,lib,sbin,home,root,var,usr,tmp,mnt,media,proc,sys}

8、为目标主机建立grub配置文件,让系统能够引导

# vim /mnt/boot/grub/grub.conf

default=0

timeout=3

title siyu

root (hd0,0)

kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init

initrd initramfs.img

注:这里initrd指令和kernel的值应该与第4步的文件名相同,因为这里init值是/sbin/init,所以需要创建/sbin/init文件并添加相应系统初始化命令,如果不想使用init文件,则改为init=/bin/bash即可,但无法实现网络功能

9、初始化系统文件init,并且赋予执行权限

# vim /mnt/sysroot/sbin/init

#!/bin/bash

echo -e "\t \033[34m linux \033[3m"

mount -n -t proc proc /proc

mount -n -t sysfs sysfs /sys

insmod /lib/modules/e1000.ko

ifconfig eth0 192.168.1.4/24

ifconfig lo 127.0.0.0/8

mount -n -t remount,rw /dev/sda2 /

/bin/bash

# chmod +x /mnt/sysroot/sbin/init

10、将sdb硬盘移植进入别的虚拟机中测试

新建一个虚拟机,结果如下,磁盘文件要与host主机新添加的磁盘相同

11、使用init配置文件并且网络配置成功

使用脚本一键执行

这里使用的宿主机根目录为sysroot,挂载至mnt下;boot分区为boot,挂载至/mnt/boot

# vim createsys.sh

#!/bin/bash

disk() {

echo -n ‘

n

p

1

+500M

n

p

2

+5G

wq‘| fdisk "$1"

sleep 3

kpartx -l "$1"

kpartx -af "$1"

partx -a "$1"

dmsetup remove_all

mke2fs -t ext4 "$1"1

mke2fs -t ext4 "$1"2

}

mounts() {

[ -d /mnt/boot/ ] || mkdir /mnt/boot

[ -d /mnt/sysroot/ ] || mkdir /mnt/sysroot

mount "$disk"1 /mnt/boot

mount "$disk"2 /mnt/sysroot

}

cpkernel() {

cp /boot/vmlinuz-`uname -r`  /mnt/boot/vmlinuz

cp /boot/initramfs-`uname -r`.img /mnt/boot/initramfs.img

grub-install --root-directory=/mnt /dev/sdb

}

cpcmd() {

bash /root/scripts/bincp.sh #bincp.sh In the /root/scripts/  Next

}

cpnetwork() {

[ -d /mnt/sysroot/lib/modules/ ] || mkdir /mnt/sysroot/lib/modules/ -pv

cp /lib/modules/`uname -r`/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/e1000.ko

}

mkdirs() {

mkdir -pv /mnt/sysroot/{etc,etc/rc.d,boot,dev,bin,lib,sbin,home,root,var,usr,tmp,mnt,media,proc,sys}

}

creategrub() {

echo "

default=0

timeout=3

title siyu

root (hd0,0)

kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init

initrd /initramfs.img" >> /mnt/boot/grub/grub.conf

}

inits(){

cat  >> /mnt/sysroot/sbin/init  <<  EOF

#!/bin/bash

echo -e "\t \033[34m linux \033[0m"

mount -n -t proc proc /proc

mount -n -t sysfs sysfs /sys

insmod /lib/modules/e1000.ko

ifconfig eth0 $1

ifconfig lo 127.0.0.0/8

mount -n -t remount,rw /dev/sda2 /

/bin/bash

EOF

chmod +x /mnt/sysroot/sbin/init

}

read -p "input a disk : " disk

disk "$disk"

mounts

cpkernel

cpcmd

mkdirs

cpnetwork

creategrub

read -p "input a ip/netmask: " network

inits "$network"

bincp脚本如下:

#!/bin/bash

#copy command and need so ---> /mnt/sysroot

target=/mnt/sysroot

main() {

if which $1 &> /dev/null ; then

echo "command such "

else

echo "no such command"

return 4

fi

}

bincommand() {

cmdpath=`which --skip-alias $1`

dirpath=`dirname $cmdpath`

[ -d $target ] || mkdir -p $target

[ -d ${target}${dirpath} ] || mkdir -p ${target}${dirpath}

[ -f ${target}${cmdpath} ] || cp $cmdpath ${target}${dirpath}

}

binlib() {

for i in `ldd $cmdpath | grep -o "/[^[:space:]]\{1,\}"` ; do

libdir=`dirname $i`

[ -d ${target}${libdir} ] || mkdir -p ${target}${libdir}

[ -f ${target}${i} ] || cp $i ${target}${libdir}

done

}

while true ; do

read -p "input a command: " cmd

if [[ "$cmd" == ‘quit‘ ]]; then

echo "quitting"

exit 0

fi

if [ $? -ne 0 ] ; then

echo "worng command"

continue

fi

main $cmd

bincommand $cmd

binlib

done

时间: 2024-10-06 22:03:54

系统裁剪centos6.8具有网络功能的相关文章

[马哥学习笔记]Linux系统裁剪之制作带网络功能的可启动linux

知识基础: 系统启动流程:POST-->BIOS(boot sequence)-->GRUB(bootloder(stage1:MBR;stage2:grub目录中))-->kernel(initrd)-->SHELL 制作步骤: 1.给目标磁盘分区 两个: 宿主机:/dev/sdb1 /dev/sdb2 将/dev/sdb1挂载至/mnt/boot,/dev/sdb2挂载至/mnt/sysroot mount /dev/sdb1 /mnt/boot mount /dev/sdb2

Android图片裁剪功能——调用系统裁剪

花了两天时间看了下android的图片裁剪功能的实现.其实刚开始做这个我挺虚的,以为整个功能都需要自己写出来,但查了些资料,发现android已经提供了裁剪功能,需要的话自己调用就成了.soga,这下轻松多了. 首先推荐几篇博客 Android大图片裁剪终极解决方案 要想弄明白裁剪功能,这系列博客非常重要,你可以不看我下面总结的,但你一定要看他这系列的几篇文章. Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪) 这篇也不错,比较喜欢他的注释.虽然也有些误导,比如说他有一段对setD

Linux系统裁减之,制作一个极度精简的Linux-3-为精简的系统增加网络功能和关机重启功能

第3章 为精简的Linux系统增加网络功能和开关机功 在阅读这篇博文之前,建议先阅读我的上两篇博文,而且最好按顺序阅读:(不然可能会觉得我写得不知所云,呵呵!) 第1篇:Linux系统裁减之,制作一个极度精简的Linux-1http://blog.51cto.com/linuxprince/2045703 第2篇:Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件http://blog.51cto.com/linuxprince/2046142 3.1 为

linux命令:系统裁剪之二 insmod装载模块

Linux系统裁剪笔记之二 1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教. 2.原理 大家都知道,操作系统的启动流程是(主要是Linux):POST->BIOS->MBR-kernel-->initrd-->sbin/init, POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是

Linux系统裁剪之四(自定义内核及busybox完成系统定制)

Linux系统裁剪之四(自定义内核及busybox完成系统定制) ·busybox busybox是一个二进制程序,可以模拟实现许许多多的Linux命令,busybox在编译安装完成之后会在我们系统的bin目录下生成一个名为busybox的二进制程序,其它的文件都是该二进制程序的软链接,几乎上百个命令都可以依靠这一个可执行程序来实现,还可以模拟几个shell,可以模拟实现我们Linux操作系统上bin和sbin目录下的很多命令,而且该文件所占的存储空间还非常的小,因此在一些存储设备容量非常小的环

Linux内核编译及系统裁剪之一

Linux内核编译方法详解及系统裁剪之一详解 我们的内核是由两部分组成的: 1,内核核心 核心文件的路径是/boot/vmlinuz-内核版本号 如下图-> 2,内核模块(ko:kernel object,内核对象) ko文件的路径是/lib/modules/内核版本号/下的所有文件 如下图-> 我们的内核有两种设计风格: 1,单内核设计风格 Linux的内核就属于是单内核设计风格的,不过Linux的单内核设计风格采用了微内核设计风格的模块化设计思想,所以使得我们的Linux内核的核心可以被设

Linux系统裁剪之二(Bash脚本编程之十二)

Linux系统裁剪之二(Bash脚本编程之十二) 系统函数库 ·Linux系统的启动流程     1,POST(加电自检) 计算机本身并不会执行程序,它只是一堆破铜烂铁,但是它可以在开机的时候先去载入一段程序,系统在刚刚启动的时候能够实现将某个ROM芯片中的程序映射到CPU能够寻址的地址空间中去,并且让CPU能够执行其中的指令,这些指令大部分都是用来做系统检测的,当检测完成后,如果系统中所有的基本硬件和核心硬件都没有问题的话,接下来就会根据BIOS中设定的系统启动次序(Boot Sequence

Linux学习笔记&lt;二十&gt;——系统裁剪之二

在系统裁剪之一的基础上,给系统添加挂载文件系统.关机重启.设置主机名.运行对应级别的服务脚本.启动终端.装载网卡驱动并启用网络等功能. 挂载文件系统 ①重新挂载根文件系统为可读写 vim 编辑/mnt/sysroot/etc/rc.d/rc.sysinit添加以下行 echo "Remount rootfs..." mount -n -o remount,rw / ②vim 编辑/mnt/etc/fstab /dev/sdb2       /       ext3    default

grub修复和安装及linux系统裁剪

一.grub修复 1.模拟grub.conf损坏 #mv grub.conf grub.conf.bak 重启,直接进入命令行模式 grub> 2.手动配置grub grub>root (hd0,0) (使用find和tab键自动补全功能,找到grub所在分区) grub>kernel /vmlinuz....  ro root=/dev/root(系统自己找不到的话,只能自己凭记忆)quiet grub>initrd /initramfs....img grub>boot