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

Нажатие клавиши «Ввод» не возвращается к подсказке терминала, поскольку в этом терминале работает metacity. Будут напечатаны все сообщения об ошибках / сообщениях об ошибках. Это стандартное поведение для любого графического интерфейса. Если вы не хотите, чтобы они выполняли ваш сеанс терминала, используйте «& amp;».

О остальном - исчезновение оконных украшений и т. Д. - я сбиваю с толку.

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

15 ответов

* Сделать автономный репозиторий через локальную сеть * Установить локальный веб-сервер Apache

# apt-get install apache2

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

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

deb http://localhost/debs/ amd64/

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

# apt-get update
37
ответ дан 25 May 2018 в 08:03
  • 1
    Добавление этой строки в /etc/apt/sources.list приведет к разрыву обновлений, если не в локальной сети, не так ли? – Felix 3 December 2015 в 18:43
  • 2
    Для Ubuntu 16.04 вам может потребоваться заменить /var/www/debs в этом ответе на /var/www/html/debs. Или вам понадобятся дополнительные шаги для ручной настройки конфигурации apache в /etc/apache2 – Erik 19 February 2018 в 02:06

Из вики справки Ubuntu:

Есть 4 шага к настройке простого репозитория для вас 1.Install dpkg-dev 2. Поместите пакеты в каталог 3.Создайте скрипт, который будет сканировать пакеты и создать файл apt-get update можно прочитать 4. Добавьте строку в ваш источник.list, указав на ваш репозиторий. Установите 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 поместит этот каталог в ваш PATH. Хорошее место для размещения личных скриптов). Затем сделайте исполняемый файл сценария:
chmod u+x ~/bin/update-mydebs

How the script works:
dpkg-scanpackages просматривает все пакеты в mydebs, а результат сжимается и записывается в файл (Packages.gz), который может считывать apt-get (см. Ниже ссылку, объясняет это в мучительной детали). / dev / null - пустой файл; он заменяет файл переопределения, который содержит некоторую дополнительную информацию о пакетах, которая в этом случае действительно не нужна. См. Deb-override (5), если вы хотите узнать об этом. Sources.list добавьте строку
deb file:/usr/local/mydebs ./
в /etc/apt/sources.list, и все готово. CD. Вы можете записать каталог, содержащий дебы на компакт-диск, и использовать его как репозиторий (хорошо для совместного использования компьютеров). Чтобы использовать компакт-диск в качестве репозитория, просто запустите
sudo apt-cdrom add
Использование репозитория. Когда вы помещаете новый deb в каталог mydebs, запустите
sudo update-mydebs
sudo apt-get update
. Теперь ваши локальные пакеты можно манипулировать с помощью команд Synaptic, aptitude и apt: apt-get , apt-cache и т. д. Когда вы пытаетесь apt-get install, любые зависимости будут разрешены для вас, если они могут быть выполнены. Плохо сделанные пакеты, вероятно, потерпят неудачу, но вы не будете терпеть адский dpkg.
71
ответ дан 25 May 2018 в 08:03
  • 1
    Не могли бы вы объяснить синтаксис строки dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz. Что там /dev/null. Я тоже прочитал страницу руководства, но это было не совсем ясно. – sayantankhan 28 May 2013 в 17:13
  • 2
    @ blade19899 Мне нужно немного разъяснений, пожалуйста. Я хочу, чтобы в репозитории было всего несколько отдельных пакетов, а не каждый пакет, который я когда-либо касался. Правильно ли, что эта техника даст мне эту способность? Цель здесь состоит в том, чтобы иметь хранилище, которое группа установки программного обеспечения может использовать в изолированной локальной сети, вдали от соблазнов apt-get ненужных. – Wes Miller 29 June 2013 в 00:24
  • 3
    @WesMiller Я думаю, вам нужно, я только что отредактировал его сообщение! – blade19899 29 June 2013 в 02:53
  • 4
    @ blade19899 Прошу прощения, я не понимаю вашего ответа. – Wes Miller 3 July 2013 в 21:32
  • 5
    @WesMiller u need BigSack Я только что отредактировал его сообщение для проблем с грамматикой (я думаю, что его битка некоторое время), это не мой ответ, но BigSack – blade19899 3 July 2013 в 23:47

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

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

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

Установите каталог репо

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

Затем добавьте строку, подобную этой, в sources.list: [ ! d6]

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

Добавить пакеты

#!/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

Origin: My_Local_Repo Label: My_Local_Repo Codename: xenial Architectures: i386 amd64 Components: main Description: My local APT repository SignWith: 12345ABC

Пример Содержание файла conf / distributions

https://wiki.debian.org/RepositoryFormat

https: // wiki .debian.org / RepositoryFormat

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

12
ответ дан 25 May 2018 в 08:03
  • 1
    @Phillip ваше редактирование использовалось date -Rc, я исправил его до date -Ru, предполагая, что это то, что вы имели в виду из описания редактирования – muru 30 January 2017 в 15:42
  • 2
    @muru Право. Спасибо, что заметили это. – Phillip 30 January 2017 в 15:53
  • 3
    Спасибо, я только недавно начал получать предупреждения от apt об этом из-за даты, сгенерированной в локальном TZ, а не UTC. Я исправил его в своем собственном скрипте, но забыл изменить его здесь – happyskeptic 31 January 2017 в 02:14
  • 4
    @KevinJohnson Теперь я обновил основной ответ на примере этого файла из моего локального репозитория apt – happyskeptic 4 November 2017 в 06:36

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

Установить пакеты debian
sudo apt-get install reprepro nginx 
сделать каталоги для 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 / distribution / srv / reprepro / ubuntu / conf / options
ask-passphrase
basedir .
Включить его в 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
Config nginx: /etc/nginx/sites-available/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;
  }
}
Оптимизировать размер ковша: / etc /nginx/conf.d/server_names_hash_bucket_size.conf
server_names_hash_bucket_size 64;

Ссылка на ссылку для установки Ссылка

7
ответ дан 25 May 2018 в 08:03

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

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

5
ответ дан 25 May 2018 в 08:03
Существует несколько причин, по которым вам может понадобиться создать локальный репозиторий. Во-первых, вы хотите сохранить полосу пропускания, если у вас есть несколько компьютеров 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

4
ответ дан 25 May 2018 в 08:03

Сделать автономный локальный репозиторий 1. сделать доступным dir (по крайней мере, root)

sudo mkdir / var / my-local-repo скопировать все файлы deb в этот каталог. сканировать каталог

sudo mkdir / var / my-local-repo

копировать все файлы deb в этот каталог. echo "deb файл: / 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
ответ дан 25 May 2018 в 08:03

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

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

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

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

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

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

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

Удаление символов & amp; пробелы: | tr -d "|,<,>, " Зависимые от удаления: & amp; PreDepends: | 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;

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

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
1
ответ дан 25 May 2018 в 08:03
  • 1
    Может быть хорошей идеей, чтобы ссылаться на тот ответ, о котором вы говорите ... – anonymous2 8 June 2016 в 17:03

Инструкции в ответе BigSack выше - и исходный пост wiki, который он цитировал, - не работали для меня, пока я не сделал два изменения:

1) Я создал плоскую Файл «Пакеты» вместо версии gzip'd:

dpkg-scanpackages -m. > Пакеты

2) Я добавил [trusted=yes] к записи репо в sources.list,

dpkg -scanpackages -m. > Пакеты

deb [доверенный = да] файл: / usr / local / mydebs ./

0
ответ дан 25 May 2018 в 08:03

Я сделал, используя apt-mirror.

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

-1
ответ дан 25 May 2018 в 08:03

Сделать автономный локальный репозиторий 1. сделать доступным dir (по крайней мере, root)

sudo mkdir / var / my-local-repo скопировать все файлы deb в этот каталог. сканировать каталог

sudo mkdir / var / my-local-repo

копировать все файлы deb в этот каталог. echo "deb файл: / 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
ответ дан 25 May 2018 в 08:03

Сделать автономный локальный репозиторий 1. сделать доступным dir (по крайней мере, root)

sudo mkdir / var / my-local-repo скопировать все файлы deb в этот каталог. сканировать каталог

sudo mkdir / var / my-local-repo

копировать все файлы deb в этот каталог. echo "deb файл: / 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
ответ дан 25 May 2018 в 08:03

Сделать автономный локальный репозиторий 1. сделать доступным dir (по крайней мере, root)

sudo mkdir / var / my-local-repo скопировать все файлы deb в этот каталог. сканировать каталог

sudo mkdir / var / my-local-repo

копировать все файлы deb в этот каталог. echo "deb файл: / 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
ответ дан 25 May 2018 в 08:03

Сделать автономный локальный репозиторий 1. сделать доступным dir (по крайней мере, root)

sudo mkdir / var / my-local-repo скопировать все файлы deb в этот каталог. сканировать каталог

sudo mkdir / var / my-local-repo

копировать все файлы deb в этот каталог. echo "deb файл: / 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
ответ дан 25 May 2018 в 08:03

Сделать автономный локальный репозиторий 1. сделать доступным dir (по крайней мере, root)

sudo mkdir / var / my-local-repo скопировать все файлы deb в этот каталог. сканировать каталог

sudo mkdir / var / my-local-repo

копировать все файлы deb в этот каталог. echo "deb файл: / 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
ответ дан 25 May 2018 в 08:03

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

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