17 июня 2008 г.

Полноценный репозиторий из загруженных пакетов

Это будет не просто архив всех скачанных пакетов. С помощью Apache пакеты из такого репозитория сможет скачать кто угодно и откуда угодно (зная ваш IP, естественно). Это немного подправленная версия мануала:
http://forum.ubuntu.ru/index.php?topic=28366.msg197361

Установка Апача тут не рассмотрена. Этот процесс описан уже не единожды и очень популярно. Итак, чтобы не копировать никуда наши пакетики, скачанные в /var/cache/apt/archives, сделаем симлинк


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

Если нету своего ключа для подписи - лезем на http://letras.ru/2008/06/gpg-crossplatform-encryption/ и вчитываемся поглубже.
Второй скрипт - формирует файл 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

Иван Васильевич - это имя того, чьим ключом подписывали.
Примечание[boh]: у меня вылазила ошибка, что у рута нет прав доступа к файлу public.key Поэтому, я сначала вывел

gpg --export -a "Иван Васильевич" 

в консоль, а вывод скопировал в соответствующий файл, предварительно создав его.
Теперь про %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 ./

Использованные источники:
http://forum.ubuntu.ru/index.php?topic=8073



Комментариев нет: