From 4e78298cd02f7ecbd9c9e7a5984d2730ca732601 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sat, 29 Sep 2012 01:11:55 +0800 Subject: [PATCH] Bug 8840 - 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. --- install_misc/ubuntu-packages.sh | 196 ++++++++++++++++++++++++++++++++++++++ install_misc/ubuntu-pkg-check.sh | 27 ------ 2 files changed, 196 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 0000000..65905c9 --- /dev/null +++ b/install_misc/ubuntu-packages.sh @@ -0,0 +1,196 @@ +#!/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 ; then + return 0 + else + return 1 + fi +} + +# Get the installed package version +getPackageVersion() { + local package=$1 + dpkg-query -W $package | cut -f2 +} + +# 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 + if packageInstalled $PACKAGE ; then + PACKAGE_INSTALLED=1 + + # It must not be installed, accumulate for output + else + PACKAGE_INSTALLED=0 + MISSING_PACKAGES="$MISSING_PACKAGES $PACKAGE" + fi + + # If we are supposed to report... + if [ "$CHECK" == "yes" ]; then + + # Determine the package version if it is installed. + if [ $PACKAGE_INSTALLED ]; then + PACKAGE_VERSION=`getPackageVersion $PACKAGE` + + # otherwise default to 'none'. + else + PACKAGE_VERSION="none" + fi + + # report the package name and version number. + echo -e "$PACKAGE = $PACKAGE_VERSION" + + # Otherwise, we'll just echo a dor 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 -- 1.7.9.5