Срез от Penguinux

Привет всем гентушникам! С наступившим новым годом! Сайт "Penguinux" предлагает вашему вниманию срезы для Gentoo. Мы делаем полный и урезанный срез в конце каждого месяца. В урезанный срез входят последние стабильные и тестовые версии файлов. Получается где-то около 6-7 dvd.
Каждый месяц срез обновляется примерно на 4G, регулярно его перезаказывать просто неудобно. Поэтому мы делаем dvd с обновлениями за месяц.
На сайте также выкладывается список добавленных в течение текущего месяца пакетов. Обновляется он каждые 1-2 дня.
Здесь же выкладываются обнаруженные ошибки в дереве портежей (ошибки имен файлов, размеров, контрольных сумм).
Для работы со срезом идет разработка проекта depack. С его помощью можно определить файлы, необходимые для установки пакета, их наличие в системе и носители (диски, флешки...), на которых эти файлы находятся. Как это выглядит можно посмотреть здесь.

Наш сайт penguinux.ru.

Незнаю, как на

Незнаю, как на счет магазина, но лично меня заинтерисовал depack.
Накатал пока вот такой корявенький ебилд по мэйкфайлу.

# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-portage/depack/depack-0.78.ebuil,v 0.01 2008/01/05 00:48:43 Mellon Exp $

DESCRIPTION="DEpendencies PACKage"
HOMEPAGE="http://www.penguinux.ru/pr_Depack.php"
SRC_URI="http://penguinux.ru/projects/Depack/depack-0.78.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~ia64 ~ppc ~ppc-macos ~ppc64 ~x86"
IUSE=""

RESTRICT="mirror"

RDEPEND="dev-lang/python
	 app-i18n/enca"

S="${WORKDIR}/${PN}"

src_unpack() {
	CHARSET="$(echo ${LANG} | sed s/"^.*\."//)"
	unpack ${A}
	cd ${S}
	find src/ -maxdepth 1 -type f -exec enconv -L ru -x ${CHARSET} {} \; || die
}

src_compile() {
        echo
        einfo "Nothing to compile."
        echo
}

src_install() {
	insinto /usr/share/depack
		doins src/colorlib.py \
		      src/colorlib.pyc \
		      src/toolib.py \
		      src/toolib.pyc \
		      src/verlib.py \
		      src/verlib.pyc  || die
	insinto /usr/share/depack/locale	
		for x in src/locale/*
	        do
        	        doins  ${x} || die
        	done
	insinto /etc/depack
		doins src/config || die
	dobin src/depack || die
	dodir /var/depack/base || die
	dodoc AUTHOR COPYING || die
}

корявость заключается в неправильном складировании питоновских скриптов:

 * QA Notice: Precompiled python object files do not belong in /usr/share
 * /var/tmp/portage/app-portage/depack-0.78/image//usr/share/depack/toolib.pyc
/var/tmp/portage/app-portage/depack-0.78/image//usr/share/depack/verlib.pyc
/var/tmp/portage/app-portage/depack-0.78/image//usr/share/depack/colorlib.pyc

Пока не проверял, работает ли сама программка, и как именно она работает (утром постараюсь разобраться)

Было бы не

Было бы не плохо "прикрутить" возможность совместной работы с app-portage/getdelta :)

В смысле

В смысле как "прикрутить"? Можно, например, чтобы на выходе появлялись команды для скачки. Это оно?

getdelt'а перед

getdelt'а перед попыткой скачать delt'у проверяет наличие предыдущих версий sources. Вот и было бы неплохо, чтобы getdelta искала их и в базе, созданной скриптом.
Т. е. скрипт проверяет наличие в /etc/make.conf опции FETCHCOMMAND="/usr/bin/getdelta.sh \${URI}" и, при её наличии и при отсутствии нужных исходников на локальных носителях, предлагает возможные версии исходников из своей базы.

Смысл уловил

Похоже смысл уловил. Придется все равно поразбираться в скрипте /usr/bin/getdelta.sh. Попытаюсь что-нибудь сообразить.

Доработал

Доработал ебилдик до более-менее стандартного варианта.

# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-portage/depack/depack-0.78.ebuil,v 1.00 2008/01/04 23:59:43 Mellon Exp $

inherit python

DESCRIPTION="DEpendencies PACKage"
HOMEPAGE="http://www.penguinux.ru/pr_Depack.php"
SRC_URI="http://penguinux.ru/projects/Depack/${P}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~ia64 ~ppc ~ppc-macos ~ppc64 ~x86"
IUSE=""

RESTRICT="mirror"

DEPEND="sys-libs/glibc"

RDEPEND="dev-lang/python
	 >sys-apps/portage-2.1.2"

S="${WORKDIR}/${PN}"

convert_files() {
        CHARSET="$(echo ${LANG} | sed s/'^.*\.'//)"
        if [[ "x${CHARSET}" != "xKOI8-R" ]]; then
        	for x in src/*.py src/config src/depack
        	do
        	     iconv -f KOI8-R -t ${CHARSET} ${x} > ${x}.out || die
        	     mv ${x}.out ${x} || die
        	done
        fi
}
        	        
src_unpack() {
	unpack ${A}
	cd ${S}
	convert_files
}

src_compile() {
        echo
        einfo "Nothing to compile."
        echo
}

src_install() {
	insinto /usr/share/depack
                for x in src/*.py
                do
                        doins  ${x} || die
                done
	insinto /usr/share/depack/locale	
		for x in src/locale/*
	        do
        	        doins  ${x} || die
        	done
	insinto /etc/depack
		doins src/config || die
	dobin src/depack || die
	dodir /var/depack/base || die
	dodoc AUTHOR COPYING || die
}

pkg_postinst() {
        python_mod_optimize "${ROOT}"/usr/share/${PN}
}

pkg_postrm() {
        python_mod_cleanup "${ROOT}"/usr/share/${PN}
}

:)

Проверил

Проверил ebuild, все работает. Спасибо, Шаманыш!

Хотелось бы

Хотелось бы иметь определение путей
path_keywords
path_mask
path_use
через конфиг и командную строку, так как структура /etc/portage/package.* может сильно варьировать и отличаться от дефолтной.
Конкретно, это можно реализовать следующим образом. Возьмем для примера path_keywords.
a) Смотрим конфиг, если в нем определен path_keywords, то он должен буть определён как путь относительный к /etc/portage/package.keywords/, например, enlightenment/snapshot
b) Смотрим параметры командной строки, если в нем определен path_keywords, то он должен буть определён как путь относительный к /etc/portage/package.keywords/, например, enlightenment/cvs
c) Нигде не определено. Смотрим /etc/portage/package.keywords, если файл, то оставляем, иначе назначаем /etc/portage/package.keywords/common.

То есть, на bash это может выглядить примерно так:

path_keywords=""

source /etc/depack/config
if [[ "x${path_keywords}" != "x" ]] ; then
path_keywords="/etc/portage/package.keywords/${path_keywords}"
fi

until [ -z "$1" ]; do
if [ "$1" == "--path-keywords" ]; then
  path_keywords="/etc/portage/package.keywords/$2"
  shift
fi
shift
done

: ${path_keywords="/etc/portage/package.keywords"}
[[ -d ${path_keywords} ]] && export path_keywords="${path_keywords}/common"

:)

Почему берем относительный путь

Не могу понять почему берем относительный путь. Можно по-умолчанию в config'е прописать абсолютный, а те кому нужно уже подправят на свой.

потому, как

потому, как удобней и единообразней получится. По аналогии с layman.
Например, писать в командной строке только нужный файл "--path-keywords xeffects", или раздел и файл "--path-keywords games/fps" более удобно чем прописывать полный путь. И в конфиге, тоже самое.
:)

Извиняюсь, что долго отсутствовал

Извиняюсь, что долго отсутствовал - был на сессии. Постараюсь завтра сделать следующую версию depack.

Новая версия depack

Только что выложил depack на Penguinux.ru. Добавил ключи для путей к файлам /etc/portage/package.*.
Использовать так:

-U (--path_use) "путь" - путь задается относительно /etc/portage/package.use. Переменная PATH_USE в config содержит (если нужно) глобальный путь.
-K (--path_keyw) - путь задается относительно /etc/portage/package.keywords. Переменная PATH_KEYWORDS в config содержит (если нужно) глобальный путь.
-H (--path_mask) - путь задается относительно /etc/portage/package.mask. Переменная PATH_MASK в config содержит (если нужно) глобальный путь.

По умолчанию пути определены так:
/etc/portage/package.mask
/etc/portage/package.keywords
/etc/portage/package.use

Добавил привязку к getdelta. Работает следующим образом:
В качестве параметра depack передается пакет с ключом -g (--getdelta). Depack проверит наличие файлов в системе и на носителях и закажет патчи только на те файлы, которых нет. Пример:

#depack -g audacity

Также исправил различные мелкие ошибки. Чуть позже добавлю man-страницу.

Отлично,

Отлично, спасибо

:)

Настройки просмотра комментариев

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