Skip to content

Instantly share code, notes, and snippets.

@scarytom
Last active September 15, 2015 08:45
Show Gist options
  • Save scarytom/ef1c1a00d835e25fa75d to your computer and use it in GitHub Desktop.
Save scarytom/ef1c1a00d835e25fa75d to your computer and use it in GitHub Desktop.
#!/bin/sh -eu
while [ ${#} -gt 1 ]; do
key="${1}"
case "${key}" in
-n|--name)
NAME="${2}"
shift
;;
-a|--architecture)
ARCHITECTURE="${2}"
shift
;;
-v|--version)
VERSION="${2}"
shift
;;
-d|--distribution)
DISTRIBUTION="${2}"
shift
;;
*)
break
;;
esac
shift
done
if [ "${#}" -eq 0 ]; then
echo 'Usage: repack-deb [OPTION]... PACKAGE [OUTDIR]'
echo
echo ' -n, --name name of package e.g. "my-package" (default = unchanged)'
echo ' -a, --architecture architecture for package e.g. "amd64" (idefault = unchanged)'
echo ' -v, --version version for package e.g. "1.0.2" (default = unchanged)'
echo ' -d, --distribution distribution for package e.g. "precise" (default = unchanged)'
echo
exit 1
fi
die() {
echo "ERROR: ${1}"
exit 1
}
[ -f "${1}" ] || die "File ${1} not found"
OUT_DIR="${2:-.}"
[ -d "${OUT_DIR}" ] || die "${OUT_DIR} is not a directory"
NAME="${NAME:-"$(dpkg -f "${1}" Package)"}"
ARCHITECTURE="${ARCHITECTURE:-"$(dpkg -f "${1}" Architecture)"}"
VERSION="${VERSION:-"$(dpkg -f "${1}" Version)"}"
DISTRIBUTION="${DISTRIBUTION:-""}"
if [ -n "${DISTRIBUTION}" ] && [ "${DISTRIBUTION}" != 'all' ]; then
VERSION="${VERSION}~${DISTRIBUTION}1"
fi
OUT_FILE="${OUT_DIR}/${NAME}_${VERSION}_${ARCHITECTURE}.deb"
[ ! -e "${OUT_FILE}" ] || die "${OUT_FILE} already exists"
WORKING_DIR="$(mktemp --directory)"
trap 'rm -rf "${WORKING_DIR}"' EXIT
dpkg-deb -x "${1}" "${WORKING_DIR}"
dpkg-deb -e "${1}" "${WORKING_DIR}/DEBIAN"
sed -i "s/^Package: .*/Package: ${NAME}/" "${WORKING_DIR}/DEBIAN/control"
sed -i "s/^Version: .*/Version: ${VERSION}/" "${WORKING_DIR}/DEBIAN/control"
sed -i "s/^Architecture: .*/Architecture: ${ARCHITECTURE}/" "${WORKING_DIR}/DEBIAN/control"
dpkg-deb -b "${WORKING_DIR}" "${OUT_FILE}"
rm -fr "${WORKING_DIR}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment