V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jakezh
V2EX  ›  程序员

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

  •  
  •   jakezh · Oct 21, 2019 · 5262 views
    This topic created in 2389 days ago, the information mentioned may be changed or developed.

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

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

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

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

    ```
    [docker@NGINX_1 ~]$dx tengine bash
    root@NGINX_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
    root@NGINX_1:/#
    ```

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

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

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

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

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

    PS: 我们给私有化客户都是编译打包成 tar.gz 只要发行版接近,基本没啥问题。安装目录随意(我们使用了 C++17 开发模块)。
    julyclyde
        25
    julyclyde  
       Oct 22, 2019
    你既然都打包了……
    那么显然你没打包
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4046 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 108ms · UTC 05:11 · PVG 13:11 · LAX 22:11 · JFK 01:11
    ♥ Do have faith in what you're doing.