From 748c6e7f89310a3092ef202ece4547356ad90a95 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sat, 29 Sep 2012 01:11:55 +0800 Subject: [PATCH] Bug 8840 - [SIGNED-OFF] ubuntu-pkg-check.sh fix and extend functionality First, reworked it into a newer script with parameters: ubuntu-packages.sh -r This will generate output identical to the old script, except that it is fixed for non-english setups. ubuntu-packages.sh -h This adds a brief help, which all scripts should have. ubuntu-packages.sh -ic This helps handle a multi-arch problem by printing out a relevant command for installing missing dependencies. Signed-off-by: Jared Camins-Esakov Signed-off-by: Magnus Enger Works as advertised, see Bugzilla for details. Signed-off-by: Jared Camins-Esakov --- install_misc/ubuntu-packages.sh | 191 +++++++++++++++++++++++++++++++ install_misc/ubuntu-pkg-check.sh | 27 ----- 2 files changed, 191 insertions(+), 27 deletions(-) create mode 100755 install_misc/ubuntu-packages.sh delete mode 100755 install_misc/ubuntu-pkg-check.sh diff --git a/install_misc/ubuntu-packages.sh b/install_misc/ubuntu-packages.sh new file mode 100755 index 0000000000..ef2c2c6d76 --- /dev/null +++ b/install_misc/ubuntu-packages.sh @@ -0,0 +1,191 @@ +#!/bin/bash + +# Copyright 2012 Universidad Nacional de Cordoba +# Written by Tomas Cohen Arazi +# Mark Tompsett +# +# This file is part of Koha. +# +# Koha 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. +# +# Koha 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 Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# Output simple help +usage() { + local scriptname=$(basename $0) + cat < /dev/null` + + if [ "$package_status" == "install ok installed" ] ; then + echo "yes" + else + echo "no" + fi +} + +# Get the installed package version +getPackageVersion() { + local package=$1 + dpkg-query --showformat='${Version}' -W $package +} + +# A parameter is required. +if [ "$#" -eq "0" ]; then + usage + exit 1 +fi + +# Initialize variables +CHECK=no +INSTALLCMD=no +HELP=no + +# Loop over parameters +while (( "$#" )); do + case $1 in + -r | --report ) + CHECK=yes + ;; + -ic | --install-command ) + INSTALLCMD=yes + ;; + -h | --help) + HELP=yes + ;; + * ) + usage + exit 1 + esac + shift +done + +if [ "$HELP" = "yes" ]; then + usage + exit 0 +fi + +# Determine what directory this script is in, the packages files +# should be in the same path. +DIR=`dirname $0` + +# Determine the Ubuntu release +UBUNTU_RELEASE=`lsb_release -r | cut -f2 -d' '` +UBUNTU_PACKAGES_FILE=$DIR/ubuntu.$UBUNTU_RELEASE.packages + +# Check for the release-specific packages file. Default to the general one +# but warn the user about LTS releases recommended, if they are attempting +# to do an install command option. +if [ ! -e $UBUNTU_PACKAGES_FILE ]; then + UBUNTU_PACKAGES_FILE=$DIR/ubuntu.packages + if [ "$INSTALLCMD" == "yes" ]; then + echo "# There's no packages file for your distro/release" + echo "# WARNING! We strongly recommend an LTS release." + fi +fi + +# We where asked to print the packages list and current versions (if any) +UBUNTU_PACKAGES=`awk '{print $1}' $UBUNTU_PACKAGES_FILE | grep -v '^\s*#' | grep -v '^\s*$'` + +# Only output this on an install command option in order to maintain +# output equivalence to the former script, in the case of reporting +# only. +if [ "$INSTALLCMD" == "yes" ]; then + + # Tell them which file being used to determine the output. + echo "# Using the $UBUNTU_PACKAGES_FILE file as source" + + # Comment for skiping the dots if needed .... + if [ "$CHECK" == "no" ]; then + echo -n "#" + fi +fi + +# Initialize variable to accumulate missing packages in. +MISSING_PACKAGES="" + +# Loop used to accumulate the missing packages and display package information if requested to report. +for PACKAGE in $UBUNTU_PACKAGES; do + + # If an install command option is running, but not a report option, + # There is no need to determine the version number. If it was + # This would run even slower! + + # Test if the package is installed + PACKAGE_INSTALLED=`packageInstalled $PACKAGE` + + # If we are supposed to report... + if [ "$CHECK" == "yes" ]; then + + # Determine the package version if it is installed. + if [ "$PACKAGE_INSTALLED" == "yes" ]; then + PACKAGE_VERSION=`getPackageVersion $PACKAGE` + # otherwise default to 'none'. + else + PACKAGE_VERSION="none" + fi + + # report the package name and version number. + echo "$PACKAGE = $PACKAGE_VERSION" + + # Otherwise, we'll just echo a dot for the impatient. + else + echo -n "." + fi + +done + +# If we aren't reporting, then the last echo didn't have a newline. +if [ "$CHECK" != "yes" ]; then + echo +fi + +# If the install command was requested... +if [ "$INSTALLCMD" == "yes" ]; then + + # Give them a nicely indented command to copy, if dependencies are missing. + if [ "${#MISSING_PACKAGES}" -gt "0" ]; then + cat < /dev/null | grep "Installed:"` - if [ "${#UBUNTU_PKG_POLICY}" -eq "0" ]; then - UBUNTU_PKG_POLICY="Installed: \(none\)\*" - fi - UBUNTU_PKG_VERSION=`echo $UBUNTU_PKG_POLICY | awk '{print $2}'` - echo "$F = $UBUNTU_PKG_VERSION" -done -- 2.39.5