1、 添加1个5G SCSI硬盘
/dev/sdb1 50M 放/boot
/dev/sdb2 1G 放 /sysroot
2、 挂载磁盘
mkdri /mnt/{boot,sysroot} mount /dev/sdb1 /mnt/boot mount /dev/sdb2 /mnt/sysroot
3、 提供bootloader
]# grub-install --root-directory=/mnt /dev/sdb
4、 开发环境
yum –y groupinstll “Development tools” “server Platform Development”
5、解压内核至usr/src目录中
tar xf /tmp/linux-3.10.67.tar.xz -C /usr/src ln -sv /usr/src/linux-3.10.67/ /usr/src/linux
6、编译内核
make help 查看编译帮助 make allnoconfig # - Newconfig where all options are answered with no make menuconfig 选择内核
内核选项:
64-bit kernel #编译成64位内核 因宿主机是64位系统,会移植应用程序到移植机内去所以内核必须选择64位。
Processor type and features ---Processorfamily—Generic-x86-64 #选择Cpu类型
Processor type and features -Symmetric multi-processingsupport #选择对称多核支持
Enable loadable module support --Module unloading # 开启动态模块加载
Bus options(PCI etc.)—PCI support 打开PCI支持
Device Drivers --SCSIdevice support—SCSI device support—SCSI disk support
lspci查看pci信息
Device Drivers --FusionMPT device support –Fusion MPT ScsiHost drivers for SPI
FusionMPT misc device(ioctl) driver
FusionMPT logging facility 日志功能
#Device Drivers --FusionMPT device support –Fusion MPT ScsiHost drivers for FC #光纤 不用选
#Device Drivers --FusionMPT device support –Fusion MPT ScsiHost drivers for SAS #SAS不用选
Device Drivers---Input device support –keyboards—ATkeyboard #键盘驱动
Mice--- PS/2 mouse #ps/2鼠标,同时在找到USB support
Device Drivers—USB support --Support for Host-sideUSB
其中 Xhci HCD (USB3.0) support #usb3.0
EHCI HCD (USB2.0) support #usb2.0
OHCI HCDsupport #usb1.0
UHCI HCD (mostIntel and VIA ) support #usb1.0
File systems ---The Extended 4(ext4) filesystem #可以同时把ext3,ext2也启动
Executablefile formats /Emulations –kernel support for ELF binaries #启用ELF支持
Executablefile formats /Kernel support for scripts starting with #! #启用脚本支持
Device Drives –Generic Driver Options – Maintain a devtmpfsfilesystem to mount at /dev
7、make bzImage
编译完成生成内核文件
arch/x86/boot/bzImage cp arch/x86/boot/bzImage /mnt/boot
8、提供grub.conf文件
defalut=o timeout=2 title minilinux (3.10.67) root(hd0,0) kernel /bzImage ro root=/dev/sda2 init=/bin/init (groub 下手动加载方法 1、root(hd0,0) 2、find / 3、kernel /bzImage ro root=/dev/sda2 4、 )
9、创建sysroot
mkdir/mnt/sysroot/{etc,proc,sys,dev,bin,sbin,lib,lib64,tmp,home,root,mnt}
创建复制脚本
vim bincp.sh #!bin/bash # target=/mnt/sysroot cmndcopy(){ if ! which $1 &> /dev/null;then return 1 fi cmnd=$(which --skip-alias $1) cmndpath=$(dirname $cmnd) [ -d $target/$cmndpath ] || mkdir -p $target/$cmndpath [ -e $target/$cmnd ] || cp $cmnd $target/$cmnd return 0 }
libcopy() { libpath=$(dirname $1) [ -d $target/$libpath ] || mkdir -p $target/$libpath [ -e $target/$1 ] || cp $1 $target/$1 } read -p "PLZ enter acommand:" binary until [ "$binary" == "quit" ]; do cmndcopy $binary retval=$? if [ $retval -eq 0 ];then binary=$(which --skip-alias $binary) for lib in $(ldd $binary | grep -o"/[^[:space:]]*lib[^[:space:]]*");do libcopy $lib done else read -p "$binary is notcorrect,plz enter again:" binary continue fi read -p "PLZ enter a command(quit for quiting):" binary done
10、创建ini 文件并添加执行权限# chmod +x /mnt/sysroot/sbin/init
vim /mnt/sysroot/sbin/init #!/bin/bash # echo -e "\twelcome to \033[31mxulinux\033[0m linux" mount -n -t proc proc /proc mount -n -t sysfs sysfs /sys mount –n –t devtmpfsnone /dev/ mount -n -o remount,rw /dev/sda2 //bin/bash
11、 udev 动态创建 设备文件
添加内核参数:Device Drives –GenericDriver Options – Maintain a devtmpfs filesystem to mount at /dev
init 文件添加一条:mount –n –t devtmpfs none /dev/
12、添加网络功能
使用 lspci命令查看 网卡型号
使用lsmod查看网卡模块名
内核选项添加支持网络功能
Networking support---Networkingoptions—TCP/IP networking-IP:multicasting #多播
Networking support---Networkingoptions—TCP/IP networking-IP:advanced router #高级路由
内核选项添加支持网卡驱动
Device Drivers-Network devicesupport-- Ethernet driver support (NEW) ---> Intel(R) PRO/1000 Gigabit Ethernetsupport #e1000 网卡支持 为加快编译速度其他驱动全部都可以取消掉只留一项。
重启测试:
13、使用busybox
将现有文件系统备份以备以后用到:
find . | cpio –o –H newc –quiet >/root/sysroot.img.2
umount /mnt/sysroot
如果有进程占用无法卸载可使用
fuser –km /mnt/sysroot 然后格式化: mke2fs -t ext4 /dev/sdb2
编译安装 busybox (静态方式)
静态方式依赖 glibc-static glibc-utils tar xf busybox-1.22.1.tar.bz2 make menuconfig Busybox Settings ---> General Configuration ---> #通用配置保存默认即可 Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs) #将BusyBox 编译成静态二进制文件不 依赖任何动态库 Installation Options ("makeinstall" behavior) ---> (./_install) BusyBox installation prefix(NEW) #BusyBox安装路径默认安装在当前目录下_install文件夹中可修改
make #make 最后可能会报错可忽略直接make install make install
在busybox 目录下已经生成 _install 目录
可使用 chroot _install /bin/sh 命令测试
将 _install 目录下所有文件按原属性复制到sysroot目录下
cp –a _install/* /mnt/sysroot
完善busybox 目录
mkdir –pv /mnt/sysroot/ {proc,sys,dev,boot,var/log,tmp,etc} 在/mnt/sysroot/etc/目录下创建 符合Busybox规范的inittab 文件 vim /mnt/sysroot/etc/inittab ::sysinit:/etc/rc.d/rc.sysinit #指定初始化脚本 console::respawn:-/bin/sh #指定终端 ::ctrlaltdel:sbin/reboot #ctrl+alt+del 重启 ::shutdown:/bin/umount -a –r #安全关机(卸载挂载) 创建 sysinit脚本 vim /etc/rc.d/rc.sysinit #!/bin/sh echo -e "\twelcome to\033[31mXu\033[0m Linux " echo -e "Remounting the rootfilesystem..." mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t devtmpfs none /dev mount -n -o remount,rw /dev/sda2 /
echo -e "Creating the specialfiles..." /sbin/mdev -s
添加执行权限:
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
重新启动成功,功能正常 ,可使用poweroff关机
重新打开宿主机 为目标机提供配置
1、修改/mnt/sysroot/inittab文件提供多终端
::sysinit:/etc/rc.d/sysinit #指定初始化脚本 tty1::askfirst:/bin/sh #用户回车激活终端 最多可激活6个 tty2::askfirst:/bin/sh tty3::askfirst:/bin/sh tty4::askfirst:/bin/sh tty5::askfirst:/bin/sh tty6::askfirst:/bin/sh ::ctrlaltdel:sbin/reboot #ctrl+alt+del 重启 ::shutdown:/bin/umount -a -r #安全关机(卸载挂载)
2、配置用户验证功能 为etc 目录提供 shadow,passwd,group 文件
grep “^root” /etc/passwd >/mnt/sysroot/etc/passwd #使用本机root用户信息创建busybox root用户 grep “^root” /etc/group >/mnt/sysroot/etc/group #使用本机root组创建busybox root组 grep后的内容 [root@localhost ~]# tail /mnt/sysroot/etc/passwd root:x:0:0:root:/root:/bin/bash 注:默认group过来的默认shell 是 /bin/bash 需要修改成/bin/sh [root@localhost ~]# tail /mnt/sysroot/etc/group root:x:0:
mnt/sysroot/etc/passwd 文件需要添加密码
方法一:直接切换至busybox使用内置命令passwd 生成密码
chroot /mnt/sysroot/ /bin/sh #切换至busybox passwd root #使用busybox内置命令修改密码
方法二:使用openssl 手动生成密码:
openssl passwd -1 –salt`openssl rand –hex 4 `
grep “^root” /etc/shadow > /mnt/sysroot/etc/passwd
将生成的密码替换中间第二段
/mnt/sysroot/etc/passwd 权限必须为400 或者000
chmod 400 /mnt/sysroot/etc/passwd
编辑mnt/sysroot/inittab 文件
修改/mnt/sysroot/inittab文件提供多终端
::sysinit:/etc/rc.d/sysinit #指定初始化脚本 ::respawn:/sbin/getty 9600 tty1 #getty自动调用login ::respawn:/sbin/getty 9600 tty2 ::respawn:/sbin/getty 9600 tty3 ::respawn:/sbin/getty 9600 tty4 ::respawn:/sbin/getty 9600 tty5 ::respawn:/sbin/getty 9600 tty6 ::ctrlaltdel:sbin/reboot #ctrl+alt+del 重启 ::shutdown:/bin/umount -a -r #安全关机(卸载挂载)
3、配置主机名 并激活网络
mkdir /mnt/sysroot/etc/sysconfig vim /mnt/sysroot/etc/sysconfig/network HOSTNAME=XU 设置/mnt/sysroot/etc/rc.d/sysinit
添加:
echo -e "set the hostname ..." [ -r /etc/sysconfig/network ] && source/ett/sysconfig/network [ -n $HOSTNMAE ] && hostname $HOSTNAME ||hostname localhost
创建:/mnt/sysroot/etc/issue文件
内容:
welcome xu linux
kernel \r
14、 使用dropbear 提供SSH访问
tar xf dropbear-2013.58.tar.bz2 ./configure make make install
默认生成文件在 /usr/local/bin 目录下
dbclient dropbearconvert dropbearkey
三个文件
通过上回使用的脚本 移植 三个程序到系统中
使用 ]# chroot /mnt/sysroot/ /bin/sh
测试命令有没有移植成功如果移植成功
则在 移植系统上创建/etc /dropbear 目录
mkdir /etc/dropbear
使用dropbearkey 生成三个文件
]# dropbearkey -t dss -f/mnt/sysroot/etc/dropbear/dropbear_dss_host_key ]#dropbearkey -t rsa -s 2048 -f/mnt/sysroot/etc/dropbear/dropbear_rsa_host_key
上2个key文件需要运行起来必须挂载 至etc/fstab文件中
所以创建 vim /etc/fstab文件
/dev/sda1 /boot ext4 defaults 0 0 /dev/sda2 / ext4 defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 none /dev devtmpfs defaults 0 0 devpts /dev/pts devpts mode=620 0 0 修改 /mnt/sysroot/etc/rc.d/sysinit 添加一条 : mkdir /dev/pts 定义安全shell vim /mnt/sysroot/etc/shells ~ /bin/sh /bin/ash /bin/hush /bin/bash
/
usr/local/sbin/dropbear –F –E #开启dropbear服务
提供nsswitch服务:
复制nsswitch相关的文件复制到系统中
/mnt/sysroot/etc/nsswitch.conf passwd:files shadow:files group:files hosts:files dns cp –d /lib64/libnss_files* /mnt/sysroot/lib64/ mkdir /mnt/sysroot/usr/lib64 cp -d/usr/lib64/libnss3.so /usr/lib64/libnss_files.so/mnt/sysroot/usr/lib64 mkdir /var/run
修改/mnt/sysroot/etc/rc.d/sysinit
vim /mntsysroot/etc/rc.d/sysinit
echo –e “Moutingthe rest …” mount –a
远程连接成功:
总结:
/mnt/sysroot/etc/rc.d/sysinit文件
#!/bin/sh echo -e "\twelcome to \033[31mXu\033[0m Linux " echo -e "Remounting the root filesystem..." mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t devtmpfs none /dev mount -n -o remount,rw /dev/sda2 / echo -e "Creating the special files..." /sbin/mdev -s mkdir /dev/pts echo -e "Mouting the rest.." mount -a echo -e "set the hostname ..." [ -r /etc/sysconfig/network ] && source/etc/sysconfig/network [ -n $HOSTNMAE ] && hostname $HOSTNAME ||hostname localhost echo -e "activate the network..." /sbin/ifconfig lo 127.0.0.1 up /sbin/ifconfig eth0 172.16.10.15 up
[root@localhost etc]# vim inittab
::sysinit:/etc/rc.d/sysinit ::respawn:/sbin/getty 9600 tty1 ::respawn:/sbin/getty 9600 tty2 ::respawn:/sbin/getty 9600 tty3 ::respawn:/sbin/getty 9600 tty4 ::respawn:/sbin/getty 9600 tty5 ::respawn:/sbin/getty 9600 tty6 ::ctrlaltdel:sbin/reboot ::shutdown:/bin/umount -a -r