[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#327081: ITP: rpmstrap -- bootstrap a basic RPM-based system



Anthony Towns wrote:
> > > Looking at the source it seems more "based on" than "inspired by",
> > > particular to "rpmstrap" itself, though the "functions" and "scripts/*"
> > > files sure seem more derivative than just coincidently similar. If
> > > so, it's in violation of debootstrap's license (by not including
> > > debootstrap's copyright text), and it seems fairly rude to relicense it
> > > from debootstrap's BSD-ish license to GPLv2+, not to mention expunging
> > > my name and copyright notice from the source, and for that matter all
> > > references to debootstrap.
> > > 
> > > Removing the copyright's a license violation, and presumably renders the
> > > program undistributable and unpackagable, afaics.
> > > 
> > > At least Bastian Blank's cdebootstrap was written from scratch to
> > > justify its different license and lack of recognition. Colour me
> > > unimpressed.

Sam Hart wrote:
> > For what it's worth, rpmstrap as it is today is actually based on a tool
> > developed in house at Progeny. This tool could only bootstrap Fedora
> > Core 2 at a specific revision. Looking at that code now and comparing it
> > to what I see inside of debootstrap, the only real similarities I see
> > are that they both have functions common to /many/ other shell scripts
> > (usage(), die(), warn(), trace()).

Anthony, I've been using shell functions with these names (and the
expected corresponding behaviors) in shell scripts I write for years
now, so you're probably going to need to accuse me of copyright
infringement in shell-lib.sh[1] in the XFree86 and X.Org packages as well.

> > I will have to check the legacy on this tool used internally at Progeny
> > to ensure nothing came from debootstrap, but to the best of my knowledge
> > it did not. In fact, looking at this internal tool now, it is only 314
> > lines of code, 153 of which are lists of FC2 packages, so it doesn't
> > seem likely to share any common ancestry with debootstrap.
> 
> I have just been given permission to post the original internal tool
> used at Progeny which rpmstrap is based upon, in case anyone would care
> to check the legacy for debootstrap code.
> 
> This original tool was also called "rpmstrap" and was written from
> scratch by Branden Robinson. It does not contain any code borrowed from
> debootstrap.

I assert this to be the case.  I'm easily capable of writing the trivial
shell script that constitutes the original "rpmstrap", and the
modifications I made to it subsequently.

For your edification, I'm attaching the SVN commit log for "rpmstrap" up
to and including my last change to it.  None of this is rocket science.

Oh, what the hell, how about I attach the diff of each commit as well,
making it all the easier to identify the exact spots where I absconded
with debootstrap code, mustache twitching!

> The first appearance of rpmstrap in the internal Progeny svn is the
> following code:
> http://hackers.progeny.com/~sam/rpmstrap/legacy/rpmstrap-original
> 
> The most current revision of rpmstrap in the same svn is:
> http://hackers.progeny.com/~sam/rpmstrap/legacy/rpmstrap
> 
> This is the actual base for what is now rpmstrap as I maintain. It is
> also why the current rpmstrap is GPLv2.
> 
> The one thing I have just realized is that the current rpmstrap script
> does not actually have Branden's name in it as an author (although his
> name does exist in some of the suite scripts). I will rectify this
> shortly and apologize for the oversight.

Well, only if there's any of my original nasty kludge *left*.  I kind of
hope it isn't.  :)  (Okay, you can keep usage()/trace()/warn()/die(),
but as for the rest... :) )

The original rpmstrap I wrote was done in haste, but it was not
plagiarized.  The accusation would be amusing if it weren't so
insulting.

[1] http://necrotic.deadbeast.net/svn/xorg-x11/trunk/debian/shell-lib.sh

    (There, trace() is not present, but a similar function, observe(),
    is.  Neither function is an example of anything more than highly
    trivial and idiomatic shell usage.)

-- 
Branden Robinson          | GPG signed/encrypted mail welcome
branden@progeny.com       | 1024D/9C0BCBFB
Progeny Linux Systems     | D5F6 D4C9 E25B 3D37 068C
                          | 72E8 0F42 191A 9C0B CBFB
------------------------------------------------------------------------
r16721 | branden | 2005-02-15 12:06:40 -0500 (Tue, 15 Feb 2005) | 2 lines

Install i386, not i686, version of openssl on x86_64 systems.

------------------------------------------------------------------------
r15950 | branden | 2004-10-01 12:22:58 -0500 (Fri, 01 Oct 2004) | 3 lines

Fix erroneous architecture string in x86 glibc package for
x86_64.

------------------------------------------------------------------------
r15943 | branden | 2004-09-29 15:35:44 -0500 (Wed, 29 Sep 2004) | 13 lines

Add command-line options -h | --help, -l | --list, and -v |
--verbose.

The new -l | --list feature simply prints the list of required
RPMs and exits.

Stop hard-coding target directory name.  Make the user specify
it as an operand.

Add usage message.

Improve diagnostics.

------------------------------------------------------------------------
r15942 | branden | 2004-09-29 14:16:28 -0500 (Wed, 29 Sep 2004) | 4 lines

Add i386 packages that had bitrotted away.

rpmstrap works on i386 now.  This time for sure!

------------------------------------------------------------------------
r15941 | branden | 2004-09-29 13:59:26 -0500 (Wed, 29 Sep 2004) | 4 lines

Remove duplicate entry for e2fsprogs on x86.

Renumber remaining passes.

------------------------------------------------------------------------
r15937 | branden | 2004-09-28 18:08:36 -0500 (Tue, 28 Sep 2004) | 6 lines

Add ix86 support.

Complain about unrecognized architectures.

Add copyright notice and license statement (GPL).

------------------------------------------------------------------------
r15718 | branden | 2004-07-28 14:29:15 -0500 (Wed, 28 Jul 2004) | 6 lines

Check in initial version of RPM bootstrap script, which
prepares an RPM-based chroot environment (like debootstrap does
for Debian systems).

Only AMD64 is supported at present.

------------------------------------------------------------------------
Index: rpmstrap
===================================================================
--- rpmstrap	(revision 15718)
+++ rpmstrap	(revision 15937)
@@ -2,6 +2,24 @@
 
 # $Progeny$
 
+# Copyright 2004 Progeny Linux Systems, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# Author: Branden Robinson
+
 PROGNAME=${0##*/}
 CHROOTDIR="./rpm-chroot"
 # Define DEBUG to "yes" if you want debugging output.
@@ -22,7 +40,9 @@
     exit 1
 }
 
-RPMS=$(cat <<EOF
+case "$(uname -m)" in
+    x86_64)
+        RPMS=$(cat <<EOF
 0:setup-2.5.33-1.noarch.rpm
 1:filesystem-2.2.4-1.x86_64.rpm
 2:basesystem-8.0-3.noarch.rpm
@@ -110,7 +130,74 @@
 55:wget-1.9.1-5.x86_64.rpm
 56:yum-2.0.7-1.1.noarch.rpm
 EOF
-)
+        )
+        ;;
+    i[3456]86)
+        RPMS=$(cat <<EOF
+0:setup-2.5.33-1.noarch.rpm
+1:filesystem-2.2.4-1.i386.rpm
+2:basesystem-8.0-3.noarch.rpm
+3:tzdata-2003d-2.noarch.rpm
+4:glibc-common-2.3.3-27.i386.rpm
+5:libgcc-3.3.3-7.i386.rpm
+6:glibc-2.3.3-27.i386.rpm
+7:mktemp-1.5-7.i386.rpm
+8:termcap-11.0.1-18.1.noarch.rpm
+9:libtermcap-2.0.8-38.i386.rpm
+10:bash-2.05b-38.i386.rpm
+11:ncurses-5.4-5.i386.rpm
+12:zlib-1.2.1.1-2.1.i386.rpm
+13:info-4.6-3.i386.rpm
+14:libselinux-1.11.4-1.i386.rpm
+15:findutils-4.1.7-25.i386.rpm
+16:grep-2.5.1-26.i386.rpm
+17:libattr-2.4.1-4.i386.rpm
+18:libacl-2.2.7-5.i386.rpm
+19:cracklib-2.7-27.1.i386.rpm
+20:cracklib-dicts-2.7-27.1.i386.rpm
+21:libstdc++-3.3.3-7.i386.rpm
+22:db4-4.2.52-3.1.i386.rpm
+23:glib-1.2.10-12.1.1.i386.rpm
+24:glib2-2.4.0-1.i386.rpm
+25:sed-4.0.8-4.i386.rpm
+26:gawk-3.1.3-7.i386.rpm
+27:fedora-release-2-5.i386.rpm
+28:psmisc-21.4-2.i386.rpm
+29:iproute-2.4.7-14.i386.rpm
+30:iputils-20020927-13.i386.rpm
+31:shadow-utils-4.0.3-21.i386.rpm
+32:chkconfig-1.3.9-1.1.i386.rpm
+33:e2fsprogs-1.35-7.1.i386.rpm
+34:e2fsprogs-1.35-7.1.i386.rpm
+35:ethtool-1.8-3.1.i386.rpm
+36:mingetty-1.07-2.i386.rpm
+37:net-tools-1.60-25.i386.rpm
+38:popt-1.9.1-0.3.i386.rpm
+39:coreutils-5.2.1-7.i386.rpm
+40:beecrypt-3.1.0-3.i386.rpm
+41:bzip2-libs-1.0.2-12.1.i386.rpm
+42:bzip2-1.0.2-12.1.i386.rpm
+43:elfutils-libelf-0.95-2.i386.rpm
+44:elfutils-0.95-2.i386.rpm
+45:gdbm-1.8.0-22.1.i386.rpm
+46:gmp-4.1.2-14.i386.rpm
+47:krb5-libs-1.3.3-1.i386.rpm
+48:openssl-0.9.7a-35.i386.rpm
+49:libxml2-2.6.8-1.i386.rpm
+50:readline-4.3-10.1.i386.rpm
+51:python-2.3.3-6.i386.rpm
+52:libxml2-python-2.6.8-1.i386.rpm
+53:rpm-4.3.1-0.3.i386.rpm
+54:rpm-python-4.3.1-0.3.i386.rpm
+55:wget-1.9.1-5.i386.rpm
+56:yum-2.0.7-1.1.noarch.rpm
+EOF
+        )
+        ;;
+    *)
+        die "architecture $(uname -m) unrecognized"
+        ;;
+esac
 
 if [ $(id -u) -ne 0 ]; then
     die "must have root privileges to create chroot"
Index: rpmstrap
===================================================================
--- rpmstrap	(revision 15937)
+++ rpmstrap	(revision 15941)
@@ -168,29 +168,28 @@
 31:shadow-utils-4.0.3-21.i386.rpm
 32:chkconfig-1.3.9-1.1.i386.rpm
 33:e2fsprogs-1.35-7.1.i386.rpm
-34:e2fsprogs-1.35-7.1.i386.rpm
-35:ethtool-1.8-3.1.i386.rpm
-36:mingetty-1.07-2.i386.rpm
-37:net-tools-1.60-25.i386.rpm
-38:popt-1.9.1-0.3.i386.rpm
-39:coreutils-5.2.1-7.i386.rpm
-40:beecrypt-3.1.0-3.i386.rpm
-41:bzip2-libs-1.0.2-12.1.i386.rpm
-42:bzip2-1.0.2-12.1.i386.rpm
-43:elfutils-libelf-0.95-2.i386.rpm
-44:elfutils-0.95-2.i386.rpm
-45:gdbm-1.8.0-22.1.i386.rpm
-46:gmp-4.1.2-14.i386.rpm
-47:krb5-libs-1.3.3-1.i386.rpm
-48:openssl-0.9.7a-35.i386.rpm
-49:libxml2-2.6.8-1.i386.rpm
-50:readline-4.3-10.1.i386.rpm
-51:python-2.3.3-6.i386.rpm
-52:libxml2-python-2.6.8-1.i386.rpm
-53:rpm-4.3.1-0.3.i386.rpm
-54:rpm-python-4.3.1-0.3.i386.rpm
-55:wget-1.9.1-5.i386.rpm
-56:yum-2.0.7-1.1.noarch.rpm
+34:ethtool-1.8-3.1.i386.rpm
+35:mingetty-1.07-2.i386.rpm
+36:net-tools-1.60-25.i386.rpm
+37:popt-1.9.1-0.3.i386.rpm
+38:coreutils-5.2.1-7.i386.rpm
+39:beecrypt-3.1.0-3.i386.rpm
+40:bzip2-libs-1.0.2-12.1.i386.rpm
+41:bzip2-1.0.2-12.1.i386.rpm
+42:elfutils-libelf-0.95-2.i386.rpm
+43:elfutils-0.95-2.i386.rpm
+44:gdbm-1.8.0-22.1.i386.rpm
+45:gmp-4.1.2-14.i386.rpm
+46:krb5-libs-1.3.3-1.i386.rpm
+47:openssl-0.9.7a-35.i386.rpm
+48:libxml2-2.6.8-1.i386.rpm
+49:readline-4.3-10.1.i386.rpm
+50:python-2.3.3-6.i386.rpm
+51:libxml2-python-2.6.8-1.i386.rpm
+52:rpm-4.3.1-0.3.i386.rpm
+53:rpm-python-4.3.1-0.3.i386.rpm
+54:wget-1.9.1-5.i386.rpm
+55:yum-2.0.7-1.1.noarch.rpm
 EOF
         )
         ;;
Index: rpmstrap
===================================================================
--- rpmstrap	(revision 15941)
+++ rpmstrap	(revision 15942)
@@ -150,7 +150,9 @@
 13:info-4.6-3.i386.rpm
 14:libselinux-1.11.4-1.i386.rpm
 15:findutils-4.1.7-25.i386.rpm
+15:pcre-4.5-2.i386.rpm
 16:grep-2.5.1-26.i386.rpm
+16:words-2-22.noarch.rpm
 17:libattr-2.4.1-4.i386.rpm
 18:libacl-2.2.7-5.i386.rpm
 19:cracklib-2.7-27.1.i386.rpm
@@ -161,7 +163,7 @@
 24:glib2-2.4.0-1.i386.rpm
 25:sed-4.0.8-4.i386.rpm
 26:gawk-3.1.3-7.i386.rpm
-27:fedora-release-2-5.i386.rpm
+27:fedora-release-2-4.i386.rpm
 28:psmisc-21.4-2.i386.rpm
 29:iproute-2.4.7-14.i386.rpm
 30:iputils-20020927-13.i386.rpm
@@ -173,6 +175,15 @@
 36:net-tools-1.60-25.i386.rpm
 37:popt-1.9.1-0.3.i386.rpm
 38:coreutils-5.2.1-7.i386.rpm
+38:pam-0.77-40.i386.rpm
+38:initscripts-7.53-1.i386.rpm
+38:SysVinit-2.85-25.i386.rpm
+38:util-linux-2.12-18.i386.rpm
+38:sysklogd-1.4.1-16.i386.rpm
+38:dev-3.3.13-1.i386.rpm
+38:which-2.16-2.i386.rpm
+38:modutils-2.4.26-16.i386.rpm
+38:procps-3.2.0-1.1.i386.rpm
 39:beecrypt-3.1.0-3.i386.rpm
 40:bzip2-libs-1.0.2-12.1.i386.rpm
 41:bzip2-1.0.2-12.1.i386.rpm
Index: rpmstrap
===================================================================
--- rpmstrap	(revision 15942)
+++ rpmstrap	(revision 15943)
@@ -21,9 +21,8 @@
 # Author: Branden Robinson
 
 PROGNAME=${0##*/}
-CHROOTDIR="./rpm-chroot"
-# Define DEBUG to "yes" if you want debugging output.
 DEBUG=
+SHOW_LIST=
 
 trace () {
     if [ -n "$DEBUG" ]; then
@@ -40,6 +39,56 @@
     exit 1
 }
 
+usage () {
+    cat <<EOF
+Usage: $PROGNAME { -h | --help }
+       $PROGNAME { -l | --list }
+       $PROGNAME [ -v | --verbose ] DIRECTORY
+Create a chroot environment in DIRECTORY using a minimal set of RPM packages.
+
+Options:
+  -h, --help                     display this message and exit
+  -l, --list                     list RPMs required for chroot creation and exit
+  -v, --verbose                  print verbose status messages
+EOF
+}
+
+# Parse command line.
+TEMP=$(getopt --options hlv \
+              --longoptions help,list,verbose \
+              -n "$PROGNAME" -- "$@")
+
+if [ $? -ne 0 ]; then
+    echo "$PROGNAME: error while getting options" >&2
+fi
+
+eval set -- "$TEMP"
+
+while :; do
+    case "$1" in
+        -h|--help)
+            usage
+            exit 0
+            ;;
+        -l|--list)
+            SHOW_LIST=yes
+            ;;
+        -v|--verbose)
+            DEBUG=yes
+            ;;
+        --)
+            # End of option arguments.
+            shift
+            break
+            ;;
+        *)
+            die "unrecognized option; use \"$PROGNAME --help\" for help"
+            exit 2
+            ;;
+    esac
+    shift
+done
+
 case "$(uname -m)" in
     x86_64)
         RPMS=$(cat <<EOF
@@ -209,15 +258,21 @@
         ;;
 esac
 
+if [ -n "$SHOW_LIST" ]; then
+    echo "$RPMS" | sed 's/[[:digit:]]\+://'
+    exit 0
+fi
+
+if [ $# -ne 1 ]; then
+    die "specify a directory to install to; use \"$PROGNAME --help\" for help"
+fi
+
+CHROOTDIR="$1"
+
 if [ $(id -u) -ne 0 ]; then
     die "must have root privileges to create chroot"
 fi
 
-# Process command-line arguments.
-if [ -n "$1" ]; then
-    CHROOTDIR="$1"
-fi
-
 trace "creating chroot directory"
 if [ -e "$CHROOTDIR" ]; then
     die "chroot directory $CHROOTDIR already exists; aborting"
Index: rpmstrap
===================================================================
--- rpmstrap	(revision 15943)
+++ rpmstrap	(revision 15950)
@@ -100,7 +100,7 @@
 5:libgcc-3.3.3-7.i386.rpm
 5:libgcc-3.3.3-7.x86_64.rpm
 6:glibc-2.3.3-27.x86_64.rpm
-6:glibc-2.3.3-27.i686.rpm
+6:glibc-2.3.3-27.i386.rpm
 7:mktemp-1.5-7.x86_64.rpm
 8:termcap-11.0.1-18.1.noarch.rpm
 9:libtermcap-2.0.8-38.x86_64.rpm
Index: rpmstrap
===================================================================
--- rpmstrap	(revision 15950)
+++ rpmstrap	(revision 16721)
@@ -168,7 +168,7 @@
 47:krb5-libs-1.3.3-1.x86_64.rpm
 47:krb5-libs-1.3.3-1.i386.rpm
 48:openssl-0.9.7a-35.x86_64.rpm
-48:openssl-0.9.7a-35.i686.rpm
+48:openssl-0.9.7a-35.i386.rpm
 49:libxml2-2.6.8-1.x86_64.rpm
 49:libxml2-2.6.8-1.i386.rpm
 50:readline-4.3-10.1.x86_64.rpm

Reply to: