← Back to team overview

sslug-teknik team mailing list archive

rpm - bygge sin egen

 

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. 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)

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?)

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
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

# 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

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

mkdir -p $RPM_BUILD_ROOT%{_initrddir}
mkdir -p $RPM_BUILD_ROOT%{_sbindir}
mkdir -p $RPM_BUILD_ROOT%{_mandir}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
mkdir -p $RPM_BUILD_ROOT/var/%{name}
mkdir -p $RPM_BUILD_ROOT/var/www/html/%{name}
mkdir -p $RPM_BUILD_ROOT/home/ftp
mkdir -p $RPM_BUILD_ROOT/home/ftp/iso
mkdir -p $RPM_BUILD_ROOT/home/ftp/share

install -m600 phastcd.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/phastcd.conf
install -m700 phastcdd $RPM_BUILD_ROOT%{_sbindir}/phastcdd
install -m700 phastcdmount $RPM_BUILD_ROOT%{_sbindir}/phastcdmount
install -m700 phastcdstatus $RPM_BUILD_ROOT%{_sbindir}/phastcdstatus
install -m700 src/cdrom_disc_status $RPM_BUILD_ROOT%{_sbindir}/cdrom_disc_status
install -m444 man/phastcdd.1 $RPM_BUILD_ROOT%{_mandir}/phastcdd.1
install -m444 man/phastcdmount.1 $RPM_BUILD_ROOT%{_mandir}/phastcdmount.1
install -m444 src/cdrom_disc_status.1 $RPM_BUILD_ROOT%{_mandir}/cdrom_disc_status.1
install -m644 html/index.php $RPM_BUILD_ROOT/var/www/html/%{name}/index.php
install -m644 html/top.php $RPM_BUILD_ROOT/var/www/html/%{name}/top.php
install -m644 html/bot.php $RPM_BUILD_ROOT/var/www/html/%{name}/bot.php
install -m644 html/help.php $RPM_BUILD_ROOT/var/www/html/%{name}/help.php
install -m644 html/phastcd.png $RPM_BUILD_ROOT/var/www/html/%{name}/phastcd.png

touch $RPM_BUILD_ROOT/home/ftp/iso/INCOMPLETE
touch $RPM_BUILD_ROOT/home/ftp/iso/MD5SUM
touch $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/httpd.include.conf
touch $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/smb.include.conf
touch $RPM_BUILD_ROOT/var/%{name}/list

# make /var/%{name}/list writable to user 'apache'

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%doc README INSTALL COPYING TODO CHANGELOG
%{_sbindir}/phastcdd
%{_sbindir}/phastcdmount
%{_sbindir}/phastcdstatus
%{_sbindir}/cdrom_disc_status
%{_sysconfdir}/%{name}/phastcd.conf
%{_mandir}/phastcdd.1.bz2
%{_mandir}/phastcdmount.1.bz2
%{_mandir}/cdrom_disc_status.1.bz2
/var/www/html/%{name}/index.php
/var/www/html/%{name}/top.php
/var/www/html/%{name}/bot.php
/var/www/html/%{name}/help.php
/var/www/html/%{name}/phastcd.png
/home/ftp/iso/INCOMPLETE
/home/ftp/iso/MD5SUM
%{_sysconfdir}/%{name}/httpd.include.conf
%{_sysconfdir}/%{name}/smb.include.conf
/var/%{name}/list

%changelog
* Sun Jul 22 2001 Hans Schou <hschou@xxxxxxxxxxxxxxx> 0.0.3-1mdk
- First spec file for Mandrake distribution.

# end of file

-- 
Hamletsgade 4 - 201, DK-2200 København N, Phone: +45 2264 8020
http://schou.dk
--------------------------------------------------------------
It's a very simple and nice scheduler: it's not perfect, but
certainly works for most things.     -- Linus Torvalds



Follow ups