Vor einer Weile hatte ich mal nachgefragt, ob denn Interesse an dem Installationsscript besteht, dass ich mir hier zusammen gestellt habe. Sinn und Zweck des ganzen ist es einfach, dass man nach einer Ubuntu-Neuinstallation mit einem Script die Software installieren kann, die man immer installiert ohne viel tippen oder ewig in Synaptic oder dem Software Center rumklicken zu müssen. Außerdem übernimmt das Script auch gleich das hinzufügen von Fremdquellen wie Medibuntu oder diversen PPAs. Hier sei mir noch der Hinweis gestattet, das Fremdpakete das System gefährden können. Mehr dazu im Wiki von ubuntuusers.de.
Da ich das Talent habe, nach einer Neuinstallation immer das eine oder andere Programm zu vergessen, spart mir dieses Script auch den Frust später Software installieren zu müssen, an die man eigentlich hätte denken müssen. Im Prinzip ist das ganze nichts anderes als eine Auflistung von Befehlen, die nacheinander abgearbeitet werden ohne dass bei jedem Befehl abgefragt wird, ob ich das wirklich möchte. Ich habe mich aber dagegen entschieden, mein Script einfach online zu stellen, sondern hier einen Beitrag mit ein paar Beispielen dazu zu schreiben. Ein Blick in den Bash-Skripting-Guide für Anfänger im Ubuntuusers-Wiki lohnt sich allerdings.
Das Script kann mit einem x-beliebigen Texteditor erstellt und bearbeitet werden. Ich nutze dafür gerne gedit, das standardmäßig mit Ubuntu installiert ist. Bei der Vergabe des Dateinamens dürfen keine Sonderzeichen verwendet werden und es sollte nicht wie ein gängiger Befehl heißen. Prüfen kann man das mit dem Befehl which Scriptname. Ausführbar macht man die Datei mit dem Befehl chmod +x /pfad/zum/Script/Scriptname, ausführt wird es mit ./Scriptname.
Vor den einzelnen Ausgaben kann man einen kleinen erklärenden Kommentar setzen, die das ganze übersichtlicher machen. Dazu setzt man am Anfang der Zeile einfach ein #-Zeichen. Zeilen, die so beginnen werden von der Bash ignorniert.
Mit der ersten Zeile des Scripts legt man Fest, mit welcher Shell das Script ausgeführt werden soll:
#!/bin/bash
Am Anfang soll geprüft werden, ob das Script auch mit root-Rechten ausgeführt wird. Erfüllt man diese Rechte beim Starten des Scriptes nicht, wird es einfach beendet. Das kann man mit folgendem Befehl abfragen:
# Check for admin rights
uid=$(/usr/bin/id -u) && [ "$uid" = "0" ] || { echo "You need to be root to run this script! Exiting.."; exit 1; }
Als nächstes kann man prüfen lassen, ob vielleicht noch ein anderes Programm läuft, dass das Ausführen des Scripts verhindert. Das können zum Beispiel Synaptic oder das Software-Center sein.
# Check if there are applications running which can interfere with the script
sleep 1
for lock in synaptic update-manager software-center apt-get dpkg aptitude
do
if ps -U root -u root u | grep $lock | grep -v grep > /dev/null;
then
echo "Installation won't work. Please close $lock first then try again.";
exit
fi
done
Als nächstes sollen die Paketquellen aktualisiert und eventuelle Updates installiert werden. Hinterher wird aufgeräumt.
# Update the system sources and software apt-get clean apt-get update apt-get --yes upgrade apt-get --yes dist-upgrade apt-get clean
Das --yes ist dafür zuständig, dass die Frage, ob man das auch wirklich machen möchte, gleich automatisch beantwortet wird. Je nach verwendeter Shell muss stattdessen --force-yes verwendet werden.
Als nächstes kann man einzelne Paketquellen hinzufügen lassen, bzw. auch gleich Pakete installieren. Bei mir fange ich dort mit Medibuntu an:
# Medibuntu wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list && apt-get --quiet update && apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring && apt-get --quiet update
Dieser Befehl fügt die Paketquellen hinzu und installiert den Keyring.
Mit
apt-get --yes install app-install-data-medibuntu apport-hooks-medibuntu
werden Pakete installiert, die die in Medibuntu vorhandenen Pakete zum Software-Center hinzufügen und es erlauben an den Bugtracker des Projektes Fehler zu melden.
Zum Schluss werden dann die Pakete installiert, die man gerne haben möchte:
apt-get --yes install w32codecs libdvdcss2
In meinem Fall sind das die w32codecs und die libdvdcss2.
Beim Installieren mit der Desktop-CD kann man seit Ubuntu 10.10 auch mp3, Java. Flash etc. bei der Ubuntu-Installation über ein Metapaket mit installieren lassen. bei mir funktionierte dies allerdings nicht, also habe ich den Befehl dafür auch noch mit in das Script geschrieben:
# restricted extras (mp3, flash, etc.) apt-get install ubuntu-restricted-extras
Als nächstes kann man die Paketquelle für Opera zur sources.list hinzufügen und das Paket installieren:
# Opera Stable Releases sh -c 'echo "deb http://deb.opera.com/opera/ stable non-free" >> /etc/apt/sources.list.d/opera.list' wget -O - http://deb.opera.com/archive.key | apt-key add - apt-get update apt-get --yes install opera
Als nächstes soll Google Chrome (32-bit) hinzugefügt werden:
# Google Chrome wget https://dl-ssl.google.com/linux/direct/google-chrome-stable_current_i386.deb && dpkg -i google-chrome-stable_current_i386.deb && rm google-chrome-stable_current_i386.deb
Hier wird das Paket direkt vom Server geholt, installiert und die deb-Datei anschließend wieder von der Festplatte entfernt. Die Paketquelle wird während der Installation automatisch hinzugefügt. Für die 64-bit-Version muss der Befehl entsprechend angepasst werden.
Bei Dropbox ist das ganze ein wenig umständlicher, da das über wget heruntergeladene Paket komisch benannt wird. Deswegen wird im Befehl vorgegeben, wie die heruntergeladene Datei heißen soll:
# Dropbox wget -O nautilus-dropbox_0.6.7_i386.deb "https://www.dropbox.com/download?dl=packages/nautilus-dropbox_0.6.7_i386.deb" && dpkg -i nautilus-dropbox_0.6.7_i386.deb && rm nautilus-dropbox_0.6.7_i386.deb
Auch hier wird das Paket nach dem Installieren wieder von der Festplatte entfernt. Die Paketquelle wird automatisch hinzugefügt. Auch hier handelt es sich wieder um die 32-bit-Version. Für 64-bit-Systeme muss der Befehl entsprechend angepasst werden. Nachdem nautilus-dropbox installiert wurde meldet sich das System und möchte nautilus neu gestartet haben. Außerdem erscheint dann der Installationsdialog für den Dropbox-client.
Ein PPA auf Launchpad möchte ich hier am Beispiel von Shutter hinzufügen. ppa:shutter/ppa muss gegen das jeweils gewünschte PPA ausgetauscht werden. Wie das PPA heißt findet man auf der jeweiligen Seite bei Lanchpad unter dem Punkt “Adding this PPA to your system” (Screenshot).
# Shutter add-apt-repository ppa:shutter/ppa apt-get update apt-get --yes install shutter
Als zweites PPA-Beispiel hier noch das Equinox-Theme und die Faenza-Icons:
# Equinox-Theme and Faenza-Icons add-apt-repository ppa:tiheum/equinox apt-get update apt-get --yes install equinox-theme equinox-ubuntu-theme faenza-icon-theme
Auch aus den offiziellen Paketquellen sollen noch ein paar Programme installiert werden. Diese fügt man auch einfach in das Script hinzu:
# Pidgin apt-get --yes install pidgin # Xchat apt-get --yes install xchat # Thunderbird apt-get --yes install thunderbird thunderbird-locale-de thunderbird-gnome-support
Zum Abschluss möchte ich noch vorinstallierte Pakete wieder loswerden. Da ich für Instant Messaging Pidgin verwende benötige ich Empathy nicht. Bei vorinstallierten Programmen muss man ein bisschen aufpassen, dass man nicht Pakete deinstalliert, die von wichtigen anderen Paketen abhängen. Soweit ich sehen konnte kann man Empathy-Pakete problemlos deinstallieren:
# Removing Empathy apt-get --yes remove empathy nautilus-sendto-empathy empathy-common
Am Ende des Scripts soll noch einmal nach Updates gesucht und ein wenig aufgeräumt…
# Check for updates again and cleanup after install apt-get update apt-get --yes upgrade apt-get --yes dist-upgrade apt-get clean
…und das Script beendet werden
exit
Damit man sich das ganze noch mal übersichtlicher ansehen kann habe ich die Beispiele mal in einer Beispieldatei zusammen gefasst.
Wie man sieht ist das lediglich eine Sammlung von Befehlen, die das Nachinstallieren von Software in einer frischen Ubuntu-Installation in meinen Augen schon sehr erleichtern und auch ein bisschen Zeit sparen. Ich hoffe der eine oder andere kann damit ein bisschen was anfangen.
Wer so etwas grafisch zum klicken möchte sollte mal bei webupd8.org vorbei schauen. Dieses Script ist allerdings für Ubuntu 10.04 Lucid Lynx erstellt und ich habe es nicht ausprobiert. Außerdem braucht man da erweiterte Kenntnisse in Sachen Bash-Skripting um sich dieses Script anzupassen.

08/12/2010 @ 13:03
Schönes Script, Danke dafür. Ich habe schon länger eines gesucht um schnell aktuelle Ubuntu-USB-Bootsticks zu erstellen.
Die Frage wäre noch in wie weit man es bei jedem Upgrade von Ubuntu anpassen muss (hab beim ersten überfliegen des Scripts aber nichts gefunden).
Was du noch hinzufügen könntest wäre eine exportierte History des eigenen Systems.
Im Wiki von apt hab ich dazu folgenden Befehl gefunden:
find /var/lib/dpkg/info/ -daystart \( -name \*.list -a -mtime -3 \) | sed ‘s#.list$##;s#.*/##’ | sort
Wobei 3 die Anzahl der Tage angibt, deren Änderungen angezeigt werden sollen.
Grüße
Max
08/12/2010 @ 13:12
Vielen Dank dafür! Ich arbeite seit kurzem an einem ähnlichen Skript. Bei mir sollen allerdings noch User angelegt und nfs-shares in die fstab eingebunden werden. Die Anlage der User tut noch nicht wirklich. Deine Prüfungsroutinen am Anfang finde ich prima und werde sie mal übernehmen/testen.
So ein Skript erleichtert einem die Arbeit erheblich. Vor allem wenn man, wie ich, bei jedem neuen Release neu installiert und man mit vier Usern je Rechner hantieren muss, die auch noch die unterschiedlichsten nfs-shares in ihre /home gesetzt bekommen.
Nochmal Danke für die Anregung!
08/12/2010 @ 13:37
mein nas laufwerk füge ich in der fstab per script dann noch immer so hinzu :)
# NAS Laufwerk hinzufügen
mkdir /media/musik
echo “//192.168.1.111/Musik /media/musik cifs credentials=/home/dawn/.smbcredentials,iocharset=utf8 0 0″ | sudo tee -a /etc/fstab
echo “” | tee -a /etc/fstab
24/01/2011 @ 14:10
Moin Moin.
Habe mal deine Zeilen via Su im Terminal eingetragen nur mit dem Unterschied, das ich die Quelladdy auf den wert ändern muste
echo “192.168.178.5/Daten=/home/*user*/.LAN,iocharset=utf8 0 0″ geändert hab. der Ordner /media/Netzwer-HDD steht da, allerdings hab sehe ich die daten leider noch nicht. Hab ich da irgendwo einen befehl übersehen?
lg Maik
08/12/2010 @ 16:50
Hallo!
ich hab auch ein ähnliches Skript. Sollte nun eine Durchführung aus irgend einem Grund abgebrochen und neu gestartet werden, befinden sich doppelte Einträge von Repositorys in der Source-Liste.
Darum füge ich Opera folgendermassen ein:
# Opera Quellen
operaCount=$(cat /etc/apt/sources.list | grep -c “deb.opera.com”)
if [ $operaCount -eq '0' ]; then
echo “füge Opera Quellen ein”
echo ‘deb http://deb.opera.com/opera/ stable non-free’ | sudo tee -a /etc/apt/sources.list
wget -q http://deb.opera.com/archive.key -O- | sudo apt-key add -
else
echo “Opera Quellen schon vorhanden”
fi
08/12/2010 @ 16:52
Hi,
nach einer Möglichkeit nach einem Abbruch fortzusetzen, wo man aufgehört hat, suche ich leider noch.
Vielleicht hat ja jemand eine Idee?
08/12/2010 @ 19:15
Vielleicht ist das hier für dich interessant:
http://web.slzm.de/blog/linux/hopeka-modulares-post-install-skript-fur-ubuntu/
08/12/2010 @ 19:21
Habe vor einiger Zeit auch solch ein Skript in einer Nacht und Nebel Aktion geschrieben :-)
-> http://suckup.de/ubuntu-10.10-tweak.txt
(http://suckup.de/blog/2010/10/13/ubuntu-10-10-tweak-skript/)
… habe dort auch noch einige Dinge auskommentiert, welche man noch einpflegen könnte, wie z.B. aufräumen der sources.list & sources.list.d/ etc.
09/12/2010 @ 07:21
Vielen Dank für den Artikel. So etwas in der Art hat mich schon immer interessiert.
Jedoch eine Frage habe ich. Warum ziehst du dir diverse Programme manuell statt die aus den (diversen) Quellen zu nutzen? Wäre das nicht einfacher, da du nicht vorher genau schauen musst, welche Version mit welchem Dateinamen verfügbar ist?
09/12/2010 @ 09:48
Wenn du bei Dropbox die Quellen erst anlegst und dann daraus installierst kann es passieren, dass du doppelte Einträge in der sources.list hast, weil die Quellen während der Installation nochmal eingetragen werden.
Das gleiche gilt für Google Chrome.
13/12/2010 @ 19:29
[...]
# Ergebnis wird nun in die sources.list geschrieben und es wird aufgeraeumt
sed -e “s/#.*//g” -e “s/ *$//” -e “/^$/d” ${TMPFILE} | sort -u > ${SOURCES}
[...]
:-)