手工制作一个超迷你Linux并架设web服务器

  • 2
  • 6,726 次
摘要

编译一个Linux内核,在此基础上实现ssh访问、web服务、bash环境

1、这里采取在Centos 6.5 X86_64的VMware的虚拟机上制作一个超小的Linux内核

2、然后在这个内核上提供一个busybox

3、然后制作用户可登录系统且有密码验证

4、最后在Centos 6.5 X86_64的VMware虚拟机上编译Nginx再移植到这个超小的Linux系统上

 


准备工作、在Centos虚拟机上新加一块硬盘,然后再新建一个Linux虚拟机

手工制作一个超迷你Linux并架设web服务器

手工制作一个超迷你Linux并架设web服务器

 

注意新建虚拟机的硬盘不是新建硬盘哦是共用已有Centos6.5虚拟机上新加的硬盘

然后在在Centos6.5虚拟机上对这个新加的硬盘进行分区和挂载

手工制作一个超迷你Linux并架设web服务器

[[email protected] ~]# fdisk /dev/sdb << EOF
n
p
1

+50M
n
p
2

+512M
w
EOF
[[email protected] ~]# mke2fs -t ext4 /dev/sdb1
[[email protected] ~]# mke2fs -t ext4 /dev/sdb2
[[email protected] ~]# mkdir -p /mnt/{boot,sysroot}
[[email protected] ~]# mount /dev/sdb1 /mnt/boot
[[email protected] ~]# mount /dev/sdb2 /mnt/sysroot
###下面是对新硬盘安装grub,不然等下Mini Linux都没办法启动。。。。
[[email protected] ~]# grub-install --root-directory=/mnt /dev/sdb
###下面是我的Grub启动配置文件
[[email protected] ~]# cat /mnt/boot/grub/grub.conf
default=0
timeout=5
title Mini Linux (Linux-3.13.6-LookBack-MiNi-01)
	root (hd0,0)
	kernel /bzImage ro root=/dev/sda2 init=/sbin/init quiet

###也可以用下面的命令直接下载我的
[[email protected] ~]# wget http://www.dwhd.org/wp-content/uploads/2014/08/grub.conf -O /mnt/boot/grub/grub.conf

一、编译个精简的Linux内核出来,本文使用的是linux-3.13.6.tar.xz这个版本的内核。

[[email protected] ~]# wget http://www.dwhd.org/ruanjian/linux-3.13.6.tar.xz
[[email protected] ~]# tar xf linux-3.13.6.tar.xz -C /usr/src
[[email protected] ~]# cd /usr/src/linux-3.13.6
[[email protected] linux-3.13.6]# mkae menuconfig
###可以参照下面的截图来选择menuconfig的选项
###如果不想这么麻烦可以直接下载我这边弄的.config文件到内核源码的目录下再适当修改也可以
[[email protected] linux-3.13.6]# wget http://www.dwhd.org/wp-content/uploads/2014/08/old.config -O /usr/src/linux-3.13.6/.config
###上面的config文件是没有无线模块的
[[email protected] linux-3.13.6]# wget http://www.dwhd.org/wp-content/uploads/2014/08/new.config -O /usr/src/linux-3.13.6/.config
###上面的config文件有启用了无限模块和所有无线网卡的驱动

####================================================================================================================================
###上面的步骤做好了就可以来编译了
[[email protected] linux-3.13.6]# make -j 4
###结束后会生成这个文件的/usr/src/linux-3.13.6arch/x86/boot/bzImage
[[email protected] linux-3.13.6]# cp /usr/src/linux-3.13.6/arch/x86/boot/bzImage /mnt/boot/

内核编译前menuconfig的选项参考图片集合


二、编译busybox,和配置一些基础文件

2.1编译busybox

[[email protected] linux-3.13.6]# cd ~/
[[email protected] ~]# wget http://busybox.net/downloads/busybox-1.22.1.tar.bz2
[[email protected] ~]# tar xf busybox-1.22.1.tar.bz2
[[email protected] ~]# cd busybox-1.22.1
[[email protected] busybox-1.22.1]# make menuconfig
###注意 需要选择 静态库的编译方法
###这里也需要选择 配置一些选项 如果图方便可以用这里已经生成的.config文件 然后直接编译
###如果用我的.config文件 就不用运行上面的make menuconfig这个命令了
[[email protected] busybox-1.22.1]# wget http://www.dwhd.org/wp-content/uploads/2014/08/busybox.config -O ~/busybox-1.22.1/.config
[[email protected] busybox-1.22.1]# make -j 4 && make install
###编译好之后 会把所有的结果都存放在/mnt/sysroot目录下了

2.2 配置基础文件

[[email protected] busybox-1.22.1]# cd /mnt/sysroot/
[[email protected] sysroot]# mkdir {boot,dev,etc/rc.d,home,lib64,meida,mnt,proc,root,sys,tmp,var,usr/lib64}
[[email protected] sysroot]# touch etc/fstab
[[email protected] sysroot]# touch etc/inittab
[[email protected] sysroot]# touch etc/rc.d/rc.sysinit
[[email protected] sysroot]# chmod +x etc/rc.d/rc.sysinit

下面来编辑/mnt/sysroot/etc/ 下的 fstab inittab rc.d/rc.sysinit文件

####下面是我的3个文件内容,
[[email protected] sysroot]# cat 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

[[email protected] sysroot]# cat etc/inittab
::sysinit:/etc/rc.d/rc.sysinit
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

[[email protected] sysroot]# cat etc/rc.d/rc.sysinit
#!/bin/sh
#########################################################################
# File Name: rc.sysinit
# Author: LookBack
# Email: [email protected]
# Version:
# Licence: GNU General Public Licence
# Created Time: Fri 22 Aug 2014 11:31:23 PM CST
#########################################################################
echo ""
echo -e "\033[31mWelcome\033[0m \033[36mTo\033[0m \033[32mLookBack\033[0m \033[31mMiNi\033[0m \033[36mLinux\033[0m"
echo ""
echo -e "\033[36mMount proc  /proc\033[0m"
mount -n -t proc proc /proc
echo ""
echo -e "\033[33mMount /dev/sda2  /   \033[0m"
mount -n -o remount,rw /dev/sda2 /
echo ""

这时候我们关闭当前的Centos6.5 虚拟机 然后去启动那个新建的Mini Linux 虚拟机,来看看效果

grub启动菜单界面

手工制作一个超迷你Linux并架设web服务器

系统启动界面

手工制作一个超迷你Linux并架设web服务器

直接按回车 进入系统试试(这里我还没有做login,等做了就需要帐号和密码才能进入系统了)

手工制作一个超迷你Linux并架设web服务器

来看看top命令

手工制作一个超迷你Linux并架设web服务器

来看看du命令

手工制作一个超迷你Linux并架设web服务器

下面来配置下网络

手工制作一个超迷你Linux并架设web服务器

然后看看是否有效,可以和其他主机进行联通了

手工制作一个超迷你Linux并架设web服务器


三、配置可以登录的Mini Linux

[[email protected] ~]# cp -a /etc/passwd /etc/shadow /etc/group /mnt/sysroot/etc/
[[email protected] ~]# cd /mnt/sysroot/etc/
[[email protected] etc]# ls -l
total 24
-rw-r--r--  1 root root  128 Aug 22 21:50 fstab
-rw-r--r--  1 root root  804 Jul  1 20:14 group
-rw-r--r--  1 root root  112 Aug 22 21:48 inittab
-rw-r--r--. 1 root root 1578 Jun 30 21:31 passwd
drwxr-xr-x  2 root root 4096 Aug 22 23:31 rc.d
----------. 1 root root  900 Jun 30 21:31 shadow
[[email protected] etc]# sed -i '2,$d' group passwd shadow
[[email protected] etc]# cat passwd group shadow
root:x:0:0:root:/root:/bin/sh
root:x:0:
root:$6$CGsqab6d$Cd.PnnWtlL5XZAyr9J2zoMqyJH1QodcDp1pQp0uZ1f0Cq4eq9.TMkSQU6IfpvYZEYc32.lmF0lKuQwavnC49a0:16251:0:99999:7:::
[[email protected] etc]# sed -i 's@/bin/bash@/bin/sh@' passwd
[[email protected] etc]# cat passwd
root:x:0:0:root:/root:/bin/sh
###这里说明下 经过证实 busybox支持SHA512的密码加密验证登录

###/mnt/sysroot/etc/inittab这个文件内容修改成下面这样的
[[email protected] ~]# cat > /mnt/sysroot/etc/inittab << EOF
::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:/bin/umount -a -r
EOF

下面来为这个Mini Linux 编译个bash去

[[email protected] ~]# mkdir -pv /mnt/sysroot/usr/share/
[[email protected] ~]# wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
[[email protected] ~]# tar xf bash-4.3.tar.gz
[[email protected] ~]# cd bash-4.3
[[email protected] bash-4.3]# ./configure --prefix=/mnt/sysroot --bindir=/mnt/sysroot/bin --sbindir=/mnt/sysroot/sbin --datadir=/mnt/sysroot/usr/share/ --enable-static-link --enable-alias --without-bash-malloc
####这里采取静态编译 直接将bash编译进MiniLinux 系统下
[[email protected] bash-4.3]# make -j 4 && make install
[[email protected] bash-4.3]# echo "export PS1='[\\u@\\h \\W]\\\$ '" >> /mnt/sysroot/etc/profile
[[email protected] bash-4.3]# mkdir -pv /mnt/sysroot/etc/sysconfig
[[email protected] bash-4.3]# echo "HOSTNAME=LookBack.linux.05hd.com" > /mnt/sysroot/etc/sysconfig/network
cat > /mnt/sysroot/etc/rc.d/rc.sysinit << EOF
#!/bin/sh
#
echo ""
echo -e "\033[31mWelcome\033[0m \033[36mTo\033[0m \033[32mLookBack\033[0m \033[31mMiNi\033[0m \033[36mLinux\033[0m"
#echo ""
#echo -e "\033[36mMount proc  /proc\033[0m"
#mount -n -t proc proc /proc
echo ""
echo -e "\033[33mMount /dev/sda2  /   \033[0m"
mount -n -o remount,rw /dev/sda2 /
echo ""
mount -a
mdev -s
echo ""

[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network
[ -z "\$HOSTNAME" -o "\$HOSTNAME" == '(none)' ] && hostname localhost || hostname \$HOSTNAME
EOF

手工制作一个超迷你Linux并架设web服务器

手工制作一个超迷你Linux并架设web服务器


四、为Mini Linux 添加远程登录的功能

4.1编译dropbear并移植到Mini Linux上

[[email protected] ~]# wget https://matt.ucc.asn.au/dropbear/dropbear-2014.65.tar.bz2
###如果官方的地址下载不了就用下面的地址下载吧
[[email protected] ~]# wget http://www.dwhd.org/wp-content/uploads/2014/08/dropbear-2014.65.tar.bz2
[[email protected] ~]# tar xf dropbear-2014.65.tar.bz2
[[email protected] ~]# cd dropbear-2014.65
[[email protected] dropbear-2014.65]# mkdir -p /mnt/sysroot/usr/local
[[email protected] dropbear-2014.65]# ./configure
[[email protected] dropbear-2014.65]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
[[email protected] dropbear-2014.65]# mkdir -p /mnt/sysroot/{var/run/,etc/dropbear}
[[email protected] dropbear-2014.65]# dropbear -V
Dropbear v2014.65
###至此 编译好了dropbear

[[email protected] ~]# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key
Generating key, this may take a while...
Public key portion is:
ssh-dss AAAAB3NzaC1kc3MAAACBAL5mRj170CQeiu0/GVRQmpfdjvIb6Y8hP/kbRGtewziRtyCsH5enJbC7XFfNAgEy7T/ASLZEpoTWDcBs4/ic8PIKRH8wVWQWUmzcs03AXl/3RRa8mpEVtXRyR0k1Wub6wYhSBVRtzqpUEuLUcLzHhzHm1s6RyrIr49ZlCVQQCxijAAAAFQCTC8zXFoudiQdLU6iE2n6J+IRaZQAAAIB46U1b6eCOKbdypKTyzNAQY+HHsor8FFIT4YCSnWFsfFWFHGu3C2f0m49delD2KcMALnXwHbnC0HY8NkeRcC+j/7GOH6rxHrIizO9alBdZDNT95gEobH+ovYv9ycb5rNWwFTaNwp+PIYu+bA7pSJpRER4PWkT7jZXEspwsL+ZCuQAAAIAAs7nRtkdLX1aaMj0B+QAz37cHAFP9e5bDpAYce3rpoqjBgITCLM2RBRe0zQjEew6p9YMCvD5Tjg+wITECFhq0CX8AH5/4N6z4opDVKoWblhjISvYgvUoIr3XnOKQ/FCMqlHz4UQeYIH7CvXpV8fCvaLF9AjXSYxtCd0NgT68ddw== [email protected]
Fingerprint: md5 71:67:ae:79:7c:dd:20:20:15:40:f0:5c:68:54:6b:85
[[email protected] ~]# dropbearkey -t rsa -s 2048 -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkyfZZYwdDkJ89NJY88tHs18c7yz+dqJ6eDb68YH8uC30FC+6Q9X7TJKqRp/xQO0QFblzoIqGgmftJ2O7n+6j7j3iv3mRkJaotWT7Avs8Ukko0PowPPSDXQ7Pz9UKHIPFQMDyyR4+M7ncdUTuVLKbIDBa+nDJF3ibdLX+eUEWSGa79lhviq8vBI0thSAg9Qd/wO0nEI2hyO/efaKFh92ZQImyYoDMsphh7WaO92GhyZuR4qZMSJzLRnlnboMi7wbYC/iStsD1q64PL84zeHqj7Q263B9e0OIRMm8JGM/VevweyVfQbP3Tgy6NXqXDSdP/9oas0kJop7yNjPzxu+Rgr [email protected]
Fingerprint: md5 d8:4a:5b:83:4b:8f:20:81:f2:58:87:ce:9c:33:27:87

###下面我们在真机上测试下

[[email protected] ~]# mkdir /etc/dropbear
[[email protected] ~]# cp -a /mnt/sysroot/etc/dropbear/dropbear_* /etc/dropbear/
[[email protected] ~]# dropbear -p 22022
[[email protected] ~]# ss -tnl
State      Recv-Q Send-Q                                         Local Address:Port                                           Peer Address:Port
LISTEN     0      128                                                        *:52523                                                     *:*
LISTEN     0      128                                                       :::111                                                      :::*
LISTEN     0      128                                                        *:111                                                       *:*
LISTEN     0      128                                                       :::80                                                       :::*
LISTEN     0      128                                                       :::22                                                       :::*
LISTEN     0      128                                                        *:22                                                        *:*
LISTEN     0      128                                                127.0.0.1:631                                                       *:*
LISTEN     0      128                                                      ::1:631                                                      :::*
LISTEN     0      100                                                      ::1:25                                                       :::*
LISTEN     0      100                                                127.0.0.1:25                                                        *:*
LISTEN     0      128                                                       :::443                                                      :::*
LISTEN     0      128                                                       :::56093                                                    :::*
LISTEN     0      100                                                       :::22022                                                    :::*
LISTEN     0      100                                                        *:22022                                                     *:* 

手工制作一个超迷你Linux并架设web服务器

4.2在Centos 6.5的虚拟机上已经可以运行dropbear了,现在我们来做程序移植
这里给出一份程序移植用的bash脚本,
脚本功能:能把当前系统上的程序执行文件 和依赖的库都转移到目标系统上的对应位置,脚本中默认位置是/mnt/sysroot(因为此文是将Mini Linux的根分区挂载在这个位置的)

###下载地址
wget http://www.dwhd.org/wp-content/uploads/2014/08/bincp.sh
###下面是脚本源码
#!/bin/bash
#########################################################################
# File Name: bincp.sh
# Author: LookBack
# Email: [email protected]
# Version:
# Licence: GNU General Public Licence
# Created Time: Sat 23 Aug 2014 16:04:44 CST
#########################################################################

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

手工制作一个超迷你Linux并架设web服务器

4.3我们挂起当前的Centos 6.5 虚拟机,再去启动这个Mini Linux
可以登录了,同时证明了 busybox 和dropbear 都是支持sha512加密存储密码的功能
手工制作一个超迷你Linux并架设web服务器

手工制作一个超迷你Linux并架设web服务器


五、编译并移植nginx到Mini Linux上

[[email protected] ~]# wget http://nginx.org/download/nginx-1.6.1.tar.gz
[[email protected] ~]# tar xf nginx-1.6.1.tar.gz
[[email protected] ~]# cd nginx-1.6.1
[[email protected] nginx-1.6.1]# useradd -s /sbin/nologin nginx
[[email protected] nginx-1.6.1]# ./configure --user=nginx --group=nginx --prefix=/usr/local --conf-path=/etc/nginx/nginx.cnf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --without-pcre --without-http_rewrite_module --without-http_geo_module --without-http_uwsgi_module --without-http_fastcgi_module --without-http_scgi_module --without-http_memcached_module --with-http_flv_module --with-http_mp4_module --without-http_proxy_module --without-http_gzip_module --with-http_ssl_module --with-http_spdy_module
[[email protected] nginx-1.6.1]# make && make install

编译好了之后 用上面的程序移植脚本 移植nginx

  • 本文由 发表于 2015年5月28日20:46:14
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:2   其中:访客  2   博主  0
    • Diaob 1

      大哥,我想知道如何用这样的Linux实现上网功能?我有一个类似的项目:https://github.com/Diaob/minimal
      但是貌似不支持上网啊,一旦ping www.baidu.com就显示bad address。别人说要将busybox和uclibc一起编译,可是我还是不会弄。
      来请教一下,博客不做多多支持!

        • lookback

          @ Diaob 可以实现上网,这地方的busybox是做移植的,就是因为没uclibc,如果确实需要,可以自己交叉编译出uclibc,然后再编译busybox吧