定制Linux系统


Linux入门之定制Linux系统---Kernel+Busybox_定制Linux

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

Linux入门之定制Linux系统---Kernel+Busybox_定制Linux_02


   编译过程:编译内核、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.创建软链接

[root@station75 src]#ln -sv  linux-3.13.6/ linux

3.生成配置文件

[root@station75linux]# make allnoconfig

4.配置

[root@station75linux]# 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

[root@station75linux]# cp arch/x86/boot/bzImage /mnt/boot/

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

[root@station75busybox-1.22.1]# cp -a _install/* /mnt/sysroot/

3.创建文件系统

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

[root@station75sysroot]# 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='[\u@\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/

配置文件

[root@station75 ~]# cp    /etc/nsswitch.conf  /mnt/sysroot/etc/

[root@station75 ~]# 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

[root@station75sysroot]# dropbearkey -t rsa -s 2048  -f etc/dropbear/dropbear_rsa_host_key

[root@station75sysroot]# 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启动脚本至该目录

[root@station75rc3.d]# ln -sv ../init.d/dropbear S70dropbear 路径很重要


[root@station75 rc.d]# ln -sv    init.d/dropbear dropbear.start

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

[root@station75 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


[root@station75 init.d]# ln -sv    ../init.d/nginx nginx.start

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

[root@station75 init.d]# ln -sv    ../init.d/nginx nginx.stop

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


6、提供用户

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

7、

8、测试

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

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