среда, 10 июня 2009 г.

Велосипед next. Собрать пакеты из установленной системы.

Несколько раз уже изобретал этот велосипед и вот наконец записываю, думать лениво.

Сначала рецепт (требует root)
dpkg --get-selections | mawk ' { print $1 } ' | xargs dpkg-repack
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
dpkg-scanpackages . /dev/null | gzip -9c > Sources.gz

Суть вещей
Сначала надо узнать какие пакеты вообще в системе есть
dpkg --get-selections

но эта команда выдает еще и статус пакетов что нам сейчас ненужно, потому берем только первый столбец
dpkg --get-selections | mawk ' { print $1 } '

вот так хорошо, теперь надо для каждого пакета из этого списка выполнить
dpkg-repack <имяпакета>
кстати только это действие и требует root остальное работает от пользователя.

сделать это можно вот таким заклинанием
dpkg --get-selections | mawk ' { print $1 } ' | xargs dpkg-repack

это заклинание соберет все пакеты из системы в одну директорию, но что бы превратить эту директорию в репозиторий не хватает двух файлов, это списки пакетов в репозитории, создаются командоами
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
dpkg-scanpackages . /dev/null | gzip -9c > Sources.gz

4 комментария:

morbo комментирует...

Вот этот момент уж больно подозрителен:

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
dpkg-scanpackages . /dev/null | gzip -9c > Sources.gz

В итоге получатся два одинаковых файла. Что там будет - список двоичных пакетов или список файлов для репозитория deb-src?

Unknown комментирует...

Получится именно два одинаковых файла. Там будет список пакетов имеющихся в локальном репозитории. Если в системе есть src пакеты то dpkg-repack так же соберет их в deb и отличить зерна от плевел не очень то получиться.

Однако при установке исходников apt ожидает увидеть файл Sources.gz со списком доступных исходников и он его найдет и исходники действительно будут доступны.

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

morbo комментирует...

Что-то по-моему на глупость это похоже. Как можно исходники запаковать в deb?

Исходники в репозиториях Debian состоят из трёх файлов: *.orig.tar.gz, *.dsc и *.diff.gz

Именно эти файлы и составляют "пакет" deb-src. Именно с ними умеет работать dpkg-buildpackage, apt-get build-dep, apt-get sources и прочие-прочие.

Unknown комментирует...

Да действительно чуш сморозил.Но смысл вообще в том, что при установке исходников apt ожидает найти этот файл и то что там будут все пакеты, это не помешает ему установить тот какой нужно.