Создание зеркала репозитория Ubuntu с помощью apt-mirror

    Зачастую при развёртывании сети машин на Ubuntu возникает проблема с организацией доступа в интернет с целью установки новых программ из стандартных репозиториев. Например, когда доступен лишь очень узкий канал в интернет или траффик не является безлимитным. К счастью, принцип организации пакетной системы Ubuntu позволяет очень гибко управлять тем, что и откуда качать с использованием штатных средств управления пакетами. В частности, вы можете создать локальную копию нужных вам интернет-репозиториев Ubuntu и подключить её как основной источник приложений в вашу локальную сеть. Таким образом все компьютеры в вашей сети не будут требовать соединения с интернетом для установки новых программ и обновлений. И при этом, что самое важное, сохранится весь функционал пакетных менеджеров.

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

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

    Локальная копия официального репозитория Ubuntu 10.10 только для одной архитектуры i386 занимает 36.2 GiB, учтите это.

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

    sudo apt-get install apt-mirror

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

    Настройка apt-mirror


    Всё, что осталось сделать, это отредактировать конфигурационный файл 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 maverick main restricted
    deb http://archive.ubuntu.com/ubuntu maverick-updates main restricted
    deb http://archive.ubuntu.com/ubuntu maverick universe
    deb http://archive.ubuntu.com/ubuntu maverick-updates universe
    deb http://archive.ubuntu.com/ubuntu maverick multiverse
    deb http://archive.ubuntu.com/ubuntu maverick-updates multiverse
    deb http://archive.ubuntu.com/ubuntu maverick-security main restricted
    deb http://archive.ubuntu.com/ubuntu maverick-security universe
    deb http://archive.ubuntu.com/ubuntu maverick-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]...
    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/lucid/main/installer-i386/
    skip-clean http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-amd64/

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

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

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

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

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


    После завершения работы локальные копии всех репозиториев, указанных в 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 сервера, или же непосредственно через физическое подключение файлового носителя.

    Для подключения с помощью HTTP сервера можно установить Apache:

    sudo aptitude install apache2

    Затем сделать симлинк /var/www/ubuntu, указывающий на вашу папку с репозиторием:

    sudo ln -s /media/data/ubuntu-repo/mirror/archive.ubuntu.com/ubuntu /var/www/ubuntu

    После этого можно будет подключить этот компьютер как источник приложений ко всем остальным в сети, указав на них вот такой репозиторий:

    deb http://адрес_вашего_компьютера/ubuntu maverick main restricted

    В вашем случае, возможно, кроме main и restricted, будут и другие компоненты.

    Если вы хотите использовать вашу копию репозитория как локальный репозиторий, то вам необходимо будет подключить ваш носитель с репозиторием к нужному компьютеру, а затем добавить примерно следующую строчку к списку источников приложений на этом компьютере:

    deb file:/media/data/ubuntu-repo/mirror/archive.ubuntu.com/ubuntu maverick main restricted

    Путь, конечно, в вашем случае может отличаться.

    Напоследок хочется заметить, что во многих случаях совершенно не обязательно делать копию всего репозитория, а достаточно использовать что-то вроде apt-cache или apt-move.

    Актуальная версия статьи


    Самая последняя и наиболее актуальная версия этой статьи находится на официальном русскоязычном Wiki-ресурсе документации по Ubuntu. Там вы можете свободно улучшать и дополнять выложенные справочные и обучающие материалы, а также добавлять свои собственные. Если вам есть, что рассказать другим пользователям Ubuntu, то огромная просьба — напишите или отредактируйте соответствующую статью на help.ubuntu.ru. Даже небольшими улучшениями и дополнениями вы поможете тысячам людей, а кто-то из них, в свою очередь, опишет что-нибудь полезное и интересное для вас.
    Share post

    Similar posts

    Comments 39

      +4
      во многих случаях совершенно не обязательно делать копию всего репозитория, а достаточно использовать что-то вроде apt-cache или apt-move
      А то и apt-zeroconf
        0
        А все больше и больше слышно про убунту в интернете… Популярность растёт.
          0
          Дело в том что *nix системы (включая и Ubuntu Linux) очень гибкие. Их можно настраивать как душе угодно. Пример с репозиториями в статье — подтверждение этого тезиса.

          И да — популярность растет. Это вижу по своим сотрудникам и знакомым. Уже больше половины пользуются Linux (в основном Ubuntu).
            0
            Самое главное, что Linux гибок на всех уровнях. Им просто пользоваться, его просто администрировать как в мелкой, так и в крупной сети и он требует очень мало внимания для сопровождения после первоначальной настройки. Проще говоря — однажды научитесь пользоваться Linux и больше проблем не будет. Хотя научиться качественно пользоваться Linux немного сложней, чем тем же Windows.
              0
              Благодаря убунту пересадли брата на линукс (жаловался, что часто изза вирусов переустанавливает систему). Использует с версии 9.10 и до сих пор :). Только жаль игр под линукс маловато… Он у меня любитель поиграть, и если б его любимые игры не запустились в убунту-врядле согласился бы отказаться от венды.
                +1
                главное, чтоб обои не надоели :)
            +2
            Посмотрите в сторону apt-cacher-ng. С ним не нужно править source.list на клиентах, достаточно закинуть файлик apt.conf со следующим содержимым:
            Acquire::http::Proxy «ip:port»
              0
              В организации использовал и при разворачивании кучки виртуалок на одном сервере. Очень удобно конфигурировать, качает только нужное и умеет писать красивый html со статистикой, сколько экономит нам трафика.
              0
              Отличная статья, давно хотел такое настроить для домашней сетки, но никак руки не доходили.
                +2
                мне как-то debmirror привычнее и удобнее…
                  0
                  debmirror, как оказалось, менее гибок и более капризен.
                    0
                    С примером из статьи он вполне справится
                    У меня скрипт такой — скачивает дистрибутивы для двух архитектур, без исходников, без debug пакетов и без некоторых локализационных файлов. Для других источиков — apt-mirror.

                    По поводу раздачи в локалке — советую глянуть в сторону lighttpd

                    debmirror \
                    --arch=i386,amd64 \
                    --host=mirror.yandex.ru \
                    --root=ubuntu \
                    --dist=maverick,maverick-backports,maverick-proposed,maverick-security,maverick-updates \
                    --section=main,universe,multiverse,restricted \
                    --nosource \
                    --method=rsync \
                    --progress \
                    --getcontents \
                    --i18n \
                    --exclude='/Translation-.*\.bz2$' --include='/Translation-ru.*\.bz2$' \
                    --exclude='/openoffice.org-help-.*$' --include='/openoffice.org-help-ru*$' \
                    --exclude='.*-dbg\.deb$' \
                    --exclude-deb-section='debug' \
                    --ignore-release-gpg \
                    ubuntu
                      0
                      Ну у меня тоже раньше так было. А потом я решил — а на кой? И пользуюсь apt-mirror теперь, благо в него репозитории легко добавлять) debmirror многие критикуют за плохую работу в условиях нестабильного интернета.
                  0
                  Для большого парка машин с ubuntu возможно это имеет смысл, хотя я сомневаюсь, что необходим весь репозиторий на 32Gb.

                  Для удобного и гибкого обновления, экономии трафика ихмо лучше смотреть в стороны вещей вроде apt-cacher-ng.

                  Я же в свое время перевел «сервер репозитория» на кэширющий nginx на который теперь ходят как rpm так и deb системы.

                  А в source.list что то вроде deb debian/ lenny main
                    0
                    Безусловно. Однако есть масса случаев, в которых необходимо именно зеркало.
                      0
                      У нас наверно задачи сильно разнятся, потому что мне сложно представить массу случаев когда необходимо зеркало. За исключением когда нету сети, но разве такое бывает? =)
                        0
                        О да, бывает, да ещё как!) Россия же, не забывайте)
                    0
                    Спасибо за пост. Такая информация один раз но может пригодится. Поэтому в избранное!
                      0
                      На счёт занимаемого архитектурой места, я бы уточнил, что почти все большие файлы — общие. И поэтому размер репозитрия i386 и AMD64 — 51,1 GB. В то время как 36,2х2=72,4
                        0
                        И сколько же всё это весит для одной архитектуры?
                        Кстати, нередко встречается зоопарк типовых компьютеров с почти совпадающим набором пакетов. Можно ли «отзеркалить» только этот набор?
                          0
                          Сколько весит — написано, ответ на вопрос — можно. Например, с помощью apt-move.
                          0
                          У меня при взгляде на картинку возникает странное ощущение, что это тень от руки, и сейчас она откроет рот и скажет «Хаба-хаба.».
                            0
                            *тэг ирония*
                            Спасибо за очередной перевод официальной документации., которая частично доступна даже и на русском языке.
                              0
                              Ссылко? Я на русском нашёл только разрозненные огрызки информации, вот и решил написать. Никакой исчерпывающей оф. документации даже на английском не видел, man apt-mirror весьма лаконичен.
                                0
                                да легко
                                почему убунтоиды так уверены, что именно они придумали все эти пакеты, о настройке которых с упоением пишут?
                                  +1
                                  Обижаете. Во-первых, я прекрасно знаю, что это Debian-утилитка. Во-вторых HowToForge — это ну уж никак не оф. документация, а нечто типо того же хабра, и статью по ссылке я конечно же читал. В общем писал я это для одного конкретного человека, вам не надо — а другим может пригодиться, на русском и с подробным описанием.
                                    0
                                    ну тогда прошу прощения. Приятно встретить грамотного убунтоида, ибо большая часть оных уже задрала.
                              0
                              Ув. автор. Вопрос:
                              для ручного обновления репозитория не по расписанию нужно выполнить su — apt-mirror -c apt-mirror?
                                0
                                Если в Ubuntu, то нет. В Ubuntu надо выполнить ту же команду, что использовалась для создания:

                                sudo -u apt-mirror apt-mirror

                                А su — это отголоски доисторической эпохи или попытки невежд показать, какие они крутые админы. Если вы встречаете эту команду в современной инструкции для дистрибутивов, использующих sudo, то это ни о чём хорошем про автора не говорит. В Debian Lenny тем не менее нужно писать через su, да, древний слишком дистрибутив.
                                  0
                                  сию запись команды я почерпнул копипастом из man apt-mirror.
                                  кстати, посмею спросить еще и о том, как добавлять платформы:
                                  Чтобы добавить amd64, нужно написать set defaultarch i386,amd64?
                                  И можно ли все платформы сразу одной константой добавить? в мане все ооочень лаконично написано.
                                    0
                                    Man'ы редко обновляют, а пришёл apt-mirror как раз из Debian Lenny)) Все платформы и какие-то конкретные добавить можно, только я сходу не скажу как. Надо погуглить и поэкспериментировать, у меня сейчас apt-mirror под рукой нет(
                                0
                                Буду благодарен. Я все равно жду когда закончится вот это:
                                68.6 GiB will be downloaded into archive.
                                Downloading 85064 archive files using 20 threads…
                                хоть я и выбрал только 386ю платформу
                                  0
                                  Посмотрел sources.list — там не комментированы источники deb-src.
                                  Если я их закомменитрую и выполню sudo -u apt-mirror apt-mirror — сорцы удалятся?
                                    0
                                    нет конечно. apt-mirror смотрит в свой конфиг, а не в source.list))
                                      0
                                      хе-хе. помучаю вас еще вопросами:
                                      1. правильно ли я считаю, что мое зеркало больше приведенного в примере почти в 2 раза, из-за незакомменитрованных строк с деб-срц?
                                      2. стоит ли оставить сорцы?
                                      3. как избавиться от них на винте, если не стоит оставлять?
                                        0
                                        1. Да.
                                        2. Нет.
                                        3. Убрать их из mirror.list и убедиться, что там есть строчка

                                        clean archive.ubuntu.com/ubuntu

                                        Потом выполнить ещё раз apt-cache, всё лишнее должно удалиться.
                                          0
                                          Running the Post Mirror script…
                                          (/PATH/mirror/var/postmirror.sh)
                                          /bin/sh: Can't open /PATH/mirror/var/postmirror.sh
                                          Post Mirror script has completed. See above output for any possible errors.
                                          — и у Вас в конце
                                          sudo -u apt-mirror apt-mirror
                                          такой же вывод, или мной где-то допущена ошибка?
                                            0
                                            Ну да, вы ж не указали никакого постмиррор скрипта, вот он его и не нашёл.
                                              0
                                              Теперь все понятно! Осталось выклянчить у Киевстара новую услугу, статического адреса :)
                                              75-мбитный аплоад простаивает… или есть способ постоянно поддерживать соответствие доменного имени с устройством, имеющим динамический адрес?

                                Only users with full accounts can post comments. Log in, please.