Сообщество Ubuntu Linux

Путевые заметки • настройки дистрибутивов на базе Ubuntu

Поиск ☜★☞ Yandex

Полезности ☼ Ubuntu

RSS-каналы


Yahoo! 
MSN 
AOL 
Bloglines 

Контакт


    Создание локального репозитория Ubuntu 10.04

    Поделиться
    avatar
    Admin
    Администратор
    Администратор

    Сообщения : 84
    Очки : 236
    Дата регистрации : 2010-10-10
    Возраст : 43
    Откуда : Аргентина Буэнос Айрес

    Создание локального репозитория Ubuntu 10.04

    Сообщение автор Admin в Вт 19 Окт - 18:35:55

    Постепенный перевод предприятия на GNU/Linux порождает необходимость соответствующих изменений в инфраструктуре. Сегодня мы решаем проблему глобального обновления клиентских машин путем создания локального репозитория. Процесс изначально документировался как памятка на будущее, потому заранее прошу прощенья за возможные несуразности в тексте. Итак.
    Для начала следует определиться, посредством чего лучше сделать это. Интернеты выделяют двух фаворитов rsync и debmirror. Выбрал последний, ввиду его большей гибкости.

    1. Получение ключей

    Для создания зеркала репозитория необходимо получить ключ «Ubuntu Archive Automatic Signing Key ». Для этого в терминале от суперюзера вводим:
    gpg --no-default-keyring --keyring trustedkeys.gpg --recv-keys 437D05B5

    2. Подготовка пространства

    Создаем папку для репозитория:
    sudo mkdir /path/to/repository
    Важно! Потрудитесь проследить за наличием свободного места в указанном пути. Даже две архитектуры i386 и amd64 займут приличное его количество.

    3. Получение пакетов

    Зеркалирование проходит в три этапа:

    1. Загрузка индекстых файлов;
    2. Удаление неизвестных файлов (отключается опцией --nocleanup ниже);
    3. Построение списка по индексным архивам и проверка на наличие в локальном репозитории.Для реализации вышеперечисленного создадим файл repo_update.sh со следующим содержанием.


    #!/bin/sh
    #Это конфигурация нашего репозитория. В зависимости от параметров, указанных
    #здесь, мы получим нужное нам его содержимое.

    #Опция cleanup. Включена по умолчанию. После закачки пакетов удаляет ранние
    #версии. Для отключения опции необходим параметр --nocleanup
    clean=--nocleanup
    #Опция source. Закачивает исходные коды пакетов. Если вы не пользуетесь
    #исходными кодами для изучения и модификации приложений ( что свойственно для
    #бинарных дистрибутивов), смело ставьте опцию --no-source
    src=--source

    #Host. Имя сервера, откуда мы берем пакеты.
    servername=mirror.yandex.ru

    #Root. Корневая директория на выбранном нами сервере.
    rdir=/ubuntu

    #Имя релиза Ubuntu. Настройки для 10.04 версии.
    release=lucid,lucid-backports,lucid-proposed,lucid-security,lucid-updates

    #Секции.
    section=main,restricted,universe,multiverse

    #Протокол синхронизации. Debmirror поддерживает следующие способы: http,
    #hftp, ftp, rsync
    sync_protocol=rsync

    #Архитектура. Если используются исключительно 32 или 64х битные системы.
    #Одну из архитектур можно убрать. Также если используются иные архитектуры,
    #их следует добавить.
    arch=i386,amd64

    #Местоположение репозитория. Указывайте локальную папку, созданную. в п 2.
    path=/path/to/repository

    debmirror --progress --verbose $clean $src --md5sums --host=$servername --root=$rdir \
    --dist=$release -s=$section --method=$sync_protocol -a=$arch $path

    Теперь поместим его в директорию /usr/local/bin и сделаем исполняемым.
    chmod +x repo_update.sh
    sudo cp repo_update.sh /usr/local/bin/


    Далее запустим получившийся скрипт и дождемся завершения процесса. Процесс достаточно долгий. Время выполнения сильно зависит от ширины вашего интернет-канала.
    sudo /usr/local/bin/repo_update.sh
    Внимание! Размер скачиваемого переваливает за десятки гигабайт, а казеный интернет редко бывает безлимитным. Более того, debmirror чувствителен к стабильности соединения, 120 секунд простоя и все придется начинать сначала.

    4. Настройка web-сервера

    Дабы не совершать лишних плясок с бубном выберем протокол http, как традиционный метод предоставления доступа к репозиторию. Выбор web-сервера остается за Вами. Из фаворитов ngnix, apache и lighttpd, выбрал последний ввиду отсутствия опыта работы с оным (приятное с полезным, да). Итак.

    Установка сервера.

    sudo apt-get install lighttpd
    Здесь все просто. Если Вы не планируете использовать в качестве www директории отличную от умолчания, то сервер в настройке не нуждается. Все, что сам нужно сделать, это создать символьную ссылку в директории /var/www
    ln -s /path/to/repository /var/www/ubuntu

    Проверим доступность репозитория из браузера: http:///ubuntu/

    5. Настройка клиентов

    Здесь мы применим маленькую хитрость. Дабы не вносить изменений в /etc/apt/sources.list (мало ли что случится). Добавим в файл /etc/hosts пару строчек.
    ru.archive.ubuntu.com
    security.ubuntu.com
    Примечание. При наличии DNS сервера можно все это прописать в нем, а на сервере репозитория прописать истинные адреса вышеупомянутых имен.

    6. Автоматизация

    А теперь самое сладкое. Заставим все это крутиться самостоятельно.

    6.1 Серверная часть

    В пункте #3 мы создавали скрипт, при помощи которого получали пакеты. Настроим его автозапуск средствами демона cron.
    sudo crontab -e

    В который добавим заветную строчку:

    0 0 * * * /usr/local/bin/repo_update.sh
    Теперь ежедневно в 0:00 наш скрипт будет делать за нас всю рутинную работу.

    6.2 Клиентская часть

    На клиентах создадим скрипт system_upd.sh в директории /usr/local/bin следующего содержания:
    #!/bin/sh
    apt-get -y update && apt-get -y upgrade && apt-get -y clean

    Не забудем сделать его исполняемым.
    sudo chmod +x /usr/local/bin/system_upd.sh

    После чего открываем cron:
    sudo crontab -e

    И добавляем строчку:
    40 17 * * * /usr/local/bin/system_upd.sh

    Теперь каждый день в 17:40 система будет опрашивать наш репозиторий на предмет наличия обновлений и обновляться, если таковые будут найдены.

    Внимание! При работе с crontab следует не забывать, что после строчек с заданиями обязательно должна быть пустая строка, которая обозначается знаком '#'.

      Текущее время Пн 25 Сен - 6:50:36