Как быстро создать локальный репозиторий apt для случайных пакетов, используя дистрибутив Linux на основе Debian?


20

Некоторые ситуации требуют ручной установки локального пакета с помощью dpkg -i <packagename>. Иногда может быть полезно использовать функциональность aptэтого пакета, поэтому возникает вопрос:

Как быстро создать локальный репозиторий для случайных пакетов, используя дистрибутив Linux на основе Debian - например, Xubuntu 13.04 / Ubuntu?


Просто к вашему сведению. Обычная вещь должна следовать dpkg -i <packagename>с apt-get -f installтянуть в необходимых пакетов. Кроме того, обычная вещь для создания подходящих репозиториев для Debian - это prespro.
Фахим Митха

Я считаю, что репрепро полезен
Жиль "

Спасибо за ваши Коментарии. @Faheem Mitha: не могли бы вы вкратце рассказать, почему после установки локального пакета с aptпомощью --fix-brokenпотребуется запуск с dpkg -i? Разве dpkg не позаботится об этом? Я читал, что это может потребоваться при первом запуске apt? @ FM & Gilles: о репепро . Кажется полезным, если бы я мог заставить его работать (не уверен насчет структуры dir, содержимого 3 файлов или параметров во время выполнения). Попробую еще раз и обновлю или выложу полный вопрос.

1
@lightÉ: dpkgне разрешает зависимости, но разрешает apt. dpkgбудет предупреждать о нарушенных зависимостях, но имеет низкий уровень, поэтому не будет пытаться их исправить. Далее dpkg -i *.debследует apt-get -f installстандартная процедура. Есть ошибка в списке желаний, которая aptсама по себе обрабатывает случай локальной установки пакета, и, я думаю, есть даже патч, но он еще не реализован. Посмотрите, что apt-get install может устанавливать и локальные файлы пакетов, первоначально поданные в 1999 году.
Фахим Митха,

@ подсветка Выражение интереса к этой функции не повредит. Я думаю, что чем больше людей (вежливо) выражают интерес, тем больше вероятность того, что он будет реализован. Также обратите внимание, что gdebi является альтернативой, как отмечено в отчете об ошибке. Я думаю, это одна из причин, по которой он не был реализован. Хотя иметь такую ​​базовую функциональность как часть apt было бы лучше, чем иметь такую ​​функциональность как часть другого пакета.
Фахим Митха

Ответы:


29

Это следует отличать от ситуации, когда вы пытаетесь скопировать полное дерево пакетов из официального репозитория и более точно настраивать приоритет источников . Случайные пакеты означают виртуальные пакеты, пакеты, которые компилируются локально или копируются по частям для целей тестирования. Вот простая настройка, основанная на устаревшей документации .

Сначала создайте каталог для размещения пакетов:

mkdir <packagedir>

Затем переместите туда свои файлы пакета .deb. Выполните эту команду из каталога над тем, который мы только что создали (убедитесь, что разрешения позволяют это!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Теперь создайте файл с расширением .listв /etc/apt/sources.list.d/с содержимым:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

и обновите базу данных apt:

apt-get update

На этом этапе пакеты в нашем локальном репозитории могут быть установлены, как и любой другой пакет, использующий apt-get install <packagename>. Когда новые пакеты добавляются в локальный репозиторий, предписанная dpkg-scanpackagesкоманда должна быть введена снова для обновления файла Packages.gz и aptдолжна быть обновлена ​​до того, как новые пакеты станут доступны. Надеюсь, это может быть полезно для тестирования .


6
В новой версии apt 1.1 требуется указывать [trusted=yes]между URI debи file:///URI (см. sources.list(5)Справочную страницу), в противном случае apt-get updateпроизойдет сбой из-за отсутствия подписи.
vinc17

2

Если вы хотите создать репозиторий с полной структурой, которая вам нужна для таких инструментов, как debootstrap, я нашел самый простой способ:

  1. Создайте каталог репозитория.

    # mkdir -p /opt/debian
    
  2. Создайте подкаталог conf.

    # mkdir /opt/debian/conf
    
  3. Создайте файл / opt / debian / conf / distributions с таким содержимым (отрегулируйте его в соответствии с используемым дистрибутивом):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Импортируйте вашу посылку при помощи prespro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Импортируйте несколько пакетов с помощью цикла for-loop, например, всего из вашего APT-кэша:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Это создаст неподписанный архив. Может использоваться с debootstrap с опцией --no-check-gpg.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.