上篇博客已经介绍并完成了linux的搭建,现在我们来完善下这个小系统,以下操作都基于宿主机完成
一、启用虚拟控制台,并且为系统添加用户账户
vim /mnt/sysroot/etc/inittab
改为如下内容:
::sysinit:/etc/rc.d/rc.sysinit ::respawn:/sbin/getty 9600 tty1 ::respawn:/sbin/getty 9600 tty2 ::respawn:/sbin/getty 9600 tty3 ::respawn:/sbin/getty 9600 tty4 ::respawn:/sbin/getty 9600 tty5 ::respawn:/sbin/getty 9600 tty6 ::ctrlaltdel:/bin/reboot ::shutdown:/bin/umount -a -r
1、为目标主机建立passwd帐号文件
为目标机创建2个用户root,gulong
vim /mnt/sysroot/etc/passwd
添加以下内容
root:x:0:0:root:/root:/bin/sh gulong:x:506:507::/home/gulong:/bin/sh
创建家目录
[root@www ~]# mkdir -pv /mnt/sysroot/home/gulong
[root@www ~]# mkdir /mnt/sysroot/root
2、为目标主机建立group帐号文件
[root@www ~]# grep "^root" /etc/group >> /mnt/sysroot/etc/group [root@www ~]# grep "^gulong" /etc/group >> /mnt/sysroot/etc/group
3、为目标主机创建shadow密码文件
[root@www ~]# grep "^root" /etc/shadow >> /mnt/sysroot/etc/shadow [root@www ~]# grep "^gulong" /etc/shadow >> /mnt/sysroot/etc/shadow
4、重启目标机测试
二、在系统登录时提供banner信息、主机名称
1.创建 /etc/issue 文件(开机欢迎信息)
添加如下内容:
Welcome to Gulong Linux ... Kernel \r
2.创建保存主机名称的配置文件
[root@www sysroot]# mkdir etc/sysconfig [root@www sysroot]# vi etc/sysconfig/network //添加如下内容: NETWORKING=yes HOSTNAME=www.gulong.com
3.编辑系统初始化脚本,实现开机过程中设定主机名称
[root@www sysroot]# vim etc/init.d/rc.sysinit //添加以下内容: [ -r /etc/sysconfig/network ] && . /etc/sysconfig/network [ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost /bin/hostname $HOSTNAME
把宿主机关机,启动目标机测试
三、修改终端提示符
创建/etc/profile文件
[root@www ~]# vim /mnt/sysroot/etc/profile //添加如下内容 export PS1='[\u@\h \W]\$ ' export PATH=$PATH:/usr/local/sbin:/usr/local/bin
重启目标机:
四、通过dropbear为目标系统提供ssh远程连接服务
1、编译安装dropbear
[root@www ~]# tar xf dropbear-2013.58.tar.bz2 [root@www ~]# cd dropbear-2013.58 [root@www dropbear-2013.58]# ./configure [root@www dropbear-2013.58]# make PROGRAMS="dropbear dbclient dropbearkey scp" [root@www dropbear-2013.58]# make PROGRAMS="dropbear dbclient dropbearkey scp" install
2、移植dropbear至目标系统
宿主机上使用此脚本移植dropbear,bincp.sh脚本内容如下:
#!/bin/bash # declare -i DebugLevel=0 Target=/mnt/sysroot [ -d $Target ] || mkdir $Target &> /dev/null read -p "A command: " Command while [ $Command != 'q' -a $Command != 'Q' ]; do Command=`which $Command | grep -v "^alias" | grep -o "[^[:space:]]*"` [ $DebugLevel -eq 1 ] && echo $Command ComDir=${Command%/*} [ $DebugLevel -eq 1 ] && echo $ComDir [ -d ${Target}${ComDir} ] || mkdir -p ${Target}${ComDir} [ ! -f ${Target}${Command} ] && cp $Command ${Target}${Command} && echo "Copy $Command to $Target finished." for Lib in `ldd $Command | grep -o "[^[:space:]]*/lib[^[:space:]]*"`; do LibDir=${Lib%/*} [ $DebugLevel -eq 1 ] && echo $LibDir [ -d ${Target}${LibDir} ] || mkdir -p ${Target}${LibDir} [ ! -f ${Target}${Lib} ] && cp $Lib ${Target}${Lib} && echo "Copy $Lib to $Target finished." done read -p "A command: " Command done
接下来运行此脚本,分别输入dropbear、dropbearkey和dbclient,bash即可;这些命令会被存储于目标系统的/usr/local/sbin或/usr/local/bin目录中。
3、为远程登录的用户提供伪终端设备文件
编辑/etc/fstab文件添加如下内容
devpts /dev/pts devpts default 0 0
4、为目标系统的dropbear生成主机密钥
默认情况下,dropbear到/etc/dropbear目录中查找使用的rsa格式主机密钥(默认名称为dropbear_rsa_host_key)和dss格式的主机密钥(默认名称为dropbear_dss_host_key)。其中,rsa格式可使用不同长度的密钥,但dss格式只使用1024位的密钥。
[root@www ~]# mkdir /mnt/sysroot/etc/dropbear [root@www ~]# dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key -s 2048 [root@www ~]# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key
5、定义安全shell
dropbear默认情况下仅允许其默认shell出现在/etc/shells文件中的用户远程登录
[root@www ~]# vim /mnt/sysroot/etc/shells //添加如下内容: /bin/sh /bin/ash /bin/hush /bin/bash /sbin/nologin
6、为目标主机提供网络服务转换机制
在宿主机上使用默认选项编译的dropbear将依赖nsswitch实现用户名称解析,因此,还需要为目标主机提供nss相关的库文件及配置文件。
[root@www ~]# vim /mnt/sysroot/etc/nsswitch.conf //添加如下内容 passwd: files shadow: files group: files hosts: files dns
复制所需要的库文件:
[root@www ~]# mkdir /mnt/sysroot/usr/lib64/ //有此目录就不要创建了哦,亲! [root@www ~]# cp -d /lib64/libnss_files* /mnt/sysroot/lib64/ [root@www ~]# cp -d /usr/lib64/libnss3.so /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/
7、创建dropbear的服务脚本
[root@www sysroot]# mkdir etc/rc.d/init.d [root@www sysroot]# vim etc/rc.d/init.d/dropbear
7.1.添加如下服务脚本内容:
//为了dropbear服务脚本正常工作,把这些复制到目标机上 [root@www ~]# mkdir /mnt/sysroot/var/lock/subsys [root@www sbin]# cp /sbin/consoletype /mnt/sysroot/sbin/
脚本内容如下:
#!/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=${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 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; gendsskey) gendsskey ;; genrsakey) genrsakey ;; *) usage ;; esac
7.2 给dropbea执行权限
[root@www sysroot]#chmod +x etc/rc.d/init.d/dropbear [root@www sysroot]# cp /etc/rc.d/init.d/functions etc/rc.d/init.d/ //复制dropber调用的functions脚本至目标机
7.3 创建规范化开机启动、关机停止服务、
[root@www sysroot]# cd etc/rc.d/ [root@www rc.d]# ln -sv init.d/dropbear dropbear.start //创建dropbear启动脚本链接 [root@www rc.d]# ln -sv init.d/dropbear dropbear.stop //创建dropbear停止脚本链接 [root@www rc.d]# vim rc.sysinit //添加下图红色内容
7.4创建关机时的服务脚本rc.sysdown
[root@www etc]# vim /mnt/sysroot/etc/rc.d/rc.sysdown //添加以下内容: #!/bin/sh # sync sleep 2 sync /etc/rc.d/*.stop stop /bin/umount -a -r poweroff [root@www etc]# chmod +x /mnt/sysroot/etc/rc.d/rc.sysdown //给此脚本执行权限
7.5编辑initab文件
[root@www etc]# vim /mnt/sysroot/etc/inittab //修改此内容 ::shutdown:/etc/rc.d/rc.sysdown
8、重启目标机测试远程登录
这样目标机就可以远程登录了!
五、通过nginx提供web服务
1.编译安装nginx
[root@www ~]# tar xf nginx-1.4.2.tar.gz [root@www ~]# cd nginx-1.4.2 [root@www 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@www nginx-1.4.2]# make && make install
创建nginx用户
# groupadd -r nginx # useradd -r -g nginx nginx
2.移植nginx至目标系统
[root@www ~]# bash bincp.sh nginx
3.移植配置文件至目标系统
[root@www ~]# mkdir /mnt/sysroot/etc/nginx/ [root@www ~]# mkdir /mnt/sysroot/var/log/nginx [root@www ~]# mkdir /mnt/sysroot/usr/local/html [root@www ~]# mkdir /mnt/sysroot/usr/local/logs [root@www ~]# cp /etc/nginx/* /mnt/sysroot/etc/nginx/
4.复制nginx用户信息
[root@www ~]# grep "^nginx" /etc/passwd >> /mnt/sysroot/etc/passwd [root@www ~]# grep "^nginx" /etc/group >> /mnt/sysroot/etc/group [root@www ~]# grep "^nginx" /etc/shadow >> /mnt/sysroot/etc/shadow
5、创建测试页面
[root@www nginx-1.4.2]# cp /usr/local/html/* /mnt/sysroot/usr/local/html/
6、测试
启动目标主机,
然后使用如下命令启动nginx,即可通过浏览器测试访问。
# /usr/local/nginx
好了,到现在一个功能完善的微型linux已经制作完成,不足之处,请多加指点!
附:bzImage,linux启动盘下载地址
linux
bzImage