Centos和Ubuntu下打包项目

楼主新手一枚,在打包过程中踩了无数坑才打包成功,还不乏自己给自己挖的坑,其中艰辛不必多说,虽然网上教程众多,但可以将过程清楚描述给我这样新手的并不多,而且其中好多坑也都没有指出,今我把我所做的过程记录下来,一来分享给大家,二来以背日后还用。

过程参考https://www.cnblogs.com/lvdongjie/p/4187189.html。

Centos下打包

一.源代码包

主要就是将项目打成压缩包,但有以下注意事项:

1.删除版本管理目录,比如.svn,.git等目录。避免源代码包过大,同时也是为了避免.svn中的个人信息泄露。

2.删除二进制中间文件,即.o文件。主要为避免源文件过大。

3.添加config脚本或者makefile配置文件。两个文件都是为了让用户能够编译,用户可以运行config脚本生成makefile文件,在通过make命令生成可执行文件。如果没有config文件,就需要手写或自动生成一份makefile文件,手写的话,需要将全部源文件写入其中,同时对不太熟悉它的人不友好,所以,我用了Qt自带的qmake工具自动生成了makefile文件,用qmake生成makefile需要有.pro文件,.pro文件可以手写也可以自动生成,因为楼主下的项目中自带了.pro文件,所以并没有深究.pro文件的具体内容和生成命令,因为迟早要用到,所以先留个坑,看过之后回来填上。

4.修改编译目标从debug版本到release版本。这一般意味着 CFLAGS 要改成 -O2 而不是 -g;VS 一般意味着将目标从 debug 转为 release。这样用户生成的可执行程序才能足够小和足够快。

5. 添加知识产权信息,就是授权协议。小程序大家一般都不在乎,但如果是您在这个项目上花了足够的心血,还是最好选择一个自己喜欢的授权协议。可以将协议声明放在每个源文件的最前注释中,也可以在项目的根目录下放一个 license 文件。

6.压缩成tar.gz 或者 .tar.bz2 格式。

tips:

  makefile文件主要用来说明如何编译各个源文件并连接生成可执行文件,并指定源文件之间的依赖关系。编写完makefile后,执行make命令,就可以自动将项目编译连接出可执行文件。

二.rpm包

在这里我们用rpmbuild工具来打rpm包。

1.在当前用户目录下创建rpmbuild目录

命令为:mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

其中各目录的用途如下:

BUILD  解压源代码包和构建软件    
BUILDROOT 保存 %install 阶段安装的文件
RPMS 最终生成的可安装二进制rpm包的所在目录
SOURCES 所有源代码和补丁文件的存放目录
SPECS 存放rpm包配置文件(.spec文件)的目录
SRPMS 源码格式rpm(srpm)存放路径 

2.将准备好的源代码包放在SOURCES目录下

3.在SPECS下编写.spec控制文件

在该文件中有很重要的一点,buildroot目录为虚拟根目录,在此目录下建的目录就是文件想要安装的位置

%define  path /home/admin/Weather   #定义名为path,内容为/home/admin/Weather 的变量

Name:           weather           #软件名称
Version:        1.0              #版本号
Release:        1%{?dist}          #发布序列号
Summary:        WEATHER Client     #软件概要
Group:          Network          #软件类别,可按标准分组进行分组
License:        GPL           #软件授权协议
URL:            http://www.cnblogs.com/u/thePeaceOftheLord/     #软件主页
Source0:        weather-1.0.tar.gz                 #软件源代码包名称,可以有多个,例如Source1,Source2

%description        #软件描述
No description

%prep            #预处理,在此行下,可以添加有关预处理的命令
%setup -q           #宏,将源代码tar包解压到BUILD目录下

%build           #编译构建,在此行之下,添加有关编译的命令

%configure    

%install            #安装,在此行之下可以添加有关安装的命令
make install DESTDIR=%{buildroot}                        #安装到buildroot目录下

mkdir $RPM_BUILD_ROOT%{path}                        #注意,此处在buildroot目录下新建了 /home/admin/Weather 目录
cp $RPM_BUILD_DIR/%{name}-%{version}/filename $RPM_BUILD_ROOT%{path}   #注意,这一步 将build目录下需要打包的东西复制到了刚才在buildroot下新建的目录下

#注意,以上两行就定义了生成的rpm包在安装时的路径,会安装到 /home/admin/Weather目录下,这里为方便理解只建了一个目录,当你有多个文件需要放在不同目录下时,还可以建立多个目录,然后分别从build目录下复制过来就行。

%files        #所有需要被打包进去的文件,写的是buildroot目录下的相对路径

%{path}          #在buildroot下需要打包的文件路径,同时,该路径也是安装rpm包时的路径
%doc

%changelog      #更改日志

tips:

  有的项目没有config文件,就可以不用写%configure和下边的命令,写了会报找不到./configure的错

这篇文章写的很到位,大家可以看看,

这篇文章也是讲.spec文件的,讲的也不错,https://www.jianshu.com/p/fb72b85dfac8

问题:自定义路径后报错,ERROR: No build ID note found in xxxxx

define区添加以下这行

%define debug_package %{nil}      #(亲测有效)

参考:https://forums.fedoraforum.org/showthread.php?182293-RPM-Build-Error

添加之后还是不行,出现新的问题:error: Arch dependent binaries in noarch package

注释掉 BuildArch: noarch 或者添加  %_binaries_in_noarch_packages_terminate_build 0

参考:https://stackoverflow.com/questions/21288374/shipping-so-and-binaries-while-building-rpm-package

还有一点,当有多个source时,怎么办

经过测试,在.spec添加一个压缩source文件,然后在pre预编译阶段,用setup -n sourcename 解决不了,用tar解压到build下也执行不了,最后解决方法,不把source压缩,直接在pre阶段cp过去,还有一种解决方法,直接把所有的文件都压缩在同一文件夹内,直接解压,在pre,build阶段不进行操作,直接在build阶段cp过去。(如果你有更好的办法,可以写在评论中,大家共同进步)

4.打包

rpmbuild -ba path  #path是.spec文件路径

在运行最后出现exit 0表示生成成功

运行结束后,会在RPMS文件下生成可安装的rpm文件

问题:执行rpmbuild命令报错找不到指定目录或文件

检查一下.spec文件中的%install宏下创建目录,复制文件是否错误。

5.安装测试

rpm -ivh ~/rpmbuild/RPMS/x86_64/weather-1.0-1.el7.x86_64.rpm    #安装刚才打包好的安装包
rpm -ql weather                                                 #查找安装路径
rpm -qi weather                                                 #查询安装应用相关信息

问题:安装时缺少依赖

三种解决方式:

第一种:上网上找相关依赖包,并下载安装

第二种:让其自行解决依赖(没有测试过)

    加上--aid,例如: rpm -ivh --aid  path/xxx.rpm

第三种:忽略它,或强制安装

    加上 --nodeps,意思不考虑依赖,例如: rpm -ivh  --nodeps path/xxx.rpm

    加上--force,强制安装,例如: rpm -ivh --force path/xxx.rpm

至此,centos下打包完成。


ubuntu下打包

现在说一下debian系的ubuntu下怎么打包,发现debian系下还是比较容易打包的,相较于redhat系,debian系免去了配置文件的麻烦,只需要简单说明软件的一些基本信息就行,甚是容易。

1.将源文件编译

debian打包只是打包,不提供编译功能,所以还需要自己编译。编译过程应该和上文所述的源码包编译一致。

2.整理打包所需文件

  1)创建一个空目录

  在某目录下,例如我是在/home/lym下建立一个目录,work,现在目录为/home/lym/work

  2)指定安装路径

  然后将需要打包的文件复制到该目录下,这里有很重要的一点,work这个目录就是一个"假根目录",您在这个目录下所有的修改,最后都会被映射到目标机的根目录 / 下,比如说在该目录下(/home/lym/work)我建立了一个usr/bin这样的目录,然后将我项目中的可执行文件放到usr/bin目录下(/home/lym/work/usr/bin/xxx),当打完包安装的时候,这个可执行文件就会被安装到/usr/bin目录下(注意,这里是绝对路径),同理,想让库文件安装到/usr/lib目录下,就得在当前目录(/home/lym/work)下建立usr/lib目录,然后将库文件放到其下(/home/lym/work/usr/lib/xxx)。

  3)配置文件

  在work目录下建立一个名为DEBIAN的目录,在其下有两个文件,一个是control,另一个是md5sums,前一个是必须的,其中主要包含软件基本信息和维护者信息,后者是软件的md5校验值,可以有可以没有。

  创建contol命令:gedit DEBIAN/control,其中配置文件的内容比较简单不再解释。

  生成md5sums:   md5sum . > /home/lym/work/DEBIAN/md5sums  #生成当前目录下所有文件的md5校验值,因为md5sum不能递归生成文件md5值,所以暂时只能挨个目录生成

3.打包

  命令:   dpkg -b /home/lym/work /home/lym/xxx.deb  #将work目录下的内容打包到/home/lym下,xxx.deb为打包出来的deb文件。

4.安装卸载

  安装: dpkg -i xxx.deb

  卸载: dpkg -r xxx

至此,DEBIAN系下的ubuntu打包完毕。

原文地址:https://www.cnblogs.com/thePeaceOftheLord/p/11011456.html

时间: 2024-10-15 19:02:06

Centos和Ubuntu下打包项目的相关文章

ubuntu下打包制作deb安装包

最近写了一个小程序,打算做成deb发布,折腾了两天,终于找到了一个简单的deb制作方法 1.首先要编译好程序,获得程序的可执行文件 2.新建一个文件夹,例如在用户目录下新建mydeb文件夹 3.在mydeb文件夹建立如下结构的文件夹和文件 |--mydeb |----usr |----lib |--可执行文件(安装后,就在你的/usr/lib生成相应的可执行文件) |----share |----icons |--deb.png(图标文件生成到/usr/share/icons/) |----ap

Linux(Centos、Ubuntu)下在本地重置找回root密码

Linux(Centos.Ubuntu)下通过本地找回root密码 说到系统密码,也许是管理员最为头疼的事了,如果内部服务多的话,需要记录很多密码.当然也不排除有忘记密码的可能,对于windows系统下的密码忘记找回方法,我们已在前面的文章中介绍过了,其实就是通过老毛桃工具进行需求封装来实现windows 密码破解,但是在linux下都不用那么麻烦,只需要在本地开机选项中设置即可,今天呢,我们主要介绍日常工作中经常使用的两种linux版本的系统进行root密码忘记找回介绍,一个是centos,另

CentOS 与Ubuntu 下配置IP地址

1.CentOS配置方法如下: 用vi打开配置文件 [[email protected] ~]#  vi /etc/sysconfig/network-scripts/ifcfg-eth0 写入以下配置 DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=staticIPADDR=192.168.1.8NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=10.36.15.3 :wq 保存退出 2.Ubuntu下配置方法:

CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)

http://blog.csdn.net/prettyshuang/article/details/50501904 首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1.   规划 192.168.4.93(h93)       1个主master  2个主segment.2个镜像segment 192.168.4.94(h94)       1个备master  2个主segment.2个镜像segment 都安装在/home/wslu/gp

centos和ubuntu下使用cron设置定时任务

1.启动cron工具[ps:使用root权限] centos启动cron两种方式 a) /etc/init.d/crond start b) service crond start ubuntu启动cron两种方式 a) /etc/init.d/cron start b) service cron start(推荐) 2.添加定时任务[每个整点执行ls命令] centos crontab -e命令打开文件 添加一行:0 * * * * ls ubuntu crontab -e命令打开文件[ps:

CentOS 7 下Django项目部署教程(基于uwsgi和Nginx)

本文主要介绍如何在Linux平台上部署Django相关项目,关于Django项目的部署在互联网论坛上有很多的资料,笔者在查阅众多资料并经过实践后发现结果并不如意(或多或少总是遇到一些问题,往往与资料的预期不相符).在浏览了许多资料后笔者整理得出了部署Django项目的一般性方法,部署的方法有很多种,在此笔者选择了较为常用的基于uwsgi和Nginx的部署方案. 一.前提准备 部署前主要是需要做一些与服务器相关的准备工作,本次教程的服务器采用了阿里云的 CentOS 7.3 64位,当然作为资料学

Ubuntu下的sysv-rc-conf完美“替代”CentOS下的chkconfig

Ubuntu下的sysv-rc-conf完美"替代"CentOS下的chkconfig 问题所在:        装了Ubuntu14.04后发现chkconfig用不了,并且也安装不了chkconfig,于是老表便在网上找解决办法,最终发现原来chkconfig是Redhat下的程序,而在Ubuntu下有一个更好的程序可以完美"替代"chkconfig,那就是sysv-rc-conf. 解决办法:     第一步:在终端键入sudo apt-get install

tomcat在ubuntu下启动成功但不显示欢迎页面,也启动不了struts2项目

在ubuntu下安装tomcat之后,一直无法打开strust2项目,随之重新安装,能够启动成功,但是却不出现apache的logo: 随之,很找, 重新安装, 再试 不行 继续找 最后看到有人说可能端口被占用 所以查询:lsof -i:8080 结果真发现了 java    5346 root  149u  IPv6  25116      0t0  TCP *:http-alt (LISTEN) 重新分配个端口8088吧 配置server.xml java    8293 root   42

ubuntu下使用code::blocks编译运行一个简单的gtk+2.0项目

在具体的操作之前,首先需要安装一些必要的软件.ubuntu下默认安装了gcc,不过缺少必要的Header file,可以在命令行中输入下面的指令安装build-essential套件:sudo apt-get install build-essential使用GTK+2.0需要安装GTK开发套件,在命令行中输入下面的指令安装GTK开发套件libgtk2.0-dev:sudo apt-get install libgtk2.0-dev安装完成后,可以使用pkg-config查看一下GTK的相关编译