Проблема с обновлением lilypond в Debian «buster / sid»

Для каждой команды вы можете коснуться файла и проверить этот файл. Вот простой пример:

#!/usr/local/bin/bash

# Flag to knkow when completed
finished=0;

# The commands t run
declare -a commands=('cmd1' 'cmd2' 'cmd3' 'cmd4');

# Fork all commands
for cmd in "${commands[@]}"; do
        ./$cmd &
done

# Loop to wait for all processes to finish
loop=0;
while [ $finished -eq 0 ]; do
        # Just for visual effect
        loop=$((loop+1));
        echo "Loop $loop";
        sleep 1;

        files=0;
        for cmd in "${commands[@]}"; do
                # Each program shoudl touch a file so that we
                # can know it has completed successfully
                if [ -e ".$cmd" ]; then
                        echo "Process $cmd completed";
                        files=$((files+1));
                else
                        # No need to continue if anything is not done
                        # Error checking here like a TTL value or ps -ef | grep pid etc
                        echo "Waiting for process $cmd";
                        break;
                fi;
        done

        # if we have as many files as executed commands
        if [ "$files" -eq ${#commands[@]} ]; then
                finished=1;
        fi
done;

echo 'All jobs completed successfully';
# Clean up after yourself
for cmd in "${commands[@]}"; do
        rm -f ".$cmd";
done;

Тогда для проверки каждой команды cmd1, cmd2 ... cmdN может быть что-то вроде:

#!/usr/local/bin/bash
num=1;

echo "Enter cmd$num";
sleep 1; # use different sleep values to simulate execution
touch ".cmd$num"
echo "Exit cmd$num";
5
23.08.2017, 19:12
2 ответа

Общий подход заключается в том, чтобы просмотреть (сценарий оболочки)/var/lib/dpkg/info/lilypond-data.postinstи найти lnстроку, в которой произошел сбой. Затем определите причину и обойдите ее (, например, rmперейдя по существующей ссылке, или, в худшем случае, отредактировав postinst ). И, конечно же, зарегистрируйте ошибку.

За исключением того, что это уже сделал кто-то другой — см. ошибку 871631 . И ошибка была исправлена; вам просто нужно взять (и установить )2.18.2 -9 из нестабильной версии.

(Из чего следует важный урок :проверьте систему отслеживания ошибок, прежде чем думать о том, как ее исправить...)

Также :вы можете установить apt -listbugs.

8
27.01.2020, 20:34

Эта часть показывает, что важно:

ln: failed to create symbolic link 'lilypond/user': File exists
dpkg: error processing package lilypond-data (--configure):
 subprocess installed post-installation script returned error exit status 1

Ошибка сценария установки вашего поста -. Вероятно, это связано с тем, что он не был настроен для правильной обработки своей предыдущей версии в стабильной версии.

Пакеты Debian состоят из двух компонентов.:

  1. файловый архив, вполне обычный.tar.gz(или любой подобный ), распакованный в корневой каталог
  2. скрипты установки, которые запускаются до и после распаковки архива.

Таким образом, установка пакета выглядит так:

  1. выполняются сценарии предварительной -установки пакета
  2. архив пакета извлекается в корневой каталог
  3. пост -запуск скриптов установки

Удаление происходит аналогичным образом, но со сценарием до -удаления и после -удаления.

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

От них пост--скрипт установки нового пакета по какой-то причине не запустился. Таким образом, он уже извлечен в вашей системе.

Поскольку это разрабатываемый дистрибутив, исправить проблему вручную несложно.

Отредактируйте старый скрипт установки поста -.

vi /var/lib/dpkg/info/lilypond-data.postinst

Найдите, где он не может создать эту ссылку, и дайте ему это разрешить.

После этого запустите:

dpkg --configure -a

сделает то, что вы хотите. (Если это не удалось, не беспокойтесь, отредактируйте еще раз и повторите попытку.)

3
27.01.2020, 20:34

Теги

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