Paketbau mit dpkg-buildpackage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
JJB
Beiträge: 10
Registriert: 21.01.2016 14:15:45

Paketbau mit dpkg-buildpackage

Beitrag von JJB » 09.02.2016 12:22:16

Hallo zusammen,

ich habe eine Git Repository, was ich in eine Debian Package umwandeln möchte. Und zwar soll der debian folder schon im Git Repository sein. Da dann schon Versionsnummern vorgegeben sind, die meine Paket schon vor den bauen durch dh_make hatte, müssen diese beim neuen bauen verändert werden.

Meine Frage:

Kann ich mit dpkg-buildpackage auch Versionsnummern vergeben?

Danke schonmal für eure Hilfe. :)

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Paketbau mit dpkg-buildpackage

Beitrag von eggy » 10.02.2016 01:13:37

Schau dir mal "dch" an, damit bekommst Du die changelog Einträge entsprechend gebaut.

Ist das nen öffentliches Git? Falls ja, überleg Dir das nochmal, soweit ich mich erinnere wird offiziell davon abgeraten debian/* mit einzuchecken, zumindest Maintainer/Email würd ich aus control und co rausnehmen, nicht dass dann am Ende unsignierte Pakete von "Dir" im Netz rumfliegen - diese Änderung übersieht jemand anders schnell mal.

Meine Lösung dafür ist nen zusätzliches Target im Makefile, dass aus den benötigten Dateien (im git ist mehr als ich im fertigen Paket haben will) den orig.tar.gz und aus nen paar Variablen und Skelettdateien das debian/* erstellt - dann noch dch mit den richtigen Parametern (hier lohnt sich nen Blick in die Manpage, das kann recht viel) und fertig ist das Instant-Paket (was nen weiteres maketarget dann gleich ins Repo schieben kann).

brummer
Beiträge: 181
Registriert: 19.02.2007 19:21:23

Re: Paketbau mit dpkg-buildpackage

Beitrag von brummer » 11.02.2016 06:00:09

eggy hat geschrieben:Ist das nen öffentliches Git? Falls ja, überleg Dir das nochmal, soweit ich mich erinnere wird offiziell davon abgeraten debian/* mit einzuchecken, zumindest Maintainer/Email würd ich aus control und co rausnehmen, nicht dass dann am Ende unsignierte Pakete von "Dir" im Netz rumfliegen - diese Änderung übersieht jemand anders schnell mal.

Meine Lösung dafür ist nen zusätzliches Target im Makefile,
Yep, so mach ich's auch, hier ist mal eins meiner makefiles mit einem make deb target.
Der /debian Ordner ist nicht im git repository mit eingecheckt, sondern wird jedesmal neu erstellt.

Code: Alles auswählen

    #@defines
	PREFIX = /usr
	BIN_DIR = $(PREFIX)/bin
	SHARE_DIR = $(PREFIX)/share
	DESKAPPS_DIR = $(SHARE_DIR)/applications
	PIXMAPS_DIR = $(SHARE_DIR)/pixmaps

	# set name
	NAME = jalv_select
	VER = 0.2
	# create debian package
	DEBNAME = jalvselect_$(VER)
	CREATEDEB = yes '' | dh_make -s -n -e $(USER)@org -p $(DEBNAME) -c gpl >/dev/null
	DIRS = $(BIN_DIR)  $(DESKAPPS_DIR)  $(PIXMAPS_DIR) 
	BUILDDEB = dpkg-buildpackage -rfakeroot -b 2>/dev/null | grep dpkg-deb 
	# set compile flags
	CXXFLAGS = -std=c++11 `pkg-config gtkmm-2.4 lilv-0 --cflags` 
	LDFLAGS = `pkg-config gtkmm-2.4 lilv-0 --libs`
	# invoke build files
	OBJECTS = $(NAME).cpp 
	## output style (bash colours)
	BLUE = "\033[1;34m"
	RED =  "\033[1;31m"
	NONE = "\033[0m"

.PHONY : all clean dist-clean install tar deb uninstall 

all : $(NAME)
	@if [ -f $(NAME) ]; then echo $(BLUE)"build finish, now run make install"; \
	else echo -e $(RED)"sorry, build failed" $(NONE); fi
	@echo $(NONE)

clean :
	@rm -f $(NAME)
	@echo ". ." $(BLUE)", clean"$(NONE)

dist-clean :
	@rm -rf ./debian
	@rm -f $(NAME)
	@echo ". ." $(BLUE)", clean"$(NONE)

install : all
	@mkdir -p $(DESTDIR)$(BIN_DIR)
	@mkdir -p $(DESTDIR)$(DESKAPPS_DIR)
	@mkdir -p $(DESTDIR)$(PIXMAPS_DIR)
	install $(NAME) $(DESTDIR)$(BIN_DIR)
	install $(NAME).desktop $(DESTDIR)$(DESKAPPS_DIR)
	install lv2.png $(DESTDIR)$(PIXMAPS_DIR)
	@echo ". ." $(BLUE)", done"$(NONE)

    #@create tar ball
tar : clean
	@cd ../ && \
	tar -cf $(NAME)-$(VER).lv2.tar.bz2 --bzip2 $(NAME)
	@echo $(BLUE)"build "$(NAME)"-"$(VER)".lv2.tar.bz2"$(NONE)

    #@build a debian packet for all arch
deb :
	@rm -rf ./debian
	@echo $(BLUE)"create ./debian"$(NONE)
	-@ $(CREATEDEB)
	@ #@echo $(BLUE)"touch ./debian/dirs"$(NONE)
	@ #-@echo $(DIRS) > ./debian/dirs
	@echo $(BLUE)"try to build debian package, that may take some time"$(NONE)
	-@ if $(BUILDDEB); then echo ". ." $(BLUE)", done"$(NONE); else \
     echo -e $(RED)"sorry, build fail"$(NONE); fi

uninstall :
	rm -rf $(BIN_DIR)/$(NAME) $(DESKAPPS_DIR)/$(NAME).desktop $(PIXMAPS_DIR)/lv2.png
	@echo ". ." $(BLUE)", done"$(NONE)

$(NAME) : $(OBJECTS)
	$(CXX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) -o $(NAME)

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Paketbau mit dpkg-buildpackage

Beitrag von ThorstenS » 11.02.2016 07:56:55

Ich dachte git-buildpackage löst dieses Problem elegant: https://wiki.debian.org/PackagingWithGit
oder https://wiki.debian.org/PackagingWithGit

Antworten