Ігноруйте помилки завантаження apt-get


1

Я намагаюся завантажити деякі пакети для офлайн-установки, використовуючи, apt-get downloadале чомусь, apt-rdependsвключає пакунки, які не існують. Це команда, яку я використовую:

apt-get download $(apt-rdepends libboost1.55-all-dev | grep -v "^ ")

Це результат, який я отримую:

E: Can't select candidate version from package libstdc++-dev as it has no candidate
E: Can't select candidate version from package debconf-2.0 as it has no candidate
E: Can't select candidate version from package libc-dev as it has no candidate
E: Can't select candidate version from package python-celementtree as it has no candidate
E: Can't select candidate version from package python-elementtree as it has no candidate

Але aptпродовжує скаржитися, що є пакети без кандидатів. Я хочу ігнорувати ці помилки і все одно завантажувати пакунки та їх залежність. Я не можу знайти прапор, який дозволить мені ігнорувати apt-getпомилки. Як це зробити?

Відповіді:


1

Оскільки apt-rdependsне передбачено способу ігнорування пакетів, обгортку необхідно видалити з списку завантажень пакетів, які не можуть бути задоволені. Відносно портативний спосіб автоматизації цього без необхідності спочатку встановлювати інтерпретатор типу Perl / Python - це використовувати сценарій BASH нижче.

getdepends.sh :

 #!/bin/bash
 export MAXPARAMETERS=255

 function array_contains_find_index() {
     local n=$#
     local i=0
     local value=${!n}

     for (( i=1; i < n; i++ )) {
         if [ "${!i}" == "${value}" ]; then
             echo "REMOVING $i: ${!i} = ${value}"
             return $i
         fi
     }
     return $MAXPARAMETERS
 }

 LIST=( $( apt-rdepends $1 | grep -v "^ " ) )
 echo ${LIST[*]}
 read -n1 -r -p "... Packages that will be downloaded (Continue or CTRL+C) ..."

 RESULTS=( $( apt-get download ${LIST[*]} |& cut -d' ' -f 8 ) )
 LISTLEN=${#LIST[@]}

 while [ ${#RESULTS[@]} -gt 0 ]; do
     for (( i=0; i < $LISTLEN; i++ )); do
         array_contains_find_index ${RESULTS[@]} ${LIST[$i]}
         ret=$?

         if (( $ret != $MAXPARAMETERS )); then
             unset LIST[$i]
         fi
     done

     FULLRESULTS=$( apt-get download ${LIST[*]} 2>&1  )
     RESULTS=( $( echo $FULLRESULTS |& cut -d' ' -f 11 | sed -r "s/'(.*?):(.*$)/\1/g" ) )
 done

 apt-get download ${LIST[*]}

Для запуску сценарію:

 ./getdepends.sh [package name]

Коментована версія, яку я написав з більшою функціональністю реєстрації, доступна на пастібі тут:

http://pastebin.com/kj2evSt7


0

Можливо, ця процедура буде працювати для вас. Але ОС на вихідних та цільових комп'ютерах повинні бути максимально однаковими.

1) Створіть десь на вихідному комп’ютері тимчасову папку для завантажених файлів та введіть у неї:

source_comp# mkdir libboost
source_comp# cd libboost

2) Отримайте список http-адрес для пакетів, необхідних для його встановлення:

source_comp# apt-get -y --print-uris install libboost1.55-all-dev | grep "'" | cut -f1 -d' ' | tr -d "'" > packet-list.txt

4) Отримайте список додаткових пакетів, необхідних для його складання:

source_comp# apt-get -s build-dep libboost1.55-all-dev | grep "^ " > build-dep.txt

5) Отримайте список http-адрес для цих пакетів:

source_comp# apt-get -y --print-uris install `cat build-dep.txt` | cut -f1 -d' ' | tr -d "'" | sort | uniq > build-dep-urls.txt

6) Завантажте всі пакунки

source_comp# wget --input-file packet-list.txt
source_comp# wget --input-file build-dep-urls.txt

7) Скопіюйте всі файли дебюту з цієї папки на комп’ютері-джерелі в папку за замовчуванням для підходящих архівів на цільовому комп'ютері (наприклад, використовуючи scp):

target_comp# scp user@source_comp:/path_to_libboost/*.deb /var/cache/apt/archives/

та оновити локальне сховище кешу, ігноруючи попередження та помилки:

target_comp# apt-get update

8) Тепер вам потрібно встановити всю інфраструктуру для створення пакету:

target_comp# apt-get build-dep libboost1.55-all-dev

9) І нарешті сам пакет:

target_comp# apt-get install libboost1.55-all-dev

0

Я просто зіткнувся з подібним питанням linux-image-4.13.0-16-genericщодо хитрих: apt-get download $(apt-rdepends linux-image-4.13.0-16-generic | grep -v "^ ")скаржиться, що немає debconf-2.0. Ви можете дізнатися, які пакунки надають: https://packages.ubuntu.com/artful/debconf-2.0 . Наприклад, вона надається debconfпакетом. Тоді ви можете виправити вищезазначене за допомогою:

apt-get download $(apt-rdepends linux-image-4.13.0-16-generic | grep -v "^ " | sed 's/debconf-2.0/debconf/g')

Це працювало для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.