Package: lzma
Version: 4.43-14
Severity: wishlist
Tags: patch

Hi,

I wrote a script to convert a deb package to LZMA format.  Its use is very
straightforward:

  $ deb-lzma file1.deb [file2.deb ...]

I thought it could be useful for others; consider including it in the package.

-- System Information:
Debian Release: 5.0.2
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.26-libre2-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=ca_AD.UTF-8, LC_CTYPE=ca_AD.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages lzma depends on:
ii  libc6                        2.7-18      GNU C Library: Shared libraries
ii  libgcc1                      1:4.3.2-1.1 GCC support library
ii  libstdc++6                   4.3.2-1.1   The GNU Standard C++ Library v3

lzma recommends no packages.

lzma suggests no packages.

-- no debconf information
#!/bin/bash -e
#
# Copyright (C) 2009  Robert Millan
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


usage ()
{
  cat << EOF >&2
Usage: $0 file1.deb [file2.deb ...]
EOF
}

fix_control ()
{
  local dir=$(mktemp -d)
  trap "rm -rf ${dir}" 0

  files=$(tar -C ${dir} -xzvf $1)

  if grep -q "^Pre-Depends:" ${dir}/control ; then
    sed -i ${dir}/control -e "s/^Pre-Depends: /&dpkg (>= 1.14.21), /"
  else
    echo "Pre-Depends: dpkg (>= 1.14.21)" >> ${dir}/control
  fi

  tar -C ${dir} -czf - ${files} > $1

  rm -rf ${dir}
}

compress_deb ()
{
  local dir=$(mktemp -d)
  trap "rm -rf ${dir}" 0

  deb="$(readlink -f $1)"

  (cd ${dir} && ar -x "${deb}")

  if test -e ${dir}/data.tar.lzma ; then
    echo "${deb}: Already LZMA compressed." >&2
  elif test -e ${dir}/data.tar.gz ; then
    gzip -d < ${dir}/data.tar.gz | lzma -9 > ${dir}/data.tar.lzma
    rm -f ${dir}/data.tar.gz
    fix_control ${dir}/control.tar.gz
    rm -f "${deb}"
    (cd ${dir} && ar -r "${deb}" debian-binary control.tar.gz data.tar.lzma 2> /dev/null)
  else
    echo "${deb}: Only gzipped debs are supported." >&2
  fi

  rm -rf ${dir}
}

if [ "$1" = "" ] ; then
  usage
  exit 1
fi

case "$1" in
  -h|--help)
    usage
    exit 0
  ;;
  -*)
    usage
    exit 0
  ;;
esac

for i in $@ ; do
  compress_deb "$i"
done

exit 0

Reply via email to