一步一步定制Linux系统

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后的内容
[[email protected] ~]# tail /mnt/sysroot/etc/passwd 
root:x:0:0:root:/root:/bin/bash
注:默认group过来的默认shell 是 /bin/bash  需要修改成/bin/sh
[[email protected] ~]# 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

 

[[email protected] 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

 

时间: 2024-10-12 08:56:10

一步一步定制Linux系统的相关文章

使用kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务的迷你主机

在运维工作中很多时候我们需要裁剪Linux系统,减少系统性能的消耗,提升系统服务的性能,以往通过光盘安装的Linux都是比较臃肿的,但出现这样的需求后,我可以对Linux进行重新编译再busybox工具移植即可实现,接下来我们一步一步实现kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务: 实现过程如下: 一.规划子主机的磁盘存储规划 1.添加一个大小为10G的硬盘 2.查询系统硬件信息参数: # lspci  00:00.0 Host bridge: Inte

根据自己喜好定制Linux系统

1.修改Linux系统的启动菜单的背景图片 默认情况下,Linux系统启动时,grub菜单的背景图片为/boot/grub/splash.xpm.gz,启动时如图1所示,我们可以修改linux系统的grub菜单背景图片,此处我们修改为windos系统图片(具体可以根据自己的喜好修改). 图一 在使用前需要将图片转化为Linux系统支持的图片格式.xpm,需要使用convert命令转化,如果系统没有convert命令则需要安装软件包ImageMagick.转化过程如下: [[email prote

私人定制—linux系统

自制Linux系统: 1.分区并创建文件系统 [[email protected] ~]# fdisk  /dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根/ 创建文件系统: [[email protected] ~]# mkfs.ext4 /dev/sdb1 [[email protected] ~]# mkfs.ext4 /dev/sdb2 2.创建挂载点,并挂载boot [[email protected] ~]# mkdir/mnt/boot

初涉定制linux系统之——自动化安装Centos系统镜像制作

最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建O__O "….. 本来想法是打算把需要的依赖包全找出来打包发给实施人员自己安装去,后来考虑到系统安装人员的安装方式不一致,分区及安装包的不统一会对之后的维护造成负担,干脆就决定做个自动化安装的镜像,并把需要的业务依赖包全打包进去 ok,首先我们来看看环境准备: 1.一台刚安装好的.符合业务要求的系统(博主选择的是minimal

【linux基础】21、定制linux系统

一.基于HOST(宿主机)制作一个简单的可启动的linux 1.给目标磁盘分区 两个: 宿主机上:/dev/sdb1,/dev/sdb2 /dev/sdb1挂载至/mnt/boot,/dev/sdb2挂载至/mnt/sysroot 2.安装grub至目标磁盘 # grub-install --root-directory=/mnt /dev/sdb 3.复制内核和initrd文件 # cp /boot/vmlinz-VERSION /mnt/boot/vmlinuz # cp /boot/ini

简单定制linux系统

这是一些学习笔记,存在不足之处,请指正. 平台:vmware 12 操作系统:centos5.1 硬盘 准备硬盘,20G 分区 fdisk /dev/sdb 格式化分区 mke2fs -j /dev/sdb1 mkswap /dev/sdb2 mke2fs -j /dev/sdb3 挂载硬盘 mkdir /mnt/{boot,sysroot} mount /dev/sdb1 /mnt/boot mount /dev/sdb3 /mnt/sysroot 生成grub grub-install --

使用 linux kernel +busybox 定制linux系统

目的: 了解linux的启动过程 主要内容: 1.grub 是启动程序的bootloader 2.linux-kernel 是linux的开源内核 3.busybox 是linux的工具集合 启动顺序: grub-> bzimage > initrd > init > chroot sbin/init (从内存镜像转换成rootfs)>/etc/inittab > fstab>etc/init.d/rcS 实验环境: 操作系统(编译使用): CentOS 7.4K

【linux基础】20、定制linux系统

一.基于HOST(宿主机)制作一个简单的可启动的linux 1.给目标磁盘分区 两个: 宿主机上:/dev/sdb1,/dev/sdb2 /dev/sdb1挂载至/mnt/boot,/dev/sdb2挂载至/mnt/sysroot 2.安装grub至目标磁盘 # grub-install --root-directory=/mnt /dev/sdb 3.复制内核和initrd文件 # cp /boot/vmlinz-VERSION /mnt/boot/vmlinuz # cp /boot/ini

自制linux系统——打造属于自己的linux系统

很多时候我们直接使用别人帮我们打包好的一个linux系统,总感觉某些工具或者命令多余或者效果不好,那我们是否可以自制一个比较符合自己需求的linux系统出来了,答案是肯定的,而且实现这个目标也并困难,需要的时间也不会太长.接下来就给大家分享如何自制的过程. 环境需求: 1.Vmware虚拟机 2.Centos6.8光盘镜像IS0文件 3.Vmware上安装一份Centos6.8的操作系统 第一步:装载一块新硬盘到虚拟机的Centos6.8系统上,并保证系统正常读取 [[email protect