Термин "порты" (Давайте уточним)

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Термин "порты"

Сообщение boogie »

Я вот тут задумался над значением сего прекрасного термина. Попытался четко сформулировать, что это, и не смог, посему полез на Википедию. Там вычитал следующее:
Ports collections (or ports trees, or just ports) are the sets of makefiles and patches provided by the BSD-based operating systems, FreeBSD, NetBSD and OpenBSD, as a simple method of installing software or creating binary packages. They are usually the base of a package management system, with ports handling package creation and additional tools managing package removal, upgrade, and other tasks. In addition to the BSDs, a few Linux distributions have implemented similar infrastructure, including Gentoo's Portage and Arch's Pacman.

Крайне познавательно. В общем, и целом, если слить всю воду, выйдет, что порты - это основа системы управления пакетами, подразумевающая определенную структуру. Через это вопросы: какую такую структуру? Что именно отличает порты от других систем управления пакетами? И что же, все-таки конкретно подразумевается под термином "порты"?
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Аватара пользователя
moog
Сообщения: 599
ОС: Archlinux

Re: Термин "порты"

Сообщение moog »

Думаю, после прочтения этого, а также вообще после чтения документации перед использованием чего-либо, вопросов возникнуть не должно). К тому-же, документация FreeBSD лучшая из всех, с чем я встречался.
Спасибо сказали:
Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Re: Термин "порты"

Сообщение boogie »

goom, я, видимо, неверно выразился. Меня интересуют не конкретно порты FreeBSD, a концепция коллекций портов вообще. Но за ссылку в любом случае спасибо, сейчас почитаю.
Меня интересует, что общего (и в чем разница) между портами FreeBSD, портами CRUX, портеджами Gentoo и ABS от Arch? И почему Grimoire от Sorcerer/SourceMage или Moonbase от Lunar не называют портами, или порт-подобными (я, конечно, просто мог не встечаться с этим, но все равно)?
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Civil
Сообщения: 199
ОС: Gentoo Current

Re: Термин "порты"

Сообщение Civil »

Крайне познавательно. В общем, и целом, если слить всю воду, выйдет, что порты - это основа системы управления пакетами, подразумевающая определенную структуру. Через это вопросы: какую такую структуру? Что именно отличает порты от других систем управления пакетами?

Крайне похоже, что во всём, называемом похожим на Порты, присутсвует одна характерная черта - в основе лежит shell-скрипт с последовательным описанием действий на определённых этапах установки приложения.
Покрайней мере посмотри Makefile к autoconf'у у FreeBSD, Pkgfile CURX'а и ebuild у gentoo.
1) Makefile (FreeBSD):

Код: Выделить всё

PORTNAME=    autoconf
PORTVERSION=    2.61
CATEGORIES=    devel
MASTER_SITES=    ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR=    autoconf
DISTNAME=    autoconf-${PORTVERSION}

MAINTAINER=    ade@FreeBSD.org
COMMENT=    Automatically configure source code on many Un*x platforms (2.61)

BUILD_DEPENDS=    gm4:${PORTSDIR}/devel/m4 \
        help2man:${PORTSDIR}/misc/help2man
RUN_DEPENDS=    gm4:${PORTSDIR}/devel/m4

BUILD_VERSION=    261
PLIST_SUB=    BUILD_VERSION=${BUILD_VERSION}
LATEST_LINK=    autoconf${BUILD_VERSION}
USE_BZIP2=    yes
USE_GMAKE=    yes
USE_PERL5=    yes
INFO=        autoconf${BUILD_VERSION} standards${BUILD_VERSION}

GNU_CONFIGURE=    yes
CONFIGURE_ENV+=    CONFIG_SHELL=${SH}
CONFIGURE_ENV+=    M4=${LOCALBASE}/bin/gm4
CONFIGURE_ARGS=    --program-suffix=${BUILD_VERSION} --without-lispdir \
        --infodir=${PREFIX}/info --mandir=${PREFIX}/man
CONFIGURE_TARGET=    --build=${MACHINE_ARCH}-portbld-freebsd${OSREL}

GENERIC_TOOLS=    config.guess config.sub    elisp-comp install-sh mdate-sh missing

MAN1_PAGES=    autoconf autoheader autom4te autoreconf autoscan \
        autoupdate config.guess config.sub ifnames
MAN1=        ${MAN1_PAGES:S/$/${BUILD_VERSION}.1/g}

post-patch:
    @(cd ${WRKSRC} && ${REINPLACE_CMD} -E 's,(PACKAGE=autoconf),\1${BUILD_VERSION},' configure)
    @(cd ${WRKSRC}/man && \
        for file in *.[1x]; do \
            ${REINPLACE_CMD} -E 's,([^-]auto)(conf|make|reconf|update|header|scan),\1\2${BUILD_VERSION},g; \
                        s,(config\.guess|config\.sub|ifnames),\1${BUILD_VERSION},g' $$file; \
        done)
    @(cd ${WRKSRC}/doc && \
        ${RM} -f *.info && \
        ${MV} autoconf.texi autoconf${BUILD_VERSION}.texi && \
        ${MV} standards.texi standards${BUILD_VERSION}.texi && \
        ${REINPLACE_CMD} -E 's,(autoconf)\),\1${BUILD_VERSION}\),g' autoconf${BUILD_VERSION}.texi && \
        ${REINPLACE_CMD} -E 's,(autoconf|standards)\.(info|texi),\1${BUILD_VERSION}\.\2,g' Makefile.in)

post-install:
.for FILE in ${GENERIC_TOOLS}
    @${INSTALL_SCRIPT} ${WRKSRC}/build-aux/${FILE} ${PREFIX}/share/autoconf${BUILD_VERSION}
.endfor
    @-${RM} -fr ${PREFIX}/libexec/autoconf${BUILD_VERSION}
    @${MKDIR} ${PREFIX}/libexec/autoconf${BUILD_VERSION}
.for i in autoconf autoheader autoreconf autoscan autoupdate ifnames
    @${LN} -sf ${PREFIX}/bin/${i}${BUILD_VERSION} \
        ${PREFIX}/libexec/autoconf${BUILD_VERSION}/${i}
.endfor

.include <bsd.port.mk>

2) Pkgfile (CRUX)

Код: Выделить всё

name=autoconf
version=2.61
release=1
source=(ftp://ftp.gnu.org/gnu/$name/$name-$version.tar.bz2)

build () {
    cd $name-$version
    ./configure --prefix=/usr --mandir=$PKG/usr/man
    make
    make prefix=$PKG/usr install
    rm -rf $PKG/usr/share/info $PKG/usr/share/emacs
}

3) Ebuild (Gentoo)

Код: Выделить всё

DESCRIPTION="Used to create autoconfiguration files"
HOMEPAGE="http://www.gnu.org/software/autoconf/autoconf.html"
SRC_URI="mirror://gnu/${PN}/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="2.5"
KEYWORDS="alpha amd64 arm hppa ia64 m68k mips ppc ppc64 s390 sh sparc ~sparc-fbsd x86 ~x86-fbsd"
IUSE="emacs"

DEPEND=">=sys-apps/texinfo-4.3
    >=sys-devel/m4-1.4.6
    dev-lang/perl"
RDEPEND="${DEPEND}
    >=sys-devel/autoconf-wrapper-4-r2"

src_compile() {
    (use emacs && type -p emacs) \
        && export EMACS=emacs \
        || export EMACS=no
    econf --program-suffix="-${PV}" || die
    # econf updates config.{sub,guess} which forces the manpages
    # to be regenerated which we dont want to do #146621
    touch man/*.1
    # From configure output:
    # Parallel builds via `make -jN' do not work.
    emake -j1 || die
}

src_install() {
    emake DESTDIR="${D}" install || die
    dodoc AUTHORS BUGS NEWS README TODO THANKS \
        ChangeLog ChangeLog.0 ChangeLog.1 ChangeLog.2
}

Как несложно заметить у них есть много общих черт.
"Кто управляет прошлым, тот управляет будущим; кто управляет настоящим, тот управляет прошлым" (Д. Оруэлл "1984")
Спасибо сказали:
Аватара пользователя
boogie
Сообщения: 21
ОС: Archlinux

Re: Термин "порты"

Сообщение boogie »

Действительно, общего много, да и концепция одна. Почему я сразу не посмотрел эти скрипты - непонятно, видимо сказывался поздний час. Добавлю еще, пожалуй, PKGBUILD от Arch:
4) PKGBUILD (Arch)

Код: Выделить всё

# $Id: PKGBUILD,v 1.21 2006/12/23 17:05:06 tpowa Exp $
# Maintainer: judd <jvinet@zeroflux.org>
pkgname=autoconf
pkgver=2.61
pkgrel=1
pkgdesc="A GNU tool for automatically configuring source code"
arch=(i686 x86_64)
url="http://www.gnu.org/software/autoconf"
depends=('awk' 'm4' 'diffutils' 'bash')
source=(ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
md5sums=('51f472f71a6a04850a0f0126bf594cdb')

build() {
  export MAKEFLAGS="-j1"
  cd $startdir/src/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}

Makefile от TA-Linux построен по тому же принципу, но там много инклюдов, и постить его тут бессмысленно, ибо в итоге очень уж он обширный. Sorcerer/SourceMage и Lunar отличаются только тем, что там инструкции для сборки в составе порта идут только тогда, когда нельзя обойтись простым "./configure, make, make install", в остальное время используется стандартная функция "default_build()".
В итоге выходит, что порты - это исходники (или линк, откуда их можно скачать) плюс сценарий их автоматизированой конфигурации, компиляции и установки? Однако тогда получается, что все source-based дистрибутивы работают через порты, потому как другого способа установки софта из исходников (кроме как заветные "./configure, make, make install":)) мне не известно.
"We all know Linux is great…it does infinite loops in 5 seconds." © Linus Torvalds
Спасибо сказали:
Civil
Сообщения: 199
ОС: Gentoo Current

Re: Термин "порты"

Сообщение Civil »

Просто сценарий. В котором указано откуда качать, куда и через какое место накладывать патчи, а так-же как это всё потом собирать (всякие cmake, autoconf и т.д.).
"Кто управляет прошлым, тот управляет будущим; кто управляет настоящим, тот управляет прошлым" (Д. Оруэлл "1984")
Спасибо сказали: