Как добавить локальный репозиторий в ubuntu. Делаем свой локальный deb репозиторий (Debian, Ubuntu etc.) своими руками. Подпись локального репозитория своим ключом

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

Вот я и подумал, как бы сделать так чтоб эти самые скачанные программы мы могли бы устанавливать самым обычным образом при помощи команды apt-get ? Размышляя о этом я пришёл к мысли о том, а почему бы с этих самых пакетов не создать локальный репозиторий? Подумал, погуглил, взял главный инструмент системного администратора, админский бубен и начал делать.

Итак deb-пакеты у меня находятся там же где я их и оставил, до того как в качестве эксперимента переустановил систему, а именно в домашней директории в папке deb . У меня это /home/dante/deb , я описывал все это , у Вам же та директория куда Вы сохранили пакеты. Открываем терминал и переходим в папку с deb-пакетами. В моём случае в терминале команда выглядит так:

cd /home/dante/deb

Вы же должны ввести путь к своим deb-пакетам.
После того как Вы перешли в папку с сохранёнными deb-пакетами. Вводим следующую команду:

sudo apt-ftparchive packages ./ |gzip -9 > Packages.gz

Далее вводим пароль и ожидаем пока будет создан фаил Packages.gz
Теперь наш репозиторий практически задан, осталось его добавить в source.list . Обратно беремся за терминал. Открываем файл:

sudo nano /etc/apt/sources.list

У меня данный файл выглядит так:

deb file:///home/dante/deb ./
# deb cdrom:/ oneiric main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://archive.ubuntu.com/ubuntu oneiric main restricted
deb-src http://archive.ubuntu.com/ubuntu oneiric restricted main multiverse universe #Added by software-properties

## Major bug fix updates produced after the final release of the
## distribution.
deb http://archive.ubuntu.com/ubuntu oneiric-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu oneiric-updates restricted main multiverse universe #Added by software-properties


## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu oneiric universe
deb http://archive.ubuntu.com/ubuntu oneiric-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://archive.ubuntu.com/ubuntu oneiric multiverse
deb http://archive.ubuntu.com/ubuntu oneiric-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu oneiric-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu oneiric-backports main restricted universe multiverse #Added by software-properties

deb http://archive.ubuntu.com/ubuntu oneiric-security main restricted
deb-src http://archive.ubuntu.com/ubuntu oneiric-security restricted main multiverse universe #Added by software-properties
deb http://archive.ubuntu.com/ubuntu oneiric-security universe
deb http://archive.ubuntu.com/ubuntu oneiric-security multiverse

## Uncomment the following two lines to add software from Canonical"s
## "partner" repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
deb http://archive.canonical.com/ubuntu oneiric partner
deb-src http://archive.canonical.com/ubuntu oneiric partner

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
deb http://extras.ubuntu.com/ubuntu oneiric main
deb http://archive.ubuntu.com/ubuntu/ oneiric-proposed restricted main multiverse universe
deb-src http://archive.ubuntu.com/ubuntu/ oneiric-proposed restricted main multiverse universe
deb-src http://extras.ubuntu.com/ubuntu oneiric main

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

deb file:///home/dante/deb ./

Добавлять её лучше в самый верх файла, так как система сначала опрашивает те репозитории которые находятся в начале. Что я как Вы уже увидели я и сделал. У вас путь к папке может быть иной, только не забудьте в конце ./

Все репозиторий добавлен. Можете посмотреть на это в источнике приложений. Теперь Вам осталось лишь обновить списки пакетов. Сделать это можно в терминале при помощи команды:

sudo apt-get update

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

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

Но есть выход, можно сохранить все приложения на сервере в локальной сети, а затем распространять их на другие компьютеры этой сети когда потребуется. Локальный репозиторий Ubuntu - действительно быстрый и эффективный способ развертывания приложений, так как все необходимые приложения будут мгновенно получены с локального сервера на большой скорости. Таким образом, можно снизить трафик интернет и в итоге уменьшить ежегодные расходы на оплату интернета.

В этой инструкции я расскажу как настроить локальный репозиторий Ubuntu 16.04 двумя способами.

В этом способе мы скачаем все пакеты из публичного репозитория на жесткий диск сервера Ubuntu. Сначала нужно установить веб-сервер Apache. Он необходим для распространения пакетов по локальной сети:

sudo apt-get install apache2

Теперь установите apt-mirror:

sudo apt-get install apt-mirror

Создайте директорию куда будут скачиваться все пакеты:

sudo mkdir /myrepo

Теперь откройте файл /etc/apt/mirror.list и добавьте следующую строчку:

sudo vi /etc/apt/mirror.list

############ config ##################
#
# set base_path /var/spool/apt-mirror

set base_path /myrepo

Здесь /myrepo - адрес только что созданной папки. Также в этом конфигурационном файле можете указать репозитории, которые хотите использовать, мы будем использовать стандартные, но вы можете добавить и PPA. Если вы хотите использовать обе архитектуры и x64 и x32, репозитории для них нужно указать в файле отдельно.

Например, для x32 строчка будет начинаться deb-i386 а для х64: deb-amd64. Когда завершите с настройкой запустите загрузку пакетов командой:

В терминал будет выведено что-то вроде:

Downloading 162 index files using 20 threads...
Begin time: Wed Aug 5 16:09:16 2015
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Сейчас все пакеты из публичного репозитория Ubuntu загружаются и сохраняются в локальной папке. В нашем случае в папке /myrepo. В зависимости от вашей скорости интернет это может занять несколько часов. Отменить загрузку можно в любое время, когда вы ее возобновите она продолжится там, где вы ее прервали.

Не нужно вручную запускать эту команду каждый день для обновления репозитория, можно запланировать задание Cron. Для этого раскоментируйте следующую строчку в файле /etc/cron.d/apt-mirror:

sudo vi /etc/cron.d/apt-mirror

# Regular cron jobs for the apt-mirror package
#
0 4 * * * apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log

В этом примере Cron будет запускать обновление пакетов в четыре утра каждый день.

После заввершения загрузки проверим есть ли пакеты в каталоге /myrepo

Теперь нужно сделать пакеты доступными по сети. Для этого создадим символическую ссылку:

sudo ln -s /myrepo/mirror/us.archive.ubuntu.com/ubuntu/ ubuntu

Конфигурация клиентов

Настройка на клиентской машине не вызовет никаких трудностей. Просто откройте файл /etc/apt/sources.list и добавьте свой локальный репозиторий, так же как вы добавляли удаленный, только используйте ваш ip адрес вашей машины:

sudo vi /etc/apt/sources.list

[...]
deb http://192.168.1.102/ubuntu trusty universe
deb http://192.168.1.102/ubuntu trusty main restricted
deb http://192.168.1.102/ubuntu trusty-updates main restricted
[...]

Вот и все, здесь 192.168.1.102 - адрес сервера с репозиторием. Теперь обновим списки пакетов:

sudo apt-get update

Для установки программы достаточно выполнить стандартную команду:

sudo apt-get install package-name

Настройка apt-mirror ubuntu 16.04 завершена. Теперь клиентам не нужно подключение к интернету для загрузки пакетов. Они будут получать все пакеты и обновления с локального репозитория Ubuntu.

Способ 2: APT-Cacher

Создание локального репозитория ubuntu возможно не только одним способом. Apt-cacher немного отличается от apt-mirror. Он не скачивает все пакеты из репозитория, а только сохраняет и делает доступными для всех, те которые были один раз запрошены.

Сначала установите сервер Apache:

sudo apt-get install apache2

Затем apt-cahcer:

sudo apt-get install apt-cacher

Выберите способ запуска - daemon и нажмите ок:

Теперь нужно отредактировать /etc/default/apt-cacher, установив параметр autostart в 1.

sudo vi /etc/default/apt-cacher

apt-cacher daemon startup configuration file

# 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

# extra settings to override the ones in apt-cacher.conf
# EXTRAOPT=" daemon_port=3142 limit=30 "

Также можно настроить с каких ip можно будет получить доступ к кэшу, для этого откройте файл /etc/apt-cacher/apt-cacher.conf и отредактируйте соответствующую строчку: Например, разрешим подключение только компьютерам с ip от 192.168.1.20 до 192.168.1.30:

sudo vi /etc/apt-cacher/apt-cacher.conf

[...]
## Uncomment and set the IP range ##
allowed_hosts = 192.168.1.20 - 192.168.1.30
#denied_hosts =
[...]

После завершения настроек перезапустите apache:

sudo systemctl restart apache2

sudo service apache2 restart

Настройка на стороне клиента

Создайте файл sudo nano /etc/apt/apt.conf.d/01proxy и добавьте в него следующую строчку:

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

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

Здесь 192.168.1.102 адрес нашего локального репозитория. Осталось обновить списки пакетов:

sudo apt-get update

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

Выводы

Вот и все. Эта технология будет очень полезной системным администраторам, а также обычным пользователям, у которых слабый интернет. Если у вас остались вопросы, спрашивайте в комментариях!

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 (см.выше).