ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxÈëÃÅÖ®¶¨ÖÆLinuxϵͳ---Kernel+Busybox

·¢²¼Ê±¼ä:2014-06-02 16:25:27À´Ô´:ºìÁª×÷Õß:velcbo
±àÒë¹ý³Ì£º±àÒëÄںˡ¢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Óû§Ìí¼Óµ½Ä¿±êÖ÷»úµÄpasswdºÍgroupÎļþÖÐ

7¡¢ÂÔ

8¡¢²âÊÔ

Æô¶¯Ä¿±êÖ÷»ú£¬Ê×ÏÈÅäÖúÃÍøÂçÊôÐÔ£¬²¢Ê¹ÓÃadduserΪÆäÌí¼ÓnginxÓû§ºÍnginx×é¡£

È»ºóʹÓÃÈçÏÂÃüÁîÆô¶¯nginx£¬¼´¿Éͨ¹ýä¯ÀÀÆ÷²âÊÔ·ÃÎÊ¡£

×÷Õߣºsweetweapen
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ