dpkg: новый сценарий перед установкой возвратил ошибочный статус выхода 1

Оба версии 4 и 5 RHEL, поставленные с 2,6 ядрами серии Linux.

Это возможно, но трудно вручную скомпилировать Ваши собственные 2,4 ядра для RHEL 4, но даже который проблематичен из-за зависимостей от 2,6 функций. Я не думаю, что это было бы практически возможно с RHEL 5.

Для использования 2,4 ядер, необходимо также использовать версии прежней версии или альтернативные ответвления большого количества других базовых компонентов Linux. Если Вам нужно 2.4 по некоторым причинам, необходимо рассмотреть распределение, которое сохраняется специально для него.

9
18.09.2012, 02:35
4 ответа

.preinst сценарий пакета перестал работать по некоторым причинам.

Для обнаружения почему исследуйте сценарий в /var/lib/dpkg/info/PACKAGENAME.preinst

Если Вы хотите видеть точно, которые выравнивают сценарий, перестал работать на, отредактируйте .preinst сценарий и добавьте set -x сразу после #! строка. Это включает трассировку выполнения в сценарии.

Примечание: Это предполагает, что .preinst сценарий является сценарием оболочки (или posix sh или удар). Почти весь .preinst (и .postinst, .prerm, и .postrm) сценарии являются сценариями оболочки, но они не должны быть, они могли быть любым исполняемым файлом. например, на моей основной настольной машине с 9 104 установленными пакетами, 14 сценарии жемчуга, 1 скомпилированный исполняемый файл (preinst удара - это не может предположить, что существует функционирующая оболочка, уже установленная), и все остальные являются сценариями оболочки... 9041 сценарии оболочки POSIX, 63 сценарии удара. Если .preinst является жемчугом или Python или чем-то еще, необходимо будет выяснить, как позволить отладить или режим трассировки выполнения или подобный на том языке.

Затем выполненный dpkg --configure --pending.

Это заставит dpkg пытаться настроить полуустановленный пакет. НЕ переустанавливайте его с dpkg -i, это перезапишет Ваш отредактированный .preinst сценарий с версией в .deb пакете.

Это может дать Вам достаточно информации для решения проблемы. Это может быть что-то простое как неожиданный или непойманный код выхода из программы (большая часть .preinst и т.д., сценарии имеют set -e, чтобы заставить их завершиться на первой ошибке), или предполагая, что каталог уже существует (и это может произойти из-за необъявленной зависимости в debian/control файле пакета - т.е. он должен зависеть от нечто, но не делает. просто установите нечто так или иначе),

После того как это фиксируется, работать dpkg --configure --pending снова, и пакет должен быть правильно установлен.

Если .preinst сценарий является багги, существует разумный шанс, что .postinst (и/или .prerm и .postrm) сценарии будет также. Вы, возможно, должны зафиксировать их также.

Не забывайте отправлять отчет об ошибках тому, кто бы ни сделал пакет, таким образом, они могут зафиксировать его.

11
27.01.2020, 20:05

Ваше серийное программное обеспечение включает "сценарий перед установкой" (preinst), который перестал работать. Это - сценарий оболочки, встроенный в .deb файле. Можно извлечь его с:

 dpkg-deb -e some-deb.deb out-dir

Затем можно посмотреть на out-dir/preinst и посмотрите, можно ли выяснить, почему это перестало работать.

Если Вы хотите изменить тот сценарий и восстановить .deb (возможно, для добавления некоторого кода отладки) попробовать

 dpkg-deb -x some-deb.deb another-out-dir
 dpkg-deb -e some-deb.deb another-out-dir/DEBIAN
 (modify another-out-dir/DEBIAN/preinst)
 dpkg-deb -b another-out-dir some-deb2.deb
7
27.01.2020, 20:05

Необходимо будет извлечь файл и видеть почему preinst сценарий выходит с кодом 1.

Не уверенный, если было обсуждение UNIX.SE, связанного с тем, как сделать это, но можно смотреть на этот вопрос от AskUbuntu для понимания то, как извлечь.

После этого необходимо будет вручную работать preinst сценарий для наблюдения, почему установка пакета перестала работать.

2
27.01.2020, 20:05

Если Вы хотите отредактировать пакет, непосредственно пробуют это:

#!/bin/bash

if [[ -z "$1" ]]; then
  echo "Syntax: $0 debfile"
  exit 1
fi

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"

Источник: http://ubuntuforums.org/showthread.php?t=636724

1
27.01.2020, 20:05
  • 1
    Похож на этот сценарий, был записан для изменения control файл (и восстанавливают пакет), не preinst сценарий на проблему OP. потрясающий –  arielf 26.05.2016, 21:02

Теги

Похожие вопросы