Преглед изворни кода

Mega-change: - prefix/etc/rpm -> prefix/etc/openpkg - prefix/lib/rpm -> prefix/lib/openpkg

Ralf S. Engelschall пре 24 година
родитељ
комит
f48c03f9ea

+ 1 - 1
amd/rc.amd

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.amd -- Run-Commands for AMD
 ##

+ 1 - 1
apache/rc.apache

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.apache -- Apache Administration Run-Commands
 ##

+ 1 - 1
bind/rc.bind

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.bind -- Run-Commands for BIND Daemon
 ##

+ 13 - 0
dcron/rc.dcron

@@ -0,0 +1,13 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.dcron -- Run-Commands for DCRON Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/crond
+
+%stop -p 200 -u root
+    if [ -f @l_prefix@/var/dcron/dcron.pid ]; then
+        kill -TERM `cat @l_prefix@/var/dcron/dcron.pid`
+    fi
+

+ 1 - 1
dhcpd/rc.dhcpd

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.dhcpd -- Run-Commands for DHCP Daemon
 ##

+ 1 - 1
exim/rc.exim

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.postfix -- Run-Commands for Postfix Daemon
 ##

+ 8 - 0
findutils/rc.findutils

@@ -0,0 +1,8 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.findutils -- Run-Commands for GNU find utilities
+##
+
+%daily -u root
+    @l_prefix@/bin/updatedb
+

+ 14 - 0
gated/rc.gated

@@ -0,0 +1,14 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.gated -- Run-Commands for GateD Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/gdc start
+
+%stop -p 200 -u root
+    @l_prefix@/sbin/gdc stop
+
+%restart -u root
+    @l_prefix@/sbin/gdc restart
+

+ 1 - 1
inn/rc.inn

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.inn -- Run-Commands for INN Daemon
 ##

+ 19 - 0
ircd/rc.ircd

@@ -0,0 +1,19 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.ircd -- Run-Commands for IRC Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/ircd
+
+%stop -p 200 -u root
+    kill -TERM `cat @l_prefix@/var/ircd/ircd.pid`
+
+%restart -u root
+    kill -TERM `cat @l_prefix@/var/ircd/ircd.pid`
+    sleep 2
+    @l_prefix@/sbin/ircd
+
+%reload -u root
+    kill -HUP `cat @l_prefix@/var/ircd/ircd.pid`
+

+ 11 - 0
less/rc.less

@@ -0,0 +1,11 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.less -- Run-Commands for less(1)
+##
+
+%env
+    PAGER="@l_prefix@/bin/less -E -r"
+    export PAGER
+    LESSOPEN="|@l_prefix@/bin/lesspipe %s"
+    export LESSOPEN
+

+ 1 - 1
lmtp2nntp/rc.lmtp2nntp

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.lmtp2nntp -- Run-Commands for LMTP2NNTP Daemon
 ##

+ 19 - 0
mysql/rc.mysql

@@ -0,0 +1,19 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.mysql -- Run-Command for MySQL Database
+##
+
+%start -p 200 -u root
+    @l_prefix@/bin/safe_mysqld >/dev/null 2>&1 &
+
+%stop -p 200 -u root
+    #   standard (but would require admin password!)
+    #@l_prefix@/bin/mysqladmin shutdown
+    #   alternative (does not require admin password)
+    kill -TERM `cat @l_prefix@/var/mysql/\`hostname\`.pid`
+
+%restart -u root
+    kill -TERM `cat @l_prefix@/var/mysql/\`hostname\`.pid`
+    sleep 2
+    @l_prefix@/bin/safe_mysqld >/dev/null 2>&1 &
+

+ 33 - 0
ntp/rc.ntp

@@ -0,0 +1,33 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.ntp -- Run-Commands for NTP Daemon
+##
+
+%start -p 200 -u root
+    #   synchronize local machine once at startup
+    #   because ntpd does not skip large time offsets
+    @l_prefix@/bin/ntpdate \
+        `grep "^server" @l_prefix@/etc/ntp/ntp.conf |\
+         awk '{ printf(" %s", $2); }'`
+    #   run the NTP daemon for continued synchronization
+    @l_prefix@/bin/ntpd \
+        -p @l_prefix@/var/ntp/ntpd.pid \
+        -f @l_prefix@/var/ntp/ntpd.drift \
+        -l @l_prefix@/var/ntp/ntpd.log \
+        -s @l_prefix@/var/ntp/ntpd.stat/
+
+%stop -p 200 -u root
+    #   kill the NTP daemon
+    kill -TERM `cat @l_prefix@/var/ntp/ntpd.pid`
+
+%restart -u root
+    #   kill the NTP daemon
+    kill -TERM `cat @l_prefix@/var/ntp/ntpd.pid`
+    sleep 2
+    #   restart the NTP daemon for continued synchronization
+    @l_prefix@/bin/ntpd \
+        -p @l_prefix@/var/ntp/ntpd.pid \
+        -f @l_prefix@/var/ntp/ntpd.drift \
+        -l @l_prefix@/var/ntp/ntpd.log \
+        -s @l_prefix@/var/ntp/ntpd.stat/
+

+ 16 - 0
openldap/rc.openldap

@@ -0,0 +1,16 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.openldap -- Run-Commands for OpenLDAP Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/libexec/slapd
+
+%stop -p 200 -u root
+    kill -INT `cat @l_prefix@/var/openldap/slapd.pid`
+
+%restart -u root
+    kill -INT `cat @l_prefix@/var/openldap/slapd.pid`
+    sleep 2
+    @l_prefix@/libexec/slapd
+

+ 5 - 5
openpkg/openpkg.boot

@@ -69,7 +69,7 @@ if [ ".$root" = ".-s" ]; then
         -e "s;@DIR@;$name-$version-$release.src;" -e "s;@TGZ@;$name-$version-$release.src.tar.Z;"
     (cd $tmpdir && tar cf - *) | compress |\
     uuencode $name-$version-$release.src.tar.Z \
-        >>$pkgdir/$name-$version-$release.src.sh
+        | dd bs=64000 >>$pkgdir/$name-$version-$release.src.sh
     exit 0
 fi
 
@@ -325,7 +325,7 @@ if [ -f "$tmpdir/rpm" ]; then
     exit 1
 fi
 echo "#!/bin/sh" >$tmpdir/rpm
-echo "exec $RPM_BUILD_ROOT$prefix/lib/rpm/rpm --rcfile $tmpdir/rpm.1 \"\$@\"" >>$tmpdir/rpm
+echo "exec $RPM_BUILD_ROOT$prefix/lib/openpkg/rpm --rcfile $tmpdir/rpm.1 \"\$@\"" >>$tmpdir/rpm
 chmod a+x $tmpdir/rpm
 
 #   direct our own "rpm" tool to adjusted macro sets
@@ -333,7 +333,7 @@ sed <`SOURCE rpmrc` >$tmpdir/rpm.1 \
     -e "s;^\\(macrofiles:\\) .*;\\1 $tmpdir/rpm.2:$tmpdir/rpm.3;"
 
 #   use an adjusted vendor macro set
-sed <$RPM_BUILD_ROOT$prefix/lib/rpm/macros >$tmpdir/rpm.2 \
+sed <$RPM_BUILD_ROOT$prefix/lib/openpkg/macros >$tmpdir/rpm.2 \
     -e "s;$prefix;$RPM_BUILD_ROOT$prefix;g"
 
 #   override the vendor macro set
@@ -352,8 +352,8 @@ sed <`SOURCE rpmmacros` >$tmpdir/rpm.3 \
 #   use an own $HOME/.popt in order to make sure the "rpm"
 #   tool is able to execute its sub-tools "rpm<x>".
 V_rpm=`grep V_rpm $spec | head -1 | awk '{ printf("%s", $3); }'`
-sed <$RPM_BUILD_ROOT$prefix/lib/rpm/rpmpopt-${V_rpm} >$tmpdir/.popt \
-    -e "s;^\\(rpm.*exec.*\\)\\(rpm[bdeukv]*\\);\\1$RPM_BUILD_ROOT$prefix/lib/rpm/\\2;"
+sed <$RPM_BUILD_ROOT$prefix/lib/openpkg/rpmpopt-${V_rpm} >$tmpdir/.popt \
+    -e "s;^\\(rpm.*exec.*\\)\\(rpm[bdeukv]*\\);\\1$RPM_BUILD_ROOT$prefix/lib/openpkg/\\2;"
 
 #   activate the .popt file
 HOME=$tmpdir

+ 66 - 67
openpkg/openpkg.spec

@@ -373,6 +373,7 @@ Provides:     OpenPKG
           -e 's;(autoconf --version);false;' \
           -e 's;(autoheader --version);false;' \
           -e 's;(makeinfo --version);false;' \
+          -e 's;/lib/rpm;/lib/openpkg;' \
           <configure >configure.n && \
           mv configure.n configure
       sed -e 's;@INTLLIBS@;@INTLLIBS@ @LIBMISC@;' \
@@ -441,7 +442,7 @@ Provides:     OpenPKG
     done
     test -d $RPM_BUILD_ROOT%{l_prefix}/RPM || \
     mkdir $RPM_BUILD_ROOT%{l_prefix}/RPM
-    for dir in DST SRC PKG DB TMP; do
+    for dir in SRC PKG DB TMP; do
         test -d $RPM_BUILD_ROOT%{l_prefix}/RPM/$dir || \
         mkdir $RPM_BUILD_ROOT%{l_prefix}/RPM/$dir
     done
@@ -453,7 +454,7 @@ Provides:     OpenPKG
   
     #   strip RPM installation
     strip $RPM_BUILD_ROOT%{l_prefix}/bin/* \
-          $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/* >/dev/null 2>&1 || true
+          $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/* >/dev/null 2>&1 || true
     for dir in man/ja man/pl man/ru man/sk src; do
         rm -rf $RPM_BUILD_ROOT%{l_prefix}/$dir
     done
@@ -477,15 +478,15 @@ Provides:     OpenPKG
         rpmputtext rpmgettext brp-compress brp-redhat brp-sparc64-linux \
         brp-strip brp-strip-shared brp-strip-comment-note rpmrc \
         config.guess config.sub; do
-        rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/$file
+        rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$file
     done
   
     #   replace symlinks with hardlinks
     for entry in rpme:rpmi rpmt:rpmb rpmu:rpmi rpmv:rpmq; do
         eval `echo $entry | sed -e 's/^\(.*\):\(.*\)$/dst=\1; src=\2/'`
-        rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/$dst
-        ln $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/$src \
-           $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/$dst
+        rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$dst
+        ln $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$src \
+           $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/$dst
     done
   
     #   install additional RPM tools (rpmtool, lsync)
@@ -509,39 +510,39 @@ Provides:     OpenPKG
   
     #   install RPM extension
     ( cd curl-%{V_curl}
-      cp src/curl $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/curl
-      strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/curl
+      cp src/curl $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl
+      strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/curl
     )
     ( cd bzip2-%{V_bzip2}
-      cp bzip2 $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bzip2
-      strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bzip2
+      cp bzip2 $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2
+      strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bzip2
     )
     ( cd gzip-%{V_gzip}
-      cp gzip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/gzip
-      strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/gzip
+      cp gzip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip
+      strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/gzip
     )
     ( cd patch-%{V_patch}
-      cp patch $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/patch
-      strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/patch
+      cp patch $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch
+      strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/patch
     )
     ( cd tar-%{V_tar}
-      cp src/tar $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/tar
-      strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/tar
+      cp src/tar $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar
+      strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/tar
     )
     ( cd bash-%{V_bash}
-      cp bash $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bash
-      strip $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/bash
+      cp bash $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash
+      strip $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/bash
     )
     sed -e "s;@l_prefix@;%{l_prefix};g" \
-        <`SOURCE rpmx.sh` >$RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.sh
-    chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.sh
+        <`SOURCE rpmx.sh` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.sh
+    chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.sh
     sed -e "s;@l_prefix@;%{l_prefix};g" \
-        <`SOURCE rpmx.pl` >$RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.pl
-    chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmx.pl
+        <`SOURCE rpmx.pl` >$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.pl
+    chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmx.pl
   
     #   install an own copy of shtool
-    cp $shtool $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/shtool
-    chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/shtool
+    cp $shtool $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/shtool
+    chmod a+x $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/shtool
   
     #   install a few README files
     sed -e "s:@l_prefix@:%{l_prefix}:g" \
@@ -581,18 +582,18 @@ Provides:     OpenPKG
     #   hard-code RPM tool for installation hierarchy
     #   and adjust RPM configuration files
     mv $RPM_BUILD_ROOT%{l_prefix}/bin/rpm \
-       $RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpm
+       $RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpm
     ( echo "#!/bin/sh"; 
-      echo "exec %{l_prefix}/lib/rpm/rpm --rcfile %{l_prefix}/etc/rpm/rpmrc \${1+\"\$@\"}"
+      echo "exec %{l_prefix}/lib/openpkg/rpm --rcfile %{l_prefix}/etc/openpkg/rpmrc \${1+\"\$@\"}"
     ) >$RPM_BUILD_ROOT%{l_prefix}/bin/rpm
     chmod 755 $RPM_BUILD_ROOT%{l_prefix}/bin/rpm
     cat `SOURCE rpmpopt` \
-        >>$RPM_BUILD_ROOT%{l_prefix}/lib/rpm/rpmpopt-%{V_rpm}
-    test -d $RPM_BUILD_ROOT%{l_prefix}/etc/rpm || \
-    mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/rpm
+        >>$RPM_BUILD_ROOT%{l_prefix}/lib/openpkg/rpmpopt-%{V_rpm}
+    test -d $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg || \
+    mkdir $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg
     sed -e "s:@l_prefix@:%{l_prefix}:g" \
         <`SOURCE rpmrc` \
-        >$RPM_BUILD_ROOT%{l_prefix}/etc/rpm/rpmrc
+        >$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmrc
     sed -e "s:@l_prefix@:%{l_prefix}:g" \
         -e "s:@LOC@:$loc:g" \
         -e "s:@FSUSR@:$fsusr:g" \
@@ -602,11 +603,11 @@ Provides:     OpenPKG
         -e "s:@NPGRP@:$npgrp:g" \
         -e "s:@NPGID@:$npgid:g" \
         <`SOURCE rpmmacros` \
-        >$RPM_BUILD_ROOT%{l_prefix}/etc/rpm/rpmmacros
+        >$RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmmacros
     cp `SOURCE pubring.gpg` \
-       $RPM_BUILD_ROOT%{l_prefix}/etc/rpm/pubring.gpg
+       $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/pubring.gpg
     cp `SOURCE rpmdev.mk` \
-       $RPM_BUILD_ROOT%{l_prefix}/etc/rpm/rpmdev.mk
+       $RPM_BUILD_ROOT%{l_prefix}/etc/openpkg/rpmdev.mk
   
 %files
     %defattr(-,%{l_fsusr},%{l_fsgrp})
@@ -614,7 +615,6 @@ Provides:     OpenPKG
     %{l_prefix}/.bashrc
     %{l_prefix}/.bash_login
     %dir %{l_prefix}/RPM
-    %dir %{l_prefix}/RPM/DST
     %dir %{l_prefix}/RPM/SRC
     %dir %{l_prefix}/RPM/PKG
     %dir %{l_prefix}/RPM/DB
@@ -628,38 +628,38 @@ Provides:     OpenPKG
     %{l_prefix}/etc/rc.func
     %dir %{l_prefix}/etc/rc.d
     %{l_prefix}/etc/rc.d/rc.openpkg
-    %dir %{l_prefix}/etc/rpm
-    %config %{l_prefix}/etc/rpm/rpmmacros
-    %config %{l_prefix}/etc/rpm/rpmrc
-    %{l_prefix}/etc/rpm/pubring.gpg
-    %{l_prefix}/etc/rpm/rpmdev.mk
+    %dir %{l_prefix}/etc/openpkg
+    %config %{l_prefix}/etc/openpkg/rpmmacros
+    %config %{l_prefix}/etc/openpkg/rpmrc
+    %{l_prefix}/etc/openpkg/pubring.gpg
+    %{l_prefix}/etc/openpkg/rpmdev.mk
     %dir %{l_prefix}/include
     %dir %{l_prefix}/info
     %dir %{l_prefix}/lib
-    %dir %{l_prefix}/lib/rpm
-    %{l_prefix}/lib/rpm/rpm
-    %{l_prefix}/lib/rpm/rpmb
-    %{l_prefix}/lib/rpm/rpmdb
-    %{l_prefix}/lib/rpm/rpmi
-    %{l_prefix}/lib/rpm/rpmk
-    %{l_prefix}/lib/rpm/rpmq
-    %{l_prefix}/lib/rpm/find-provides
-    %{l_prefix}/lib/rpm/find-requires
-    %{l_prefix}/lib/rpm/rpmpopt-%{V_rpm}
-    %{l_prefix}/lib/rpm/macros
-    %{l_prefix}/lib/rpm/rpmt
-    %{l_prefix}/lib/rpm/rpme
-    %{l_prefix}/lib/rpm/rpmu
-    %{l_prefix}/lib/rpm/rpmv
-    %{l_prefix}/lib/rpm/rpmx.sh
-    %{l_prefix}/lib/rpm/rpmx.pl
-    %{l_prefix}/lib/rpm/curl
-    %{l_prefix}/lib/rpm/gzip
-    %{l_prefix}/lib/rpm/bzip2
-    %{l_prefix}/lib/rpm/shtool
-    %{l_prefix}/lib/rpm/patch
-    %{l_prefix}/lib/rpm/tar
-    %{l_prefix}/lib/rpm/bash
+    %dir %{l_prefix}/lib/openpkg
+    %{l_prefix}/lib/openpkg/rpm
+    %{l_prefix}/lib/openpkg/rpmb
+    %{l_prefix}/lib/openpkg/rpmdb
+    %{l_prefix}/lib/openpkg/rpmi
+    %{l_prefix}/lib/openpkg/rpmk
+    %{l_prefix}/lib/openpkg/rpmq
+    %{l_prefix}/lib/openpkg/find-provides
+    %{l_prefix}/lib/openpkg/find-requires
+    %{l_prefix}/lib/openpkg/rpmpopt-%{V_rpm}
+    %{l_prefix}/lib/openpkg/macros
+    %{l_prefix}/lib/openpkg/rpmt
+    %{l_prefix}/lib/openpkg/rpme
+    %{l_prefix}/lib/openpkg/rpmu
+    %{l_prefix}/lib/openpkg/rpmv
+    %{l_prefix}/lib/openpkg/rpmx.sh
+    %{l_prefix}/lib/openpkg/rpmx.pl
+    %{l_prefix}/lib/openpkg/curl
+    %{l_prefix}/lib/openpkg/gzip
+    %{l_prefix}/lib/openpkg/bzip2
+    %{l_prefix}/lib/openpkg/shtool
+    %{l_prefix}/lib/openpkg/patch
+    %{l_prefix}/lib/openpkg/tar
+    %{l_prefix}/lib/openpkg/bash
     %dir %{l_prefix}/libexec
     %dir %{l_prefix}/man
     %dir %{l_prefix}/man/man1
@@ -773,7 +773,7 @@ Provides:     OpenPKG
             done
 
             #   add entry to passwd database
-            shell="${prefix}/lib/rpm/bash"
+            shell="${prefix}/lib/openpkg/bash"
             realname="${prefix} OpenPKG"
             case "$plid" in
                 FreeBSD/* | NetBSD/* )
@@ -817,7 +817,7 @@ Provides:     OpenPKG
     fi
 
     #   add entry to /etc/shells
-    shell="${prefix}/lib/rpm/bash"
+    shell="${prefix}/lib/openpkg/bash"
     exists=`cat /etc/shells 2>/dev/null | grep "^$shell"`
     if [ ".$exists" = . ]; then
         if [ ".$thisuser" != ".root" ]; then
@@ -1059,7 +1059,6 @@ Provides:     OpenPKG
 
     #   remove files which are not RPM controlled
     rm -rf %{l_prefix}/RPM/TMP/* >/dev/null 2>&1 || true
-    rm -rf %{l_prefix}/RPM/DST/* >/dev/null 2>&1 || true
     rm -rf %{l_prefix}/RPM/SRC/* >/dev/null 2>&1 || true
     rm -rf %{l_prefix}/RPM/PKG/* >/dev/null 2>&1 || true
     rm -rf %{l_prefix}/RPM/DB/*  >/dev/null 2>&1 || true
@@ -1130,7 +1129,7 @@ Provides:     OpenPKG
     fi
 
     #   remove entry in /etc/shells
-    shell="${prefix}/lib/rpm/bash"
+    shell="${prefix}/lib/openpkg/bash"
     exists=`cat /etc/shells 2>/dev/null | grep "^$shell"`
     if [ ".$exists" != . ]; then
         if [ ".$thisuser" != ".root" ]; then

+ 4 - 4
openpkg/rc

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash
+#!@l_prefix@/lib/openpkg/bash
 ##
 ##  @l_prefix@/etc/rc -- Run-Command Handling for OpenPKG Hierarchy
 ##  Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
@@ -81,7 +81,7 @@ fi
 #   extend run-time environment with our local tools (shtool, rpmtool, etc)
 PATH="@l_prefix@/bin:$PATH"
 PATH="@l_prefix@/sbin:$PATH"
-PATH="@l_prefix@/lib/rpm:$PATH"
+PATH="@l_prefix@/lib/openpkg:$PATH"
 
 #   find a reasonable temporary location
 if [ ".$TMPDIR" != . ]; then
@@ -126,8 +126,8 @@ if [ ".$config" = .1 ]; then
     done
     . $rcconf
     if [ ".$raw" = ".0" ]; then
-        begin_bold=`@l_prefix@/lib/rpm/shtool echo -e '%B'`
-        end_bold=`@l_prefix@/lib/rpm/shtool echo -e '%b'`
+        begin_bold=`@l_prefix@/lib/openpkg/shtool echo -e '%B'`
+        end_bold=`@l_prefix@/lib/openpkg/shtool echo -e '%b'`
     else
         begin_bold=""
         end_bold=""

+ 67 - 0
openpkg/rc.openpkg

@@ -0,0 +1,67 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  @l_prefix@/etc/rc.d/rc.openpkg -- Run-Commands for OpenPKG Hierarchy
+##  Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
+##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
+##
+##  Permission to use, copy, modify, and distribute this software for
+##  any purpose with or without fee is hereby granted, provided that
+##  the above copyright notice and this permission notice appear in all
+##  copies.
+##
+##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+##  SUCH DAMAGE.
+##
+
+%config
+    openpkg_envprio="high"
+
+%env -p0
+    #   determine append (low prio) or prepend (high prio) mode 
+    opt_prepend=""
+    if [ ".$openpkg_envprio" = ".high" ]; then
+        opt_prepend="-p"
+    fi
+
+    #   make sure the software package executables are found
+    export PATH
+    opPathAdd -e PATH \
+              /bin /sbin /usr/bin /usr/sbin
+    opPathAdd ${opt_prepend} PATH \
+              @l_prefix@/bin @l_prefix@/sbin \
+              @l_prefix@/local/bin @l_prefix@/local/sbin
+
+    #   make sure the software package manual pages are found
+    export MANPATH; 
+    opPathAdd -e MANPATH \
+              /usr/man /usr/share/man
+    opPathAdd ${opt_prepend} MANPATH \
+              @l_prefix@/man @l_prefix@/local/man
+
+    #   make sure the software package info pages are found
+    export INFOPATH
+    opPathAdd -e INFOPATH \
+              /usr/info /usr/share/info
+    opPathAdd ${opt_prepend} INFOPATH \
+              @l_prefix@/info @l_prefix@/local/info
+
+    #   make sure the software package libraries are found
+    export LD_LIBRARY_PATH
+    opPathAdd -e LD_LIBRARY_PATH \
+              /lib /usr/lib
+    opPathAdd ${opt_prepend} LD_LIBRARY_PATH \
+              @l_prefix@/lib @l_prefix@/local/lib
+
+    #   cleanup environment
+    unset opt_prepend
+

+ 11 - 11
openpkg/rpmmacros

@@ -1,5 +1,5 @@
 ##
-##  @l_prefix@/etc/rpm/rpmmacros -- RPM macros for @l_prefix@ hierarchy
+##  @l_prefix@/etc/openpkg/rpmmacros -- RPM macros for @l_prefix@ hierarchy
 ##  Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
 ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
 ##
@@ -84,7 +84,7 @@
 %__ln_s                  ln -s
 %__make                  make
 %__mkdir                 mkdir
-%__mkdir_p               %{l_prefix}/lib/rpm/shtool mkdir -p
+%__mkdir_p               %{l_prefix}/lib/openpkg/shtool mkdir -p
 %__mv                    mv
 %__patch                 %{_patchbin}
 %__perl                  perl
@@ -96,17 +96,17 @@
 %__tar                   %{_tarbin}
 
 #   provide fixed paths to tools (standard)
-%_gzipbin                %{l_prefix}/lib/rpm/gzip
-%_bzip2bin               %{l_prefix}/lib/rpm/bzip2
-%_patchbin               %{l_prefix}/lib/rpm/patch
-%_tarbin                 %{l_prefix}/lib/rpm/tar
-%_buildshell             %{l_prefix}/lib/rpm/bash
+%_gzipbin                %{l_prefix}/lib/openpkg/gzip
+%_bzip2bin               %{l_prefix}/lib/openpkg/bzip2
+%_patchbin               %{l_prefix}/lib/openpkg/patch
+%_tarbin                 %{l_prefix}/lib/openpkg/tar
+%_buildshell             %{l_prefix}/lib/openpkg/bash
 
 #   provide fixed paths to tools (additional)
 %l_rpmtool               %{l_prefix}/sbin/rpmtool
-%l_shtool                %{l_prefix}/lib/rpm/shtool
-%l_curl                  %{l_prefix}/lib/rpm/curl
-%l_bash                  %{l_prefix}/lib/rpm/bash
+%l_shtool                %{l_prefix}/lib/openpkg/shtool
+%l_curl                  %{l_prefix}/lib/openpkg/curl
+%l_bash                  %{l_prefix}/lib/openpkg/bash
 
 #   provide smart paths to tools
 %l_tool_check            test -f %{l_bindir}/$tool && tool="%{l_bindir}/$tool"; echo $tool
@@ -157,7 +157,7 @@
 
 #   override package signature verification details
 %_signature              gpg
-%_gpg_path               %{l_prefix}/etc/rpm
+%_gpg_path               %{l_prefix}/etc/openpkg
 %_gpg_name               The OpenPKG Project <openpkg@openpkg.org>
 
 #   the default repository list

+ 2 - 2
openpkg/rpmrc

@@ -1,5 +1,5 @@
 ##
-##  @l_prefix@/etc/rpm/rpmrc -- RPM configuration for @l_prefix@ hierarchy
+##  @l_prefix@/etc/openpkg/rpmrc -- RPM configuration for @l_prefix@ hierarchy
 ##  Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
 ##  Copyright (c) 2000-2001 Ralf S. Engelschall <rse@engelschall.com>
 ##
@@ -13,7 +13,7 @@
 #   Macro Sets
 #
 
-macrofiles: @l_prefix@/lib/rpm/macros:@l_prefix@/etc/rpm/rpmmacros:~/.rpmmacros
+macrofiles: @l_prefix@/lib/openpkg/macros:@l_prefix@/etc/openpkg/rpmmacros:~/.rpmmacros
 
 #
 #   CPU Architectures

+ 620 - 0
openpkg/rpmx.pl

@@ -0,0 +1,620 @@
+##
+##  rpmx -- RPM eXtension (Perl program)
+##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
+##
+##  list all files in the hierarchy which are not listed in RPM database
+##  $ rpm --stowaway
+##
+##  generate repository information (on server only)
+##  $ rpm --makeindex <pkgdir>
+##
+##  update local database with latest repository information
+##  $ rpm --update
+##
+##  update the package sources by downloading missing files
+##  $ rpm --fetch <spec-file>
+##
+##  query repository information
+##  $ rpm -rqa
+##  $ rpm -rqai
+##  $ rpm -rqal
+##  $ rpm -rqalv
+##  $ rpm -rqi package
+##  $ rpm -rql package
+##  $ rpm -rqlv package
+##
+##  update already installed packages
+##  $ rpm -Uvhs '*'
+##
+##  install/update a particular package and its dependencies
+##  $ rpm -Uvhs file-pattern
+##
+##  erase a particular package and its dependencies
+##  $ rpm -es file-pattern
+##
+
+require 5.000;
+
+use IO::File;
+use IO::Handle;
+use Data::Dumper;
+
+$|++;
+
+##  ______________________________________________________________________
+##
+##  Determine Configuration and Run-Time Information
+##  ______________________________________________________________________
+##
+
+my $CFG = {
+    'PRG' => {},
+    'RC' => {},
+    'OPT' => [],
+    'OPT_OPT' => {},
+    'OPT_ARG' => {},
+    'ARG' => [],
+};
+
+#   determine path to executables
+my $prefix = shift(@ARGV);
+$CFG->{PRG}->{"rpm"}   = $prefix."/bin/rpm";
+$CFG->{PRG}->{"curl"}  = $prefix."/lib/openpkg/curl";
+$CFG->{PRG}->{"bzip2"} = $prefix."/lib/openpkg/bzip2";
+$CFG->{PRG}->{"gzip"}  = $prefix."/lib/openpkg/gzip";
+
+#   determine a few RPM rc-file configuration variables
+my $var;
+my $vars = '';
+foreach $var (qw(
+    _dbpath _rpmdir _srcrpmdir _tmppath
+    _target
+    l_prefix
+    l_repo_cache
+    l_repo_0 l_repo_1 l_repo_2 l_repo_3 l_repo_4
+    l_repo_5 l_repo_6 l_repo_7 l_repo_8 l_repo_9
+)) {
+    $vars .= "${var}=\%{${var}};";
+}
+my @assign = split(/;/, `$CFG->{PRG}->{"rpm"} --eval '$vars'`);
+foreach $assign (@assign) {
+    if ($assign =~ m|^(\S+)=(.*)$|s) {
+        $CFG->{RC}->{$1} = $2;
+    }
+}
+
+#   parse argument line
+#foreach my $arg (@ARGV) {
+#    print "<$arg>";
+#}
+#print "\n";
+my $op = 'pass';
+my $isopt = 1;
+my $optname = '';
+my $arg;
+foreach $arg (@ARGV) {
+    if ($arg =~ m/^--(stowaway|makeindex|update|fetch|repo|smart)$/) {
+        $op = $1;
+        next;
+    }
+    if ($arg eq '--') {
+        $isopt = 0;
+        next;
+    }
+    if ($isopt) {
+        push(@{$CFG->{OPT}}, $arg);
+        if ($arg =~ m|^-.|) {
+            $optname = $arg;
+            $CFG->{OPT_OPT}->{$optname} = 1;
+            $CFG->{OPT_ARG}->{$optname} = '--';
+        }
+        else {
+            $CFG->{OPT_ARG}->{$optname} = $arg;
+        } 
+    }
+    else {
+        push(@{$CFG->{ARG}}, $arg);
+    }
+}
+#print Data::Dumper->Dump([$CFG]);
+if ($op eq 'pass') {
+    # exec $CFG->{PRG}->{"rpm"} (@{$CFG->{OPT}}, @{$CFG->{ARG}});
+}
+else {
+    my $rc;
+    #eval "\$rc = \&op_${op}(\$CFG);";
+    if ($op eq 'stowaway') {
+        $rc = &op_stowaway($CFG);
+    }
+    elsif ($op eq 'makeindex') {
+        $rc = &op_makeindex($CFG);
+    }
+    elsif ($op eq 'update') {
+        $rc = &op_update($CFG);
+    }
+    elsif ($op eq 'fetch') {
+        $rc = &op_fetch($CFG);
+    }
+    elsif ($op eq 'repo') {
+        $rc = &op_repo($CFG);
+    }
+    elsif ($op eq 'smart') {
+        $rc = &op_smart($CFG);
+    }
+    exit($rc);
+}
+
+##  ______________________________________________________________________
+##
+##  Database Handling
+##  ______________________________________________________________________
+##
+
+#   read database file from disk
+sub db_load {
+    my ($dbfile) = @_;
+
+    if (not -f $dbfile) {
+        my $DB = {};
+        return $DB;
+    }
+    my $fp = new IO::File ("<$dbfile") || die "cannot read from Database file `$dbfile'";
+    my $db = '';
+    my $buf; 
+    $db .= $buf while ($fp->read($buf, 128*1024));
+    $fp->close;
+
+    my $DB = {};
+    $db =~ s|<rpm\s+(\S+)>\n(.+?)</rpm>|&load_rpm($DB, $2, $1), ''|isge;
+    sub load_rpm {
+        my ($DB, $db, $rpm) = @_;
+        $DB->{$rpm} = {};
+        $db =~ s/<(repos|info|files|requires)>\n(.+?)<\/\1>/$DB->{$rpm}->{uc($1)} = $2, ''/isge;
+    }
+    return $DB;
+}
+
+#   write database file to disk
+sub db_store {
+    my ($dbfile, $DB) = @_;
+
+    my $fp = new IO::File (">$dbfile") || die "cannot store to Database file `$dbfile'";
+    my $rpm;
+    foreach $rpm (sort(keys(%{$DB}))) {
+        print $fp "<rpm $rpm>\n" .
+                  "<repos>\n" .
+                  $DB->{$rpm}->{REPOS} .
+                  "</repos>\n" .
+                  "<requires>\n" .
+                  $DB->{$rpm}->{REQUIRES} .
+                  "</requires>\n" .
+                  "<info>\n" .
+                  $DB->{$rpm}->{INFO} .
+                  "</info>\n" .
+                  "<files>\n" .
+                  $DB->{$rpm}->{FILES} .
+                  "</files>\n" .
+                  "</rpm>\n";
+    }
+    $fp->close;
+    return;
+}
+
+##  ______________________________________________________________________
+##
+##  Fetch an URL
+##  ______________________________________________________________________
+##
+
+sub fetch_url {
+    my ($CFG, $src, $dst) = @_;
+
+    #   make sure file URLs have a fully-qualified scheme.
+    if ($src =~ m|^/.+|) {
+        $src = "file://$src" 
+    }
+
+    #   make sure only schemes curl(1) supports are used.
+    if ($src !~ m;^(file|http|ftp)://.+;) {
+        return "invalid URL - only file, http and ftp schemes supported";
+    }
+
+    #   try to fetch the URL
+    unlink("$dst.err");
+    unlink("$dst.hdr");
+    $rc = system($CFG->{PRG}->{"curl"}.
+                 " --location" .
+                 " --max-time 120" . 
+                 " --stderr $dst.err" .
+                 " --dump-header $dst.hdr" .
+                 " --output $dst '$src'");
+
+    #   check whether command failed
+    if ($rc != 0) {
+        open(FP, "<$dst.err");
+        my $err = <FP>;
+        close(FP);
+        $err =~ s|\n$||;
+        return $err;
+    }
+
+    #   check whether remote sites failed
+    if (-s "$dst.hdr") {
+        open(FP, "<$dst.hdr");
+        my $response = <FP>;
+        close(FP);
+        if ($response =~ m|^HTTP/[\d.]+\s+(\d+)|) {
+            if ($1 ne 200) {
+                $response =~ s|\n$||;
+                return $response;
+            }
+        }
+    }
+     
+    #   cleanup
+    unlink("$dst.err");
+    unlink("$dst.hdr");
+
+    return '';
+}
+
+##  ______________________________________________________________________
+##
+##  List all files which are not known to RPM
+##  ______________________________________________________________________
+##
+
+sub op_stowaway {
+    my ($CFG) = @_;
+    my $file;
+
+    my $prefix = $CFG->{RC}->{"l_prefix"};
+    my $rpm = $CFG->{PRG}->{"rpm"};
+    print "OpenPKG Hierarchy $prefix\n";
+    my @known = `$rpm -qla`;
+    my %known = ();
+    foreach $file (@known) {
+        $file =~ s|\n$||s;
+        $known{$file} = 1;
+    }
+    my @exist = `cd $prefix && find . -print 2>/dev/null`;
+    foreach $file (sort(@exist)) {
+        $file =~ s|^\./|$prefix/|s;
+        $file =~ s|\n$||s;
+        next if ($file eq '.');
+        if (not $known{$file}) {
+            next if ($file =~ m|^$prefix/RPM/?|);
+            print "$file\n";
+        }
+    }
+    return 0; 
+}
+
+##  ______________________________________________________________________
+##
+##  Generate Repository Index
+##  ______________________________________________________________________
+##
+
+sub op_makeindex {
+    my ($CFG) = @_;
+
+    if ($#{$CFG->{ARG}} ne 0) {
+        print STDERR "rpm: option --makeindex requires an argument\n";
+        return 1;
+    }
+    my $dir = $CFG->{ARG}->[0];
+    if (not -d $dir) {
+        print STDERR "rpm: --makeindex argument `$dir' is not a directory\n";
+        return 1;
+    }
+    my $index = '';
+    my $file;
+    my $rpm = $CFG->{PRG}->{"rpm"};
+    foreach $file (sort(glob("$dir/*.rpm"))) {
+        $file =~ s|^$dir/*||;
+        $index .= "<rpm $file>\n";
+        $index .= "<requires>\n";
+        $index .= `$rpm -qp --qf '[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]' $dir/$file`;
+        $index .= "</requires>\n";
+        $index .= "<info>\n";
+        $index .= `$rpm -qpi $dir/$file`;
+        $index .= "</info>\n";
+        $index .= "<files>\n";
+        $index .= `$rpm -qplv $dir/$file`;
+        $index .= "</files>\n";
+        $index .= "</rpm>\n";
+    }
+    open(FP, "|".$CFG->{PRG}->{"bzip2"}.">$dir/INDEX.bz2");
+    print FP $index;
+    close(FP);
+    return 0;
+}
+
+##  ______________________________________________________________________
+##
+##  Fetch Repository Indices
+##  ______________________________________________________________________
+##
+
+sub op_update {
+    my ($CFG) = @_;
+
+    my $DB = {};
+    my $tmpfile = $CFG->{RC}->{_tmppath}."/rpm.update.tmp.".$$;
+
+    for ($i = 9; $i >= 0; $i--) {
+        my $repo = $CFG->{RC}->{"l_repo_$i"};
+        next if (not defined($repo) or $repo eq '' or $repo eq '-');
+        $repo =~ s|([^/])$|$1/|;
+
+        my $src = $repo."INDEX.bz2";
+
+        my $prefix = $src;
+        $prefix = substr($prefix, 0, 37)."..." if (length($prefix) > 40);
+        printf(STDOUT "%-40s ", $prefix);
+
+        if (($err = &fetch_url($CFG, $src, $tmpfile))) {
+            $err = substr($err, 0, 37)."..." if (length($err) > 40);
+            print STDOUT "FAILED: $err\n";
+            next;
+        }
+
+        my $size = (stat($tmpfile))[7];
+        print STDOUT "OK: $size bytes\n";
+
+        my $fh = new IO::Handle; 
+        open($fh, $CFG->{PRG}->{"bzip2"}." -d -c $tmpfile|");
+        my $db = '';
+        my $buf; 
+        $db .= $buf while ($fh->read($buf, 128*1024));
+        $fh->close;
+
+        unlink($tmpfile);
+
+        $db =~ s|<rpm\s+(\S+)>\n(.+?)</rpm>|&load_rpm2($DB, $repo, $2, $1), ''|isge;
+        sub load_rpm2 {
+            my ($DB, $repo, $db, $rpm) = @_;
+            my $target = $CFG->{RC}->{_target};
+            return if ($rpm !~ m|\.src\.rpm$| and $rpm !~ m|\.$target\.rpm$|);
+            my $repos = ''; 
+            if (defined($DB->{$rpm})) {
+                $repos = $DB->{$rpm}->{REPOS};
+            }
+            $repos = $repo."\n".$repos;
+            $DB->{$rpm} = {};
+            $DB->{$rpm}->{REPOS} = $repos;
+            $db =~ s/<(info|files|requires)>\n(.+?)<\/\1>/$DB->{$rpm}->{uc($1)} = $2, ''/isge;
+        }
+    }
+
+    my $dbfile = $CFG->{RC}->{_dbpath}."/Repository";
+    &db_store($dbfile, $DB);
+
+    return 0;
+}
+
+##  ______________________________________________________________________
+##
+##  Repository Queries
+##  ______________________________________________________________________
+##
+
+sub op_repo {
+    my ($CFG) = @_;
+
+    #   argument line consistency check
+    if (not defined($CFG->{OPT_OPT}->{"-q"})) {
+        print STDERR "rpm: option --repo always requires option -q\n";
+        return 1;
+    }
+    my @optok = (qw(--rcfile -q --all -i --list --verbose));
+    my $opt;
+    my $check;
+    foreach $opt (keys(%{$CFG->{OPT_OPT}})) {
+        my $ok = 0;
+        foreach $check (@optok) {
+            if ($check eq $opt) {
+                $ok = 1;
+                last;
+            }
+        }
+        if (not $ok) {
+            print STDERR "rpm: option $opt not supported in conjunction with option --repo\n";
+            return 1;
+        }
+    }
+
+    #   load database
+    my $dbfile = $CFG->{RC}->{_dbpath}."/Repository";
+    if (not -f $dbfile) {
+        print STDERR "rpm: option --repo requires local repository index.\n";
+        print STDERR "rpm: run \"rpm --update\", first.\n";
+        return 1;
+    }
+    my $DB = &db_load($dbfile);
+
+    #   perform query operation
+    my $target = $CFG->{RC}->{_target};
+    my $rpm;
+    my $rpms = {};
+    foreach $rpm (sort(keys(%{$DB}))) {
+        my $name = $rpm;
+        $name =~ s|\.src\.rpm$||;
+        $name =~ s|\.${target}\.rpm$||;
+        next if (defined($rpms->{$name}));
+        $rpms->{$name} = 1;
+        if ((defined($CFG->{ARG}->[0]) and $rpm =~ m|^$CFG->{ARG}->[0]|)
+            or defined($CFG->{OPT_OPT}->{"--all"})) {
+            if (not defined($CFG->{OPT_OPT}->{"--list"}) and not defined($CFG->{OPT_OPT}->{"-i"})) {
+                print "$name\n";
+            }
+            if (defined($CFG->{OPT_OPT}->{"-i"})) {
+                print $DB->{$rpm}->{INFO};
+            }
+            if (defined($CFG->{OPT_OPT}->{"--list"})) {
+                my $files = $DB->{$rpm}->{FILES};
+                if (not defined($CFG->{OPT_OPT}->{"--verbose"})) {
+                    if (not ($files =~ s|^.*\s+(\S+\s+->\s+\S+)\s*$|$1|mg)) {
+                        $files =~ s|^.*\s+(\S+)\s*$|$1|mg;
+                    }
+                }
+                print "$files";
+            }
+        }
+    }
+}
+
+##  ______________________________________________________________________
+##
+##  Fetch Operation
+##  ______________________________________________________________________
+##
+
+sub op_fetch {
+    my ($CFG) = @_;
+    
+    if ($#{$CFG->{ARG}} ne 0) {
+        print STDERR "rpm: option --fetch requires an argument\n";
+        return 1;
+    }
+    my $spec = $CFG->{ARG}->[0];
+    if (not -f $spec) {
+        print STDERR "rpm: spec file `$spec' not found\n";
+        return 1;
+    }
+
+    #   determine package name and source directory
+    my $name = $spec;
+    $name =~ s|\.[^.]+$||;
+    $name =~ s|^.+/([^/]+)$|$1|;
+    my $srcdir = `$CFG->{PRG}->{"rpm"} --define 'name $name' --eval '%_sourcedir'`;
+    $srcdir =~ s|\n+$||s;
+
+    #   parse spec file
+    my $DEF = {};
+    my $SRC = {};
+    open(SPEC, "<$spec");
+    while (<SPEC>) {
+        s|\n+$||s;
+        if (m/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(.+?)\s*$/) {
+            $DEF->{lc($1)} = $2;
+        }
+        if (m/^%define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(.+?)\s*$/) {
+            $DEF->{lc($1)} = $2;
+        }
+        if (m/^((Source|Patch)[0-9]+?):\s*(.+)\s*$/i) {
+            my ($srcid, $srcurl) = ($1, $3);
+            1 while ($srcurl =~ s|%{?([a-zA-Z_][a-zA-Z0-9_]*)}?|$DEF->{lc($1)}|sge);
+            my $srcfile = $srcurl;
+            $srcfile =~ s|^.*/([^/]+)$|$1|;
+            my $file = $srcfile;
+            $file = substr($file, 0, 40) if (length($file) > 40);
+            printf(STDERR "%-9s %-40s ", "$srcid:", $file);
+            if (-f "$srcdir/$srcfile") {
+                my $size = (stat("$srcdir/$srcfile"))[7];
+                if ($size > 1024*1024) {
+                    $size = sprintf("%.1fMB", $size / (1024*1024));
+                }
+                elsif ($size > 1024) {
+                    $size = sprintf("%.0fKB", $size / 1024);
+                }
+                else {
+                    $size = sprintf("%d", $size);
+                }
+                print STDERR "...OK [$size]\n";
+            }
+            else {
+                print STDERR "...MISSING\n";
+                print STDERR "rpm: Fetching $srcurl\n";
+                my $cmd = $CFG->{PRG}->{"curl"}.
+                          " --location" .
+                          " --output $srcdir/$srcfile" .
+                          " $srcurl";
+                my $rc = system($cmd);
+                if ($rc != 0) {
+                    print STDERR "rpm: Failed to fetch source file `$srcfile'\n";
+                    return 1;
+                }
+            }
+        }
+    }
+    close(SPEC);
+
+    return 0;
+}
+
+##  ______________________________________________________________________
+##
+##  Smart Operations
+##  ______________________________________________________________________
+##
+
+sub op_smart {
+    my ($CFG) = @_;
+
+    if ($#{$CFG->{ARG}} ne 0) {
+        print STDERR "rpm: option --smart requires one argument\n";
+        return 1;
+    }
+    my $package = $CFG->{ARG}->[0];
+
+    #   load database
+    my $dbfile = $CFG->{RC}->{_dbpath}."/Repository";
+    if (not -f $dbfile) {
+        print STDERR "rpm: option --smart requires local repository index.\n";
+        print STDERR "rpm: run \"rpm --update\", first.\n";
+        return 1;
+    }
+    my $DB = &db_load($dbfile);
+
+    my $deps = [];
+    &find_deps($CFG, $DB, $deps, $package, '=', 'ANY');
+    sub find_deps {
+        my ($CFG, $DB, $deps, $pkg, $op, $ver) = @_;
+        push(@{$deps}, "$pkg $op $ver");
+        my $rpm;
+        foreach $rpm (keys(%{$DB})) {
+            if (&match_rpm($CFG, $rpm, $pkg, $op, $ver)) {
+                my $req;
+                foreach $req (split(/\n/, $DB->{$rpm}->{REQUIRES})) {
+                    $req =~ s|^\s+||sg;
+                    $req =~ s|\s+$||sg;
+                    if ($req =~ m|^OpenPKG$| or
+                        $req =~ m|^rpmlib\(.+\)|) {
+                        next;
+                    }
+                    if ($req =~ m|^(\S+)$|) {
+                        $req .= " = ANY";
+                    }
+                    if ($req =~ m|^(\S+)\s+([=><]+)\s+(\S+)$|) {
+                        &find_deps($CFG, $DB, $deps, $1, $2, $3);
+                    }
+                }
+            }
+        }
+    }
+    sub match_rpm {
+        my ($CFG, $rpm, $name, $op, $ver) = @_;
+        my $rc = 0;
+        my $target = $CFG->{RC}->{_target};
+        $rpm =~ s|\.src\.rpm$||;
+        $rpm =~ s|\.${target}\.rpm$||;
+        if ($rpm =~ m|^(\S+)-([^-]+-[^-]+)$|) {
+            my ($tname, $tver) = ($1, $2);
+            if ($name eq $tname and &match_version($ver, $op, $tver)) {
+                $rc = 1;
+            }
+        }
+        return $rc;
+    }
+    sub match_version {
+        my ($ver, $op, $tver) = @_;
+        return 1;
+    }
+    my $dep;
+    foreach $dep (@{$deps}) {
+        print "$dep\n";
+    }
+}
+

+ 29 - 0
openpkg/rpmx.sh

@@ -0,0 +1,29 @@
+#!/bin/sh
+##
+##  rpmx.sh -- RPM eXtension (Shell Wrapper)
+##  Copyright (c) 2001 Ralf S. Engelschall <rse@engelschall.com>
+##
+
+#   root directory of RPM hierarchy
+root="@l_prefix@"
+
+#   search for Perl interpreter
+perl=""
+for d in `IFS=:; echo $root/bin:$PATH`; do
+    if [ -f "$d/perl" ]; then
+        perl="$d/perl"
+        break
+    fi
+done
+
+#   we can only operate if Perl is available
+if [ ".$perl" = . ]; then
+    echo "rpm: This functionality requires the Perl interpreter." 1>&2
+    echo "rpm: Either place a vendor-supplied Perl interpreter into your" 1>&2
+    echo "rpm: \$PATH or install the OpenPKG \"perl\" package, first." 1>&2
+    exit 1
+fi
+
+#   transfer control to the real program
+exec $perl $root/lib/openpkg/rpmx.pl $root ${1+"$@"}
+

+ 1 - 1
openssh/rc.openssh

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.openssh -- Run-Commands for OpenSSH Daemon
 ##

+ 18 - 0
portsentry/rc.portsentry

@@ -0,0 +1,18 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.bind -- Run-Commands for Portsentry Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/portsentry -tcp
+    @l_prefix@/sbin/portsentry -udp
+
+%stop -p 200 -u root
+    @l_prefix@/sbin/rpmtool signal TERM portsentry
+
+%restart -u root
+    @l_prefix@/sbin/rpmtool signal TERM portsentry
+    sleep 2
+    @l_prefix@/sbin/portsentry -tcp
+    @l_prefix@/sbin/portsentry -udp
+

+ 1 - 1
postfix/rc.postfix

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.postfix -- Run-Commands for Postfix Daemon
 ##

+ 25 - 0
proftpd/rc.proftpd

@@ -0,0 +1,25 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.proftpd -- Run-Commands for ProFTPD
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/proftpd
+
+%stop -p 200 -u root
+    if [ -f @l_prefix@/var/proftpd/proftpd.pid ]; then
+        kill -TERM `cat @l_prefix@/var/proftpd/proftpd.pid`
+    fi
+
+%restart -u root
+    if [ -f @l_prefix@/var/proftpd/proftpd.pid ]; then
+        kill -TERM `cat @l_prefix@/var/proftpd/proftpd.pid`
+        sleep 2
+    fi
+    @l_prefix@/sbin/proftpd
+
+%reload -u root
+    if [ -f @l_prefix@/var/proftpd/proftpd.pid ]; then
+        kill -HUP `cat @l_prefix@/var/proftpd/proftpd.pid`
+    fi
+

+ 18 - 0
pureftpd/rc.pureftpd

@@ -0,0 +1,18 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.pureftpd -- Run-Commands for PureFTPD
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/pure-ftpd </dev/null &
+    echo "$!" >@l_prefix@/var/pureftpd/pureftpd.pid
+
+%stop -p 200 -u root
+    kill -TERM `cat @l_prefix@/var/pureftpd/pureftpd.pid`
+
+%restart -u root
+    kill -TERM `cat @l_prefix@/var/pureftpd/pureftpd.pid`
+    sleep 2
+    @l_prefix@/sbin/pure-ftpd </dev/null &
+    echo "$!" >@l_prefix@/var/pureftpd/pureftpd.pid
+

+ 1 - 1
qpopper/rc.qpopper

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.qpopper -- Run-Commands for QPopper Daemon
 ##

+ 20 - 0
samba/rc.samba

@@ -0,0 +1,20 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.samba -- Run-Commands for Samba Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/smbd -D
+    @l_prefix@/sbin/nmbd -D
+
+%stop -p 200 -u root
+    kill -TERM `cat @l_prefix@/var/samba/run/smbd.pid` 
+    kill -TERM `cat @l_prefix@/var/samba/run/nmbd.pid` 
+
+%restart -u root
+    kill -TERM `cat @l_prefix@/var/samba/run/smbd.pid` 
+    kill -TERM `cat @l_prefix@/var/samba/run/nmbd.pid` 
+    sleep 2
+    @l_prefix@/sbin/smbd -D
+    @l_prefix@/sbin/nmbd -D
+

+ 1 - 1
sendmail/rc.sendmail

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.sendmail -- Run-Commands for Sendmail Daemon
 ##  Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH

+ 1 - 1
smtpfeed/rc.smtpfeed

@@ -1,4 +1,4 @@
-#!@l_prefix@/lib/rpm/bash @l_prefix@/etc/rc
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
 ##
 ##  rc.smtpfeed -- Run-Commands for SMTPfeed Daemon
 ##

+ 19 - 0
squid/rc.squid

@@ -0,0 +1,19 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.squid -- Run-Commands for Squid
+##
+
+%start -p 200 -u root
+    @l_prefix@/bin/squid -D
+
+%stop -p 200 -u root
+    kill -TERM `cat @l_prefix@/var/squid/logs/squid.pid`
+
+%restart -u root
+    kill -TERM `cat @l_prefix@/var/squid/logs/squid.pid`
+    sleep 2
+    @l_prefix@/bin/squid -D
+
+%reload -u root
+    kill -HUP `cat @l_prefix@/var/squid/logs/squid.pid`
+

+ 30 - 0
uucp/rc.uucp

@@ -0,0 +1,30 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.uucp -- Run-Commands for UUCP Daemon
+##
+
+%common
+    uucp_pidfile="@l_prefix@/var/uucp/run/uucpd.pid"
+    uucp_start () {
+        ( @l_prefix@/sbin/uucpd uucp @l_prefix@/sbin/uucico -l \
+          </dev/null >/dev/null 2>&1 &
+          echo "$!" >$uucp_pidfile
+        ) </dev/null >/dev/null 2>&1
+    }
+    uucp_stop () {
+        if [ -f $uucp_pidfile ]; then
+            kill -TERM `cat $uucp_pidfile`
+            sleep 1
+        fi
+    }
+
+%start -p 200 -u root
+    uucp_start
+
+%stop -p 200 -u root
+    uucp_stop
+
+%restart -u root
+    uucp_stop
+    uucp_start
+

+ 11 - 0
vim/rc.vim

@@ -0,0 +1,11 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.vim -- Run-Commands for vim(1)
+##
+
+%env
+    EDITOR="@l_prefix@/bin/vim"
+    export EDITOR
+    VISUAL="@l_prefix@/bin/vim"
+    export VISUAL
+

+ 17 - 0
zebra/rc.zebra

@@ -0,0 +1,17 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.zebra -- Run-Commands for ZEBRA Daemon
+##
+
+%start -p 200 -u root
+    @l_prefix@/sbin/zebra -d
+    @l_prefix@/sbin/ripd  -d
+    @l_prefix@/sbin/ospfd -d
+    @l_prefix@/sbin/bgpd  -d
+
+%stop -p 200 -u root
+    kill -TERM `cat @l_prefix@/var/zebra/bgpd.pid`
+    kill -TERM `cat @l_prefix@/var/zebra/ospfd.pid`
+    kill -TERM `cat @l_prefix@/var/zebra/ripd.pid`
+    kill -TERM `cat @l_prefix@/var/zebra/zebra.pid`
+