пятница, 12 июня 2009 г.

Скрипт для перепаковки ".deb" пакетов

Вот составил черновой вариант. Пользоваться так:
deb_lzma_repack.sh /полный/путь/до/пакета/пакет.deb
Код:

#!/bin/bash
PACKAGE=$1
PACKAGENAME=`basename ${PACKAGE}`
TMPDIR=/tmp
BUILDDIR=`echo ${PACKAGENAME} | sed s/".deb"/""/g`

mkdir ${TMPDIR}/${BUILDDIR}
cp ${PACKAGE} ${TMPDIR}/${BUILDDIR}
mv ${PACKAGE} `echo ${PACKAGE} | sed s/".deb"/"_old.deb"/g`
cd ${TMPDIR}/${BUILDDIR}
ar x ${PACKAGENAME}
mkdir DEBIAN
if [ -f control.tar.gz ]
then
tar zxf control.tar.gz -C DEBIAN
rm control.tar.gz
fi
if [ -f data.tar.gz ]
then
tar zxf data.tar.gz
rm data.tar.gz
fi
if [ -f control.tar.bz2 ]
then
tar jxf control.tar.bz2 -C DEBIAN
rm control.tar.bz2
fi
if [ -f data.tar.bz2 ]
then
tar jxf data.tar.bz2
rm data.tar.bz2
fi
rm debian-binary ${PACKAGENAME}
cd ${TMPDIR}
dpkg-deb -b -z9 -Zlzma ${BUILDDIR} `echo ${PACKAGE} | sed s/".deb"/"_lzma.deb"/g`
rm -rf ${TMPDIR}/${BUILDDIR}

2 комментария:

  1. Всё очень красиво и интересно,но,не затруднит ли расписать комментарии?

    ОтветитьУдалить
  2. В скрипте есть потенциальная ошибка в строчке (и ей подобных):
    sed s/".deb"/"_old.deb"/g
    если путь к файлу будет "/.../...deb.../package.deb" то в результате получим "/.../..._old.deb.../package_old.deb"
    Что-бы этого избежать нужно изменить на: sed s/"[.]deb$"/"_old.deb"/g

    ОтветитьУдалить