LINUX.ORG.RU

Поругайте ebuild YaCy

 , , ,


0

2

Я неопытный писун ебилдов эмаксом, но вот попытался сотряпать такой ебилд. Просьба указать на недочёты.

yacy-1.68.20140209.9000.ebuild
# Copyright 2014 CarelessChaser
# Distributed under the terms of the GNU General Public License v3 or higher
# $HEADER: $

inherit eutils systemd versionator user

MAJOR_PV="$(get_version_component_range 1-2)"
REL_PV="$(get_version_component_range 3)"
SVN_PV="$(get_version_component_range 4)"

DESCRIPTION="YaCy - p2p based distributed web-search engine"
HOMEPAGE="http://www.yacy.net/"
SRC_URI="http://www.yacy.net/release/yacy_v${MAJOR_PV}_${REL_PV}_${SVN_PV}.tar.gz"
SLOT="0"
KEYWORDS="~x86 ~amd64"
DEPEND=">=virtual/jdk-1.6"
LICENSE="GPL-2"

IUSE="initscript"

S="${WORKDIR}/yacy"


pkg_setup() {
    enewgroup yacy
    enewuser yacy -1 -1 /var/lib/yacy yacy
}


src_install() {
    # remove win-only stuff
    find "${S}" -name "*.bat" -exec rm '{}' \; || die
    # remove sources
    rm -r ${S}/source || die
    rm ${S}/build.properties ${S}/build.xml

    # remove init-scripts
    rm ${S}/*.sh || die

    dodoc AUTHORS COPYRIGHT NOTICE gpl.txt readme.txt || die
    dodoc lib/*License || die

    yacy_home="${EROOT}usr/share/${PN}"
    dodir ${yacy_home} || die
    cp -r ${S}/* ${D}${yacy_home} || die

    rm ${D}${yacy_home}/{AUTHORS,COPYRIGHT,NOTICE,gpl.txt,readme.txt}
    rm -r ${D}${yacy_home}/lib/*License


    dodir /var/log/yacy || die
    chown yacy:yacy "${D}/var/log/yacy" || die

    dosym /var/lib/yacy /${yacy_home}/DATA || die

    systemd_newunit "${FILESDIR}"/${PN}.service ${PN}.service
}

pkg_postinst() {
    einfo "yacy.logging will write logfiles into /var/lib/yacy/LOG"
    einfo "To setup YaCy, open http://localhost:8090 in your browser."
}

0. Надо бы мне сделать компиляцию и по возможности отказаться от bundled-libs. Только в сборке java я пока ещё совершенно не разбираюсь.

1. Надо бы ещё добавить возможность выбора языков. Только сперва уточнить, можно ли в /usr/share/yacy/langstats/ просто оставить нужные, а все остальные удалить.

2. Наверное, можно безболезненно выкинуть мусор вроде addon/windowsService и addon/Notepad++.

UPD:
Я не хотел бы всё ставить в /opt, и решил начать распихивать файлы согласно FHS. Только здесь много вопросов, поскольку так близко с работой Java я сталкиваюсь впервые.

Но, например, был выбор — или патчить YaCy, чтобы оно писало свои данные в /var/lib/yacy, или просто сделать симлинк /usr/share/yacy/DATA → /var/lib/yacy (подсмотрел решение у Debian).

UPD²:
Здесь нет init-скрипта для OpenRC, мне пока его лень делать.

Какие ещё советы?

★★★★★

Последнее исправление: Chaser_Andrey (всего исправлений: 3)

Текущий юнит systemd

[Unit]
Description=YaCy

[Service]
Environment=CLASSPATH=.:htroot:lib/*
Environment="JAVA_ARGS=-Xmx600m -Xms180m -server -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsolr.directoryFactsolr.MMapDirectoryFactory"
ExecStart=/usr/bin/java $JAVA_ARGS net.yacy.yacy
User=yacy
WorkingDirectory=/usr/share/yacy

cast vurdalak

Chaser_Andrey ★★★★★
() автор топика

# Copyright 2014 CarelessChaser

ЧСВ зашкалило?

# remove sources

ЗОЙЧЕМ??

yacy_home=«${EROOT}usr/share/${PN}»

???

dodir ${yacy_home} || die

впервые вижу нужду в этом.

rm ${D}${yacy_home}/{AUTHORS,COPYRIGHT,NOTICE,gpl.txt,readme.txt}
rm -r ${D}${yacy_home}/lib/*License

упоролся?

а в остальном: java, systemd — не интересно.

funeralismatic ★★★
()
Ответ на: комментарий от funeralismatic

ЧСВ зашкалило?

Без понятия, что там принято писать, я написал так, как пишу в своих исходниках.

# remove sources

ЗОЙЧЕМ??

Потому что в данном случае ставится готовая сборка. Сорцы там вообще не нужны, зачем их копировать в /usr/share?

dodir ${yacy_home} || die

впервые вижу нужду в этом.

Сразу дальше идет команда

cp -r ${S}/* ${D}${yacy_home} || die
Если не будет ${yacy_home}, то куда оно будет копировать?

rm ${D}${yacy_home}/{AUTHORS,COPYRIGHT,NOTICE,gpl.txt,readme.txt}
rm -r ${D}${yacy_home}/lib/*License

упоролся?

Все эти файлы помещены в /usr/share/doc/, см. выше

dodoc AUTHORS COPYRIGHT NOTICE gpl.txt readme.txt || die
dodoc lib/*License || die

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от Chaser_Andrey

Упс, ебилда-то и не заметил. Завтра постараюсь вспомнить и потестить. Если заработает, положу в свой оверлей :3

vurdalak ★★★★★
()

1) Нет указанного EAPI - используется EAPI 0. Так новые ебилды писать не стоит. Текущий актуальный EAPI - 5;
2) RDEPEND=${DEPEND} подразумевается далеко не для всех EAPI. Поэтому если пакет зависит от явы не только во время сборки, но и во время работы - лучше прописать RDEPEND явно;
3) Удаления шлака лучше производить в src_prepare. Которая, в свою очередь доступна только с EAPI>=2;
4) || die для встроенных функций НЕ НУЖЕН при использовании EAPI>=4;
5) В pkg_postinst лучше использовать elog вместо einfo. А еще лучше - заюзать readme.gentoo eclass;
6) ROOT и EROOT лучше не использовать в src_* функциях, для этого есть EPREFIX. doins уже учитывает измененный ROOT - использовать ROOT в пути для doins попросту будет неправильно для корня отличающегося от /;
7) chown yacy:yacy лучше заменить на fowners;

Подробности - http://devmanual.gentoo.org - курим, просветляемся.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Нафига у тебя юз initscript, если нигде он не используется? Добавь юз systemd и в зависимости от него ставь или не ставь юнит.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Нафига у тебя юз initscript, если нигде он не используется?

Точно, юз добавил, а init-скрипт нет.

Добавь юз systemd и в зависимости от него ставь или не ставь юнит.

Я поддерживаю такое решение, а вот разработчики Gentoo — нет.

http://wiki.gentoo.org/wiki/Project:Systemd/Ebuild_policy

Ebuilds must not introduce USE=systemd in order to control unit file installation. Unit files do not require systemd installed, and follow the usual guidelines against small text files (bash completion, logrotate etc.).

Chaser_Andrey ★★★★★
() автор топика

Ещё оно долго ругалось на права. Оказалось, он на создал каталог /var/lib/yacy и не дал на него прав, а в /usr/share DATA это симлинк именно туда. МБ это от старой установки осталось, я не в курсе.

vurdalak ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

Короче, с EAPI=5 (на всякий случай поставил) и с вручную поправленными правами всё заработало. Похерило конфиг старой ноды, видимо он в другом месте хранился.

vurdalak ★★★★★
()
Ответ на: комментарий от const86

Если на счёт конкретно хедера — то я искренне не понимаю, в чём проблема. repoman помечает его как badheader, причём безосновательно.

http://devmanual.gentoo.org/ebuild-writing/file-format/ здесь указано, что

All ebuilds committed to the tree should have a three line header immediately at the start indicating copyright.

И ни слова про требование к хэдеру в пользовательском оверлее.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от const86

Кроме того, смысл требовать указывать в качестве автора Gentoo Foundation, если этот ебилд вообще никаким образом не одобрен членами Gentoo Foundation, и не включён в официальный проект?

В конце-концов, это же GPL, который не помешает распространению или модификации.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от Chaser_Andrey

Кроме того, смысл

Я и не обещал, что там будет смысл. И вообще, половина проверок репомана параноидальна. Можно написать корректный ебилд и поймать сто предупреждений. С другой стороны, почему бы и не поправить на всякий случай.

const86 ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

посмотри любой ебилд из дерева или оверлея отвечающего минимальным требованиям QA.
там видно что должно быть.

megabaks ★★★★
()
Ответ на: комментарий от megabaks

Как я уже выше написал, я согласен со всем, кроме требования стандартного хэдера с копирайтами Gentoo Foundation в чьем-то личном оверлее. Это уже если подходить к вопросу с лицензионной точки зрения.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от Chaser_Andrey

если будешь использовать в фунте, то можешь заменить Gentoo на Funtoo
я тебе разрешаю

megabaks ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.