← Back to team overview

sslug-teknik team mailing list archive

Re: rpm - bygge sin egen

 

On Tue, 24 Jul 2001, Hans Schou wrote:

> 
> Hej
> 
> Emnet har været oppe før og jeg har forsøgt og løst det meste selv.
> Anyway, jeg begynder at nærme mig en release, og vil derfor godt have at
> det er rigtigt lavet, så opdateringer ikke er helt umulige.
> 
> Jeg har en Makefile som er noget bøvlet. 

Har du overvejet at bruge autoconf/automake? Er det for vanskeligt med de
der scripts?

> Kan det være rigtigt at jeg skal
> have det samme bøvl i min spec-fil som jeg har i Makefile?
> Helst ville jeg bare lave install og uninstall i Makefile.
> (rpm -tb ... har jeg prøvet: no cigar)

Du burde bare kunne skrive "make install" under install skridtet i spec
filen.

> 
> Nogle filer genereres af programmet, men jeg vil gerne have dem med i
> listen så man fx. kan bruge kommandoen:
>   rpm -qf /var/phastcd/list
> men jeg vil egentlig ikke have filen med i pakken.
> 
> Har jeg gjort noget i spec-filen som er helt overflødigt og kunne gøres
> meget nemmere? (læs: skal det være så besværligt?)

Det burde ikke være så besværligt. 

> 
> Og så requires: Samba er ikke påkrævet, men kan anvendes hvis den er der.
> Problemet er at hvis Samba er installeret, så skal jeg opdatere
> /etc/samba/smb.conf, hvilket jeg ikke kan, hvis samba ikke er installeret.
> Hvad gør man så? Dertil kommer at smb.conf tidligere lå i /etc - nej det
> skal ikke være nemt!
> 
> Iøvrigt er det godt nok en ordentlig omgang. Jeg har programeret i
> følgende sprog/scripts: C, shell, perl, php, man, make og rpm-spec.
> 
> Herunder er Makefile og spec-filen. Hvis du kommentere på noget, så
> helst kun de relevante linier. Og undskyld den lidt store posting.
> 
> # Make file for phastcd
> 
> # Location to install binary. Default is /usr/local/bin. You may
> # prefer to install it in /usr/bin or /sbin
> BINDIR=/usr/sbin
> 
> ETC=/etc/phastcd
> 
> # BUG: below does not work

Du bør nok starte med at finde httpd.conf filen. Det kan være svært nok i
sig selv. 

> HTTPUSER=`grep -i "^User " /etc/httpd/conf/httpd.conf|perl -pe 's/User\s+(\w+)\s*$/$1/i'`
> HTTPUSER=apache
> HTTPGROUP=apache
> 
> # Location to install man page. Default is /usr/share/man. You may
> # prefer to install it in /usr/man
> MANDIR	= /usr/share/man

Sådan noget er ideelt til autoconf.

> 
> # File permissions for binary. Use MODE=4555 if you want to install it
> # setuid root (see man page).
> MODE	= 0500
> #MODE	= 4555
> 
> src/cdrom_disc_status: src/cdrom_disc_status.c
> 	(cd src ; make)
> 
> install: src/cdrom_disc_status
> 	if [ ! -d /var/phastcd ]; then mkdir /var/phastcd ; fi
> 	chown $(HTTPUSER):$(HTTPGROUP) /var/phastcd
> 	chmod 0755 /var/phastcd
> 	if [ ! -f /var/phastcd/list ]; then install -m 0644 list /var/phastcd/list ; fi
> 	chown $(HTTPUSER):$(HTTPGROUP) /var/phastcd/list
> 	if [ ! -d /home/ftp ]; then mkdir /home/ftp ; fi
> 	if [ ! -d /home/ftp/iso ]; then mkdir /home/ftp/iso ; fi
> 	if [ ! -d /home/ftp/share ]; then mkdir /home/ftp/share ; fi
> 	if [ ! -d $(ETC) ]; then mkdir $(ETC) ; fi
> 	chown $(HTTPUSER):$(HTTPGROUP) $(ETC)
> 	if [ ! -f $(ETC)/httpd.include.conf ]; then touch $(ETC)/httpd.include.conf ; fi
> 	if [ ! -f $(ETC)/smb.include.conf ]; then touch $(ETC)/smb.include.conf ; fi
> 	if [ ! -f $(ETC)/phastcd.conf ]; then install -m 0644 phastcd.conf $(ETC)/phastcd.conf ; fi
> 	install -m $(MODE) phastcdd $(BINDIR)/phastcdd
> 	install -m $(MODE) phastcdmount $(BINDIR)/phastcdmount
> 	install -m $(MODE) phastcdstatus $(BINDIR)/phastcdstatus
> 	install -m $(MODE) src/cdrom_disc_status $(BINDIR)/cdrom_disc_status
> 	install -m 0444 man/phastcdd.1 $(MANDIR)/man1/phastcdd.1
> 	install -m 0444 man/phastcdmount.1 $(MANDIR)/man1/phastcdmount.1
> 	if grep -i "^include $(ETC)/httpd.include.conf" /etc/httpd/conf/httpd.conf >/dev/null ; then \
> 		true \
> 	else \
> 		echo "include $(ETC)/httpd.include.conf # Added by package phastcd" >> /etc/httpd/conf/httpd.conf \
> 	fi

Ligesom du også ville få et install, uninstall target gratis.

> 
> clean:
> 	(cd src ; make clean)
> 
> ci:	clean
> 	-ci -l *
> 
> 
> 
> 
> 
> %define name phastcd
> %define version 0.0.3
> %define release 1
> 
> Summary: Virtual cdrom server
> Name: %{name}
> Version: %{version}
> Release: %{release}
> Source0: %{name}-%{version}.tar.bz2
> Copyright: GPL
> Group: System/Servers
> BuildRoot: %{_tmppath}/%{name}-buildroot
> Prefix: %{_prefix}
> URL: http://www.projecthouse.dk/linux/
> Requires: perl apache php
> 
> %description
> A virtual cdrom server for use with Apache, Samba,
> NFS and others. Serve up to 255 cd's from one server.
> 
> Demo: http://g2.dyndns.dk/%{name}/
> 
> See also: /usr/share/doc/%{name}-%{version}/README
> http://localhost/%{name}/
> 
> Install %{name} if you want to share your cdrom's
> on your network.
> 
> %prep
> 
> %setup
> 
> %pre
> # make some directories, i.e. /home/ftp/iso
> 
> %post
> # nothing
> 
> %preun
> # maybe: stop smb and httpd
> # unmount iso-files: unmount /home/ftp/share/*
> # cd /home/ftp/share
> # ls | while read DIR
> # do
> #   umount $DIR
> #   rmdir $DIR
> # done
> 
> %postun
> # rm -f /etc/phastcd/httpd.include.conf
> # rm -f /etc/phastcd/smb.include.conf
> # rm -f /home/ftp/iso/INCOMPLETE
> # rm -f /home/ftp/iso/MD5SUM
> # reload httpd
> # restart smb
> 
> #%update
> # if changes in /etc/phastcd/phastcd.conf do something!
> 
> %build
> make
> 
> %install
> rm -rf $RPM_BUILD_ROOT

Her synes jeg virkeligt at du burde kunne skrive "make install" - hvorfor
kan du ikke det?

Ellers har jeg ikke så meget styr på det.

Er det ikke et prog spørgsmål, egentlig?

Mads

-- 
Mads Bondo Dydensborg.                               madsdyd@xxxxxxxxxxxx
Remember, never ask a geek "why"; just nod your head and back away slowly...



Follow ups

References