Debian — Создание локального репозитория (apt-mirror). Создание локального репозитория Локальный репозиторий пакетов

If ($answer_counter == 1): ?> endif; ?>

* Сделать автономный репозиторий через локальную сеть *

Установить локальный веб-сервер Apache >

# apt-get install apache2

По умолчанию в пакете Apache Apache будет установлен веб-сайт в /var/www в вашей системе. Для наших целей это прекрасно, поэтому нет причин делать что-то еще. Вы можете легко протестировать его, указав свой любимый браузер на http://localhost . Вы должны увидеть веб-страницу после установки по умолчанию, которая фактически хранится в /var/www/index.html

Создайте каталог репозитория пакетов Debian

Выбрал для этого каталог /var/www/debs . Под ним вы должны создать каталоги «архитектуры», по одному для каждой архитектуры, которую необходимо поддерживать. Если вы используете только один компьютер (или тип компьютера), вам понадобится только один - обычно «i386» для 32-разрядных систем или «amd64» для 64 бит. Если вы используете какую-либо другую архитектуру, я предположим, что вы, вероятно, уже знаете об этом. Теперь просто скопируйте файлы пакета «.deb» для данной архитектуры в соответствующие каталоги. Если вы сейчас укажете свой любимый веб-браузер на http://localhost/debs/amd64 (например), вы увидите список пакетов для 64-битных систем.

Создать файл Packages.gz

Теперь нам нужно создать файл каталога для использования APT. Это делается с помощью утилиты, называемой «dpkg-scanpackages». Вот команды, которые я использую для обновления пакетов AMD64 в локальной сети:

# cd /var/www/debs/ # dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz

Сделать известный репозиторий APT

Теперь остается только сообщить APT о вашем репозитории. Вы делаете это, обновляя файл /etc/apt/sources.list. Вам понадобится запись, подобная этой:

deb http://localhost/debs/ amd64/

Я использовал фактическое имя хоста моей системы вместо localhost - таким образом, код будет одинаковым для всех компьютеров в моей локальной сети, но localhost будет отлично работать, если вы используете только один компьютер.
Теперь обновите APT:

# apt-get update

Ответ дан user61928 05.09.2012 в 14:43

There are 4 steps to setting up a simple repository for yourself

1.Install dpkg-dev
2.Put the packages in a directory
3.Create a script that will scan the packages and create a file apt-get update can read
4. Add a line to your sources.list pointing at your repository

Install dpkg-dev

Type in a terminal

Sudo apt-get install dpkg-dev

Create a directory where you will keep your packages. For this example, we"ll use /usr/local/mydebs.

Sudo mkdir -p /usr/local/mydebs

Now move your packages into the directory you"ve just created.

Previously downloaded Packages are generally stored on your system in the /var/cache/apt/archives directory. If you have installed apt-cacher you will have additional packages stored in its /packages directory.

The Script update-mydebs

It"s a simple three liner:

#! /bin/bash cd /usr/local/mydebs dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Cut and paste the above into gedit, and save it as update-mydebs in ~/bin. (the tilde "~" means your home directory. If ~/bin does not exist, create it: Ubuntu will put that directory in your PATH. It"s a good place to put personal scripts). Next, make the script executable:

Chmod u+x ~/bin/update-mydebs How the script works:

dpkg-scanpackages looks at all the packages in mydebs, and the output is compressed and written to a file (Packages.gz) that apt-get update can read (see below for a reference that explains this in excruciating detail). /dev/null is an empty file; it is a substitute for an override file which holds some additional information about the packages, which in this case is not really needed. See deb-override(5) if you want to know about it.

Sources.list

Deb file:/usr/local/mydebs ./

to your /etc/apt/sources.list, and you"re done.

CD Option

You can burn the directory containing the debs to a CD and use that as a repository as well (good for sharing between computers). To use the CD as a repository, simply run

Sudo apt-cdrom add

Using the Repository

Whenever you put a new deb in the mydebs directory, run

Sudo update-mydebs sudo apt-get update

Now your local packages can be manipulated with Synaptic, aptitude and the apt commands: apt-get, apt-cache, etc. When you attempt to apt-get install, any dependencies will be resolved for you, as long as they can be met.

Badly made packages will probably fail, but you won"t have endured dpkg hell.

Ответ дан BigSack 16.08.2012 в 13:45

Создание аутентифицированного репозитория

Я рассмотрел ответы здесь и на других сайтах, и большинство из них (недостаток IMHO) - это то, что вы настраиваете не прошедший проверку подлинность репозиторий. Это означает, что вам нужно запустить apt-get с --allow-unauthenticated для установки пакетов из него. Это может представлять угрозу безопасности, особенно в сценариях, в которых пакеты, которые вы устанавливаете, могут быть не все из вашего локального репозитория.

Обратите внимание, что я не рассматривал здесь, как сделать его доступным по локальной сети, но это довольно общая конфигурация с использованием Apache или nginx (см. другие ответы здесь).

Настройка каталога репо

Mkdir /home/srv/packages/local-xenial cd /home/srv/packages/local-xenial

Затем добавьте такую строку в sources.list:

Deb file:/home/srv/packages/local-xenial/ ./

Добавление и удаление пакетов

удалить пакеты

Rm /home/srv/packages/local-xenial/some_package_idont_like

добавить пакеты

Cp /some/dir/apackage.deb /home/srv/packages/local-xenial

теперь запускается следующий скрипт, который генерирует файлы Packages, Release и InRelease и подписывает их с помощью закрытого ключа gpg:

#!/bin/bash if [ -z "$1" ]; then echo -e "usage: "basename $0" DISTRO where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\n The way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this script\n This script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory" else cd /srv/packages/local-"$1" # Generate the Packages file dpkg-scanpackages . /dev/null > Packages gzip --keep --force -9 Packages # Generate the Release file cat conf/distributions > Release # The Date: field has the same format as the Debian package changelog entries, # that is, RFC 2822 with time zone +0000 echo -e "Date: "LANG=C date -Ru"" >> Release # Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files) echo -e "MD5Sum:" >> Release printf " "$(md5sum Packages.gz | cut --delimiter=" " --fields=1)" %16d Packages.gz" $(wc --bytes Packages.gz | cut --delimiter=" " --fields=1) >> Release printf "\n "$(md5sum Packages | cut --delimiter=" " --fields=1)" %16d Packages" $(wc --bytes Packages | cut --delimiter=" " --fields=1) >> Release # Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files) echo -e "\nSHA256:" >> Release printf " "$(sha256sum Packages.gz | cut --delimiter=" " --fields=1)" %16d Packages.gz" $(wc --bytes Packages.gz | cut --delimiter=" " --fields=1) >> Release printf "\n "$(sha256sum Packages | cut --delimiter=" " --fields=1)" %16d Packages" $(wc --bytes Packages | cut --delimiter=" " --fields=1) >> Release # Clearsign the Release file (that is, sign it without encrypting it) gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release # Release.gpg only need for older apt versions # gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release # Get apt to see the changes sudo apt-get update fi

Пример содержимого файла conf / distributions

Origin: My_Local_Repo Label: My_Local_Repo Codename: xenial Architectures: i386 amd64 Components: main Description: My local APT repository SignWith: 12345ABC

Ответ дан happyskeptic 15.05.2016 в 09:33

Вы также можете настроить локальный исходный сервер на nginx и reprepro:

    Установить пакеты debian

    Sudo apt-get install reprepro nginx

    создавать каталоги для reprepro и редактировать его

    Sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp} $ cd /srv/reprepro/ubuntu/ $ sudo chown -R "whoami" . # changes the repository owner to the current user

    / SRV / reprepro / убунту / CONF / распределения

    Origin: Your Name Label: Your repository name Codename: karmic Architectures: i386 amd64 source Components: main Description: Description of repository you are creating SignWith: YOUR-KEY-ID

    / SRV / reprepro / убунт / CONF / опции

    Ask-passphrase basedir .

    Включить его в reprepro, построить его

    $ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \ # change /path/to/my-package_0.1-1.deb to the path to your package

    Конфигурация nginx:

    /etc/nginx/sites-available/vhost-packages.conf

    Server { listen 80; server_name packages.internal; access_log /var/log/nginx/packages-access.log; error_log /var/log/nginx/packages-error.log; location / { root /srv/reprepro; index index.html; } location ~ /(.*)/conf { deny all; } location ~ /(.*)/db { deny all; } }

    Оптимизируйте размер ковша:

    /etc/nginx/conf.d/server_names_hash_bucket_size.conf

    Server_names_hash_bucket_size 64;

Ответ дан elprup 03.07.2013 в 11:18

There are several reasons you may want to create a local repository. The first is that you want to save on bandwidth if you have multiple Ubuntu machines to update. For example if you had 25 Ubuntu machines that all needed updating at least once a week, you would significantly save bandwidth because you could do all but the repository locally.

Most organizations have decent bandwidth for their network gateways but this bandwidth is a precious commodity that needs to be used wisely.

Many organizations still have routers with 10MB or 100MB limits at the gateway but 1 GB network connections internally so bandwidth could be better used internally. The second reason for creating your own repository is that you can control what applications are loaded on your internal Ubuntu machines.

You can remove any applications your organization does not want to use on the local network from the repository that updates the machines. Even better, you can create a test box and test applications and versions before you allow them to roll out into your network assuring security and stability.

You first have to setup a mirror, to do that you need to Just press Ctrl + Alt + T on your keyboard to open Terminal. When it opens, run the command below.

Apt-get install apt-mirror

Once you have your set up apt-mirror you can start your download of the repository with this command.

apt-mirror /etc/apt/mirror.list 1

Как известно, в Ubuntu реализовано централизованное хранение информации обо всех основных программах в одном месте, для более удобного поиска и последующей их установки. Этим местом является менеджер пакетов Synaptic. (Система -> Администрирование -> Менеджер пакетов Synaptic) Для инсталляции программы вам необходимо её только найти в списке и отметить для установки, далее программа будет автоматически скачана из интернета и установлена.

Основные программы, которые могут пригодиться при работе в ОС Ubuntu, хранятся в так называемом репозитории на официальном сервере Ubuntu. Каждый раз, когда вы отмечаете для установки ту или иную программу в менеджере пакетов Synaptic, она сперва скачивается.

Но что делать, если у вас очень медленный или дорогой интернет, или может у вас вообще отсутствует доступ во всемирную сеть, или вы просто не хотите зависеть от подключения к интернету работая в Linux Ubuntu? Можно, конечно, скачать все необходимые программы (пакеты) по одной, а потом вручную устанавливать, но кто знает, какая программа вам пригодится в дальнейшем?

Решением данной проблемы является создание локального репозитория, т.е. полной или частичной копии официального репозитория у себя на жестком диске. Таким образом, однажды скачав весь репозиторий, у вас больше не будет зависимости от интернета.

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

1. Для создания копии (среза) репозитория у себя на жестком диске, существует специальная программа: debmirror. Соответственно, для начала вам её необходимо установить из того же менеджера пакетов Synaptic

или набрав команду в терминале:

sudo apt-get install debmirror

2. Создаём папку в домашней дирректории, в которой будет храниться срез репозитория (или даже несколько), к примеру, назовём её Repositories.

Перейдём в папку Repositories:

и создадим в ней файл скрипта с именем archive.ubuntulinux.org.sh:

gedit archive.ubuntulinux.org.sh

Вставляем в этот файл следующее:

#!/bin/bash -x
/usr/bin/debmirror --nosource -m --passive --host=archive.ubuntulinux.org \
--root=ubuntu --method=ftp --progress \
--dist=hardy,hardy-security,hardy-updates,hardy-backports \
--ignore-release-gpg --section=main,restricted,multiverse,universe \
--arch=i386 /полный/путь/к/папке/куда/нужно/скачать/репозиторий/

полный путь у вас должен выглядеть примерно следующим образом: /home/aidsoid/Repositories/ru.archive.ubuntu.com/

и сохраняем его. После сохранения нужно сделать файл запускаемым (chmod +x archive.ubuntulinux.org.sh).

Приведённый выше пример будет выкачивать репозиторий для Ubuntu 8.04 (Hardy Heron), если вы всё еще используете старую версию Ubuntu 7.10 (Gutsy Gibbon), то вам необходимо немного подправить этот скрипт, в частности, необходимо изменить значения параметра --dist с hardy на gutsy. Также следует обратить внимание на параметр --arch, который указывает на архитектуру вашего компьютера, значение i386 говорит о том, что будут скачаны пакеты для компьютера с архитектурой x86. Этот параметр также может принимать значение amd64 для 64-битных AMD или Intel компьютеров.

4. Ну вот, собственно говоря и всё, теперь можно запускать скрипт на выполнение, для этого в консоли, находясь в папке Repositories, наберите следующую команду:

./archive.ubuntulinux.org.sh

Скрипт начнёт свою работу. Весь репозиторий занимает около 20-30 Гигабайт, так что перед скачиванием обеспечьте свободное место на диске. В любой момент можно безболезненно прервать работу скрипта, нажатием сочетания кнопок Ctrl+C. При повторном запуске скрипта, он продолжит скачивание недокачанных пакетов. Также повторный запуск скрипта позволит обновить ваш локальный репозиторий, т.е. проверяется наличие новых версий программ и они также выкачиваются.

Примечание: пользователей Ubuntu 7.10 ожидает один маленький подводный камень, пользователям Ubuntu 8.04 беспокоиться не о чем. Существует ошибка в debmirror’е, из-за которой при повторном запуске скрипта удаляется папка pool из локального репозитория. Её необходимо исправить перед запуском скрипта. Описание ошибки тут: https://bugs.launchpad.net/ubuntu/+source/debmirror/+bug/136634

Лечится ошибка просто:
$ sudo gedit /usr/bin/debmirror
заменяете в редакторе строку local $/="\n\n"; на local $/="\n"; и сохраняете файл. Теперь обновление репозитория пройдёт без происшествий.

5. После того как скрипт скачается (это может занять длительное время), вы сможете использовать его, добавив deb строку в источники приложений. (Система -> Администрирование -> Источники приложений)

deb строка должна указывать на папку с репозиторием и выглядит примерно следующим образом:
deb file:///home/aidsoid/Repositories/ru.archive.ubuntu.com/ hardy main restricted multiverse universe

Предистория
Задумался недавно над тем, что будет если моя система вдруг откажется загружаться и мне не хватит ума или времени на то, чтобы восстановить ее. Тогда все прийдется начинать с нуля. А как же те пакеты, которые были верой и правдой скачаны в течении года? А если комп не один, а целая сеть?

Каждому качать по 800 метров обновлений совершенно не хочется. Долгое время я пользовался утилитой APTonCD, которая до поры, до времени меня устраивала. Но есть один нюанс: когда мы создаем репозитарий этой утилитой в iso образ (и/или пишем его на болванку), то после нет возможности добавить один-два пакета в репозитарий без пересоздания всего образа. А если принять во внимание тот факт, что в локальном кеше пакетов (из которого эта утилита и создает образы) они хранятся не вечно и со временем удаляются, то приходится хранить все файлы образов или рискуешь потерять важные пакеты, которые были скачаны сравнительно давно (поскольку их в кеше уже нет). В итоге собирается большое количество образов, в которых пакеты в большинстве своем повторяются. Выход только один. Создать полноценный локальный репозитарий, чем мы и будем заниматься.

Подготовка
Нам понадобится установить лишь один пакет: apt-move. Многие скажут, что и без него можно обойтись и будут правы, но я искал простой способ создать "правильный" репозитарий. Поэтому выполняем:
sudo apt-get install apt-move
Теперь нужно определится с папкой, где будет распологаться наш репозитарий. Я выбрал /home//mirror . Хотя имя не очень удачное, поскольку наш репозитарий не полное зеркало официального репа Ubuntu, а лишь часть его, которая содержит пакеты, хоть раз когда-либо скачанные, но переделывать скрипт мне уже лень. Поэтому пусть будет так:

Mkdir ~/mirror
cd ~/mirror

Теперь все готово к тому, чтобы перейти к следующему шагу - настройке.

Настройка
Для начала нам нужно настроить саму утилиту apt-move. Для этого выполним:
gksu gedit /etc/apt-move.conf
Откроется редактор с файлом настроек. Меняем значение переменной LOCALDIR на LOCALDIR=/home//mirror (желательно писать полный абсолютный путь, так надежней). Также меняем PKGCOMP на PKGCOMP=none. Это компрессия. Дело в том, что мной были обнаружены глюки во время использования компрессии apt-move, поэтому мы будем компрессировать все в нашем скрипте без использования этой функции apt-move. Все, сохраняемся и закрываем. Теперь выполним
gedit ~/mirror/create_repo.sh
В этот файл мы будем писать наш будущий скрипт. Начнем:

#!/bin/bash
sudo apt-move get
sudo apt-move move

Не буду подробно комментировать это, скажу лишь, что тут мы проверяем пакеты в локальном кеше и копируем их в локальный реп, придерживаясь официальной структуры папок. (вот зачем нам был нужен пакет apt-move). Далее вписываем:

Prefix=/home//mirror
cd $prefix

Mkdir -p $prefix/pool/main
mkdir -p $prefix/pool/partner
mkdir -p $prefix/pool/non-free

Mkdir -p $prefix/dists/stable/main/binary-i386
mkdir -p $prefix/dists/stable/partner/binary-i386
mkdir -p $prefix/dists/stable/non-free/binary-i386

Проверяем наличие необоходимых папок. Переменную prefix устанавливаем в соответствии с нашем расположением корня репозитария. Тут нужно сделать оговорку. Возоможно во время работы и обновления вашего репозитария в папке /pool у вас появятся и другие компоненты (здесь только три: main partner non-free), тогда вам нужно будет по аналогии добавить строчки простым копипастом с заменой на соотвествующие имена. Все просто... Идем дальше:

Dir=dists/stable/main/binary-i386
apt-ftparchive packages pool/main > $dir/Packages
gzip -9c <$dir/Packages >$dir/Packages.gz
bzip2 -9c <$dir/Packages >$dir/Packages.bz2
apt-ftparchive release $dir > $dir/Release
cat > $dir/Release << EOF
Archive: stable
Suite: stable
Component: main
Origin: APT-Move
Label: APT-Move
Architecture: i386
EOF

Создаем так называемые индексные файлы с описанием всех пакетов, которые входят в данную ветку дистрибутива. (здесь это main) Также создаем файл Release, который сожержит описание данной ветки. В общем итоге создается четыре файла:
Packages
Packages.bz2
Packages.gz
Release
собственно файл Packages и сопровождающий его файл Release. Эту часть кода вам нужно скопипастить столько раз, сколько веток в вашем репозитарии (у меня их три, поэтому я копирую еще два раза и меняю соответствующие имена на non-free и partner). Далее добавляем:

Dir=$prefix/dists/stable/
cat > $dir/Release << EOF
Origin: APT-Move
Label: APT-Move
Suite: stable
Codename: unknown
EOF

Echo Date: `date -u +"%a, %d %b %Y %T UTC"` >> $dir/Release
cat >> $dir/Release << EOF
Architectures: i386
Components: main non-free partner
Description: unknown
EOF

Apt-ftparchive release $dir >> $dir/Release

Здесь мы создаем файл Release для всего дистрибутива (у нас это stable) в целом, в котором кроме иной информации будет и контрольные суммы всех файлов Packages (и Release) во всех ветках, перечисленных в Components: (как видно у меня их по-прежнему три:)). Поэтому если у вас будут другие ветки, обязательно отредактируйте эту строчку. Сохраняем скрипт и после выполнения команды


можно уже создавать репозитарий и обновлятся из него. Но дело в том, что недоверенные репозитарии имеют меньший приоритет перед доверенными (или их еще называют подписанные). Поэтому мы сделаем нашему репозитарию такой же приоритет, как и официальному. Для этого нам понадобится ключ pgp. Если у вас еще его нет - его можно создать с помощью программы seahorse (Программы-Стандартные-Пароли и ключи шифрования). Можно конечно запустить из консоли программу gpg, но GUI мне как-то ближе. Создаем ключ и теперь нужно экспортировать его для того, чтобы клиенты могли добавить его к доверенным. Для этого выполним

Cd ~/mirror gpg --export <имя_вашего_ключа> > apt.key

Apt-ftparchive release $dir >> $dir/Release zenity --entry \ --title="Пароль ключа" \ --text="Введите Ваш пароль:" \ --entry-text "" \ --hide-text | gpg -abs --yes --passphrase-fd 0 -o $dir/Release.gpg $dir/Release

Как видно тут используется утилита zenity и gpg. Первая - это обычная "украшалка". Ну не люблю я унылую командную строку на англ. языке:) , поэтому тут вызывается графическое окно с предложением ввести пароль к вашему ключу. Вторая - непосредственно подписывает наш репозитарий и он становится доверенным. Пожалуй все, сохраняем, закрываем. Если вы еще не дали право выполнятся нашему скрипту, то дайте:

Sudo chmod +x ~/mirror/create_repo.sh
Правда я на этом еще не остановился. Поскольку мне нужно обновлять репозитарий из интернета на работе, а из репозитария обновлять систему дома, я решил весь локальный реп запаковывать в один файл и дома его распаковывать. Поэтому я дописал следующее:

Zenity --question \ --title="Архивирование" \ --text="Создать архив репозитария?" if [ "$?" = 0 ] ; then cd $prefix tar czf ../repo_`date +"%d-%m-%Y_%H-%M-%S"`.tar.gz ./ zenity --info --text="Архивирование завершено!" fi

Опять же используем zenity для вывода графических окон и, если пользователь согласен, делаем архив текущего репа в папку пользователя.

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

Gksu gedit /etc/apt/sources.list
и добавляем в начало файла такую строчку

Deb file:/home//mirror stable main non-free partner #Локальный репозитарий
Если у вас будут еще ветки кроме main non-free partner вам нужно не забыть их добавить. Кроме того, нужно добавить публичный ключ репозитария, которым мы подписали наш реп. Для этого нужно выполнить

Sudo apt-key add apt.key

Все, теперь обновляем список пакетов

Sudo apt-get update

P.S. У кого все-равно тянет из инета пакет, который есть в локальном репозитарии, прочтите этот топик http://forum.runtu.org/index.php/topic,5403.msg44916.html#msg44916
P.P.S. Может кто-то поможет с описанием кэширующего прокси-сервера Approx. Было бы неплохо его здесь применить.

Возник праздный интерес (пригодится обязательно, уверен, но пока праздный), допустим есть н-ное количество машин на 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.

НА СЕРВЕРЕ:

Установка:
$ 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