Как удалить старые версии тех же пакетов из локального репозитория?

В моем локальном репозитории , см. Ниже , у меня есть много версий одних и тех же пакетов, загруженных и сохраненных в каталоге пакетов deb. Поскольку Ubuntu всегда предпочитает использовать самую высокую версию, мне не нужно загружать и использовать более ранние версии. (Все находятся в одной папке).

Как удалить более ранние версии пакетов из папки моего локального deb? Невозможно удалить их вручную. (Вы не можете просмотреть версии в тысячах файлов)

Есть идеи? !!

Может быть, скрипт, который проверяет версию каждого пакета, сохраняя более новую версию и удаляя старые, может решить этот вопрос.

Я ищу такой сценарий, или если какое-то программное обеспечение будет основано, было бы замечательно

Я сделал свой локальный репозиторий, следуя , как это делается в учебнике .

*** Локальный репозиторий - это автономное хранилище уже загруженных пакетов, поэтому вам не нужно его снова загружать)

Примечание : Я не имею в виду очистку кэша загруженных пакетов, что можно сделать с помощью команды apt-get clean.

4
задан 13 April 2017 в 15:24

5 ответов

У меня была та же проблема: Я создал локальный репозиторий с помощью способного зеркала, и этот инструмент загружает новые пакеты, но оставляет все старые пакеты на месте. Я сделал следующее к очистке мое локальное зеркало:

  1. Перейдите к местоположению Вашей вершины Вашего зеркала (каталог, где dists и объединяют каталог, расположены, в моей установке/var/spool/apt-mirror/mirror/ftp.nl.debian.org/debian),

  2. Создайте список всех пакетов в Вашем объединении:

    find pool -type f | sort -u > files
    
  3. Создайте список всех пакетов в Вашем зеркальном распределении:

    grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
    
  4. Теперь создайте разность между этими двумя файлами и преобразуйте ее в сценарий очистки:

    diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
    
  5. Выполните сгенерированный сценарий

Удостоверьтесь, что у Вас есть полномочия записи на репозитории (или выполните использование sudo). Вместо того, чтобы удалить Вас может также переместить файлы во временное местоположение.

Идея позади этого состоит в том, что можно удалить файлы, которые не упоминаются в одном из файлов Пакетов, поскольку они заменяются более новыми версиями или удерживаются от использования. Если файлы не упоминаются в файлах Пакетов, они не могут быть найдены клиентами, соединяющимися с Вашим репозиторием.

2
ответ дан 13 April 2017 в 15:24

После этого я удалил старые версии тех же пакетов. Я использовал инверсию функции сканирования нескольких версий dpkg-scanpackages.

  1. Сначала установите dpkg-dev пакет

    sudo apt-get install dpkg-dev
    
  2. Затем сгенерируйте файл с именем пакетов (будут перечислены только новые) [[ 118] без опции -m. По умолчанию используется опция -m.

    Если у вас есть файлы .deb в папке с именем deb , запустите указанную ниже команду из родительского элемента этой папки

    dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
    

    Это создаст файл с именем имена файлов , в которых имена всех файлов .deb перечислены в формате Filename: deb/packagename_version.deb.

    Теперь у нас есть все имена файлов с самыми новыми версиями в файле с именем filenames

  3. Теперь задача проста, измените скрипт на переместите все эти файлы в другую папку.

    1. Сначала замените Filename: на mv

      sed -i 's/Filename:/mv/' filenames
      
    2. Теперь создайте папку в родительском каталоге deb папка. Я назвал его самым новым (без мусора может быть хорошим; P).

    3. Снова измените файл filenames , чтобы переместить файлы .deb во вновь созданную новейшую папку .

      sed -i 's/\.deb/.deb newest/' filenames
      

      Это сделает наши имена файлов файлом со списком mv команд, перемещающих файлы .deb из каталога deb в новейший каталог

    4. Теперь угадайте, что. Выполните файл filenames

      sh filenames
      
    5. Последний шаг - удалить папку со старыми устаревшими файлами .deb. Проверьте последнюю папку тоже в качестве предварительного предупреждения.

Обновление одним вкладышем

После установки пакетов dpkg-dev сгенерируйте сценарий перемещения с помощью одной команды, используйте этот, перейдя в родительский файл папки .deb.

 dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames

Затем создайте папку с именем newest и выполните файл filenames с помощью команды `sh filenames *.

0
ответ дан 13 April 2017 в 15:24

Обновление одним вкладышем Удалить (не перемещать)

этот один вкладыш удалит только старые версии тех же пакетов

запустите его как root

sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm

"/ var / cache / apt / archives" замените на каталог .deb

, он очень хорошо работает в Ubuntu 12.10

0
ответ дан 13 April 2017 в 15:24

Отличный обходной путь от «Анвара» (в первом ответе)! Только эту строку я бы изменил:

sed -i 's/\.deb/.deb newest/' filenames

, потому что если у вас есть пакет с именем: packagename.debian_123.deb, ваша строка заменит только первый «.deb» в этой строке, и это будет выглядеть так в конец:

packagename.deb newest_123.deb

Вместо этого возьмите эту строку, и будет заменена только последняя .deb в каждой строке:

sed -i 's/\(.*\).deb/\1.deb newest/' filenames
0
ответ дан 13 April 2017 в 15:24

В Thunar:

  1. Открыть /var/cache/apt/archives
  2. Выбор файлов в зависимости от времени доступа:
    • нажмите Вид >> Просмотреть как подробный список
    • [ 1117] нажмите Вид >> Конфигурировать столбцы >> включить Дата Доступа
    • щелкните заголовок таблицы «Дата доступа», чтобы отсортировать файлы
    • Удерживая клавишу «Ctrl», выберите несколько файлов. диапазон файлов
  3. Удалите файлы, либо щелкнув правой кнопкой мыши >> Удалить (если Thunar был открыт с достаточными привилегиями), либо:
    • Щелкните правой кнопкой мыши >> выберите Переименуйте
    • , выберите Вставить / Перезаписать, установите пользовательский префикс
    • , откройте терминал, sudo rm /var/cache/apt/archives/customprefix*.deb
0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

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