设为首页 收藏本站
查看: 842|回复: 0

[经验分享] 系统裁剪centos6.8具有网络功能

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-30 10:26:14 | 显示全部楼层 |阅读模式
安装环境: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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307599-1-1.html 上篇帖子: 如何避免虚拟机克隆后网卡eth0变成eth1 下篇帖子: centos6.5挂载移动硬盘 网络
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表