Автор Тема: Как почистить локальный репозиторий?  (Прочитано 1508 раз)

Оффлайн Mimas

  • Участник
  • *
  • Сообщений: 239
  • Mimas
    • Мой Линукс
На флэшке мною поддерживается локальный репозиторий в актуальном состоянии. Но там полно старых файлов. Как бы вычистить их быстро и надёжно?
« Последнее редактирование: 10.01.2013 20:10:26 от Mimas »

Оффлайн Jinn

  • alt linux team
  • ***
  • Сообщений: 96
Скриптом sisyphus_cleanup_dups из пакета sisyphus.
ЕМНИП, структура дерева каталогов репозитория должна соответствовать таковой в Сизифе.
Справка-  sisyphus_cleanup_dups --help .

Оффлайн Mimas

  • Участник
  • *
  • Сообщений: 239
  • Mimas
    • Мой Линукс
Большое спасибо, буду пробовать.

Оффлайн Mimas

  • Участник
  • *
  • Сообщений: 239
  • Mimas
    • Мой Линукс
Привёл в соответствие дерево каталогов, сделал:
$ sisyphus_cleanup_dups -p . -f -a i586 noarch
Making dups in repositories...
Processing i586/RPMS: Grpmrdups: open of G*.i586.rpm failed: No such file or directory
Что-то не так. Но что?

Оффлайн Jinn

  • alt linux team
  • ***
  • Сообщений: 96
Видимо, в локальном репозитории имена файлов в формате, как в кэше апта, т.е.
%{name}_%{version}-%{release}_%{arch}.
В этом случае надо переименовать их в формат, используемый в репозитории, например
таким однострочником
for i in `ls *` ; do mv $i `rpm -qp --queryformat='%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm' $i` ; done


Оффлайн Mimas

  • Участник
  • *
  • Сообщений: 239
  • Mimas
    • Мой Линукс
#!/bin/bash
cp -n /var/cache/apt/archives/*i586.rpm ~/P6/i586/RPMS.classic/
cp -n /var/cache/apt/archives/*noarch.rpm ~/P6/noarch/RPMS.classic/
запускаемого из под рута.
Если можно, сразу и другие вопросы:
1. Нужно ли делать apt-get update перед тем как запускать Ваш однострочник?
2. Могу ли потом этот чищенный репозиторий использовать с genbasedir и последующим apt-get… или нужно обратно переименовывать в формат кэша?
3. Может это как-то поддаётся более интеллигентному подходу?

Оффлайн Mimas

  • Участник
  • *
  • Сообщений: 239
  • Mimas
    • Мой Линукс
Попробовал такое решение:
#!/bin/sh
REPO_DIR="$1"
mv $REPO_DIR files
cd files
mkdir SRPMS
mv i586/RPMS.classic i586/RPMS
mv noarch/RPMS.classic noarch/RPMS
cd i586/RPMS
for i in `ls *` ; do mv $i `rpm -qp --queryformat='%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm' $i` ; done
cd ../../noarch/RPMS
for i in `ls *` ; do mv $i `rpm -qp --queryformat='%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm' $i` ; done
cd ../../../
sisyphus_cleanup_dups -p . -f -a i586
sisyphus_cleanup_dups -p . -f -a noarch
mv files/i586/RPMS files/i586/RPMS.classic
mv files/noarch/RPMS files/noarch/RPMS.classic
rm -f -r files/SRPMS
mv files $REPO_DIR
Скрипт:
  • автоматизирует приведение локального репозитория с разделами classic к требуемому для работы скрипта sisyphus_cleanup_dups виду;
  • запускает sisyphus_cleanup_dups, который удаляет из репозитория старые и дублирующиеся пакеты;
  • возвращает структуру репозитория к разделам вида classic.
Вроде как, что-то очищается. Последующий запуск genbasedir для формирования файлов-списков проходит без замечаний. Буду более тщательно тестировать такой подход на следующей неделе, на другом ПК. В связи с тем что я не знаю как точно работает sisyphus_cleanup_dups, не могу поручиться, что скрипт написан корректно. Если у кого есть какие-то дельные замечания, поправки и советы - буду только рад, учитывая, что я не спец в скриптоводстве.
Если моя терминология хромает, прошу прощения. Благодарю за помощь откликнувшихся :)
« Последнее редактирование: 11.01.2013 18:06:20 от Mimas »

Оффлайн Mimas

  • Участник
  • *
  • Сообщений: 239
  • Mimas
    • Мой Линукс
Подскажите, а как красиво сделать:
cp -n /var/cache/apt/archives/*i586.rpm ~/P6/i586/RPMS.classic/...если строчка в скрипте написана, а то запускать скрипт из под root, наверное, неправильно.