Antons blogg om elektronik och Linux

16 januari, 2011

Paketinstallationsskript

Jag har i dagarna byggt mig en ny dator – på riktigt den här gången. Det kanske inte är så vansinnigt intressant för er att veta så jag hoppar över detaljerna och nöjer mig med en liten bild:

Något som kanske är betydligt mer intressant för er, kära läsare, är (förutom mitt nya minimalistiska WordPress-tema :)) mitt senaste skript: en paketinstallerare för Ubuntu. Visserligen startade mitt gamla Ubuntu-system upp på den nya datorn som om inget hade hänt (något som inte kan sägas om Windows XP), men eftersom den nya processorn var 64-bitarskapabel krävdes ändå en ominstallation för att kunna använda den fullt ut. Att sitta och manuellt installera om alla program efteråt är dock inte särskilt kul så därför uppfann jag ett skript som gör det åt mig efter kommande Ubuntu-installationer. Skriptet läser paket från en lista som sparas i en separat fil, kontrollerar vilka som finns tillgängliga och installerar sedan allt. Det kan även lägga till PPAn som sparas i en annan fil. Genom att köra exempelvis

sudo ./paketinstallerare.sh ppa install upgrade

kommer skriptet att lägga till PPAn, uppdatera förråden, installera alla paket i paketlistan samt uppgradera alla paket. Du bör ange ppa före install för att skriptet även ska kunna installera de paket som inte finns i Ubuntus standardförråd. För att se alla alternativ kan du köra skriptet utan argument. Det finns en specialare som ser ut så här:

sudo ./paketinstallerare.sh spotify

som lägger till Spotifys förråd, GPG-nyckel samt installerar programmet. Denna specialåtgärd krävs eftersom Spotify angett en deb-rad som ska rakt in i /etc/apt/sources.list istället för en vanlig ppa:-rad.

Nedan följer skriptet i sin helhet. Missa inte heller min helt nya skriptsamling här på bloggen, där jag samlar mina allra bästa skript. Eftersom vi svenskar är lite intelligentare än amerikaner behöver jag säkert inte gå igenom att du använder mina skript helt på egen risk och att jag inte kan garantera deras funktion på ditt system😉

#!/bin/bash
# Installerar allt du kan tänkas behöva. Lägg alla paket att installera i ./paketlista
# (ett paket per rad) och alla PPA att lägga till i ./ppalista (ett ppa per rad).

if [ "$UID" != 0 ]; then
 echo "Skriptet behöver köras som root (sudo $0)"
 exit 1
fi

show_usage () {
 echo "Användning:"
 echo -e "$0 install\tInstallera paket från paketlista"
 echo -e "$0 remove\tTa bort paket från paketlista"
 echo -e "$0 ppa\tLägg till PPAn från ppalista"
 echo -e "$0 update\tUppdaterar förråden"
 echo -e "$0 upgrade\tInstallerar alla uppgraderingar"
 echo -e "$0 spotify\tInstallerar Spotify för Linux preview"
}

# inga argument
if [ "$#" == 0 ]; then
 show_usage
 exit 2
fi

# kontrollera att angivna kommandon finns
for arg in $@; do
 case $arg in
 install|remove|ppa|update|upgrade|spotify)
 ;;
 *) # skriptet kommer aldrig hit vid korrekt användning
 show_usage
 exit 2
 esac
done

for arg in $@; do
 case $arg in
 install) # installera program från paketlista
 if [ -f paketlista ]; then
 apt_ary=()
 fail_ary=()
 while read paket; do
 apt-cache show $paket &> /dev/null
 if [ "$?" == 0 ]; then
 apt_ary+=( $paket )
 else
 fail_ary+=( $paket )
 fi
 done < paketlista

 apt-get -y install ${apt_ary[@]}

 if [[ $fail_ary ]]; then
 echo "Följande paket kunde inte hittas:"
 echo ${fail_ary[@]}
 fi
 else
 echo "paketlista kunde inte hittas!"
 fi
 ;;
 remove) # ta bort program från paketlista (vad man nu skulle vilja göra det för)
 if [ -f paketlista ]; then
 apt_ary=()
 fail_ary=()
 while read paket; do
 apt-cache show $paket &> /dev/null
 if [ "$?" == 0 ]; then
 apt_ary+=( $paket )
 else
 fail_ary+=( $paket )
 fi
 done < paketlista

 apt-get -y remove ${apt_ary[@]}

 if [[ $fail_ary ]]; then
 echo "Följande paket kunde inte hittas:"
 echo ${fail_ary[@]}
 fi
 else
 echo "paketlista kunde inte hittas!"
 fi
 ;;
 ppa) # lägger till PPAn från ppalista
 if [ -f ppalista ]; then
 while read ppa; do
 add-apt-repository $ppa
 done < ppalista

 apt-get -y update
 else
 echo "ppalista kunde inte hittas!"
 fi
 ;;
 update) # uppdaterar förråd
 apt-get -y update
 ;;
 upgrade) # uppgraderar alla paket
 apt-get -y dist-upgrade
 ;;
 spotify) # installerar Spotify preview (en liten specialare)
 grep spotify /etc/apt/sources.list # kollar först om PPAet redan finns i sources.list
 if [ "$?" != 0 ]; then
 echo | tee -a /etc/apt/sources.list
 echo '# Spotify preview' | tee -a /etc/apt/sources.list
 echo 'deb http://repository.spotify.com stable non-free' | tee -a /etc/apt/sources.list
 gpg --keyserver wwwkeys.de.pgp.net --recv-keys 4E9CFF4E
 gpg --export 4E9CFF4E | apt-key add -
 apt-get -y update
 else
 echo "Spotifys PPA är redan installerat!"
 fi
 esac
done

Du måste själv skapa en fil med paket att installera som du döper till ”paketlista” och lägger i samma mapp som skriptet. En paketlista kan exempelvis se ut så här:

ubuntu-restricted-extras
amsn
build-essential
conky
gimp

Om du vill att skriptet ska lägga till PPAn åt dig behöver du skapa filen ”ppalista” som du också lägger i samma mapp som skriptet. En ppalista kan exempelvis se ut så här:

ppa:ubuntu-mozilla-daily/ppa
ppa:philip5/extra
ppa:stebbins/handbrake-releases

Skriv gärna en kommentar här nedan om du gillar skriptet eller om du har förslag på förbättringar🙂

Kommentera »

Inga kommentarer ännu.

RSS feed for comments on this post. TrackBack URI

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

Blogga med WordPress.com.

%d bloggare gillar detta: