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: