手动编译内核+busybox+dropbear+nginx

我们需要先在宿主机上添加一个磁盘,然后,把这个磁盘做好分区和文件系统:

fdisk /dev/sdb

创建第一个分区:

n

p

1

+512M

创建第二个分区:

n

p

2

+10G

保存退出:

w

为分区提供文件系统:

kpartx /dev/sdb

为分区提供文件系统:

mke2fs -t ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb2

为他们在宿主机上提供目录挂载:

mkdir /mnt/boot
mkdir /mnt/sysroot

把分区挂载上:

mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot

然后,我们需要提供内核了,这时,我需要把内核进行手工编译,这个编译只是基于虚拟机上的硬件,日后需要编译,要根据自己主机的硬件情况进行选择驱动和功能模块:

tar xf linux-3.13.6.tar.xz -C /usr/src
cd /usr/src

为这个源码做上软连接:

ln -sv linux-3.13.6 linux
cd linux 
make allnoconfig(把内核编译的大多选项去掉,剩下一些基本的选项)
make menuconfig

然后,我们会进入对内核的功能和驱动进行选择:

(1)[*]64-bit kernel

(2)[*]Enable loadable module support

(3)-*-Eable the block layer

(4)Processsor type and features–>[*]Symmetric multi-processing support

                                                          [*]Multi-core scheduler support

                                                              Processor family(Core 2/newer Xeon)

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

(6)Executable file formats / Emulations –> [*]Kernel support for ELF binaries

                                                                         [*]Write ELF core dumps with partial segments

                                                                        <*> Kernel support for scripts starting with #!

(7)-*-Networking support –> Networking options –> <*>Unix domain sockets (这个选项,我们过后启动nginx需要)

                                                                                            [*] TCP/IP networking

(8)Device Drivers –> SCSI device support —>[*] SCSI device support

                                                                             [*] SCSI target support

                                                                             [*] SCSI disk support 

                                                                             [*] SCSI tape support

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

                                                                                  [*] Automount devtmpfs at /dev,after the kernel mounted the rootfs

                                    [*]Fusion MPT device support –> <*> Fusion MPT ScsiHost drivers for SPI

                                                                                             <*> Fusion MPT ScsiHost drivers for FC 

                                                                                             <*> Fusion MPT ScsiHost drivers for SAS

                                    [*] Network devcie support —>  [*] Network core driver support 

                                                                                            [*]Ethernet driver support –> [*]Intel devcies

                                                                                                                                             <*> Intel(R) PRO/1000 Gigabit Ethernet support

                                                                                                                                             <*> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support

                                         Input device support —>  [*] Mouse interface

                                                                                      [*]Keyboards

                                                                                      [*]mice

                                       [*]USB support —>  [*] Support for Host-side USB

                                                                         <*> EHCI HCD (USB 2.0) support

                                                                         <*> OHCI HCD (USB 1.1) support

                                                                          <*>OHCI support for PCI-bus USB controllers

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

                                [*] Use ext4 for ext2/ext3 file systems

这些选项弄好之后,退出并把这些选项设置保存下来!

编译压缩内核:

make -j 4

把编译好的内核放到移植的boot目录下

cp arch/x86_64/boot/bzImage /mnt/boot/

好了,我们开始进行把移植的主机生成bootloder和grub

grub-install --root-directory=/mnt/ /dev/sdb
cd /mnt/boot/grub/
vim grub.conf
timeout=5
defaults=0
title bwei linux 
            root (hd0,0)
            kernel /bzImage ro root=/dev/sda2 init=/sbin/init
:wq

为移植的系统提供需要的目录:

cd /mnt/sysroot
mkdir -p bin  boot  dev  etc  home  lib64 media  mnt  proc  root  sbin  sys  usr

用busybox提供移植的系统init程序和个程序:

tar xf busybox-1.22.1.tar.bz2 -C /usr/src
cd /usr/src/busybox-1.22.1
make menuconfig
busybox settings --> Build Options --> [*]Bulid BusyBox as a static binary (no share libs)
然后我们保存设置选项!
make -j 4
make install

安装完成之后,我们把_install/中sbin bin usr目录和目录下的文件都复制到需要移植的系统的目录下:

cp _install/sbin /mnt/sysroot
cp _install /bin /mnt/sysroot
cp _install/usr /mnt/sysroot

提供/etc下的目录:

mkdir /mnt/sysroot/etc/rc.d
mkdir /mnt/sysroot/etc/rc.start
mkdir /mnt/sysroot/etc/init.d

提供inittab文件:

cd /mnt/sysroot/
vim etc/inittab
::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
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -r -a 
(getty终端程序会把login程序调用,然后,进行用户名和密码进行验证)
:wq

提供/etc/profile给移植系统提供环境变量:

vim etc/profile 
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PS1='[\u@\h\W]\$'

:wq

给移植的系统挂载文件系统的配置文件:

vim etc/fstab
/dev/sda2       /       ext4    defaults        1 1
sysfs   /sys    sysfs   defaults        0 0
proc    /proc   proc    defaults        0 0
devpts  /dev/pts        devpts  defaults        0 0
/dev/sda1       /boot   ext4    defaults        0 0

:wq

为移植系统提供主机名:

mkdir etc/sysconfig
vim etc/sysconfig/network
HOSTNAME=www.bwei.com

提供系统初始化的脚本:

vim etc/init.d/rc.sysinit

#!/bin/bash
echo -e "\033[35mbwei linux\033[00m"
mount -n -o remount,rw /dev/sda2 /
mdev -s
mkdir /dev/pts
mount -a
[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && hostname localhost
hostname $HOSTNAME
ifconfig eth0 172.16.100.2 netmask 255.255.255.0 up
ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
for i in /etc/rc.start/S*
do
        $i start
done
:wq

给登录用户提供passwd shadow group文件:

etc/passwd:
root:x:0:0:root:/root:/bin/bash
bwei:x:501:501:bwei:/home/bwei:/bin/bash
nginx:x:498:498:nginx:/home/nginx:/bin/bash
etc/shadow:
(里面的密码加密是用这个命令写的:openssl passwd -salt `openssl rand -hex 8` -1 bwei)
root:$1$15a442a4$.N192u6UQi6hAJDFC1RTp0:16674:0:99999:7:::
bwei:$1$15a442a4$.N192u6UQi6hAJDFC1RTp0:16674:0:99999:7:::
nginx:$1$15a442a4$.N192u6UQi6hAJDFC1RTp0:16674:0:99999:7:::
etc/group:
root:x:0:
bwei:x:501:
nginx:x:498:

由于login程序依赖于nsswitch库文件,验证用户名,把库文件复制一份到移植的系统上:

cp /lib64/libnss* lib64/
cp /usr/lib64/libnss* usr/lib64/

为用户提供家目录:

mkdir home/nginx
mkdir home/bwei

我们需要使用一个程序移植脚本:

cp.sh脚本:
#!/bin/bash
read -p 'plz input a bin name:' bin
binname=`which $bin`
bincp()
{
        [ ! -d /mnt/sysroot`dirname $binname` ] && mkdir -p /mnt/sysroot`dirname $binname`
        cp $binname /mnt/sysroot`dirname $binname`
}
libcp()
{
        for i in `ldd $binname | grep -o '/[^[:space:]]\{1,\}'`;do
        [ ! -d /mnt/sysroot`dirname $i` ] && mkdir /mnt/sysroot`dirname $i`
        cp $i /mnt/sysroot`dirname $i`
        done
}
while true
do
        bincp
        libcp
        read -p 'do you want to cp again:' bin
        if [ $bin == 'quit' -o $bin == 'q' ];then
        exit 0
        fi
done

我们用bash ~/cp.sh

             bash

我们把bash移植过去.


然后,我们远程登录时,还要提供安全shell的配置文件:

vim etc/shells
/bin/bash
/bin/sh

我们开始编译和安装dropbear:

tar xf ~/dropbear-2013.58.tar.bz2
cd dropbear-2013.58
./configure
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

好了,当dropbear编译和安装完成后,我们需要把他的生成的程序移植

使用上面的cp.sh的脚本来进行移植:

bash ~/cp.sh

dbclient

dropbearkey

dropbear

把上面三个程序都移植后,需要提供一个启动dropbear的脚本:

vim /mnt/sysroot/etc/init.d/dropbear
#!/bin/bash
dbkeypath=/etc/dropbear
dsskey()
{
        [ ! -d $dbkeypath ] && mkdir $dbkeypath
        [ ! -f $dbkeypath/dropbear_dss_host_key ] && dropbearkey -t dss -f $dbkeypath/dropbear_dss_host_key
}
rsakey()
{
        [ ! -d $dbkeypath ] && mkdir $dbkeypath
        [ ! -f $dbkeypath/dropbear_rsa_host_key ] && dropbearkey -t rsa -s 2048 -f $dbkeypath/dropbear_rsa_host_key
}
start()
{
        dsskey
        rsakey
        pidof dropbear &> /dev/null
        if [ $? -eq 0 ];then
        echo "dropbear already start !!"
        else
        /usr/local/sbin/dropbear -p 22
        if [ $? -ne 0 ];then
        echo "dropbear start false !!"
        else
        echo "dropbear is starting !!"
        fi
        fi
}
stop()
{
        pidof dropbear &> /dev/null
        if [ $? -ne 0 ];then
        echo "dropbear alreay stop !!"
        esle
        killall dropbear
        if [ $? -ne 0 ];then
        echo "dropbear stop false !!"
        else
        echo "dropbear is stopping !!"
        fi
        fi
}
case "$1" in
"start")
        start
        ;;
"stop")
        stop
        ;;
"restart")
        stop
        start
        ;;
*)
        echo "plz input start|stop|restart"
esac
chmod +x /mnt/sysroot/init.d/dropbear
cd /mnt/sysroot/rc.start

为该脚本提供链接启动文件:

ln -sv ../init.d/dropbear ./S01dropbear

我们再来实现编译和安装nginx:

groupadd -r nginx
useradd -r -g nginx nginx
tar xf nginx-1.6.1.tar.gz
cd nginx-1.6.1
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --without-prce --without-http_rewrite_module
make 
make install

我们安装后,先在自己的机子上进行测试,成功后,才进行移植:

/usr/local/nginx/sbin/nginx
netstat -tnlp
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1681/nginx

我们看到这个记录,证明我们的nginx成功开启了,我们移植开始:

cp -a /usr/local/nginx /mnt/sysroot/usr/local

最后,我们可以为其提供脚本启动的,这个脚本只要修改一下上面的dropbear脚本就可以了!


我们还可以对我们的做好的目录一个备份,以免我们的我们的磁盘坏了,到时我们之前做的都没有了:

cd /mnt/sysroot/
find . | cpio -H newc -o | gzip -9 -n > /root/sysroot.gz

当我们需要把这个解压时,可以这样做:

gunzip /root/sysroot.gz
cpio -i < /root/sysroot



原创文章,作者:13-广州-杨过,如若转载,请注明出处:http://www.178linux.com/8255

(0)
13-广州-杨过13-广州-杨过
上一篇 2015-09-23
下一篇 2015-09-25

相关推荐

  • 1.初识linux

    1.计算机组成 计算机五大部件:运算器、控制器、存储器、输入设备、输出设备。对应实际情况大致如下: CPU CPU(Central Processing Unit)主要包含运算器、控制器;也包含寄存器、缓存用于辅助: CPU在同一时间能并行处理的二进制数的位数称为CPU字长。字长由CPU对外数据通路的数据总线条数决定。 运算器 运算器也称…

    Linux干货 2016-08-22
  • 文本处理sed的使用

    语法:sed【option】、、、‘script’ inputfile、、、 选项:         -n:不输出模式空间内容到屏幕,即不自动打印        -e: 多点编辑        -f:/PATH/SCRIPT_FILE: 从…

    Linux干货 2017-05-01
  • 浅谈群红包的实现

    前言:红包是支付的方式, 也是社交的延伸。群红包在这两块领域串联得很好, 表现尤为的浓墨重彩. 承接上两篇技术浅谈:1). 浅谈接龙红包的技术实现.2). 浅谈微信红包摇一摇的技术实现.这一次, 让我们谈谈群红包的技术实现. 一为是红包的分配算法, 二为竞抢的技术实现. 分配算法:最初玩群红包的时候, 并没有意识到分配算法的难度…

    Linux干货 2015-03-10
  • mariadb基础应用

    mariadb基础应用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干货 2016-12-16
  • linux-系统启动和内核管理

    一、Linux 组成及启动过程 Linux: kernel+rootfs    kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能      IPC:Inter Process Communication  &nbsp…

    Linux干货 2016-09-26
  • 文件权限的设置和文件的特殊权限及其命令使用

    1. linux的系统管理员很重要的任务就是管理自己服务器的文件,对于权限设置等级森严的linux文件系统,文件系统的访问权限管理自然也是linux管理员必不可少的一项技能。 在linux中文件的基本权限中:被分为三大项:文件拥有者,文件拥有组,其他人。 每一项中,用三位八进制的数字来代表文件是否可读,是否可写,是否可执行。并根据用户不同可以设置不同的uma…

    Linux干货 2016-08-05