Настройка локальных репозиториев в Linux. Как создать локальный репозиторий APT? Добавление ключа в apt

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 будет далее изложено в данной статье.

Как работают репозитории пакетов в системах Linux?

Разработчики для поддержки своих дистрибутивов и комфортной работы пользователей снабжают (СУП) специальными ссылками. Они указывают на удалённые сервера, на которых хранятся самые актуальные и протестированные разработчиками пакеты ПО для данного дистрибутива. Благодаря этим ссылкам СУП «знает» когда и откуда загрузить и установить обновления пакетов. Эти ссылки могут указывать как на удалённый ресурс, так и на локальный. Во втором случае это может быть как другой компьютер в локальной сети, так и локальный накопитель и/или даже, если постараться - оптический привод.

Deb http://ru.archive.ubuntu.com/ubuntu/ bionic universe

Это и есть один из системных репозиториев, включенный в дистрибутив изначально. Существуют также репозитории, организованные отдельными проверенными пользователями, например:

Deb https://repos.codelite.org/ubuntu/ bionic universe

Это репозиторий, созданный разработчиком среды разработки CodeLite, специально для Ubuntu. И эта ссылка была добавлена в файл sources.list уже вручную самим пользователем-администратором компьютера. После чего становится возможной автоматическая установка актуальных и стабильных версий пакетов CodeLite, а также их обновление. А вот так может выглядеть ссылка на репозиторий, хранимый на оптическом носителе:

Deb cdrom:/ bionic main multiverse restricted universe

Как видно, ключевым словом, определяющим протокол доступа является значение, следующее после «deb». Для оптического носителя это «cdrom», а для доступа по сети - «https».
Получается, что источники репозиториев можно дополнять по собственному усмотрению, предварительно организовав соответствующим образом хранилище пакетов.

Использование прокси для организации локального репозитория

Данный метод подразумевает доступ к репозиториям через кеш на прокси-компьютере, который имеет прямое подключение в Интернет. Механизм работы такого локального репозитория заключается в следующем:

  • на какой-либо клиентской машине в обычном порядке запрашивается какой-либо пакет для установки/обновления через компьютер-сервер;
  • запрошенный пакет скачивается сервером, сохраняется в специально отведённом хранилище-кеше и далее становится доступным всем остальным клиентам;
  • в качестве распространителя пакетов клиентам выступает веб-сервер Apache, поэтому его установка обязательна.

Итак, для начала необходимо установить всё необходимое, т. е. веб-сервер и саму утилиту кеширования пакетов:

$ sudo apt-get install apache2 apt-cacher

При установке apt-cacher будет показан диалог настройки, в котором можно настроить нужное поведение утилиты, например задать автозапуск и работу в режиме демона. Также эти и некоторые другие важные настройки можно сделать (например с помощью редактора ) в конфигурационном файле /etc/default/apt-cacher . Для включения автозапуска apt-cacher нужно установить параметр AUTOSTART в значение «1»:

$ sudo nano /etc/default/apt-cacher . . . # Set to 1 to run apt-cacher as a standalone daemon, set to 0 if you are going # to run apt-cacher from /etc/inetd or in CGI mode (deprecated). Alternatively, # invoking "dpkg-reconfigure apt-cacher" should do the work for you. # AUTOSTART=1 . . .

$ sudo nano /etc/apt-cacher/apt-cacher.conf . . . ## Uncomment and set the IP range ## allowed_hosts = 192.168.1.105 - 192.168.1.125 #denied_hosts = . . .

Как можно видеть, просто указывается диапазон нужных IP-адресов. После сохранения сделанных настроек необходимо перезапустить веб-сервер Apache:

$ sudo service apache2 restart

$ sudo systemctl restart apache2

Теперь необходимо указать клиентам, куда им нужно обращаться для установки пакетов и обновлений. Для этого на клиентских машинах нужно создать файл /etc/apt/apt.conf.d/01proxy с помощью того же редактора nano:

$ sudo nano /etc/apt/apt.conf.d/01proxy

И добавить в него строку со следующей инструкцией:

Acquire::http::Proxy "http://192.168.1.100:3142";

Здесь в качестве адреса сервера, на котором установлен и работает apt-cacher указывается 192.168.1.100. Конечно, это может быть любой другой адрес, настроенный для этого сервера.

Теперь можно проверить работу локального репозитория (а точнее удалённого, но доступного через прокси), выполнив команду обновления данных о доступных пакетах:

$ sudo apt-get update

APT-MIRROR – полноценный локальный репозиторий

Данный способ является более «продвинутым» по сравнению с использованием apt-cache. Поскольку предполагает наличие полноценного хранилища пакетов прямо на локальном компьютере/сервере или в локальной сети. Но сначала такое хранилище необходимо создать, загрузив в него все необходимые пакеты. Как и в случае с apt-cache , в качестве распространителя пакетов выступает веб-сервер . Порядок настройки локального репозитория при помощи утилиты apt-mirror следующий:

  1. установка необходимых пакетов: apt-mirror и apache2;
  2. создание локального хранилища и настройка источников для загрузки, загрузка пакетов в хранилище;
  3. открытие доступа к готовому хранилищу для клиентов;
  4. настройка клиентов для использования локального репозитория.

Итак, установка необходимых утилит и пакетов:

$ sudo apt-get install apache2 apt-mirror

$ sudo mkdir /localrepo

Теперь в конфигурационном файле /etc/apt/mirror.list нужно отредактировать строку с инструкцией «set base_path». Указав в ней только что созданный каталог для хранилища:

$ sudo nano /etc/apt/mirror.list ############ config ################## # set base_path /localrepo

Далее, в этом же файле можно добавить необходимые репозитории, с которых будут загружены пакеты. Можно скопировать все стандартный репозитории из /etc/apt/sources.list .
Сохранив настройки можно запустить загрузку пакетов командой:

$ sudo apt-mirror

Это может занять длительное время, в зависимости от скорости соединения с Интернет. Данную команду очень полезно добавить в список регулярных процедур , чтобы локальный репозиторий обновлялся автоматически.

После того, как локальный репозиторий будет полностью загружен, его содержимое должно быть примерно следующим:

$ ls /localmirror mirror skel var

Для последующего удобства настройки клиентов полезно создать на хранилище, которое содержится в каталоге mirror:

$ cd /localrepo $ sudo ln -s /localrepo/mirror/us.archive.ubuntu.com/ubuntu/ ubuntu

Теперь ссылка ubuntu будет использоваться для задания репозиториев на стороне клиентов с помощью редатирования файла /etc/apt/sources.list:
Открыв этот файл (с использованием команды ) с помощью редактора nano, нужно теперь добавить в него следующие репозитории:

Deb http://192.168.1.100/ubuntu trusty universe deb http://192.168.1.100/ubuntu trusty main restricted deb http://192.168.1.100/ubuntu trusty-updates main restricted . . .

Здесь адрес 192.168.1.100 - это IP-адрес компьютера, на котором был создан и настроен локальный репозиторий.
Теперь, для работы с пакетами можно использовать обычные команды apt:

$ sudo apt-get update $ sudo apt-get install имя_пакета

Заключение

В заключение следует напомнить, что способы организации локальных репозиториев, описанные выше подходят для систем на базе формата debian-пакетов. Для систем, основанных на RPM следует использовать другие инструменты.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

Translation(s) : - Русский

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

С помощью утилиты apt-mirror

Подготовка и установка apt-mirror

Это основной способ зеркалирования, помимо официального ftpsync , т.к. он гораздо надёжней debmirror.

Устанавливаем пакет:

apt-get install apt-mirror

Создаём каталог /mnt/repo/debian и дополнительные mirror,var,skel. В нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.

mkdir -p /mnt/repo/debian/{mirror,var,skel}

Настройка apt-mirror

Заранее предположим что нам нужны:

  • Зеркало с готовыми к установке (бинарными) пакетами для amd64 jessie (stable)+ исходные тексты
  • Зеркало с готовыми к установке (бинарными) обновлениями безопасности amd64 jessie (stable)+ исходные тексты
  • Зеркало с готовыми к установке (бинарными) прочими обновлениями amd64 jessie (stable)+ исходные тексты
  • Зеркало Backports, с готовыми к установке (бинарными) пакетами для amd64 jessie (stable)+ исходные тексты
  • Зеркало необходимое для сетевой установки (udebs).

Примечание: Раскомментирование строк лишь заменяет настройки по умолчанию.

Редактируем конфигурационный файл /etc/apt/mirror.list:

############# config ################## # Базовый каталог, в нём будет создано локальное зеркало репозитория Debian set base_path /mnt/repo/debian # Пути к файлам зеркала, временным файлам и журналy выполнения apt-mirror # set mirror_path $base_path/mirror # set skel_path $base_path/skel # set var_path $base_path/var # set cleanscript $var_path/clean.sh # Архитектура, для которой создаётся зеркало. По умолчанию - это архитектура # системы, на которой работает apt-mirror (amd64,i386 или др.). Менять не ненужно, # т.к. ниже мы явно укажем и зеркало и архитектуру. # set defaultarch # Пусть к скрипту постобработки, по-умолчанию отсутствует, пока нам не нужен. # set postmirror_script $var_path/postmirror.sh # Не запускать скрипт постобработки set run_postmirror 0 # Служебные параметры, не трогаем set nthreads 20 set _tilde 0 # ############# end config ############## # Зеркало с пакетами для amd64 jessie (stable)+ исходные тексты deb-amd64 http://httpredir.debian.org/debian jessie main contrib non-free deb-src http://httpredir.debian.org/debian jessie main contrib non-free # Зеркало с обновлениями безопасности amd64 jessie (stable)+ исходные тексты deb-amd64 http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # Зеркало с прочими обновлениями amd64 jessie (stable)+ исходные тексты deb-amd64 http://httpredir.debian.org/debian/ jessie-updates main contrib non-free deb-src http://httpredir.debian.org/debian/ jessie-updates main contrib non-free # Зеркало необходимое для сетевой установки (udebs) deb-amd64 http://httpredir.debian.org/debian jessie main/debian-installer # Backports deb-amd64 http://httpredir.debian.org/debian/ jessie-backports main contrib non-free deb-src http://httpredir.debian.org/debian/ jessie-backports main contrib non-free # Удаляем файлы не индексированные в Release clean http://httpredir.debian.org/debian clean http://security.debian.org # Запрещаем очистку выбранной папки skip-clean http://httpredir.debian.org/debian/dists/jessie/main/installer-amd64/

Если необходимо хранить несколько зеркал для разных выпусков и архитектур, то добавляем новые строки аналогично для jessie amd64

Запуск и автоматизация apt-mirror

Для ручного запуска создания/обновления зеркала выполняем команду:

# apt-mirror

После загрузки индексных файлов apt-mirror сообщит, какой объём пакетов нужно получить:Begin time: Wed Jul 13 10:08:21 2016 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... End time: Wed Jul 13 10:08:34 2016 Begin time: Wed Jul 13 10:08:34 2016 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... End time: Wed Jul 13 10:08:40 2016 Processing indexes: Begin time: Wed Jul 13 10:08:46 2016 ...

Остаётся только дождаться завершения скачивания.

Для автоматической синхронизации и очистки зеркал нужно добавить строку в настройки cron и выставить подходящее время. Обновление официальных зеркал происходит каждые 6 часов: 3:00,9:00,15:00,21:00. Например так:

crontab -e 05 01 * * * apt-mirror >> /var/log/apt-mirror.log 05 03 * * * /mnt/repo/debian/var/clean.sh >> /var/log/apt-mirror.log

Настройка доступа к зеркалу

После завершения работы локальные копии всех указанных репозиториев окажутся в каталогах /mnt/repo/debian/mirror/имя_репозитория. Таким образом копия репозитория, которая была определена в файле mirror.list как:

deb-amd64 http://httpredir.debian.org/debian jessie main contrib non-free

окажется в каталоге /mnt/repo/debian/mirror/httpredir.debian.org/debian.

Доступ именно к этому каталогу можно открывать любым удобным для Вас способом - Web или FTP сервером. Для корректной работы обязательно необходимо добавить символические ссылки "stable","testing", "unstable" на те выпуски, которые вы зеркалируете (если они у вас есть).

ln -s /media/repo/debian/mirror/httpredir.debian.org/debian/dists/jessie /media/repo/debian/mirror/httpredir.debian.org/debian/dists/jessie/stable

C помощью утилиты debmirror

Установка пакета:

# apt-get install debmirror # mkdir /mnt/repo/debian

Опции

тип архитектуры (i386, amd64 и т.п.)

ветка дистрибутива (stable, testing, unstable)

не закачивать пакеты с исходным кодом

закачивать файлы переводов описаний пакетов

адрес сетевого репозитория

тип протокола передачи файлов (ftp, http, rsync)

показывать подробности загрузки

каталог, в котором будет создан ваш локальный репозиторий

показывать, что сейчас происходит

не скачивать исходные коды

S main,contrib,non-free

секции, которые нужно скачать

Ignore-release-gpg

игнорировать проверку gpg-ключа

Ignore-missing-release

не прерывается, если нету файла Release

По умолчанию debmirror создаёт зеркало из секций main, contrib, non-free, main/debian-installer.

Можно исключать секции ненужных вам пакетов:

--exclude-deb-section="games" - не будет зеркалировать все игры.

Имя секции обязательно в кавычках, иначе опция проигнорируется, это будет видно по общему объёму необходимых для скачивания пакетов выводимых программой в самом начале своей работы.

Принадлежность к определенной секции вашего пакета можно узнать по команде:

$ apt-cache show имя_пакета

Пример получения бинарного зеркала (без пакетов с исходным кодом) Debian Stable для amd64:

# debmirror --host=ftp.fi.debian.org/debian --dist=stable --arch=amd64 --method=ftp --ignore-release-gpg --nosource /mnt/repo/debian

C помощью утилиты reprepro

Установка пакета:

# apt-get install reprepro

Создание каталога /mnt/repo/debian, в нём будет создаваться локальный репозиторий пакетов. Желательно чтобы это был примонтированный логический раздел жёсткого диска, чтобы в случае переустановки дистрибутива с нуля, при форматировании корневого раздела (/), не лишиться репозитория совсем.

# mkdir /mnt/repo/debian

Cоздание каталога /mnt/repo/debian/conf и пустого конфигурационного файла distributions:

# mkdir /mnt/repo/debian/conf # touch /mnt/repo/debian/conf/distributions

В файл /mnt/repo/debian/conf/distributions указываем следующие параметры (пример для testing, архитектура i386):

Codename: squeeze Suite: stable Version: 6.x Origin: Debian Label: Debian 6.x Description: Debian Stable Repository Architectures: amd64 source Components: main contrib non-free SignWith: default DebIndices: Packages Release . .gz .bz2 DscIndices: Sources Release . .gz .bz2 Contents: . .gz .bz2

Описание параметров

Codename: squeeze

кодовое имя дистрибутива: sarge, etch, lenny, squeeze и т.д.

вертка дистрибутива: stable, testing ,unstable ,experimental

номер версии: squeeze - 6.x

возможно у вас не Debian, а его производная, например, Ubuntu, Kubuntu, если оригинал, то Debian

Label: Debian 6.x

смесь двух секций Origin и Version

Description: Debian testing repository

расшифровка, какой репозиторий

Architectures: amd64

архитектура дистрибутива: i386, amd64 и т.д.

Components: main contrib non-free

компоненты дистрибутива: main - СПО, contrib - СПО с зависимостями от несвободного, non-free - несвободное ПО

SignWith: default

можно не указывать, если не планируете подписывать репозиторий ключём gnupg

DebIndices: Packages Release . .gz .bz2

индексные файлы Packages для двоичных пакетов и файлы Release с контрольными суммами; 3 типа: несжатые, сжатые gzip, сжатые bzip

DscIndices: Sources Release . .gz .bz2

тоже самое только для пакетов с исходным кодом

Contents: . .gz .bz2

файлы со списком содержимого каждого пакета, пригодиться при поиске файлов в установленных и ещё неустановленных пакетах

Дополнительные важные опции:

AlsoAcceptFor: unstable experimental

другие ветки

UDebComponents: main contrib non-free

Udeb-пакеты

Инициализация репозитория

# cd /mnt/repo/debian # reprepro export # reprepro createsymlinks

Базовый каталог не задан, т.к. мы уже в нём находимся.

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

# reprepro -b /mnt/repo/debian --ask-passphrase includedeb squeeze /var/cache/apt/archives/*.deb

Параметр -b задаёт базовый каталог репозитория, в нашем случае это /mnt/repo, если вы находитесь уже в нём, то его можно не задавать, т.к. reprepro ищет файл conf/distributions в текущем каталоге.

Добавление Дебиановских исходников в репозиторий. Они состоят обычно из 2-3 файлов, главным (управляющим) из которых является dsc-файл. Чтобы все файлы исходников добавились в репозиторий, нужно использовать includedsc , остальное аналогично.

Добавление дебиановских исходников вместе с собранным из них пакетом (пакетами). После сборки пакета (пакетов) из дебиановских исходников, кроме самих пакетов и исходников появляется файл *.changes там же, где и пакеты. В этом файле перечислены как сами собранные пакеты, так и исходники. Поэтому для добавления всех этих файлов можно воспользоваться такой командой (в общем виде):

# reprepro -C РАЗДЕЛ include ВЕТКА /путь/до/файла/имя_файла.changes

Параметр --ask-passphrase подпишет ваш репозиторий с помощью вашего ключа GnuPG. Его можно не указывать, если не планируете подписывать репозиторий ключём gnupg. На не подписанные репозитории, aptitude будет выдавать предупреждение, что он ненадежный. Для использования подписанного репозитория, надо сделать выгрузку вашего ключа, а на машине использующей репозиторий:

# apt-key add /tmp/имя_вашего_ключа.asc

Добавление пакетов расположенных на CD/DVD Debian

Они уже лежат в иерархии каталога pool на дисках, но reprepro не поддерживает рекурсивный поиск по подкаталогам, но это достаточно легко обойти шаблоном (pool/*/*/*/*.deb). Пример:

# reprepro -b /mnt/repo/debian --ask-passphrase includedeb squeeze /media/cdrom/pool/*/*/*/*.deb

Она найдёт и добавит всё пакеты.

Удаление deb-пакета из репозитория

# reprepro remove ветка имя_пакета

Удаление пакетов вместе с исходниками либо всех пакетов, относящихся к одному собранному приложению (это означает, что данные пакеты в репозитории лежат в одной папке, причем имя папки и будет указывать на имя приложения):

# reprepro removesrc ветка имя_приложения

Использование

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

deb file:///путь_к_папке_репозитория/ ветка разделы например: deb file:///home/repository/ squeeze main contrib non-free

Подпись локального репозитория своим ключом

Генерирование ключа

Чтобы не было проблем с тем, что ключи созданы не там, рекомендуется все делать от учётной записи «root». Для генерирования ключа нужно выполнить команду:

# gpg --gen-key

Ответ на вопрос о типе ключа (обычно - 1):

Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection?

Ответ на вопрос о длине ключа (тоже по умолчанию - 2048):

DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)

Ответ на вопрос о сроке истечения ключа (0 - никогда не истекает):

Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0)

После этого может потребоваться подтвердить выбор:

Key does not expire at all Is this correct? (y/N) y

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

По завершении генерации будет выведена информация о сгенерированном ключе, такая как: - ID ключа - короткий набор символов: pub 1024D/5A81CBE3 2008-04-27 - отпечаток - длинный набор символов: Key fingerprint = уникальный отпечаток - и ещё немного информации. Самой важной информацией является ID ключа и отпечаток.

Экспорт ключа

Выполнить:

# gpg --armor --export > mylocalkey.asc

Где mylocalkey.asc это имя файла, в который внесен данный экспорт (новый файл, он создатся в процессе).

Добавление ключа в apt

Команда выполняется из того же каталога, что и предыдущая (из того, где находится mylocalkey.asc):

# apt-key add mylocalkey.asc

После этого можно проверить наличие ключа в списке apt:

# apt-key list

Выведет все ключи, в том числе и созданный.

Если нужно удалить ключ из apt, то это выполняется командой:

# apt-key del ID_ключа

В этом случае ID_ключа будет 5A81CBE3 (см.выше).

Постепенный перевод предприятия на 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. Получение пакетов

Зеркалирование проходит в три этапа:
  • Удаление неизвестных файлов (отключается опцией --nocleanup ниже);
  • Построение списка по индексным архивам и проверка на наличие в локальном репозитории.Для реализации вышеперечисленного создадим файл 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 следует не забывать, что после строчек с заданиями обязательно должна быть пустая строка, которая обозначается знаком "# ".
    p.s : Прошу прощения за отсутствие прилагаемых изображений, но в данном случае считаю их наличие просто неуместным.

    Недавно наткнулся на утилиту reprepro . Она помогает создавать локальный репозиторий deb-based дистрибутивов. Тут та меня осенило. Я давно собираю пакеты которых нет в официальных архивах потому каждый раз прогибаться по ним и устанавливать стало в падлу и я решил создать раздел с хранящимися там репозиториями таких пакетов. Так что бы при смене системы просто под монтировать его и пользать по надобности. Вещь как мне кажется полезнее чем сохранять кеш из apt-get.


    Кратко о reprepro
    Необходимо создать директорию для репозитория. У меня выбор падает на /repository потому для работы нужны права суперпользователя. А в принцепе если права записи на этот каталог будут только у администратора то есть большая вероятность что никто посторонний не сможет навредить вашему "архиву"
    # mkdir /repository
    переходим туда:
    Создаем папку /repository/conf/ для конфигурационных файлов
    # mkdir /repository/conf

    Создаем файл , добавляя нужные секции (подробнее об этом можно почитать в выводе команды man reprepro в разделе CONFIG FILES)
    # mousepad /repository/conf/distributions
    В оригинале текста объяснения автор предоставляет такой пример этого файла


    Origin: Debian
    Suite: testing
    AlsoAcceptFor: unstable experimental
    Codename: lenny
    Version: 5.0
    Architectures: i386 source
    Components: main contrib non-free
    UDebComponents: main contrib non-free
    Description: my local repository
    где:
    Origin - Имя дистрибутива = Debian
    Suite - ветка = testing
    AlsoAcceptFor - позволяет "засовывать" в репозиторий тестинга пакеты для других веток = unstable experimental, если опция не указана, то будет ругаться вот так при попытке добавить пакеты из анстэбл/экспериментал веток.
    Codename - кодовое имя ветки = lenny
    Version - версия ветки = 5.0
    Architectures - архитектуры, у меня x86 процессор, соответственно есть i386, также иногда закидываю в репозиторий исходники, поэтому есть source
    Components - разделы ветки, куда можно поместить deb-пакеты, а также исходники = main contrib non-free (можно еще насоздавать, сколько угодно)
    UDebComponents - разделы ветки, куда можно поместить udeb-пакеты (бывают и такие) = main contrib non-free (лучше, когда совпадают со строкой выше)
    Description - краткое словесное описание репозитория = например, my local repository

    Если каталог репозиторий не являеться текущим то в строке команды прописывают так называемую BASEDIR опции -b BASEDIR (в моем случае BASEDIR=/repository ).

    После создания файла /repository/conf/distributions инициализацируем репозиторий
    # reprepro export
    # reprepro createsymlinks

    Можно репозиторий заполнять пакетами. Для этого существует множество команд и опций, подробнее о которых можно узнать в man reprepro
    Наиболее употребляемые

    Добавление deb-пакета в репозиторий.
    В общем виде выглядит так:
    # reprepro -b BASEDIR -C РАЗДЕЛ includedeb ВЕТКА /путь/до/файла/имя_файла.deb
    Как я и описывал раньше это пример добавления пакета не из каталога с репозиторием, а из произвольного каталога. Если вы находитесь в каталоге репозитория то команда выглядит так же но без -b BASEDIR
    К примеру, для добавления пакета foo_1.0.deb , находящегося в папке /home/user/debian , в раздел main ветки lenny команда будет иметь следующий вид
    # reprepro -b /repository -C main includedeb lenny /home/user/debian/foo_1.0.deb

    Удаление deb-пакета из репозитория
    Для удаления одного deb-пакета из указанной ветки репозитория нужно дать такую команду
    # reprepro remove ветка имя_пакета

    К примеру, для рассмотренного пакета foo_1.0.deb , находящегося в ветке lenny даем такую команду:
    # reprepro remove lenny foo

    Для использования репозитория нужно добавить его в файл /etc/apt/sources.list в виде следующей строки (в общем виде):
    deb file:///путь_к_папке_репозитория/ ветка разделы

    Что для нашего примера будет выглядеть так:
    deb file:///repository/ lenny main contrib non-free

    Это базовое что я считаю достаточно в моем случае. Статья оригинала находиться