Debmirror-install
From LUGUM
Dies ist mein erstes perl Script, wenn jemand einen Fehler findet oder sieht das ich Totalen Schwachsinn Programmiert habe, kann mir gerne eine Mail schreiben.
Mir ist durchaus bewusst, dass das ganze mit einem Bash Script einfacher ging, aber ich wollte ja Programmieren mit Perl lernen.
mirror-install
#!/usr/bin/perl -w
#
####################################################################
# #
# Script zum Installieren von Debmirror #
# #
# Autor: Andreas Kraus (lug@ak1301.de) #
# Version: 0.1 #
# Erstellt: 02.07.2006 #
# Letzte Änderung: #
# #
####################################################################
if ( $< != 0 ){
print "Sie muessen dieses Script als Root ausfuehren. \n";
exit 1;
}
$INSTALL="n";
print 'Soll Das Paket "debmirror" installiert werden? [Y/n] ';
chomp($DEBMIRROR=<STDIN>);
if ($DEBMIRROR eq "" || $DEBMIRROR eq "y" || $DEBMIRROR eq "Y"){
$INSTALL="y";
$PAKET="debmirror patch";
}
print 'Soll Das Paket "debian-keyring" installiert werden? [Y/n] ';
chomp($KEYRING=<STDIN>);
if ($KEYRING eq "" || $KEYRING eq "y" || $KEYRING eq "Y"){
$INSTALL="y";
$PAKET=${PAKET}."debian-keyring";
}
if ( $INSTALL eq "y"){
push (@zusammenfassung, "Folgende(s) Paket(e) werden installiert: $PAKET\n");
}else{
push (@zusammenfassung, "Es werden keine Pakete installiert\n");
}
print 'Als welcher User soll Debmirror ausgefuehrt werden [mirror] ';
chomp($MIRRORUSER=<STDIN>);
if ($MIRRORUSER eq ""){ $MIRRORUSER = "mirror";}
push (@zusammenfassung, "Folgender User führt das Script aus: $MIRRORUSER\n");
print 'Welcher Gruppe soll Debmirror angehören [mirror] ';
chomp($MIRRORGROUP=<STDIN>);
if ($MIRRORGROUP eq ""){ $MIRRORGROUP = "mirror";}
push (@zusammenfassung, "Folgender Gruppe gehört das Script an: $MIRRORGROUP\n");
print 'In welchem Pfad soll der Mirror Liegen? '."\n".
'Es werdenfuer sarge,etch,sid bis zu 26 GB benoetigt (nur Binaerpakete) [/mirror] ';
chomp($MIRRORPATH=<STDIN>);
if ($MIRRORPATH eq ""){ $MIRRORPATH = "/mirror";}
push (@zusammenfassung, "Im folgendem Ordner wird der Mirror Gespeichert: $MIRRORPATH\n");
print "Soll der User $MIRRORUSER angelegt werden [Y/n]";
chomp($USERINST=<STDIN>);
if ($USERINST eq "" || $USERINST eq "y" || $USERINST eq "Y"){ $USERINST="y";}
if ( $USERINST eq "y"){
push (@zusammenfassung, "\nDer Benutzer $MIRRORUSER wird angelegt. \n");
}else{
push (@zusammenfassung, "\nDer Benutzer $MIRRORUSER wird nicht angelegt. \n");
}
print "Soll die Gruppe $MIRRORGROUP angelegt werden [Y/n]";
chomp($GROUPINST=<STDIN>);
if ($GROUPINST eq "" || $GROUPINST eq "y" || $GROUPINST eq "Y"){ $GROUPINST="y";}
if ( $GROUPINST eq "y"){
push (@zusammenfassung, "Der Gruppe $MIRRORGROUP wird angelegt. \n\n");
}else{
push (@zusammenfassung, "Der Gruppe $MIRRORGROUP wird nicht angelegt. \n\n");
}
print 'In welchem vorhandenen Verzeichnis soll das Script "mirror" angelegt werden [/usr/local/bin]';
chomp($MIRRORSCRIPTPATH=<STDIN>);
if ($MIRRORSCRIPTPATH eq ""){ $MIRRORSCRIPTPATH = "/usr/local/bin";}
push (@zusammenfassung, "Im folgendem Ordner wird der Mirror Script erstellt: $MIRRORSCRIPTPATH\n");
if (! -d $MIRRORSCRIPTPATH){
print "\n\nWarnung: \nDas Verzeichnis zum installieren des Scriptes existiert nicht\n";
exit 1;
}
print 'Welcher Mirrorserver soll genutzt werden [ftp2.de.debian.org]';
chomp($MIRRORSERVER=<STDIN>);
if ($MIRRORSERVER eq ""){ $MIRRORSERVER = "ftp2.de.debian.org";}
push (@zusammenfassung, "Der Mirror wird mit folgenem Server aktualisiert: $MIRRORSERVER\n");
print 'In welchem Verzeichnis liegt der Mirror des Remoteservers [/debian] ';
chomp($MIRRORROOT=<STDIN>);
if ($MIRRORROOT eq ""){ $MIRRORROOT = "/debian";}
push (@zusammenfassung, "Das Mirrorverzeichnis auf dem Server: $MIRRORROOT\n");
#if [ ! $MIRRORROOT ]; then MIRRORROOT=/debian ; fi
#
print 'Welche Dists sollen runtergeladen werden [sarge,etch,sid] ';
chomp($MIRRORDISTS=<STDIN>);
if ($MIRRORDISTS eq ""){ $MIRRORDISTS = "sarge,etch,sid";}
push (@zusammenfassung, "Folgende Dists werden geruntergeladen: $MIRRORDISTS\n");
#if [ ! $MIRRORDISTS ]; then MIRRORDISTS="sarge,etch,sid" ; fi
#
print 'Welche Sektionen sollen runtergeladen werden [main,contrib,non-free] ';
chomp($MIRRORSECTION=<STDIN>);
if ($MIRRORSECTION eq ""){ $MIRRORSECTION = "main,contrib,non-free";}
push (@zusammenfassung, "Folgende Sektionen werden heruntergeladen: $MIRRORSECTION\n");
#if [ ! $MIRRORSECTION ]; then MIRRORSECTION="main,contrib,non-free" ; fi
#
print 'Ueber welches Protokoll soll runtergeladen werden http oder ftp [ftp] ';
chomp($MIRRORPROTO=<STDIN>);
if ($MIRRORPROTO eq ""){ $MIRRORPROTO = "ftp";}
push (@zusammenfassung, "Debmirror nutzt folgendes Protrokoll: $MIRRORPROTO\n");
#if [ ! $MIRRORPROTO ]; then MIRRORPROTO="ftp" ; fi
#
print 'Soll das Mirrorscript beim Cron eingetragen werden? [Y/n] ';
chomp($MIRRORCRON=<STDIN>);
if ($MIRRORCRON eq "" || $MIRRORCRON eq "y" || $MIRRORCRON eq "Y"){ $MIRRORCRON="y";}
if ( $MIRRORCRON eq "y"){
push (@zusammenfassung, "\nDas Script wird in den Cron eingetragen\n\n");
}else{
push (@zusammenfassung, "\nDas Script wird nicht in den Cron eingetragen\n\n");
}
print "\n\nZusammenfassung:\n\n";
print @zusammenfassung;
print "Sind alle Einstellungen korrekt, soll installiert werden? [Y/n] ";
chomp($STARTINSTALL=<STDIN>);
if ($STARTINSTALL eq "" || $STARTINSTALL eq "y" || $STARTINSTALL eq "Y"){
print "Beginne mit der Installation\n";
}else{
print "Breche ab\n";
exit 1;
}
print "\n\n Installiere Paket(e)\n";
if ( "$INSTALL" eq "y" ){
$ergebnis=system("apt-get install ${PAKET}");
$ergebnis=$ergebnis/256;
if ( $ergebnis != 0) {
print "Installation Fehlgeschlagen, breche ab!";
exit 1;
}
}
print "Lege Gruppe an\n";
if ( "$GROUPINST" eq "y" ){
$ergebnis=system("groupadd $MIRRORGROUP");
$ergebnis=$ergebnis/256;
if ( $ergebnis != 0) {
print "Anlegen der Gruppe ist fehlgeschlagen, breche ab!";
exit 1;
}
}
print "Lege User an\n";
if ( "$USERINST" eq "y" ){
$ergebnis=system("useradd -g $MIRRORGROUP -d $MIRRORPATH -c \"Debian Mirror\" $MIRRORUSER");
$ergebnis=$ergebnis/256;
if ( $ergebnis != 0) {
print "Anlegen der Gruppe ist fehlgeschlagen, breche ab!";
exit 1;
}
}
print "Lege das Mirror Verzeichnis an und importiere den GPG Key \n";
`mkdir -p ${MIRRORPATH}/debian/dists && cd ${MIRRORPATH}/debian/dists;
ln -s sarge stable;
ln -s etch testing;
ln -s sid unstable`;
`chown -R ${MIRRORUSER}:${MIRRORGROUP} ${MIRRORPATH}`;
`su ${MIRRORUSER} -c "gpg --import /usr/share/keyrings/debian-role-keys.gpg"`;
`su mirror -c "gpg --recv-keys 0x2D230C5F"`;
print "Installiere das mirror Script in ${MIRRORSCRIPTPATH} \n";
open(INSTALLSCRIPT, ">${MIRRORSCRIPTPATH}/mirror") or die "Kann Datei nicht finden";
print INSTALLSCRIPT << "EOF";
#!/bin/bash
MIRRORUSER=${MIRRORUSER}
MIRRORUID=\`cat /etc/passwd | grep \${MIRRORUSER}: | cut -d : -f 3\`
if [ ! \$UID -eq \$MIRRORUID ]; then
echo "Warnung: Dieses Script wird nicht vom user \$MIRRORUSER ausgefuerhrt"
echo "Warnung: Bitte per \"su \$MIRRORUSER -c mirror\" starten"
exit 1
fi
logger -t mirror[\$\$] Updating Debian Mirror
debmirror ${MIRRORPATH}/debian --progress --nosource --host=$MIRRORSERVER \\
--root=$MIRRORROOT --dist=$MIRRORDISTS --section=$MIRRORSECTION \\
--method=$MIRRORPROTO --arch=i386 --passive --postcleanup --getcontents #--ignore-release-gpg
logger -t mirror[\$\$] Finished Updating Debian Mirror
EOF
`chmod 700 ${MIRRORSCRIPTPATH}/mirror`;
`chown -R ${MIRRORUSER}:${MIRRORGROUP} ${MIRRORSCRIPTPATH}/mirror`;
if ( "$MIRRORCRON" eq "y" ){
print "Erzeuge Croneintrag zum Ausfuehren um 3:55 Uhr";
`echo "55 3 * * * [ -x ${MIRRORSCRIPTPATH}/mirror ] && ${MIRRORSCRIPTPATH}/mirror >/dev/null 2>&1" | crontab -u $MIRRORUSER -`
}
print << "EOF";
Installation abgeschlossen
INFO: Um den localen mirror zu benutzen, bitte
INFO: deb file:/mirror/debian/ sarge main non-free contrib
INFO: am Anfang der /etc/apt/sources.list eintragen
INFO: ggf. sarge mit etch oder sid austauschen...
EOF
Andreas Kraus lug@ak1301.de

