Показать статистику
0 голосов
от (2.5тыс. баллов)

Я видел много вопросов на Ask Ubuntu об ошибках, подобных этому:

foo post-installation script returned exit status 1

Что такое постустановочный скрипт? Где находятся постустановочные скрипты?

416 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)
редактировать от

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

Давайте лучше поймем это на примере:

  • Предположим, вы устанавливаете новое ядро. После завершения установки .deb файла необходимо сообщить GRUB, что ядро установлено, чтобы вы могли загрузиться в него. Таким образом, пост-установка пакета сообщит GRUB, что ядро установлено, выполнив команды update-grub и update-initramfs. Для получения дополнительной информации см. раздел часто задаваемых вопросов.

Более общий пример может быть таким:

  • Предположим, вы устанавливаете пакет foo. Предположим теперь, что пакету требуется служба bar, которая должна быть отключена. Как он его отключит? Разработчики добавят команду systemctl disable bar.service, отключающую службу, в foo постустановочный скрипт пакета. Таким образом, сценарий после установки пакета состоит из дополнительных команд, обновлений и т . д.

    Установка состоит из следующих шагов:

    1. Извлеките управляющие файлы нового пакета.

    2. Если перед новой установкой была установлена другая версия того же пакета, выполните prerm-скрипт старого пакета.

    3. Запустите скрипт preinst, если он предусмотрен пакетом.

    4. Распакуйте новые файлы, а заодно сделайте резервную копию старых файлов, чтобы в случае чего их можно было восстановить.

    5. Если перед новой установкой была установлена другая версия того же пакета, выполните скрипт postrm старого пакета. Обратите внимание, что этот скрипт выполняется после скрипта preinst нового пакета, потому что новые файлы записываются одновременно с удалением старых файлов.

    6. Настройте пакеты.

Пост-установка происходит в разделе « Настройка пакета ». Это состоит из:

  1. Сообщение другим приложениям об успешной установке пакета.

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

  3. Найдите ошибки при установке и распечатайте сообщение об ошибке.


Раздел часто задаваемых вопросов

 

  • Где находятся эти скрипты?

    Эти скрипты находятся в /var/lib/dpkg/info. Эти скрипты имеют .postinst расширение. Вы можете запустить locate .postinst, чтобы найти больше этих скриптов.

    Пример скрипта после установки выглядит так:

    #!/bin/sh
    set -e
    if [ -x /usr/sbin/update-initramfs ]; then
    /usr/sbin/update-initramfs -u -k all
    fi
    
  • Что означает возврат послеустановочного сценария exit status 1?

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

  • Как исправить exit status 1?

    Вы можете попробовать погуглить ошибки с командами и исправить их. Если вы столкнулись с ошибками apt и/или dpkg, вы можете удалить скрипт после установки и безопасно переместить его обратно после того, как исправите команды. Однако это не всегда может быть правильным решением. Возможно, вы захотите задать новый вопрос .

    Некоторые полезные команды для исправления распространенных ошибок сценария после установки перечислены в таблице ниже:

    КомандаОписаниесильныйСинтаксис
    apt purgeУдаляет пакет вместе с его файлами конфигурации.Зависит от ситуации.sudo apt purge <package_name>
    dpkg -rПринудительно удаляет пакет. Предлагает много полезных аргументов.Да, при использовании с определенными аргументамиsudo dpkg -r --force-all <package_name>
    dpkg -PПринудительно очищает пакет. Предлагает много полезных аргументов.Да, при использовании с определенными аргументами.sudo dpkg -P --force-all <package_name>
  • Я задаю новый вопрос об ошибках, связанных с этими сценариями, какую информацию я должен предоставить?

    Вы должны предоставить такую информацию, как:

    • Ваша версия Ubuntu (вывод lsb_release -d).
    • Вывод sudo apt update.
    • Полный вывод sudo apt -f install.
    • Содержимое постустановочного скрипта пакета.

    Другие детали должны быть предоставлены по запросу.

  • Могу ли я изменить/удалить эти скрипты?

    Нет! Избегайте возиться с этими сценариями. Если есть синтаксические ошибки или ошибки с какой-либо командой, apt произойдет сбой каждой установки для этого пакета. Если случайно есть какие-либо синтаксические ошибки, вам нужно вручную использовать бэкэнд-инструменты, например dpkg, чтобы все исправить. Могу ли я удалить их? НЕТ! Не удаляйте их без необходимости, удаление этих скриптов может сделать эти пакеты непригодными для использования.

  • Как повторно выполнить эти сценарии?

    Хотите повторно выполнить скрипт после установки пакета? Как я уже говорил ранее, запуск скрипта после установки происходит в разделе «Конфигурация» пакета. Итак, простой запуск:

    sudo dpkg --configure <package>
    

    Где <package> имя пакета, который вы хотите настроить.


родня этого скрипта.

Попробуйте обкатать ls и /var/lib/dpkg/info вывести grep с шаблоном aptitude. Вы найдете множество похожих скриптов по мере его вывода. Некоторые из них .postrm.preinstprerm и .list вместе с файлом сигнатур. Вот таблица, показывающая функции каждого из этих скриптов:

СкриптФункция
После удаления ( .postrm)Этот сценарий состоит из команд, которые необходимо запустить ПОСЛЕ завершения удаления.
Предустановка ( .preinst)Этот сценарий состоит из команд, которые необходимо выполнить перед установкой.
Предварительное удаление ( .prerm)этот сценарий состоит из команд, которые необходимо выполнить перед процессом удаления
Файл списков ( .list)Этот файл содержит список каталогов, принадлежащих пакету.

Для получения дополнительной информации обратитесь к справочной странице dpkg


...