Какая информация я должен решить проблему зависимости APT?

Это - версия, которая более удобна для использования, чем первый, который я дал здесь, в особенности он избегает дублированного кода для эквивалентных долгих и коротких опций. Это должно обработать что-либо, что Вы когда-либо хотите для опций: короткие опции (-q), долгие опции (--quiet), опции с аргументами, накопленные короткие опции (-qlfinput вместо -q -l -f input), исключительно сокращаемые долгие опции (--qui вместо --quiet), конец опций --.

Большая часть кода исправлена; только необходимо изменить отмеченные части.

#!/bin/bash

# Update USAGE (USAGE1, USAGE2, USAGE3 may remain unchanged):
USAGE='Usage: prog [-q|--quiet] [-l|--list] [-f file|--file file] [-Q arg|--query arg] args'
USAGE1='
Ambiguously abbreviated long option:'
USAGE2='
No such option:'
USAGE3='
Missing argument for'

# List all long options here (including leading --):
LONGOPTS=(--quiet --list --file --query)

# List all short options that take an option argument here
# (without separator, without leading -):
SHORTARGOPTS=fQ

while [[ $# -ne 0 ]] ; do
  # This part remains unchanged
  case $1 in
  --) shift ; break ;;  ### no more options
  -)  break ;;          ### no more options
  -*) ARG=$1 ; shift ;;
  *)  break ;;          ### no more options
  esac

  # This part remains unchanged
  case $ARG in
  --*)
    FOUND=0
    for I in "${LONGOPTS[@]}" ; do
      case $I in
      "$ARG")  FOUND=1 ; OPT=$I ; break ;;
      "$ARG"*) (( FOUND++ )) ; OPT=$I ;;
      esac
    done
    case $FOUND in
    0) echo "$USAGE$USAGE2 $ARG" 1>&2 ; exit 1 ;;
    1) ;;
    *) echo "$USAGE$USAGE1 $ARG" 1>&2 ; exit 1 ;;
    esac ;;
  -["$SHORTARGOPTS"]?*)
    OPT=${ARG:0:2}
    set dummy "${ARG:2}" "$@"
    shift ;;
  -?-*)
    echo "$USAGE" 1>&2 ; exit 1 ;;
  -??*)
    OPT=${ARG:0:2}
    set dummy -"${ARG:2}" "$@"
    shift ;;
  -?)
    OPT=$ARG ;;
  *)
    echo "OOPS, this can't happen" 1>&2 ; exit 1 ;;
  esac

  # Give both short and long form here.
  # Note: If the option takes an option argument, it it found in $1.
  # Copy the argument somewhere and shift afterwards!
  case $OPT in
  -q|--quiet) QUIETMODE=yes ;;
  -l|--list)  LISTMODE=yes ;;
  -f|--file)  [[ $# -eq 0 ]] && { echo "$USAGE$USAGE3 $OPT" 1>&2 ; exit 1 ; }
              FILE=$1 ; shift ;;
  -Q|--query) [[ $# -eq 0 ]] && { echo "$USAGE$USAGE3 $OPT" 1>&2 ; exit 1 ; }
              QUERYARG=$1 ; shift ;;
  *)          echo "$USAGE$USAGE2 $OPT" 1>&2 ; exit 1 ;;
  esac
done

# Remaining arguments are now in "$@":

echo "QUIETMODE = $QUIETMODE"
echo "LISTMODE = $LISTMODE"
echo "FILE = $FILE"
echo "QUERYARG = $QUERYARG"
echo "REMAINING ARGUMENTS:" "$@"
4
16.07.2014, 19:24
2 ответа
[114152]Есть куча информации, которая поможет вам:[12212]Включить полную команду, которая вызвала проблему в первую очередь.[12213]Включить информацию о пакетах, участвующих в:[12214]apt-cache policy name-of-packages-involved [12215]Итак, в вашем случае выводится [114768]apt-cache policy libgl1-mesa-dri:i386 libdrm-intel1:i386 libgl1-mesa-glx:i386 libdrm-nouveau2:i386[114769] минимум. [12216]Вывод [114770]sudo apt-get check[114771] и, возможно, [114772]sudo dpkg -C[114773] также улучшили ваши шансы. [12217]Полный вывод [114774]sudo apt-get update[114775] и [114776]cat /etc/apt/sources.list{,.d/*.list}[114777] может помочь в определённых ситуациях. В случае, если вы пытаетесь установить пакет, вывод команды aptitude [114778]why-not[114779] позволит легко выяснить:[12218]aptitude why-not sysvinit-core i Systemd-sysv Breaks sysvinit-core [12219] Обращаясь за помощью в решении этой проблемы, всегда [114640] включайте полный вывод [114641] всего, что было запрошено, это ускорит решение проблемы. [114157]
4
27.01.2020, 20:47
[114172]Разумным первым делом попробовать спросить, почему он делает то, что делает. Это можно сделать с помощью опции [114654]-o Debug::pkgProblemResolver=yes[114655]. Например, [12230]Если опция apt не появляется, то стандартным подходом к отладке таких проблем является проверка номеров приоритета доступных версий каждого пакета, упомянутых в сообщении об ошибке. Это обычно делается с помощью [114656]apt-cache policy[114657].[12231]Например, чтобы использовать только первую часть сообщения об ошибке, вы должны запустить [12232]То, как будет происходить отладка, зависит от того, что это покажет. Часто полезно также запустить[12233], которая покажет все доступные исходные тексты пакета вместе с их приоритетными номерами. Эта информация обычно указывается в одном или обоих файлах [114658]/etc/apt/sources.list[114659] или [114660]/etc/apt/sources.list.d[114661].[12234]Люди, пытающиеся получить здесь помощь, должны сначала опубликовать результаты этих команд [114662]в своем вопросе[114663]. Скорее всего, этой информации будет достаточно, чтобы определить проблему.[12235]Реальные примеры проблем:[12236]Неопределенные зависимости после использования бэкспортов репозиторий[114740]: Пользователь включил источники для [114741]www.deb-multimedia.org[114742], не привязывая их к нижнему уровню Очередность. Никогда не включайте сторонние источники, не привязывая их к с более низким приоритетом. Обратите внимание, что это не должно быть необходимо для хорошо себя зарекомендовавшие репозитории, предоставляющие пакеты по умолчанию релиз, но [114743] www.deb-multimedia.org[114744] хорошо известен тем, что не играет приятно общаться с Debian, и вообще, не стоит доверять неизвестным источникам. В более общем случае, если вы знаете, что репозиторий не предназначен для использования с вашим система, прикрепи ее на более низком приоритете. Например, тестирование/выключение исходных текстов на Debian[114745]. stable.[12237]Unmet dependencies[114747]: пользователю каким-то образом удалось установить версию питона, не являющуюся версия по умолчанию в его системе. Естественно, весь ад вырвался наружу. Мораль истории, убедитесь, что вы устанавливаете только версии пакеты, которые подходят для вашей системы. Как и выше [114748] apt-cache policy pkgname[114749] скажет вам.[12238]dpkg / apt-get хочет установить и перезаписать другое. пакет[114783]: Пользователь попробовал для установки пакетов, даже если его базовая база данных [114784]dpkg[114785] была сломанный. Мораль, если вы видите сообщения от [114786] dpkg [114787] о том, что что-то или другое не так с вашими пакетами, в данном случае [12239]0 обновлено, 1 установлено заново, 0 удалено и 0 не обновлено. 2 не полностью установленный или снятый. [12240] в вашей базе данных пакетов есть проблемы. Сначала исправьте их, прежде чем пытаться установить что-нибудь еще. Если [114790]apt-get -f install[114791] не работает, возможно, вам понадобится работают на уровне [114792]dpkg[114793] для исправления. [12241]
7
27.01.2020, 20:47

Теги

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