忘了介绍本文的源码的版本了
dropbear-2013.58.tar.bz2
busybox-1.21.1.tar.bz2
linux-3.13.6.tar.xz
nginx-1.4.7
基于上文,我们还差group文件没有写
root@mysql etc]# vi group
root:x:0:
mayershi:x:500: #不解释,你懂的。
我们已经解决了本地登录的问题。要想模仿的更像我们要设置一下,
PS1的变量还有,以及主机名和用户支持上,不知道的可以脑补。
[root@mysql etc]# echo "export PS1=$PS1" > /mnt/sysroot/etc/profile
[root@mysql etc]# cat profile
export PS1=[\u@\h \W]\$ #此段结束表示开机时自动加载PS1的变量到环境变量中
[root@mysql etc]# vi rc.d/rc.sysinit
[root@mysql etc]# cat !$
cat rc.d/rc.sysinit
#!/bin/bash
#
mount -n -o remount,rw /dev/sda2 /
mount -a
mdev -s
[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && hostname localhost || hostname $HOSTNAME
#倒数一二行表示,开机读取主机名的脚本,程序,不解释,我想应该能看的懂。
成功上图。
唉,可以实现登录了把,但是居然爆出一个错误,I have no name! 我们明明已经设置了啊,
为什么没有呢。其实我们用的bash,bash是利用nsswitch来进行用户名对应UID实现名称解析
的。但是你还记得,我们之前提到的,busybox默认的shell是ash。我们切换成ash试试。o
bingo,成功的解决了。其实是bash依赖名称解析功能,而我们又缺少名称解析的库。所以bash
也就无能为力的给你爆出一个他没有名字的名字了。接下来我们开始着手解决bash的nsswitch的问题,
让其能够实现有 name的功能。
[root@mysql sysroot]# mkdir /mnt/sysroot/usr/lib64
[root@mysql sysroot]# cp -a -d /lib64/libnss_files* lib64/
[root@mysql sysroot]# cp -a -d /usr/lib64/{libnss_files.so,libnss3.so,\
libnssutil3.so,libnsssysinit.so,libnsspem.so} usr/lib64/
[root@www sysroot]# ls lib64/
ld-linux-x86-64.so.2 libcap.so.2 libnss_files-2.12.so librt.so.1
libacl.so.1 libc.so.6 libnss_files.so.2 libselinux.so.1
libattr.so.1 libdl.so.2 libpthread.so.0 libtinfo.so.5
###以上都是nss所依赖的库文件
[root@www sysroot]# ls usr/lib64/
libnss3.so libnsspem.so libnsssysinit.so libnssutil3.so #第一个是nss的核心文件,其余的三个
是nss自带的常用工具。
[root@www sysroot]# cp /etc/nsswitch.conf /mnt/sysroot/etc/
##nss的配置文件,其实不用这个也行。我没有移植,寄生机也是可用的我不知道原因,但是大家最
#好别这么干。还是复制过来的好。以防出现其他的不知名错误。