howtoДелаем свой локальный deb репозиторий (Debian, Ubuntu etc.) своими руками

Возник праздный интерес (пригодится обязательно, уверен, но пока праздный), допустим есть н-ное количество машин на Ubuntu, и если их много, то трафик обращений к репозиториям всех машин будет по-сути прямо-пропорционален их количеству и если апдейт одной машины — это еще куда ни шло, то 20 или больше, это уже серьезно. С анлимами для корпоратива у нас в стране плохо, поэтому вопрос трафика часто стоит очень остро. Да и канал грузить почем-зря тоже не стоит, когда имеются простые и элегантные решения.

Если загуглить на данную тему, то прежде всего вылезают 2 популярных решения: apt-mirror и apt-proxy. Оба решения по-своему привлекательны, но поскольку для перевода этого всего в практическую плоскость надо осознать и сделать выбор, я расскажу вкратце особенности.

apt-mirror — это пакет, который делает полное локальное зеркало репозиториев. Оно устанавливается, настраивается, затем запускается и выкачивает все содержимое репозиториев, которые указали в настройках. В принципе хорошо, ведь все возможные пакеты будут доступны сразу и на высокой скорости. Но с другой стороны нам придется выкачать ВСЕ что нужно и не нужно. По-крайней мере этот нюанс поставил крест на выборе apt-mirror.

apt-proxy — работает по-несколько иному принципу, мне он понравился больше. Я считаю, что принцип даже более интеллектуален. Он не выкачивает все подряд, а качает только то, что было запрошено, то есть фактически при первом обращении он выкачивает нужный пакет из интернета, поэтому придется подождать, при последующих отдает его локальную копию. В общем кеширующее проксирование репозитория — наш выбор!

В руках у меня, для экспериментов, оказались 2 машинки. Небольшой маловажный сервачок на Debian Squeese и десктоп с Ubuntu 9.10 Karmic. (На дебиане решил развернуть прокси для репов кармика, на десктопе соответственно подправить sources.list)

Но ВНЕЗАПНО я не обнаружил в репах Squeese пакета apt-proxy. Побродив по интернетам, на странице проекта apt-proxy я познал, что жизнь штука сложная и что кто-то там разбился в автокатастрофе, возвращаясь с какой-то ITшной тусы. В итоге обещанный рефакторинг не закончен и в общем фиг его знает. Однако там же я увидел список клонов проекта, и о чудо, в дебиане оказался один из них: apt-cacher.

В-общем волею судеб дальше пойдет речь именно об apt-cacher, который оказался вполне доставляющим.

НА СЕРВЕРЕ:

Установка:
$ sudo apt-get install apt-cacher

Настройка:
$ sudo vim /etc/apt-cacher/apt-cacher.conf


Поскольку наши клиентские машины пользуют убунту, в конфиге прописываем path_map:
path_map = ubuntu ru.archive.ubuntu.com/ubuntu; ubuntu-updates ru.archive.ubuntu.com/ubuntu ; ubuntu-security security.ubuntu.com/ubuntu ; ubuntu-partner archive.canonical.com/ubuntu


Дефолтный порт apt-caher — 3142. Для того, чтобы повесить его на порт <1024, надо запускать его из под рута, что в целом не нужно.

Таким образом получаем следущие связки:
http://localrepo:3142/ubuntu   =>   http://ru.archive.ubuntu.com/ubuntu
http://localrepo:3142/ubuntu-updates   =>   http://ru.archive.ubuntu.com/ubuntu
http://localrepo:3142/ubuntu-security   =>   http://security.ubuntu.com/ubuntu
http://localrepo:3142/ubuntu-partner   =>   http://archive.canonical.com/ubuntu


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

включаем автозапуск демона:
$ sudo vim /etc/default/apt-cacher

Устанавливаем значение:
AUTOSTART=1

Рестартим:
$ sudo /etc/init.d/apt-cacher restart

Вуаля. Все готово к работе.

НА ДЕСКТОПНОЙ МАШИНЕ:

Теперь вносим наш репозиторий в sources.list десктопной машинки:
$ sudo vim /etc/apt/sources.list


Комментируем там все и пишем свои строчки:
#local repo
deb http://localrepo:3142/ubuntu/ karmic universe multiverse main restricted
deb http://localrepo:3142/ubuntu-updates/ karmic-updates universe multiverse main restricted
deb http://localrepo:3142/ubuntu-security/ karmic-security universe multiverse main restricted
deb http://localrepo:3142/ubuntu-partner/ karmic partner


Ну и пробуем:
$ sudo apt-get update


Вот так мы легко и просто обмазались локальным апт-прокси. =)
Удачи!
  • +14
  • Procion
  • 17 апреля 2010, 13:09

Комментарии (12)

  • avatar
  • SaT
  • 17 апреля 2010, 13:13
  • #
  • 1
Напишите пожалуйста статейку о том как создать установочный дистрибутив на основе Debian(со своими пакетами и настройками).
Локальный репозитарий нужная вещь, спасибо, +1.
Подобную задачу никогда не решал.

Из интересного могу найти время и описать создание своего собственного лайфсиди/usb на базе убунтовского с блекджеком и…. Было дело, создавал себе такой для автоматизации установки готового образа системы на компьютеры.
Но это не было дистрибутивом, это была именно готовая система, которую лайф-usb просто копировал на диск в полностью автоматическом режиме.
В принципе есть статья есть но вот обновить бы её, то что я пробовал по этой статье собрать и столкнулся с кучей ошибок и проблем. (Обновить — имелось в виду заново написать исходя из старой статьи и про сборке брать новый дистрибутив и т.д.)
Может просто сделать работу над ошибками?
Можно и так))) habrahabr.ru/blogs/linux/40619/
Эталонную систему лучше делать debootstrap'ом.
А остальные проблемы в чем заключались???
Мои действия:

Я установил apt-move в файле /etc/apt-move.conf я прописал путь LOCALDIR=/home/sat/debian, всё это дело сохранил и ввёл команду apt-move update, далее в папку /home/sat/debian я скопировал все файлы debian-testing-i386-netinst.iso ( caesar.acc.umu.se/cdimage/daily-builds/daily/arch-latest/i386/iso-cd/debian-testing-i386-netinst.iso ) после этого создал папку /home/debian/indices и вставил туда файлы вида override.sid.хххх скаченные с ftp.fr.debian.org/debian/indices/ (все эти файлы распакованы из архива) далее создал файл /home/debian/apt.conf в котором было написано wiki.debian.org/DebianCustomCD/PoolAptConf только была изменена одна строчка ( Codename «etch»; = Codename «sid»; ), так же я создал файл mycd.conf в котором было это wiki.debian.org/DebianCustomCD/PoolPackagesGzConf естественно в этом файле было изменено слово sarge на sid, и вот после того как я ввоже команду apt-ftparchive -c apt.conf generate mycd.conf мне выбивает ошибку:
sat@SaT-Debian:~/debian$ apt-ftparchive -c apt.conf generate mycd.conf 
E: Не удалось открыть файл /debian/dists/sid/main/binary-i386/Packages.gz.new - open (2: Нет такого файла или каталога) 
E: Не удалось открыть файл /debian/dists/sid/main/binary-i386/Packages.new - open (2: Нет такого файла или каталога) 
E: Error processing directory pool/main 
E: Не удалось открыть файл /debian/dists/sid/contrib/binary-i386/Packages.gz.new - open (2: Нет такого файла или каталога) 
E: Не удалось открыть файл /debian/dists/sid/contrib/binary-i386/Packages.new - open (2: Нет такого файла или каталога) 
E: Error processing directory pool/contrib 
E: Не удалось открыть файл /debian/dists/sid/non-free/binary-i386/Packages.gz.new - open (2: Нет такого файла или каталога) 
E: Не удалось открыть файл /debian/dists/sid/non-free/binary-i386/Packages.new - open (2: Нет такого файла или каталога) 
E: Error processing directory pool/non-free 
Packages done, Starting contents. 
Done. 0B in 0 archives. Took 0с


Пробовал всё это делать и под рутом итог один.
Даже после исправления этой ошибки проблемы не закончились.
как я исправил эту ошибку:
Я переименовал папку которая была /debian/dists/Squeeze в /debian/dists/sid и из файла mycd.conf я удалил:
BinDirectory "pool/non-free" {
      Packages "dists/sarge/non-free/binary-i386/Packages";
      BinOverride "override.sarge.non-free";
         ExtraOverride "override.sarge.extra.non-free";
     };
ай-да в личку… запилим тебе дистрибутивчег потихоньку… потом состряпаем howto.
Я решил не создавать собственный дистрибутив, а пойти другим путём, я создам файл.sh в котором соберу все команды которые установят и сделают всё что мне нужно и после установки чистой системы запущу его. Вот такой у меня файл пока что получился: 31bel.ru/debian/debian.sh
Ну тоже вариант. =)
ps. А работать в ней chroot'ом.
Благодарю. Именно это мне предстоит делать в ближайшем будущем =)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.