@Maks1995

Как правильно установить пакет через скрипт bash?

Доброго времени суток, потребовалось сверстать скрипт, одна из задач скачивание пакета и установка в системе, пакет скачивается и устанавливается с ошибками зависимостей. Не совсем понятно как прописать в скрипте установку зависимостей.
63f0fce5ca362461680258.png
  • Вопрос задан
  • 1046 просмотров
Решения вопроса 1
3vi1_0n3
@3vi1_0n3
У вас в таком варианте никогда не отработает "apt -f install". Штука в том, что после "dpkg -i" код возврата не ноль. В данном случае лучше попробовать без условного выполнения, либо заменить "&&" на "||". Тогда "apt -f install" будет выполняться после безуспешной установки пакета с помощью dpkg (что в вашем случае и происходит).
Должно быть что-то типа такого:
install_timeshift(){
wget "https://.../...deb" && [ -f "...deb" ] && { dpkg -i ....deb ||  apt -f install; }
}

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

Пример как это работает:
$ touch file && [ -f file ] && { test -d whatever || echo 'apt -f install called'; }
apt -f install called
$ rm file
$ touch file1 && [ -f file ] && { test -d whatever || echo 'apt -f install called'; }
$ touch file1 && [ -f file ] && { test -d whatever || echo 'apt -f install called'; } || echo 'no file downloaded'
no file downloaded
$
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Составляете список зависимостей, качаете wget-ом, добавляете в команду установки.
Ответ написан
@dimone73
Скачайте пакет, потом в папке дайте команду
for i in $(apt-cache depends python | grep -E 'Зависит|Предлагает' | cut -d  ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done;

где вместо python название своего пакета.
Скрипт закачает зависимости. Пройдитесь скриптом по уже закаченным зависимостям. В фале errors.txt посмотрите ошибки, что не скачалось. Ищите вручную.
В результате к утру накачаете пару сотен пакетов, в которых будут еще и конфликты с уже установленными.
Ответ написан
Комментировать
drygdryg
@drygdryg
Python-разработчик
Попробуйте установить DEB-пакет с использованием apt вместо dpkg:
apt install ./timeshift_20.1.1_amd64.deb
Обратите внимание, что указывать ./ перед файлом пакета в данном случае обязательно, иначе apt воспримет имя файла как имя пакета для поиска в репозиториях, а не как локальный пакет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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