summaryrefslogtreecommitdiff
path: root/pkgtools/pkg_install/files/bpm
diff options
context:
space:
mode:
authorjlam <jlam@pkgsrc.org>2004-01-14 23:55:29 +0000
committerjlam <jlam@pkgsrc.org>2004-01-14 23:55:29 +0000
commit8a84165b2900f37bab2afe4aebc6e6f0b7c29b96 (patch)
treefd0407c4e2e13987b953a9035f3269ef4a77abc9 /pkgtools/pkg_install/files/bpm
parent6987965e7ccbfd5f6ed0196da70a8f6e49cdeb7f (diff)
downloadpkgsrc-8a84165b2900f37bab2afe4aebc6e6f0b7c29b96.tar.gz
Update pkgtools/pkg_install to 20040114. Changes from version 20040106
include: * use ${MACHINE_ARCH} instead of what uname() puts into utsname.machine. the former represents the CPU architecture, which is what is recorded in binary packages; also allow the OS name to be overridden, as pkgsrc doesn't always use the value of utsname.sysname. * allow adding depoted packages if another package with the same ${PKGBASE} is already installed as this is explicitly allowed for in pkgviews.
Diffstat (limited to 'pkgtools/pkg_install/files/bpm')
-rw-r--r--pkgtools/pkg_install/files/bpm/bpm.1117
-rw-r--r--pkgtools/pkg_install/files/bpm/bpm.cat161
-rw-r--r--pkgtools/pkg_install/files/bpm/bpm.sh222
3 files changed, 400 insertions, 0 deletions
diff --git a/pkgtools/pkg_install/files/bpm/bpm.1 b/pkgtools/pkg_install/files/bpm/bpm.1
new file mode 100644
index 00000000000..a9e63c15b95
--- /dev/null
+++ b/pkgtools/pkg_install/files/bpm/bpm.1
@@ -0,0 +1,117 @@
+.\" $NetBSD: bpm.1,v 1.1 2004/01/14 23:55:29 jlam Exp $ */
+.\"
+.\"
+.\" Copyright (c) 2003 Alistair G. Crooks. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by Alistair G. Crooks.
+.\" 4. The name of the author may not be used to endorse or promote
+.\" products derived from this software without specific prior written
+.\" permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+.\" 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 AUTHOR 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.
+.\"
+.Dd December 21, 2003
+.Dt BPM 1
+.Os
+.Sh NAME
+.Nm bpm
+.Nd menu-based binary package manager
+.Sh SYNOPSIS
+.Nm
+.Op Fl hnVv
+.Op Fl b Ar baseURL
+.Op Fl m Ar machine
+.Op Fl r Ar release
+.Op Fl w Ar seconds
+.Sh DESCRIPTION
+The
+.Nm
+command is used to locate and install binary packages from any
+reachable URL.
+.Pp
+The following command-line options are supported:
+.Bl -tag -width indent
+.It Fl b Ar baseURL
+Specify a base URL from which to download binary packages.
+The default URL is
+.Pa ftp://ftp.netbsd.org/pub/NetBSD/packages .
+.It Fl h
+Print a help message and then exit.
+.It Fl m Ar machine
+Use
+.Ar machine
+as the machine architecture to be used, instead of that returned by
+.Xr uname 1 .
+.It Fl n
+Don't actually execute the commands to add the package.
+.It Fl r Ar release
+Use
+.Ar release
+as the operating system release to be used, instead of that returned by
+.Xr uname 1 .
+.It Fl V
+Print version number and exit.
+.It Fl v
+Turn on verbose output.
+.It Fl w Ar seconds
+The number of
+.Ar seconds
+to wait after displaying an error message and returning to
+normal menu operations.
+.El
+.Pp
+.Nm
+provides a menu-based binary package manager for
+.Nx .
+.Nm
+first connects to the URL using
+.Xr ftp 1 ,
+and displays a list of categories for which binary packages exist.
+If no categories are displayed, it could
+be that the machine architecture or operating system release string
+have been wrongly interpreted, and that it will be necessary to override
+this values by means of the command line options.
+Within a category, a list of packages will be displayed, and by selecting
+one using the number assigned to it, the package will be downloaded
+automatically, and installed, using the
+.Xr pkg_add 1
+utility.
+It is also possible to change the category currently being examined,
+and to quit from the utility, simply by selecting the appropriate choices
+on the menu.
+.Sh ENVIRONMENT
+The environment variables which govern the behaviour of
+.Xr ftp 1
+and
+.Xr pkg_add 1
+are valid for
+.Nm .
+.Sh SEE ALSO
+.Xr ftp 1 ,
+.Xr pkg_add 1 ,
+.Xr uname 1
+.Sh AUTHORS
+The
+.Nm
+utility was written by
+.An Alistair Crooks Aq agc@NetBSD.org .
diff --git a/pkgtools/pkg_install/files/bpm/bpm.cat1 b/pkgtools/pkg_install/files/bpm/bpm.cat1
new file mode 100644
index 00000000000..9e451370333
--- /dev/null
+++ b/pkgtools/pkg_install/files/bpm/bpm.cat1
@@ -0,0 +1,61 @@
+BPM(1) NetBSD Reference Manual BPM(1)
+
+NNAAMMEE
+ bbppmm - menu-based binary package manager
+
+SSYYNNOOPPSSIISS
+ bbppmm [--hhnnVVvv] [--bb _b_a_s_e_U_R_L] [--mm _m_a_c_h_i_n_e] [--rr _r_e_l_e_a_s_e] [--ww _s_e_c_o_n_d_s]
+
+DDEESSCCRRIIPPTTIIOONN
+ The bbppmm command is used to locate and install binary packages from any
+ reachable URL.
+
+ The following command-line options are supported:
+
+ --bb _b_a_s_e_U_R_L
+ Specify a base URL from which to download binary packages. The
+ default URL is _f_t_p_:_/_/_f_t_p_._n_e_t_b_s_d_._o_r_g_/_p_u_b_/_N_e_t_B_S_D_/_p_a_c_k_a_g_e_s.
+
+ --hh Print a help message and then exit.
+
+ --mm _m_a_c_h_i_n_e
+ Use _m_a_c_h_i_n_e as the machine architecture to be used, instead of
+ that returned by uname(1).
+
+ --nn Don't actually execute the commands to add the package.
+
+ --rr _r_e_l_e_a_s_e
+ Use _r_e_l_e_a_s_e as the operating system release to be used, instead
+ of that returned by uname(1).
+
+ --VV Print version number and exit.
+
+ --vv Turn on verbose output.
+
+ --ww _s_e_c_o_n_d_s
+ The number of _s_e_c_o_n_d_s to wait after displaying an error message
+ and returning to normal menu operations.
+
+ bbppmm provides a menu-based binary package manager for NetBSD. bbppmm first
+ connects to the URL using ftp(1), and displays a list of categories for
+ which binary packages exist. If no categories are displayed, it could be
+ that the machine architecture or operating system release string have
+ been wrongly interpreted, and that it will be necessary to override this
+ values by means of the command line options. Within a category, a list
+ of packages will be displayed, and by selecting one using the number as-
+ signed to it, the package will be downloaded automatically, and in-
+ stalled, using the pkg_add(1) utility. It is also possible to change the
+ category currently being examined, and to quit from the utility, simply
+ by selecting the appropriate choices on the menu.
+
+EENNVVIIRROONNMMEENNTT
+ The environment variables which govern the behaviour of ftp(1) and
+ pkg_add(1) are valid for bbppmm.
+
+SSEEEE AALLSSOO
+ ftp(1), pkg_add(1), uname(1)
+
+AAUUTTHHOORRSS
+ The bbppmm utility was written by Alistair Crooks <agc@NetBSD.org>.
+
+NetBSD 1.6.1 December 21, 2003 1
diff --git a/pkgtools/pkg_install/files/bpm/bpm.sh b/pkgtools/pkg_install/files/bpm/bpm.sh
new file mode 100644
index 00000000000..f12f8fcd0a6
--- /dev/null
+++ b/pkgtools/pkg_install/files/bpm/bpm.sh
@@ -0,0 +1,222 @@
+#! /bin/sh
+#
+# $NetBSD: bpm.sh,v 1.1 2004/01/14 23:55:29 jlam Exp $
+#
+# Copyright (c) 2003 Alistair G. Crooks. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by Alistair G. Crooks.
+# 4. The name of the author may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# 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 AUTHOR 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.
+#
+
+die()
+{
+ echo >&2 "$@"
+ exit 1
+}
+
+check_prog()
+{
+ _var="$1"; _name="$2"
+
+ eval _tmp=\"\$$_var\"
+ if [ "x$_tmp" != "x" ]; then
+ # Variable is already set (by the user, for example)
+ return 0
+ fi
+
+ for _d in `echo $PATH | tr ':' ' '`; do
+ if [ -x "$_d/$_name" ]; then
+ # Program found
+ eval $_var=\""$_d/$_name"\"
+ return 1
+ fi
+ done
+
+ die "$_name not found in path."
+}
+
+check_prog awkprog awk
+check_prog echoprog echo
+check_prog ftpprog ftp
+check_prog idprog id
+check_prog moreprog more
+check_prog pkg_addprog pkg_add
+check_prog rmprog rm
+check_prog sedprog sed
+check_prog suprog su
+check_prog unameprog uname
+
+# print version and exit
+version() {
+ $pkg_addprog -V
+ exit 0
+}
+
+# temporary files
+tmpcategories=/tmp/categories.$$
+tmppackages=/tmp/packages.$$
+
+# some base parameters
+base=ftp://ftp.netbsd.org/pub/NetBSD/packages
+release=`${unameprog} -r | ${sedprog} -e 's/_STABLE//'`
+machine=`${unameprog} -m`
+
+sleepsecs=1
+
+doit=""
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -V) version ;;
+ -b) base=$2; shift ;;
+ -h) ${echoprog} "$0 [-b BaseURL] [-h] [-m machine] [-n] [-r release] [-v] [-w secs]"; exit 0;;
+ -m) machine=$2; shift ;;
+ -n) doit=":" ;;
+ -r) release=$2; shift ;;
+ -v) set -x ;;
+ -w) sleepsecs=$2; shift ;;
+ *) break ;;
+ esac
+ shift
+done
+
+category=""
+
+while true; do
+ # if we don't have a packages file, then we need to choose a category
+ case "$category" in
+ "") # get possible categories
+ if [ ! -f $tmpcategories ]; then
+ ${echoprog} "Downloading package categories from ${base}..."
+ ${echoprog} "** QUIT" > $tmpcategories
+ ${echoprog} ls | ${ftpprog} ${base}/${release}/${machine}/ 2>/dev/null | \
+ ${awkprog} 'NF == 9 { if ($9 != "All") print $9 }' >> $tmpcategories
+ fi
+
+ # check for bad release numbering
+ # - it usually shows with 0 categories being displayed
+ ${awkprog} 'END { if (NR == 1) { print "\n\n\n*** No categories found - is the OS release set properly? ***\n\n\n" } }' < $tmpcategories
+
+ # display possible categories
+ ${awkprog} '{ print NR ". " $0 }' < $tmpcategories | ${moreprog}
+
+ # read a category number from the user
+ ${echoprog} -n "Please type the category number: "
+ read choice
+
+ # validate user's choice
+ case "$choice" in
+ 0|1) ${rmprog} -f $tmpcategories $tmppackages; exit 0 ;;
+ [2-9]|[0-9]*) category=`${awkprog} 'NR == '$choice' { print }' < $tmpcategories` ;;
+ *) category="" ;;
+ esac
+ case "$category" in
+ "") ${echoprog} "No such category \"$choice\""
+ sleep $sleepsecs
+ continue
+ ;;
+ esac
+
+ # get possible packages
+ ${echoprog} ""
+ ${echoprog} "Downloading package names from ${base}/${category}..."
+ ${echoprog} "** QUIT" > $tmppackages
+ ${echoprog} "** Change category" >> $tmppackages
+ ${echoprog} ls | ${ftpprog} ${base}/${release}/${machine}/${category}/ 2>/dev/null \
+ | ${awkprog} 'NF == 11 { print $9 }' >> $tmppackages
+ ;;
+ esac
+
+ # display possible packages
+ ${awkprog} '{ print NR ". " $0 }' < $tmppackages | ${moreprog}
+
+ # read a package number from the user
+ ${echoprog} -n "Please type the package number: "
+ read choice
+
+ # validate user's choice
+ case "$choice" in
+ 1) ${rmprog} -f $tmppackages $tmpcategories; exit 0 ;;
+ 2) category=""; continue ;; # no package to install - choose new category
+ [3-9]|[0-9]*) package=`${awkprog} 'NR == '$choice' { print }' < $tmppackages` ;;
+ *) package="" ;;
+ esac
+ case "$package" in
+ "") ${echoprog} "No such package \"$choice\""
+ sleep $sleepsecs
+ continue
+ ;;
+ esac
+
+ # check it's not already installed
+ pkgbase=`${echoprog} ${package} | ${sedprog} -e 's|-[0-9].*||'`
+ installed=`pkg_info -e $pkgbase`
+ case "$installed" in
+ "") ;;
+ *) ${echoprog} "$package selected, but $installed already installed"
+ sleep $sleepsecs
+ continue
+ ;;
+ esac
+
+ # Tell people what we're doing
+ ${echoprog} ""
+ ${echoprog} "Adding package ${base}/${release}/${machine}/${category}/${package}"
+
+ cmd="env PKG_PATH=${base}/${release}/${machine}/All ${pkg_addprog} ${package}"
+
+ # check if we need to become root for this
+ if [ `${idprog} -u` != 0 ]; then
+ ${echoprog} "Becoming root@`/bin/hostname` to add a binary package"
+ ${echoprog} -n "`${echoprog} ${suprog} | $awkprog '{ print $1 }'` "
+ $doit ${suprog} root -c "$cmd"
+ success=$?
+ else
+ $doit $cmd
+ success=$?
+ fi
+
+ # give feedback after adding the package
+ case $success in
+ 0) ${echoprog} "$package successfully installed" ;;
+ *) ${echoprog} "Problems when installing $package - please try again" ;;
+ esac
+
+ ${echoprog} ""
+ ${echoprog} -n "[Q]uit, [C]hange category, [I]nstall another package: "
+ read choice
+
+ case "$choice" in
+ [Qq]) break ;;
+ [Cc]) category="" ;;
+ [Ii]) ;;
+ esac
+done
+
+${rmprog} -f $tmpcategories $tmppackages
+
+exit 0