diff options
author | jlam <jlam@pkgsrc.org> | 2004-01-14 23:55:29 +0000 |
---|---|---|
committer | jlam <jlam@pkgsrc.org> | 2004-01-14 23:55:29 +0000 |
commit | 8a84165b2900f37bab2afe4aebc6e6f0b7c29b96 (patch) | |
tree | fd0407c4e2e13987b953a9035f3269ef4a77abc9 /pkgtools/pkg_install/files/bpm | |
parent | 6987965e7ccbfd5f6ed0196da70a8f6e49cdeb7f (diff) | |
download | pkgsrc-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.1 | 117 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/bpm/bpm.cat1 | 61 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/bpm/bpm.sh | 222 |
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 |