Ambari 国产化一:打包

       前言: 在将Ambari移植到国产化平台中时,一方面需要将Ambari本身进行编译移植;另一方面,需要将Ambari 管理的大数据组件进行移植。
       对于Ambari 管理的大数据组件一般而言是可移植的,对于不可移植的组件需要进行重新编译,然后将编译后的安装包进行重新打包,让Ambari可以通过yum的方式进行安装部署。
        另外,当需要对RPM进行二次处理的时候,需要对原始RPM包进行拆包+重新打包。

RPM 解压

将rpm包解压,获取原始的rpm包中的资源

解压命令:

 rpm2cpio  XX.rpm | cpio -div

JAR 处理

JAR包解压: jar xvf XX.jar
制作Jar包: jar cvfM XX.jar YY.class ….
其中M参数是为了不在jar中中生成meta目录。当需要将大量的class等文件达成jar包时,可进入目录,使用“.” 表示将当前目录下的所有资源打到jar包中。

初始化打包环境

1.安装工具:
yum install rpmbuild rpmdevtools

2.初始化工作空间
rpmdev-setuptree

SPEC文件编写

几个小知识点

1.指定打包之前不要对目标文件做strip(如打包脚本时没必要strip),不对文件进行编译

  %define __os_install_post %{nil}

2.打包时,不重新打包jar

%define __jar_repack 0

3.防止打包成noarch时,打包抛出异常并终止


%define _binaries_in_noarch_packages_terminate_build   0

4.禁止自动搜索依赖关系

Autoprov:  no
Autoreq:  no

打包举例

对Ambari Agent 进行重新打包,其SPEC文件说明。

%define __os_install_post %{nil}

%define _binaries_in_noarch_packages_terminate_build 0

%global agent_conf_dir  /etc/ambari-agent
%global agent_init_file  /etc/init/ambari-agent.conf
%global agent_initd_file  /etc/init.d/ambari-agent

%global agent_lib  /usr/lib/ambari-agent/
%global  python_lib  /usr/lib/python2.6/site-packages/ambari_agent
%global   sbin_file  /usr/sbin/ambari-agent

%global var_lib  /var/lib/ambari-agent
%global var_log  /var/log/ambari-agent
%global  var_run /var/run/ambari-agent

%define __jar_repack 0


#命令规则:name+version+release号要等于source的文件名
Name:       ambari-agent  
Version:    2.5.1.0
Release:    159
Summary:    Ambari Agent aarch64
License:     Apache License 2.0
URL:         https://www.hikdata.com/
Source0:    ambari-agent-2.5.1.0-159.tar.gz
BuildArch:     noarch
Requires: java

Autoprov:  no
Autoreq:  no
%description
Ambari Agent for noarach


%prep
STACKS_FOLDER="/var/lib/ambari-agent/cache/stacks"
STACKS_FOLDER_OLD=/var/lib/ambari-agent/cache/stacks_$(date '+%d_%m_%y_%H_%M').old

COMMON_SERVICES_FOLDER="/var/lib/ambari-agent/cache/common-services"
COMMON_SERVICES_FOLDER_OLD=/var/lib/ambari-agent/cache/common-services_$(date '+%d_%m_%y_%H_%M').old

if [ -d "/etc/ambari-agent/conf.save" ]
then
    mv /etc/ambari-agent/conf.save /etc/ambari-agent/conf_$(date '+%d_%m_%y_%H_%M').save
fi

BAK=/etc/ambari-agent/conf/ambari-agent.ini.old
ORIG=/etc/ambari-agent/conf/ambari-agent.ini

BAK_SUDOERS=/etc/sudoers.d/ambari-agent.bak
ORIG_SUDOERS=/etc/sudoers.d/ambari-agent

[ -f $ORIG ] && mv -f $ORIG $BAK
[ -f $ORIG_SUDOERS ] && echo "Moving $ORIG_SUDOERS to $BAK_SUDOERS. Please restore the file if you were using it for ambari-agent non-root functionality" && mv -f $ORIG_SUDOERS $BAK_SUDOERS

if [ -d "$STACKS_FOLDER" ]
then
    mv -f "$STACKS_FOLDER" "$STACKS_FOLDER_OLD"
fi

if [ -d "$COMMON_SERVICES_FOLDER" ]
then
    mv -f "$COMMON_SERVICES_FOLDER" "$COMMON_SERVICES_FOLDER_OLD"
fi


%setup -qn   ambari-agent-2.5.1.0-159


%build
%install
mkdir -p %{buildroot}%{agent_conf_dir}
mkdir -p %{buildroot}/etc/init
mkdir -p %{buildroot}/etc/init.d
%{__cp} -r -a  etc/ambari-agent/*   %{buildroot}%{agent_conf_dir}
%{__cp} -f   etc/init/ambari-agent.conf   %{buildroot}/etc/init/
%{__cp} -f  etc/init.d/ambari-agent    %{buildroot}/etc/init.d/


mkdir -p %{buildroot}%{agent_lib}
mkdir -p %{buildroot}%{python_lib}
mkdir -p %{buildroot}/usr/sbin
%{__cp} -r -a  usr/lib/ambari-agent/*    %{buildroot}%{agent_lib}
%{__cp} -r -a  usr/lib/python2.6/site-packages/ambari_agent/*    %{buildroot}%{python_lib}
%{__cp} -r -a  usr/sbin/ambari-agent    %{buildroot}/usr/sbin/


mkdir -p %{buildroot}%{var_lib}
mkdir -p %{buildroot}%{var_log}
mkdir -p %{buildroot}%{var_run}
%{__cp} -r -a  var/lib/ambari-agent/*    %{buildroot}%{var_lib}



%preun
if [ "$1" -eq 0 ]; then  # Action is uninstall
    if [ -f "/var/lib/ambari-agent/install-helper.sh" ]; then
      /var/lib/ambari-agent/install-helper.sh remove
    fi
fi

exit 0




%post
case "$1" in
  1) # Action install
    if [ -f "/var/lib/ambari-agent/install-helper.sh" ]; then
        /var/lib/ambari-agent/install-helper.sh install
    fi
  ;;
  2) # Action upgrade
    if [ -f "/var/lib/ambari-agent/install-helper.sh" ]; then
        /var/lib/ambari-agent/install-helper.sh upgrade
    fi
  ;;
esac

mkdir /var/lib/ambari-agent/data

%posttrans
RESOURCE_MANAGEMENT_DIR="/usr/lib/python2.6/site-packages/resource_management"
RESOURCE_MANAGEMENT_DIR_AGENT="/usr/lib/ambari-agent/lib/resource_management"
JINJA_DIR="/usr/lib/python2.6/site-packages/ambari_jinja2"
JINJA_AGENT_DIR="/usr/lib/ambari-agent/lib/ambari_jinja2"

# remove RESOURCE_MANAGEMENT_DIR if it's a directory
if [ -d "$RESOURCE_MANAGEMENT_DIR" ]; then  # resource_management dir exists
  if [ ! -L "$RESOURCE_MANAGEMENT_DIR" ]; then # resource_management dir is not link
    rm -rf "$RESOURCE_MANAGEMENT_DIR"
  fi
fi
# setting resource_management shared resource
if [ ! -d "$RESOURCE_MANAGEMENT_DIR" ]; then
  ln -s "$RESOURCE_MANAGEMENT_DIR_AGENT" "$RESOURCE_MANAGEMENT_DIR"
fi

# setting jinja2 shared resource
if [ ! -d "$JINJA_DIR" ]; then
  ln -s "$JINJA_AGENT_DIR" "$JINJA_DIR"
fi



%files    #声明文件,声明了的文件或目录,在进行rpm -e卸载时会自动删除。
%doc
%{agent_conf_dir}
%{agent_init_file}
%{agent_initd_file}

%{agent_lib}
%{python_lib}
%{sbin_file}

%{var_lib}
%{var_log}
%{var_run}

%changelog


打包说明

在进行重新打包时,需要准备的资源包括: rpm资源、spec文件。

rpm资源可通过:rpm2cpio XX.rpm | cpio -div进行收集

SPEC文件的编写:

  • 首先获取原先的rpm包安装时进行操作
  • 根据需求,加上新的动作

获取原先的rpm安装时进行的操作

(1)rpm -ivvh XX.rpm >> output.txt
将rpm包时进行的所有操作输出来

(2) 在安装完后,通过如下命令查看rpm中带有的script操作
rpm -qa –script XXX

打包编译

通过命令完成打包

rpmbuild -ba  xx.spec

猜你喜欢

转载自blog.csdn.net/youyou1543724847/article/details/80373523
今日推荐