Как создать локальный репозиторий APT?

Я хотел бы создать свой собственный локальный репозиторий в своей локальной сети, чтобы компьютеры в локальной сети могли обновляться и обновляться из него. Я хочу загрузить пакеты и сохранить их на своем локальном сервере, чтобы я мог обновлять, обновлять, устанавливать и т.д. С него, Не используя Интернет.

Из Справочная вики-страница Ubuntu:

Есть 4 шага для настройки простого репозитория для себя

1.Установите dpkg-dev
2.Поместите пакеты в каталог
3.Создайте скрипт, который будет сканировать пакеты и создавать файл, который apt-get update может прочитать
4. Добавьте строку в свои источники.список, указывающий на ваш репозиторий

Установить dpkg-dev

Введите в терминале

sudo apt-get install dpkg-dev

Каталог

Создайте каталог, в котором вы будете хранить свои пакеты. Для этого примера мы будем использовать /usr/local/mydebs.

sudo mkdir -p /usr/local/mydebs

Теперь переместите ваши пакеты в каталог, который вы только что создали.

Ранее загруженные пакеты обычно хранятся в вашей системе в /var/cache/apt/archives каталог. Если вы установили apt-cacher, у вас будут дополнительные пакеты, хранящиеся в его каталоге /packages.

Обновление скрипта-mydebs

Это простой трехстрочный:

#! /bin/bash cd /usr/local/mydebs dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Вырежьте и вставьте вышеизложенное в gedit и сохраните его как update-mydebs в ~/bin. (тильда "~" означает ваш домашний каталог. Если ~/bin не существует, создайте его: Ubuntu поместит этот каталог в ваш ПУТЬ. Это хорошее место для размещения личных скриптов). Затем сделайте скрипт исполняемым:

chmod u+x ~/bin/update-mydebsHow the script works:

dpkg-сканирующие пакеты просматривает все пакеты в mydebs, а выходные данные сжимаются и записываются в файл (Packages.gz ), который может прочитать apt-get update (см. Ниже ссылку, которая объясняет это в мучительных деталях). /dev/null - это пустой файл; он заменяет файл переопределения, который содержит некоторую дополнительную информацию о пакетах, которая в данном случае на самом деле не нужна. Смотрите раздел deb-override(5), если вы хотите узнать об этом.

Источники.список

добавьте строку

deb file:/usr/local/mydebs ./

в ваш /etc/apt/sources.list, и все готово.

Опция компакт-диска

Вы можете записать каталог, содержащий debian, на компакт-диск и использовать его также в качестве хранилища (удобно для совместного использования между компьютерами). Чтобы использовать компакт-диск в качестве хранилища, просто запустите

sudo apt-cdrom add

Использование репозитория

Всякий раз, когда вы помещаете новый deb в каталог mydebs, запустите

sudo update-mydebssudo apt-get update

Теперь вашими локальными пакетами можно управлять с помощью Synaptic, aptitude и команд apt: apt-get, apt-cache и т.д. Когда вы попытаетесь установить apt-get, любые зависимости будут разрешены для вас, если они могут быть выполнены.

Плохо сделанные пакеты, вероятно, выйдут из строя, но вы не перенесете ад dpkg.

*Чтобы создать автономный Репозиторий По локальной сети *

Установите локальный веб-сервер Apache

# apt-get install apache2

По умолчанию пакет Apache Debian настроит веб-сайт под /var/www в вашей системе. Для наших целей это нормально, так что нет причин делать что-то еще. Вы можете легко протестировать его, указав свой любимый браузер на http://localhost Вы должны увидеть веб-страницу по умолчанию после установки, которая фактически хранится в /var/www/index.html


Создайте каталог репозитория пакетов Debian

выбрал для создания каталога /var/www/debs за это. В нем вы должны создать каталоги "архитектура", по одному для каждой архитектуры, которую вам необходимо поддерживать. Если вы используете только один компьютер (или тип компьютера), то вам понадобится только один - обычно "i386" для 32-разрядных систем или "amd64" для 64-разрядных. Если вы используете какую-то другую архитектуру, я предполагаю, что вы, вероятно, уже знаете об этом.Теперь просто скопируйте файлы пакета ".deb" для данной архитектуры в соответствующие каталоги. Если вы сейчас наведете свой любимый веб-браузер на http://localhost/debs/amd64 (например) вы увидите список пакетов для 64-разрядных систем.


Создать Packages.gz файл

Теперь нам нужно создать файл каталога для использования APT. Это делается с помощью утилиты под названием "dpkg-scanpackages". Вот команды, которые я использую для обновления пакетов AMD64 в моей локальной сети:

# cd /var/www/debs/# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz




Сделайте репозиторий известным APT

Теперь единственное, что осталось сделать, это сообщить APT о вашем репозитории. Вы делаете это, обновляя свой /etc/apt/sources.файл списка. Вам понадобится запись, подобная этой:

deb http://localhost/debs/ amd64/

Я использовал фактическое имя хоста моей системы вместо localhost - таким образом, код одинаков для всех компьютеров в моей локальной сети, но localhost отлично подойдет, если вы используете только один компьютер.
Теперь обновите APT:

# apt-get update

Создание аутентифицированного репозитория

Я просмотрел ответы здесь и на других сайтах, и у большинства из них есть (IMHO большой) недостаток в том, что вы настраиваете репозиторий, не прошедший проверку подлинности. Это означает, что вам нужно запустить apt-get с --allow-unauthenticated для установки пакетов из него. Это может представлять угрозу безопасности, особенно в сценариях, где устанавливаемые вами пакеты могут быть не все из вашего локального репозитория.

Обратите внимание, что я не описал здесь, как сделать его доступным по локальной сети, но это довольно общая конфигурация с использованием Apache или nginx (см. Другие ответы Здесь).

Настройка каталога репозитория

mkdir /home/srv/packages/local-xenialcd /home/srv/packages/local-xenial

Затем добавьте такую строку в sources.list:

deb file:/home/srv/packages/local-xenial/ ./

Добавление и удаление пакетов

удаление пакетов

rm /home/srv/packages/local-xenial/some_package_idont_like

добавление пакетов

cp /some/dir/apackage.deb /home/srv/packages/local-xenial

теперь запустите следующий скрипт, который генерирует файлы Packages, Release и InRelease и подписывает их вашим закрытым ключом gpg:

#!/bin/bashif [ -z "$1" ]; then       echo -e "usage: `basename $0` DISTROwhere DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\nThe way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this script\nThis script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory"else    cd /srv/packages/local-"$1"    # Generate the Packages file    dpkg-scanpackages . /dev/null > Packages    gzip --keep --force -9 Packages    # Generate the Release file    cat conf/distributions > Release    # The Date: field has the same format as the Debian package changelog entries,    # that is, RFC 2822 with time zone +0000    echo -e "Date: `LANG=C date -Ru`" >> Release    # Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files)    echo -e 'MD5Sum:' >> Release    printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release    printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release    # Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files)    echo -e '\nSHA256:' >> Release    printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release    printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release    # Clearsign the Release file (that is, sign it without encrypting it)    gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release    # Release.gpg only need for older apt versions    # gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release    # Get apt to see the changes    sudo apt-get updatefi

Пример содержимого файла conf/distributions

Origin: My_Local_RepoLabel: My_Local_RepoCodename: xenialArchitectures: i386 amd64Components: mainDescription: My local APT repositorySignWith: 12345ABC

Связи

https://wiki.debian.org/RepositoryFormat

http://ubuntuforums.org/showthread.php?t=1090731

https://help.ubuntu.com/community/CreateAuthenticatedRepository

Вы также можете настроить локальный исходный сервер с помощью nginx и reprepro:

  1. Установка пакетов debian

    sudo apt-get install reprepro nginx 
  2. создайте каталоги для reprepro и отредактируйте их

    sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp}$ cd /srv/reprepro/ubuntu/$ sudo chown -R `whoami` . # changes the repository owner to the current user

    /srv/reprepro/ubuntu/conf/дистрибутивы

    Origin: Your NameLabel: Your repository nameCodename: karmicArchitectures: i386 amd64 sourceComponents: mainDescription: Description of repository you are creatingSignWith: YOUR-KEY-ID

    /srv/reprepro/ubuntu/conf/параметры

    ask-passphrasebasedir .
  3. Включите его в reprepro, создайте его

    $ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \# change /path/to/my-package_0.1-1.deb to the path to your package
  4. Конфигурация nginx:

    /etc/nginx/сайты-доступны/vhost-packages.conf

    server {  listen 80;  server_name packages.internal;  access_log /var/log/nginx/packages-access.log;  error_log /var/log/nginx/packages-error.log;  location / {    root /srv/reprepro;    index index.html;  }  location ~ /(.*)/conf {    deny all;  }  location ~ /(.*)/db {    deny all;  }}
  5. Оптимизация размера ковша:

    /etc/nginx/conf.d/server_names_hash_bucket_size.conf

    server_names_hash_bucket_size 64;

Ссылка на Ссылка на Руководство по установке

Инструкции в Ответ @Bigsack's и Официальный вики-пост Ubuntu у меня не получалось в Ubuntu 18.04, пока я не внес эти два изменения:

  1. Создайте простой, несжатый Packages файл (при выполнении этого рабочий каталог должен быть там, где находятся все пакеты)

    cd /usr/local/mydebsdpkg-scanpackages -m . > Packages
  2. Добавьте следующую запись в /etc/apt/sources.list

    deb [trusted=yes] file:/usr/local/mydebs ./

Возможно, вы захотите взглянуть на apt-mirror и apt-cacher .

Вот руководство по как установить и используй это.

Существует несколько причин, по которым вы можете захотеть создать локальный репозиторий. Во-первых, вы хотите сэкономить на пропускной способности, если у вас есть несколько компьютеров Ubuntu для обновления. Например, если бы у вас было 25 компьютеров Ubuntu, которые все нуждались в обновлении не реже одного раза в неделю, вы бы значительно сэкономили пропускную способность, потому что вы могли бы делать все, кроме репозитория, локально.

Большинство организаций имеют приличную пропускную способность для своих сетевых шлюзов, но эта пропускная способность - ценный товар, который необходимо использовать с умом.

Во многих организациях по-прежнему есть маршрутизаторы с ограничениями 10 МБ или 100 МБ на шлюзе, но внутренние сетевые подключения объемом 1 ГБ позволяют лучше использовать пропускную способность внутри. Вторая причина создания собственного репозитория заключается в том, что вы можете контролировать, какие приложения загружаются на ваши внутренние компьютеры Ubuntu.

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

Сначала вам нужно настроить зеркало, для этого вам нужно просто нажать Ctrl+Alt+T на клавиатуре, чтобы открыть терминал. Когда он откроется, выполните приведенную ниже команду.

apt-get install apt-mirror 

После того, как вы настроили apt-mirror, вы можете начать загрузку репозитория с помощью этой команды.

apt-mirror /etc/apt/mirror.list1

Читайте дальше

1Источник:Создайте репозиторий Ubuntu

Я пытался использовать apt-rdepends как и в выбранном ответе, но когда я попытался установить пакет из своего локального репозитория, он пожаловался на отсутствие зависимостей.

apt-rdepends не перечислял некоторые зависимости для моего пакета. Я подозреваю, что это как-то связано с тем фактом, что apt-cache show показывает несколько записей для него.

Вместо этого я использовал apt-cache depends, и это сделало свое дело:

Получение рекурсивного списка зависимостей

apt-cache depends <packagename> -i --recurse

-i: только важные зависимости--recurse: рекурсивный

Превратите его в удобоваримый список

  • Удаление символов и пробелов: | tr -d "|,<,>, "
  • Удаление Зависит: & предопределяет: | sed -e 's/^Depends://g' | sed -e 's/^PreDepends://g'
  • Сортировка списка: | sort
  • Только уникальные значения: | uniq > list.txt

Завершите команду:

apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \'s/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt

Загрузите пакеты

for i in $( cat list.txt ); do apt-get download $i; done;

Сканируйте пакеты и превращайте их в Packages.gz

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Чтобы создать автономный локальный репозиторий
1. сделайте каталог доступным (по крайней мере, с помощью root)

sudo mkdir /var/my-local-repo

  1. скопируйте все файлы deb в этот каталог.
  2. просканируйте каталог

>sudo dpkg-scanpackages /var/my-local-repo /dev/null /var/my-local-repo/Пакеты

  1. добавьте локальный репозиторий в исходные файлы

>echo "файл deb:/var/my-local-repo ./" /tmp/my-local.список

sudo mv /tmp/my-local.список /etc/apt/sources.list.d/my-local.list

sudo apt-получить обновление

Я сделал это с помощью apt-mirror.

Это хорошо, но вам нужно иметь больше места на жестком диске, так как он будет синхронизироваться с сервером репозиториев.

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

Возможно Duplicate:How can I install software or packages without Internet (offline)? - Ask Ubuntu

Возможный дубликат? - repository - Is it possible to mirror the apt repositories? - Ask Ubuntu или networking - Best way to cache apt downloads on a LAN? - Ask Ubuntu