#!/bin/bash # Copyright (C) 2014 Ian Kelling # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # basic yum/apt package manager abstraction, plus a few minor conveniences if command -v yum &> /dev/null; then # package manager p() { local s; [[ $EUID != 0 ]] && s=sudo $s yum "$@" } # package install pi() { local s; [[ $EUID != 0 ]] && s=sudo $s yum -y install "$@" } # package find pf() { local s; [[ $EUID != 0 ]] && s=sudo $s yum search "$@" } # package remove/uninstall pu() { local s; [[ $EUID != 0 ]] && s=sudo $s yum autoremove "$@" } pup() { # upgrade local s; [[ $EUID != 0 ]] && s=sudo $s yum -y distro-sync full "$@" } # package list info pl() { yum info "$@" } pfile() { yum whatprovides \*/$1 } elif command -v apt-get &>/dev/null; then p() { local s; [[ $EUID != 0 ]] && s=sudo $s apt-get "$@" } pupdate() { local s f; [[ $EUID != 0 ]] && s=sudo # update package list if its more than an 2 hours old f=/var/cache/apt/pkgcache.bin if [[ ! -r $f ]] \ || (( $(( $(date +%s) - $(stat -c %Y $f ) )) > 60*60*2 )); then $s apt-get update fi } pi() { if dpkg -s -- "$@" &>/dev/null; then return 0 fi while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done pupdate local s; [[ $EUID != 0 ]] && s=sudo $s $PI_PREFIX apt-get -y install --purge --auto-remove "$@" } pi-nostart() { if dpkg -s -- "$@" &>/dev/null; then return 0 fi while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done pupdate local s; [[ $EUID != 0 ]] && s=sudo local f=/usr/sbin/policy-rc.d $s dd of=$f </dev/null; do sleep 1; done $s apt-get -y remove --purge --auto-remove "$@" # seems slightly redundant, but it removes more stuff sometimes. $s apt-get -y autoremove } pup() { # upgrade while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done pupdate local s; [[ $EUID != 0 ]] && s=sudo $s apt-get -y dist-upgrade --purge --auto-remove "$@" $s apt-get -y autoremove } # package info pl() { if type -p aptitude &>/dev/null; then aptitude show "$@" else apt-cache show "$@" fi } pfile() { local file=$1 # ucfq can tell us about config files which are not tracked # with apt-file. but, for at least a few files I tested # which are tracked with apt-file, ucfq doesn't show their # package name. So, commenting this, waiting to find # a config file only tracked by ucfq to see if it gives the # package name and if I can identify this kind of file. # if [[ $file == /* ]] && ! ucfq -w $file | grep ::: &>/dev/null; then # ucfq $file if [[ $file == */* ]]; then apt-file find -x "$file"\$ else apt-file find -x /"$file"\$ update-alternatives --list "$file" 2>/dev/null fi } pkgfiles() { if dpkg -s "$1" &>/dev/null; then dpkg-query -L $1 else apt-file -x list "^$1$" fi } elif command -v pacman &>/dev/null; then p() { pacaur "$@" } pi() { pacaur -S --noconfirm --needed --noedit "$@" } pf() { pacaur -Ss "$@" } pu() { pacaur -Rs --noconfirm "$@" if p=$(pacaur -Qdtq); then pacaur -Rs $p fi } aurex() { p="$1" aur='https://aur.archlinux.org' curl -s $aur/$(curl -s "$aur/rpc.php?type=info&arg=$p" \ | jq -r .results.URLPath) | tar xz cd "$p" } pmirror() { local s; [[ $EUID != 0 ]] && s=sudo local x=$(mktemp) curl -s "https://www.archlinux.org/mirrorlist/\ ?country=US&protocol=https&ip_version=4&ip_version=6&use_mirror_status=on" \ | sed -r 's/^[ #]*(Server *=)/\1/' > $x if (( $(stat -c %s $x ) > 10 )); then $s cp $x /etc/pacman.d/mirrorlist rm $x fi } pup() { # upgrade local s; [[ $EUID != 0 ]] && s=sudo # file_time + 24 hours > current_time if ! (( $(stat -c%Y /etc/pacman.d/mirrorlist) + 60*60*24 > $(date +%s) )) then pmirror fi pacaur -Syu --noconfirm "$@" } # package info pl() { pacaur -Si "$@" } pfile() { pkgfile "$1" } pkgfiles() { if pacaur -Qs "^$1$" &>/dev/null; then pacman -Ql $1 else pkgfile -l $1 fi } fi