一步一步定制Linux系统


 

1、  添加15G 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

 

7make 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


 

2key文件需要运行起来必须挂载 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


 


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。