
Я пытаюсь создать несколько установочных скриптов для системы, которая имеет несколько зависимостей, и я выяснил, как это сделать --dry-run
с менеджером пакетов ( apt
в данном случае Ubuntu), прежде чем приступать к реальной установке.
Однако после установки пакетов необходимо скопировать определенные файлы конфигурации. Как мне это проверить, чтобы убедиться, что места назначения доступны, прежде чем приступать к установке?
Я не хочу запускать скрипт, который частично установит что-то и приведет систему в непредсказуемое состояние, но если соответствующий пакет не существует, то и каталоги конфигурации не будут существовать, чтобы я мог их проверить.
Допустим, я хочу скопировать в base.conf
, /etc/package/system/
но /etc/package/
его даже не существует. Если место назначения настроено неправильно (например, неправильно написано как sytem
), то после установки пакета во время копирования возникнет ошибка, которая может быть одним из нескольких файлов конфигурации, которые уже были скопированы, поэтому у меня нет способа "откатить его", так сказать. Моя конечная цель — иметь процесс установки, который не оставляет частично скопированных файлов.
Сценарий сбоя возникает, когда необходимо скопировать несколько файлов. Если нужно скопировать 3 файла, а место назначения третьего файла настроено неправильно, то первые 2 файла все равно будут скопированы, а на третьем возникнет ошибка. Оставшиеся файлы вызовут дальнейшие ошибки при следующем запуске.
PS: Я подозреваю, что мне, возможно, придется создать настоящий пакет, чтобы разобраться с зависимостями, но это потребует значительно больше усилий и времени, а сейчас я не хочу тратить на это деньги.
решение1
Вы можете заранее проверить содержимое пакетов, даже не загружая их; см. apt-file
и соответствующую list
команду.
Однако это никогда не даст вам полной картины, и вы не сможете построить полную картину изменений, внесенных произвольным пакетом, не установив его: пакеты могут отправлять скрипты поддержки, которые выполняют дополнительные изменения. Это означает, что пакет может создать каталог, и это не будет очевидно из метаданных пакета, и вы можете узнать это, только проанализировав скрипты поддержки, принимая во внимание все их побочные эффекты и побочные эффекты зависимостей пакета.
В вашем случае, я полагаю, вам понадобится двухэтапный подход:
- установите все необходимые вам пакеты, используя систему управления пакетами;
- проверьте все ваши ожидания относительно итоговой структуры каталога и установленных файлов, а также
- если ваши ожидания оправдались, скопируйте все дополнительные файлы на место;
- если это не так, удалите все установленные вами пакеты (чтобы
--autoremove
также были удалены все автоматически установленные зависимости).