воскресенье, 10 января 2016 г.

Как создать локальный репозиторий в Debian/Ubuntu

Для чего может потребоваться локальный репозиторий программ? Допустим у вас в офисе есть несколько рабочих станций без выхода в интернет. Но им нужно как-то устанавливать и обновлять ПО. В этом случае, на серевре (или другой машине, имеющей доступ в интернет), создаётся локальный репозиторий, который периодически обновляется. А остальные рабочие станции, берут оттуда программы. Также это может быть полезно в случае ограниченного или не всегда доступного интернета. Выкачали репозиторий - и в любой момент можете поставить любую доступную программу. В создании локального репозитория нет ничего сложного, сейчас я всё подробно опишу.


Локальный репозиторий очень желательно размещать на отдельном жёстком диске (в крайнем случае, разделе), чтобы в случае аварии не потерять всё нажитое непосильным трудом скачанное. Репозиторий дистрибутива Debian 8 для архитектуры amd64 весит более 40 гигабайт. Соответственно, если вам нужны ещё и i386-пакеты (32 бит), то объём удвоится. Итак, допустим в вашей системе есть отдельный жёсткий диск на 500 Гб, примонтированный в /media/repo . От этого и будем исходить. Начнём с Debian 8 Jessie.

Существует несколько способов создания локального репозитория в Debian/Ubuntu. Я воспользуюсь самым простым и проверенным временем - утилитой apt-mirror. Устанавливаем:

sudo apt install apt-mirror apache2

Создаём каталог для репозитория:

sudo mkdir /media/repo/debian

и служебные каталоги:

sudo mkdir -p /media/repo/debian/{mirror,var,skel}

Настраиваем. Открываем конфигурационный файл:

sudo nano /etc/apt/mirror.list

############# config ##################
# Базовый каталог, в нём будет создано локальное зеркало репозитория Debian
set base_path    /media/repo/debian

# Пути к файлам зеркала, временным файлам и журналy выполнения apt-mirror
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh

# Архитектура, для которой создаётся зеркало. По умолчанию - это архитектура
# системы, на которой работает apt-mirror (amd64,i386 или др.). Менять не ненужно,
# т.к. ниже мы явно укажем и зеркало и архитектуру.
# set defaultarch  <running host architecture>

# Путь к скрипту постобработки, по-умолчанию отсутствует, пока нам не нужен.
# set postmirror_script $var_path/postmirror.sh

# Не запускать скрипт постобработки
set run_postmirror 0

# Служебные параметры, не
set nthreads     20
set _tilde 0
#
############# end config ##############

# Зеркало с пакетами для amd64 jessie (stable)+ исходные тексты
deb-amd64 http://mirror.yandex.ru/debian jessie main contrib non-free
deb-src http://mirror.yandex.ru/debian jessie main contrib non-free
# Зеркало с обновлениями безопасности amd64 jessie (stable)+ исходные тексты
deb-amd64 http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
# Зеркало необходимое для сетевой установки (udebs)
deb-amd64 http://mirror.yandex.ru/debian jessie main/debian-installer
# Удаляем файлы не индексированные в Release
clean http://mirror.yandex.ru/debian
clean http://security.debian.org
# Запрещаем очистку выбранной папки
skip-clean http://mirror.yandex.ru/debian/dists/jessie/main/installer-amd64/

# Зеркало с пакетами для i386 jessie (stable)+ исходные тексты
deb-i386 http://mirror.yandex.ru/debian jessie main contrib non-free
deb-src http://mirror.yandex.ru/debian jessie main contrib non-free
# Зеркало с обновлениями безопасности i386 jessie (stable)+ исходные тексты
deb-i386 http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
# Зеркало необходимое для сетевой установки (udebs)
deb-i386 http://mirror.yandex.ru/debian jessie main/debian-installer
# Удаляем файлы не индексированные в Release
clean http://mirror.yandex.ru/debian
clean http://security.debian.org
# Запрещаем очистку выбранной папки
skip-clean http://mirror.yandex.ru/debian/dists/jessie/main/installer-i386/


Сохраняем. Запускаем закачку репозитория:

sudo apt-mirror

После того как загрузятся индексные файлы, Apt-Mirror сообщит вам какой объём пакетов нужно скачать (объём будет весьма и весьма не маленький). Вам остаётся только ждать. Всё остальное система сделает сама. Для автоматической синхронизации и очистки зеркал нужно добавить строку в настройки cron и выставить подходящее время. Обновление официальных зеркал происходит каждые 6 часов: 3:00,9:00,15:00,21:00. Например так:

crontab -e

05 01 * * *     apt-mirror >> /var/log/apt-mirror.log
05 03 * * *     /media/repo/debian/var/clean.sh >> /var/log/apt-mirror.log


Для корректной работы обязательно необходимо добавить символические ссылки "stable","testing", "unstable" на jessie, stretch, sid соответственно (если они у вас есть). Пример для jessie:

ln -s /media/repo/debian/mirror/mirror.yandex.ru/debian/dists/jessie /media/repo/debian/mirror/mirror.yandex.ru/debian/dists/jessie/stable

Мы установили веб-сервер Apache неспроста. Он нам нужен чтобы раздавать пакеты из нашего локального репозитория по сети (локальной). Для начала, нужно настроить доступ к репозиторию. Для этого нужно создать одну символьную ссылку:

cd /media/repo/debian/
sudo ln -s /media/repo/debian/mirror/mirror.yandex.ru/debian debian

Теперь на клиентской машине (которой нужен доступ к локальному репозиторию), укажите адрес репозитория. Если у компьютера с репозиторием есть сетевое имя (к примеру server), то указывайте его. В противном случае, адресом указывайте его IP-адрес:

sudo nano /etc/apt/sources.list

deb http://server/debian jessie main contrib non-free
deb-src http://server/debian jessie main contrib non-free
deb http://server/debian jessie/updates main contrib non-free

Если вы указывали в конфиге загрузку 32-х битных пакетов (i386), то не забудьте добавить эту архитектуру в систему:

sudo dpkg --add-architecture i386

и обновите список пакетов:

sudo apt-get update

Дальше уже всё как обычно. Для Ubuntu всё то же самое, за исключением названий репозиториев и добавления 32-х битной архитектуры в 64-х битную систему (не нужно). Конфиг mirror.list для Ubuntu 14.04:

############# config ##################
# Базовый каталог, в нём будет создано локальное зеркало репозитория Debian
set base_path    /media/repo/ubuntu

# Пути к файлам зеркала, временным файлам и журналy выполнения apt-mirror
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh

# Архитектура, для которой создаётся зеркало. По умолчанию - это архитектура
# системы, на которой работает apt-mirror (amd64,i386 или др.). Менять не ненужно,
# т.к. ниже мы явно укажем и зеркало и архитектуру.
# set defaultarch  <running host architecture>

# Путь к скрипту постобработки, по-умолчанию отсутствует, пока нам не нужен.
# set postmirror_script $var_path/postmirror.sh

# Не запускать скрипт постобработки
set run_postmirror 0

# Служебные параметры, не
set nthreads     20
set _tilde 0
#
############# end config ##############

deb-amd64 http://archive.ubuntu.com/ubuntu trusty main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-updates main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu trusty universe
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-updates universe
deb-amd64 http://archive.ubuntu.com/ubuntu trusty multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-updates multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security universe
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security multiverse


deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty-updates main restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty universe
deb-i386 http://archive.ubuntu.com/ubuntu trusty-updates universe
deb-i386 http://archive.ubuntu.com/ubuntu trusty multiverse
deb-i386 http://archive.ubuntu.com/ubuntu trusty-updates multiverse
deb-i386 http://archive.ubuntu.com/ubuntu trusty-security main restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty-security universe
deb-i386 http://archive.ubuntu.com/ubuntu trusty-security multiverse


Ну и соответственно, нужно изменить символьную ссылку:

ln -s /media/repo/ubuntu/mirror/archive.ubuntu.com/debian/dists/trusdy /media/repo/ubuntu/mirror/archive.ubuntu.com/ubuntu/dists/trusty/stable

Вот и всё. Это наиболее простой и, на мой взгляд, правильный способ создания локального репозитория в этих системах. Если у вас остались вопросы - пишите в комментариях.

Ссылки:

Создание локального репозитория в Fedora
Создание локального репозитория Arch Linux
Создание локального репозитория ALT Linux 

7 комментариев:

  1. Если нужно репы начиная с debian 6 до 8, нужно настраивать mirror.list в таком виде
    deb http://ftp.by.debian.org/debian/ jessie main
    deb-src http://ftp.by.debian.org/debian/ jessie main

    deb http://ftp.by.debian.org/debian/ wheezy main
    deb-src http://ftp.by.debian.org/debian/ wheezy main

    deb http://ftp.by.debian.org/debian/ squeeze main
    deb-src http://ftp.by.debian.org/debian/ squeeze main

    ОтветитьУдалить
    Ответы
    1. Забыл про занк ???

      Удалить
    2. я немного не совсем в теме. скажите пожалуйста, как добавить сода еще репозиторием. Вот активно используем http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu/ trusty/main
      Как добавить. вообще принцип. Как просто при добавлении описать репы, что бы apt-mirror не ругался и другие пользователи обновляться могли смело?

      Удалить
  2. я немного не совсем в теме. скажите пожалуйста, как добавить сода еще репозиторием. Вот активно используем http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu/ trusty/main
    Как добавить. вообще принцип. Как просто при добавлении описать репы, что бы apt-mirror не ругался и другие пользователи обновляться могли смело?

    ОтветитьУдалить
  3. Вопрос.
    Вы делали репозиторий Ubuntu 16.04 с возможностью сетевой установки?
    В 14.04 всё отлично работает, 16.04 создаётся. Но потом можно с него установится по сети, но список вариантов установки меньше чем с официального и после установки недоступны пакеты из этого же репозитория.

    ОтветитьУдалить
  4. Делал локальный репозиторий 14.04, с возможность установки по сети (netinstall).
    То есть при нетинстале указываеш свой локальный репозиторий. Всё отлично работало.
    Создал также локально репозиторий 16.04, нетинстал возможен, но количество вариантов установки(сервер, кубунту, убунту и т.д.) меньше чем в случаи указания одного из офиц. репозиториев в качестве источника пакетов. И после установки системы, невозможно установить пакеты из локального репозитория. С собщением, что пакет не найден. Хотя по факту пакеты есть.

    ОтветитьУдалить