编译内核+BusyBox定制一个Linux提供ssh和web服务【转】
转自:http://chenpipi.blog.51cto.com/8563610/1390874
本次试验大致规划和步骤:完全定制一个linux系统;能让其远程登录和提供web服务。
1、添加一块空闲磁盘
2、下载编译内核
3、并为空闲磁盘安装grub
前提准备:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@soul ~] # fdisk /dev/sdb 分区 Command (m for help ): p Disk / dev / sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors / track, 1305 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical / physical): 512 bytes / 512 bytes I / O size (minimum / optimal): 512 bytes / 512 bytes Disk identifier: 0x4e977ad9 Device Boot Start End Blocks Id System / dev / sdb1 1 7 56196 83 Linux / dev / sdb2 8 73 530145 83 Linux / dev / sdb3 74 107 273105 82 Linux swap / Solaris #格式化操作 [root@soul ~] # mke2fs -t ext4 /dev/sdb1 [root@soul ~] # mke2fs -t ext4 /dev/sdb2 [root@soul ~] # mkswap /dev/sdb3 [root@soul ~] # mkdir -pv /mnt/{boot,sysroot} [root@soul ~] # mount /dev/sdb1 /mnt/boot/ [root@soul ~] # mount /dev/sdb2 /mnt/sysroot/ [root@soul ~] # grub-install --root-directory=/mnt /dev/sdb 安装grub [root@soul ~] # ls /mnt/boot/ grub lost + found [root@soul ~] # 上述信息显示安装成功 |
其中需要一个脚本来移植命令和所依赖的库文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#脚本可能不完善;不过可用 #!/bin/bash aimDir = / mnt / sysroot cmdInput() { if which $cmd &> / dev / null;then cmdPath = `which - - skip - alias $cmd` else echo "No such command." return 5 fi } cpCmd() { cmdDir = `dirname $cmdPath` [ - d ${aimDir}${cmdDir} ] || mkdir - p ${aimDir}${cmdDir} [ - f $cmdPath ] && cp $cmdPath ${aimDir}${cmdDir} } cpLib() { for libPath in `ldd $cmdPath | grep - o "/[^[:space:]]\{1,\}" `;do libDir = `dirname $libPath` [ - d ${aimDir}${libDir} ] || mkdir - p ${aimDir}${libDir} [ - f $libPath ] && cp $libPath ${aimDir}${libDir} done } echo "You can input [q|Q] quit." while true;do read - p "Enter a command: " cmd if [[ "$cmd" = ~ \(|q|Q|\) ]];then echo "You choose quit." exit 0 fi cmdInput [ $? - eq 5 ] && continue cpCmd cpLib [ $? - eq 0 ] && echo - e "\033[36mCopy successful.\033[0m" done |
一、编译内核
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
[root@soul ~] # ls anaconda - ks.cfg install.log install.log.syslog linux - 3.13 . 8.tar .xz [root@soul ~] # 这里下载的是目前最新的稳定版 [root@soul ~] # tar xf linux-3.13.8.tar.xz -C /usr/src/ [root@soul ~] # ln -sv /usr/src/linux-3.13.8/ /usr/src/linux 创建链接 ` / usr / src / linux ' -> `/usr/src/linux-3.13.8/' [root@soul ~] # cd /usr/src/linux [root@soul linux] # #编译 [root@soul linux] # make allnoconfig 清除所有选择;然后重新选择定制 HOSTCC scripts / basic / fixdep HOSTCC scripts / kconfig / conf.o SHIPPED scripts / kconfig / zconf.tab.c SHIPPED scripts / kconfig / zconf.lex.c SHIPPED scripts / kconfig / zconf. hash .c HOSTCC scripts / kconfig / zconf.tab.o HOSTLD scripts / kconfig / conf scripts / kconfig / conf - - allnoconfig Kconfig # # configuration written to .config # [root@soul linux] # make menuconfig #下面的选择没办法列出来;给个大概 1 、选择CPU类型 2 、支持动态模块装载 3 、PCI总线支持 4 、硬盘驱动 5 、文件系统 6 、可执行文件格式 7 、I / O驱动;USB驱动 8 、devtmpfs支持 9 、选择网络支持以及网卡驱动 #结束后备份下配置文件;然后编译成bzImage格式 [root@soul linux] # cp .config /root/config-3.13.8-x86_64 [root@soul linux] # make bzImage [root@soul linux] # cp arch/x86/boot/bzImage /mnt/boot/ |
二、安装BusyBox
BusyBox 是一个遵循GPL协议、以自由软件形式发布的应用程序。Busybox在单一的可执行文件中提供了精简的Unix工具集(例如shell、init、getty、login...),可运行于多款POSIX环境的操作系统,例如Linux(包括Android)、Hurd、FreeBSD等等。
1、安装;官方下载地址:http://www.busybox.net/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#因为稍后需要编译busybox为静态二进制程序;所以需要实现安装glibc-static和libmcrypt-devel; #glibc-static在安装光盘的第二张光盘上;可以挂在安装;也可以到网上下载 [root@soul busybox - 1.22 . 1 ] # mount /dev/cdrom /media/ mount: block device / dev / sr0 is write - protected, mounting read - only [root@soul busybox - 1.22 . 1 ] # yum -y install /media/Packages/glibc-static-2.12-1.132.el6.x86_64.rpm [root@soul ~] # ls anaconda - ks.cfg config - 3.13 . 8 - x86_64 install.log.syslog busybox - 1.22 . 1.tar .bz2 install.log linux - 3.13 . 8.tar .xz [root@soul ~] # [root@soul ~] # tar xf busybox-1.22.1.tar.bz2 [root@soul ~] # cd busybox-1.22.1 #安装可以查看INSTALL文件说明 [root@soul busybox - 1.22 . 1 ] # make menuconfig Busybox Settings - - - > Build Options - - - > [ * ] Build BusyBox as a static binary (no shared libs) #选中这项 #其他选项都不需要改动了 [root@soul busybox - 1.22 . 1 ] # make perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "en" #根据提示设置下 [root@soul busybox - 1.22 . 1 ] # export LANGUAGE=en_US.UTF-8 [root@soul busybox - 1.22 . 1 ] # export LANG=en_US.UTF-8 [root@soul busybox - 1.22 . 1 ] # export LC_ALL=en_US.UTF-8 [root@soul busybox - 1.22 . 1 ] # make 再次make通过 [root@soul busybox - 1.22 . 1 ] # make install - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - You will probably need to make your busybox binary setuid root to ensure all configured applets will work properly. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [root@soul busybox - 1.22 . 1 ] # [root@soul busybox - 1.22 . 1 ] # ls _install/ bin linuxrc sbin usr [root@soul busybox - 1.22 . 1 ] # cp -a _install/* /mnt/sysroot/ [root@soul busybox - 1.22 . 1 ] # cd /mnt/sysroot/ [root@soul sysroot] # ls bin linuxrc lost + found sbin usr [root@soul sysroot] # mkdir -pv etc/rc.d var/log root proc sys srv boot mnt tmp home dev lib lib64 |
2、提供一个grub.conf文件
1
2
3
4
5
6
7
8
9
|
[root@soul sysroot] # vim /mnt/boot/grub/grub.conf default = 0 timeout = 5 title Mini Linux ( 3.13 . 8 - soul) root (hd0, 0 ) kernel / bzImage ro root = / dev / sda2 init = / sbin / init #完成后sync同步下;挂起宿主机;然后创建一个新的虚拟机使用之前添加的磁盘 #即可测试启动 |
测试基本启动以正常。但是提示没有脚本文件。
测试可以配置IP地址;也能ping网关。
3、提供rc脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@soul sysroot] # vim etc/fstab / dev / sda1 / boot ext4 defaults 0 0 proc / proc proc defaults 0 0 sysfs / sys sysfs defaults 0 0 / dev / sda2 / ext4 defaults 0 0 / dev / sda3 swap swap defaults 0 0 [root@soul sysroot] # mkdir etc/init.d [root@soul sysroot] # vim etc/rc.d/rc.sysinit #!/bin/sh # echo - e "\tWelcome to \033[36mMini Linux\033[0m Soul" mount - a mdev - s ifconfig lo 172.0 . 0.1 ifconfig eth0 172.16 . 40.2 [root@soul sysroot] # chmod +x etc/rc.d/rc.sysinit [root@soul sysroot] # vim etc/inittab ::sysinit: / etc / rc.d / rc.sysinit console::respawn: - / bin / sh ::ctrlaltdel: / sbin / reboot ::shutdown: / bin / umount - a - r [root@soul sysroot] #sync #测试启动 |
测试启动正常。
三、实现密码登陆;且可以ssh远程连接
1、提供虚拟终端;更改之前的inittab文件
1
2
3
4
5
6
7
8
9
10
11
|
[root@soul 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 ::respawn: / sbin / getty 19200 tty5 ::respawn: / sbin / getty 19200 tty6 ::ctrlaltdel: / sbin / reboot ::shutdown: / bin / umount - a - r [root@soul sysroot] # sync |
2、提供密码文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#这里以原有的机器上的密码文件追加到新的系统文件里 [root@soul sysroot] # head -1 /etc/passwd > /mnt/sysroot/etc/passwd [root@soul sysroot] # grep soul /etc/passwd >> /mnt/sysroot/etc/passwd [root@soul sysroot] # vim /mnt/sysroot/etc/passwd #更改默认shell root:x: 0 : 0 :root: / root: / bin / sh soul:x: 500 : 500 :: / home / soul: / bin / sh [root@soul sysroot] # head -1 /etc/group > /mnt/sysroot/etc/group [root@soul sysroot] # grep soul /etc/group >> /mnt/sysroot/etc/group [root@soul sysroot] # head -1 /etc/shadow > /mnt/sysroot/etc/shadow [root@soul sysroot] # grep soul /etc/shadow >> /mnt/sysroot/etc/shadow [root@soul sysroot] # chmod 400 /mnt/sysroot/etc/shadow #sync后直接测试;一般tty1登陆是有问题的。 |
测试登陆成功。
3、提供主机名等信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[root@soul sysroot] # mkdir etc/sysconfig [root@soul sysroot] # vim etc/sysconfig/network HOSTNAME = Soul.com [root@soul etc] # vim profile 设置环境变量 export PS1 = '[\u@\h \W]\$' export PATH = / bin : / sbin: / usr / bin : / usr / sbin: / usr / local / sbin: / usr / local / bin [root@soul sysroot] # vim etc/rc.d/rc.sysinit #!/bin/sh # echo - e "\tWelcome to \033[36mMini Linux\033[0m Soul" [ - r / etc / sysconfig / network ] && . / etc / sysconfig / network [ - z "$HOSTNAME" - o "$HOSTNAME" = = "(none)" ] && HOSTNAME = localhost / bin / hostname $HOSTNAME [ - r / etc / profile ] && . / etc / profile mdev - s mount - a ifconfig lo 172.0 . 0.1 ifconfig eth0 172.16 . 40.2 [root@soul sysroot] # vim etc/issue Welcome to Mini Linux Soul kernel \r |
4、编译安装dropbear提供ssh服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
[root@soul ~] # tar xf dropbear-2013.58.tar.bz2 [root@soul ~] # cd dropbear-2013.58 [root@soul dropbear - 2013.58 ] # ./configure [root@soul dropbear - 2013.58 ] # make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" [root@soul dropbear - 2013.58 ] # make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install [root@soul dropbear - 2013.58 ] # mkdir /etc/dropbear [root@soul dropbear - 2013.58 ] # dropbearkey -t rsa -s 1024 -f /etc/dropbear/dropbear_rsa_host_key [root@soul dropbear - 2013.58 ] # dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key [root@soul dropbear - 2013.58 ] # dropbear -p 2222 [root@soul dropbear - 2013.58 ] # ss -tunl | grep 2222 tcp LISTEN 0 20 ::: 2222 ::: * tcp LISTEN 0 20 * : 2222 * : * [root@soul dropbear - 2013.58 ] # 测试是否可以登陆 #用脚本来复制命令和依赖的库文件到Mini系统上 [root@soul ~] # sh cp.sh You can input [q|Q] quit. Enter a command: dropbear Copy successful. Enter a command: dropbearkey Copy successful. Enter a command: scp Copy successful. Enter a command: bash Copy successful. Enter a command: q You choose quit. [root@soul ~] # #认证库 [root@soul ~] # cp -d /lib64/libnss_files* /mnt/sysroot/lib64/ [root@soul ~] # cp -d /usr/lib64/libnss3.so /mnt/sysroot/usr/lib64/ [root@soul ~] # cp -d /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/ [root@soul ~] # cp /etc/nsswitch.conf /mnt/sysroot/etc/ [root@soul ~] # vim /mnt/sysroot/etc/shells #安全shell / bin / sh / bin / hush / sbin / nologin / bin / bash / bin / ash #在Mini系统生成key文件 [root@soul ~] # mkdir /mnt/sysroot/etc/dropbear [root@soul ~] # dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key [root@soul ~] # dropbearkey -t rsa -s 1024 -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key [root@soul ~] # mkdir /mnt/sysroot/var/run 存放pid文件 |
5、挂载pts
1
2
3
4
5
6
7
8
9
10
11
|
[root@soul sysroot] # vim etc/rc.d/rc.sysinit mdev - s #这个下面添加一行 mkdir / dev / pts mount - a [root@soul sysroot] # vim etc/fstab / dev / sda1 / boot ext4 defaults 0 0 proc / proc proc defaults 0 0 sysfs / sys sysfs defaults 0 0 #下面加一行 devpts / dev / pts devpts defaults 0 0 |
6、提供dropbear的启动脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
[root@soul sysroot] # mkdir etc/rc.d/init.d [root@soul sysroot] # vim etc/rc.d/init.d/dropbear #!/bin/bash # # description: dropbear ssh daemon # chkconfig: 2345 66 33 # dsskey = / etc / dropbear / dropbear_dss_host_key rsakey = / etc / dropbear / dropbear_rsa_host_key lockfile = / var / lock / subsys / dropbear pidfile = / var / run / dropbear.pid dropbear = / usr / local / sbin / dropbear dropbearkey = / usr / local / bin / dropbearkey [ - r / etc / rc.d / init.d / functions ] && . / etc / rc.d / init.d / functions [ - r / etc / sysconfig / dropbear ] && . / etc / sysconfig / dropbear keysize = 1024 port = 22 gendsskey() { [ - d / etc / dropbear ] || mkdir / etc / dropbear echo - n "Starting generate the dss key: " $dropbearkey - t dss - f $dsskey &> / dev / null RETVAL = $? if [ $RETVAL - eq 0 ]; then success echo return 0 else failure echo return 1 fi } genrsakey() { [ - d / etc / dropbear ] || mkdir / etc / dropbear echo - n "Starting generate the rsa key: " $dropbearkey - t rsa - s $keysize - f $rsakey &> / dev / null RETVAL = $? if [ $RETVAL - eq 0 ]; then success echo return 0 else failure echo return 1 fi } start() { [ - e $dsskey ] || gendsskey [ - e $rsakey ] || genrsakey if [ - e $lockfile ]; then echo - n "dropbear daemon is already running: " success echo exit 0 fi echo - n "Starting dropbear: " daemon - - pidfile = "$pidfile" $dropbear - p $port - d $dsskey - r $rsakey RETVAL = $? echo if [ $RETVAL - eq 0 ]; then touch $lockfile return 0 else rm - f $lockfile $pidfile return 1 fi } stop() { if [ ! - e $lockfile ]; then echo - n "dropbear service is stopped: " success echo exit 1 fi echo - n "Stopping dropbear daemon: " killproc dropbear RETVAL = $? echo if [ $RETVAL - eq 0 ]; then rm - f $lockfile $pidfile return 0 else return 1 fi } status() { if [ - e $lockfile ]; then echo "dropbear is running..." else echo "dropbear is stopped..." fi } usage() { echo "Usage: dropbear {start|stop|restart|status|gendsskey|genrsakey}" } case $ 1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; gendsskey) gendsskey ;; genrsakey) genrsakey ;; * ) usage ;; esac [root@soul sysroot] # chmod +x etc/rc.d/init.d/dropbear [root@soul sysroot] # cp /etc/rc.d/init.d/functions etc/rc.d/init.d/ #做启动脚本链接文件 [root@soul ~] # cd /mnt/sysroot/etc/rc.d/ [root@soul rc.d] # ln -sv init.d/dropbear dropbear.s [root@soul rc.d] # ln -sv init.d/dropbear dropbear.k `dropbear.k ' -> `init.d/dropbear' [root@soul rc.d] # ll total 8 lrwxrwxrwx. 1 root root 15 Apr 2 22 : 09 dropbear.k - > init.d / dropbear lrwxrwxrwx. 1 root root 15 Apr 2 22 : 09 dropbear.s - > init.d / dropbear #查看是否连接成功 [root@soul etc] # vim rc.d/rc.sysinit mkdir / dev / pts #下面加一行 / etc / rc.d / * .s start |
7、提供关机服务脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@soul etc] # vim rc.d/rc.sysdown #!/bin/sh # sync sleep 5 / etc / rc.d / * .k stop / bin / umount - a - r poweroff [root@soul etc] # chmod +x rc.d/rc.sysdown [root@soul etc] # vim inittab #更改下面这行为执行脚本 ::shutdown: / etc / rc.d / rc.sysdown #测试启动远程连接 |
测试tty1也可以正常登陆;只是需要等待一会在登陆即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Xshell:\> ssh 172.16 . 40.2 Connecting to 172.16 . 40.2 : 22. .. Connection established. To escape to local shell, press 'Ctrl+Alt+]' . [root@Soul ~] #ifconfig eth0 Link encap:Ethernet HWaddr 00 : 0C : 29 : 38 : 36 : 2B inet addr: 172.16 . 40.2 Bcast: 172.16 . 255.255 Mask: 255.255 . 0.0 UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1 RX packets: 67 errors: 0 dropped: 0 overruns: 0 frame: 0 TX packets: 28 errors: 0 dropped: 0 overruns: 0 carrier: 0 collisions: 0 txqueuelen: 1000 RX bytes: 6415 ( 6.2 KiB) TX bytes: 3538 ( 3.4 KiB) Interrupt: 19 Base address: 0x2000 #测试开机可以自动启动dropbear;并可以远程登陆 |
四、安装nginx;提供web服务
1、安装;下载地址:http://nginx.org/
1
2
3
4
5
6
7
8
|
[root@soul ~] # cd nginx-1.4.2 [root@soul nginx - 1.4 . 2 ] # ./configure --prefix=/usr/local --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --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 [root@soul nginx - 1.4 . 2 ] # make && make install [root@soul nginx - 1.4 . 2 ] # useradd nginx [root@soul nginx - 1.4 . 2 ] # nginx [root@soul nginx - 1.4 . 2 ] # ss -tunl | grep 80 tcp LISTEN 0 128 * : 80 * : * [root@soul nginx - 1.4 . 2 ] # 在浏览器测试下 |
2、移植nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@soul ~] # sh cp.sh You can input [q|Q] quit. Enter a command: nginx Copy successful. Enter a command: q You choose quit. [root@soul ~] # [root@soul ~] # cp /etc/nginx/ /mnt/sysroot/etc/ -r [root@soul ~] # grep "^nginx" /etc/passwd >> /mnt/sysroot/etc/passwd [root@soul ~] # grep "^nginx" /etc/group >> /mnt/sysroot/etc/group [root@soul ~] # grep "^nginx" /etc/shadow >> /mnt/sysroot/etc/shadow [root@soul ~] # mkdir /mnt/sysroot/usr/local/html [root@soul ~] # vim /mnt/sysroot/usr/local/html/index.html <h1>Welcome to Nginx< / h1> [root@soul ~] # |
3、提供服务脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#由于nginx的脚本如调用functions函数;可能会导致依赖其他redhat系统独有的函数;会导致开机无法自启动;也会影响其他程序导致无法启动;所以需要自行写个脚本。 [root@soul ~] # vi /mnt/sysroot/etc/rc.d/nginx #!/bin/sh # # Startup script for the Nginx # chkconfig: - 88 63 # description: Nginx is a free,open-source,high-performance HTTP Server and reverse proxy. # program:/usr/local/sbin/nginx # config:/etc/nginx/nginx.conf # pidfile:/usr/local/logs/nginx.pid # Synopsis: # nginx [--help] [--version] {start|stop|restart|reload|status} # Define variable nginx = / usr / local / sbin / nginx pidfile = / usr / local / logs / nginx.pid PROGRAM = `basename $ 0 ` nginx_conf = / etc / nginx / nginx.conf alog = / var / log / nginx / access.log elog = / var / log / nginx / error.log VERSION = 1.4 . 2 # Functions usage(){ echo "Usage: $PROGRAM [--help] [--version] {start|stop|restart|reload|status}" } version(){ echo "Version:$VERSION" } start(){ if [ - e $pidfile ] then echo "Nginx already running..." else [ - f $alog ] || touch $alog [ - f $elog ] || touch $elog echo - e "Starting Nginx:\t\t\t\t\t\t\t\c" $nginx - c $nginx_conf touch $pidfile echo - e "[ \c" echo - e "\033[0;32mOK\033[0m\c" echo - e " ]\c" echo - e "\r" fi } stop(){ if [ - e $pidfile ] then echo - e "Stopping Nginx:\t\t\t\t\t\t\t\c" / usr / bin / killall $PROGRAM &> / dev / null rm - f $pidfile echo - e "[ \c" echo - e "\033[0;32mOK\033[0m\c" echo - e " ]\c" echo - e "\r" else echo "Nginx already stopped..." fi } reload (){ if [ - e $pidfile ] then echo - e "Reloading Nginx:\t\t\t\t\t\t\c" kill - HUP `pidof $PROGRAM` echo - e "[ \c" echo - e "\033[0;32mOK\033[0m\c" echo - e " ]\c" echo - e "\r" else echo "Nginx is not running..." fi } status(){ if [ - e $pidfile ];then echo "Nginx is running..." else echo "Nginx is stopped..." fi } case $ 1 in start) start ;; stop) stop ;; restart) stop sleep2 start ;; reload ) reload ;; status) status ;; - - help ) usage ;; - - version) version ;; * ) usage esac [root@soul ~] # chmod +x /mnt/sysroot/etc/rc.d/init.d/nginx [root@soul ~] # cd /mnt/sysroot/etc/rc.d/ [root@soul rc.d] # ls dropbear.k dropbear.s init.d rc.sysdown rc.sysinit [root@soul rc.d] # ln -sv init.d/nginx nginx.s `nginx.s ' -> `init.d/nginx' [root@soul rc.d] # ln -sv init.d/nginx nginx.k `nginx.k ' -> `init.d/nginx' |
4、开机测试
这里可能由于没有启动的先后顺序;如按照之前的启动方式会导致都无法开机自动启动;这里更改了开机启动脚本:
1
2
3
4
5
6
7
8
|
[root@soul sysroot] # vim etc/rc.d/rc.sysinit #下面是分开启动的;否则会启动失败 mdev - s mkdir / dev / pts mount - a mount - n - o remount,rw / / etc / rc.d / dropbear.s start / etc / rc.d / nginx.s start |
1
2
3
4
5
6
7
|
Xshell:\> ssh 172.16 . 40.2 Connecting to 172.16 . 40.2 : 22. .. Connection established. To escape to local shell, press 'Ctrl+Alt+]' . [root@Soul ~] #su - soul [soul@Soul ~]$ #测试ssh登陆和切换账户都是没有问题的。 |
到此;本实验结束;且需要的功能都以实现;关于程序的开机启动和关机关闭的问题;这个问题也琢磨了很长时间;个人感觉应该是次顺问题;所以如需实现;可能需要更改启动/关闭脚本文件。