linux之使用rpmbuild打rpm包

linux之使用rpmbuild打rpm包

前言:

已从事linux运维工作数年,感觉自己还是个小菜鸟,没有大神那么的钻研的精神。只是单纯热爱,喜欢对着黑色的屏幕敲击命令,喜欢这种感觉。为什么要做RPM包呢?因为之前公司使用的是开源软件环境,nginx,tomcat,java,等等等等,安装时流程:编译->标准化目录->标准化参数->部署代码。这样纯手操作的话需要一套部署文档,当然根据个人理解和个人功力的不同,部署出来效果都千奇百怪。 所以通过一个星期的学习,大概掌握了写spec,并且总结了自己的方法,虽然比较low,但是目前还算是有效。

原理:

其实rpm是针对centos和redhat,这两种系统服务器份额占有率比较高,目前线上最常用的是 cetnos(redhat)6-x86_64和7,红帽公司为了解决编译繁琐目录不规范的问题才使用的rpm方案,说白了就是把文件封装起来,类似压缩,并将执行的脚本和依赖封装到rpm中, 加上yum源的机制,大幅缩减安装软件的难度和速度。

记住一点就好了,"一切皆文件!"

制作原理:

这里有5个文件夹,按照做菜原理可以理解为

SPEC:核心配置文件,菜谱

SOURCES:源文件存放,原料

BUILD,/var/tmp/foo-root/:生成编译文件,模拟系统环境,炒锅

RPMS:封装完成的rpm包 ,装盘

规划:

其实作为运维都知道,解决问题不算本事,能避免问题,把复杂的事做的简单才是水平。你若想制作属于自己的RPM,而且在本公司推下去一定回遵循以下几点:

1、标准化, 软件安装目录,输出文件统一路径,配置文件规范,你不可能软件东一个,西一个,日志输出的到处都是吧,万一哪天磁盘空间满了,还得担责任是不?

2、完整,尽量使功能完整,但不可把程序做的太死 比如一套Tomcat代码,我就分成了3个包,环境包、代码包、java包。

以下是lnmp架构的规划目录:

干货:

      重点就是SPEC的编辑,这里我用了不同的方法,没有使用rpmbuild的“锅”,因为安装软件也只是生成文件罢了,只要自己在测试环境可以编译安装成功那为什么还要扔给”锅”再炒一下,笔者写过多个spec也查过很多资料,在安装某些文件特别多的软件时,rpmbuild就会读取失败 而且还不报错,所以自己判断 它真的是一个”锅”,不能背!

所以很佩服红帽官方的大神,不知道他们怎么实现的,也不想为此投入太多精力, 其实完全可以先在自己的测试环境把软件装好,打包成tar.gz格式,再加上一些软件的配置文件 打包到rpm内,在安装端解压释放执行,就完成了!

实例:

测试环境:

centos6_x86-64

php5.6

163.repo

1、rpmbuild打包环境准备

yum install -y rpm-build rpmdevtools redhat-rpm-config
#安装打包环境
useradd dabao
#创建工作用户,不建议使用root因为root有无限大权限,封包时会可能会影响自身系统
vim .rpmmacros
%_topdir /home/dabao/rpmbuild
#设置%_topdir宏,这个宏是定义打包目录的路径,默认是在/usr/src/redhat
mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
#创建工作目录

2、在测试机中安装php

yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel libmcrypt-devel mhash mcrypt openssl-devel bzip2-devel
#php依赖要记下一会要写到spec中

mkdir -p /data/app/
tar xf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/data/app/libiconv11
make && make install
#安装
./configure --prefix=/data/app/php53 --with-config-file-path=/data/app/php53/etc --with-config-file-scan-dir=/data/app/php53/etc/php.d --with-mysql=mysqlnd --with-iconv-dir=/data/app/libiconv11 --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-bz2 --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-short-tags --enable-zend-multibyte --enable-static --with-xsl --with-fpm-user=www --with-fpm-group=www --enable-ftp

make
make install

useradd www -s /sbin/nologin -M
mkdir -p /data/logs/
#创建php用户及log目录

  软件调优,可根据环境调试:

#配置文件
cp /root/tools/php-5.5.29/php.ini-production /etc/php.ini
sed -i ‘910s#;date.timezone = #date.timezone = "Asia/Shanghai"#g‘ /etc/php.ini
#901行修改 date.timezone = "Asia/Shanghai"
cp /data/app/php55/etc/php-fpm.conf.default /data/app/php55/etc/php-fpm.conf

sed -i ‘32s#;error_log = log/php-fpm.log#error_log = /data/logs/php-fpm56.log#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘50s#;log_level = notice#log_level = error#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘458s#;rlimit_files = 1024#rlimit_files = 32768#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘164s#listen = 127.0.0.1:9000#listen = 127.0.0.1:9056#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘235s#pm.max_children = 5#pm.max_children = 1024#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘240s#pm.start_servers = 2#pm.start_servers = 16#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘245s#pm.min_spare_servers = 1#pm.min_spare_servers = 5#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘250s#pm.max_spare_servers = 3#pm.max_spare_servers = 20#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘255s#;pm.process_idle_timeout = 10s;#pm.process_idle_timeout = 15s;#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘261s#;pm.max_requests = 500#pm.max_requests = 2048#g‘ /data/app/php56/etc/php-fpm.conf
sed -i ‘441s#;slowlog = log/$pool.log.slow#slowlog = /data/logs/$pool56.log.slow#g‘ /data/app/php56/etc/php-fpm.conf

#启动文件
cat /etc/init.d/php-fpm56
#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/data/app/php56
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
wait_for_pid () {
        try=0
        while test $try -lt 35 ; do
                case "$1" in
                        ‘created‘)
                        if [ -f "$2" ] ; then
                                try=‘‘
                                break
                        fi
                        ;;
                        ‘removed‘)
                        if [ ! -f "$2" ] ; then
                                try=‘‘
                                break
                        fi
                        ;;
                esac
                echo -n .
                try=`expr $try + 1`
                sleep 1
        done
}
case "$1" in
        start)
                echo -n "Starting php-fpm "
                $php_fpm_BIN --daemonize $php_opts
                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi
                wait_for_pid created $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        stop)
                echo -n "Gracefully shutting down php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -QUIT `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed. Use force-quit"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        status)
                if [ ! -r $php_fpm_PID ] ; then
                        echo "php-fpm is stopped"
                        exit 0
                fi
                PID=`cat $php_fpm_PID`
                if ps -p $PID | grep -q $PID; then
                        echo "php-fpm (pid $PID) is running..."
                else
                        echo "php-fpm dead but pid file exists"
                fi
        ;;
        force-quit)
                echo -n "Terminating php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -TERM `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        restart)
                $0 stop
                $0 start
        ;;
        reload)
                echo -n "Reload service php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -USR2 `cat $php_fpm_PID`
                echo " done"
        ;;
        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload|status}"
                exit 1
        ;;
esac

  完成之后你就可以启动下你的php试试了,启动测试成功后,请关闭服务正式开始我们打RPM包

2、开始制作rpm包

cd /data/app
tar zcvf php56.tar.gz php56
tar zcvf libiconv11.tar.gz libiconv11
cp php56.tar.gz /home/dabao/rpmbuild/SOURCES
cp libiconv11.tar.gz /home/dabao/rpmbuild/SOURCES
cp /etc/init.d/php-fpm56 /home/dabao/rpmbuild/SOURCES
#把原料准备好

  编写spec文件

vim /home/dabao/rpmbuid/SPECS/php56.spec
%define name t-php
%define version 5.6.30
%define _prefile /app

Summary:        t-php
Name:           %{name}
Version:        %{version}
Release:        2
Group:          System Environment/Daemons
License:        GPL
URL:            www.php.org

Packager:       tajZhang
Vendor:         tajZhang

Source0:        php56.tar.gz
Source1:        php-fpm56
Source2:        libiconv11.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-root

#BuildRequires:
Requires:       zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel libmcrypt-devel mhash mcrypt open
ssl-devel bzip2-devel

%description
php5.6.30 copy install.
basedir /data/app/php56 /data/app/php56/etc

%prep
#%setup -q

%build
#mkdir -p %{buildroot}/usr/java/jdk1.6.0_22
#cp -r * /usr/java/jdk1.6.0_22

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/data/app
mkdir -p %{buildroot}/etc/init.d
cp -i %{SOURCE0} %{buildroot}/data/app
cp -i %{SOURCE2} %{buildroot}/data/app
cp -i %{SOURCE1} %{buildroot}/etc/init.d
#cp -i %{SOURCE1} %{buildroot}/etc/init.d/ && chmod +x %{buildroot}/etc/init.d/mysqld
#cp -i %{SOURCE2} %{buildroot}/etc/

%pre
#if [ $1 == 1 ];then
#fi
%post
if [ $1 == 1 ];then
tar xf /data/app/php56.tar.gz -C /data/app/
tar xf /data/app/libiconv11.tar.gz -C /data/app/
rm -f /data/app/php56.tar.gz /data/app/libiconv11.tar.gz
mkdir -p /data/logs
useradd www -s /sbin/nologin -M
chmod +x /etc/init.d/php-fpm56
/etc/init.d/php-fpm56 start
chkconfig php-fpm56 on
echo "install over"
fi
%preun
if [ $1 == 0 ];then
/etc/init.d/php-fpm56 stop
rm -rf /data/app/php56
rm -f /etc/init.d/php-fpm56
echo "remove over"
fi
%postun
%clean
rm -rf "%{buildroot}"
rm -rf %_topdir/BUILD/%{name}-%{version}

%files
%defattr (-,root,root,0755)
/etc/init.d/php-fpm56
/data/app/php56.tar.gz
/data/app/libiconv11.tar.gz

  执行打包命令

rpmbuild -ba php56.spec
#到SPECS目录下执行,如果没有报错会在RPMS/x86_64/目录下生成你打好的包
cd /home/dabao/rpmbuild/RPMS/x86_64/
   t-php-5.6.30-2.x86_64.rpm

  到此你的第一个rpm包制作完成,拿到测试机上装下试试吧!

分析:

    什么?稀里糊涂的根本不懂SPEC里写的什么,其实它只是个模板,摘录一段各位看了一目了然:

----------------------------------分割线---------------------------------------------------------------------------------

SPEC配置文件讲解

#/** 定义宏段 **/

%define name nginx  <==定义name宏伟nginx,后面可以调用这个宏%{name}

%define version 1.2.4 <==定义version宏为1.2.4

%define _prefix /application/nginx

#/** 简介段 **/

Summary:    information <==软件包的概要信息,不要超过50个字符

Name:    %{name}   <==软件包的名称,调用上面的宏

Version:    %{version} <==软件包的版本,调用上面的宏

Release:    1    <==软件包发布序列号,表明第几次打包

License:    GPL <==软件授权方式,通常是GPL

Group:       System Environment/Daemons <==软件包分组,属于哪个组包建议使用标准分组,查看/usr/share/doc/<wiz_tmp_highlight_tag>rpm-4.4.2.3/GROUPS

URL:    http://nginx.org/    <==源代码软件包的官方地址或源码包下载地址

Packager:    coral <[email protected]>  <==软件包的作者及联系方式

Vendor:    coral                    <==软件包开发者的名字

Source0:    %{name}-%{version}.tar.gz <==源代码软件包的名字,如nginx-1.2.4-tar.gz

Source1:    nginx.init           <==如果需要需要安装多个源码软件包,可指定多个Source

比如Source0 Sourcel Source100等,数字可以不连续,后面使用%{Source0}来调用

Patch1:      httpd-2.2.22-pcre830.patch  <==指定补丁文件

Patch2:      httpd-2.2.21-mod_proxy-change-state.patch

BuildRoot: %{_tmppath}/%{name}-%{version}-root  <==这是make install 使用的虚拟目录,安装后打包,就将该目录下打,通常是/var/tmp/软件名-版本号-发布序列号,该虚拟目录是自动创建的

说明:引用buildRoot这个宏时,可以写成$<wiz_tmp_highlight_tag>RPM_BUILD_ROOT,也可以鞋厂%{buildroot}方式来引用

BuildRequires:  gcc,make  <==制作<wiz_tmp_highlight_tag>RPM包过程所依赖的软件包,多个包依赖用逗号分隔

Requires:        pcre,pcre-devel,openssl,openssl-devel,zlib,zlib-devel,chkconfig <==安装过程中所依赖的软件包

提示:可以使用>=或<=表示大于或小于某一特定版本,如:libpng-devel >= 1.0.20 zlib不同的软件名使用空格分块

提示:还有PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同阶段的依赖包指定

%description  <==软件包详细描述信息,一行不要超过50个字符,回车换行,尅使用多行

This is an open-source software,bulk distribution ...

- 强制换行

#/** 准备段 **/

%prep   <==安装前的准备工作,一般用于解压源码包

%setup -q    <==%setup是宏命令,可自动完成解包工作

说明:预处理一般是将源码包解压,有两种情况:一就是同事编译多个源码包,二就是源码的tar包的名称于解压出来的目录不一致,此时需要-n参数指定一下,如:%setup -q -n %{Source0},有时候解压出来的tar.gz与包名不符合,这时候需要指定-n参数,如%setup -q -n nagios,后面不加版本号

%path1          <==打补丁

#/** 编译段 **/

%build      <==源码编译,如: ./configure && make 命令

./confingure \

--prefix=%{_prefix} \

--user=nginx \

--group=nginx \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-pcre

make

#make %{?_smp_mflags}  <==使用多核CPU加速编译过程,相当于命令行中的make -j

#/** 安装段 **/

%install    <==源码安装,如:make install 命令

rm -rf %{buildroot}   <==在此处设置删除buildroot虚拟根目录是为方式以前打包留下的文件,防止安装出错,才删除该目录

make install DESTDIR="%{buildroot}"     <==指定编译安装的路径到buildroot,而不是安装到系统中

%{__install} -p -d -m 0755 %{buildroot}/var/log/nginx   <==在虚拟根目录下创建目录,并授予权限

%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/init.d/nginx  <==安装启动脚本到init.d目录

注意:无论上面定义的SOURCE1是不是大写,这里调用必须为大写

说明:%prep  %build %install段,除了可以执行<wiz_tmp_highlight_tag>rpm所定义的宏命令(以%开头),还可以换行执行shell命令,比如直接写tar -zxf xxx.tar.gz命令,而不使用%setup -q宏

#/** 脚本段 **/

%pre    <==<wiz_tmp_highlight_tag>rpm安装前执行的脚本,比如创建用户,设置变量等等操作

if [ $1 == 1 ];then

/usr/sbin/groupadd nginx 2>/dev/null

/usr/sbin/useradd -g nginx -s /sbin/nologin -M nginx 2>/dev/null

fi

说明:$1等于1就是安装

%post    <==<wiz_tmp_highlight_tag>rpm安装完成后执行的脚本,比如加载ldconfig函数库,加入开机自动启动等等

if [ $1 == 1 ];then

echo "/usr/local/lib" >>/etc/ld.so.conf.d/nginx.conf <==如果安装 lib库到/usr/local/lib中,需要配置该段

/sbin/ldconfig 2>/dev/null

chkconfig --add %{name}

fi

说明 :$1等于1就是安装

%preun  <==<wiz_tmp_highlight_tag>rpm 卸载前执行的脚本

if [ $1 ==0 ];then

/sbin/service %{name} stop >/dev/null 2>&1

/sbin/chkconfig -del %{name}

fi

说明: $1等于0就是卸载

%postun  <==<wiz_tmp_highlight_tag>rpm卸载完成后执行的脚本

说明%preun在升级的时候会执行,%postun在升级<wiz_tmp_highlight_tag>rpm包的时候不会执行

<wiz_tmp_highlight_tag>rpm还提供了一种信号机制:不同的操作会返回不同的信息,并放到默认变量$1中

信号    说明

0        卸载

1        安装

2        升级

#/** 清理段  **/

%clean      <==清理临时文件,通常为如下

rm -rf  "%{buildroot}"    <==删除虚拟目录

rm -rf   %_topdir/BUILD/%{name}-%{version}   <==将解压的源码包删除掉

#/** 文件段 **/

%file     <==定义哪些文件或目录放入到<wiz_tmp_highlight_tag>rpm中

/usr/sbin/nginx <==指定包含的文件目录

/etc/nginx/   <==指定包含的目录(文件后面有个/表示目录,目录里的所有文件)

%dir  /var/run/nginx    <==指定包含的文件,如果前面是%dir ,那么该nginx是一个空目录

说明:用于定义软件包所包含的文件,分为三类:说明文档(doc),配置文件(conf),一级执行程序(sbin)

注意:%files这里会在虚拟根目录下进行,千万不要写绝对路径,应该使用宏或变量表示相对路径

%doc LICENSE CHANGES README     <==要打包的文档文件,如果不知道路径,默认是/usr/share下

%defattr (-,root,root,0755)      <==定义默认权限

%{_prefix}     <==调用上面的定义宏,使用%defattr对/application/nginx目录设置安装文件的属性,第一个“-”表示默认文件权限(文件0644,目录0755),第二个"root"表示属主,第三个“root”表示属组,第四个“0755”设置的权限

说明:%defattr和%attr宏作用基本一样,%defattr可以对目录进行递归授权,%attr针对单个文件

它俩的区别参考资料:http://stackoverflow.com/questions/6952384/what-the-defattr-means-in-<wiz_tmp_highlight_tag>rpm-spec-files

%config(noreplace) %{_prefix}/conf/nginx.conf     <==nginx.conf配置文件放置到/application/nginx/conf目录下,config的文件为配置文件,noreplace表示升级<wiz_tmp_highlight_tag>rpm包的时候不替换该文件

%config(noreplace) %{_prefix}/conf/fastcgi.conf   <==fastcgi.conf 配置文件放置到/application/nginx/conf 目录下

%config(noreplace) %{_prefix}/conf/fastcgi_params

%attr(0755,root,root) /etc.init.d/nginx  <==对单个文件授权,权限为"-"表示保留原有属性

注意:如果%exclude指定的文件不存在,也会报错

#/** 改变日志段  **/

%changelog  <==把<wiz_tmp_highlight_tag>rpm包软件的每次修改记录到这里,保存到发布的<wiz_tmp_highlight_tag>rpm包中一般减号开始,以便查询

* Wed Apr  11 2012 coral <919953500>  -1.2.4-1  <==以*开头,什么时间改的,什么人改的

-  Initial  version       <==以-开头,干了什么事(初始版本)

注意:此地方用中文会报错

特别注意:%install 宏使用的是绝对路径,而%file部分使用相对路径

----------------------------------分割线---------------------------------------------------------------------------------

总结与启发:

各位看到php的spec根本就没有经过解压与编译,而是直接将tar.gz复制到系统中,执行安装完成后命令。

执行结束后为什么执行一次echo呢?因为这样才能让if的$?返回0,如果最后一条不是成功执行的命令,rpm就会安装报错。

rpm机制是在系统子bsah下执行,不是当前bash,设置系统环境变量的重新登录才生效。

%file段至关重要,因为这里记录了你要装盘的文件。

通过rpm的学习,觉得它可以做很多事,可以让小弟不在为安装文档抓头,而且可以配合yum机制定制自己的软件仓库,实现快速部署。甚至可以用rpm做代码包版本控制,当足够了解自己公司的业务也可以将程序打在一套软件组内,这样是不是更像docker呢?

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

linux之使用rpmbuild打rpm包的相关文章

linux软件包管理之一(rpm包管理)

开场白 1.软件的安装卸载是很平常的事情,但是在linux上面却也这么的不简单.Linux的其中一个哲学思想就是 一个程序只做一件事,并且做好. 组合小程序来完成复杂任务.这样做有很多好处.但世界上的东西总是两面的,有得必有失.各个小程序之间往往会存在着复杂的依赖关系. 2.再往前走一步.软件最初的安装方式只有一种,那就是源代码编译安装,这种方式安装的软件更贴近本机的系统运行环境,但也更复杂.不仅要解决软件之间的依赖关系(所依赖的软件还要再编译安装),还要配置开发编译环境(可能会抓狂的),一切都

linux学习笔记3:linux的网络配置,rpm包,shell以及samba服务器的使用和安装

1.linux下的shell<linux命令.编辑器和shell编程> (1)shell种类有很多,常用的有三种,在linux可以通过ls -l /bin/*sh 来显示所有已安装的shell种类  1)bourne  /bin/sh    2)C     /bin/csh  3)Kom     /bin/ksh (2)查看目前使用的是哪种shell的命令来看请里面的内容可以知道  env      意思是可以显示当前操作系统的环境变量 (3)修改使用shell的版本所使用的指令是:  chs

Linux下基于官方源代码RPM包构建自定义MySQL RPM包

1.首先安装rpmbuild #yum install rpm-build gcc gcc-c++ cmake bison ncurses-devel zlib  -y 2.下载官方源码包(tar.gz格式),并解压 #wget  http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz #tar -xvf mysql-5.6.15.tar.gz 3.新建RPM文件夹 #cd  mysql-5.6.15 #mkdir rpm

rpmbuild制作rpm包入门

一个简单的nginx.spec文件.(纯粹的理解spec文件的意思,制作出来的rpm包不能正常使用) [[email protected] nginx]# cat nginx.spec  Name:           nginx Version:        1.2.9  Release:        1%{?dist} Summary:        nginx-server web Group:          Applications/Archiving License:     

Red Hat Enterprise Linux 7.2下使用RPM包安装SQL Server vNext

1.下载安装包 mssql-server:https://packages.microsoft.com/rhel/7/mssql-server/ mssql-tools:https://packages.microsoft.com/rhel/7/prod/ [[email protected] home]# ll 总用量 150072 -rw-r--r--   1 root        root            4036892 1月  23 14:59 msodbcsql-13.1.3.

linux学习第二周;rpm包管理;yum管理;定制yum库

rpm安装(无法解决包之间依赖性问题): rpm -ivh # 安装包(需要给出包绝对路径) rpm -V #用作包校验,包无变化则不执行操作,包被改变则显示包改变的属性 rpm -e # 卸载包 rpm -qi rpm -ql rpm -qf rpm -K yum安装(可解决包之间依赖性问题): 定制yum库: 1.先移走/etc/yum.repos.d/文件里默认的互联网yum源 2.cd  /etc/yum.repos.d/ 3.vim  base.repo #后缀为.repo,名字随便起

Linux sysadmin(2): 网络、RPM包管理及一些脚本

注意:第八周作业,请将以下题目整理在51cto博客当中,完成后请将对应的博文链接地址提交在答案栏中,提交格式如下: 学号+姓名+博文链接地址 eg:1+张三+http://mageedu.blog.51cto.com/4265610/1794420 本周作业内容: 1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 2.IP地址的分类有哪些?子网掩码的表示形式及其作用 IPv4地址由四段三位点分十进制组成,0.0.0.0-255.255.255.255,分为五类 A类

linux操作系统下查看某rpm包是32bit 还是x64bit的命令

[[email protected] ~]# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep libstdc++ compat-libstdc++-33-3.2.3-61 (x86_64) compat-libstdc++-296-2.96-138 (i386) libstdc++-4.1.2-48.el5 (i386) compat-libstdc++-33-3.2.3-61 (i386

linux rpm包制作

Linux Rpm 包制作 一.简介 RPM(Red Hat Package Manager)的最常见的软件包管理器. 软件包管理器 rpm,deb(dpkg) RPM包命名:name-version-release.architecture.rpm. xorg-x11-xsm-1.0.2 -4.fc6.i386.rpm 包名       版本号 编译次数 厂商 平台 RPM功能:安装.卸载.升级.查询和验证. rpm     -ivh              安装 rpm     -Uvh