使用脚本为Tomcat 构建chroot non

最近为线上tomcat 构建chroot non-root环境,看了官方文档后,操作步骤还是不少。整个脚本以便批量创建,在这里对我当前的环境做个说明。

具体环境:  tomcat 6.0.3x+apr+apr-util+apr-iconv+jdk1.6+cronolog

根据官方的建议,对jbchroot.c进行编译,获得jbchroot的可执行文件. 使用的好处是,它能够在chroot环境下,使用非root权限进行运行。在于lib64里库文件复制,可以参照物我的。我根据自己当前环境,添加了一下相应的文件。如 cp /usr/local/sbin/cronolog  usr/local/sbin

脚本使用方法:  ./scriptname 后,输入chroot目录路径,以及tomcat解压后的目录环境。

脚本会根据你当前的系统环境变量进行jdk1.6目录复制。

关于脚本中提到的jbchroot.c 在这里可以复制保存并上传到/tmp目录下!

Java/0596003188/jbchrootdotc/tomcat-app-c

#!/bin/bash -x

#used for create tomcat chroot

#myhat.blog.51cto.com

JAVA_HOME=/usr/local/jdk1.6

while true

do

read -p "please input your chroot directory :" CHROOT

read -p "please input tomcat direcotry :" TOM_PATH

if [ "$CHROOT" = "" ];then

echo "Your must input chroot directory"

exit 1

else

test -e $CHROOT || mkdir $CHROOT

if [ "$TOM_PATH" = "" ];then

echo "Your must input tomcat directory"

exit 1

else

test -e $TOM_PATH || mkdir $TOM_PATH

fi

fi

break

done

#mkdir base dir

mkdir -p $CHROOT/chroot/usr/local/sbin/

mkdir -p $CHROOT/chroot/{lib,lib64,etc,tmp,dev,usr,proc,bin}

cd $CHROOT/chroot/

chmod 755 etc dev usr

chmod 1777 tmp

#copy base file

cp -af /etc/hosts etc/

cp -af /etc/resolv.conf etc/

cp -af /etc/nsswitch.conf etc/

#command file

cp /bin/uname bin/

mkdir -p usr/bin/

mkdir -p usr/local/

cp -f /usr/bin/dirname usr/bin/

cp -f /usr/bin/tty usr/bin/

cp -f /bin/touch bin/

cp -f /bin/bash bin/

ln -s /bin/bash bin/sh

cp /usr/local/sbin/cronolog usr/local/sbin

#make dir and copy libs

cp -rva $JAVA_HOME $CHROOT/chroot/$JAVA_HOME

cd /lib64

for i in libpthread.so.0 ld-linux-x86-64.so.2 libc.so.6 libdl.so.2 libm.so.6 libnsl.so.1 libnss_dns.so.2 libnss_files.so.2 libresolv.so.2 librt.so.1 libtermcap.so.2

do

cp -p $i $CHROOT/chroot/lib64

done

#make dev

mkdir -p $CHROOT/chroot/dev/pts

cd /dev

./MAKEDEV -d $CHROOT/chroot/dev null random urandom zero loop* log console

cp -a MAKEDEV $CHROOT/chroot/dev

cp -a /dev/shm $CHROOT/chroot/dev

# make proc

mkdir -p $CHROOT/chroot/proc

mount -t proc proc $CHROOT/chroot/proc

# test

chroot $CHROOT/chroot $JAVA_HOME/bin/java -version && echo "tomcat chroot env is ok"

sleep 3

cp -r $TOM_PATH $CHROOT/chroot/usr/local/

# create user

id tomcat || useradd -M -s /sbin/nologin tomcat

chown tomcat.tomcat -R $CHROOT/chroot/usr/local/tomcat6.0

chown 755 $CHROOT/chroot/usr/local/tomcat6.0

cd $CHROOT/chroot/usr/local/tomcat6.0

chown -R tomcat logs/ temp/ work/ webapps/ conf/

gcc -O /tmp/jbchroot.c -o /usr/local/bin/jbchroot

chmod 755 /usr/local/bin/jbchroot

chown root.root /usr/local/bin/jbchroot

在这里有一个地方需要注意:就是挂载proc文件,有时候机器发生重启,如果直接启动会导致tomcat 启动失败,并且在启动过程中不会有任何提示。如果有重启系统,请记得挂载proc文件。

在此写一个小脚本做备用:假定我使用的chroot目录为 /opt/chroot ,我的tomcat路径为/usr/local/tomcat6.0

#!/bin/bash

case $1 in

start)

mount | grep /opt/chroot

if [ "$?" != "0" ];then

mount -t proc proc /opt/chroot/proc

fi

sleep 3

/usr/local/bin/jbchroot -U tomcat -- /opt/chroot/ /bin/bash /usr/local/tomcat6.0/bin/startup.sh

;;

stop)

if [ "$?" = "0" ];then

umount /opt/chroot/proc

fi

kill -9 `ps aux | grep java| grep -v grep | awk '{print $2}'`

;;

*)

echo "USAGE: {start|stop}"

;;

esac

以上脚本均经过测试,修改后可以正常使用。

[root@localhost ~]# ps aux |grep java

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a7d203c1bcdaa6e61b029b8808f6ead4.html