Создание зеркала репозитория

Материал из Мои заметки
Перейти к: навигация, поиск

Используя OS GNU/Linux Ubuntu[править]

apt-mirror[править]

apt-mirror - это простая и удобная утилита для создания локальных копий репозиториев Ubuntu, использующая такой же синтаксис, как и в файле /etc/apt/sources.list, в котором указываются все репозитории для Ubuntu.

Локальные копии репозиториев нужны для установки программ на машины с Ubuntu, не подключённые к интернету. В этом случае можно создать копию нужных репозиториев на внешнем диске или на ноутбуке на компьютере, у которого есть доступ к интернету, а затем подключить эту копию в качестве репозитория к машинам, на которых интернета нет. Для этого вам потребуется компьютер с установленной Ubuntu и безлимитным доступом к интернету.

Локальная копия официального репозитория Ubuntu имеет следующий размер:

версия 10.10 только для одной архитектуры i386 занимает 36.2 GiB
версия 11.10 только для одной архитектуры amd64 занимает 42.3 GiB

Итак, на компьютере, подключённом к интернету и с установленной Ubuntu, ставим пакет apt-mirror через любое средство установки пакетов, например, командой

sudo apt-get install apt-mirror

Теперь необходимо определиться, в какой каталог складывать копию репозитория. Далее будем считать для примера, что копия репозитория будет складываться в папку /media/data/ubuntu-repo/, которая находится на отдельном винчестере, примонтированном в каталог /media/data. Конечно нужно убедиться, что в указанной папке достаточно места для размещения полной копии нужных вам репозиториев.

Всё, что осталось сделать, это отредактировать конфигурационный файл apt-mirror, добавив туда нужные опции и нужные репозитории, и запустить сам процесс зеркалирования. Этот файл называется /etc/apt/mirror.list. Ниже представлено комментированное его содержимое для случая создания копии официальных репозиториев Ubuntu 10.10 для архитектуры i386 в папке /media/data/ubuntu-repo/:

############# Опции настройки apt-mirror ##################
# Директория, в которую складываем зеркало
set base_path    /media/data/ubuntu-repo
# Далее идут служебные каталоги, их значения обычно менять не надо.
# Первый каталог - это собственно непосредственно файлы зеркала.
#set mirror_path  $base_path/mirror
# Временные файлы apt-mirror
#set skel_path    $base_path/skel
# Логи выполнения apt-mirror
#set var_path     $base_path/var
# Архитектура, для которой создаём зеркало. По умолчанию - архитектура системы, на которой работает apt-mirror.
# Если не указывать - будет создано зеркало для всех архитектур.
set defaultarch  i386
# Служебные параметры. Лучше не менять.
set nthreads     20
set _tilde 0

############# Репозитории ##############
# Стандартные репозитории Canonical для Ubuntu 10.10 deb http://archive.ubuntu.com/ubuntu/ oneiric main restricted deb http://archive.ubuntu.com/ubuntu/ oneiric-updates main restricted deb http://archive.ubuntu.com/ubuntu/ oneiric universe deb http://archive.ubuntu.com/ubuntu/ oneiric-updates universe deb http://archive.ubuntu.com/ubuntu/ oneiric multiverse deb http://archive.ubuntu.com/ubuntu/ oneiric-updates multiverse deb http://archive.ubuntu.com/ubuntu/ oneiric-security main restricted deb http://archive.ubuntu.com/ubuntu/ oneiric-security universe deb http://archive.ubuntu.com/ubuntu/ oneiric-security multiverse
# Эта строчка сообщает apt-mirror, что более ненужные файлы из основного репозитория ubuntu # (например, устаревшие версии пакетов, отсутствующие в индексах) можно удалить из локальной копии, # тем самым освободив место. clean http://archive.ubuntu.com/ubuntu/

Теперь осталось запустить apt-mirror и дождаться окончания его выполнения. Перед запуском необходимо убедиться, что основной каталог /media/data/ubuntu-repo/, а так же все вспомогательные каталоги mirror, var и skel внутри него, существуют и доступны для записи пользователю apt-mirror.

Создать все эти каталоги можно командами:

mkdir -p /media/data/ubuntu-repo/
mkdir -p /media/data/ubuntu-repo/{mirror,var,skel}

Присвоить нужные права проще всего выставив владельцем этих каталогов пользователя apt-mirror:

sudo chown -R apt-mirror /media/data/ubuntu-repo/

После этого можно запустить apt-mirror командой:

sudo -u apt-mirror apt-mirror

После загрузки индексов apt-mirror сообщит вам, какой объём пакетов будет загружен:

# sudo -u apt-mirror apt-mirror
Downloading 55 index files using 20 threads...
Begin time: Tue Dec 21 14:53:48 2010
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... 
End time: Tue Dec 21 14:54:06 2010
Proceed indexes: [PPPPPPPPPP]
36.2 GiB will be downloaded into archive. Downloading 33541 archive files using 20 threads...

Вам останется только дождаться завершения скачивания.

Автоматическое обновление локальной копии репозитория[править]

Можно настроить автоматическое обновление локальной копии репозиториев с помощью заданий cron. Для этого просто раскомментируйте нужную строчку с заданием в файле /etc/cron.d/apt-mirror.

#
# Regular cron jobs for the apt-mirror package
#
0 4    * * *   apt-mirror      /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log

Можете изменить время выполнения задания (по умолчанию - в 04:00 каждый день).

Дополнительные возможности apt-mirror[править]

При использовании схемы, описанной выше, apt-mirror скопирует из указанных репозиториев только пакеты. Однако кроме этого в репозиториях Ubuntu содержится ещё достаточно много полезных данных, например, сетевые установщики. Всё это при использовании инструкции clean для этих репозиториев будет удалено, поскольку не содержится в актуальных индексах. Чтобы принудительно не очищать некоторые директории можно указать в файле mirror.list инструкцию skip-clean с нужным адресом. Например:

# Пропуск указанных каталогов при очистке
skip-clean http://archive.ubuntu.com/ubuntu/dists/oneiric/main/installer-i386/
skip-clean http://archive.ubuntu.com/ubuntu/dists/oneiric/main/installer-amd64/

Можно указывать архитектуру непосредственно в APT строке репозитория, например вот так:

# Загрузка только amd64 пакетов из указанного репозитория
deb-amd64 http://archive.ubuntu.com/ubuntu/ oneiric main restricted

Кроме того, можно подключаться к HTTP и FTP хостам, требующим авторизацию. Для этого необходимо в адресе указать имя, пароль и по необходимости - порт:

# Нестандартный порт с авторизацией
deb http://user:pass@example.foo.org:8080/ubuntu/ oneiric main restricted

debmirror[править]

Установим пакет для скачивания файлов и создания локального зеркала Ubuntu:

sudo apt-get install debmirror

Скрипт[править]

Создадим скрипт mirror.sh для запуска этого пакета и скачивания дистрибутивов и наборов пакетов, для Ubuntu 11.10 Oneiric Ocelot:

#!/bin/bash -x
/usr/bin/debmirror --nosource -m --passive --host=linux.solo.by \ --root=ubuntu --method=http --progress \ --dist=oneiric,oneiric-security,oneiric-updates,oneiric-backports \ --ignore-release-gpg --section=main,restricted,multiverse,universe \ --arch=i386,amd64 /home/andrey/Ubuntu/debmirror/ubuntu/

Пояснения к опциям:
--nosource - игнорировать исходники, только bin
-m - проверить контрольные суммы md5
--passive - закачка в пассивном режиме (этого требуют некоторые прокси)
--host=archive.ubuntulinux.org - откуда качаем
--root=ubuntu - каталог на сервере, будем качать все, что в него вложено
--method=ftp - метод закачки, варианты: ftp|hftp|http|rsync
rsync подойдет для последующих обновлений репозитория, только тогда опцию root надо будет записать так: --root=:ubuntu
--dist=edgy,edgy-security,edgy-updates,edgy-backports - наборы пакетов по их назначению (как они лежат на сервере в каталоге ubuntu)
--ignore-release-gpg - не обращать внимания на gpg-ключи (если мы доверяем серверу)
--section=main,restricted,multiverse,universe - секции наборов пакетов
--arch=i386,amd64 - архитектура нашего компа (можно ограничиться чем-то одним)
ubuntu/ - каталог, куда мы все это сложим (мне почему-то пришлось прописать полный путь!)
ПРИМЕЧАНИЕ. для работы через прокси (подобного Squid) может понадобиться опция: --proxy=http://user:pass@url:port/

Делаем этот скрипт исполнимым:

chmod +x mirror.sh

Запускаем его:

sudo ./mirror

По завершении закачки в указанной папке будет весь репозиторий.

Консольная команда[править]

/home/andrey/Ubuntu/debmirror --nosource -m --passive --host=linux.solo.by --root=ubuntu --method=http --progress --dist=oneiric,oneiric-security,oneiric-updates,oneiric-backports --ignore-release-gpg --section=main,restricted,multiverse,universe --arch=i386,amd64 /home/andrey/Ubuntu/debmirror/ubuntu/

Используя семейство OS Windows (начиная от XP)[править]

ubuntu-repository[править]

ubuntu-repository

















Используя данную програмку в OS Windows XP

Локальный репозиторий[править]

Дальнейшая работа с локальной копией репозитория[править]

После завершения работы локальные копии всех репозиториев, указанных в mirror.list, окажутся в папках mirror/имя_репозитория в указанной основной рабочей папке apt-mirror. Таким образом копия репозитория, который был задан в mirror.list как

deb http://archive.ubuntu.com/ubuntu maverick main restricted

окажется в нашем случае в папке /media/data/ubuntu-repo/mirror/archive.ubuntu.com/ubuntu. И именно эту папку нужно будет подключать как репозиторий к другим системам с помощью HTTP или FTP сервера, или же непосредственно через физическое подключение файлового носителя.

dpkg-dev[править]

Устанавливаем пакет dpkg-dev (содержит нужную нам утилиту dpkg-scanpackages)

sudo apt-get install dpkg-dev

Создаём директорию, в которой будут храниться deb-пакеты. Например:

mkdir /home/andrey/ubuntu-repo

Копируем туда все свои пакеты, и пакеты из кэша (их там может не быть, но в любом случае, лишним не будет)

cp /var/cache/apt/archives/*.deb /home/andrey/ubuntu-repo

Переходим в нашу новую директорию с пакетами и собираем файл Packages.gz (хранит список пакетов и информацию о них, необходим для работы пакетных менеджеров с репозиторием):

cd /home/andrey/ubuntu-repo
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Теперь можно скопировать директорию ubuntu-repo на любой носитель, например флешку (если это нужно).

Далее надо указать системе этот репозиторий.
Добавляем путь к репозиторию в файл sources.list.
Открываем файл любимым редактором, например, gedit'ом:

sudo gedit /etc/apt/sources.list

И в любое место добавляем нужную строку.
В общем виде путь выглядит так: deb file:/путь/к/пакетам ./.
Примеры:

# в моём случае путь примерно такой:
deb file:/home/andrey/ubuntu-repo ./
# ещё может быть такой
deb file:/mnt/E/Доки/ubuntu-repo ./
# а если репозиторий на флешке...
deb file:/media/KINGSTON/ubuntu-repo ./

Также репозиторий можно добавить с помощью Synaptic: Система - Администрирование - Источники приложений - ПО сторонних производителей - Добавить.
Обновляем список доступных пакетов:

sudo apt-get update

Всё, репозиторий создан и подключен.
Если изменилось содержимое директории с пакетами, то нужно пересобрать файл Packages.gz и обновить список доступных пакетов.