• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[FRAGEN ZU] sources.list automatisch erstellen/upgraden

hgw

Newbie
Vielen Dank für die Info jetzt habe ich auch eine Vorstellung was ich da mache :)

noch ne kleine Verständnissfrage: wenn dann die sources.list mit dem Script generiert wurde und nicht gewollte Quellen (in der apt-sorti.conf definiert) aus dem Beispielscript herausgenommen wurden und ich ein "apt update" fahre. Benutzt dann "apt" die generierte sources.list um aus den Quellen die entsprechenden Paketinfos zu saugen, um mir anschliesend eine neue Paketdatenbank mit entsprechenden Abhängigkeiten zu bauen. So das wenn ich das nächste mal apt install .... aufrufe aus diesen Quellen das richtige Paket zu gesagt wird....Richtig?

Grüße HG.

PS: ich nutze die von dir (pawe) in diesem threat gepostete abgleich.sh und die darüber gepostete apt-sorti.conf von asem....ist das OK
 

oc2pus

Ultimate Guru
hgw schrieb:
noch ne kleine Verständnissfrage: wenn dann die sources.list mit dem Script generiert wurde und nicht gewollte Quellen (in der apt-sorti.conf definiert) aus dem Beispielscript herausgenommen wurden und ich ein "apt update" fahre.....

apt verwendet die sources.list aus /etc/apt/sources.list !
d.h. wenn du die von dir überarbeitete sources.list nach /etc/apt kopiert hast, funktioniert das genauso wie du es dir vorstellst :)
 

pawe

Member
@oc2pus: ich vermute die generierte sources.list ist von abgleich.sh und nicht manuel. Sie wird ja schon nach /etc/apt/ kopiert.
Aber die Frage ist ein Bandwurmsatz. Ich habe sie etwas anders verstanden.
Die Frage war, ob die neuen Quellen gleich aktiv sind

Ich erkläre es an einem Beispiel:


dies ist deine sources list vor dem Abgleich:
Code:
ftp.gwdg.de (...) base
ftp.gwdg.de (...) update
nur zwei Einträge => so findest du nur die Pakete, die auch auf der DVD sind und deren Updates.

Wenn du jetzt ein "apt update" holt apt nur aus diesen Repositorys die Paketinformationen.

Nach abgleich.sh sieht deine Liste vielleicht so aus
Code:
ftp.gwdg.de base (...)
ftp.gwdg.de (...) update
ftp.gwdg.de (...) rpmkeys
ftp.gwdg.de (...) packman
(...)
#ftp.gwdg.de (...) usr-local-bin <== deaktiviert durch #
#ftp.gwdg.de (...) kernel-of-the-day <== deaktiviert durch #
Es sind Quellen hinzugekommen! Aber apt hat nur die Paket-Informationen von den ersten zwei! Wenn du jetzt was installieren willst, dann such apt folgendermaßen:
1. nur in den aktivierten Quellen
2. nur in den vorhanden Paketinformationen

Also folgt: erst ein apt update (wie du es ja auch geschrieben hattest), dann apt install. Dann werden, wie du vermutet hast, die neuen Quellen verwendet.

gruß pawe


hgw schrieb:
PS: ich nutze die von dir (pawe) in diesem threat gepostete abgleich.sh und die darüber gepostete apt-sorti.conf von asem....ist das OK
Das ist OK.
 

DemoFreak

Member
Nur mal so als Feedback am Rande: diese abgleich.sh ist einfach wunderbar. Hab das jetzt eben mal auf die Kiste geschmissen und in Gang gebracht: alles bestens. Zusammen mit der aptosmart.sh macht das richtig Spass jetzt. *g

Nun müsste sich nur noch einer finden, der daraus ein Rundumschlag-Tool bastelt, welches am besten noch eine in der sources.list bestehende Sortierung nicht durcheinanderbringt. Und nein, ehe einer auf mich zeigt :D, ich bin leider, was Shellprogrammierung anbelangt, ein Volltrottel.

Meinen Respekt und Dank nochmal allen Beteiligten. :)
 

Asem

Newbie
Hallo Clubber,

zwar ist dieser Thread zumindest nach IT-Maßstäben steinalt, aber ich habe mal wieder einige Änderungen (ich nenne sie sogar "Verbesserungen" ;)) an dem alten sorti-Script gemacht, und die möchte ich euch nicht vorenthalten.

Ich habe die Sache jetzt so umgebaut, dass das Script selber an beliebiger Stelle liegen kann (bei mir z. B. unter /usr/local/sbin/atp-fetch.sh) und sein Configfile unter /etc/apt/fetch.conf erwartet. Das finde ich logischer, als es immer in einem bestimmten Verzeichnis aufrufen zu müssen, in dem man dann auch noch Schreibberechtigung braucht.

Die Umbenennung in apt-fetch.sh resultiert rein aus meiner Vergesslichkeit, da ich mir `sorti` nie richtig merken konnte, sondern nur noch wusste, dass ich mal neue APT Repositories brauchte. Vorausgesetzt, der Installationspfad ist auch im PATH enthalten, genügt dann Eingabe von `apt` und zweimal <TAB> und dann klingelt's schon :). Aber das kann jeder halten wie er/sie möchte.

Ein paar Konfigurationseinstellungen sind aus dem Script in das Configfile gewandert, so dass man am Script selber eigentlich nichts mehr ändern muss, höchstens einen abweichenden Namen/Pfad für das Configfile selber.

Die Architektur der Maschine (i386 / x86_64) wird nun automatisch erkannt. Die Änderungen von Pawe und Mada sind natürlich auch enthalten. Bei mir läuft das ganze jetzt unter SuSE 10.1 / 64 Bit, sollte aber auch weiterhin für die älteren Versionen (9er evtl. 8er?) funktionieren..

Viel Spaß damit!
-- asem

/usr/local/sbin/apt-fetch.sh:
Code:
#!/bin/bash
###############################################################
#  Download von source-Listen fuer apt4rpm fuer SUSE unter    #
#  Verwendung der Konfiguration in /etc/apt/fetch.conf zur    #
#  Erstellung einer zur installierten OS-Version passenden    #
#  sources.list fuer apt-get                                  #
#       feel free to copy/modify/distribute                   #
#       07.2006 -- THX to Gobo, oc2pus, Asem, Pawe et.al.     #
###############################################################


CONFFILE="/etc/apt/fetch.conf"
export CONFFILE

. $CONFFILE

# jetzt lade die neue sources.list.FTP runter
wget "$SRCURL" -O "$FTPFILE"

retc=$?
if [ $retc -ne 0 ]; then        # Abbruch bei Fehler von wget
  echo "Fehler $retc beim Ausfuehren von wget! Keine Connection?"
  exit 1
fi


# Diese Funktion wird als root ausgeführt
filter () {

  . $CONFFILE

  if [ -s $LISTFILE ]; then
    mv -f $LISTFILE $LISTFILE.bak || ( echo "Fehler $? beim Archivieren von $LISTFILE ! Fehlende Rechte?" ; exit 2 )
  fi

  echo "# Erstellt am `date`" > $LISTFILE  # in die fertige /etc/apt/sources.list das Erstellungsdatum eintragen

  while read typ uri distri repos; do
    if echo "$typ" |grep -q '^[         ]*#'; then
      # Kommentare in File belassen
      echo "$typ $uri $distri $repos" >>$LISTFILE
    else
      # einzelne Repositories aufsplitten
      for repository in $repos; do
        # Repository deaktiviert?
        if exclude; then
          echo "# $typ $uri $distri $repository" >>$LISTFILE
        else
          # Repository schon bekannt?
          if grep -q '== "'$repository'"' $CONFFILE; then
            echo "$typ $uri $distri $repository" >>$LISTFILE
          else
            # Falls nicht, wird es dem Configfile hinzugefuegt
            echo "# $typ $uri $distri $repository" >>$LISTFILE
            sed -i "/return 1/i\
# Repository hinzugefügt am `date +%d.%m.%y`\\
  [ \"\$repository\" == \"$repository\" ] && return 0\\
" $CONFFILE
            echo -e "neues Repository: $repository\n"
          fi
        fi
      done
    fi
  done
  [ $DEBUG ] || rm -f $FTPFILE
}

# durch `su` wird eine neue Shell gestartet, deshalb Funktion exportieren
export -f filter

# .... verlange das root Passwort und rufe die filter Funktion auf mit sources.list.FTP als Eingabe
[ "`id -u`" -ne 0 ] && echo -n "Root "
exec su -c "filter <$FTPFILE"

#-eof-

/etc/apt/fetch.conf:
Code:
#########################################################
#       Konfigurationsdatei fuer apt-fetch.sh           #
#                                                       #
# zum entfernen eines Repositories aus der endgueltigen #
# sources-list einfach die # vor dem entsprechenden     #
# Eintrag ENTFERNEN !                                   #
# Voreinstellung ist fuer eine "sichere" Suse 9.2       #
# sources.list.                                         #
# Bitte vor Gebrauch GENAU durcharbeiten! Ich lehne     #
# jede Verantwortung fuer zerschossene Systeme ab.      #
#       feel free to copy and/or modify                 #
#               07.2006                                 #
#########################################################

SuSEVersion="`grep 'VERSION' /etc/SuSE-release | sed 's/VERSION = //'`"

# Falls FTP nicht funktioniert, koennen die Liste sowie die Pakete auch ueber
# HTTP bezogen werden. Dazu einfach die zweite SRCURL-Zeile einkommentieren.
SRCURL="ftp://ftp.gwdg.de/pub/linux/suse/apt/SuSE/$SuSEVersion-`uname -i`/examples/sources.list.FTP"
#SRCURL="http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/$SuSEVersion-`uname -i`/examples/sources.list.HTTP"

# Wenn ein Proxy benoetigt wird, muessen die Umgebungsvariablen
# ftp_proxy bzw. http_proxy gesetzt und exportiert werden. Entweder
# global ausserhalb dieses Scripts (z. B. in /etc/profile) oder hier.
#export ftp_proxy=http://<your.proxy.host>:<port>/
#export http_proxy=http://<your.proxy.host>:<port>/

FTPFILE="/tmp/sources.list.FTP"
LISTFILE="/etc/apt/sources.list"


exclude () {

#--------------
# rpm-src - alle Quellpakete
#--------------

  [ "$typ" == "rpm-src" ] && return 0

#--------------
# base - alle Daten die auch auf den CD's/DVD's vorhanden sind
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "base" ] && return 0

#--------------
# update und security - updates und sicherheitspatches wie vom YOU Update
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "update" ] && return 0
#  [ "$repository" == "security" ] && return 0

#--------------
# kde - nomen est omen ;-)
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "kde" ] && return 0

#--------------
# kde3-stable - auch klar
# vorhanden in 9.1, 9.2
#--------------

#  [ "$repository" == "kde3-stable" ] && return 0

#--------------
# kde-unstable - ACHTUNG - nicht fuer Anfaenger geeignet --> GEFAHR !!
# vorhanden in 9.0, 9.0-64, 9.1, 9.2
#--------------

  [ "$repository" == "kde-unstable" ] && return 0

#--------------
# gnome und gnome2 - sollte auch klar sein
# vorhanden in 9.0, 9.1
#--------------

#  [ "$repository" == "gnome" ] && return 0
#  [ "$repository" == "gnome2" ] && return 0

#--------------
# Mozilla mit seinen Modulen, Firefox, Thunderbird
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "mozilla" ] && return 0

#--------------
# samba3 ist ja wohl selbsterklaerend ;-)
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "samba3" ] && return 0

#--------------
# kernel-of-the-day - ACHTUNG - nicht fuer Anfaenger --> GEFAHR !!
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

  [ "$repository" == "kernel-of-the-day" ] && return 0

#--------------
# funktronics - perl-Module, python-Module, BitTorrent
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "funktronics" ] && return 0

#--------------
# misc - Verschiedenes - nicht unbedingt notwendig
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2
#--------------

  [ "$repository" == "misc" ] && return 0

#--------------
# packman, packman-i686 - xine, grafik,security, network, multimedia --> EMPFEHLENSWERT !!
# packman vorhanden in 9.0, 9.1 9.2, 9.2-64
# packman-i686 vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "packman" ] && return 0
#  [ "$repository" == "packman-i686" ] && return 0

#--------------
# rpmkeys - die Signaturen der RPMs von den Paketerstellen zur Verfuegung gestellt
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "rpmkeys" ] && return 0

#--------------
# security-prpm - Wer nicht weiss was es ist sollte es so lassen wie es ist !!
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------


  [ "$repository" == "security-prpm" ] && return 0

#--------------
# suse-people - Verschiedenes - ACHTUNG - nicht unbedingt sicher !!
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

  [ "$repository" == "suse-people" ] && return 0

#--------------
# suse-projects - apache, apache2, samba, php in der neuesten Version
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "suse-projects" ] && return 0

#--------------
# suser-gbv - Azureus, amule, xmule, postfix, gambas
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "suser-gbv" ] && return 0

#--------------
# suser-guru - inkscape,c++ bindings, gnome Module, phyton Module
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "suser-guru" ] && return 0

#--------------
# suser-oc2pus - BitTornado, GTorrentViewer, Applejuice, kwavencoder --> SEHR NUETZLICH !!
# vorhanden in 9.1, 9.2
#--------------

#  [ "$repository" == "suser-oc2pus" ] && return 0

#--------------
# suser-ollakka - alles fuer xfce4
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "suser-ollakka" ] && return 0

#--------------
# suser-rbos - alles was man fuer apt, apt4rpm, synaptic, kynaptic braucht
# vorhanden in 9.0, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

#  [ "$repository" == "suser-rbos" ] && return 0

#--------------
# suser-sbarnin - dvdauthor, kavi2svcd, libdvdcss etc.
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "suser-sbarnin" ] && return 0

#--------------
# suser-scorot - apollon, giFT, Video-Bearbeitung --> NUETZLICH ;-)
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "suser-scorot" ] && return 0

#--------------
# suser-tcousin - glabels, kile, kmymoney, pan, kompose
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "suser-tcousin" ] && return 0

#--------------
# update-drpm - Wer nicht weiss wofuer, FINGER WEG !!
# vorhanden in 9.2, 9.2-64
#--------------

  [ "$repository" == "update-drpm" ] && return 0

#--------------
# update-prpm - Wer nicht weiss wofuer, FINGER WEG !!
# vorhanden in 9.0, 9.0-64, 9.1, 9.1-64, 9.2, 9.2-64
#--------------

  [ "$repository" == "update-prpm" ] && return 0

#--------------
# wine - Windows Emulator
# vorhanden in 9.0, 9.1, 9.2
#--------------

#  [ "$repository" == "wine" ] && return 0

#--------------
# ximian -
# vorhanden in 9.0, 9.1, 9.2
#--------------

  [ "$repository" == "ximian" ] && return 0

#--------------
# xorg - die aktuelle X-Server Version
# vorhanden in 9.0, 9.1, 9.2, 9.2-64
#--------------

#  [ "$repository" == "xorg" ] && return 0

#--------------
# xfree86 - die aktuelle X-Server Version
# vorhanden in 9.0, 9.1
#--------------

#  [ "$repository" == "xfree86" ] && return 0

#--------------
# suser-imorris - spamassassin, mozilla, libxine, libdvdcss, cups, k3b, gimp
# vorhanden in 9.1-64, 9.2-64
#--------------

#  [ "$repository" == "suser-imorris" ] && return 0

#--------------
# labplot -
# vorhanden in 9.0, 9.1
#--------------

#  [ "$repository" == "labplot" ] && return 0

#--------------
# suser-jogley -
# vorhanden in 9.0, 9.1
#--------------

#  [ "$repository" == "suser-jogley" ] && return 0

#--------------
# suser-kpietrz - kplayer, jam
# vorhanden in 9.1
#--------------

#  [ "$repository" == "suser-kpietrz" ] && return 0

#--------------
# suser-tux - fwbuilder, kallery, kio, kplaylistcreator, nvu
# vorhanden in 9.1
#--------------

#  [ "$repository" == "suser-tux" ] && return 0

#--------------
# usr-local-bin - ACHTUNG - HOHES RISIKO das System zu zerstoeren
# vorhanden in 9.0, 9.1
#--------------

  [ "$repository" == "usr-local-bin" ] && return 0

#--------------
# suser-rschulz - apt, gdome2, lua
# vorhanden in 9.0
#--------------

#  [ "$repository" == "suser-rschulz" ] && return 0


  return 1
}

#-eof-

[EDIT]

mada hat das Package netterweise mal wieder auf seinem Uni-Server bereitgestellt:

http://www.informatik.uni-freiburg.de/~mader/computer/apt-fetch.tgz

[/EDIT]
 

oc2pus

Ultimate Guru
Asem schrieb:
zwar ist dieser Thread zumindest nach IT-Maßstäben steinalt, aber ich habe mal wieder einige Änderungen (ich nenne sie sogar "Verbesserungen" ;)) an dem alten sorti-Script gemacht, und die möchte ich euch nicht vorenthalten.

Gute Sachen sind NIE alt :mrgreen:
... und Verbesserungen sind immer willkommen!

oder "nothing is permanent ... except changes"
 
Wenn ich bei "SUSEVERSION" 10.1 einsetze, kann ich das Script dann auch für SuSE 10.1 nutzen, oder ist das zu gefährlich?! Oder funktioniert es nicht?

Jan
 

pawe

Member
eigentlich muss man diese Einstellung nicht ändern, es findet deine Version von SuSE selber heraus.
in Zeile:
Code:
SuSEVersion="`grep 'VERSION' /etc/SuSE-release | sed 's/VERSION = //'`"
wenn du
Code:
grep 'VERSION' /etc/SuSE-release | sed 's/VERSION = //'
in die Konsole eingibst, bekommst du als Ausgabe: 10.1

vielleicht irritiert dich die Aussage die Conf-Datei wäre für 9.2. Das bezieht sich lediglich auf die Repositorys, die dort enthalten sind. Bei 10.1 kann es sein, dass manche Repositorys aus der Liste nicht vorhanden sind und manche neu hinzugekommen sind. :wink:

Gruß pawe
 

Asem

Newbie
Jan@Bremen schrieb:
Wenn ich bei "SUSEVERSION" 10.1 einsetze, kann ich das Script dann auch für SuSE 10.1 nutzen, oder ist das zu gefährlich?! Oder funktioniert es nicht?
Jan

Wie ich schon sagte läuft das Script bei mir unter SuSE 10.1. Das Script erkennt die Version und Architektur deiner Maschine und findet auch neue Repositories für diese Version (vorausgesetzt, Mönk hat sie auf dem GWDG Server bereitgestellt) und bindet die dann automatisch in die apt-Konfiguration ein, aus Sicherheitsgründen aber erstmal deaktiviert. Wenn du solche Repositories dann nutzen möchtest, kommentierst du sie im Konfigfile einfach aus (das Konfigfile listet die Repositories, die *nicht* benutzt werden sollen) oder aktivierst sie direkt in der sources.list z. B. über synaptic. Letzteres hat nur den Nachteil, dass sie nach dem nächsten apt-fetch Lauf wieder deaktiviert sind.

Ansonsten kann das Script selber nicht viel Schaden anrichten. Es schreibt ja nur die sources.list für apt. Entscheidend ist, was du selbst dann aus dem Riesenhaufen an Software installierst.

-- asem
 

rethus

Advanced Hacker
Super script dein Asem,,, alle acht Pfund... :lol:
Wurde schon mal erwägt, dieses Script in das Standart-Apt-System mit einzupflegen?
 
Oben