Репозитории в 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.