Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Создание локального репозитария.  (Прочитано 3419 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Heretic_spb

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Добрый день all, вот решил поделиться кому интересно.
Стояла задача создания локального репозитария, делал по какой то из статей на форуме, но при скачке обновлений порой некогда, а потом забываешь.
Написал небольшую программку на C++ которая работает в режиме демона и каждые 15 минут копирует файлы папку /usr/local/debian/, а потом сканирует dpkg-scanpackages и создает собственно архив с описаниями пакетов.
Программа может работать не из под рута.
Для установки права рута нужны т.к. создает директории /usr/local/debian, /var/lib/sync и копирует запускной файл в /bin все этом можно найти в Makefile.
Ну и GPL собсвенно =)
ЗЫ: Критика полезна!

Александръ

  • Гость
Re: Создание локального репозитария.
« Ответ #1 : 26 Мая 2008, 03:24:45 »
Мдя, ну и извращения. Я локальный репозиторий создаю по другому. Все файлы после скачивания сохраняются в кэше. Устанавливаешь aptoncd и создаёшь локальный репозиторий. Можно использовать команду cp. Или я чего-то недопонял? В чём фишка твоего метода?   

Оффлайн MrFree

  • Активист
  • *
  • Сообщений: 290
  • вечно начинающий Linuxоид
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #2 : 26 Мая 2008, 05:17:39 »
Если посмотреть на ник, становится не понятно как не верующий в Linux человек пишет программы под несуществующую ось


а что итересная программа, посмотрю, может пригодится...
Ubuntu 22.04 /i5-7500/32GB/ssd512(boot/root/home)/3000HDD/GTX1063
Как правильно задавать вопросы

Александръ

  • Гость
Re: Создание локального репозитария.
« Ответ #3 : 26 Мая 2008, 07:26:20 »
а что итересная программа, посмотрю, может пригодится...

Объясните мне, пожалуйста, что она делает и в чём её полезность.

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #4 : 26 Мая 2008, 08:30:08 »
Написал небольшую программку на C++ которая работает в режиме демона и каждые 15 минут копирует файлы папку /usr/local/debian/, а потом сканирует dpkg-scanpackages и создает собственно архив с описаниями пакетов.
Откройте для себя cron:
15 * * * * cp -f /vat/cache/apt/archives/ /usr/local/debian && dpkg-scanpackages /usr/local/debian/ /dev/null > /usr/local/debian/Packages
(как-то так - по памяти)

А как практика по программированию демонов - полезно. :)
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Bers

  • Любитель
  • *
  • Сообщений: 60
    • Просмотр профиля
    • Домашняя страничка
Re: Создание локального репозитария.
« Ответ #5 : 26 Мая 2008, 09:49:08 »
У dpkg-scanpackages обнаружился неприятный баг с "%" в названии пакетов, понимал он их не правильно. Использую самодельную тулзу для локальных репозиториев, которая обходит этот не приятный баг.

А может лучше не копировать всё, а делать ссылки? Я так и делаю.

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #6 : 26 Мая 2008, 10:35:51 »
А может лучше не копировать всё, а делать ссылки? Я так и делаю.

У меня локальный репозиторий сделан так:

Стоит симлинк с /var/cache/apt/achives/ на /var/www/repo/packages/
В апаче создан виртуальный хост с корнем в /var/www/repo/
Сделан специальный скрипт для создания списка пакетов и их подписи.

По поводу % - это да... Поскольку на деле это выражается в том, что неправильно прописываются названия пакетов, в которых присутствует двоеточие, то решил я это с помощью modrewrite в самом апаче. Правило заменяет двоеточие в URL запроса на %3а, как они и лежат в /var/cache/apt/archives/
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Sebastian Gonsales

  • Участник
  • *
  • Сообщений: 173
  • null
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #7 : 26 Мая 2008, 11:56:00 »
А подскажите, как мне сделать. Хочу слить весь репозиторий и положить на локальном сервере в сети. Также интересует это
Цитировать
В апаче создан виртуальный хост с корнем в /var/www/repo/
Сделан специальный скрипт для создания списка пакетов и их подписи.

Оффлайн Heretic_spb

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #8 : 26 Мая 2008, 11:58:28 »
Linux хорош тем что одну задачу можно решить разными способами, я ее решил с помощью программы демона которая просматривает каждые 15 минут, aptoncd интересная программа, но она гуи + если стоит KDE ставит гномовские зависимости. А у меня весит она как процесс и сканирует каталог.
Я просто предлагаю еще один вариант создания локального репозитария только уже программным путем =)
Проблемы с % я видел на aptoncd притом если вы догодались "%3" в web это ":", можно дописать программу чтобы она "%3" конвертировала в ":", но это уже по желанию. У кого желание будет допишу =)

ЗЫ: хотел внести свои 5 копеек =)

Написал небольшую программку на C++ которая работает в режиме демона и каждые 15 минут копирует файлы папку /usr/local/debian/, а потом сканирует dpkg-scanpackages и создает собственно архив с описаниями пакетов.
Откройте для себя cron:
15 * * * * cp -f /vat/cache/apt/archives/ /usr/local/debian && dpkg-scanpackages /usr/local/debian/ /dev/null > /usr/local/debian/Packages
(как-то так - по памяти)

А как практика по программированию демонов - полезно. :)

Все правильно только ты копируешь все файлы, а я копирую от последней даты скаченного файала.
« Последнее редактирование: 26 Мая 2008, 12:02:35 от Heretic_spb »

Александръ

  • Гость
Re: Создание локального репозитария.
« Ответ #9 : 26 Мая 2008, 12:45:51 »
Heretic_spb, спасибо за ответ. А почему установлен такой странный временной промежуток? Ведь новые пакеты ставятся довольно редко, зачем сканировать кэш каждые 15 минут, а не, скажем, раз в день (раз в несколько часов)?

Оффлайн Heretic_spb

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #10 : 26 Мая 2008, 12:51:14 »
Heretic_spb, спасибо за ответ. А почему установлен такой странный временной промежуток? Ведь новые пакеты ставятся довольно редко, зачем сканировать кэш каждые 15 минут, а не, скажем, раз в день (раз в несколько часов)?

Я подумал что 15 минут это нормальный интервал. Можно вынести в переменную это время.
Если не устраивает можно изменить функцию sleep до 3600 и будет раз в час.
Как бы по желаю каждого человека. Исходник то открыт =)

Оффлайн EuPhobos

  • Любитель
  • *
  • Сообщений: 58
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #11 : 26 Мая 2008, 15:20:47 »
Наконец-то, нашёл подходящую тему  :)

Вообщем есть задача, почитал я эту тему, узнал несколько полезностей, но задача всё же немножко другая.
Есть сервак, и много работников на убунте.
Хотелось бы, что бы на серваке был локальный репозиторий, но не весь, (т.к. это слишком много, качать весь репозиторий убунты целиком) поясню:
Допустим, кто-то устанавливает mc, он качается с оригинального репозитория и откладывается на сервер. Второй человек начинает качать этот же mc, и для него уже не расходуется внешний трафик, нужный пакет просто берёться с сервера.
Особено это полезно будет для обновлений системы, что бы обновление закачалось только на сервак(локальный репозиторий), а остальные уже не тратя трафика, качали с локального сервака.
Т.е. требуется сказать системе, что репозиторий ЛОКАЛЬНЫЙ, а внешние отключить, а уже сервер сам пусть рулит, есть-ли запрашиваемые пакеты, если нет, он их качает отдаёт и сохраняет у себя локально для следующих запросов.
Возникает вопрос, как сделать из него хотя бы просто репозиторий, что бы убунтовские обращения он обрабатывал как нормальный репозиторий и отдавал пакеты, что для этого нужно, веб сервер?
И как бы сделать так, что бы он эти локальные-сохранёные пакеты проверял по версии, если есть более новая, он бы сам закачивал, и соответственно у пользователей загоралось бы уведомление о том, что новые пакеты данной программы доступны.
Думаю что понадобиться так же обновлять индексы пакетов, с оригинальных репозиториев.
Кто подскажет что читать и с чего начать?
« Последнее редактирование: 26 Мая 2008, 15:23:06 от EuPhobos »

Оффлайн Bers

  • Любитель
  • *
  • Сообщений: 60
    • Просмотр профиля
    • Домашняя страничка
Re: Создание локального репозитария.
« Ответ #12 : 26 Мая 2008, 15:46:32 »
#!/usr/bin/env python

import os

dir = '/var/www/repo'

os.system('rm %s/*.deb -f' % dir)
os.system('rm %s/Packages.gz -f' % dir)
os.system('ln /var/cache/apt/archives/*.deb %s/ -f' % dir)

for f in os.listdir(dir):
    if f.find("%") != -1:
        os.rename('%s/%s' % (dir, f), '%s/%s' % (dir, f.replace('%', '')))

os.system('dpkg-scanpackages %s /dev/null | gzip -9c > %s/Packages.gz' % (dir, dir))

Так вот я делаю, dir - заменить на свой путь.

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #13 : 26 Мая 2008, 15:58:13 »
Наконец-то, нашёл подходящую тему  :)

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

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Создание локального репозитария.
« Ответ #14 : 26 Мая 2008, 18:17:30 »
А подскажите, как мне сделать. Хочу слить весь репозиторий и положить на локальном сервере в сети. Также интересует это
Цитировать
В апаче создан виртуальный хост с корнем в /var/www/repo/
Сделан специальный скрипт для создания списка пакетов и их подписи.

Про виртуальный хост я немножко наврал оказывается. После установки апача по умолчанию есть виртуальный хост с корнем в /var/www/. Я просто создал там папку repo. Она доступна по адресу http://<IP или имя кома>/repo/

Как я уже говорил сделан симлинк
ln -s /var/cache/apt/archives /var/www/repo/packages

Скриптов два. Оба лежат прямо в /var/www/repo/
Один - создает списки пакетов (полную и гзипованую версию):
#!/bin/bash
dpkg-scanpackages . /dev/null > Packages
cat Packages | gzip -9c > Packages.gz

Второй - формирует файл Release (необходим для создания подписанных репозиториев) и собственно подписывает:
#!/bin/bash

cat > Release <<END
Archive: hardy
Version: 8.04
Origin: Ubuntu
Label: Simba's local Ubuntu Hardy Heron repository
Architecture: i386
MD5Sum:
 END

md5sum=$(md5sum Packages | cut -d ' ' -f1)
sizeinbytes=$(ls -l Packages | cut -d ' ' -f5)

printf " "$md5sum" %16d Packages\n" $sizeinbytes >> Release


md5sum=$(md5sum Packages.gz | cut -d ' ' -f1)
sizeinbytes=$(ls -l Packages.gz | cut -d ' ' -f5)

printf " "$md5sum" %16d Packages.gz\n" $sizeinbytes >> Release

gpg -bao Release.gpg Release

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

Еще нужно экспортировать публичный ключ:
gpg --export -a "Иван Васильевич" > /var/www/repo/public.key
Иван Васильевич - это имя того, чьим ключом подписывали.

Теперь про %3a... в папке /var/www/repo/packages/ лежит файлик .htaccess следующего содержания:
RewriteEngine On
RewriteRule ^(.*?):(.*)$ $1\%253a$2
Дабы это заработало, надо включить модуль rewrite для апача:
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
и разрешить использовать его в конфиге (например в /etc/apache2/apache2.conf):
<Directory /var/www/repo/>
AllowOverride All
</Directory>

Теперя этот репозиторий можно использовать следующим образом.
Импортируем ключ, которым подписывали:
wget -q http://<IP или имя компа>/repo/public.key -O- | sudo apt-key add -
А это в sources.list:
deb http://<IP или имя компа>/repo ./


Использованные источники:
https://forum.ubuntu.ru/index.php?topic=8073
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

 

Страница сгенерирована за 0.022 секунд. Запросов: 19.