Как легко редактировать контрольный файл в пакете deb

Есть ли способ легко редактировать контрольный файл в пакете deb. Неважно, в какой системе (Linux, Mac OS X и т. Д.) Может кто-нибудь знает хороший сценарий для его автоматизации?

3 ответа

Проверьте это: http://ubuntuforums.org/showthread.php?t=636724 всякий случай, если этот поток когда-нибудь удалят, я также выложу здесь копию кода:

DEBFILE="$1"
TMPDIR=`mktemp -d /tmp/deb.XXXXXXXXXX` || exit 1
OUTPUT=`basename "$DEBFILE" .deb`.modfied.deb

if [[ -e "$OUTPUT" ]]; then
  echo "$OUTPUT exists."
  rm -r "$TMPDIR"
  exit 1
fi

dpkg-deb -x "$DEBFILE" "$TMPDIR"
dpkg-deb --control "$DEBFILE" "$TMPDIR"/DEBIAN

if [[ ! -e "$TMPDIR"/DEBIAN/control ]]; then
  echo DEBIAN/control not found.

  rm -r "$TMPDIR"
  exit 1
fi

CONTROL="$TMPDIR"/DEBIAN/control

MOD=`stat -c "%y" "$CONTROL"`
vi "$CONTROL"

if [[ "$MOD" == `stat -c "%y" "$CONTROL"` ]]; then
  echo Not modfied.
else
  echo Building new deb...
  dpkg -b "$TMPDIR" "$OUTPUT"
fi

rm -r "$TMPDIR"

+ Изменить vi любому редактору по выбору. Сохраните его как скрипт оболочки (т.е. debcontrol.sh), сделайте его исполняемым (chmod +x) и использовать deb в качестве первого параметра (./debcontrol.sh xxxxx.deb)

Сценарий с форумов Ubuntu требует нескольких изменений для запуска. Так как мое изменение к другому сообщению не было одобрено, вот моя обновленная версия.

#!/bin/bash
DEBFILE="$1"
TMPDIR=`mktemp -d /tmp/deb.XXXXXXXXXX` || exit 1
OUTPUT=`basename "$DEBFILE" .deb`.modified.deb

if [[ -e "$OUTPUT" ]]; then
  echo "$OUTPUT exists."
  rm -r "$TMPDIR"
  exit 1
fi

dpkg-deb -x "$DEBFILE" "$TMPDIR"
dpkg-deb --control "$DEBFILE" "$TMPDIR"/DEBIAN

if [[ ! -e "$TMPDIR"/DEBIAN/control ]]; then
  echo DEBIAN/control not found.

  rm -r "$TMPDIR"
  exit 1
fi

CONTROL="$TMPDIR"/DEBIAN/control

MOD=`stat -c "%y" "$CONTROL"`
sensible-editor "$CONTROL"

if [[ "$MOD" == `stat -c "%y" "$CONTROL"` ]]; then
  echo Not modified.
else
  echo Building new deb...
  dpkg -b "$TMPDIR" "$OUTPUT"
fi

rm -r "$TMPDIR"

Сохраните его как скрипт оболочки, сделайте его исполняемым (chmod +x videbcontrol), и запустите его так:

fakeroot videbcontrol package.deb

Важно использовать fakerootв противном случае владение файлом будет сброшено текущему пользователю.

Другой метод работает хорошо и должен быть принятым ответом. Я пишу это потому, что отказ от использования инструментов dpkg может помочь понять, как работает формат deb (arархив с двумяtarучастников), и это позволяет избежать необходимости использования fakeroot, который не работает на некоторых архитектурах, таких как mipsel.

      ar x libc-bin_2.36-8_ppc64el.deb
unxz control.tar.xz # because tar --append does not work with compression
tar --to-stdout -xf control.tar ./postinst  > postinst
sensible-editor postinst # make edits to postinst
chmod +x postinst
tar --to-stdout -xf control.tar ./control > control
sensible-editor control # bump version in control file
tar --delete -f control.tar ./postinst ./control # avoid duplicate members
tar --append --owner=root --group=root -f control.tar ./postinst
xz control.tar
ar r test.deb debian-binary control.tar.xz data.tar.xz
Другие вопросы по тегам