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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统裁剪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


本文出自 “grep及正则详解” 博客,请务必保留此出处http://tingfengsiyu.blog.51cto.com/10042389/1877618

以上是关于系统裁剪centos6.8具有网络功能的主要内容,如果未能解决你的问题,请参考以下文章

八Linux精简系统和内核管理裁剪

全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

使用 jQuery/Java 裁剪和上传图像

使用Android系统自带裁剪功能,小图可能出现黑框的解决办法