[root@2core local]# chmod 755 /chroot/usr/local
[root@2core local]# chmod 755 /chroot/usr/local/tomcat/bin/*.sh
[root@2core local]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
chroot: failed to run command `/usr/local/tomcat/bin/catalina.sh': No such file or directory
再次[root@2core local]# strace chroot /chroot /usr/local/tomcat/bin/catalina.sh start
留意末部信息
execve("/usr/local/tomcat/bin/catalina.sh", ["/usr/local/tomcat/bin/catalina.s"..., "start"], [/* 25 vars */]) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh_CN.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh_CN.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh_CN/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8chroot: ) = 8
write(2, "failed to run command `/usr/loca"..., 57failed to run command `/usr/local/tomcat/bin/catalina.sh') = 57
open("/usr/share/locale/zh_CN.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh_CN.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh_CN/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/zh/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
) = 1
close(1) = 0
close(2) = 0
exit_group(127) = ?
[root@2core local]# cd /chroot/
[root@2core chroot]# mkdir -p bin
[root@2core chroot]# cp /bin/bash bin/
[root@2core chroot]# ln -s /bin/bash bin/sh
[root@2core chroot]# cd lib64
[root@2core lib64]# pwd
/chroot/lib64
[root@2core lib64]# ldd /bin/bash
linux-vdso.so.1 => (0x00007fff2536e000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0c47bb5000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0c479b1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0c4761d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0c47ddf000)
[root@2core lib64]# cp /lib64/libtinfo.so.5 /chroot/lib64/
[root@2core lib64]# cp /lib64/libdl.so.2 /chroot/lib64/
cp:是否覆盖"/chroot/lib64/libdl.so.2"? n
[root@2core lib64]# cp /lib64/libc.so.6 /chroot/lib64/
cp:是否覆盖"/chroot/lib64/libc.so.6"? n
[root@2core lib64]# cp /lib64/ld-linux-x86-64.so.2 /chroot/lib64/
cp:是否覆盖"/chroot/lib64/ld-linux-x86-64.so.2"? n
测试 bash是否可以在chroot下正常运行,由于这前已经复制部分的库,所以会提示是否覆盖
[root@2core lib64]# chroot /chroot /bin/bash
bash-4.1# pwd
/
注意,这时的bash shell提示符已经改变了,这说明已经可以在chroot下正常启动bash了
bash-4.1# ls
bash: ls: command not found
bash-4.1# exit
exit
[root@2core lib64]#
再次启动tomcat,报错的内容已经不一样了,报错的内容很详细,就是有几个命令找不到,那么,我们把这些命令及相应的库复制到chroot的相应目录即可
[root@2core lib64]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
/usr/local/tomcat/bin/catalina.sh: line 89: uname: command not found
/usr/local/tomcat/bin/catalina.sh: line 109: dirname: command not found
Cannot find //bin/setclasspath.sh
This file is needed to run this program
[root@2core lib64]#
[root@2core lib64]# cp /bin/uname /chroot/bin/
[root@2core lib64]# mkdir - /chroot/usr/bin
[root@2core lib64]# cp /usr/bin/dirname /chroot/usr/bin/
[root@2core lib64]# ldd /bin/uname
linux-vdso.so.1 => (0x00007fff4b5ff000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcfde5b8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcfde954000)
[root@2core lib64]# ldd /usr/bin/dirname
linux-vdso.so.1 => (0x00007fffb93ea000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8ad0266000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8ad0602000)
[root@2core lib64]# ls /chroot/lib64
- ld-linux-x86-64.so.2 libc.so.6 libdl.so.2 libjli.so libm.so.6 libpthread.so.0 libtinfo.so.5
相关的库之前已经复制了,所以,这里就不需要再复制,再次运行comcat
[root@2core lib64]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
[root@2core lib64]#
这次报错的是环境变量的问题,把变量加进去限可,我们先看看catalina.sh这个文件,里面调用了setclasspath.sh 而报错的内容便在setclasspath.sh脚本里。因此,我在setclasspath.sh设置JAVA_HOME变量
[root@2core bin]# vi /chroot/usr/local/tomcat/bin/setclasspath.sh
# Make sure prerequisite environment variables are set
export JAVA_HOME=/usr/java/jdk1.7.0_45
export JRE_HOME=/usr/java/jdk1.7.0_45/jre
if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then
if $darwin; then
# Bugzilla 54390
if [ -x '/usr/libexec/java_home' ] ; then
export JAVA_HOME=`/usr/libexec/java_home`
# Bugzilla 37284 (reviewed).
elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
fi
else
JAVA_PATH=`which java 2>/dev/null`
if [ "x$JAVA_PATH" != "x" ]; then
JAVA_PATH=`dirname $JAVA_PATH 2>/dev/null`
JRE_HOME=`dirname $JAVA_PATH 2>/dev/null`
fi
if [ "x$JRE_HOME" = "x" ]; then
# XXX: Should we try other locations?
if [ -x /usr/bin/java ]; then
JRE_HOME=/usr
fi
fi
fi
if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then
echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
echo "At least one of these environment variable is needed to run this program"
exit 1
fi
fi
"setclasspath.sh" 119L, 4252C written
再次运行,还是出错,但已经接近成功了,
[root@2core bin]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
/usr/local/tomcat/bin/catalina.sh: line 193: tty: command not found
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0_45/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar
/usr/local/tomcat/bin/catalina.sh: line 354: touch: command not found
/usr/local/tomcat/bin/catalina.sh: line 371: /usr/local/tomcat/logs/catalina.out: No such file or directory
报错还是由相关系统命令调用及文件权限的引用的,打它复制过来
[root@2core bin]# cp /bin/touch /chroot/bin/
[root@2core bin]# ldd /bin/touch
linux-vdso.so.1 => (0x00007fff9343f000)
librt.so.1 => /lib64/librt.so.1 (0x00007fbd55ccc000)
libc.so.6 => /lib64/libc.so.6 (0x00007fbd55939000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbd5571b000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbd55edd000)
[root@2core bin]# cp /lib64/librt.so.1 /chroot/lib64/
[root@2core bin]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
/usr/local/tomcat/bin/catalina.sh: line 193: tty: command not found
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0_45/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar
[root@2core bin]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0_45/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar
终于无报错了,大功造成了?怎么回事,java 进程还是起不来
[root@2core bin]# ps auxf|grep java
root 1449 0.0 0.0 103240 852 pts/1 S+ 11:46 0:00 \_ grep java
查看下了上tomcat的日志
[root@2core local]# more /chroot/usr/local/tomcat/logs/catalina.out
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
[root@2core local]# ls /chroot/usr/local/tomcat/bin/bootstrap.jar
ls: 无法访问/chroot/usr/local/tomcat/bin/bootstrap.jar: 没有那个文件或目录
原来是这个包缺少一个文件
重新从官方网站下载了一个完整的包,解压
#wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz
[root@2core local]# cd /chroot/usr/local/
[root@2core local]# ls
tomcat
[root@2core local]# mv tomcat tomcat.bak
[root@2core local]# mv /usr/local/apache-tomcat-6.0.41 ./tomcat
并在/chroot/usr/local/tomcat/bin/setclasspath.sh加入环境变量
[root@2core bin]# vi /chroot/usr/local/tomcat/bin/setclasspath.sh
# Make sure prerequisite environment variables are set
export JAVA_HOME=/usr/java/jdk1.7.0_45
export JRE_HOME=/usr/java/jdk1.7.0_45/jre
再次运行
[root@2core local]# chroot /chroot /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0_45/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar
[root@2core local]# ps auxf|grep java
root 8220 0.0 0.0 103240 852 pts/0 S+ 10:19 0:00 \_ grep java
root 8201 179 6.7 1443396 68980 pts/0 Sl 10:19 0:05 /usr/java/jdk1.7.0_45/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start