+ -
当前位置:首页 → 问答吧 → 有没有不依赖服务器的版本控制软件?

有没有不依赖服务器的版本控制软件?

时间:2006-03-30

来源:互联网

冒出这个想法是因为希望大家共享 SlackBuild 脚本。如果这个问题太白痴了,别笑话我,呵呵。另外,为什么 Pat 不用 Makefile 替代那些编译脚本?最近用 Makefile 的方式写了俩编译脚本,感觉比 shell script 方便,而且出错的机会也小些。

作者: shannleon   发布时间: 2006-03-30

能不能贴个样本出来看看?

版本控制的问题,看看这篇文章。

http://www.linux.com/article.pl?sid=06/03/02/174227

不过我还是不太理解你的意思。

作者: seamonkey   发布时间: 2006-03-30

不好意思,小弟是个菜鸟,菜鸟的问题是比较难理解。

CVS这样的版本控制软件需要个服务器,下源码都得连上这个服务器。分享 SlackBuild 这种小东西,有没有什么不需要服务器的版本控制软件?有点像 P2P 类型的。唉,我也就是突发奇想。高手们别笑话了。

Makefile 的问题是顺便一问。在尝试把我的 SlackBuild 脚本变成 Makefile 。现在我这个小小的库里只有 4 个软件:kmplayer kaffeine fcitx amarok 。还在找错误中,我自己都不信任。学学走走吧。

昨天才第一次看了一下 Makefile 的写法。说实在的,不懂。只是觉得 make 可以帮忙排除掉一些错误比较方便。写了个很初级的,当个示例,明白我意思就得了(我知道我写得很烂)。

目录结构是
slackbuilds/{chinese,multimedia,mk,distfiles,packages}
kaffeine 就是 slackbuilds/multimedia/kaffeine

make fetch 下载源码
make extract 解压源码,放在 /tmp/work 底下
make build 编译
make package 打成 Slackware 包。
现在基本还是一步步来,装个软件要用 make fetch build package clean 以后再搞一条龙的服务吧。

这是 kaffeine 的 Makefile :
代码:
# $Id: Makefile,v 1.1 2006/03/30 18:15:08 shannleon Exp $

NAME = kaffeine
VERSION = 0.8
EXT = tar.bz2
SITE = http://jaist.dl.sourceforge.net/sourceforge/kaffeine

PREFIX = /opt/kde

OPTS = --without-dvb
OPTS += --without-gstreamer
OPTS += --without-oggvorbis
OPTS += --without-lame

include ../../mk/slack.build.mk
这是真正干活的:
代码:
# $Id: slack.build.mk,v 1.1 2006/03/30 18:15:46 shannleon Exp $

NAME    ?=
VERSION ?=
EXT     ?= tar.bz2
SITE    ?=
#----------------------------------------------------------------------
ARCH    ?= i686
CPU     ?= athlon64
BUILD   ?= 1yjs
CC      ?= gcc
CXX     ?= g++
CFLAGS  ?= -march=${ARCH} -mtune=${CPU} -O2 -pipe
CXXFLAGS        ?= ${CFLAGS}
PREFIX  ?= /usr
OPTS    += 
#----------------------------------------------------------------------
REALNAME        = ${NAME}-${VERSION}
FULLNAME        = ${REALNAME}.${EXT}
PORTNAME        = $(subst -,_,${NAME})
PORTVERSION     = $(subst -,,${VERSION})
PKGNAME = ${PORTNAME}-${PORTVERSION}-${ARCH}-${BUILD}.tgz
DISTFILES       = ${CWD}/../../distfiles
PACKAGES        = ${CWD}/../../packages
FETCHCMD        ?= /usr/bin/wget
TAR ?= /bin/tar
#----------------------------------------------------------------------
CWD     = $(shell pwd)
TMPDIR  = /tmp/work
SRCDIR  = ${TMPDIR}/${REALNAME}
PKGDIR  = ${TMPDIR}/package-${NAME}
DOCDIR  = ${PKGDIR}/usr/doc/${REALNAME}
#----------------------------------------------------------------------

## RULES
#
.PHONY: fetch extract build package clean

all:

##### fetch
#
fetch: ${FETCHCMD}
ifneq ($(shell [[ -f ${DISTFILES}/${FULLNAME} ]] && echo 0),0)
        @echo " ==> Fetching ${DISTFILES}/${FULLNAME} "
        cd ${DISTFILES} && \
        ${FETCHCMD} ${SITE}/${FULLNAME}
        @echo " ==> Done fetching "
endif

##### extract
#
extract: ${DISTFILES}/${FULLNAME}
ifneq ($(shell [[ -d ${SRCDIR} ]] && echo 0),0)
        @echo " ==> Extracting ${DISTFILES}/${FULLNAME} "
        mkdir ${TMPDIR}
ifeq (${EXT},tar.bz2)
        ${TAR} jxvf ${DISTFILES}/${FULLNAME} -C ${TMPDIR}
else
        ${TAR} zxvf ${DISTFILES}/${FULLNAME} -C ${TMPDIR}
endif
        @echo " ==> Done extracting "
endif

##### build
#
build: extract ${SRCDIR}
        @echo " ==> Building ${REALNAME} "

        cd ${SRCDIR} && \
        CC="${CC}" CXX="${CXX}" \
        CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}"   \
        ./configure --prefix=${PREFIX} ${OPTS} &&       \
        make && \
        make install DESTDIR=${PKGDIR}

        mkdir -p ${DOCDIR}
        cp $(wildcard ${SRCDIR}/[A-Z]*) ${DOCDIR}

        @echo " ==> Done building "

##### package
#
package: ${PKGDIR} slack-desc
        @echo " ==> Making ${PACKAGES}/${PKGNAME} "
        cd ${PKGDIR} && \
        find . | xargs file | grep "current ar archive" \
        | cut -f 1 -d : | xargs strip --strip-debug 2>/dev/null;     \
        find . | xargs file | grep "executable" | grep "ELF" \
        | cut -f 1 -d : | xargs strip --strip-unneeded 2>/dev/null;  \
        find . | xargs file | grep "shared object" | grep "ELF" \
        | cut -f 1 -d : | xargs strip --strip-unneeded 2>/dev/null;  \
        /bin/true

        mkdir ${PKGDIR}/install
        cat slack-desc > ${PKGDIR}/install/slack-desc

ifeq ($(shell [[ "`id -u`" = "0" ]] && echo 0),0)
        cd ${PKGDIR} && \
        chown -R root.root . && \
        /sbin/makepkg -l y -c n ${PACKAGES}/${PKGNAME}
endif
        @echo " ==> Done making package "

##### clean
#
clean: ${TMPDIR}
        @echo " ==> Cleaning up ${TMPDIR} "
        rm -rf ${TMPDIR}
        @echo " ==> Done cleaning "

作者: shannleon   发布时间: 2006-03-31

Makefile感觉在流程控制上不如脚本,
脚本的话,每一条命令都检查错误,实在是不行
两者结合会比较好

slackware算是保守主义吧,而且一个东西,用了那么多年,不大可能一下子推倒重来的

作者: baldzhang   发布时间: 2006-03-31

孰优孰劣,我说不出,只能说,这个的可行性比pkgsrc高,没有把整个包管理系统推倒重来,只是改变一下打包过程,最终的成品还是标准的Slackware package,殊途同归。Slackware包制作的过程好像也没有个官方的标准,这个和deb与rpm不同。Slackware开发者与社群交流并不多,一般人很难对Pat施加影响,包管理系统也基本固定了,Pat估计也没有变的想法。现在社区开发的包管理改进,比如swaret和slapt-get,都没被纳入官方的发行,只要在社区推广,被用户接受就可以了。

shannleon你对Slackware的包管理系统的改进做了不少探索,我倒觉得你可以像fanx那样,自己做个发行版,基于Slackware,但把你的探索成果加入其中,包管理是发行版的根基,用户很难动摇。但根难动,老根上发新芽不是没可能。很多发行版不就是从已有发行版fork而出的吗。

分享 SlackBuild ,在论坛贴我看也够了,Arch版不就是那么做的吗。

作者: seamonkey   发布时间: 2006-03-31

还是看好 pkgsrc 的,可毕竟是 BSD 的东西,使用起来中间也碰到不少问题。有些 Makefile 里把路径写死了。
没有把 swaret 或 slapt-get 加进去是不是有鼓励竞争的意味?一旦加入其中之一那就成事实上的标准了。同时加两个可能又会造成点混乱。
我现在这个东西对我个人能用,但是你看看也知道没有到可以大量使用的地步。更况且,我反对有一点点不一样的东西就做新的发行版。
有对熟悉的朋友请帮忙挑挑上面的 Makefile 的毛病,多谢了 :^)

作者: shannleon   发布时间: 2006-03-31

你少了一步gzip manpage。

作者: seamonkey   发布时间: 2006-03-31

请多多挑关于 make 的问题,因为我不懂。打包过程没完善,连权限都没管。也巧,我实验的这几个软件都没有 man pages ,呵呵。
比如,检查一个文件是否存在该怎么做?我上面的完全是临时办法
代码:
ifneq ($(shell [[ -f filename ]] && echo 0),0)

endif
GNU 的 make 该怎么检查?BSD 的 make 好象可以 .if exists(filename)

作者: shannleon   发布时间: 2006-03-31

直接用shell的test命令。或者$(wildcard),也会检查目录或文件是否存在的。

作者: seamonkey   发布时间: 2006-03-31

刚又看一遍 make 的 info pages,发现自己真白痴,带着 shell 的思想去写 Makefile。好多 make 的好处都没有用到。重新写了一遍,感觉好多了 :^)。

作者: shannleon   发布时间: 2006-03-31

热门下载

更多