Code: Select all
#!/bin/sh
# xz2txz.sh deb2txz.sh rpm2txz.sh 2015-04-28 18:18:09
ren() # Rename to be Slackware Compliant
{
n=$(awk '{print match($0,"[_-][0-9]+[.]")-1;}'<<< $1)
r=${1:n};
v=$(expr "${1:n}" : '\([0-9._-]*[0-9]\)');
r=${1:n}; r=${r#$v}; r=${r//-/.}; r=${r//_/.}; r=${r%.*};
a=${r##*.}; r=${r%.*};
[[ ${v%-*} ]] && t=${v##*-}; v=${v%-${t:=1}};
f=${1:0:n}-${v:1}$r-$a-$t.txz; echo "-> $f"
}
sld() # Create very brief one-liner in 'slack-desc'
{
[[ ! -d $fr/install ]] && mkdir $fr/install
sd=$fr/install/slack-desc
l=${1:0:n}:" ${v:1} ($1)"; l=${l:0:79};
echo $l > $sd
for ((i=0; i<10; i++)); do echo ${1:0:n}: >> $sd; done
echo "<slack-desc>"
head -n1 $sd
}
deb2tgz()
{
# Convert .deb. packages to .tgz. 2014-11-13 19:45:33
# Whittled Down Version 2015-04-28 00:32:11
# Variables
c='\e[36m'
r='\e[31m'
e=`tput sgr0`
# Let's start
if [ "$1" = "" ]; then
echo -e "${c}need a deb package as an argument, example: $0 /mnt/sda2/debian_packages/package.deb"$e | fmt -w 80
return 1;
fi
# Work only on deb packages:
# Create module:
y=$1
mod=`readlink -f $y | sed s/.deb$/.xzm/`
pkg=`echo $mod | awk -F/ '{print$NF}' | sed s/.xzm//g`
dataname=`ar t $y | grep data`
echo dataname = $dataname
# echo mod = $mod
echo Creating Package: ${mod%.xzm}.tgz
pushd . > /dev/null
case $dataname in
data.tar.gz)
mkdir /tmp/deb2xzm$$ && cp $y /tmp/deb2xzm$$ && cd /tmp/deb2xzm$$ && /usr/bin/ar x * data.tar.gz && mv data.tar.gz $pkg.tgz && mv /tmp/deb2xzm$$/$pkg.tgz ${mod%.xzm}.tgz
;;
data.tar.lzma)
mkdir /tmp/deb2xzm$$ && cp $y /tmp/deb2xzm$$ && cd /tmp/deb2xzm$$ && /usr/bin/ar x * data.tar.lzma && unxz data.tar.lzma && gzip data.tar && mv data.tar.gz $pkg.tgz && mv /tmp/deb2xzm$$/$pkg.tgz ${mod%.xzm}.tgz
;;
data.tar.xz)
mkdir /tmp/deb2xzm$$ && cp $y /tmp/deb2xzm$$ && cd /tmp/deb2xzm$$ && /usr/bin/ar x * data.tar.xz && unxz data.tar.xz && gzip data.tar && mv data.tar.gz $pkg.tgz && mv /tmp/deb2xzm$$/$pkg.tgz ${mod%.xzm}.tgz
;;
esac
rm -rf /tmp/deb2xzm$$
popd > /dev/null
}
rpm2txz()
{
[[ ${1##*.} != rpm ]] && { echo Not rpm; return 1; }
pg=${1##*/}; can=$(readlink -f $1)
fr=/tmp/fke$$
pushd . > /dev/null
mkdir $fr && cd $fr
rpm2cpio $can | cpio -dim
popd > /dev/null
ren $pg
sld $pg
pushd . > /dev/null
cd $fr
/sbin/makepkg -l y -c n ${can%/*}/$f
popd > /dev/null
rm -rf $fr
}
deb2txz()
{
[[ ${1##*.} != deb ]] && { echo Not deb; return 1; }
pg=${1##*/}; can=$(readlink -f $1)
deb2tgz $can
fr=/tmp/fke$$
mkdir $fr && tar xzf ${can%.*}.tgz -C $fr
ren $pg
sld $pg
pushd . > /dev/null
cd $fr
/sbin/makepkg -l y -c n ${can%/*}/$f
popd > /dev/null
rm -rf $fr
}
xz2txz()
{
[[ ${1##*.} != xz ]] && { echo Not xz; return 1; }
pg=${1##*/}; can=$(readlink -f $1)
fr=/tmp/fke$$
mkdir $fr && tar xJf $can -C $fr
ren ${pg/.tar/}
sld $pg
pushd . > /dev/null
cd $fr
/sbin/makepkg -l y -c n ${can%/*}/$f
popd > /dev/null
rm -rf $fr
}
s=${0##*/}
[[ ! -f $1 ]] && { ls $1; exit; }
$(eval echo ${s%.*}) $1
- sh xz2txz.sh [/path to package/]<package>.xz
e.g. sh xz2txz.sh libcl-1.1-4-i686.pkg.tar.xz - sh deb2txz.sh [/path to package/]<package>.deb
e,g. sh deb2txz.sh /tmp/tst/libmono2.0-cil_2.10.8.1-5ubuntu2_all.deb - sh rpm2txz.sh [/path to package/]<package>.rpm
e.g. sh p10/Por/rpm2txz.sh libicuuc54-54.1-1-omv2015.0.i586.rpm
The quick script here makes a quick analysis of the package name in order to give the resultant package a Slackware acceptable name, which should work most of the time.

Invocation Example
Code: Select all
guest@porteus:~$ sh xz2txz.sh libcl-1.1-4-i686.pkg.tar.xz
-> libcl-1.1.i686-pkg-4.txz
<slack-desc>
libcl: 1.1 (libcl-1.1-4-i686.pkg.tar.xz)
Searching for symbolic links:
usr/lib/libOpenCL.so.1 -> /usr/lib/libOpenCL.so.1.0.0
usr/lib/libOpenCL.so -> /usr/lib/libOpenCL.so.1
Making symbolic link creation script:
( cd usr/lib ; rm -rf libOpenCL.so.1 )
( cd usr/lib ; ln -sf /usr/lib/libOpenCL.so.1.0.0 libOpenCL.so.1 )
( cd usr/lib ; rm -rf libOpenCL.so )
( cd usr/lib ; ln -sf /usr/lib/libOpenCL.so.1 libOpenCL.so )
./
install/
install/doinst.sh
install/slack-desc
usr/
usr/share/
usr/share/licenses/
usr/share/licenses/libcl/
usr/share/licenses/libcl/LICENSE
usr/lib/
usr/lib/libOpenCL.so.1.0.0
.MTREE
.PKGINFO
Slackware package /home/guest/libcl-1.1.i686-pkg-4.txz created.
Code: Select all
guest@porteus:~$ mkdir id
guest@porteus:~$ /sbin/installpkg -root id libcl-1.1.i686-pkg-4.txz
Verifying package libcl-1.1.i686-pkg-4.txz.
Installing package libcl-1.1.i686-pkg-4.txz:
PACKAGE DESCRIPTION:
# 1.1 (libcl-1.1-4-i686.pkg.tar.xz)
#
/sbin/ldconfig: Can't create temporary cache file /etc/ld.so.cache~: Permission denied
Executing install script for libcl-1.1.i686-pkg-4.txz.
Package libcl-1.1.i686-pkg-4.txz installed.