首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  程序员

老哥们, ubuntu 上自己修改打包编译的 nginx 怎么可以拷贝到另一台服务器上

  •  
  •   jakezh · 52 天前 · 2002 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两年前自己修改的 nginx 源码编译了一个 一直在阿里云账号 A 上面的几个服务器上跑, 现在需要在另一个阿里云账号 B 上面再设置几个类似的服务器 请问有办法把这个已经安装好的 nginx 从 A 里面拷贝到 B 里面吗 已经拷贝了 /usr/lib/nginx 和 /etc/nginx 但是发现没有用

    有办法直接把这个编译好的 nginx 拷贝过去,或者把阿里云账号 A 下的磁盘镜像导入到账号 B 下面吗

    25 回复  |  直到 2019-10-22 18:16:56 +08:00
        1
    windyland   52 天前 via Android
    编译完成的目录整个 tar.gz 打包,然后用 sftp 传一下
        2
    windyland   52 天前 via Android
    或者 rsync 简单粗暴解决战斗
        3
    banxi1988   52 天前
    先确定 A 上的服务器编译运行 nginx 的环境和依赖.
    主要是 Ubuntu 版本 , glibc 版本.其他一些依赖. 对得上一般可以,对不上兼容的也应该可以.
    然后看一下 标准的 nginx 编译之后安装时复制了哪些文件,是不是少复制了? 位置对不对?

    然后根据运行时候的具体错误信息再分析了.
        4
    jakezh   52 天前
    @windyland #1 两年前编译的
    没 tm 存源文件和编译好的文件
    只剩下服务器上面安装好的可执行文件了
    我真是想捅死我自己
        5
    jakezh   52 天前
    @banxi1988 #3
    版本已经对过了,依赖都从老服务器拉的版本
    哎。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
        6
    jakezh   52 天前
    全局搜索了一下
    对拷了所有路径里带 nginx 的文件,
    等会儿跑一下看看吧
    这是一个血淋淋的教学啊兄弟们
    以后一定要源代码做好版本控制
        7
    MonoLogueChi   52 天前 via Android
    镜像可以共享,A 制作镜像,然后共享给 B,B 再使用自定义镜像安装
        8
    jakezh   51 天前
    @MonoLogueChi #7
    多谢老哥 一会儿研究一下
        9
    Linken404   51 天前
    但是直接重新按照需求装一个不比迁移简单吗...
    直接把配置文件拷贝过去就可以了,Nginx 这种东西装起来又不麻烦,需要什么功能编译安装的时候加上就可以了
        10
    CivAx   51 天前   ♥ 3
    nginx -V,看编译参数
    e.g.

    ```
    [[email protected]_1 ~]$dx tengine bash
    [email protected]_1:/# nginx -V
    Tengine version: Tengine/2.3.1
    nginx version: nginx/1.16.0
    built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
    built with OpenSSL 1.1.0k 28 May 2019
    TLS SNI support enabled
    configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/etc/nginx/logs/error.log --http-log-path=/etc/nginx/logs/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-compat --with-file-aio --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_geoip_module=dynamic --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_slice_module --with-http_ssl_module --with-http_sub_module --with-http_secure_link_module --with-http_stub_status_module --with-http_v2_module --with-http_xslt_module=dynamic --with-luajit-lib=/usr/local/lib/ --with-luajit-inc=/usr/local/include/luajit-2.1/ --with-lua-inc=/usr/local/include/luajit-2.1/ --sbin-path=/usr/sbin/nginx --with-mail --with-mail_ssl_module --with-threads --with-pcre --with-stream --with-stream_geoip_module=dynamic --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=./modules/ngx_http_concat_module --add-module=./modules/ngx_http_upstream_check_module --add-module=./modules/ngx_http_proxy_connect_module --add-module=./modules/ngx_devel_kit --add-module=./modules/ngx_http_lua_module
    [email protected]_1:/#
    ```

    拿着这套参数,在新机器上下载最新版的 NGINX,在 configure 阶段填入这套参数就行了。

    即做到更新了版本,又完成了配置统一。
        11
    msg7086   51 天前   ♥ 1
    如果你正常编译打包,出来的应该是 deb 文件。
        12
    jakezh   51 天前
    @Linken404 #9
    @CivAx #10
    当时有一些奇怪的需求
    把其中几个 module 的源码改了改
    改动不大 但是地方挺多的
    本来以为就是个一锤子买卖 结果又给钱让部署一新的集群
    不好跟钱过不去
    哎 说到底还是因为穷
        13
    jakezh   51 天前
    @msg7086 #11 没有 make install 不是编译 dpkg 包
        14
    windyland   51 天前 via Android
    直接根目录打包,然后 dd 写入
        15
    CivAx   51 天前
    @jakezh #12 兄弟走点心,下回这种非原装代码的事情上 Docker 吧,留套镜像什么都好说
        16
    Linken404   51 天前
    如果服务器上有以前的源码倒还好说 没有那确实是难搞了
    这种配依赖环境很容易出奇怪的问题的 感觉可以试试直接迁移整个系统 把当前系统做成镜像然后去重新安装
    反正我现在服务器上编译安装完什么东西 源码是打死都不会删的...
        17
    Maco   51 天前
    使用阿里云镜像服务打包成系统镜像
        18
    ETiV   51 天前 via iPhone
    ldd,查找 so 依赖的命令

    把 nginx 可执行程序复制到一个新的环境,对它执行 ldd
    再把显示内容的 not found 从老的机器复制过来
    so 也有它自己的依赖,对这些 so 再递归地执行 ldd
    直到所有 not found 的 so 都复制过来

    复制过来如果还找不到的话,本机配一下 ldconfig

    还是建议你复制到新的 docker 里,打个镜像
        19
    gesse   51 天前
    src 包 make 完后,打包一份到目标机器, 直接进入解压后 src 包,然后 make install 就行了。
    然后有时间再学学 docker
        20
    ysc3839   51 天前 via Android
    建议编译为 dpkg 包,然后拷了直接安装。
        21
    coolloves   51 天前
    相同环境,copy 过去可即食
    不同环境的话.src copy 过去,重新编译即可
        22
    hardwork   51 天前
    cp `ldd nginx | grep -v vdso | grep -v lib64 | grep -v libc.so | grep -v libm.so | awk '{print $3}'` ./lib
        23
    cjpjxjx   51 天前 via iPhone
    快照或者镜像都可以吧
        24
    forcecharlie   51 天前
    依赖的 zlib openssl pcre 等库使用 nginx 参数指定源码编译,然后发行版要接近,关于 prefix, 可以自己修改 nginx 源码修改搜索机制,否则只能 -P 显式指定或者保持 --prefix 一致。

    PS: 我们给私有化客户都是编译打包成 tar.gz 只要发行版接近,基本没啥问题。安装目录随意(我们使用了 C++17 开发模块)。
        25
    julyclyde   50 天前
    你既然都打包了……
    那么显然你没打包
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3981 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 32ms · UTC 01:29 · PVG 09:29 · LAX 17:29 · JFK 20:29
    ♥ Do have faith in what you're doing.