您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
马哥linux运维学习笔记-Linux系统裁减之五
发布时间:2018-10-21 15:02:14编辑:雪饮阅读()
使用busybox完成一个mini系统
所需附件:
内核编译
(1)解压内核源码后为解压出来的文件夹建立一个名为linux的软连接
tar -xvf linux-2.6.38.5.tar.bz2
ln -s linux-2.6.38.5 linux
(2)进入linux中将样例内核配置文件放入目录中并重命名为.config
mv kernel-2.6.38.1-i686.cfg .config
(3)内核编译参数配置
make menuconfig进入配置界面:
在路径General setup->() Local version - append to kernel release
设置版本名称如“-1.mlinux”
在路径Device Drivers-> SCSI device support 去除SCSI tape support的支持
在路径Device Drivers-> Network device support中去除Ethernet (1000 Mbit)、Ethernet (10000 Mbit)、PCMCIA network device support的支持
在路径Device Drivers-> Network device support> Ethernet (10 or 100Mbit)>中:
去除3COM cards的支持,AMD PCnet32 PCI support做进模块中而非内核
然后除了其下两行都保留支持,剩下的全部去除。
在路径File systems中去除The Extended 4 (ext4) filesystem、Reiserfs support、JFS filesystem support、XFS filesystem support的支持
(4)退出保存配置
退出保存配置并复制一份以备后续有重复使用的需求
cp .config /root/config-2.6.38.5-i686.cfg
(5)编译
单独编译网络模块
make drivers/net/pcnet32.ko
完全编译
make SUBDIR=arch/
安装grub
(1)安装
建立/mnt/boot目录和/mnt/sysroot目录
将/dev/hda1,/dev/hda2分别格式化为ext3并分别挂载到/mnt/boot和/mnt/sysroot
mkdir /mnt/boot
mkdir /mnt/sysroot
mke2fs -j /dev/hda1
mke2fs -j /dev/hda2
mount /dev/hda1 /mnt/boot
mount /dev/hda2 /mnt/sysroot
grub-install --root-directory=/mnt /dev/hda
(2)配置
vi /mnt/boot/grub/grub.conf
[root@localhost boot]# cat /mnt/boot/grub/grub.conf
default=0
timeout=5
title snowDrink linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/hda2
initrd /initrd.gz
准备boot引导
[root@localhost /]# cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz
编译busybox
(1)从上面的linux内核源码中提取头文件以弥补busybox的一个版本兼容性bug
[root@localhost ~]# tar xf busybox-1.20.2.tar.bz2
[root@localhost ~]# mkdir busybox-1.20.2/include/mtd
[root@localhost ~]# cp linux/include/mtd/ubi-user.h busybox-1.20.2/include/mtd/
(2)配置busybox编译参数与busybox编译
进入busybox源码解压后的目录中执行命令make menuconfig
在路径Busybox Settings->Build Options将Build BusyBox as a static binary (no shared libs)勾选为内核级别
然后退出界面使用make install进行编译
准备initrd
(1)初始化工作
复制busybox编译成功的所有文件并创建必备目录删除busybox带过去的linuxrc文件
[root@localhost busybox-1.20.2]# cp _install/* /tmp/initrd/ -a
[root@localhost busybox-1.20.2]# cd /tmp/initrd/
[root@localhost initrd]# mkdir proc sys mnt/sysroot dev tmp lib/modules etc -pv
mkdir: created directory `proc'
mkdir: created directory `sys'
mkdir: created directory `mnt'
mkdir: created directory `mnt/sysroot'
mkdir: created directory `dev'
mkdir: created directory `tmp'
mkdir: created directory `lib'
mkdir: created directory `lib/modules'
mkdir: created directory `etc'
[root@localhost initrd]# rm -rf linuxrc
创建所需要的设备文件
[root@localhost initrd]# mknod dev/console c 5 1
You have new mail in /var/spool/mail/root
[root@localhost initrd]# mknod dev/null c 1 3
(2)配置init
[root@localhost initrd]# vi init
[root@localhost initrd]# chmod +x init
[root@localhost initrd]# cat init
#!/bin/sh
#
echo "mounting proc and sys..."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo "load ext3 module..."
insmod /lib/modules/jbd.ko
insmod /lib/modules/ext3.ko
echo "Detect and export hardware infomation..."
mdev -s
echo "Mount real rootfs to /mnt/sysroot..."
mount -t ext3 /dev/hda2 /mnt/sysroot
echo "Switch to read rootfs..."
exec switch_root /mnt/sysroot /sbin/init
(3)复制依赖模块与打包
[root@localhost initrd]# modinfo jbd
filename: /lib/modules/2.6.18-308.el5/kernel/fs/jbd/jbd.ko
license: GPL
srcversion: 11842879E04FE2392B988CC
depends:
vermagic: 2.6.18-308.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f3504f2326dcdc995cc0b59af121112a9509d1d376cb3f07503612b0236e17947cc804b2e6909e3d31e223c8ae8dc3083a2d932d5329bef38115a
[root@localhost initrd]# modinfo ext3
filename: /lib/modules/2.6.18-308.el5/kernel/fs/ext3/ext3.ko
license: GPL
description: Second Extended Filesystem with journaling extensions
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
srcversion: 26DC008FC415305C5F65313
depends: jbd
vermagic: 2.6.18-308.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f3504f2326dddc995cc0b59af121112b66609f56f4d643dcbbde3384fc7aee2342f5b331f631b09d15ace08361a0e2dfa6ec1ec46718b122bde923
[root@localhost initrd]# cp /lib/modules/2.6.18-308.el5/kernel/fs/jbd/jbd.ko lib/modules/
[root@localhost initrd]# cp /lib/modules/2.6.18-308.el5/kernel/fs/ext3/ext3.ko lib/modules/
[root@localhost initrd]# find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz
实根
(1)初始化
[root@localhost busybox-1.20.2]# cp _install/* /mnt/sysroot/ -a
[root@localhost busybox-1.20.2]# cd /mnt/sysroot/
[root@localhost sysroot]# rm -rf linuxrc
[root@localhost sysroot]# mkdir boot root etc/rc.d/init.d var/{log,lock,run} proc sys dev lib/modules tmp home -pv
[root@localhost sysroot]# mknod dev/console c 5 1
[root@localhost sysroot]# mknod dev/null c 1 3
(2)准备inittab
vi etc/inittab
[root@localhost sysroot]# cat etc/inittab
::sysinit:/etc/rc.d/rc.sysinit
#免登陆
#console::respawn:-/bin/sh
#模拟bash
#console::respawn:-/bin/bash
#具有多会话登陆的bash
::respawn:/sbin/getty 9600 tty1
::respawn:/sbin/getty 9600 tty2
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
(3)准备rc.sysinit
[root@localhost sysroot]# vi etc/rc.d/rc.sysinit
[root@localhost sysroot]# chmod +x etc/rc.d/rc.sysinit
[root@localhost sysroot]# cat etc/rc.d/rc.sysinit
#!/bin/sh
#
echo -e "\t Welcome to \033[34mMageEdu Tiny\033[0m Linux"
echo "Set the hostname"
[ -f /etc/hostname ] && . /etc/hostname
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost
hostname $HOSTNAME
echo "mount proc and sys..."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo "Remount the rootfs..."
mount -t ext3 -o remount,rw /dev/hda2 /
echo "Detect and export hardward infomation..."
mdev -s
echo "Mount the other filesystem..."
mount -a
(4)准备fstab
[root@localhost sysroot]# vi etc/fstab
[root@localhost sysroot]# cat etc/fstab
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/hda1 /boot ext3 defaults 0 0
/dev/hda2 / ext3 defaults 1 1
(5)为系统提供一份root账号
[root@localhost sysroot]# grep -E "^root:" /etc/passwd > /mnt/sysroot/etc/passwd
[root@localhost sysroot]# grep -E "^root:" /etc/shadow > /mnt/sysroot/etc/shadow
[root@localhost sysroot]# grep -E "^root:" /etc/group > /mnt/sysroot/etc/group
(6)配置一个主机名
[root@localhost sysroot]# vi /mnt/sysroot/etc/hostname
[root@localhost sysroot]# cat /mnt/sysroot/etc/hostname
HOSTNAME=www.snowdrink.com
(7)提供欢迎信息
[root@localhost sysroot]# cp /etc/issue /mnt/sysroot/etc/
(8)提供网络功能
[root@localhost sysroot]# modinfo pcnet32
filename: /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko
license: GPL
description: Driver for PCnet32 and PCnetPCI based ethercards
author: Thomas Bogendoerfer
srcversion: F81443556AAE169CBF80F55
alias: pci:v00001023d00002000sv*sd*bc02sc00i*
alias: pci:v00001022d00002000sv*sd*bc*sc*i*
alias: pci:v00001022d00002001sv*sd*bc*sc*i*
depends: mii
vermagic: 2.6.18-308.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm: debug:pcnet32 debug level (int)
parm: max_interrupt_work:pcnet32 maximum events handled per interrupt (int)
parm: rx_copybreak:pcnet32 copy breakpoint for copy-only-tiny-frames (int)
parm: tx_start_pt:pcnet32 transmit start point (0-3) (int)
parm: pcnet32vlb:pcnet32 Vesa local bus (VLB) support (0/1) (int)
parm: options:pcnet32 initial option setting(s) (0-15) (array of int)
parm: full_duplex:pcnet32 full duplex setting(s) (1) (array of int)
parm: homepna:pcnet32 mode for 79C978 cards (1 for HomePNA, 0 for Ethernet, default Ethernet (array of int)
module_sig: 883f3504f2326fedc995cc0b59af121112c9240a0888050bfd72bf9d5ba34fa2b2d35ad9c599dc2b509f6fc0ce174c811a747cc9292d8a4d837983e5b14
[root@localhost sysroot]# modinfo mii
filename: /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko
license: GPL
description: MII hardware support library
author: Jeff Garzik <jgarzik@pobox.com>
srcversion: 16DCEDEE4B5629C222C352D
depends:
vermagic: 2.6.18-308.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f3504f23273dc995cc0b59af12111211c809f6f79961e4a84bc133b97d3d32bb217be64af3d1c09d11dbf04e53225fd698ce3def9448666b2a5a31
[root@localhost sysroot]# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko lib/modules/
[root@localhost sysroot]# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko lib/modules/
(9)移植bash
[root@localhost sysroot]# which bash
/bin/bash
[root@localhost sysroot]# ldd /bin/bash
linux-gate.so.1 => (0x00569000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x0097d000)
libdl.so.2 => /lib/libdl.so.2 (0x009a8000)
libc.so.6 => /lib/libc.so.6 (0x00821000)
/lib/ld-linux.so.2 (0x00802000)
[root@localhost sysroot]# cp /lib/libtermcap.so.2 lib/
[root@localhost sysroot]# cp /lib/libdl.so.2 lib/
[root@localhost sysroot]# cp /lib/libc.so.6 lib/
[root@localhost sysroot]# cp /lib/ld-linux.so.2 /mnt/sysroot/lib/
[root@localhost sysroot]# cp /bin/bash bin/
[root@localhost sysroot]# chmod +x bin/bash
测试
需要建立一个vmware9.0兼容redhat5.8x32的测试虚拟机接入我们的硬盘进行测试
关键字词:linux,裁剪
相关文章
- 马哥linux运维学习笔记-bash脚本编程之十四 信号捕捉
- bash脚本编程之十四 信号捕捉及系统管理之任务计划-任
- bash脚本编程之十四 信号捕捉及系统管理之任务计划-pi
- bash脚本编程之十四 信号捕捉及系统管理之任务计划-捕
- bash脚本编程之十四 信号捕捉及系统管理之任务计划-创
- 马哥linux运维学习笔记-Linux系统裁减之四 自定义内核
- Linux系统裁减之四 自定义内核及busybox完成系统定制-
- Linux系统裁减之四 自定义内核及busybox完成系统定制-
- bash脚本编程之十三(Linux系统裁减之三) 系统函数库
- bash脚本编程之十三(Linux系统裁减之三) 系统函数库-m