Kernel+Busybox

定制Linux系统

简单回顾下系统启动的相关内容

编译过程:编译内核、busybox

为系统上的新硬盘建立分区,这里根据需要先建立一个大小为200M的主分区作为新建系统的boot分区和一个512M的分区作为目标系统(即正在构建的新系统,后面将沿用此名称)的根分区;200M的分区格式化后将其挂载至/mnt/boot目录下;512M的分区格式化后将挂载至/mnt/sysroot目录;两个分区的文件系统均为ext4。

此处还可以添加第三个分区用于swap,大小为256MB或其它你喜欢的空间额度。记得使用mkswap将其创建为swap分区。

一、编译Linux内核

1.获取内核源码,解压至/usr/src

# tar xflinux-3.13.6.tar.xz -C /usr/src/

2.创建软链接

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

3.生成配置文件

[[email protected]]# make allnoconfig

4.配置

[[email protected]]# make menuconfig

主要的配置选项


64位系统支持


[*] 64-bit kernel


设置版本信息


General setup --->() Local version - append to kernel release


选择cpu类型


Processor type and features --->Processor family (Generic-x86-64) --->(X) Core 2/newer Xeon


支持多核心


Processor type and features --->[*] Symmetric multi-processing support


支持动态模块加载


[*] Enable loadable module support --->


PCI总线支持(cpu需要总线与其他模块沟通)


Bus options (PCI etc.) --->[*] PCI support


scsi硬盘驱动

(lspci查看硬盘类型)


Device Drivers ---> SCSI device support ---> <*> SCSI device supportà<*> SCSI disk support

另:Device Drivers ---> [*] Fusion MPT device support ---> <*> Fusion MPT ScsiHost drivers for SPI

<*> Fusion MPT misc device (ioctl) driver


文件系统


File systems ---> <*> The Extended 4 (ext4) filesystem


支持ELF(可执行文件)


Executable file formats / Emulations à [*] Kernel support for ELF binaries

<*> Kernel support for scripts starting with #!


I/O驱动


Device Drivers ---> Input device support ---> [*] Keyboards --->

[*] Mice --->

支持USB驱动Device Drivers ---> [*] USB support ---> <*> Support for Host-side USB à <*> EHCI HCD (USB 2.0) support

<*> UHCI HCD (most Intel and VIA) support

<*> OHCI HCD (USB 1.1) support


实时时钟


Device Drivers ---> [*] Real Time Clock --->


devtmfs


Device Drivers ---> Generic Driver Options --> [*] Maintain a devtmpfs filesystem to mount at /dev


网卡


协议[*] Networking support ---> Networking options ---> [*] TCP/IP networking

<*> Unix domain sockets

驱动Device Drivers ---> [*] Network device support ---> [*] Ethernet driver support (NEW) ---> <*> Intel(R) PRO/1000 Gigabit Ethernet support/ <*> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support

5.编译成bzImage

make bzImage –j # 指定使用几个进程编译

6.准备分区

准备分区 sda1 sda2 分别挂在至/mnt/boot/mnt/sysroot


/dev/sdb1


50M /mnt/boot


/dev/sdb2


512M /mnt/sysroot


swap


256M mkswap (82)

7.安装grub程序

grub-install--root-directory=/mnt /dev/sdb

8.

二、编译busybox

解决依赖关系:需要先安装glibc-staticfor CentOS(cd 2 中)

1.获取源码,解压

2.编译安装

make menuconfig

配置选项


静态编译

(不使用动态库)


Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)

3.编译安装

make        &&  make install

三、定制

1.复制bzImage到 /mnt/boot下

[[email protected]]# cp arch/x86/boot/bzImage /mnt/boot/

2.拷贝编译好的文件_install至/mnt/sysroot

[[email protected]]# cp -a _install/* /mnt/sysroot/

3.创建文件系统

主要是在/mnt/sysroot目录下创建完整的目录结构

[[email protected]]# mkdir -pv etc/rc.d var/log root home lib64 dev proc sys boot mntmedia tmp srv

4.配置grub配置文件

vim/mnt/boot/grub/grub.conf

default=0
timeout=5
title Mini Linux
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/sbin/init quiet

5.初始化

/etc/inittab /sbin/init的配置文件

::sysinit:/etc/rc.d/rc.sysinit 指定初始化脚本
::respawn:/sbin/getty 19200 tty1 指定启虚拟终端,需要验证帐号密码
::respawn:/sbin/getty 19200 tty2
::respawn:/sbin/getty 19200 tty3
::respawn:/sbin/getty 19200 tty4
::respawn:/sbin/getty 19200 tty5
::respawn:/sbin/getty 19200 tty6
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/rc.d/rc.sysdown 指定关机脚本

/etc/rc.d/rc.sysinit 初始化脚本

#!/bin/sh
echo "Welcome"
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z "$HOSTNAME" -o "HOSTNAME" =="none" ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME 设置主机名
mdev –s
mkdir /dev/pts
ifconfig lo 127.0.0.1
ifconfig eth0 172.16.37.11
mount –a
/etc/rc.d/*.start start

/etc/fstab 自动挂载

/dev/sda1 /boot ext4 defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devtpts /dev/pts devpts mode=620 0 0
/dev/sda2 / ext4 defaults 0 0
/dev/sda3 swap swap defaults 0 0

6.设定主机名

主机名设置在/etc/sysconfig/network内,创建这个目录,建立文件,

mkdir/mnt/sysroot/etc/sysconfig/network 在启动脚本中也需要读取整个文件

HOSTNAME=Mini-Linux

7.banner信息

创建文件/mnt/sysroot/ect/issue

Welcome to the world of linux

Kernel \r

8.设置PS1信息

#export PS1=‘[\[email protected]\h \W]\$‘

四、远程登录

使用dropbear远程登录(在host主机上实现),用虚拟终端登录时用户需要有家目录

1、获取源码,编译安装

./config 默认安装在usr/local下

# makePROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

# makePROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

2、移植dropbear到目标机

使用bincp.sh移植命令dropbeardropbearkey dbclient scp

这些命令会被存储于目标系统的/usr/local/sbin或/usr/local/bin目录中

3、dropbear登陆需要验证用户名,需名称解析

在宿主机上使用默认选项编译的dropbear将依赖nsswitch实现用户名称解析,因此,还需要为目标主机提供nss相关的库文件及配置文件

# cp -d /lib64/libnss_files*  /mnt/sysroot/lib64/

# cp -d /usr/lib64/libnss3.so    /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/

配置文件

[[email protected] ~]# cp    /etc/nsswitch.conf  /mnt/sysroot/etc/

[[email protected] ~]# vim    /mnt/sysroot/etc/nsswitch.conf

passwd:    files

shadow:    files

group:      files

hosts:      files dns

~

4、设置安全shell

安全起见,dropbear默认情况下仅允许其默认shell出现在/etc/shells文件中的用户远程登录,因此,这里还需要创建/etc/shells文件,并添加所有允许的shell

/bin/sh

/bin/hush

/bin/ash

/sbin/nologin

/bin/bash

5、生成密钥文件

在目标机上生成dropbearkey文件

mkdir/mnt/sysroot/etc/dropbear

[[email protected]]# dropbearkey -t rsa -s 2048  -f etc/dropbear/dropbear_rsa_host_key

[[email protected]]# dropbearkey -t dss -f etc/dropbear/dropbear_dss_host_key

6、准备一些目录

mkdir/mnt/sysroot/var/run  提供pid文件存放路径

mkdir/mnt/syroot/var/lock

7、为远程登录的用户提供伪终端设备文件

编辑/mnt/sysroot/etc/fstab,添加如下一行:

devtpts    /dev/pts  devpts  mode=620  0 0

创建目录 /# mkdir /mnt/sysroot/dev/pts

此处这样做无法正确生成会被覆盖,因此在初始化脚本中生成

8、测试调试

dropbear  -F -E 运行在前端

dev/pts为什么没有

9、使dropbear开机自动启动,关机关闭

提供服务脚本,放置在/etc/rc.d/init.d(需手工创建)下见附件

复制function函数

# cp/etc/rc.d/init.d/functions  /mnt/sysroot/etc/rc.d/init.d/

创建目录/etc/rc.d/rc3.d  链接 dropbear启动脚本至该目录

[[email protected]]# ln -sv ../init.d/dropbear S70dropbear 路径很重要

[[email protected] rc.d]# ln -sv    init.d/dropbear dropbear.start

`dropbear.start‘ ->    `init.d/dropbear‘

[[email protected] rc.d]# ln -sv    init.d/dropbear dropbear.stop

`dropbear.stop‘ -> `init.d/dropbear‘

到rc.sysinit中执行

关机脚本,在inittab中执行

#!/bin/sh

sync

sleep 2

sync

/etc/rc.d*.stop stop

/bin/umount -a -r

poweroff

五、Nginx

1、在宿主机编译安装nginx-1.2.5

实现安装pcre

# tar nginx-1.2.5.tar.gz

# cd nginx-1.2.5

# ./configure --prefix=/usr/local    --conf-path=/etc/nginx/nginx.conf    --error-log-path=/var/log/nginx/error.log --user=nginx --group=nginx    --http-log-path=/var/log/nginx/access.log    --without-pcre --without-http_rewrite_module    --without-http_geo_module --without-http_fastcgi_module  --without-http_uwsgi_module  --without-http_scgi_module    --without-http_memcached_module --without-http_upstream_ip_hash_module    --without-http_upstream_least_conn_module    --without-http_upstream_keepalive_module    --http-log-path=/var/log/nginx

# make

# make install

2、移植二进制程序及其依赖的库文件,方能实现其在目标系统上正常运行。建议使用前面的bincp.sh脚本进行

3、移植配置文件至目标系统

# mkdir  /mnt/sysroot/etc/nginx/

# cp /etc/nginx/  /mnt/sysroot/etc/nginx/

4、移植测试页面至目标系统,当然,也可以不采用下面的步骤而在目标系统上直接创建

# mkdir/mnt/sysroot/usr/local/html

设置测页index.html

5、提供服务脚本

脚本见附件,具体步骤见dropbear

[[email protected] init.d]# ln -sv    ../init.d/nginx nginx.start

`nginx.start‘ -> `../init.d/nginx‘

[[email protected] init.d]# ln -sv    ../init.d/nginx nginx.stop

`nginx.stop‘ -> `../init.d/nginx‘

6、提供用户

使用输出重定向将nginx用户添加到目标主机的passwd和group文件中

7、

8、测试

启动目标主机,首先配置好网络属性,并使用adduser为其添加nginx用户和nginx组。

然后使用如下命令启动nginx,即可通过浏览器测试访问。

时间: 2024-10-12 16:09:34

Kernel+Busybox的相关文章

浅谈编译kernel+busybox构建拥有远程ssh登录和web功能最小linux系统

实验环境win7+VM11.1 本文的源码的版本了 dropbear-2013.58.tar.bz2    busybox-1.21.1.tar.bz2 linux-3.13.6.tar.xz  nginx-1.4.7 大致过程总揽 1,硬件准备以及查看硬件设备型号(不用担心,这些都是VM虚拟出来的) 2,编译环境的配置以及下载内核源码以及编译内核 3,编译busybox,以及提供系统正常运行的配置文件,初步运行linux系统 4,编译安装dropbear提供ssh服务 5,安装nginx:提供

使用 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-裁剪Linux功能,编译/bin/login, busybox编译linux

linux功能:终端提示信息 [[email protected] ~]# cat /etc/issueRed Hat Enterprise Linux Server release 5.8 (Tikanga)Kernel \r on an \m [[email protected] ~]# uname -r2.6.18-308.el5[[email protected] ~]# uname -mx86_64[[email protected] ~]# linux功能:用户 nsswitch:

手动制作mini linux详细步骤—之一

8.2.1.mini linux内核编译 实验目的: 对Linux内核以非模块化手动编译,并借助busybox安装根文件系统,来制作最小化的linux系统.所谓非模块化,就是将各种所需的硬件驱动.支持的文件系统等直接编译进内核,所以initramfs也就不需要了,对于网卡驱动,我们采用模块化编译,当然也可以根据自己网卡型号,直接将驱动编译进内核:最终在我们的mini linux上能通过DHCP自动获取ip并实现基于dropbear的远程终端登录. 实验环境: 操作系统:centos6.8(x86

First Blood

1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 联系:所有的发行版都使用linux内核:都需要遵循GNU的GPL协定:所有的发行版都有自己的版本号,版本格式约定基本一样(主版本号.次版本号.发行号或修正号). 区别:发行版的本质区别,在于集成了不同版本的内核.库.程序的组合.不同发行版几乎采用了不同的包管理器(SLES.Fedora.openSUSE.centos.RHEL使用rmp包管理系统,包文件以rpm为扩展名:Ubuntu系列,Debian系列使用基于DPKG包管理

linux 基础知识

一.linux哲学思想 1.一切皆文件 2.由目的单一的小程序组成,组合小程序完成复杂任务 3.避免与用户交互(避免图形界面,图形界面更易出现bug,稳定性差) 4.配置数据保存于文本文件中(系统启动不了时,依旧可以打开.修复配置文件) 二.常见发行版本 slackware:SUSE Linux Enterprise Server (SLES) opensuse桌面debian: ubuntu,mintredhat:rhel: redhat enterprise linux           

测试一下纯文本

Linux系统入门 Linux系统管理 磁盘管理.文件系统管理 RAID基础原理.LVM2 网络管理:TCP/IP协议.Linux网络属性配置 程序包管理:rpm, yum 进程管理:htop, glance, tsar等 sed和awk Linux系统开机流程 内核管理基础知识:编译内核.模块 Linux系统裁剪 kernel+busybox 课外作业:LFS 回顾:find.特殊权限.if语句 Linux磁盘管理 I/O Ports: I/O设备地址: 一切皆文件: open(), read

【Linux基础】作业一

1.描述计算机的组成及其功能. >>>计算机由硬件,操作系统,软件三大部分组成. 一.其中硬件: 1.核心CPU(大脑处理中心) 2.必备电源(心脏动力来源),硬盘(仓库),内存(中转站),主板(协调中心),显示器(人机交互界面) 3.优化部件:网卡,声卡,显卡,风扇,光驱 4.输入输出设备:显示器,鼠标,键盘,麦克风音箱,闪存,蓝牙等等自添加. 二.其中系统: 操作系统是管理者,亦服务者,它还是一个执行者 1.Unix:AIX,BSD,FreeBSD,openBSD,HP-UX,Sol

7.20_计算机基础知识

计算机系统 计算机系统组成的两大部分 硬件系统 主机 中央处理器CPU{运算器,控制器} 内存储器{ROM,RAM} 外部设备 外部存储器{硬盘.软盘.光盘.磁带等} 输入设备{键盘.鼠标.扫描仪等} 输出设备{显示器.打印机.绘画仪等} 其他设备{调制解调器等} 软件系统    系统软件 操作系统 程序语言处理系统 数据库管理系统 服务程序{检查.诊断.调试程序} 应用软件 通用应用软件{如office办公软件包等} 专用应用软件{用户程序} 冯·诺依曼体系结构,1946提出,计算机五大结构: