Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: [HOWTO] Различные способы создания локального репозитория  (Прочитано 75381 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн nvx

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Репозитории в Ubuntu: Часть 1 - использование многодисковых срезов на CD/DVD

http://whylinux.ru/2008/01/11/repozitorii-v-ubuntu-chast-1-ispolzovanie-mnogodiskovyx-srezov-na-cddvd

Имеем: срез репозитория *buntu на 6ти DVD. Самый простой вариант использования - вставляем диски по очереди в привод и в консоли выполняем команду:

$ sudo apt-cdrom add

После этого можно использовать ваш любимы менждер пакетов - при установке новых пакетов сначала они будут искаться на DVD, а потом уже в интернет-репозиториях.

Допустим кому-то лень постоянно вставлять диски с дистрибами. Например, привод один а хочеться музыку слушать или места просто много на винте. Можно создать локальный репозиторий. Единственный минус такого репозитория - в нем не будет обновлений. Но если прописать такой репозиторий в самом верху /etc/apt/sources.list, то менеджер пакетов будет сначала искать в локальном репозитории а потом уже во всех остальных.

Итак, приступим:

1) все диски содержат 2 папки: dists - содержит файлы описания репозитория и пакетов, pool - сами пакеты структурированно разложенные по подпапкам именованным по алфавиту.

2) создадим папку /path/to/our/repository/mirror (далее будем называть ее MIRROR_PATH)

3) создадим в MIRROR_PATH подпапки по количеству дисков (в нашем случае 6): dists1, dists2, … dists6

4) создадим в MIRROR_PATH подпапку pool

5) далее необходимо скопировать содержимое дисков: содержимое папок dists в соответсвующие папки dists1, dists2, … dists3, а содержимое папкок pool в папку pool (все в одну кучу)

Ну можно сказать что репозиторий почти готов :) остается совсем чуть-чуть. Идея заключается вот в чем - каждый диск, по сути, есть отдельный репозиторий.

Немного о структуре репозитория. Каждый репозиторий (как уже было сказано выше) состоит из 2х папок - dists и pool.

Папка dists cодержит в себе описание репозиториев и имеет структуру:

dists/<repository>/<section>/binary-<арch>/Packages.gz

<repository> - название репозитория, обычно называют по имени дистрибутива (gutsy, fiesty, etch,…)

<section> - раздел репозитория (main, restricted, universe, multiverse)

<arch> - архитектура (i386, amd64, …)

Packages.gz - файл с описаниями пакетов репозитория, обычный текстовый файл в котором описания пакетов разделяются пустой строкой.

Папка pool содержит файлы пакетов репозитори, ее структура такова:

pool/<section>/<group>/…/<subgroup>/<package.deb>

<group>, <subgroup> - папки для группировки пакетов

<package.deb> - пакет

Таким образом мы имеем - папки dists с одинаковым содержимым, которое надо объединить. Приступим:

1) Открываем консоль

2) Создаем папку, где будет храниться наш репозиторий и переходим в нее

$ sudo mkdir /path/to/our/repository/mirror && cd /path/to/our/repository/mirror

3) Создаем папки для описаний репозиториев на дисках (seq 1 6 - по количеству дисков с 1 по 6-ой)

$ sudo for i in`seq 1 6`; do mkdir dists$i; done

4) Создаем папку для пакетов репозитория

$ sudo mkdir pool

5) Копируем содержимое дисков - для этог вставляем диски по очереди и для каждого выполняем 2 команды

$ sudo cp /media/cdrom/dists/* dists<номер диска>/

$ sudo cp /media/cdrom/pool/* pool/

6) Перебираем все папки dists1 и их подпапки и распаковываем файлы Packages.gz.

$ sudo find dists* -regex ^dists[0-9]+/.*/Packages.gz -exec gunzip {} \;

7) Делаем аналогично предыдущему разу, только теперь перебираем все подпапки binary-<arch> и создаем аналогичные (со всей структурой) в MIRROR_PATH/dists

$ sudo for i in `find dists* -regex ^dists[0-9]+/.*/binary-[^\/]*$`; do mkdir -p `echo $i | sed -r ’s/dists[0-9]+/dists/’`; done

8 ) Объединяем все файлы Packages с разных дисков которые храняться в одноменных папках, например, на дисках 1 и 2 есть файлы:

- dists1/gutsy/main/binary-i386/Packages и

- dists2/gutsy/main/binary-i386/Packages,

тогда поочередно необходимо выполнить следующие команды:

- cat dists1/gutsy/main/binary-i386/Packages >> dists/gutsy/main/binary-i386/Packages и

- cat dists2/gutsy/main/binary-i386/Packages >> dists/gutsy/main/binary-i386/Packages

$ sudo for i in `find dists* -regex ^dists[0-9]+/.*/Packages`; do cat $i >> `echo $i | sed -r ’s/dists[0-9]+/dists/’`; done

9) Теперь остается только упаковать полученные файлы и удалить папки dists1,2,3,4,5,6. (Кстати, упаковывать файлы Packages вовсе не обязательно, но допустимо, да и место экономится, по моему опыту, примерно 75%)

$ sudo find dists* -regex ^dists/.*/Packages -exec gzip {} \;

$ sudo find dists* -regex ^dists[0-9]+$ -exec rm -rf {} \;

Вот и все теперь можно смело прописывать в /etc/apt/sources.list новый репозиторий. Для локального доступа строка будет выглядеть так:

deb file:///path/to/our/repository/mirror gutsy main restricted multiverse universe

PS. Если вы используете срез на 6-ти дисках, то вам необходимо добавить так же репозитории gusty-backports, gutsy-proposed, gutsy-updates и gutsy-security.
« Последнее редактирование: 10 Сентября 2010, 00:02:38 от stmc »

Оффлайн skinix

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #1 : 05 Февраля 2008, 23:06:35 »
Ещё способ

Статью писал сам
« Последнее редактирование: 16 Ноября 2009, 04:24:40 от ubuntar »
Ubuntu 7.10 64-bit

Оффлайн s0n1k

  • Активист
  • *
  • Сообщений: 269
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #2 : 06 Февраля 2008, 00:01:49 »
отлично

Оффлайн skinix

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #3 : 06 Февраля 2008, 00:11:00 »
ГУРУ прочитайте в документе

раздел ИНТЕРЕСНЫЙ ФАКТ

если бы дали ответ я бы подправил статейку.
Ubuntu 7.10 64-bit

Оффлайн skinix

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #4 : 06 Февраля 2008, 00:14:46 »
Да если гуру помогут

Прошу админов включить статью в https://ubuntu.ru/help
Ubuntu 7.10 64-bit

Оффлайн blind

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #5 : 06 Марта 2008, 13:08:23 »
подскажите, а как быть в такой ситуации:
есть пакеты которые ставятся самостоятельно из deb пакетов , в официальном репозитории их нет
по вашему совету я сделаю локальный репозиторий
но как быть дальше когда пакеты обновятся? перепаковывать Packages.gz думаю не самый лучший вариант
а так было бы здорово - подложил в свой репозиторий обновленный пакет и при следующем apt-get update/upgrade оно само обновилось
и не надо руками убивать старый пакет и ставить новую версию
как реализовать эту технологию?

Оффлайн KriK

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #6 : 07 Марта 2008, 22:51:18 »
ГУРУ прочитайте в документе

раздел ИНТЕРЕСНЫЙ ФАКТ

если бы дали ответ я бы подправил статейку.
Это не ошибка. Все правильно. Просто можно сделать репозитарий простым путем, а можно сложным, но правильным. Вот не совсем правильный, но тоже легкий способ. Создаешь папку, например ubuntu. В ней создаешь папку debs и пихаешь туда все деб пакеты. Потом в консоли:
cd ubuntu
mkdir dists
mkdir dists/gutsy
mkdir dists/gutsy/main
mkdir dists/gutsy/main/binary-i386
echo > debs.override
dpkg-scanpackages debs ./debs.override | gzip > ./dists/gutsy/main/binary-i386/Packages.gz
Вот теперь папку ubuntu можно заливать на фтп или использовать как локальный репозитарий с параметрами типа
deb путь/к_папке/ubuntu gutsy main
Остальное можно проработать по стандарту, если есть желание конечно.

Оффлайн KriK

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #7 : 07 Марта 2008, 22:55:33 »
подскажите, а как быть в такой ситуации:
есть пакеты которые ставятся самостоятельно из deb пакетов , в официальном репозитории их нет
по вашему совету я сделаю локальный репозиторий
но как быть дальше когда пакеты обновятся? перепаковывать Packages.gz думаю не самый лучший вариант
а так было бы здорово - подложил в свой репозиторий обновленный пакет и при следующем apt-get update/upgrade оно само обновилось
и не надо руками убивать старый пакет и ставить новую версию
как реализовать эту технологию?
Packages.gz - это индексы. Если их не обновить, то и не обновиться и инфа о пакетах. Не считывать же инфу синаптику каждый раз прямо с deb пакетов. Поэтому надо по-любому перепаковывать Packages.gz, но что в этом сложного и плохого то? Одна комманда. Можно вообще скрипт написать. Обновились пакеты, пишешь ./updaterep и все.

Оффлайн VolCh

  • Активист
  • *
  • Сообщений: 543
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #8 : 08 Марта 2008, 13:01:51 »
По-моему самый лучший это второй способ, только что сделал - он все делает по стандарту, и все ману будет соответствовать. даже в конфиг можно не лазить и в /mirrors по  дефолту лежит наше зеркало
 

Оффлайн VolCh

  • Активист
  • *
  • Сообщений: 543
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #9 : 10 Марта 2008, 08:27:10 »
Только вот обновляется из него только если вручную все остальные источники в sources.list закомментить.

В чем может быть дело не пойму :(

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #10 : 10 Марта 2008, 08:35:54 »
Если в sources.list написаны репозитории в интернете, то пакеты тянутся оттуда. Пока не знаю как это исправить. Кто-нибудь уже решил?..

Оффлайн vadim-nsk

  • Старожил
  • *
  • Сообщений: 1318
  • Жить надо так, как горит пламя!
    • Просмотр профиля
    • Linux в Новосибирске
Re: Создание локального репозитория
« Ответ #11 : 10 Марта 2008, 08:41:38 »
Пути создания локальных репозиториев слишком замороченные, но имеют право на существования.

Оффлайн VolCh

  • Активист
  • *
  • Сообщений: 543
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #12 : 10 Марта 2008, 08:55:20 »
Если в sources.list написаны репозитории в интернете, то пакеты тянутся оттуда. Пока не знаю как это исправить. Кто-нибудь уже решил?..
Возможно потому что, неподписан архив, видел такой варнинг при обновлении, надо как-то его подписать видимо. но что-то сходу не нашел инфы, как пару ключей делать и подпись
Пути создания локальных репозиториев слишком замороченные, но имеют право на существования.
Слышал, что есть пакеты какие-то сторонние для этого, чуть ли не с ГУИ, но хочется родными средствами, и, вроде бы, проще одной команды apt-move практически некуда

Оффлайн skinix

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #13 : 14 Марта 2008, 08:36:28 »
Только вот обновляется из него только если вручную все остальные источники в sources.list закомментить.

В чем может быть дело не пойму :(


все очень просто в файле sources.list есть приоритеты источникам.

так вот ты поставь свой локальный репозиторий 1вым в списке и решиш все проблемы.

Ubuntu 7.10 64-bit

Оффлайн Kolyok

  • Активист
  • *
  • Сообщений: 484
    • Просмотр профиля
Re: Создание локального репозитория
« Ответ #14 : 14 Марта 2008, 10:01:49 »
Цитировать
так вот ты поставь свой локальный репозиторий 1вым в списке и решиш все проблемы
Не решишь
Цитировать
все очень просто в файле sources.list есть приоритеты источникам
Приоритеты имеют именно доверенные источники, так что доверенные ключия для локального репозитория делать все-же придется.
Если кому интересно - точно на форуме темку про это видел - ищите - просто лень самому искать, чтобы ссылку дать на пост - спешу.
Суета... Все суета... Суета сует... Что пользы человеку от трудов его...
Умножая знания, умножаете скорбь Вашу...

 

Страница сгенерирована за 0.093 секунд. Запросов: 25.