如何轻松编辑 deb 包中的控制文件

如何轻松编辑 deb 包中的控制文件

有没有办法轻松编辑 deb 包中的控制文件。无论在哪个系统上(Linux、Mac OS X 等)。也许有人知道一个好的脚本可以使其自动化?

答案1

看一下这个: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为任何选择的编辑器。将其保存为 shell 脚本(即debcontrol.sh),使其可执行(chmod +x),并使用 deb 作为第一个参数(./debcontrol.sh xxxxx.deb

答案2

剧本来自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"

将其保存为 shell 脚本,使其可执行(chmod +x videbcontrol),然后像这样运行它:

fakeroot videbcontrol package.deb

使用很重要fakeroot,否则文件所有权将被重置为当前用户。

答案3

另一种方法效果很好,应该是可接受的答案。我写下这个是因为不使用 dpkg 工具可能有助于理解 deb 格式的工作原理(ar具有两个tar成员的存档),并且避免需要在某些架构(如 mipsel)上不起作用的 fakeroot。

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

相关内容