Я хотел бы создать свой локальный репозиторий в своей локальной сети, чтобы машины в локальной сети могли обновляться и обновляться с него. Я хочу загрузить пакеты и сохранить их на своем локальном сервере, чтобы я мог обновлять, обновлять, устанавливать и т. Д. С него без использования Интернета.
*Чтобы сделать автономный репозиторий по локальной сети *
Установить локальный сервер 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
Создание аутентифицированного репозитория
Я смотрел ответы здесь и на других сайтах и у большинства из них есть (имхо большой) недостаток, заключающийся в том, что вы настраиваете репозиторий без аутентификации. Это означает, что вам нужно запустить 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
Из 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.
Вы также можете настроить локальный исходный сервер с помощью nginx и REPPRO:
Установить пакеты debian
sudo apt-get install REPORTPRO nginx
создайте каталоги для 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
запрос-пароль
на основе
Включите его в реппро, соберите его
$ реппро includedeb karmic /path/to/my-package_0.1-1.deb \
# измените /path/to/my-package_0.1-1.deb на путь к вашему пакету
Конфигурация 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 {
отрицать все;
}
}
Оптимизировать размер сегмента:
/etc/nginx/conf.d/server_names_hash_bucket_size.conf
server_names_hash_bucket_size 64;
Ссылка на Ссылка на руководство по установке
Вы можете посмотреть на apt-mirror
и apt-cacher
.
Вот руководство по установке и использованию .
Есть несколько причин, по которым вы можете захотеть создать локальный репозиторий. Первая - это то, что вы хотите сэкономить на пропускной способности, если у вас несколько Обновление машин Ubuntu. Например, если у вас было 25 машин Ubuntu. что все нуждается в обновлении по крайней мере раз в неделю, вы бы в значительной степени сохранить пропускную способность, потому что вы можете делать все, кроме репозитория, локально.
Большинство организаций имеют приличную пропускную способность для своих сетевых шлюзов. но эта полоса пропускания - драгоценный товар, который нужно использовать. с умом.
Многие организации до сих пор имеют маршрутизаторы с лимитами 10 или 100 Мб в пределах шлюз, но 1 ГБ сетевых соединений внутри, так что пропускная способность может быть лучше использовать внутри. Вторая причина для создания собственного репозиторий - это то, что вы можете контролировать, в какие приложения загружаются ваши внутренние машины Убунту.
Вы можете удалить любые приложения, которые ваша организация не хочет использовать. по локальной сети из репозитория, который обновляет машины. Еще лучше, вы можете создать тестовую коробку и тестовые приложения и версий до того, как вы позволите им внедриться в вашу сеть, гарантируя. безопасность и стабильность.
Сначала нужно настроить зеркало, для этого нужно просто нажать кнопку Ctrl+Alt+T на клавиатуре, чтобы открыть Терминал. Когда он откроется, выполните команду ниже.
apt-get install apt-mirror
После того, как вы настроите apt-зеркало, вы можете начать загрузку репозиторий с помощью этой команды.
apt-mirror /etc/apt/mirror.list1
1Source:Create an Ubuntu Repository
Инструкции из @ BigSack answer и официального сообщения вики Ubuntu не работали для меня в Ubuntu 18.04, пока я не внес эти два изменения:
Создать простой несжатый файл Packages
(при его выполнении рабочий каталог должен находиться там, где расположены все пакеты)
cd / usr / local / mydebs
dpkg-scanpackages -m. > Пакеты
Добавьте следующую запись в /etc/apt/sources.list
файл deb [доверенный = да]: / usr / local / mydebs ./
Чтобы сделать локальный оффлайн репозиторий
1. сделать доступным dir (atleast by root)
sudo mkdir /var/my-local-repo
sudo dpkg-scanpackages /var/my-local-repo /dev/null>. /var/my-local-repo/Packages
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
Я попытался использовать apt-rdepends
, как в выбранном ответе, но когда я попытался установить пакет из моего локального репозитория, он пожаловался на отсутствие зависимостей.
apt-rdepends
не перечислял некоторые зависимости для моего пакета. Я подозреваю, что это как-то связано с тем фактом, что apt-cache show
показывает несколько записей для него.
Вместо этого я использовал apt-cache зависимо
, и это помогло :
Получение рекурсивного списка зависимостей
apt-cache depends <packagename> -i --recurse
-i
: только важные зависимости
- рекурсивный
: рекурсивный
Превратите его в легко усваиваемый список
| tr -d "|, <,>,"
| 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
Я использовал apt-зеркало.
Это хорошо, но вам нужно больше места на жестком диске, так как он будет синхронизироваться с сервером репозитория.