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

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

120
задан 9 June 2016 в 12:02

10 ответов

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

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

# apt-get install apache2

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


Create a Debian Package Repository Directory

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


Создадим файл Packages.gz

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

# cd /var/www/debs/

# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz




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

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

deb http://localhost/debs/ amd64/

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

# apt-get update
42
ответ дан 9 June 2016 в 12:02

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

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

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

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

mkdir /home/srv/packages/local-xenial
cd /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/bash

if [ -z "$1" ]; then
       echo -e "usage: `basename $0` DISTRO
where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\n
The 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\n
This 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 update
fi

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

Источник: My_Local_Repo Ярлык: My_Local_Repo Кодовое имя: xenial Архитектуры: i386 amd64 Компоненты: основные Описание: Мой локальный репозиторий APT SignWith: 12345ABC

Ссылки

https://wiki.debian.org/RepositoryFormat

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

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

22
ответ дан 9 June 2016 в 12:02

Из Ubuntu Help wiki:

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

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

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

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

sudo apt-get install dpkg-dev

The Directory

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

sudo mkdir -p /usr/local/mydebs.

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

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

The Script update-mydebs

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

#! /bin/bash
 компакт-диск /usr/local/mydebs
 dpkg-сканпаки . /dev/null | gzip -9c > Пакеты.гц

Вырежьте и вставьте вышеперечисленное в gedit, и сохраните его как обновление mydebs в ~/bin. (тильда '~' означает ваш домашний каталог. Если ~/бин нет существовать, создавать его: Ubuntu поместит этот каталог в PATH. Это хорошее место для размещения личных сценариев). Далее, сделайте скрипт исполняемым:

chmod u+x ~/bin/update-mydebs

Как работает сценарий:

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

Sources.list

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

deb file:/usr/local/mydebs ./

в ваш /etc/apt/sources.list

CD Option

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

sudo apt-cdrom add

Используя репозиторий

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

sudo update-mydebs.
sudo apt-get update

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

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

88
ответ дан 9 June 2016 в 12:02

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

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

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

     sudo mkdir -p / srv / resp / ubuntu / {conf, dists, incoming, index, logs, pool, project, tmp}
    
     $ CD / SRV / репрезпро / убунту /
     $ sudo chown -R `whoami`.  # меняет владельца репозитория на текущего пользователя
     

    / srv / REP / ubuntu / conf / distributions

     Источник:Ваше имя
    Ярлык: имя вашего репозитория.
    Кодовое имя: кармический
    Архитектуры: исходный код i386 amd64
    Компоненты: основные
    Описание: Описание создаваемого вами репозитория.
    SignWith: YOUR-KEY-ID
     

    / srv / replpro / ubuntu / conf / options

     запрос-пароль
    на основе
     
  3. Включите его в реппро, соберите его

     $ реппро includedeb karmic /path/to/my-package_0.1-1.deb \
     # измените /path/to/my-package_0.1-1.deb на путь к вашему пакету
     
  4. Конфигурация nginx:

    /etc/nginx/sites-available/vhost-packages.conf

     server {
      слушать 80;
      имя_сервера packages.internal;
    
      access_log /var/log/nginx/packages-access.log;
      error_log /var/log/nginx/packages-error.log;
    
      расположение / {
      корень / SRV / реппро;
      index index.html;
      }
    
      location ~ /(.*)/conf {
      отрицать все;
      }
    
      location ~ /(.*)/db {
      отрицать все;
      }
     }
     
  5. Оптимизировать размер сегмента:

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

     server_names_hash_bucket_size 64;
     

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

9
ответ дан 9 June 2016 в 12:02

Вы можете посмотреть на apt-mirror и apt-cacher .

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

6
ответ дан 9 June 2016 в 12:02

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

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

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

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

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

apt-get install apt-mirror 

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

apt-mirror /etc/apt/mirror.list1

Read on

1Source:Create an Ubuntu Repository

4
ответ дан 9 June 2016 в 12:02

Инструкции из @ BigSack answer и официального сообщения вики Ubuntu не работали для меня в Ubuntu 18.04, пока я не внес эти два изменения:

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

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

     файл deb [доверенный = да]: / usr / local / mydebs ./
     
8
ответ дан 9 June 2016 в 12:02

Чтобы сделать локальный оффлайн репозиторий
1. сделать доступным dir (atleast by root)

sudo mkdir /var/my-local-repo

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

sudo dpkg-scanpackages /var/my-local-repo /dev/null>. /var/my-local-repo/Packages

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

echo "deb file:/var/my-local-repo ./". > /tmp/my-local.list

sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local. list

sudo apt-get update

3
ответ дан 9 June 2016 в 12:02

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

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

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

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

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

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

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

  • Удаление символов и пробелов: | tr -d "|, <,>,"
  • Удаление зависимостей: & PreDepends: | sed -e 's / ^ Зависит от: // 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
ответ дан 9 June 2016 в 12:02

Я использовал apt-зеркало.

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

-1
ответ дан 9 June 2016 в 12:02

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

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