自定制Linux微型系统

本节我们将通过编译内核源码来搭建一个自定制的微型Linux系统,并且配上一个busybox来实现一些最基本的内容,最后我们在这基础上加上一个远程登录的功能。好了废话不多说,下面我们就来开始介绍吧。

准备工作

1、在宿主机中安装开发环境

[[email protected] ~]# yum -y groupinstall "Development tools" "Server Platform Development"
[[email protected] ~]# yum -y install "ncurses-devel"

2、在宿主服务器添加一块磁盘,作为微型Linux系统的主磁盘。

这里我添加了一块10G的磁盘/dev/sdb

首先创建2个分区(具体的操作过程这里就不给了,讲的实在太多了)

创建好之后对分区进行格式化

[[email protected] ~]# mke2fs -t ext4 /dev/sdb1
[[email protected] ~]# mke2fs -t ext4 /dev/sdb2

并创建挂载点进行挂载:在/mnt下创建boot和sysroot目录

[[email protected] ~]# mount  /dev/sdb1 /mnt/boot
[[email protected] ~]# mount  /dev/sdb2 /mnt/sysroot

创建grub

[[email protected] ~]# grub-install  --root-directory=/mnt  /dev/sdb

创建grub配置文件

[[email protected] ~]# vim /mnt/boot/grub/grub.conf
timeout=5
default=0
title Linux 8
    root (hd0,0)
    kernel /bzImage ro root=/dev/sda2 init=/sbin/init

OK,环境就先准备这些。

编译内核

首先要到网络去下载内核源码,这里我用的是linux-3.13.6的版本进行编译的

解压内核源码

[[email protected] ~]# tar xf linux-3.13.6.tar.xz -C /usr/src/

创建软连接

[[email protected] src]# ln -sv linux-3.13.6/  linux
[[email protected] src]# cd linux/

配置内核模块参数

[[email protected] linux]# make allnoconfig
[[email protected] linux]# make menuconfig

编译内核模块参数

先来一张整体的截图

1、选择64位内核

2、General setup --> Local Version - append to kernel release --> 自定义版本号

删除字符需要使用Ctrl+Backspace

General setup --> System V IPC    进程间通信的

3、支持动态装卸载模块

Enable loadable module support --> Module unloading

       

4、支持使用块层

Enable the block layer --> Block layer SG support v4

  

5、Processor类型和特性

Processor type and features

--> Processor family (Core2/newer Xeno) 处理器

--> Symetric muliti-processing support 对称多处理器

--> Muliti-core scheduler support 多核调度支持

6、总线

Bus options(PCI etc.)

-->PCI support

7、可支持文件类型和格式

Exectuable file formats /Emulations

--> Kernel support for ELF binaries 支持ELF格式

--> Kernel support for scripts starting with #! 支持以#!开头的脚本格式

8、网络

Networking support

-->Networking options

-->TCP/IP networking

9、驱动

Device Drivers

支持临时挂载文件系统

Device Driver Options

-->Maintain a devtmpfs filesystem to mount at /dev

--> Automount devtmpfs at /dev,after the kernel mount... 并自动挂载

硬盘相关

-->SCSI device support

-->SCSI device support

-->SCSI disk support

MTP相关

-->Fusion MPT device support

-->Fusion MPT ScsiHost drivers for SPI

-->Fusion MPT logging facility

USB接口配置

-->Input device support 键盘鼠标

-->USB support

-->xHCI HCD (USB3.0) support

-->EHCI HCD (USB2.0) support

-->OHCI HCD (USB1.1) support

-->UHCI HCD (most Intel and VIA) support

-->Mouse interface 鼠标接口

-->Keyboards 键盘

-->Mice-->PS/2 mouse ps2的鼠标

网卡驱动 (注意这里一定要与自己的主机的环境一致,不然网卡无法驱动)

Device Drivers

-->Network device support

-->Network core driver support 网络核心驱动支持

-->Ethernet driver support 以太网驱动支持

10.文件系统

File systems

-->The Extended 4 (ext4) filesystem 支持ext4文件系统

好了可以进行编译了

[[email protected] linux]#make –j  4

编译好之后

[[email protected] linux]#cp arch/x86_64/boot/bzImage /mnt/boot
编译安装busybox

BusyBox 是将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的嵌入式系统。

下面我们进行编译安装

[[email protected] ~]# tar xf busybox-1.22.1.tar.bz2

使用静态编译的模式,将依赖于glibc-static

[[email protected] ~]# yum -y install glibc-static,libcrypt
[[email protected] ~]# cd  busybox-1.22.1
[[email protected] busybox-1.22.1]# make menuconfig

只需要修改一项

BusyBox Settings

Build BusyBox as a static binary (no shared libs) 编译成为一个静态

[[email protected] busybox-1.22.1]# make && make install

会生成一个_install目录

将此目录中的所有复制到/mnt/sysroot目录中

cp -a * /mnt/sysroot

在/mnt/sysroot中创建根文件系统需要的一些目录

[[email protected] sysroot]# mkdir /mnt/sysroot/{proc,sys,dev,home,boot,root,tmp,var,lib64,mnt,media,etc}

提供相应的配置文件

/mnt/sysroot/etc/fstab    开机自动挂载文件

/dev/sda2    /    ext4    defaults    0 0
/dev/sda1    /boot    ext4    defaults    0 0
proc    /proc    proc    defaults    0 0
sysfs    /sys    sysfs    defaults    0 0
devpts  /dev/pts devpts  defaults  0 0

/mnt/sysroot/etc/inittab   提供初始化脚本的指定,开启伪终端的指定,定义ctrl+alt+del

::sysinit:/etc/rc.d/rc.sysinit
::respawn:/sbin/getty 19200 tty1
::respawn:/sbin/getty 19200 tty2
::respawn:/sbin/getty 19200 tty3
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

/mnt/sysroot/etc/shells   提供安全的shell环境

/bin/sh
/bin/ash
/bin/tcsh
/bin/bash
/sbin/nologin

/mnt/sysroot/etc/rc.d/rc.sysinit      系统进一步初始化脚本

#!/bin/sh  
 #    
 echo -e "Welcome to MiniLinux"    
 echo "Remouting root filesystem"    
 mount -n -o remount,rw /dev/sda2  /    #创建远程连接虚拟终端需要的pts文件夹    
 mkdir /dev/pts    #挂载fstab文件中的所有设备文件    
 mount -a    #创建设备文件    mdev -s
[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network

[ -z "$HOSTNAME" -o "$HOSTNAME" == ‘(none)‘ ] && hostname localhost || hostname $HOSTNAME    主机名相关 
ifconfig eth0 172.16.106.254           配置网卡信息   
ifconfig lo 127.0.0.1
for i in /etc/rc.start/*            
do           
    $i start     
done

/mnt/sysroot/etc/passwd提供账号

root:x:0:0::/root:/bin/sh

/mnt/sysroot/etc/shadow    提供密码

openssl passwd -1 -salt `openssl rand -hex 4`    生成密码

root:密码:..........

/mnt/sysroot/etc/profile    环境变量

export PS1=‘[\[email protected]\h \W]\$‘   
export PATH=‘/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin‘

以上步骤完成之后一个简单的可以基于tty登录的微型系统就OK了。

我们可以验证一下:

提供远程连接服务

在安装之前提供相应的名称解析库

其中基于文件的名称解析,所依赖的共享库文件有

/lib64/libnss_files-2.12.so

/lib64/libnss_files.so.2

/usr/lib64/libnss3.so

/usr/lib64/libnsspem.so

/usr/lib64/libnsssysinit.so

/usr/lib64/libnssutil3.so

创建目录并复制程序

# cp -a -d /lib64/libnss_files* /mnt/sysroot/lib64
# mkdir /mnt/sysroot/usr/lib64
# cp -a -d /usr/lib64/libnss3.so /mnt/sysroot/usr/lib64
# cp -a -d /usr/lib64/libnsspem.so /usr/lib64/libnsssysinit.so /usr/lib64/libnssutil3.so /mnt/sysroot/usr/lib64

提供nsswitch.conf配置文件

# cp /etc/nsswitch.conf /mnt/sysroot/etc/
passwd:     files   
shadow:     files    
group:      files
#hosts:     db files nisplus nis dns   
hosts:      files dns

编译安装dropbear

安装dropbear可以查看帮助文档

less INSTALL

安装步骤:

[[email protected] ~]# tar xf dropbear-2013.58.tar.bz2
[[email protected] ~]# cd dropbear-2013.58/

直接装在MiniLinux

./configure

注:

默认安装在/usr/local,可以自定义指定安装后的目录

如果需要配置在编译之前可以修改安装目录下的options.h

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

使用bincp.sh将dropbear相关命令移植到MiniLinux中

先提供bincp.sh的脚本

#!/bin/bash  
#    
target=/mnt/sysroot/

[ -d $target ] || mkdir $target

preCommand() {  
    if which $1 &> /dev/null; then    
    commandPath=`which --skip-alias $1`    
    return 0    
    else    
    echo "No such command."    
    return 1    
    fi    
}

commandCopy() {  
    commandDir=`dirname $1`    
    [ -d ${target}${commandDir} ] || mkdir -p ${target}${commandDir}    
    [ -f ${target}${commandPath} ] || cp $1 ${target}${commandDir}    
}

libCopy() {  
    for lib in `ldd $1 | egrep -o "/[^[:space:]]+"`; do    
    libDir=`dirname $lib`    
    [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}    
    [ -f ${target}${lib} ] || cp $lib ${target}${libDir}    
    done    
}

read -p "Plz enter a command: " command

until [ "$command" == ‘quit‘ ]; do

if preCommand $command ; then  
    commandCopy $commandPath    
    libCopy $commandPath    
  fi

read -p "Plz enter a command: " command  
done

dropbear的使用:启动dropbear

选项:

-d dsskeyfile

-r rsakeyfile

-F 在前台运行

-E 指定错误输出位置为标准错误输出

-s 禁止基于密码的认证,只能基于密钥的认证

-P 指定pid文件位置,默认/var/run/dropbear.pid

-p 指定家庭的地址和端口 [address:]port

-h 查看帮助

dropbearkey命令:创建dropbear所需的密钥文件

选项:

-t 加密算法    dss、rsa

-s 密码长度

-f 密钥位置

-h 查看帮助

注:密钥权限默认为600

创建目录

# mkdir -p /mnt/sysroot/etc/dropbear    #dropbear的密钥文件存放位置
# mkdir -p /mnt/sysroot/var/run    #pid文件所在的目录

创建dss形式的密钥文件

# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key

创建rsa形式的密钥文件,指定密钥长度为2048

# dropbearkey -t rsa -s 2048 -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key

好了这些完成之后我们的远程接入功能也应该可以实现了。可以测试一下

OK,登录成功。

本节的内容就讲到这里,欢迎大家批评指正!

时间: 2024-10-21 06:07:14

自定制Linux微型系统的相关文章

定制linux自动化安装镜像

定制linux自动化安装镜像 安装必须的软件 yum -y install createrepo mkisofs anaconda-runtime yum -y install rsync 制作镜像基本模型 mkdir /yousm/CentOS6.2                      #创建镜像目录 mount /dev/cdrom   /mnt                     #挂载现有的安装系统盘 /usr/bin/rsync -a --exclude=Packages/-

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

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

通过yocto给p1010rdb定制linux,并启动linux

一.通过yocto定制linux 1.安装yocto yocto只能在非root用户下编译,所以先新建一个用户. useradd chen  passwd -d chen 重启电脑进入chen用户. 给chen用户添加root权限,vim /etc/sudoers 第99行添加  chen   ALL=(ALL)   ALL chen ALL = NOPASSWD: /usr/bin/yum mkdir yocto  将光盘中的资料拷贝到yocto下,光盘名称(yocto soure iso).

根据自己喜好定制Linux系统

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

定制Linux镜像批量部署初始应用

主要用途: 自动安装操作系统(swap分区交互输入),系统安装后并自动执行一些自定义脚本 1.挂载光盘到/mnt下,拷贝内容到新建目录 mount /dev/cdrom /mnt mkdir /opt/iso cp -rT /mnt /opt/iso 2.修改isolinux.cfg文件 vim  /opt/iso/isolinux/isolinux.cfg default vesamenu.c32 改为 default linux  timeout 600          改为 timeou

订制linux微型系统

获取系统内核编译文件 [[email protected]_6 src]# pwd    将包解压到/usr/src目录下 /usr/src [[email protected]_6 src]# ln -sv linux-3.13.6/ linux [[email protected]_6 src]# ls debug  kernels  linux  linux-3.13.6    ==>创建一个软链接 进入linux目录,创建一个 .config文件, [[email protected]_

如何定制Linux外围文件系统?

本文由云+社区发表 作者:我是乖宝宝哦 一般来说,我们所说的Linux系统指的是各种基于Linux Kernel和GNU Project的操作系统发行版.为了掌握Linux操作系统的使用,了解 Linux操作系统的运作过程,理解内核与外围支撑系统的关系,加深对开源操作系统的认识,我决定造个轮子--自己定制一个Linux文件系统. 这里有两种实现方法: 直接自己实现init**\*(M1)*** 加载bios 的硬件信息-> 读取MBR –>执行Grub ->加载kernel–> 加

初涉定制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