## debian-base ```bash docker run -it --rm debian:10 bash sed -i "s|deb.debian.org|mirrors.huaweicloud.com|g" /etc/apt/sources.list && \ sed -i "s|security.debian.org|mirrors.huaweicloud.com|g" /etc/apt/sources.list && \ apt-get clean && \ apt-get update apt-get install \ jq \ gnupg2 \ lsb-release \ git \ locales \ ca-certificates \ curl \ wget \ vim \ psmisc \ procps \ autoconf \ gcc \ make \ tcl \ gettext \ difference \ iproute2 \ tree \ -yq ``` ## innstall-jdk-and-tomcat ```bash mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat; curl -fksSL https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz | tar -xvz --strip-components 1 -C /usr/local/java; curl -fksSL https://mirrors.huaweicloud.com/apache/tomcat/tomcat-8/v8.5.61/bin/apache-tomcat-8.5.61.tar.gz | tar -xvz --strip-components 1 -C /usr/local/tomcat; echo "JAVA_HOME=/usr/local/java" >> /etc/profile.d/myenv.sh; \ echo "TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile.d/myenv.sh; \ echo "PATH=\$PATH:\$JAVA_HOME/bin:\$TOMCAT_HOME/bin" >> /etc/profile.d/myenv.sh; . /etc/profile java -version java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode) ``` ## install-apr ### make-and-install ```bash mkdir -p /opt/src/openssl; mkdir -p /opt/src/apr; mkdir -p /opt/src/apr-util; mkdir -p /opt/src/apr-iconv; curl -fksSL https://www.openssl.org/source/openssl-1.1.1i.tar.gz |tar -xvz --strip-components 1 -C /opt/src/openssl; curl -fksSL https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz | tar -xvz --strip-components 1 -C /opt/src/apr; curl -fksSL https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz | tar -xvz --strip-components 1 -C /opt/src/apr-util; curl -fksSL https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-iconv-1.2.2.tar.gz | tar -xvz --strip-components 1 -C /opt/src/apr-iconv; cd /opt/src/openssl; ./config --prefix=/usr/local/openssl; make && make install; cd /opt/src/apr; ## 默认--prefix=/usr/local/apr ./configure --prefix=/usr/local/apr; make && make install; cd /opt/src/apr-iconv; ## 默认--prefix=/usr/local/apache2 ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr; make && make install; cd /opt/src/apr-util; ## 默认--prefix=/usr/local/apr ./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr --with-openssl=/usr/local/openssl --with-apr-iconv=../apr-iconv; make && make install; ``` ```bash xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory #include ^~~~~~~~~ compilation terminated. make[1]: *** [/opt/src/apr-util/build/rules.mk:206: xml/apr_xml.lo] Error 1 make[1]: Leaving directory '/opt/src/apr-util' make: *** [/opt/src/apr-util/build/rules.mk:118: all-recursive] Error 1 apt-get install libexpat1-dev -y ``` ### installed 全部安装完后的目录结构 ```bash root@0df6339ce1c4:/# tree /usr/local/apr/ + tree /usr/local/apr/ /usr/local/apr/ ├── bin │   ├── apr-1-config │   ├── apriconv │   └── apu-1-config ├── build-1 │   ├── apr_rules.mk │   ├── libtool │   ├── make_exports.awk │   ├── make_var_export.awk │   └── mkdir.sh ├── include │   └── apr-1 │   ├── api_version.h │   ├── apr.h │   ├── apr_allocator.h │   ├── apr_anylock.h │   ├── apr_atomic.h │   ├── apr_base64.h │   ├── apr_buckets.h │   ├── apr_crypto.h │   ├── apr_cstr.h │   ├── apr_date.h │   ├── apr_dbd.h │   ├── apr_dbm.h │   ├── apr_dso.h │   ├── apr_encode.h │   ├── apr_env.h │   ├── apr_errno.h │   ├── apr_escape.h │   ├── apr_file_info.h │   ├── apr_file_io.h │   ├── apr_fnmatch.h │   ├── apr_general.h │   ├── apr_getopt.h │   ├── apr_global_mutex.h │   ├── apr_hash.h │   ├── apr_hooks.h │   ├── apr_iconv.h │   ├── apr_inherit.h │   ├── apr_ldap.h │   ├── apr_ldap_init.h │   ├── apr_ldap_option.h │   ├── apr_ldap_rebind.h │   ├── apr_ldap_url.h │   ├── apr_lib.h │   ├── apr_md4.h │   ├── apr_md5.h │   ├── apr_memcache.h │   ├── apr_mmap.h │   ├── apr_network_io.h │   ├── apr_optional.h │   ├── apr_optional_hooks.h │   ├── apr_perms_set.h │   ├── apr_poll.h │   ├── apr_pools.h │   ├── apr_portable.h │   ├── apr_proc_mutex.h │   ├── apr_queue.h │   ├── apr_random.h │   ├── apr_redis.h │   ├── apr_reslist.h │   ├── apr_ring.h │   ├── apr_rmm.h │   ├── apr_sdbm.h │   ├── apr_sha1.h │   ├── apr_shm.h │   ├── apr_signal.h │   ├── apr_siphash.h │   ├── apr_skiplist.h │   ├── apr_strings.h │   ├── apr_strmatch.h │   ├── apr_support.h │   ├── apr_tables.h │   ├── apr_thread_cond.h │   ├── apr_thread_mutex.h │   ├── apr_thread_pool.h │   ├── apr_thread_proc.h │   ├── apr_thread_rwlock.h │   ├── apr_time.h │   ├── apr_uri.h │   ├── apr_user.h │   ├── apr_uuid.h │   ├── apr_version.h │   ├── apr_want.h │   ├── apr_xlate.h │   ├── apr_xml.h │   ├── apu.h │   ├── apu_errno.h │   ├── apu_version.h │   └── apu_want.h └── lib ├── apr.exp ├── aprutil.exp ├── iconv │   ├── _tbl_simple.a │   ├── _tbl_simple.la │   ├── _tbl_simple.so │   ├── adobe-stdenc.a │   ├── adobe-stdenc.la │   ├── adobe-stdenc.so │   ├── adobe-symbol.a │   ├── adobe-symbol.la │   ├── adobe-symbol.so │   ├── adobe-zdingbats.a │   ├── adobe-zdingbats.la │   ├── adobe-zdingbats.so │   ├── big5.a │   ├── big5.la │   ├── big5.so │   ├── cns11643-plane1.a │   ├── cns11643-plane1.la │   ├── cns11643-plane1.so │   ├── cns11643-plane14.a │   ├── cns11643-plane14.la │   ├── cns11643-plane14.so │   ├── cns11643-plane2.a │   ├── cns11643-plane2.la │   ├── cns11643-plane2.so │   ├── cp037.a │   ├── cp037.la │   ├── cp037.so │   ├── cp038.a │   ├── cp038.la │   ├── cp038.so │   ├── cp10000.a │   ├── cp10000.la │   ├── cp10000.so │   ├── cp10006.a │   ├── cp10006.la │   ├── cp10006.so │   ├── cp10007.a │   ├── cp10007.la │   ├── cp10007.so │   ├── cp10029.a │   ├── cp10029.la │   ├── cp10029.so │   ├── cp1006.a │   ├── cp1006.la │   ├── cp1006.so │   ├── cp10079.a │   ├── cp10079.la │   ├── cp10079.so │   ├── cp10081.a │   ├── cp10081.la │   ├── cp10081.so │   ├── cp1026.a │   ├── cp1026.la │   ├── cp1026.so │   ├── cp273.a │   ├── cp273.la │   ├── cp273.so │   ├── cp274.a │   ├── cp274.la │   ├── cp274.so │   ├── cp275.a │   ├── cp275.la │   ├── cp275.so │   ├── cp277.a │   ├── cp277.la │   ├── cp277.so │   ├── cp278.a │   ├── cp278.la │   ├── cp278.so │   ├── cp280.a │   ├── cp280.la │   ├── cp280.so │   ├── cp281.a │   ├── cp281.la │   ├── cp281.so │   ├── cp284.a │   ├── cp284.la │   ├── cp284.so │   ├── cp285.a │   ├── cp285.la │   ├── cp285.so │   ├── cp290.a │   ├── cp290.la │   ├── cp290.so │   ├── cp297.a │   ├── cp297.la │   ├── cp297.so │   ├── cp420.a │   ├── cp420.la │   ├── cp420.so │   ├── cp423.a │   ├── cp423.la │   ├── cp423.so │   ├── cp424.a │   ├── cp424.la │   ├── cp424.so │   ├── cp437.a │   ├── cp437.la │   ├── cp437.so │   ├── cp500.a │   ├── cp500.la │   ├── cp500.so │   ├── cp737.a │   ├── cp737.la │   ├── cp737.so │   ├── cp775.a │   ├── cp775.la │   ├── cp775.so │   ├── cp850.a │   ├── cp850.la │   ├── cp850.so │   ├── cp851.a │   ├── cp851.la │   ├── cp851.so │   ├── cp852.a │   ├── cp852.la │   ├── cp852.so │   ├── cp855.a │   ├── cp855.la │   ├── cp855.so │   ├── cp856.a │   ├── cp856.la │   ├── cp856.so │   ├── cp857.a │   ├── cp857.la │   ├── cp857.so │   ├── cp860.a │   ├── cp860.la │   ├── cp860.so │   ├── cp861.a │   ├── cp861.la │   ├── cp861.so │   ├── cp862.a │   ├── cp862.la │   ├── cp862.so │   ├── cp863.a │   ├── cp863.la │   ├── cp863.so │   ├── cp864.a │   ├── cp864.la │   ├── cp864.so │   ├── cp865.a │   ├── cp865.la │   ├── cp865.so │   ├── cp866.a │   ├── cp866.la │   ├── cp866.so │   ├── cp868.a │   ├── cp868.la │   ├── cp868.so │   ├── cp869.a │   ├── cp869.la │   ├── cp869.so │   ├── cp870.a │   ├── cp870.la │   ├── cp870.so │   ├── cp871.a │   ├── cp871.la │   ├── cp871.so │   ├── cp874.a │   ├── cp874.la │   ├── cp874.so │   ├── cp875.a │   ├── cp875.la │   ├── cp875.so │   ├── cp880.a │   ├── cp880.la │   ├── cp880.so │   ├── cp891.a │   ├── cp891.la │   ├── cp891.so │   ├── cp903.a │   ├── cp903.la │   ├── cp903.so │   ├── cp904.a │   ├── cp904.la │   ├── cp904.so │   ├── cp905.a │   ├── cp905.la │   ├── cp905.so │   ├── cp918.a │   ├── cp918.la │   ├── cp918.so │   ├── cp932.a │   ├── cp932.la │   ├── cp932.so │   ├── cp936.a │   ├── cp936.la │   ├── cp936.so │   ├── cp949.a │   ├── cp949.la │   ├── cp949.so │   ├── cp950.a │   ├── cp950.la │   ├── cp950.so │   ├── dec-mcs.a │   ├── dec-mcs.la │   ├── dec-mcs.so │   ├── ebcdic-at-de-a.a │   ├── ebcdic-at-de-a.la │   ├── ebcdic-at-de-a.so │   ├── ebcdic-at-de.a │   ├── ebcdic-at-de.la │   ├── ebcdic-at-de.so │   ├── ebcdic-ca-fr.a │   ├── ebcdic-ca-fr.la │   ├── ebcdic-ca-fr.so │   ├── ebcdic-dk-no-a.a │   ├── ebcdic-dk-no-a.la │   ├── ebcdic-dk-no-a.so │   ├── ebcdic-dk-no.a │   ├── ebcdic-dk-no.la │   ├── ebcdic-dk-no.so │   ├── ebcdic-es-a.a │   ├── ebcdic-es-a.la │   ├── ebcdic-es-a.so │   ├── ebcdic-es-s.a │   ├── ebcdic-es-s.la │   ├── ebcdic-es-s.so │   ├── ebcdic-es.a │   ├── ebcdic-es.la │   ├── ebcdic-es.so │   ├── ebcdic-fi-se-a.a │   ├── ebcdic-fi-se-a.la │   ├── ebcdic-fi-se-a.so │   ├── ebcdic-fi-se.a │   ├── ebcdic-fi-se.la │   ├── ebcdic-fi-se.so │   ├── ebcdic-fr.a │   ├── ebcdic-fr.la │   ├── ebcdic-fr.so │   ├── ebcdic-it.a │   ├── ebcdic-it.la │   ├── ebcdic-it.so │   ├── ebcdic-pt.a │   ├── ebcdic-pt.la │   ├── ebcdic-pt.so │   ├── ebcdic-uk.a │   ├── ebcdic-uk.la │   ├── ebcdic-uk.so │   ├── ebcdic-us.a │   ├── ebcdic-us.la │   ├── ebcdic-us.so │   ├── euc-jp.a │   ├── euc-jp.la │   ├── euc-jp.so │   ├── euc-kr.a │   ├── euc-kr.la │   ├── euc-kr.so │   ├── euc-tw.a │   ├── euc-tw.la │   ├── euc-tw.so │   ├── gb12345.a │   ├── gb12345.la │   ├── gb12345.so │   ├── gb2312.a │   ├── gb2312.la │   ├── gb2312.so │   ├── gb_2312-80.a │   ├── gb_2312-80.la │   ├── gb_2312-80.so │   ├── hp-roman8.a │   ├── hp-roman8.la │   ├── hp-roman8.so │   ├── iso-10646-ucs-2.a │   ├── iso-10646-ucs-2.la │   ├── iso-10646-ucs-2.so │   ├── iso-10646-ucs-4.a │   ├── iso-10646-ucs-4.la │   ├── iso-10646-ucs-4.so │   ├── iso-2022-cn.a │   ├── iso-2022-cn.la │   ├── iso-2022-cn.so │   ├── iso-2022-jp-2.a │   ├── iso-2022-jp-2.la │   ├── iso-2022-jp-2.so │   ├── iso-2022-jp.a │   ├── iso-2022-jp.la │   ├── iso-2022-jp.so │   ├── iso-2022-kr.a │   ├── iso-2022-kr.la │   ├── iso-2022-kr.so │   ├── iso-8859-1.a │   ├── iso-8859-1.la │   ├── iso-8859-1.so │   ├── iso-8859-10.a │   ├── iso-8859-10.la │   ├── iso-8859-10.so │   ├── iso-8859-13.a │   ├── iso-8859-13.la │   ├── iso-8859-13.so │   ├── iso-8859-14.a │   ├── iso-8859-14.la │   ├── iso-8859-14.so │   ├── iso-8859-15.a │   ├── iso-8859-15.la │   ├── iso-8859-15.so │   ├── iso-8859-2.a │   ├── iso-8859-2.la │   ├── iso-8859-2.so │   ├── iso-8859-3.a │   ├── iso-8859-3.la │   ├── iso-8859-3.so │   ├── iso-8859-4.a │   ├── iso-8859-4.la │   ├── iso-8859-4.so │   ├── iso-8859-5.a │   ├── iso-8859-5.la │   ├── iso-8859-5.so │   ├── iso-8859-6.a │   ├── iso-8859-6.la │   ├── iso-8859-6.so │   ├── iso-8859-7.a │   ├── iso-8859-7.la │   ├── iso-8859-7.so │   ├── iso-8859-8.a │   ├── iso-8859-8.la │   ├── iso-8859-8.so │   ├── iso-8859-9.a │   ├── iso-8859-9.la │   ├── iso-8859-9.so │   ├── iso-ir-10.a │   ├── iso-ir-10.la │   ├── iso-ir-10.so │   ├── iso-ir-102.a │   ├── iso-ir-102.la │   ├── iso-ir-102.so │   ├── iso-ir-103.a │   ├── iso-ir-103.la │   ├── iso-ir-103.so │   ├── iso-ir-11.a │   ├── iso-ir-11.la │   ├── iso-ir-11.so │   ├── iso-ir-111.a │   ├── iso-ir-111.la │   ├── iso-ir-111.so │   ├── iso-ir-121.a │   ├── iso-ir-121.la │   ├── iso-ir-121.so │   ├── iso-ir-122.a │   ├── iso-ir-122.la │   ├── iso-ir-122.so │   ├── iso-ir-123.a │   ├── iso-ir-123.la │   ├── iso-ir-123.so │   ├── iso-ir-128.a │   ├── iso-ir-128.la │   ├── iso-ir-128.so │   ├── iso-ir-13.a │   ├── iso-ir-13.la │   ├── iso-ir-13.so │   ├── iso-ir-139.a │   ├── iso-ir-139.la │   ├── iso-ir-139.so │   ├── iso-ir-14.a │   ├── iso-ir-14.la │   ├── iso-ir-14.so │   ├── iso-ir-141.a │   ├── iso-ir-141.la │   ├── iso-ir-141.so │   ├── iso-ir-142.a │   ├── iso-ir-142.la │   ├── iso-ir-142.so │   ├── iso-ir-143.a │   ├── iso-ir-143.la │   ├── iso-ir-143.so │   ├── iso-ir-146.a │   ├── iso-ir-146.la │   ├── iso-ir-146.so │   ├── iso-ir-147.a │   ├── iso-ir-147.la │   ├── iso-ir-147.so │   ├── iso-ir-15.a │   ├── iso-ir-15.la │   ├── iso-ir-15.so │   ├── iso-ir-150.a │   ├── iso-ir-150.la │   ├── iso-ir-150.so │   ├── iso-ir-151.a │   ├── iso-ir-151.la │   ├── iso-ir-151.so │   ├── iso-ir-152.a │   ├── iso-ir-152.la │   ├── iso-ir-152.so │   ├── iso-ir-153.a │   ├── iso-ir-153.la │   ├── iso-ir-153.so │   ├── iso-ir-154.a │   ├── iso-ir-154.la │   ├── iso-ir-154.so │   ├── iso-ir-155.a │   ├── iso-ir-155.la │   ├── iso-ir-155.so │   ├── iso-ir-158.a │   ├── iso-ir-158.la │   ├── iso-ir-158.so │   ├── iso-ir-16.a │   ├── iso-ir-16.la │   ├── iso-ir-16.so │   ├── iso-ir-17.a │   ├── iso-ir-17.la │   ├── iso-ir-17.so │   ├── iso-ir-18.a │   ├── iso-ir-18.la │   ├── iso-ir-18.so │   ├── iso-ir-19.a │   ├── iso-ir-19.la │   ├── iso-ir-19.so │   ├── iso-ir-2.a │   ├── iso-ir-2.la │   ├── iso-ir-2.so │   ├── iso-ir-21.a │   ├── iso-ir-21.la │   ├── iso-ir-21.so │   ├── iso-ir-25.a │   ├── iso-ir-25.la │   ├── iso-ir-25.so │   ├── iso-ir-27.a │   ├── iso-ir-27.la │   ├── iso-ir-27.so │   ├── iso-ir-37.a │   ├── iso-ir-37.la │   ├── iso-ir-37.so │   ├── iso-ir-4.a │   ├── iso-ir-4.la │   ├── iso-ir-4.so │   ├── iso-ir-47.a │   ├── iso-ir-47.la │   ├── iso-ir-47.so │   ├── iso-ir-49.a │   ├── iso-ir-49.la │   ├── iso-ir-49.so │   ├── iso-ir-50.a │   ├── iso-ir-50.la │   ├── iso-ir-50.so │   ├── iso-ir-51.a │   ├── iso-ir-51.la │   ├── iso-ir-51.so │   ├── iso-ir-54.a │   ├── iso-ir-54.la │   ├── iso-ir-54.so │   ├── iso-ir-55.a │   ├── iso-ir-55.la │   ├── iso-ir-55.so │   ├── iso-ir-57.a │   ├── iso-ir-57.la │   ├── iso-ir-57.so │   ├── iso-ir-60.a │   ├── iso-ir-60.la │   ├── iso-ir-60.so │   ├── iso-ir-61.a │   ├── iso-ir-61.la │   ├── iso-ir-61.so │   ├── iso-ir-69.a │   ├── iso-ir-69.la │   ├── iso-ir-69.so │   ├── iso-ir-70.a │   ├── iso-ir-70.la │   ├── iso-ir-70.so │   ├── iso-ir-8-1.a │   ├── iso-ir-8-1.la │   ├── iso-ir-8-1.so │   ├── iso-ir-8-2.a │   ├── iso-ir-8-2.la │   ├── iso-ir-8-2.so │   ├── iso-ir-84.a │   ├── iso-ir-84.la │   ├── iso-ir-84.so │   ├── iso-ir-85.a │   ├── iso-ir-85.la │   ├── iso-ir-85.so │   ├── iso-ir-86.a │   ├── iso-ir-86.la │   ├── iso-ir-86.so │   ├── iso-ir-88.a │   ├── iso-ir-88.la │   ├── iso-ir-88.so │   ├── iso-ir-89.a │   ├── iso-ir-89.la │   ├── iso-ir-89.so │   ├── iso-ir-9-1.a │   ├── iso-ir-9-1.la │   ├── iso-ir-9-1.so │   ├── iso-ir-9-2.a │   ├── iso-ir-9-2.la │   ├── iso-ir-9-2.so │   ├── iso-ir-90.a │   ├── iso-ir-90.la │   ├── iso-ir-90.so │   ├── iso-ir-91.a │   ├── iso-ir-91.la │   ├── iso-ir-91.so │   ├── iso-ir-92.a │   ├── iso-ir-92.la │   ├── iso-ir-92.so │   ├── iso-ir-93.a │   ├── iso-ir-93.la │   ├── iso-ir-93.so │   ├── iso-ir-94.a │   ├── iso-ir-94.la │   ├── iso-ir-94.so │   ├── iso-ir-95.a │   ├── iso-ir-95.la │   ├── iso-ir-95.so │   ├── iso-ir-96.a │   ├── iso-ir-96.la │   ├── iso-ir-96.so │   ├── iso-ir-98.a │   ├── iso-ir-98.la │   ├── iso-ir-98.so │   ├── iso-ir-99.a │   ├── iso-ir-99.la │   ├── iso-ir-99.so │   ├── iso646-dk.a │   ├── iso646-dk.la │   ├── iso646-dk.so │   ├── iso646-kr.a │   ├── iso646-kr.la │   ├── iso646-kr.so │   ├── jis_x0201.a │   ├── jis_x0201.la │   ├── jis_x0201.so │   ├── jis_x0208-1983.a │   ├── jis_x0208-1983.la │   ├── jis_x0208-1983.so │   ├── jis_x0212-1990.a │   ├── jis_x0212-1990.la │   ├── jis_x0212-1990.so │   ├── johab.a │   ├── johab.la │   ├── johab.so │   ├── koi8-r.a │   ├── koi8-r.la │   ├── koi8-r.so │   ├── koi8-ru.a │   ├── koi8-ru.la │   ├── koi8-ru.so │   ├── koi8-u.a │   ├── koi8-u.la │   ├── koi8-u.so │   ├── ksx1001.a │   ├── ksx1001.la │   ├── ksx1001.so │   ├── mac-ce.a │   ├── mac-ce.la │   ├── mac-ce.so │   ├── mac-croatian.a │   ├── mac-croatian.la │   ├── mac-croatian.so │   ├── mac-cyrillic.a │   ├── mac-cyrillic.la │   ├── mac-cyrillic.so │   ├── mac-dingbats.a │   ├── mac-dingbats.la │   ├── mac-dingbats.so │   ├── mac-greek.a │   ├── mac-greek.la │   ├── mac-greek.so │   ├── mac-iceland.a │   ├── mac-iceland.la │   ├── mac-iceland.so │   ├── mac-japan.a │   ├── mac-japan.la │   ├── mac-japan.so │   ├── mac-roman.a │   ├── mac-roman.la │   ├── mac-roman.so │   ├── mac-romania.a │   ├── mac-romania.la │   ├── mac-romania.so │   ├── mac-thai.a │   ├── mac-thai.la │   ├── mac-thai.so │   ├── mac-turkish.a │   ├── mac-turkish.la │   ├── mac-turkish.so │   ├── mac-ukraine.a │   ├── mac-ukraine.la │   ├── mac-ukraine.so │   ├── macintosh.a │   ├── macintosh.la │   ├── macintosh.so │   ├── osd_ebcdic_df04_1.a │   ├── osd_ebcdic_df04_1.la │   ├── osd_ebcdic_df04_1.so │   ├── osd_ebcdic_df04_15.a │   ├── osd_ebcdic_df04_15.la │   ├── osd_ebcdic_df04_15.so │   ├── shift_jis.a │   ├── shift_jis.la │   ├── shift_jis.so │   ├── ucs2-internal.a │   ├── ucs2-internal.la │   ├── ucs2-internal.so │   ├── ucs4-internal.a │   ├── ucs4-internal.la │   ├── ucs4-internal.so │   ├── unicode-1-1-utf-7.a │   ├── unicode-1-1-utf-7.la │   ├── unicode-1-1-utf-7.so │   ├── us-ascii.a │   ├── us-ascii.la │   ├── us-ascii.so │   ├── utf-16.a │   ├── utf-16.la │   ├── utf-16.so │   ├── utf-8.a │   ├── utf-8.la │   ├── utf-8.so │   ├── windows-1250.a │   ├── windows-1250.la │   ├── windows-1250.so │   ├── windows-1251.a │   ├── windows-1251.la │   ├── windows-1251.so │   ├── windows-1252.a │   ├── windows-1252.la │   ├── windows-1252.so │   ├── windows-1253.a │   ├── windows-1253.la │   ├── windows-1253.so │   ├── windows-1254.a │   ├── windows-1254.la │   ├── windows-1254.so │   ├── windows-1255.a │   ├── windows-1255.la │   ├── windows-1255.so │   ├── windows-1256.a │   ├── windows-1256.la │   ├── windows-1256.so │   ├── windows-1257.a │   ├── windows-1257.la │   ├── windows-1257.so │   ├── windows-1258.a │   ├── windows-1258.la │   └── windows-1258.so ├── libapr-1.a ├── libapr-1.la ├── libapr-1.so -> libapr-1.so.0.7.0 ├── libapr-1.so.0 -> libapr-1.so.0.7.0 ├── libapr-1.so.0.7.0 ├── libapriconv-1.a ├── libapriconv-1.la ├── libapriconv-1.so -> libapriconv-1.so.0.2.2 ├── libapriconv-1.so.0 -> libapriconv-1.so.0.2.2 ├── libapriconv-1.so.0.2.2 ├── libaprutil-1.a ├── libaprutil-1.la ├── libaprutil-1.so -> libaprutil-1.so.0.6.1 ├── libaprutil-1.so.0 -> libaprutil-1.so.0.6.1 ├── libaprutil-1.so.0.6.1 └── pkgconfig ├── apr-1.pc └── apr-util-1.pc 7 directories, 741 files ``` ## install-tomcat-native ### make-and-install ```bash cd /usr/local/tomcat/bin; tar -xvf tomcat-native.tar.gz; cd tomcat-native-1.2.25-src/native ./configure \ --with-apr=/usr/local/apr \ --with-java-home=/usr/local/java \ --with-ssl=/usr/local/openssl; make && make install; ``` ```bash checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking target system type... x86_64-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking for working mkdir -p... yes Tomcat Native Version: 1.2.25 checking for chosen layout... tcnative checking for APR... yes configure: APR 1.7.0 detected. setting CC to "gcc" setting CPP to "gcc -E" checking JAVA_HOME... /usr/local/java/ adding "-I/usr/local/java//include" to TCNATIVE_PRIV_INCLUDES checking for JDK os include directory... linux adding "-I/usr/local/java//include/linux" to TCNATIVE_PRIV_INCLUDES checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for OpenSSL library... using openssl from /usr/local/openssl/lib and /usr/local/openssl/include checking OpenSSL library version >= 1.0.2... ok checking for OpenSSL DSA support... yes adding "-I/usr/local/openssl/include" to TCNATIVE_PRIV_INCLUDES setting TCNATIVE_LDFLAGS to "-L/usr/local/openssl/lib -Wl,-rpath,/usr/local/openssl/lib -lssl -lcrypto" adding "-DHAVE_OPENSSL" to CFLAGS setting TCNATIVE_LIBS to "" setting TCNATIVE_LIBS to " /usr/local/apr/lib/libapr-1.la -lrt -lcrypt -lpthread -ldl" adding "-DTCNATIVE_LINUX" to CFLAGS checking for apr_pollset_wakeup in -lapr-1... yes adding "-DHAVE_POLLSET_WAKEUP" to CFLAGS configure: creating ./config.status config.status: creating Makefile config.status: executing default commands ``` ```bash make[1]: Entering directory '/usr/local/tomcat/bin/tomcat-native-1.2.25-src/native' make[1]: Nothing to be done for 'local-all'. make[1]: Leaving directory '/usr/local/tomcat/bin/tomcat-native-1.2.25-src/native' /usr/local/apr/build-1/mkdir.sh /usr/local/apr/lib /bin/bash /usr/local/apr/build-1/libtool --mode=install /usr/bin/install -c -m 755 libtcnative-1.la /usr/local/apr/lib libtool: install: /usr/bin/install -c -m 755 .libs/libtcnative-1.so.0.2.25 /usr/local/apr/lib/libtcnative-1.so.0.2.25 libtool: install: (cd /usr/local/apr/lib && { ln -s -f libtcnative-1.so.0.2.25 libtcnative-1.so.0 || { rm -f libtcnative-1.so.0 && ln -s libtcnative-1.so.0.2.25 libtcnative-1.so.0; }; }) libtool: install: (cd /usr/local/apr/lib && { ln -s -f libtcnative-1.so.0.2.25 libtcnative-1.so || { rm -f libtcnative-1.so && ln -s libtcnative-1.so.0.2.25 libtcnative-1.so; }; }) libtool: install: /usr/bin/install -c -m 755 .libs/libtcnative-1.lai /usr/local/apr/lib/libtcnative-1.la libtool: install: /usr/bin/install -c -m 755 .libs/libtcnative-1.a /usr/local/apr/lib/libtcnative-1.a libtool: install: chmod 644 /usr/local/apr/lib/libtcnative-1.a libtool: install: ranlib /usr/local/apr/lib/libtcnative-1.a libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/bin:/usr/local/tomcat/bin:/sbin" ldconfig -n /usr/local/apr/lib ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/apr/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the '-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the 'LD_RUN_PATH' environment variable during linking - use the '-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to '/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- ``` ### installed 安装完tomcat-native之后/usr/local/apr结构,我们看到/usr/local/apr/lib目录下多了几个libtcnative-1相关的.so文件 ```bash /usr/local/apr ├── bin │   ├── apr-1-config │   ├── apriconv │   └── apu-1-config ├── build-1 │   ├── apr_rules.mk │   ├── libtool │   ├── make_exports.awk │   ├── make_var_export.awk │   └── mkdir.sh ├── include │   └── apr-1 │   ├── api_version.h │   ├── apr.h │   ├── apr_allocator.h │   ├── apr_anylock.h │   ├── apr_atomic.h │   ├── apr_base64.h │   ├── apr_buckets.h │   ├── apr_crypto.h │   ├── apr_cstr.h │   ├── apr_date.h │   ├── apr_dbd.h │   ├── apr_dbm.h │   ├── apr_dso.h │   ├── apr_encode.h │   ├── apr_env.h │   ├── apr_errno.h │   ├── apr_escape.h │   ├── apr_file_info.h │   ├── apr_file_io.h │   ├── apr_fnmatch.h │   ├── apr_general.h │   ├── apr_getopt.h │   ├── apr_global_mutex.h │   ├── apr_hash.h │   ├── apr_hooks.h │   ├── apr_iconv.h │   ├── apr_inherit.h │   ├── apr_ldap.h │   ├── apr_ldap_init.h │   ├── apr_ldap_option.h │   ├── apr_ldap_rebind.h │   ├── apr_ldap_url.h │   ├── apr_lib.h │   ├── apr_md4.h │   ├── apr_md5.h │   ├── apr_memcache.h │   ├── apr_mmap.h │   ├── apr_network_io.h │   ├── apr_optional.h │   ├── apr_optional_hooks.h │   ├── apr_perms_set.h │   ├── apr_poll.h │   ├── apr_pools.h │   ├── apr_portable.h │   ├── apr_proc_mutex.h │   ├── apr_queue.h │   ├── apr_random.h │   ├── apr_redis.h │   ├── apr_reslist.h │   ├── apr_ring.h │   ├── apr_rmm.h │   ├── apr_sdbm.h │   ├── apr_sha1.h │   ├── apr_shm.h │   ├── apr_signal.h │   ├── apr_siphash.h │   ├── apr_skiplist.h │   ├── apr_strings.h │   ├── apr_strmatch.h │   ├── apr_support.h │   ├── apr_tables.h │   ├── apr_thread_cond.h │   ├── apr_thread_mutex.h │   ├── apr_thread_pool.h │   ├── apr_thread_proc.h │   ├── apr_thread_rwlock.h │   ├── apr_time.h │   ├── apr_uri.h │   ├── apr_user.h │   ├── apr_uuid.h │   ├── apr_version.h │   ├── apr_want.h │   ├── apr_xlate.h │   ├── apr_xml.h │   ├── apu.h │   ├── apu_errno.h │   ├── apu_version.h │   └── apu_want.h └── lib ├── apr.exp ├── aprutil.exp ├── iconv │   ├── _tbl_simple.a │   ├── _tbl_simple.la │   ├── _tbl_simple.so │   ├── adobe-stdenc.a │   ├── adobe-stdenc.la │   ├── adobe-stdenc.so │   ├── adobe-symbol.a │   ├── adobe-symbol.la │   ├── adobe-symbol.so │   ├── adobe-zdingbats.a │   ├── adobe-zdingbats.la │   ├── adobe-zdingbats.so │   ├── big5.a │   ├── big5.la │   ├── big5.so │   ├── cns11643-plane1.a │   ├── cns11643-plane1.la │   ├── cns11643-plane1.so │   ├── cns11643-plane14.a │   ├── cns11643-plane14.la │   ├── cns11643-plane14.so │   ├── cns11643-plane2.a │   ├── cns11643-plane2.la │   ├── cns11643-plane2.so │   ├── cp037.a │   ├── cp037.la │   ├── cp037.so │   ├── cp038.a │   ├── cp038.la │   ├── cp038.so │   ├── cp10000.a │   ├── cp10000.la │   ├── cp10000.so │   ├── cp10006.a │   ├── cp10006.la │   ├── cp10006.so │   ├── cp10007.a │   ├── cp10007.la │   ├── cp10007.so │   ├── cp10029.a │   ├── cp10029.la │   ├── cp10029.so │   ├── cp1006.a │   ├── cp1006.la │   ├── cp1006.so │   ├── cp10079.a │   ├── cp10079.la │   ├── cp10079.so │   ├── cp10081.a │   ├── cp10081.la │   ├── cp10081.so │   ├── cp1026.a │   ├── cp1026.la │   ├── cp1026.so │   ├── cp273.a │   ├── cp273.la │   ├── cp273.so │   ├── cp274.a │   ├── cp274.la │   ├── cp274.so │   ├── cp275.a │   ├── cp275.la │   ├── cp275.so │   ├── cp277.a │   ├── cp277.la │   ├── cp277.so │   ├── cp278.a │   ├── cp278.la │   ├── cp278.so │   ├── cp280.a │   ├── cp280.la │   ├── cp280.so │   ├── cp281.a │   ├── cp281.la │   ├── cp281.so │   ├── cp284.a │   ├── cp284.la │   ├── cp284.so │   ├── cp285.a │   ├── cp285.la │   ├── cp285.so │   ├── cp290.a │   ├── cp290.la │   ├── cp290.so │   ├── cp297.a │   ├── cp297.la │   ├── cp297.so │   ├── cp420.a │   ├── cp420.la │   ├── cp420.so │   ├── cp423.a │   ├── cp423.la │   ├── cp423.so │   ├── cp424.a │   ├── cp424.la │   ├── cp424.so │   ├── cp437.a │   ├── cp437.la │   ├── cp437.so │   ├── cp500.a │   ├── cp500.la │   ├── cp500.so │   ├── cp737.a │   ├── cp737.la │   ├── cp737.so │   ├── cp775.a │   ├── cp775.la │   ├── cp775.so │   ├── cp850.a │   ├── cp850.la │   ├── cp850.so │   ├── cp851.a │   ├── cp851.la │   ├── cp851.so │   ├── cp852.a │   ├── cp852.la │   ├── cp852.so │   ├── cp855.a │   ├── cp855.la │   ├── cp855.so │   ├── cp856.a │   ├── cp856.la │   ├── cp856.so │   ├── cp857.a │   ├── cp857.la │   ├── cp857.so │   ├── cp860.a │   ├── cp860.la │   ├── cp860.so │   ├── cp861.a │   ├── cp861.la │   ├── cp861.so │   ├── cp862.a │   ├── cp862.la │   ├── cp862.so │   ├── cp863.a │   ├── cp863.la │   ├── cp863.so │   ├── cp864.a │   ├── cp864.la │   ├── cp864.so │   ├── cp865.a │   ├── cp865.la │   ├── cp865.so │   ├── cp866.a │   ├── cp866.la │   ├── cp866.so │   ├── cp868.a │   ├── cp868.la │   ├── cp868.so │   ├── cp869.a │   ├── cp869.la │   ├── cp869.so │   ├── cp870.a │   ├── cp870.la │   ├── cp870.so │   ├── cp871.a │   ├── cp871.la │   ├── cp871.so │   ├── cp874.a │   ├── cp874.la │   ├── cp874.so │   ├── cp875.a │   ├── cp875.la │   ├── cp875.so │   ├── cp880.a │   ├── cp880.la │   ├── cp880.so │   ├── cp891.a │   ├── cp891.la │   ├── cp891.so │   ├── cp903.a │   ├── cp903.la │   ├── cp903.so │   ├── cp904.a │   ├── cp904.la │   ├── cp904.so │   ├── cp905.a │   ├── cp905.la │   ├── cp905.so │   ├── cp918.a │   ├── cp918.la │   ├── cp918.so │   ├── cp932.a │   ├── cp932.la │   ├── cp932.so │   ├── cp936.a │   ├── cp936.la │   ├── cp936.so │   ├── cp949.a │   ├── cp949.la │   ├── cp949.so │   ├── cp950.a │   ├── cp950.la │   ├── cp950.so │   ├── dec-mcs.a │   ├── dec-mcs.la │   ├── dec-mcs.so │   ├── ebcdic-at-de-a.a │   ├── ebcdic-at-de-a.la │   ├── ebcdic-at-de-a.so │   ├── ebcdic-at-de.a │   ├── ebcdic-at-de.la │   ├── ebcdic-at-de.so │   ├── ebcdic-ca-fr.a │   ├── ebcdic-ca-fr.la │   ├── ebcdic-ca-fr.so │   ├── ebcdic-dk-no-a.a │   ├── ebcdic-dk-no-a.la │   ├── ebcdic-dk-no-a.so │   ├── ebcdic-dk-no.a │   ├── ebcdic-dk-no.la │   ├── ebcdic-dk-no.so │   ├── ebcdic-es-a.a │   ├── ebcdic-es-a.la │   ├── ebcdic-es-a.so │   ├── ebcdic-es-s.a │   ├── ebcdic-es-s.la │   ├── ebcdic-es-s.so │   ├── ebcdic-es.a │   ├── ebcdic-es.la │   ├── ebcdic-es.so │   ├── ebcdic-fi-se-a.a │   ├── ebcdic-fi-se-a.la │   ├── ebcdic-fi-se-a.so │   ├── ebcdic-fi-se.a │   ├── ebcdic-fi-se.la │   ├── ebcdic-fi-se.so │   ├── ebcdic-fr.a │   ├── ebcdic-fr.la │   ├── ebcdic-fr.so │   ├── ebcdic-it.a │   ├── ebcdic-it.la │   ├── ebcdic-it.so │   ├── ebcdic-pt.a │   ├── ebcdic-pt.la │   ├── ebcdic-pt.so │   ├── ebcdic-uk.a │   ├── ebcdic-uk.la │   ├── ebcdic-uk.so │   ├── ebcdic-us.a │   ├── ebcdic-us.la │   ├── ebcdic-us.so │   ├── euc-jp.a │   ├── euc-jp.la │   ├── euc-jp.so │   ├── euc-kr.a │   ├── euc-kr.la │   ├── euc-kr.so │   ├── euc-tw.a │   ├── euc-tw.la │   ├── euc-tw.so │   ├── gb12345.a │   ├── gb12345.la │   ├── gb12345.so │   ├── gb2312.a │   ├── gb2312.la │   ├── gb2312.so │   ├── gb_2312-80.a │   ├── gb_2312-80.la │   ├── gb_2312-80.so │   ├── hp-roman8.a │   ├── hp-roman8.la │   ├── hp-roman8.so │   ├── iso-10646-ucs-2.a │   ├── iso-10646-ucs-2.la │   ├── iso-10646-ucs-2.so │   ├── iso-10646-ucs-4.a │   ├── iso-10646-ucs-4.la │   ├── iso-10646-ucs-4.so │   ├── iso-2022-cn.a │   ├── iso-2022-cn.la │   ├── iso-2022-cn.so │   ├── iso-2022-jp-2.a │   ├── iso-2022-jp-2.la │   ├── iso-2022-jp-2.so │   ├── iso-2022-jp.a │   ├── iso-2022-jp.la │   ├── iso-2022-jp.so │   ├── iso-2022-kr.a │   ├── iso-2022-kr.la │   ├── iso-2022-kr.so │   ├── iso-8859-1.a │   ├── iso-8859-1.la │   ├── iso-8859-1.so │   ├── iso-8859-10.a │   ├── iso-8859-10.la │   ├── iso-8859-10.so │   ├── iso-8859-13.a │   ├── iso-8859-13.la │   ├── iso-8859-13.so │   ├── iso-8859-14.a │   ├── iso-8859-14.la │   ├── iso-8859-14.so │   ├── iso-8859-15.a │   ├── iso-8859-15.la │   ├── iso-8859-15.so │   ├── iso-8859-2.a │   ├── iso-8859-2.la │   ├── iso-8859-2.so │   ├── iso-8859-3.a │   ├── iso-8859-3.la │   ├── iso-8859-3.so │   ├── iso-8859-4.a │   ├── iso-8859-4.la │   ├── iso-8859-4.so │   ├── iso-8859-5.a │   ├── iso-8859-5.la │   ├── iso-8859-5.so │   ├── iso-8859-6.a │   ├── iso-8859-6.la │   ├── iso-8859-6.so │   ├── iso-8859-7.a │   ├── iso-8859-7.la │   ├── iso-8859-7.so │   ├── iso-8859-8.a │   ├── iso-8859-8.la │   ├── iso-8859-8.so │   ├── iso-8859-9.a │   ├── iso-8859-9.la │   ├── iso-8859-9.so │   ├── iso-ir-10.a │   ├── iso-ir-10.la │   ├── iso-ir-10.so │   ├── iso-ir-102.a │   ├── iso-ir-102.la │   ├── iso-ir-102.so │   ├── iso-ir-103.a │   ├── iso-ir-103.la │   ├── iso-ir-103.so │   ├── iso-ir-11.a │   ├── iso-ir-11.la │   ├── iso-ir-11.so │   ├── iso-ir-111.a │   ├── iso-ir-111.la │   ├── iso-ir-111.so │   ├── iso-ir-121.a │   ├── iso-ir-121.la │   ├── iso-ir-121.so │   ├── iso-ir-122.a │   ├── iso-ir-122.la │   ├── iso-ir-122.so │   ├── iso-ir-123.a │   ├── iso-ir-123.la │   ├── iso-ir-123.so │   ├── iso-ir-128.a │   ├── iso-ir-128.la │   ├── iso-ir-128.so │   ├── iso-ir-13.a │   ├── iso-ir-13.la │   ├── iso-ir-13.so │   ├── iso-ir-139.a │   ├── iso-ir-139.la │   ├── iso-ir-139.so │   ├── iso-ir-14.a │   ├── iso-ir-14.la │   ├── iso-ir-14.so │   ├── iso-ir-141.a │   ├── iso-ir-141.la │   ├── iso-ir-141.so │   ├── iso-ir-142.a │   ├── iso-ir-142.la │   ├── iso-ir-142.so │   ├── iso-ir-143.a │   ├── iso-ir-143.la │   ├── iso-ir-143.so │   ├── iso-ir-146.a │   ├── iso-ir-146.la │   ├── iso-ir-146.so │   ├── iso-ir-147.a │   ├── iso-ir-147.la │   ├── iso-ir-147.so │   ├── iso-ir-15.a │   ├── iso-ir-15.la │   ├── iso-ir-15.so │   ├── iso-ir-150.a │   ├── iso-ir-150.la │   ├── iso-ir-150.so │   ├── iso-ir-151.a │   ├── iso-ir-151.la │   ├── iso-ir-151.so │   ├── iso-ir-152.a │   ├── iso-ir-152.la │   ├── iso-ir-152.so │   ├── iso-ir-153.a │   ├── iso-ir-153.la │   ├── iso-ir-153.so │   ├── iso-ir-154.a │   ├── iso-ir-154.la │   ├── iso-ir-154.so │   ├── iso-ir-155.a │   ├── iso-ir-155.la │   ├── iso-ir-155.so │   ├── iso-ir-158.a │   ├── iso-ir-158.la │   ├── iso-ir-158.so │   ├── iso-ir-16.a │   ├── iso-ir-16.la │   ├── iso-ir-16.so │   ├── iso-ir-17.a │   ├── iso-ir-17.la │   ├── iso-ir-17.so │   ├── iso-ir-18.a │   ├── iso-ir-18.la │   ├── iso-ir-18.so │   ├── iso-ir-19.a │   ├── iso-ir-19.la │   ├── iso-ir-19.so │   ├── iso-ir-2.a │   ├── iso-ir-2.la │   ├── iso-ir-2.so │   ├── iso-ir-21.a │   ├── iso-ir-21.la │   ├── iso-ir-21.so │   ├── iso-ir-25.a │   ├── iso-ir-25.la │   ├── iso-ir-25.so │   ├── iso-ir-27.a │   ├── iso-ir-27.la │   ├── iso-ir-27.so │   ├── iso-ir-37.a │   ├── iso-ir-37.la │   ├── iso-ir-37.so │   ├── iso-ir-4.a │   ├── iso-ir-4.la │   ├── iso-ir-4.so │   ├── iso-ir-47.a │   ├── iso-ir-47.la │   ├── iso-ir-47.so │   ├── iso-ir-49.a │   ├── iso-ir-49.la │   ├── iso-ir-49.so │   ├── iso-ir-50.a │   ├── iso-ir-50.la │   ├── iso-ir-50.so │   ├── iso-ir-51.a │   ├── iso-ir-51.la │   ├── iso-ir-51.so │   ├── iso-ir-54.a │   ├── iso-ir-54.la │   ├── iso-ir-54.so │   ├── iso-ir-55.a │   ├── iso-ir-55.la │   ├── iso-ir-55.so │   ├── iso-ir-57.a │   ├── iso-ir-57.la │   ├── iso-ir-57.so │   ├── iso-ir-60.a │   ├── iso-ir-60.la │   ├── iso-ir-60.so │   ├── iso-ir-61.a │   ├── iso-ir-61.la │   ├── iso-ir-61.so │   ├── iso-ir-69.a │   ├── iso-ir-69.la │   ├── iso-ir-69.so │   ├── iso-ir-70.a │   ├── iso-ir-70.la │   ├── iso-ir-70.so │   ├── iso-ir-8-1.a │   ├── iso-ir-8-1.la │   ├── iso-ir-8-1.so │   ├── iso-ir-8-2.a │   ├── iso-ir-8-2.la │   ├── iso-ir-8-2.so │   ├── iso-ir-84.a │   ├── iso-ir-84.la │   ├── iso-ir-84.so │   ├── iso-ir-85.a │   ├── iso-ir-85.la │   ├── iso-ir-85.so │   ├── iso-ir-86.a │   ├── iso-ir-86.la │   ├── iso-ir-86.so │   ├── iso-ir-88.a │   ├── iso-ir-88.la │   ├── iso-ir-88.so │   ├── iso-ir-89.a │   ├── iso-ir-89.la │   ├── iso-ir-89.so │   ├── iso-ir-9-1.a │   ├── iso-ir-9-1.la │   ├── iso-ir-9-1.so │   ├── iso-ir-9-2.a │   ├── iso-ir-9-2.la │   ├── iso-ir-9-2.so │   ├── iso-ir-90.a │   ├── iso-ir-90.la │   ├── iso-ir-90.so │   ├── iso-ir-91.a │   ├── iso-ir-91.la │   ├── iso-ir-91.so │   ├── iso-ir-92.a │   ├── iso-ir-92.la │   ├── iso-ir-92.so │   ├── iso-ir-93.a │   ├── iso-ir-93.la │   ├── iso-ir-93.so │   ├── iso-ir-94.a │   ├── iso-ir-94.la │   ├── iso-ir-94.so │   ├── iso-ir-95.a │   ├── iso-ir-95.la │   ├── iso-ir-95.so │   ├── iso-ir-96.a │   ├── iso-ir-96.la │   ├── iso-ir-96.so │   ├── iso-ir-98.a │   ├── iso-ir-98.la │   ├── iso-ir-98.so │   ├── iso-ir-99.a │   ├── iso-ir-99.la │   ├── iso-ir-99.so │   ├── iso646-dk.a │   ├── iso646-dk.la │   ├── iso646-dk.so │   ├── iso646-kr.a │   ├── iso646-kr.la │   ├── iso646-kr.so │   ├── jis_x0201.a │   ├── jis_x0201.la │   ├── jis_x0201.so │   ├── jis_x0208-1983.a │   ├── jis_x0208-1983.la │   ├── jis_x0208-1983.so │   ├── jis_x0212-1990.a │   ├── jis_x0212-1990.la │   ├── jis_x0212-1990.so │   ├── johab.a │   ├── johab.la │   ├── johab.so │   ├── koi8-r.a │   ├── koi8-r.la │   ├── koi8-r.so │   ├── koi8-ru.a │   ├── koi8-ru.la │   ├── koi8-ru.so │   ├── koi8-u.a │   ├── koi8-u.la │   ├── koi8-u.so │   ├── ksx1001.a │   ├── ksx1001.la │   ├── ksx1001.so │   ├── mac-ce.a │   ├── mac-ce.la │   ├── mac-ce.so │   ├── mac-croatian.a │   ├── mac-croatian.la │   ├── mac-croatian.so │   ├── mac-cyrillic.a │   ├── mac-cyrillic.la │   ├── mac-cyrillic.so │   ├── mac-dingbats.a │   ├── mac-dingbats.la │   ├── mac-dingbats.so │   ├── mac-greek.a │   ├── mac-greek.la │   ├── mac-greek.so │   ├── mac-iceland.a │   ├── mac-iceland.la │   ├── mac-iceland.so │   ├── mac-japan.a │   ├── mac-japan.la │   ├── mac-japan.so │   ├── mac-roman.a │   ├── mac-roman.la │   ├── mac-roman.so │   ├── mac-romania.a │   ├── mac-romania.la │   ├── mac-romania.so │   ├── mac-thai.a │   ├── mac-thai.la │   ├── mac-thai.so │   ├── mac-turkish.a │   ├── mac-turkish.la │   ├── mac-turkish.so │   ├── mac-ukraine.a │   ├── mac-ukraine.la │   ├── mac-ukraine.so │   ├── macintosh.a │   ├── macintosh.la │   ├── macintosh.so │   ├── osd_ebcdic_df04_1.a │   ├── osd_ebcdic_df04_1.la │   ├── osd_ebcdic_df04_1.so │   ├── osd_ebcdic_df04_15.a │   ├── osd_ebcdic_df04_15.la │   ├── osd_ebcdic_df04_15.so │   ├── shift_jis.a │   ├── shift_jis.la │   ├── shift_jis.so │   ├── ucs2-internal.a │   ├── ucs2-internal.la │   ├── ucs2-internal.so │   ├── ucs4-internal.a │   ├── ucs4-internal.la │   ├── ucs4-internal.so │   ├── unicode-1-1-utf-7.a │   ├── unicode-1-1-utf-7.la │   ├── unicode-1-1-utf-7.so │   ├── us-ascii.a │   ├── us-ascii.la │   ├── us-ascii.so │   ├── utf-16.a │   ├── utf-16.la │   ├── utf-16.so │   ├── utf-8.a │   ├── utf-8.la │   ├── utf-8.so │   ├── windows-1250.a │   ├── windows-1250.la │   ├── windows-1250.so │   ├── windows-1251.a │   ├── windows-1251.la │   ├── windows-1251.so │   ├── windows-1252.a │   ├── windows-1252.la │   ├── windows-1252.so │   ├── windows-1253.a │   ├── windows-1253.la │   ├── windows-1253.so │   ├── windows-1254.a │   ├── windows-1254.la │   ├── windows-1254.so │   ├── windows-1255.a │   ├── windows-1255.la │   ├── windows-1255.so │   ├── windows-1256.a │   ├── windows-1256.la │   ├── windows-1256.so │   ├── windows-1257.a │   ├── windows-1257.la │   ├── windows-1257.so │   ├── windows-1258.a │   ├── windows-1258.la │   └── windows-1258.so ├── libapr-1.a ├── libapr-1.la ├── libapr-1.so -> libapr-1.so.0.7.0 ├── libapr-1.so.0 -> libapr-1.so.0.7.0 ├── libapr-1.so.0.7.0 ├── libapriconv-1.a ├── libapriconv-1.la ├── libapriconv-1.so -> libapriconv-1.so.0.2.2 ├── libapriconv-1.so.0 -> libapriconv-1.so.0.2.2 ├── libapriconv-1.so.0.2.2 ├── libaprutil-1.a ├── libaprutil-1.la ├── libaprutil-1.so -> libaprutil-1.so.0.6.1 ├── libaprutil-1.so.0 -> libaprutil-1.so.0.6.1 ├── libaprutil-1.so.0.6.1 ├── libtcnative-1.a ├── libtcnative-1.la ├── libtcnative-1.so -> libtcnative-1.so.0.2.25 ├── libtcnative-1.so.0 -> libtcnative-1.so.0.2.25 ├── libtcnative-1.so.0.2.25 └── pkgconfig ├── apr-1.pc └── apr-util-1.pc 7 directories, 746 files ``` ```bash cat /usr/local/apr/lib/pkgconfig/apr-1.pc prefix=/usr/local/apr exec_prefix=${prefix} libdir=${exec_prefix}/lib APR_MAJOR_VERSION=1 includedir=${prefix}/include/apr-${APR_MAJOR_VERSION} Name: APR Description: The Apache Portable Runtime library Version: 1.7.0 Libs: -L${libdir} -lapr-${APR_MAJOR_VERSION} -lrt -lcrypt -lpthread -ldl Cflags: -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I${includedir} cat /usr/local/apr/lib/pkgconfig/apr-util-1.pc prefix=/usr/local/apr exec_prefix=${prefix} libdir=${exec_prefix}/lib APRUTIL_MAJOR_VERSION=1 includedir=${prefix}/include/apr-${APRUTIL_MAJOR_VERSION} Name: APR Utils Description: Companion library for APR Version: 1.6.1 # assume that apr-util requires libapr of same major version Requires: apr-1 Libs: -L${libdir} -laprutil-${APRUTIL_MAJOR_VERSION} /opt/src/apr-util/../apr-iconv/lib/libapriconv.la -lexpat Cflags: -I${includedir} ``` ## run-tomcat-with-apr ```bash vi $CATALINA_HOME/bin/setenv.sh ``` ```conf #LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH ``` ```bash sed -i 's@Connector port="8080" protocol="HTTP/1.1"@Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"@g' ../conf/server.xml ``` ```bash root@176698a3cb22:/usr/local/tomcat/bin# ./catalina.sh run Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: 03-Jan-2021 07:15:50.136 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/8.5.61 03-Jan-2021 07:15:50.137 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Dec 3 2020 14:03:28 UTC 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 8.5.61.0 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.19.95 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/local/java/jre 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_201-b09 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs= 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat 03-Jan-2021 07:15:50.138 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat 03-Jan-2021 07:15:50.139 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp 03-Jan-2021 07:15:50.139 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.25] using APR version [1.7.0]. 03-Jan-2021 07:15:50.139 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. 03-Jan-2021 07:15:50.139 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 03-Jan-2021 07:15:50.148 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1i 21 Apr 2020] 03-Jan-2021 07:15:50.228 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"] 03-Jan-2021 07:15:50.240 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 347 ms 03-Jan-2021 07:15:50.255 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 03-Jan-2021 07:15:50.255 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.61 03-Jan-2021 07:15:50.270 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT] 03-Jan-2021 07:15:50.418 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [148] ms 03-Jan-2021 07:15:50.418 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/docs] 03-Jan-2021 07:15:50.428 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [10] ms 03-Jan-2021 07:15:50.428 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples] 03-Jan-2021 07:15:50.538 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [110] ms 03-Jan-2021 07:15:50.538 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager] 03-Jan-2021 07:15:50.551 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [13] ms 03-Jan-2021 07:15:50.551 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager] 03-Jan-2021 07:15:50.568 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [17] ms 03-Jan-2021 07:15:50.571 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] 03-Jan-2021 07:15:50.578 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 337 ms ``` ## run-springboot-with-apr ### code ```java package com.example.demo.config; import org.apache.catalina.LifecycleListener; import org.apache.catalina.core.AprLifecycleListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class APRConfig { @Value("${server.tomcat.apr:false}") private boolean enabled; // @Bean // public EmbeddedServletContainerFactory servletContainer() { // TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory(); // if (enabled) { // LifecycleListener arpLifecycle = new AprLifecycleListener(); // container.setProtocol("org.apache.coyote.http11.Http11AprProtocol"); // container.addContextLifecycleListeners(arpLifecycle); // } // // return container; // } @Bean public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); if (enabled) { LifecycleListener arpLifecycle = new AprLifecycleListener(); tomcat.setProtocol("org.apache.coyote.http11.Http11AprProtocol"); tomcat.addContextLifecycleListeners(arpLifecycle); //tomcat.addConnectorCustomizers(new GwsTomcatConnectionCustomizer()); } return tomcat; } } ``` ### 开启apr的启动日志 ```bash root@8dcf0e99b4b8:/# java -Dserver.tomcat.apr=true -Djava.library.path=/usr/local/apr/lib -jar /opt/demo-0.0.1.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.6.RELEASE) [08:58:36:123] [INFO] - org.springframework.boot.StartupInfoLogger.logStarting(StartupInfoLogger.java:55) - Starting DemofmApplication v0.0.1 on 8dcf0e99b4b8 with PID 13282 (/opt/demo-0.0.1.jar started by root in /) [08:58:36:129] [INFO] - org.springframework.boot.SpringApplication.logStartupProfileInfo(SpringApplication.java:651) - No active profile set, falling back to default profiles: default [08:58:36:975] [INFO] - com.example.demo.config.APRConfig.servletContainer(APRConfig.java:34) - true [08:58:37:139] [INFO] - org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:108) - Tomcat initialized with port(s): 8888 (http) [08:58:37:148] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing ProtocolHandler ["http-apr-8888"] [08:58:37:148] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Starting service [Tomcat] [08:58:37:148] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Starting Servlet engine: [Apache Tomcat/9.0.39] [08:58:37:149] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Loaded Apache Tomcat Native library [1.2.25] using APR version [1.7.0]. [08:58:37:150] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. [08:58:37:150] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] [08:58:37:152] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - OpenSSL successfully initialized [OpenSSL 1.1.1i 8 Dec 2020] [08:58:37:203] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing Spring embedded WebApplicationContext [08:58:37:203] [INFO] - org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext(ServletWebServerApplicationContext.java:285) - Root WebApplicationContext: initialization completed in 1009 ms [08:58:37:559] [INFO] - org.springframework.scheduling.concurrent.ExecutorConfigurationSupport.initialize(ExecutorConfigurationSupport.java:181) - Initializing ExecutorService 'applicationTaskExecutor' [08:58:37:633] [INFO] - org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping.(WelcomePageHandlerMapping.java:58) - Adding welcome page template: index [08:58:37:875] [INFO] - org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver.(EndpointLinksResolver.java:58) - Exposing 14 endpoint(s) beneath base path '/actuator' [08:58:37:896] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Starting ProtocolHandler ["http-apr-8888"] [08:58:37:971] [INFO] - org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:220) - Tomcat started on port(s): 8888 (http) with context path '' [08:58:37:983] [INFO] - org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:61) - Started DemofmApplication in 2.107 seconds (JVM running for 2.79) ``` ### 未开启apr的启动日志 ```bash root@8dcf0e99b4b8:/# java -Dserver.tomcat.apr=false -Djava.library.path=/usr/local/apr/lib -jar /opt/demo-0.0.1.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.6.RELEASE) [12:52:00:054] [INFO] - org.springframework.boot.StartupInfoLogger.logStarting(StartupInfoLogger.java:55) - Starting DemofmApplication v0.0.1 on 8dcf0e99b4b8 with PID 13358 (/opt/demo-0.0.1.jar started by root in /) [12:52:00:064] [INFO] - org.springframework.boot.SpringApplication.logStartupProfileInfo(SpringApplication.java:651) - No active profile set, falling back to default profiles: default [12:52:01:002] [INFO] - com.example.demo.config.APRConfig.servletContainer(APRConfig.java:34) - false [12:52:01:176] [INFO] - org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:108) - Tomcat initialized with port(s): 8888 (http) [12:52:01:185] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing ProtocolHandler ["http-nio-8888"] [12:52:01:185] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Starting service [Tomcat] [12:52:01:185] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Starting Servlet engine: [Apache Tomcat/9.0.39] [12:52:01:187] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Loaded Apache Tomcat Native library [1.2.25] using APR version [1.7.0]. [12:52:01:187] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. [12:52:01:187] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] [12:52:01:190] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - OpenSSL successfully initialized [OpenSSL 1.1.1i 8 Dec 2020] [12:52:01:247] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing Spring embedded WebApplicationContext [12:52:01:247] [INFO] - org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext(ServletWebServerApplicationContext.java:285) - Root WebApplicationContext: initialization completed in 1106 ms [12:52:01:622] [INFO] - org.springframework.scheduling.concurrent.ExecutorConfigurationSupport.initialize(ExecutorConfigurationSupport.java:181) - Initializing ExecutorService 'applicationTaskExecutor' [12:52:01:693] [INFO] - org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping.(WelcomePageHandlerMapping.java:58) - Adding welcome page template: index [12:52:01:934] [INFO] - org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver.(EndpointLinksResolver.java:58) - Exposing 14 endpoint(s) beneath base path '/actuator' [12:52:01:957] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Starting ProtocolHandler ["http-nio-8888"] [12:52:02:034] [INFO] - org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:220) - Tomcat started on port(s): 8888 (http) with context path '' [12:52:02:049] [INFO] - org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:61) - Started DemofmApplication in 2.283 seconds (JVM running for 3.451) ``` ## others ```bash checking OpenSSL library version >= 1.0.2... configure: error: Your version of OpenSSL is not compatible with this version of tcnative debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Current default time zone: 'Etc/UTC' Local time is now: Sun Jan 3 05:50:52 UTC 2021. Universal Time is now: Sun Jan 3 05:50:52 UTC 2021. Run 'dpkg-reconfigure tzdata' if you wish to change it. 03-Jan-2021 08:09:03.491 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [:/usr/local/tomcat/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] 03-Jan-2021 08:09:03.626 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[org.apache.coyote.http11.Http11AprProtocol-8080]] org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is not available at org.apache.catalina.connector.Connector.initInternal(Connector.java:1060) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:552) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:848) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.startup.Catalina.load(Catalina.java:639) at org.apache.catalina.startup.Catalina.load(Catalina.java:662) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:302) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:472) ``` ## ref * http://tomcat.apache.org/native-doc/ * http://tomcat.apache.org/tomcat-7.0-doc/apr.html * http://tomcat.apache.org/tomcat-8.0-doc/apr.html * http://tomcat.apache.org/tomcat-9.0-doc/apr.html * https://wiloon.com/p14422/ * https://www.gmlyo.com/2018/06/05/Tomcat-APR%E5%AE%89%E8%A3%85/ * https://www.gmlyo.com/2019/01/02/SpringBoot%E4%BD%BF%E7%94%A8TomcatAPR%E6%A8%A1%E5%BC%8F/ * https://www.huaweicloud.com/kunpeng/software/apr.html * https://www.huaweicloud.com/kunpeng/software/apr_util.html * https://jmchung.github.io/post/centos-installing-apache-portable-runtime-apr-for-tomcat/