首页 > 其他分享 >deb包转rpm包

deb包转rpm包

时间:2024-04-08 21:57:31浏览次数:28  
标签:包转 PathRpmSpec echo DebDir fi deb cat rpm DEBIAN

deb包转rpm包

#!/bin/bash

ValueArch=""
ValueDebArch=""
ValuePackage=""
ValueDescription=""

function createSPEC()
{
cat << END > ${1}
Name:    ${ValuePackage}
Version: $(date "+%Y%m%d")
Release: 1%{?dist}
License: GPLv2
Summary: this is a rpm created by deb2rpm at $(date "+%Y%m%d")

%description
${ValueDescription}
END
}

function findInstallFilesInDebDir()
{
array=$(find ${1})
for file in ${array[@]}
do
	if [ -f ${file} ]; then
		pathfile=${file#${1}}
		if [[ ! ${pathfile} =~ /DEBIAN/ ]]; then
			echo ${pathfile}
		fi
	fi
done
}

function debdir2rpm()
{
    DebDir=${1}
    TmpRpmDir=${2}
    if [ -d ${DebDir}/DEBIAN ]; then
        if [ -f ${DebDir}/DEBIAN/control ]; then
            array=(BUILD BUILDROOT RPMS SOURCES SPECS SRPMS)
            for dir in ${array[@]}
            do
                mkdir -p ${TmpRpmDir}/${dir}
            done
            ValueDebArch=$(cat ${DebDir}/DEBIAN/control | grep -n "^Architecture:" | cut -d ' ' -f 2)
            ValuePackage=$(cat ${DebDir}/DEBIAN/control | grep -n "^Package:" | cut -d ' ' -f 2)
            ValueDescription=$(cat ${DebDir}/DEBIAN/control | grep Description: | cut -d ' ' -f 2-)
            PathRpmSpec=${TmpRpmDir}/SPECS/${ValuePackage}.spec
            PathRpmData=${TmpRpmDir}/BUILDROOT/${ValuePackage}
            case ${ValueDebArch} in
            amd64)
                ValueArch=x86_64
                ;;
            arm64)
                ValueArch=aarch64
                ;;
            *)
                echo "出现未知架构软件包"
                exit -1
                ;;
            esac
            createSPEC ${PathRpmSpec}
            if [ -f ${DebDir}/DEBIAN/preinst ]; then
                echo "%prep"                 >> ${PathRpmSpec}
                cat ${DebDir}/DEBIAN/preinst >> ${PathRpmSpec}
            fi
            if [ -f ${DebDir}/DEBIAN/postinst ]; then
                echo "%post"                  >> ${PathRpmSpec}
                cat ${DebDir}/DEBIAN/postinst >> ${PathRpmSpec}
            fi
            if [ -f ${DebDir}/DEBIAN/prerm ]; then
                echo "%preun"              >> ${PathRpmSpec}
                cat ${DebDir}/DEBIAN/prerm >> ${PathRpmSpec}
            fi
            if [ -f ${DebDir}/DEBIAN/postrm ]; then
                echo "%postun"              >> ${PathRpmSpec}
                cat ${DebDir}/DEBIAN/postrm >> ${PathRpmSpec}
            fi
            echo "%files"                   >> ${PathRpmSpec}
            array=$(find ${DebDir})
            for file in ${array[@]}
            do
	            if [ -f ${file} ]; then
		            pathfile=${file#${DebDir}}
		            if [[ ! ${pathfile} =~ /DEBIAN/ ]]; then
			            echo ${pathfile} >> ${PathRpmSpec}
                        path=${PathRpmData}/$(dirname ${pathfile})
                        if [ ! -e ${path} ]; then
                            mkdir -p ${path}
                        fi
                        cp ${file} ${path}
		            fi
	            fi
            done
            echo "%changelog"                      >> ${PathRpmSpec}
            echo "# This is helloworld changelog." >> ${PathRpmSpec}
            mv    ${PathRpmData}                     ${PathRpmData}-$(date "+%Y%m%d")-1
            cp -r ${PathRpmData}-$(date "+%Y%m%d")-1 ${PathRpmData}-$(date "+%Y%m%d")-1.${ValueArch}
            rpmbuild -bb --target=${ValueArch} --define "_topdir ${TmpRpmDir}" ${PathRpmSpec}
        else
            echo "错误: ${DebDir}/DEBIAN文件夹中不存在control文件"
        fi
    else
        echo "异常的deb文件夹: ${DebDir}"
    fi
}

if [[ ${#} != 2 ]]; then
    echo "${0}: 参数个数异常, 个数为${@}"
    echo "请输入${0} 参数1(Deb包路径/Deb文件夹路径)  参数2(目标rpm包生成路径)"
else
    DebDirPath=${1}
    DebDirBaseName=$(basename -s .deb ${1})
    if [ -f ${1} ]; then
        DebDirPath=$(dirname ${1})/${DebDirBaseName}
        dpkg -x ${1} ${DebDirPath}
        dpkg -e ${1} ${DebDirPath}/DEBIAN
    fi
    debdir2rpm ${DebDirPath} ${2}/TmpRPM_${DebDirBaseName}
    mv ${2}/TmpRPM_${DebDirBaseName}/RPMS/${${ValueArch}}/*.rpm ${2}
    rm -rf ${2}/TmpRPM_${DebDirBaseName}
    if [ -f ${1} ]; then
        rm -r ${DebDirPath}
    fi
fi


标签:包转,PathRpmSpec,echo,DebDir,fi,deb,cat,rpm,DEBIAN
From: https://www.cnblogs.com/yuanhaoblog/p/18122716

相关文章

  • vivado 使用“Set Up Debug”Wizard 来插入调试核
    使用“SetUpDebug”Wizard来插入调试核标记要调试的信号线(net)后,下一步是将其分配到调试核。VivadoDesignSuite提供了易于使用的“设置调试(SetupDebug)”Wizard,以帮助逐步指导您完成自动创建调试核并将调试信号线分配至核的输入的整个过程......
  • yay和debtap和pacman结合安装软件,manjaro还可以这么安装软件
    看到网上把欧路词典说的那么好,正好觉得goldendict用的不够顺手,打算试试,安装过程有点波折,记录如下:1.常规做法,sudopacman-Seudic没有这个软件,那就yay-Seudic,这次倒没有提示没有软件,这可以archlinux系列的软件宝库啊2.中途出现如下错误:无法读取配置文件'/home/nication/.conf......
  • 8.1 使用 rpm 命令-安装-查看-卸载-rpm 软件包
    8.1软件包的管理软件包的类型rpm二进制包------》已经使用GCC编译后的rpm概述:RPM是RedHatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、SUSE以及TurboLi......
  • centos7:编译升级 openssh:主要参考“https://github.com/boypt/openssh-rpms”
    参考“https://github.com/boypt/openssh-rpms”  “Releases·boypt/openssh-rpms(github.com)” 安装人家大牛的文档来操作即可。可选的,自行定制 version.env,可进行各种组合! BackportOpenSSHRPM/SRPMforoldCentOSAsimplescripttobuildlatestOpen......
  • Debian 12 设置
    1、禁用休眠Debian12主机上线后只连接了电源和网线,为省去插拔键盘鼠标的麻烦,这里使用SSH登录主机,命令行操作。禁用休眠命令:sudosystemctlmasksleep.targetsuspend.targethibernate.targethybrid-sleep.target作者:帽帽里装佳佳https://www.bilibili.com/read/cv283774......
  • [转帖]Alien :RPM 和 DEB 互转
    https://www.cnblogs.com/awakenedy/articles/9707416.html 使用Alien将RPM转换成DEB以及将DEB转换成RPM在本文中,我们将为你介绍alien,一个用于在各种不同的Linux包格式相互转换的工具,其最常见的用法是将.rpm转换成.deb(或者反过来)。如果你需要某个特定类型的包,而你只能找......
  • Debian安装宝塔教程
    宝塔面板是一款非常受欢迎的服务器管理软件,它以其强大的功能、简洁的操作界面和丰富的应用生态而闻名。宝塔面板不仅能够帮助用户轻松管理服务器,还能够提供网站、数据库、FTP、备份等多种服务,是服务器管理的得力助手。宝塔面板的特色1.用户友好的操作界面:宝塔面板拥有直观......
  • [转帖]梳理 Debian 各版本号,代号和软件源
    https://zhuanlan.zhihu.com/p/680480525 Debian 是Linux系统最大的发行版之一,但其版本命名却一直令我困扰。因此我整理了一下Debian各个版本的命名和关系。版本号(数字)Debian版本号直接用数字来表示,如从Debian8、9、10和11等等。从Debian6开始,每个......
  • VSCODE EIDE使用debug记录
    用上vscode之后就感觉之前的keil不太爽了,找什么东西搜索都很麻烦,之前有写过eide的文章,想着能不能在eide里面就把debug也做了,发现真的可以,下面记录一下,主要是参考这个大佬的文章,非常感谢。VscodeEIDE+CortexDebug搭建STM32开发仿真环境本身是依赖这个软件,需要安装一下......
  • frp内网穿透:基于centos8 云服务器和debian12客户端服务器
    前言入了一台本地工控机盒子,刷成了debian12系统,性能比云服务器要好一点,现在想要远程访问这台盒子,但是盒子又没有公网地址,所以想通过内网穿透的方式,通过云服务器转发请求实现内网穿透。原来体验了一下花生壳,感觉比较麻烦,于是还是想到了使用frp实现。现在记录下具体流程留作后续参......