
У меня есть ноутбук и локальная копия нескольких репозиториев на внешнем жестком диске, подключенном к моему маршрутизатору. Мой маршрутизатор предоставляет доступ к этим файлам (с учетными данными) как к общим папкам samba и/или ftp-серверу.
Я хотел бы настроить apt-get для проверки этих репозиториев, когда они доступны, и загрузки из них обновлений, чтобы ускорить процесс, когда это возможно.
Чтобы быть более ясным: я хочу, чтобы apt-get проверял как обычные репозитории в интернете, так и мой локальный, когда мой ноутбук подключен к моему Wi-Fi. Если файлы во внешних репозиториях новее, чем в моем локальном зеркале или если зеркало недоступно, apt-get должен загрузить файлы из интернета.
решение1
4 шага для создания собственного репозитория
- Установить
dpkg-dev
- Поместите пакеты в каталог
- Создайте скрипт, который будет сканировать пакеты и создавать файл, который
apt-get update
можно прочитать - Добавьте линию, указывающую
sources.list
на ваш репозиторий
Установитьdpkg-dev
Откройте терминал:
sudo apt-get install dpkg-dev
Справочник
Создайте каталог для хранения ваших пакетов. Для этого примера мы будем использовать /usr/local/lan-repo
.
sudo mkdir -p /usr/local/lan-repo
Теперь переместите все ваши пакеты в этот новый каталог.
Пакеты, которые уже загружены, обычно хранятся в вашей системе в /var/cache/apt/archives
. Если вы установили , apt-cacher
то, скорее всего, в каталоге будут храниться дополнительные пакеты apt-cacher/packages
.
Создайте скрипт с именемupdate-lan-repo
Это очень простой скрипт из трех строк:
#! /bin/bash
cd /usr/local/lan-repo
sudo dpkg-scanpackages . /dev/null | gzip -9c > packages.gz
Скопируйте и вставьте указанное выше в ваш любимый текстовый редактор и сохраните как update-lan-repo
. ~/bin
( ~
означает домашний каталог. Если ~/bin
его еще нет, создайте его. Ubuntu автоматически добавит этот каталог в ваш PATH. Это делает его хорошим местом для размещения личных скриптов.)
Теперь сделаем скрипт исполняемым:
chmod u+x ~/bin/update-lan-repo
Вот как работает этот скрипт:
dpkg-scanpackages
просматривает все пакеты в lan-repo
, а вывод сжимается и записывается в файл packages.gz
, который apt-get update
может читаться (см. ниже ссылку, в которой это подробно объясняется). /dev/null
является пустым файлом - то есть - это временная замена для файла переопределения, который содержит некоторую дополнительную информацию о пакетах, которая в нашем случае на самом деле не нужна. Смотритеdeb-override(5)
если вы хотите узнать об этом больше.
Нам нужно добавить ваш локальный репозиторий в ваш файл sources.list
echo "deb file:/usr/local/lan-repo ./" >> /etc/apt/sources.list
и все готово.
Опция CD/DVD
Вы можете сохранить каталог, содержащий файл .deb, на CD/DVD и использовать его в качестве репозитория (хорошо для совместного использования между компьютерами). Чтобы использовать CD в качестве репозитория:
просто выполните команду:
sudo apt-cdrom add
с использованием нового репозитория.
Затем всякий раз, когда вы сохраняете новый пакет Debian в каталоге lan-repo, запускайте:
sudo update-lan-repo
sudo apt-get update
Теперь вашими локальными пакетами можно управлять с помощью Synaptic, aptitude и команд apt: apt-get
, apt-cache
, и т. д. При попытке выполнить apt-get install все зависимости будут разрешены, если они могут быть удовлетворены.
решение2
Мне наконец-то удалось решить эту проблему, и она работает довольно хорошо, поэтому я хочу поделиться ею с людьми, которые хотят реализовать что-то подобное.
Моя первая проблема заключалась в том, что моя система поддерживает многоархитектурность, поэтому зеркалированные репозитории должны содержать как пакеты i386, так и amd64 (я не зеркалировал исходники), чтобы избежать ошибок загрузки. Это делается в/etc/apt/mirror.listкак показано в этом примере:
deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
Мойбазовый_путьОпределено в этом файле/mnt/apt-зеркалаи запускаю скрипт, который монтирует внешний жесткий диск, подключенный к USB-порту моего маршрутизатора, как общий ресурс Samba (скрипт можно увидеть здесь: как использовать apt-mirror для сохранения файлов на жестком диске, подключенном к маршрутизатору локальной сети
Я хотел получить доступ к зеркальным репозиториям с других компьютеров в локальной сети, поэтому другой частью решения является добавление определений FTP-репозиториев.в началев/etc/apt/sources.list. Эта установка делаетapt-getдля использования FTP-репозиториев в первую очередь при загрузке файлов, а затем тех, которые определены в/etc/apt/sources.list.d, при условии, что зеркальные копии обновлены.
Локальные репозитории определяются следующим образом:
deb [arch=amd64,i386] ftp://user:password@lan-resource/apt-mirrors/mirror/archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
где вы заменяетепользовательс именем пользователя, которому предоставлен доступ к FTP-серверу,:парольс паролем, если требуется для подключения (в противном случае удалите), иlan-ресурсс адресом FTP-сервера в вашей локальной сети (я решил отредактировать/etc/хостычтобы избежать повторения жестко закодированного IP-адреса, где я определил 192.168.0.1 какlanftpсервердля использования в этой области).