DSIW

Alles was interessant ist... (Linux, Programmierung, Datenschutz, Medien, uvm.)

Automatisierte Installation

| Comments

Dieser Artikel beschäftigt sich damit, wie man durch Skripte Paketnamen komfortabel in eine Textdatei schreiben kann, sodass die Pakete in dieser nach einer Neuinstallation automatisch installiert werden können. Das gleiche passiert mit den PPAs, die zum eigenen Repository hinzugefügt werden. Eine automatisierte Installation von Paketen ist dann hilfreich, wenn man seinen PC neuinstalliert hat und die vielen vorher installierte Software wieder installiert haben möchte.

Dies habe ich erreicht, indem ich mir Skripte geschrieben habe:

  • install
  • convertToInstall.sh
  • newppa
  • convertToPpa.sh
  • install.sh

Das erste Skript schreibt alle Pakete in eine Textdatei:

installdownload
1
2
3
4
#!/bin/bash

# Installation und Update der install-own.sh
sudo aptitude install $\* && echo "sudo aptitude -y install $\*" >> ~/dokumente/skripte/install-os/install-own.sh && echo "--- $\* zu install-own.sh hinzugefügt! ---"

Das heißt, wenn man nun ein Paket installieren möchte, dann gibt man statt sudo aptitude install nur noch install ein. Das Paket wird installiert und der dazugehörige Paketname wird durch das >> einer Textdatei angehängt. Installation und Anhängen von mehreren Paketnamen ist, getrennt durch ein Leerzeichen, möglich.

Konvertierung install-own.sh nach packages.sort.list

Vor einer Neuinstallation müssen alle Pakete in ein anderes Format konvertiert werden. Der Grund, warum ich das nicht von Anfang an gemacht habe ist der, weil die Skriptsammlung mit der Zeit angewachsen ist.

install-own.shdownload
1
2
3
4
5
6
7
8
9
10
11
# Name:     Installations-Skript (Auszug)
# Version:  2011-04-05
# Beschreibung: Dieses Skript enthält alle Pakete, die der Autor installiert hat. Dazu benutze er ein eigenes Skript, das die Pakete dieser Datei hinzugefügt hat.
# Muster: sudo aptitude -y install <Paketname(n)>
sudo apt-get install aptitude

sudo aptitude -y install texlive-latex-extra texlive-doc-de
sudo aptitude -y install texlive-lang-german
sudo aptitude -y install texlive-xetex
sudo aptitude -y install texlive-lang-german
[...]

Da alle Pakete nach der Zeichenfolge sudo aptitude -y install angehängt sind, müssen diese so konvertiert werden, dass alle Paketnamen untereinander stehen und keine doppelten Pakete installiert werden. Hierfür habe ich mir natürlich auch ein Skript geschrieben, das das erledigt. Das Ergebnis sollte danach folgendermaßen aussehen:

texlive-doc-de
texlive-latex-extra 
texlive-lang-german
texlive-xetex

Das Skript convertToInstall.sh zum Konvertieren:

convertToInstall.shdownload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
FILE="/tmp/packages.list"
SOURCE=$1
DEST=$2

# Copy package-file to /tmp/
cp $SOURCE $FILE

# Delete header (lines 1-4)
sed -i '1,4d' $FILE

# Delete non-packages
sed -i 's/aptitude//g' $FILE
sed -i 's/apt-get//g' $FILE
sed -i 's/install//g' $FILE
sed -i 's/-y//g' $FILE
sed -i 's/sudo//g' $FILE

# Delete whitespaces in first of line
sed -i 's/^[ t]\*//' $FILE
# Delete commands (#)
sed -e 's/#.\*//' -e '/^$/ d' $FILE > "${FILE}.tmp"
# All " " to LF
awk '{ for (i=1;i<=NF;i++) print $i }' "${FILE}.tmp" > "${FILE}.converted"
# Delete tmp-file
rm "${FILE}.tmp"
# Sort all lines and delete all multiple packages
cat "${FILE}.converted" | sort | uniq > "${FILE}.converted.sort"
# Copy back
cp -f "${FILE}.converted.sort" $DEST

# Count all multiple packages
echo "deleted packages:"
bc <<< `wc -l &quot;${FILE}.converted&quot; | cut -d ' ' -f1`-`wc -l &quot;${FILE}.converted.sort&quot; | cut -d ' ' -f1`

Wie man erkennen kann, wird das Skript folgendermaßen benutzt, wobei die Parameter zwei frei wählbare Dateien sind: ./convertToInstall.sh install-own.sh packages.sort.list

PPA

Um die persönlichen Archive installieren zu können, habe ich mir folgendes Skript namens newppa geschrieben, das mir die PPAs einer Textdatei hinzufügt:

newppadownload
1
2
3
#!/bin/bash
PPA=$1
sudo add-apt-repository ${PPA} && echo "${PPA}" >> ~/dokumente/skripte/install-os/ppa.list && echo "--- PPA: ${PPA} wurde zu ppa.list hinzugefügt! ---"

Das Konvertierungsskript für die PPAs ist ein angepasstes convertToInstall.sh:

convertToPpa.shdownload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
FILE="/tmp/paa.list"
SOURCE=$1;
DEST=$2;

# Copy package-file to /tmp/
cp $SOURCE $FILE

# Delete header (lines 1-1)
sed -i '1,1d' $FILE

# Delete whitespaces in first of line
sed -i 's/^[ t]\*//' $FILE
# Delete commands (#)
sed -e 's/#.\*//' -e '/^$/ d' $FILE > "${FILE}.tmp"
# All " " to LF
awk '{ for (i=1;i<=NF;i++) print $i }' "${FILE}.tmp" > "${FILE}.converted"
# Delete tmp-file
rm "${FILE}.tmp"
# Sort all lines and delete all multiple packages
cat "${FILE}.converted" | sort | uniq > "${FILE}.converted.sort"
# Copy back
cp -f "${FILE}.converted.sort" $DEST

Das Skript wird folgendermaßen ausgeführt: ./convertToPpa.sh ppa.list ppa.sort.list

Installationsskript

Dieses Skript wird ausgeführt, wenn man seinen PC neuinstalliert hatte. Dieses ruft dann das Skript convertToInstall.sh auf, um die Pakete in das richtige Format zu konvertieren. Das gleiche passiert mit dem Skript convertToPpa.sh für die PPAs. Durch den xargs-Befehl im Installationsskript werden alle Pakete installiert. Unter dem Punkt manual installation sind die Pakete angegeben, die nicht durch das Skript installiert werden. Unter dem Reiter config werden eigene Icons und Konfigurationsdateien an den alten Speicherort kopiert. Danach ist die Installation abgeschlossen.

install.shdownload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# Installations-Skript
# Autor: DSIW
# E-Mail: dsiw@privatdemail.net

cd ~/dokumente/skripte/install-os

#######################
# INSTALLATION PACKAGES
#######################

~/bin/convertToInstall.sh install-os.sh
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install aptitude
xargs -a "packages.sort.list" sudo aptitude -y install
xargs -a "ppa.sort.list" sudo add-apt-repository

# MANUAL INSTALLATION
# truecypt

#######################
# CONFIG
#######################
#./configs/config-files.sh
#./images/config-images.sh

cd -

Downloads

Diese Skriptesammlung dient auch als Anregung für weitere Skripte dieser Art. Dies soll zeigen, wie flexibel Linux ist und es auf lange Sicht Zeit spart.

Alternativ kann man auch apt-clone verwenden, um die Pakete des einen PCs bei einem anderen PC zu installieren. Christoph Langner schrieb dazu diesen Artikel.

Comments