CentOS 6.5玩转自制Linux、远程登录及Nginx安装测试
前言
系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细
和深入的来谈谈Linux系统的详细定制过程和实现用户例如、远程登录和Nginx安装过程、一步一步从头开始定制属于我们自己的系统。
正文
首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素、而其实一些相关的信息也可以参考我前面写过的博文:总结之:CentOS 6.4系统裁减详解及装载网卡步骤
一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装Dropbear和Nginx,Linux的组成
部分包括内核空间和用户空间、而用户空间其实就是根文件系统、用户空间中又包括有shell和init,busybox他能够模拟数百个我们系统上带用的
命令、当然包括我们所需要用到的shell、init、getty、login、那定制一个Linux操作系统我们必须要了解的就是系统启动流程:
POST --> Boot Sequence(MBR) --> BootLoader --> kernel -->/sbin/init
POST:加电自检
Boot Sequence:读到磁盘中的第一个扇区(446)的MBR。
BootLoader:找到MBR中的BootLoader引导加载器、bootloader会找到我们选定的操作系统或内核去加载对应的内核、而这个Bootloader通常是grub。
kernel:加
载内核、内核要完成初始化、bootloader负责把内核读到内存中、内核又通常中压缩的、所以通常内核在内存中展开、而bootloader引导内核
启动起来、让内核从他的程序入口处开始执行、所以接下来内核要完成自身的初始化操作、或硬件探测、包括自身执行环境的准备等等都在这里完成。
内核完成初始化的第一步就要去装载用户空间了、有时候为了让内核做得足够小、很有可能内核中并不具备真正的根文件系统所在设备的驱动、因此我们要借助于
initramfs(CentOS5上被称为initrd)来完成去装载真正根文件系统所在的根文件系统真正的程序、但是这个initramfs可
initrf(initramfs:这是一个文件系统、CentOS6上就这么称呼了,initrd:ram disk
这是一个磁盘设备)是个虚拟的根文件系统、是个虚根、他不是我们系统真正工作起来所使用的根、所以称这个为虚根、内核借助于这个虚根装载驱动之后就要去挂
载真正的根设备了、kernel会自动挂载到这个跟文件下、内核会挂载真正的根到这个initramfs虚根的某个目录下、比如说挂载到/mnt
/sysroot的目录下、而后再完成根切换、而后我们的真正的根就可以加载了、那我们的内核怎么知道挂载的根文件系统是什么呢、那我们的grub向内核
传递参数root等于什么那就是告诉系统根文件系统所在的设备。
/sbin/init:他通常加载四个设备、/sbin/init、/bin/bash、如果内核找不到就去找根下的init、再找不着就去找/bin
/sh、/bin/bash、按照这个顺序去找、找到一个就可以启动系统、所以系统启动的第一个进程就启动了、init负责去启动用户空间中真正工作的进
程、init本身本身只是负责去生成这些正正工作的进程和回收这些进程的、是内核的第一个、最顶级的管理进程、但不负责具体的工作、虽然init不负责具
体工作、但他需要把一个用户空间启动为一个真正完整意义上的用户空间、所以init要结合他的配置文件inittab完成所谓系统初始化的。
在CentOS6上这个文件inittab之所以保留下来是为了跟CentOS5兼容的、其实我们用不着的、因为init大多数配置文件都位于/etc/init/*.conf目录下所有以.conf结尾的文件、是用于各子系统之间协调的。
/sbin/init作用包含以下几步:
1、设定默认运行级别:runlevel -v:查看运行级别
2、系统空间中的进一行初始化、这个要依赖于一个系统初始化脚本来完成的、这个脚本叫rc.sysinit、在有些系统上可能叫rcS、其实都是一个概
念、这个初始化包含键盘键映射、初始化没被挂载的文件系统等等。那/etc/rc.sysinit要进行哪些工作、seLinux、udev、键映射、交
换分区的激活、挂载额外文件系统、重新以读写方式挂载根文件系统等等。
3、启动指定级别下的服务、后台的守护进程、每个级别都有一个在/etcg下rcN.d的文件、启动这个文件中所有以S开头的脚本服务、关闭所有以K开
头的服务脚本、/etc/rc.local其中以S开头的最后一个服务S99包含rc.local、有些我们不便于自己写脚本定义的服务可以写到这里来、
但是启动之后不会关闭、所以只是执行一些命令我们可以在这里执行、服务还是建议使用服务脚本。
4、设定键映射
5、启动虚拟终端、启动这个终端会调用一个叫login的程序、在虚拟终端上打印一个登录提示符让我们输入
6、如果设备默认级别为5的话还可以启动图形终端
init在早期是个串型的init、或者说传统意义是的init、sysV风格的、这种程序启动任何服务、运行任何程序完成系统初始化时统统以串型模式进行的、所以速度非常慢、以至于后来有了并型运行的init、启动速度也比较快。
准备工作:
前面的系统裁减我们说过、为了可以让定制好的系统可以放到别的机器上动行、我们要把他做到一个独立的硬盘上去、所以首先我们在宿主机上添加一块SCSI
的硬盘、这些步骤参考前面的博文,总结之:CentOS
6.4系统裁减详解及装载网卡步骤http://tanxw.blog.51cto.com/4309543/1368801、这里不再详细说明、给出命
令、添加好后进行分区格式化操作。
|
1
2
3
4
5
6
7
8
|
# fdisk /dev/sdb n p 1 +50M n p 2 +512M n p 3 +256M t 3 82 w# mke2fs -t etx4 /dev/sdb1# mke2fs -t etx4 /dev/sdb2# mkswap /dev/sdb3# mkdir -pv /mnt/{boot,sysroot}# mount /dev/sdb1 /mnt/boot# mount /dev/sdb2 /mnt/sysroot |
第一步:编译内核或定制内核
1、获取内核程序包,可以到官网下载:https://www.kernel.org/、这里我们使用的内核版本是3.13.6的版本:
解压内核文件、这里我们以make allnoconfig来编译安装、自己选择要编译的功能(让确保系统上的编译环境)
|
1
2
3
4
5
6
|
# 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[*]64-bit kernel :64位操作系统的内核General setup --> Local version --> -MyLinux: 给内核定一个自己的版本Processor type and features --> Processor family --> (X)Generic-x86-64:这里是CPU类型、这个是通用x86-64[*]Symmetric multi-processing support:选择CPU支持多核心处理[*]Enable loadable module support:选择内核动态模块加载Bus options (PCI etc.) --> [*]PCI suppor:支持PCI总线Device Drivers --> <*>SCSI device support -->[*]SCSI disk support要支持SCSI硬盘Device Drivers -->Fusion MPT device support (NEW) --> <*>Fusion MPT ScsiHost drivers for SPI、<*>Fusion MPT misc device (ioctl) driver、[*]Fusion MPT logging facility:支持对硬盘的驱动File systems --> <*>The Extended 4 (ext4) filesystem:支持文件系统Executable file formats / Emulations --> [*]Kernel support for ELF binaries、[*]Write ELF core dumps with partial segments (NEW)、 <*>Kernel support for scripts starting with #!:可执行文件的格式Device Drivers -->Input device support --> [*]Keyboards -> <*>AT keyboard (NEW) [*]Mice:支持输入输出设备、比如健盘DeviceDevice Drivers > Generic Driver Options > [*] Maintain a devtmpfs filesystem to mount at /dev [*]Automount devtmpfs at /dev, after the kernel mounted the rootfsNetworking support > Networking options[*] TCP/IP networkingDevice Drivers > Network device support > Ethernet driver support[*]Intel devices (NEW)<*>Intel(R) PRO/1000 Gigabit Ethernet support<*>Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support:只要Intel的、其他的他都去掉、这是选择网卡设备的驱动程序[ ]Wireless:这个无线网、我们去掉去、用不着 |
OK、到这里保存退出、把配置文件复制一份出来、前面磁盘格式化而且都挂载好了、这里我们就把grub安装到boot下::
|
1
2
3
4
|
# cp .config /root/config-3.13.6-x86_64# make bzImage# cp arch/x86/boot/bzImage /mnt/boot/# grub-install --root-directory=/mnt /dev/sdb |
第二步:编译Busybox、让busybox提供一个sh程序、busybox可以模拟n种sh、可以模拟bash的特性、上面我们有介绍过他了。
到busybox官网下载busybox程序包:http://www.busybox.net、我们这里用busybox-1.22.1版本的、要先安装上glibc-static、这里我的附件提供有哦。
解压到当前目录下就可以了:
|
1
2
3
4
5
6
7
|
# yum -y install libmcrypt-devel# rpm --install glibc-static-2.12-1.132.el6.x86_64.rpm# tar xf busybox-1.22.1.tar.bz2# cd busybox-1.22.1# make menuconfig# make# make install |
make menuconfig时就选择这项就可以了、其他的都使用默认的吧:
Busybox Settings -->Build Options -->[*] Build BusyBox as a static binary (no shared libs):把busybox编译也静态二进制、不用共享库 
|
1
2
3
4
5
6
7
8
9
10
|
# cp -a _install/* /mnt/sysroot/# cd /mnt/sysroot/# mkdir -pv /etc/rc.d var/log root home lib lib64 dev proc sys boot mnt media tmp srv给grub提供一个配置文件# vim /mnt/boot/grub/grub.conf default=0timeout=5title Mini Linux (3.13.6-MyLinux) root (hd0,0) kernel /bzImage ro root=/dev/sda2 init=/sbin/init |
给小系统提供一个rc.sysinit、/mnt/sysroot/etc/rc.d/rc.sysinit、如果没有这个目录就自己创建、再提供一个/mnt/sysroot/etc/fstab文件
|
1
2
3
4
5
6
|
# vim /mnt/sysroot/etc/fstab/dev/sda1 /boot ext4 defaults 0 0proc /proc proc defaults 0 0sysfs /sys sysfs defaults 0 0/dev/sda2 / ext4 defaults 0 0/dev/sda3 swap swap defaults 0 0 |
# mkdir -p /mnt/sysroot/etc/rc.d/rc.sysinit
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/bin/sh#打印系统启动时的欢迎信息echo -e "\tWecome to \033[34mMini\033[0m Linux"判断/etc/sysroot/network是否存在并且可读、条件成立就source进来[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network判断$HOSTNAME是否为空并且$HOSTNAME==NONE、如果为空就给个默认值[ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost给HOSTNAME赋值为定义好的HOSTNAME的值/bin/hostname $HOSTNAME挂载文件系统echo "mounting proc filesystem..."mount -t proc proc /procecho "mounting sysfs filesystem..."mount -t sysfs sysfs /sys自动探测各硬件设备、并且能够探测到的都装载设备文件mdev -s给系统配置一个IP地址ifconfig lo 127.0.0.1ifconfig eth0 172.16.254.188mount -amkdir /dev/ptsmount -t devpts devpts /dev/pts |
# vim /mnt/sysroot/etc/inittab
|
1
2
3
4
5
6
7
8
9
10
11
|
::sysinit:/etc/rc.d/rc.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 :19200表示每秒钟传输的速率、getty是一个串型终端、他会调用一个登录界面让用户输入登录信息进行验证tty6::askfirst:/bin/sh 启用6个虚拟终端console::respawn:-/bin/sh 启用一个终端,如果出错重新启动respawn、-表示敲一回车才可以启用sh::ctrlaltdel:/sbin/reboot 定义组合键、按ctrl+alt+del就reboot::shutdown:/bin/umount -a -r 如果要要关机就卸载已挂载的设备、然后关机 |
提供系统用户登录帐号文件:
|
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
|
# useradd busybox# passwd busybox密码也设置为:busybox# head -1 /etc/passwd > /mnt/sysroot/etc/passwd# tail -1 /etc/passwd >> /mnt/sysroot/etc/passwd# vim /mnt/sysroot/etc/passwdroot:x:0:0:root:/root:/bin/shbusybox:x:502:503::/home/busybox:/bin/sh# head -1 /etc/group > /mnt/sysroot/etc/group# tail -1 /etc/group >> /mnt/sysroot/etc/group# head -1 /etc/shadow > /mnt/sysroot/etc/shadow# tail -1 /etc/shadow >> /mnt/sysroot/etc/shadow# cat /mnt/sysroot/etc/shadow提供一个登录欢迎信息、创建一个issue文件# vim /mnt/sysroot/etc/issueMyLinux is CentOS release 6.5Kernel \r on an \m提供主机名# mkdir /mnt/sysroot/etc/sysconfig # vim /mnt/sysroot/etc/sysconfig/networkHOSTNAME=mylinux.tanxw.com提供命令提示符和环境变量# vim /mnt/sysroot/etc/profileexport PS1='[\u@\h \A \W]\$ 'PATH="/usr/local/sbin:/usr/local/bin:/sbin/:/bin:/usr/sbin:/usr/bin:$PATH"# chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit# sync 同步数据到磁盘中去 |
到这里我们的配置算是有个大概了、那就把宿主机挂起、创建一个自定义虚拟机、把我们制作有系统的那张硬盘放到自定义的虚拟机上运行:
如果第一个终端登录不了可以切换到其他终端上登录,按ctrl+alt+F2(F3\F4\F5\F6)可以切换到不同的终端上去登录的、这里我们登录成功了:


=================================远程登录和ngix访问==============================
OK、到这里我们自己定制的Linux可以跑起来了、接下来我们来实现远程登录和Nginx的访问:
切换到宿主主上、下载dropbear-2013.58.tar.bz2和Nginx到本地:
1、解压安装dropbear
|
1
2
3
4
5
6
7
8
9
10
11
|
# tar xf dropbear-2013.58.tar.bz2# cd dropbear-2013.58# ./configure# make# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install# mkdir /etc/dropbear生成两个密钥文件# dropbearkey -t rsa -s 1024 -f /etc/dropbear/dropbear_rsa_host_key# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key验证一下生的这两个文件# ls /etc/dropbear |
2、服务脚本/etc/rc.d/init.d/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
|
#!/bin/bash## description: dropbear ssh daemon# chkconfig: 2345 66 33#dsskey=/etc/dropbear/dropbear_dss_host_keyrsakey=/etc/dropbear/dropbear_rsa_host_keylockfile=/var/lock/subsys/dropbearpidfile=/var/run/dropbear.piddropbear=/usr/local/sbin/dropbeardropbearkey=/usr/local/bin/dropbearkey[ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions[ -r /etc/sysconfig/dropbear ] && . /etc/sysconfig/dropbearkeysize=${keysize:-1024}port=${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 instart) start ;;stop) stop ;;restart) stop start ;;status) status ;;gendsskey) gendsskey ;;genrsakey) genrsakey ;;*) usage ;;esac |
3、脚本配置文件/etc/sysconfig/dropbear
|
1
2
3
4
5
6
7
8
9
|
keysize=2048port=22022# chmod +x /etc/rc.d/init.d/dropbear# chkconfig --add dropbear# vim /etc/profile.d/dropbear.shexport PATH=/usr/local/sbin:$PATH启动服务并查看端口22022是否已经处于监听状态、并在本地尝试连接登录:# service dropbear start # ss -tnl |
OK了、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
|
#!/bin/bash # dirPath=/mnt/sysroot clearcmd(){ if which $1 &> /dev/null;then cmdPath=`which --skip-alias $1` else echo "Command not exist!" return 4 fi } cpCmd(){ dirName=`dirname $1` [ -d ${dirPath}${dirName} ] || mkdir -p ${dirPath}${dirName} [ -f ${dirPath}${cmdPath} ] || cp $1 ${dirPath}${dirName} } cpLib(){ for i in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do dirLib=`dirname $i` [ -d ${dirPath}${dirLib} ] || mkdir -p ${dirPath}${dirLib} [ -f ${dirPath}$i ] || cp $i ${dirPath}${dirLib} done } while true;do read -p "Enter a command:" cmd if [ "$cmd" == 'quit' ];then echo "quit!" exit 0 fi clearcmd $cmd [ $? -eq 4 ] && continue cpCmd $cmdPath cpLib $cmdPath done |
把这三个命令移植过去就可以了:dropbear、dropbearkey、scp、dbclient、bash、复制完后就去创建这个目录/mnt/sysroot/etc/dropbear、而后为移植过去的dropbear生成两个密钥文件:

|
1
2
3
|
# mkdir /mnt/sysroot/etc/dropbear# dropbearkey -t rsa -s 1024 -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key |
dropbear要认证用户、而认证用户要用到名称解析、这就意味着libnss库要复制过去、libnss库框架、而后给nss提供配置文件:
|
1
2
3
4
5
6
7
8
9
10
|
# cp -d /lib64/libnss_files* /mnt/sysroot/lib64# cp -d /usr/lib64/libnss3.so /mnt/sysroot/usr/lib64/# cp -d /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/# cp /etc/nsswitch.conf /mnt/sysroot/etc/# vim /mnt/sysroot/etc/nsswitch.conf只保留以下几项、其他的都不需要: passwd: files shadow: files group: files hosts: files dns |
在用户登录时dropbear认为用户的默认shell并不在/etc/shells下所在的用户shell中的话、他是不允许登录的、那我们就得给dropbear提供一个安全shell的配置文件了:
|
1
2
3
4
5
6
|
# vim /etc/shells/bin/sh/bin/hush/bin/ash/sbin/nologin/bin/bash |
要知道、dropbear启动时在/var/run/下会生成一个pid文件、而这个目录我们还没有创建、
# mkdir /mnt/sysroot/var/run
到这里我们定制的系统还不能远程登录、当你远程登录时、所登录的终端都是远程/dev/pts的伪终端、这个伪终端是个伪文件系统、只要你的内核编译时支持这个文件系统、他就可以使用、当然、我们的目标机上还没有:
# vim /mnt/sysroot/etc/fstab
加一行
devpts /dev/pts devpts defaults 0 0
再创建/dev/pts这个目录:
# mkdri /mnt/sysroot/etc/profile.d
# cp /etc/profile.d/dropbear.sh /mnt/sysroot/etc/profile.d/
# mkdir /mnt/sysroot/dev/pts
# sync
OK、我们先来测试一下dropbear远程登录看可不可以登录得上去、把宿主机挂起或关机、启动我们的目标机、由于我们的/dev/pts启动目标机
时可以会重新挂载的问题、会把/dev/pts下的目录给覆盖掉、所以我们进入目标机后可以在/dev/下创建pts这个目录、IP要设置在同一个网段
内:
# mkdir /dev/pts
# mount -a


实现页面Nginx访问
这里我们用的版本是Nginx-1.4.2、这里我们以最简单的方式进行安装并运行服务起来:
解决依赖关系:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# yum -y install pcre-devel# tar xf nginx-1.4.2.tar.bz# cd nginx-1.4.2#--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:指定访问日志--group=nginx:以nginx用户身份运行、反正不要以管理员的身份去运行--group=nginx:nginx用户组其他的选项都是nginx默认选项、我们都去掉# make# make install# useradd nginx# cd /usr/local/sbin# ./nginx# ss -tnl 查看80端口是否已经处于监听状态 |

接着移植nginx到目标机上去、用上面的那个复制命令的脚本:
# ./cpCommad.sh
Enter a command:nginx
Enter a command:consoletype
Enter a command:quit
quit!
复制nginx下的配置文件到目标机上、而启动nginx需要nginx用户、所以用户也得追加到passwd文件中去、而后再给nginx添加一个测试页面就OK了:
|
1
2
3
4
5
6
7
8
|
# cp /etc/nginx/ /mnt/sysroot/etc/ -r# grep "^nginx" /etc/passwd >> /mnt/sysroot/etc/passwd# grep "^nginx" /etc/group >> /mnt/sysroot/etc/group# grep "^nginx" /etc/shadow >> /mnt/sysroot/etc/shadow# mkdir /mnt/sysroot/usr/local/html# vim /usr/loca/html/index.html<h2>Wecome to Nginx</h2><h3>This is MyLinux</h3> |
给nginx提供一个服务脚本
# vim /mnt/sysroot/etc/rc.d/init.d/nginx
|
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
|
#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15# description: Nginx is an HTTP(S) server, HTTP(S) reverse \# proxy and IMAP/POP3 proxy server# processname: nginx# config: /etc/nginx/nginx.conf# config: /etc/sysconfig/nginx# pidfile: /var/run/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/etc/nginx/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginxmake_dirs() { # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done}start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval}stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval}restart() { configtest || return $? stop sleep 1 start}reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo}force_reload() { restart}configtest() { $nginx -t -c $NGINX_CONF_FILE}rh_status() { status $prog}rh_status_q() { rh_status >/dev/null 2>&1}case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esac |
而在nginx启动时需要依赖于日志目录和pid文件目录、所以我们要事先给nginx创建这两目录先、还给创建锁文件:
|
1
2
3
4
5
6
|
# mkdir /mnt/sysroot/var/log/nginx# mkdir /mnt/sysroot/usr/local/logs# mkdir -pv /mnt/sysroot/var/lock/subsys# chmod +x /mnt/sysroot/var/log/nginx# chmod +x /mnt/sysroot/tmp/# sync |
OK、我们启动定制的目标系统、再启动dropbear和nginx、而服务也可以正常启动了、测试我们的nginx吧、如果服务脚本使用不了那就是里
面可以有一些依赖函数或一些命令没有全都移植到目标机上、不过不要紧、我们可以手动启动服务器、这个问题都不大、最后测试完没什么就poweroff关机
吧、如果nginx启动不了就重新把文件系统挂载为可读写就OK了:# mount -o remonut,rw /

结束:
到此我们的定制过程就全都完成了、后续如果我们还需要添加什么功能的话可以自己慢慢添加上去的哦、如果我们有个树梅派的话可以把我们的小系统放到树梅派
上去跑起来的哦、那也成了一以linux电脑了、是不是很爽呀、好吧、就这样吧、如果大神有什么指出的话欢迎留言交流、谢谢关注了!
本文出自 “温水煮青蛙” 博客,请务必保留此出处http://tanxw.blog.51cto.com/4309543/1390637
CentOS 6.5玩转自制Linux、远程登录及Nginx安装测试的更多相关文章
- CentOS 6.5结合busybox完成自制Linux系统及远程登录和nginx安装测试
前言 系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细和深入的来谈谈Linux系统的详细定制过程和实 ...
- Linux远程登录工具XShell安装
Xshell就是一个远程控制RHEL的软件:其他的还有很多,用什么都无所谓(根据公司情况). 下面我们来安装下这个工具: 双击exe 点下一步: 选 免费的 然后下一步:(免费的功能足够用了) 点接受 ...
- Linux课程---3、Linux远程登录和传输(操作Linux服务器软件)
Linux课程---3.Linux远程登录和传输(操作Linux服务器软件) 一.总结 一句话总结: xshell:Xshell是一个强大的安全终端模拟软件 Xshell是一个强大的安全终端模拟软件, ...
- Linux 远程登录
Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这事我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ssh服务实现的远程登录功 ...
- 如何用linux远程登录windows计算机
大家可能试过用windows远程登录另一个windows pc机,今天大家将会学到如何用 linux远程登录你的windows系统. 首先大家要做到得救是将自己linux和windows操作机的IP地 ...
- Linux远程登录
Linux远程登录 远程登录 关闭linux的防火墙 /etc/init.d/iptables stop 启动VNC服务器 Vncserver & 然后记住desktop is localho ...
- Windows、Linux -- 远程登录、文件传输、文件共享
Linux <---> Linux 远程登录: ssh服务 ssh root@10.20.62.124 文件传输: scp服务 上传 scp /home/xxx.txt root@1 ...
- Linux远程登录ssh免密码配置方法(仅供参考)
这篇文章主要介绍了linux远程登录ssh免密码配置方法,需要的朋友可以参考下(http://www.0834-3659999.com) 一.情景 公司刚上几台Linux,现在要把主机之间都能远程ss ...
- centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课
centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课 打命令之后可以输入: e ...
随机推荐
- ISA TEST Writeup
刚出来的hack游戏,非常easy,现在只有7关.考虑入门级.没有什么可以玩. http://helloisa.com/ LEVEL 1 细致观察页面,入侵的第一步是收集一切可能产生价值的信息 ps: ...
- 初步swift该研究指出语言(基本数据类型)
笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28258805 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- httpclient总结
1.httpclient总结:一.基本知识准备(1)构建URI工具类,URIBuilder(2)HttpResponse类,可以添加Header信息 获取所有Header信息的方法,调用HeaderI ...
- Linux GPIO 注册和应用
Linux GPIO 注册和应用 Linux Kernel, GPIO, ARM 于Linux kernel代码.经常使用 GPIO 作为一个特殊的信号,如芯片片选信号. GPIO 功能应用,我们经常 ...
- ftp设置(2015-04-04)[转]
anonymous_enable=YES /允许匿名访问 12行local_enable=YES /允许本地用户访问(/etc/passwd中的用户) 15行write_enable=YES /允许写 ...
- iOS程序 # 启动过程
[ App 应用 ] 中文名:缺省 外文名:default 拼音:quē shěng 释义:系统默认状态 全称:缺省状态 -------------- 1.程序启动顺序 1> main.m程序入 ...
- Android checkCallingPermission()方法返回值问题
Android开发检查权限时,发现调用checkCallingPermission()总是返回值-1,而Binder.getCallingPid() == Process.myPid()又总是返回tr ...
- C语言 ## __VA_ARGS__ 宏
在GNU C中,宏可以接受可变数目的参数,就象函数一样 可以把__VA_ARGS__看成是将...赋值给该宏 //注意这里不能在函数中调用abc() #include <stdio.h> ...
- NET 2015
.NET 2015 英文原文:Understanding .NET 2015 Understanding 翻译为了解或理解,对于 .NET 来说,2015 年注定会更加精彩,所以标题就用了“精彩”这个 ...
- .NET开源项目 TOP 25
.NET开源项目 TOP 25 如果知道.NET项目在开源中国的git上所占的比重只有5%的话,为什么这个<2014年国人开发的最热门的开源软件TOP 100>榜中.NET项目那么少就是情 ...