解压即用,跨Linux发行版HHVM打包

解压即用,跨Linux发行版HHVM打包

解压即用,跨Linux发行版HHVM打包

适用环境 : 64位Linux

HHVM-3.7.1下载地址( 33MB ) :
https://pan.baidu.com/s/1dECvbET
md5sum hhvm-3.7.1.tar.xz
1c921ac67c57d4a23132e1f6f7bb3da6

HHVM-3.5.0下载地址( 30MB ) :
http://pan.baidu.com/s/1mgJuG7Q
md5sum hhvm- 3.5.0 .tar.xz
01d7bce054a938de30fff4f3672cca76

Debian/Ubuntu创建运行用户:
sudo groupadd -r png
sudo useradd -r -g png -s /usr/sbin/nologin -d /png/nonexistent -c “png user” png

Redhat/CentOS创建运行用户:
sudo groupadd -r png
sudo useradd -r -g png -s /sbin/nologin -d /png/nonexistent -c “png user” png

创建解压目录:
sudo mkdir -p /png/hhvm
sudo chown $USER:$USER /png/hhvm

解压到目录:
xz -d hhvm-3.5.0.tar.xz && tar xf hhvm-3.5.0.tar -C /png/hhvm

设置目录权限:
mkdir -p /png/hhvm/3.5.0/var/run/hhvm
sudo chown png:png -R /png/hhvm/3.5.0/var

启动HHVM:
sudo /png/hhvm/3.5.0/etc/init.d/hhvm start
sudo netstat -antp|grep hhvm

bench.php测试:
cd /png/hhvm/3.5.0/usr/bin/
time ./hhvm bench.php
(完)

附: 跨Linux发行版HHVM打包方法
我的系统是Ubuntu 14.04,trusty是Ubuntu 14.04的代号,所以下载:
http://dl.hhvm.com/ubuntu/pool/main/h/hhvm/hhvm_3.5.0~trusty_amd64.deb
下载后我把它解压到/png/hhvm/3.5.0/.

安装依赖库:
dpkg –info hhvm_3.5.0~trusty_amd64.deb | grep -i depends
用” “替换” ,”可以快速得到依赖的软件包列表,方便安装.
sudo apt-get update
sudo apt-get install \
binutils \
libasn1-8-heimdal \
libboost-filesystem1.48.0 \
libboost-program-options1.48.0 \
libboost-system1.48.0 \
libboost-regex1.48.0 \
libbz2-1.0 \
libc6 \
libcap2 \
libc-client2007e \
libcomerr2 \
libelf1 \
libexpat1 \
libfontconfig1 \
libfreetype6 \
libgcc1 \
libgcrypt11 \
libgd2-xpm \
libgnutls26 \
libgpg-error0 \
libgssapi3-heimdal \
libgssapi-krb5-2 \
libhcrypto4-heimdal \
libheimbase1-heimdal \
libheimntlm0-heimdal \
libhx509-5-heimdal \
libicu48 \
libidn11 \
libjpeg-turbo8 \
libk5crypto3 \
libkeyutils1 \
libkrb5-26-heimdal \
libkrb5-3 \
libkrb5support0 \
libldap-2.4-2 \
libmcrypt4 \
libmemcached6 \
libmysqlclient18 \
libonig2 \
libp11-kit0 \
libpam0g \
libpcre3 \
libpng12-0 \
libroken18-heimdal \
librtmp0 \
libsasl2-2 \
libsqlite3-0 \
libssl1.0.0 \
libstdc++6 \
libtasn1-3 \
libtbb2 \
libtinfo5 \
libwind0-heimdal \
libx11-6 \
libxau6 \
libxcb1 \
libxdmcp6 \
libxml2 \
libxpm4 \
zlib1g \
libedit2 \
libboost-thread1.48.0 \
libunwind7 \
libcurl3 \
libevent-2.0-5

服务管理脚本 /png/hhvm/3.5.0/etc/init.d/hhvm 内容如下:

#! /bin/sh
SSD=/png/hhvm/3.5.0/usr/bin/start-stop-daemon
DAEMON=/png/hhvm/3.5.0/usr/bin/hhvm
PIDFILE=/png/hhvm/3.5.0/var/run/hhvm/pid
CONFIG_FILE=”/png/hhvm/3.5.0/etc/hhvm/server.ini”
SYSTEM_CONFIG_FILE=”/png/hhvm/3.5.0/etc/hhvm/php.ini”
RUN_AS_USER=”png”
RUN_AS_GROUP=”png”
ADDITIONAL_ARGS=””

DAEMON_ARGS=”\
–config ${SYSTEM_CONFIG_FILE} \
–config ${CONFIG_FILE} \
–user ${RUN_AS_USER} \
–mode daemon \
-vPidFile=${PIDFILE} \
${ADDITIONAL_ARGS}”

test -x $DAEMON || exit 0

case “$1” in
  start)
        $SSD –start –quiet –pidfile $PIDFILE –exec $DAEMON — $DAEMON_ARGS
        ;;
  stop)
        $SSD –stop –quiet –oknodo –pidfile $PIDFILE
        ;;

  reload|force-reload|restart|try-restart)
        $0 stop
        $0 start
        ;;

  status)
        echo “No status”
        ;;

  *)
        echo “Usage: /etc/init.d/hhvm {start|stop|restart|status}”
        exit 1
esac

exit 0

配置文件php.ini和server.ini里修改路径:
/png/hhvm/3.5.0/etc/hhvm/php.ini:
; php options
session.save_handler = files
session.save_path = /png/hhvm/3.5.0/var/sessions
session.gc_maxlifetime = 1440
date.timezone = “Asia/Shanghai”

; hhvm specific
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.mysql.typed_results = false

/png/hhvm/3.5.0/etc/hhvm/server.ini:
; php options
pid = /png/hhvm/3.5.0/var/run/hhvm/pid

; hhvm specific
hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /png/hhvm/3.5.0/var/log/hhvm/error.log
hhvm.repo.central.path = /png/hhvm/3.5.0/var/run/hhvm/hhvm.hhbc

设置目录权限:
mkdir -p /png/hhvm/3.5.0/var/run/hhvm
sudo chown png:png -R /png/hhvm/3.5.0/var

打包依赖库到/png/hhvm/libs:
mkdir -p /png/hhvm/libs
list=”$(ldd hhvm | egrep -o ‘/lib.*\.[0-9]’)”
for i in $list; do cp -v “$i” /png/hhvm/libs; done

关键: patchelf可以修改依赖库和链接器位置,launchpad提供有patchelf二进制包:
https://launchpad.net/ubuntu/+source/patchelf
http://launchpadlibrarian.net/173906612/patchelf_0.8-2_amd64.deb

cd /png/hhvm/3.5.0/usr/bin/

指定依赖库位置:
patchelf –set-rpath /png/hhvm/libs –force-rpath ./hhvm
patchelf –set-rpath /png/hhvm/libs –force-rpath ./h2tp
patchelf –set-rpath /png/hhvm/libs –force-rpath ./hackificator
patchelf –set-rpath /png/hhvm/libs –force-rpath ./hack_remove_soft_types
patchelf –set-rpath /png/hhvm/libs –force-rpath ./hh_client
patchelf –set-rpath /png/hhvm/libs –force-rpath ./hh_server

指定库链接器:
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./hhvm
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./h2tp
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./hackificator
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./hack_remove_soft_types
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./hh_client
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./hh_server

因为服务管理脚本用到start-stop-daemon,而有些发行版没有,所以也打包进去:
cp /sbin/start-stop-daemon ./
patchelf –set-rpath /png/hhvm/libs –force-rpath ./start-stop-daemon
patchelf –set-interpreter /png/hhvm/libs/ld-linux-x86-64.so.2 ./start-stop-daemon

查看修改后文件的链接库信息:
ldd * > ldd.txt

我在Ubuntu上打包好后即可移植到其他发行版运行,比如CentOS 7:
解压即用,跨Linux发行版HHVM打包

转载于:https://my.oschina.net/eechen/blog/371643

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109577.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux mysql 修改表名_Linux下mysql怎么设置表名?「建议收藏」

    linux mysql 修改表名_Linux下mysql怎么设置表名?「建议收藏」Linux下mysql可以通过“ALTERTABLE旧表名RENAME[TO]新表名;”语句来修改表名;还可以通过配置my.cnf文件,修改“lower_case_table_names”选项的值为“1”来设置表名不区分大小写。Linux下mysql设置表名在MySQL中,可以使用ALTERTABLE语句来实现表名的修改。在MySQL中可以使用ALTERTABLE语句…

    2022年5月31日
    29
  • Linux服务.NO6——http协议

    Linux服务.NO6——http协议9.http9.1.http概念http协议即超文本传输协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。http是基于TCP/IP通信协议来传递数据的一个属于应用层的面向对象的协议。http协议工作于c/s架构,浏览器作为客户端通过url向http服务端(即web服务器)发送所有请求,web服务器根据受到的请求后,向客户端发送响应。9.2.http特点1.简单快速:客户向服务…

    2022年10月26日
    0
  • PowerBuilder — 条码打印

    PowerBuilder — 条码打印#使用ocx控件使用微软的MSBCODE9.OCX,但是注册老不成功,需要安装office之后才能注册成功,不知道有没有好的处理方法??#使用字体字体下载:http://download.csdn.net/detail/easyboot/9452777字符转换:代码来源http://club.excelhome.net/thread-606919-1-1.html…

    2022年7月26日
    12
  • python正则匹配中文或数字_Python匹配中文的正则表达式

    python正则匹配中文或数字_Python匹配中文的正则表达式正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。Python正则表达式简介正则表达式是一个特殊的字符序列,它能帮助你方…

    2022年7月25日
    8
  • 日志查看–journalctl[通俗易懂]

    日志查看–journalctl[通俗易懂]7.journal(1)journalctl //日志查看工具-n3 //查看最近3条日志-perr //查看错误日志-overbose //查看日志的详细参数–since //查看从什么时间开始的日志–until //查看到什么时间为止的日志(2)如何使用systemd-journald保存系统日志默认systemd-journald是不保存系统日志到硬盘的,那…

    2022年5月23日
    43
  • 重定向和转发区别[通俗易懂]

    重定向和转发区别[通俗易懂]一、转发转发的原理,可以通过下图展示:浏览器的请求发送给组件1,组件1经过一些处理之后,将request和response对象“传递”给组件2,由组件2继续处理,然后输出响应(当然,也可以继续向其他组件“传递”),这个传递的过程称之为“转发”。整个过程只涉及一次浏览器和服务器之间的“请求-响应”,转发过程中的组件共享同一个请求(request)和响应(response)对象。转发的意义在于可以实现组件的**“分工”。**在基于MVC,多层结构的Web应用中,经常需要多个组件协同完成一次“请求

    2022年9月8日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号