Створення локального сховища. Робимо свій локальний deb репозиторій (Debian, Ubuntu etc.) своїми руками Як створити локальний репозиторій

Замість використання dpkg -i package_name.deb для установки, можна створити локальний репозиторій для пакетів, принесених на флешці або іншому носії, а потім використовувати synaptic / kynaptic (або apt-get install package_name).

1. Всі дії краще проводити як root

sudo su

2.Теперь встановіть пакет dpkg-dev. Він буде містити утиліту dpkg-scanpackages, яка нам і потрібна.

apt-get install dpkg-dev

3.Поместіте все.deb пакети в директорію наприклад, / myrepo (причому не безпосередньо в цю директорію, а в піддиректорії, розташовані в цій директорії)

4. Виконайте

cd / myrepo dpkg-scanpackages. / Dev / null | gzip -9c> Packages.gz

5. Тепер потрібно внести новий репозиторій в /etc/apt/sources.list. Вставте в /etc/apt/sources.list рядок (краще вставити ближче до початку, тому що apt-get (synaptic / kynaptic) ставить більш високий пріоритет джерела, що знаходиться раніше за інших)

deb file: / myrepo ./

6. Оновлення списку репозиторіїв

apt-get update

Якщо зміниться вміст директорії з пакетами, повторіть кроки 1,4.

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 (eg 14.04 is trusty) \ n The way to use this script is to do the changes to the repo first, ie 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 2 822 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.

Як відомо, в 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

Сподобалася стаття? Поділіться з друзями!